ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

文件上传漏洞从入门到防御,Web安全必学知识点

文件上传漏洞从入门到防御,Web安全必学知识点

一、漏洞原理

文件上传漏洞本质:服务器未对上传文件做严格有效校验,导致恶意脚本(webshell)被上传并执行。攻击者通过上传功能点→构造恶意文件→绕过校验→找到访问路径→执行脚本获得服务器控制权。

漏洞成立四条件:有可利用上传功能;校验可被绕过;上传目录Web可访问且能解析执行;攻击者知道文件访问路径。文件上传是最高危漏洞之一,成功利用可直接拿下服务器,是渗透测试最常用突破口。

二、常见绕过方式

1. 后缀名绕过:大小写绕过(Php、pHp)、双写绕过(pphphp)、特殊后缀绕过(.phtml、.php3、.asa)、点空格绕过(shell.php.、shell.php )、::$DATA绕过、%00截断绕过(老旧PHP版本)。

2. MIME类型绕过:修改请求Content-Type为image/jpeg等合法类型,轻松绕过——MIME是客户端发的,完全不可信,只能辅助校验。

3. 文件头绕过:制作图片马,把恶意脚本和正常图片拼接在一起,文件头是正常图片头能通过校验,但文件末尾包含可执行代码。更高级的把代码藏在EXIF信息里。

4. 解析漏洞绕过:利用Web容器本身的解析缺陷,如IIS 6.0目录解析/分号解析、Apache后缀名从右往左解析、Nginx路径解析漏洞等,即使后缀是图片也能被当成脚本执行。

5. .htaccess绕过:Apache环境下上传自定义.htaccess文件,把.jpg映射成PHP执行,隐蔽性强。

6. 条件竞争绕过:利用上传和校验删除的时间差,多线程上传同时访问临时文件,赶在删除前执行webshell。

三、完整防御体系(8层防护)

1. 白名单后缀校验(核心):只允许明确需要的后缀,绝对不用黑名单。统一转小写、规范化文件名(去末尾点和空格)、禁止上传配置文件。

2. MIME类型校验(辅助):检查Content-Type,只作为辅助,不能单独依靠。

3. 文件内容校验:用getimagesize()检测图片尺寸,或用GD/ImageMagick重新生成图片——重绘是防御图片马最有效的方法,彻底清除隐藏的恶意代码。

4. 文件随机重命名:完全丢弃原始文件名,用UUID/时间戳+随机数生成新文件名,让攻击者找不到上传后的文件路径,同时防止路径遍历。

5. 存储路径隔离+禁止执行(最关键):上传文件单独存放,在Web服务器配置中禁止上传目录下的脚本执行权限——即使webshell传上去也执行不了,这是最根本的防御。上传目录最好放在Web根目录之外。

6. 最小权限原则:Web服务用低权限账号运行,上传目录只给写入不给执行权限,降低被利用后的危害。

7. 文件大小和数量限制:防止攻击者耗尽服务器磁盘和带宽资源。

8. WAF防护:部署Web应用防火墙,识别webshell特征和上传攻击,作为额外屏障。

四、常见误区

只做前端校验:前端校验可轻松绕过,所有安全校验必须在服务端做

黑名单校验后缀:永远列不全危险后缀,必须用白名单

只校验MIME类型:完全不可信

只校验文件头:图片马可轻松绕过,最好重新生成图片

上传目录可执行脚本:最致命错误,上传目录必须禁止执行

保留原始文件名:可能存在路径遍历漏洞,必须重命名

五、漏洞检测方法

依次测试:不同脚本后缀能否上传→各种后缀绕过手法能否成功→修改MIME能否绕过→图片马能否上传并执行→是否存在解析漏洞→条件竞争能否绕过。必须在授权前提下测试,严禁未授权渗透测试。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进