二次注入原理及防禦

2022-02-19 10:22:08 字數 1719 閱讀 6175

二次注入需要具備的兩個條件:

(1)使用者向資料庫插入惡意語句(即使後端**對語句進行了轉義,如mysql_escape_string、mysql_real_escape_string轉義)

(2)資料庫對自己儲存的資料非常放心,直接取出惡意資料給使用者

(1)在sqli_libs的第24關,其頁面如下所示:

(3)因此可以嘗試在註冊頁面進行二次注入,首先,我們註冊乙個賬號,名為:admin'#   ,密碼為:123456

(4)註冊成功,嘗試登入admin『#  ,然後可以檢視一下phpmyadmin內儲存情況

(5)而這時的admin原密碼是admin,並且兩個賬號都儲存在資料庫內的。當我們重新修改admin'#的密碼的時候,這裡修改為:12345678;可以發現二次注入的威力所在。admin的密碼被修改為了:12345678;而admin'#使用者的密碼並沒有發生變化。

(6)**審計,嘗試分析原始碼,出現問題的頁面很顯然是註冊頁面,與密碼修改重置的頁面。

註冊使用者時:

僅對特殊字元進行了轉義,判斷輸入兩次密碼是否一致,然後將使用者鍵入,將資料插入至資料庫。

$sql = "insert into users ( username, password) values(\"$username\", \"$pass\")"

這裡直接插入了資料

修改密碼時:

$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『#

執行成功!

(1)對外部提交資料謹慎(2)從資料庫取資料時,不能輕易相信查詢出的資料,要做到同樣的轉義或是甄別

SQL注入 二次注入的原理 利用以及防禦

二次注入是指已儲存 資料庫 檔案 的使用者輸入被讀取後再次進入到 sql 查詢語句中導致的注入。二次注入是sql注入的一種,但是比普通sql注入利用更加困難,利用門檻更高。普通注入資料直接進入到 sql 查詢中,而二次注入則是輸入資料經處理後儲存,取出後,再次進入到 sql 查詢。在第一次進行資料庫...

mysql注入 二次注入

場景 系統對傳入值使用mysql escape string做了轉義處理,不能直接注入,但取出值時會自動轉義,而 中未再次轉義就放到sql語句中使用 非預處理方式 使得間接注入成功,實際場景 乙個含有註冊 登入 修改密碼功能的系統。資料庫中有乙個使用者名為admin,密碼為admin的使用者,現註冊...

SQL二次注入

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