主要是介绍一个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要求每个模块都需配置几个预定的元数据: (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可查看设备硬件及系统构造信息:
|