实战中学习.net审计

admin 2025年2月15日09:06:44评论10 views字数 5353阅读17分50秒阅读模式

文章来源:安全避风港

总结一下真实项目中遇到的.net站点源码泄露审计过程。由于没有系统的学习过.net项目的开发,以下审计过程都是凭借一点点java基础配合chatGPT进行审计的过程,如有表述错误的地方还请指正。

遇到的.net项目主要有以下几种。常规的asp、aspx、ashx,审计时直接查看某个具体的文件;预编译项目,aspx这类文件的代码无法直接从文件中查看,需要反编译dll查看;.net mvc项目,又分为.NET Framework MVC和.NET Core(支持跨平台)

.net预编译下审计

解压缩备份文件,bin目录文件内容大概如下:

实战中学习.net审计

可以看到存在大量的.compiled文件,说明网站发布使用了预编译。可为预编译?下面是官方的说法

Visual Studio 为 ASP.NET 开发人员提供了两种类型的项目:Web 应用程序项目 (WAP) 和网站项目 (WSP) 。这两个项目类型之间的一个主要区别是,WAP 必须在部署之前显式编译代码,而 WSP 中的代码可以在 Web 服务器上自动编译。

使用了预编译之后.ascx或.aspx文件仅作为标记文件,文件内容将被编译到xxx.dll中

实战中学习.net审计

那么如何找到某个aspx文件对应的dll文件呢?

打开某个compiled文件,可以看到如下内容。assembly为编译后的dll名称(保存到bin目录下),filedep为aspx的请求路径

实战中学习.net审计

到bin目录下找到App_Web_n3d2sq1y.dll文件,反编译文件就能看到了。

反编译工具:https://github.com/dnSpy/dnSpy

实战中学习.net审计

但是打开文件后会发现,没看到有实际程序代码

实战中学习.net审计

此时需要看类的定义,gongwen1_1_aspx继承了gongwen_1IHttpHandler

publicclassgongwen1_1_aspx : gongwen_1, IHttpHandler

处理的代码在gongwen_1中,由于1.aspx就是一个测试空文件,没有实际的内容,下图是别的aspx文件,其中Page_Load就是实际的处理代码,除了Page_Load外还有xxx_Click函数,xxx_Click是处理表单控件操作。

实战中学习.net审计

为什么是从Page_Load方法开始看?这是由 ASP.NET 页面生命周期的特性决定的, ASP.NET 页面(.aspx 文件)经历多个事件阶段,从请求到响应生成。主要的生命周期事件包括: 

1.Page Initialization(初始化)

2.Load View State(加载视图状态)

3.Load Postback Data(加载回发数据)

4.Page Load(加载)

5.Event Handling(处理控件事件)

6.Page PreRender(预渲染)

7.Save View State(保存视图状态)

8.Render(渲染)

9.Unload(卸载)

Page_Load 阶段在所有控件初始化和视图状态加载后触发,确保了页面上的所有控件都已被创建并初始化,因此在此阶段处理逻辑可以安全地操作控件。

有兴趣的可以看:https://www.cnblogs.com/springsnow/p/9433960.html

一般进行代码审计时都会先看配置文件,再看具体代码处理逻辑。先查看配置文件可以帮助我们快速理解 ASP.NET 项目的整体结构、依赖关系和重要设置,从而在深入代码时更有针对性。比如网站是如何进行权限校验的,那些路径下的文件需要校验,那些不需要;路由分发时是如何进行映射的,从网页访问一个接口,那段代码处理这个接口等等。

配置文件一般看web.config和global.asax。web.config 是 ASP.NET 网站的核心配置文件,管理大部分配置。global.asax 管理应用程序级事件。

由于泄露的压缩包只能查看bin目录下的文件,web.config无法分析,global.asax文件也没配置处理逻辑。通过观察该ASP.NET 项目没有使用什么审计模式,还是传统的ASP.NET 项目集MVC于一身。下面直接进入漏洞环节。

漏洞审计

SQL注入

先审文件上传,sql注入这类服务端漏洞优先。从上图Page_Load描述处就能看到存在一个SQL注入漏洞。从前端获取参数直接进行sql语句的拼接。但是网站存在全局过滤,拦截单引号,由于代码是备份文件没找到具体的处理代码。

实战中学习.net审计

文件上传

由于是预编译项目,如果直接上传asp文件是无法被解析的。这里配合一个目录穿越+任意文件上传实现getshell。

实战中学习.net审计

实战中学习.net审计

实战中学习.net审计

.net站点预编译下getshell的姿势:https://xz.aliyun.com/t/11765

小tips

一个一个看文件很容易疲惫,而且很多aspx文件也不知道具体功能,能不能进行漏洞利用。这时候可以结合黑盒漏洞挖掘方式,遍历所有文件,在查看响应200的文件,通过这样的方式还能快速查找到很多信息泄露。遍历的时候需要注意的是将一些delete、update、add、备份文件、信息发送这类接口给删除了。

.NET Framework MVC审计

将泄露的bin文件解压得到如下目录内容,通过查看dll文件可以初步判断为该.net站点采用了.NET Framework MVC模式

实战中学习.net审计

判断.NET Framework MVC模式一些方法

直接访问网站查看URI接口信息,一般接口中没有asp、aspx后缀

实战中学习.net审计

反编译dll后查看 TargetFramework内容。如果显示net Framework5.0net Framework6.0则是 .NET Core/.NET 6+。

实战中学习.net审计

引用的DLL文件

.NET Framework 项目:System.Web.dll(用于 ASP.NET Web Forms 或 ASP.NET MVC)。System.Data.dll(传统 ADO.NET 数据操作)。System.Drawing.dll(GDI+ 图形操作)。

.NET Core/.NET 6+ 项目:Microsoft.AspNetCore.*(ASP.NET Core 特有)。System.Private.CoreLib(.NET Core/.NET 6+ 的核心库)。System.Text.Json

配置类

直接搜索RouteConfig,就能找到项目的核心代码

实战中学习.net审计

CreditOutSide.WebUI可以认为它是web.config文件,项目的配置基本都在这,主要有以下几个类。下面是对每个类的八股文介绍

BundleConfig

前端静态资源配置。用于配置 CSS 和 JavaScript 文件的捆绑与压缩。ASP.NET MVC 提供了捆绑(Bundle)和缩小(Minify)功能,以减少 HTTP 请求和文件大小,提升页面加载性能。

CustomerFilterAttribute

自定义过滤器。该类是一个自定义的 过滤器,可能继承了 ActionFilterAttribute 或实现了过滤器接口(如 IAuthorizationFilter)。ASP.NET MVC 支持以下过滤器类型:

授权过滤器(Authorization Filters):检查用户权限。

操作过滤器(Action Filters):在操作执行前后执行代码。

结果过滤器(Result Filters):在结果生成前后执行代码。

异常过滤器(Exception Filters):处理异常。

FilterConfig

全局过滤器配置。用于向项目中注册全局过滤器,例如全局异常处理或授权检查。将全局过滤器添加到 GlobalFilterCollection

MvcApplication

ASP.NET MVC 应用程序的启动类。MvcApplication 是 ASP.NET MVC 应用程序的入口点,通常继承自 HttpApplication。它包含多个全局事件(如 Application_Start),用于初始化项目。

RouteConfig

路由配置,配置 MVC 的 URL 路由规则,用于将请求映射到对应的控制器和操作方法。路由映射的核心是通过 路由配置 来定义 URL 模式与控制器和操作方法之间的映射关系。这是通过 RouteConfig 类和 RouteCollection 实现的。

定义路由规则:路由规则定义了 URL 模式与对应的控制器、操作方法和参数之间的关系。注册路由:在 RouteConfig 类中,通过向RouteCollection添加规则来注册路由。启动时加载路由:在 Global.asax 文件中,调用RouteConfig.RegisterRoutes(RouteTable.Routes),使路由配置生效。

核心组件:RouteConfig 类,用于配置应用程序的路由规则;Global.asax,在应用程序启动时注册路由配置;RouteCollection,RouteCollection 是存储所有路由规则的集合。每个路由规则会被添加到这个集合中供路由引擎匹配。

路由匹配规则

·URL 模式

o{controller}/{action}/{id}:表示 URL 的第一级路径是控制器名,第二级路径是方法名,后续是参数。

·默认值

o在没有提供对应 URL 的片段时,使用默认值。例如:

§{controller = "Home"}:默认控制器是 Home

§{action = "Index"}:默认操作方法是 Index

§{id = UrlParameter.Optional}:参数 id 是可选的。

·参数化

o{id}:表示动态参数,可以通过 Request.Params["id"] 获取。

高级路由功能

1. 参数约束,可以对路由参数设置约束,确保只有符合规则的请求会被路由到指定的控制器和操作方法。

2. 多路由规则,可以定义多个路由规则,路由引擎会按照注册的顺序匹配第一个符合条件的规则。

3. 自定义路由,可以创建自定义路由逻辑,通过继承 RouteBase 或实现 IRouteHandler 接口实现。

4. 区域路由,ASP.NET MVC 支持按区域划分路由,通常用于大型项目。

WebApiConfig

Web API 路由配置。如果项目中包含 Web API,则此类用于配置 Web API 的路由规则。ASP.NET MVC 和 Web API 的路由机制不同,Web API 使用的是 HttpConfiguration

.NET Framework MVC项目漏洞审计

在审计之前还是先分析配置类。由于两个过滤器类没做什么配置,这里分析路由类。RouteConfig类,标准的路由映射,路由匹配规则采用URL模式,{controller}/{action}/{id}第一级路径是控制器名(xxxController),第二级路径是方法名(xxxController类下的方法)

实战中学习.net审计

控制器都在CreditOutSide.WebUI.Controllers下,比如AccountController类的DCLogin方法,对应的请求路径为/account/DCLogin

实战中学习.net审计

实战中学习.net审计

WebApiConfig,从配置文件中读取URL,通过分析代码这里调用了其他网站的接口(所谓的微服务)

实战中学习.net审计

除此以外网站还对一些路由进行鉴权,但是在反编译后的代码中没有找到,大概率是在web.config文件中做的配置。

既然知道了路由映射,直接查看CreditOutSide.WebUI.Controllers下的xxxController进行审计即可。

SQL注入

在xxxController下的GetLhjcPagedResult方法,该方法接受四个参数,3个为int类型无法注入,所以注入点在filtername

实战中学习.net审计

在方法GetLhjcPagedResult内部调用了GetLHJCPaged,GetLHJCPaged内部会发现存在很多分支,且sql语句拼接时又调用了别的方法。

实战中学习.net审计

小小经验:一步一步将sql语句提取,每走一步就记录sql语句拼接的,然后就得到一大段又臭又长的sql语句,将其放到navicat中,很容易就能构造出sql注入payload

实战中学习.net审计

实战中学习.net审计

插播:【.NET攻防社区优惠活动】

目前dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最活跃的技术知识库之一,超1000+成员一起互动学习。星球主题数量近600+,精华主题230+PDF文档和压缩包300+。从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的安全指南和最佳实践。

星球优惠活动,限时领取40元优惠券,数量不多,手快有!!!

实战中学习.net审计

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。

实战中学习.net审计

实战中学习.net审计

实战中学习.net审计

星球文化始终认为授人以鱼不如授人以渔!加入星球后可以跟星主和嘉宾们一对一提问交流,20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET  内网攻防实战、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。

实战中学习.net审计

我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。

原文始发于微信公众号(哈拉少安全小队):实战中学习.net审计

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月15日09:06:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实战中学习.net审计https://cn-sec.com/archives/3739994.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息