“首先使用drozdr检测app中暴露的activity
run scanner.provider.finduris -a 包名,这里可以看到暴露的主件还是有不少:”
大佬这里写错了
Python2和adb需要设置环境变量
Drozer需安装在python2的Scripts目录下
把agent.apk安装到模拟器下
使用命令adb devices找到我们的模拟器设备
(如果找不到设备,则需要在模拟器bin的目录下启动cmd)
因devices 31415端口,使用adb进行端口转发
adb forward tcp:31415 tcp:31415
adb shell pm list package 查看所有包名
启动
drozer console connect
set PYTHONIOENCODING=UTF-8
run app.package.list
run app.package.list -f 包名
获取基本信息run app.package.info -a 包名
查看四大组件攻击面
利用暴露的activity实现登陆绕过
首先使用drozdr检测app中暴露的activity
run scanner.provider.finduris -a 包名,这里可以看到暴露的主件还是有不少:
调用服务组件: run app.service.start --action 服务名 --component 包名 服务名
调用activity组件: run app.activity.start --component 包名 组件名,可以用来检测登陆绕过漏洞
检测注入 run scanner.provider.injection -a com.mwr.example.sieve
查看是否存在数据泄露 run scanner.provider.finduris -a com.xxx.xzxx
检测目录遍历 run scanner.provider.traversal -a com.mwr.example.sieve
检测可以访问的URL: run scanner.provider.finduris -a 包名
查询URL的数据: run app.provider.query url
检测有没有拒绝服务漏洞:
发送空action: run app.broadcast.send --component 包名 广播名
发送空extras: run app.broadcast.send --action 广播名
基本测试命令:
查找已安装应用程序的包名称
dz> run app.package.list -f Sieve
遍历
使用内容提供程序读取外部文件
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/system/etc/hosts
自动化遍历
dz> run scanner.provider.traversal -a content://com.mwr.example.sieve.FileBackupProvider
利用服务
利用 CryptoService 加密消息dz> run app.service.send com.mwr.example.sieve com.mwr.example.sieve.CryptoService --msg 3452 2 3 --extra string com.mwr.example.sieve.KEY testpassword --extra string com.mwr.example.sieve.STRING "string to be encrypted" --bundle-as-obj
利用广播接收器
获取广播接收器
dz> run app.broadcast.info -a com.mwr.example.browser
dz> run app.broadcast.sniff --action com.myapp.USER_LOGIN(发送广播的动作名称)
其他命令
使用 drozer 模块查找 WebView 是否可利用
dz> run scanner.misc.checkjavascriptbridge -a com.vulnerable.js
代码执行
从剪贴板查看复制的文本
dz> run post.capture.clipboard
2.查看app是否允许备份数据
dz> run app.package.backup -f com.mwr.example.sieve
反编译/编译/签名apk
使用 apktool 将应用程序转换为 baksmali
$ java -jar apktool.jar d com.joeykrim.rootcheck.apk rootcheck
安装包签名
在Android中,包名相同的两个APK会被认为是同一个应用。当新版本覆盖旧版本时,签名证书必须一致,否则会被拒绝安装(即使开启了“允许未知来源的应用”)。如果APK没有使用自己的证书进行签名,将会失去对版本管理的主动权。本项检测是检测客户端是否经过恰当签名(正常情况下应用都应该是签名的,否则无法安装),签名是否符合规范。
测试步骤
打开cmd,进入到JDK的安装路径,C:\Program Files\Java\jdk1.8.0_111\bin,输入命令:
jarsigner.exe -verify APK文件路径
测试结果如下:
如上图,如果证书指纹与客户一致,说明测试结果为安全。
检测签名的字段是否正确标示客户端程序的来源和发布者身份,输入命令:
jarsigner.exe -verify -verbose -certs APK文件路径,若各个字段与预期的一致,则测试通过。
要说明的是,只有在使用直接客户的证书签名时,才认为安全。Debug证书、第三方(如开发方)证书等均认为存在风险。
manifest package
ApkAnalyser-敏感信息
一键提取安卓应用中可能存在的敏感信息
劫持检测:
HijackActivity
二次打包:
应用数据任意备份风险
allowBackup值设为true
应用程序调试风险
allowBackup值设为true
二次签名漏洞
首先删除应用本身的签名,接着使用另外的签名对应用进行重签名。安装并打开重新签名后的app,过程中未发生错误
边信道信息泄漏
观察日志,泄露敏感信息
adb logcat
代码反编译机制缺陷
将应用反编译成java代码,可进行代码注入、利用木马程序对应用进行恶意篡改行为。