Rate this post

Việc SQL injection phía client xảy ra khi ứng dụng triển khai công nghệ Cơ sở dữ liệu Web SQL và không xác thực đúng cách đầu vào cũng như tham số hóa các biến truy vấn của nó. Cơ sở dữ liệu này được thao tác bằng cách sử dụng các lệnh gọi API JavaScript (JS), chẳng hạn như openDatabase (), tạo hoặc mở cơ sở dữ liệu hiện có.

Các bài viết liên quan:

Mục tiêu kiểm tra

Kịch bản kiểm tra sau đây sẽ xác nhận rằng việc xác nhận đầu vào thích hợp được tiến hành. Nếu việc triển khai dễ bị tấn công, kẻ tấn công có thể đọc, sửa đổi hoặc xóa thông tin được lưu trữ trong cơ sở dữ liệu.

Làm thế nào để kiểm tra

Xác định việc sử dụng Web SQL DB

Nếu ứng dụng được thử nghiệm triển khai Web SQL DB, ba lệnh gọi sau sẽ được sử dụng trong lõi phía máy khách:

  • openDatabase()
  • transaction()
  • executeSQL()

Đoạn mã dưới đây cho thấy một ví dụ về việc triển khai các API:

var db = openDatabase(shortName, version, displayName, maxSize);

db.transaction(function(transaction) {
    transaction.executeSql('INSERT INTO LOGS (time, id, log) VALUES (?, ?, ?)', [dateTime, id, log]);
});

Cơ sở dữ liệu web SQL injection 

Sau khi xác nhận việc sử dụng executeSQL (), kẻ tấn công đã sẵn sàng để kiểm tra và xác nhận tính bảo mật của việc triển khai nó.

Việc triển khai Web SQL DB dựa trên cú pháp của SQLite.

Bypassing Conditions

Ví dụ sau cho thấy cách này có thể được khai thác ở phía máy khách:

// URL example: https://example.com/user#15
var userId = document.location.hash.substring(1,); // Grabs the ID without the hash -> 15

db.transaction(function(transaction){
    transaction.executeSQL('SELECT * FROM users WHERE user = ' + userId);
});

Để trả về thông tin cho tất cả người dùng, thay vì chỉ người dùng tương ứng với kẻ tấn công, có thể sử dụng thông tin sau: 15 OR 1=1 trong phân đoạn URL.

Đối với các tải trọng SQL Injection bổ sung, hãy chuyển đến kịch bản Thử nghiệm cho SQL Injection.

Biện pháp khắc phục hậu quả

Thực hiện theo cách khắc phục tương tự từ Phần khắc phục sự cố của Thử nghiệm cho SQL Injection.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now