移动端渗透测试—Android
Android
Android 是由 Google 开发的一款基于 Linux 内核的开源移动操作系统,广泛应用于智能手机、平板电脑等触摸屏设备。它基于 Java 语言,运行在 Dalvik 或 ART 虚拟机上,具备类 Unix 特性。除了智能手机和平板电脑,Android 还支持多种设备,包括:
- Android-x86:适用于 PC。
- Android TV:专为电视设计。
- Android Auto:用于汽车。
- Wear OS(原 Android Wear):面向可穿戴设备。
截至 2021 年 5 月,Android 是全球使用最广泛的操作系统,活跃设备超过 30 亿台。
环境配置
模拟器选择
推荐使用 雷电模拟器 进行 Android 渗透测试。
系统版本:Android 9
设置步骤:
安装雷电模拟器并启动。
进入模拟器设置,启用 开发者模式:
- 进入 设置 > 关于手机。
- 连续点击 版本号 多次,直到提示已进入开发者模式。
注意:需要在 雷电多开器 中将设备设置为 System.vmdk 可写入,并开启 Root 权限。
MITM 抓包
MITM(中间人攻击)抓包是移动端渗透测试的重要环节,通过拦截网络通信获取数据包。
安装 BurpSuite 证书
Android 7 及以上版本的 APP 默认仅信任系统证书,用户证书需要特殊配置才能被信任。以下是安装 BurpSuite 证书的步骤:
导出 BurpSuite 证书:
- 在 BurpSuite 中导出证书为 .der 格式。
转换证书格式:
- 使用 OpenSSL 将 .der 证书转换为 Android 可识别的 .pem 格式。
openssl x509 -inform DER -in [der证书名] -out [导出的证书名].pem
读取证书签名信息:
- 查看 .pem 证书的签名信息以获取证书的标识。
openssl x509 -inform PEM -subject_hash_old -in [证书名].pem
重命名证书:
- 根据上一步获取的签名信息(例如
9a5ba575
),将证书重命名为 Android 可识别的格式。
mv [证书名].pem [9a5ba575].0
- 根据上一步获取的签名信息(例如
配置 adb 环境并传输证书:
- 配置 adb(Android 调试桥)环境变量。
- 使用以下命令检查设备连接并传输证书:
# 查看连接的 Android 设备 adb devices # 进入设备 Shell(单设备) adb shell # 进入指定设备 Shell(多设备时使用 -s 指定设备 ID) adb -s [deviceId] shell # 切换到 root 用户 adb root # 传输证书到系统目录 adb push [9a5ba575].0 /system/etc/security/cacerts/ # 若提示 read-only 文件系统,检查模拟器 system.vmdk 是否可写 adb remount # 重新挂载后再次传输证书 # 设置证书权限为 644 adb shell chmod 644 /system/etc/security/cacerts/[9a5ba575].0
- 配置 adb(Android 调试桥)环境变量。
重启模拟器:
- 重启后,证书即配置完成,可被系统信任。
使用 BurpSuite 抓包
在 BurpSuite 中设置全局代理监听,端口通常为 8080。
方法一:配置 Wifi 代理
步骤:
在模拟器中进入 设置 > WiFi。
修改 WiFi 网络,设置代理为 BurpSuite 的 IP 和端口(通常为 Windows 的 IP 和 8080 端口)。
打开浏览器访问百度,验证是否抓到数据包,并检查证书是否生效。
缺点:
- 每次抓包需手动配置代理,操作繁琐。
- 部分 APP 会检测 WiFi 代理并拒绝连接。
方法二:配置 VPN
工具:使用 Postern 配置 VPN。
步骤:
在 Postern 中设置 VPN,IP 为 Windows 的 IP,端口为 BurpSuite 的代理端口(默认 8080)。
在 Postern 的 配置规则 中,设置动作为 通过代理连接,选择 BurpSuite 代理。
抓包完成后,若需停止抓包,将规则改为 直连。
缺点:
- 部分 APP 会检测 VPN,导致抓包失败。
抓包限制
APP 可能采取以下措施限制抓包:
- 检测 WiFi 代理或 VPN。
- 检测设备是否为模拟器或是否已 Root。
- 使用 SSL Pinning(证书单向绑定),验证服务器证书是否可信。
- 使用 mTLS(证书双向绑定),服务器和客户端相互验证证书。
判断抓包限制:
- APP 断网或闪退通常表明存在抓包限制。
绕过抓包限制
单向认证绕过
单向认证:客户端(APP)验证服务器证书,确保通信安全,防止中间人攻击。
绕过方法:通过 Hook 修改 APP 运行时逻辑,禁用证书验证。
使用 Xposed / LSposed
工具:
- Magisk:Root 管理工具,可隐藏 Root 痕迹(防止银行类 APP 检测到 Root 后拒绝访问)。
- LSposed:Xposed 框架的升级版,支持 Hook 模块以修改 APP 行为。
- JustTrustMe:LSposed 模块,专门用于绕过 SSL Pinning。
Magisk 安装步骤:
安装 Magisk Terminal Emulator。
在终端中依次输入
m
、Y
、1
、a
、1
,将 Magisk 安装到/system
目录。强制重启模拟器,使用自定义 Magisk 覆盖安装,检查 Magisk 状态。
安装 Root Explorer,授予永久超级用户权限。
进入
/system/xbin/su
目录,重命名su
文件。再次强制重启,确认 Magisk 安装完成。
在 Magisk 设置中启用 Zygisk(将 Magisk 注入 Zygote 进程,Zygote 是所有 Android 进程的父进程)。
LSposed 安装步骤:
将 LSPosed-v1.8.4-6609-zygisk-release.zip 拖入模拟器。
在 Magisk 的 模块 中选择 从本地安装,找到并安装 LSposed 压缩包。
安装完成后强制重启模拟器。
安装 LSPosed Manager.apk。
JustTrustMe 安装与使用:
安装 JustTrustMe 模块,并在 LSposed 中启用。
在 JustTrustMe 中勾选目标 APP,结合代理即可抓包。
说明:
- JustTrustMe 可绕过 X509 SSL 类和 OkHttp 类的证书验证逻辑。
使用 Frida
Frida 是一款基于 Python + JavaScript 的 Hook 与调试框架,实现 app 逆向的强大工具。
Frida 客户端安装:
# 安装 Frida 工具
pip install frida-tools
pip install frida
npm install frida
Frida 服务端安装:
从 Frida 17.2.15 下载 frida-server-17.2.15-android-x86_64.xz 并解压。
将 Frida 服务端推送到 Android 设备,并启动服务:
adb push frida-server-17.2.15-android-x86_64 /data/local/tmp/frida-server adb root adb shell cd /data/local/tmp chmod 777 frida-server ./frida-server &
确认 Frida 服务启动(默认监听端口 27042)。
将 Android 的 27042 端口映射到 Windows:
adb forward tcp:27042 tcp:27042
Frida 使用步骤:
查看设备上安装的 APP:
frida-ps -Uai
传输 BurpSuite 证书到设备:
adb push burp.der /data/local/tmp/cert.crt
运行 Hook 脚本以绕过 SSL Pinning:
frida -U -f [App包名] -l [Hook脚本路径] # 示例 frida -U -f com.xingin.xhs -l D:\Frida\frida-android-repinning.js
Frida 会自动启动目标 APP,并执行 Hook 脚本。
双向认证绕过
双向认证:双向认证要求服务器向 APP 证明身份(如传统 HTTPS),还要求 APP 向服务器提供合法证书以验证其身份,从而实现双向信任。
- 服务器验证:App 通过预置的根证书验证服务器证书的有效性(如域名、有效期、CA 签名),防止伪冒服务器。
- APP 验证:服务器要求 APP 提交客户端证书,验证其是否由受信任的 CA 签发,且包含合法身份标识(如设备 ID、用户 ID)。
领域:金融、电商、政务 app 可能会使用双向认证。
绕过方法:在存在双向验证的 APP 中,一般均预先配置了 APP 的客户端证书。如果可以通过逆向提取 APP 内置的 客户端证书及其私钥,即可伪造身份绕过双向认证。
参考:https://mp.weixin.qq.com/s/0uItUS5P8gFQ1Cu5-jkCgQ
使用 eBPF
利用 Linux 内核抓包,但仅支持 Android 12 以上操作系统。
adb push ecapture /data/local/tmp/
adb shell chmod 777 /data/local/tmp/ecapture
说明:eBPF 抓包不支持流量转发、重放、修改,只能看。