sqli-labs靶場實現(十)【二次注入(二階注入)】(less-24、具體步驟+圖文詳解)
一)二次注入
1)二次注入介紹
2)二次注入程式碼分析
3)二次注入利用
4)二次注入危害
5)程式碼審計
————————————————————————————————————————————————————
一)二次注入
1)二次注入介紹:
網站伺服器和資料庫伺服器的互動是一個雙向的過程,使用者通過瀏覽器訪問網站伺服器進行使用者註冊,註冊之後就可以登入網站。此時註冊時的資訊會進行“註冊資訊儲存”(如:賬號、密碼),那麼也就會儲存到資料庫伺服器中就有了第一個輸入。之後我們進行資訊修改時也會進行資料庫的互動,那麼就會將第一次輸入的資訊提取出來之後進行修改再重新存入資料庫,實現第二次輸入。
以上是正常情況下的資訊修改和資料庫互動(沒有惡意,一般就是登入的密碼忘記了),但是如果 攻擊者將對應的payload輸入到登入框讓惡意程式碼植入資料庫並且成功執行,那麼這就是一個二次注入漏洞。 簡而言之,二次注入是指對已存的資料庫內容被讀取後再次進入查詢語句之後產生的惡意SQL語句。
二次注入需要具備的兩個條件:
a)使用者向資料庫插入惡意語句(即使後端程式碼對語句進行了轉義,如mysql_escape_string、mysql_real_escape_string轉義)。
b)資料庫對自己儲存的資料非常放心,直接取出惡意資料給使用者。
2)二次注入程式碼分析:
實現註冊的程式碼:
實現密碼修改的程式碼:
從程式碼中可以知道,此時如果在修改密碼的框中構造payload:其中使用者名稱假如是admin,我們將單引號閉合再結合 – 註釋符將後面的password註釋掉那麼就變成了:username='admin'--+
此時 ' and password='$curr_pass' "
都無效了。那麼此時只要指定表users中的所有為admin的使用者名稱的密碼都會被修改為我們修改的新密碼。
3)二次注入利用:
實現流程:
1)訪問存在SQL二次注入的網站,並且已知此網站中一個真正存在的使用者名稱:admin;
2)進入登入介面進行註冊:使用者名稱:admin'-- -,密碼:123456;
3)用新註冊的使用者和密碼登入網站;
4)點選“忘記密碼”對我們註冊的使用者名稱:admin'-- - 進行密碼修改:1234;
5)此時如果網站中原本的admin使用者使用此使用者名稱和原本他自己設定的密碼進行登入時,會顯示密碼錯誤,因為此時admin使用者的密碼已經被修改為1234了。
users表中存在一個使用者名稱和密碼均為admin的使用者,此時我們訪問網站,註冊一個新的使用者:
確定新建使用者的使用者名稱和密碼(admin’-- -或者admin’#或者admin’–+):
此時再次檢視user表中的資料會發現admin’-- -使用者出現了(第一次輸入):
此時使用admin’-- -使用者名稱和對應密碼就登入了,但我們的重點操作是接下來通過忘記密碼開始利用:
將admin’-- -使用者的密碼進行修改(第二次輸入)
此時再次檢視user表中的資料會發現admin’-- -使用者它的密碼並沒有改變,但是admin使用者的密碼卻變了:
5)程式碼審計:
註冊使用者時,網站出現問題的頁面很顯然是註冊頁面,與密碼修改重置頁面。他們僅對特殊字元進行了轉義,判斷輸入兩次密碼是否一致,然後將使用者鍵入,將資料插入至資料庫: $sql = "insert into users ( username, password) values(\"$username\", \"$pass\")"
。當攻擊者直接輸入構造的payload進行修改密碼:
$username= $_SESSION["username"];//直接取出了資料庫的資料
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";//對該使用者的密碼進行更新
$sql = "UPDATE users SET PASSWORD='12345678' where username='admin‘#
4)二次注入最常見的危害:
a)構造payload觸發二次SQL隱碼攻擊;
b)構造payload觸發XSS攻擊;
相關文章
- sqli-labs靶場實現(九)【寬位元組注入(1)、寬位元組注入(2)】(less-33、less-32具體步驟+圖文詳解)SQL
- sqli-labs靶場實現(二)【不顯示錯誤內容的盲注(布林、時間)】(less-8~10、具體步驟+圖文詳解)SQL
- pick靶場-sql注入SQL
- 關於安裝DNS伺服器的新增步驟具體圖文詳解DNS伺服器
- 簡單實現二次注入
- 求教:注入的具體實現類是哪一個?
- injectionForXcode程式碼注入步驟XCode
- 基於sqli-labs Less-5 sql報錯注入詳解SQL
- 基於sqli-labs Less-1的sql聯合注入詳解SQL
- 二次注入(SQL)SQL
- 依賴注入?依賴注入是如何實現解耦的?依賴注入解耦
- SQL 注入技術詳解SQL
- Android RecyclerView-使用Itemdecoration實現粘性頭部功能,詳細到具體步驟.AndroidView
- 基於sqli-labs Less-7 的sql高權讀寫注入詳解SQL
- XML實體注入漏洞XML
- Spring注入:配置注入(set注入和構造器注入)與註解注入Spring
- 玩一玩sqli-labs靶場SQL
- 封神臺 SQL隱碼攻擊 靶場 (貓舍)手動注入SQL
- sqli-labs ————Stacked 注入攻擊介紹SQL
- SQL隱碼攻擊之常見注入的步驟④SQL
- JWT 擴充套件具體實現詳解JWT套件
- 常見sql注入原理詳解!SQL
- SQL 注入攻防入門詳解SQL
- iOS framework的具體合成步驟iOSFramework
- 使用Oracle Statpack的具體步驟Oracle
- 十分鐘快速掌握HashMap底層實現原理(圖文詳解)HashMap
- 十幾行程式碼實現一個ts依賴注入行程依賴注入
- iOS實現依賴注入iOS依賴注入
- u盤裝系統詳細步驟(圖文搭配)
- 如何實現Java 設定動態代理ip的具體操作步驟Java
- 實現PMC的數字化轉型需要哪些具體的步驟?
- 網路綜合佈線的具體實施步驟
- SQL隱碼攻擊 - 手工注入sqli-labsSQL
- Spring實現無需註解實現自動注入Spring
- 詳細講解DB2資料庫效能監控的具體步驟DB2資料庫
- Dependency Injection-依賴注入詳解依賴注入
- 常見程式注入的實現及記憶體dump分析——反射式DLL注入(上)記憶體反射
- 常見程式注入的實現及記憶體dump分析——反射式DLL注入(下)記憶體反射