CTF中如何部署一道交互的密码学题目呢?在这里简单分享一下部署的经验。
1.方案说明
- 一般一道需要交互的密码学题目都是用python出的,一般是类似pwn题一样部署到服务器的一个端口上。
- 这样的部署方案大概可以分为两步:
- 第一步:将python文件生成linux可执行文件。
- 第二步:将可执行文件绑定到指定端口上对外暴露。
- 其实生成可执行文件后就和pwn的部署思路一样了。
2.步骤一:生成可执行文件
- 一般生成Python可执行文件常用pyinstaller。
- 先安装pyinstaller。
pip install pyinstaller
- 再生成可执行文件。
pyinstaller -F xxxx.py
- 在dist目录中就可以找到可执行文件了。
3.步骤二:绑定端口对外暴露
- 其实这一步和部署一个pwn没有啥区别。下面介绍两种方法:
pwn_deploy_chroot
- 常用部署pwn题的方式是pwn_deploy_chroot,项目基于docker,xinetd和chroot,非常安全,操作也非常简单。
- 下载pwn_deploy_chroot。
git clone https://github.com/giantbranch/pwn_deploy_chroot.git
- 将可执行文件放入bin目录。
- 运行初始化脚本:
python initialize.py
- 启动容器:
docker-compose up --build -d
- 默认会从10000端口开始部署,启动成功后就可以看到flag和端口信息了,这些都是可以修改的。
socat
- pwn题一般不用这种方式部署,因为没有权限的隔离,非常不安全,但是密码学题目一般不会打到机子上来,用这种方法更快。
- 先下载socat:
yum install socat
- 绑定端口:
socat tcp-listen:端口,fork exec:可执行文件路径,reuseaddr
- 最后,远程尝试是否部署成功,可以用pwntools连一下。
ATFWUS 2021-08-18