mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/common-
This commit is contained in:
parent
9f80f9316b
commit
3517b55d79
2 changed files with 32 additions and 29 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로부터 영웅까지 AWS 해킹 배우기</strong>!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
|
@ -10,13 +10,13 @@ HackTricks를 지원하는 다른 방법:
|
|||
* [**공식 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)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 기여하세요.
|
||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 기여하세요.
|
||||
|
||||
</details>
|
||||
|
||||
## 기본 정보
|
||||
|
||||
**Address Space Layout Randomization (ASLR)**은 운영 체제에서 사용되는 보안 기술로, 시스템 및 응용 프로그램 프로세스에서 사용하는 **메모리 주소를 무작위로 변경**합니다. 이렇게 함으로써 특정 프로세스 및 데이터의 위치를 예측하는 것이 상당히 어려워져 공격자가 스택, 힙, 라이브러리 등을 예측하여 특정 유형의 공격(특히 버퍼 오버플로우)을 완화하는 데 도움이 됩니다.
|
||||
**Address Space Layout Randomization (ASLR)**은 운영 체제에서 사용되는 보안 기술로, 시스템 및 응용 프로그램 프로세스에서 사용하는 **메모리 주소를 무작위로 변경**합니다. 이렇게 함으로써 특정 프로세스 및 데이터의 위치를 예측하는 것이 상당히 어려워지며, 스택, 힙, 라이브러리 등 특정 유형의 공격을 완화하는 데 도움이 됩니다.
|
||||
|
||||
### **ASLR 상태 확인**
|
||||
|
||||
|
@ -43,13 +43,13 @@ setarch `uname -m` -R ./bin args
|
|||
```
|
||||
### **ASLR 활성화**
|
||||
|
||||
ASLR을 **활성화**하려면 `/proc/sys/kernel/randomize_va_space` 파일에 **2** 값을 작성할 수 있습니다. 일반적으로 루트 권한이 필요합니다. 전체 무작위화를 활성화하려면 다음 명령을 사용할 수 있습니다:
|
||||
ASLR를 **활성화**하려면 `/proc/sys/kernel/randomize_va_space` 파일에 **2** 값을 작성할 수 있습니다. 일반적으로 루트 권한이 필요합니다. 전체 무작위화를 활성화하려면 다음 명령을 사용할 수 있습니다:
|
||||
```bash
|
||||
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
### **부팅 시 지속성**
|
||||
### **부팅 간 지속성**
|
||||
|
||||
`echo` 명령어로 한 변경 사항은 일시적이며 재부팅시 초기화됩니다. 변경 사항을 지속적으로 유지하려면 `/etc/sysctl.conf` 파일을 편집하여 다음 라인을 추가하거나 수정해야 합니다:
|
||||
`echo` 명령어로 한 변경 사항은 일시적이며 재부팅시 초기화됩니다. 변경 사항을 지속적으로 유지하려면 `/etc/sysctl.conf` 파일을 편집하여 다음 줄을 추가하거나 수정해야 합니다:
|
||||
```tsconfig
|
||||
kernel.randomize_va_space=2 # Enable ASLR
|
||||
# or
|
||||
|
@ -68,18 +68,20 @@ sudo sysctl -p
|
|||
PaX는 프로세스 주소 공간을 **3 그룹**으로 나눕니다:
|
||||
|
||||
* **코드와 데이터** (초기화된 및 초기화되지 않은): `.text`, `.data`, 및 `.bss` —> `delta_exec` 변수에서 **16비트**의 엔트로피. 이 변수는 각 프로세스마다 무작위로 초기화되며 초기 주소에 추가됩니다.
|
||||
* `mmap()`로 할당된 **메모리** 및 **공유 라이브러리** —> **16비트**, `delta_mmap`이라고 불림.
|
||||
* **스택** —> **24비트**, `delta_stack`이라고 불림. 그러나 실제로 **11비트**를 사용합니다 (10번째부터 20번째 바이트까지 포함), **16바이트**에 정렬됨 —> 이로 인해 **524,288개의 가능한 실제 스택 주소**가 생성됩니다.
|
||||
* `mmap()`에 의해 할당된 **메모리** 및 **공유 라이브러리** —> **16비트**, `delta_mmap`이라고 함.
|
||||
* **스택** —> **24비트**, `delta_stack`이라고 함. 그러나 실제로 **11비트**를 사용합니다 (10번째부터 20번째 바이트까지 포함), **16바이트**에 정렬됨 —> 이로 인해 **524,288개의 가능한 실제 스택 주소**가 생성됩니다.
|
||||
|
||||
이전 데이터는 32비트 시스템을 위한 것이며 최종 엔트로피 감소로 인해 ASLR을 우회하여 공격이 성공적으로 완료될 때까지 실행을 여러 번 시도할 수 있습니다.
|
||||
이전 데이터는 32비트 시스템을 위한 것이며 최종 엔트로피 감소로 인해 공격이 성공적으로 완료될 때까지 실행을 여러 번 시도하여 ASLR을 우회할 수 있습니다.
|
||||
|
||||
#### 무차별 대입 아이디어:
|
||||
|
||||
* 공격이 로컬인 경우, libc의 기본 주소를 무차별 대입할 수 있습니다 (32비트 시스템에 유용함):
|
||||
* **쉘코드 앞에 큰 NOP 슬레드를 호스팅할만큼 충분한 오버플로우가 있다면**, 스택 주소를 무차별 대입하여 흐름이 **NOP 슬레드의 일부를 건너뛰도록** 할 수 있습니다.
|
||||
* 오버플로우가 그리 크지 않고 공격을 로컬에서 실행할 수 있는 경우, **환경 변수에 NOP 슬레드와 쉘코드를 추가**할 수 있습니다.
|
||||
* 공격이 로컬인 경우, libc의 베이스 주소를 무차별 대입해 볼 수 있습니다 (32비트 시스템에 유용함):
|
||||
```python
|
||||
for off in range(0xb7000000, 0xb8000000, 0x1000):
|
||||
```
|
||||
* 원격 서버를 공격할 때 `libc` 함수 `usleep`의 주소를 **브루트 포스**하여 10을 인자로 전달할 수 있습니다. 서버가 응답하는 데 10초 더 걸린다면, 이 함수의 주소를 찾은 것입니다.
|
||||
* 원격 서버를 공격할 때 `libc` 함수 `usleep`의 주소를 **브루트 포스**하여 10을 인자로 전달할 수 있습니다. 서버가 응답하는 데 10초 더 걸린다면 이 함수의 주소를 찾은 것입니다.
|
||||
|
||||
{% hint style="success" %}
|
||||
64비트 시스템에서 엔트로피가 훨씬 높아 이것은 불가능합니다.
|
||||
|
@ -87,9 +89,9 @@ for off in range(0xb7000000, 0xb8000000, 0x1000):
|
|||
|
||||
### 누출이 있는 경우
|
||||
|
||||
* **도전 과제는 누출을 제공하는 것입니다**
|
||||
* **누출이 주어지는 도전**
|
||||
|
||||
누출이 주어진 경우 (쉬운 CTF 도전 과제), 해당 누출로부터 오프셋을 계산할 수 있습니다 (예를 들어, 공격 중인 시스템에서 사용되는 정확한 libc 버전을 알고 있다고 가정합니다). 이 예제 exploit은 [**여기의 예제**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak)에서 추출되었습니다 (자세한 내용은 해당 페이지를 확인하십시오):
|
||||
누출이 주어진 경우 (쉬운 CTF 도전), 해당 누출로부터 오프셋을 계산할 수 있습니다 (예를 들어 공격 중인 시스템에서 사용되는 정확한 libc 버전을 알고 있다고 가정). 이 예제 exploit은 [**여기의 예제**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak)에서 추출되었습니다 (자세한 내용은 해당 페이지를 확인하세요):
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -124,7 +126,7 @@ p.interactive()
|
|||
|
||||
* **Format Strings Arbitrary Read**
|
||||
|
||||
ret2plt와 마찬가지로, 포맷 문자열 취약점을 통해 임의의 읽기가 가능하다면 **GOT**에서 **libc 함수**의 주소를 유출할 수 있습니다. 다음은 [**여기에서의 예제**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)입니다:
|
||||
ret2plt와 마찬가지로 포맷 문자열 취약점을 통해 임의의 읽기가 가능하면 **GOT**에서 **libc 함수**의 주소를 유출할 수 있습니다. 다음은 [**여기에서의 예제**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)입니다:
|
||||
```python
|
||||
payload = p32(elf.got['puts']) # p64() if 64-bit
|
||||
payload += b'|'
|
||||
|
|
|
@ -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>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나** **PDF 형식으로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](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)**를 팔로우하세요**.
|
||||
* **해킹 요령을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 기여하세요.
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [telegram 그룹](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -18,23 +18,24 @@ HackTricks를 지원하는 다른 방법:
|
|||
|
||||
PIE로 컴파일된 이진 파일은 **Position Independent Executable**의 약자로, **프로그램이 실행될 때마다 다른 메모리 위치에 로드**될 수 있어 하드코딩된 주소를 방지합니다.
|
||||
|
||||
이진 파일을 이용한 공격의 핵심은 **상대적 주소**를 이용하는 데 있습니다. 프로그램의 부분 간 오프셋은 절대 위치가 변경되더라도 동일하게 유지됩니다. **PIE 우회**를 위해서는 **스택**과 같은 취약점을 이용하여 일반적으로 **하나의 주소를 노출**시키면 됩니다. 한 번 주소를 얻으면 **고정된 오프셋**을 통해 다른 주소를 계산할 수 있습니다.
|
||||
이진 파일을 이용한 공격의 핵심은 **상대적 주소를 이용**하는 데 있습니다. 프로그램의 부분 간의 오프셋은 절대 위치가 변경되더라도 동일하게 유지됩니다. **PIE 우회**를 위해서는 **스택**과 같은 취약점을 이용하여 주소를 하나 **유출**하면 됩니다. 한 번 주소를 얻으면 **고정된 오프셋**을 통해 다른 주소를 계산할 수 있습니다.
|
||||
|
||||
PIE 이진 파일을 공격할 때 유용한 팁은 메모리 페이지가 0x1000 바이트 크기로 무작위화의 단위인 **기본 주소가 일반적으로 000으로 끝난다는 것**입니다. 이 정렬은 올바른 기본 주소가 식별되었는지를 나타내는 것으로, **해킹이 예상대로 작동하지 않을 때 중요한 확인 사항**이 될 수 있습니다.\
|
||||
또는 이를 이용하여, 주소가 **`0x649e1024`**에 위치한다는 것을 노출하면 **기본 주소가 `0x649e1000`**임을 알 수 있고, 거기서 함수와 위치의 **오프셋을 계산**할 수 있습니다.
|
||||
PIE 이진 파일을 공격할 때 유용한 팁은 메모리 페이지가 0x1000 바이트 크기로 무작위화의 단위인 **기본 주소가 일반적으로 000으로 끝난다**는 것입니다. 이 정렬은 올바른 기본 주소가 식별되었는지를 나타내는 중요한 **검사**가 될 수 있습니다.\
|
||||
또는 이를 이용하여 **exploit에 사용**할 수 있습니다. 주소가 **`0x649e1024`**에 위치한다는 것을 유출하면 **기본 주소가 `0x649e1000`**임을 알 수 있고 거기서 함수와 위치의 **오프셋을 계산**할 수 있습니다.
|
||||
|
||||
## 우회 방법
|
||||
|
||||
PIE를 우회하기 위해서는 **로드된 이진 파일의 주소를 노출**해야 합니다. 이를 위한 몇 가지 옵션이 있습니다:
|
||||
PIE를 우회하려면 **로드된 이진 파일의 주소를 유출**해야 합니다. 이를 위한 몇 가지 옵션이 있습니다:
|
||||
|
||||
* 노출을 **받은** 경우 (쉬운 CTF 도전 과제에서 일반적, [**이 예제**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)를 확인하세요)
|
||||
* 스택에서 **올바른 주소를 노출할 때까지 EBP 및 EIP 값을 무차별 대입**:
|
||||
* **ASLR 비활성화**: ASLR이 비활성화되면 PIE로 컴파일된 이진 파일은 항상 **동일한 주소에 로드**되므로 **PIE가 쓸모 없어집니다**. 객체의 주소는 항상 동일한 위치에 있습니다.
|
||||
* 유출을 **받는 경우** (쉬운 CTF 도전 과제에서 흔함, [**이 예제를 확인하세요**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
|
||||
* 스택에서 올바른 값을 유출할 때까지 **EBP 및 EIP 값을 무차별 대입**합니다:
|
||||
|
||||
{% content-ref url="bypassing-canary-and-pie.md" %}
|
||||
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
* 이진 파일의 주소를 노출하기 위해 [**format string**](../../format-strings/)과 같은 임의 읽기 취약점을 사용 (예: 이전 기술에서와 같이 스택에서)하여 바이너리의 기본을 얻고 거기서 오프셋을 사용합니다. [**여기에서 예제를 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
|
||||
* 이진 파일의 주소를 유출하기 위해 [**format string**](../../format-strings/)과 같은 임의 읽기 취약점을 사용하여 기본 주소를 얻고 거기서 오프셋을 사용합니다. [**여기에서 예제를 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
|
||||
|
||||
## 참고 자료
|
||||
|
||||
|
@ -42,14 +43,14 @@ PIE를 우회하기 위해서는 **로드된 이진 파일의 주소를 노출**
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 히어로까지 AWS 해킹을 배우세요**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나** **PDF 형식으로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](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)**를 팔로우하세요**.
|
||||
* **해킹 요령을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 기여하세요.
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [telegram 그룹](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue