前言
本文部分引用合天网安实验室微信文章,原文链接:如何安全快速地部署多道 ctf pwn 比赛题目 (qq.com)
我们平时见到的多数PWN题,是采用动态端口,动态flag,这种形式在一定程度上减少了比赛中py的数量。即便有,也是思路py,而不是直接传递flag,提升了py的门槛。但有时受限于环境及服务器负担原因,被迫采用静态端口的PWN也不在少数比如pwnable.tw以及星盟的challenge (eonew.cn)
2022年的招新便是如此,由于疫情被迫线上上课,线上安排比赛,无法使用校内的服务器资源。受限于自身服务器的性能,只好采取如此下策(但还好只是招新,11月的DUTCTF希望能有好点的资源/(ㄒoㄒ)/~~)
🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘
🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘
幸运的是找到了合天在2018年创建的项目pwn_depoly_chroot
,可以非常方便的搭建多个静态题目,且比较安全,用于这种小型比赛以及普通的训练题库都非常合适。
pwn_depoly_chroot项目介绍
一次可以部署多个题目到一个
docker
容器中自动生成 flag,并备份到当前目录(不过需注意是静态的flag)
基于
xinted + docker + chroot
利用 python 脚本根据 PWN 的文件名自动化地生成 3 个文件:
pwn.xinetd
,Dockerfile
和docker-compose.yml
在 /bin 目录,利用自己编写的静态编译的
catflag
程序作为/bin/sh
,这样的话,system("/bin/sh")
实际执行的只是读取 flag 文件的内容,完全不给搅屎棍任何操作的余地默认从 10000 端口监听,多一个程序就 +1,起始的监听端口可以在
config.py
配置,或者生成pwn.xinetd 和 docker-compose.yml
后自己修改这两个文件
环境配置
1 | #安装docker |
使用教学
只需要 3 步:
- 将所有 pwn 题目放入 bin 目录(注意名字不带特殊字符,因为会将文件名作为 linux 用户名)
- python initialize.py
- docker-compose up –build -d
详细操作:
- 将你要部署的 pwn 题目放到 bin 目录
这个项目已经将一个程序 copy 了 3 份作为示例,注意文件名不要含有特殊字符,文件名建议使用字母,下划线,横杆和数字,当然全字母的当然最好了
1 | root@instance-1:~/pwn_deploy_chroot# ls bin/ |
- 运行 initialize.py
运行脚本后会输出每个 pwn 的监听端口,
1 | root@instance-1:~/pwn_deploy_chroot# python initialize.py |
文件与端口信息,还有随机生成的 flag 默认备份到 flags.txt
1 | root@instance-1:~/pwn_deploy_chroot# cat flags.txt |
- 启动环境
请使用 root 用户执行命令
1 | docker-compose up --build-d |
不出意外,题目就启动起来了
1 | root@instance-1:~/pwn_deploy_chroot# netstat -antp | grep docker |
我们测试一下 pwn1,看看效果
可以看到,虽然执行的是 system("/bin/sh")
,但是实际功能只是输出 flag,这样就非常安全了
另外
如有二次开发意愿或想了解更多详细内容,可自行查看开头的文章链接或github项目链接,内有部分关键代码讲解