Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/arbitra

This commit is contained in:
Translator 2024-06-17 09:40:15 +00:00
parent 06926b3d3b
commit cb1eb8fa15

View file

@ -2,15 +2,15 @@
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 히어로까지 AWS 해킹을 배우세요**!</summary>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**까지 **AWS 해킹**을 배우세요!</summary>
다른 방법으로 HackTricks를 지원하는 방법:
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고**하거나 **HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 팔로우하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소로 **PR 제출**을 통해 해킹 요령을 공유하세요.
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요
* **Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소로 **PR 제출**하여 해킹 트릭을 **공유**하세요.
</details>
@ -18,41 +18,41 @@
### **GOT: Global Offset Table**
\*\*Global Offset Table (GOT)\*\*은 **동적으로 연결된 이진 파일**에서 **외부 함수의 주소를 관리**하는 메커니즘입니다. 이러한 **주소는 실행 시간까지 알려지지 않기 때문에** (동적 연결 때문에), GOT는 이러한 외부 심볼의 주소가 **해결된 후에 주소를 동적으로 업데이트**하는 방법을 제공합니다.
**Global Offset Table (GOT)**은 **동적으로 링크된 이진 파일**에서 **외부 함수의 주소를 관리**하는 메커니즘입니다. 이러한 **주소는 런타임에서 알려지지 않기 때문에** (동적 링킹으로 인해) GOT은 이러한 외부 심볼의 주소가 **해결된 후에 주소를 동적으로 업데이트**하는 방법을 제공합니다.
GOT의 각 항목은 이진 파일이 호출할 수 있는 외부 라이브러리의 심볼에 해당합니다. **함수가 처음 호출될 때 동적 링커에 의해 실제 주소가 해결**되고 GOT에 저장됩니다. 동일한 함수에 대한 후속 호출은 GOT에 저장된 주소를 사용하여 주소를 다시 해결하는 오버헤드를 피합니다.
### **PLT: Procedure Linkage Table**
\*\*Procedure Linkage Table (PLT)\*\*은 GOT와 밀접하게 작동하며 외부 함수 호출을 처리하기 위한 트램폴린 역할을 합니다. 바이너리가 **외부 함수를 처음 호출하면 해당 함수와 관련된 PLT 항목으로 제어가 전달**됩니다. 이 PLT 항목은 주소가 이미 해결되지 않은 경우 동적 링커를 호출하여 함수의 주소를 해결합니다. 주소가 해결되면 GOT에 저장됩니다.
**Procedure Linkage Table (PLT)**은 GOT와 밀접하게 작동하며 외부 함수 호출을 처리하기 위한 트램폴린 역할을 합니다. 바이너리가 **외부 함수를 처음 호출하면 해당 함수와 관련된 PLT 항목으로 제어가 전달**됩니다. 이 PLT 항목은 주소가 이미 해결되지 않은 경우 동적 링커를 호출하여 함수의 주소를 해결합니다. 주소가 해결되면 GOT에 저장됩니다.
**따라서,** 외부 함수 또는 변수의 주소가 해결되면 GOT 항목이 직접 사용됩니다. **PLT 항목은 동적 링커를 통해 이러한 주소의 초기 해결을 용이하게 합니다.**
**따라서,** 외부 함수 변수의 주소가 해결되면 GOT 항목이 직접 사용됩니다. **PLT 항목은 동적 링커를 통해 이러한 주소의 초기 해결을 용이하게**합니다.
## 실행 얻기
### GOT 확인
\*\*`objdump -s -j .got ./exec`\*\*를 사용하여 GOT 테이블의 주소를 얻습니다.
**`objdump -s -j .got ./exec`**를 사용하여 GOT 테이블의 주소를 얻으세요.
![](<../../../.gitbook/assets/image (619).png>)
GEF에서 **실행 파일을 로드한 후** GOT에 있는 **함수를 볼 수 있습니다**: `gef➤ x/20x 0xDIR_GOT`
GEF에서 **실행 파일을 로드한 후** GOT에 있는 **함수를 볼 수 있습니다**: `gef➤ x/20x 0xADDR_GOT`
![](https://github.com/carlospolop/hacktricks/blob/kr/.gitbook/assets/image%20\(620\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(5\).png)
![](<../../../.gitbook/assets/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) (1) (5).png>)
GEF를 사용하여 **디버깅 세션을 시작**하고 \*\*`got`\*\*을 실행하여 got 테이블을 볼 수 있습니다.
GEF를 사용하여 **디버깅 세션을 시작**하고 **`got`**을 실행하여 got 테이블을 볼 수 있습니다:
![](<../../../.gitbook/assets/image (621).png>)
### GOT2Exec
바이너리에서 GOT에는 **함수의 주소 또는** 함수 주소를 로드할 **PLT** 섹션이 포함되어 있습니다. 이 임의 쓰기의 목표는 나중에 **실행될 함수의 GOT 항목을** 덮어쓰는 것입니다. 이때 **예를 들어 `system` 함수의 PLT 주소로 덮어쓰기**합니다.
바이너리에서 GOT에는 **함수의 주소 또는** 함수 주소를 로드할 **PLT** 섹션이 있습니다. 이 임의 쓰기의 목표는 나중에 **실행될 함수의 GOT 항목을 덮어쓰는 것**입니다. 예를 들어 **`system`** 함수의 **PLT 주소**로 덮어쓰는 것입니다.
이상적으로, **제어할 수 있는 매개변수로 호출될 함수의 GOT를 덮어쓸 것**입니다 (따라서 시스템 함수로 전송되는 매개변수를 제어할 수 있게 됩니다).
이상적으로, **제어할 수 있는 매개변수로 호출될 함수의 GOT****덮어쓸 것**입니다 (따라서 시스템 함수로 전송되는 매개변수를 제어할 수 있게 됩니다).
\*\*`system`\*\*이 **스크립트에서 사용되지 않으면** 시스템 함수에는 PLT 항목이 **없을 것**입니다. 이 시나리오에서는 먼저 `system` 함수의 주소를 누출하고 그런 다음 GOT를 해당 주소로 지정하도록 덮어쓸 필요가 있습니다.
**`system`**이 **스크립트에서 사용되지 않으면** 시스템 함수에는 PLT 항목이 **없을 것**입니다. 이 시나리오에서는 먼저 `system` 함수의 주소를 누출하고 그 주소를 가리키도록 GOT를 덮어쓸 필요가 있습니다.
\*\*`objdump -j .plt -d ./vuln_binary`\*\*를 사용하여 PLT 주소를 볼 수 있습니다.
**`objdump -j .plt -d ./vuln_binary`**로 PLT 주소를 볼 수 있습니다.
## **One Gadget**
@ -62,7 +62,7 @@ GEF를 사용하여 **디버깅 세션을 시작**하고 \*\*`got`\*\*을 실행
## **보호 기능**
**FullRELRO** 보호는 바이너리가 시작될 때 모든 함수의 주소를 해결하고 이후 **GOT 테이블을 읽기 전용**으로 만들어 이러한 기술에 대응하는 것을 목적으로 합니다:
**Full RELRO** 보호는 바이너리가 시작될 때 모든 함수의 주소를 해결하고 **GOT 테이블을 읽기 전용**으로 만들어 이러한 기술에 대한 보호를 제공합니다:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md)
@ -75,14 +75,14 @@ GEF를 사용하여 **디버깅 세션을 시작**하고 \*\*`got`\*\*을 실행
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 히어로까지 AWS 해킹을 배우세요**!</summary>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**까지 **AWS 해킹**을 배우세요!</summary>
다른 방법으로 HackTricks를 지원하는 방법:
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고**하거나 **HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 팔로우하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소로 **PR 제출**을 통해 해킹 요령을 공유하세요.
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요
* **Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소로 **PR 제출**하여 해킹 트릭을 **공유**하세요.
</details>