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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文作者:李白

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-08-08 05:40:52

利用Burp“宏”自动化另类 SQLi的相关文章

利用Burp“宏”解决自动化 web fuzzer的登录问题

本文讲的是利用Burp"宏"解决自动化 web fuzzer的登录问题,本博文的主要内容是关于如何利用Burp Suite宏,帮助我们自动化完成需要手动输入payload的模糊测试工作.尽管许多安全测试人员可能会知道,这篇文章只是为那些尚未利用Burp宏的自动化功能的人所写的. 在我的渗透测试职业生涯中,在Web应用程序中执行参数和页面表单字段的模糊测试处理时,我遇到了一些与会话处理有关的挑战和困难. 在多种情况中,当你进行安全模糊测试时,web应用程序终止会话的行为,可能是因为一些安

利益输送隐于劣后宏源另类子公司或为通道

时隔五月,宏源证券(000562.SZ)员工被警方带走再掀债市风波.不过,债券市场的消息显示,该事件或与今年四月份发生的丙类户.代持养券等黑幕不同,而与宏源证券员工购买债券理财产品的高收益劣后份额有所牵连.亦有人士指出,上述涉事理财产品的劣后份额认购中,宏源证券另类投资子公司宏源汇智投资有限公司(下称宏源汇智)的身影穿梭其中.不过,前述涉事理财产品属宏源证券的集合资管产品还是通过信托等其他方式借"通道"设立,尚待确定.针对市场传闻,宏源证券未予表态.利输隐匿于劣后?9月12日,债市传言

利用VC宏写文件注释

一般使用其他的开发工具,都可以插入文件版本信息等注释.尤其在Eclipse里面这些功能做的相当的好.DEV-CPP也提供了一个简单的文件信息注释,但是VC6.0却没有现成的注释可供插入.不过利用VC6.0的宏功能却可以达到我们需要的效果. 要做到如下的效果: /** * Name: * Copyright: * Author: * Date: 2008-4-18 21:54:32 * Description: * Modification: **/ 在菜单Tools下选择Macro,会弹出一个对

可牛图像饰品巧利用:塑造宠物另类造型

宠物宝宝总是喜欢向主人卖弄自己的可爱.简单的表情,憨厚的神情让主人们怜惜疼爱.可是抓拍到的宠物照片却往往缺少些灵气,牛牛接下来要教大家巧用可牛影像中的饰品素材,塑造宠物宝宝另类造型.先看一下对比图: 第一步:利用可牛影像打开一张宠物照,并点击"抠图"按钮 第二步:进入抠图界面,利用"选中笔"在图中宠物狗的身躯中画出一条绿线,此时可牛影像将根据绿线所选中的颜色来辨别需要抠出的图片内容.如果对智能抠图效果不满意,可通过拉动虚线上的圈点来做细微调整 第三步:抠图结束后,牛

利用Word宏让2D鼠标也能自动翻页

相信不少Officer们办公室的条件都相对"艰苦",2D无滚轮鼠标让办公显得非常不便,尤其是在批阅较长的Word文档时,没有鼠标滚轮辅助浏览,需要不断按键才能翻页,使得手指非常疲劳.现在我们可以通过Word宏,巧妙的让2D鼠标也能玩转自动翻页. Step01 打开一篇页面较多的Word文档,选择工具栏中的"工具"→"宏"→"宏",或者直接在Word中使用Alt+F8激活该功能.然后在"宏的位置"选项中,点开

利用Excel宏功能批量取消超级链接的方法

  最近整理一个Excel文档,里面有很多超级链接需要取消删除,一个一个取消实在是太费时费力了,于是找到一个使用宏功能批量取消删除超级链接的方法. ①使用Excel快捷键 Ctrl + F8 ,在弹出的"宏"窗口的"宏名"中输入一个名称,然后单击"创建"按钮; 此时,会弹出一个 Microsoft Visual Basic 窗口; ②在 Sub 和 End Sub 之间输入 Cells.Hyperlinks.Delete ,然后单击"保

利用灾备自动化技术兼顾业务连续性与灾难恢复

本文摘要:自己的数据中心停止运行或建筑受到破坏时如何保持正常运营?这样的话题令人不悦,而相关的问题更是难以解答.同样烦人的还有如何评估当前薄弱或无效的数据保护方案的实际整体成本问题.通过引入自动化技术,企业则可以有效的解决上述的两大难题,为BCDR做好妥当规划. 行业中似乎一直对业务连续性 (BC) 和灾难恢复 (DR) 流程之间的差别有所混淆.企业们常常使用其中一个术语来指代另一个所描述的动作.许多企业在这两个方面或其中之一上有所欠缺,从而导致了灾难性的结果.谁也不想有灾难,没有企业愿意面临这

揭密利用QQ群的另类网络营销之道

中介交易 SEO诊断 淘宝客 云主机 技术大厅 腾讯QQ的注册用户据说已经突破六亿了,同时也诞生了很多各种各样的QQ群.庞大的QQ群是进行网络推广的一个好地方.相信很多网赚的老鸟都从QQ群里得到不少的收益.下面就谈谈我是怎么利用QQ群来进行网络营销的. 事情先从二零零八年说起,那时我还在厦门的一个公司做工程师,由于晚上都不用加班,公司地处也偏僻,没什么地方可去,于是就做了一个人力资源网站来打发时间,同时申请了一个谷歌的帐号,准备做谷歌联盟来赚几个广告费.做好网站后就是想方设法怎么来流量了,那是也

[原创]利用MASM宏显示环境变量

在windows中如果语言本身提供取得环境变量的方法,我们就不用直接使用win32接口了.那么在masm中可以做到么?答案是肯定的,也十分简单:   @EnvCount macro local i i = 0 % forc char,<@Environ(path)> ifidn <char>,<!;> i = i + 1 endif endm exitm <i> endm ShowEnvs macro local index,len index = 1 %