web的题目按照docker来构建镜像
一般来说需要两个文件, 但是当只需要拉取别人制作好的镜像的时候其实只需要docker-compose.yml
docker-compose.yml和Dockerfile
下面是两个是简单示例
题目结构
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12
| version: "3" services: web: build: . image: web_multi ports: - "8080:80" restart: always environment: - FLAG=flag{test_flag}
|
Dockerfile
1 2 3 4 5 6
| FROM nginx:alpine
COPY 1.html /usr/share/nginx/html/
EXPOSE 80
|
1 2 3 4 5 6 7 8 9 10
| FROM php:7.2-apache
COPY ./src /var/www/html
COPY flag.sh /flag.sh
RUN chmod +x /flag.sh
|
这样一道最简单的纯html题目就搭建好了
如果需要加入php, 则需要在Dockerfile里面拉取php的镜像并构建
比如FROM php:5.6-fpm-alpine
或者是FROM ctfhub/base_web_nginx_php_74
或者ctftraining/base_image_nginx_mysql_php_73
还可以加入flag.sh初始化脚本
1 2 3 4 5 6 7 8
| #!/bin/sh
echo $FLAG > /flag
export FLAG=not_flag FLAG=not_flag
rm -f /flag.sh
|
1 2 3 4 5 6 7 8
| #!/bin/sh
sed -i 's/flag{test}/$FLAG/' /var/www/html/flag.php
export FLAG=not_flag FLAG=not_flag
rm -f /flag.sh
|
这里有个坑, 一定要用\r也就是回车才行, 而回车在linux中是\n, 在windows中式\r\n, linux不认识\r, 故flag.sh会报错不能执行
1 2 3 4 5 6
| webapp ├── docker-compose.yml ├── Dockerfile ├── start.sh └── src └── index.php
|
- sed -i 后面一定跟着双引号, 单引号是会被当成字符串
我的实现方案是
1 2 3 4 5 6 7 8 9 10 11
| version: "3" services: web: build: . image: nanamo/web_multi ports: - "8080:80" restart: always environment: - FLAG=flag{test_flag}
|
1 2 3 4 5 6 7 8 9 10 11 12
| FROM php:7.2-apache
COPY ./src /var/www/html
COPY flag.sh /flag.sh
RUN chmod +x /flag.sh
CMD /flag.sh
EXPOSE 80
|
1 2 3 4 5 6 7 8 9 10
| sed -i "s/flag{test}/$FLAG/" /var/www/html/F14g.php
export FLAG=not_flag
FLAG=not_flag
service apache2 start
tail -f /dev/null
|
https://www.lewiserii.top/%E7%AB%9E%E8%B5%9B/ctf%E5%B9%B3%E5%8F%B0%E6%90%AD%E5%BB%BA%E5%92%8C%E5%87%BA%E9%A2%98%E6%8C%87%E5%8D%97.html#%E6%80%BB%E7%BB%93
https://www.v0n.top/2020/05/01/%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8Docker%E5%87%BA%E4%B8%80%E9%81%93CTF%E9%A2%98%E7%9B%AE/
如果遇上要拉取的镜像太大的时候, 可以更换apt源和pip源, 能够提高速度
只需要在添加一个source.list在目录中,, 一般是Dockerfile的同级目录
里面填上需要更换的apt源
在Dockerfile里加上ADD ./sources.list /etc/apt
pip更新的话用这个
1 2 3
| RUN pip install --upgrade pip RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|