Bỏ qua mã hóa HTML

Trong bài viết trước, tôi đã mô tả cách phát hiện và khai thác lỗ hổng cơ bản cross site scripting (XSS). Lỗ hổng đã được chứng minh là không được bảo vệ bởi bất kỳ cơ chế nào. Bài viết này sẽ chứng minh việc khai thác cùng một lỗ hổng được bảo vệ bởi HTMLEncode() trái ngược với HTMLAttributeEncode() như được mô tả trong “Cách ngăn chặn Cross Site Scripting (XSS)“

Mã nguồn từ phần trình diễn trước trông như thế này

Bỏ qua mã hóa HTML

Our exploit is taking advantage of “<%= Post.Title %>” not being encoded before it is placed in the “href” attribute of the “E-mail” anchor tag. The exploit string simply injects a double quote to close out the “href” attribute string and now we can freely add additional elements to the HTML tag, such as an “onmouseover” event to fire a JavaScript payload. What happens if we wrap “<% Post.Title %> with Server.HtmlEncode(), the built-in non-security aware .Net HTML Encoder?

Bỏ qua mã hóa HTML

Sau khi sửa đổi một chút nội dung của bài đăng (đây là một lỗ hổng) và hiển thị nội dung đó cùng với mã được cập nhật, mã nguồn HTML trông như thế này

Bỏ qua mã hóa HTML

Nếu bạn nhìn vào dòng 3, bạn sẽ thấy chúng tôi vẫn có thể sửa đổi các thuộc tính HTML bằng nội dung được sửa đổi một chút. Chúng tôi đã sửa đổi những gì? . Vì vậy, sửa đổi là thay đổi nội dung trích dẫn kép của chúng tôi thành nội dung trích dẫn đơn và viola

Bỏ qua mã hóa HTML

Một mục thú vị ở đây là các dấu ngoặc kép thoát của chúng tôi được thấy trên dòng 3 của nguồn được sử dụng mà không có bất kỳ sự cố nào bởi chức năng cảnh báo JavaScript

Cách khắc phục thích hợp cho vấn đề này là sử dụng một bộ mã hóa thuộc tính cụ thể để chuyển tất cả các ký tự ngoài chữ và số sang định dạng &#[ASCII DECIMAL]; . g. !. Một phương thức HTMLEncode() có tính bảo mật cao hơn, chẳng hạn như Bộ mã hóa ESAPI OWASP hoặc bộ mã hóa Microsoft AntiXSS cũng sẽ thoát khỏi dấu nháy đơn hoặc dấu kiểm, điều này sẽ ngăn cuộc tấn công cụ thể này thoát ra khỏi ngữ cảnh thuộc tính HTML. Một lý do khác là tốt hơn nên sử dụng các thư viện được xây dựng để bảo mật thay vì các thư viện được xây dựng để thực thi một tiêu chuẩn, vì dấu tích đơn không bị cấm trong đặc tả XML

Giải thích đầy đủ về những điều phức tạp liên quan đến việc bảo vệ ứng dụng của bạn khỏi các cuộc tấn công tập lệnh chéo trang được giải thích tại đây

Brian Cardinale

Người sáng lập tại WIFI hướng dương

Nhà phát triển phần mềm toàn diện và chuyên nghiệp về bảo mật thông tin với hơn 10 năm kinh nghiệm trong các giải pháp phần mềm doanh nghiệp

Biểu hiện phổ biến nhất của việc khử trùng dữ liệu xảy ra khi ứng dụng mã hóa HTML một số ký tự chính cần thiết để thực hiện một cuộc tấn công (vì vậy < trở thành < và > trở thành >). Trong các trường hợp khác, ứng dụng có thể xóa một số ký tự hoặc biểu thức nhất định nhằm xóa nội dung độc hại mà bạn nhập vào

Ví dụ sử dụng phiên bản "Cầu vồng tiêm mã ma thuật" được lấy từ Dự án ứng dụng web bị hỏng của OWASP. Tìm hiểu cách tải xuống, cài đặt và sử dụng dự án này

Bỏ qua mã hóa HTML

Khi bạn gặp phải sự phòng thủ này, bước đầu tiên của bạn là xác định chính xác ký tự và biểu thức nào đang được làm sạch và liệu vẫn có thể thực hiện một cuộc tấn công mà không cần trực tiếp sử dụng các ký tự hoặc biểu thức này hay không

Ví dụ: nếu dữ liệu của bạn được chèn trực tiếp vào tập lệnh hiện có, bạn có thể không cần sử dụng bất kỳ ký tự thẻ HTML nào

Hoặc, nếu ứng dụng đang xóa các thẻ tập lệnh khỏi đầu vào của bạn, bạn có thể sử dụng một thẻ khác với trình xử lý sự kiện phù hợp

Bỏ qua mã hóa HTML

Ngoài ra, bạn nên xem xét. Bằng cách sửa đổi đầu vào của bạn theo nhiều cách khác nhau, bạn có thể nghĩ ra một cuộc tấn công không chứa bất kỳ ký tự hoặc biểu thức nào mà bộ lọc đang khử trùng và do đó bỏ qua nó thành công

 

Bỏ qua mã hóa HTML

Nếu dường như không thể thực hiện một cuộc tấn công mà không sử dụng các ký tự đang được làm sạch, bạn cần kiểm tra hiệu quả của bộ lọc làm sạch để xác định xem có tồn tại bỏ qua nào không

Một số API thao tác chuỗi chứa các phương thức chỉ thay thế phiên bản đầu tiên của một biểu thức phù hợp và đôi khi những API này dễ bị nhầm lẫn với các phương thức thay thế tất cả các phiên bản

Vì vậy, nếu

 

Bỏ qua mã hóa HTML

Trong tình huống này, bạn cũng nên kiểm tra xem việc khử trùng có được thực hiện theo cách đệ quy hay không

ipt>cảnh báo(1)

Trong ví dụ này, đầu vào không bị loại bỏ theo cách đệ quy và tải trọng thực thi thành công tập lệnh

Furthermore if the filter performs several sanitizing steps on your input, you should check whether the order or interplay between these can be exploited. For example, if the filter strips

Bỏ qua mã hóa HTML

Khi bạn đưa vào một chuỗi được trích dẫn bên trong một tập lệnh hiện có, thông thường bạn sẽ thấy rằng ứng dụng sẽ làm sạch đầu vào của bạn bằng cách đặt ký tự dấu gạch chéo ngược trước bất kỳ ký tự dấu ngoặc kép nào bạn gửi, ngăn bạn kết thúc chuỗi và đưa vào tập lệnh tùy ý

Trong tình huống này, bạn phải luôn xác minh xem bản thân ký tự dấu gạch chéo ngược có bị thoát hay không. Nếu không, có thể bỏ qua bộ lọc đơn giản bằng cách gửi dấu gạch chéo ngược của riêng bạn tại điểm mà ứng dụng chèn dấu gạch chéo ngược. Dấu gạch chéo ngược đầu tiên thoát khỏi dấu gạch chéo thứ hai, do đó ký tự tiếp theo vẫn không thoát

Thoát HTML cho XSS là gì?

Thoát khỏi XSS . Khi thoát, bạn đang nói với trình duyệt web một cách hiệu quả rằng dữ liệu bạn đang gửi phải được coi là dữ liệu và không được diễn giải theo bất kỳ cách nào khác. the primary means to avoid cross-site scripting attacks. When escaping, you are effectively telling the web browser that the data you are sending should be treated as data and should not be interpreted in any other way.

Chrome có ngăn XSS không?

Nó không tìm cách giảm thiểu các cuộc tấn công XSS được lưu trữ hoặc dựa trên DOM . Nếu phát hiện thấy phản ánh có thể xảy ra, Chrome có thể bỏ qua (trung lập) tập lệnh cụ thể hoặc Chrome có thể chặn tải trang bằng trang lỗi ERR_BLOCKED_BY_XSS_AUDITOR.

XSS có thể bị khai thác như thế nào?

Đánh cắp cookie là một cách truyền thống để khai thác XSS. Hầu hết các ứng dụng web sử dụng cookie để xử lý phiên. Bạn có thể khai thác lỗ hổng cross-site scripting để gửi cookie của nạn nhân đến miền của riêng bạn, sau đó đưa cookie vào trình duyệt theo cách thủ công và mạo danh nạn nhân.

Cheat sheet XSS là gì?

Bảng gian lận tập lệnh chéo trang (XSS) này chứa nhiều vectơ có thể giúp bạn bỏ qua WAF và bộ lọc . Bạn có thể chọn các vectơ theo sự kiện, thẻ hoặc trình duyệt và bằng chứng về khái niệm được bao gồm cho mọi vectơ. Bạn có thể tải xuống phiên bản PDF của cheat sheet XSS.