Write Up Bamboofox CTF

Rio Darmawan
8 min readAug 21, 2019

--

https://bamboofox.cs.nctu.edu.tw/

hallo :) saya mau share wu dari platfrom bamboofox , ini bagus banget buat belajar ctf , banyak kategori soalnya juga. so buat yang mau coba main ctf ini recommended banget kalian belajar disini. cuman sayangnya pake bahasa mandarin haha. pinter2 kalian aja deh ngebaca tulisanya.

[Crypto] String?!?! [10]

Desc : What’s this?!?!
6977474849644033764480372870271051917784936723179043887694767601277

ini adalah soal jenis cryptography , untuk mempermudah kamu mendefinisi ini crypto jenis apasih ? kamu bisa akses disini. setelah itu masukan encrypted message nnti terdefinisi itu crypto jenis apa, setelah saya masukan ternyata soal diatas merupakan decimal. lanjut ke step berikutnya , kita ubah decimal ini , pertama saya coba dulu merubah decimal ini kedalam bentuk binary namun setelah di ubah lagi dari binary ke text saya tidak menemukan apapun. saya lanjut ubah dari decimal ke hex . setelah saya ubah dari hex ke text saya menemukan flagnya. untuk merubah hex ke text kalian bisa akses disini.
Flag:BAMBOOFOX{1tIsDeCimal5trin6}

[Crypto] Railfence [50]

Desc : Wave, wave and wave~~~
BfOAu1ONM0nOGBydOROnLOaOaOOiFCOOlO{OOSXO}

sudah dapat dilihat bahwa ini adalah soal cryptography , dan cluenya juga sangat jelas bahwa ini railfence cipher atau zigzag cipher sama aja. untuk mendecode text yang di encode cukup menggunakan decoder online , kalian bisa akses disini.
Flag : BAMBOOFOX{Cany0uf1ndLOOOOOOOOOOOONGRailS}

[Crypto] Caesar [10]

Desc : caesar is smart!
ONZOBBSBK{LbHXAbjpNRFNEQBaglBH}

ini soal cryptography juga, namun menggunakan caesar cipher , kalian bisa akses decodernya disini.
Flag:BAMBOOFOX{YoUKNowcAESARDOntyOU}

[Crypto] Base64 [10]

Desc : Base64 is very useful
QkFNQk9PRk9Ye0JhU0U2NF9hLXpBLVowLTkrLz19

soal crypto lagi , kalian bisa menggunakan decoder online lagi , akses decodernya disini.
Flag:BAMBOOFOX{BaSE64_a-zA-Z0–9+/=}

[Crypto] String?!?!?! [10]

Desc: What’s this?!?!?!
100001001000001010011010100001001001111010011110100011001001111010110000111101100110000001100000011000001100010010010010110111000110100011100100111100100110000001100000011000001111101

sudah dapat disimpulkan ini adalah biner, nah yang harus kita lakukan sekarang mengubah biner ini kedalam text , menggunakan decoder online akses decodernya disini.
Flag:BAMBOOFOX{000bIn4ry000}

[Crypto] Brainfuck [50]

Desc: karna terlalu banyak saya pastekan dipastebin soalnya akses disini.

aneh bukan? haha sesuai namanya brainfuck. bikin pusing yang liatnya haha tapi tenang, ada decoder onlinenya akses disini.
Flag:BAMBOOFOX{h0w_T0_r3ad_brAlnfXXxxk}

[Crypto] JSFuck [50]

Desc:
FXXK!!!
Is it javascript?!

File : Secret

silahkan di download dulu, lalu liat source codenya. mirip brainfuck kan ?

Source code secret

bikin pusing haha. but sans , ada decodernya kok hehe click disini.
Flag:BAMBOOFOX{FXXKJSFuck}

[Crypto] Random [100]

Desc : How to generate random seed is important

File : sorandom.py

kalian download file python nya, step selanjutnya kalian hanya perlu membaca logika dari source codenya. kita bedah sedikit2 hehe.

pertama bisa kita lihat dibagian bawah terdapat komentar berisi

# Unguessably Randomized Flag: BNZQ:KLRXRNLXL{1_W8FF0Y_t0ic7l9_m5p_ruKo_vbjUOH}

kita asumsikan bahwa itu adalah text yang terenkripsi. lanjut ke step berikutnya

original source code

bisa dilihat diatas , bahwa perintah itu adalah untuk membuka file bernama flag lalu membacanya. disini saya kasih sedikit trick , kita hapus/comment menggunakan # , lalu membuat variable temporary untuk menggantikan perintah tersebut , jadi kita tidak harus membuat dan memasukan text terenkripsi kedalam file flag.

edited sourcode

coba kalian jalankan , menggunakan python. flag tidak keluar bukan??? karna logika source code dari problem setter hanyalah untuk mengencrypsi bukan untuk mendecrypt. jadi kitaperlu ubah sedikit lagi logikanya.

edited logic process

ini hasil setelah file dijalankan.

Flag:BAMBOOFOX{1_C4NN0T_b3li3v3_y0u_haCk_ranDOM}

[Crypto] Substitution [50]

Desc :

There are some magic words, can you break it?

Uk emwjcsdmgjpw, g ztfzcuctcusk eujphm uz g ahcpsq sv hkesqukd fw npuep tkucz sv jygukchoc gmh mhjygehq nucp eujphmchoc, geesmqukd cs g vuohq zwzcha; cph “tkucz” agw fh zukdyh yhcchmz (cph aszc esaask), jgumz sv yhcchmz, cmujyhcz sv yhcchmz, auoctmhz sv cph gfslh, gkq zs vsmcp. Cph mhehulhmqheujphmz cph choc fw jhmvsmaukd cph uklhmzh ztfzcuctcusk. FGAFSSVSO{w0t_4mh_Ds0q_gC_Ztfzcuctcusk}
Ztfzcuctcusk eujphmz egk fh esajgmhq nucp cmgkzjszucusk eujphmz. Uk g cmgkzjszucusk eujphm, cph tkucz sv cph jygukchoc gmh mhgmmgkdhq uk g quvvhmhkc gkq tztgyyw btuch esajyho smqhm, ftc cph tkucz cphazhylhz gmh yhvc tkepgkdhq. Fw eskcmgzc, uk g ztfzcuctcusk eujphm, cph tkucz sv cph jygukchoc gmh mhcgukhq uk cph zgah zhbthkeh uk cph eujphmchoc, ftc cph tkucz cphazhylhz gmh gychmhq.
Cphmh gmh g ktafhm sv quvvhmhkc cwjhz sv ztfzcuctcusk eujphm. Uv cph eujphm sjhmgchz sk zukdyh yhcchmz, uc uz chmahq g zuajyh ztfzcuctcusk eujphm; g eujphm cpgc sjhmgchz sk ygmdhm dmstjz sv yhcchmz uz chmahq jsywdmgjpue. G asksgyjpgfhcue eujphm tzhz vuohq ztfzcuctcusk slhm cph hkcumh ahzzgdh, nphmhgz g jsywgyjpgfhcue eujphm tzhz g ktafhm sv ztfzcuctcuskz gc quvvhmhkc jszucuskz uk cph ahzzgdh, nphmh g tkuc vmsa cph jygukchoc uz agjjhq
cs skh sv zhlhmgy jszzufuyucuhz uk cph eujphmchoc gkq lueh lhmzg.

kita dikasih soal cerita yang terenkripsi menggunakan subtitution cipher, mari kita decrypt ceritanya menggunakan decoder online akses disini. dari hasilnya kita bisa melihat terdapat flag di tengah2 textnya.
Flag : BAMBOOFOX{Y0u_4re_Go0d_aT_Substitusi}

[Crypto] String?! [10]

Desc : What’s this?!
42414d424f4f464f587b484558746f4153434949697345415353535353597d

disini saat saya melihat soal , langsung saya asumsikan bahwa ini adalah hexadecimal , lalu saya pecah menjadi 2 digit lalu saya decrypt kedalam text menggunakan decoder online bisa anda akses disini.
Flag:BAMBOOFOX{HEXtoASCIIisEASSSSSY}

[Crypto] RSA [50]

Desc : Given the encrypted number e=150815, d = 1941, and N = 435979, what is the decrypted number?

Put the number in BAMBOOFOX{…}

ini adalah basic dari RSA , apa itu RSA? RSA adalah salah satu teknik kriptografi dimana kunci untuk melakukan enkripsi berbeda dengan kunci untuk melakukan dekripsi.

dalam soal ini kita sudah diberi 3 buah variable yang berisi angka. untuk mengerjakan basic RSA ini kita hanya perlu fungsi pow pada matematika dan pow sendiri merupakan operator aritmatika perkalian suatu nilai dengan dirinya sendiri sebayak jumlah pemagkatnya.

RSA

dan setelah dijalankan kita mendapatkan hasil akhir dari pemangkatnya.

dan kita masukan hasilnya kedalam flag
Flag:BAMBOOFOX{13337}

[Rev] be-quick-or-be-dead-1 [200]

Desc : You find this when searching for some music, which leads you to be-quick-or-be-dead-1. Can you run it fast enough? You can also find the executable in /problems/be-quick-or-be-dead-1_3_aeb48854203a88fb1da963f41ae06a1c.
From 2018 picoCTF
flag: picoCTF{…} remove the hash value

File : be-quick-or-be-dead-1

kali ini kita mengerjakan soal Reverse engineering,ok kita lanjut mengerjakan soal diatas, ini sedikit sulit saya pun masih awam mengenai assembly but kita perlu program pendukung disini disassembler software dan debugging software.
saya disini menggunakan IDA Pro. ok langsung kita buka file yang diberikan menggunakan IDA Pro.

hasil compile program menggunakan IDA Pro kedalam bahasa C

bisa kita lihat diatas , sudah terlihat bahwa ada fungsi yang bernama print_flag() tetapi harus melewati set_timer() dan get_key() terlebih dahulu agar print_flag() berjalan mari kita lihat ada apa didalam set_timer , get_key dan print_flag.

logika program yang ada didalam fungsi set_timer
logika program yang ada didalam fungsi get_key
logika program yang ada didalam fungsi print_flag

bisa kita simpulkan sebelum mendapatkan print_flag , kita perlu menjalankan fungsi get_key. nah untuk mendapatkan key kita perlu menjalankan fungsi calculate_key.

logika program fungsi calculate_key

di soal kali ini kita tidak perlu merubah apapun , kita hanya perlu melewati fungsi set_timer untuk mendapatkan flag. ok lanjut kita jalankan file yg sudah diberikan menggunakan gdb(untuk penjelasan mengenai fungsi dan apa itu gdb kalian bisa cari sendiri di google.)

running program menggunakan gdb

kita masukan command b main atau break main. yang fungsinya untuk mereset break point. setelah di break langsung kita run programnya menggunakan command run

setelah program berjalan , kita panggil fungsi key menggunakan command call (int)get_key() atau call get_key(). seperti penjelasan diatas untuk mendapatkan print_flag kita perlu menjalankan fungsi get_key terlebih dahulu. setelah get_key dijalankan lalu kita panggil fungsi print_flag

we got the flag

aww we got the flag dude hehe, sebelum memasukan flagnya kita lihat di desc soal, bahwa kita perlu menghapus hash terlebih dahulu 27f28e71.
Flag : picoCTF{why_bother_doing_unnecessary_computation}

PWN-100 [100]

desc :nc bamboofox.cs.nctu.edu.tw 22001
FLAG 在 /home/ctf 底下

歡迎來到 PWN 的世界
恩…這題就是 buffer overflow 的基礎簡單入門題
有哪邊不會可以來我們在 HITCON 的攤位問問題喔
會的人應該 1 分鐘就解完了吧?
恩我廢話好多喔…
總之就是想辦法拿到 FLAG 吧

PS. 下面有提供兩個檔案,左邊的是 binary,右邊的是 C code

File : binary_100 & binary_100.c

kwkwkw seperti yang gw bilang , ini platform pake bahasa mandarin. tapi bisa kebaca lah ya wkwk. lanjuut pertama w download file binary_100(file eksekusi) & binary_100.c(sourcecode bahasa c) nya dulu. kita analisa source codenya dulu. buat ngejalanin file c bisa pake gcc , code block, dev ++, atau apapun yg penting bisa ngecompile.

sourcecode binary_100.c

bisa kita liat char text[40] yang berarti array text hanya bisa menampung isi 40. dan dibawahnya ada integer bernama to_be_overflowed. kita fokus pada logika if(to_be_overflowed == 0xABCD1234 ) system(“/bin/sh”); else puts(“Do You Know How To Bof?”);
jadi logikanya ketika to_be_overflowed sama dengan 0xABCD1234 maka sistem akan mengeksekusi /bin/sh dan jika salah maka akan muncul tulisan “Do You Know How To Bof?”. tapi kenapa harus ada char text[40]? karna to_be_overflowed & char text[40] itu nyatu didalam memory programnya. mari kita buktikan dengan membuka file binary_100 menggunakan IDA Pro.

binary_100 opened with disassembler

di baris ini menunjukan bahwa call gets() adalah parameter dari stack sebelum fungsi tereksekusi. bisa kita simpulkan bahwa ebp+s ini adalah alamat text inputan didalam stack.
nah kalo semua udah jelas tinggal kita buat payloadnya. karna mereka menyatu dan fungsi get gak meriksa seberapa banyak string inputan. maka sebenarnya kita cukup mengetikan huruf sebanyak 40x + 0xABCD1234. akses payloadnya click disini. dan jalankan menggunakan python. setelah dijalankan kita bisa liat bahwa sudah terhubung dengan servernya , kita tinggal mencari dimana letak flagnya, sesuai descripsi diatas bahwa flag berada di /home/ctf/flag

Flag:BAMBOOFOX{PWNNN_ISSS_FUNNN}

mungkin segini dulu write up dari saya, nanti akan saya update seiring saya mensolve soal soal yang ada di bamboofox hehe , terima kasih.

--

--

Responses (1)