文件上传漏洞

本文详细探讨了文件上传漏洞的原理、检测绕过方法及应对策略。包括客户端JavaScript、服务端MIME类型、目录路径和文件扩展名检测的绕过技巧,以及黑名单和白名单检测的漏洞利用。此外,还介绍了文件内容检测、解析漏洞和上传攻击框架的相关知识,提供了upload-labs通关经验和实际的绕过经验分享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

——文件上传漏洞简介

如果不对被上传得文件进行限制或者限制被绕过,该功能便有可能会被利用上传可执行文件,
脚本到服务器上,进而进一步导致服务器沦陷。
原因导致文件上传漏洞类型:
1: 服务器的错误的配置
2: 开源编辑器漏洞。
3: 本地上传限制不严格被绕过
4: 服务端过滤不严格被绕过

——检测绕过

–客户端javascript(检测文件扩展名)绕过

在上传过程中将文件格式修改为可上传的文件格式,然后通过抓包,将文件修改为原来格式。
例如:网页需上传jpg格式文件,而我想要上传php文件,可以先将php改为jpg,然后在提交时抓包,将文件后缀再更改为php。

–服务端MIME类型检测(检查Content-Type内容)绕过

MIME检测的是数据包content-type字段。常见的图片格式的MIME类型有:PNG:image/png,GIF:image/gif,JPG:image/jpeg
上传文件后,进行抓包,将content-type字段修改。

–服务端目录路径(检查跟path参数有关内容)检测绕过

1、0x00截断绕过
2、在文件上传时,有的程序允许用户将文件放到指定的目录中,如果指定目录存在就将文件写入目录,若不存在则先建立目录,然后写入。
在HTML页面有一个隐藏的表单,它默认提交的文件夹名称为value的值。使用 burpsuite 将 value 值改为 pentest.php
并提交上传一句话木马文件,如果服务器不存在此目录,则会创建此目录,然后将一句话木马写入该目录,如果是 IIS 6.0 ,则会解析网页木马。

–服务端文件扩展名检测(检测跟文件extension相关的内容)–

黑名单检测,在下面会具体讲黑名单检测绕过方式。

–服务端文件内容检测(检测内容是非合法或含有恶意代码)

1、 文件幻术检测
2、 文件相关信息检测:图像文件相关信息检测常用的就是 getimagesize()函数 只需要把文件头部分伪造好就 ok 了,
3、 文件加载检测:调用API或函数去进行文件加载测试,常见的是图像渲染测试,更变态的是进行二次渲染。
对渲染/加载测试的攻击方式是代码注入绕过。
对二次渲染的攻击方式是攻击文件加载器自身。

注意: 文件内容检测时,检测内容是否合法,有可能还会把内容敏感字符过滤掉或者转移掉,并且在自动将文件后缀名转化为某格式。我们需要通过大小写混写,双写等绕过方式来尝试绕过。

——绕过方式

——黑名单检测绕过

黑名单检测绕过:
1、 大小写组合绕过:pHp,AsP

2、 特殊文件名绕过:在windows下有一个特性就是如果文件后缀以点'.'或者空格' ',结尾的后缀名时,系统在保存文件时会自动去除点和空格,但要注意Unix/Linux系统没有这个特性。
在burp中修改,因为windows系统不被允许。

3、 修改文件扩展名时,有时候会过滤很多文件后缀名,导致无法绕过文件扩展名检测,我们可以使用畸形后缀名来绕过,以下是畸形后缀名表:
在这里插入图片描述

4、 文件大小绕过:有时候会限制上传文件的大小,如果只限制最大值,我们可以尽可能用小的文件去尝试绕过,如果文件只限制最小值,我们可以往文件内容中尽可能加入垃圾信息来扩大文件的大小。

5、 0x00截断绕过(php版本<5.3.4,php配置magic_quotes_gpc关闭):文件名后缀有一个%00字节,可以截断某些函数对文件名的判断。在许多语言函数中,处理字符串的函数中0x00被认为是终止符。
例如:网站上传函数处理xxx.asp%00.jpg时,首先后缀名是合法的jpg格式,可以上传,在保存文件时,遇到%00字符丢面后面的.jpg,文件后缀最终保存的后缀名为xxx.asp
Get方式:在url中输入%00来进行截断。
Post方式:通过burpsuite抓包将获取包中asp后面加上一个空格' ',通过hex编码,将空格的hex编码20修改为00来绕过。

6、 htaccess文件攻击:是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:
网页301重定义、自定义404错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
如果服务器对文件名控制不够严格,通过move_uploaded_file函数把自己写的.htaccess文件覆盖服务器上的这样就可以解析定义名单了。
.htaccess文件内容:
<FilesMatch "haha"> SetHadnler application/x-httpd-php </FilesMatch>
同目录中有上传一个文件名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值