Ret2plt
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
이 기술의 목표는 ASLR을 우회하기 위해 PLT의 함수에서 주소를 누출하는 것입니다. 예를 들어, libc의 puts
함수 주소를 누출하면, libc
의 기본 주소를 계산하고 다른 함수에 접근하기 위한 오프셋을 계산할 수 있습니다.
이는 pwntools
페이로드를 사용하여 수행할 수 있습니다 (여기에서):
puts
(PLT의 주소를 사용하여)가 GOT(전역 오프셋 테이블)에 위치한 puts
의 주소로 호출되는 방식을 주목하십시오. 이는 puts
가 puts
의 GOT 항목을 출력할 때, 이 항목이 메모리에서 puts
의 정확한 주소를 포함하게 되기 때문입니다.
또한 main
의 주소가 익스플로잇에 사용되어 puts
가 실행을 마치면 바이너리가 종료되는 대신 main
을 다시 호출합니다(따라서 누출된 주소는 계속 유효합니다).
이것이 작동하기 위해서는 **바이너리가 PIE로 컴파일될 수 없거나, PLT, GOT 및 main의 주소를 알기 위해 누출을 찾아야 합니다. 그렇지 않으면 먼저 PIE를 우회해야 합니다.
이 우회에 대한 전체 예제를 여기에서 찾을 수 있습니다. 이것은 그 예제의 최종 익스플로잇이었습니다:
64비트, ASLR 활성화, PIE 없음, 첫 번째 단계는 canary의 0x00 바이트까지 오버플로우를 채운 다음 puts를 호출하여 leak하는 것입니다. canary를 사용하여 ROP 가젯을 생성하여 GOT에서 puts의 주소를 leak하기 위해 puts를 호출하고, 그 다음 system('/bin/sh')
를 호출하는 ROP 가젯을 생성합니다.
64비트, ASLR 활성화, canary 없음, 자식 함수에서 main의 스택 오버플로우. GOT에서 puts의 주소를 leak하기 위해 puts를 호출하는 ROP 가젯을 호출한 다음 one gadget을 호출합니다.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)