概述
關于SQL注入,想必這里也不用多講。互聯網上關于SQL注入的Paper、Blog有很多,以及各個漏洞平臺層出不窮的漏洞報告。但是,這些漏洞都有一個很大的共同點:數據查詢參數過濾不夠嚴謹所導致的Select型注入。
這兩天在對一個WordPress插件漏洞分析的時候,發現其漏洞存在于Insert語句之中,和之前所接觸到的漏洞有很大的不同。于是對這個漏洞進行了深入的分析、實驗、思考、總結,下面是這次漏洞研究的詳細過程。
過程記錄
WordPress漏洞:
首先得說明一下這個WordPress插件漏洞(WordPress Simple Ads Manager),https://www.exploit-db.com/exploits/36613/,這個exploit中包括了多個注入漏洞,我們主要關注的是 SQL INJECTION 1.
上圖中主要的信息有三個,從上之下分別是:①注入頁面 ②注入點 ③漏洞代碼
漏洞環境:
為了能夠漏洞重放,首先就是環境搭建。我的測試環境中有WordPress,只需要安裝存在此漏洞的插件即可。下面是我的實驗環境:
- OS: CentOS 6.6
- PHP: 5.3.3
- Mysql: 5.1.73
- WordPress: 4.2-zh_CN
- Simple-Ads-Manager: 2.6.96
安裝此插件后,需要啟用此插件。然后在后臺添加一個測試的Ad,并在文章中引用此Ad.下面是我的測試Ad:
當訪問帶有此Ad的頁面是,就會觸發此漏洞頁面。
漏洞驗證:
使用Burpsuite Repeater重放測試,正常的請求
紅色框為請求的參數信息
- action=sam_hits&hits%5B0%5D%5B%5D=1&hits%5B0%5D%5B%5D=1&level=3
解碼為:
- action=sam_hits&hits[0][]=1&hits[0][]=1&level=3
綠色框為返回的信息
竟然返回sql,不過這不是重點,都可以拿到源代碼什么看不到呢?
這里有兩個hits[0][],前面的對應的sql語句中的pid,后門的對應的是id. 下面根據上面的WordPress漏洞進行注入測試:
- Paylaod: (select 1)
咋一看,雖然提示success,感覺有點不對勁。
- Payload: (select * from (select (sleep(5)))abcd)