Rabu, 20 Juli 2022

HTB Business CTF 2022 - Operator

Assalamualaikum, teman-teman Masih lanjut pembahasan soal pada HTB Business CTF 2022, soal kali ini masih masuk dalam kategori cloud.

Dekripsi soal

We have located Monkey Business operator blog where they are leaking personal informations. We would like you to break into their system and figure out a way to gain full control.

Seperti biasa pertama kita scan dulu ip yang diberikan, untuk tau service apa saja yang berjalan pada server tersebut.



Terlihat ada 6 port yang terbuka, dari port tersebut terdapat service ssh, web server, kubernetes (8433 dan 10250), dan 2 service unknown.

80 - Web server

Akses Dari browser muncul sebuah website seperti di bawah ini.



Kita coba liat postingan yang ada pada website tersebut, ternyata menampilkan sebuah link yang mengarah ke port 3000 mesin tersebut.


3000 - Self-hosted git

Link yang kita dapatkan sebelumnya ternyata mengarahkan kepada sebuah repository git.

Saya coba explore service tersebut untuk melihat mungkin ada repository yang menarik lainnya. Ternyata memang ada repository lain, yaitu repository awx-operator


Coba explore lebih dalam lagi di repository tersebut, dan menemukan sebuah closed issue. Disitu tertulis bahwa ada repository lain bernama awx-k8s-config.


Coba akses repository tersebut dan lihat-lihat isi file yang ada. Seperti repository tersebut berisi file manifest untuk deploy awx-operator di kubernetes. Pada history commit repository tersebut saya mendapatkan password untuk login ke dashboard awx-operator. 

30080 - Awx dashboard

Akses ke dashboard menggunakan kredensial yang sudah didapatkan, berikut tampilannya

Cara kerja awx kurang lebih seperti ini, pertama dia akan mendeploy sebuah pod pada kubenetes kemudian menjadikan pod tersebut sebagai runtime ansible playbook. Dengan cara kerja seperti itu kita bisa membuat sebuah playbook untuk mendapatkan kubernetes token pada pod untuk kemudian kita gunakan untuk mengakses kubernetes cluster.

Pertama kita buat user dan repository baru pada service gogs di port 3000, kemudian isi repository tersebut dengan ansible playbook kita yang membaca file /var/run/secrets/kubernetes.io/serviceaccount/token yang berisi token. Berikut ansible playbook yang saya gunakan.

Kemudian pada awx dashboard kita buat project baru yang bersumber dari repository yang sudah buat. 

Lalu kita buat job template dari project tersebut untuk menjalankan playbook.

Selanjutkan kita jalankan job tersebut, tapi ternyata mendapatkan error. Sepertinya file yang berisi token tidak ada pada pod yang dijalankan.

Setelah googling beberapa saat diketahui kemungkinan parameter automountServiceAccountToken bernilai false saat pod dijalankan. Pada awx kita bisa mengubahnya Instance Group -> pilih group -> customize pod configuration.

Sekarang jalankan kembali job yang sudah dibuat. Akhirnya berhasil mendapatkan token.

Selanjutnya kita coba jalankan kubectl pada pc kita menggunakan token yang sudah didapatkan.

Tapi ketika coba menjalankan command mendapatkan error permission. Sepertinya user token yang kita dapat memiliki priviledge yang rendah. Kita bisa menggunakan user yang kita tau yaitu awx-operator-controller-manager yang bisa kita tau dari file awx-operator.yaml pada pada awx-k8s-config. Kita bisa mengubahnya pada customize pod configuration.

Jalankan kembali job untuk mendapatkan token yang baru. 

Sekarang coba jalankan kembali kubectl menggunakan token yang baru, disini saya coba cek permissionnya.

User yang didapat ternyata bisa untuk membuat pod, langsung aja buat manifest untuk menjalankan pod yang mount ke root / directory dari host. Berikut manifest yang saya gunakan.

Selanjutnya tinggal deploy pod dan masuk kedalam shellnya. Lalu tinggal cat flag.


Referensi:
Share:

Selasa, 19 Juli 2022

HTB Business CTF 2022 - Trade

Assalamualaikum, teman-teman. Kali ini saya akan berbagi Write Up dari salah satu soal di HTB Business CTF 2022 yang berlangsung akhir pekan kemarin. Soal pertama yang akan saya bahas soal Trade yang masuk dalam kategori Cloud.

Deskripsi soal

With increasing breaches there has been equal increased demand for exploits and compromised hosts. Dark APT group has released an online store to sell such digital equipment. Being part of defense operations can you help disrupting their service ?


 Pertama kita scan dulu ip yang diberikan, untuk tau service apa saja yang berjalan pada server tersebut.



Terlihat ada 3 service yang berjalan, yaitu ssh, webserver dan subversion.

80 - Web server

Ketika mengakses dari port 80 muncul halaman login seperti ini. Sepertinya tidak ada yang spesial.


300 - Subversion

Lanjut akses ke subversion, disini kita bisa melakukan koneksi menggunakan svn client. Disini kita juga bisa melakukan enumerasi. Disini saya menemukan repository store/, langsung saja download repository tersebut.




Ketika dibuka file dynamo.py terdapat usernam dan password yang sepertinya bisa kita gunakan untuk login pada website yang sudah kita temukan sebelumnya.


Lalu pada file sns.py tidak ada yang menarik hanya kita tau bahwa ada service sns yang berjalan. Kita coba lihat log dari repository ini.


Terlihat ada beberapa modifikasi yang sudah dibuat, sekarang kita coba revert ke revisi yang sebelum. Ketika mencoba kembali ke revisi ke 2, pada file sns.py terdapat access dan secret key aws.



Kembali ke website, sekarang kita coba login menggunakan username dan password yang sudah kita dapatkan. Ternyata setelah berhasil login kita perlu memasukkan otp.



Kemungkinan otp tersebut bisa kita dapat dari sns. Langsung kita coba enumerate sns topic yang dimiliki dari account aws yang kita dapatkan sebelumnya.


Terdapat 1 topic bernama otp, langsung aja kita subscribe agar bisa mendapatkan pesannya. Karena mesin soal tidak mendapat akses ke internet maka kita tidak bisa menggunakan public email. Agar mudah disini saya memutuskan untuk menggunakan protocol http dengan endpoint ip pc saya. Di pc saya nanti saya akan open port 80 menggunakan netcat untuk menerima pesan.


Selanjutnya, tinggal open port 80 dan melakukan login pada website


Berikut tampilan websitenya. Selanjutnya saya mencoba melihat-lihat fitur apa saja yang ada di website tersebut. Ternyata ada sebuah halaman bernama search yang menerima inputan.


Setelah mencoba-coba berbagai macam inputan akhirnya muncul error ketika saya menginputkan "


Setelah mencari-cari di google dan teringat file yang kita temukan diawal sepertinya website tersebut menggunakan dynamodb. Langsung saja kita coba lakukan dynamo injection. Berikut payload injection yang saya gunakan.



Hasilnya, sekarang semua data yang ada di database muncul.


Disini saya stuck agak lama, lalu kepikiran menggukanan kredensial tersebut untuk ssh ke mesin soal. Ketika menggunakan user mario saya berhasil masuk ke mesin server. Langsung saja buka file flag.txt yang tersedia.



Referensi:

Share:

Minggu, 07 Juli 2019

Write Up IndoSecurity Ctf 2019 -Number Betting-

Assalamualaikum, teman-teman. Lanjut write up untuk soal terakhir yang bisa aku solve :""" dari indosecurity ctf 2019, kategori soalnya web (lagi).

Langsung saja, kita diberikan sebuah halaman web yang isinya seperti berikut


Jadi cara kerja web tersebut adalah kita meng-generate sebuah angka random, kemudian hasilnya dibandingkan dengan nilai yang ada di server, nilai servernya juga random. Nah, kalau misal secara kebetulan nilai punya kita dan server sama hasilnya akan seperti ini


Dapet potongan flag, tapi cuma formatnya doang sih kalo itu :3
Setelah itu, coba tamper requestnya pake burp suite, lalu action send to repeater, hasilnya seperti ini


Hmm, sama aja. ngga ada yang terlihat menarik. Lalu coba lihat source code halamanya. Nah, ketemu sesuatu yang menarik. Ada file backup dari APInya.


Langsung coba akses ke situ, dan ternyata file backup terunduh. Sekarang kita coba analisa (sok-sokan aja sih :v) APInya, isinya kurang lebih seperti ini


Hmm, jika diliat dibagian atas terlihat bahwa nilai dari server adalah nilai random yang berada di range antara nilai tebakan dan nilai tebakan dikali 2. Kemudian jika ingin menampilkan flag maka nilai dari tebakan harus lebih besak daripada server, nah caranya gimana coba? :3

Nah, disini saya berpikir karena nilainya randomnya itu dalam bentuk integer (ya, karena ada tulisan int di fungsi random :3) maka dia hanya mengambil nilai bilangan bulat saja, bukan bilangan desimal. Paham kan? :v Jadi misal kita masukin nilai 0.1 yang dibaca itu cuma 0, 1 nya ngga dibaca. Kalo gitukan berarti nilai 0.1 > 0 kan? Langsung coba aja deh masukin nilainya.


Tadaaa, ternyata benar sesuai analisaku (mungkin sih :v) muncul flagnya. Yeay :D

Final flag : ISCC2019{Anyway_Beware_OF_==_in_PHP_They_are_Like_KpopWomen_Cute_But_Tricky}

Nb: Sebenernya penulis ngga yakin kenapa flagnya bisa muncul. Bagi yang lebih paham mungkin bisa tinggalkan komen dibawah ya. Terima Kasih :)


Share:

Write Up IndoSecurity Ctf 2019 -Tap tap tap-

Assalamualaikum, teman-teman. Masih lanjut write up untuk soal dari indosecurity ctf 2019 kali ini soalnya kategori web.

Langsung saja, kita diberikan sebuah halaman web yang isinya seperti berikut


Saya coba mengisi formnya kemudian mencoba klik submit dan cuma muncul tulisan Salah!
Hmm, menarik. Kemudian saya coba tamper requestnya menggunakan burp suite lalu pilih action send to repeater. Klik Go dan dari response muncul ada tulisan Hint!


Hint : [Get-flag] [IndoSecurity] fast, fast and fast

hm, mulai berpikir sejenak. Ah! mungkin maksudnya parameter IndoSecurity diisi dengan value dari Get-flag. Tapi sebelum itu sepertinya value dari Get-flag di encode menggunakan base64, maka kita decode dulu buat dapet nilai aslinya


Oke, sudah dapat nilai aslinya. Masukin nilai itu ke parameter IndoSecurity dan Klik Go lagi. Lalu hasilnya muncul seperti ini



Hm, seperti sudah bener. Tapi harus lebih cepat lagi masukin nilainya. Hmm, aku coba klik Go lagi dan ternyata nilai Get-flagnya ganti lagi :3


Haduu, kalo harus decode dan masukin nilainya lagi secara manual ngga bakal bisa lebih cepet lagi dong :3 Jadi sekarang kita coba bikin script untuk melakukan request ke server yang secara otomatis mengambil nilai dari Get-flag kemudian men-decodenya lalu memasukkannya ke parameter IndoSecurity. :D

Oke, disini aku pake python untuk bikin script request sederhana ke server yang isinya kurang lebih seperti ini


Nah, simple kan? Silahkan pahami sendiri fungsi setiap barisnya :v
Langsung aja kita jalankan script pythonnya, tunggu sejenak dan Taaadaaaa :D


Muncul flagnya :D

Final flag :  ISCC2019{d55198561eac5c7a8c5bf202a8ebe29f}
Share:

Write Up IndoSecurity Ctf 2019 -crack_me_please-

Assalamualaikum teman-teman, setelah sekian lama tidak nulis write-up ctf akhirnya sekarang bisa nulis lagi yeay :D

Langsung aja kita bahas soalnya, jadi soal kali ini merupakan soal kategori forensik dengan judul "crack_me_please", diberikan sebuah file dengan nama "crack_me_please.7z".


Langsung saja extract itu filenya kemudian didapatkan 2 file yaitu, ok.zip dan takut lupa.pdf


Setelah itu saya coba extract file ok.zipnya, dan ternyata butuh password untuk extractnya


hmm, heran padahalkan ngga dikasih password tapi kok butuh password. Setelah itu saya coba cek isi dari file takut lupa.pdf. Ternyata isinya banyak sekalian string yang tidak jelas dan jumlahnya sangat banyak sekali, sampai 400-an halaman :O


hmm, setelah itu kepikiran mungkin isi dari file pdf itu adalah wordlist untuk bruteforce password untuk file ok.zip :D
Tapi sebelum itu kita convert dulu file pdfnya jadi txt biar lebih gampang diolah.


Selanjutnya buat aja script sederhana untuk bruteforce password ok.zip menggunakan wordlist file takut lupa.txt.Berikut isi scriptnya :


Setelah itu jalankan scriptnya dan tunggu beberapa saat. kemudian setelah file ok.zip berhasil, muncul 2 file baru yaitu flag.zip dan hai.png, yeay :D


Langsung saja tanpa basa-basi extract file flag.zip, tapi ternyata diberi password lagi T_T


Lalu saya coba buka file hai.png dan berharap isinya adalah passwordnya


Tapi ternyata isinya cuma tulisan hai -,- hmm, setelah berpikir beberapa saat, dapet ide buat liat string dari file hai.png, dan ternyata benar isinya sebuah wordlist lagi untuk bruteforce password file flag.zip


Langsung saja simpan isi string dari hai.png ke dalam sebuah file txt.


Setelah itu, kita pakai lagi script yang sudah dibuat tadi dengan sedikit penyesuaian nama filenya, sehingga hasilnya jadi seperti ini


Langsung aja jalanin script dan tunggu beberapa saat, dan akhirnya file flag.txt berhasil diekstrak, yeayy! :D
Coba buka file flag.txt dan berharap muncul string flagnya. Tapi ternyata hasilnya seperti dibawah ini T_T


Astagaaa, ini soal kok gini amat ya T_T
Oke, saya rasa ini perjuangan terakhir jadi ayo semangat! :D
Jika dilihat lihat dari string ini kemungkinan adalah md5hash, langsung saja saya cari md5hash online untuk melakukan decrypt md5hash ini. Dan akhirnya Taddaaaaa, flagnya muncul juga :")


IYA, SAMA-SAMA :V

Final flag : ISCC2019{makasih_udah_di_crack}

Share: