ASP.NET审计小技巧(一)

xiao1star2026-02-28文章来源:SecHub网络安全社区


ASP.NET 审计(一)

初识.NET

.NET到底是个什么东西呢,ASP.NET是一个网站开发的技术,是.NET框架中的一个应用模型,用于生成基于Web的应用程序的内容丰富的编程框架。使用ASP.NET开发Web应用程序并维持其运行,比其他开发语言更加简单,编译成功之后其实就是一些.dll文件

.NET的特点

  1. .NET网站一般都是搭配的是SqlServer,使用C#语言写的
  2. .NET都是在Windows系统下写的
  3. .NET一般使用的IIS中间件

基础知识

目录结构

  • Global.asax:用于处理应用程序级别的事件,例如应用程启动(Application_Start)
  • Web.config:用于ASP.NET应用程序的主要配置文件,用于定义应用程序的配置文件,类比于java中的application.yml文件
  • bin文件放置了编译好的DLL文件,是后端服务接口代码的存放位置例如.java文件编译完之后为.class文件,其一般放置在classs文件中,而我们的.NET文件一般为.cs其编译好后为.dll文件,这些文件是放在bin目录下

工具下载

vs studio 2017:https://link.zhihu.com/?target=https%3A//aka.ms/vs/15/release/vs_community.exe)

sqlserver:SQL Server 下载 | Microsoft

SSMS:https://learn.microsoft.com/zh-cn/ssms/install/install?redirectedfrom=MSDN

dnspy:Release v6.1.8 · dnSpy/dnSpy · GitHub

如上是安装地址、安装教程请自行网上搜索

非框架的asp.net项目

什么是非框架呢

非框架其实就不是按照MVC框架来写的,我们可以根据项目结构来直接访问某个页面,例如一个aaa.html在xxx/xxx的目录下,那么我们直接访问http://IP/xxx/xxx/aaa.html即可,这就是非框架的直接体现


文件->新建->项目

20250626193533323.png

20250626193720371.png

选择Web窗体

20250626193835843.png

成功创建了一个非框架的项目,可以清晰的看到Gobal.asax以及Web.config文件

20250626194208637.png

直接运行得到如下页面

20250626194416208.png

我们访问/about页面也就对应了我们项目中的about.aspx文件的内容,这种直接访问的方式就是非框架

20250626194750770.png

ok现在知道了相关的前端文件,根据前端代码来找到后端代码呢,如下图所示

CodeBehind="About.aspx.cs" Inherits="WebApplication3.About"

这个指出了我们的后端代码为About.aspx.cs,在WebApplication3

20250626195304551.png

也就是这里

20250626195535528.png

也就是这个代码里面但是目前这个类中的方法没有任何东西,我们可以添加一些代码测试一下

20250626195559868.png

修改代码如下,当我们访问about页面的时候,在文本框中输入相关信息接着就会传递给.cs中ButtonSubmit_Click方法然后再将结果返回,这就再一次证明了about.aspx的后端为About.aspx.cs

.cs文件

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication3 { public partial class About : Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { LabelTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } } protected void ButtonSubmit_Click(object sender, EventArgs e) { // 显示用户反馈 string feedback = TextBoxFeedback.Text; LabelTime.Text = "Thank you for your feedback: " + feedback; } } }

.aspx文件

<%@ Page Title="About" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="WebApplication3.About" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%: Title %>.</h2>
    <h3>Your application description page.</h3>
    <p>Use this area to provide additional information.</p>

    <div>
        <label for="feedback">Your Feedback:</label>
        <asp:TextBox ID="TextBoxFeedback" runat="server"></asp:TextBox>
        <asp:Button ID="ButtonSubmit" runat="server" Text="Submit" OnClick="ButtonSubmit_Click" />
    </div>
    <div>
        <h3>Current Date and Time</h3>
        <p>Current Time: <asp:Label ID="LabelTime" runat="server"></asp:Label></p>
    </div>
</asp:Content>

20250626201309605.png

框架的asp.net项目

和前面的一样,只是到这一步了选择MVC

20250626203309170.png

我们可以看到目录结构里面有清晰的Controller```Models``Views这种层次结构

20250626203405209.png

在视图层View中可以看到有前端的页面,但是我们还可以按照之前那样去访问吗,我们可以试试

20250626203918585.png

可以看到直接输入/about直接是404

20250626204003814.png

App_Date下的RoutConfig.cs中定义了我们的url为

http://ip/{controller}/{action}/{id}

20250626204146161.png

20250626204335537.png

按照这样的话,我们要访问about页面就是http://ip/Home/About,可以看到访问成功

20250626204509908.png

dnspy的工具使用

在代码审计中我们获得到的源码一般情况下都是编译好的.dll文件

可以将我们还有.dll的bin文件全部拖到程序集资源管理器中

20250626210520310.png

20250626210413019.png

这个是一个框架的项目,我们可以直接全局搜索RegisterRoutes来查看其路由的设置

20250626210717579.png

双击进入就可以看到路由的设置了

20250626210803139.png

ASP.NET Core 生命周期方法

在 ASP.NET Core MVC 和 Razor Pages 中,以下是一些关键的生命周期方法:

MVC 控制器

  • OnActionExecuting:在动作方法执行前触发。
  • OnActionExecuted:在动作方法执行后触发。
  • OnResultExecuting:在结果执行前触发。
  • OnResultExecuted:在结果执行后触发。

Razor Pages

  • OnGet:在页面加载时触发,用于获取数据。
  • OnPost:在表单提交时触发,用于处理 POST 请求。
  • OnPage:在页面生命周期的开始时触发,用于初始化数据或设置页面状态。
  • RenderBody:用于指定页面主体内容

ASP.NET Web Forms

OnInit:在 ASP.NET Web Forms 中,OnInit 事件在页面加载时触发,但它是在 Page_Load 事件之前发生的。OnInit 通常用于初始化那些不需要在 Page_Load 中处理的控件属性

OnLoad 是 ASP.NET Web Forms 页面生命周期中的一个事件,OnLoad 事件在页面加载到服务器时触发,这发生在页面生命周期的开始阶段,通常用于初始化数据或设置页面的初始状态。