DownUnder CTF 2020 Write-Up

DownUnderCTF is a online world-wide Capture The Flag (CTF) competition targeted at Australian secondary and tertiary students though is open to everyone to compete. Its main goal is to try to up-skill the next-generation of potential Cyber Security Professionals, as well as increase the size of the CTF community here in Australia. This event is a cross collaboration between 13 different Cyber Security Societies around the country trying to make a difference in the Cyber Security community by providing a national cyber security competition within Australia, which is also open to the world.

Pwn

1. Shell this!

Diberikan 2 buah file, 1 file source code dan 1 file executable, disini saya langsung membuka source code nya.

Seperti yang bisa dilihat kita bisa menggunakan Buffer Overflow attack karena disini program menggunakan function gets, kemudian input kita di simpan kedalam variable name dengan max 40 char, jadi disini targetnya adalah merubah return address menuju function get_shell yang dimana function ini yang akan memberikan kita shell pada server, mari kita coba lihat pada gdb.

Pada main hanya memanggil function vuln yang dimana kita dapat melakukan overwrite terhadap return address dan mengubahnya ke function get_shell

Baik mari kita coba pasang breakpoints pada vuln+44, dan kita perhatikan return address dari program ini.

Seperti inilah tampilan jika kita meng-inputkan data dengan benar, mari kita coba untuk membuat program mengalami SIGSEV.

Perhatikan pada register RSP disini address nya berubah menjadi 0x41414141 yang dimana ini adalah bentuk hex dari “A”, dan jika kita lakukan Step Intruction, maka register RIP akan menjadi 0x41414141 dan kita lanjutkan program, program akan mengalami SIGSEV.

Program mengalami SIGSEV karena program berusaha mengaksess address 0x41414141, disini saya menemukan jika ingin melakukan overwrite pada return address kita perlu memasukan char sebanyak 56+get_shell address, berikut formatnya

"A"*56+get_shell

dan berikut exploitnya.

#!/usr/bin/env python2
from pwn import *
r = remote("chal.duc.tf",30002)
b = ELF("./shellthis")
get_shell = p64(b.sym.get_shell)
payload = "a"*56
payload += get_shell
r.recvline()
r.sendline(payload)
r.interactive()

Jika kita jalankan kita akan mendapatkan shell.

Flag: DUCTF{h0w_d1d_you_c4LL_That_funCT10n?!?!?}

Web

1. Leggos

Mari kita buka link yang diberikan.

Seperti berikut tampilan web tersebut, dan disini saya melakukan enumeration awal dengan mencoba membuka robots.txt dan page source, namun saat saya mencoba membuka page source dengan shortcut Ctrl+U web menampilkan Not Allowed

Jadi saya berpikir mungkin ada javascript di html atau ada file javascript yang diload, jadi saya buka dev tools dengan shortcut F12, ternyata benar ada javascript yang melarang beberapa key pada keyboard, disini saya membuka tab debugger dan menemukan javascript file yang diload, dan disana lah flagnya tersimpan.

Flag: DUCTF{n0_k37chup_ju57_54uc3_r4w_54uc3_9873984579843}

Misc

1. Twitter

Ini bisa dianggap sebagai free flag, karena kita hanya perlu membuka twitter official penyelenggara, dan mendecode text tersebut.

Flag: DUCTF{https://www.youtube.com/watch?v=XfR9iY5y94s}

2. Welcome

Pada challenge ini kita hanya perlu connect ke ssh tapi saat kita terkonek, kita hanya ditampilkan tampilan python curse.

Seperti berikut tampilannya, jadi disini saya berpikir untuk me-redirect output kedalam file dan mencari flagnya pada file tersebut.

ssh ductf@chal.duc.tf -p 30301 > may_flag.txt

dan kita berhasil mendapatkan flagnya.

DUCTF{w3lc0m3_t0_DUCTF_h4v3_fun!}

3. 16 Home Runs

Challenge ini cukup mudah kita hanya perlu mendecode strings yang diberikan dengan base16.

encode: RFVDVEZ7MTZfaDBtM19ydW41X20zNG41X3J1bm4xbjZfcDQ1N182NF9iNDUzNX0=

dan kita pun mendapatkan flagnya

Flag: DUCTF{16_h0m3_run5_m34n5_runn1n6_p457_64_b4535}

Reversing

1. Formatting

Pada challenge ini kita hanya perlu menggrep flag.

strings ./formatting

dan kita pun belum mendapatkan flagnya :P disini ternyata tidak semudah itu, tapi jika kita menggunakan ltrace, kita bisa sedikit melihat flagnya

jadi saya berpikir mungkin flagnya disimpan didalam memory pada saat program berjalan, jadi saya buka program pada gdb, dan mencoba men-dump process pada program.

disini jika ingin men-dump process program harus dalam keadaan running, jadi saya memasang breakpoints pada akhir program jadi keseluruhan data berhasil di load baru saya dump memory yang sudah diload.

Kita pun berhasil men-dump memory, sekarang tinggal kita gunakan strings pada file yang sudah berisikan memory dari program.

strings ./may_flag

dan kita pun mendapatkan flagnya.

Flag: DUCTF{d1d_You_Just_ltrace_296faa2990acbc36}

2. Added Protection

Disini kita diberikan 1 buah file executable, pada challenge kali ini cukup mirip pada challenge Formatting.

Mari kita buka program pada gdb, dan men-dump memory, karena jika kita gunakan ltrace, kita bisa perhatikan program melakukan memcpy terhadap flag.

Disini saya memasang breakpoints pada saat program sudah melakukan memcpy pada flag, seperti sebelumnya kita perlu menjalankan program terlebih dahulu.

Setelah itu saya buka file core menggunakan hexeditor, dan mencari format flag DUCTF.

Jika diperhatikan kita sudah berhasil “menemukan” flagnya, tinggal kita tulis ulang dan kita pun berhasil mendapatkan flagnya.

Flag: DUCTF{adv4ncedEncrypt3dShellCode}

Crypto

1. rot-i

Challenge ini cukup mudah, disini kita diberikan 1 file yang berisikan text yang terencrypt menggunakan rot, tapi disini kita tidak tahu rot berapa digunakan.

Ypw'zj zwufpp hwu txadjkcq dtbtyu kqkwxrbvu! Mbz cjzg kv IAJBO{ndldie_al_aqk_jjrnsxee}. Xzi utj gnn olkd qgq ftk ykaqe uei mbz ocrt qi ynlu, etrm mff'n wij bf wlny mjcj :).

kita sudah tau format flagnya yaitu DUCTF, jadi kita hanya perlu mencari tahu berapa shift yang digunakan untuk me-encrypt char tersebut, disini saya menemukan pada char D mulai menggunakan shift 5, dan bertambah seterusnya, jadi saya membuat python program untuk mendecrypt flagnya, berikut scriptnya.

#!/usr/bin/env python3.8
import sys
alpha = [chr(x) for x in range(0x41,0x5b)]
flag_enc="ndldie_al_aqk_jjrnsxee"
i=11
for x in flag_enc:
for j in range(alpha.__len__()):
if i > 26:
i=1
if alpha[j] == x.upper() or x == "_":
if x != "_":
print(f"{alpha[j-i].lower()}",end="")
break
print("_",end="")
break
i+=1

dan jika kita jalankan berikut result nya

tinggal kita sesuaian dengan formatnya, kita pun mendapatkan flagnya.

Flag: DUCTF{crypto_is_fun_kjqlptzy}

Forensics

1. On the spectrum

Disini kita diberikan 1 file berupa audio file, disini saya langsung membukanya menggunakan Sonic Visualizer.

saya langsung melihat spectrum audionya karena sudah diberikan clue pada nama challenge, disini jika kita perhatikan tidak ada apa apa yang tersembunyi, kemudian saya coba tambah spectogram dengan Shift+G

kita perhatikan pada bagian bawah terdapat samar samar orange, kita zoom dan ubah warna nya, jadi seperti berikut.

kita sudah bisa melihat flagnya tinggal kita ubah sedikit pada bar kanan.

Tapi saya masih kurang bisa membaca flagnya DUCTF{m4by3_n0t_s0_hidd3n} dan ini masih kurang tepat, dan saya pun mencoba untuk meng-screenshot spectrum menjadi 2 dengan color yang berbeda.

dan saya membukanya dengan stegsolve dan menggunakan image combiner, jadi sebagai berikut

jika kita perhatikan DUCTF{m4by3_n0t_s0_hidd3n} bukanlah char “i” melainkan angka 1, dan kita pun mendapatkan flagnya.

Flag: DUCTF{m4by3_n0t_s0_h1dd3n}

2. Hide-And-Seek

Disini kita diberikan sebuah file dengan ukuran 3.1GB, dan file tersebut adalah sebuah file virtualbox, jadi saya berfikir mungkin kita perlu menginstall image ini menggunakan virtualbox untuk mendapatkan flag, pasti kalian berpikir demikian, tapi karena saya itu malas jadi saya mencoba untuk mengambil jalan pintas (saya tidak tau apa memang ini cara untuk mendapatkan flag yang benar atau tidak) saya mencoba untuk menganalisis file tersebut satu persatu dan mencoba pada file pada directory Snapshot.

Saat saya melakukan strings pada file .sav saya berhasil mendapatkan setengah flagnya XD, jadi saya buka file .sav dengan vim.

dan saya pun mendapatkan flagnya dengan kebetulan XD (Rezeki anak soleh) saya tidak tau apakah saya bisa menemukan flagnya jika saya menginstallnya pada virtualbox, karena disini tidak banyak yang berhasil mengsolve nya, dan dengan keberuntungan saya menjadi yang ke-2 yang berhasil meng-solvenya

Flag: DUCTF{w3_R_4bs0lute_pr3d4t0rs}

Baik sekian, berharap lebih baik kedepannya. Silahkan komen jika kalian ingin bertanya.

PARSECT // IT Security Enthusiast // STOICISM // KEEP DO SOMETHING LEGAL

PARSECT // IT Security Enthusiast // STOICISM // KEEP DO SOMETHING LEGAL