.NET 某和OA办公系统全局绕过漏洞分析
字数 1597 2025-08-03 16:44:01

.NET 某和OA办公系统全局绕过漏洞分析教学文档

0x01 漏洞背景

某和OA协同办公管理系统C6版本存在一个全局绕过漏洞,该漏洞源于系统配置与权限验证模块的配合缺陷。该系统采用.NET WebForms框架开发,具有以下特点:

  • 支持20多个应用模块,160多个应用子模块
  • URL设计特点:.aspx后加"/"再传递参数(如/RssModulesHttp.aspx/?interfaceID=1
  • 存在多个已公开漏洞,均与URL处理方式相关

0x02 技术原理分析

ExtensionlessUrlHandler组件

.NET框架4.0引入的ExtensionlessUrlHandler组件是关键因素:

  1. 背景

    • 早期.NET WebForms采用经典ASP风格URL(如UserName.aspx
    • 为支持无扩展名URL(如/about替代/about.aspx)而开发
  2. 配置方式

    <system.webServer>
        <handlers>
            <add name="ExtensionlessUrlHandler-Integrated-4.0" 
                 path="*." 
                 verb="*" 
                 type="System.Web.Handlers.TransferRequestHandler" 
                 preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
    </system.webServer>
    
    • path="*.":匹配所有无扩展名URL
    • verb="*":处理所有HTTP方法
    • 要求IIS7+和集成模式
  3. 功能

    • 使WebForms支持MVC风格路由(如/Mall/Product/GetById/10

JHSoft.Log.HttpModule权限验证模块

系统配置了自定义HTTP模块进行安全验证:

<modules runAllManagedModulesForAllRequests="true">
    <add name="JHSoft.Log" type="JHSoft.Log.LogHttpModule, JHSoft.Log">
    </add>
</modules>

模块功能分析:

  1. 安全验证逻辑

    • 检查请求路径是否以.aspx结尾(text.EndsWith(".aspx")
    • .aspx请求进行SQL注入检查(SqlFilter方法)
    • 验证会话有效性(context.Session["UserCode"]
    • 排除特定页面(如/jhsoft.web.login/password.aspx
  2. 设计缺陷

    • 仅验证.aspx扩展名,忽略.ashx.asmx
    • 使用EndsWith判断导致绕过可能

0x03 漏洞利用方法

绕过权限验证

利用ExtensionlessUrlHandler和验证模块的配合缺陷:

  1. 构造特殊URL

    • /c6/JHsoft.web.Workflat/SetImageModule.aspx/id/121212
    • /c6/JHsoft.web.Workflat/SetImageModule.aspx/?id=2222
  2. 原理

    • 验证模块看到.aspx/不认为是以.aspx结尾
    • ExtensionlessUrlHandler仍能正确路由请求

SQL注入漏洞示例

RssModulesHttp.aspx为例:

  1. 漏洞位置:

    // Page_Load方法
    string interfaceID = base.Request.QueryString["interfaceID"];
    this.GetRssInfo(interfaceID);
    
    // GetRssInfo方法
    string sql = "SELECT * FROM WFRssModule WHERE InterfaceID=" + interfaceID;
    
  2. 利用方式:

    • 直接拼接SQL语句导致注入
    • 可构造如/RssModulesHttp.aspx/?interfaceID=1 AND 1=CONVERT(int,(SELECT table_name FROM information_schema.tables))的payload

0x04 漏洞修复建议

  1. 权限验证模块修复

    • 使用更全面的URL路径检查(如Contains替代EndsWith
    • 对所有动态资源进行验证(包括.ashx.asmx
  2. 输入验证加强

    • 对所有输入参数进行严格过滤
    • 使用参数化查询防御SQL注入
  3. 配置优化

    • 评估ExtensionlessUrlHandler的必要性
    • 限制特殊URL格式的使用

0x05 总结

该漏洞是典型的安全设计缺陷组合导致的:

  1. 根本原因

    • ExtensionlessUrlHandler支持的特殊URL格式
    • 验证模块不严谨的路径检查逻辑
  2. 影响

    • 导致系统全局权限验证被绕过
    • 结合其他漏洞(如SQL注入)可造成更严重影响
  3. 启示

    • 安全验证逻辑需要全面考虑各种URL格式
    • 组件间的配合可能产生非预期行为
    • 输入验证必须作为独立防线,不能依赖单一保护机制
.NET 某和OA办公系统全局绕过漏洞分析教学文档 0x01 漏洞背景 某和OA协同办公管理系统C6版本存在一个全局绕过漏洞,该漏洞源于系统配置与权限验证模块的配合缺陷。该系统采用.NET WebForms框架开发,具有以下特点: 支持20多个应用模块,160多个应用子模块 URL设计特点:.aspx后加"/"再传递参数(如 /RssModulesHttp.aspx/?interfaceID=1 ) 存在多个已公开漏洞,均与URL处理方式相关 0x02 技术原理分析 ExtensionlessUrlHandler组件 .NET框架4.0引入的 ExtensionlessUrlHandler 组件是关键因素: 背景 : 早期.NET WebForms采用经典ASP风格URL(如 UserName.aspx ) 为支持无扩展名URL(如 /about 替代 /about.aspx )而开发 配置方式 : path="*." :匹配所有无扩展名URL verb="*" :处理所有HTTP方法 要求IIS7+和集成模式 功能 : 使WebForms支持MVC风格路由(如 /Mall/Product/GetById/10 ) JHSoft.Log.HttpModule权限验证模块 系统配置了自定义HTTP模块进行安全验证: 模块功能分析: 安全验证逻辑 : 检查请求路径是否以 .aspx 结尾( text.EndsWith(".aspx") ) 对 .aspx 请求进行SQL注入检查( SqlFilter 方法) 验证会话有效性( context.Session["UserCode"] ) 排除特定页面(如 /jhsoft.web.login/password.aspx ) 设计缺陷 : 仅验证 .aspx 扩展名,忽略 .ashx 和 .asmx 使用 EndsWith 判断导致绕过可能 0x03 漏洞利用方法 绕过权限验证 利用ExtensionlessUrlHandler和验证模块的配合缺陷: 构造特殊URL : /c6/JHsoft.web.Workflat/SetImageModule.aspx/id/121212 /c6/JHsoft.web.Workflat/SetImageModule.aspx/?id=2222 原理 : 验证模块看到 .aspx/ 不认为是以 .aspx 结尾 ExtensionlessUrlHandler仍能正确路由请求 SQL注入漏洞示例 以 RssModulesHttp.aspx 为例: 漏洞位置: 利用方式: 直接拼接SQL语句导致注入 可构造如 /RssModulesHttp.aspx/?interfaceID=1 AND 1=CONVERT(int,(SELECT table_name FROM information_schema.tables)) 的payload 0x04 漏洞修复建议 权限验证模块修复 : 使用更全面的URL路径检查(如 Contains 替代 EndsWith ) 对所有动态资源进行验证(包括 .ashx 和 .asmx ) 输入验证加强 : 对所有输入参数进行严格过滤 使用参数化查询防御SQL注入 配置优化 : 评估ExtensionlessUrlHandler的必要性 限制特殊URL格式的使用 0x05 总结 该漏洞是典型的安全设计缺陷组合导致的: 根本原因 : ExtensionlessUrlHandler支持的特殊URL格式 验证模块不严谨的路径检查逻辑 影响 : 导致系统全局权限验证被绕过 结合其他漏洞(如SQL注入)可造成更严重影响 启示 : 安全验证逻辑需要全面考虑各种URL格式 组件间的配合可能产生非预期行为 输入验证必须作为独立防线,不能依赖单一保护机制