[๐Ÿฅˆ Silver 4] 10ยฒยฒ๋…„์งœ๋ฆฌ ์ž ์„ 0.3์ดˆ๋กœ ์ค„์ด๊ธฐ โ€” DreamHack Long Sleep ํ’€์ด (2๋ฒˆ ๋ณด๋ฅ˜ ๋์— ํ•ด๊ฒฐ)

2026-07-21ยท1๋ถ„ ์ฝ๊ธฐยท

[๐Ÿฅˆ Silver 4] 10ยฒยฒ๋…„์งœ๋ฆฌ ์ž ์„ 0.3์ดˆ๋กœ ์ค„์ด๊ธฐ โ€” DreamHack Long Sleep ํ’€์ด (2๋ฒˆ ๋ณด๋ฅ˜ ๋์— ํ•ด๊ฒฐ)

์‹คํ–‰ํ•˜๋ฉด "flag๋ฅผ ์ƒ์„ฑ ์ค‘"์ด๋ผ๋ฉฐ ๋œธ์„ ๋“ค์ด๋‹ค๊ฐ€ ์ ์  ๋” ๊ธธ๊ฒŒ ์ž ๋“œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ. sleep()์ด ์•„๋‹ˆ๋ผ libc ์‹ฌ๋ณผ๋„ ์—†๋Š” raw syscall์ด๋ผ LD_PRELOAD ํ›„ํ‚น์ด ์•ˆ ํ†ตํ•˜๊ณ , ํŒŒ์ผ์„ ํŒจ์น˜ํ•˜๊ฑฐ๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋ฅผ ๊ฑธ๋ฉด ๊ณง๋ฐ”๋กœ "integrity_check(): file has been corrupted"๊ฐ€ ๋œฌ๋‹ค. ์ง€๋‚œ ๋‘ ์„ธ์…˜์€ ์ด ๋‘ ๋ฐฉ์–ด๊ฐ€ ์„œ๋กœ "๊ฐ™์€ ๊ฒƒ"์„ ๊ฒ€์‚ฌํ•œ๋‹ค๊ณ  ์ฐฉ๊ฐํ•ด ๋ง‰ํ˜”๋‹ค. ์‚ฌ์‹ค์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋‘ ์ธต์ด์—ˆ๋‹ค โ€” ํ•˜๋‚˜๋Š” ์ฝ”๋“œ ๋ฐ”์ดํŠธ ์ž์ฒด์˜ ๋ฌด๊ฒฐ์„ฑ, ํ•˜๋‚˜๋Š” ๊ทธ์ € ์‹คํ–‰ ์†๋„. ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ  syscall ์ธ์ž๊ฐ’๋งŒ ๋ฐ”๊พธ๋ฉด ๋‘ ๋ฐฉ์–ด ๋‹ค ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ง€๋‚˜๊ฐ„๋‹ค.

๋ฌธ์ œ: DreamHack โ€” Long Sleep ๋ถ„๋ฅ˜: Reversing ๋‚œ์ด๋„: ๐Ÿฅˆ Silver 4 FLAG: DH{406b2742ffb2a6cac02abb8f303fa12067f8061339979855108ce4a2e38ef558}

์ด ๋ฌธ์ œ๋„ ์„ธ ๋ฒˆ์งธ ์‹œ๋„ ๋งŒ์— ํ’€๋ ธ๋‹ค. ์ง€๋‚œ ๋‘ ์„ธ์…˜์€ ํŒŒ์ผ ํŒจ์น˜, ์†Œํ”„ํŠธ์›จ์–ด ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ, ptrace ๋ ˆ์ง€์Šคํ„ฐ ์กฐ์ž‘์„ ์ˆœ์„œ๋Œ€๋กœ ์‹œ๋„ํ•˜๋‹ค๊ฐ€ ์ „๋ถ€ ๋ง‰ํ˜€์„œ "ํƒ€์ด๋ฐ ๊ธฐ๋ฐ˜ ์•ˆํ‹ฐํ…œํผ์ผ ๊ฒƒ"์ด๋ผ๋Š” ์ถ”์ธก๋งŒ ๋‚จ๊ธฐ๊ณ  ๋ณด๋ฅ˜ํ–ˆ๋‹ค. ์˜ค๋Š˜ ๋‹ค์‹œ ๋ถ™์–ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ œ๋Œ€๋กœ ์ฝ์–ด๋ณด๋‹ˆ, ์• ์ดˆ์— "์•ˆํ‹ฐํ…œํผ๊ฐ€ ํ•˜๋‚˜"๋ผ๋Š” ์ „์ œ ์ž์ฒด๊ฐ€ ํ‹€๋ ค ์žˆ์—ˆ๋‹ค โ€” ์ด ํ”„๋กœ๊ทธ๋žจ์€ ์„œ๋กœ ์™„์ „ํžˆ ๋ฌด๊ด€ํ•œ ๋‘ ๊ฐœ์˜ ๋ฐฉ์–ด๋ฅผ ๊ฒน์ณ ๊ฐ–๊ณ  ์žˆ์—ˆ๋‹ค.


๋ฌธ์ œ ๊ฐœ์š”

์‹คํ–‰ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ํ˜๋Ÿฌ๊ฐ„๋‹ค.

$ ./prob
Wait! I'm generating flag!!
(... ํ•œ์ฐธ ๋ฉˆ์ถค ...)
Here's your flag: DH{...}

file/checksec๋กœ ๋ณดํ˜ธ๊ธฐ๋ฒ•๋ถ€ํ„ฐ ํ™•์ธํ–ˆ๋‹ค. PIE, Full RELRO, ์นด๋‚˜๋ฆฌ, NX, SHSTK/IBT(CET)๊นŒ์ง€ ์ผœ์ง„ ์ตœ์‹  ๋นŒ๋“œ ์กฐํ•ฉ์ด๋‹ค. strings๋กœ ๋ฝ‘์•„๋ณด๋ฉด ์•ž์œผ๋กœ ๋งˆ์ฃผ์น  ๋ชจ๋“  ๋ฌธ๊ตฌ๊ฐ€ ์ด๋ฏธ ๋‹ค ๋‚˜์™€ ์žˆ๋‹ค โ€” "์ƒ์„ฑ ์ค‘" ์•ˆ๋‚ด, flag ์ ‘๋‘์–ด, ๊ทธ๋ฆฌ๊ณ  ์•ˆํ‹ฐํ…œํผ ์‹คํŒจ ๋ฉ”์‹œ์ง€.

file, checksec, strings ์‹คํ–‰ ๊ฒฐ๊ณผ โ€” PIE/Full RELRO/Canary/NX/SHSTK/IBT๊ฐ€ ์ „๋ถ€ ์ผœ์ง„ stripped ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๊ณ , strings์—์„œ assertin failed *** integrity_check(): file has been corrupted, Wait! I'm generating flag, Here's your flag: DH{, I will evolve into SUPER FLAG ๋ฌธ๊ตฌ๊ฐ€ ๋ชจ๋‘ ํ™•์ธ๋จ
โ–ถ๐Ÿ•ณ๏ธ ์‚ฝ์งˆ โ€” ์ง€๋‚œ ๋‘ ์„ธ์…˜, 'ํ•˜๋‚˜์˜ ๋ฐฉ์–ด'๋ผ๊ณ  ์ฐฉ๊ฐํ•˜๊ณ  ๊ณ„์† ๋ง‰ํ˜”๋‹ค

๊ทธ๋™์•ˆ์˜ ์‹œ๋„๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด ์ด๋ ‡๋‹ค.

์‹œ๋„ 1 โ€” ํŒŒ์ผ์„ ์ง์ ‘ ํŒจ์น˜. syscall ๋ช…๋ น(0f 05) ๋‘ ๋ฐ”์ดํŠธ๋ฅผ nop(90 90)์œผ๋กœ ๋ฐ”๊ฟ” ์‹คํ–‰ ํŒŒ์ผ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•œ ๋’ค ์‹คํ–‰ํ–ˆ๋‹ค. sleep ์ž์ฒด๋ฅผ ์•„์˜ˆ ์—†์• ๋ฒ„๋ฆฌ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐœ์ƒ์ด์—ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๊ณง๋ฐ”๋กœ *** assertin failed *** integrity_check(): file has been corrupted. โ€” sleep์ด ์‹œ์ž‘๋˜๊ธฐ๋„ ์ „์—, ๊ฑฐ์˜ ์ฆ‰์‹œ ์‹คํŒจํ–ˆ๋‹ค.

์‹œ๋„ 2 โ€” gdb ์†Œํ”„ํŠธ์›จ์–ด ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋กœ syscall ๊ฑด๋„ˆ๋›ฐ๊ธฐ. break *<syscall์ฃผ์†Œ> ๋ฅผ ๊ฑธ๊ณ  ๋ช…๋ น์–ด๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋Š” ๋ฐฉ์‹์„ ์‹œ๋„ํ–ˆ๋‹ค. ์ด๊ฒƒ๋„ ๋˜‘๊ฐ™์ด ์ฆ‰์‹œ corrupted๊ฐ€ ๋–ด๋‹ค.

์‹œ๋„ 3 โ€” ptrace๋กœ ๋ ˆ์ง€์Šคํ„ฐ๋งŒ ์กฐ์ž‘(๋ฉ”๋ชจ๋ฆฌ ํŒจ์น˜ ์—†์ด). syscall ์ง„์ž… ์ง€์ ์—์„œ $rax/$orig_rax๋ฅผ 39(getpid)๋กœ ๋ฐ”๊ฟ”์น˜๊ธฐํ•ด์„œ nanosleep ๋Œ€์‹  ์ฆ‰์‹œ ๋๋‚˜๋Š” syscall์„ ๋Œ€์‹  ์‹คํ–‰์‹œํ‚ค๋ ค ํ–ˆ๋‹ค. ์ด๋ฒˆ์—” corrupted๊ฐ€ ๋œจ์ง€ ์•Š์•˜์ง€๋งŒ, ๊ด€์ฐฐ์ด ์ด์ƒํ•˜๊ฒŒ ๋ถˆ์•ˆ์ •ํ–ˆ๋‹ค โ€” catch๊ฐ€ ๊ณ„์† ๋ฐ˜๋ณต๋˜๊ธฐ๋งŒ ํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋А๋‚Œ์ด ์—†์—ˆ๋‹ค.

์„ธ ๋ฒˆ์˜ ์‹œ๋„๋ฅผ ๊ฒช๊ณ  ๋‚˜์„œ "corrupted๊ฐ€ ๋œจ๋Š” ์กฐ๊ฑด๊ณผ ๋œจ์ง€ ์•Š๋Š” ์กฐ๊ฑด" ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ timing์œผ๋กœ ํ•ด์„ํ–ˆ๋‹ค โ€” "์‹ค์ œ ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ์žฌ๋Š” ๊ฒ€์ฆ์ผ ๊ฒƒ"์ด๋ผ๋Š” ์ถ”์ธก์ด์—ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด ์ถ”์ธก์€ ํ‹€๋ ธ๋‹ค. ์ด๋ฒˆ์— main์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ฝ๊ณ  ๋‚˜์„œ์•ผ ์ง„์งœ ๊ตฌ์กฐ๊ฐ€ ๋ณด์˜€๋‹ค.

๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋”ฐ๋ผ๊ฐ€ ๋ณด๋ฉด, ELF์˜ .init_array(์ƒ์„ฑ์ž ๋ชฉ๋ก)์— ํ•จ์ˆ˜๊ฐ€ ๋‘ ๊ฐœ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค.

readelf -x .init_array ๊ฒฐ๊ณผ โ€” 8๋ฐ”์ดํŠธ์”ฉ ๋‘ ๊ฐœ์˜ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ(0x1220, 0x1229)๊ฐ€ ๋‚˜์—ด๋˜์–ด ์žˆ๊ณ , ๋‘ ๋ฒˆ์งธ 0x1229๊ฐ€ main()๋ณด๋‹ค ๋จผ์ € ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ƒ์„ฑ์ž์ž„์„ ์„ค๋ช…ํ•˜๋Š” ์บก์ณ

์ฒซ ๋ฒˆ์งธ(0x1220)๋Š” ํ”ํ•œ register_tm_clones ํŠธ๋žจํด๋ฆฐ์ด๊ณ , ๋‘ ๋ฒˆ์งธ(0x1229)๊ฐ€ ์ง„์งœ ์ฝ”๋“œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” main()์ด ์‹œ์ž‘๋˜๊ธฐ๋„ ์ „์— โ€” glibc๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์‹œ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์ƒ์„ฑ์ž๋กœ์„œ โ€” ์ž๊ธฐ ์ž์‹ ์˜ ์ฝ”๋“œ ์˜์—ญ 0x1367๋ถ€ํ„ฐ 0x1000๋ฐ”์ดํŠธ(4096๋ฐ”์ดํŠธ, main ํ•จ์ˆ˜์™€ flag ์ƒ์„ฑ ๋กœ์ง, sleep ํ•จ์ˆ˜๊นŒ์ง€ ์ „๋ถ€ ํฌํ•จํ•˜๋Š” ๋ฒ”์œ„)๋ฅผ SHA256์œผ๋กœ ํ•ด์‹œํ•œ ๋’ค, ๋ฐ”์ด๋„ˆ๋ฆฌ์— ํ•˜๋“œ์ฝ”๋”ฉ๋œ 32๋ฐ”์ดํŠธ ๊ฐ’๊ณผ memcmp๋กœ ๋น„๊ตํ•œ๋‹ค. ๋‹ค๋ฅด๋ฉด ๊ทธ ์ž๋ฆฌ์—์„œ corrupted ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  exit(-1).

์ฆ‰ ์ด ๊ฒ€์‚ฌ๋Š” ํƒ€์ด๋ฐ๊ณผ ์•„๋ฌด ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค. ํŒŒ์ผ์„ ํŒจ์น˜ํ•˜๋ฉด ๊ทธ ๋ณ€์กฐ๊ฐ€ ์ฝ”๋“œ ์˜์—ญ์— ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ํ•ด์‹œ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ณ , gdb ์†Œํ”„ํŠธ์›จ์–ด ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋„ ๋Œ€์ƒ ์ฃผ์†Œ์— 0xCC ๋ฐ”์ดํŠธ๋ฅผ ์‹ค์ œ๋กœ ์จ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ๋˜‘๊ฐ™์ด ํ•ด์‹œ๊ฐ€ ์–ด๊ธ‹๋‚œ๋‹ค โ€” ๋‘˜ ๋‹ค sleep์ด ํ•œ ๋ฒˆ๋„ ์‹คํ–‰๋˜๊ธฐ ์ „, ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋˜์ž๋งˆ์ž ์‹คํŒจํ•˜๋Š” ๊ฒŒ ๋‹น์—ฐํ–ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์‹œ๋„ 3(๋ ˆ์ง€์Šคํ„ฐ๋งŒ ๋ฐ”๊พธ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ์•ˆ ๊ฑด๋“œ๋ฆผ)์ด corrupted๋ฅผ ์œ ๋ฐœํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ๋„ ์ด ๊ฐ€์„ค๊ณผ ์ •ํ™•ํžˆ ๋“ค์–ด๋งž๋Š”๋‹ค โ€” ๊ทธ๊ฑด ๊ด€์ฐฐ์ด ์ž˜๋ชป๋œ ๊ฒŒ ์•„๋‹ˆ๋ผ ์• ์ดˆ์— ์˜ณ์€ ๋ฐฉํ–ฅ์ด์—ˆ๋‹ค. ๋‹ค๋งŒ ๋ ˆ์ง€์Šคํ„ฐ ์กฐ์ž‘ ๋ฐฉ์‹ ์ž์ฒด์— ๋‹ค๋ฅธ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์—ˆ์„ ๋ฟ์ด๋‹ค(๋’ค์—์„œ ๋‹ค์‹œ ๋‚˜์˜จ๋‹ค).


๐Ÿ’ฃ ํ•ต์‹ฌ 1 โ€” ์ž์ฒด ์ฝ”๋“œ ํ•ด์‹œ์™€ ์‹คํ–‰ ์†๋„๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ธต์ด๋‹ค

์ •๋ฆฌํ•˜๋ฉด ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ๋ฐฉ์–ด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

  1. ์ •์  ๋ฐฉ์–ด (์ƒ์„ฑ์ž, main ์ด์ „): ์ž๊ธฐ ์ฝ”๋“œ 4096๋ฐ”์ดํŠธ์˜ SHA256์„ ๊ณ„์‚ฐํ•ด ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฐ’๊ณผ ๋น„๊ต. ์ฝ”๋“œ ๋ฐ”์ดํŠธ๊ฐ€ ์กฐ๊ธˆ์ด๋ผ๋„ ๋ฐ”๋€Œ๋ฉด ์‹คํŒจ. ์‹œ๊ฐ„๊ณผ๋Š” ๋ฌด๊ด€.
  2. ๋™์  ๋ฐฉํ•ด (SHA256 ์••์ถ• ํ•จ์ˆ˜ ์•ˆ): syscall(SYS_nanosleep, ...) ์„ PLT๋‚˜ libc ์‹ฌ๋ณผ์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์ง์ ‘ ํ˜ธ์ถœ. ๋งค 64๋ฐ”์ดํŠธ ๋ธ”๋ก์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ, ์ „์—ญ ์นด์šดํ„ฐ๋ฅผ N โ†’ 2*(N+1)๋กœ ๋ถˆ๋ ค๊ฐ€๋ฉฐ tv_sec์— ๊ทธ ๊ฐ’์„ ์ฑ„์›Œ ๋„ฃ๋Š”๋‹ค.
sleep ํ•จ์ˆ˜๋ฅผ ์†์œผ๋กœ ์ฃผ์„ ๋‹จ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ ์บก์ณ โ€” ์ „์—ญ ์นด์šดํ„ฐ๋ฅผ N+1๋กœ ๋Š˜๋ฆฐ ๋’ค ๋‹ค์‹œ 2๋ฐฐ๋กœ ๊ณฑํ•ด ์ €์žฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ timespec.tv_sec์— ๋„ฃ์–ด syscall 0x23(nanosleep)์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์กฐ. N=0โ†’2, 2โ†’6, 6โ†’14, 14โ†’30, 30โ†’62๋กœ ๋งค ํ˜ธ์ถœ๋งˆ๋‹ค ๋Œ€๋žต 3๋ฐฐ์”ฉ ์ปค์ง€๋Š” ์ˆ˜์—ด์ด ๋ผ๋ฒจ๋กœ ํ‘œ์‹œ๋จ

syscall ๋ช…๋ น์„ ์ง์ ‘ ์“ด๋‹ค๋Š” ์ ์ด ์ค‘์š”ํ•˜๋‹ค. ์ผ๋ฐ˜์ ์ธ sleep()/nanosleep() ํ˜ธ์ถœ์ด์—ˆ๋‹ค๋ฉด LD_PRELOAD๋กœ libc ์‹ฌ๋ณผ์„ ๊ฐ€๋กœ์ฑ„๋Š” ํ”ํ•œ ์šฐํšŒ๊ฐ€ ํ†ตํ–ˆ๊ฒ ์ง€๋งŒ, ์ด ์ฝ”๋“œ๋Š” PLT ์ž์ฒด๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ›„ํ‚นํ•  ์‹ฌ๋ณผ์ด ์—†๋‹ค โ€” ์‹ค์ œ๋กœ ์ง€๋‚œ๋ฒˆ์— LD_PRELOAD๋กœ ptrace()๋ฅผ ๋ฌด๋ ฅํ™”ํ•˜๋Š” ์‹œ๋„๊ฐ€ ์ด syscall์—” ์•„๋ฌด ์˜ํ–ฅ์„ ์ฃผ์ง€ ๋ชปํ–ˆ๋˜ ์ด์œ ์ด๊ธฐ๋„ ํ•˜๋‹ค(๊ทธ๊ฑด ๋‹ค๋ฅธ ํ•จ์ˆ˜ ์–˜๊ธฐ์˜€์ง€๋งŒ, ๊ฐ™์€ ๋งฅ๋ฝ์˜ ํ•จ์ •์ด๋‹ค).

์ด sleep ํ•จ์ˆ˜๋Š” ์–ด๋””์„œ ํ˜ธ์ถœ๋ ๊นŒ ๊ถ๊ธˆํ•ด์„œ ํ˜ธ์ถœ์ž๋ฅผ ๊ณ„์† ๋”ฐ๋ผ ์˜ฌ๋ผ๊ฐ”๋”๋‹ˆ, ๋†€๋ž๊ฒŒ๋„ main์ด ๊ณ„์‚ฐํ•˜๋Š” "flag"์˜ ์ •์ฒด๊ฐ€ ๋“œ๋Ÿฌ๋‚ฌ๋‹ค. main์€ sha256_init โ†’ sha256_update(ctx, "I will evolve into SUPER FLAG!!!!", 33) โ†’ sha256_final์„ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœํ•ด์„œ ๋‚˜์˜จ 32๋ฐ”์ดํŠธ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ 64์ž hex๋กœ ์ถœ๋ ฅํ•  ๋ฟ์ด๋‹ค. flag๋Š” ๊ทธ๋ƒฅ ๊ณ ์ • ๋ฌธ์ž์—ด์˜ SHA256์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  sleep ํ˜ธ์ถœ์€ ์ด SHA256์˜ ์••์ถ• ํ•จ์ˆ˜(64๋ฐ”์ดํŠธ ๋ธ”๋ก ํ•˜๋‚˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„) ์•ˆ์— ๋ผ์›Œ ๋„ฃ์–ด์ ธ ์žˆ๋‹ค โ€” ๊ณ„์‚ฐ ๋กœ์ง ์ž์ฒด์™€๋Š” ์•„๋ฌด ์ƒ๊ด€์ด ์—†๊ณ , ๊ทธ์ € "๋ธ”๋ก ํ•˜๋‚˜ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งˆ๋‹ค ๋Œ€๊ธฐ์‹œํ‚ค๋Š”" ํ›ผ๋ฐฉ๊พผ์œผ๋กœ ์‚ฝ์ž…๋œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ์ž(0x1229)๋„ ์ž๊ธฐ ์ž์‹ ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด 4096๋ฐ”์ดํŠธ(64๋ธ”๋ก)๋ฅผ ๊ฐ™์€ SHA256 ์••์ถ• ํ•จ์ˆ˜๋กœ ํ•ด์‹œํ•œ๋‹ค โ€” ์ฆ‰ ์ƒ์„ฑ์ž ์ž์‹ ๋„ ์ด sleep ํญํƒ„์„ ๋ฐŸ๋Š”๋‹ค. ๋‘ ๊ฒ€์‚ฌ(์ž์ฒด ํ•ด์‹œ + flag ๊ณ„์‚ฐ)๋ฅผ ํ•ฉ์น˜๋ฉด sleep์ด ์ด 96๋ฒˆ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฑธ ๋‚˜์ค‘์— ์‹ค์ธก์œผ๋กœ ํ™•์ธํ–ˆ๋‹ค.

๋‘ ๋ฐฉ์–ด์˜ ๊ด€๊ณ„๋ฅผ ์ •๋ฆฌํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ โ€” .init_array ์ƒ์„ฑ์ž์˜ ์ฝ”๋“œ ์ž์ฒด ํ•ด์‹œ ๊ฒ€์ฆ, flag๋Š” ๊ณ ์ • ๋ฌธ์ž์—ด์˜ SHA256์ผ ๋ฟ์ด๋ผ๋Š” ์‚ฌ์‹ค, sleep์ด SHA256 ์••์ถ•ํ•จ์ˆ˜ ์•ˆ์— ๋ผ์›Œ์ ธ ์žˆ๋‹ค๋Š” ๊ตฌ์กฐ, ์ฝ”๋“œ๋Š” ์•ˆ ๊ฑด๋“œ๋ฆฌ๊ณ  syscall ์ธ์ž๋งŒ ํŒจ์น˜ํ•˜๋Š” ์šฐํšŒ, rax/orig_rax ํ•จ์ •, ์ตœ์ข… flag๊นŒ์ง€ ์ •๋ฆฌํ•œ 5๋‹จ๊ณ„

๐ŸŽฏ ์ž์ฒด ์™„๊ฒฐ solve

๋ฐฉํ–ฅ์€ ๋ช…ํ™•ํ•ด์กŒ๋‹ค. ์ฝ”๋“œ ๋ฐ”์ดํŠธ๋Š” ํ•œ ๊ธ€์ž๋„ ๊ฑด๋“œ๋ฆฌ์ง€ ๋ง๊ณ , syscall์ด ์ฝ์–ด๊ฐˆ timespec ์ธ์ž๊ฐ’๋งŒ ์กฐ์ž‘ํ•œ๋‹ค. gdb์˜ catch syscall์€ ์ปค๋„ PTRACE_SYSCALL ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์†Œํ”„ํŠธ์›จ์–ด ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ(0xCC)์™€ ๋‹ฌ๋ฆฌ .text์— ์–ด๋–ค ๋ฐ”์ดํŠธ๋„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค โ€” ์ž์ฒด ์ฝ”๋“œ ํ•ด์‹œ ๊ฒ€์ฆ์„ ๊ฑด๋“œ๋ฆด ์ด์œ ๊ฐ€ ์—†๋‹ค.

def on_stop(event):
    orig_rax = int(gdb.parse_and_eval("$orig_rax"))
    if orig_rax != 35:      # SYS_nanosleep
        return
    rdi = int(gdb.parse_and_eval("$rdi"))   # timespec* ์ธ์ž
    gdb.execute(f"set variable *(long*){rdi} = 0")
    gdb.execute(f"set variable *(long*)({rdi}+8) = 1000")
 
gdb.events.stop.connect(on_stop)
gdb.execute("catch syscall nanosleep")
gdb.execute("run < /dev/null")

์ฒ˜์Œ ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋Œ๋ ธ์„ ๋•Œ, $rax๋กœ syscall ๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜๋Š” ์กฐ๊ฑด(if rax == 35)์„ ์ผ๋Š”๋ฐ ๊ณ„์† ์•„๋ฌด ๊ฒƒ๋„ ํŒจ์น˜๋˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉˆ์ถฐ๋ฒ„๋ ธ๋‹ค.

๋””๋ฒ„๊ทธ ๋กœ๊ทธ ์บก์ณ โ€” catch syscall์˜ call ์Šคํƒ‘๋งˆ๋‹ค rax=-38 ์ด ์ฐํžˆ๊ณ , return ์Šคํƒ‘๋งˆ๋‹ค rax=0 ์ด ์ฐํžˆ๋Š” ๊ฑธ ๋ณด์—ฌ์คŒ. 35(nanosleep)๋ฅผ ํ•œ ๋ฒˆ๋„ ๋ชป ๋งŒ๋‚˜ ํŒจ์น˜ ์กฐ๊ฑด์ด ์ „ํ˜€ ๋ฐœ๋™ํ•˜์ง€ ์•Š์€ ์ƒํƒœ

rax=-38. -38์€ -ENOSYS๋‹ค. ์—ฌ๊ธฐ์„œ ์ง€๋‚œ๋ฒˆ์— ์ •ํ™•ํžˆ ๊ฑธ๋ ค ๋„˜์–ด์กŒ๋˜ ๊ทธ ํ•จ์ •์„ ๋‹ค์‹œ ๋งŒ๋‚ฌ๋‹ค โ€” ptrace์˜ syscall-enter ์ •์ง€ ์‹œ์ ์—๋Š” $rax๊ฐ€ ์•„์ง ์ง„์งœ syscall ๋ฒˆํ˜ธ๋ฅผ ๋‹ด๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ์ปค๋„์€ ์ด ์‹œ์ ์˜ rax๋ฅผ -ENOSYS ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋กœ ์ฑ„์›Œ๋‘๊ณ , ์ง„์งœ syscall ๋ฒˆํ˜ธ๋Š” ๋ณ„๋„์˜ $orig_rax ๋ ˆ์ง€์Šคํ„ฐ์— ๋„ฃ์–ด๋‘”๋‹ค(์ด๊ฑด x86-64 ptrace์˜ ์ž˜ ์•Œ๋ ค์ง„ ๋™์ž‘์ด๋‹ค โ€” syscall-enter/exit์ด ๊ฐ™์€ ์ •์ง€ ์ด๋ฒคํŠธ๋กœ ๊ฒน์ณ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์—, "์ด๊ฒŒ ์ง€๊ธˆ ๋“ค์–ด๊ฐ€๋Š” ์ค‘์ธ์ง€ ๋‚˜๊ฐ€๋Š” ์ค‘์ธ์ง€"๋ฅผ ์ปค๋„์ด ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์ค€๋‹ค). $orig_rax๋กœ ๋ฐ”๊พธ์ž๋งˆ์ž ์ •์ƒ ๋™์ž‘ํ–ˆ๋‹ค.

์ˆ˜์ •๋œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๋กœ๊ทธ โ€” Catchpoint๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋ฐ˜๋ณต๋˜๋‹ค๊ฐ€ Wait! I'm generating flag!! ์™€ Here's your flag: DH{...} ๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ƒ ์ข…๋ฃŒ๋จ์„ ๋ณด์—ฌ์ฃผ๋Š” ์บก์ณ. ์ด 96ํšŒ์˜ nanosleep์ด ์ „๋ถ€ ํŒจ์น˜๋จ

ํŒจ์น˜๋œ ํ˜ธ์ถœ์€ ์ •ํ™•ํžˆ 96๋ฒˆ์ด์—ˆ๋‹ค. ์ด๊ฒŒ ์–ผ๋งˆ๋‚˜ ํฐ ์ˆซ์ž์ธ์ง€ ๊ฐ์„ ์žก์œผ๋ ค๊ณ , ์šฐํšŒ ์—†์ด ์ด ์ˆ˜์—ด์„ ์‹ค์ œ๋กœ ๋‹ค ๊ธฐ๋‹ค๋ ธ๋‹ค๋ฉด ๊ฑธ๋ ธ์„ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•ด๋ดค๋‹ค.

python ๊ณ„์‚ฐ ๊ฒฐ๊ณผ ์šฐํšŒ ์—†์ด 96ํšŒ sleep์„ ๋‹ค ๊ธฐ๋‹ค๋ ธ๋‹ค๋ฉด ์ด 3169๊ฒฝ ์ดˆ, ์•ฝ 10์˜22์Šน ๋…„(์šฐ์ฃผ ๋‚˜์ด์˜ 10์˜12์Šน ๋ฐฐ)์ด ๊ฑธ๋ฆฐ๋‹ค๋Š” ์ถœ๋ ฅ๊ณผ, ๋ฐ”๋กœ ์ด์–ด์„œ time ๋ช…๋ น์œผ๋กœ ์ธก์ •ํ•œ ์‹ค์ œ ์šฐํšŒ ์‹คํ–‰ ์‹œ๊ฐ„์ด 0.32์ดˆ๋กœ ๋‚˜์˜ค๋Š” ์บก์ณ

์šฐํšŒ ์—†์ด ๋‹ค ๊ธฐ๋‹ค๋ ธ๋‹ค๋ฉด ์•ฝ 10ยฒยฒ๋…„ โ€” ์šฐ์ฃผ ๋‚˜์ด(์•ฝ 1.4ร—10ยนโฐ๋…„)๋ณด๋‹ค 10ยนยฒ๋ฐฐ ์ด์ƒ ๊ธด ์‹œ๊ฐ„์ด๋‹ค. ์‹ค์ œ ์šฐํšŒ ์‹คํ–‰์€ 0.32์ดˆ๋งŒ์— ๋๋‚ฌ๋‹ค. "๋ช‡ ํšŒ์ฐจ๊นŒ์ง€๋Š” ๋ฒ„ํ‹ธ ๋งŒํ•˜์ง€ ์•Š์„๊นŒ"๋ผ๋Š” ์ง€๋‚œ๋ฒˆ ๋งˆ์ง€๋ง‰ ๋ฉ”๋ชจ๋Š”, ์ •ํ™•ํžˆ ํ™•์ธํ•ด๋ณด๋‹ˆ ์• ์ดˆ์— ์„ฑ๋ฆฝํ•  ์ˆ˜ ์—†๋Š” ์งˆ๋ฌธ์ด์—ˆ๋‹ค.

Wait! I'm generating flag!!
Here's your flag: DH{406b2742ffb2a6cac02abb8f303fa12067f8061339979855108ce4a2e38ef558}

์ด flag๋ฅผ ๋“œ๋ฆผํ•ต์— ์ œ์ถœํ•ด "์ •๋‹ต! ํ•ด๊ฒฐ ์ฒ˜๋ฆฌ๋จ"์œผ๋กœ ํ™•์ •๋๋‹ค.


๐Ÿ“ ๊ฒฐ๋ก 

์ด ๋ฌธ์ œ๊ฐ€ ์ค€ ๊ตํ›ˆ์€ ๋‘ ๊ฐ€์ง€ ์ธต์œ„๋กœ ๋‚˜๋‰œ๋‹ค.

  • "์•ˆํ‹ฐํ…œํผ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์‹คํŒจ"๊ฐ€ ์ „๋ถ€ ๊ฐ™์€ ์›์ธ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค. ํŒŒ์ผ ํŒจ์น˜์™€ ์†Œํ”„ํŠธ์›จ์–ด ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๊ฐ€ ๋˜‘๊ฐ™์ด corrupted๋ฅผ ์œ ๋ฐœํ–ˆ์„ ๋•Œ, ๊ทธ ๊ณตํ†ต์ ์ด "๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฑด๋“œ๋ ธ๋‹ค"๋Š” ์‚ฌ์‹ค์ด์—ˆ์„ ๋ฟ "ํƒ€์ด๋ฐ์ด ํํŠธ๋Ÿฌ์กŒ๋‹ค"๋Š” ๋œป์€ ์ „ํ˜€ ์•„๋‹ˆ์—ˆ๋‹ค. ๋‘ ์‹คํŒจ์˜ ๊ณตํ†ต ์›์ธ์„ ์ •ํ™•ํžˆ ์งš์ง€ ๋ชปํ•˜๋ฉด(์ด๋ฒˆ์—” "์ฝ”๋“œ ๋ฐ”์ดํŠธ ๋ณ€๊ฒฝ"์ด ์ง„์งœ ๊ณตํ†ต์ ์ด์—ˆ๋‹ค), ์—‰๋šฑํ•œ ๊ฐ€์„ค(ํƒ€์ด๋ฐ) ์ชฝ์œผ๋กœ ๋‘ ์„ธ์…˜์„ ํ—ˆ๋น„ํ•˜๊ฒŒ ๋œ๋‹ค.
  • syscall ๋ช…๋ น์„ ์ง์ ‘ ์“ฐ๋Š” ์ฝ”๋“œ๋Š” ์‹ฌ๋ณผ ๊ธฐ๋ฐ˜ ํ›„ํ‚น(LD_PRELOAD)์ด ํ†ตํ•˜์ง€ ์•Š๋Š”๋‹ค. libc ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๊ฐ€๋กœ์ฑ„๋Š” ๋ฐฉ์–ด ์šฐํšŒ๋Š” ์• ์ดˆ์— "๊ทธ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค"๋Š” ์ „์ œ ์œ„์— ์„œ ์žˆ๋‹ค. 0f 05(syscall) ๋ช…๋ น์ด ์ฝ”๋“œ์— ์ธ๋ผ์ธ์œผ๋กœ ๋ฐ•ํ˜€ ์žˆ์œผ๋ฉด ๊ทธ ์ „์ œ ์ž์ฒด๊ฐ€ ๊นจ์ง„๋‹ค โ€” ๋Œ€์‹  ptrace/gdb catch syscall์ฒ˜๋Ÿผ ์ปค๋„์ด syscall ์ง„์ž…/ํƒˆ์ถœ์„ ์ธ์‹ํ•˜๋Š” ์ง€์ ์—์„œ ๊ฐœ์ž…ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ •์  ๋ฐฉ์–ด(์ฝ”๋“œ ๋ฌด๊ฒฐ์„ฑ)์™€ ๋™์  ๋ฐฉํ•ด(์‹คํ–‰ ์†๋„)๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ‘œ๋ฉด์ด๊ณ , ์šฐํšŒ ์ˆ˜๋‹จ๋„ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค. ์ฝ”๋“œ ๋ฌด๊ฒฐ์„ฑ์€ "๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•ˆ ๋ฐ”๊พธ๋ฉด" ํ†ต๊ณผํ•˜๊ณ , ์‹คํ–‰ ์†๋„๋Š” "syscall์˜ ์ธ์ž๊ฐ’์„ ๋ฐ”๊พธ๋ฉด" ์šฐํšŒ๋œ๋‹ค. ์ด ๋‘˜์„ ๋ถ„๋ฆฌํ•ด์„œ ๋ณด์ง€ ๋ชปํ•˜๋ฉด, ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ๋Š” ์šฐํšŒ(ํŒŒ์ผ ํŒจ์น˜, ์†Œํ”„ํŠธ ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ)๋กœ ์‹คํ–‰ ์†๋„ ๋ฌธ์ œ๊นŒ์ง€ ํ•ด๊ฒฐํ•˜๋ ค๋‹ค๊ฐ€ ์ •์ž‘ ๋” ์˜ˆ๋ฏผํ•œ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ์— ๋จผ์ € ๊ฑธ๋ฆฐ๋‹ค.
  • ptrace ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃฐ ๋•Œ๋Š” syscall-enter์˜ $rax๊ฐ€ -ENOSYS ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋ผ๋Š” ์‚ฌ์‹ค์„ ๋ฐ˜๋“œ์‹œ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค. ์ง„์งœ syscall ๋ฒˆํ˜ธ๋Š” $orig_rax์— ์žˆ๋‹ค. ์ด ๊ตฌ๋ถ„์„ ๋†“์น˜๋ฉด "catch๋Š” ๋˜๋Š”๋ฐ ์•„๋ฌด ๋กœ์ง๋„ ์•ˆ ๊ฑธ๋ฆฐ๋‹ค"๋Š”, ์›์ธ์„ ์ง์ž‘ํ•˜๊ธฐ ์–ด๋ ค์šด ์กฐ์šฉํ•œ ์‹คํŒจ๋กœ ์ด์–ด์ง„๋‹ค โ€” ์ง€๋‚œ๋ฒˆ์— "๊ด€์ฐฐ์ด ๋ถˆ์•ˆ์ •ํ•˜๋‹ค"๊ณ  ์ ์—ˆ๋˜ ๋ฐ”๋กœ ๊ทธ ์ฆ์ƒ์ด์—ˆ๋‹ค.

๋ฐฉ์–ด์ž ๊ด€์ ์—์„œ ๋ณด๋ฉด, ์ฝ”๋“œ ์ž์ฒด ํ•ด์‹œ ๊ฒ€์ฆ(์ƒ์„ฑ์ž์—์„œ ์‹คํ–‰๋˜๋Š” self-integrity check)์€ ์ •์  ํŒจ์น˜์— ๋Œ€ํ•ด ์ƒ๋‹นํžˆ ํšจ๊ณผ์ ์ธ ๋ฐฉ์–ด์˜€๋‹ค. ๋ฐ˜๋ฉด "syscall์„ ์••์ถ• ํ•จ์ˆ˜ ์•ˆ์— ๋ผ์›Œ ์‹คํ–‰์„ ๋Šฆ์ถ˜๋‹ค"๋Š” ์•„์ด๋””์–ด๋Š”, syscall ์ธ์ž๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋™์  ๊ฐœ์ž… ์•ž์—์„œ๋Š” ์‚ฌ์‹ค์ƒ ๋ฌด๋ ฅํ–ˆ๋‹ค โ€” ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ ๋„ ๊ทธ ์ฝ”๋“œ๊ฐ€ ๋งŒ๋“ค์–ด๋‚ด๋Š” "ํšจ๊ณผ"๋งŒ ๋ฌด๋ ฅํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ๋ฐฉ์–ด๋Š” ๊ทธ ์ง€์ ๊นŒ์ง€ ๊ณ ๋ คํ•ด์„œ ์„ค๊ณ„๋ผ์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ์ด ๋ฌธ์ œ๊ฐ€ ์ž˜ ๋ณด์—ฌ์ค€๋‹ค.

์ด ๊ธ€์ด ๋„์›€์ด ๋๋‚˜์š”?

Comments

๋Œ“๊ธ€

0๊ฐœ

๋Œ“๊ธ€์„ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ด์š”. (๋„ค์ด๋ฒ„ ยท ๊ตฌ๊ธ€ ๊ณ„์ •)

๋Œ“๊ธ€ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘โ€ฆ

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅ‡ Gold 2] .rela.tivity โ€” ์žฌ๋ฐฐ์น˜ ํ…Œ์ด๋ธ”์ด ๊ณง ์•”ํ˜ธ๋ฌธ์ด์—ˆ๋‹ค, DreamHack Theori of Relativity ํ’€์ด (2๋ฒˆ ๋ณด๋ฅ˜ ๋์— ํ•ด๊ฒฐ)
blog

[๐Ÿฅ‡ Gold 2] .rela.tivity โ€” ์žฌ๋ฐฐ์น˜ ํ…Œ์ด๋ธ”์ด ๊ณง ์•”ํ˜ธ๋ฌธ์ด์—ˆ๋‹ค, DreamHack Theori of Relativity ํ’€์ด (2๋ฒˆ ๋ณด๋ฅ˜ ๋์— ํ•ด๊ฒฐ)

ํ‚ค ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜๋ฉด ๋งž๋Š”์ง€ ํ‹€๋ ธ๋Š”์ง€๋งŒ ์•Œ๋ ค์ฃผ๋Š” ์งง์€ ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ. ๊ฒ€์ฆ์— ์“ฐ์ด๋Š” 104๋ฐ”์ดํŠธ "ํ‚ค ๋ธ”๋ก"์ด ํŒŒ์ผ์— ์ ํžŒ ๊ฐ’๊ณผ ์‹คํ–‰ ์ค‘์ธ ๊ฐ’์ด ์™„์ „ํžˆ ๋‹ค๋ฅธ๋ฐ, ๊ทธ ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜๋ฅผ ์•„๋ฌด๋ฆฌ ์ฐพ์•„๋„ ์•ˆ ๋‚˜์˜จ๋‹ค โ€” ์ง€๋‚œ ๋‘ ์„ธ์…˜์€ ์—ฌ๊ธฐ์„œ ๋ง‰ํ˜”๋‹ค. ์ง„์งœ ๋ฒ”์ธ์€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ".rela.tivity"๋ผ๋Š” ์ด๋ฆ„์˜ ๊ฐ€์งœ ์žฌ๋ฐฐ์น˜ ์„น์…˜๊ณผ ๊ทธ๊ฑธ ์ง„์งœ๋กœ ์ฒ˜๋ฆฌํ•ด๋ฒ„๋ฆฌ๋Š” ELF ๋กœ๋” ์ž์‹ ์ด์—ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰ ๊ด€๋ฌธ์—์„œ๋Š” "๋””๋ฒ„๊ฑฐ๋กœ ๊ด€์ฐฐํ•˜๋Š” ํ–‰์œ„ ์ž์ฒด๊ฐ€ ๊ด€์ฐฐ ๋Œ€์ƒ์„ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š”" ์ง„์งœ ๋ฌผ๋ฆฌํ•™ ๋†๋‹ด ๊ฐ™์€ ํ•จ์ •๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ๋‹ค.
#dreamhack#ctf#reversing+5
2026-07-21#dreamhack +4
[๐Ÿฅ‰ Bronze 2] ๋ถ„๊ธฐ ๋ฏธ๋กœ ๋’ค์— ์ˆจ์€ ์ƒ์ˆ˜ ํ•œ ์ค„ โ€” DreamHack Labyrinth ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 2] ๋ถ„๊ธฐ ๋ฏธ๋กœ ๋’ค์— ์ˆจ์€ ์ƒ์ˆ˜ ํ•œ ์ค„ โ€” DreamHack Labyrinth ํ’€์ด

14KB ์งœ๋ฆฌ stripped PIE ํ•˜๋‚˜๊ฐ€ ์ „๋ถ€์ธ ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ. ptrace ์•ˆํ‹ฐ๋””๋ฒ„๊น…๊ณผ ์‹œ๋“œ %7 ๋กœ ๊ฐˆ๋ผ์ง€๋Š” ๋ถ„๊ธฐ ๋ฏธ๋กœ๊ฐ€ ๊ฒน๊ฒน์ด ๊น”๋ ค ์žˆ์ง€๋งŒ, ์ •๋‹ต ์ž…๋ ฅ์€ .rodata ์˜ 32๋ฐ”์ดํŠธ๋ฅผ 0x30 ์œผ๋กœ XOR ํ•œ ๊ฒƒ์ด ์ „๋ถ€์˜€๋‹ค. flag ์ƒ์„ฑ๊ธฐ๊นŒ์ง€ ํŒŒ์ด์ฌ์œผ๋กœ ์žฌ๊ตฌํ˜„ํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ์ถœ๋ ฅ๊ณผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋Œ€์กฐํ–ˆ๋‹ค.
#dreamhack#ctf#reversing+6
2026-08-20#dreamhack +4
[๐Ÿฅ‡ Gold 4] ์•ˆํ‹ฐ๋””๋ฒ„๊น…์ด ์Šค์Šค๋กœ ๋ฌด๋„ˆ์ง€๋Š” ์ž๋ฆฌ โ€” DreamHack ptrace_block ํ’€์ด
blog

[๐Ÿฅ‡ Gold 4] ์•ˆํ‹ฐ๋””๋ฒ„๊น…์ด ์Šค์Šค๋กœ ๋ฌด๋„ˆ์ง€๋Š” ์ž๋ฆฌ โ€” DreamHack ptrace_block ํ’€์ด

์ƒ์„ฑ์ž๊ฐ€ AES-128 ํ‚ค๋ฅผ ๋งŒ๋“ค๊ณ  main ์€ ๊ทธ ํ‚ค๋กœ ์ž…๋ ฅ์„ ์•”ํ˜ธํ™”ํ•ด out.txt ์— ์“ด๋‹ค. ํ‚ค๋ฅผ ํ”๋“œ๋Š” ๊ฐ’์€ ptrace(PTRACE_TRACEME) ์˜ ๋ฐ˜ํ™˜๊ฐ’์„ 4096 ๋ฒˆ ๊ณฑํ•ด ๋งŒ๋“œ๋Š”๋ฐ, 32๋น„ํŠธ ๊ณฑ์…ˆ์ด ๋„˜์ณ ๋””๋ฒ„๊ฑฐ๊ฐ€ ์žˆ๋“  ์—†๋“  0 ์ด ๋œ๋‹ค. ๋‚จ์€ ๊ฑด ํ•˜์œ„ 1๋ฐ”์ดํŠธ์งœ๋ฆฌ XOR ๋ฟ์ด๋ผ 256 ๋ฒˆ ์‹œ๋„๋กœ ๋๋‚œ๋‹ค.
#dreamhack#ctf#reversing+6
2026-08-07#dreamhack +4