Drozer-Android安全测试

drozer是一款针对Android系统的安全测试框架,可以帮助App和设备变得更安全,我们在使用drozer之前需要先把基本的环境做好配置,必要的环境有:jdk,python,java,系统安装配置好adb,drozer,同时模拟器或者测试手机端也需要安装好drozer agent,因为考虑到每个人的测试环境可能不同,有用linux有用windows,还有用mac的,所以就不再一一演示了,网上的教程还是很多的,也都非常easy的

我是没有用模拟器的,我嫌麻烦,直接从家里翻箱倒柜找出了我家的一部旧手机,首先也是最重要的就是开启开发者模式,每部手机开启的方式不一样,可以根据自己的手机型号进行上网搜查,开启开发者模式之后,切忌要把USB调试打开,否则adb连接不成功

通过数据线使得手机与电脑连接,然后通过adb进行测试,看是否连接正常,如果成功列出序列号则代表连接成功

1
adb devices

随后安装代理——drozer agent,可以直接通过adb install传到手机端,也可以直接从网上找到对应的apk包进行安装,安装好之后,启动即可,drozer agent会监听31415端口(drozer默认端口)所有接口传入的tcp连接数据

然后使用adb进行端口转发,转发到刚才代理使用的默认端口31415上

最后通过下面的命令进入调试控制台

1
drozer console connect

接下来的测试全部以一款Android安全测试APP——sieve进行演示

评估的第一步就是先在安卓设备上找到它,可以利用关键词搜索得出包名

1
run app.package.list -f  关键字

可以看到sieve的包名叫com.mwr.example.sieve,随后通过run app.package.info可以查看包的详细信息,比如应用数据目录、apk的路径、UID、GID以及版本和应用程序所允许的权限等信息

我们还可以使用drozer内置的app.package.attacksurface模块进行攻击面的识别,方便进一步的安全测试和漏洞挖掘

通过上图我们可以发现,有3个activities,0个broadcast,2个content,2个services,这些都是潜在的风险入口,其中,activities组件通常就是一个单独的界面,它上面可以显示一些控件也可以监听并处理用户的事件做出响应,Activity之间通过Intent进行通信,在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。broadcast组件通常是指BroadcastReceive广播接收器,它可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应,广播接收器没有用户界面,然而,它们可以启动一个activity或serice 来响应它们收到的信息。content 组件可以为一个应用程序的指定数据集提供给其他应用程序,这些数据可以存储在文件系统中、在一个SQLite数据库、或以其他方式。services组件是一段长生命周期并且没有用户界面的程序,举个例子就是:一个正在从播放列表中播放歌曲的媒体播放器,在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。接下来通过暴露的这些风险来进行安全测试,首先测试activities exported绕过登陆限制,可以先用app.activity.info检测暴露的Activity信息

其实根据名称就可以猜的差不多,.FileSelectActivity可能是和文件有关,.MainLoginActivity应该就是主界面,.PWList可能和密码有关(PW=password),所以要想绕过登陆限制着重应该测试.PWList

1
run app.activity.start --component 包的名称 .PWList

运行之后手机端会直接进行跳转,可以直接进入到软件内部,从而绕过了登录验证,很像我们常见的越权漏洞

接下来我们测试content provider,主要会存在数据库泄漏和SQL注入等问题,首先我们通过app.provider.info列举Content Provider所有的信息

通过枚举uri,尽可能找出更多的存在敏感信息的路径,或者可以用drozer自带的扫描器模块进行枚举,并预测可访问内容uri的列表

随后通过scanner.provider.injection模块从这些uri中检索信息,看是否存在sql注入,最终发现了三处注入

看到结果先别着急去跑表和字段,先进行手注判断报错信息,看是否真实存在sql注入,因为会存在误检(手注的话需要调用selection和projection参数传递一些简单的sql语句进行测试,我直接万能单引号走起)

可以看到明显的报错信息,接下来可以交给app.provider和scan.provider模块去跑了,有点像sqlmap

1
--projection "* FROM Key;--" //可以查询其他数据库

还可以用app.provider.read模块以及app.provider.download模块进行文件读取和下载,像经典的/etc/passwd和/etc/hosts这些都已经被广大白帽子们用来验证各种rce以及其他漏洞了,司空见惯了属于是

文件下载的话,我就用下载数据库来演示了,其他文件也是同理的

如上图,数据库下载下来之后,可以用navicat等工具导入查看,或者直接用sqlite也可以


Drozer-Android安全测试
http://example.com/2024/05/08/Drozer-Android安全测试/
作者
liuty
发布于
2024年5月8日
许可协议