Android App渗透测试–Drozer(实战篇)

2020年3月17日12:22:01 评论 364

​声明:本文全程采用测试app,根据相关法律法规严禁非法入侵他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动,窃取或者以其他非法方式获取个人信息。

一、命令及模块支持
1、先来看看官方给出的drozer支持命令以及说明吧
命令
描述
run
执行drozer模块
list
显示当前会话中可以执行的所有drozer模块的列表。这将隐藏您没有适当权限来运行的模块
shell
在代理进程上下文中启动设备上的交互式Linux shell
cd
将特定的命名空间挂载为会话的根,以避免重复键入模块的全名
clean
删除drozer在Android设备上存储的临时文件
contributors
显示为系统上使用的drozer框架和模块做出贡献的人员列表
echo
将文本打印到控制台
exit
终止drozer会话
help
显示关于特定命令或模块的帮助
load
加载一个包含drozer命令的文件,并按顺序执行它们
module
从互联网找到并安装额外的drozer模块
permissions
显示授予drozer代理的权限列表
set
将一个值存储在一个变量中,该变量将作为环境变量传递给drozer生成的任何Linux shell
unset
删除drozer传递给它生成的任何Linux shell的命名变量
2、list命令查看支持哪些模块
app.activity.forintent
找到可以处理给定意图的活动
app.activity.info
获取有关导出活动的信息。
app.activity.start
开始一个活动
app.broadcast.info
获取有关广播接收器的信息
app.broadcast.send
使用intent发送广播
app.broadcast.sniff
注册一个可以嗅探特定意图的广播接收器
app.package.attacksurface
得到包裹的攻击面
app.package.backup
列出使用备份API的包(在FLAG_ALLOW_BACKUP上返回true)
app.package.debuggable
找到debuggable包
app.package.info
获取有关已安装包的信息
app.package.launchintent
获取包的发布意图
app.package.list
包列表
app.package.manifest
获取AndroidManifest.xml的包
app.package.native
查找嵌入到应用程序中的本机库。
app.package.shareduid
寻找具有共享uid的包
app.provider.columns
列出内容提供程序中的列
app.provider.delete
从内容提供程序中删除
app.provider.download
从支持文件的内容提供程序下载文件
app.provider.finduri
查找包中引用的内容uri
app.provider.info
获取有关导出内容提供者的信息
app.provider.insert
插入到内容提供程序中
app.provider.query
查询内容提供者
app.provider.read
从支持文件的内容提供程序中读取
app.provider.update
更新内容提供程序中的记录
app.service.info
获取有关导出服务的信息
app.service.send
向服务发送消息,并显示应答
app.service.start
开始服务
app.service.stop
停止服务
auxiliary.webcontentresolver
启动到内容提供者的web服务接口。
exploit.jdwp.check
打开@jdwp-control,查看哪些应用程序连接
exploit.pilfer.general.apnprovider
读取APN内容提供程序
exploit.pilfer.general.settingsprovider
读取设置内容提供程序
information.datetime
打印日期/时间
information.deviceinfo
获取详细的设备信息
information.permissions
获取设备上的包使用的所有权限的列表
scanner.activity.browsable
获取所有可从web浏览器调用的可浏览活动
scanner.misc.native
查找包中包含的本地组件
scanner.misc.readablefiles
在给定的文件夹中查找世界可读的文件
scanner.misc.secretcodes
搜索可以从拨号器使用的密码
scanner.misc.sflagbinaries
在给定文件夹(默认是/system)中找到suid/sgid二进制文件。
scanner.misc.writablefiles
在给定的文件夹中查找可写的文件
scanner.provider.finduris
搜索可以从上下文查询的内容提供者。
scanner.provider.injection
测试内容提供者的SQL注入漏洞。
scanner.provider.sqltables
查找可以通过SQL注入漏洞访问的表。
scanner.provider.traversal
测试内容提供商的基本目录遍历漏洞。
shell.exec
执行单个Linux命令。
shell.send
发送一个灰壳到远程监听器。
shell.start
进入交互式Linux shell。
tools.file.download
下载一个文件
tools.file.md5sum
获取md5文件校验和
tools.file.size
获取文件大小
tools.file.upload
上传一个文件
tools.setup.busybox
安装Busybox
tools.setup.minimalsu
在设备上准备“minimalsu”二进制安装
二、实战演练
本文采用夜神模拟器、测试app的方式进行实战演练(测试app可从drozer官网下载得到)
1、安装测试app
Android App渗透测试--Drozer(实战篇)
2、打开app根据提示为其设置一些信息,以供后期使用(这里密码最小16位,不能含有特殊字符,PIN码和其他信息随便填)
Android App渗透测试--Drozer(实战篇)
3、先来获取Android设备里的app列表
run app.package.list
Android App渗透测试--Drozer(实战篇)
4、找到需要测试的app包名,如果安装的应用太多一时半会儿找不到的话,可以直接查询相关包名
run app.package.list -f sieve
Android App渗透测试--Drozer(实战篇)
5、获取一下该应用的基本信息,可以看到该APP的安装路径及数据目录
run app.package.info -a 包名
Android App渗透测试--Drozer(实战篇)
6、接下来看看该app是否有暴露的组件攻击面,组件暴露可能导致敏感信息泄露、拒绝服务、权限提升绕过,界面劫持、远程代码执行等安全漏洞
run app.package.attacksurface 包名
Android App渗透测试--Drozer(实战篇)
根据测试的返回信息可以看出暴露了3个activity组件,2个provisers组件,2个services组件,并且可被调试。
 7、对暴露的activity组件进行攻击,可以显示一些控件也可以监听并处理用户的事件做出响应。暴露的activity意味着可以被导出,可以分析是否存在数据泄露。
run app.activity.info -a 包名
Android App渗透测试--Drozer(实战篇)
这个就有意思了,返回了三个组件信息,第一个应该是跟文件有关系,第二个应该是和登录有关系,第三个应该是和密码相关,那activity组件暴露意味着是否存在越权漏洞,绕过前端登录,一个个给他试试。
8、启动暴露的组件信息
run app.activity.startcomponent 包名 组件名
Android App渗透测试--Drozer(实战篇)
可以看到第一条直接进入了设备的文件系统,第二条进入了app的登录入口,第三条直接绕过登录获取到我们刚才设置的个人信息
Android App渗透测试--Drozer(实战篇)
9、下来再测一下Content Provider,获取一下它的信息,可以获取到该app还和哪些应用程序有交互,使它指定的一些数据集提供给其他应用程序。那这里可以看到应该是有一些数据库交互,文件备份之类的信息。
run app.provider.info -a 包名
Android App渗透测试--Drozer(实战篇)
10、一个应用,肯定是有URI(统一资源标志符),用于指向一个资源的字符串,可以是指向本地,也可以是指向互联网,URL一定是URI,但URI不一定是URL。获取一下该app可以访问的URI:
run scanner.provider.finduris -a 包名
Android App渗透测试--Drozer(实战篇)
那这个信息就很敏感了,是不是很兴奋,哈哈
11、访问一下URI所指向的资源
run app.provider.query 查询到的URI
Android App渗透测试--Drozer(实战篇)
是不是已经获取到了开始输入的一些密码和个人信息,既然能够查询到数据,那就说明我们可以对数据进行SQL注入了。
12、对可以访问的URI进行SQL注入,来,试一下获取个人信息这个库所有的表。
run app.provider.query URI --projection"* FROM SQLITE_MASTER WHERE type='table';--"
Android App渗透测试--Drozer(实战篇)
13、获取一下Passwords和Key这两个表的数据,成功的通过SQL注入获取信息。当然,可以对这些可访问的URI尝试进行操作,如果在注入的过程中报错的话,那就存在SQL注入漏洞。
run app.provider.query URI --projection"* FROM 表名;--"
Android App渗透测试--Drozer(实战篇)
14、当然也可以用模块进行批量的检测哪些URI存在SQL注入漏洞,可以看到很多的SQL注入漏洞,一个个试一下。
runscanner.provider.injection -a 包名
Android App渗透测试--Drozer(实战篇)
15、检测一下是否存在目录遍历漏洞,目录遍历可造成网站信息可被任意访问,敏感数据泄露,扫描到这么多呢。
run scanner.provider.traversal -a 包名
Android App渗透测试--Drozer(实战篇)
16、由于Android基于Linux内核开发,那利用这个目录遍历漏洞查看一下hosts文件吧。
run app.provider.read 遍历路径/文件路径
Android App渗透测试--Drozer(实战篇)
17、那顺便再把它的数据库也给下载下来,也算是要结束了。
run app.provider.download 数据库URI 本地路径/备份文件名.db
Android App渗透测试--Drozer(实战篇)
那最后要是想再往下撸的话可以尝试一下提权等等,当然移动安全的渗透测试不止于此,更多撸法还需要慢慢深入学习。

高性能云服务器2折起

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: