OpenRASP 两次绕过

admin 2021年1月24日13:42:30评论611 views字数 981阅读3分16秒阅读模式

第一次绕过




第一次绕过相对比较简单,刚安装了RASP,还没有读他的源码,编写了shiro反序列化靶场,部署了1.3.5版本OpenRASP使用ysoserial生成payload,加密后burp发包,被拦截:

OpenRASP 两次绕过


查看rasp日志,发现提示Using Ysoserial tool

OpenRASP 两次绕过


在源码中搜索ysoserial,发现出现在以下文件中

plugins/official/plugin.js

包括检查规则,也一并看到


OpenRASP 两次绕过


第一次绕过方式:


修改Gadgets.java中,clazz.setName即可绕过.

src/main/java/ysoserial/payloads/util/Gadgets.java

OpenRASP 两次绕过


OpenRASP 两次绕过



绕过当天,RASP更新了插件,来解决shiro反序列化绕过问题


第一次绕过修复方式:


https://github.com/baidu/openrasp/blob/master/plugins/official/plugin.js#L882

OpenRASP 两次绕过


修复方式有点粗暴,判断程序执行链中,是否包括shiro默认的反序列化操作,并且判断是否存在命令执行操作.

查看rasp日志,发现日志记录的程序执行链如下:

OpenRASP 两次绕过



第二次绕过方式





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部分源码

OpenRASP 两次绕过

Shxjia.java为自定义java文件

OpenRASP 两次绕过


使用生成的shiro反序列化payload发包后

OpenRASP 两次绕过

预设命令在服务端执行,由于是子线程执行命令,回显稍微有点麻烦,暂未实现

OpenRASP 两次绕过

本文始发于微信公众号(白帽100安全攻防实验室):OpenRASP 两次绕过

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年1月24日13:42:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   OpenRASP 两次绕过https://cn-sec.com/archives/177737.html

发表评论

匿名网友 填写信息