点击右上角【关注】发哥微教室头条号,get更多干系技能~
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:修复建议
修复时建议对删除路径中的可控变量进行分外字符过滤,不许可包含. 和 / 等。