第一次绕过
查看rasp日志,发现提示Using Ysoserial tool
在源码中搜索ysoserial,发现出现在以下文件中
plugins/official/plugin.js
包括检查规则,也一并看到
第一次绕过方式:
修改Gadgets.java中,clazz.setName即可绕过.
src/main/java/ysoserial/payloads/util/Gadgets.java
绕过当天,RASP更新了插件,来解决shiro反序列化绕过问题
第一次绕过修复方式:
https://github.com/baidu/openrasp/blob/master/plugins/official/plugin.js#L882
修复方式有点粗暴,判断程序执行链中,是否包括shiro默认的反序列化操作,并且判断是否存在命令执行操作.
查看rasp日志,发现日志记录的程序执行链如下:
第二次绕过方式
Rasp是根据程序行为,来判断是否属于攻击,判断条件需要一个环境上下文(请求线程),
在官网介绍中描述到:
服务器收到一个请求,从而进入了服务器的请求 hook 点(该 hook 点每个服务器不一样,具体参照源码),该 hook 点标注当前线程为请求线程,开启当前线程的检测开关并把请求对象和响应对象进行缓存,以便后面使用
https://rasp.baidu.com/doc/hacking/architect/java.html#java-request
绕过方式已经告诉我们,只要开启一个新的线程,由子线程去调用Runtime.getRuntime.exec(),
Rasp判断并不是用户请求线程触发了hook函数,就会放行命令执行操作:
具体方式为:
修改src/main/java/ysoserial/payloads/util/Gadgets.java部分源码
Shxjia.java为自定义java文件
使用生成的shiro反序列化payload发包后
预设命令在服务端执行,由于是子线程执行命令,回显稍微有点麻烦,暂未实现
本文始发于微信公众号(白帽100安全攻防实验室):OpenRASP 两次绕过
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论