首页
关于
友链
Search
1
设备部署-NIDS入侵检测系统-Snort&Suricata
5 阅读
2
从方法重写到SQL注入-信呼OA审计
5 阅读
3
CVE-2025-11001
4 阅读
4
设备部署-HIDS入侵检测系统-Elkeid&Wazuh
4 阅读
5
Web入侵分析入口思路
3 阅读
蓝队
应急响应
设备部署
二进制
基础
代码审计
基础理论
实践分析
登录
Search
标签搜索
学习笔记
蓝队
应急响应
代码审计
设备部署
内存马查杀
IDS
漏洞复现
JumpServer
HFish
雷池WAF
HIDS
Snort
Suricata
NIDS
Yara规则识别样本
ELK日志分析系统
Rookit查杀
容器应急
docker
N0va7
累计撰写
31
篇文章
累计收到
1
条评论
首页
栏目
蓝队
应急响应
设备部署
二进制
基础
代码审计
基础理论
实践分析
页面
关于
友链
搜索到
25
篇与
的结果
2025-09-04
二进制入门基础
环境准备Ubuntu 虚拟机/VPS建议在Ubuntu上配置调试环境,便于后续GDB+pwndbg 调试。配置环境安装编译与运行依赖apt update && apt install -y \ build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm \ libncurses5-dev libncursesw5-dev xz-utils tk-dev \ libffi-dev liblzma-dev libnss3-dev uuid-dev \ libgmp-dev autoconf bison libyaml-dev \ libgdbm-dev libdb-dev libgdbm-compat-dev lrzsz \ python-openssl git gdb gcc-multilib # 启用32位兼容运行环境 dpkg --add-architecture i386 apt update && apt install -y libc6:i386 lib32z1 安装 Python 虚拟环境curl https://pyenv.run | bash # 添加环境变量 ~/.bashrc 或 ~/.zshrc export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init --path)" eval "$(pyenv init -)" source ~/.bashrc pyenv install 3.9.5 pyenv virtualenv 3.9.5 pwnenv pyenv activate pwnenv 安装 Ruby + PWN 辅助工具git clone https://github.com/rbenv/rbenv.git ~/.rbenv export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build rbenv install 3.2.6 rbenv global 3.2.6 gem install one_gadget seccomp-tools 什么是PWN?PWN 原指“own”(控制、攻破)的俚语变体,最初出现在黑客文化中。后被 CTF(Capture The Flag)竞赛广泛使用,用来指代利用程序二进制漏洞实现控制、提权、信息泄露等攻击手段的一类题型。PWN ≈ 利用二进制程序漏洞控制程序流程核心手段:栈溢出、格式化字符串、堆溢出、UAF、整数溢出等最终目标:执行恶意代码或泄露敏感数据常见术语现在不懂没关系,不需要有压力,当作了解即可程序如何来的?我们知道计算机的可执行程序是通过编译器编译出来的,但是我们并不了解它更深层次的相关内容。他的大致流程如下图:高级语言(比如C语言) -> 汇编代码 -> 机器码(二进制数据) -> 可执行程序其中,编译器(如gcc)将高级语言编译成汇编语言,汇编器和链接器将这些内容变为二进制的可执行文件可执行文件类型我们最常见的可执行文件无非就是Windows平台上的exe程序了,除了这种,还有哪些呢?Windows.dll:动态链接库.lib:静态链接库.exe:可执行文件Linux.so:动态链接库.a:静态链接库.out(或无后缀):可执行文件程序运行原理程序从硬盘加载进内存后,由操作系统将控制权交给程序入口点(如 _start ),然后开始执行。这个_start 等会就会提到,一般程序的入口点都是这个_start 。第一个程序分析实践使用一个简单的 test.c ,结合 objdump 反汇编,观察编译后的机器码结构。#include <stdio.h> int main(){ int a=10; int b=20; int c=a+b; printf("%d+%d=%d\n", a, b, c); return 0; } 编译32位可执行程序gcc -m32 test.c -o test通过objdump查看反汇编objdump -d test如果没有汇编的基础的话,你会发现这啥玩意,完全看不懂,没关系,接下来就一步一步来了解关键观察点.text 段:代码逻辑部分,包含main.plt/.got :动态链接跳转表,涉及函数调用如 printf_start -> main :程序的入口跳转关系call:调用函数add:两数相加mov:类似于赋值的意思在 C 语言中,我们习惯将 main 视为程序入口,但实际上:操作系统加载 ELF 可执行文件后,会首先跳转到 _start 符号(对应汇编中的 000003e0 <_start>),这是链接器(ld)默认设置的入口点。_start 的核心任务是:初始化运行环境(如栈对齐)、准备 main 的参数,最终调用 __libc_start_main(C 标准库函数),由它间接启动 main。这里面从__libc_start_main转到main比较复杂,所以我们先默认调用__libc_start_main即为转到main这时候我们观察一下mian函数的整体,发现基本都是我们看不懂的汇编代码,不过还是有几个入手的地方的比如说printf应该就是调用printf函数的,那么在两数相加应该就在printf之前了那么ecx和edx基本就是10和20了,那到底谁才是10和20呢?继续向前观察发现存在mov赋值在我们看不懂的情况下,我们要知道谁是10,谁是20其实很简单,10=0xa,20=0x14。现在其实就很明显了,10被赋值到-0x14(%ebp)这个地方,然后-0x14(%ebp)又被赋值给了%ecx,所以%ecx就是10,那么另一个%edx就是20了那现在其实我们就基本捋清楚脉络了,但是上面的内容都是我们自己的猜测,接下来我们得去验证我们的猜测GDB调试分析验证猜测在Linux中,可以采用的调试工具有好几个,但是这次我们采用GDB这个工具来帮助我们进行调试输入help可以查看帮助命令,但是命令并不是全部,需要全部命令的话得自己去看文档https://linuxtools-rst.readthedocs.io/zh-cn/latest/tool/gdb.html调试gdb test # 调试可执行程序 run # 直接运行break main # 在main函数处下断点可以看到已经成功停到这个断点的地方了,我们可以查看对应的反汇编来确认disassemble main # 查看指定函数的汇编代码基本一致,说明我们这时候确实到了main函数这个位置到了main函数的位置,那么我们就得确定我们之前的猜测是否正确了,先下断点到哪呢?先下断点到这个地址,我们先看看ecx是否真的为10,edx是否真的为20break *main+48 # 在对应偏移下断点 next # 继续运行到下一个断点,可以简写为n info register ecx # 打印寄存器ecx的值,可以简写为i r ecx可以看到确实为10,edx也确实是20那么我们去下另一个位置的断点,来看看-0x14(%ebp)是否为10呢?break *main+35x/i $pc # 查看当前行的指令 x/d $ebp-0x14 # 十进制查看内存单元的值 x 命令(检查内存)支持多种格式,格式符如下: d:十进制x:十六进制(默认)u:无符号十进制s:字符串c:字符此时我们基本能验证,我们上面的猜测是正确的了,但是别忘了,我们学习这些知识是为了什么?为了pwn,所以我们至少得改点东西意思意思值修改修改哪个地方呢?在ecx和edx相加之前修改吗?我们可以尝试一下set $ecx = 800我们确实成功修改了ecx的值,但是输出不正确啊,这是为啥?我们知道函数调用的参数需要压入栈中调用,观察红色第一部分,可以发现edx被存到-0xc(%ebp)中,接下来就和-0x10(%ebp)、-0x14(%ebp)一起被push进栈中,所以这时候结果正确,但是表达式不正确,因为-0x10(%ebp)、-0x14(%ebp)这俩我们没改到那么知道什么地方错了之后,我们就可以针对性进行修改了,我们知道要从源头开始修改,所以,我们要改的地方就是-0x14(%ebp)set *(int*)($ebp-0x14) = 800(int*):将上述地址强制转换为 “指向 int 类型的指针”(告诉 GDB 该地址存储的是 int 数据)。*:解引用指针,即访问该指针指向的内存单元(获取或修改该地址存储的实际值)。至此修改成功将输出换成其他字符串既然我们可以修改传入栈中的值,那么我们能否改变printf输出的字符串呢?先看一个例子def printf(a, b): print(a, b)可以看到这个函数会传入参数,而参数就是通过push到栈传递的,同时他是先进后出push a push b call printf这时候就是printf(b, a)那么我们的源程序是printf("%d+%d=%d\n", a, b, c),这时候我们只要找到"%d+%d=%d\n"这个参数就行了一共是4个参数,根据先进后出的原则,基本可以确定就是定位到这里基本可以定位是edx了,但是注意上一段代码,edx是从eax的某个偏移内存地址获取到的,所以我们要从源头出发进行修改lea -0x19d8(%eax),%edx ; edx = eax - 0x19d8 等价set {char[14]}($eax-0x19d8) = "Hello World!\n" # char数组要计算出字符串的位数,记得还得算上末尾的\0一位此时就已经成功修改了system执行替换既然上面我们已经学会了如何替换传入的参数,那么如果我们的代码变成这样呢?#include <stdio.h> #include <stdlib.h> int main(){ int a=10; int b=20; int c=a+b; printf("%d+%d=%d\n", a, b, c); system("whoami"); return 0; }那是不是我们只要分析出来system传入的是哪个参数,我们就可以实现任意的命令执行?gcc -m32 test2.c -o test2 objdump -d test2定位到此处之后,我们可以发现对应传入的字符串地址通过gdb进行动态调试break main break *main+87接下来直接修改对应的源地址$ebx-0x198a即可set {char[3]}($ebx-0x198a)="id"无system函数调用那么当我们回到最初的代码,我们还能调用system来实现命令执行吗?#include <stdio.h> int main(){ int a=10; int b=20; int c=a+b; printf("%d+%d=%d\n", a, b, c); return 0; }先在main函数处打上断点,然后run到main函数处暂停(如果不这么做的话,因为system函数在libc中,而libc是程序运行时才动态加载的,不运行查看不到)此时查看system函数的内存地址info functions system此时我们已经得到了system函数的地址,这时候我们只需要将要执行的命令以及call的地址进行替换即可要执行的命令替换很简单,直接断点打到+68的偏移,然后将eax-0x19d8的内容修改即可替换call的地址为system函数的地址0xf7e243d0set {char[5]}0x56555564={0xe8,0xd0,0x43,0xe2,0xf7}发现程序无法正常运行,看起来我们没法直接调用system函数的地址,但是经过之前几次的尝试,我们其实发现了寄存器eax、edx他们都能存储地址,如果我们将system函数的地址存储在寄存器中,再去call寄存器呢?set {char[7]} 0x56555564 = {0xb8,0xd0,0x43,0xe2,0xf7,0xff,0xd0}可以看到对应输入的二进制会对应到汇编代码为0xb8,0xd0,0x43,0xe2,0xf7 ==> mov $0xf7e243d0,%eax 0xff,0xd0 ==> call *%eax0xb8,0xd0,0x43,0xe2,0xf7 对应 mov $0xf7e243d0,%eax操作码(第 1 字节 0xb8): x86 指令集中,0xb8 是专门用于 “将 32 位立即数传送到 eax 寄存器” 的操作码,格式为: 0xb8 + 4字节立即数 → mov $立即数, %eax立即数(后 4 字节 0xd0,0x43,0xe2,0xf7): 这 4 字节按 小端字节序 存储,转换为 32 位数值为 0xf7e243d0:小端字节序要求 “低字节存低地址”,因此内存中 0xd0(低字节),0x43,0xe2,0xf7(高字节) 对应的数值是 0xf7e243d0。完整对应: 0xb8(操作码) + 0xd0,0x43,0xe2,0xf7(立即数) → 汇编为 mov $0xf7e243d0, %eax,即 “将 0xf7e243d0 写入 eax 寄存器”。0xff,0xd0 对应 call *%eax操作码(第 1 字节 0xff): 0xff 是 x86 中的 “通用操作码”,具体功能由第 2 字节(ModR/M 字节)决定,可表示 “调用、跳转、加 1” 等操作。ModR/M 字节(第 2 字节 0xd0): ModR/M 字节是 x86 指令中用于指定操作数(寄存器或内存)的编码,0xd0 的二进制是 11010000,拆分后:高 2 位(11):表示 “操作数是寄存器(而非内存)”;中间 3 位(010):表示 “寄存器编号 2”(对应 eax,x86 寄存器编码中 eax 对应编号 0,但此处因特殊编码);低 3 位(000):配合 0xff 操作码,表示 “调用(call)” 操作。完整对应: 0xff(操作码) + 0xd0(ModR/M 字节) → 汇编为 call *%eax,即 “间接调用 eax 寄存器指向的地址”。最终成功实现命令执行疑问为什么不调用system函数,不包含stdlib.h也可以实现system函数的调用执行呢?程序动态链接 libc 时,整个 libc 库(包含其中的所有函数,如 printf、system 等)会被映射到进程内存中,无论程序是否显式调用这些函数。因此,只要 libc 被动态链接(默认情况如此),即使程序没包含任何头文件,也能通过地址直接调用 system 函数(例如汇编层面的 call 指令)。printf 和 system 都是 libc 的一部分,动态链接 libc 是整体加载该库,而非只加载被调用的函数。因此,只要 `printf` 能被调用(说明 `libc` 已动态链接),`system` 必然存在于进程内存中,理论上可被调用。 头文件(如 stdlib.h)仅影响编译阶段的语法检查,与运行时 system 是否存在于内存无关。当然了,如果你编译的时候选择静态编译的话,那么只会导入程序需要的东西,那样就不会导入system了gcc -m32 --static test.c -o test
2025年09月04日
1 阅读
0 评论
0 点赞
2025-09-03
设备部署-雷池WAF&HFish&JumpServer
雷池WAFSafeLine,中文名 "雷池",是一款简单好用, 效果突出的Web应用防火墙(WAF),可以保护Web服务不受黑客攻击。防护以下安全问题:SQL 注入、XSS、代码注入、命令注入、CRLF注入、ldap注入、xpath注入、RCE、XXE、SSRF、路径遍历、后门、暴力破解、CC、爬虫等攻击。环境搭建安装雷池操作系统:LinuxCPU 指令架构:x86_64, arm64CPU 指令架构:x86_64 架构需要支持 ssse3 指令集软件依赖:Docker 20.10.14 版本以上软件依赖:Docker Compose 2.0.0 版本以上最低资源需求:1 核 CPU / 1 GB 内存 / 5 GB 磁盘bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"添加站点docker run --name webgoat -d -p 8080:8080 -p 9090:9090 registry.cn-shanghai.aliyuncs.com/kubesec/webgoat:v2023.8 修改Linux本地hosts文件和Windows本地hosts文件8.218.45.142 www.test-waf.com主要功能展示JumpServer堡垒机JumpServer是广受欢迎的开源堡垒机,是符合4A规范的专业运维安全审计系统。帮助企业以更安全的方式管控和登录所有类型的资产,实现事前授权、事中监察、事后审计,满足等保合规要求。环境搭建在线安装 - JumpServer 文档curl -sSL https://github.com/jumpserver/jumpserver/releases/download/v3.10.17/quick_start.sh | bash 主要功能展示其实他就是简单的管理资产的工具/平台而已,里面存放着很多资产的账号密码以及相关的管理信息,所以红队会重点攻击它,而蓝队要重点保护它此处添加了一台主机上去展示,可以看到是能连接的此处可以看到账号列表,我们添加资产的时候就会填写账号密码,这边就有集成所有的账号密码其他的功能也没什么了,基本就是这些点我们需要了解HFishHFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的能力。环境搭建反制溯源_欺骗防御_主动防御-HFish免费蜜罐平台bash <(curl -sS -L https://hfish.net/webinstall.sh) 登陆链接:https://[ip]:4433/web/ 账号:admin 密码:HFish2021 主要功能展示
2025年09月03日
3 阅读
0 评论
0 点赞
2025-09-02
设备部署-HIDS入侵检测系统-Elkeid&Wazuh
前言上一篇介绍了两款开源的NIDS,这篇就介绍两款开源的HIDSElkeidElkeid 是一款可以满足 主机,容器与容器集群,Serverless 等多种工作负载安全需求的开源解决方案,源于字节跳动内部最佳实践。服务器配置:4C8G环境部署Elkeid 完整部署GitHub - bytedance/Elkeid: Elkeid is an open source solution that can meet the security requirements of various workloads such as hosts, containers and K8s, and serverless. It is derived from ByteDance’s internal best practices.# 从release下载的是分卷的镜像,需要先合并镜像 wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_image_v1.9.1.tar.gz.00 wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_image_v1.9.1.tar.gz.01 wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_image_v1.9.1.tar.gz.02 wget https://github.com/bytedance/Elkeid/releases/download/v1.9.1.4/elkeidup_image_v1.9.1.tar.gz.03 cat elkeidup_image_v1.9.1.tar.gz.* > elkeidup_image_v1.9.1.tar.gz #导入镜像 docker load -i elkeidup_image_v1.9.1.tar.gz docker run -d --name elkeid_community \ --restart=unless-stopped \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -p 8071:8071 -p 8072:8072 -p 8080:8080 \ -p 8081:8081 -p 8082:8082 -p 8089:8080 -p 8090:8090\ --privileged \ elkeid/all-in-one:v1.9.1仅可以使用局域网IP,不要使用 127.0.0.1 或者 hostname 或者公网IPdocker exec -it elkeid_community bash cd /root/.elkeidup/ # 命令为交互式 ./elkeidup public {ip}#172.25.23.117 ./elkeidup agent init ./elkeidup agent build ./elkeidup agent policy create # 查看登录密码 cat ~/.elkeidup/elkeid_passwd主要功能资产探针目前好像只支持内网下载客户端去连接稍微等待一会就会出现客户端主机成功连接上来了基线检测病毒扫描入侵检测WazuhWazuh 是一个免费、开源和企业级的安全监控解决方案,用于威胁检测、完整性监控、事件响应和合规性。Wazuh由部署到受监视系统的端点安全代理和管理服务器组成,管理服务器收集和分析代理收集的数据。此外,Wazuh已与Elastic Stack完全集成,提供了搜索引擎和数据可视化工具,使用户可以浏览其安全警报。Wazuh提供的功能包括日志数据分析,入侵和恶意软件检测,文件完整性监视,配置评估,漏洞检测以及对法规遵从性的支持。https://github.com/wazuh环境部署-虚拟机直接部署Virtual Machine (OVA) - Installation alternativesuser: root password: wazuhtimedatectl set-timezone Asia/Shanghai参考使用【干货】开源安全平台Wazuh的部署与体验
2025年09月02日
4 阅读
0 评论
0 点赞
2025-09-02
设备部署-NIDS入侵检测系统-Snort&Suricata
IDS是什么IDS分两类,一种是NIDS(NetWork Instruction Detection System),一种是HIDS(Host Instruction Detection System)基于主机的入侵检测系统(HIDS)–该系统将检查网络中计算机上的事件基于网络的入侵检测系统(NIDS)–该系统将检查您网络上的流量恶意问题。本篇就来介绍两个开源的NIDS系统:Snort和SuricataSnort一个开源的网络入侵检测系统(IDS)和入侵防御系统(IPS),它可以捕获通讯流量并对其做协议解析,识别或防御通讯流量中可疑或恶意的行为。国内大部分厂商基于流量的IDS的数据包捕获、协议解析、检测引擎等关键模块都是在此基础上做修改和扩展优化。官网地址:Snort - Network Intrusion Detection & Prevention SystemSnort3环境搭建sudo apt-get update && sudo apt-get dist-upgrade -y sudo apt-get install -y libpcap-dev libpcre3-dev libdumbnet-dev zlib1g-dev sudo apt-get install -y build-essential autotools-dev libdumbnet-dev libluajit-5.1-dev libpcap-dev zlib1g-dev pkg-config libhwloc-dev cmake liblzma-dev openssl libssl-dev cpputest libsqlite3-dev libtool uuid-dev git autoconf bison flex libcmocka-dev libnetfilter-queue-dev libunwind-dev libmnl-dev ethtoolsudo dpkg-reconfigure tzdatamkdir ~/snort_src cd ~/snort_srccd ~/snort_src wget https://github.com/rurban/safeclib/releases/download/v02092020/libsafec-02092020.tar.gz tar -xzvf libsafec-02092020.tar.gz cd libsafec-02092020.0-g6d921f ./configure make sudo make install安装HyperscanSnort 3使用Hyperscan进行快速模式匹配。可以从Ubuntu存储库安装一个旧版本的Hyperscan,但是Hyperscan对Snort的操作和性能至关重要,最好编译Hyperscan的最新稳定版本。Hyperscan有一个需求数量,包括PCRE、gper工具、ragel和Boost库。cd ~/snort_src/ wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz tar -xzvf pcre-8.45.tar.gz cd pcre-8.45 ./configure make sudo make installcd ~/snort_src wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2.9.1.tar.gz tar -xzvf gperftools-2.9.1.tar.gz cd gperftools-2.9.1 ./configure make sudo make installcd ~/snort_src wget http://www.colm.net/files/ragel/ragel-6.10.tar.gz tar -xzvf ragel-6.10.tar.gz cd ragel-6.10 ./configure make sudo make installcd ~/snort_src wget https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gz tar -xvzf boost_1_78_0.tar.gzcd ~/snort_src wget https://github.com/intel/hyperscan/archive/refs/tags/v5.4.0.tar.gz tar -xvzf v5.4.0.tar.gz mkdir ~/snort_src/hyperscan-5.4.0-build cd hyperscan-5.4.0-build/ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBOOST_ROOT=~/snort_src/boost_1_78_0/ ../hyperscan-5.4.0 make sudo make install安装flatbufferscd ~/snort_src wget https://github.com/google/flatbuffers/archive/refs/tags/v2.0.0.tar.gz -O flatbuffers-v2.0.0.tar.gz tar -xzvf flatbuffers-v2.0.0.tar.gz mkdir flatbuffers-build cd flatbuffers-build cmake ../flatbuffers-2.0.0 make sudo make install安装DAQ安装数据采集库(DAQ),Snort3使用的数据采集卡与Snort 2.9.0系列不同cd ~/snort_src # 可以根据自身下载最新的库 wget https://github.com/snort3/libdaq/archive/refs/tags/v3.0.5.tar.gz tar -xzvf v3.0.5.tar.gz cd libdaq-3.0.5 ./bootstrap ./configure make sudo make installsudo ldconfig最后源码安装Snort 3如果对启用其他编译时功能感兴趣,例如处理大型(超过2GB)PCAP文件的能力,或者新的命令行shell:运行./configure cmake.sh--帮助列出所有可选功能,并将它们附加到下面的./configure\u cmake.sh命令中。在Snort网站上查看Snort3的更新版本cd ~/snort_src wget https://github.com/snort3/snort3/archive/refs/tags/3.1.20.0.tar.gz tar -xzvf 3.1.20.0.tar.gz cd snort3-3.1.20.0 ./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc cd build make sudo make install /usr/local/bin/snort -V使用默认配置文件测试Snrotsnort -c /usr/local/etc/snort/snort.lua减少IDS的数据包eth0是我要监听的网卡,根据自己的网卡设置# 检查这些接口的large-receive-o load(LRO)和generic-receive-offload(GRO)的状态,使用ethtool检查状态 sudo ethtool -k eth0 | grep receive-offloadsudo vi /lib/systemd/system/ethtool.service##内容,输入以下信息 [Unit] Description=Ethtool Configration for Network Interface [Service] Requires=network.target Type=oneshot ExecStart=/sbin/ethtool -K eth0 gro off ExecStart=/sbin/ethtool -K eth0 lro off [Install] WantedBy=multi-user.targetsudo systemctl enable ethtool sudo service ethtool start创建一些配置Snort策略的文件夹sudo mkdir /usr/local/etc/rules sudo mkdir /usr/local/etc/so_rules/ sudo mkdir /usr/local/etc/lists/ sudo touch /usr/local/etc/rules/local.rules sudo touch /usr/local/etc/lists/default.blocklist sudo mkdir /var/log/snortsudo vim /usr/local/etc/rules/local.rulesalert icmp any any -> any any (msg:"ICMP Traffic Detected"; sid:10000001;rev:1;)/usr/local/etc/snort/snort.luasnort -c /usr/local/etc/snort/snort.lua -A alert_fast -i eth0 -l /var/log/snort/ -R /usr/local/etc/rules/local.rulesSnort运行帮助snort [-options] <filter options>Options: -A 设置报警模式 Set alert mode: fast, full, console, test or none (alert file alerts only) "unsock" enables UNIX socket logging (experimental). -b 以tcpdump格式记录Log包,用该格式速度快 Log packets in tcpdump format (much faster!) -B <mask> 使用CIDR掩码混淆警报和包转储中的IP地址 Obfuscated IP addresses in alerts and packet dumps using CIDR mask -c <rules> 指定snort配置文件所在的路径,如 `snort -c /etc/snort/snort.conf` Use Rules File <rules> -C 只打印带有字符数据的有效负载(没有十六进制) Print out payloads with character data only (no hex) -d 显示应用层数据 Dump the Application Layer -D 在后台(守护进程)模式下运行Snort Run Snort in background (daemon) mode -e 显示数据链路层头部信息 Display the second layer header info -f 在二进制日志写之后,不进行fflush()调用 Turn off fflush() calls after binary log writes -F <bpf> 读取伯克利包过滤器文件 Read BPF filters from file <bpf> -g <gname> 指定运行snort的组 Run snort gid as <gname> group (or gid) after initialization -G <0xid> Log Identifier (to uniquely id events for multiple snorts) -h <hn> 指定snort.conf里面定义的变量HOME_NET的值。对于-l -B一起使用且运行模式为IDS时,不能更改HONE_NET Set home network = <hn> (for use with -l or -B, does NOT change $HOME_NET in IDS mode) -H Make hash tables deterministic. -i <if> 监听<if>指定的网络接口 Listen on interface <if> -I 将网络接口名添加到警报输出中 Add Interface name to alert output -k <mode> 检验模式 Checksum mode (all,noip,notcp,noudp,noicmp,none) -K <mode> 日志模式 Logging mode (pcap[default],ascii,none) -l <ld> 指定日志存储的目录 Log to directory <ld> -L <file> 记录日志到指定的文件中 Log to this tcpdump file -M 将消息记录到syslog,不包含警报消息 Log messages to syslog (not alerts) -m <umask> Set umask = <umask> -n <cnt> 接收到<cnt>指定的包数后退出snort Exit after receiving <cnt> packets -N 关闭日志记录(报警仍然会记录) Turn off logging (alerts still work) -O 混淆已记录的IP地址 Obfuscate the logged IP addresses -p 禁用混杂模式嗅探 Disable promiscuous mode sniffing -P <snap> 设置snort的抓包截断长度,默认为1514 Set explicit snaplen of packet (default: 1514) -q 退出程序时,屏幕不显示初始化信息和最后的汇总统计信息 Quiet. Don't show banner and status report -Q 以内联模式运行 Enable inline mode operation. -r <tf> 读取并处理指定的tcpdump文件(snort的二进制日志文件) Read and process tcpdump file <tf> -R <id> Include 'id' in snort_intf<id>.pid file name -s 将警报消息记录到syslog Log alert messages to syslog -S <n=v> 设置规则文件的变量n的值为v Set rules file variable n equal to value v -t <dir> Chroots process to <dir> after initialization -T 测试并报告当前Snort的配置是否有问题 Test and report on the current Snort configuration -u <uname> 初始化后以<uname>用户的身份运行snort Run snort uid as <uname> user (or uid) after initialization -U 使用UTC作为时间戳 Use UTC for timestamps -v 终端显示打印 Be verbose -V 显示snort版本 Show version number -X 从链路层开始存储原始数据包数据 Dump the raw packet data starting at the link layer -x 如果Snort出现配置问题,则退出 Exit if Snort configuration problems occur -y 在警报和日志文件中包含年份时间戳 Include year in timestamp in the alert and log files -Z <file> 设置预处理器文件路径和名称 Set the performonitor preprocessor file path and name -? 显示snort详细用法 Show this information <Filter Options> are standard BPF options, as seen in TCPDump Longname options and their corresponding single char version --logid <0xid> Same as -G --perfmon-file <file> Same as -Z --pid-path <dir> Specify the directory for the Snort PID file --snaplen <snap> Same as -P --help Same as -? --version Same as -V --alert-before-pass Process alert, drop, sdrop, or reject before pass, default is pass before alert, drop,... --treat-drop-as-alert 在启动期间将drop、sdrop和reject规则转换为警报规则 Converts drop, sdrop, and reject rules into alert rules during startup --treat-drop-as-ignore Use drop, sdrop, and reject rules to ignore session traffic when not inline. --process-all-events Process all queued events (drop, alert,...), default stops after 1st action group --enable-inline-test Enable Inline-Test Mode Operation --dynamic-engine-lib <file> 加载指定动态检测引擎 Load a dynamic detection engine --dynamic-engine-lib-dir <path> 从指定目录中加载所有动态引擎 Load all dynamic engines from directory --dynamic-detection-lib <file> 加载指定动态规则库 Load a dynamic rules library --dynamic-detection-lib-dir <path> 从指定目录中加载所有动态规则库 Load all dynamic rules libraries from directory --dump-dynamic-rules <path> Creates stub rule files of all loaded rules libraries --dynamic-preprocessor-lib <file> 加载指定动态预处理器库 Load a dynamic preprocessor library --dynamic-preprocessor-lib-dir <path> 从指定目录中加载所有动态预处理器库 Load all dynamic preprocessor libraries from directory --dynamic-output-lib <file> 加载指定动态输出库 Load a dynamic output library --dynamic-output-lib-dir <path> 从指定目录中加载所有动态输出库 Load all dynamic output libraries from directory --create-pidfile Create PID file, even when not in Daemon mode --nolock-pidfile Do not try to lock Snort PID file --no-interface-pidfile Do not include the interface name in Snort PID file --disable-attribute-reload-thread 不创建一个线程来重新加载属性表 Do not create a thread to reload the attribute table --pcap-single <tf> Same as -r. --pcap-file <file> 指定要读取的pcaps文件名称 file that contains a list of pcaps to read - read mode is implied. --pcap-list "<list>" 指定要读取的pcaps文件列表,通过空格分隔 a space separated list of pcaps to read - read mode is implied. --pcap-dir <dir> 递归查找pcaps的目录,即指定目录,该目录下的pcaps文件都将被读取 a directory to recurse to look for pcaps - read mode is implied. --pcap-filter <filter> filter to apply when getting pcaps from file or directory. --pcap-no-filter reset to use no filter when getting pcaps from file or directory. --pcap-loop <count> this option will read the pcaps specified on command line continuously. for <count> times. A value of 0 will read until Snort is terminated. --pcap-reset if reading multiple pcaps, reset snort to post-configuration state before reading next pcap. --pcap-reload if reading multiple pcaps, reload snort config between pcaps. --pcap-show print a line saying what pcap is currently being read. --exit-check <count> Signal termination after <count> callbacks from DAQ_Acquire(), showing the time it takes from signaling until DAQ_Stop() is called. --conf-error-out Same as -x --enable-mpls-multicast Allow multicast MPLS --enable-mpls-overlapping-ip Handle overlapping IPs within MPLS clouds --max-mpls-labelchain-len Specify the max MPLS label chain --mpls-payload-type Specify the protocol (ipv4, ipv6, ethernet) that is encapsulated by MPLS --require-rule-sid Require that all snort rules have SID specified. --daq <type> 选择数据包采集模块(默认为pcap) Select packet acquisition module (default is pcap). --daq-mode <mode> 选择数据采集(DAQ)操作模式 Select the DAQ operating mode. --daq-var <name=value> 指定额外的DAQ变量 Specify extra DAQ configuration variable. --daq-dir <dir> 指定DAQ库文件路径 Tell snort where to find desired DAQ. --daq-list[=<dir>] 列出可用的数据包采集模块。默认是静态模块。 List packet acquisition modules available in dir. Default is static modules only. --dirty-pig 关机时不要刷新数据包并释放内存 Don't flush packets and release memory on shutdown. --cs-dir <dir> Directory to use for control socket. --ha-peer Activate live high-availability state sharing with peer. --ha-out <file> 将高可用性事件写入此文件 Write high-availability events to this file. --ha-in <file> 在启动(warm-start)时从该文件中读取高可用性事件 Read high-availability events from this file on startup (warm-start). --suppress-config-log Suppress configuration information output.Snort规则编写Snort 3 Rule Writing Guide - Snort 3 Rule Writing GuideSnort的响应机制alert:警报并记录(适用于需要立即采取行动的情况下)pass:忽略(适用于明确允许的流量,不进行检测)log:记录(适用于需要记录流量但不采取其他行动的情况下)activation:报警并启动另一个动态规则链dynamic:由其他activate动作的规则调用,在正常情况下,他们不会被用来检测包。一个动态规则仅能被一个"activate"动作激活。Snort规则组成规则头(Rule Header)和规则选项(Rule Options)组成Snort规则规则头定义了流量匹配的基本信息,如协议、源和目的地址、端口等。规则选项则包含了更详细的检测条件和响应动作。规则头规则头的基本格式如下:<action> <protocol> <src_ip> <src_port> -> <dst_ip> <dst_port>action:规则动作,常见的有alert(报警)、log(记录日志)、pass(通过)等。protocol:协议类型,如TCP、UDP、ICMP等。src_ip:源IP地址,可以是具体的IP,也可以是CIDR表示法的网段,还可以使用any表示任何地址。src_port:源端口号,可以是具体端口号,也可以使用any表示任何端口。dst_ip:目的IP地址,含义同src_ip。dst_port:目的端口号,含义同src_port。示例规则头:alert tcp any any -> 192.168.1.0/24 80当检测到任何源IP和源端口的TCP流量进入192.168.1.0/24网段的80端口时,触发报警规则选项规则选项,由一系列键值对组成,使用分号分隔。其格式如下:<key>:<value>常见的规则选项包括:msg:报警信息。sid:规则ID,必须唯一。rev:规则版本号。content:匹配数据包中的内容。depth:指定从数据包开始的位置进行匹配。offset:指定匹配的起始位置。nocase:忽略大小写。classtype:分类类型,用于描述规则的性质。示例规则选项:(msg:"Potential SQL Injection"; sid:1000001; rev:1; content:"' or '1'='1"; nocase;)这个就是当数据包中出现' or '1'='1的内容时(无论大小写)触发Potential SQL Injection的告警信息,版本号为1完整示例规则:alert tcp any any -> any 80 (msg:"Potential SQL Injection"; sid:1000001; rev:1; content:"' or '1'='1"; nocase;)其他示例规则SQL注入攻击警告:alert tcp any any -> any 80 (msg:"Possible SQL Injection"; content:"' OR 1=1 --"; http_uri; nocase; sid:10000000123; rev:1;)永恒之蓝特征警告:alert smb any any -> $HOME_NET any (msg:“ET EXPLOIT Possible ETERNALBLUE MS17-010”; flow:to_server,established; content:”|00 00 00 31 ff|SMB|2b 00 00 00 00 18 07 c0|”; depth:16; fast_pattern; content:”|4a 6c 4a 6d 49 68 43 6c 42 73 72 00|”; distance:0; flowbits:set,ETPRO.ETERNALBLUE; flowbits:noalert; classtype:trojan-activity; sid:2024220; rev:1;)参考文章Snort规则 - 鱼儿叁 - 博客园Snort命令行参数详解-CSDN博客Snort的使用二:入侵检测与规则编写_snort规则的应用-CSDN博客Ubuntu22.04安装Snort3并进行网络流量异常检测 - Jikefan - 博客园手写规则检测SQLMAP工具SQLMAP工具流量特征发现UA存在sqlmap关键字编写规则alert tcp $EXTERNAL_NET any -> $HOME_NET [80,443,8080] ( msg:"SQLi Attack - Potential sqlmap Activity Detected"; flow:to_server,established; content:"User-Agent"; http_header; content:"sqlmap", nocase; http_header; metadata:service http; reference:url,github.com/sqlmapproject/sqlmap; classtype:web-application-attack; sid:1000001; rev:1; )特定端口通讯警告alert tcp any 7799 -> any any (msg:"SNORT:visit destport tcp 7799"; sid:201900001; rev:1;)Suricata一个开源的网络入侵检测系统(IDS)和入侵防御系统(IPS),它可以捕获通讯流量并对其做协议解析,识别或防御通讯流量中可疑或恶意的行为。国内大部分厂商基于流量的IDS的数据包捕获、协议解析、检测引擎等关键模块都是在此基础上做修改和扩展优化。项目地址https://github.com/OISF/suricata操作手册2. 快速入门指南 — Suricata 7.0.0-dev 文档环境搭建sudo apt-get install software-properties-common sudo add-apt-repository ppa:oisf/suricata-stable sudo apt-get update sudo apt-get install suricata配置ip addrsudo vim /etc/suricata/suricata.yaml有许多可能的配置选项,我们将重点放在 HOME_NET 变量和网络接口配置。这个 HOME_NET 在大多数情况下,变量应该包括被监视接口的IP地址和正在使用的所有本地网络。默认值已经包括RFC1918网络。172.26.237.55/20 eth0Suricata规则下载入侵检测平台https://github.com/al0ne/suricata-rulesGitHub - ptresearch/AttackDetection: Attack Detection入侵检测之流量分析--suricata规则库来源梳理suricata-update日志文件suricata.log:包含 Suricata 运行时的日志信息,如启动、关闭、规则加载等,用于故障排除和监视。stats.log:包含 Suricata 的统计信息,如流量统计、规则匹配统计等,,用于性能调优和网络活动分析。fast.log:就是告警输出日志了,通常看这个就可以。eve.json:详细的事件记录,以 JSON 格式呈现,包括有关规则匹配事件的详细信息,包括协议解析、源和目标地址、端口、负载数据等,用于深入分析cat /var/log/suricata/fast.log规则检测suricata -c /etc/suricata/suricata.yaml -i eth0 -s /etc/suricata/rules/suricata.rulessuricata -c /etc/suricata/suricata.yaml -i eth0 -s /etc/suricata/rules/Behinder3.rules 自写规则安全运营-Suricata规则学习alert http any any -> any any (msg:"通达OA-handle.php-SQL注入漏洞"; content:"share/handle.php"; http_uri; content:"select"; content:"and"; reference:url,http://example.com/2023-15672; classtype:web-application-attack; sid:20240908; rev:1;) alert http any any -> any any (msg:"sqlmap tools attack"; flow:to_server; content:"User-Agent: sqlmap"; http_header; sid:1000016; rev:1;)alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:"SSLBL: Malicious SSL certificate detected (CobaltStrike C&C)"; tls.fingerprint:"6e:ce:5e:ce:41:92:68:3d:2d:84:e2:5b:0b:a7:e0:4f:9c:b7:eb:7c"; reference:url, sslbl.abuse.ch/ssl-certificates/sha1/6ece5ece4192683d2d84e25b0ba7e04f9cb7eb7c/; sid:902202003; rev:1;) alert tls $EXTERNAL_NET any -> $HOME_NET any (msg:"ET HUNTING Suspicious Empty SSL Certificate - Observed in Cobalt Strike"; flow:established,to_client; tls.cert_subject; bsize:25; content:"C=, ST=, L=, O=, OU=, CN="; endswith; fast_pattern; classtype:targeted-activity; sid:2023629; rev:7; metadata:affected_product Any, attack_target Client_Endpoint, created_at 2016_10_24, deployment Perimeter, performance_impact Low, signature_severity Major, updated_at 2024_03_27;)集成系统镜像-securityonion集成snort/suricata、bro(zeek)、elk、ossec等Security Onion Solutions两者对比其实按照安装成本和操作的简易程度来说,Suricata相对于Snort3来说更加容易上手,Snort3的安装太过麻烦,建议使用Suricata
2025年09月02日
5 阅读
0 评论
0 点赞
2025-09-01
应急响应-工具-ELK日志分析系统与Yara规则识别样本
ELK日志分析系统Elasticsearch:用于存储收集到的日志信息Logstash:用于收集日志,SpringBoot应用整合了Logstash以后会把日志发送给Logstash,Logstash再把日志转发给ElasticsearchKibana:通过Web端的可视化界面来查看日志很多日志分析的应用都不够全面,ELK解决了很多不完善的地方,是蓝队日志分析的一个好工具,是一个外国的产品,在系统下搭建很麻烦,很容易出错,如果只是日常使用,方便了解,建议在docker下搭建,如果是实战,建议在系统下搭建,毕竟docker只是个虚拟容器。环境搭建使用的Docker镜像sebp/elk:793注意该容器使用的内存大约在2.1G左右服务器需要安装Docker、Docker-compose这个镜像是Elasticsearch、Logstash、Kibana集成容器镜像,使用docker或者docker-compose启动后各个组件就会启动成功apt update apt install docker apt install docker-compose # 设置一个进程可以拥有的VMA(虚拟内存区域)的数量 sysctl -w vm.max_map_count=262144 # 使上个命令立即生效 sysctl -p 如果有出现vm.max_map_count = 262144说明设置成功vim docker-compose.yml # 文件内容 version: "3.5" services: elk: image: sebp/elk:7.12.0 volumes: - ./elk/02-beats-input.conf:/etc/logstash/conf.d/02-beats-input.conf environment: ES_JAVA_OPTS: -Xms512m -Xmx512m ports: #Kibana 网络界面 - "5601:5601" # Elasticsearch JSON 接口 - "9200:9200" # Logstash Beats 接口 - "5044:5044"在docker-compose.yml文件目录下创建elk文件夹,创建Logstash配置文件02-beats-input.conf#进入elk目录 cd elk #创建并编辑02-beats-input.conf文件 vi 02-beats-input.confinput { tcp { port => 5044 codec => json_lines } } output{ elasticsearch { hosts => ["localhost:9200"] index => "beat-%{+YYYY.MM.dd}" } }docker-compose up -d elk上传日志文件解析特定部署采集分析恶意样本Yara分析Yara工具地址GitHub - VirusTotal/yara: The pattern matching swiss knife恶意样本库GitHub - ytisf/theZoo: A repository of LIVE malwares for your own joy and pleasure. theZoo is a project created to make the possibility of malware analysis open and available to the public.相关开源的检测规则GitHub - Yara-Rules/rules: Repository of yara ruleshttps://github.com/JerryLinLinLin/Huorong-ATP-Ruleshttps://github.com/m-sec-org/d-eyes/tree/master/yaraRules规则分类Antidebug_AntiVM:反调试/反沙箱类yara规则Crypto:加密类yara规则CVE_Rules:CVE漏洞利用类yara规则email:恶意邮件类yara规则Exploit-Kits:EK类yara规则Malicious_Documents:恶意文档类yara规则malware:恶意软件类yara规则Mobile_Malware:移动恶意软件类yara规则Packers:加壳类yara规则utils:通用类yara规则Webshells:Webshell类yara规则检测范围样本文件内存数据网络流量Yara规则开发参考文章YARA规则与办公安全:高效检测策略Yara规则内容支持字符串、正则表达式、十六进制进行匹配特征规则:字符串:定义一个变量 $a = "字符串内容"正则表达式:定义一个变量 $a = /正则表达式内容/十六进制:定义一个变量 $a = {十六进制内容}条件规则:and:与 or:或 not:非all of them:所有条件匹配即告警any of them:有一个条件匹配即告警$a and $b and $c:abc同时匹配即告警($a and $b) or $c:匹配a和b或c即告警Yara规则常用修饰符:nocase:不区分大小写base64:base64字符串xor:异或字符串wide:宽字符如何进行特征提取通过多个样本的对比来找出共同点特征通过分析协议、文件头等来找出特征实例展示利用已知规则测试识别挖矿、勒索、C2、WebShellyara64.exe rules\malware_index.yar -r example利用已知规则测试识别算法yara64.exe rules\crypto_index.yar -r example利用已知规则测试识别加壳yara64.exe rules\packers_index.yar -r example利用已知规则测试识别反沙箱yara64.exe rules\antidebug_antivm_index.yar -r example自写规则识别恶意软件-测试(并不能进行实际识别)rule xmrig_find : miner { meta: author = "ElmWhite" date = "2025-02-20" strings: $hex = {4D 5A} $a = "stratum" $b = "xmrig" $c = "pool" condition: all of them } 自写规则识别内存马rule mem_find : memshell { meta: author = "ElmWhite" date = "2024-09-05" strings: $a = "org.apache.coyote.type.MapLikeType" $b = "org.apache.coyote.deser" $c = "org.apache.coyote.exc" condition: ($a and $b) or $c }yara64.exe rules\mem_find.yar PID
2025年09月01日
3 阅读
0 评论
0 点赞
1
2
3
4
5