第二届长城杯&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多平台发布

posted @ 2025-05-28 17:45  Lucifrix  阅读(59)  评论(0)    收藏  举报