drozer是一个用来审计安卓四大主件的漏洞检测框架,笔者最近也利用该框架对一些app进行了安全检测,取得了一些成果,觉得这个框架比较好用,于是想记录一下自己的实践经历。
1.运行环境是python2.7,也需要安装JDK。首先需要到官网下载相关软件:https://labs.f-secure.com/tools/drozer/,需要下载msi和apk分别部署在电脑和手机上,apk用来做端口转发:
但我从官网下载的msi运行不了,这里提供一个网盘链接,东西都打包好了:http://pan.baidu.com/s/1gfI0hLT 密码:c78h
其中 setup.exe 是安装在电脑上,安装也是一路next往下装就行, agent.apk 安装在手机或模拟器,我这里用了雷电模拟器,安装完毕之后,在模拟器运行drozer agent,然后点击右下角的“关闭”按钮开启agent,启动服务:
接着在C:\Users\用户名下新建一个.drozer_config文件,文件中添加如下内容:
[executables]
java=C:\Java\jdk1.8.0\bin\java.exe
javac=C:\Java\jdk1.8.0\bin\javac.exe
java和javac的路径按照自己的配置来更改就行。
在出现的“开启”按钮左边点击一下,出现如下画面就说明安装好了:
(如果是用真机话,需要用数据线连接电脑,并开启usb调试模式)
使用adb来操作drozer,为了方便可以将adb所在目录加入环境变量,手机端开启drozer agent后,打开cmd命令行,切换到drozer的安装目录,输入adb forward tcp:31415 tcp:31415 进行端口转发,然后执行drozer console connect,出现下面的画面就说明环境搭建好了:
2.接下来介绍drozer的常用命令和笔者的实践案例:
查找攻击面: run app.package.attacksurface 包名
查看activity组件: run app.activity.info -a 包名
调用activity组件: run app.activity.start --component 包名 组件名,可以用来检测登陆绕过漏洞
查看Broadcast组件: run app.broadcast.info -a 包名
检测有没有拒绝服务漏洞:
发送空action: run app.broadcast.send --component 包名 广播名
发送空extras: run app.broadcast.send --action 广播名
查看Services组件: run app.service.info -a 包名
调用服务组件: run app.service.start --action 服务名 --component 包名 服务名
检测可以访问的URL: run scanner.provider.finduris -a 包名
查询URL的数据: run app.provider.query url
查找存在注入的点:run scanner.provider.injection -a 包名
检测目录遍历漏洞: run scanner.provider.traversal -a 包名
3.实践案例:
案例一:利用暴露的activity实现登陆绕过
首先使用drozdr检测app中暴露的activity,查看activity的命令见上文,这里可以看到暴露的主件还是有不少:
接着使用drozer命令调用这些暴露的activity,调用activity的命令见上文,根据笔者的测试,其中的一个activity存在登陆绕过缺陷,调用该activity后实现的效果如下:
在不需要账号密码的情况下即可登陆app:
案例二:主件拒绝服务漏洞
首先使用drozer检测app中暴露的广播主件,接着向暴露的主件发送空action检测拒绝服务是否存在 ,结果其中一个广播接到空action后就奔溃了:
4.对这些问题的一些修复建议:
1 将不必要导出的组件设置为不导出
2 在AndroidManifest.xml中,将activity的”android:exported”属性设置为”false”
这两个案例是笔者在对一些app进行安全测试的时候发现的问题,更多的知识我也还没接触到,哈哈。