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

news2024/10/6 2:31:59

转自先知社区

作者:dot.Net安全矩阵

原文链接:.NET 某和OA办公系统全局绕过漏洞分析 - 先知社区

0x01 前言

某和OA协同办公管理系统C6软件共有20多个应用模块,160多个应用子模块,从功能型的协同办公平台上升到管理型协同管理平台,并不断的更新完善,全面支撑企业发展。从此OA C6版本外部已公开的多个漏洞详情,不难发现都有一些共同的特点,那就是URL里的 .aspx后都会加上一个 / ,然后再进行传递参数。比如 /RssModulesHttp.aspx/?interfaceID=1,为此有一些对.NET感兴趣的群友们在星球陪伴的微信群里问起这个原因。
于是笔者带着这些疑问点抽空研究总结了一下,于是便有了此文。

0x02 ExtensionlessUrlHandler

笔者对.NET系统进行漏洞挖掘时第一步喜欢看一下Web.config配置文件,因为此文件包含了一些关于HTTP请求需要经过的管道或者自定义方法,如下所示。

在这里我们发现了一个名为ExtensionlessUrlHandler的一般处理程序,关于此handle背景知识是这样的:.NET WebForms框架早期版本中对于URL请求的设计和管理一直沿用经典的ASP风格,通常URL地址上包含文件及扩展名,比如 UserName.aspx、CheckUser.ashx 等。随着 Web 开发的进步和用户体验需求的提升,陆续出现像MVC框架对无扩展名 URL的需求,即 extensionless URL。

无扩展名 URL 更简洁、易读,用户更容易记住和输入。例如,/about 比 /about.aspx 更直观和易记。因此.NET框架在后来4.0发布时引入了一个ExtensionlessUrlHandler这是一个专门用于处理无扩展名 URL 请求的 .NET Handler。

当启用该配置后基于WebForms框架实现的Web应用便可以像MVC那样通过使用 / 分割路径和参数。这比如 /Mall/Product/GetById/10 ,使用该组件时需要当运行在IIS7以上版本,并且需要IIS的一个快速修复程序KB980368,配置Web.config后将会正常处理上面这种 extensionless URL。

在IIS经典模式下,用的是aspnet_isapi.dll,通过映射到System.Web.DefaultHttpHandler进行处理,如下配置所示。

<system.webServer>
<handlers>
    <add
      name="ExtensionlessUrl-ISAPI-4.0_32bit"
      path="*."
      verb="GET,HEAD,POST,DEBUG"
      modules="IsapiModule"
    scriptProcessor="%WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"
      preCondition="classicMode,runtimeVersionv4.0,bitness32" 
      responseBufferLimit="0" />
</handlers>
</system.webServer>

在集成模式下,会映射到System.Web.Handlers.TransferRequestHandle来处理,如下配置所示。

<system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

这段配置中path="." 匹配所有无扩展名的 URL 请求,verb="" 表示谓词,就是IIS处理所有 HTTP 请求方法,包含了GET/POST/DELETE/PUT 等。type更是直接指向"System.Web.Handlers.TransferRequestHandler":调用使用TransferRequestHandler处理程序解析运行请求。preCondition表示预先处理的条件必须是应用程序池使用集成模式并且运行时版本为 v4.0 时生效。
ExtensionlessUrlHandler 的引入是为了满足当时WebForms应用具备现代 Web 架构对无扩展名 URL 的需求。随着.NET后续版本的迭代和更新,Web框架已不再需要此项配置便可实现无扩展名的URL。

0x03 JHSoft.Log.HttpModule

我们知道在 .NET 应用程序中,HTTP Modules用于处理进入的 HTTP 请求的生命周期事件。通过自定义 HTTP Modules可以为应用程序添加日志记录、安全验证防护等功能。在企业级应用某和OA中,我们可以看到对 HTTP 模块做了如下配置,例如:

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

上述配置指定HTTP请求需要经过JHSoft.Log.LogHttpModule模块,从名称上看应该是记录请求等日志数据的,其实反编译后发现不仅做了日志的处理,还有对整个请求做了安全校验。具体代码如下图所示

Init 方法用于初始化自定义的模块,并注册一系列事件处理程序,其中AcquireRequestState事件在获取当前请求的状态时触发,常用于检查请求的数据。具体定义如下图所示

代码中对aspx扩展名做了深入的处理,通过 context.Request.Path.ToLower(); 获取请求路径并转换为小写,然后text.EndsWith(".aspx") 判断请求路径是否以 .aspx 结尾,如果是则调用 SqlFilter 方法检查请求是否包含敏感字符,这是一个防御SQL注入的方法。
这么看如果是.ashx或者.asmx文件有注入漏洞则完全不受该约束,可以顺利的进行SQL注入攻击。
如果没有注入的风险,程序会继续向下执行,通过 if ((context.Session == null || context.Session["UserCode"] == null) ... 检查会话是否为空。接着通过类似这样的判断 text.IndexOf("/jhsoft.web.login/password.aspx") == -1 排除特定的页面,除此之外所有的请求都会被强制重定向至登录页。这里和某通一样在此处定义了很多需要排除验证的文件,如下图所示

比如我们选择其中的一个文件名作为测试,访问 /jhsoft.web.workflat/isconnect.aspx 返回了预期的结果,并没有重定向到登录页。

0x04 全局绕过权限验证

经过上面两小节的分析得知,某和OA支持像MVC那样无扩展名的路由请求,而在全局用于检查的AcquireRequestState事件中错误的使用了EndsWith方法判断URL请求是否包含.aspx,因此我们可以构造出如下请求达到绕过全局的校验,如下所示。
/c6/JHsoft.web.Workflat/SetImageModule.aspx/id/121212,或者使用 /c6/JHsoft.web.Workflat/SetImageModule.aspx/?id=2222 均可以实现未授权访问。如图所示

我们以外部公开的RssModulesHttp.aspx存在SQL注入漏洞为例,查看此文件的Page_Load方法,发现参数 interfaceID 从 Request.QueryString客户端获取后并没有做任何过滤和处理便进入了 GetRssInfo函数,如下图所示


GetRssInfo 方法用于从数据库中获取特定 RSS 接口的信息。它使用传入的 interfaceID 参数来查询数据库中的 WFRssModule 表,并返回查询结果,具体代码如下图所示。


上述传入的 interfaceID 直接拼接到 SQL 查询字符串中并且执行查询,因此触发MSSQL注入漏洞,如下图所示。

0x05 总结

该系统由 ExtensionlessUrlHandler 和 JHSoft.Log.Module 组件两者配合引发的全局绕过漏洞,攻击者只需要构造出特定的URL请求便可实现任意接口的未授权访问,也证明了 Web应用程序在配置和权限管理上的薄弱环节,因此不当的配置可能导致严重的安全漏洞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1711872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Next-Admin,一款基于Nextjs开发的开箱即用的中后台管理系统(全剧终)

hello&#xff0c;大家好&#xff0c;我是徐小夕。之前和大家分享了很多可视化&#xff0c;零代码和前端工程化的最佳实践&#xff0c;今天继续分享一下最近开源的 Next-Admin 项目的最新更新。 这次更新是1.0版本最后一次更新&#xff0c;也根据用户反馈的问题做了一些优化&am…

uniapp开发微信小程序:用户手机号授权获取全流程详解与实战示例

随着多端小程序研发工具的日益普及&#xff0c;诸如uniapp、Taro、Flutter等跨平台解决方案使得开发者能够高效地构建同时适配多个主流小程序平台&#xff08;如微信、支付宝、百度、字节跳动等&#xff09;的应用。尽管各平台间存在一定的差异性&#xff0c;但在获取用户手机号…

helm离线安装

目录 概述实践 概述 centos 7.x 离线安装 helm 3.14.4 版本 实践 离线包资源下载地址 github [roothadoop01 ~]# tar -xvf helm-v3.14.4-linux-amd64.tar.gz linux-amd64/ linux-amd64/README.md linux-amd64/LICENSE linux-amd64/helm [roothadoop01 ~]# mv ./linux-amd…

【云原生 | 59】Docker中通过docker-compose部署ELK

目录 1、组件介绍 2 、项目环境 2.1 各个环境版本 2.2 Docker-Compose变量配置 2.3 Docker-Compose服务配置 3、在Services中声明了四个服务 3.1 ElasticSearch服务 3.2 Logstash服务 3.3 Kibana服务 3.4 Filebeat服务 4、使用方法 4.1 方法一 4.2 方法二 5、启动…

WebPack插件实现:打包之后自动混淆加密JS文件

在WebPack中调用JShaman&#xff0c;实现对编译打包生成的JS文件混淆加密 一、插件实现 1、插件JShamanObfuscatorPlugin.js&#xff0c;代码&#xff1a; class JShamanObfuscatorPlugin { apply(compiler) { compiler.hooks.emit.tapAsync(JShamanObfuscatorPlugin, (comp…

深度神经网络——什么是迁移学习?

1.概述 在练习机器学习时&#xff0c;训练模型可能需要很长时间。从头开始创建模型架构、训练模型&#xff0c;然后调整模型需要大量的时间和精力。训练机器学习模型的一种更有效的方法是使用已经定义的架构&#xff0c;可能具有已经计算出的权重。这是背后的主要思想 迁移学习…

嵌入式进阶——OLED显示器(SPI)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 SPI协议原理图字库芯片中文显示屏原理API的使用 SPI协议 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行…

使用Django实现WebSocket

文章目录 安装依赖编写Consumer配置路由在模板中使用WebSocket运行应用 WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;在Web开发中被广泛应用于实时通信和数据推送。本文将介绍如何在Django中使用WebSocket来实现实时通信功能。 安装依赖 首先&#xff0…

VMware vSphere 8.0 Update 2c 下载 - 企业级工作负载平台

VMware vSphere 8.0 Update 2c 下载 - 企业级工作负载平台 ESXi 8.0U2 & vCenter Server 8.0U2 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vsphere-8-u2/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org …

《最新出炉》系列入门篇-Python+Playwright自动化测试-46-鼠标滚轮操作

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 有些网站为了节省流量和资源&#xff0c;提高加载效率&#xff0c;采用的是动态加载&#xff08;懒加载&#xff09;的&#xff0c;也就是当拖动页面右侧滚动条后会自动加载网…

IDM究竟有哪些优势:全面解析高速下载与管理利器!

一、引言 Internet Download Manager&#xff08;简称IDM&#xff09;是一款功能强大的文件下载工具&#xff0c;它具备许多优势&#xff0c;使得用户在下载文件时能够获得更快的速度和更好的体验。本文将详细介绍IDM的优势。 二、IDM简介 IDM是一款流行的下载管理软件&#…

绘唐app官方版绘唐3AI工具

绘唐app官方版绘唐3AI工具 激活授权方式&#xff1a;https://qvfbz6lhqnd.feishu.cn/wiki/CcaewIWnSiAFgokOwLycwi0Encf 绘唐app是一款基于人工智能和摄影技术的应用程序&#xff0c;旨在帮助用户将照片转化为唐朝画风的艺术作品。 该应用程序使用先进的图像处理算法&#xf…

Epic Pen Pro v3 解锁版安装教程 (屏幕实时标记注释工具)

前言 Epic Pen是一款功能强大的屏幕标记工具&#xff0c;允许您在屏幕上绘图或书写&#xff0c;而无需在后台与软件交互。这意味着您几乎可以注释任何东西&#xff01;使用我们流行的屏幕标记和Windows数字白板工具Epic Pen编写、绘制和突出显示&#xff0c;包括演示文稿软件&…

深入解析绘图范式:面向对象与直接操作的较量

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 第一节&#xff1a;面向对象绘图的魅力 第二节&#xff1a;直接操作绘图模块的便捷性 第三…

Linux查看设备信息命令

dmidecode | grep Product Name 查看grub版本号&#xff1a;rpm -qa | grep -i "grub" 客户端操作系统版本&#xff1a; cat /etc/issue cat /etc/redhat-release 处理器品牌及型号&#xff1a; less /proc/cpuinfo |grep model

基于BP神经网络的64QAM解调算法matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ....................................................... % 第一部分&#xff1a;加载并可视…

触觉训练技巧:盲人感知世界的第二双“眼”

在当今科技日新月异的时代&#xff0c;辅助技术正逐步成为残障人士融入社会的重要桥梁。其中&#xff0c;一款名为““蝙蝠避障””的创新软件&#xff0c;凭借其实时避障和拍照识别功能&#xff0c;为盲人朋友的日常生活带来了前所未有的便捷与安全。然而&#xff0c;技术的辅…

社区电商系统业务架构:打造线上线下融合的智慧生活圈

在数字化时代&#xff0c;社区电商系统已成为连接线上线下的重要纽带&#xff0c;为居民提供便捷的购物体验和多样化的生活服务。本文将深入探讨社区电商系统的业务架构&#xff0c;揭示其在构建智慧生活圈中的关键作用。 ### 1. 概述 社区电商系统是基于互联网技术构建的一种…

【iOS】UI学习(一)

UI学习&#xff08;一&#xff09; UILabelUIButtonUIButton事件 UIViewUIView对象的隐藏UIView的层级关系 UIWindowUIViewController定时器与视图对象 UISwitch UILabel UILabel是一种可以显示在屏幕上&#xff0c;显示文字的一种UI。 下面使用代码来演示UILabel的功能&#…

数据分析中的列与行交换技巧

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;数据交换的重要性 二、列交换的基本原理 三、列交换的代码实现 1. 使…