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里面不能出现中文字符。
认证绕过分析
第一天跟着别人文章走一遍,记录下关键步骤和知识点,第二天自己复现,完善笔记内容!
实际上这个漏洞分为两部分
- 路由模式导致的认证绕过,也就是代码审计的第一步,看路由。
- 后台接口sql注入。
路由
登陆页面url:/C6/Jhsoft.Web.login/PassWordSlideFull.aspx
可以看出,bin中存放DLL,dnspy反编译可以得到代码,JHSoft.Web.Reports
文件夹中存放了aspx模板,类似于jsp。
以查找登录url为例,bin目录中
至此不难看出,/C6/Jhsoft.Web.login/PassWordSlideFull.aspx
Jhsoft.Web.login
对应Jhsoft.Web.login.dll
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跳转登录页
加上斜杠/
后的请求,能正常访问该接口。
可以看出,如果不接/
,也就访问不了这个后台接口,自然无法sqli,正是因为这个原因导致了全局的认证绕过。
注:重定向与转发不是一个东西,重定向是客户端行为,客户端可控,而转发是服务端行为,客户端不可控。
这里想了一下,能不能不跟随重定向,然后继续执行该模块下的方法?具体的操作方法是拦截返回包,然后drop掉。
这里没成功,但是有的场景下是可以的,后续补上案例。
前置知识
在 .NET 开发中,web.config 文件用于配置 ASP.NET 应用程序的各个方面,包括模块(modules)和处理程序(handlers)。这些配置项允许开发人员定义如何处理请求和响应,以及在请求处理过程中执行哪些特定的逻辑。
模块(Modules)
模块是处理 ASP.NET 请求生命周期中特定事件的组件。它们可以用于处理请求、响应、认证、授权、缓存、日志记录等。模块可以在请求生命周期的不同阶段插入自定义逻辑。
配置时使用
处理程序(Handlers)
处理程序是专门用于处理特定类型请求的组件。每个处理程序可以处理一种或多种特定的文件扩展名或 URL 模式。处理程序通常用于动态生成响应内容,例如处理 ASPX 页面、Web 服务请求等。
配置时使用
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
如果是以aspx结尾,有防注入和前台接口白名单放行,不在白名单内的接口需要认证。
以白名单内的/jhsoft.web.message/toolbar/jhwocframe.aspx
为例,不需要认证。
处理程序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>
重点看最后一个配置。
name="ExtensionlessUrlHandler-Integrated-4.0"
path="*."
:匹配所有带有后缀的请求。verb="*"
:指定处理程序响应的 HTTP 方法(动词)。这里表示处理所有 HTTP 方法(GET、POST、PUT、DELETE 等)。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认证。
这样也就不会进入.aspx后缀处理的相关流程,其中就包含认证。但是紧跟着ExtensionlessUrlHandler
又可以识别这种带斜杠的接口。
至此,就可以访问任意接口了。
小结
modules中JHSoft.Log
的认证绕过+handlers的ExtensionlessUrlHandler
配合解析。
以后测试url时可以在路径末尾加个/
,说不定就绕过认证了。
类似的还有;
,在url中动手脚绕过认证的例子有很多,具体后面写到再补充。
SQL注入
这里没什么好说的,就是常规的拼接。可以用evertything搜索JHSoft.Web.WorkFlat.dll
另一处SQL注入
aes密钥硬编码
该模块下的AuthOtherServerLoginUrl
也存在注入,注意构造闭合、加密要正确。这里试了一下没成功,到真实环境试了一下发现语句需要添加库名才能正确执行。
可能是程序没有指定库名的原因,sql语句无法执行。先放着