1 Star 1 Fork 0

谢少评 / javaweb-vuln

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

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

空文件

简介

RASP漏洞测试靶场 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/xieshaoping/javaweb-vuln.git
git@gitee.com:xieshaoping/javaweb-vuln.git
xieshaoping
javaweb-vuln
javaweb-vuln
master

搜索帮助