WordPress Plugin AutoSuggest插件SQL注入復現與分析
前言
由於筆者有個習慣,每天都會去exploit-db網站上去逛逛。最近就看到了一個WordPress插件問題導致的SQL注入漏洞,抱著好奇的心,我就開始這個漏洞的復現與分析。
WP AutoSuggest簡介
WP AutoSuggest 這款插件在訪問者輸入關鍵字時,插件會在提交搜索查詢之前通過AJAX請求在網頁中顯示一些建議。訪問者可以通過按Enter繼續搜索,或者訪問者可以使用鍵盤箭頭直接訪問建議的帖子。
漏洞復現
首先我們得進入exploit-db網站上下載這個存在漏洞的版本的插件源碼和本地搭建WordPress網站(本地搭建WordPress這裡就不說了)。下載源碼,如下圖所示:
下載完成之後,把wp-autosuggest目錄直接拖到Wordpress目錄的wp-contentplugins下。
接著,登錄後台,啟用這款插件,如下圖所示:
啟用後,退出後台,如下圖所示:
然後根據exploit-db網站上給出的漏洞詳情,我們訪問下面的URL:
http://www.yourwebsite.com/wp-content/plugins/wp-autosuggest/autosuggest.php?wpas_action=query&wpas_keys=1
訪問後,網頁內容如下圖所示:
根據exploit-db網站上給出的漏洞詳情,我們也知道了wpas_keys參數存在注入,於是我們可以使用SQLMAP注入神器,對網站進行注入。SQLMAP命令如下:
sqlmap.py -u "http://www.yourwebsite.com/wp-content/plugins/wp-autosuggest/autosuggest.php?wpas_action=query&wpas_keys=1*" --technique BT --dbms MYSQL --risk 3 --level 5 --tamper space2comment
一開始,筆者使用的時php5.2.17+Apache的環境,結果復現不了,頭疼了半天,如下圖:
後來筆者換了一個php-5.4.45+Apache的環境,就解決了。
通過SQLMAP,成功獲取到伺服器的一些信息,如下圖所示:
下圖也成功跑出了當前資料庫的名稱。
漏洞分析
分析WordPress插件的話還是挺容易的。文件和代碼也不是很多,用Notepad++就夠用啦。進入插件根目錄下面就看到了autosuggest_functions.php、autosuggest.php這兩個php文件。
下面是autosuggest.php文件的部分代碼:
<?php
include "autosuggest_functions.php";
$wpas_action = "";
$wpas_keys = "";
if(isset($_GET["wpas_action"])) {
$wpas_action = $_GET["wpas_action"];
}
if (isset($_GET["wpas_keys"])) {
$wpas_keys = $_GET["wpas_keys"];
}
相信大家沒看幾行就看出了問題的所在,變數wpas_keys是直接獲取GET中的wpas_keys。一點都沒過濾,並且在之後的代碼中(由於篇幅所限,後面的代碼未全部貼出),變數wpas_keys也帶入資料庫中查詢了(wpdb是wordpress操作資料庫方法),於是SQL注入就產生了。
修復建議
1、寫過濾函數,如使用正則表達式過濾傳入的參數。
2、對PHP進行安全配置。等等。
*本文作者:看不盡的塵埃,轉載請註明來自FreeBuf.COM
※PHP利用PCRE回溯次數限制繞過某些安全限制
※看我如何反覆獲取到HackerOne的漏洞測試邀請
TAG:FreeBuf |