GithubHelp home page GithubHelp logo

javaweb-vuln's Introduction

JavaWeb RASP漏洞测试环境

这是一个用于测试RASP/IAST的Java靶场,包含了非常多的漏洞类型,该靶场由多个模块组成,示例程序基本上都在vuln-core项目中有详尽的分类,测试过程中如遇到问题请及时反馈,非常感谢!

构建方式

由于vuln-springboot3使用的是JDK17 + Spring 6,因此该模块必须使用JDK17才能编译该模块(不要使用aliyun的maven仓库),执行:

cd javaweb-vuln
mvn clean install

打包后的vuln-test采用的是JDK7编译的,vuln-springboot2是JDK1.8,vuln-springboot3是JDK17,运行不同的测试靶场时候需要注意JDK版本。

使用说明

  1. vuln-testvuln-springBoot2使用的是JavaEE、vuln-springBoot3Jakarta EE
  2. 只有vuln-test支持jsp/jspx,因此WebShell内存马只能在vuln-test靶场测试;
  3. 默认使用数据库是Sqlite,不需要安装或配置数据库;
  4. 导入RASP靶场测试.jsonPostman中即可测试。
  5. 内存马和JNI功能需要在vuln-test模块中才能测试;
  6. 漏洞示例程序在vuln-core中有源码,Postman的payload仅供参考,可随意修改为其他攻击参数;
  7. 所有和命令执行相关的点都执行的是curl localhost:8888,比如Java反序列化,因此为了便于观测,建议测试时执行:nc -vv -l 8888
  8. 部分示例程序发送攻击payload时会返回500错误,是正常情况不影响测试,如有疑问请参考vuln-core的示例代码;
  9. 部分示例仅使用于Linux/OSX,如:本地命令执行中的UnixProcess示例;
  10. 测试文件上传时需要选择一个jsp/jspx文件并修改上传的目录,否则会报错;
  11. URL黑名单URL白名单IP黑名单虚拟补丁需要在RASP云端编辑测试规则才能测试,扫描器测试目前只配置了:sqlmap,nmap,masscan,可在云端修改规则;

Postman

下载地址:https://www.postman.com/downloads/

导入方式:点击File -> Import,如下图:

image-20220414154311860

请求URL地址设置:

image-20220426194355585

测试文件上传时需要选择一个jsp/jspx文件并修改上传的目录,否则会报错,如下图:

image-20220414154457785

压力测试

Java应用程序在预热阶段时候测试的性能会特别差,不适合计入压测结果,测试时需要忽略第一次压测结果。如果测试时发现连续两次压测结果相差很大,建议重新测试。尽可能的在独立服务器上测试,压力测试期间尽量不要做其他操作以免导致结果不准确。

压测靶场可选择:vuln-testvuln-springboot2vuln-springboot3

压测工具推荐使用:wrkApache JMeter

测试接口:http://localhost:8001/SQL/json/sql.do

接口描述:API使用JSON方式传参:{"username": "admin"},然后使用Spring JdbcTemplate查询用户名为admin的用户数据。

示例 - JSON查询用户信息接口代码:

@RestController
@RequestMapping("/SQL/")
public class SQLInjectionController {
    @PostMapping(value = "/json/sql.do", consumes = APPLICATION_JSON_VALUE)
    public Map<String, Object> jsonSQL(@RequestBody Map<String, Object> map) {
        String sql = "select * from sys_user where username = '" + map.get("username") + "'";

        return jdbcTemplate.queryForMap(sql);
    }
}

完整代码请参考:org.javaweb.vuln.controller.SQLInjectionController#jsonSQL

image-20220415121848006

RASP性能测试流程:

  1. 添加RASP启动参数后启动Web服务;
  2. 启动VisualVM监控容器进程;(可省略);
  3. 使用wrk连续5次压测某个接口并记录每一次的压测数值;
  4. 停止Web服务;
  5. 去掉RASP启动参数并按照步骤1-3重新测试未安装RASP时性能数据;
  6. 计算安装RASP和未安装RASP的压测结果;

curl测试:

curl -i "http://localhost:8001/SQL/json/sql.do" -H "Content-Type: application/json" -d '{"username": "admin"}'

测试参数:wrk -t200 -c500 -d30s --script=/Users/yz/user.lua --latency "http://localhost:8001/SQL/json/sql.do",200个线程,500个连接数,持续时间为30秒。

user.lua:

wrk.method = 'POST'
wrk.headers['Content-Type'] = 'application/json'
wrk.body = '{"username": "admin"}'

Docker镜像

获取方式:

  1. X86_64:docker pull javasec/javaweb-vuln:latest
  2. ARM架构(Macbook M1或aarch64):docker pull javasec/javaweb-vuln-arm:latest

该镜像会同时启动javaweb-vuln中的三个靶场,启动方式容器时需要同时映射8001、8002、8003端口,如下:

docker run -d -it -p 8001-8003:8001-8003 --name javaweb-vuln javasec/javaweb-vuln

Dockerfile使用的JDK是:Eclipse Temurin™ OpenJDKTomcat 9

端口和JDK版本

  1. vuln-test -> 8001端口,OpenJDK 1.8.0_322
  2. vuln-springboot2 -> 8002端口,OpenJDK 1.8.0_322
  3. vuln-springboot3 -> 8003端口,OpenJDK 17.0.2

javaweb-vuln's People

Contributors

javaweb-rasp avatar wcc526 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

javaweb-vuln's Issues

Unable to Access Deployed Service Remotely

Hello,

I have deployed a Docker container using the following docker run command:

docker run -d -it -p 8001-8003:8001-8003 --name javaweb-vuln javasec/javaweb-vuln

The service starts correctly and is accessible locally on my machine, but I am unable to access it remotely from other devices on the same network. I can access the service using localhost:8001, localhost:8002, and localhost:8003 on my local machine, but attempting to access it remotely via 192.168.x.x:8001, 192.168.x.x:8002, or 192.168.x.x:8003 (replacing 192.168.x.x with my machine's local IP address) does not work.

Could you please help me understand why this might be happening and how I can make the service accessible from other devices on the network?

Thank you for your assistance!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.