Penyelesaian Challenges Malang Hacker Link
Setelah lama tidak membuat challenges karena waktu senggang yang makin dikit karena tugas yang makin banyak dan menumpuk karena tidak segera dikerjakan, akhirnya dapat info challenges dari temen di group telegram, challenges ini merupakan challenges buatan dari komunitas lain yaitu Malang Hacker Link, challengesnya cukup unik dan menyenangkan untuk dikerjakan karena ilmu perdukunan tidak perlu digunakan.
Langsung saja dari informasi tersebut langsung buka linknya dan didapatkan form dengan isian first dan last name karena belum menjelajah dan mendapatkan clue, kita mencoba menggunakan fitur ini untuk mengetahui output dari aplikasi web ini, untuk isian firstname diisikan abc dan untuk lastname dengan def
Ternyata output dari webapp ini cukup unik, setiap inputan yang dimasukan akan ditampilkan dalam format ascii art berwarna, dari sini mulai mencoba mencari celah yang dapat dilakukan.
Karena hanya program dengan output ascii art disini kita tidak perlu berfikir jauh untuk mengasumsikan kemungkinan celah keamanan pada webapp ini. Untuk SQL Injection tidak mungkin karena sepertinya tidak tersimpan pada database namun tidak menutup kemungkinan juga, untuk XSS juga tidak mungkin karena output dari hasil input menjadi ascii art. Dari sini mulai berfikir bahwa web ini memiliki vulnerability SSTI karena kemungkinan ada templating yang digunakan untuk menampilkan ascii art tersebut, langsung saja dicoba menggunakan payload umum yaitu {{7 * 7}}
jika output menjadi 49
maka sudah terlihat jelas bahwa webapp tersebut rentan terhadap SSTI
Namun output yang diharapkan tidak tampil dan malah isi file yang ada pada directory tersebut, terlihat ada file chall.py sepertinya source code dari webapp ini dan solver.txt yang mana adalah tujuan akhir untuk dituliskan nama pada file tersebut.
Kita buka file chall.py dan mendapatkan source code dari webapp tersebut, waktunya baca-baca kode dan mencari sesuatu yang menarik.
Karena inputan kita diproses maka baiknya memahami bagaimana input data tersebut diproses, pada fungsi parse_POST
dan do_POST
inputan diproses pada kedua fungsi tersebut, nampaknya ada sesuatu yang menarik dari isi fungsi do_POST
, ada command shell yang tidak asing terlihat yaitu toilet, command untuk mempercantik output terminal dengan ascii art. Sepertinya webapp ini menjalankan shell untuk memproses data dari input user, untuk meyakinkan diri kita lihat fungsi-fungsi lainnya.
Ternyata dugaan benar, pada fungsi hav()
webapp ini menjalankan shell bash pada proses bisnisnya. Berdasarkan dari fungsi do_POST
maka dapat disimpulkan bahwa webapp ini akan menjalankan command shell echo <input_data> | toilet --html --metal
, karena sudah cukup familiar dengan command shell waktunya memanggil command shell lainnya dengan merubah input data menjadi payload sederhana, yaitu shell exec pada bash. dapat dijalankan dengan
$(command_here)
atau
`command_here`
Kita lakukan pengetesan dengan isian data $(whoami)
Server merespon dan terlihat id dari user kita adalah root, waw. Dengan ini kita sudah dapat melakukan full compromised terhadap server, namun perlu diingat tujuan kita adalah menuliskan nama pada solver.txt
Menjalankan command untuk write name
Response dari command tersebut kosong, lalu kita check isi solver.txt apakah berubah atau tidak.
Okay mission complete.
Lalu bagaimana biar webapp ini lebih secure ? tulis jawaban kalian di komentar.
See you on the next challenges.