某cms復(fù)現(xiàn)學(xué)習(xí)

前言
感覺(jué)自己還是對(duì)php審計(jì)有點(diǎn)不懂,遂找了個(gè)cms復(fù)現(xiàn)了一下幾個(gè)類(lèi)型的洞,本人小白一個(gè),大佬請(qǐng)繞道嘻嘻。

正文
小插曲:首先源碼拉下來(lái)本地搭建的時(shí)候死活不行,后來(lái)看了index發(fā)現(xiàn),原來(lái)判斷了install下是否存在install.lock防止重裝,而源碼拉下來(lái)的時(shí)候就已經(jīng)存在install.lock了。
有些是參考的,有的沒(méi)有查到相關(guān)的只能自己硬著頭皮找了。

第一處:sqli
進(jìn)后臺(tái)隨便點(diǎn)點(diǎn),看下這請(qǐng)求,
GET /tuzicms-master/index.php/Manage/Download/index/id/11 HTTP/1.1
這路由各位師傅們應(yīng)該都懂了。
在A(yíng)pp/Manage/Controller/AdvertController.class.php中


id直接進(jìn)行了拼接,驗(yàn)證:
image

數(shù)據(jù)庫(kù)用戶(hù)信息:
image

后面發(fā)現(xiàn)很多controller中都是用id=$id寫(xiě)的,便全局搜索:
image

發(fā)現(xiàn)有20多個(gè),去相關(guān)漏洞信息庫(kù)上搜索了一下,發(fā)現(xiàn)也確實(shí)有這么多的提交。

第二處getshell
在cnvd上發(fā)現(xiàn):


然后全局搜索:

<pre style="padding: 16px; font: 12.75px / 1.6 Consolas, "Liberation Mono", Menlo, Courier, monospace; color: rgb(51, 51, 51); border-radius: 3px; display: block; margin: 0px; word-break: normal; overflow-wrap: normal; white-space: pre-wrap; background-color: rgb(247, 247, 247); border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; overflow: auto;">_fe
</pre>


發(fā)現(xiàn)是一個(gè)設(shè)置分頁(yè)配置信息的:

<pre style="padding: 16px; font: 12.75px / 1.6 Consolas, "Liberation Mono", Menlo, Courier, monospace; color: rgb(51, 51, 51); border-radius: 3px; display: block; margin: 0px; word-break: normal; overflow-wrap: normal; white-space: pre-wrap; background-color: rgb(247, 247, 247); border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; overflow: auto;">public function do_fenye() {
//**判斷是否有限權(quán),顯示登錄管理員信息
id=_SESSION['id'];
//dump(id); //exit;m=D('Admin');
arr=m->find(id);arr=arr['admin_type']; //dump(arr);
//exit;
if (arr==1){// 如果不是超級(jí)管理員限權(quán)this->error('你不是超級(jí)管理員,沒(méi)有限權(quán)!');
}
//exit;

//定義配置文件的路徑
setfile=CONF_PATH."config_fenye.php"; // dump(setfile);
// exit;

//文章模型分頁(yè)參數(shù)
arr=C('PAGE_ARTICLE__HOME');cache_index=array(
'PAGE_ARTICLE__HOME' => $arr,
);

cache_index_post=array( 'PAGE_ARTICLE__HOME' => I('post.PAGE_ARTICLE__HOME'), ); //合并數(shù)組cache_index_ok=array_merge(cache_index,cache_index_post);

//產(chǎn)品模型分頁(yè)參數(shù)
arr=C('PAGE_PRODUCT__HOME');cache_group=array(
'PAGE_PRODUCT__HOME' => $arr,
);

cache_group_post=array( 'PAGE_PRODUCT__HOME' => I('post.PAGE_PRODUCT__HOME'), ); //合并數(shù)組cache_group_ok=array_merge(cache_group,cache_group_post);

//圖片模型分頁(yè)參數(shù)
arr=C('PAGE_PHOTO__HOME');cache_detail=array(
'PAGE_PHOTO__HOME' => $arr,
);

cache_detail_post=array( 'PAGE_PHOTO__HOME' => I('post.PAGE_PHOTO__HOME'), ); //合并數(shù)組cache_detail_ok=array_merge(cache_detail,cache_detail_post);

//下載模型分頁(yè)參數(shù)
arr=C('PAGE_DOWNLOAD__HOME');download_detail=array(
'PAGE_DOWNLOAD__HOME' => $arr,
);

download_detail_post=array( 'PAGE_DOWNLOAD__HOME' => I('post.PAGE_DOWNLOAD__HOME'), ); //合并數(shù)組download_detail_ok=array_merge(download_detail,download_detail_post);

//將配置文件的結(jié)構(gòu)列出來(lái),然后把要修改的參數(shù)用變量代替,執(zhí)行覆蓋操作即可。
settingstr="<?php \n return array(\n"; foreach(c as key=>v){
settingstr.= "\t'".key."'=>".$v.",\n";
}

foreach(cache_index_ok askey=>v){settingstr.= "\n\t'".key."'=>'".v."',\n";
}
foreach(cache_group_ok askey=>v){settingstr.= "\n\t'".key."'=>'".v."',\n";
}
foreach(cache_detail_ok askey=>v){settingstr.= "\n\t'".key."'=>'".v."',\n";
}

foreach(download_detail_ok askey=>v){settingstr.= "\n\t'".key."'=>'".v."',\n";
}

$settingstr.="\n);\n?>\n";

// dump($settingstr);
// exit;

if (file_put_contents(setfile,settingstr)){//通過(guò)file_put_contents保存setting.config.php文件
this->success('修改成功'); }else {this->error('修改失敗,請(qǐng)修改要更改文件的權(quán)限!');
}

}
</pre>

可以看到后面存在了很多拼接,通過(guò)setfile=CONF_PATH."config_fenye.php";發(fā)現(xiàn)配置文件為 [![image](https://upload-images.jianshu.io/upload_images/27712517-db58c00eb7e32de3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)](https://xzfile.aliyuncs.com/media/upload/picture/20220201150632-7c190fb2-832d-1.png) 看第一個(gè)配置: [![image](https://upload-images.jianshu.io/upload_images/27712517-9b8b7d23eb1404ad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)](https://xzfile.aliyuncs.com/media/upload/picture/20220201150730-9f2b5334-832d-1.png) 實(shí)際上就是post一個(gè) PAGE_ARTICLE__HOME, 通過(guò)C()獲取的arr被array_merge覆蓋了
再看I():


獲取傳遞的變量,其中有個(gè)$filter,沒(méi)有指定一般是默認(rèn),
image

搜索一下:
image

這兩個(gè)htmlspecialchars,strip_tags對(duì)'的效果:
image

因此可以閉合來(lái)寫(xiě)shell:
image

image

第三處任意文件刪除
后臺(tái)delSqlFiles():


直接拼接,沒(méi)什么好說(shuō)的
image

第四處前臺(tái)反射xss
payload:
GET index.php/article/group/id/2/" onmouseover=alert(/xss/) /


一般這種大概流程就是輸入-數(shù)據(jù)庫(kù)-返回-調(diào)用模板-解析-返回前臺(tái)(理解比較淺顯),然后調(diào)試跟蹤到返回url賦值的地方:
image

前面是APP拼接,值已經(jīng)是:
image

再往回走發(fā)現(xiàn),APP在這里定義:
image

那往回看PHP_FILE

<pre style="padding: 16px; font: 12.75px / 1.6 Consolas, "Liberation Mono", Menlo, Courier, monospace; color: rgb(51, 51, 51); border-radius: 3px; display: block; margin: 0px; word-break: normal; overflow-wrap: normal; white-space: pre-wrap; background-color: rgb(247, 247, 247); border: 1px solid rgba(0, 0, 0, 0.15); box-sizing: border-box; overflow: auto;">if(!defined('APP')){
urlMode = C('URL_MODEL'); if(urlMode == URL_COMPAT ){// 兼容模式判斷
define('PHP_FILE',PHP_FILE.'?'.varPath.'='); }elseif(urlMode == URL_REWRITE ) {
url = dirname(_PHP_FILE_); if(url == '/' || url == '\\')url = '';
define('PHP_FILE',$url);
}else {
define('PHP_FILE',PHP_FILE);
}
</pre>

又是通過(guò)PHP_FILE定義
再往回走,


發(fā)現(xiàn)直接通過(guò)_SERVER['SCRIPT_NAME']來(lái)定義 而一開(kāi)始 [![image](https://upload-images.jianshu.io/upload_images/27712517-c67d109b83917649.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)](https://xzfile.aliyuncs.com/media/upload/picture/20220202104253-d201492c-83d1-1.png) SCRIPT_NAME的就已經(jīng)包含payload了,百度搜索了一波,發(fā)現(xiàn) [_SERVER[SCRIPT_NAME]變量可值注入惡意代碼](https://www.freebuf.com/articles/web/166263.html "$_SERVER[SCRIPT_NAME]變量可值注入惡意代碼")
這個(gè)xss大概分析了一下,感謝,又學(xué)到了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容