废物利用之利用一台废弃笔记本快速搭建CTF实验室基础建设

国庆返校了,感觉这是最后一段时间在学校,发现实验室有一台废弃的笔记本(4G内存,240G固态,废物U),丢了怪可惜的,就用这个笔记本来搭建一套基础设施吧。最后成效是靶场和所有题目穿透出网


内网服务有:共享网盘、共享协作文档、开源渗透靶场、sqlilabs、uploadlabs、xsslabs、w11scan基础指纹识别系统、awvs漏洞扫描系统等,反正白嫖开源项目就完了

一、制作系统

必然是无图形界面的linux,安装也简单

1、下载镜像

我在http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/下载,下载ubuntu-16.04.7-server-amd64.is无图形界面就800m-900m

2 、制作系统

我直接使用软碟通制作启动盘,简单快捷https://cn.ultraiso.net/xiazai.html,写入硬盘映像即可

3、安装系统

毕竟是废弃的笔记本,那就直接使用全磁盘安装

4、遇到的一些问题

首先是网络问题,刚安装完的系统,为了在内网稳定还是需要配置稳定的ip
首先查看自己的网卡名字ifconfig -a,发现2个,一个是eno1 一个是lo,我们是要选择eno1来配置网络,修改/etc/network/interfaces,添加网络,这里路由器分配192.168.199.1段,我们给他192.168.199.136的ip

1
2
3
4
5
6
7
8
9
10
11
12
13
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto eno1
iface eno1 inet static
address 192.168.199.136
netmask 255.255.255.0
gateway 192.168.199.1
dns-nameservers 192.168.199.1

还需要修改dns,/etc/resolv.conf ,指定网关就行

1
2
3
4
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
nameserver 192.168.199.1
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

然后更新网络配置

1
2
3
4
sudo ifup eth0
sudo ifdown eth0
或者
/etc/init.d/networking restart

修改语言

1
2
3
4
5
root@root:~#cat /etc/default/locale
# File generated by update-locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

然后就可以安装ssh,git

1
2
3
apt-get install openssh-server
apt-get install ssh
sudo apt install git

然后就可以使用xshell自己的笔记本连操作

linux还需要设置一下关盖等不休眠不操作,总不可能让笔记本一直打开
vim /etc/systemd/logind.conf
核心配置为ignore

1
2
24	HandleLidSwitch=ignore
25 HandleLidSwitchDocked=ignore

二、搭建CTF平台

我们选择的是H1ve在内网搭建,然后使用frp穿透服务

1
2
3
4
5
安装最新的docker
wget -qO- https://get.docker.com/ | sh

安装完会有一个提示,按照提示去执行
sudo usermod -aG docker ubuntu

命令执行完成之后,执行 docker verison 来查看是否安装完成。

1
2
3
sudo curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

同样的,命令执行完成之后,执行 docker-compose verison 来查看是否安装完成。
换源

1
sudo vim /etc/docker/daemon.json

将daemon.json的值改为:

1
2
3
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://mirror.ccs.tencentyun.com"]
}

(这里还是用一下阿里云申请的镜像快很多)
安装H1ve,这里改了改源码的ui,不重要

1
2
3
4
5
6
7
8
9

git clone https://github.com/D0g3-Lab/H1ve.git
cd H1ve
docker-compose -f single.yml up
#常用docker命令
启动服务:
docker-compose -f single.yml up -d
停止服务:
docker-compose -f single.yml stop

三、配置frp

1、平台映射

我们内网是8000,也就找了一台学生机来穿透出去,选择穿透好处是迁移方便以及废弃笔记本虽然废弃,也比服务器性能好多了(学生机就是穷)。
我们也直接在内网服务器上配置frp客户端,这里平台和ssh都映射一下,方便配置
frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[common]
server_addr = {{公网ip}}
server_port = 7000

[tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 8000
remote_port = 8000

[real_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2222

公网只需要配置frps.ini

1
2
[common]
bind_port = 7000

先运行公网的,然后运行内网的frpc,公网就可以访问到

2、题目映射,目前好像还没有全端口映射的,我想着把10001-10099的99个ip先映射

其实多写一些配置就行,这里用脚本
python build_frp.py > frpc.ini

1
2
3
4
5
6
print("[common]\nserver_addr = XXX.XX.XXX.XX\nserver_port = 7002\n")
#print("[real_ssh]\ntype = tcp\nlocal_ip = 127.0.0.1\nlocal_port = 22\nremote_port = 2222\n")
for i in range(1,10):
print("[ssh2"+str(i)+"]\ntype = tcp\nlocal_ip = 127.0.0.1\nlocal_port = 1000"+str(i)+"\nremote_port = 1000"+str(i)+"\n")
for i in range(10,99):
print("[ssh2"+str(i)+"]\ntype = tcp\nlocal_ip = 127.0.0.1\nlocal_port = 100"+str(i)+"\nremote_port = 100"+str(i)+"\n")

3、我错了,真可以多端口range映射

参阅https://github.com/fatedier/frp#range-ports-mapping
Proxy with names that start with range: will support mapping range ports.

1
2
3
4
5
6
# frpc.ini
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6006,6007
remote_port = 6000-6006,6007

frpc will generate 8 proxies like test_tcp_0, test_tcp_1, …, test_tcp_7.
顺便把22也映射一下备用

四 、快速建设其他服务

网盘这样的丢内网就行、就配置穿透了

1、内网网盘

共享一下文件资源等
docker run -d -p 1880:80 owncloud:10.0

2、内网hackmd

协作文档,下次在实验室打比赛啥的,或者记录一下内网文档啥的

1
2
3
git clone https://github.com/hackmdio/docker-hackmd.git
cd docker-hackmd/
docker-compose up

然后3000端口访问

3、内网webug安全靶场

webug是一个简单靶场,开源免费用起来方便

1
2
docker pull area39/webug
docker run -d -p 1882:80 area39/webug

默认密码
admin
admin

4、内网DVWA

DVWA靶场

1
2
docker pull vulnerables/web-dvwa
docker run -d -p 1884:3443 vulnerables/web-dvwa

默认密码
admin
password

5、awvs

awvs简单漏扫用起来方便

1
2
docker pull secfa/docker-awvs
docker run -d -p 1881:3443 secfa/docker-awvs

默认用户密码
username: admin@admin.com
password: Admin123

6、w11scan


w11scan是一个开源指纹识别系统,用起来也挺舒服

1
2
docker pull boyhack/w11scan
docker run -d -p 1883:8000 boyhack/w11scan:latest

默认密码
admin
w11scan

7、sqli-labs

1
2
docker pull acgpiano/sqli-labs
docker run -d -p 1885:80 acgpiano/sqli-labs:latest

8、upload-labs

1
2
docker pull c0ny1/upload-labs  
docker run -d -p 1886:80 c0ny1/upload-labs

9、bwapp

1
2
docker pull raesene/bwapp
docker run -d -p 1887:80 raesene/bwapp

默认账号密码
bee bug

10、webgoat-8.0

1
2
docker pull webgoat/webgoat-8.0
docker run -d -p 1888:80 webgoat/webgoat-8.0

11、XSS靶场

先去这里拉下来
https://github.com/c0ny1/vulstudy
里面有几个目录,这里xss用这2个,都有dockerfile自己进去build然后run就行

xssed

XSS-challenge-tour

12、hexo导航栏

随着靶场多了,还是整一个内网门户的样子

1
docker run -d --name hexo -p 4000:4000 -v hexo:/usr/hexo wangcaitao/hexo:1.0.0-alpine

docker inspect 10b6cac876a8查看挂载盘,大概就是为了不需要每次拷贝文件,让服务器和docker的默认文件夹同步一下

1
2
3
4
5
6
7
8
9
10
11
12
"Mounts": [
{
"Type": "volume",
"Name": "hexo",
"Source": "/var/lib/docker/volumes/hexo/_data",
"Destination": "/usr/hexo",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],

找到那个/var/lib/docker/volumes/hexo/_data文件夹然后,每次修改里面的文件
然后命令执行就行

1
2
root@asuri:# docker exec -it 10b6cac876a8 hexo clean
root@asuri:# docker exec -it 10b6cac876a8 hexo g

13、hackmd

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
27
28
version: "3"
services:
database:
image: postgres:11.6-alpine
environment:
- POSTGRES_USER=codimd
- POSTGRES_PASSWORD=change_password
- POSTGRES_DB=codimd
volumes:
- "database-data:/var/lib/postgresql/data"
restart: always
codimd:
image: hackmdio/hackmd:2.4.1
environment:
- CMD_DB_URL=postgres://codimd:change_password@database/codimd
- CMD_USECDN=false
depends_on:
- database
ports:
- "3000:3000"
volumes:
- upload-data:/home/hackmd/app/public/uploads
restart: always
volumes:
database-data: {}
upload-data: {}


复制上面的配置并另存为 docker-compose.yml放在文件夹里
修改你的数据库用户名和密码(默认不安全)
docker-compose up -d
http://localhost:3000