SQL注入漏洞分析

2022-09-23 22:24:23 字數 1550 閱讀 6557

一、背景介紹

hongcms是乙個輕量級的中英文企業**系統,訪問速度極快,使用簡單,程式**簡潔嚴謹,功能強大,完全免費開源,可用於建設各種型別的中英文**,同時它是乙個小型開發框架。

二、漏洞描述

程式在後台進行清空資料庫操作時對傳入的資料庫名過濾不嚴格,可插入和執行惡意sql語句。

三、影響版本

hongcms

四、漏洞細節

首先,我們登入到**後台管理定位到系統—>資料庫維護。

系統預設情況下只允許我們對sessions和vvc資料表進行清空操作,我們隨機選擇乙個,此處我使用vvc表來進行分析,隨後我們點選清空按鈕並結合phpstorm對執行流程進行動態除錯。為了方便大家能清楚地看清執行過程,筆者已經在關鍵的函式位置設定了斷點。

首先程式在app.php第170行使用call_user_func函式對接受的引數進行動態函式**:

跟進operate:

將資料表名稱傳遞給forcestringfrom函式,繼續跟進forcestringfrom:

forcestringfrom通過$_get[$variablename]獲取我們傳遞的tablename引數值並傳遞給了forcestring,跟進forcestring

forcestring判斷invalue是否為字串之後隨即將值傳遞給給escapesql,函式進行安全過濾,繼續跟進。

首先函式判斷了gpc是否開啟,如果開啟則使用stripslashes進行過濾,否則將使用htmlspecialchars並對\0和空格字元進行了替換,隨後判斷mysql_real_escape_string或mysql_escape_string函式是否存在,並呼叫相應的函式進行編碼,否則使用addslashes。隨後程式進入switch語句進行動作匹配,根據不同的action引數值進行相應的操作。

我們定位到emptytable,程式將tablename值傳入了emptytable函式。

跟進emptytable。

在這裡我們看到定義了要執行的sql語句,並將其傳入了exe函式,跟進exe。

exe接收了傳遞的sql語句後隨即進行了執行,並返回執行結果。

最後呼叫printresults將結果列印到後台顯示,我們可以看到在整個執行過程中程式僅僅使用了內建的函式和簡單的替換函式對傳入的引數值進行了安全處理,而這些函式是可以被繞過的。

五、漏洞復現

經過上一節的分析,下面我們就要著手構造我們的sql語句,同樣我們定位到資料表操作的頁面點選要清空的資料表,隨後我們用burp截斷來修改我們的資料表名稱來注入我們構造的sql語句。

此處我們將資料表名稱改為` where vvcid=1 orupdatexml(2,concat(0x7e,(version())),0) or `

同樣我們來跟蹤我們傳入的引數值:

可以看到我們成功的繞過了程式的安全防護並正確的進行了返回,我們繼續往下走看看最終的要執行的sql語句,是否是我們想要的結果。

看到執行的sql語句和我們預想的一樣,我們返回後台頁面看看執行的結果:

可以看到當前使用的資料庫版本已經被查詢了出來。

六、修補措施

系統已停止維護,可以考慮自行安裝waf進行防護。

SQL注入漏洞

sql注入漏洞曾經是web應用程式的噩夢,cms bbs blog無一不曾受其害。sql注入的原理 以往在web應用程式訪問資料庫時一般是採取拼接字串的形式,比如登入的時候就是根據使用者名稱和密碼去查詢 string sql select top 1 from user where username...

SQL注入漏洞

sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令,比如先前的很多影視 洩露vip會員密碼大多就是通過web表單遞交查詢字元暴出的,這類表單特別容易受到sql注入式攻擊 sql注入的發生 當應用程式使用輸入內容來構造動態sq...

sql注入漏洞

什麼是sql注入 通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。通俗地講,它是利用現有應用程式,將 惡意 的sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,而...