RTLxHA CTF 21 Write-Up

InersIn
4 min readAug 2, 2021

RTLxHA CTF 21 ini berjalan selama 1 hari 12 jam, dimulai pada tanggal 2021–07–31 05:00:00 (UTC) sampai dengan Tanggal 2021–08–01 17:00:00 (UTC). Pada deskripsi event pada ctftime.com mereka mengatakan ini ada sebuah CTF yang mudah, tapi jujur challenge yang diberikan tidak lah mudah, saya hanya berhasil menjawab 5/24 challenge.

Web

  1. Basic
Web-Basic-10pt

Pada challenge ini cukup mudah, ini adalah sebuah challenge SqlInjection.

Saya hanya melakukan basic injection dan berhasil mendapatkan flagnya.

admin' OR 1=1-- -

FLAG: RTL{b@s1c_5ql}

Crypto

  1. Welcome.
Crypto-Welcome-5pt

Saya hanya melakukan decoding terhadap Base64 yang diberikan.

echo -ne "UlRMe0g0VkVfRlVOX1BMNFkxTkchfQ==" | base64 -d

FLAG: RTL{H4VE_FUN_PL4Y1NG!}

2. Triangle.

Pada challenge ini saya baru saja mempelajarinya dari event sebelumnya yang saya ikuti dan juga belajar dari teman saya, ini sebenarnya challenge yang mudah jika mengetahui bagaimana cara kerja dari XOR terhadap string.

Jika kita melakukan XOR pada sebuah nilai, maka akan menghasilkan sebuah nilai dan hasil tersebut jika kita XOR kembali pada salah satu angka yang di XOR sebelumnya makan akan menghasilkan angka yang lainnya :”D cukup memusingkan jika hanya dari kata-kata hehe.

Berikut contoh dengan anggapan A adalah key nya, B adalah plain numbernya dan C adalah number yang di encode

>>> A^B=C #Plain number di encode menjadi C
>>> C^B=A #Mencari Key dengan meng-XOR encoded number dan plain number hasil tersebut akan menghasilkan Key
>>> A^C=B #Mencari plain number dengan meng-XOR encoded number dan Key

Dengan formula diatas maka kita bisa mencari key dari encoded flag nya, tetapi XOR pada string sedikit berbeda dengan meng-XOR pada sebuah number, key dan plain text akan melakukan iterasi dan akan meng-XOR sesuai dengan index nya.

key="ABCD"
plainText="test"
XOR:
key[n]^plainText[n] # "A"^"t", "B"^"e"...

Lalu bagaimana pada challenge ini yang hanya memiliki 4 bytes key untuk meng-XOR string yang lebih panjang dari keynya? Sebenarnya key dalam xor ini adalah sebuah hal yang relatif pada string mana yang lebih pendek dari string satunya, Contoh.

# Contoh 1
a="make it simple"
b="test"
# Contoh 2
a="abcd"
b="plain"

Maka pada contoh 1 yang akan menjadi key adalah string b, sedangkan pada contoh 2 yang akan menjadi key adalah string a. Karena masing-masing string akan melakukan iterasi satu sama lain, jadi yang lebih pendek akan berulang sampai string yang lebih panjang habis.

a="abcd"
b="plaintext"
b[n]^a[n]"p"^"a"=int(17)
"l"^"b"=int(14)
"a"^"c"=int(2)
"i"^"d"=int(13)
--------- string a sudah habis dan kembali dari index 0
"n"^"a"=int(15)
"t"^"b"=int(22)
"e"^"c"=int(6)
"x"^"d"=int(28)
--------- string a habis lagi dan kembali lagi dari index 0
"t"^"a"=int(21)

Jadi dengan menggunakan teori tersebut, kita bisa mendapatkan 4 bytes key pada challenge ini, kita mengetahui format dari flag jadi kita sudah mendapatkan 2 parameter yang dibutuh kan untuk melakukan reverse pada encoded flag nya yaitu encoded stringnya dan plain textnya meskipun hanya 4 karakter, saya membuat python script untuk mencari key dan men-decode flagnya.

FLAG: RTL{1_l3rNT_x0R}

Reversing

  1. Bad Developers

Pada challenge ini diberikan sebuah link pastebin.

Disini terlihat simple hanya mengecek string yang diinputkan, tetapi jika di perhatikan, banyak input yang saling terhubung satu sama lain dalam melakukan pengecekan, jadi disini saya memanfaatkan python z3 module untuk menyelesaikan challenge ini, dan berikut scriptnya.

FLAG: RTL{D0NT_D0_TH1S}

2. Dinined

Untuk challenge ini akan dibuatkan tersendiri karena akan sangat panjang jika dijadikan satu. Baca Disini

--

--

InersIn

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