Pwn出题教程

2022-12-01 15:54:15 浏览数 (1)

前段时间经历了自己人生中的第一出题,在出题过程中遇到了很多问题,而网上相关的教程很少,于是打算记录一下自己出题的过程以及踩过的坑。

  • 首先是安装docker

用官方的脚本直接就可以安装:

代码语言:javascript复制
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

这个命令可以安装好一切,至于网上说用apt-get install docker docker-compose来安装docker-compose,千万别这样,这样会破坏依赖关系(我的ubuntu就这样被干烂了哈哈哈),安装好了以后运行命令sudo docker ps -a没报错就是成功了。

这里要注意,所有docker相关的命令前面一定要加sudo才能运行成功(我一开始不知道,咋运行都是报错,还以为安装的时候啥东西出错了)

不加sudo会报如下的错误:

  • ctf_xinetd的下载与使用

这是Github上的一个开源项目:ctf_xinetd

直接将这个项目clone下来:

代码语言:javascript复制
git clone https://github.com/Eadom/ctf_xinetd.git

会发现在当前目录下生成了一个文件夹:

将编译好的ELF文件(如果有libc也一起放进去),放入此文件夹的bin目录中,并且把flag改成想要的内容,然后在ctf_xinetd的同级目录下创建docker-compose.yml文件:

其中的内容为:

代码语言:javascript复制
version: '3'

services:
    pwn:
        build: ./
        image: pwn
        ports:
            - "60001:9999"
        pids_limit: 1024
        # cpus: 0.5
        restart: unless-stopped
        # privileged: true

这里面的image名字要与后面创建的docker image的名字对应。

然后打开ctf.xinetd文件,将图中框起来的部分的名字改为前一步中在bin目录中放入的ELF的名字:

在ctf_xinetd的目录下运行命令:

代码语言:javascript复制
docker build -t "pwn" .

来创建一个镜像,也就是image,这里的名字要和docker-compose中写的名字一样,也就是说你docker-compose文件里的image名字写的是什么,这里build的image名就要叫啥。

这里的build命令可能会报出如下的错误:

这是由于使用的ubuntu版本高于了18.04导致的,解决方法就是打开ctf_xinetd文件夹下的dockerfile文件,并将图纸框起来的部分删除即可:

这里值得一提的是,如果需要更改docker所使用的ubuntu版本,也是在dockerfile的最上面更改即可:

然后仍然在此目录下运行命令:

代码语言:javascript复制
docker run -d -p "127.0.0.1:8888:9999" -h "pwn" --name="pwn" pwn

这里的-p后面的内容就是把9999端口映射到8888端口,这里的端口号可以改。

–name后面的内容是指定容器的名称,而-h是指定容器的hostname,而最后的那个pwn,则是image的名字,所以这里要根据你前面创建的镜像名进行更改。

注意,这里其实是手动映射了端口,其实直接使用docker-compose文件来映射端口也是可以的。

运行之后就会发现docker已经成功运行了,到这里题目部署就完成了,在题目的exp中写上:

代码语言:javascript复制
io=remote("ip",port) #port为映射后的端口,在这里是8888

即可发现能够成功打通并拿到测试用的flag。

0 人点赞