漏洞赏金提示 : 注册 Intigriti ,一个由黑客为黑客创建的高级 漏洞赏金平台 !今天就加入我们 https://go.intigriti.com/hacktricks ,开始赚取高达 $100,000 的赏金!
待测试的 APK
本教程的部分内容摘自 Drozer 文档 pdf .
安装
在您的主机上安装 Drozer Client。可以从 最新版本 下载。
Copy pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
下载并安装来自最新版本 的drozer APK。目前是这个 。
Copy adb install drozer.apk
启动服务器
Agent 正在 31415 端口上运行,我们需要 端口转发 以建立 Drozer 客户端和 Agent 之间的通信,以下是执行此操作的命令:
Copy adb forward tcp:31415 tcp:31415
最后,启动 应用程序 ,并按下底部的 "开启 "
并连接到它:
Copy drozer console connect
Interesting Commands
显示当前会话中可以执行的所有 drozer 模块的列表。这会隐藏您没有适当权限运行的模块。
在设备上启动一个交互式 Linux shell,处于 Agent 的上下文中。
删除 drozer 在 Android 设备上存储的临时文件。
加载包含 drozer 命令的文件并按顺序执行它们。
删除 drozer 传递给其生成的任何 Linux shell 的命名变量。
在变量中存储一个值,该值将作为环境变量传递给 drozer 生成的任何 Linux shell。
在设备上启动一个交互式 Linux shell,处于 Agent 的上下文中
Drozer 可以创建在设备上执行的漏洞。 drozer exploit list
漏洞需要一个有效载荷。 drozer payload list
Package
查找 name 的包,通过部分名称进行过滤:
Copy dz > run app.package.list -f sieve
com.mwr.example.sieve
包的基本信息 :
Copy 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 :
Copy run app.package.manifest jakhar.aseem.diva
攻击面 of the package:
Copy 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”**:
Copy <activity android:name="com.my.app.Initial" android:exported="true">
</activity>
列出导出活动 :
Copy 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
启动活动 :
也许您可以启动一个活动并绕过某种授权,这应该阻止您启动它。
Copy dz > run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
您还可以从 adb 启动导出的活动:
导出活动名称是 com.example.test.MainActivity
Copy adb shell am start -n com.example.demo/com.example.test.MainActivity
内容提供者
这篇文章太长了,所以 你可以 在这里访问它的独立页面 。
服务
一个导出的服务在 Manifest.xml 中声明:
Copy <service android:name=".AuthService" android:exported="true" android:process=":remote"/>
在代码中检查 **handleMessage
**函数,该函数将接收****消息 :
列出服务
Copy 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
与服务交互
Copy 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
,您可以创建一个包含提供的详细信息的对象。
在以下示例中:
replyTo == object(string com.mwr.example.sieve.PIN 1337)
Copy 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
**函数,因为它将处理接收到的消息。
检测所有 广播接收器
Copy run app.broadcast.info #Detects all
检查应用的广播接收器
Copy #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
广播 交互
Copy 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 " 必须发送到内容提供者。
Copy 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中出现:
Copy < application theme = "@2131296387" debuggable = "true"
您可以使用 Drozer 找到所有可调试的应用程序:
Copy run app.package.debuggable
教程
更多信息
漏洞赏金提示 :注册 Intigriti ,一个由黑客为黑客创建的高级漏洞赏金平台 !今天就加入我们 https://go.intigriti.com/hacktricks ,开始赚取高达**$100,000**的赏金!