从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家) ! 支持 HackTricks 的其他方式:
如果您想看到您的公司在 HackTricks 中做广告 或下载 PDF 版本的 HackTricks ,请查看订阅计划 !
漏洞赏金提示 :注册 Intigriti,这是一家由黑客创建的高级漏洞赏金平台 !立即加入我们,访问 https://go.intigriti.com/hacktricks ,开始赚取高达**$100,000**的赏金!
要测试的 APK
本教程的部分内容摘自 Drozer 文档 pdf 。
安装
在主机内安装 Drozer 客户端。从最新版本发布页面 下载。
复制 pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
下载并安装 drozer APK 文件从最新发布版本 。此刻它是这个 。
启动服务器
代理正在端口31415上运行,我们需要进行端口转发 以建立Drozer客户端和代理之间的通信,以下是执行此操作的命令:
复制 adb forward tcp:31415 tcp:31415
最后,启动 该应用程序 并按下底部的 "ON "
然后连接到它:
有趣的命令
显示当前会话中可以执行的所有drozer模块的列表。这会隐藏您没有适当权限运行的模块。
在设备上以代理的上下文启动一个交互式Linux shell。
删除Android设备上drozer存储的临时文件。
删除drozer传递给任何Linux shell的命名变量。
将一个值存储在一个变量中,该值将作为环境变量传递给drozer生成的任何Linux shell。
在设备上以代理的上下文启动一个交互式Linux shell。
Drozer可以创建用于在设备上执行的利用程序。drozer exploit list
利用程序需要一个有效载荷。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
软件包的攻击面 :
复制 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
Activities : 也许您可以启动一个活动并绕过某种应该阻止您启动它的授权。
Content providers : 也许您可以访问私人数据或利用一些漏洞(SQL注入或路径遍历)。
活动
在AndroidManifest.xml文件中,导出的活动组件的“android:exported”值设置为**“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
导出的 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
示例
查看app.service.send
的drozer 帮助:
请注意,您将首先发送数据内部的"msg.what ",然后是"msg.arg1 "和"msg.arg2 ",您应该检查代码中正在使用的信息 以及使用的位置。
使用--extra
选项,您可以发送由"_msg.replyTo"解释的内容,并使用--bundle-as-obj
创建具有提供的详细信息的对象。
在以下示例中:
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 研究所有一篇出色的文章 关于当你的应用程序是可调试的时候如何深入挖掘并注入运行时代码。
当一个应用程序是可调试的时候,它会出现在清单文件中:
复制 < application theme = "@2131296387" debuggable = "true"
您可以使用Drozer 找到所有可调试的应用程序:
复制 run app.package.debuggable
教程
更多信息
漏洞赏金提示 :注册 Intigriti,一个由黑客创建的高级漏洞赏金平台 !立即加入我们,访问 https://go.intigriti.com/hacktricks ,开始赚取高达**$100,000**的赏金!
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert) ! 支持HackTricks的其他方式:
如果您想在HackTricks中看到您的公司广告 或下载PDF版本的HackTricks ,请查看订阅计划 !