Loading

金和OA认证绕过

https://docs.projectdiscovery.io/templates/reference/matchers
https://furina.org.cn/2023/10/05/Nuclei/
https://t.zsxq.com/bIoTf

认证绕过+sql注入

poc

GET /C6/JHSoft.Web.WorkFlat/RssModulesHttp.aspx/?interfaceID=1;WAITFOR%20DELAY%20'0:0:3'--

nuclei

id: jinhe-c6-sqli

info:
  name: JinHer
  author: rain
  severity: high
  description: Checks for time-based SQL injection at /C6/JHSoft.Web.WorkFlat/RssModulesHttp.aspx.
  tags: sqli,timebased

http:
  - raw:
      - |
        @timeout: 15s
        GET /C6/JHSoft.Web.WorkFlat/RssModulesHttp.aspx/?interfaceID=1;WAITFOR%20DELAY%20'0:0:3'-- HTTP/1.1
        Host: {{Hostname}}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'duration>=3'
          - 'contains(body, "连接失败")'
        condition: and

注意id里面不能出现中文字符。

认证绕过分析

如果有补丁/漏洞描述,现自己尝试找出漏洞,编写POC,实在不会再看别人的文章。
这里第一次看.net代码,所以直接看文章了。
第一天跟着别人文章走一遍,记录下关键步骤和知识点,第二天自己复现,完善笔记内容!

实际上这个漏洞分为两部分

  1. 路由模式导致的认证绕过,也就是代码审计的第一步,看路由。
  2. 后台接口sql注入。

路由

image.png
登陆页面url:/C6/Jhsoft.Web.login/PassWordSlideFull.aspx
image.png
可以看出,bin中存放DLL,dnspy反编译可以得到代码,JHSoft.Web.Reports文件夹中存放了aspx模板,类似于jsp。
以查找登录url为例,bin目录中
image.png
image.png
至此不难看出,/C6/Jhsoft.Web.login/PassWordSlideFull.aspx

  1. Jhsoft.Web.login对应Jhsoft.Web.login.dll
  2. PassWordSlideFull.aspx对应PassWordSlideFull

至此,路由结构分析完毕。

认证绕过

认证绕过导致多个接口SQL注入。

GET /C6/JHSoft.Web.WorkFlat/RssModulesHttp.aspx/?interfaceID=1;WAITFOR%20DELAY%20'0:0:3'--
仔细看这条POC,aspx后面接了个/,必须要这样写才能攻击成功,否则服务端会转发到登录页。

正常请求/C6/JHSoft.Web.WorkFlat/RssModulesHttp.aspx,会直接302跳转登录页
image.png

加上斜杠/后的请求,能正常访问该接口。
image.png

可以看出,如果不接/,也就访问不了这个后台接口,自然无法sqli,正是因为这个原因导致了全局的认证绕过。

注:重定向与转发不是一个东西,重定向是客户端行为,客户端可控,而转发是服务端行为,客户端不可控。

这里想了一下,能不能不跟随重定向,然后继续执行该模块下的方法?具体的操作方法是拦截返回包,然后drop掉。
image.png
这里没成功,但是有的场景下是可以的,后续补上案例。

前置知识

在 .NET 开发中,web.config 文件用于配置 ASP.NET 应用程序的各个方面,包括模块(modules)和处理程序(handlers)。这些配置项允许开发人员定义如何处理请求和响应,以及在请求处理过程中执行哪些特定的逻辑。

模块(Modules)

模块是处理 ASP.NET 请求生命周期中特定事件的组件。它们可以用于处理请求、响应、认证、授权、缓存、日志记录等。模块可以在请求生命周期的不同阶段插入自定义逻辑。
配置时使用 <modules> 节点,类比于JavaWeb中的Filter过滤器和intercptor拦截器。

处理程序(Handlers)

处理程序是专门用于处理特定类型请求的组件。每个处理程序可以处理一种或多种特定的文件扩展名或 URL 模式。处理程序通常用于动态生成响应内容,例如处理 ASPX 页面、Web 服务请求等。
配置时使用 <handlers> 节点,类比于JavaWeb中的servlet。

web.config

web.config配置文件定义了路由的一些处理逻辑,处理顺序为modules——>handlers。

模块modules

<modules runAllManagedModulesForAllRequests="true"> //配置所有托管模块在所有请求中运行。
    
  //添加一个名为 JHSoft.CustomQuery 的模块,其类型为 JHSoft.CustomQuery.HttpUploadModule,程序集为 JHSoft.CustomQuery。
  //注:真正逻辑位于JHSoft.CustomQuery.HttpUploadModule类,类从 JHSoft.CustomQuery程序集中取得。
  <add name="JHSoft.CustomQuery" type="JHSoft.CustomQuery.HttpUploadModule, JHSoft.CustomQuery">
  </add>

  //添加一个名为 HttpUploadModule 的模块,其类型为 JHWeb.qqfly.Upload.HttpUploadModule,程序集为 JHWeb.qqfly.Upload。
  <add name="HttpUploadModule" type="JHWeb.qqfly.Upload.HttpUploadModule, JHWeb.qqfly.Upload">
  </add>

  //添加一个名为 JHSoft.Log 的模块,其类型为 JHSoft.Log.LogHttpModule,程序集为 JHSoft.Log。
  <add name="JHSoft.Log" type="JHSoft.Log.LogHttpModule, JHSoft.Log">
  </add>
</modules>

关注程序集JHSoft.Log配置,反编译\C6\bin\JHSoft.Log.dll
image.png
如果是以aspx结尾,有防注入和前台接口白名单放行,不在白名单内的接口需要认证。
以白名单内的/jhsoft.web.message/toolbar/jhwocframe.aspx为例,不需要认证。
image.png

处理程序handlers

<handlers>
  //移除默认处理扩展名为空的 URL 的处理程序。
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  //移除处理 HTTP OPTIONS 请求的方法处理程序。
  <remove name="OPTIONSVerbHandler" />
  //移除处理 HTTP TRACE 请求的方法处理程序。
  <remove name="TRACEVerbHandler" />
  //添加一个处理 ajax/*.ashx 路径的处理程序,支持 POST 和 GET 方法,请求将由 Ajax.PageHandlerFactory 类处理。
  <add name="AjaxMethod" verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax"/>
  //添加一个处理 scissors.axd 路径的处理程序,支持所有 HTTP 方法,请求将由 BitmapCutter.Core.HttpHandler.BitmapScissors 类处理。
  <add name="scissors" path="scissors.axd" verb="*" type="BitmapCutter.Core.HttpHandler.BitmapScissors,BitmapCutter.Core" />

  //重新添加默认处理扩展名为空的 URL 的处理程序,适用于集成模式和 .NET 4.0 运行时。
  //type没有指定程序集名称,意味着这个类型是从 .NET Framework 自带的程序集(通常是 System.Web.dll)中获取的
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

重点看最后一个配置。

  1. name="ExtensionlessUrlHandler-Integrated-4.0"
  2. path="*.":匹配所有带有后缀的请求。
  3. verb="*":指定处理程序响应的 HTTP 方法(动词)。这里表示处理所有 HTTP 方法(GET、POST、PUT、DELETE 等)。
  4. preCondition:指定处理程序的预条件,只有在满足这些条件时,处理程序才会被使用。

ExtensionlessUrlHandler是一种处理 URL 的技术,主要用于在 Web 应用中去掉 URL 中的文件扩展名,从而使 URL 更简洁和更具可读性。

例如info.php?id=1可以写成info/id/1 或者info?id=1
但这里的配置path="*.",假设正常请求为info.aspx?id=1,把请求变成info.aspx/?id=1依旧可以被识别。但info.aspx/id/1这样不行,暂时存疑,后面再看一下ExtensionlessUrlHandler的规则。

注意上面说到,如果是以aspx结尾,那么如果不在前台白名单中的接口则需要认证,否则就重定向掉。
这里就是利用了JHSoft.Log(先)和ExtensionlessUrlHandler(后)对url解析的差异。
若传入后台接口.aspx/,便可以绕过text.EndsWith(".aspx")校验,造成此判断失效,也就饶过了session认证。
image.png
这样也就不会进入.aspx后缀处理的相关流程,其中就包含认证。但是紧跟着ExtensionlessUrlHandler又可以识别这种带斜杠的接口。
至此,就可以访问任意接口了。

小结

modules中JHSoft.Log的认证绕过+handlers的ExtensionlessUrlHandler配合解析。
以后测试url时可以在路径末尾加个/,说不定就绕过认证了。
类似的还有;,在url中动手脚绕过认证的例子有很多,具体后面写到再补充。

SQL注入

这里没什么好说的,就是常规的拼接。可以用evertything搜索JHSoft.Web.WorkFlat.dll
image.png
image.png

另一处SQL注入

aes密钥硬编码

该模块下的AuthOtherServerLoginUrl也存在注入,注意构造闭合、加密要正确。这里试了一下没成功,到真实环境试了一下发现语句需要添加库名才能正确执行。
可能是程序没有指定库名的原因,sql语句无法执行。先放着
image.png

posted @ 2024-05-28 14:18  _rainyday  阅读(44)  评论(0编辑  收藏  举报