自己动手开发Drozer插件之AutoAttack
1、Drozer是什么
Drozer是MWR Labs开发的一款针对Android系统的安全测试框架。Drozer可以通过与Dalivik 虚拟机,以及其它应用程序的IPC端点以及底层操作系统的交互,避免正处于开发阶段,或者部署于你的组织的android应用程序和设备暴露出不可接受的安全风险。
2、Drozer的插件
关于drozer的使用这里不再赘述,网上已有文档教程,这里我们重点学习Drozer的插件模式。众所周知,Drozer不仅本身功能强大,而且提供了插件接口方便开发者自己写插件增强功能,官方也自带了几个插件,https://github.com/mwrlabs/drozer/tree/develop/src/drozer/modules,并且还提供了第三方开发者的插件https://github.com/mwrlabs/drozer-modules。
3、插件的开发格式
我们先来看一个插件的代码片段:
这是MWR官方的搜索app可读文件的插件。一般来说,一个app以单独用户进程运行,其他进程是没有权限读写data目录下的文件的,但是如果编码不当,导致data目录下的文件可读写,如果是比较重要的配置文件将会导致信息泄漏等安全问题。
我们来逐行解释代码,第1行,首先导入需要用到的drozer的模块类common和Module;第3行,定义类名继承至多个类;接下来是插件的固定格式,先看几个常量:
{
‘name':’插件名’,
‘description':’插件描述,详细介绍插件用途’,
‘examples':’插件使用例子说明’,
‘author':’作者’,
‘date':’日期’,
‘licence':’许可’,
‘path':’插件路径’ #重要
}
其中重要常量path决定了你添加插件时的路径,如果没有按照你设计的路径添加将会找不到插件;再接下来是方法add_arguments:添加你插件的参数和帮助说明或默认值、execute可以理解为插件的入口方法。至于execute的详细代码内容不在本篇文章讨论之列,大家可自行阅读看看drozer是怎么扫描可读文件的。
4、编写一个自己的插件
明白了插件格式,接下来就可以自己写一个插件了。手头这个example是几个月前刚接触drozer时写的一个半自动化的插件,当时测试启动app的每个导出组件时都是手动的命令一条条输入,所以之后想改善一下就在官方代码上稍微加工了一下。
大致思路是这样的:获取每个被导出的组件名,以及它的intent-filter,然后封装一个intent发送给这个组件尝试启动它,目的是测试app是否会产生拒绝服务。插件代码片段如下:
首先获取被导出的activity,然后获得这个activity的action。因为启动组件,比如activity和service都有两种启动方式,一种通过设置component的显式启动,另一种是通过设置action的隐式启动,所以方法attack里我覆盖了这两种方法,一是直接启动组件名,不带action测试;另外是只发送action测试无组件的情况。
5、安装插件
安装drozer插件的命令为 module install 插件的绝对路径 比如我的就是“module install /home/hg/drozer_module/hg.test.test”,文件名与插件中的path变量有关,比如path是[‘hg’,’test’],我们的文件就要命名为hg.test.xxx,xxx是可以自定义的;另外一种方式就是目录形式的,建立目录hg,子目录test,里面文件名就可以是xxx.py了。安装与运行如图所示:
这里我只测试了导出的activity,像broadcast和service以及provider也是一样的原理,希望大家看后都能写出自己的强大的drozer插件。
转载自:http://appscan.360.cn/blog/?p=45 作者:Sniperhg
这是MWR官方的搜索app可读文件的插件。一般来说,一个app以单独用户进程运行,其他进程是没有权限读写data目录下的文件的,但是如果编码不当,导致data目录下的文件可读写,如果是比较重要的配置文件将会导致信息泄漏等安全问题。
我们来逐行解释代码,第1行,首先导入需要用到的drozer的模块类common和Module;第3行,定义类名继承至多个类;接下来是插件的固定格式,先看几个常量:
{
‘name':’插件名’,
‘description':’插件描述,详细介绍插件用途’,
‘examples':’插件使用例子说明’,
‘author':’作者’,
‘date':’日期’,
‘licence':’许可’,
‘path':’插件路径’ #重要
}
其中重要常量path决定了你添加插件时的路径,如果没有按照你设计的路径添加将会找不到插件;再接下来是方法add_arguments:添加你插件的参数和帮助说明或默认值、execute可以理解为插件的入口方法。至于execute的详细代码内容不在本篇文章讨论之列,大家可自行阅读看看drozer是怎么扫描可读文件的。
4、编写一个自己的插件
明白了插件格式,接下来就可以自己写一个插件了。手头这个example是几个月前刚接触drozer时写的一个半自动化的插件,当时测试启动app的每个导出组件时都是手动的命令一条条输入,所以之后想改善一下就在官方代码上稍微加工了一下。
大致思路是这样的:获取每个被导出的组件名,以及它的intent-filter,然后封装一个intent发送给这个组件尝试启动它,目的是测试app是否会产生拒绝服务。插件代码片段如下:
首先获取被导出的activity,然后获得这个activity的action。因为启动组件,比如activity和service都有两种启动方式,一种通过设置component的显式启动,另一种是通过设置action的隐式启动,所以方法attack里我覆盖了这两种方法,一是直接启动组件名,不带action测试;另外是只发送action测试无组件的情况。
5、安装插件
安装drozer插件的命令为 module install 插件的绝对路径 比如我的就是“module install /home/hg/drozer_module/hg.test.test”,文件名与插件中的path变量有关,比如path是[‘hg’,’test’],我们的文件就要命名为hg.test.xxx,xxx是可以自定义的;另外一种方式就是目录形式的,建立目录hg,子目录test,里面文件名就可以是xxx.py了。安装与运行如图所示:
这里我只测试了导出的activity,像broadcast和service以及provider也是一样的原理,希望大家看后都能写出自己的强大的drozer插件。
转载自:http://appscan.360.cn/blog/?p=45 作者:Sniperhg关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 习近平同马克龙交流互动的经典瞬间 7903929
- 2 黑龙江水库冰面下现13匹冰冻马 7809398
- 3 微信表情包戒烟再度翻红 7712104
- 4 2025你的消费习惯“更新”了吗 7617005
- 5 三星堆与秦始皇帝陵竟有联系 7521200
- 6 为啥今年流感如此厉害 7428811
- 7 劲酒如何成了年轻女性的神仙水 7329632
- 8 首次!台湾浅滩海域搜救应急演练举行 7232335
- 9 郭美美、王子柏被点名 7138540
- 10 中疾控流感防治七问七答 7047718

邮箱投递
