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

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

Vulhub开源漏洞靶场用Java远程访问_第1张图片

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

感谢如下贡献者:

Vulhub开源漏洞靶场用Java远程访问_第2张图片

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

Backer and Sponsor

赞助商:

Vulhub开源漏洞靶场用Java远程访问_第3张图片

在patreon上赞助vulhub

Vulhub开源漏洞靶场用Java远程访问_第4张图片

在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 依赖

     
            com.github.docker-java
            docker-java
            3.1.5
        

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

}

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

你可能感兴趣的:(Docker,开源,java,开发语言)