[OverTheWire] Natas – Level 17

http://natas17.natas.labs.overthewire.org/

Nhấn View sourcecode:

Tất cả các thông báo đều đã bị xoẹt xoẹt, làm sao đây emo_popo_cry

Dựa vào cái gì để phân biệt giữa True và False bây giờ emo_popo_pudency

……

………

……

emo_popo_haha

Hãy cùng để ý phần Time-based, vì nó chính là thứ chúng ta cần sweet_kiss

Ý tưởng là, ta sẽ viết một câu query với đặc tính sau:

  • Nếu phép kiểm tra là đúng, sleep 3 giây.
  • Nếu phép kiểm tra là sai, không làm gì cả.

Khi ấy, bằng việc so sánh khoảng thời gian thực hiện việc gửi và nhận request, ta có thể biết được phép thử mình gửi lên là đúng hay sai (tất nhiên không xét trường hợp tốc độ mạng quá chậm, dẫn đến không phân biệt nổi giữa sleep 3 giây và sleep 0 giây emo_popo_look_down)

Code minh họa như sau (sẵn kết hợp cả Binary Search thần thánh, nhưng mình không khuyến khích dùng vì… mình không thích cho dùng sexy_girl):

Kết quả:

xvKIqDjy4OPv7wCRgDlmj0pFsCsDjhdP

→ flag = xvKIqDjy4OPv7wCRgDlmj0pFsCsDjhdP.

[OverTheWire] Natas – Level 15

http://natas15.natas.labs.overthewire.org/

Nhấn View sourcecode:

Có một điều khác biệt so với task trước, đó là không hề có câu lệnh in ra password cho level tiếp theo. Vậy phải làm sao?

Có một ý tưởng (dự đoán), đó là liệu trong database có username và password cho level 16?

Thử nhập username = natas16:

This user exists.

Ok, vậy gần như chắc chắn password của user này sẽ là thứ ta cần tìm.

Có nhiều cách để dò pw, mà thường cách phổ thông nhất là so sánh từng ký tự của pw (MYSQL cung cấp cho ta hàm ascii()substring() để làm việc này) với các ký tự hợp lệ (trong trường hợp này là a..z, A..Z, 0..9), tức mất tối đa 26 + 26 + 10 = 62 lần thử để tìm ra một ký tự. Độ dài pw là 32, nên số phép thử là khá lớn.

Nếu đi theo tư tưởng của Binary Search, ta chỉ mất khoảng 7 (hay 8 gì đó =.=) lần thử cho 1 ký tự.

Code minh họa như sau (bạn có thể không cần hiểu, vì mình đọc lại cũng không hiểu lắm emo_popo_pudency, nhưng tư tưởng của Binary Search thì thống nhất trên Google rồi, ai cũng có thể tự cài đặt theo ý thích):

Kết quả:

WaIHEacj63wnNIBROHeqi3p9t0m5nhmh

→ flag = WaIHEacj63wnNIBROHeqi3p9t0m5nhmh.

[OverTheWire] Natas – Level 14

http://natas14.natas.labs.overthewire.org/

Nhấn View sourcecode:

Ta thấy ngay được là username và password đều không bị escape. Inject với câu lệnh được dạy trong sách giáo khoa:

username = " OR 1=1#
password = <gì cũng được>

Kết quả:

Successful login! The password for natas15 is AwWj0w5cvxrZiONgZ9J5stNVkmxdk39J

→ flag = AwWj0w5cvxrZiONgZ9J5stNVkmxdk39J.