搭建什么环境总会遇到一些坑,而又很可能在以后会需要再次搭建,所以健忘的自己来记录一下它~
CTF平台
有一段时间了,所以….该忘的都忘了
当然是选择开源的平台咯,自己又不会写…自己在本地测试过很多平台,最后还是选择了CTFd,它比较轻量,安装也很方便:
1 2 3
| git clone https://github.com/CTFd/CTFd.git cd CTFd/ pip install -r requirements.txt
|
才开始是使用gunicorn
部署的,这是官方推荐的方式:
1
| gunicorn --bind 0.0.0.0:80 -w 4 "CTFd:create_app()"
|
但是在我这里发现它效率不高,在部分电脑上会很慢,自己又把握不了它,另外加上它对我的网站证书似乎不合,于是换了Nginx
+uwsgi
:
1
| uwsgi -s 127.0.0.1:4000 -w 'CTFd:create_app()'
|
Nginx的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| server { listen 443 ssl; server_name betamao.me; ssl on; root /home/ubuntu/CTFd/CTFd/; index index.html index.htm; ssl_certificate ../cert/213997947790966.pem; ssl_certificate_key ../cert/213997947790966.key;
# ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:4000; } location ~* /themes/(original|admin)/static/ { root /home/ubuntu/CTFd/CTFd/; autoindex on; } }
|
不过这种搭配的文件上传/下载功能存在问题,获取目录会出错,需要改一下源码,忘了地方啦~
Nginx
1 2 3 4 5 6 7 8 9 10 11 12 13
| wget http://nginx.org/download/nginx-1.13.5.tar.gz
tar zxvf nginx-1.13.5.tar.gz
cd nginx-1.13.5
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
./nginx -s start
|
o啦~
pwn-docker
emmmm这种神题怎么能放内网环境,于是放服务器,直接放上面还是不靠谱,于是花了点时间部署在docker里,于是开启了采坑之旅。。。
安装
1 2
| apt-get update apt-get install -y docker
|
更改源
因为是阿里云服务器,就使用了阿里的源,有内网加速嘛~
1 2 3 4 5 6 7 8
| mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://pb199umc.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker
|
写Dockerfile
- 首先是权限问题,从下面的命令或许能看出采坑的影子,之前的想法是将相关文件放在低权限用户目录,属主为root,属组为pwn,组没有写权限,结果被告知flag可以被删除,突然想到该目录属主为pwn,他不能修改文件但可以删除文件,于是就简单改下,利用tmp的粘滞位好啦
- 基础镜像真的是最小镜像,什么都没有,执行命令一定要先向下是不是shell自带的,不是就一定要先安装,还有32执行环境什么的!
这里先构建基础镜像:
1 2 3 4 5 6 7 8 9 10 11 12
| FROM ubuntu MAINTAINER BetaMao
RUN dpkg --add-architecture i386
RUN apt-get update
RUN apt-get install -y libc6:i386 libncurses5:i386 libstdc++6:i386\ &&apt-get install -y socat sudo
|
然后对于每道题,以这种方式构建镜像:
1 2 3 4 5 6
| . ├── Dockerfile ├── bat.sh └── file ├── flag └── pwn
|
Dockerfile这样写啦:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| FROM base/ubuntu:1.2 MAINTAINER BetaMao
COPY ./file/ /tmp/
RUN useradd -U -m pwn
RUN chown root:pwn /tmp/flag\ &&chown root:pwn /tmp/pwn
RUN chmod 750 /tmp/pwn\ &&chmod 740 /tmp/flag CMD -u pwn socat tcp-l:4444,fork exec:/tmp/pwn
EXPOSE 4444
|
这里也被坑了,第一次这样用docker,在ENTRYPOINT
处在命令后加了&
让它在后台执行,结果docker就直接结束了,排错又浪费了很多时间,最后的构建命令为:
1 2 3 4
| #!/bin/sh read -p "请输入镜像名:" tag read -p "请输入端口号:" port docker build -t $tag . && docker run -d -p 0.0.0.0:port:4444 -t $tag
|
但是这样管理很不方便,docker-compose好像也不方便添加题目,有时间再写个管理脚本吧~
opencv安装
lctf的一道题用到了,记一下:
1.下载源码:https://opencv.org/releases.html
,解压
2.安装依赖:
1 2 3 4 5 6 7
| apt-get install build-essential apt-get install cmake apt-get install libgtk2.0-dev apt-get install pkg-config apt-get install python-dev python-numpy apt-get install libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev
|
3.在非opencv源码目录创建一个目录,在此目录下运行cmake /[opencvDir]
3.运行
1 2 3 4
| make -j $(nproc) make install echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf ldconfig
|
/记录下那道题用到的工具:https://github.com/jaybosamiya/busysteg/