记一次简单的代码审计过程-74CMS后台任意文件删除

admin 2024年2月7日23:50:19评论21 views字数 1003阅读3分20秒阅读模式

文章源自【字节脉搏社区】-字节脉搏实验室

作者-樱宁i

扫描下方二维码进入社区

记一次简单的代码审计过程-74CMS后台任意文件删除

献丑了,(╥╯^╰╥)能力有限,思路不对处还望各位斧正了啦~

记一次简单的代码审计过程-74CMS后台任意文件删除

漏洞版本:全版本

下载网址:74cms下载网址

漏洞描述:

下面的测试版本为74cms_Home_Setup_v6.0.4

  搭建---->进入后台“工具”选项的“数据安全”---->备份数据库---->选择删除备份文件---->抓包,并在文件名后面拼接../---->放包可达到格盘的效果

1. 安装时注意不可php7.0以上版本

2. 进入后台,备份数据库,此时会在data文件夹下形成backup文件存储备份信息。

记一次简单的代码审计过程-74CMS后台任意文件删除

记一次简单的代码审计过程-74CMS后台任意文件删除记一次简单的代码审计过程-74CMS后台任意文件删除

3.  备份后跳转到漏洞网址,此时我们选择删除,并进行抓包。

记一次简单的代码审计过程-74CMS后台任意文件删除

记一次简单的代码审计过程-74CMS后台任意文件删除

4. 我们对备份文件名进行恶意拼接(name=20200516_2/../),此时已经没有存储备份文件的database文件夹

记一次简单的代码审计过程-74CMS后台任意文件删除

记一次简单的代码审计过程-74CMS后台任意文件删除记一次简单的代码审计过程-74CMS后台任意文件删除

5.我们可以继续拼接,发现可以格盘。

记一次简单的代码审计过程-74CMS后台任意文件删除

漏洞分析:

审查元素,通过删除,找到对应的控制器

/index.php?=admin&c=database&a=del&name=20200516_1

记一次简单的代码审计过程-74CMS后台任意文件删除

记一次简单的代码审计过程-74CMS后台任意文件删除

application->admin->Controller->DatabaseController.class.php中我们找到对应的删除代码。发现是将传来的文件名放到数组中,然后在遍历,拼接路径之后采用rmdirs()方式进行删除。

记一次简单的代码审计过程-74CMS后台任意文件删除

记一次简单的代码审计过程-74CMS后台任意文件删除

我们继续追踪一下rmdirs(),发现此处就是简单的递归删除。没有做任何的防护。

记一次简单的代码审计过程-74CMS后台任意文件删除

记一次简单的代码审计过程-74CMS后台任意文件删除

上述的两段代码结合可以发现,每次我们传入参数为

name=20200516_2/../,拼接DATABASE_BACKUP_PATH. $val的结果为./data/backup/database/20200516_3/../,接着在rmdirs接受该参数并进行递归删除。此时由于递归删除存在../ 就会导致删除上一级

记一次简单的代码审计过程-74CMS后台任意文件删除

漏洞修复:

传入rmdirs()之前,首先用basename()进行验证传入的参数是否包含../等敏感字符,如果没有则进行下一步的删除,如果存在则进行报错。

记一次简单的代码审计过程-74CMS后台任意文件删除

记一次简单的代码审计过程-74CMS后台任意文件删除

呀呀呀,到这就看完了哦~ 

记一次简单的代码审计过程-74CMS后台任意文件删除

通知!

公众号招募文章投稿小伙伴啦!只要你有技术有想法要分享给更多的朋友,就可以参与到我们的投稿计划当中哦~感兴趣的朋友公众号首页菜单栏点击【商务合作-我要投稿】即可。期待大家的参与~

记一次简单的代码审计过程-74CMS后台任意文件删除

记得扫码

关注我们

原文始发于微信公众号(字节脉搏实验室):记一次简单的代码审计过程–74CMS后台任意文件删除

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月7日23:50:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次简单的代码审计过程-74CMS后台任意文件删除https://cn-sec.com/archives/1987977.html

发表评论

匿名网友 填写信息