事件起因,被迫参加某竞赛,中途发现,全员摸鱼,遂一起摸鱼
Vulhub是一个面向大众的开源漏洞靶场,无需docker知识,简单执行一条命令即可编译、运行一个完整的漏洞靶场镜像。
在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文档进行安装。
# 下载项目
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,请不要混淆。
本项目中所有环境仅用于测试,不可作为生产环境使用!
注意事项:
本项目依赖于docker,在编译及运行过程中出现的任意异常都是docker以及相关程序抛出的,请先自行查找错误原因。如果确定是因为Dockerfile编写错误(或vulhub中代码错误)导致的,再提交issue。更多说明请这篇文档,希望可以对你有所帮助。
更多问题,可以用如下方式和我们联系:
感谢如下贡献者:
更多无法体现在Contributors里的贡献者:Contributors List
赞助商:
在patreon上赞助vulhub
在opencollective上赞助vulhub
更多捐助途径。
Vulhub is licensed under the MIT License. See LICENSE for the full license text.
在/usr/lib/systemd/system/docker.service。文件中添加配置远程访问
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
注意:原来的execStart 要注释掉
在pom.xml中添加docker-java 依赖
com.github.docker-java
docker-java
3.1.5
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—>interiorPort
ExposedPort 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();
}
}
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());
}