Vulhub开源漏洞靶场用Java远程访问
事件起因,被迫参加某竞赛,中途发现,全员摸鱼,遂一起摸鱼
Vulhub是一个面向大众的开源漏洞靶场,无需docker知识,简单执行一条命令即可编译、运行一个完整的漏洞靶场镜像。
Installation
在Ubuntu 20.04下安装docker/docker-compose:
# 安装pip
curl -s https://bootstrap.pypa.io/get-pip.py | python3# 安装最新版docker
curl -s https://get.docker.com/ | sh# 启动docker服务
systemctl start docker# 安装compose
pip install docker-compose
其他操作系统安装docker和docker-compose可能会有些许不同,请阅读Docker文档进行安装。
Usage
# 下载项目
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
unzip vulhub-master.zip
cd vulhub-master# 进入某一个漏洞/环境的目录
cd flask/ssti# 自动化编译环境
docker-compose build# 启动整个环境
docker-compose up -d
每个环境目录下都有相应的说明文件,请阅读该文件,进行漏洞/环境测试。
测试完成后,删除整个环境
docker-compose down -v
本项目每个漏洞环境均附带文档,建议你购买1G内存的vps搭建漏洞测试环境,文档中所说的your-ip
均指你的vps的ip地址,如果你是用虚拟机搭建测试环境,是指你的虚拟机IP,而不是docker容器内部的IP,请不要混淆。
本项目中所有环境仅用于测试,不可作为生产环境使用!
Notice
注意事项:
- 为防止出现权限错误,最好使用root用户执行docker和docker-compose命令
- docker部分镜像不支持在ARM等架构的机器上运行
Contribution
本项目依赖于docker,在编译及运行过程中出现的任意异常都是docker以及相关程序抛出的,请先自行查找错误原因。如果确定是因为Dockerfile编写错误(或vulhub中代码错误)导致的,再提交issue。更多说明请这篇文档,希望可以对你有所帮助。
更多问题,可以用如下方式和我们联系:
- 讨论社区
- Discord
感谢如下贡献者:
更多无法体现在Contributors里的贡献者:Contributors List
Backer and Sponsor
赞助商:
在patreon上赞助vulhub 🙏
在opencollective上赞助vulhub 🙏
更多捐助途径。
License
Vulhub is licensed under the MIT License. See LICENSE for the full license text.
1,配置远程访问
在/usr/lib/systemd/system/docker.service。文件中添加配置远程访问
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
注意:原来的execStart 要注释掉
2,添加依赖
在pom.xml中添加docker-java 依赖
<dependency><groupId>com.github.docker-java</groupId><artifactId>docker-java</artifactId><version>3.1.5</version></dependency>
3,编写docker-java工具类
package com.woniu.util;import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Ports;
import com.github.dockerjava.core.DockerClientBuilder;public class DockerClientUtils {/*** 连接Docker服务器** @return*/public DockerClient connectDocker(String dockerInstance) {DockerClient dockerClient = DockerClientBuilder.getInstance(dockerInstance).build();dockerClient.infoCmd().exec();return dockerClient;}/*** 创建并启动容器* @param client* @param containerName 容易名称* @param imageName 镜像名称* @param withoutPort 外部端口* @param interiorPort 映射的内部端口* @return*/public CreateContainerResponse createContainers(DockerClient client, String containerName, String imageName,int withoutPort,int interiorPort) {//映射端口withoutPort—>interiorPortExposedPort tcp80 = ExposedPort.tcp(interiorPort);Ports portBindings = new Ports();portBindings.bind(tcp80, Ports.Binding.bindPort(withoutPort));CreateContainerResponse container = client.createContainerCmd(imageName).withName(containerName).withHostConfig(newHostConfig().withPortBindings(portBindings)).withExposedPorts(tcp80).exec();return container;// CreateContainerResponse container = client.createContainerCmd(imageName)
// .withName(containerName)
// .withHostConfig(new HostConfig().withPortBindings(new Ports(new ExposedPort(8080), Ports.Binding.bindPort(8080))))
// //环境变量
// .exec();
//
// return container;}/*** 启动容器** @param client* @param containerId*/public void startContainer(DockerClient client, String containerId) {client.startContainerCmd(containerId).exec();}/*** 停止容器** @param client* @param containerId*/public void stopContainer(DockerClient client, String containerId) {client.stopContainerCmd(containerId).exec();}/*** 删除容器** @param client* @param containerId*/public void removeContainer(DockerClient client, String containerId) {client.removeContainerCmd(containerId).exec();}}
4,mian方法测试
public static void main(String[] args) {DockerClientUtils dockerClientUtils =new DockerClientUtils();//连接Docker服务器DockerClient client = dockerClientUtils.connectDocker("tcp://192.168.10.40:2375");//创建容器CreateContainerResponse container = dockerClientUtils.createContainers(client,"container1","vulhub/appweb:7.0.1",8080,8080);//启动容器//System.out.println(container.getId());dockerClientUtils.startContainer(client,container.getId());}