๐Ÿซ ๋ชจ๋นˆ์ผˆ์˜ ์บ ํผ์Šค ๋ผ์ดํ”„ II (๋ฏธ์™„์„ฑ)

mowinckelยท2020๋…„ 6์›” 26์ผ
5

์ง€๋‚œ ์ค„๊ฑฐ๋ฆฌ

์ฒซ ๋‚ ๋ถ€ํ„ฐ ๋ฒ„๋‚˜๋“œ ๊ต๊ด€์—๊ฒŒ ์—‰๋šฑํ•œ ์งˆ๋ฌธ์œผ๋กœ ๊ณ ๋ฌธ๊ด€์œผ๋กœ ์ž๋ฆฌ๋งค๊น€ํ•œ ๋ชจ๋นˆ์ผˆ. ๊ณผ์—ฐ ๋ฒ„๋‚˜๋“œ ๊ต๊ด€์˜ ๋ฌด์‹œ๋ฌด์‹œํ•œ ํ›ˆ๋ จ ๊ณผ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ธ๊ฐ€?

๐Ÿคบ ๋ฒ„ํผ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ ๊ณต๊ฒฉ

๋ชจ๋นˆ์ผˆ์€ ๊ณผ์ œ๋ฅผ ๋ฐ›๊ณ  ์ง‘์œผ๋กœ ๋Œ์•„์™€์„œ ๊ณ ๋ฏผ์— ๋น ์กŒ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ๊นจ๋ฉด ์ข‹๋‹จ ๋ง์ธ๊ฐ€? ํ•˜์ง€๋งŒ ๋ฆฌ๋” ๋ณด๋“œ์— ๋žญํ‚น์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ฆ„๊ณผ ๊ตฐ๋ฒˆ์ด ๋ณด์ด๋Š” ๋…ํŠนํ•œ ํ›ˆ๋ จ ๋ฐฉ์‹ ๋•Œ๋ฌธ์— ๊ฒฝ์Ÿ์‹ฌ์ด ๋ถˆํƒ„ ๋ชจ๋นˆ์ผˆ์€ ์—ด์‹ฌํžˆ ํ•ด์„œ A๋ฅผ ๋ฐ›๋„๋ก ๋งˆ์Œ๋จน์—ˆ๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ ์••์ถ• ํŒŒ์ผ์„ ์‹คํ–‰ ์‹œ์ผœ ๋ดค๋‹ค.

Stage 1
Password: _

ํ”„๋กœ๊ทธ๋žจ์€ Password๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ํ™”๋ฉด์—์„œ ํ•˜์—ผ์—†์ด ๋ฉˆ์ถฐ์žˆ์—ˆ๋‹ค. ์ด์ œ ์ถ”์ธก๊ณผ ์ถ”๋ก ์˜ ์˜์—ญ์œผ๋กœ ๋“ค์–ด๊ฐˆ ์‹œ๊ฐ„์ด๋‹ค. ๋จผ์ € Password๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ ค๋ฉด ๋Œ€๋žต ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ผ์„๊ฒƒ์ด๋‹ค. ๋ชจ๋นˆ์ผˆ์€ C๋กœ ์˜ˆ์ƒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•ด ๋ดค๋‹ค.

function stage1() {
  printf("Stage 1\n");

  char password[20];
  scanf(&password, %s);

  if (strcmp(password, "๋น„๋ฐ€๋ฒˆํ˜ธ") == 0)
      goto STAGE2;
  else
      return;
}

๊ทธ๋ž˜ ๋ญ ๋Œ€์ถฉ ์ด๋Ÿฐ์‹์ด ์•„๋‹๊นŒ? ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ์™€๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์ผ๋‹จ scanf ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ์„ ๋ฐ›๊ณ  ์žˆ์„ ๊ฒƒ์ด๊ณ  password๋ฅผ ์ž…๋ ฅ ๋ฐ›์„ ๊ณต๊ฐ„์ด ํ•„์š” ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ € ๋ถ€๋ถ„์„ ์‹คํ–‰ ํ•  ์ฏค์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์Šคํƒ์ด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ ๋˜์–ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ฒ˜์Œ stage1 ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ๋˜๋ฉด ์ผ๋‹จ ํ•จ์ˆ˜๋ฅผ ์œ„ํ•œ ์Šคํƒ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๊ฒŒ ๋œ๋‹ค. ์Šคํƒ์ด ๋งŒ๋“ค์–ด์ง€๋ฉด ๊ฐ€์žฅ ์œ„์—๋Š” ESP์™€ EBP๊ฐ€ ์žˆ๋‹ค.

๋‹ค์Œ์€ password๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด ๊ณต๊ฐ„์„ ํ• ๋‹น ํ•ด ๋‘์—ˆ์„๊ฒƒ์ด๊ณ , ๊ทธ ๋‹ค์Œ์€ ์ด stage1์ด๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์„ ๋งˆ์นœ ๋’ค์— return ํ•  ๊ณณ์˜ address๊ฐ€ ์‘ค์…”์ ธ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

stage1์„ ํ˜ธ์ถœ ํ•˜๋Š” ๋˜ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š”์ง„ ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ์•„๋ฌดํŠผ return ํ•  ๊ณณ์„ ์ €์žฅ ํ•ด ๋‘˜ ๊ฒƒ์ด๋‹ค.

๋ชจ๋นˆ์ผˆ์€ ์Šคํƒ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด๊ณ  ๋‚˜์„œ์•ผ ๋‹ต์„ ์•Œ ๊ฒƒ๋งŒ ๊ฐ™์•˜๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ์š”๊ตฌ์— password ๋ฐฐ์—ด์— ํ• ๋‹น๋œ ๊ณต๊ฐ„๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‘ค์…” ๋„ฃ์œผ๋ฉด array ๊ณต๊ฐ„์ด ๋ปฅ ํ„ฐ์ ธ ๋ฒ„๋ฆด ๊ฒƒ์ด๊ณ  ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ๊นŒ์ง€ ๋ฎ์–ด์“ฐ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๋งˆ์น˜ ์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋‚˜๋Š” stage2๋กœ ์ด๋™ํ•˜๋„๋ก ์•„๋ž˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

Stage 1
Password: ldlkasjdlalasdkaksd

์ž…๋ ฅ์„ ์ด๋ ‡๊ฒŒ ์ค€ ๊ฒฐ๊ณผ, Password๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•œ Buffer Array๋Š” Overflow ํ•ด ๋ฒ„๋ ธ๊ณ  ๊ณต๊ฒฉ์€ ์„ฑ๊ณตํ–ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๋ชจ๋นˆ์ผˆ์€ ์‹ ๋‚˜์„œ ๋žญํ‚น ํŽ˜์ด์ง€์— ๋“ค์–ด ๊ฐ€ ๋ดค๋‹ค.

1์œ„ : ๊น€XX STAGE 2
2์œ„ : ์œคXX STAGE 2
3์œ„ : ๊ฐ•XX STAGE 1
...
11์œ„ : ๋ชจ๋นˆ์ผˆ STAGE 1

์ด๋Ÿด ์ˆ˜๊ฐ€! ์ฒซ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค๊ณ  ์ข‹์•„ํ•˜๊ณ  ์žˆ์„ ์‹œ๊ฐ„์€ ์—†์—ˆ๋‹ค. ๋ฒŒ์จ 3๋‹จ๊ณ„๋ฅผ ํ’€๊ณ  ์žˆ๋Š” ํ›ˆ๋ จ์ƒ๋“ค๋„ ์žˆ๋‹ค. ๋ชจ๋นˆ์ผˆ์€ ๋ถ€๋ฆฌ๋‚˜์ผ€ ๋‹ค์‹œ gdb๋ฅผ ๊บผ๋‚ด๋“ค๊ณ  Stage2๋กœ ์ง„์ž…ํ–ˆ๋‹ค. ๊ณผ์—ฐ ๋ชจ๋นˆ์ผˆ์˜ ์šด๋ช…์€?

profile
๊ฒฝ๋ ฅ๋„ ์ด๋ ฅ๋„ ์—†๋Š” ๋ณ‘์‹  ๐Ÿ™ƒ

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2020๋…„ 7์›” 28์ผ

๋ชจ๋นˆ์ผˆ์˜ ์šด๋ช…์€!! ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”

1๊ฐœ์˜ ๋‹ต๊ธ€