繞過登錄的萬能密碼 SQL 注入
Portswigger練兵場之SQL注入
SQL 注入-繞過登錄的萬能密碼
Lab: SQL injection vulnerability allowing login bypass
實驗前置必要知識點
正常一個沒有防護的應(yīng)用程序,允許用戶使用用戶名和密碼登錄。
如果用戶提交用戶名和密碼,應(yīng)用程序?qū)⑼ㄟ^執(zhí)行以下 SQL 查詢來檢查憑據(jù):
SELECT * FROM users WHERE username = 'wiener' AND password = 'bluecheese'
如果查詢返回用戶的詳細信息,則登錄成功。否則,將被拒絕。
如果遇到防護較低的應(yīng)用程序,在這個時候利用注釋的方法,讓查詢帳號的結(jié)果返回真,忽略掉密碼部分,即萬能密碼登錄系統(tǒng)。
SELECT * FROM users WHERE username = 'administrator'--' AND password = ''
此查詢返回用戶名為administrator
的用戶,并成功將攻擊者登錄到該用戶。
實驗要求
本實驗在登錄函數(shù)中包含一個?SQL
注入漏洞。
若要解決實驗室問題,請執(zhí)行以administrator
用戶身份登錄到應(yīng)用程序的 SQL 注入攻擊。
滲透開始
訪問對應(yīng)靶場界面
https://portswigger.net/web-security/sql-injection/lab-login-bypass
啟動靶場
1. 站點分析
這是購物類型的網(wǎng)站

具有查看商品以及登錄的功能點

環(huán)境搭建資料+工具包+全套視頻 - 嗶哩嗶哩
2. 尋找可疑功能點(查看Burp歷史記錄進行分析)
從總體來看,根據(jù)提示需要關(guān)注的是登錄功能點

因此,分析突破口在這
3. 功能點測試
將對應(yīng)的日志信息發(fā)送到重放模塊

如果登錄處存在無防護的SQL
注入的話,首先我們嘗試讓語句報錯,添加'

很直觀的發(fā)現(xiàn)500
報錯了

添加2個'發(fā)現(xiàn)變回了200
說明是單引號閉合的SQL
語句
推測應(yīng)用程序會將輸入的賬號密碼通過執(zhí)行以下SQL
查詢來檢查憑據(jù):
SELECT * FROM users WHERE username = 'aaa' AND password = 'bbb'
可以確定的是賬號和密碼處是可控的
SELECT * FROM users WHERE username = '{賬號}' AND password = '{密碼}'
根據(jù)提示,需要登錄的賬號是administrator
,因此先修改username
參數(shù)
SELECT * FROM users WHERE username = 'administrator' AND password = '{密碼}'
如果查詢的時候讓賬號為真并且忽略掉后面的內(nèi)容,根據(jù)SQL
的邏輯,賬號存在為真會返回True
,而應(yīng)用程序根據(jù)返回為真的情況允許用戶登錄
SELECT * FROM users WHERE username = 'administrator' -- q' AND password = '{密碼}'
利用注釋的方法忽略掉密碼,嘗試在username
參數(shù)后administrator
拼接' --
因為是在POST
傳參中,不需要像GET
一樣進行URL
編碼操作
csrf=lsKpaUmIveO1R6uh8ap9d1OFNOGu14Vv&username=administrator' -- q&password=bbb
發(fā)現(xiàn)成功重定向進行了登錄

4.完成實驗
構(gòu)造語句

發(fā)現(xiàn)需要令牌

直接復(fù)制之前的set-cookie
進行登錄,成功完成了實驗
