DedeCMS 5.7通用重装漏洞分析
源码下载
淦,找了半天没找到漏洞版本源码,只能用最新版本的进行对比了
DedeCms v5.7 GBK 下载地址:http://www.dedecms.com/dl/dl.php?action=dl&type=0&lang=gbk
DedeCms v5.7 UTF8 下载地址:http://www.dedecms.com/dl/dl.php?action=dl&type=0&lang=utf-8
复现要求
Apache
中间件解析漏洞(方便利用index.php.bak
install
文件夹未删除(利用index.php
或者index.php.bak
数据库账户密码
本地部署
phpstudy
部署
因为是本地,数据库直接弱密码 root/root
安装成功
漏洞分析
安装完成后,在install
文件夹下会生成install_lock.txt
文件来防止二次安装
这个时候我们访问网址下的install
文件夹,可以看到提示:
存在漏洞的源代码为,即/install/index.php.bak
:
查看源代码,可以看到判断条件,存在漏洞的源代码这里位于第24行
追踪$insLockfile
,位于第六行
而新版本中修改了这两部分为:
第18行
第37行
开发人员将变量直接定义成了常量写死,即无法进行变量覆盖,查看变量覆盖代码,位于这两者之间
第17行
很明显存在变量覆盖漏洞
遍历数组 Array('_GET','_POST','_COOKIE')
并赋值给$_request
变量,遍历$$_request
,也就是遍历$_GET,$_POST,$_COOKIE
将其获取到的键值数组依次赋给 $_k,$_v
,即key => value
,接着对$_v
进行一个RunMagicQuotes
函数的过滤,并将变量${$_k}
的值赋成过滤后的$_v
因为在18行定义的时候,相当于是$insLockfile=dirname(__FILE__).'/install_lock.txt'
现在只需要覆盖成一个不可能存在的文件名即可,随便想一个 springbird
整理流程,传入INSLOCKFILE=springbird
,这时候$_k=insLockfile,$_v=springbird,${$_k}=$insLockfile
,所以最后
$insLockfile=springbird
,在判断处就能够进行逃逸进行重装了,但是还需要数据库账户密码,这里使用常用密码爆破即可。
如果是index.php
存在该漏洞,则无需用到Apache
解析漏洞,但如果是index.php.bak
,则需要利用Apache
的解析特性,即从右往左解析,若解析到了不认识的,继续向左,直到有一个认识的为止。
index.php.bak
,bak
后缀不认识,继续向左,php
后缀认识,则解析成为php
文件,同样可以打出重装payload
参考链接
https://blog.csdn.net/forest_fire/article/details/50944224
https://www.mi1k7ea.com/2019/06/20/PHP变量覆盖漏洞/#0x07-导致的变量覆盖
https://www.myhack58.com/Article/html/3/62/2013/39131.htm
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/14187118.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!