第二届长城杯&CISCN半决赛-应急响应
第二届长城杯&CISCN半决赛-应急响应
环境分析
这里使用R-Studio
工具分析。
在Root目录中没有文件,再来看看非root用户中
有一个Ubuntu的用户
靶机远程连接使用history
,发现并没有什么历史记录。
也没有可疑的对外连接。
看看网卡信息,就只有两张网卡。
这里我怀疑是木马程序Hook了内核,隐藏了进程和网络连接。
使用tcpdump监听一下eth0网卡
不知道是不是容器环境的问题,这里监听的IP都没有与题目环境相关的IP。
也尝试过使用监听脚本。。。但似乎与静态分析镜像文件IP并不相符。
#!/bin/bash
INTERFACE="${1:-eth0}"
[ "$(id -u)" -ne 0 ] && { echo "请使用root权限运行"; exit 1; }
echo "监控本机外向TCP连接($INTERFACE):[时间] 本机IP:端口 → 目标IP:端口"
echo "按Ctrl+C停止"
echo "---------------------------------------------------------------"
tcpdump -i "$INTERFACE" -n -t -l tcp 2>/dev/null | awk '
BEGIN {
cmd = "ip -o addr show dev \"'"$INTERFACE"'\" | awk '\''$3 == \"inet\" {split($4, a, \"/\"); print a[1]}'\''"
cmd | getline local_ips
close(cmd)
split(local_ips, ips, " ")
}
{
if (match($0, /IP ([0-9.]+)\.([0-9]+) > ([0-9.]+)\.([0-9]+)/, m)) {
for (i in ips) {
if (m[1] == ips[i]) {
conn = sprintf("[%s:%s → %s:%s]", m[1], m[2], m[3], m[4])
if (!seen[conn]++) {
"date +\"%Y-%m-%d %H:%M:%S\"" | getline now
print "[" now "] " conn
fflush()
}
break
}
}
}
}'
题目1:找出主机上木马回连的主控端服务器IP地址[不定时(3~5分钟)周期性],并以flag{MD5}形式提交,其中MD5加密目标的原始字符串格式IP:port。
进来Home -> Ubuntu目录下,看到一个名称为1.txt
文件。这种命名方式文件一眼判定出是人为编写的。
使用wget
命令在某个网站中下载某个文件。
这似乎给了我们一些提示:看到了flag
字眼,后面紧跟着下载文件。
全局搜索一下,发现并没有搜到有此文件存在。
再来看看.viminfo
文件内容,里面大量记录了/etc/systemd/system/system-upgrade.service
对这个文件的编辑,发现这个文件有system-upgrade
字眼,这不就是我们从1.txt
文件里面分析的吗?
简单的解释一下.viminfo
这个文件:
viminfo 文件的主要作用是帮助用户保持编辑会话的连续性。当用户退出 Vim 时,许多有用的信息(如命令历史、搜索历史、寄存器内容等)可能会丢失。然而,通过 viminfo 文件,这些信息可以被保存下来,并在用户下次启动 Vim 时自动恢复。
根据给出的路径也是找到了这个配置文件。
根据配置文件中,执行指向的地址是/sbin/insmod /lib/modules/5.4.0-84-generic/kernel/drivers/system/system-upgrade.ko
找到了此文件,发现是一个可执行的文件。
放入云沙箱中检查是一个木马文件。
用IDA打开,对木马程序进一步剖析。在第三个函数中找到了疑似连接地址,现在找哪一个才是回连主控的端口号。
这是8080端口函数跟进,走的是udp协议。
这个是4948端口的函数跟进,走的是tcp协议,使用md5加密尝试提交。
flag{59110f555b5e5cd0a8713a447b082d63}
题目2:找出主机上驻留的远控木马文件本体,计算该文件的MD5, 结果提交形式: flag
在找IP地址和端口的时候就已经发现有个函数包含了两个文件。
把名字翻译一下,很可疑啊,下面那个upgrade能看出是更新程序。
来到R-Studio里,直接全局搜索systemd-agentd
放进云沙箱里帮助我们分析一下,是木马文件。
猜想这个就是木马文件本体了。
certutil -hashfile .\systemd-agentd MD5
flag{bccad26b665ca175cd02aca2903d8b1e}
题目3:找出主机上加载远控木马的持久化程序(下载者),其功能为下载并执行远控木马,计算该文件的MD5, 结果提交形式:flag{MD5}。
此文件放入IDA中分析,发现有一个函数叫download_and_execute
,不就是下载并执行的意思吗?送分题。
根据函数中的代码分析,使用wget去下载某个文件输出到/tmp
目录下,随后就是使用chmod
赋予执行权限。
flag{78edba7cbd107eb6e3d2f90f5eca734e}
题目4:查找题目3中持久化程序(下载者)的植入痕迹,计算持久化程序植入时的原始名称MD5(仅计算文件名称字符串MD5),并提交对应flag{MD5}。
其实在第一题中有分析过,还记得1.txt
文件写的内容吗?
wget命令下载一个木马更新文件
这个文档也被删除过,所以断定这就是痕迹。
flag{9729aaace6c83b11b17b6bc3b340d00b}
题目5:分析题目 2 中找到的远控木马,获取木马通信加密密钥, 结果提交形式:flag
对木马本体systemd-agentd
进行分析
打开字符串子视图,发现/proc/self/exe
调用
这里不是很懂汇编,交给GPT分析一下
判定通信核心处在sub_40641D这里,怀疑unk_4BEFFD
是密钥。
交叉引用查询进一步追踪。
看出来是一个异或的算法。
将unk_4BEFFD
的十六进制数据提取出来。
data = [
0x3D, 0x01, 0x20, 0x3A, 0x36, 0x58, 0x3A, 0x36, 0x1D, 0x01, 0x5A,
0x36, 0x3A, 0x5A, 0x0A, 0x3B, 0x5A, 0x1D, 0x36, 0x0F, 0x05, 0x29, 0x0E
] # 23 bytes at 0x4BEFFD
flag = bytes(b ^ 0x69 for b in data) # 与 0x69 异或
print(flag.decode())
flag{ThIS_1S_th3_S3cR3t_fl@g}
本文由mdnice多平台发布