mysql注入 二次注入

2021-09-21 14:49:22 字數 956 閱讀 1436

場景:

系統對傳入值使用mysql_escape_string做了轉義處理,不能直接注入,

但取出值時會自動轉義,而**中未再次轉義就放到sql語句中使用(非預處理方式),使得間接注入成功,

實際場景:乙個含有註冊、登入、修改密碼功能的系統。

資料庫中有乙個使用者名為admin,密碼為admin的使用者,

現註冊乙個使用者名為admin ' #,密碼為12345的使用者。

登入後將其密碼修改為test

因為修改密碼時會取出反轉義後的使用者名稱,**將其直接用於sql語句,所以導致驗證舊密碼的部分被忽略執行。

修改密碼的sql語句:

update users set password =

'$pass'

where username =

'$user'

and password =

'$cur_pass'

;

因為未對$user做轉義,所以會執行

update users set password =

'test'

where username =

'admin'

#' and password = '123456';

#後的**會被忽略執行,所以最後等於無附加條件執行把admin的密碼改為test

SQL二次注入

一 是什麼?何為二次注入?為了預防sql注入攻擊,而將輸入到應用程式中的某些資料進行了 轉義 escape 但是這些資料卻又在 未被轉義 unescaped 的查詢窗體中重複使用。簡單地說,二次注入和普通注入一樣是乙個程式漏洞,它發生在使用者提交的值被儲存在資料庫中,然後這個值被應用程式中的某些其他...

sqli 二次注入

針對場景 存在另一處操作直接呼叫輸入資料而不做其他處理 關鍵 尋找另一處引用這個資料的操作 如果另一處操作直接將1 作為變數帶進自身的sql語句中,且未做如轉義等處理,那1 的單引號便會發生作用,起到sql注入的效果 以sqlilabs 24關為例 先點選forget your pass?出來如下頁...

二次注入詳解

目錄前幾天看一些面經的時候,看到sql注入的二次注入,當時沒一下子反應過來,好傢伙,趕緊再次去那個靶場sqli labs less24復現一下二次注入。二次注入可以理解為,攻擊者構造的惡意資料儲存在資料庫後,惡意資料被讀取並進入到sql查詢語句所導致的注入。防禦者即使對使用者輸入的惡意資料進行轉義,...