文章源自【字节脉搏社区】-字节脉搏实验室
作者-樱宁i
扫描下方二维码进入社区:
献丑了,(╥╯^╰╥)能力有限,思路不对处还望各位斧正了啦~
漏洞版本:全版本
下载网址:74cms下载网址
漏洞描述:
下面的测试版本为74cms_Home_Setup_v6.0.4
搭建---->进入后台“工具”选项的“数据安全”---->备份数据库---->选择删除备份文件---->抓包,并在文件名后面拼接../---->放包可达到格盘的效果
1. 安装时注意不可php7.0以上版本
2. 进入后台,备份数据库,此时会在data文件夹下形成backup文件存储备份信息。
3. 备份后跳转到漏洞网址,此时我们选择删除,并进行抓包。
4. 我们对备份文件名进行恶意拼接(name=20200516_2/../),此时已经没有存储备份文件的database文件夹
5.我们可以继续拼接,发现可以格盘。
漏洞分析:
审查元素,通过删除,找到对应的控制器
/index.php?=admin&c=database&a=del&name=20200516_1
在
application->admin->Controller->DatabaseController.class.php中我们找到对应的删除代码。发现是将传来的文件名放到数组中,然后在遍历,拼接路径之后采用rmdirs()方式进行删除。
我们继续追踪一下rmdirs(),发现此处就是简单的递归删除。没有做任何的防护。
上述的两段代码结合可以发现,每次我们传入参数为
name=20200516_2/../,拼接DATABASE_BACKUP_PATH. $val的结果为./data/backup/database/20200516_3/../,接着在rmdirs接受该参数并进行递归删除。此时由于递归删除存在../ 就会导致删除上一级
漏洞修复:
传入rmdirs()之前,首先用basename()进行验证传入的参数是否包含../等敏感字符,如果没有则进行下一步的删除,如果存在则进行报错。
呀呀呀,到这就看完了哦~
通知!
公众号招募文章投稿小伙伴啦!只要你有技术有想法要分享给更多的朋友,就可以参与到我们的投稿计划当中哦~感兴趣的朋友公众号首页菜单栏点击【商务合作-我要投稿】即可。期待大家的参与~
记得扫码
关注我们
原文始发于微信公众号(字节脉搏实验室):记一次简单的代码审计过程–74CMS后台任意文件删除
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论