从任意文件下载到getshell
字数 1267 2025-08-20 18:17:07

从任意文件下载到Getshell的渗透测试技术分析

漏洞发现与利用流程

1. 初始信息收集与漏洞发现

  • 目标识别:发现一个无验证码保护的旧版Web页面,存在潜在安全风险
  • 接口探测:使用URLfinder工具扫描获取后台接口
  • 重点关注点
    • 响应内容较小的接口(可能包含敏感信息)
    • 响应500错误的接口(可能通过报错反推请求)

2. 任意文件下载漏洞利用

  • 漏洞特征:发现文件下载接口路径可自定义
  • WAF绕过:通过HTTPS协议绕过WAF防护
  • 经典测试:尝试../../etc/passwd路径遍历
  • 信息收集
    • 读取历史命令记录(~/.bash_history)
    • 获取Web应用启动路径和日志路径
    • 发现lib.zip包含应用依赖

3. 源码获取与分析

  • 获取源码方法
    • 尝试读取/proc/self/cmdline和内存映射文件(失败)
    • 通过restart.shstart.sh脚本分析启动命令
  • 源码分析工具
    • 使用JADX反编译JAR文件
    • 搭建本地测试环境加载依赖

4. 权限绕过发现

  • Burp插件检测:发现疑似权限绕过的接口
  • 验证方法:通过路径规范化绕过(如..;技巧)

5. JDBC注入漏洞利用

  • 漏洞接口:发现数据库连接创建和验证的路由
  • 漏洞特征
    • 存在DBTypeEnum枚举,包含MySQL选项
    • JDBC URL部分可控
  • 利用方法
    • 构造特殊数据库名触发反序列化:
      midpl?&autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor#
      
    • 处理URL编码问题(?#的使用)

6. Fastjson反序列化利用

  • 发现低版本Fastjson:通过下载接口确认存在漏洞版本
  • 漏洞触发点:找到调用parseObject的接口
  • 不出网利用
    • 使用MyBatis+Bcel组合利用链
    • 借助Web-Chains工具生成利用代码

7. 文件上传尝试

  • 文件服务分析:发现9002端口的文件操作服务
  • 上传接口问题:标准拼接和cpfile操作,但目标环境存在未知问题

关键工具与技术

  1. URLfinder:用于发现后台接口
  2. JADX:Java反编译工具
  3. Web-Chains:反序列化利用链生成工具
    • GitHub地址:https://github.com/Java-Chains/web-chains
  4. TsojanScan:Burp插件,检测权限绕过
  5. 不出网利用技术:MyBatis+Bcel组合利用链

防御建议

  1. 输入验证

    • 严格限制文件下载路径
    • 过滤路径遍历字符(../)
  2. 组件安全

    • 及时升级Fastjson等易受攻击组件
    • 限制JDBC连接参数
  3. 配置安全

    • 禁用不必要的Actuator端点
    • 限制错误信息泄露
  4. 架构安全

    • 分离文件服务与Web服务
    • 实施最小权限原则

经验总结

  1. 关注异常响应:小响应和500错误往往包含有价值信息
  2. 多角度验证:当一种方法失败时尝试其他途径(如不同协议、不同利用链)
  3. 工具组合使用:自动化工具与手动分析结合提高效率
  4. 环境差异注意:本地测试成功不代表目标环境可用,需考虑配置差异
从任意文件下载到Getshell的渗透测试技术分析 漏洞发现与利用流程 1. 初始信息收集与漏洞发现 目标识别 :发现一个无验证码保护的旧版Web页面,存在潜在安全风险 接口探测 :使用URLfinder工具扫描获取后台接口 重点关注点 : 响应内容较小的接口(可能包含敏感信息) 响应500错误的接口(可能通过报错反推请求) 2. 任意文件下载漏洞利用 漏洞特征 :发现文件下载接口路径可自定义 WAF绕过 :通过HTTPS协议绕过WAF防护 经典测试 :尝试 ../../etc/passwd 路径遍历 信息收集 : 读取历史命令记录( ~/.bash_history ) 获取Web应用启动路径和日志路径 发现 lib.zip 包含应用依赖 3. 源码获取与分析 获取源码方法 : 尝试读取 /proc/self/cmdline 和内存映射文件(失败) 通过 restart.sh 和 start.sh 脚本分析启动命令 源码分析工具 : 使用JADX反编译JAR文件 搭建本地测试环境加载依赖 4. 权限绕过发现 Burp插件检测 :发现疑似权限绕过的接口 验证方法 :通过路径规范化绕过(如 ..; 技巧) 5. JDBC注入漏洞利用 漏洞接口 :发现数据库连接创建和验证的路由 漏洞特征 : 存在 DBTypeEnum 枚举,包含MySQL选项 JDBC URL部分可控 利用方法 : 构造特殊数据库名触发反序列化: 处理URL编码问题( ? 和 # 的使用) 6. Fastjson反序列化利用 发现低版本Fastjson :通过下载接口确认存在漏洞版本 漏洞触发点 :找到调用 parseObject 的接口 不出网利用 : 使用MyBatis+Bcel组合利用链 借助Web-Chains工具生成利用代码 7. 文件上传尝试 文件服务分析 :发现9002端口的文件操作服务 上传接口问题 :标准拼接和 cpfile 操作,但目标环境存在未知问题 关键工具与技术 URLfinder :用于发现后台接口 JADX :Java反编译工具 Web-Chains :反序列化利用链生成工具 GitHub地址:https://github.com/Java-Chains/web-chains TsojanScan :Burp插件,检测权限绕过 不出网利用技术 :MyBatis+Bcel组合利用链 防御建议 输入验证 : 严格限制文件下载路径 过滤路径遍历字符( ../ ) 组件安全 : 及时升级Fastjson等易受攻击组件 限制JDBC连接参数 配置安全 : 禁用不必要的Actuator端点 限制错误信息泄露 架构安全 : 分离文件服务与Web服务 实施最小权限原则 经验总结 关注异常响应 :小响应和500错误往往包含有价值信息 多角度验证 :当一种方法失败时尝试其他途径(如不同协议、不同利用链) 工具组合使用 :自动化工具与手动分析结合提高效率 环境差异注意 :本地测试成功不代表目标环境可用,需考虑配置差异