Ret2ret & Reo2pop
Last updated
Last updated
AWS 해킹 학습 및 실습:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 학습 및 실습: HackTricks Training GCP Red Team Expert (GRTE)
이 기술의 주요 목표는 스택 내에 있는 기존 포인터를 악용하여 ASLR을 우회하는 것입니다.
기본적으로 스택 오버플로우는 일반적으로 문자열에 의해 발생하며, 문자열은 메모리의 끝에 널 바이트로 끝납니다. 이는 이미 존재하는 스택 내의 포인터가 가리키는 위치를 줄일 수 있도록 합니다. 따라서 스택에 0xbfffffdd
가 포함되어 있다면, 이 오버플로우는 0xbfffff00
으로 변환될 수 있습니다 (마지막으로 0으로 된 바이트에 주목).
만약 해당 주소가 스택 내의 셸코드를 가리키고 있다면, ret
명령어에 주소를 추가하여 이 명령이 도달할 때까지 흐름을 해당 주소로 이동시킬 수 있습니다.
따라서 공격은 다음과 같을 것입니다:
NOP 슬레드
셸코드
EIP에서 스택을 덮어쓰기하여 ret
에 대한 주소를 추가합니다 (RET 슬레드)
스트링에 의해 추가된 0x00이 스택 내의 주소를 수정하여 NOP 슬레드를 가리키게 합니다
이 링크를 통해 취약한 이진 파일의 예제와 이 링크를 통해 공격을 확인할 수 있습니다.
스택 내에서 수정하고 싶지 않은 완벽한 포인터를 찾을 수 있다면 (ret2ret
에서는 최종 최하위 바이트를 0x00
으로 변경했습니다), 같은 ret2ret
공격을 수행할 수 있지만 RET 슬레드의 길이를 1만큼 줄여야 합니다 (따라서 최종 0x00
이 완벽한 포인터 바로 이전 데이터를 덮어씁니다), 그리고 RET 슬레드의 마지막 주소는 pop <reg>; ret
를 가리켜야 합니다.
이렇게 하면 완벽한 포인터 앞의 데이터가 스택에서 제거됩니다 (0x00
에 영향을 받는 데이터) 그리고 최종 ret
가 어떠한 변경도 없이 스택 내의 완벽한 주소를 가리키게 됩니다.
이 링크를 통해 취약한 이진 파일의 예제와 이 링크를 통해 공격을 확인할 수 있습니다.
AWS 해킹 학습 및 실습:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 학습 및 실습: HackTricks Training GCP Red Team Expert (GRTE)