dedecms 两个常见漏洞的复现
侵权声明
本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。
如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系: [360619623@qq.com]。我们将在确认后的合理时间内采取适当措施,包括删除相关内容。
简介
版本
漏洞位置
文件上传
file_manage_control.php
xss
分析
文件上传
找到文件中的文件上传位置。
红框前都是对参数的初始化,找到文件临时存放位置,将临时文件保存到本地。之后删除临时文件。
红框内
$file_base = strtolower(pathinfo($file, PATHINFO_BASENAME));
获取文件名
$file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
获取文件后缀
if (is_file($file) && $file_ext == "php")
判断是否为文件和后缀是否为php
如果此时一个条件不满足就好跳出后面的内容判断。如果我们上传一个php3
为后缀的文件就可以成功(还是有其他访问绕过或使php文件可以执行的办法)。然后通过下面函数改名即可利用。
跟进RenameFile
函数发现,没有进行过滤新文件名,只判断新旧文件名是否相等和文件是否可写。
XSS
通过poc找到文件位置
跟进makart()
函数,该函数是准备创建静态html文件,
继续跟进makehtml()
函数
该函数前半部分有面两个重要的函数。
$this->LoadTemplet();
获取文章的模板
$this->ParAddTable();
处理文章需要保函的额外功能。例如投票。更进paraddtable()函数
但是此时投票功能还没有实装到文章模板中。继续看到makehtml()
函数后半部分
直接看到最后红框中的两个函数。
$this->ParseDMFields($i,1);
判断哪些模块是需要加载到文章模板中的,并对其进行标记和计算出需要加载模块的数量。方便后续将需要的模块加载到文章中。
$this->dtp->SaveTo($TRUEfilename);
将模块加载到文章中。跟进saveto()函数
可以看到文件写入的功能函数了,继续跟进getresult()函数
我可以肯定的是在26号模板中就存在投票功能的模块并且写入了resultString
参数,你可以自己去看看。
复现
文件上传
1、找到文件上传位置
)
2、上传一个带有一句话或其他的文件,但是文件需要时php3或是其他为后缀的
3、修改文件名为1.php
4、访问利用
xss
1、找到文章发布位置,准备新添文章
2、添加文件名和主栏目后,新增一个投票
3、在投票名称位置加上一个测试js代码,然后保存文件。<script>alert(1);</script>
4、访问文件
总结
参考
CVE上该系统报出的一系列漏洞
免责声明
本博客所提供的技术知识和信息仅旨在教育和分享网络安全最佳实践,促进网络安全意识的提升。作者严禁将这些技术和信息用于任何非法或不道德的目的。
使用本博客内容而导致的任何违法行为或后果,作者不承担任何法律责任。所有读者在使用本博客的信息时,应自行承担风险,并确保遵守当地法律法规。
我们鼓励所有读者合法地使用所提供的信息和技术,致力于维护安全和负责任的网络环境。
感谢您的理解与支持。