> 文章列表 > Vulhub开源漏洞靶场用Java远程访问

Vulhub开源漏洞靶场用Java远程访问

Vulhub开源漏洞靶场用Java远程访问

事件起因,被迫参加某竞赛,中途发现,全员摸鱼,遂一起摸鱼

在这里插入图片描述

GitHub Official Community Chat on Discord Backers and sponors on Patreon Backers and sponors on Opencollective

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

注意事项:

  1. 为防止出现权限错误,最好使用root用户执行docker和docker-compose命令
  2. docker部分镜像不支持在ARM等架构的机器上运行

Contribution

本项目依赖于docker,在编译及运行过程中出现的任意异常都是docker以及相关程序抛出的,请先自行查找错误原因。如果确定是因为Dockerfile编写错误(或vulhub中代码错误)导致的,再提交issue。更多说明请这篇文档,希望可以对你有所帮助。

更多问题,可以用如下方式和我们联系:

  • 讨论社区
  • Discord
  • Twitter

感谢如下贡献者:

在这里插入图片描述

更多无法体现在Contributors里的贡献者:Contributors List

Backer and Sponsor

赞助商:

Vulhub开源漏洞靶场用Java远程访问 Vulhub开源漏洞靶场用Java远程访问 Vulhub开源漏洞靶场用Java远程访问 Vulhub开源漏洞靶场用Java远程访问

在patreon上赞助vulhub 🙏

Vulhub开源漏洞靶场用Java远程访问

在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());}