[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함.
'System Hacking > Exploit-Exercise fusion' 카테고리의 다른 글
Exploit-Exercise :: fusion level03 by ORANG (0) | 2014.12.02 |
---|---|
Exploit-Exercise :: fusion level02 by ORANG (0) | 2014.11.05 |
Exploit-Exercise :: fusion level01 by ORANG (0) | 2014.11.02 |
Exploit-Exercise :: fusion level00 by ORANG (0) | 2014.11.02 |