Trong loại tấn công này, tin tặc sẽ lấy dữ liệu từ form được gửi lên từ người dùng và thay đổi giá trị sau đó gửi dữ liệu đã được sửa lên server.
Ví dụ kịch bản khi chúng ta kiểm tra form nhưng trang báo lỗi lại tiết lộ quá nhiều thông tin từ server thông qua message lỗi.
Các bạn hãy xem ví dụ:
Ví dụ:-
Tôi sẽ tạo một form Employee lấy các thông tin cơ bản của Employee:
Hình 1. Form hiển thị màn hình thêm mới nhân viên.
EmployeeDetailModel View.
Hình 2. EmployeeDetail Model.
Kiểm tra bằng các annotation đã đủ để an toàn? Không chúng không đủ để bảo mật trang của bạn. Tôi sẽ show cho bạn một demo lớn để thấy rằng tại sao nó lại có thể dễ dàng vượt qua.
Hình dưới đây hiển thị trường địa chỉ đang được validate chỉ 50 ký tự:
Hình 3 3. Sau khi thêm các kiểm tra form vào Model bạn đang kiểm tra form bạn sẽ thấy trường Address chỉ cho phép 50 ký tự và nó không cho phép thêm ký tự thứ 51. Nó sẽ hiển thị lỗi.
Chặn Add Employee View
Giờ hãy chặn form này và đẩy dữ liệu lên server. Tôi đang sử dụng 1 tool gọi là burp suite dùng để bắt request đẩy lên server. Hình dưới đây chụp tôi có thể bắt request rất dễ dàng:
Hình 4. Chặn form thêm mới nhân viên sử dụng burp suite bạn có thể xem các thông tin mà người dùng đẩy lên server.
Trong hình dưới đây request tôi đã bắt request gửi lên server. Bạn có thể thấy tôi có thể thay đổi trường địa chỉ lên hơn 50 ký tự và gửi lên server.
Chặn trường Address từ form thêm mới nhân viên
Hình 5. Sửa trường Address sau đó gửi lên server.
Sau đó hệ thống của chúng ta sẽ hiển thị lỗi từ server vì dữ liệu vượt quá
Debugging form
Sau khi gửi hơn 40 ký tự vào trường địa chỉ đến server sẽ bắn ra exception. Bởi vì database chỉ cho phép 50 ký tự ở trường này nếu nhiều hơn thì không được.
Hình 6. Khi gửi dữ liệu dài hơn 50 ký tự lên server
Hình 7. Vì thế gây lỗi. Cái này nhiều bạn bị nhớ xem view detail nhé.
Vấn đề ở chỗ hiển thị lỗi cho người dùng xem chi tiết
Exception sẽ xuất hiện trực tiếp cho kẻ tấn công và thông tin bị lộ ra khá nhiều về cách code hay về thông tin của server. Sử dụng các thông tin này chúng có thể kết hợp để tấn công hệ thống của chúng ta.
Hình 8 :- Hiển thị lỗi trực tiếp cho người dùng
Giải pháp: -
Giải pháp cho vấn đề này chúng ta cần cài đặt trang error page không cho phép hiển thị các lỗi dạng kỹ thuật và hiển thị lỗi thân thiện hơn.
Chúng ta có 2 cách tiếp cận cho vấn đề này :-
- Tạo một Attribute để xử lý lỗi.
- Cài đặt custom error page trong file Web.config
Giải pháp 1:-
Tạo một attribute HandleErrorAttribute hoặc sử dụng IExceptionFilterFilter
Hiển thị ví dụ HandleErrorAttribute
using System;
using System.Web.Mvc;
namespace MvcSecurity.Filters
{
public class CustomErrorHandler : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
Exception e = filterContext.Exception;
filterContext.ExceptionHandled = true;
var result = new ViewResult()
{
ViewName = "Error"
};
result.ViewBag.Error = "Error Occur While Processing Your Request Please Check After Some Time";
filterContext.Result = result;
}
}
}
Hide Copy Code
Sau khi tạo một custom error attribute chúng ta cần áp dụng nó vào toàn bộ ứng dụng. Để làm điều này chúng ta cần gọi nó trong FilterConfig class của thư mục App_Start
Hide Copy Code
using MvcSecurity.Filters;
using System.Web;
using System.Web.Mvc;
namespace MvcSecurity
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomErrorHandler());
}
}
}
Khi lỗi xuất hiện thì CustomErrorHandler sẽ được gọi và redirect đến trang Error. Và bất cứ thông tin lỗi nào bạn muốn truyền sang nó đều được thông qua ViewBag.
Html Error Page code
Hide Copy Code
@{
Layout = null;
}
<!DOCTYPEhtml>
<html>
<head>
<metaname="viewport"content="width=device-width"/>
<title>Error</title>
</head>
<body>
@ViewBag.Error
Error Page View
Hình 9. Hiển thị lỗi custom.
Giải pháp 2:-
- Cài đặt custom error page trong Web.config
- Nếu bạn không muốn viết một attribute thì bạn có thể cài đặt nó trong webconfig. Trước khi làm ban chỉ cần tạo một trang error đơn giản bằng HTML hiển thị bất cứ thông báo gì.
Trong Web.config thẻ system.web chúng ta thêm thẻ CustomErors.
Hide Copy Code
Hình 10. Cài đặt custom error page trong webconfig.
Html Error Page View
Fig 11. Hiển thị lỗi custom với bất cứ lỗi nào trong hệ thống.
Tất nhiên cái này hữu ích cho môi trường production còn môi trường dev thì chúng ta có thể Off nó đi ở webconfig.
Trích nguồn từ: (codeproject.com)