#About
[그림 1] - cruel.c 소스 코드 확인
#Solution
해당 문제는 아래의 두 그림처럼 스택 영역에서의 실행권한이 없는 NX bits 설정과 메모리 영역을 랜덤하게 바꾸는 ASLR이 설정되어
있다는것 이외에는 기본적인 BOF 문제이며, 문제를 해결하기 위해선 hint에서 주어진 RET sleding과 RTL 을 이용해야할 것 같다
[그림 2] - NX bits 설정
(스택 영역에 실행을 의미하는 x 권한이 없는 것을 확인할 수 있음)
[그림 3] - ASLR 설정
( [그림 2]와 [그림3]의 메모리 주소를 살펴보면 ASLR의 영향으로 메모리 주소가 다른것을 확인할 수 있음 )
RET Sleding을 사용하기 전, RTL에 사용할 함수는 execl이며 execl의 함수의 특성상 인자의 끝이 NULL로 끝나야한다 따라서 아래와 같이
ret에 중단점을 걸어 둔 뒤, 두 번의 실행을 통해 비교분석 결과, 변하지 않는 부분을 다수 찾을 수 있지만 그 중 아래와 같이 0x008caff4를 확인할 수 있다
[그림 4] - 두 번의 실행을 통한 결과 비교
또한 0x008caff4는 아래와 같이 NULL값을 가지는 것을 확인할 수 있다
[그림 5] - NULL 값 확인
따라서 RET Sleding 기법을 통해 7번의 ret과 그 후 오게 될 4바이트는 execl 함수의 주소가 되어야 하며,
0x008bad44에 담긴 값인 0x008cad3c는 execl 함수가 실행할 파일명이 된다
[그림 6] - 링크 파일 생성
실행할 주소인 0x008cad3c를 위와 같이 셸을 띄우는 코드를 작성 후 링크파일을 걸어주고
마지막으로 페이로드에 필요한 execl함수와 ret의 주소를 아래와 같이 구해주었다
[그림 7] - execl 함수 주소 확인
[그림 8] - ret 명령 주소 확인
모두 구해주었으니 최종 페이로드는 | buffer 260 | ret 4 * 7 | execl | 이 될 것이고 아래와 같이 셸을 획득할 수 있다
[그림 9] - 셸 획득
'Wargame' 카테고리의 다른 글
2011 [Hack The Packet] L_03 (0) | 2018.03.21 |
---|---|
2011 [Hack The Packet] L_01 (0) | 2018.03.14 |
[MEMORY] 2012 Nuit Du hack > Password Manager 2 (0) | 2017.12.28 |
[MEMORY] 2012 Nuit Du Hack > Password Manager 1 (0) | 2017.12.28 |
[MEMORY] 2011 Nuit Du Hack > Forensics 300 (0) | 2017.12.28 |