Add files via upload
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
### 文件上传漏洞绕过方法
|
||||
|
||||
**1. 客户端 JS 绕过**
|
||||
|
||||
这是最简单也是最常见的绕过方法。许多开发者为了方便,只在前端(浏览器)使用 JavaScript 脚本来检查文件类型,如 `.jpg`、`.png`、`.gif` 等
|
||||
|
||||
- **绕过方法:**
|
||||
- **禁用 JavaScript:** 在浏览器设置中直接禁用 JS,或者使用抓包工具(如 Burp Suite)拦截请求,修改文件名和内容后再发送
|
||||
- **抓包修改文件名:** 正常上传一个合法的图片文件(`1.jpg`),然后使用 Burp Suite 拦截数据包,将文件名修改为 `1.php`。由于服务器后端没有进行二次验证,就会直接上传成功
|
||||
|
||||
**2. MIME 类型绕过**
|
||||
|
||||
服务器有时会通过检查 HTTP 请求头中的 `Content-Type` 字段来验证文件类型。例如,一个图片的 `Content-Type` 通常是 `image/jpeg` 或 `image/png`
|
||||
|
||||
- **绕过方法:**
|
||||
- **修改 `Content-Type`:** 攻击者可以上传一个 `webshell.php` 文件,同时在抓包工具中将 `Content-Type` 字段从 `application/octet-stream`(默认值)修改为 `image/jpeg`。如果后端只依赖这个字段进行判断,恶意文件就会上传成功
|
||||
|
||||
**3. 文件头内容检测绕过(魔术字节)**
|
||||
|
||||
一些更安全的系统会检查文件的“魔术字节”(Magic Bytes),也就是文件头部的一串特定字节,用以识别文件类型。例如,JPEG 图片文件开头通常是 `FF D8 FF E0`
|
||||
|
||||
- **绕过方法:**
|
||||
- **“图片马”:** 攻击者可以将恶意代码嵌入到图片文件中,制作成一个“图片马”
|
||||
- **制作方法:**
|
||||
1. 准备一张正常的图片(`1.jpg`)和一个包含恶意代码的文本文件(`shell.php`),内容为 `<?php eval($_POST['cmd']);?>`
|
||||
2. 使用命令将两者合并:`copy 1.jpg/b + shell.php/a webshell.jpg`
|
||||
- **利用方式:**
|
||||
1. 上传 `webshell.jpg` 文件。如果服务器检查了文件头,但没有检查文件内容,就会上传成功。
|
||||
2. 然后,攻击者需要找到一种方法来解析这个图片文件,使其作为 PHP 代码执行。这通常需要结合 **文件包含漏洞(LFI)** 来实现,例如 `include('webshell.jpg')`,或者一些服务器配置错误(如 Apache 的 `.htaccess` 配置)
|
||||
|
||||
**4. 文件名、路径绕过**
|
||||
|
||||
服务器通常会有一份黑名单或白名单来限制可上传的文件扩展名。黑名单会阻止 `.php`, `.asp`, `.jsp` 等脚本文件,而白名单只允许 `.jpg`, `.png`, `.gif` 等图片文件
|
||||
|
||||
**a. 黑名单绕过**
|
||||
|
||||
- **大小写绕过:** `shell.Php`、`shell.pHP` 等
|
||||
- **文件后缀名加空格或点:** 在 Windows IIS 服务器上,文件名末尾的空格或点会被自动去除
|
||||
- `shell.php `(空格)
|
||||
- `shell.php.`(点)
|
||||
- **双重扩展名:** 某些服务器只检查最后一个扩展名
|
||||
- `shell.php.jpg`:上传后,如果服务器处理不当,可能会被当做 `shell.php` 来执行。
|
||||
- **特殊字符绕过:** 利用一些特殊字符,如 `shell.php%00.jpg`(00 截断)
|
||||
- **00截断:** 在 PHP 5.3 之前,PHP 的 `move_uploaded_file()` 函数在处理文件名时,遇到 `0x00` 字节会截断后面的内容。攻击者可以在文件名中注入 `%00`,如 `shell.php%00.jpg`,上传时,服务器只检查 `.jpg`,但实际保存的文件名是 `shell.php`
|
||||
|
||||
**b. 白名单绕过**
|
||||
|
||||
- **服务器解析漏洞:**
|
||||
- **Apache:** 如果服务器配置了 `AddHandler php5-script .jpg`,那么所有 `.jpg` 文件都会被当作 PHP 脚本来解析
|
||||
- **IIS 6.0:** 目录解析漏洞,例如 `/xx.asp/shell.jpg`。服务器会把 `shell.jpg` 当作 ASP 脚本执行
|
||||
- **IIS 7.0/7.5:** `web.config` 配置文件解析漏洞。攻击者可以上传一个恶意的 `web.config` 文件来改变目录的解析规则
|
||||
- **竞争条件(Race Condition):**
|
||||
- 一些服务器在处理文件上传时,会先将文件临时保存,然后进行安全检查,最后再重命名或移动到目标目录
|
||||
- **利用方法:** 攻击者可以利用这个时间差,在文件被检查并删除之前,迅速访问该文件
|
||||
- **步骤:**
|
||||
1. 上传一个包含恶意代码的脚本文件(如 `shell.php`),其中恶意代码会创建一个新的 Webshell 文件
|
||||
2. 在文件上传成功后,但在服务器删除它之前,通过一个脚本循环快速访问该文件
|
||||
3. 恶意脚本被执行,并创建一个新的、无法被删除的 Webshell 文件
|
||||
Reference in New Issue
Block a user