Android渗透

移动APP大多通过WEB API服务的方式与服务端进行交互,这种模式把移动安全和web安全绑在一起。常见的web漏洞在移动APP中也存在,比如SQL注入,文件上传,中间件/server漏洞等,由于部分APP不是直接嵌入网页在APP中,而是使用api接口返回json数据,导致扫描器爬虫无法爬取链接。

配套装备

  • JDK
  • SDK
  • ADB
  • Genymotion模拟器(或真机)
  • Drozer

JDK

安装

  1. 点击下载地址进入Android开发工具下载页面,下载JDK相应版本;

  2. 解压并配置环境变量;

  3. 执行java和javac,查看JDK安装情况。

SDK

安装

  1. 点击下载地址进入Android开发工具下载页面,下载SDK Tools中的相应版本;

  2. 解压sdk包,再执行如下命令;

    进入sdk的tools目录

    cd /sdk存放路径/tools

    执行android

    ./android

  3. 执行./android命令后,会打开SDK Manager窗口,升级SDK(翻墙)。

ADB

原理

ADB:Android Debug Bridge(Android调试桥接器),用于管理真机和模拟器的工具。

adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。

  1. adb client

    client是运行在PC端,每发起一个adb命令,就会开启一个client。

    当开启一个client时,先检测后台是否有server程序运行,如果没有,则会启动server进程。

    所有client都是通过5037端口与adb server进行通信。

  2. adb server

    server是运行在PC端的后台程序,负责管理adb client进程以及与adb daemon之间的通信。

    当server启动时,会自动绑定并监听5037端口,接收client通过该端口发送过来的命令。

    同时server还会对5555-5585间的奇数端口进行扫描,对已连接设备的定位。

  3. adb daemon(adbd)

    daemon是运行在真机/模拟器端的后台程序。

    使用端口的范围是5554-5585,每个模拟器/设备连接到PC端时,总会开启这么一个后台进程,并且为其分配了两个连续的端口,比如:

    Emulator 1, console: 5554

    Emulator 1, adb: 5555

     也正因为每个设备都分一组两个端口,所以adb连接手机的最大数量为16。

     在这组端口中,其中偶数端口是用于server与设备进行交互的,可以让server直接从设备中读取数据,而奇数端口是用来与设备的adbd进行连接通信的。

安装

  1. 点击下载地址进入Android开发工具下载页面,下载SDK Platform-Tools中相应的版本;

  2. 解压,将解压后的platform-tools文件夹放到android sdk根目录下;

  3. 将adb所在目录添加到系统PATH中;

    编辑环境变量文件

    vim ~/.bash_profile

    added by adb

    export PATH="/SDK/android-sdk-macosx/platform-tools:$PATH"

    重启环境变量文件,设置才能生效

    source ~/.bash_profile

  4. 运行adb,查看安装情况。

常用命令集

查看当前连接的设备:adb devices

安装软件:adb install *.apk

覆盖安装:adb install -r *.apk

卸载软件:adb uninstall <PACKAGE_NAME>

登录设备shell:adb shell

从电脑上传送文件到手机:adb push

从手机传送文件到电脑上:adb pull

踩过的坑

  1. 查看Android设备报错

    adb devices

报错原因:与genymotion自带的adb产生冲突、IP不在同一网段。

解决方案一

将genymotion->setting中,将ADB设置成本地的SDK根目录;

解决方案二

lsof -i tcp:5037

kill -9 **

adb start-server

解决方法三:

如以上两种方法都无法解决,查看模拟器IP地址【设置->关于手机->状态信息->IP地址】是否与本机IP在同一网段,这点很重要。

一般模拟器的IP地址为10.0.3.15。

网上的攻略是修改wifi的IP地址【长按wifi热点->修改网络,将IP设置从“DHCP”改成“静态IP”】,也没折腾好。

解决方法四

用真机

  1. 安装APK报错
adb install *.apk
Failure[INSTALL_RAILED_NO_MATCHING_ABIS]

报错原因:由于安装的APP中使用了与当前模拟器CPU架构不一致的native libraries,所以导致报错。

解决办法:下载genymotion-arm-translation,直接将文件拖进模拟器安装再重启模拟器OK。

Genymotion模拟器

安装

  1. 点击下载地址,下载最新的安装包【注:需要注册genymotion账号】;
  2. 需要下载VirtualBox,自行百度下载;
  3. 打开Genymotion模拟器,输入账号及密码登录;
  4. setting->ADB,选择自己安装的SDK根目录;

  5. Add,选择需要下载Android虚拟设备,点击next下载即可。

Android渗透工具——Drozer

MacOS安装

  1. 下载源码

    git clone https://github.com/mwrlabs/drozer/
  2. 编译
cd drozer
python setup.py build
python setup.py install

注:执行最后一条命令时,提示fatal error: ‘yaml.h’ file not found #include <yaml.h>,说明没有安装pyyaml,使用pip install pyyaml。

  1. 执行drozer,查看安装结果

  2. 下载agent.apk

Windows安装

  1. 点击下载地址,windows环境选择drozer (Windows Installer)并下载;

  2. 解压zip文件,点击setup安装,一路默认安装就行;它会自动安装到C:\drozer文件夹下;
  3. 检测是否安装成功:打开cmd窗口,键入C:\drozer\drozer.bat , 如出现如下提示说明安装成功。

Drozer使用

  1. 安装agent.apk客户端到手机或模拟器
adb devices    ###查看android设备
adb install agent.apk ###安装apk
  1. 安装完成后,在模拟器或手机上启动drozer Agent,点击右下角“OFF”按钮,开启drozer Agent。

  2. 建立session连接
adb forward tcp:31415 tcp:31415
drozer console connect 或 C:\drozer\drozer.bat console connect

#### 查看drozer所有可用模块
list
ls



4. 获取apk信息

1)列出Android设备中安装的所有APK信息
run app.packege.list –f过滤信息 2)查看APK信息
run app.package.info –a apk名 3)查找APK存在的攻击面(activity、contentprovider、service)
run app.package.attacksurface apk名
  1. 绕过Activity鉴权
1)列出APP中的对外的Activity组件
run app.activity.info –a apk包名 2)构造intent信息绕过鉴权直接运行Activity,测试组件是否存在拒绝服务等漏洞
run app.activity.start --component apk包名 activityName
  1. 利用Content Provider攻击
1)查找暴露的Content Provider(数据泄露)
run app.provider.info –a apk包名 2)发现暴露的ContentProvider后,可以对数据库进行探测。探测出可以查询的URI
run scanner.provider.finduris –a apk包名 3)查看各个URI的数据(查询到数据说明存在漏洞)
run app.provider.query content://URI --vertical 4)对数据库表进行插入操作
run app.provider.insert URI对应数据表中的字段 5)对数据库表进行删除操作
run app.provider.delete URI --selection "条件" #### SQL注入
6)查看URI对应的数据库表(报错说明存在SQL注入)
run app.provider.query content://URI --projection "'"
run app.provider.query content://URI --selection "'" 7)可以通过返回的错误信息展示出改Content准备执行的语句,获取数据库中的信息
run app.provider.query content://URI --projection "* From SQLITE_MASTER WHERE type='table';--"
run app.provider.query content://URI --selection "_id = ?"
  1. 利用broadcast(广播)

预防

  1. 进行权限控制,对此组件进行exported=“false”或者设置调用需要申请的权限
  2. SQLite设置
SQLiteStatementsqLiteStatement =db.compileStatement("insertinto chat(fromuid,touid,msg) values(?, ?, ?)");

sqLiteStatement.bindLong(1, 12);

sqLiteStatement.bindLong(2, 13);

sqLiteStatement.bindString(3,text);

long newRowId =sqLiteStatement.executeInsert();

APP安全_Android渗透环境的更多相关文章

  1. Mac PHP 环境配置+渗透环境

    /* 最近购入一台mac pro 配置自己的php环境以及渗透环境 留个笔记 */ Mac 自带的PHP 加 apache 所以就不需要install 咯.只需要down个mysql 就好了. 0x1 ...

  2. App自动化测试-1.App自动化介绍和环境搭建

    App自动化测试-1.App自动化介绍和环境搭建 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-b ...

  3. 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法

    问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...

  4. 移动安卓App+BurpSuite的渗透测试

    从Android 7.0及以上版本开始,安卓系统更改了信任用户安装证书的默认行为,用户安装的证书都是用户证书,因此不管是filddle还是burp,都是把他们的根证书安装到了用户证书,而有部分移动ap ...

  5. 使用ionic与cordova(phonegap)进行轻量级app开发前的环境配置与打包安卓apk过程记录

     前言 有人说:"如果你恨一个人,就让ta去接触cordova(phonegap)",这是因为这里面的水很深,坑很多,真让人不是一般地发狂.或许有幸运的人儿基本顺顺利利就配置完环境 ...

  6. 【经验随笔】 Tomcat多个APP使用相同名称环境变量导致问题

    背景介绍 之前遇到一个问题,在一个tomcat下部署了两个APP,其中一个APP不能正常从底层接口获取数据.如果将两个APP分到不同服务器上的tomcat部署,又都正常了.分析了一下: 远程调试跟代码 ...

  7. 安装Windows渗透环境工具--PentestBox

    PentestBox不同于运行在虚拟机或者双启动环境的Linux渗透测试发行版. 它打包了所有的安全工具,并且可以在Windows系统中原生地运行,有效地降低了对虚拟机或者双启动环境的需求. 下载地址 ...

  8. 从零到一创建ionic移动app:基础开发环境搭建

    myAPP项目是在Ubuntu14.04下创建   本项目开发node 4.5/cordova 6/ionic 2   第一步 安装nodejs npm install -g n n v4.5.0 使 ...

  9. APP安全_Android反编译

    反编译 Android的反编译工具:apktool,JEB等. Apk 文件的结构,如下: META-INF:签名文件 res:资源文件,里面的 xml 格式文件在编译过程中由文本格式转化为二进制的 ...

随机推荐

  1. 设置pycharm环境下python内存

    有的时候在pycharm下的python需要加载很大的内存,那我们如何去修改pycharm的环境的内存呢?? 第一个栈内存,第二是堆内存.

  2. ZOJ4019——贪心&&DP

    题目 链接 大意:有一个容量为$c$的背包,有$n$个$s_1$类物体,价值都为$k_1$,体积分别为$s_{1,1}, s_{1,2}, \cdots, s_{1,n}$,有$m$个$s_2$类物体 ...

  3. mysql: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    https://www.cnblogs.com/jpfss/p/9734487.html (mysql.sock错误解决方案)

  4. POJ1423 Big Number 暴力or斯特林公式??

    好吧这题很水...可是我没想到正解... 题意:求n!有多少位. 正解:斯特林公式. 直接放代码... #include<cstdio> #include<iostream> ...

  5. PHP mysqli_real_connect() 函数

    定义和用法mysqli_real_connect() 函数打开一个到 MySQL 服务器的新连接. mysqli_real_connect() 函数与 mysqli_connect() 函数在以下几个 ...

  6. 二、编译安装LAMP之httpd-2.4.4

    回顾 PHP:脚本编程语言,php解释器 Webapp:面向对象的特性 Zend: 第一段:词法分析.句法分析.编译为Opcode: opcode放置于内存中 第二段:执行opcode: opcode ...

  7. JavaWeb_(SSH)三大框架整合struts+hibernate+spring_Demo

    三大框架整合 一.SSH导包 二.书写Spring 三.书写Struts 四.整合Spring与Struts 五.书写(与整合)Hibernate.引入c3p0连接池并使用hibernate模板 六. ...

  8. Java终止线程的三种方式

    停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作. 在 Java 中有以下 3 种方法可以终止正在运行的线程: 使用退出标志,使线程正常退出,也就是当 run() 方 ...

  9. CentOS 上 Jenkins 的安装

    Jenkins 的前身是 Hudson. Jenkins 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种运行方式,可通过系统包.Dock ...

  10. dubbo备忘

    http://start.dubbo.io/ https://github.com/dubbo/dubbo-samples https://www.aliyun.com/product/edas ht ...