别致的上传思路导致getshell的案例
字数 1626 2025-08-10 00:23:58
奇安信攻防社区案例教学:别致的上传思路导致getshell
0x01 案例概述
本案例讲述了一次授权渗透测试中,通过SQL注入获取后台凭证,然后利用开发遗留的上传接口实现getshell的过程。案例展示了如何从登录框开始,逐步深入,最终获取服务器权限的技术路径。
0x02 技术细节详解
1. SQL注入攻击阶段
1.1 发现注入点
- 目标系统:某子域名登录页面
- 注入点:手机号/密码登录表单
- 发现方式:在手机号参数后添加单引号
'触发数据库报错 - 关键信息泄露:
- 物理路径
- 密码列名为
userpwd
1.2 注入利用技巧
-
初始尝试:
or '1'='1绕过失败 -
信息收集策略:
- 通过
information_schema.columns查询包含userpwd列的所有表 - SQL语句:
select * from information_schema.columns where column_name = 'userpwd' - 结果:缩小到3个表(相比直接查400多个表效率大幅提升)
- 通过
-
最终在
coupon_user表中获取有效凭证:- 账号:133xxxx3333
- 密码:xxxx
1.3 关键技巧总结
- 当数据库表数量庞大时,优先根据已知列名反向查询表名
- 利用
information_schema数据库获取元数据 - 避免盲目跑全库,减少对敏感数据的触及
2. 文件上传getshell阶段
2.1 后台发现
- 使用获取的凭证成功登录后台
- 发现多个上传功能点,但都使用腾讯云接口:
- 上传接口:
uploader/uploadTencentCloud - 文件存储位置:腾讯云对象存储
- 上传接口:
2.2 上传接口绕过思路
-
观察命名规律:
- 新接口命名为
uploadTencentCloud - 推测可能存在旧版
upload接口
- 新接口命名为
-
接口探测:
- 直接尝试将
uploader/uploadTencentCloud改为uploader/upload - 结果:成功触发本地文件上传功能
- 直接尝试将
-
验证思路:
- 检查其他站点是否存在类似情况
- 确认是开发遗留问题而非刻意设计
2.3 成功getshell
- 上传webshell到本地服务器
- 默认存储路径:
/upload目录 - 获取服务器权限
2.4 关键技巧总结
- 当遇到云存储上传接口时,尝试探测是否存在本地上传遗留接口
- 常见云上传接口命名模式:
uploadTX(腾讯云)uploadOSS(阿里云OSS)uploadS3(AWS S3)
- 最简单的
upload接口往往是最先开发的版本
0x03 完整攻击链总结
- 信息收集:发现子域名登录页面
- 漏洞发现:SQL注入漏洞(报错型)
- 数据提取:通过列名反向查询表名获取凭证
- 后台登录:使用获取的账号密码
- 功能探测:寻找上传功能点
- 接口绕过:通过修改上传接口路径
- getshell:上传webshell获取权限
0x04 防御建议
针对SQL注入
- 使用预编译语句(PreparedStatement)或ORM框架
- 实施最小权限原则,避免使用高权限数据库账户
- 自定义错误页面,避免泄露敏感信息
- 对用户输入进行严格过滤和验证
针对文件上传漏洞
- 彻底移除不再使用的旧接口
- 实施统一的文件上传服务,避免多套实现
- 文件上传安全措施:
- 严格的文件类型检查(MIME类型+扩展名)
- 随机化文件名
- 设置文件存储目录不可执行
- 对图片文件进行二次渲染
- 定期进行代码审计,清理废弃接口
0x05 扩展思考
- 接口探测自动化:可开发脚本自动探测常见上传接口变种
- 云存储与本地存储的混合架构:如何安全地设计混合存储方案
- 开发流程管理:如何确保废弃接口被彻底移除
- 防御纵深:即使上传webshell成功,如何通过其他安全措施阻止攻击者获取系统权限
本案例展示了渗透测试中"坚持尝试"的重要性,以及在看似没有漏洞的情况下,通过深入分析和合理推测最终找到突破口的完整过程。