文件上传漏洞
常见漏洞
-
前端校验
前端校验=没有校验
-
MIME校验
(MIME大全)https://www.runoob.com/http/mime-types.html
-
黑名单
-
上传黑名单里面不存在的后缀
-
PHP除了.php后缀还能解析哪些后缀呢?
php3、php4、php5、phtml等,当然这个是可以修改的。
在apache配置文件中有如下配置:
AddHandler application/x-httpd-php .php .php3 .php4 .php5 .phtml
-
-
.htaccess绕过
-
.htaccess 文件是Apache服务器中的一个配置文件,用于实现:网页301重定向、自定义404错误页面、 改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。 .htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩 展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index 文件等一些功能。
-
准备一个.htaccess文件,内容为:
AddType application/x-httpd-php .png 或者 <FilesMatch "文件名"> SetHandler application/x-httpd-php </FilesMatch>
-
上传这个文件后,后续所有上传的png后缀文件都会被解析成php文件
-
-
大小写绕过
-
未做大小写处理
-
-
后缀加空格
-
仅支持服务器为windows,Windows特性后缀写入空格会自动去除
-
-
后缀加点‘.’
-
仅支持服务器为windows,Windows特性后缀写入点.会自动去除
-
-
后缀加::$DATA
-
仅支持服务器为windows,在windows的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名。
例如:"phpinfo.php::$DATA" Windows会自动去掉末尾的::$DATA变成"phpinfo.php"
-
-
后缀加点空格点
-
仅支持服务器为windows,Windows特性后缀写入空格、点.会自动去除
-
-
双写
-
如果后缀被直接替换为空的情况下使用。
-
-
GET-%00截断
-
00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。00截断通常用来绕过web软waf的白名单限制。
-
条件
-
php版本小于5.3.29
magic_quotes_gpc = Off
-
-
-
POST-%00截断
-
和get一致,传参的地方不同而已
-
-
move_uploaded_file()函数
-
此函数有一个特点,会忽略文件末尾的./
-
直接上传php文件,抓包修改.php/.绕过黑名单
-
-
-
白名单
-
检测了图片内容文件头信息
-
将一句话木马写入图片末尾
例如把一个1701915609361.jpg文件和一个text.php(一句话木马文件)结合并命名未shell.php 在cmd中执行 copy D:\1701915609361.jpg /b + D\:text.php D:shell.jpg
-
上传后在文件包含漏洞处访问图片
-
-
对上传文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的
-
将一句话木马写入图片末尾,上传后在文件包含漏洞处访问图片
-
-
目标后端采用exif_imagetype()
-
先确定是否开启php_exif模块
-
本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像。
-
将一句话木马写入图片末尾,上传后在文件包含漏洞处访问图片
-
-
检测上传的文件后缀,上传后对名字进行修改。
-
将一句话木马写入图片末尾,上传后在文件包含漏洞处访问图片
-
-
-
二次渲染
-
imagecreatefromjpeg($target_path);
-
后端采用了此函数,将上传的图片进行二次编码,写入的一句话就失效了
-
上传图片,再下载图片,比较查看未被修改的地方,把一句话木马放入这个地方
-
下载HxD Hex Editor进行比较HxD - Freeware Hex Editor and Disk Editor | mh-nexus
-
jpg图片易损毁,尝试用gif图片
-
-
-
条件竞争
-
若后端代码是在上传之后才检测图片是否正确,不正确才删除,可以在上传上去在检测删除之前就访问图片。后端就无法删除或者二次渲染图片
-
上传一个php文件,利用burp抓包 跑一个null payloads,发包立即用另一个浏览器访问文件地址。
-
-
数组型绕过
-
若是后端用了数组切割传入的文件,可以考虑在传入参数时就先定义数组
-
一般数组都是俩个,[文件,后缀],一般都是获取最后一个数组count(array)-1
-
直接设置array[0],array[2],这样在检测array[1]时就可以无值
-