任意文件上传漏洞是Web应用中的高危漏洞,攻击者通过绕过文件类型检测机制,将恶意脚本(如WebShell)上传至服务器。该漏洞的本质是文件上传操作未规范校验文件类型,导致检测功能被绕过。随着开发人员安全意识提升,此类漏洞有所减少但仍未绝迹。
黑盒测试过程
文件上传流程
-
前端提交
-
用户选择文件并提交表单
-
浏览器生成POST Multipart报文发送至服务器
-
报文解析
-
请求头部分
HTTP协议版本、浏览器信息、请求方式、编码类型、请求地址
-
请求数据部分
普通参数:参数名/参数值(含隐藏字段)
文件数据:文件名、响应函数名、文件类型
-
服务器处理
-
中间件接收并解析报文
-
后端代码处理请求(PHP特有:将内容写入临时文件)
-
最终文件写入目标存储路径
上传漏洞的必要条件
-
存在上传功能点
-
可上传动态脚本文件(如.php/.jsp)
-
上传目录有执行权限
-
上传文件可执行
-
可访问上传的动态文件
上传检测流程
前端提交检测
-
JavaScript检测
-
触发事件:
onchange
(内容改变时)、onsubmit
(表单提交时) -
绕过:删除检测函数或使用BurpSuite拦截修改请求
-
Flash AS检测
-
提交前触发ActionScript检测
-
绕过:直接修改POST报文内容
-
App上传检测安卓绕过步骤:
adb connect 127.0.0.1:7555 # MuMu模拟器am start -a android.settings.WIFI_SETTINGS
-
设置代理:Burp IP:8080
-
安装Burp证书(.crt格式)
-
信任证书(IOS需额外设置)
-
对抗证书校验:Xposed框架+JustTrustMe
数据传输检测
-
WAF拦截:双后缀/00截断绕过
-
IPS拦截:慢速攻击/分块传输
后端处理检测
-
扩展名检测绕过
-
大小写混合:
.PhP
-
特殊后缀:
.phtml
-
MIME Type检测绕过
-
伪造Content-Type:
image/jpeg
-
文件格式检测
检测类型 绕过方法 文件头检测 添加合法文件头(如 GIF89a
)完整内容检测 图片与脚本合并: copy /b 1.jpg+shell.php final.jpg
恶意内容检测 高度混淆WebShell(Weevely工具)
写入文件系统
-
文件重命名绕过:利用解析漏洞
-
杀毒软件对抗:内存马/无文件攻击
访问文件执行
-
解析漏洞利用
# Nginx畸形解析shell.jpg%20%00.php# Apache配置错误shell.php.jpg# IIS分号解析shell.asp;.jpg
-
服务器识别
-
F12 → 网络 → Server头
-
访问不存在页面查看错误信息
绕过的高级技巧
重绘图绕过
-
用目标图形库转换正常图片
-
识别转换前后未变化区域
-
将WebShell注入未变化区
-
二次转换验证完整性工具:Bypass-PHP-GD-Process-To-RCE
PHPinfo+本地包含组合利用
攻击流程:
-
上传含大文件(拖延处理)
-
快速访问PHPinfo获取
$_FILES
信息 -
利用本地包含执行临时文件
GET /lfi.php?file=/tmp/phpXXXXX
在线压缩包利用
-
目录穿越攻击
zip -r evil.zip ../../etc/crontab
-
符号链接攻击
ln -s /etc/passwd ./linkzip --symlinks -r evil.zip ./link
-
路径混淆攻击
-
构造含
../
路径的压缩包结构
下半部分将涵盖白盒审计、修复方案等深度内容。
原文始发于微信公众号(今木安全):Java代码审计第七章-任意文件上传漏洞(上)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论