什么是二次注入?
簡單的說,二次注入是指已存儲(數據庫、文件)的用戶輸入被讀取后再次進入到 SQL 查詢語句中導致的注入。
網站對我們輸入的一些重要的關鍵字進行了轉義,但是這些我們構造的語句已經寫進了數據庫,可以在沒有被轉義的地方使用
可能每一次注入都不構成漏洞,但是如果一起用就可能造成注入。
原理:
二次注入需要具備的兩個條件:
(1)用戶向數據庫插入惡意語句(即使后端代碼對語句進行了轉義,如mysql_escape_string、mysql_real_escape_string轉義)
(2)數據庫對自己存儲的數據非常放心,直接取出惡意數據給用戶
登錄頁面 新建用戶
數據插進去了

登錄
修改密碼

修改完后查看下,當前賬號admin'# 並沒修改到密碼 還是原來的123456 倒是把表中另一個admin賬號修改了
查看修改密碼頁面的源代碼
傳進來的的語句變成了這樣
$pass變量=傳進來的新密碼 $username 當前用戶 $curr_pass 當前用戶登錄密碼
$sql = "UPDATE users SET PASSWORD='123456789' where username='admin'#' and password='$curr_pass' ";
#把后面的都給注釋了,所以就是修改了admin用戶的密碼為123456789
用這條語句把admin改回原來的密碼
update users set password='admin' where username='admin'#' and password=123456789;