在渗透测试时,为了获取登录凭据有时需要使用Intruder进行暴力破解,但如果登录请求中包含CSRF token或特定的cookie等动态变化的数值就不太好办了。本文章就是专门讲述怎么解决此类问题的。
下面以实例展现整个过程。
首先捕获请求并查看响应。以下是响应的示例
在此响应中,我们注意到除了username和password字段之外,现在还有一个session,以及表单中作为hidden字段的CSRF token(名为loginToken)。刷新页面会发现session 和loginToken都会随着每个请求而更改。每次提交登录的POST请求时,需要附加上次GET请求获取的session和loginToken。
这意味着对于每次登录尝试,我们都需要提取cookie中的session和 loginToken 的有效值。
为了实现这一点,我们将使用Burp Macros来定义在每个请求之前执行的一组重复操作(宏)。该宏将提取session和loginToken的数值,并在我们攻击的每个后续请求中替换它们。
首先,我们调用Intruder,设置Attack Type为Pitchfork,在Payloads选项卡加载我们获知的username和password的字典文件。
到目前为止,我们以与之前的撞库攻击几乎相同的方式配置了Intruder,下面就是事情变得更加复杂的地方。我们现在需要找到一种方法来获取不断变化的loginToken和名为session的cookie。下面演示怎样使用Burp Macro实现。
》切换到 Burp 右上角的Settings选项卡。
》单击Sessions,向下滚动到底部的Macros部分,然后单击Add按钮
》弹出的菜单将向我们显示所有的请求历史记录,选择导航到http://10.10.26.46/admin/login/的GET请求,单击OK按钮
》最后,为宏指定一个名称,譬如Grab CSRF。然后再次单击OK
现在我们已经定义了宏,需要设置会话处理规则来定义如何使用宏。
》仍然在Sessions窗口,向上滚动到Session handling rules部分,然后单击Add按钮,添加新规则。
》在新弹出的窗口中,有两个选项卡:Details、Scope。默认情况下,我们位于Details选项卡。填写适当的描述,譬如Rule 1,然后切换到Scope选项卡。
》在Tools scope部分,仅选择Intruder。因为我们不需要将此规则应用到其他地方。在URL scope部分,选择Use custom scope,并添加http://10.10.26.46/到此范围
》现在我们切换到Details选项卡,并查看Rule actions部分。单击Add按钮,将出现下拉菜单
》从列表中选择Run a macro
》在出现的新窗口中,选择之前创建的宏Grab CSRF。
现在,这个宏将在我们发送Intruder请求之前覆盖所有参数。这意味着我们需要将loginToken和名为session的cookie直接添加到我们的请求中。也就是说,我们要在开始攻击前说明需要更新哪些参数和cookie。
》选择Update only the following parameters and headers,然后单击输入框旁边的Edit按钮
》在文本框输入loginToken,单击Add按钮,再按Close按钮
》选择Update only the following cookies,然后单击Edit按钮
》在文本框输入session,按Add按钮,然后按Close按钮。
》最后按OK,确认上述操作。
现在已定义了一个宏,它将替换CSRF令牌和名为session的cookie,剩下要做的就是切换回Intruder并开始Attack。然后按长度排序,以找到有效的登录凭据。