Heap Overflow Exploit 공격 기법중 하나인 Function Pointer Overwrite 공격 기법입니다.

사용된 디버거: x64dbg(다운로드)


프로그램의 취약점인 parse 함수의 memcpy 부분입니다.

004114F1부터 memcpy 인자를 Stack에 Push 해줍니다.


call vul_http_server.4110CD

memcpy를 호출하는 함수입니다. memcpy를 호출하기 전 Stack의 상태는 위와 같습니다.

Stack의 FILO 구조로 memcpy(void *dest, const void *src, size_t count) 를 Stack에 Push 하였습니다.

dest는 416120임을 확인가능하므로 buffer의 시작지점은 416120임을 알 수 있습니다.

Dump 창을 buffer의 시작지점으로 이동한 뒤 스크롤을 내리다보면 log_func의 위치에 도달합니다.

log_func,의 위치는 416310에서 + 4byte 된 416314 입니다.


Python을 이용하여 A Packet을 503개 발송한 결과입니다. (시작 시 /를 포함하는 결과이므로 504에서 /를 제외한 503개)

Heap 영역인 log_func가 41 41 41 41 로 변조된 것을 보아 Exploit이 가능함을 알 수 있습니다.


Exploit 코드는 NOP + SHELLCODE + DUMMY + RET 형태로 작성합니다.

RET은 buffer의 시작 지점에서 4byte 추가하여 시작합니다.

Exploit을 작동시킨 뒤 call memcpy부터 디버깅을 시작, 덤프창을 416120으로 buffer의 시작지점으로 이동합니다.


buffer에 정상적으로 NOP, SHELLCODE, DUMMY, RET이 대입된것을 확인할 수 있습니다.


log_func를 buffer의 위치로 변조하여 NOP Sled에 진입, SHELLCODE를 정상적으로 작동시키는 모습을 확인할 수 있습니다.


프로그램 및 Exploit 출처 : https://cafe.naver.com/secuholic

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

VTable Overwrite 분석  (0) 2018.12.03

+ Recent posts