# AW2Exec - GOT/PLT {{#include ../../../banners/hacktricks-training.md}} ## **기본 정보** ### **GOT: 전역 오프셋 테이블** **전역 오프셋 테이블 (GOT)**은 동적으로 연결된 바이너리에서 **외부 함수의 주소**를 관리하는 메커니즘입니다. 이러한 **주소는 런타임까지 알려지지 않기 때문에** (동적 연결로 인해), GOT는 **이 외부 기호의 주소를 동적으로 업데이트하는 방법**을 제공합니다. GOT의 각 항목은 바이너리가 호출할 수 있는 외부 라이브러리의 기호에 해당합니다. **함수가 처음 호출될 때, 그 실제 주소는 동적 링커에 의해 해결되어 GOT에 저장됩니다**. 이후 동일한 함수에 대한 호출은 GOT에 저장된 주소를 사용하여 주소를 다시 해결하는 오버헤드를 피합니다. ### **PLT: 프로시저 링크 테이블** **프로시저 링크 테이블 (PLT)**은 GOT와 밀접하게 작동하며 외부 함수 호출을 처리하기 위한 트램폴린 역할을 합니다. 바이너리가 **외부 함수를 처음 호출할 때, 제어는 해당 함수와 연결된 PLT의 항목으로 전달됩니다**. 이 PLT 항목은 함수의 주소가 아직 해결되지 않은 경우 동적 링커를 호출하여 주소를 해결하는 역할을 합니다. 주소가 해결된 후, 그것은 GOT에 저장됩니다. **따라서,** GOT 항목은 외부 함수나 변수의 주소가 해결된 후 직접 사용됩니다. **PLT 항목은 이러한 주소의 초기 해결을 동적 링커를 통해 용이하게 하기 위해 사용됩니다.** ## 실행 가져오기 ### GOT 확인 GOT 테이블의 주소를 가져오려면: **`objdump -s -j .got ./exec`** ![](<../../../images/image (619).png>) GEF에서 **실행 파일**을 **로드**한 후 **GOT**에 있는 **함수**를 **볼 수 있는지** 확인하세요: `gef➤ x/20x 0xADDR_GOT` ![](<../../../images/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (5).png>) GEF를 사용하여 **디버깅** 세션을 **시작**하고 **`got`**을 실행하여 GOT 테이블을 확인할 수 있습니다: ![](<../../../images/image (621).png>) ### GOT2Exec 바이너리에서 GOT는 **함수의 주소** 또는 **PLT** 섹션의 주소를 가지고 있습니다. 이 임의 쓰기의 목표는 **나중에 실행될 함수의 GOT 항목을** **`system`** **함수의 PLT 주소**로 **덮어쓰는** 것입니다. 이상적으로는, **당신이 제어하는 매개변수로 호출될 함수의 GOT를 덮어써야 합니다** (그래야 시스템 함수에 전달되는 매개변수를 제어할 수 있습니다). **`system`** **이 스크립트에서 사용되지 않는 경우**, 시스템 함수는 PLT에 항목이 **없습니다**. 이 시나리오에서는 먼저 `system` 함수의 주소를 **유출**한 다음 GOT를 이 주소를 가리키도록 덮어써야 합니다. PLT 주소는 **`objdump -j .plt -d ./vuln_binary`**로 확인할 수 있습니다. ## **원 가젯** {{#ref}} ../one-gadget.md {{#endref}} ## **보호** **전체 RELRO** 보호는 바이너리가 시작될 때 모든 함수의 주소를 해결하고 그 후 **GOT 테이블을 읽기 전용**으로 만들어 이러한 종류의 기술로부터 보호하기 위해 설계되었습니다: {{#ref}} ../common-binary-protections-and-bypasses/relro.md {{#endref}} ## 참조 - [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite) - [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook) {{#include ../../../banners/hacktricks-training.md}}