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:

[Write Up] IDCC 2018 Crypto -DecryptME- 50pts

Assalamu'aikum teman-teman :)
Kali ini saya akan berbagi Write Up dari salah satu soal di IDCC Ctf 2018 yang baru saja berakhir. Selamat membaca~
Langsung saja soal kali merupakan soal Crypto. Diberikan sebuah file yang berisi string flag yang sudah di enkripsi dan program yang digunakan untuk enkripsi kedua file tersebut bisa didownload disini.

Pertama, kita lihat dulu program yang digunakan untuk mengenkripsi, kira-kira seperti ini.
Serta untuk hasil enkripsi flagnya adalah seperti ini:
Tugas kita adalah untuk mendekripsi string tersebut supaya bisa mendapatkan flagnya. Nah, karena proses dekripsi merupakan kebalikan dari proses enkripsi maka untuk mendekrip string tersebut kita memprosesnya secara terbalik.
Dilihat dari proses paling akhir yaitu mengubah nilai integer menjadi huruf. Maka langkah pertama untuk mendekripnya adalah mengubah setiap huruf dari string yang kita dapat menjadi bentuk integernya. Nilai integer itu didapat dari nilai var teks dan var kunci di modulo 127. Modulo disini bisa juga diartikan sebagai pengurangan. Maka jika pengurang dibalik hasilnya harus ditambah. Jadi integer yang sudah kita dapat ditambah dengan 127.

Sekarang nilai integernya merupakan jumlah dari nilai var teks dan var kunci. Disini saya mengguakan program  seperti dibawah ini untuk mendapatkan nilai integernya:
Hasilnya:
Langkah selanjutnya kita harus melakukan proses bruteforce untuk bisa mendapatkan nilai dari kunci. Sedangkan untuk nilai dari var teks akan menjadi parameter pengecekan yang bisa kita tebak dari format flagnya. Dimana format dari flagnya pasti diawali dengan string 'IDCC{', nah kita cek jika kunci yang dimasukkan senilai maka itu kunci jika tidak senilai berarti bukan. Eit, tapi jangan lupa pada awal enkripsi bentuknya diencode dulu menjadi base64. Selanjutnya tambahkan beberapa baris script baru untuk mengecek key pada program yang sudah kita buat sebelumnya:
Hasil kuncinya:
Sekarang kita sudah mendapatkan nilai dari kunci. Saatnya melakukan dekripsi dari string flag yang sudah dienkripsi.Caranya adalah dengan mengurangi setiap nilai integer dari string enkripsi dengan kunci secara berulang kemudian diubah menjadi huruf lalu didecode base64. Kenapa dikurangi? Karena pada saat proses enkripsi ditambah. Kira-kira beginilah bentuk program untuk mendekripsinya:

Hasilnya adalah flag:

Flag : IDCC{S1mpl3_4nd_stR4ight}

Sekian, terima kasih sudah menyimak sampai akhir. Silakan berikan kritik & saran kepada penulis, karena penulis juga masih belajar. :)
Share:

[Write Up] IDCC 2018 Binary Exploit -Format Playing- 50pts

Assalamu'aikum teman-teman. :)
Kali ini saya akan berbagi Write Up dari salah satu soal di IDCC Ctf 2018 yang baru saja berakhir. Selamat membaca~
Langsung saja soal kali merupakan soal Binary Exploit. Diberikan sebuah service pada server dan program ELF 32-bitnya  yang bisa didownload disini.

Langkah pertama yang dilakukan langsung saja lakukan reversing menggunakan IDA Pro. Lalu lihat pada bagian pseudocodenya. Kira-kira akan tampil seperti ini:

Bisa dilihat dari hasil diatas, inputan akan dibaca menggunakan scanf yang dibatasi hanya membaca inputan sepanjang 128 char. Program akan menampikan string "Congratulions!" dan Flag jika nilai dari variabel secret adalah 48879. Jika tidak maka program hanya akan menampilkan nilai dari variabel secret dan string "hahaha... shame". Nah, sekarang kita tahu bahwa tujuan dari soal ini adalah mengubah nilai dari variabel secret menjadi nilai tertentu yang pada kesempatan kali ini bernilai 48879. Tapi, dari inputan yang disediakan tidak bisa untuk mengubah nilai dari variabel secret. Bagaimana caranya ya? hm, Kita coba jalankan dulu servicenya pada sisi server.
Terlihat bahwa input yang kita masukkan akan ditampilkan ulang oleh program. Hm, bagaimana kalau kita coba memberi inputan lebih dari 128?
Hm, ternyata yang tampilkan tetap saja 128 char awal yang kita masukkan. Hm, setelah melihat ulang hasil reverse dari IDA Pro tadi seksama ternyata pada bagian scanf hanya memberikan batas inputan yang dibaca, tapi menentukan jenis inputan atau format dari masukkan. Nah, ini bisa dimanfaatkan untuk melakukan exploit menggunakan celah itu yang disebut format vulnebilities. Jadi kita bisa menentukan sendiri jenis format yang ingin dimasukkan yang kemudian ditampilkan oleh program. Untuk mengeceknya apakah benar service ini memiliki celah tersebut kita coba masukkan %x untuk menampilkan nilai hexadecimal, yang jika dimasukkan seharusnya menampilkan alamat memory dari service. Langsung saja kita coba.
Nah, seperti dugaan kita sebelumnya ternyata benar bahwa service ini mempunyai format vulnebilities. Selanjutanya kita cari alamat memory yang akan menampung inputan kita. Caranya dengan memasukkan beberapa huruf yang diikuti dengan beberapa %x. Kali ini saya menggunakan python agar lebih mudah membuat payloadnya.

Bisa dilihat pada saat saya memasukkan 4x huruf 'A' yang diikuti 7x "%x " pada bagian akhir muncul nilai 41414141 yang merupakan bentuk hexadecimal dari huruf 'A'. Nah, sekarang kita sudah dapat posisi alamat memory yang menampung inputan kita. Selanjutnya adalah kita ubah inputan kita dengan alamat memory dari nilai variabel secret, karena kita akan mengubah nilai variabel tersebut. Cara mencarinya gunakan perintah pada linux 'objdump -t format_playing' lalu akan muncul alamatnya seperti dibawah ini:
Nah, terlihat bahwa alamat dari variabel secret adalah '0804a034'. Sekarang kita ubah inputan kita yang tadinya 4x 'A' menjadi  alamat itu. Kita gunakan python lagi, lalu karena nilai dari alamat memory menggunakan little endian maka tulisan dibalik. Langsung saja kita coba lagi.
Nah, pada bagian akhir sekarang sudah muncul alamat memory dari variabel secret, sekarang kita coba ubah nilai dengan cara mengubah '%x' yang terkahir menjadi '%n'. Seharusnya sekarang nilai dari secret berubah.
Seperti yang kita harapkan sekarang nilai dari variabel secret sudah berubah, tapi nilainya belum sesuai dengan yang diinginkan. Kita bisa mengaturnya dengan cara memberikan nilai pada '%x' yang mana nilai tersebut adalah pengurangan dari nilai yang diinginkan dengan nilai yang sekarang. Maka 48879 - 43 = 48836. Sekarang kita coba udah nilainya.

Nilai dari secret sudah berubah, tapi masih belum sesuai. yang mana sekarang selisih nilainya tinggal 9. Kita tambahkan saja dengan nilai sebelumnya menjadi 48845. Sekarang kita coba lagi.

Sudah muncul tulisan Congratulations!, coba kita scroll ke atas maka akan muncul flagnya.
Flag : IDCC{M4nipulat1n9_F0rm4t_for_pR0f1T_$$$}

Sekian, terima kasih sudah menyimak sampai akhir. Silakan berikan kritik & saran kepada penulis, karena penulis juga masih belajar. :)

Share: