0
点赞
收藏
分享

微信扫一扫

【漏洞靶场】文件上传后端检测文件后缀黑名单绕过--upload-labs

三次方 2022-04-24 阅读 65

一、漏洞描述

服务器对上传文件的后缀做验证,不允许如.php的文件上传。这种检测方式是非常不安全的,只要变化未写在黑名单里面的文件后缀,即可绕过验证

二、漏洞发现

在upload-labs第三关中就是采用了黑名单验证文件后缀的方式做文件上传的限制,先在本地写php脚本若上传成功,且知道上传后文件在网站保存的路径,可通过网页访问获得服务器配置信息,命名为z.php

直接看源码,file_exists判断文件路径是否存在,array数组函数中就是服务器的黑名单,

trim() 函数:移除字符串两侧的空白字符或其他预定义字符。这里将上传的文件名去掉两边的字符串

deldot()靶场自定义函数:从字符串的尾部开始,从后向前删除点.,直到该字符串的末尾字符不是.为止。

strrchr()函数:查找一个字符c在一个字符串s中最后一次出现的位置(也就是从s的右侧开始查找字符c首次出现的位置),并返回从字符串中的字符c所在的位置开始直到字符串s结束的所有字符。 若没有找到字符c,则返回NULL。这里若上传z.php函数处理后返回.php

strtolower()函数:将字母转换为小写。若是.PHP处理后是.php

str_ireplace()函数:使用一个字符串替换字符串中另一些字符串,对大小写不敏感。将::$DATA转换为空

(在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名,例如:"z.php::$DATA"Windows会自动去掉末尾的::$DATA变成"z.php")

经过上面的过滤,原本的文件名现在只留下文件后缀。判断文件后缀是否在上面定义的数组中,若在就不允许上传。若不在就将文件名改为随机数+合法扩展名,将文件上传。但可以上传.phtml .phps .php5 .pht,前提是服务器apache的httpd.conf中有如下配置代码。

可以通过改写后缀名绕过,一样系统当php执行

$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认

三、漏洞利用

通过burp抓包将php改为php5,因为不在服务器的黑名单中直接绕过。

因为靶场在上传成功后会显示上传的图片,通过返回的html,可得知文件名和路径

直接访问,获得服务器配置信息,也可上传一句话木马,通过蚁剑,菜刀等后门工具链接获取webshell。

 

举报

相关推荐

0 条评论