sqli-labs-less-24 post型基於儲存的二次注入

yzcn發表於2020-12-03

Less-24

本關為二次排序注入的示範例。二次排序注入也稱為儲存型的注入,就是將可能導致
sql 注入的字元先存入到資料庫中,當再次呼叫這個惡意構造的字元時,就可以出發 sql 注入。
二次排序注入思路:

  1. 黑客通過構造資料的形式,在瀏覽器或者其他軟體中提交 HTTP 資料包文請求到服務
    端進行處理,提交的資料包文請求中可能包含了黑客構造的 SQL 語句或者命令。
  2. 服務端應用程式會將黑客提交的資料資訊進行儲存,通常是儲存在資料庫中,儲存的
    資料資訊的主要作用是為應用程式執行其他功能提供原始輸入資料並對客戶端請求做出響
    應。
  3. 黑客向服務端傳送第二個與第一次不相同的請求資料資訊。
  4. 服務端接收到黑客提交的第二個請求資訊後,為了處理該請求,服務端會查詢資料庫
    中已經儲存的資料資訊並處理,從而導致黑客在第一次請求中構造的 SQL 語句或者命令在服
    務端環境中執行。
  5. 服務端返回執行的處理結果資料資訊,黑客可以通過返回的結果資料資訊判斷二次注
    入漏洞利用是否成功。

該關卡為post型基於儲存的二次注入

登入頁面:
在這裡插入圖片描述

我們先使用賬戶密碼登入:
登入進來之後可以進行密碼更改:
在這裡插入圖片描述

此外,還有一個新使用者註冊頁面:
在這裡插入圖片描述

該關卡的思路是,首先知道一個正常使用者的username,然後註冊一個新使用者,新使用者的username與正常使用者一致,只是在後面加上注入語句,這樣在新使用者更改密碼時,讓系統誤以為是正常使用者更改密碼,從而獲得正常使用者的賬號。

操作流程,假設我們知道有一個使用者的username為Dumb,現在我們註冊一個新username為Dumb’#,密碼為123456
在這裡插入圖片描述

註冊成功,並且可以成功登入。
下面,將Dumb’#的密碼修改為Dumb
修改成功後,我們使用password為Dumb可以登入進Dumb的賬號
在這裡插入圖片描述

這就是該關卡的操作,在僅僅知道一個賬戶的username情況下,可以將這個賬戶黑掉。

簡單從程式碼分析:
登入頁面Login.php:
在這裡插入圖片描述

可以看到在 u s e r n a m e 和 username和 usernamepassword中都使用mysql_real_escape_string()函式對字串中的常見特殊符號進行了轉義,說明登入頁面無法進行注入。

登入頁面無法注入,我們看一下注冊操作login _create.php:
在這裡插入圖片描述

這裡也進行了資料過濾,因此無法注入。

更改密碼操作pass_change.php:
在這裡插入圖片描述

這裡可以看到username並沒有進行轉義,因此沒有對資料進行過濾,所以我們更改Dumb’#的password時,實際上是更是了Dumb的password

相關文章