ASP.NET审计小技巧(二)之鉴权审计

xiao1star2026-04-22文章来源:SecHub网络安全社区


ASP.NET审计之鉴权审计

1.父类鉴权

这种是最常见的,就是在父类中写上鉴权方法,子类直接继承父类实现鉴权

例如如下代码其继承了page类,这个Page是我们系统自带的是没有鉴权功能的

20250628112148592.png

20250628112313077.png

我们看其他有鉴权的页面,例如如下AboutNewDi类是继承了BasePage

20250628112351770.png

可以看到这个类中的OnInit方法中设置了获取Session、token这些值,这一看就是有鉴权的

20250628112453482.png

2.web.config-Forms鉴权

这种鉴权方式一般是在web.config中用authentication 标签包裹使用的,同时指定模式为Forms

    <authentication mode="Forms">
      <forms loginUrl="~/About.aspx" defaultUrl="~/Default.aspx" timeout="30" />
    </authentication>
    <authorization>
      <allow users="*"/>
      <!--允许任何访问者访问-->
    </authorization>

20250627195626176.png

如上图所示我们指定了LolginUrlAbout.aspx页面,登录成功后就跳转到了Default.aspx页面,同时要注意<allow users="*"/>表示允许任何访问者访问,<deny users="?"/>禁止匿名用户访问

输入正确的账号密码

20250627195946000.png

成功来到default页面

20250627200037853.png

3.MVC框架鉴权

使用注解的形式在Contorller的方法中加上[Authorize][AllowAnonymous],来表示该路由是否进行鉴权操作,但要注意这个注解是可以是其他的命名

如下我们使用的是,net8创建的MVC框架,可以看到我们的路由是Program.cs页面中的

可以看到我们在代码中添加了如下代码来进行鉴权,当未登录时就直接重定向到/home/User路径下

app.UseAuthentication(); //鉴权操作

// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Home/User"; // 未登录时的重定向路径
        options.AccessDeniedPath = "/Home/Error"; // 无权限时的重定向路径
    });


20250628095431157.png

可以看到在我们的HomeController类中使用[Authorize]对整个类进行了鉴权操作,对部分方法使用AllowAnonymous允许匿名访问

20250628100405783.png

当我们未登录时直接来到登录页面

20250628100647989.png

当登录成功后成功跳转到index页面

20250628100802924.png

20250628100823612.png

总结

在审计的时候,可以先看看先看看该类的父类有没有鉴权代码如果没有再去web.config看看有没有相应的authentication 标签,但是要注意有时候我们代码审计的源码只有bin文件,而没有web.config文件的,然后再去看看是不是那种注解的鉴权方式