发布于2022年10月15日3年前 JavaWeb RASP漏洞测试环境 这是一个用于测试RASP/IAST的Java靶场,包含了非常多的漏洞类型,该靶场由多个模块组成,示例程序基本上都在vuln-core项目中有详尽的分类,测试过程中如遇到问题请及时反馈,非常感谢! 下载地址: https://github.com/javaweb-rasp/javaweb-vuln 构建方式 由于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版本。 使用说明 vuln-test和vuln-springBoot2使用的是JavaEE、vuln-springBoot3是Jakarta EE; 只有vuln-test支持jsp/jspx,因此WebShell、内存马只能在vuln-test靶场测试; 默认使用数据库是Sqlite,不需要安装或配置数据库; 导入RASP靶场测试.json到Postman中即可测试。 内存马和JNI功能需要在vuln-test模块中才能测试; 漏洞示例程序在vuln-core中有源码,Postman的payload仅供参考,可随意修改为其他攻击参数; 所有和命令执行相关的点都执行的是curl localhost:8888,比如Java反序列化,因此为了便于观测,建议测试时执行:nc -vv -l 8888; 部分示例程序发送攻击payload时会返回500错误,是正常情况不影响测试,如有疑问请参考vuln-core的示例代码; 部分示例仅使用于Linux/OSX,如:本地命令执行中的UnixProcess示例; 测试文件上传时需要选择一个jsp/jspx文件并修改上传的目录,否则会报错; URL黑名单、URL白名单、IP黑名单、虚拟补丁需要在RASP云端编辑测试规则才能测试,扫描器测试目前只配置了:sqlmap,nmap,masscan,可在云端修改规则; Postman 下载地址:https://www.postman.com/downloads/ 导入方式:点击File -> Import,如下图: 请求URL地址设置: 测试文件上传时需要选择一个jsp/jspx文件并修改上传的目录,否则会报错,如下图: 压力测试 Java应用程序在预热阶段时候测试的性能会特别差,不适合计入压测结果,测试时需要忽略第一次压测结果。如果测试时发现连续两次压测结果相差很大,建议重新测试。尽可能的在独立服务器上测试,压力测试期间尽量不要做其他操作以免导致结果不准确。 压测靶场可选择:vuln-test、 vuln-springboot2、vuln-springboot3 压测工具推荐使用:wrk、Apache 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 RASP性能测试流程: 添加RASP启动参数后启动Web服务; 启动VisualVM监控容器进程;(可省略); 使用wrk连续5次压测某个接口并记录每一次的压测数值; 停止Web服务; 去掉RASP启动参数并按照步骤1-3重新测试未安装RASP时性能数据; 计算安装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镜像 获取方式: X86_64:docker pull javasec/javaweb-vuln:latest; 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™ OpenJDK,Tomcat 9; 端口和JDK版本 vuln-test -> 8001端口,OpenJDK 1.8.0_322 vuln-springboot2 -> 8002端口,OpenJDK 1.8.0_322 vuln-springboot3 -> 8003端口,OpenJDK 17.0.2
创建帐户或登录后发表意见