0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Tấn Công Ô Nhiễm Prototype Phía Server: Phân Tích, Khó Khăn và Phương Pháp Phát Hiện

Đăng vào 1 tháng trước

• 3 phút đọc

IV. Phân Tích và Khai Thác Kỹ Thuật Tấn Công Ô Nhiễm Prototype Phía Server

1. Sự Khác Biệt Giữa Ô Nhiễm Prototype Phía Server và Phía Client

Ô nhiễm Prototype phía server là một dạng lỗ hổng nghiêm trọng xảy ra ngay tại máy chủ, khác với các lỗ hổng phía client. Mặc mặc dù JavaScript thường được coi là ngôn ngữ lập trình cho front end, nó đã trở thành một công cụ mạnh mẽ cho việc xây dựng backend và API. Độc giả có thể tham khảo cuốn sách JavaScript from Frontend to Backend để hiểu rõ hơn về sự chuyển mình này.

2. Những Khó Khăn Trong Việc Kiểm Tra và Khai Thác Ô Nhiễm Prototype

Khi tiến hành kiểm tra ô nhiễm Prototype trên máy chủ, chúng ta sẽ gặp phải một số thách thức đáng kể:

  • Thiếu mã nguồn: Trái ngược với phía client, việc kiểm tra ô nhiễm phía server giống như kiểm thử "blackbox" bởi vì không có mã nguồn có thể xem xét.
  • Dấu hiệu không rõ ràng: Ô nhiễm phía server thường không rõ ràng vì các giá trị thuộc tính không hiển thị trong giao diện mà chỉ có thể được tìm kiếm thông qua phản hồi từ server.
  • Ảnh hưởng đến hệ thống: Việc thay đổi thuộc tính trong môi trường server không đúng có thể làm hỏng luồng hoạt động của chương trình.
  • Khó khôi phục dữ liệu: Sau khi ô nhiễm, việc không biết giá trị ban đầu của thuộc tính gây khó khăn cho việc khôi phục lại giá trị đó.

Chúng ta sẽ cần một cách tiếp cận cẩn thận để vừa kiểm tra ô nhiễm, vừa đảm bảo hệ thống vẫn hoạt động hiệu quả.

3. Phát Hiện Ô Nhiễm Khi Dữ Liệu Xuất Hiện Trong Phản Hồi

Nhiều lập trình viên đã quen thuộc với vòng lặp for...in trong JavaScript. Vòng lặp này không chỉ liệt kê các thuộc tính của đối tượng mà còn cả các thuộc tính kế thừa từ prototype. Điều này có thể làm lộ lỗ hổng khi kiểm tra thuộc tính trong một đối tượng.

Copy
const testObject = {'a': 1, 'b': 2};
for (propertyKey in testObject) {
    console.log(propertyKey);
}
// Kết quả: a b

Việc thêm thuộc tính vào Object.prototype có thể ảnh hưởng đến chương trình:

Copy
const testObject = {'a': 1, 'b': 2};
Object.prototype.test = '3';
for (propertyKey in testObject) {
    console.log(propertyKey);
}
// Kết quả: a b test

4. Một Số Kỹ Thuật Phát Hiện Lỗ Hổng Ô Nhiễm

4.1. Khám Phá Qua Thuộc Tính parameterLimit

Trong Express, thuộc tính parameterLimit giúp giới hạn số lượng tham số mà server có thể xử lý trong request. Nếu khả năng tấn công xảy ra, việc điều chỉnh giá trị này có thể cho thấy lỗ hổng.

4.2. Sử Dụng Thuộc Tính ignoreQueryPrefix

Khi thiết lập thuộc tính này thành true, hệ thống có khả năng phân tích cú pháp tham số dạng ??test=, điều này có thể được sử dụng để kiểm tra tính bảo mật của ứng dụng.

4.3. Khám Phá Qua allowDots

Tương tự như ignoreQueryPrefix, thuộc tính này cho phép sử dụng dấu chấm trong tham số, làm tăng khả năng lợi dụng các lỗ hổng.

Tài Liệu Tham Khảo


©️ Tác giả: Lê Ngọc Hoa từ Viblo.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào