沒有哪一個(gè)CMS是不存在漏洞的,需要耐心的審計(jì)才能突破屏障
2021-08-07
因傳播和使用本文提供的信息而造成的任何直接或間接后果和損失由用戶本人負(fù)責(zé),雷神公測(cè)和本文作者對(duì)此不承擔(dān)任何責(zé)任。
雷神中策擁有對(duì)本文的修改和解釋權(quán)。如需轉(zhuǎn)載或傳播本文,必須保證本文的完整性,包括版權(quán)聲明等所有內(nèi)容。未經(jīng)雷神公測(cè)許可,不得隨意修改或添加、刪除本文內(nèi)容,不得以任何方式用于商業(yè)用途。
第一名
關(guān)于
極品CMS是一款綜合了該類CMS諸多特點(diǎn)的商城CMS,其項(xiàng)目經(jīng)理在更新速度和優(yōu)化上也下了不少功夫。當(dāng)然,沒有一個(gè)CMS沒有漏洞,需要非常耐心的審核才能突破
2號(hào)
預(yù)審階段
信息收集
在代碼審計(jì)開始之前,還必須收集信息。我們需要了解以下幾點(diǎn):
1.漏洞數(shù)據(jù)庫中出現(xiàn)的經(jīng)審計(jì)的 CMS 中的漏洞類型有哪些?
2.社區(qū)Bug收集區(qū)提供的信息
3.每個(gè)版本的更新版本內(nèi)容
4.作者其他作品中出現(xiàn)的漏洞
選定的審核版本
盡量選擇比更新版本低的最高版本,這樣可以比較更新內(nèi)容更快的審計(jì)漏洞,也可以使用低版本對(duì)新版本的特性有一個(gè)大致的了解,因?yàn)榇蠖鄶?shù) CMS 都有一些漏洞。找到了,版本更新就在那里
環(huán)境安裝
本地設(shè)置環(huán)境,+就可以了
3號(hào)
極致CMS--PHP代碼審計(jì)
前期工作
查看官網(wǎng)版本,了解大體結(jié)構(gòu)
我們選擇【 CMS v1.7.1 版本】進(jìn)行代碼審計(jì)
查看v1.8版本對(duì)比更新內(nèi)容
獲取有益信息
1. XSS 過濾不徹底導(dǎo)致多個(gè) XSS
2.微信支付寶支付插件存在未知bug
3.之前版本的數(shù)據(jù)庫報(bào)的錯(cuò)誤可能會(huì)顯示錯(cuò)誤頁面,并且存在SQL注入
您可以通過搜索引擎查看
之前的漏洞大多在于過濾不完整,1.7版本之前的漏洞大多非常嚴(yán)重
去社區(qū)查看已經(jīng)出現(xiàn)的bug
好的,信息已經(jīng)大致了解了php代碼注入漏洞,確定審核方向
1. SQL注入和XSS因?yàn)檫^濾代碼可能寫不全,重點(diǎn)審計(jì)
2.最新版本更新了不顯示錯(cuò)誤報(bào)告的頁面,審計(jì)過程關(guān)注可能出現(xiàn)數(shù)據(jù)庫錯(cuò)誤的頁面。
3. CMS啟動(dòng)過程中測(cè)試不完整也導(dǎo)致了一些不應(yīng)該出現(xiàn)的bug
4.注意用戶之間的未授權(quán)訪問。在審核過程中,嘗試未經(jīng)授權(quán)訪問未檢測(cè)到用戶或id的用戶私人頁面。
5.網(wǎng)站插件比較齊全,查看是否包含可用插件
No.4
開始審核
根據(jù)官網(wǎng)提示在本地安裝CMS
查看過濾功能
/**
參數(shù)過濾、格式化
**/
($=null,$int=0){
if($==null){'';}
($int){
case 0://整數(shù)
(int)$;
case 1://
$=(trim($),);
if((,'7.4','>=')){
$ = ($);
}其他{
if(!())$ = ($);
}
$;
case 2://
if($=='')'';
($, "");
$;case 3://浮點(diǎn)數(shù)
()$;
案例 4:
if((,'7.4','>=')){
$ = ($);
}其他{
if(!())$ = ($);
}
修剪($);
}
}
//過濾XSS攻擊
(&$arr) {
$ra=('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','//','//','//','/ /','//'
,'/meta/','/xml/','//','/link/','//','//','//','//','// ','//','//'
,'/base/','//','//','//','//','//','//','//','//', '//','//','//','//','//','//','//','//'
,'//','//','//','//');
如果(($arr))
{
($arr as $key => $)
{
如果 (!($))
{
if((,'7.4','>='))
{
$ = ($);
}
其他
{
如果 (!())
{
$ = ($);
}
}
$ = ($ra,'',$); //刪除非打印字符,粗暴過濾xss可疑字符串
$arr[$key] = (($)); //去除HTML和PHP標(biāo)簽并轉(zhuǎn)換為HTML實(shí)體
}
其他
{
($arr[$key]);
}
}
}
}
查看執(zhí)行的SQL語句的功能
//查詢一個(gè)
find($=null,$=null,$=null,$=1)
{
if( $ = $this->($, $, $, 1) ){
($);
}其他{
;
}
}
跟進(jìn)功能
// 查詢?nèi)?/p>
($=null,$=null,$=null,$=null){
$ ='';if(($)){
$join = ();( $ as $key => $ ){
$='\''.$.'\'';
$join[] = "{$key} = {$}";
}
$ = "".join(" AND ",$join);
}其他{
if(null != $)$ = "".$;
}
if(($)){
$ .= 'BY';
$ .= (',', $);
}其他{
if($!=null)$ .= "BY ".$;
}
if(!($))$ .= "{$}";
$ = ($)? "*": $;
$sql = "{$} FROM {
$this->} {$}";
$this->($sql);
}
再次跟進(jìn)功能
//獲取數(shù)據(jù)
($sql){
if(!$ = $this->($sql)) ();
if(!$this->->()) ();
$rows = ();
($rows[] = $this->->(PDO::)){}
$this->=null;
($rows);
$rows;
}
后續(xù)執(zhí)行功能
//執(zhí)行SQL語句并檢查錯(cuò)誤
($sql){
$this->[] = $sql;
$this-> = $this->pdo->($sql);
if ($this->) {
$this;
}其他{
$msg = $this->pdo->();
if($msg[2]) exit('數(shù)據(jù)庫錯(cuò)誤:'.$msg[2].end($this->));
}
}
見語句$msg = $this->pdo->();php代碼注入漏洞,表示會(huì)在頁面上打印數(shù)據(jù)庫錯(cuò)誤信息并顯示并退出
經(jīng)過一組分析,沒有發(fā)現(xiàn)過濾sql語句。如果得到的數(shù)據(jù)沒有過濾,就會(huì)發(fā)生注入
例如:
(){
M('')->find([''=>$_GET['name']]);
}
如果像這樣直接將GET POST帶入數(shù)據(jù)庫,會(huì)產(chǎn)生錯(cuò)誤注入
例如.//name=123'(加引號(hào)會(huì)報(bào)錯(cuò),如果不過濾引號(hào))
現(xiàn)在你只需要找到類型,這樣句子就可以不用過濾直接帶入數(shù)據(jù)庫了。
找很多這樣的地方就行了。我們以位置為例。
這是支付插件的位置。藍(lán)框1添加代碼模擬激活支付寶功能并通過驗(yàn)證
可以看到這個(gè)函數(shù)只用了[]來過濾xss,但是沒有過濾sql語句。用剛才的方法注入
可以看到確實(shí)有sql語句和數(shù)據(jù)庫錯(cuò)誤
直接報(bào)錯(cuò)并注入獲取敏感信息
/?=1%27 和 (1,(0x7e,(()),0x7e),1)--+"
該漏洞已提交供應(yīng)商修復(fù)