[PicoCTF 2018] – fancy-alive-monitoring!

### URL : http://2018shell2.picoctf.com:56517/index.php

Writeup Aslinya:

  • https://github.com/liuhack/writeups/blob/master/2018/picoCTF/Fancy-alive-monitoring/README.md
  • https://rawsec.ml/en/picoCTF-2018-write-up/#400-fancy-alive-monitoring-web

 

Awalnya saya tidak mengerti cara menyelesaikan problem ini namun ketika beberapa orang ini membuat sebuah writeup tentang ” PicoCTF 2018 – fancy-alive-monitoring! ” saya jadi mengerti dan dapat membuat writeup ini yang saya coba sendiri dan berhasil maka saya tuliskan dalam bahasa indonesia

Diberikan sebuah website yang isinya ada input box untuk cek IP apakah hidup(online) atau tidak, juga diberikan source code PHP website tersebut

PicoCTF - 2018
web

Disini saya mencoba IP ‘127.0.0.1’ dan kemudian situs tersebut memberikan output “Target is alive”

PicoCTF - 2018

Hmm cukup menarik mari kita cek source code PHP dari situs tersebut

Kuncinya disini

  1. pada ” function (check) ” yang akan memvalidasikan terdahulu sebelum menjalankan isi inputan dalam box, validasinya berupa dalam inputan box hanya boleh ” ?.?.?.?$ ” line ditutup ditutup sampai ” $ ” selebihnya akan termasuk inputan kita salah ” alert(“Wrong IP format.”); “
  2. pada line ke 32 yaitu ” exec(‘ping -c 1 ‘.$ip, $cmd_result); ” yang artinya PHP akan menjalankan function exec() dimana menjalankan ping terhadap inputan kita dalam box yang disediakan

Disini kita dapat mengeksploit keduanya dengan cara:

Pertama kita matikan dulu validasi javascript

Melalui Console Chrome saya mematikan validasi JavaScript situs web dengan cara merubah isi dari function check() dimana ketika kita memasukkan inputan dia tidak akan memvalidasi lagi inputan harus  ” ?.?.?.?$ ” lain dari itu salah, namun setelah menjalankan code diatas inputan kita dapat berupa ” ?.?.?.?$ ; {cat / ls / curl / lainnya} ”

Setelah bisa menginputkan hal lain selain IP yang akan di cek, maka kita dapat menjalankan command linux yang lain karena dalam source code terdapat bahwa

Maksud dari isi code diatas yaitu PHP akan menjalan function exec() dimana exec() tersebut akan menjalan command linux berupa {cat / ls / curl / lainnya} disini kita akan menggunakan cURL

Namun kita perlu menyediakan sebuah tempat untuk menerima output dari cURL, saya menggunakan RequestBin

Jadi setelah saya mecoba berkali-kali akhirnya code ini dapat dijalankan

Kenapa kita harus meng-encode base64 terdahulu, kenapa tidak langsung ” ls ” saja? Karena jika begitu curl hanya akan mengirimkan ” index.php ” tanpa file lain yang ada dalam direktori yang sama

Ketika di cek di requestbin-inspect maka saya menerima output

Dapat diketahui bahwa flag terdapat dalam ” the-secret-1755-flag.txt ” kemudian kita membaca isi file tersebut

 

flag : picoCTF{n3v3r_trust_a_b0x_36d4a875}

Leave a Reply

Your email address will not be published. Required fields are marked *