Lab: Blind SQL injection with conditional responses
Last updated
Last updated
Phòng thí nghiệm này chứa lỗ hổng . Ứ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à không có thông báo lỗi nào được hiển thị. Nhưng ứng dụng sẽ bao gồm thông báo "Welcome back" trong trang nếu truy vấn trả về bất kỳ hàng nào.
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.
Xác nhận ứ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.
Xác nhận rằng tham số cookie theo dõi có dễ bị tấn công SQL hay không
Xác định thông báo "Welcome back" có được hiển thị hay không khi them vào giá trị TrackingID các giá trị luôn đúng luôn sai
' AND '1'='1
' AND '1'='2
Ứng dụng phản hồi khác nhau trong trường hợp đúng và trường hợp sai. Do đó, có thể xác nhận rằng tham số cookie theo dõi dễ bị tấn công SQL injection.
Xác nhận cơ sở dữ liệu chứa chứa một bảng khác có tên là users
' AND (SELECT table_name FROM information_schema.tables WHERE table_name = 'users') = 'users'--
Xác nhận tên người dùng administrator có tồn tại trong bảng users không
' AND (SELECT username FROM users WHERE username = 'administrator') = 'administrator'--
Liệt kê để tìm mật khẩu cho tài khoản administrator
Cần xác định độ dài
' AND (SELECT username FROM users WHERE username = 'administrator' AND LENGTH(password) > 1 ) = 'administrator'--
Xác định từng kí tự
' AND SUBSTRING((SELECT username FROM users WHERE username = 'administrator'), 1, 1) > 't
Ước lượng độ dài mật khẩu administrator
Độ dài nằm trong khoảng [2;29]
Xác định chính xác sử dụng Burp Intruder
Kích thước response thay đổi khi tới giá trị 20, có thể suy đoán không trả về thông báo "Welcome back" kể từ giá trị này, tức độ dài Password không lớn hơn 20 ký tự => Xác định Password có 20 ký tự.
Tìm các ký tự của mật khẩu administrator
Theo gợi ý, cho rằng mật khẩu chỉ chứa các ký tự chữ thường và số. Dựa vào đó xây dựng đoạn code Python để bruteforce mật khẩu