[OverTheWire] Natas – Level 16

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

For security reasons, we now filter even more on certain characters
Find words containing…

Nhấn View sourcecode:

Thấy quen quen emo_popo_shame

Vì rằng input đã bị escape một số ký tự chủ chốt, ta buộc phải nghĩ cách khác. Cách hay nhất chính là dùng… Google emo_popo_haha

Có những thứ trong cuộc sống mà chúng ta buộc phải chấp nhận một điều, rằng chúng ta chưa có đủ kiến thức để có thể đạt được nó. Chưa đi học, chúng ta không thể hiểu làm sao để giải cái phương trình bậc 2, và thậm chí cũng không biết rằng nó được gọi là phương trình bậc 2, nên không thể tự tìm cách giải quyết. Các bạn hiểu mình đang nói gì không? emo_popo_angry

Sau khi Google, mình biết được một điều rằng ta có thể lồng các câu lệnh con vào làm tham số của một câu lệnh khác, bằng cách sử dụng $(). Ví dụ:

output:

:sure:

Trở lại chức năng tìm kiếm của task này, dễ thấy ta có thể inject các câu lệnh theo ý muốn và dựa vào kết quả trả về để xác định password cho task 17. Nó kiểu như:

  • Nếu ký tự đầu tiên của task17.pw là ‘a’: Tìm kiếm với keyword = ‘a’.
  • Ngược lại: Tìm kiếm với keyword ‘xxx’ (hoặc 1 từ bất kỳ không xuất hiện trong dictionary.txt).

Như thế, nếu có dữ liệu trả về, thì phép thử của chúng ta là đúng, còn ngược lại, phép thử là sai. Tương tự như vậy đối với các ký tự khác.

Tuy nhiên không hiểu sao mình chật vật mãi với đám ifthenfi mà vẫn không xong, nên mình đã Google tiếp và ra một câu lệnh khác, xì tin hơn nhiều:

Xét 2 câu lệnh sau và output của nó:

abcdef

(không trả về gì cả)

Tức là, nếu ta nhập input sau vào box search:

thì sẽ có 2 trường hợp xảy ra:

  1. Có dữ liệu liên quan đến từ Americanism trả về: Như vậy $(grep…) trả về <rỗng>, tức là phép thử của chúng ta (task17.pw bắt đầu bằng a) là sai.
  2. Không có dữ liệu trả về: Như vậy $(grep…) trả về khác <rỗng>, tức là phép thử của chúng ta là đúng, ta tìm được 1 ký tự của pw.

Lặp lại các phép thử như vậy, ta sẽ có đủ 32 ký tự cần tìm.

Code minh họa (không khuyến cáo dùng vì rất chậm):

Kết quả:

8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw

→ flag = 8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw.

[WarGame] wtf_blackout

http://wargame.kr:8080/prob/35/
BlueH4G did working test.php in current directory! but, the blackout began yesterday..
We can view BlueH4G’s test.php source!!

Không có bất cứ thứ gì cả, ngoài việc chúng ta thấy lời tựa tiếng Anh và tiếng Hàn có đôi chút khác biệt (chắc để ưu tiên người nhà).

Thường thì các file source, nếu được cung cấp kèm theo task, sẽ có dạng test.phps hoặc test.php~, tuy nhiên trong trường hợp này đều 404 not found, cả file robots.txt cũng vậy.

Google và biết rằng có một loại tập tin khác, với phần mở rộng .swp (swap), tạo bởi VIM. Cấu trúc tên chính xác là .<tên_file>.swp, cụ thể:

b0VIM 7.2+rootubuntu/var/www/prob/35/test.php U3210#"! Utp�ada���������!@#$%^&*()_abcdefghijklmnopqrstuvwxyz1234567890auth key is... ./thx_swap_file.phpcongratulations!!!

Rất khả quan, mở tiếp:

wow!! auth key is ed1a8f1ae31451afa402ee01acbe325cd6197219

→ flag = ed1a8f1ae31451afa402ee01acbe325cd6197219.