--- template: overrides/blog.html icon: material/plus-circle title: SQL injection - Time based description: > search: exclude: true hide: - feedback tags: - SQL Injection --- # __SQL injection - Time based__ :octicons-calendar-24: 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](https://www.root-me.org/en/Challenges/Web-Server/SQL-injection-Time-based) Link challenge này tại [:octicons-arrow-right-24: http://challenge01.root-me.org/web-serveur/ch40/][http://challenge01.root-me.org/web-serveur/ch40/] [http://challenge01.root-me.org/web-serveur/ch40/]: 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 :octicons-arrow-right-24: 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` ???+ question "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? ??? success "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 :smile_cat: :smile_cat: :smile_cat: 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