[Vulnhub] – DC-2

Pada kesempatan kali ini, penulis ingin kembali berbagi ilmu yang didapat penulis dari mengerjakan sebuah vulnbox yang bernama DC-2. Box ini merupakan seri lanjutan dari DC-1 yang dimana memperkenalkan kita pada beberapa sudut pandang baru dalam pentest. Langsung saja gaskeun!

Seperti biasa, kita mulai dengan mencari IP dari box kita menggunakan netdiscover, berikut syntaxnya:

$ sudo netdiscover -i wlp3s0 -r 192.168.43.0/24

Oke, sepertinya box yang akan kita kerjakan ada di 192.168.43.171. Berikutnya, mari kita lihat ada port apa saja dalam box itu dengan nmap, berikut syntaxnya:

$ nmap -A -v -p- -T4 192.168.43.171

 

Baik, jadi dalam box ini hanya ada 2 port yakni port SSH yang di pasang di 7744 dan port HTTP yang ada di 80. Tapi sebentar, kok ada yang aneh dengan informasi di port 80. Disana tertulis “http-title: Did not follow redirect to http://dc-2/”. Kenapa ya? Mari kita lihat terlebih dahulu.

Saat kita buka 192.168.43.171, akan langsung ke redirect ke dc-2. Hal ini disebabkan karena di dalam internet sendiri tidak ada domain yang bernama dc-2 terlebih lagi tidak ada TLD (Top-level Domain). Sehingga, kesimpulan yang didapat adalah ini merupakan custom domain yang diatur sendiri dalam localhost. Lalu apa yang bisa kita lakukan dari informasi yang didapat? Di dalam linux, ada sebuah file yang bernama hosts yang terletak di /etc/hosts, lalu apa fungsi file ini? Dapat dilihat di link berikut.

Maka dari itu, kita tinggal mengarahkan IP dari box ke domain dc-2.

Dengan begitu, jika kita lakukan kembali nmap, informasi mengenai website tersebut akan berubah menjadi normal karena IP box kita sudah diarahkan ke domain yang seharusnya.

Nah! Ternyata di port 80, ada sebuah website berbasis WordPress. Mari kita periksa isi dari websitenya.

Karena ini merupakan wordpress, mari kita coba lakukan scanning dengan tool WPscan, berikut syntaxnya:

$ wpscan –url http://dc-2

 

Tidak ada yang menarik. Tapi belum selesai, jika ada WordPress maka ada? User. Mari kita lihat ada user apa saja dalam WordPress ini. Scanning masih menggunakan WPscan, berikut synatxnya:

$ wpscan –url http://dc-2

Yap ternyata ada 3 user dalam web ini yakni:

  • admin
  • tom
  • jerry

Hmm… hanya terlihat seperti sebuah website wordpress sederhana, disini kita mendapatkan flag pertama.

Flag:

Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl.

More passwords is always better, but sometimes you just can’t win them all.

Log in as one to see the next flag.

If you can’t find it, log in as another.

Dari flag pertama, kita mendapatkan clue, bahwa wordlist yang biasa kita gunakan dari internet tidak bisa dipakai, lalu ada clue menarik. Disini dibilang “you just need to be cewl“. Dari kata tersebut kita bisa mencari dan mendapatkan sebuah tool yang memang bernama CeWL. Tool ini berfungsi untuk membuat custom wordlist hanya dengan memberikan informasi dari website mana kita mau membuatnya. Dengan begitu kita bisa membuat sebuah file berisi wordlist yang kita butuhkan.

Sehingga kita punya file bernama password dan berisi:

CeWL 5.4.5 (Exclusion) Robin Wood (robin@digi.ninja) (https://digi.ninja/)
sit
amet
nec
quis
vel
orci
site
non
sed

Mengapa penulis menetapkan itu untuk list password? Ada beberapa analisa yang mungkin kurang masuk akal tapi yaaa begitulah 😀 :

  • Username kita sudah dapat.
  • Dari flag pertama ada clue soal CeWL untuk wordlist.
  • Jika ada username maka ada password.
  • Username sudah, berarti yang ini untuk password.

Dengan begitu kita mendapatkan list user dan password. Selanjutnya? Bruteforce 🙂

Untuk melakukan hal tersebut kita memerlukan login page. Karena ada kemungkinan wordpress ini sudah di ubah, maka agar aman kita lakukan directory bruteforce dengan DirBuster, berikut syntaxnya:

$ dirb http://dc-2 <wordlist file>

Jika wordlist file tidak ditentukan, maka akan digunakan yang default yakni common.txt

Sepertinya WordPress ini ada di setting default. Kita dapat menemukan login page di http://dc-2/wp-login.php. Untuk mempermudah proses bruteforce, penulis membuat sebuah program Python:

Dari program itu dijalankan, penulis mendapatkan bahwa ada 2 username dan password yang valid:

Bingo! Kita mendapatkan disini ada 2 pasang username dan password yang valid untuk digunakan login.

tom -> parturient

jerry -> adipscing

Mari kita coba terlebih dahulu dengan username tom.

Hmm… jika dilihat sekilas, tidak ada yang menarik dari akun tom. Sepertinya akun ini tidak memiliki otoritas lebih dari sekedar member. Berikutnya kita coba cek akun jerry.

Ya, sepertinya akun jerry mempunyai otoritas lebih daripada tom. Dapat dilihat di gambar di atas bahwa di dalam akun tom tidak ada pilihan Pages sedangkan di jerry ada. Mari kita lihat ada apa saja disana.

Ternyata, di dalam website ini, ada page yang bernama Flag 2 tapi tidak dimasukkan ke menu utama.

Yak didapatlah flag kedua.

Flag 2:

If you can’t exploit WordPress and take a shortcut, there is another way.

Hope you found another entry point.

Sepertinya dari flag ini, kita diberitahu kalau WordPress yang ada disini tidak dapat di eksploitasi, dan kita diminta untuk mencari jalan lain untuk masuk. Mengapa begitu?

  • Kita tidak mempunyai login untuk admin.
  • Walau kita bisa menambahkan page baru, kita tidak bisa memasukkan reverse shell karena code PHP yang kita masukkan ke page hanya akan dianggap sebagai tulisan biasa.

Disini penulis menghabiskan waktu sekitar beberapa jam untuk berpikir apakah mungkin ada jalan lain untuk masuk ke dalam servernya. Sampai terpikir kemungkinan yang tidak sepenuhnya salah tapi cukup konyol 😀 .

Ingat saat proses bruteforce kita mendapatkan 2 username dan password yang valid? Dan di mesin tersebut ada 2 port yang terbuka yakni 80 (HTTP) dan 7744 (SSH)? Penulis terpikir bagaimana jika kita mencoba menggunakan username dan password tersebut untuk login ke SSH?

Sepertinya untuk jerry tidak bisa digunakan.

Wow! Ternyata username dan password milik tom dapat digunakan untuk SSH.

Ada file flag3.txt tapi………. rbash. LAGI! Untuk perihal rbash ini sudah pernah penulis bahas di writeup ini.

Untuk mempersingkat, di dalam rbash ini ada 4 program yang dapat kita gunakan yakni:

  • less
  • ls
  • scp
  • vi

Dari keempat program ini, kita bisa menggunakan vi untuk escape rbash.

Setelah melakukan escape shell dengan vi kita tinggal memperbaiki $SHELL dan $PATH.

Dengan begitu, kita bisa melakukan cat pada file flag3.txt.

Flag 3:

Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.

Dari flag ketiga ini, kita mendapatkan clue selanjutnya yakni:

  • Kita harus masuk ke dalam akun jerry.
  • Akun jerry merupakan jalan masuk kita untuk menjadi root.

Lalu sekarang bagaimana? Kita tidak punya SSH password untuk jerry. Dari sini, kita bisa mengganti user dari tom ke jerry dengan command su. Berikut commandnya:

su – <username>

su – jerry

Di dalam direktori home milik jerry terdapat flag berikutnya.

Flag 4:

Good to see that you’ve made it this far – but you’re not home yet.

You still need to get the final flag (the only flag that really counts!!!).

No hints here – you’re on your own now. 🙂

Go on – git outta here!!!!

Dari flag ini, ada satu kata kunci yang jadi clue untuk kita mendapatkan root.

Go on – git outta here!!!!

Git. Lalu apa hubungannya? Mari kita periksa lebih jauh.

Disini dikatakan bahwa user jerry bisa menjalankan program git bisa di jalankan dengan privilege root tanpa password. Lalu apa bagian dari git yang bisa kita gunakan? Pertama liat help dari git.

Dari manual page ini, kita bisa melihat command dan opsi apa saja yang dapat kita gunakan dari program ini. Dan dari semua opsi yang ada, ada satu yang menarik yakni paginate.

Disini dikatakan saat kita menggunakan opsi paginate, output dari command akan dimasukkan ke dalam less. Program less ini memiliki fitur dimana kita bisa menjalankan command lain.

Jika kita bisa menjalankan git dengan sudo dan menjalankan opsi paginate, kita akan bisa mendapatkan root dengan memanggil /bin/bash atau /bin/sh dari bagian command. Program git dijalankan dengan command berikut:

$ git -p

Yep, kita sudah dapat root. Sekarang tinggal mengambil root flag di /root.

Flag 5:

__ __ _ _ _ _
/ / /\ \ \___| | | __| | ___ _ __ ___ / \
\ \/ \/ / _ \ | | / _` |/ _ \| ‘_ \ / _ \/ /
\ /\ / __/ | | | (_| | (_) | | | | __/\_/
\/ \/ \___|_|_| \__,_|\___/|_| |_|\___\/

Congratulatons!!!

A special thanks to all those who sent me tweets
and provided me with feedback – it’s all greatly
appreciated.

If you enjoyed this CTF, send me a tweet via @DCAU7.

Leave a Reply

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