SQL injection - String¶
Estimated time to read: 3 minutes
April 28, 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-String
Link challenge này tại http://challenge01.root-me.org/web-serveur/ch19/
Tổng quan¶
Trong challenge này, mục tiêu của ta là lấy mật khẩu admin. Cụ thể là tiêm câu truy vấn phù hợp để truy xuất được thông tin về account có trong cơ sở dữ liệu.
Một vài keyword có thể hữu dụng cho việc truy vấn dữ liệu trong table như order by, group by,...
Kịch bản tấn công¶
Bước 1: Kiểm tra website¶
Với những thăm dò đầu tiên, ta nhận thấy rằng lỗi SQL có thể được khai thác ở url http://challenge01.root-me.org/web-serveur/ch19/?action=recherche.
Như thường lệ, ta thử tiêm 1 truy vấn đơn giản ' or 1=1
ngay lập tức ta nhận được kết quả như hình bên dưới
Ta thử test với ' or1=1
để kiểm tra thông báo lỗi như nào
Như hình trên, ta thấy thông báo cú pháp "or1" bị lỗi (vì không có dấu cách ::) ), nhưng quan trọng hơn ta thấy được database của website này dùng SQLite3.
Bước 2: Thăm dò lỗi và tìm flag¶
Rồi, đây có vẻ là loại UNION. Ta tiến hành kiểm tra số cột bị lỗi. Khi ta dùng query ' order by 3--
ngay lập tức bị lỗi và ta xác định được bảng này có 2 cột
Tiếp theo, ta kiểm tra cột hiển thị bằng ' union select 1, 2--
và ta nhận được cả 2 cột đều có thể khai thác.
Hơn nữa, vì đây là SQLite3 nên ta sẽ dùng ' union select 1,sql from sqlite_master--
để tìm bảng
Well, ta thấy được bảng users. Có bảng user rồi thì ta làm gì?
::) Thì ta đọc nó thôi: ' union select username,password FROM users--
Well, ta có được danh sách account như hình trên rồi kìa. Lụm flag thôi nào
Flag
c4K04dtIaJsuWdi