SQL二次注入

2021-08-29 23:49:52 字數 1331 閱讀 2054

(一)是什麼?

——何為二次注入?

——為了預防sql注入攻擊,而將輸入到應用程式中的某些資料進行了「轉義(escape)」,但是這些資料卻又在「未被轉義(unescaped)」的查詢窗體中重複使用。

簡單地說,二次注入和普通注入一樣是乙個程式漏洞,它發生在使用者提交的值被儲存在資料庫中,然後這個值被應用程式中的某些其他功能使用而不轉義或者過濾資料。

(二)區別

普通注入:(1)在http後面構造語句,是立即直接生效;

(2)普通注入很容易被掃瞄工具掃瞄到。

二次注入:(1)先構造語句(此語句含有被轉義字元的語句);

(2)將我們構造的惡意語句存入資料庫;

(3)第二次構造語句(結合前面已被存入資料庫的語句構造。因為系統沒有對已存入的資料做檢查,成功注入);

(4)二次注入更加難以被發現。

(三)二次注入示例

用模擬登陸和修改密碼進行操作:

首先,假設我們註冊了兩個使用者:使用者①名字為「csdner」,密碼是「csdner123456」;

使用者②名字為「csndner'--」 ,密碼是「csdner1111」。

請注意,此處的使用者②的名字就是sql注入有效負載,它沒有被轉義或者截斷,而是按照原樣儲存在了資料庫中。

然後,我們登陸使用者②,並修改它的密碼為「csdn222」。注意此時登陸的是使用者②。因此,我們為此使用者名稱構造密碼更改查詢

update users

set password='csdn222'

where username='csdner'--' and password='csdn1111'

記住此時被查詢的是使用者②。但是,因為在sql中,--是開啟注釋的標誌,這樣子的話,不知不覺中被更改密碼的成了用

戶①(實際上,上面的**已經自動被csdn當做注釋處理了,恰好成了注入的樣子)

也就是說,現在的查詢語句長下面這個樣子:

update users

set password='csdn222'

where username='csdner'

查詢導致更新使用者「csdner」的密碼,而不是「csdner'- - 」 因此成功執行二階sql注入。

(四)小結

參考了網上的資料,總結一下二次注入的精髓就是,第一次構造的語句只是為了第二次構造做的鋪墊,第二次才是真正的攻擊。

當然,二階sql注入也適用於其他場景,其中資料庫中的資料是要被檢索的。

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

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

記一次sql二次注入

簡單的說,二次注入是指已儲存 資料庫 檔案 的使用者輸入被讀取後再次進入到 sql 查詢語句中導致的注入。相比於直接注入,二次注入是比較有趣的。因為他會把你第一次的請求儲存,然後在第二次使用到的時候,才會啟用並且返回結果。例如在某個插入功能中,我們插入構造的sql語句,此時並沒有什麼現象,但是當瀏覽...

mysql注入 二次注入

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