环境分析

这里使用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文件。这种命名方式文件一眼判定出是人为编写的。

第二届长城杯&CISCN半决赛-应急响应

使用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{md5}

在找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 = [
    0x3D0x010x200x3A0x360x580x3A0x360x1D0x010x5A,
    0x360x3A0x5A0x0A0x3B0x5A0x1D0x360x0F0x050x290x0E
]                              # 23 bytes at 0x4BEFFD

flag = bytes(b ^ 0x69 for b in data)  # 与 0x69 异或
print(flag.decode())

flag{ThIS_1S_th3_S3cR3t_fl@g}