首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何安全快速地部署多道ctf pwn比赛题目

如何安全快速地部署多道ctf pwn比赛题目

作者头像
用户1423082
发布2024-12-31 18:34:43
发布2024-12-31 18:34:43
3980
举报
文章被收录于专栏:giantbranch's bloggiantbranch's blog

前言

一开始接触pwn的时候,我们要么本地调试,要么自己用socat将程序启动起来远程调试

最近去搞pwn培训,发现将pwn题一个一个部署起来还是比较繁琐,除了权限还要考虑其他东西

后来一顿搜索,看看有无别人的解决方案,发现一个xinted + docker的方案:

https://github.com/Eadom/ctf_xinetd

但是对于这个我发现了一些缺点:

  1. 需要自己配置flag
  2. 需要自己修改ctf.xinetd文件
  3. 没有docker-compose.yml方便我们去启动
  4. 一次只能部署一个题目(我想一键将5道题甚至是10道题同时部署在一个docker容器中)
  5. 安全性基于chroot,而且只给了ls,cat和sh三个程序,已经很安全了,但是sh还是存在fork炸弹的可能

于是我根据自己需要,写了一个项目:https://github.com/giantbranch/pwn_deploy_chroot

pwn_deploy_chroot介绍

特点

  1. 一次可以部署多个题目到一个docker容器中
  2. 自动生成flag,并备份到当前目录
  3. 也是基于xinted + docker + chroot
  4. 利用python脚本根据pwn的文件名自动化地生成3个文件:pwn.xinetd,Dockerfile和docker-compose.yml
  5. 在/bin目录,利用自己编写的静态编译的catflag程序作为/bin/sh,这样的话,system(“/bin/sh”)实际执行的只是读取flag文件的内容,完全不给搅屎棍任何操作的余地
  6. 默认从10000端口监听,多一个程序就+1,起始的监听端口可以在config.py配置,或者生成pwn.xinetd和docker-compose.yml后自己修改这两个文件

环境配置

代码语言:javascript
复制
# 安装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目录(注意名字不带特殊字符,因为会将文件名作为linux用户名)
  2. python initialize.py
  3. docker-compose up –build -d

下面给下详细操作:

1、将你要部署的pwn题目放到bin目录

我的项目已经将一个程序copy了3分作为示例,注意文件名不要含有特殊字符,文件名建议使用字母,下划线,横杆和数字,当然全字母的当然最好了

代码语言:javascript
复制
root@instance-1:~/pwn_deploy_chroot# ls bin/
pwn1  pwn1_copy1  pwn1_copy2

2、运行initialize.py

运行脚本后会输出每个pwn的监听端口,

代码语言:javascript
复制
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

代码语言:javascript
复制
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: 10002

3、启动环境

请使用root用户执行命令

代码语言:javascript
复制
docker-compose up --build -d

不出意外,题目就启动起来了

代码语言:javascript
复制
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,这样就非常安全了

感谢

https://github.com/Eadom/ctf_xinetd

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • pwn_deploy_chroot介绍
    • 特点
    • 环境配置
    • 使用
  • 感谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档