sqli-labs(24)


0x1 前言 

  SQL注入一般分為兩類:一階SQL注入(普通SQL注入),二階SQL注入 。二次注入不是注入兩次的意思,請不要混淆

0x2 什么是二階注入

  二階注入是指客通過構造數據的形式,在瀏覽器或者其他軟件中提交HTTP數據報文請求到服務端進行處理,提交的數據報文請求中可能包含了黑客構造的SQL語句或者命令信息。雖然參數在過濾后會添加 “\” 進行轉義,但是“\”並不會插入到數據庫中,這樣就可以利用這個構造一個二次注入。

  二階注入也稱為存儲型的注入,就是將可能導致SQL注入的字符先存入到數據庫中,當再次調用這個惡意構造的字符時,就可以出發SQL注入二次排序注入思

0x3一階注入和二階注入區別

一階注入原理 

  (1)一階SQL注入發生在一個HTTP請求和響應中,對系統的攻擊是立即執行的; 

  (2)攻擊者在http請求中提交非法輸入;

  (3)應用程序處理非法輸入,使用非法輸入構造SQL語句; 

  (4)在攻擊過程中向攻擊者返回結果。 

 二階注入原理: 

  (1)攻擊者在http請求中提交惡意輸入; 

  (2)惡意輸入保存在數據庫中; 

  (3)攻擊者提交第二次http請求;

   (4)為處理第二次http請求,程序在檢索存儲在數據庫中的惡意輸入,構造SQL語句; 

  (5)如果攻擊成功,在第二次請求響應中返回結果。

0X04源碼分析

a很明顯 在login的時候不能產生注入

那我們看看在創建新用戶這里呢 一樣進行了過濾

再來看看我們的修改密碼的頁面吶  誒 好像沒有過濾誒

 

 0X05注入開始

1 先創建一個含有注釋符的用戶 amin'#

(2)看下數據庫,成功添加了記錄(有人會有疑問,不是單引號進行了轉義了嗎,是的,雖然轉義了,但數據存入數據庫中還是單引號,轉義只不過是暫時的)

3)從上圖中可以看出管理員的密碼為admin, 我們現在來進行修改 先解釋下源碼中的sql語句

    原SQL語句:UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass'

   修改密碼sql語句:UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass'

   最后真正執行的sql語句:UPDATE users SET PASSWORD='$pass' where username='admin'

(4)好吧,開始吧,我們利用注冊的賬戶admin'#進行登錄,再進到修改密碼界面,將123456密碼改為000000

 

 

 

 

切記 學習之路 少就是多 慢就是快


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM