2025年Solar应急响应公益月赛-5月 WP by z3nbyte
1、攻击者使用什么漏洞获取了服务器的配置文件?
桌面上有360浏览器和o2server和CrushFTP,o2server日志没什么东西,看CrushFTP的
这个看着很大,打开看看,发现关键点
攻击者利用 CrushFTP 的 WebInterface 进行了恶意操作,特别是通过 XML 数据修改用户权限并访问敏感目录。
攻击者 (user1@192.168.60.220) 通过 data_action:replace 修改了 user1 的权限配置:
<root_dir>/</root_dir> <!-- 将根目录设置为系统根目录 -->
<item name="/">(read)(view)(resume)</item> <!-- 赋予读取权限 -->
<item name="/C/">(read)(view)(resume)</item> <!-- 允许访问C盘 -->这使得 user1 可以访问整个文件系统,而不仅限于 FTP 目录。
遍历敏感目录
攻击者后续使用 getXMLListing 和 downloadAsZip 命令(在之前的日志中)下载了:
/Users/Administrator/Desktop/o2server/config/externalDataSources.json
/Users/Administrator/Desktop/o2server/config/token.json这个也比较大
攻击者 (user1@192.168.60.220) 使用 getXMLListing 命令遍历多个目录:
/Users/Administrator/Desktop/360SE/
/Users/Administrator/Application Data/
/Config.Msi/
/PerfLogs/
/Users/Administrator/Desktop/o2server/config/最终定位到 O2Server 配置文件路径:
/Users/Administrator/Desktop/o2server/config/externalDataSources.json
/Users/Administrator/Desktop/o2server/config/token.json下载配置文件
攻击者使用 downloadAsZip 命令打包下载:
command:downloadAsZip
paths::/Users/Administrator/Desktop/o2server/config/externalDataSources.json:/Users/Administrator/Desktop/o2server/config/token.json
zipName:archive.zip服务器返回 HTTP/1.1 200 OK,文件被成功下载。
攻击完成后注销会话
攻击者执行 logout 命令清理痕迹
因为攻击者使用了CrushFTP的WebInterface,所以在微信公众号搜索了一下:
第一个就是:flag{CVE-2025-31161}
2、攻击者C2服务器IP是什么?
使用常规的netstat已经看不到现在有外连了,直接翻日志,因为攻击者是在27日晚上23点20分左右攻击的,所以看日志就可以看到:
flag{156.238.230.57}
3、系统每天晚上系统都会卡卡的帮小明找到问题出在了那?
查看计划任务:
发现只有这个是在晚上,所以
flag{sqlbackingup}
4、恶意域名是什么?
承上启下,直接看这个计划任务:
vbs:
同目录下cmd:
所以
flag{b.oracleservice.top}
5、疑似是什么组织发动的攻击?
通过微步搜索该域名,就可以看到:
所以
flag{8220Gang}
6、开源项目-一道逆向题目
这道题直接打开的话源码是:
#include <iostream>
using namespace std;
int main() {
char buffer[100];
cin.getline(buffer, sizeof(buffer));
string a = "dnceyvjkq]kq]dcig]dnce";
for (int i = 0; a[i] != '\0'; i++) {
a[i] ^= 2;
}
if (strcmp(a.c_str(), buffer)) {
cout << "incorrect" << endl;
}
else {
cout << "incorrect" << endl;
}
}这样得出来的flag是:
flag{this_is_fake_flag}
所以通过翻源文件:
找到真实的:ConsoleApplication2.vcxproj
其中 PreBuildEvent 字段藏着一段巨大的 VBS 脚本注入行为,这是本题的核心!
<PreBuildEvent>
<Command>
...
echo base64Code = "JHRhcmdldCA9ICJMSERoMXgxemRJaVZTK2E1cVlK..."
...
wscript.exe "%vbsfile%"
del /q "%vbsfile%" >nul 2>&1
</Command>
</PreBuildEvent>项目在构建之前会偷偷写一个 .vbs 文件,这个 VBS 文件中会:
- 解密一段 base64 编码的 payload;
- 将其写入 PowerShell;
- 用 -EncodedCommand 执行。
Powershell还原:
$target = "LHDh1x1zdIiVS+a5qYJrBPb0ixqHTxd+uJ/3tckUdOqG+mn113E=";
$k = "FixedKey123!";
$d = [System.Text.Encoding]::UTF8.GetBytes((Read-Host "输入字符串"));
$s = 0..255;
$j = 0;
0..255 | % {
$j = ($j + $s[$_] + [byte]$k[$_ % $k.Length]) % 256;
$s[$_], $s[$j] = $s[$j], $s[$_];
};
$i = $j = 0;
$r = @();
$d | % {
$i = ($i + 1) % 256;
$j = ($j + $s[$i]) % 256;
...这段代码明显是 RC4 加密解密逻辑:
- $target 是一串被加密的字符串;
- $k = "FixedKey123!" 是密钥;
- $d 是用户输入的一串字符串,会被转成字节流;
- 然后执行典型的 RC4 初始化和加解密过程;
- 最后会判断用户输入的内容是否与 $target 解密结果一致。
RC4解密后:
flag{rqweripqwe[rqwe[rjqw[eprjqweprij}
解密脚本:
import base64
from Crypto.Cipher import ARC4
def decrypt_flag(b64_ciphertext, key):
encrypted_bytes = base64.b64decode(b64_ciphertext)
cipher = ARC4.new(key.encode())
decrypted = cipher.decrypt(encrypted_bytes)
return decrypted.decode(errors='ignore')
if __name__ == "__main__":
ciphertext = "LHDh1x1zdIiVS+a5qYJrBPb0ixqHTxd+uJ/3tckUdOqG+mn113E="
key = "FixedKey123!"
flag = decrypt_flag(ciphertext, key)
print("解密结果:", flag)
京公网安备11010802044340号