23. Bypass ngx_lua_waf SQL注入防御(多姿势)
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 请求内容。
测试用例:

输出测试:

通过这个测试,我们可以发现:
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注入防御。
不同语言、中间件、数据库,所对应的特性是有差异的,而这些差异在某些特定的场景下,是可以利用的。
23. Bypass ngx_lua_waf SQL注入防御(多姿势)的更多相关文章
- Bypass ngx_lua_waf SQL注入防御(多姿势)
0x00 前言 ngx_lua_waf是一款基于ngx_lua的web应用防火墙,使用简单,高性能.轻量级.默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则: select.+ ...
- Bypass X-WAF SQL注入防御(多姿势)
0x00 前言 X-WAF是一款适用中.小企业的云WAF系统,让中.小企业也可以非常方便地拥有自己的免费云WAF. 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass. ...
- 22. Bypass X-WAF SQL注入防御(多姿势)
0x00 前言 X-WAF是一款适用中.小企业的云WAF系统,让中.小企业也可以非常方便地拥有自己的免费云WAF. 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass. 0x0 ...
- Bypass 360主机卫士SQL注入防御(多姿势)
0x00 前言 在服务器客户端领域,曾经出现过一款360主机卫士,目前已停止更新和维护,官网都打不开了,但服务器中依然经常可以看到它的身影.从半年前的测试虚拟机里面,翻出了360主机卫士Apache版 ...
- Bypass 护卫神SQL注入防御(多姿势)
0x00 前言 护卫神一直专注服务器安全领域, 其中有一款产品,护卫神·入侵防护系统 ,提供了一些网站安全防护的功能,在IIS加固模块中有一个SQL防注入功能. 这边主要分享一下几种思路,Bypa ...
- Bypass D盾_IIS防火墙SQL注入防御(多姿势)
0X01 前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防御策略 ...
- 21. Bypass D盾_防火墙(旧版 and 新版)SQL注入防御(多姿势)
D盾旧版: 00前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防 ...
- 15. Bypass 360主机卫士SQL注入防御(多姿势)
在服务器客户端领域,曾经出现过一款 360 主机卫士,目前已停止更新和维护,官网都打不开了,但服务器中依然经常可以看到它的身影. 从半年前的测试虚拟机里面,翻出了 360 主机卫士 Apache 版的 ...
- 网站SQL注入防御实战
SQL注入作为直接威胁web业务的最严重攻击行为,已经被大多数的网站管理员所了解,这种通过HTTP标准端口,利用网页编码不严谨,提交精心构造的代码实现对数据库非授权访问的攻击方法,已经被越来越多的sc ...
随机推荐
- 从输入url到浏览器呈现网页发生了什么?
大致能分成两个部分:网络通信与页面渲染 一.网络通信 互联网各个网络设备间的通信均基于TCP/IP协议,此协议将整个过程进行分层,由上至下分别为: 应用层.传输层.网络层和数据链路层 1.输入URL ...
- 机器学习相关知识整理系列之一:决策树算法原理及剪枝(ID3,C4.5,CART)
决策树是一种基本的分类与回归方法.分类决策树是一种描述对实例进行分类的树形结构,决策树由结点和有向边组成.结点由两种类型,内部结点表示一个特征或属性,叶结点表示一个类. 1. 基础知识 熵 在信息学和 ...
- mysql 索引技巧
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...
- hdu 1701 (Binary Tree Traversals)(二叉树前序中序推后序)
Binary Tree Traversals T ...
- eclipse从Git获取项目更新
1.项目上右键 ——> Team ——> pull 如果报错: 解决方法: 依次打开:Window ——> Preferences ——> Team ——> ...
- linux dd、echo 、watch、fuser命令
一.dd命令 以数据流进行复制,cp命令则是以文件为单位进行复制 if=数据来源 of=数据存储目标 bs=# 复制的字节数 count=# 复制几个bs seek=# 跳过多 ...
- java:stack栈: Stack 类表示后进先出(LIFO)的对象堆栈
//Stack 类表示后进先出(LIFO)的对象堆栈 //它提供了通常的 push 和 pop 操作,以及取栈顶点的 peek 方法.测试堆栈是否为空的 empty 方法.在堆栈中查找项并确定到栈顶距 ...
- http接口测试框架-遇到的问题
遇到过很多问题 如图,结果做作对比的时候,发现返回的结果有一个error_code: 0,中间有一个空格,导致对比失败 解决方法:打印出结果,再对比,case里的预期结果是否一致,有时候是填写的错误 ...
- Java钉钉开发_00_资源帖
1.源码 本系列教程的源码已上传至GitHub: https://github.com/shirayner/DingTalk_Demo 2.官方 官方源码:https://github.com/op ...
- Eclipse_debug异常_Source not found
一.现象 在eclipse中,打了断点之后运行代码,出现debug异常:Source not found,如下图 原因 找不到源码. 解决方案 添加源码即可 1.Edit Source Lookup ...