记一次文件上传
字数 901 2025-08-09 22:00:43
文件上传漏洞实战分析
漏洞概述
本文记录了一个文件上传漏洞的发现和利用过程,涉及文件上传路径控制、后缀绕过和目录穿越等技术点。
0x01 初始文件上传测试
-
测试过程:
- 前台注册用户登录后台,测试头像上传功能
- 尝试上传JSP webshell并添加.jpg后缀,返回500错误
- 将文件内容改为正常JPG内容后成功上传
-
关键发现:
- 上传成功后会返回一个URL跳转
- URL解码后发现上传路径部分可控
- 可控参数:
custom_name:文件名folader:目录(拼接在dir参数后)dir:上传目录(有限制,只能设置特定几个目录)
-
验证可控性:
- 修改上传参数后确认可以控制上传路径
- 访问验证:
http://xxx/files/scude_recruit/image/test/test.jpg存在
0x02 文件后缀绕过
-
直接尝试:
- 直接改为.jsp后缀上传,返回Error
- URL解码错误信息后发现是白名单限制
-
绕过思路:
- 发现
images参数可控 - 测试发现不同目录有不同限制:
file目录:限制部分后缀,但允许.txt
- 参数污染技术:
- POST数据中文件后缀改为"txt"
- GET参数中
custom_name改为"1.jspx"
- 结果:文件成功上传但不解析
- 发现
0x03 跨目录Getshell
-
利用方法:
- 通过之前上传获取jsp文件所在目录信息
- 尝试使用
../进行目录穿越 - 目标:上传到能解析jsp的目录
-
验证:
- 成功上传到可执行目录
- 访问确认可执行
关键知识点总结
-
路径控制:
- 关注上传接口中所有与路径相关的参数
- 测试每个参数的可控性和限制条件
-
后缀绕过技术:
- 前后端校验不一致时可能绕过
- 参数污染(POST和GET参数不一致)
- 不同目录可能有不同限制
-
目录穿越:
- 当知道目标解析目录时
- 使用
../尝试上传到其他目录
-
信息收集:
- 通过错误信息获取后端限制条件
- URL解码查看隐藏信息
防御建议
- 严格限制上传目录,禁止目录穿越
- 统一前后端文件类型校验机制
- 对上传文件名进行严格过滤和重命名
- 限制上传目录的执行权限
- 避免将上传路径信息暴露给客户端