[Dreamhack] beginner: baby-bof
1. ๋ฌธ์
https://dreamhack.io/wargame/challenges/974
baby-bof
Description Simple pwnable 101 challenge Q. What is Return Address? Q. Explain that why BOF is dangerous.
dreamhack.io
Q. What is Return Address?
Q. Explain that why BOF is dangerous.
2. ํ์ด
๋ฌธ์ ์ ๋๊ฐ์ง ์ง๋ฌธ์ด ์ ์๋์ด ์์ผ๋ฏ๋ก, ์ด ์ง๋ฌธ์ ๋ํ ๋ต์ ํด๊ฒฐํ๋ฉด์ ๋ฌธ์ ๋ฅผ ํ์ด๋ณผ ๊ฒ์ด๋ค.
๋จผ์ ๋ฌธ์ ์คํํ์ผ์ ida๋ฅผ ํตํด ๋์ค์ด์ ๋ธ ํด๋ณด๋ฉด, ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ๋ณด์ฌ์ง๋ค.
the main function doesn't call win function (0x40125b)!
win ํจ์์ ์ฃผ์์ main ํจ์๊ฐ win ํจ์๋ฅผ callํ์ง ์๋๋ค๋ ๋ฌธ์์ด์ด ์ถ๋ ฅ๋๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์, win ํจ์๋ฅผ ์คํ์ํค๋ฉด ํ๋๊ทธ๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ด๋ผ๊ณ ํ๋จํ์๋ค.
๋์ปดํ์ผํด๋ณด๋ฉด ๋์ฑ ์์ธํ ์ฝ๋๊ฐ ๋ณด์ด๋๋ฐ, name์ผ๋ก 15๊ธ์์ string์ scanf๋ฅผ ํตํด ์ ๋ ฅ๋ฐ๊ณ ๋ฐฐ์ด์ ์ฃผ์์ ๊ฐ์ ์ถ๋ ฅํด์ค๋ค. ๋ํ, hex value๊ฐ๊ณผ integer count๊ฐ์ ์ ๋ ฅ๋ฐ์ integer count์ ๊ฐ์๋งํผ hex value๊ฐ์ผ๋ก ๋ฐ๊พผ๋ค.
int __cdecl main(int argc, const char **argv, const char **envp)
{
__int64 v3; // rdx
__int64 v4; // rdx
_QWORD v6[2]; // [rsp+0h] [rbp-10h] BYREF
proc_init(argc, argv, envp);
printf("the main function doesn't call win function (0x%lx)!\n", win);
printf("name: ");
__isoc99_scanf("%15s", v6);
printf("GM GA GE GV %s!!\n: ", (const char *)v6);
puts("| addr\t\t| value\t\t|");
for ( idx = 0LL; idx <= 15; ++idx )
printf("| %lx\t| %16lx\t|\n", &v6[idx], v6[idx]);
printf("hex value: ");
__isoc99_scanf("%lx%c", &value, v3);
printf("integer count: ");
__isoc99_scanf("%d%c", &count, v4);
for ( idx = 0LL; idx < count; ++idx )
v6[idx] = value;
puts("| addr\t\t| value\t\t|");
for ( idx = 0LL; idx <= 15; ++idx )
printf("| %lx\t| %16lx\t|\n", &v6[idx], v6[idx]);
return 0;
}
์ค์ ๋ก ๋ฌธ์์ด์ด ์ถ๋ ฅ๋๋ฉด์ name๊ฐ์ ์ ๋ ฅ๋ฐ๋๋ก ํ๊ณ , ์ ๋ ฅ์ ํด๋ณด๋ฉด ์คํ์ ์ฃผ์์ ๊ฐ์ด ํฌํจ๋์ด์ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
asdf๋ฅผ ์ฌ๋ฌ๋ฒ ์ ๋ ฅํด์ ์ด๋ค์์ผ๋ก ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง ํ์ธํด๋ณด๋ฉด, ์ ๋ ฅํ ๋ฌธ์์ด์ด ์คํ์ ๊ฐ์ฅ ์ต์๋จ์ ์ ์ฅ๋๊ณ ์์๋ค.
+)
๊ทธ ๋ค์ ์ค์ ๋ก 11๊ฐ์ 1111(์ง์ ํ hex๊ฐ)์ด ์คํ์ ์ ์ฅ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๋, count ๊ฐ์ ๋ํ ๊ฒ์ฌ๊ฐ ์ ํ ์กด์ฌํ์ง ์๋๋ค. ์ฆ, ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋์ด์์ ๋ ๋ง์ ๋ฒ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊น์ง ์ํฅ์ ๋ผ์น ์ ์๋ค -> bof ๋ฐ์ ๊ฐ๋ฅ
๋ฐ๋ผ์ bof์ทจ์ฝ์ ์ ํตํด ์คํ์ ๊ฐ์ 0x40125b์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ฉด win ํจ์๊ฐ ์คํ๋์ด flag ๊ฐ์ด ์ถ๋ ฅ๋ ์ ์์ ๊ฒ์ด๋ค.
Q. What is Return Address? ์ฆ main ํจ์์ ๋ฆฌํด ์ฃผ์๋ฅผ ๋ณ์กฐํ์ฌ ์ํ๋ ์์์ ์ฃผ์๋ก ์ด๋ํ๋๋ก ๋ณ์กฐํ ๊ฒ์ด๋ค.
Q. Explain that why BOF is dangerous.
์ด๋ ๊ฒ bof ์ทจ์ฝ์ ์ ์์์ ํจ์๋ฅผ ๋ง์๋๋ก ์คํํ ์ ์๋๋ก ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ํํ ์ทจ์ฝ์ ์ด๋ค.