FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序把安全装进口袋
在诸如SQL注入、XSS等测试场景中,我们需要通过构造不同的测试向量(Payload)发送请求数据,然后根据请求后的响应数据来判断漏洞是否存在。比如SQL盲注的场景下,我们通常会测试"and1=1"、"and1=2"这类的注入语句,根据请求后的响应页面的差异来判断Payload是否被成功执行了。
测试过程中我们会发现,我们需要先提交一个包含测试向量的请求,然后再从响应数据或网页预览界面中寻找某一种特征,然后判断是否符合我们的预期结果,再调整测试向量,重复上述的过程。这样的频繁操作,会导致我们的测试效率低下,尤其在响应数据比较多,并且特征数据比较难找的情景下,更是繁琐。
在1.6.3版本的HTTP抓包测试工具中,我们在HTTP重放模块增加了特征检查功能。我们可以预设多个特征规则,在测试请求被发送后,本工具可在响应数据包中自动匹配预设的特征规则,标记响应列表中具备预设规则的响应,并在响应数据详情中标记符合特征规则的数据位置,解决了需要频繁人为检查数据包的问题
并且每一个测试标签页都可以独立设置专属的特征检查规则,在新建副本标签页时也会拷贝检查规则,还可以将数据包和规则一并导出成配置文件。
本文通过测试靶场来演示新功能“特征检查模块”。
测试漏洞:布尔型SQL盲注漏洞。
使用工具:HTTP抓包测试工具。
访问目标网站:浏览目标网站并访问。
识别注入点::首先要确定应用程序中的注入点,这可以是通过表单、URL参数或Cookie等传递的用户输入。在本文中是一个表单的输入框。
确认注入类型:确定注入点是可用的并且容易注入,本文确定注入类型是盲注。
构造SQL测试Payload:创建不同的SQL测试Payload,用于检测网站是否存在漏洞。
提交不同Payload:使用特征检查匹配代码。检测提交Payload的响应数据是否匹配特征检查设置的规则。
验证SQL漏洞:如果特征检查匹配成功则表明该Payload成功可以使用,则可以确认SQL漏洞测试成功。
使用HTTP抓包测试工具,打开右上角的内置浏览器,在浏览器中访问测试靶场,加载后为一个表单输入框的界面:
(表单输入界面)
在文本框中输入满足数据库查询的字符串,例如“1”,然后点击提交按钮,查看结果显示“UserIDexistsinthedatabase”。
(IDexists)
在文本框中输入不满足数据库查询的字符串,例如“4327”,然后点击提交按钮,查看结果显示“UserIDisMISSINGfromthedatabase.”
(IDMISSING)
由此可知,当进行布尔盲注时,根据页面返回的数据差异来判断注入Payload是否成功。构造正确的SQL语句和错误SQL语句,网站返回的数据会有差异。显示的页面通常会有差异,我们可以通过观察这些差异来推断提交的SQL注入Payload是否成功被代入到数据库中执行。
由于测试中涉及多个SQLPayload,因此选择在重放模块中进行测试。首先,在HTTP抓包测试工具中,打开左上角的拦截开关,拦截数据,然后在浏览器表单中输入“1”,并点击提交按钮发送请求。此时,HTTP抓包测试工具已成功捕获到数据包:
(抓取数据包)
将捕获到的数据发送到数据重放模块中,在重放页面中,构造不同的SQL注入语句,同时利用特征检查来判断响应数据中注入是否生效。接着,依次测试以下的SQLPayload:
通过OR语句构造能查询到数据的条件:'or1=1#通过OR语句构造查询不到数据的条件:'or1=2#确定数据库名字的长度是否为5:'ORLENGTH(DATABASE())=5#判断当前数据库名字的第一个字符:'ORASCII(SUBSTRING(DATABASE(),1,1))=65#//第一个字符是否为'A''ORASCII(SUBSTRING(DATABASE(),2,1))=98#//第二个字符是否为'b'
如果是能查询到数据的注入语句,那么响应数据中则会存在关键词“exists”,但是每提交一次Payload,我们就得去响应的源代码或者网页中去检查是否存在特征关键词,然后进行判断,这个过程会非常繁琐,所以,这里使用抓包测试工具新上线的功能:特征检查,让它来帮我们自动检查和判断,并给我们一个显眼的提示,同时还能帮助我们快速定位特征数据的位置。
点击右侧的特征检查按钮进入特征检查设置页面:
(右侧特征检查)
点击添加按钮:
(添加按钮)
再弹出的添加特征检测规则页面中设置匹配规则,此处匹配类型为包含字符串,字符串为“exists”。
(匹配规则页面)
填写完成后,打开特征检查开关:
(打开开关)
匹配成功:
HTTP抓包测试工具右上角有弹窗提示:
(弹窗提示)
匹配的数据将会以高亮方式显示:
(高亮显示)
双击高亮块则会自动搜索匹配内容:
(双击搜索)
响应数据中将会显示绿色标志:
(绿色灯泡标志)
如果匹配失败,将不会出现上述任何反应。
注:在最新版本的TangGo中,接下来的流程可以使用数据处理模块来完成,不在需要重复的勾选和解码编码。详情请参考
根据测试点替换测试Payload,将id字段中的“1”替换为测试Payload“id=-1'or1=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代码:
接下来只需要测试不同的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抓包测试工具中的特征检查模块解决了以下问题: