์ฒซ ๋ ๋ถํฐ ๋ฒ๋๋ ๊ต๊ด์๊ฒ ์๋ฑํ ์ง๋ฌธ์ผ๋ก ๊ณ ๋ฌธ๊ด์ผ๋ก ์๋ฆฌ๋งค๊นํ ๋ชจ๋น์ผ. ๊ณผ์ฐ ๋ฒ๋๋ ๊ต๊ด์ ๋ฌด์๋ฌด์ํ ํ๋ จ ๊ณผ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์์ ๊ฒ์ธ๊ฐ?
๋ชจ๋น์ผ์ ๊ณผ์ ๋ฅผ ๋ฐ๊ณ ์ง์ผ๋ก ๋์์์ ๊ณ ๋ฏผ์ ๋น ์ก๋ค. ๋น๋ฐ๋ฒํธ๋ฅผ ๋์ฒด ์ด๋ป๊ฒ ๊นจ๋ฉด ์ข๋จ ๋ง์ธ๊ฐ? ํ์ง๋ง ๋ฆฌ๋ ๋ณด๋์ ๋ญํน์ด ์ค์๊ฐ์ผ๋ก ์ด๋ฆ๊ณผ ๊ตฐ๋ฒ์ด ๋ณด์ด๋ ๋ ํนํ ํ๋ จ ๋ฐฉ์ ๋๋ฌธ์ ๊ฒฝ์์ฌ์ด ๋ถํ ๋ชจ๋น์ผ์ ์ด์ฌํ ํด์ 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๋ก ์ง์ ํ๋ค. ๊ณผ์ฐ ๋ชจ๋น์ผ์ ์ด๋ช ์?
๋ชจ๋น์ผ์ ์ด๋ช ์!! ์ด๋ป๊ฒ ๋๋์