SQL injection - Time based¶
Estimated time to read: 4 minutes
May 03, 2023
Tài nguyên và link challenge¶
Tài nguyên của challenge này tại https://www.root-me.org/en/Challenges/Web-Server/SQL-injection-Time-based
Link challenge này tại http://challenge01.root-me.org/web-serveur/ch40/
Tổng quan¶
Trong challenge này, mục tiêu của ta là lấy được password admin.
Time-based SQL Injection là một kỹ thuật SQL Injection suy luận dựa trên việc gửi một truy vấn SQL đến cơ sở dữ liệu, buộc cơ sở dữ liệu phải đợi một khoảng thời gian xác định (tính bằng giây) trước khi phản hồi. Về định nghĩa thì hơi khó hiểu, tôi sẽ ví dụ như sau:
Ví dụ: Ta cần check password một tài khoản có username là admin bằng cách brute force
Ta biết password có n kí tự và đặt là S[n]
Ta sẽ gửi request lần lượt từ S[0] -> S[n-1], nếu so khớp S[0] trùng với S[0] trong password thì cho nó ngủ 5s với thời gian phản hồi như thế, ta có thể biết được kí tự S[0] là kí tự gì. Tương tự đến S[n-1].
Kịch bản tấn công¶
Bước 1: Kiểm tra website¶
Challenge này cung cấp cho ta 2 website: 1 cho việc login tài khoản, 1 cho việc xem danh sách tài khoản
Có thể thấy, sau một vài thao tác truy cập danh sách tài khoản thì đều yêu cầu login tài khoản mới được quyền xem
Bước 2: Khai thác website¶
Đầu tiên, ta dùng sqlmap để quét website và đặt thời gian cho CSDL phản hồi là 10s bằng lệnh sqlmap -u "http://challenge01.root-me.org/web-serveur/ch40/?action=member&member=1" --time-sec=10 --dbs
Chậm lại và suy nghĩ 1
Nếu không dùng --time-sec=10
, liệu còn cách nào có thể quét ra database public không?
Giải quyết chậm lại suy nghĩ
Tôi đã nhúng 1 hình ảnh thể hiện cách giải nhằm đâu đó trong website này, bạn đọc tìm thử nhé. Cách tìm giống như bài nào đó phía trên
Roài, ta tìm table trong database public thôi nào !!!!!
Dùng lệnh sqlmap -u "http://challenge01.root-me.org/web-serveur/ch40/?action=member&member=1" --time-sec=10 -D public --tables
Từ đây, ta thấy được table users, tiến hành lấy các cột ở table và cuối cùng dump dữ liệu, ta sẽ được flag
Flag
T!m3B@s3DSQL!