实验室:带有条件响应的盲SQL注入
这个实验室包含一个盲目注射脆弱性。该应用程序使用跟踪cookie进行分析,并执行包含已提交cookie的值的SQL查询。
SQL查询的结果未返回,也没有显示错误消息。但是,如果查询返回任何行,该应用程序在页面中包含“欢迎返回”消息。
该数据库包含一个名为的不同表用户
,列叫用户名
和密码
。您需要利用盲人SQL注入找出密码的漏洞行政人员
用户。
要解决实验室,请登录行政人员
用户。
解决方案
- 访问商店的头版,并使用Burp Suite拦截和修改包含该请求的请求
跟踪号码
曲奇饼。为简单起见,假设cookie的原始价值是trackingId = xyz
。 修改
跟踪号码
cookie,将其更改为:trackingid = xyz'和'1'='1
验证响应中是否出现“欢迎返回”消息。
现在将其更改为:
trackingid = xyz'和'1'='2
验证响应中没有出现“欢迎回复”消息。这说明了如何测试单个布尔条件并推断结果。
现在将其更改为:
trackingId = xyz'and(从用户中选择'a'限制1)='a
验证条件是真实的,确认有一张名为
用户
。现在将其更改为:
trackingId = xyz'and(从用户中选择'a'where username ='管理员')='a
验证条件是真实的,确认有一个用户称为
行政人员
。下一步是确定在密码中有多少个字符
行政人员
用户。为此,将值更改为:trackingId = xyz'and(从用户中选择'a',username ='管理员'and length(passwass)> 1)='a
这种情况应该是正确的,确认密码的长度大于1个字符。
发送一系列后续值以测试不同的密码长度。发送:
trackingId = xyz'and(从用户中选择'a',username ='管理员'and length(密码)> 2)='a
然后发送:
trackingId = xyz'and(从用户中选择'a',username ='管理员'和engent(密码)> 3)='a
等等。您可以手动使用此操作Burp Repeater,因为长度可能很短。当条件停止真实(即,当“欢迎回复”消息消失时),您已经确定了密码的长度,实际上,这是20个字符的长度。
- 确定密码的长度后,下一步是测试每个位置的字符以确定其值。这涉及更多的请求,因此您需要使用打击者。使用上下文菜单将您要处理的请求发送给Burp Intuder。
- 在Burp入侵者的“位置”选项卡中,通过单击“清除§”按钮来清除默认有效载荷位置。
在“位置”选项卡中,将cookie的值更改为:
trackingId = xyz'and(从用户中选择substring(password,1,1),username ='管理员')='a
这使用
substring()
功能可以从密码中提取单个字符,并根据特定值进行测试。我们的攻击将循环到每个位置和可能的价值,依次测试每个位置。在决赛周围放置有效载荷位置标记
一种
cookie值中的字符。为此,只选择一种
,然后单击“添加§”按钮。然后,您应该将以下内容视为cookie值(请注意有效载荷位置标记):trackingId = xyz'and(从用户中选择substring(密码,1,1),username ='管理员')='§A§
- 要测试每个位置的角色,您需要在定义的有效负载位置中发送合适的有效载荷。您可以假设密码仅包含小写字母数字字符。转到“有效载荷”选项卡,检查选择“简单列表”,然后在“有效载荷选项”下添加有效载荷在a -z和0-9中。。
- 为了判断正确的字符何时提交,您需要为“欢迎回来”的表达方式进行每个响应。为此,请转到“选项”选项卡和“ GREP-匹配”部分。清除列表中的任何现有条目,然后添加“欢迎回到”的值。
- 通过单击“入门攻击”按钮或从入侵者菜单中选择“开始攻击”来启动攻击。
- 查看攻击结果,以在第一个位置找到角色的值。您应该在结果中看到一个名为“欢迎回来”的列。其中一行应在此列中有一个滴答。该行的有效载荷是第一个位置的字符值。
现在,您只需要重新运行密码中每个角色位置的攻击即可确定其价值。为此,请返回到主burp窗口,然后返回Burp入侵者的位置选项卡,然后将指定的偏移量从1更改为2。然后,您应该将以下内容视为cookie值:
trackingId = xyz'and(从用户中选择substring(密码,2,1),username ='管理员')='a
- 启动修改后的攻击,查看结果,并在第二个偏移量下注意角色。
- 继续此过程测试偏移量3、4等,依此类推,直到拥有整个密码为止。
- 在浏览器中,单击“我的帐户”以打开登录页面。使用密码登录为
行政人员
用户。
笔记
对于更高级的用户,这里描述的解决方案可以通过各种方式更优雅。例如,您可以对角色空间进行二进制搜索,而不是迭代每个字符。或者,您可以创建一个具有两个有效载荷位置和“群集炸弹”攻击类型的入侵者攻击,并通过偏移和角色值的所有排列工作。