#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
- 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 theSystem.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 theIAuthorizationFilter
,IActionFilter
,IResultFilter
, orIExceptionFilter
interfaces.
- 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ùaAdd()
medthod. - Để khai báo/custom một Filter thì cần phải inherit một trong 4 interfaces:
IAuthorizationFilter
,IActionFilter
,IResultFilter
, hoặcIExceptionFilter.
#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.
- Giá trị
Order
vàFilterScope
càng nhỏ, mức độ ưu tiên càng cao. Order
có mức độ ưu tiên cao hơnFilterScope
. Khi giá trị Order bằng nhau thì mới xem xét đếnFilterScope
.
#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