보안 공부하는 꼬깔이

FTZ level14 풀이

 

 

 

level14의 홈디렉토리 내용이다 . level15의 setuid가 걸린 attackme 파일 존재

 

hint 파일을 출력해보자.

 

 

이번 힌트에서는 c언어 소스코드에 더불어서 버퍼 오버플로우 포맷스트링 버그 학습에 효과적인 문제라는 친절한 설명도 적혀있다.

 

이제 코드를 해석해보자

 

 

소스 코드 해석을 참조하면 fgets 함수로 45바이트 만큼의 입력만 받는다. 아마 ret 변조를 통한 공략을 불가능하게 해둔 모양이다.

 

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

1 : buf[20]에서부터 check까지의 거리

2 : chack 위치에 0xdeadbeef를 덮어씌우는 페이로드 제작

 

 

우선 buf[20] 에서부터 check까지의 거리를 구해보자.

 

디버깅을 위해 attackme 프로그램을 tmp/ 폴더로 복사하자

 

 

0x080484a1 <main+17>:   lea    eax,[ebp-56] 해당 부분으로 buf에서 ebp까지의 거리를 구할 수 있다.

 

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

0x080484ad <main+29>:   cmp    DWORD PTR [ebp-16],0xdeadbeef 해당 부분은 조건문에서 check 변수와 0xdeadbeef 값을 비교하는 부분이다.

 

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

 

 

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

 

 

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

 

페이로드는 [buf~check거리] + [변조할값] 이런식으로 작성 할 것이다.

 

최종적으로 페이로드는 (python -c 'print "\x90"*40+"\xef\xbe\xad\xde"';cat) | ./attackme

 

페이로드가 성공적으로 들어갔고 /bin/sh 쉘이 실행됬다. my-pass 명령어로 level15 패스워드 출력

 

level14 clear ~

 

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

FTZ level16 풀이  (0) 2017.07.04
FTZ level15 풀이  (0) 2017.07.04
FTZ level13 풀이  (0) 2017.07.04
FTZ level12 풀이  (1) 2017.07.04
FTZ level11 풀이  (0) 2017.07.04