Docker 搭建多层内网靶场环境

简介

创建一个自定义网络

1
2
docker network create net1
docker network create --subnet=192.168.1.0/24 --gateway=192.168.1.1 mynetwork

在创建容器时指定网络

1
2
3
docker run --name container1 --net net1 -d image1
docker run --name container2 --net net1 -d image2
docker run -itd --name mycontainer --network mynetwork --ip 192.168.1.10 busybox

在容器已运行的情况下加入网络

1
2
docker network connect 网络名 容器名
docker network connect net1 container1

启动容器并测试

1
2
docker start container1
docker start container2

测试容器之间的连接

1
docker exec -it container1 ping container2

实践

首先创建一个靶场网络,命名为 vuln_network,设置 IP 段为 192.168.100.0/24

1
sudo docker network create --subnet=192.168.100.0/24 vuln_network

image.png
先搭建一个 Shiro来助助兴

1
sudo docker pull vulfocus/shiro-cve_2016_4437:latest

image.png
medicean/vulapps:s_shiro_1 也可以
image.png
在运行容器的时候将它分配到我们新建的网络并给他分配一个 IP 地址,因为需要一个服务外网可访问作为跳板,因此 -p 转发一下端口,以后的机子可以不用映射到外网。

1
2
3
4
sudo docker run --name=shiro1 --net=vuln_network --ip=192.168.100.10 -itd -p23333:8080 vulfocus/shiro-cve_2016_4437:latest
# --name 命名
# --net 加入到某网络
# --ip 指定ip

image.png
访问主机的 23333 端口
image.png
尝试利用一波
image.png
:靶场里环境可能比较纯净,ifconfig 的命令都没有
可以用 ip addr
如果需要用到其它命令,自己进容器安装下

1
sudo docker exec -it shiro1 bash

image.png

1
apt-get install net-tools

image.png
image.png
接下来再安装一个st2
image.png
外部没有途径访问到,因此 192.168.100.10 便是跳板机
image.png
现在两个机子都配好了
image.png
当然还可以用命令加入网络

1
docker network connect 网络名 容器名

创建一个新网络,地址为 192.168.1.0/24
image.png
将 st2 的容器加入到网络中

1
docker network connect vuln_network2 st2

image.png
现在为双网卡,ip addr
image.png
同时添加一台 thinkphp5的机子,添加进 vuln_network2
image.png
Shiro1 192.168.100.10 的主机只在一个网络内,因此与 tk5 是不通的
image.png
st2 192.168.100.11里可以通
image.png
现在就有了两个网络 vuln_networkvuln_network2
image.png
image.png
其中只有 192.168.100.10映射到外网,可以通过此主机进行多层渗透训练。
做了二层代理后访问 192.168.1.3
image.png

Summary

原理就是创建网络将容器加进网络,还可以用 docker swarm 进行集群管理,以后再探索。


Docker 搭建多层内网靶场环境
https://52hertz.tech/2023/07/30/Docker_vuln/
作者
Ustin1an
发布于
2023年7月30日
许可协议