1.pwn题目
题目预设条件:
官方给了一个ctf用户给我们,并且用一个root权限的守护进程去监听一个给定的端口,并且会不断以test用户启动名为game的服务(题目)。ctf用户可以直接使用
su test
切换到test用户。
这样一个环境可以用这样一条命令去完成:
sudo socat tcp4-listen:2019,fork exec:"sudo -u test ./game"
#注:后面的game服务最好写绝对路径, sudo -u test xxxx 可以以test用户来执行某条命令xxxx
-
kill -9 -1
这条命令可以杀掉当前用户下面的所有进程,当然也就可以把不死马杀掉了。
有些时候,在awd ctf比赛中,对方可能会给你种一个不死马,这个不死马会把除了它自身以外的所有进程全部杀掉,同时会进行flag上传,通过修改crontab定时任务自动进行木马的上传,并且不断fork自己,让有时候ps aux 都看不到自己,以此来达到隐藏自己的目的。
这样的马一旦中上,不仅题目会挂掉,而且自己会使得用户的bash都无法su 到这个服务用户。(因为会被马不断杀进程)
在这种情况下,是不是感觉会一筹莫展呢?毕竟连那个用户都不能切换了,想 kill -9 -1
都不行了啊。
你这时候会想,是不是可以用sudo -u test kill -9 -1
去杀掉马呢?
很遗憾,这样的方式大多数是不可行的,因为你当前的ctf用户很可能不支持sudo -u
这个权限。
这个时候,我们再回想一下,守护进程不是可以一直地监听端口,然后不断地fork服务么?这就相当于即使木马不断kill掉服务,它依然会被不断地重启。
这种情况下我们就可以有一种骚操作了,我们先把/bin/bash给复制成与服务同名,覆盖掉原来的服务。(当然原来的服务肯定要先备份),大概就是下面三条命令就可以完成了:
cp /bin/bash ./game
echo "kill -9 -1" | nc 127.0.0.1 2019
这条命令类似于直接把kill -9 -1给发送过去,一旦fork game(实际是bash),接着就会执行 kill -9 -1命令。这样就会在不死马把game(实际是bash)杀掉之前先把 test 用户的所有进程 kill 掉。这样一来,因为不死马也是test权限运行的,也被杀掉了。最后只要把备份好的服务重新替换回来就正常了。
除此以外,直接把kill -9 -1这条shell命令的功能写入到二进制文件,并且复制替换掉原来的服务,这样只要nc连接一下就可以执行kill -9 -1。当然,事先需要修改一下这个文件的权限,不然test用户就无法执行了。
网友评论