Android App渗透测试–Drozer
1、概述
Drozer是一款领先的Android安全测试框架,可以发现Android应用程序暴露的攻击表面并与其进行交互,尽可能点对点发现Android漏洞,识别组织中易受攻击的设备,并进行远程攻击,Drozer既可以在Android模拟器上运行,也可以在实际设备上运行,可以免费从官网下载工具。
官网地址:https://labs.f-secure.com/tools/drozer/
2、基础环境
Drozer工具需要java环境、python27环境、adb调试工具。
操作系统:Windows10专业版。
Java环境:jdk1.7。
Python环境:python27。
Python模块:protobuf、pyopenss、 twisted。
Adb:安卓调试桥。
官网地址:https://adbshell.com/downloads
3、安装步骤
(1) 安装jdk1.7并配置环境变量。
(2) 安装python27并配置环境变量。
(3)安装python功能模块。
(4)安装adb
(5)安装drozer
首先安装服务端
下载地址:https://github.com/WithSecureLabs/drozer
下载后进行编译
编译:python setup.py bdist_wheel
然后在dist目录下找到编译后的执行文件。
直接双击,点击下一步即可。
这一步需要手动指定python 2.7环境。
安装手机端
使用adb安装,用数据线连接电脑和手机。
Adb install drozer-agent.apk
用Drozer连接手机
首先用adb设置一个合适的端口转发,方便电脑和手机代理打开TCP连接,默认情况下端口31415
Adb转发tcp命令:adb forward tcp:31415 tcp:31415
启动drozer
命令:drozer console connect
局域网连接命令:drozer console connect –server 手机端IP
启动成功。然后对指定app进行安全测试。
4、测试命令
官方给出的drozer命令及命令说明列表
官方直接给出的drozer支持命令及其命令说明列表如下
Command | Description |
---|---|
run | Executes a drozer module |
list | Show a list of all drozer modules that can be executed in the current session. This hides modules that you do not have suitable permissions to run. |
shell | Start an interactive Linux shell on the device, in the context of the Agent process. |
cd | Mounts a particular namespace as the root of session, to avoid having to repeatedly type the full name of a module. |
clean | Remove temporary files stored by drozer on the Android device. |
contributors | Displays a list of people who have contributed to the drozer framework and modules in use on your system. |
echo | Print text to the console. |
exit | Terminate the drozer session. |
help | Display help about a particular command or module. |
load | Load a file containing drozer commands, and execute them in sequence. |
module | Find and install additional drozer modules from the Internet. |
permissions | Display a list of the permissions granted to the drozer Agent. |
set | Store a value in a variable that will be passed as an environment variable to any Linux shells spawned by drozer. |
unset | Remove a named variable that drozer passes to any Linux shells that it spawns. |
使用list查看所有支持的模块
(1)通过app.package.list模块获取要检测的app的包名
run app.package.list -f package_name
(2)使用app.package.info模块查看apk基本信息
run app.package.info -a package_name
(3)使用app.package.attacksurface模块识别攻击面
run app.package.attacksurface package_name
(4)使用app.activity.info模块查看activity组件信息
run app.activity.info -a package_name
(5)使用app.provider.info模块查看content provider组件信息
run app.provider.info -a package_name
(6)使用app.service.info模块查看service组件信息
run app.service.info -a package_name
(7)使用scanner.provider.finduris 模块去猜测可能存在的URIs
run scanner.provider.finduris -a package_name
(8)使用app.provider.query模块获取content中信息
run app.provider.query --vertical content://XXXXX
(9)使用scanner.provider.injection检测可注入的URI的注入点
run scanner.provider.injection -a package_name
Projection参数和Selection参数均存在注入
使用projection参数传递sql注入语句到content provider中
run app.provider.query content://XXXXXXXX --projection “'”
通过sql注入列出当前数据库DBContentProvider中的所有表名和字段名
run app.provider.query content://XXXXXXXX --projection “* from sqlite_master where type=‘table’;–” –vertical
使用selection 参数传递sql注入语句到content provider中
run app.provider.query content://XXXXXXXX/ --selection “'”
通过sql注入update数据库的内容,原来service的值为qwert
run app.provider.update content://XXXXXXX --selection “_id=1” --string service qazwsx