#1: Giới thiệu

This blog post is entirely referenced from https://yzddmr6.com/posts/asp-net-memory-filter/. Thank you!

 

Trước đây, trên blog của VCI đã có bài blog về memory webshell trên Tomcat Servlet, nên hôm nay mình sẽ tiếp nối series memory webshell, target mình chọn là ASP.NET MVC.

 

Về bản chất của memory webshell chính là chèn một đoạn malicious code vào trong một vùng cụ thể nào đó, ví dụ: filters, servlet, … để được thực thi mỗi khi nhận được request từ người dùng.

 

#2: ASP.NET MVC Project Structure

Trong một ASP.NET MVC Web application project, các thành phần MVC được hiển thị/chia tách rõ ràng như hình dưới.

Khi bạn tạo một ASP.NET MVC project theo mặc định sẽ bao gồm các folder: App_Data, App_Start, Content, … tham khảo chi tiết thêm tại đây.

 

Ngoài các thư mục được liệt kê ở trên còn có file Global.asax, chứa các default global route, filter, … và sử dụng file Web.config để cấu hình cho ứng dụng. Do đó file Global.asax được thực thi đầu tiên khi một ASP.NET MVC project được khởi chạy.

 

Code C# của Global.asax là file Global.asax.cs

Như hình trên thì Filter sẽ có mức ưu tiên cao hơn Route, do đó mình cũng thường dùng loại Filter – memory webshell nhiều hơn là Route – memory webshell.

 

 

#3: Filter – Memory Webshell

File FilterConfig.cs

filters thuộc class GlobalFilterCollection

Ở hình ảnh trên thấy rằng chúng ta có thể custom một filter và được thêm vào ở đây.

 

 

#3.1: Filter Types

Filter có thể được áp dụng cho một controller cụ thể hoặc toàn bộ controller.
Trong ASP.NET MVC hỗ trợ 4 loại filters (tham khảo tại đây):
  • Authorization filters – Implements the IAuthorizationFilter attribute.
  • Action filters – Implements the IActionFilter attribute.
  • Result filters – Implements the IResultFilter attribute.
  • Exception filters – Implements the IExceptionFilter attribute.
Filters are executed in the order listed above. For example, authorization filters are always executed before action filters and exception filters are always executed after every other type of filter.
Authorization filters are used to implement authentication and authorization for controller actions. For example, the Authorize filter is an example of an Authorization filter.
Action filters contain logic that is executed before and after a controller action executes. You can use an action filter, for instance, to modify the view data that a controller action returns.
Result filters contain logic that is executed before and after a view result is executed. For example, you might want to modify a view result right before the view is rendered to the browser.
Exception filters are the last type of filter to run. You can use an exception filter to handle errors raised by either your controller actions or controller action results. You also can use exception filters to log errors.
Each different type of filter is executed in a particular order. If you want to control the order in which filters of the same type are executed then you can set a filter’s Order property.
The base class for all action filters is the System.Web.Mvc.FilterAttribute class. If you want to implement a particular type of filter, then you need to create a class that inherits from the base Filter class and implements one or more of the IAuthorizationFilter, IActionFilter, IResultFilter, or IExceptionFilter interfaces.
Tóm lại có 3 thứ cần phải lưu ý:
  • Danh sách Filter Types (4 loại filters được list ở trên) có độ ưu tiên giảm dần theo thứ tự từ 1 đến 4.
  • Ngoài ra, mức độ ưu tiên của filter có thể set thông qua tham số order cùa Add() medthod.
  • Để khai báo/custom một Filter thì cần phải inherit một trong 4 interfaces: IAuthorizationFilter, IActionFilter, IResultFilter, hoặc IExceptionFilter.

 

#3.2: Filter Priority

Trong class GlobalFilterCollection có hai method được khai báo, một trong số đó có thêm argument order và đều gọi đến method AddInternal.

Trong System.Web.Mvc.Filter, mặc định order là -1.
Như vậy để có độ ưu tiên cao hơn chúng ta chỉ cần set order < -1, ngoài ra để xác định độ ưu tiên còn có FilterScope.
Tóm lại:
  • Giá trị Order FilterScope càng nhỏ, mức độ ưu tiên càng cao.
  • Order có mức độ ưu tiên cao hơn FilterScope. Khi giá trị Order bằng nhau thì mới xem xét đến FilterScope.

 

#3.3: Tạo Memory Webshell

Như đã nói ở trên, IAuthorizationFilter sẽ được thực thi trước nên mình sẽ chọn để implement.

Truy cập filter_memshell.aspx để inject memory webshell.

 

 

 

#4: Tham khảo

  • https://yzddmr6.com/posts/asp-net-memory-filter/
  • https://learn.microsoft.com/en-us/previous-versions/aspnet/dd410120(v=vs.100)
  • https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs
343 lượt xem