搜索
查看: 1075|回复: 0

android安全评估框架-drozer的基本使用

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2017-4-10 16:19:55 | 显示全部楼层 |阅读模式
主要是介绍一个android安全评估框架-drozer的基本使用。这是一个由运行在电脑上的”console”及安装于android设备上的drozer agent提供“server”这两个部分组成的工具,可以通过在console上执行命令或编写drozer的扩展模块来调用android package manager获取设备上app及其组件的相关信息,从而对初步锁定有表面弱点的app,准备好了吗?要开始啦~~~
0x01 正文
1、安装、配置drozer
(1)下载drozer ([url=]https://labs.mwrinfosecurity.com/tools/drozer/[/url]),选择drozer(Windows Installer)进行下载。
(2) 解压下载后的.zip,并运行其目录下的.exe文件,进行drozer安装

安装过程中应记住drozer的安装路径。

(3)安装完成后,cmd中将路径切换到drozer安装路径,执行drozer确认安装成功。

(4)确认drozer可以顺利获取到安装在系统上的java,执行drozer console,如出现如下界面,则无法正常获取。

修改环境变量中的PATH变量,使其包含java的安装路径。

如确认PATH变量添加正确,drozer仍无法正常获取java,则应在用户主文件夹下创建”.drozer_config”文件,并编辑如下内容:
       " [executables]
        Java=[Path tojava]"
如图,由于图形界面下无法创建.***格式文件,可以在cmd下运行
copy con .***进行读取键盘输入并创建文件(ctrl+z结束),再将该拷贝到用户主文件夹(C:\User\***)。
    不再提示java错误。


2、安装agent.apk,进行drozer会话
(1)通过ADB向设备中安装drozer Agent
运行adb install agent.apk,将drozer解压包中的agent.apk安装进设备。

此时,可在手机上顺利运行drozer Agent。


(2)使用ADB建立端口转发
PC上执行adb forwardtcp:31415 tcp:31415,并在手机的drozer Agent点击Embedded Server,再点击按钮Disabled转为Enabled,出现如下界面。

(3)进行drozer会话
在PC上执行drozer console connect,是PC的drozerconsole与手机drozerAgent建立drozer会话。


4、枚举设备安装包
在drozer console下执行run app.package.list,查看包列表。

    App.package.list这个模块是通过Android package manager来枚举设备上安装包的包名及其app名的简单信息,通过run app.package.list –h(-help)可查看其功能使用。

如图,可以通过添加适当参数,来更明确实现枚举过程:
  • 通过过滤器,枚举出与输入字符相关的安装包;

Run app.package.list –f email
  • 通过-g,-u查找相关user ID/group ID的安装包;
  • 利用app.package.info查看安装包的具体信息;
  • 通过run app.package.info –help查看其使用。

其中,可执行run app.package.info –a(--package)[package name],查看包信息:

上图中,显示安装包各相关信息:
  • Application Label:APP名;
  • Process Name:该APP的进程名;
  • Version:APP安装版本;
  • Data Directory:用户数据及APP相关数据的保存目录;
  • APK Path:该APP的.apk文件的所在路径;
  • UID:APP在设备上的用户ID;
  • GID:APP在设备上的系统用户组IDs;
  • Shared Libraries:APP所使用到的共享库的路径;
  • Shared User ID:APP共享用户的ID;
  • Uses Permissions:APP的权限列表。


5、枚举APP活动
这里使用的则是app.activity.info,其用法跟上边的相似。
run app.activity.info –a [package name]

输出包中的所有活动组件及其授权,具体功能用法可通过run app.activity.info –help查看。

6、枚举APP服务
通过run app.servise.info –a [packagename]查看。

7、枚举广播接收者
执行run app.broadcast.info –a [packagename],显示出intentfilters信息,runapp.broadcast.info –i(--show-intent-filters)

8、枚举内容提供者
run app.provider.info –a [package name]

列出包中各内容提供者,并输出其相关信息:
  • Authorities:执行其sqlite前端的类的名称;
  • Read permission:可读取该内容的权限;
  • Write permission:可写入该内容的权限;
  • Grant URI permissions:是否有抓取URI的权限。


9、查看源代码
对于上边几种枚举app包及包组件信息的执行命令的用法基本相似,因为这些枚举命令的执行其实是调用了drozer的各个Python模块。这些模块通过android package manager获取app中acvitity/service/broadcast/provider组件的信息。可以通过在github上drozer项目查找这些模块的源代码,了解drozer模块的编写方式及各个模块的功能实现,从而结合自己的需求编写相应功能的模块,扩展drozer的功能。
([url=]https://github.com/mwrlabs/drozer/tree/develop/src/drozer/modules/app[/url])

10、drozer模块
Drozer模块是运用python语言编写的代码,再通过drozer agent与android平台进行交互。
(1)模块结构
每一个drozer模块都是一个python类,都是通过继承drozer.modules.Module类来生成各具功能的drozer模块,所以在每次编写模块时,都应导入drozer.modules.Modules这个模块。
(2)元数据
为了方便系统组织各个模块,和生成一致的帮助及有用信息,drozer要求每个模块都需配置几个预定的元数据:
  • name:一个标题名用于描述模块的目的;
  • description:用于描述该模块所能实现的功能;
  • example:执行模块的相关命令举例;
  • anthor:模块的作者;
  • date:模块的最新更新日期;
  • license:发布模块的许可证;
  • path:通过一个数组描述模块的命名空间,对应着文件所保存的目录。

(3)Executor
每个模块都必须定义一个单一方法execute(),在模块被执行时,这个方法都会被drozer所调用。execute()通过对android平台进行一定操作后,将结果显示在屏幕中。
(4)输出流
Drozer模块在显示数据的输出流上,是通过调用self.stdout/self.stderr的write()方法完成数据显示的,而不使用print关键字。

11、自定义模块
(1)创建一个模块ex.random.getinteger。

(2)模块安装
  • 保存模块文件

可在drozer目录下,创建一个保存模块的目录,并上边文件以ex.random.getinteger在目录下保存,文件名前缀应对应path数组中的命名空间
  • 创建模块库

首次安装模块,需要为模块创建一个模块库
Module repository create [path-to-your-module-dir]/repo
  • 安装模块

Module install [path-to-your-module-dir]/ex.random.getinteger

如图,可通过ex.random.getinteger –h显示元数据信息,执行ex.random.getinteger返回随机整数。

  • 编写一个枚举设备信息的模块

通过在模块中映射android java API中相应类,来获取、查看我们手机上设备及操作系统构造的相关信息,所编写的Python代码如下:
fromdrozer.modules import Module
classInfo(Module):
    name="Get Device info"
    description="A module that returnsinformation about the device and hardware features"
    examples="run ex.device.info"
    data="2016-06-16"
    author="hawolf"
    license="GNU GPL"
    path=["ex","device"]
    def execute(self,arguments):
       build=self.new("android.os.Build")
        self.stdout.write("Getting deviceinfo...\n")
        self.stdout.write("
  • BOARD:%s\n"%(build.BOARD))
  •         self.stdout.write("
  • BOOTLOADER:%s\n"%(build.BOOTLOADER))
  •         self.stdout.write("
  • BRAND:%s\n"%(build.BRAND))
  •         self.stdout.write("
  • CPU_ABI:%s\n"%(build.CPU_ABI))
  •         self.stdout.write("
  • CPU_ABI2:%s\n"%(build.CPU_ABI2))
  •         self.stdout.write("
  • DEVICE:%s\n"%(build.DEVICE))
  •         self.stdout.write("
  • DISPLAY:%s\n"%(build.DISPLAY))
  •         self.stdout.write("
  • FINGERPRINT:%s\n"%(build.FINGERPRINT))
  •         self.stdout.write("
  • HARDWARE:%s\n"%(build.HARDWARE))
  •         self.stdout.write("
  • MANUFACTURER:%s\n"%(build.MANUFACTURER))
  •         self.stdout.write("
  • MODEL:%s\n"%(build.MODEL))
  •         self.stdout.write("
  • TAGS:%s\n"%(build.TAGS))

  • 仍然是对drozer.modules.Module类的继承,进行元数据配置,其中最主要的则是  build=self.new("android.os.Build"),通过模块中的new方法来映射Android java API在java类,从而通过android.os.Build类,来获取、查看Android设备中的硬件、系统构造信息,之后,将文件以ex.device.info命名保存在模块目录下,并执行命令进行模块安装:
    Module install [path-to-your-module-dir]/ex.device.info
    执行run ex.device.info可查看设备硬件及系统构造信息:

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?Join BUC

    x
    过段时间可能会取消签到功能了
    您需要登录后才可以回帖 登录 | Join BUC

    本版积分规则

    Powered by Discuz!

    © 2012-2015 Baiker Union of China.

    快速回复 返回顶部 返回列表