实验环境说明
- 本次实验依旧基于DVWA 靶场,安全级别设置为Medium。
- 进入 Brute Force 相关题目进行测试。
一、Medium 安全级别:延迟响应防御
- 查看源码时会发现多了一行 sleep(2),即登录失败后服务器会延迟 2 秒返回结果。
- 用户名和密码校验:收到用户名和密码后,直接查表进行匹配。
- 延时响应:当用户名或密码不匹配时,服务端延迟 2 秒响应。
- 显著延长暴力破解所需总时间,降低破解效率。
- 但本质上只是增加时间成本,如果攻击者有足够耐心,仍可能成功破解。
二、High 安全级别:引入 Token 防御
- CSRF Token 校验具体什么是 CSRF Token 校验,可以参考:Check Anti-CSRF Token (AI)-CSDN博客
- 除用户名和密码外,新增了名为 ntc srf token 的一次性 Token。
- 每次请求都需带上服务端下发的 Token,且 Token 用过即失效。
- 防止第三方网站利用已登录用户身份发起伪造请求。
- 随机延迟响应sleep 时间变为 0~3 秒随机,进一步增加破解难度。
工具测试与配置要点
- 开启 Burp Suite 代理,登录抓包,发现请求中新增了 Token 字段。
- 这次有两个字段需要添加,一个是密码,一个是 Token,如下图:
- 破解模式选择
- sniper 不适用,因为只能拆解一个字段。
- pitchfork 可以考虑,但实际上也不适用,因为 Token 是一次性的,不能与密码字典一一对应。
- cluster bomb 也不行,因为 Token 用一次即失效,不能与密码做交叉验证。
- 因此这里只能用 pitchfork 模式。
- 第一个字段为密码,载入密码字典,如下图:
- 这里需要用到 Burp Suite 的 recursive grep 递归匹配模式,从上一次 HTTP 响应中提取 Token。
- 在 Options 中设置 grep extract 规则,匹配隐藏字段中的 Token 值。
- 我们要去添加一个规则。这个规则当然是从 http 响应结果值里面去匹配到一个文本,但是怎么匹配呢?你现在又没有一个响应结果啊,所以我们先拿到一个响应结果再说。
- 实际上在 DVWA 的关卡里面,它是怎么样去保存这个 cookie,并且发给服务器的呢?它是放在了前端的一个 input 的 hidden 属性字段里面,所以我们选中它。
- 选中它之后,BP 会生成一个规则。
- 它的意思是什么呢?在上一次 http 的响应结果里面如果说有一串文本,它的前面是 value + 等于号 + ' , 后面是'(空格)/
这串东西的话,那中间的这个内容,就是我们需要的 token 值。
- 点了确定后就有这个规则了。
- 第一次请求需手动填入 Token,后续自动递归提取。
- 看一下我这个啊,第一次的 Token 你要复制到下面那个框框里面,如果你是从上面的步骤一直做下来的,正常来说是只有一个规则的,博主这里有两个纯纯手贱。
- 我们来分析一下:这个 token 是我们填进去了,然后发起了一次 http 的请求,服务器又给了他一个 token。他把拿到的这个 token 作为第二次请求,然后发起请求又得到一个 token,把这个 token 作为第三次请求的 token,它是串行依次这样去访问的。
- 这边排序一下就可以知道哪个是正确的密码了,就是这个 password。
- 我们其实在看上面的图的时候,会有个疑问:如果我们的数量太大了,一下子抓包的响应数太多怎么办?那我们可以先过滤一下。
- 回到题目来,我们这次输入一个正确的账号密码看看。
- Welcome to the password protected areaadmin
- 这一串就是我们要过滤的内容。
- 然后我们要再抓一次包,不然第一次的 Token 就没有了,我们也就不能叠罗汉了。
- 之前做过的操作再复刻一遍就行了。
- 可在 Options 中设置 grep match,如响应结果中包含 "Welcome to the password protected areaadmin" 即自动打标记,便于快速定位正确密码。
- 这个 √ 是它自己打的。
三、Impossible 安全级别:账户锁定机制
- Token 校验持续存在:每次请求仍需有效 Token。
- 错误次数限制与账户锁定:
- 错误次数记录:数据库记录每个账户的错误尝试次数,超过上限即禁用账户。
- 进一步延长响应时间:sleep 时间进一步增加,提高攻击成本。
- 通过限制尝试次数,从根本上杜绝了暴力破解的可能,是最有效的防御方式之一。