2019. 4. 8. 15:41ㆍSystem Hacking/[LOB] Hacker School
안녕하세요!
오늘은 LOB 16번 문제인
assassin문제풀이를 해보도록 하겠습니다!
소스코드는 아래와 같습니다!
힌트에서 FEBP라고 적혀있네요!
FEBP는 fake ebp로!
제가 FPO 풀 때도 설명드렸었는데!
ebp+4의 위치에 ret_address가 있으므로
ret_address에 leave, ret gadget을 넣고!
ebp 주소를 변조해서
변조된 ebp 상태서
leave 명령어(mov esp,ebp , pop ebp)가 실행되면
ret도 원래 자리에서 안하고
엉뚱한 자리에서 ret 이 이루어지는 그런 공격기법입니다!
더 자세한 부분은 구글에서 검색해보시고 공부하시면 좋을 것 같습니다!
소스코드는 별거 없는거 같습니다!
argv[ ] 형식으로 인자를 전달받고
버퍼[40] 할당
argument 2개 이상
리턴을 바이너리와 라이브러리로 못함!
마지막으로 strncpy!
(strcpy가 아니라 딱 48byte만큼만!)
일단 gdb를 실행시켜서
break point를 main이랑
main+159에 둬봤습니다!
(근데 main에 걸 필요는 없었어요..)
여기에 바로 밑에 보시면
leave, ret gadget 있죠?
main+159 = 0x080484df!
그래서 아래와 같이 abcd를 총 48개 넣어보았습니다!
이건 main에서의 breakpoint인데 이건 패스하구요!
저희는 이번에 argv 주소 말고
버퍼 직전의 주소를 활용해서 풀려고 하기때문에! ㅎ
여기 $ebp+0xffffffd8 부분을 보시면
아래와 같이 저희가 버퍼에 넣은 값들이 있습니다!
($ebp+0xffffffd8은 gdb에서 인자 push되는거 보고 찾은거에요!)
근데 여기 주소 값에서 -4를 해보면!
아래와 같이 버퍼의 주소를 가리키는
주소 값이 딱 setting이 되어있네요!
그럼 저희는 어디로 ebp를 조작하느냐?
0xbffffa8c-4한 부분으로요!
그래야지! pop ebp 하고 나면
esp가 0xbffffa8c로 오죠!
그래서 아래와 같이 최종 payload를 작성해보았습니다!
\x90 5개 + 25 쉘코드 + \x90 10개 + 저희가 조작할 ebp 0xbffffa88 + leave, ret gadeget 주소 (gdb에서 있음)
그러면 아래와 같이 ret address에서
다시한번 leave,ret 이 일어나면서
저희가 입력해둔 ebp로 조작이 되고
엉뚱한(=저희가 원하는) 곳에서
리턴이 실행되어
쉘이 따지게 됩니다!
고생하셨습니다
'System Hacking > [LOB] Hacker School' 카테고리의 다른 글
[어설픈] LOB 18번succubus 문제풀이 (0) | 2019.04.12 |
---|---|
[어설픈] LOB 17번 zombie_assassin 문제풀이 (0) | 2019.04.10 |
[어설픈] LOB 15번 giant 문제풀이 (0) | 2019.04.06 |
[어설픈] LOB 14번 bugbear 문제풀이 (0) | 2019.04.04 |
[어설픈] LOB 13번 darkknight 문제풀이 (0) | 2019.04.02 |