00
前言
『D盾_防火墙』专为IIS设计的一个主动防御的保护软件,以内外保护的方式防止网站和服务器给入侵。新版的D盾_防火墙,支持系统:win2003/win2008/win2012/win2016,在IIS整体防护效果,还是非常给力的。本文通过一个SQL注入点,分享一个Bypass D盾_防火墙SQL注入防御的思路。
01
环境搭建
构造一个ASPX MSSQL注入点:
string id = Request.Params["id"];
string sql = string.Format("select * from admin where id={0}", id);
『D盾_防火墙』 版本: v2.0.6.70
02
特殊的MSSQL特性
一、MSSQL特性
在MSSQL中,参数和union之间的位置,常见的可填充方式有如下几种:
(1)空白字符 Mssql可以利用的空白字符有:
01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20
(2)注释符号
Mssql也可以使用注释符号/**/
(3)浮点数
select * from admin where id=1.1union select 1,'2',db_name() from admin
(4)1E0的形式:
select * from admin where id=1e0union select 1,'2',db_name() from admin
二、Bypass Fuzz
使用以上几种常规的形式进行测试,都没有效果,接着针对构造的SQL注入点,进行Fuzz参数和union之间的位置
http://192.168.8.161/sql.aspx?id=1【Fuzz位置】union select null,null,SYSTEM_USER
Fuzz结果:通过1.e这种特殊的数值形式,可成功绕过union select防御。
到这里,可union select,形成了部分Bypass,接下来考虑,如何去绕过select from的防御规则。
03
ASPX特性的分割注入
一、ASPX HPP特性
假设GET/POST/COOKIE同时提交的参数id,服务端接收参数id的顺序是什么样呢?
ASPX IIS:同时提交参数id,会接收所有参数,通过逗号分隔,如下图:
二、Bypass 测试
利用ASPX IIS同时接收参数的方式比较特别,可以用这个特性来搞事。 利用这个特性来拆分select from,从而绕过D盾的SQL注入防御规则。
04
总结
部分Bypass 1.e这中特殊的数值形式适合于MSSQL的场景。
完全Bypass姿势的局限:
使用Request.Params["id"]来获取参数, 三种方式可以进行参数传递:(1)GET (2)POST (3)COOKIE 获取到参数拼接起来。
利用场景略局限,仅仅作为Bypass分享一种思路而已。
另外,如果把UNION SELECT FROM 三个关键字分别放在GET/POST/COOKIE的位置,通过ASPX的特性连起来,我相信这是很多waf都防御不了的。
Bypass
About Me
一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。