Tìm hiểu về SQL Injection (Phần 01)

Ngày đăng: 28/12/2020
Cập nhật: 15/03/2023

SQL Injection là một kỹ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng của việc kiểm tra dữ liệu đầu vào trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu trả về để Inject (tiêm vào) và thi hành các câu lệnh SQL bất hợp pháp.

SQL Injection còn có thể cho phép những kẻ tấn công thực hiện các thao tác delete, insert, update,… trên cơ sỡ dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy. Lỗi này thường xảy ra trên các ứng dụng web có dữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase…

I. Mô hình hoạt động của một Website

Khi muốn xem một trang web nào đó, người dùng từ máy tính của mình đánh một địa chỉ trang web trên thanh địa chỉ của trình duyệt. Khi đó sẽ xảy ra quá trình như sau:

  1. Khi người dùng ấn Enter thì trình duyệt sẽ chuyển yêu cầu này đến WebServer ( WebServer hay còn gọi là Host là nơi chứa Website của một doanh nghiệp, một tổ chức hay cá nhân nào đó ).
  2. WebServer sau khi nhận được yêu cầu từ người dùng sẽ sử dụng các chương trình như PHP, ASP… lấy dữ liệu trong database (cơ sở dữ liệu).
  3. Các chương trình này sau đó sẽ trả dữ liệu về lại cho WebServer xử lý.
  4. WebServer sau đó sẽ hiển thị dữ liệu này lên trang web đã được thiết kế sẵn với html và css.
  5. Cuối cùng trang web này được trả về cho người dùng xem.

II. Tấn công SQL Injection

– Từ dưới máy tính Hacker sẽ gửi một yêu cầu đến WebServer, yêu cầu này được Hacker inject (tiêm) vào các câu lệnh “không an toàn”, các câu lệnh này chủ yếu nhắm đến việc lấy các dữ liệu quan trọng như thông tin tài khoản, thông tin đơn hàng, tài khoản thanh toán…

– Khi yêu cầu này được gửi tới WebServer, thông qua các câu lệnh đã được inject, các chương trình như PHP, ASP sẽ lấy các dữ liệu mà Hacker cần trong database .

– Dữ liệu sau đó được trả về cho WebServer xử lý. Và với các câu lệnh của mình, Hacker làm cho các dữ liệu đó lần lượt được hiển thị ra màn hình.

– Khi đã có dữ liệu, Hacker có thể đăng nhập với quyền Admin và kiểm soát trang web.

III. Câu lệnh UNION và UNION ALL

Đây là câu lệnh được Hacker sử dụng để tiêm vào các request, từ đó lấy các dữ liệu quan trọng trong database.

UNION và UNION ALL đều dùng để hợp hai tập bản ghi cùng cấu trúc, nhưng giữa hai mệnh đề có một khác biệt khá tinh tế: UNION loại bỏ các bản ghi trùng lặp trước khi trả lại kết quả, còn UNION ALL giữ lại tất cả các bản ghi từ hai tập ban đầu.

Để sử dụng được lệnh UNION, cần thỏa mãn các điều kiện sau:

  1. Số cột của mỗi câu truy vấn SELECT phải bằng nhau.
  2. Kiểu dữ liệu của mỗi cột trong câu SELECT này phải giống với kiểu dữ liệu của cột tương ứng trong câu SELECT kia hay tối thiểu cũng có thể chuyển đổi được