.NET 异常过滤器实现虚拟WebShell
2023-6-20 08:9:4 Author: 系统安全运维(查看原文) 阅读量:11 收藏

这几天稍微研究了下.NET MVC的全局异常处理以及捕获,相比.NET Web Form,.NET MVC的处理方式有所不同,以往是通过注册Global.asax文件中的Application_Error事件进行全局异常捕获,现在MVC可以使用强大的过滤器进行自定义错误的处理。本文作为学习笔记,将.NET MVC中已知的几种全局异常捕获及处理的思路进行整理和对比分析。

1.1 基本原理

.NET MVC为异常处理提供了一个HandleErrorAttribute特性,该特性主要捕获及处理由操作方法引发的异常,一般新建的项目都是默认全局注册,通过GlobalFilter全局过滤器注册了此特性,所以整个.NET MVC网站程序中所引发的异常默认都会被HandleError捕获到!打开项目中的Global.asax文件,可以看到默认调用了FilterConfig类对HandleError特性进行全局注册

using System.Web;using System.Web.Mvc;
namespace Test{ public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } }}

1.2 HandleErrorAttribute

异常过滤器用来处理操作或结果执行期间可能抛出的异常。参与异常处理的操作过滤器需要实现IExceptionFilter接口。.NET MVC 框架只提供了一个异常过滤器:[HandleError],说到IExceptionFilter接口,就要提到上面所介绍的HandleError特性,可以从源码中看到HandleErrorAttribute就是实现了IExceptionFilter接口和FilterAttribute特性,但是HandleErrorAttribute作为默认提供的异常处理特性,有很多限制和不灵活的地方,比如不处理404,需要开启自定义错误,只能使用视图界面等。因此我们可以通过继承IExceptionFilter这个异常过滤接口,扩展和编写我们自己所需的处理流程。继承IExceptionFilter接口,需要实现void OnException(ExceptionContext filterContext)方法,通过方法中的ExceptionContext类参数,我们可以极为灵活的编写各种异常处理流程

笔者将改写OnException方法,方法内获取外部传入的base64数据,得到request对象后解码,另外为了具备命令执行后回显,使用StandardOutput.ReadToEnd读取命令执行后的所有返回数据,代码片段如下

效果实现如下 请求/Home/Error?content=tasklist正常触发,成功结果如下图

.NET MVC下还有很多这样的过滤器可以被用来实现虚拟Webshell,如果对这些技巧感兴趣的话可以多关注我们的博客、公众号dotNet安全矩阵以及星球,下一篇将继续分享 .NET相关的安全知识,请大伙继续关注。另外文章涉及的PDF和Demo以及工具已打包发布在星球,欢迎对.NET安全关注和关心的同学加入我们,在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事。

如有侵权,请联系删除

好文推荐

红队打点评估工具推荐
干货|红队项目日常渗透笔记
实战|后台getshell+提权一把梭
一款漏洞查找器(挖漏洞的有力工具)
神兵利器 | 附下载 · 红队信息搜集扫描打点利器
神兵利器 | 分享 直接上手就用的内存马(附下载)
推荐一款自动向hackerone发送漏洞报告的扫描器
欢迎关注 系统安全运维

文章来源: http://mp.weixin.qq.com/s?__biz=Mzk0NjE0NDc5OQ==&mid=2247520757&idx=2&sn=6ea0ed07a4aa355b6f7e291ae2ebbd5c&chksm=c3084285f47fcb93fdc323651e6432939693b26d09f77d29cdc4df2187227d6effb01058900e#rd
如有侵权请联系:admin#unsafe.sh