这是一个用于测试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版本。
vuln-test
和vuln-springBoot2
使用的是JavaEE、vuln-springBoot3
是Jakarta EE
;vuln-test
支持jsp/jspx,因此WebShell
、内存马
只能在vuln-test
靶场测试;vuln-core
中有源码,Postman的payload仅供参考,可随意修改为其他攻击参数;curl localhost:8888
,比如Java反序列化,因此为了便于观测,建议测试时执行:nc -vv -l 8888
;vuln-core
的示例代码;Linux/OSX
,如:本地命令执行中的UnixProcess
示例;URL黑名单
、URL白名单
、IP黑名单
、虚拟补丁
需要在RASP云端编辑测试规则才能测试,扫描器
测试目前只配置了:sqlmap,nmap,masscan
,可在云端修改规则;下载地址: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性能测试流程:
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 pull javasec/javaweb-vuln:latest
;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;
8001
端口,OpenJDK 1.8.0_322
8002
端口,OpenJDK 1.8.0_322
8003
端口,OpenJDK 17.0.2
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。