Drozer Tutorial

Reading time: 10 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

APKs to test

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

Installation

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

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

下载并安装来自 latest releases 的 drozer APK。目前是 this

bash
adb install drozer.apk

启动服务器

Agent 正在 31415 端口运行,我们需要 port forward 来建立 Drozer Client 和 Agent 之间的通信,以下是执行此操作的命令:

bash
adb forward tcp:31415 tcp:31415

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

并连接到它:

bash
drozer console connect

有趣的命令

命令描述
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 模块
exploitDrozer 可以创建在设备上执行的漏洞。 drozer exploit list
payload漏洞需要一个有效载荷。 drozer payload list

通过部分名称查找 名称

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

包的基本信息

bash
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:

bash
run app.package.manifest jakhar.aseem.diva

攻击面 of the package:

bash
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”**:

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

列出导出活动:

bash
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

开始活动

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

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

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

  • PackageName 是 com.example.demo
  • Exported ActivityName 是 com.example.test.MainActivity
bash
adb shell am start -n com.example.demo/com.example.test.MainActivity

内容提供者

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

服务

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

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

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

列出服务

bash
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

与服务交互

bash
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)
bash
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**函数,因为它将处理接收到的消息。

检测所有 广播接收器

bash
run app.broadcast.info #Detects all

检查应用的广播接收器

bash
#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

广播 交互

bash
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" 必须发送到内容提供者。

bash
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中出现:

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

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

bash
run app.package.debuggable

教程

更多信息

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks