CSAWCTF — WEB — WIDTHLESS

InersIn
3 min readSep 13, 2020

Baik kali ini saya bermain CSAWCTF 2020, pada CTF ini saya hanya bisa menyelesaikan 3 challenge :’(, karena saya juga bukan seorang profesional.

Challenge yang saya berhasil solved adalah roppity pwn, Perfect Secrecy crypto, dan widthless web.

Baik kali ini saya mengerjakan Widthless Web challenge dari CSAWCTF 2020, pada challenge ini saya baru pertama kali mengetahui tentang “ZWSP”, tapi pada challenge ini termasuk kategori easy, kita hanya perlu mengencode hidden data pada web dan kita akan mendapatkan flagnya dari web tersebut dengan mengim “data-data” yang berhasil kita decode.

Baik langsung saja kita buka link yang diberikan.

Jika kita perhatikan pada halaman page terdapat sebuah form yang memerlukan input “sesuatu” karena jika kita inputkan data secara “asal” web akan menampilkan “Whoops, couldn’t add, sorry!” selebihnya disini terlihat normal.

Baik mari kita periksa page source, pada bagian page source juga terlihat normal, tapi jika kita perhatikan sebelum pada

<div class="section-2">
<h2>About</h2>
...
</div>

terdapat sebuah comment html

<!--zwsp is fun!-->

Setelah saya baca “zwsp” ada Zero-Width Space yang merupakan salah satu metode encoding character yang pada challenge kali ini digunakan sebagai metode untuk melakukan steganography, jadi saya berinisiatif untuk melakukan get pada web page menggunakan python requests, karena jika ini ada sebuah “encoding” yang tidak dapat ditampilkam dengan cara biasa, mungkin python bisa mengubahnya menjadi bentuk hex atau meng-encode data tersebut dalam bentuk lain.

┌──(inersin㉿kali)-[~/Desktop/csawctf/web/widthless]
└─$ python3.8
>>> import requests
>>> data = requests.get("http://web.chal.csaw.io:5018/").content.decode()
>>> data

Data telah menyimpan data yang kita inginkan, data yang kita inginkan sebagai berikut:

\u200b\u200b\u200b\u200b\u200e\u200f\u200e\u200b\u200b\u200b\u200b\u200c\u200d\u200f\u200b\u200b\u200b\u200b\u200e\u200d\u200f\u200b\u200b\u200b\u200b\u200e\u200d\u200d\u200b\u200b\u200b\u200b\u200f\u200f\u200b\u200b\u200b\u200b\u200b\u200f\u200e\u200c\u200b\u200b\u200b\u200b\u200e\u200b\u200d\u200b\u200b\u200b\u200b\u200d\u200f\u200d\u200b\u200b\u200b\u200b\u200e\u200b\u200e\u200b\u200b\u200b\u200b\u200c\u200f\u200e\u200b\u200b\u200b\u200b\u200e\u200d\u200e\u200b\u200b\u200b\u200b\u200f\u200f\u200d\u200b\u200b\u200b\u200b\u200d\u200f\u200f\u200b\u200b\u200b\u200b\u200f\u200b\u200d\u200b\u200b\u200b\u200b\u200e\u200b\u200d\u200b\u200b\u200b\u200b\u200d\u200b\u200c\u200b\u200b\u200b\u200b\u200f\u200d\u200c\u200b\u200b\u200b\u200b\u200d\u200d\u200c\u200b\u200b\u200b\u200b\u200c\u200d\u200f

Lalu bagai mana cara men-decode data tersebut? Saya menggunakan salah satu python library yaitu zwsp_steg, dapat diinstal dengan cara:

pip3 install zwsp-steg-py

Sekarang kita bisa men-decode data tersebut dengan mudah.

import zwsp_steg
zwsp_steg.decode(data) # data merupakan data yang akan kita decode

data tersebut berhasil di decode menjadi base64 data

YWxtMHN0XzJfM3o=

kemudian tinggal kita decode menggunakan syntax berikut.

┌──(inersin㉿kali)-[~/Desktop/csawctf/web/widthless]
└─$ echo -ne "YWxtMHN0XzJfM3o=" | base64 -d
alm0st_2_3z

Jika kita perhatikan pada web page, terdapat sebuah form yang memerlukan input tertentu, jika kita masukan string tersebut menggunaka string yang tadi kita dapatkan, web akan me-redirect memberikan instruksi selanjutnya.

Web memberikan kita URI dan ditambah dengan <pwd> yang mungkin saja adalah string yang kita dapatkan tadi, jika kita buka link dengan URI tersebut, web menampilkan tampilan yang kurang lebih mirip dan memerlukan input lagi.

Jadi saya melakukan hal yang sama seperti sebelumnya, dan mencoba mengambil unicode yang tersembunya seperti sebelumnya, berikut data yang saya ambil dari page tersebut.

\u200b\u200b\u200b\u200b\u200d\u200c\u200b\u200b\u200b\u200b\u200b\u200d\u200b\u200e\u200b\u200b\u200b\u200b\u200d\u200b\u200e\u200b\u200b\u200b\u200b\u200f\u200b\u200d\u200b\u200b\u200b\u200b\u200d\u200c\u200b\u200b\u200b\u200b\u200b\u200d\u200b\u200e\u200b\u200b\u200b\u200b\u200d\u200b\u200f\u200b\u200b\u200b\u200b\u200f\u200b\u200c\u200b\u200b\u200b\u200b\u200d\u200b\u200f\u200b\u200b\u200b\u200b\u200d\u200c\u200c\u200b\u200b\u200b\u200b\u200d\u200b\u200c\u200b\u200b\u200b\u200b\u200c\u200f\u200f\u200b\u200b\u200b\u200b\u200d\u200b\u200f\u200b\u200b\u200b\u200b\u200d\u200b\u200d\u200b\u200b\u200b\u200b\u200d\u200b\u200e\u200b\u200b\u200b\u200b\u200f\u200b\u200d\u200b\u200b\u200b\u200b\u200d\u200b\u200f\u200b\u200b\u200b\u200b\u200f\u200b\u200b\u200b\u200b\u200b\u200b\u200d\u200b\u200c\u200b\u200b\u200b\u200b\u200d\u200b\u200c

Kemudian saya kembali menggunakan zwsp_steg untuk men-decode data tersebut, berikut adalah hasil decode data tersebut.

755f756e6831645f6d33 # string ini adalah sebuah hexadecimal

Mari kita decode string tersebut menggunakan “xxd”, berikut syntaxnya

┌──(inersin㉿kali)-[~/Desktop/csawctf/web/widthless]
└─$ echo -ne "755f756e6831645f6d33" | xxd -r -p
u_unh1d_m3

hasil decode hex tersebut adalah “u_unh1d_m3”, mari kita input ke form page.

Web pun kemabali memberikan URI yang memerlukan <pw1>/<pw2> yang dimana itu adalah data pertama dan data ke-dua yang telah kita dapatkan, jika kita buka link tersebut yang sudah ditambahkan <pw1>/<pw2>, berikut contoh url full nya.

web.chal.csaw.io:5018/*/alm0st_2_3z/u_unh1d_m3

Mari kita buka…

Web pun menampilkan flag.

flag{gu3ss_u_f0und_m3}

--

--

InersIn

PARSECT // IT Security Enthusiast // STOICISM // KEEP DO SOMETHING LEGAL