본문 바로가기

System Hacking/Exploit-Exercise fusion

Exploit-Exercise :: fusion level04 by ORANG.



[2015. 03. 02 ] 수정


타이밍 어택 문제. 이런 유형은 처음이라 신기했다.

소스를 보면 패스워드를 비교하며, 일치할 때와 일치하지 않을 때, 1/400초 정도 차이가 생긴다.

-> 브루트 포싱을 방지하기 위해 넣었다고 한다.(주석)

이 점을 이용하여 시간을 재면, 정확한 패스워드를 찾아낼 수 있음을 이용하면 패스워드 인증을 통과할 수 있다.

한글자씩 패스워드를 넣어주어 시간차이를 통해 찾아냄.



리모트 환경에서 오버플로를 통해 SSP를 우회하는 방법을 찾던 중, 이 자료가 도움이 많이 되었다

http://www.hackerschool.org/Sub_Html/HS_Service/DocuTrans/View_All.html?uid=5


Position Independent Executable(PIE)가 적용된 문제는 처음이라 많이 헤맸다.

PIE에 대한 자료를 많이 찾지는 못하고, 디버깅하며 삽질하던 중 발견한 부분들을 통해 알아낸 부분은..

(이 문제는 알람이 15초로 정해져있어 디버깅하기 매우 힘들다..)


우선 함수의 PLT테이블을 보니, JMP 0x30(%ebx) 이런 식으로 GOT테이블에 접근하도록 되어있었다.

-> GOT의 주소를 알아내려면 ebx 값을 알아야한다.

또, validate_credentials 함수의 에필로그 부분을 보니

   0xb78892af <+351>: add    $0x84c,%esp   

   0xb78892b5 <+357>: pop    %ebx

   0xb78892b6 <+358>: pop    %esi

   0xb78892b7 <+359>: pop    %edi

   0xb78892b8 <+360>: pop    %ebp

   0xb78892b9 <+361>: ret

ret 하기 전에 스택에 존재하는 값(접근 가능한 부분)을 pop ebx함.















level04


level04-2.c


libc-2.13.so


fus_lvl4.py