0%

2025长城杯半决赛笑传之Check Check Backdoor

被干爆😇

本来以为是出得史,赛后复现的时候发现搞错了,这题很有意思,而且远比想的要深得多,这里我诚恳反思,老实了

这题就得了个IP的分,确实不应该,第一是因为当时去做其他题去了,第二是确实也没想到它能出这种内核层面的题目

用户态的几种隐藏方式我都还是比较熟悉的,但是内核是一点没接触过.我感觉一般来说到内核水平的隐藏基本可以归类为APT了

而且一般来说内核在CTF/AWD也比较少见,因为基本都是docker/lxc环境,要是打内核很容易搞坏环境

像这次半决赛就是,环境坏了要向裁判申请才能重置,本来时间就很短,等重置完黄花菜都凉了

总的来说就是题做少了,对这种应急响应不熟

赛后复现

磁盘构建

这道题好就好在给个镜像,赛后复现很方便,其他题目基本都忘干净了

首先要把之前那个镜像先转换一遍,方便使用vmware workstation来起

1
2
3
root@local-vm:~/ctf/CISCN2025# qemu-img convert -f raw -O vmdk dd.img dd.vmdk
root@local-vm:~/ctf/CISCN2025# ls
dd.img dd.vmdk dd.zip

然后直接配置好虚拟机,磁盘选择转换好的vmdk即可,其他参数随便配

当然也可以用qemu来跑这个虚拟机,但是要配置网络和传文件什么的过于麻烦,所以直接用vmware比较好

f_000014

随后使用ubuntu/admin_123456登录,修改/etc/netplan配置ip,方便使用ssh连接

我的ip是3.3.3.3/24,你可以更换为合适自己vmware配置的局域网

image-20250426013754772

随后即可通过ssh连接,我通过sftp传了unhide上去 (这里也是一个要反思的点,赛前居然没有准备unhide等工具)

image-20250426013812798

找到这个进程,系统自带的ps确实找不到,但是file和md5sum又可以找到,就是这个无疑了 但是问题在于不知道其使用的是什么原理来隐藏的

这里我又把静态编译的ps传上去看了,也找不到这个进程,所以肯定不是LD_PRELOAD,那就只能往内核模块上面想了

做pwn的师傅看了看内核模块,也看了/proc/kallsyms没看出什么问题 我也没看出什么端倪,感觉可能也是被隐藏了,这题肯定没表面说的这么简单

这个题给的是一个dd的raw磁盘,pwn师傅用qemu跑起来了,但是也没有找到什么有用的信息

赛后我照着GPT的教程:

1
2
kpartx -av /path/to/converted-image.img
mount /dev/mapper/loop0p1 /mnt/forensic

用kpartx和mount挂载了磁盘,在/lib/systemd下确实是找到了那个ELF,但是对应的内核模块没有找到

能想到的也就只有用暴力搜索关键字找文件了

1
2
root@local-vm:/mnt/CISCN2024-forensic# grep 'systemd-agentd' -nr ./lib/modules/5.4.0-84-generic/kernel/
grep: ./lib/modules/5.4.0-84-generic/kernel/drivers/system/system-upgrade.ko: 匹配到二进制文件

那应该就是这个内核模块没错了

找出进程

/home/ubuntu/.viminfo当时这个文件被我忽略了,我只检查了.bash_history之类的,赛后来才发现这里面实际上是有提示的

这个system-upgrade.service会被隐藏起来,所以即使检查了/etc/systemd/system也没法看到

image-20250426013834819

查看这个systemd服务后就可以找到对应的内核模块了,经过逆向看出是一个HIDEME模块

image-20250426013857498

模块逆向

模块函数名做了混淆,但不影响逆向

这里下面有个的systemd-agentd等关键字,大概率是和这个有关系

image-20250426013926901

后面经过逆向✌来看,他说他三分钟就逆出来密钥,至此这个题也没有什么秘密了

总结

题目总的来说出得是很有意思的,至少比很多脑洞题要好.

这次没做出来确实是忽略了很多细节,不然分可以再涨,干道前五不是问题

不过好的是其他题拿分都很多,所以后面渗透的排名最终定在12名,决赛是进了

偷偷出网

这个是一个经典,当时赛后我去virustotal上查了一下,发现有人在比赛过程中就偷偷出网丢到virustotal上扫描了

在浙江赛区我当时测试了,确实是开了屏蔽器没有信号的,不知道是不是其他赛区的管理问题了

(检查于03/17 12:10)

image-20250426013956051