一开始接触pwn的时候,我们要么本地调试,要么自己用socat将程序启动起来远程调试
最近去搞pwn培训,发现将pwn题一个一个部署起来还是比较繁琐,除了权限还要考虑其他东西
后来一顿搜索,看看有无别人的解决方案,发现一个xinted + docker的方案:
https://github.com/Eadom/ctf_xinetd
但是对于这个我发现了一些缺点:
于是我根据自己需要,写了一个项目:https://github.com/giantbranch/pwn_deploy_chroot
# 安装docker
curl -s https://get.docker.com/ | sh
# 安装 docker compose 和git
apt install docker-compose git
# 下载
git clone https://github.com/giantbranch/pwn_deploy_chroot.git只需要3步:
下面给下详细操作:
1、将你要部署的pwn题目放到bin目录
我的项目已经将一个程序copy了3分作为示例,注意文件名不要含有特殊字符,文件名建议使用字母,下划线,横杆和数字,当然全字母的当然最好了
root@instance-1:~/pwn_deploy_chroot# ls bin/
pwn1 pwn1_copy1 pwn1_copy22、运行initialize.py
运行脚本后会输出每个pwn的监听端口,
root@instance-1:~/pwn_deploy_chroot# python initialize.py
pwn1's port: 10000
pwn1_copy1's port: 10001
pwn1_copy2's port: 10002文件与端口信息,还有随机生成的flag默认备份到flags.txt
root@instance-1:~/pwn_deploy_chroot# cat flags.txt
pwn1: flag{93aa6da5-db45-46fa-a2e1-af2be6698692}
pwn1_copy1: flag{f9966c51-52e4-4212-ac44-97bf16620b41}
pwn1_copy2: flag{b17949ce-e3fa-4ca7-9fcc-44b8dc997cb3}
pwn1's port: 10000
pwn1_copy1's port: 10001
pwn1_copy2's port: 100023、启动环境
请使用root用户执行命令
docker-compose up --build -d不出意外,题目就启动起来了
root@instance-1:~/pwn_deploy_chroot# netstat -antp | grep docker
tcp6 0 0 :::10002 :::* LISTEN 19828/docker-proxy
tcp6 0 0 :::10000 :::* LISTEN 19887/docker-proxy
tcp6 0 0 :::10001 :::* LISTEN 19873/docker-proxy我们测试一下pwn1,看看效果

可以看到,虽然执行的是system(“/bin/sh”),但是实际功能只是输出flag,这样就非常安全了