Cyber Security Enthusiast

BPJS Hackathon 2021 – Penyisihan

B

Description

Event ini adalah kali pertama BPJS Kesehatan mengadakan jenis Penetration Testing dimana pada tahap penyisihan formatnya tetap sama yaitu Capture The Flag (CTF), kali ini tim saya beranggotakan 3 orang dengan nama tim dgf0xmk_ETN*qep7tje (sangat random sekali) yang beranggotakan Allen, Wahyu, dan pak ketua Thomas.

Kompetisi diadakan selama 5 jam dengan total 8 task dimana kami berhasil menjawab 7 task, ada sedikit kelucuan yang terjadi pada babak penyisihan kali ini dimana terdapat celah Local File Inclusion (LFI) pada salah satu soal yang dampaknya merambat ke soal lain, yap kita bisa melihat source code semua soal yang ada dimana seharusnya tidak bisa dilakukan (atau plot twist nya ini memang sengaja dilakukan wkwk), ada lebih baiknya next time soal di deploy dalam docker dan sejenisnya agar tidak terjadi misconfiguration seperti ini lagi.

Dari 120 individu/tim yang terdaftar, kami berhasil mendapat peringkat 6 karena yang akan maju ke babak final adalah 10 besar (Yas!). Karena saat ini websitenya tidak bisa diakses, saya menyempatkan untuk melakukan screenshot agar bisa jadi sebuah kenang-kenangan hehe.

Top 10 kompetisi pentest pada event BPJS Hackathon 2021

Oke deh, berikut adalah beberapa write-ups yang kami tulis dari task pada babak penyisihan BPJS Hackathon 2021. Selamat membaca!

1. Apache

Kami mulai dari soal ini yang memiliki misconfiguration pada LFI sehingga bisa dengan mudah melihat source code soal lain pada direktori /var/www/html/hackathon/* sehingga mempermudah untuk mitigasi dan mencari flag 🙂

Halaman utama web apache

Intercept request agar mempermudah mitigasi dan untuk dapat melihat source code pada file tertentu kita perlu menggunakan salah satu fitur dari PHP Wrapper yaitu php://filter/convert.base64-encode/resource=/lokasi/file seperti berikut:

LFI menggunakan fungsi encode base64

Langkah selanjutnya kami melakukan dump pada log milik apache2 dan menemukan satu baris log path yang mencurigakan yaitu pada /budaejjigae/tangsuyuk/samgyubsal/index.html.

172.68.2.113 - - [11/Sep/2021:07:21:50 +0000] "GET /budaejjigae/tangsuyuk/samgyubsal/index.html HTTP/1.1" 404 517 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:92.0) Gecko/20100101 Firefox/92.0"

Memang benar pada log tertulis bahwa hasil respon nya adalah 404 namun begitu kami coba akses halaman tersebut ternyata hasilnya 200 dan menampilkan flag yaitu:

BPJS{T00_E4SY_4_ADV_W3B_G33K}

2. Invite Code

Halaman utama web invite code

Mungkin tujuan awal dari soal ini adalah kami perlu melakukan cek pada halaman register.php dan melakukan analisis, namun the power of LFI pada task apache kami cukup melihat source code dari index.php pada task ini dan flag akan jelas terlihat terpampang haha.

Halaman register.php
Source code register.php

Yap, tanpa perlu basa-basi cek alur task ini seperti apa tinggal lihat source code pada halaman index.php maka flag akan terlihat.

Flag pada index.php
BPJS{P0st_4ll_tH3_thing5}

3. Secure Your Config

Hal yang sama terjadi pada task ini yaitu tinggal menggunakan celah LFI untuk melihat source code pada halaman index.php maka flag akan terlihat.

Namun sebelum melihat flag kami perlu melakukan pencarian nama file target karena pada task ini terdapat dua file index yaitu index.html dan index.php dimana flag berada pada file index.php.

Halaman utama web secure your config (index.html)
Halaman kedua (index.php)
Flag pada index.php
BPJS{This is the second Flag}

4. Search Me

Halaman utama web search me

Task ini memerlukan tool sqlmap untuk melakukan dumping database karena setelah melihat source code yang ada terlihat bahwa baris 26 memiliki vulnerability SQL Injection.

Source code index.php

BTW kami juga sempat melihat konfigurasi pada file db.php namun tidak ada proses mitigasi yang bisa kami lakukan dari sini karena port database tidak publik melainkan hanya bisa diakses dari localhost saja.

Source code file konfigurasi database

Dari request berikut kami kirim ke sqlmap hingga akhirnya flag berhasil didapat.

POST /hackathon/challenge/ship/index.php HTTP/1.1
Host: ctf2021.bpjs-kesehatan.1337hackathon.id
Content-Length: 88
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://ctf2021.bpjs-kesehatan.1337hackathon.id
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://ctf2021.bpjs-kesehatan.1337hackathon.id/hackathon/challenge/ship/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close

name=The+Javelin'+union+select+group_concat(name,kills,captain),2,3+from+spaceships+--+-

Beruntung akses kepada endpoint tersebut lancar dilakukan karena sempat beberapa kali web terasa sangat lambat hingga susah diakses sampai akhirnya kami berhasil melakukan dumping database.

BPJS{hey_there_h4v3_s0me_points}

5. Echo “Header”;

Halaman utama web echo “header”;

Sesuai dengan judul task dimana yang perlu dilakukan adalah melihat header pada respon, sehingga perintah yang dapat digunakan adalah verbose milik curl.

curl -v http://ctf2021.bpjs-kesehatan.1337hackathon.id/hackathon/challange/getsome
Hasil curl pada bagian header

Langkah selanjutnya adalah menggabungkan pecahan-pecahan flag yang terbagi menjadi 5 bagian menjadi satu maka flag akan didapat.

BPJS{50m3d4y_17_w1ll_b3_54f3}

6. Find Me

Halaman utama web find me

Setelah melihat source code dari task ini benar-benar tidak ada yang bisa di gali lebih dalam sehingga terfikirkan untuk melihat isi dari logo BPJS Hackathon 2021, mengingat dari judul memungkinkan sekali jika task ini adalah jenis Digital Forensic (tapi kok platform nya website? wkwk).

Logo BPJS Hackathon

Dan yap benar sekali kami semakin yakin karena terdapat strings berbentuk base64 pada logo tersebut yang jika di decode akan menghasilkan teks “BPJSHackathon2021”.

Terdapat base64 pada binari gambar

Sempat stuck dengan step sister beberapa lama hingga akhirnya kami coba lakukan ekstrak menggunakan stegsolve dan ternyata terdapat file tersembunyi yang berisi strings berbentuk chiper ROT13 yaitu “OCWF{SBERAFVPF_VF_RIRELGUVAT}”. Oke deh tinggal di decode maka flag berhasil didapatkan.

BPJS{FORENSICS_IS_EVERYTHING}

7. Moderna

Halaman utama web moderna

Kami coba lakukan pencarian untuk nama path atau file menggunakan dirsearch hingga menemukan file team.html, setelah kami coba kunjungi ternyata pada halaman tersebut terdapat flag (mudah sekali eferibadeeh).

Flag pada halaman team.html
BPJS{Ke3p_M0V1ng}

Conclusion

Beberapa hal yang mungkin dapat menjadi cacatan untuk problem setter salah satunya karena beberapa soal seperti Invite Code, Secure Your Config, dan Find Me sempat membuat kami bingung karena flag sudah dengan jelas berhasil didapat namun tidak bisa dilakukan submit. Hingga akhirnya bisa disubmit (mungkin karena tim lain lapor kepada panitia), tetapi yang menjadi perhatian adalah nasib tim yang pertama kali menemukan flag akhirnya akan didahului oleh tim lain karena flag baru bisa disubmit beberapa lama kemudian 🙁 #sabariniujian

Dan by the way saya juga mendapat informasi dari tim yang berhasil menyelesaikan semua task bahwa 3 soal (1 soal yang tidak berhasil kami solve yaitu Poison the Log) ternyata mirip dan persis dengan writeups yang ada di internet #damn.

Tidak lama setelah babak penyisihan selesai pengumuman kami dapat bahwa tim kami lolos ke babak final dengan teknis kompetisi berbeda dari babak penyisihan yaitu Penetration Testing. Akan saya bahas di post selanjutnya, Stay tune! #CTF #penyisihan #hacking #BPJSHackathon2021

Add comment

Cyber Security Enthusiast