PHP 代码审计之文件删除

0x00:前言

CMS 后台很多栏目有上传文件功能,上传漏洞先暂时搁浅,在代码处理的时候,有删除旧文件这个操作,所以先审计下看有没有删除文件的漏洞。

0x01:代码追踪

首先打开后台基本每个栏目都有上传资料上传图片的功能,这里就已产品栏为例,其目录在 product/admin 下,打开 modifyinfo.php,找到上传图片的代码,如下:

//删除旧图
if(!empty($_POST['delphoto'])){
    foreach($_POST['delphoto'] as $val){
        $strOldFile = $arrGPic['FileSavePath'].'s/'.$_POST['savephoto'][$val];
        if (is_file($strOldFile)) {    // 缩略图删除
            unlink($strOldFile);
        }
        $strOldFile = $arrGPic['FileSavePath'].'b/'.$_POST['savephoto'][$val];
        if (is_file($strOldFile)) {    // 原文件删除
            unlink($strOldFile);
        }
        unset($_POST['photo'][$val]);
    }
}

这里修改产品信息的时候,对于接收 savephoto 值时并没有做相关的处理操作,而是直接拼接到了文件保存路径中,然后直接调用 unlink 进行了删除。也就意味着可以修改下文件名加上../ 来越目录。

这里验证的时候碰到些问题,第一个是代码会首先判断 delphoto 变量是否存在,这是基础,没有这个值是走不了删除这一步的,之前验证的时候,拦截的数据包中并没有这个值,后来发现是编辑产品信息时,并没有删除图片这个操作,只有删除了原图,发送请求时才会有这个 delphoto 参数,功能是这样的:

请输入图片描述

第二个时,拦截数据包后有 delphoto 参数后,直接修改 savephoto 的名字为../../../../test.txt 没有生效,为了测试我在根目录下新建了一个 test.txt,后来发现是越多了,如果渗透过很多文件下载漏洞,../../../../etc/passwd 用多了的话,就会自然想着../ 能多不能少,这里只需要越三层,多了会直接到电脑盘符,所以会发现 test.txt 还在。

0x02:渗透验证

修改产品时,删除原来的旧图,然后选择新图片,保存时拦截请求包并修改相应数据,如下图:

请输入图片描述

0x03:修复建议

修复时建议对删除路径中的可控变量进行特殊字符过滤,不允许包含. 和 / 等。


                                                                       公众号推荐:aFa攻防实验室

                         分享关于信息搜集、Web安全、内网安全、代码审计、红蓝对抗、Java、Python等方面的东西。

                                                                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值