php代码审计篇 - Dedecms 后台任意代码执行分析
字数 1272 2025-08-30 06:50:11

DedeCMS 后台任意代码执行漏洞分析与利用教学

漏洞概述

本教学文档详细分析DedeCMS后台存在的两个任意文件覆盖导致代码执行的漏洞,适用于安全研究人员进行代码审计学习和漏洞复现。

漏洞一:DedeCMS V5.7.113 任意文件覆盖导致代码执行

影响版本

  • DeDeCMS <=5.7.113

漏洞文件

/dede/makehtml_homepage.php

漏洞分析

  1. 漏洞触发条件:

    • 传入参数:dopost=make
    • 传入参数:showmod=1
    • 传入参数:templet=文件路径
    • 传入参数:Position=被覆盖文件路径
  2. 关键代码功能:

    • SetTemplet()方法将文件内容赋值给$this->SourceString
    • SaveToHtml()方法执行文件覆盖操作
  3. 参数限制:

    • Position参数无任何过滤
    • templet参数存在过滤,不能使用../,限制在/templets/目录中的文件

漏洞利用步骤

  1. 上传图片马

    • 利用系统文件管理器上传包含恶意代码的图片文件到/templets/目录
  2. 构造POC

    /dede/makehtml_homepage.php?dopost=make&showmod=1&templet=/templets/恶意图片文件&Position=../tags.php
    
  3. 执行效果

    • 将图片马内容覆盖到系统根目录的tags.php文件
    • 通过访问tags.php执行任意代码

漏洞二:DedeCMS V5.7.115 任意文件覆盖导致代码执行

影响版本

  • DeDeCMS <=5.7.115

漏洞文件

/dede/task_do.php

漏洞分析

  1. 漏洞原理:

    • 读取$tpl文件内容并写入到$homeFile
    • 这两个值从数据库dede_homepageset表中获取
  2. 数据库更新点:

    • makehtml_homepage.php中存在SQL语句可更新表中内容
    • $templet值经过过滤(不能使用../
    • $position无任何限制
  3. 关键点:

    • $homeFile参数可设置为../1.php
    • 文件不存在时fopen($homeFile, 'w')会创建新文件

漏洞利用步骤

  1. 上传图片马

    • 上传包含恶意代码的图片文件到/templets/目录,如phpinfo.png
  2. 更改数据库参数

    • 通过漏洞点更新dede_homepageset表中的templetposition字段
    • 设置templet/templets/phpinfo.png
    • 设置position../1.php
  3. 触发文件覆盖

    • 访问task_do.php执行文件覆盖操作
    • phpinfo.png的内容覆盖到网站根目录的1.php
  4. 执行效果

    • 访问1.php执行任意代码

修复建议

  1. 对所有文件路径参数进行严格过滤,禁止目录穿越
  2. 对写入操作进行权限检查
  3. 更新到最新版本

总结

这两个漏洞都利用了DedeCMS后台的文件覆盖功能,通过精心构造的参数实现任意代码执行。漏洞一直接通过参数传递实现,漏洞二则通过数据库间接控制文件操作参数,最终都能达到相同效果。理解这些漏洞有助于提高代码审计能力和安全意识。

DedeCMS 后台任意代码执行漏洞分析与利用教学 漏洞概述 本教学文档详细分析DedeCMS后台存在的两个任意文件覆盖导致代码执行的漏洞,适用于安全研究人员进行代码审计学习和漏洞复现。 漏洞一:DedeCMS V5.7.113 任意文件覆盖导致代码执行 影响版本 DeDeCMS <=5.7.113 漏洞文件 /dede/makehtml_homepage.php 漏洞分析 漏洞触发条件: 传入参数: dopost=make 传入参数: showmod=1 传入参数: templet=文件路径 传入参数: Position=被覆盖文件路径 关键代码功能: SetTemplet() 方法将文件内容赋值给 $this->SourceString SaveToHtml() 方法执行文件覆盖操作 参数限制: Position 参数无任何过滤 templet 参数存在过滤,不能使用 ../ ,限制在 /templets/ 目录中的文件 漏洞利用步骤 上传图片马 : 利用系统文件管理器上传包含恶意代码的图片文件到 /templets/ 目录 构造POC : 执行效果 : 将图片马内容覆盖到系统根目录的 tags.php 文件 通过访问 tags.php 执行任意代码 漏洞二:DedeCMS V5.7.115 任意文件覆盖导致代码执行 影响版本 DeDeCMS <=5.7.115 漏洞文件 /dede/task_do.php 漏洞分析 漏洞原理: 读取 $tpl 文件内容并写入到 $homeFile 这两个值从数据库 dede_homepageset 表中获取 数据库更新点: makehtml_homepage.php 中存在SQL语句可更新表中内容 $templet 值经过过滤(不能使用 ../ ) $position 无任何限制 关键点: $homeFile 参数可设置为 ../1.php 文件不存在时 fopen($homeFile, 'w') 会创建新文件 漏洞利用步骤 上传图片马 : 上传包含恶意代码的图片文件到 /templets/ 目录,如 phpinfo.png 更改数据库参数 : 通过漏洞点更新 dede_homepageset 表中的 templet 和 position 字段 设置 templet 为 /templets/phpinfo.png 设置 position 为 ../1.php 触发文件覆盖 : 访问 task_do.php 执行文件覆盖操作 将 phpinfo.png 的内容覆盖到网站根目录的 1.php 执行效果 : 访问 1.php 执行任意代码 修复建议 对所有文件路径参数进行严格过滤,禁止目录穿越 对写入操作进行权限检查 更新到最新版本 总结 这两个漏洞都利用了DedeCMS后台的文件覆盖功能,通过精心构造的参数实现任意代码执行。漏洞一直接通过参数传递实现,漏洞二则通过数据库间接控制文件操作参数,最终都能达到相同效果。理解这些漏洞有助于提高代码审计能力和安全意识。