php代码审计篇 - Dedecms 后台任意代码执行分析
字数 1272 2025-08-30 06:50:11
DedeCMS 后台任意代码执行漏洞分析与利用教学
漏洞概述
本教学文档详细分析DedeCMS后台存在的两个任意文件覆盖导致代码执行的漏洞,适用于安全研究人员进行代码审计学习和漏洞复现。
漏洞一:DedeCMS V5.7.113 任意文件覆盖导致代码执行
影响版本
- DeDeCMS <=5.7.113
漏洞文件
/dede/makehtml_homepage.php
漏洞分析
-
漏洞触发条件:
- 传入参数:
dopost=make - 传入参数:
showmod=1 - 传入参数:
templet=文件路径 - 传入参数:
Position=被覆盖文件路径
- 传入参数:
-
关键代码功能:
SetTemplet()方法将文件内容赋值给$this->SourceStringSaveToHtml()方法执行文件覆盖操作
-
参数限制:
Position参数无任何过滤templet参数存在过滤,不能使用../,限制在/templets/目录中的文件
漏洞利用步骤
-
上传图片马:
- 利用系统文件管理器上传包含恶意代码的图片文件到
/templets/目录
- 利用系统文件管理器上传包含恶意代码的图片文件到
-
构造POC:
/dede/makehtml_homepage.php?dopost=make&showmod=1&templet=/templets/恶意图片文件&Position=../tags.php -
执行效果:
- 将图片马内容覆盖到系统根目录的
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后台的文件覆盖功能,通过精心构造的参数实现任意代码执行。漏洞一直接通过参数传递实现,漏洞二则通过数据库间接控制文件操作参数,最终都能达到相同效果。理解这些漏洞有助于提高代码审计能力和安全意识。