文件上传漏洞转载---从客户端、服务器端-黑名单-白名单等方向分析
之前读文章学习过程中总结了一篇从中间件角度分析的文件上传漏洞,
最近阅读诸多大佬文章,找到一篇从客户端、服务器端、黑名单-白名单等方向分析文件上传漏洞的文章。
感觉很适合用来做备忘笔记方便查阅。Sec盾
客户端
其实就是浏览器页面的JS校验。比较简单,burpsuite抓包修改文件后缀即可绕过
服务端
主要是服务端的绕过:
检查后缀
-
黑名单
- 白名单
检查内容
- 文件头检查
- 条件竞争
- 配合文件包含漏洞
黑名单(扩展名检测)
-
上传特殊可解析后缀,通过抓包修改后缀,利用的是黑名单的漏洞和中间件的兼容性解析
如 php2 php3 php4 php5 php7 phtml等
- 上传.htaccess
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。 通过htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、 允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能IIS平台上不存在该文件, 该文件默认开启,启用和关闭在httpd.conf文件中配置。
AddType application/x-httpd-php .jpg //该语句会让Apache把shell.jpg文件解析为php文件。 <FilesMatch "shell"> //该语句会让Apache把shell.jpg文件解析为php文件。 Sethandler application/x-httpd-php </Filesmatch >
3、后缀大小写 如 php -> PhP 等
4、点绕过.php.
windows特性
5、空格绕过.php
windows特性
6、::$DATA绕过.php::$DATA
windows特性
NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:$ DATA。
简单讲就是在php+windows的情况下:如果文件名+"::会把DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。
7.php:.jpg
windows特性
8.php:.jpg
windows特性
-
MIME绕过
抓包修改Content-type为
image/jpeg
等。不同的Content-type详见https://www.runoob.com/http/http-content-type.html
-
%00截断/0x00截断
两者其实原理都是一样的,只不过是不同的表示方式。
这里基于一个组合逻辑漏洞造成的,通常存在于构造上传文件路径的时候
路径/upload/1.php(0x00),文件名1.jpg,结合/upload/1.php(0x00)/1.jpg,访问的为1.php
在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束
0x开头表示16进制,0在十六进制中是00, 0x00就是%00解码成的16进制
检查内容
文件头检查:
增加不同16进制文件头进行绕过
jpgFF D8 FF E0 00 10 4A 46 49 46
gif47 49 46 38 39 61
png89 50 4E 47
tif 49492A00
bmp 424D
用16进制工具HexPad打开一张png图片,会在开头看到png的文件头
用该工具打开一句话木马,添加文件头即可
条件竞争
对于部分网站,会先将上传的文件保存到服务器,之后再进行检测,如果不符合要求就删除。
在上传后到删除的这段时间差,正是我们利用的地方。可以通过burp的爆破功能,一方面不断上传,另一方面不断访问我们上传的文件。
就是马生马
配合文件包含漏洞
一种是只校验文件后缀名为asp/php/jsp的文件内容是否为木马,而不对后缀限制。 利用方式: 1、先上传个txt格式的木马 2、然后再上传一个.php的文件,内容为<?php Include(“上传的txt文件路径”);?> 另一种的话,如果网站直接存在文件包含漏洞,那么我们可以直接包含一下我们的木马就好了。类似于xxx.php?file=shell.txt.
-------------------------------------------
个性签名:你有一个苹果,我有一个苹果,我们交换一下,一人还是只有一个苹果;你有一种思想,我有一种思想,我们交换一下,一个人就有两种思想。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
独学而无友,则孤陋而寡闻,开源、分享、白嫖!