Bludit CMS 3.9.2及之前版本存在一个安全漏洞,可绕过其针对登录失败10次以上用户所设置的抗暴力破解机制。
该漏洞由 Rastating 发现。
提交一个带有 X-Forwarded-For 头值(伪造字符串)的登录请求时,该请求会被成功处理,而失败的登录尝试则会记录在该伪造字符串上。
上述脚本正是利用此漏洞绕过抗暴力破解机制。
登录页面的请求体中包含 csrf 令牌,因此在每次携带凭证发送 POST 请求之前,都需要从上一次响应的源码中获取 csrf 令牌。
一种实现方法是:先发送 GET 请求获取 csrf 令牌,再发送携带凭证和获取到的令牌的 POST 请求,然后重复此过程直至找到密码——这也是我在大多数脚本中看到的方式。
另一种方式是从上一次 POST 请求的响应中获取 csrf 令牌,因此仅在首次需要发送 GET 请求。
第二种方式比第一种方式快得多,而在暴力破解攻击中,效率的微小提升会对大量请求产生巨大影响。
我尝试了两种方式,第二种方式在1分钟内测试了63个单词,而第一种方式只测试了19个单词。
python3 brute.py -u [url] -user [用户名] -w [字典路径] [-t [使用的线程数]]
python3 brute.py -u https://192.168.10.13/ -user admin -w sysadmin -t 30
