Overview¶
Estimated time to read: 6 minutes
April 28, 2023 ·
Nơi đây tổng hợp lỗ hỏng SQL injection đến từ phía Server (server side) trên rootme.
Định nghĩa¶
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 và thi hành các câu lệnh SQL bất hợp pháp.
SQL injection là kĩ thuật dựa vào lỗ hỏng của ứng dụng web (web application) chứ không phải dựa vào lỗ hỏng của web server hay hệ quản trị cơ sở dữ liệu.
Có rất nhiều loại SQL Injection (SQLi) nhưng đơn giản hóa ta sẽ có ba loại chính dưới đây:
- Định nghĩa
- Tautologies là loại SQLi dựa trên điều kiện luôn đúng.
- Mục đích
- Xác định các payload cần tiêm
- Bỏ qua xác thực
- Trích xuất dữ liệu
-
Mô tả
-
Chúng ta xem xét ví dụ về 1 câu lệnh truy vấn thông tin username và password như sau
-
với Username và Password là 2 biến được lấy từ khung nhập input từ người dùng.
-
Chuyện gì xảy ra nếu ta nhập giá trị của Username là
admin' OR 1=1--
và giá trị của Password là123
? -
Nếu ta nhập như trên, câu truy vấn sẽ thành
-
Và đây, password đã không còn quan trọng trong câu truy vấn này nữa. Đúng không nào?
- Ngoài ra còn nhiều ngữ cảnh tiêm khác nữa, bạn đọc có thể tham khảo thêm từ các challenge
-
- Định nghĩa
- PiggyBacked Query là loại tấn công dựa trên Batched SQL Statements1
- Mục đích
- Trích xuất dữ liệu
- Sửa đổi tập dữ liệu
- Thực hiện các lệnh từ xa
- Tạo cuộc tấn công từ chối dịch vụ
-
Mô tả
-
Chúng ta xem xét ví dụ về 1 câu lệnh truy vấn thông tin username và password như sau
-
với Username và Password là 2 biến được lấy từ khung nhập input từ người dùng.
-
Giả sử ta có thông tin user:
- Username: admin
- Password: admin
-
Giả sử trong cơ sở dữ liệu có bảng deuteri chứa dữ liệu quan trọng.
-
Chuyện gì xảy ra nếu ta nhập giá trị của Username là
admin
và giá trị của Password làadmin; DROP TABLE DEUTERI;
? -
Nếu ta nhập như trên, câu truy vấn sẽ thành
-
Với việc tiêm thêm câu truy vấn, ta đã thành công xóa bảng DEUTERI.
-
- Định nghĩa
- PiggyBacked Query là loại tấn công dựa trên Batched SQL Statements1
- Mục đích
- Bỏ qua xác thực
- Trích xuất dữ liệu
- Mô tả
- Well, đến với phần này, ta có vài bước để thực hiện truy vấn:
- Bước 1: Xác định lỗ hỏng
- Thêm dấu ' vào cuối tham số (nhập vào khung input hoặc thêm vào tham số trên URL). Nếu có lỗi → có lỗ hổng. VD: ?id=20'
- Bước 2: Xác định số cột của bảng hiện tại
- Thêm ORDER BY [số n tùy chọn] và tăng dần số cho đến khi hiện lỗi → Biết được số lượng cột trong bảng đang được truy vấn VD: ?id=20 ORDER BY 11 → có lỗi xảy ra → có 10 cột
- Bước 3: Xác định cột được hiển thị trên trình duyệt
- Dùng UNION SELECT 1,2,3,…, n và quan sát kết quả để nhận biết giá trị của cột nào sẽ được hiển thị. VD: ?id=20 UNION SELECT 1,2,3,…n
- Giả sử các bước khai thác trước xác định cột 4 được hiển thị. Ta đến với bước 4
- Bước 4: Lấy thông tin chung của CSDL
- Thay lần lượt các số ở vị trí cột được hiển thị bằng các hàm: •
user()
: trả về user name hiện tại của kết nối DB •version()
hay@@version
: trả về version của DB
- Thay lần lượt các số ở vị trí cột được hiển thị bằng các hàm: •
- Bước 5: Liệt kê danh sách table trong DB từ information_schema.tables bằng câu lệnh ?id=20 UNION SELECT 1, 2, 3, table_name, 5, 6, 7, 8, 9, 10 from information_schema.tables
- Bước 6: Chọn table quan tâm và khai thác bằng câu lệnh ?id=20 UNION SELECT 1, 2, 3, column_name, 5, 6, 7, 8, 9, 10 from information_schema.columns where table_name=users
- Bước 1: Xác định lỗ hỏng
- Well, đến với phần này, ta có vài bước để thực hiện truy vấn:
-
- Ta có thể tóm gọn các bước khai thác ở mục 3 thành bảng sau
Tóm gọn
Danh sách các challenge¶
Các bạn có thể tham khảo danh sách challenge trong bảng dưới đây