二次注入詳解

2022-10-09 19:45:11 字數 1662 閱讀 8788

目錄前幾天看一些面經的時候,看到sql注入的二次注入,當時沒一下子反應過來,好傢伙,趕緊再次去那個靶場sqli-labs/less24復現一下二次注入。

二次注入可以理解為,攻擊者構造的惡意資料儲存在資料庫後,惡意資料被讀取並進入到sql查詢語句所導致的注入。防禦者即使對使用者輸入的惡意資料進行轉義,當資料插入到資料庫中時被處理的資料又被還原,web程式呼叫儲存在資料庫中的惡意資料並執行sql查詢時,就發生了sql二次注入。

也就是說一次攻擊造成不了什麼,但是兩次配合起來就會早成注入漏洞。

兩次注入分別是插入惡意資料利用惡意資料所以也就是滿足這兩個條件即可

首先進入靶場,可以看到與其他靶場不同,這裡多了忘記密碼和註冊密碼選項

嘗試常規post注入,未果。

這裡看到後端原始碼會發現使用了轉義函式mysql_real_escape_string,常規sql注入流程無法走了

既然可以註冊賬戶那就去註冊一下,這裡直接註冊admin'#

用註冊的賬號登入進去後發現可以修改密碼

修改密碼這個模組也可以利用,我們不妨想一下修改密碼後端實現的邏輯,使用的肯定是sql增刪改查中的改語句,於是猜想對應sql語句可能會是這樣

update users set password='$new_pass' where username='$user' and password='$old_pass';
(當然閉合方式不一定就是單引號,這裡需要碰運氣吧。。)

如果我們註冊乙個這樣的賬號admin'#上述sql語句就變成這樣

update users set password='$new_pass' where username='admin'# and password='$old_pass';
顯而易見,語句原義被破壞,本來修改的是admin'#使用者的賬號和密碼,現在卻是變成了直接修改admin使用者的密碼!

那就隨便輸入個密碼123456修改後再拿它去嘗試登入admin賬戶,發現成功登入。

說明資料庫中admin使用者的密碼已經被成功改為123456

mysql注入 二次注入

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

SQL二次注入

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

sqli 二次注入

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