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

[dreamhack] pwnable.kr bof

by Jenny:! 2022. 8. 21.

๋ฌธ์ œ์— ๋‚˜์˜จ ์ฃผ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•ด ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.

 

 

์•„๋ž˜๋Š” bof.c ํŒŒ์ผ์ด๋‹ค.

  • mainํ•จ์ˆ˜๋ฅผ ๋ณด๋ฉด, func() ํ•จ์ˆ˜์— 0xdeadbeef๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.
  • ์ด ๊ฐ’์ด  0xcafebabe์™€ ๊ฐ™์œผ๋ฉด flag๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
  • gets ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋ฐ, ๊ธธ์ด ์ œํ•œ์ด ์—†์–ด์„œ overflowme[32]๋ฅผ ๋„˜๊ฒจ key ๊ฐ’์„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์˜ค๋ฒ„ํ”Œ๋กœ ์ทจ์•ฝ์ ์„ ๊ฐ€์ง„ ํ•จ์ˆ˜์ด๋‹ค.
  • key[4] ์™€ overflowme[32] ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜์ž.

 

 

 

 

gdb๋กœ bof ๋ฅผ ๋ถ„์„ํ•˜์ž. 

 

 

func ํ•จ์ˆ˜

'disas(=disassembly)  ํ•จ์ˆ˜ ์ด๋ฆ„'์œผ๋กœ func ํ•จ์ˆ˜๋ฅผ ๋””๋ฒ„๊น…ํ•œ๋‹ค.

 

 

 

key ๋ถ€๋ถ„์ด๋‹ค.

 

 

 

main ํ•จ์ˆ˜

์ด๋ฒˆ์—๋Š” ๋ฉ”์ธ ํ•จ์ˆ˜๋ฅผ ๋””๋ฒ„๊น…ํ•œ๋‹ค.

 

 

์ฃผ์†Œ 1264์—์„œ func ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ, func ํ•จ์ˆ˜์—์„œ printf ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ›„ gets ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๊ฒƒ์ด๋‹ค. (์•„๋ž˜์˜ func ํ•จ์ˆ˜์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.)

 

 

์•„๊นŒ์˜ func ํ•จ์ˆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ gets ํ•จ์ˆ˜์˜ call ์œ„์น˜๋Š” 1207์ด๋‹ค.

(๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ dbg ์ถœ๋ ฅํ™”๋ฉด๊ณผ ๋‹ค๋ฅธ๋ฐ -02c๊ฐ€ ์•„๋‹ˆ๋ผ ์™œ -0x30์ผ๊นŒ์š”?)

 

 

์ด์ œ gets ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ๋ฐ›๋Š” overflowme ๊ณต๊ฐ„์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

 

call ๋‹ค์Œ์— ์œ„์น˜ํ•œ -0x30์— overflowme๊ฐ€ ์œ„์น˜ํ•  ๊ฒƒ์ด๋‹ค. 

 

 

 

gets ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์˜ค๋ฒ„ํ”Œ๋กœํ•˜์—ฌ ์ž…๋ ฅ๋œ key(deadbeef)๋ฅผ cakebabe๋กœ ๋ฎ์–ด์•ผ ํ•œ๋‹ค.

overflowme + ์“ฐ๋ ˆ๊ธฐ ๊ฐ’ + cakebabe

์—ฌ๊ธฐ์„œ ์“ฐ๋ ˆ๊ธฐ ๊ฐ’๊ณผ cakebabe๋ฅผ ๋”ํ•œ ๊ฐ’์€ -0x30 ~ 0x34์ด๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (A๋Š” ์•„๋ฌด ๋ฌธ์ž๋กœ ์ฑ„์šด ๊ฒƒ์ด๋‹ค.)

(python -c "print('A'*52+'\xbe\xba\xfe\xca')";cat) | nc pwnable.kr 9000

 

 

์ฐธ๊ณ 

[ Pwnable.kr ] - bof(buffer overflow) (velog.io)

3. ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ (bof) - Pwnable.kr ํ•ด์„ค (tistory.com)