某SRC站点从源码泄露到getshell
字数 1176 2025-08-27 12:33:49

从源码泄露到Getshell:某SRC站点渗透测试全记录

1. 漏洞发现阶段

1.1 源码泄露漏洞

  • 发现目标站点存在源码泄露漏洞
  • 通过直接访问xxx.com/www.zip可下载完整站点源码
  • 源码为.NET架构,使用MVC模式开发

1.2 源码分析工具

  • 使用DNSPY工具进行.NET程序集反编译
  • 重点分析控制器(Controller)代码

2. 漏洞挖掘过程

2.1 文件上传漏洞分析

  • 发现两处潜在的文件上传点:

    第一处上传点

    • 位于用户注册登录后的功能中
    • 构造上传包测试失败,服务器抛出错误
    • 确认该处不可利用

    第二处上传点

    • 文件类型判断存在缺陷:
      base.Request.Headers["X-File-Type"]  // 判断文件类型
      base.Request.Headers["X-File-Extension"]  // 判断文件后缀
      
    • 仅简单检查X-File-Type值,未对后缀进行有效验证
    • 确认存在任意文件上传漏洞

2.2 权限问题阻碍

  • 尝试构造上传报文失败
  • 发现该控制器声明了权限限制
  • 普通注册用户无访问该控制器的权限
  • 需要寻找越权漏洞或通过注入获取高权限

3. SQL注入漏洞分析

3.1 发现注入点

  • 在UserController中发现存在SQL注入的代码:
    // sel参数存在注入
    public ActionResult SomeFunction(string sel) {
        // 存在SQL拼接
    }
    

3.2 注入测试

  • 确认注入确实存在
  • 但使用select等关键字时被拦截

3.3 框架防护机制

  • 发现ServiceStack.OrmLite.OrmLiteUtils中有SQL注入检测
  • 非法SQL片段令牌(IllegalSqlFragmentTokens)包含:
    select, insert, delete, update, drop, alter, truncate, etc.
    
  • 框架级防护使注入利用困难

4. 越权漏洞利用

4.1 发现越权点

  • 找到用户更新函数:
    public ActionResult UpdateUser(UserModel user) {
        // 无权限控制
    }
    
  • 该函数本应仅供管理员使用,但未做权限控制
  • 普通用户可直接构造报文访问该函数

4.2 越权操作步骤

  1. 更新ID为1的用户(管理员)的邮箱为攻击者邮箱
  2. 通过密码找回功能发送重置链接至攻击者邮箱
  3. 重置管理员账户密码

4.3 成功获取管理员权限

  • 使用重置后的密码登录系统
  • 确认获得管理员权限

5. 最终Getshell

5.1 利用文件上传漏洞

  • 使用管理员权限构造上传报文
  • 上传ASP文件时发现会被删除
  • 使用后缀名大小写绕过(如.aSp)

5.2 验证Getshell

  • 访问上传的webshell文件
  • 确认成功解析执行

6. 漏洞总结与防御建议

6.1 漏洞链

  1. 源码泄露漏洞 → 2. 权限绕过漏洞 → 3. 文件上传漏洞

6.2 防御建议

  1. 源码泄露防护

    • 禁用开发环境下的源码压缩包访问
    • 生产环境移除调试和开发文件
  2. 文件上传安全

    • 实施严格的文件类型和后缀验证
    • 不要依赖客户端提供的文件类型信息
    • 使用白名单机制限制可上传文件类型
  3. 权限控制

    • 所有敏感操作实施严格的权限检查
    • 遵循最小权限原则
  4. SQL注入防护

    • 使用参数化查询
    • 避免直接拼接SQL语句
  5. 密码重置安全

    • 实施多因素认证
    • 对敏感操作(如邮箱修改)进行二次验证
  6. 输入验证

    • 对所有用户输入进行严格验证
    • 实施服务器端验证,不依赖客户端验证
从源码泄露到Getshell:某SRC站点渗透测试全记录 1. 漏洞发现阶段 1.1 源码泄露漏洞 发现目标站点存在源码泄露漏洞 通过直接访问 xxx.com/www.zip 可下载完整站点源码 源码为.NET架构,使用MVC模式开发 1.2 源码分析工具 使用DNSPY工具进行.NET程序集反编译 重点分析控制器(Controller)代码 2. 漏洞挖掘过程 2.1 文件上传漏洞分析 发现两处潜在的文件上传点: 第一处上传点 : 位于用户注册登录后的功能中 构造上传包测试失败,服务器抛出错误 确认该处不可利用 第二处上传点 : 文件类型判断存在缺陷: 仅简单检查 X-File-Type 值,未对后缀进行有效验证 确认存在任意文件上传漏洞 2.2 权限问题阻碍 尝试构造上传报文失败 发现该控制器声明了权限限制 普通注册用户无访问该控制器的权限 需要寻找越权漏洞或通过注入获取高权限 3. SQL注入漏洞分析 3.1 发现注入点 在UserController中发现存在SQL注入的代码: 3.2 注入测试 确认注入确实存在 但使用 select 等关键字时被拦截 3.3 框架防护机制 发现ServiceStack.OrmLite.OrmLiteUtils中有SQL注入检测 非法SQL片段令牌(IllegalSqlFragmentTokens)包含: 框架级防护使注入利用困难 4. 越权漏洞利用 4.1 发现越权点 找到用户更新函数: 该函数本应仅供管理员使用,但未做权限控制 普通用户可直接构造报文访问该函数 4.2 越权操作步骤 更新ID为1的用户(管理员)的邮箱为攻击者邮箱 通过密码找回功能发送重置链接至攻击者邮箱 重置管理员账户密码 4.3 成功获取管理员权限 使用重置后的密码登录系统 确认获得管理员权限 5. 最终Getshell 5.1 利用文件上传漏洞 使用管理员权限构造上传报文 上传ASP文件时发现会被删除 使用后缀名大小写绕过(如.aSp) 5.2 验证Getshell 访问上传的webshell文件 确认成功解析执行 6. 漏洞总结与防御建议 6.1 漏洞链 源码泄露漏洞 → 2. 权限绕过漏洞 → 3. 文件上传漏洞 6.2 防御建议 源码泄露防护 : 禁用开发环境下的源码压缩包访问 生产环境移除调试和开发文件 文件上传安全 : 实施严格的文件类型和后缀验证 不要依赖客户端提供的文件类型信息 使用白名单机制限制可上传文件类型 权限控制 : 所有敏感操作实施严格的权限检查 遵循最小权限原则 SQL注入防护 : 使用参数化查询 避免直接拼接SQL语句 密码重置安全 : 实施多因素认证 对敏感操作(如邮箱修改)进行二次验证 输入验证 : 对所有用户输入进行严格验证 实施服务器端验证,不依赖客户端验证