baidu/openrasp

异步场景下,无法抓到sql

ddpang opened this issue · 6 comments

在一次sql注入复盘时,发现rasp没检测出一个普普通通的sql注入,且agent没有抓到包含payload的sql执行语句

image

如图,一次请求包含四次sql执行.
第一句为正常sql,agent抓到了
后三句会拼接包含payload的用户输入,但是agent日志未查到

比较疑惑,是否是官方因匹配不到request信息,而丢弃了异步的sql语句?

sql语句只要是执行都会被匹配的, 你说的 “匹配不到request信息,而丢弃了异步的sql语句” 实际上是没有触发这个hook type "requestEnd" -> office.js 的 send_rasp_result 到服务器 需要自己去找这个异步方法的完成点,加入如asyncRequestEnd,及对应send方法。
这块需要自己去二开,官方版本写的太耦合了不太好在原有的方法上直接进行拓展。

以上send_rasp_result为 openrasp-iast情况下的iast.js 中的 send_rasp_result

sql语句只要是执行都会被匹配的, 你说的 “匹配不到request信息,而丢弃了异步的sql语句” 实际上是没有触发这个hook type "requestEnd" -> office.js 的 send_rasp_result 到服务器 需要自己去找这个异步方法的完成点,加入如asyncRequestEnd,及对应send方法。 这块需要自己去二开,官方版本写的太耦合了不太好在原有的方法上直接进行拓展。

谢谢回答.还有一个问题没解决,服务器本地alarm日志也没有sql注入的日志,payload为1' and 1=1 and 1=1 and 1= 1 or 1='1
所以我认为agent未进行漏洞检测,如果sql语句只要是执行就会匹配,为什么本地alarm也没日志呢,这个payload也执行了,不可能检测不出
(我看send_rasp_result的作用是向扫描服务器发请求,和rasp无法检测异步sql注入不是同一个问题吧?)
(我们没用rasp-iast,而是用黑盒消费镜像流量的方式实现iast,结果黑盒检测出漏洞,rasp却没检测出)

好的我明天测试下

如果是有直接的sql注入点,我这边是可以拦截的,1' and 1=1 and 1=1 and 1= 1 or 1='1 。 他的机制并不是像waf一样直接拦截攻击payload;比如你是mysql的preparestatement,使用?作为占位符,通过hook插桩得到的完整sql语句是 比如select * from users where username = ? 而不会带入你输入的 1' and 1=1 and 1=1 and 1= 1 or 1='1

(我看send_rasp_result的作用是向扫描服务器发请求,和rasp无法检测异步sql注入不是同一个问题吧?)
昨天以为大佬用的rasp-iast

谢谢,可能是我们应用的个例吧,我再研究下,后续有结果,会给你们同步