什么是文件上传漏洞
代码语言:javascript复制上传文件时,如果服务器代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)
主要危害
代码语言:javascript复制上传网站后门文件
文件上传(验证/绕过)
前端
前端绕过主要依赖于修改或绕过客户端的JavaScript验证。JavaScript的验证通常较为简单,容易被绕过。
代码语言:javascript复制1、删除浏览器事件:直接删除或禁用浏览器中的JavaScript,从而避免执行前端的验证代码。
2、Burp Suite抓包修改:使用Burp Suite等网络抓包工具,拦截并修改上传文件的HTTP请求,包括文件后缀名等。
3、构造本地上传表单:创建一个新的HTML表单,绕过原有的前端验证页面,直接提交文件到服务器。
后端
黑名单绕过
Web系统可能会采用黑名单的方式进行过滤。而过滤的方式存在一定的缺陷,比如存在过滤的黑名单不全,未考虑大小写,以及要上传文件的名称存在敏感字符。基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功。使用黑名单过滤方式,肯定会存在缺陷;【对上传文件名称进行敏感字符清除。】
1、特殊后缀名
利用服务器解析漏洞,上传一些看似不合法的文件后缀如.php5、.phtml等,这些文件在某些配置下可能会被当作PHP代码执行。
前提条件
代码语言:javascript复制在apache配置文件中有如下配置:
AddHandler application/x-httpd-php .php .php3 .php4 .php5 .phtml
当然防御也就是将上面这句配置修改为:
AddHandler application/x-httpd-php .php
通过Burp抓包
2、空格和点绕过
在文件后缀名中添加空格或点(.),如file.php. file.php 或者file.php. .,有时服务器会忽略这些字符。
空格绕过
代码语言:javascript复制文件上传功能过滤不完善,没有考虑到空格的情况,将文件【shell.php(空格)】认为是以(空格)结尾的特殊文件,允许上传,当文件成功上传到windows系统下时,因为Windows系统特性会被作为空处理,也就是删除文件最后的空格,结果为【shell.php】
点饶过
代码语言:javascript复制windows特性,只能在Windows系统下生效;
- Windows 系统下,文件后缀名最后一个点会被自动去除。
- Linux 系统下,文件后缀名最后一个点不会被自动去除。
点空格点
3、双写文件后缀
上传如file.phphpp的文件,服务器在处理时可能将php替换成空,从而保留.php后缀。
同样双写也适用于绕过XSS漏洞
4、大小写绕过:
上传File.PhP等大小写混合的文件名,如果服务器在过滤时没有进行大小写统一处理,则可能绕过过滤。
同样大小写也适用于绕过XSS漏洞
5、利用.htaccess文件:
通过上传.htaccess
文件,修改服务器配置,使特定类型的文件被当作PHP代码执行
什么是.htaccess文件
代码语言:javascript复制.htaccess 文件是Apache服务器中的一个配置文件,用于实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。
准备一个名为.htaccess的文件,文件内容
代码语言:javascript复制AddType application/x-httpd-php .png
或者
<FilesMatch "文件名">
SetHandler application/x-httpd-php
</FilesMatch>
利用思路:第一步:将.htaccess文件进行上传 第二步:上传后缀名为.png的图片马
6、::$DATA绕过
在window的时候如果文件名 "::会把DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名。基于widows系统文件命名规则的特殊利用 。
例如:"phpinfo.php::会自动去掉末尾的DATA变成"phpinfo.php"
所以知道这个特性之后,我们就可以抓包修改文件名: ::$DATA即可
白名单逃过
1、MIME检测
MIME类型(也称为媒体类型或内容类型)用于标识文件的性质和格式。通过修改文件的MIME类型,较为少见
常见图片MIME类型: image/gif, image/png, image/jpeg, image/bmp, image/webp, image/x-icon, image/vnd.microsoft.icon
服务端代码是通过Content-Type的值来判断文件的类型,这样我们可以直接对文件的Content-Type进行修改来绕过此防御方式
2、 截断绕过
分为GET和POST两种方式进行阶段截断
在url中 表示ascll码的0 ,而ascii码的0,表示字符串结束,所以当url中出现 时就会认为读取已结束
产生的条件
- php版本小于5.3.29
- magic_quotes_gpc = Off
举例:
www.xxx.com/shell.jpg
www.xxx.com/shell.php .jpg => www.xxx.com/shell.php
GET类型的 截断
POST类型的 截断
3、0x00截断
代码语言:javascript复制同 截断原理相同
文件内容检测
对于基于文件内容检查(如图片马)的上传过滤,可以通过在合法文件(如图片)中嵌入恶意代码来绕过。这种方法需要服务器在处理文件时未进行充分的渲染或过滤
1、文件头检测
文件头检测通过读取上传文件的前几个字节(通常是文件的前几个字节,也称为“魔术数字”或“文件签名”),并与已知的文件类型签名进行比较,以确定文件的真实类型。这种方法比简单地检查文件扩展名更为可靠,因为文件扩展名可以轻易地被修改。
1.1制作图片马来绕过
代码语言:javascript复制图片码制作比较简单。需要一张真的图片,需要一个后缀为php的木马文件,然后将图片和php文件组合在一起即可。准备一张图片和一句话木马:
ime 1.png
shell.php
然后在cmd中执行:
copy 1.png /b shell.php shell.png
1.2文件头绕过
常见文件头
代码语言:javascript复制JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
XML (xml),文件头:3C3F786D6C
ZIP Archive (zip),文件头:504B0304
利用思路
代码语言:javascript复制1、先将一句话木马写入txt文件,改文件后缀为png格式;
2、用winhex打开,找到你所改成图片的文件头(例如我想改成的是png格式,也可以jpg等,png图片的格式头是89504E47),只要将其放在文件头部(也就是放在一句话的前面),保存即可。
3、上传,用bp抓包,然后修改文件后缀为.php格式,放包即可,用蚁剑连接即可
2、二次渲染绕过
什么是二次渲染
在用户上传文件后,网站为了满足特定的显示或存储需求,会对文件(尤其是图片文件)进行二次处理。这些处理可能包括格式转换、尺寸调整、压缩等。服务器在处理完成后,会根据用户上传的原始文件生成一个新的文件,并将其用于显示或存储。
2.1、修改内容:把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,再重新上传即可绕过。
使用使用HxD Hex Editor进行比较
2.2、条件竞争
- 条件竞争是指多个线程或进程在没有进行适当同步的情况下同时访问共享资源,导致运行结果不确定的情况。在文件上传的场景中,攻击者可以利用条件竞争来尝试在文件被删除之前完成上传和访问。
- 攻击者快速上传恶意文件,并尝试在文件被删除之前通过某种方式(如直接访问URL)触发对该文件的处理或执行
利用思路:直接上传一个php文件,利用burp抓包,然后跑一个Nullpayloads,不停的访问,赶在应用程序删除它之前,访问成功。
2.3、配合文件包含漏洞
- 文件包含漏洞允许攻击者通过包含恶意文件(如包含PHP代码的图片文件)来执行任意代码。在二次渲染的场景中,攻击者可以将恶意代码嵌入到图片文件中,并通过文件包含漏洞来执行这些代码。
利用思路:
代码语言:javascript复制1、攻击者首先制作一个包含恶意代码的图片文件(图片马),
2、然后将其上传至网站。网站对图片进行二次处理后,恶意代码可能会被保留在图片的某些部分中。
3、攻击者随后利用文件包含漏洞来包含并执行这些恶意代码。
服务器解析漏洞
- Apache解析漏洞
- Apache服务器在处理文件扩展名时,会从右向左解析,直到遇到它认识的扩展名为止。因此,攻击者可以尝试上传如
1.php.jpg
的文件名,利用Apache的解析漏洞将.php
文件当作PHP代码执行。
- Apache服务器在处理文件扩展名时,会从右向左解析,直到遇到它认识的扩展名为止。因此,攻击者可以尝试上传如
- IIS解析漏洞
- IIS服务器在处理某些特定配置下的文件时,可能存在解析漏洞。例如,当文件名为
xxx.asp;xxx.jpg
时,IIS可能会将其当作ASP文件执行
- IIS服务器在处理某些特定配置下的文件时,可能存在解析漏洞。例如,当文件名为