0x00 前言

​   ngx_lua_waf是一款基于ngx_lua的web应用防火墙,使用简单,高性能、轻量级。默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则:

select.+(from|limit)
(?:(union(.*?)select))
(?:from\W+information_schema\W)

这边主要分享三种另类思路,Bypass ngx_lua_waf SQL注入防御。

0x01 环境搭建

github源码:https://github.com/loveshell/ngx_lua_waf/

ngx_lua_waf安装部署,设置反向代理访问构造的SQL注入点

0x02 WAF测试

ngx_lua_waf是基于ngx_lua的,我们先通过一个测试用例来了解它是如何获取参数的。

首先看一下官方 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
}
}
}

输出测试:

通过这个测试,我们可以发现:

1、当提交同一参数id,根据接收参数的顺序进行排序

2、当参数id,进行大小写变换,如变形为Id、iD、ID,则会被当做不同的参数,大小写敏感。

我们知道,window下IIS+ASP/ASPX 大小写是不敏感的,

提交参数为: ?id=1&Id=2&iD=3&ID=4,

输出结果为:1, 2, 3, 4

那么,当nginx反向代理到IIS服务器的时候,这就存在一个参数获取的差异,结合HPP进行利用,可被用来进行Bypass ngx_lua 构建的SQL注入防御。

绕过姿势一:参数大小写+HPP

http://192.168.8.147/test/sql.aspx

?id=1 UNION/&ID=/SELECT null,name,null/&Id=/FROM master.dbo.sysdatabases

绕过姿势二:GPC

在ASPX中,有一个比较特殊的HPP特性,当GET/POST/COOKIE同时提交的参数id,服务端接收参数id的顺序GET,POST,COOKIE,中间通过逗号链接,于是就有了这个idea。

UNION、SELECT、FROM 三个关键字分别放在GET/POST/COOKIE的位置,通过ASPX的这个特性连起来,堪称完美的一个姿势,压根不好防。

但姿势利用太过于局限: 使用Request.Params["id"]来获取参数,GPC获取到参数拼接起来,仅仅作为Bypass分享一种思路而已。

绕过姿势三:uri参数溢出

前面两种都是MSSQL的Bypass,而且利用姿势还有一定的极限,有没有那么一种可以Bypass Mysql,又可以Bypass MSSQL,完全无视SQL注入防御,为所欲为的姿势呢?这就是接下来的终极大招了。

默认情况下,通过ngx.req.get_uri_args、ngx.req.get_post_args获取uri参数,只能获取前100个参数,当提交第101个参数时,uri参数溢出,无法正确获取第100以后的参数值,基于ngx_lua开发的安全防护,无法对攻击者提交的第100个以后的参数进行有效安全检测,从而绕过安全防御。具体分析详见我写的另一篇文章:《打破基于OpenResty的WEB安全防护(CVE-2018-9230)》

Mysql Bypass实例:

Mssql Bypass实例:

0x03 END

这三种姿势主要利用HPP,结合参数获取的特性和差异,从而绕过ngx_lua_waf的SQL注入防御。

不同语言、中间件、数据库,所对应的特性是有差异的,而这些差异在某些特定的场景下,是可以利用的。

本文由Bypass原创发布,原文链接:https://www.cnblogs.com/xiaozi/p/9138126.html  欢迎分享本文,转载请保留出处。

关于我:一个网络安全爱好者,对技术有着偏执狂一样的追求,致力于分享原创高质量干货,我的个人微信公众号:Bypass--,欢迎前来探讨、交流。

Bypass ngx_lua_waf SQL注入防御(多姿势)的更多相关文章

  1. 23. Bypass ngx_lua_waf SQL注入防御(多姿势)

    0x00 前言 ngx_lua_waf是一款基于ngx_lua的web应用防火墙,使用简单,高性能.轻量级.默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则: select.+(f ...

  2. Bypass X-WAF SQL注入防御(多姿势)

    0x00 前言 ​ X-WAF是一款适用中.小企业的云WAF系统,让中.小企业也可以非常方便地拥有自己的免费云WAF. ​ 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass. ...

  3. 22. Bypass X-WAF SQL注入防御(多姿势)

    0x00 前言 X-WAF是一款适用中.小企业的云WAF系统,让中.小企业也可以非常方便地拥有自己的免费云WAF. 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass. 0x0 ...

  4. Bypass 护卫神SQL注入防御(多姿势)

    0x00 前言 ​ 护卫神一直专注服务器安全领域, 其中有一款产品,护卫神·入侵防护系统 ,提供了一些网站安全防护的功能,在IIS加固模块中有一个SQL防注入功能. 这边主要分享一下几种思路,Bypa ...

  5. Bypass 360主机卫士SQL注入防御(多姿势)

    0x00 前言 在服务器客户端领域,曾经出现过一款360主机卫士,目前已停止更新和维护,官网都打不开了,但服务器中依然经常可以看到它的身影.从半年前的测试虚拟机里面,翻出了360主机卫士Apache版 ...

  6. Bypass D盾_IIS防火墙SQL注入防御(多姿势)

    0X01 前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防御策略 ...

  7. 21. Bypass D盾_防火墙(旧版 and 新版)SQL注入防御(多姿势)

    D盾旧版: 00前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防 ...

  8. 15. Bypass 360主机卫士SQL注入防御(多姿势)

    在服务器客户端领域,曾经出现过一款 360 主机卫士,目前已停止更新和维护,官网都打不开了,但服务器中依然经常可以看到它的身影. 从半年前的测试虚拟机里面,翻出了 360 主机卫士 Apache 版的 ...

  9. 网站SQL注入防御实战

    SQL注入作为直接威胁web业务的最严重攻击行为,已经被大多数的网站管理员所了解,这种通过HTTP标准端口,利用网页编码不严谨,提交精心构造的代码实现对数据库非授权访问的攻击方法,已经被越来越多的sc ...

随机推荐

  1. 基于html5 canvas 的客户端异步上传图片的插件,支持客户端压缩图片尺寸

    /** * Created by xx on 15-05-28. * 基于html5 canvas 的客户端异步上传画片的插件 * 在实际应用中,常常要用于上传图片的功能.在现在越来越多的手机weba ...

  2. python的callback函数原理

    __getattribute__作用 """ class C(object): a = 'abc' def __getattribute__(self, *args, * ...

  3. [转]Android开源框架ImageLoader的完美例子

    Android开源框架ImageLoader的完美例子 2013年8月19日开源框架之Universal_Image_Loader学习 很多人都在讨论如何让图片能在异步加载更加流畅,可以显示大量图片, ...

  4. Android 耳机插入过程分析 (AudioManager部分)

    接上一篇,记录audioManager对耳机插入的操作 https://www.cnblogs.com/helloworldtoyou/p/9868890.html 主要是发送广播,另外更新音频通路 ...

  5. Spring系列(四):Spring AOP详解和实现方式(xml配置和注解配置)

    参考文章:http://www.cnblogs.com/hongwz/p/5764917.html 一.什么是AOP AOP(Aspect Oriented Programming),即面向切面编程, ...

  6. Java如何格式化24小时格式的时间?

    在Java中,如何格式化24小时格式的时间?? 此示例使用SimpleDateFormat类的sdf.format(date)方法将时间格式化为24小时格式(00:00-24:00). package ...

  7. Java数组搜索和比较

    在Java中,如何搜索和比较数组? 示例 以下示例显示如何使用sort()和binarySearch()方法来完成任务.用户定义的方法printArray()用于显示输出 - package com. ...

  8. Lemon OA第4篇:常用功能

    OA,Office Automation的简写,中文意思办公自动化,不同的人有不同的见解,可以简单的理解为网络化办公,高效.协同是其显著的特点,如今正在朝着智能的方向发展 平时不擅长文字,写出来几句话 ...

  9. iOS 多线程简单使用的具体解释

    主线程 一个iOS程序执行后.默认会开启1条线程,称为"主线程"或"UI线程"(刷新UI界面最好在主线程中做.在子线程中可能会出现莫名其妙的BUG) 主线程的作 ...

  10. js eventLoop (使用chunk 同步变异步)

    https://www.cnblogs.com/xiaohuochai/p/8527618.html 线程 javascript是单线程的语言,也就是说,同一个时间只能做一件事.而这个单线程的特性,与 ...