Drozer Tutorial
Reading time: 10 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
APKs to test
本教程的部分内容摘自 Drozer 文档 pdf。
Installation
在您的主机上安装 Drozer Client。 从 最新版本 下载。
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
下载并安装来自 latest releases 的 drozer APK。目前是 this。
adb install drozer.apk
启动服务器
Agent 正在 31415 端口运行,我们需要 port forward 来建立 Drozer Client 和 Agent 之间的通信,以下是执行此操作的命令:
adb forward tcp:31415 tcp:31415
最后,启动 应用程序,并按下底部的 "ON"
并连接到它:
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 模块 |
exploit | Drozer 可以创建在设备上执行的漏洞。 drozer exploit list |
payload | 漏洞需要一个有效载荷。 drozer payload list |
包
通过部分名称查找 包 的 名称:
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 启动导出的活动:
- PackageName 是 com.example.demo
- Exported ActivityName 是 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
示例
查看 drozer 对 app.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
教程
- https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref
- https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md
- https://www.hackingarticles.in/android-penetration-testing-drozer/
- https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac
更多信息
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。