安装记录(略):https://github.com/daumbrella/drozer
安装版本 2.4.3-19-g26f0ddf
安装环境 win7
报错: 'cut' 不是内部或外部命令, 因为setup.py脚本里有一个 getversion的函数,使用了Linux命令cut,导致报错。更改为如下代码即可:
def get_version():
version_cmd = ['git', 'describe', '--tags']
if platform == "linux2" or platform == "linux" or platform == "darwin":
return subprocess.check_output(' '.join(version_cmd),shell=True)
elif platform == "win32":
return subprocess.check_output(version_cmd,shell=True)[0:5]
drozer是用来审计Android应用以及系统漏洞的。使用时发现发是由两部分组成,一部分是PC端的服务器,一部分是Android端安装的代理Agent。
那么它究竟可以做什么呢?并如何实现这些功能的呢?下面就让我们开始研究它吧!
drozer允许你以一个Android应用的身份与其他应用和操作系统进行交互。它的出现就是避免你自己写很多个apk来测试其他应用。drozer具有以下命令:
命令 | 描述 |
run MODULE list |
执行 drozer 模块 显示可在当前会话中执行的所有 drozer 模块的列表。 这会隐藏您 没有合适权限运行的模块 |
shell | 在代理程序进程的上下文中,在设备上启动交互式 Linux shell |
cd | 将特定命名空间安装作为会话的根目录,以避免重复键入模块的全 名 |
clean contributions |
删除 drozer 在 Android 设备上存储的临时文件 显示已在系统中使用的对 drozer 框架和模块做出贡献的人员列表 |
echo exit help load module permissions set unset |
将文本打印到控制台 终止 drozer 会话 关于特定的命令或模块展示帮助信息 加载包含 drozer 命令的文件,并按顺序执行它们 从 Internet 查找并安装其他 drozer 模块 显示授予 drozer Agent 的权限列表 将值存储在作为环境变量传递给 drozer 生成的任何 Linux shell 的变 量中 删除 dorzer 传递给它产生的任何 Linux shell 命名的变量 |
其中最主要就是run啦,我们可以run app.activity.info -a 包名 来获取包的可导出activity的信息。
所有可用的module:
app.activity.forintent Find activities that can handle the given intent
找到可以处理给定intent的activity。
app.activity.info Gets information about exported activities.
获取导出activity的信息。
app.activity.start Start an Activity
启动一个activity。
app.broadcast.info Get information about broadcast receivers
获取广播接收器的信息。
app.broadcast.send Send broadcast using an intent
使用intent发送广播。
app.broadcast.sniff Register a broadcast receiver that can sniff particular intents
注册一个广播接收器,来嗅探特定intent。
app.package.attacksurface Get attack surface of package
获得一个包的攻击面。
app.package.backup Lists packages that use the backup API (returns truon FLAG_ALLOW_BACKUP)
列出使用备份API的包(返回truon FLAG_ALLOW_BACKUP)。
app.package.debuggable Find debuggable packages
找到所有可调试的包名。
app.package.info Get information about installed packages
获取关于某个包的信息。 run app.package.info -a XXXXX(应用名)
app.package.launchintent Get launch intent of package
获取某个包的启动intent。
app.package.list List Packages
列出所有的包名 -f 进行过滤。显示中文可以将cmd编码设置为utf-8,chcp 65001.
app.package.manifest Get AndroidManifest.xml of package
获取某个包的Androidmanifest信息。
app.package.native Find Native libraries embedded in the application.
发现应用中的native库
app.package.shareduid Look for packages with shared UIDs
寻找共享某个uid的包名
app.provider.columns List columns in content provider
列出content provider的所有列
app.provider.delete Delete from a content provider
从content provider中删除
app.provider.download Download a file from a content provider that supports files
总content provider中下载文件
app.provider.finduri Find referenced content URIs in a package
在包中找到引用的内容uri
app.provider.info Get information about exported content providers
获取导出的content provider的信息 run app.provider.info -a 包名
app.provider.insert Insert into a Content Provider
向content provider中插入
app.provider.query Query a content provider
查询一个content provider
app.provider.read Read from a content provider that supports files
从支持文件的content provider读取
app.provider.update Update a record in a content provider
更新content provider的记录
app.service.info Get information about exported services
获取导出service的信息
app.service.send Send a Message to a service, and display the reply
向服务器发送消息,并显示回复
app.service.start Start Service
启动一个服务
app.service.stop Stop Service
停止一个服务
auxiliary.webcontentresolver Start a web service interface to content providers.
启动web服务接口
exploit.jdwp.check Open @jdwp-control and see which apps connect
打开jdwp,查看哪个apps连接(jdwp是用于动态调试Java代码的协议)
exploit.pilfer.general.apnprovider Reads APN content provider
读取APN content provider APN: Access Point Name,中文即接入点
exploit.pilfer.general.settingsprovider Reads Settings content provider
读取设置content provider
information.datetime Print Date/Time
打印时间
information.deviceinfo Get verbose device information
获取冗长的设备信息
information.permissions Get a list of all permissions used by packages on the device
获取包所使用的所有权限
scanner.activity.browsable Get all BROWSABLE activities that can be invoked from the web browser
扫描所有可以被浏览器调用的activity
scanner.misc.native Find native components included in packages
扫描应用包含的native组件
scanner.misc.readablefiles Find world-readable files in the given folder
扫描给定文件夹中全局可读的文件
scanner.misc.secretcodes Search for secret codes that can be used from the dialer
扫描可以使用拨号器的密码
scanner.misc.sflagbinaries Find suid/sgid binaries in the given folder (defaul is /system).
在给定的文件夹中找到suid/sgid二进制文件
scanner.misc.writablefiles Find world-writable files in the given folder
在给定的文件夹中找到全局界可写文件
scanner.provider.finduris Search for content providers that can be queried from our context.
扫描可以从上下文查询的content provider
scanner.provider.injection Test content providers for SQL injection vulnerabilities.
测试content provider中的SQL注入漏洞
scanner.provider.sqltables Find tables accessible through SQL injection vulnerabilities.
通过SQL注入扫描可访问的表
scanner.provider.traversal Test content providers for basic directory traversa vulnerabilities.
测试content provider的目录遍历漏洞
shell.exec Execute a single Linux command.
执行一个Linux命令
shell.send Send an ASH shell to a remote listener.
发送一个ASH shell到远程监听器
shell.start Enter into an interactive Linux shell.
进入到可交互的Linux shell
tools.file.download Download a File
下载文件
tools.file.md5sum Get md5 Checksum of file
获取文件的md5
tools.file.size Get size of file
获取文件大小
tools.file.upload Upload a File
上传文件
tools.setup.busybox Install Busybox.
按照busybox
tools.setup.minimalsu Prepare 'minimal-su' binary installation on the device.
在设备上准备“minimal-su”二进制安装。
这些模块不需要全部背下来,每次list help用起来就可以来!不过还是建议顺一下,有个印象~
下面我们将用个例子来使用drozer进行实际的渗透测试。