๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ ๋ณด์•ˆ·์ทจ์•ฝ์ /๐Ÿ”ธ์‹œ์Šคํ…œ·์šด์˜์ฒด์ œ

buffer overflow์˜ ์ดํ•ด

by Jenny:! 2022. 8. 14.

1. Buffer Overflow์˜ ์ดํ•ด

  • ๋ฒ„ํผ๋ž€ ์‹œ์Šคํ…œ์ด ์—ฐ์‚ฐ ์ž‘์—…์„ ํ•˜๋Š” ๋ฐ ์žˆ์–ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์„ ๋งํ•œ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋ฒ„ํผ๋ฅผ ์Šคํƒ์— ์ƒ์„ฑํ•œ๋‹ค. ์Šคํƒ์€ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธํ•œ ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๊ณ  ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฏธ๋ฆฌ ์ค€๋น„๋œ ๋ฒ„ํผ๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ๋•Œ Buffer Overflow๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๊ณต๊ฒฉ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์ž„์˜์˜ ์œ„์น˜์— ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ €์žฅ์‹œ์ผœ ๋†“๊ณ  return address๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ง€์ ์— ๊ทธ ์ฝ”๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์ง‘์–ด ๋„ฃ์–ด์„œ EIP์— ๊ณต๊ฒฉ์ž์˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ณณ์˜ ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ํ•ด ๊ณต๊ฒฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

1.1 Byte order

ํ˜„์กดํ•˜๋Š” ์‹œ์Šคํ…œ๋“ค์€ ๋‘ ๊ฐ€์ง€์˜ ๋ฐ”์ดํŠธ ์ˆœ์„œ ๋ฐฉ์‹์„ ๊ฐ€์ง„๋‹ค. 74E3FF59๋ผ๋Š” 16์ง„์ˆ˜ ๊ฐ’์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž.

  • big endian : ๋ฐ”์ดํŠธ ์ˆœ์„œ๊ฐ€ ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์—์„œ ๋†’์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ, 74E3FF59 ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋œ๋‹ค.
  • little endian : ๋ฐ”์ดํŠธ ์ˆœ์„œ๊ฐ€ ๋†’์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ, 59FFE474 ์ˆœ์„œ๋กœ ์ €์žฅ๋œ๋‹ค.

little endian์ด ์ €์žฅ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์–ด ๋†“๋Š” ์ด์œ ๋Š” ์ˆ˜๋ฅผ ์—ฐ์‚ฐํ•  ๋•Œ ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์˜์—ญ์˜ ๋ณ€ํ™”๋Š” ์ˆ˜์˜ ํฌ๊ธฐ ๋ณ€ํ™”๊ฐ€ ๋” ์ ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 74E3FF59์— 1์„ ๋”ํ•ด 74E3FF5A๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ์˜ ๋ณ€ํ™”๋Š” 5AFFE374๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ๋‚ฎ์€ ์ˆ˜์˜ ๋ณ€ํ™”๋Š” ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์˜ํ–ฅ์„ ๋ฐ›๊ณ  ๋†’์€ ์ˆ˜์˜ ๋ณ€ํ™”๋Š” ๋†’์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ž๋ฆฌ๋ฅผ ์žก๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (ํ•˜์ง€๋งŒ ํ•œ ๋ฐ”์ดํŠธ ๋‚ด์—์„œ์˜ bit ์ˆœ์„œ๋Š” big endian ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.)

1.2 ์‰˜ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ

์šฐ๋ฆฌ๊ฐ€ ์‰˜ ์ƒ์—์„œ ์‰˜์„ ์‹คํ–‰์‹œํ‚ค๋ ค๋ฉด '/bin/sh' ๋ผ๋Š” ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋ฉด ๋œ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‰˜ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ ์—ญ์‹œ ์ด ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์€ ์ผ์„ ํ•˜๋„๋ก ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.