本文的知识内容,仅供网络安全从业人员学习参考,用于已获得合法授权的网站测试,请勿用于其它用途。请勿使用本文中的工具、技术及资料,对任何未经授权的网站、系统进行测试,否则,所造成的直接或间接后果,均由您自行承担。
在诸如SQL注入、XSS 等测试场景中,我们需要通过构造不同的测试向量(Payload)发送请求数据,然后根据请求后的响应数据来判断漏洞是否存在。比如SQL盲注的场景下,我们通常会测试"and 1=1"、"and 1=2"这类的注入语句,根据请求后的响应页面的差异来判断Payload是否被成功执行了。
测试过程中我们会发现,我们需要先提交一个包含测试向量的请求,然后再从响应数据或网页预览界面中寻找某一种特征,然后判断是否符合我们的预期结果,再调整测试向量,重复上述的过程。这样的频繁操作,会导致我们的测试效率低下,尤其在响应数据比较多,并且特征数据比较难找的情景下,更是繁琐。
在1.6.3版本的 HTTP抓包测试工具中,我们在HTTP重放模块增加了特征检查功能。我们可以预设多个特征规则,在测试请求被发送后,本工具可在相应数据包中自动匹配预设的特征规则,标记响应列表中具备预设规则的响应,并在响应数据详情中标记符合特征规则的数据位置,解决了需要频繁人为检查数据包的问题。
并且每一个测试标签页都可以独立设置专属的特征检查规则,在新建副本标签页时也会拷贝检查规则,还可以将数据包和规则一并导出成配置文件。
本文通过测试靶场来演示新功能“特征检查模块”。
测试靶场:https://github.com/digininja/DVWA。
测试漏洞:布尔型 SQL 盲注漏洞。
使用工具:HTTP抓包测试工具。
测试思路
1、访问目标网站:浏览目标网站并访问。
2、识别注入点:首先要确定应用程序中的注入点,这可以是通过表单、URL参数或Cookie等传递的用户输入。在本文中是一个表单的输入框。
3、确认注入类型:确定注入点是可用的并且容易注入,本文确定注入类型是盲注。
4、判断注入点的类型: 盲注可分为基于布尔的盲注和基于时间的盲注。本文为布尔盲注。
5、构造 SQL 测试Payload:创建不同的 SQL 测试Payload,用于检测网站是否存在漏洞。
6、提交不同 Payload:使用特征检查匹配代码。检测提交Payload 的响应数据是否匹配特征检查设置的规则。
7、验证 SQL 漏洞:如果特征检查匹配成功则表明该 Payload 成功可以使用,则可以确认 SQL 漏洞测试成功。
访问目标网站
使用 HTTP 抓包测试工具,打开右上角的内置浏览器,在浏览器中访问测试靶场,加载后为一个表单输入框的界面:
表单输入界面
在文本框中输入满足数据库查询的字符串,例如“1”,然后点击提交按钮,查看结果显示“User ID exists in the database”。
ID exists
在文本框中输入不满足数据库查询的字符串,例如“4327”,然后点击提交按钮,查看结果显示“User ID is MISSING from the database.”
ID MISSING
由此可知,当进行布尔盲注时,根据页面返回的数据差异来判断注入Payload是否成功。构造正确的SQL语句和错误SQL语句,网站返回的数据会有差异。显示的页面通常会有差异,我们可以通过观察这些差异来推断提交的SQL注入Payload是否成功被代入到数据库中执行。
测试 Payload
由于测试中涉及多个 SQL Payload,因此选择在重放模块中进行测试。首先,在 HTTP 抓包测试工具中,打开左上角的拦截开关,拦截数据,然后在浏览器表单中输入“1”,并点击提交按钮发送请求。此时,HTTP 抓包测试工具已成功捕获到数据包:
ID MISSING
将捕获到的数据发送到数据重放模块中,在重放页面中,构造不同的 SQL 注入语句,同时利用特征检查来判断响应数据中注入是否生效。接着,依次测试以下的 SQL Payload:
1 通过OR语句构造能查询到数据的条件: ' or 1=1#
2 通过OR语句构造查询不到数据的条件: ' or 1=2#
3 确定数据库名字的长度是否为5:
4 ' OR LENGTH(DATABASE())=5 #
5 判断当前数据库名字的第一个字符:
6 ' OR ASCII(SUBSTRING(DATABASE(), 1, 1)) = 65 # // 第一个字符是否为'A'
7 ' OR ASCII(SUBSTRING(DATABASE(), 2, 1)) = 98 # // 第二个字符是否为'b'
特征检查(新功能)
如果是能查询到数据的注入语句,那么响应数据中则会存在关键词“exists”,但是每提交一次Payload,我们就得去响应的源代码或者网页中去检查是否存在特征关键词,然后进行判断,这个过程会非常繁琐。所以在这里我们使用抓包测试工具新上线的功能:特征检查,让它来帮我们自动检查和判断,并给我们一个显眼的提示,同时还能帮助我们快速定位特征数据的位置。
点击右侧的特征检查按钮进入特征检查设置页面:
右侧特征检查
点击添加按钮:
添加按钮
再弹出的添加特征检测规则页面中设置匹配规则,此处匹配类型为包含字符串,字符串为“exists”。
匹配规则页面
填写完成后,打开特征检查开关:
打开开关
设置完匹配规则后,在当前重放页面中,每次点击发送数据包后,工具会自动检查收到的响应数据,判断是否包含与当前规则匹配的内容。如果不想重新发送数据包,也可以手动点击测试按钮进行特征检查
。如果收到的响应数据满足匹配规则,则会有以下提示:
匹配成功:
HTTP抓包测试工具右上角有弹窗提示:
弹窗提示
匹配的数据将会以高亮方式显示:
高亮显示
双击高亮块则会自动搜索匹配内容:
双击搜索
响应数据中将会显示绿色标志:
绿色灯泡标志
如果匹配失败,将不会出现上述任何反应。
分析Payload是否存在
根据测试点替换测试 Payload,将 id 字段中的“1”替换为测试 Payload“id=-1' or 1=1 #”。为确保这些字符在 URL 中被正确解析,需要对替换的字符进行 URL 编码。编码后的 Payload 为“id=-1'+or+1=1+%23”(后续文中的 Payload 均为编码后)。
替换测试 Payload
注意:当使用 SQL 布尔注入的时候,如果使用 OR 来判断条件是否为真假,请确保 OR 之前语句为假,例如,本文中使用 ID=-1,因为-1 必然是一个不存在的用户,所以 SQL 语句会去执行 OR 之后的语句,也就是“or+1=1+%23”。
URL 编码
完成编码后,发送数据包,发现该 Payload匹配测试规则。触发了右上角弹窗和高亮:
成功匹配数据
双击高亮块搜索源码中的匹配数据:
HTML 代码
接下来将 id 字段中的“id=-1'+or+1=1+%23”替换为测试 Payload“id=-1'+or+1=2+%23”,发现该 Payload 不匹配测试规则,未触发任何反应。
匹配失败
查看页面中的 HTML 代码:
HTML 代码
验证 SQL 漏洞
接下来只需要测试不同的 Payload,查看响应数据代码是否满足特征检查的规则。如果响应数据中包含了我们设定的特征,那么说明该 Payload 能够触发 SQL 注入漏洞。
使用 Payload“id=-1+'+OR+LENGTH(DATABASE())=4%23”,成功触发特征匹配,说明该数据库名字的长度为 4。
数据库名字长度为 4
使用 Payload“-1'+OR+ASCII(SUBSTRING(DATABASE(),1,1))=100%23”,成功触发特征匹配,说明该数据库名字的第一位为 d,因为 d 对应ASCII 中的数字 100。
数据库名字第一位为 d
说明网站确实存在布尔型 SQL 盲注漏洞。
HTTP抓包测试工具中的特征检查模块基础的使用方法和流程已经介绍完毕。HTTP抓包测试工具中的特征检查模块解决了以下问题:
● 快速识别特征:用户可以预设多个特征规则,工具自动检查响应数据包中是否存在匹配的特征或关键字,加快了特征识别速度。
● 自动定位特征位置:特征检查功能自动标记响应数据中特征的位置,省去了手动查找的步骤,提高了操作效率。
● 定制化特征检查:每个测试标签页可独立设置特征检查规则,灵活应对不同的测试需求,并且新建标签页会自动复制检查规则,保证了测试的一致性和效率。
● 数据包和规则导出:支持将数据包和规则导出为配置文件,便于存档和团队之间测试数据的传递。
注意:工具使用内容请以最新版本为主。
下载和反馈
TangGo社区版本下载:
· https://tanggo.nosugar.tech/
反馈问题:
· https://tanggo.nosugar.tech/#/feedback
· 通过微信交流群反馈:关注【无糖反网络犯罪研究中心】公众号,回复“TangGo”,加入交流群进行反馈。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论