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

2021-10-10 18:46:54 字數 938 閱讀 2840

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

在第一次進行資料庫插入資料的時候,僅僅只是使用了 addslashes 或者是借助 get_magic_quotes_gpc 對其中的特殊字元進行了轉義,在後端**中可能會被轉義,但在存入資料庫時還是原來的資料,資料中一般帶有單引號和#號,然後下次使用在拼湊sql中,所以就形成了二次注入。

過程

插入1『#

轉義成1\』#

不能注入,但是儲存在資料庫時變成了原來的1』#

利用1』#進行注入,這裡利用時要求取出資料時不轉義

換言之, 二次注入需要具備的兩個條件:

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

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

:以sqli-lab24為例

1正常來說無法通過注入來登入admin,因為使用者輸入會被轉義

2註冊admin 『#

3登入admin 『# 轉義成admin\』#,則登入的是admin』#

4修改admin 『# 由於這裡不會被轉義,故可以直接利用,這個時候就變成了修改了admin的密碼了

1 解決sql注入最推薦的方法還是預處理+資料繫結。

2 另乙個防禦的點就是 對輸入一視同仁,無論輸入來自使用者還是儲存,在進入到 sql 查詢前都對其進行過濾、轉義

SQL二次注入

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

sql 注入 白帽子 SQL注入之二次注入

原理 使用者向資料庫裡存入惡意的資料,在資料被插入到資料庫之前,肯定會對資料庫進行轉義處理,但使用者輸入的資料的內容肯定是一點摸樣也不會變的存進資料庫裡,而一般都預設為資料庫裡的資訊都是安全的,查詢的時候不會進行處理,所以當使用者的惡意資料被web程式呼叫的時候就有可能出發sql注入。二次注入比普通...

mysql注入 二次注入

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