Android 中的敏感信息泄露
参考文章
测试 app:diva
漏洞点
不安全的日志输出
主要是由于 app 代码中将敏感信息输出到 app 的 logcat 中
使用 adb 工具查看安卓日志:adb logcat
硬编码
开发人员将密码/密钥等敏感字符字节写在源代码中
不安全的存储
- 将敏感数据保存到配置文件
xml
中; - 将敏感数据保存在本地的数据库中;
- 将敏感数据保存在临时文件中。
一般来说,每个应用存储数据的目录/data/data/package-name/
只有自身有权限访问
应用创建文件时使用 MODE_PRIVATE 模式,但是当创建文件时使用了 MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE 模式,会导致其他程序可以读取创建的内容。
再者:
当手机开启 root 并赋予其他应用 root 权限时,其他应用便可以查看所有其他应用的内容
-rw-rw---- u0_a49 u0_a49 16384 2020-11-22 16:17 ids2
# 其中第一列各个字母/符号分别代表
- 表示无
d 表示这是一个目录,当然还有其他形式,如 l、b、c、p、s
r 可读,4
w 可写,2
x 可执行,1
每三个一组,分别代表 拥有者权限、所在组权限、其他用户权限
# 第二/三列表示:文件(目录)拥有者、文件(目录)拥有者所在的组
# 后面的分别表示文件大小、创建时间以及名称
通过 adb 工具,执行 adb shell
命令进入安卓系统查看具体 app 目录下的各种文件
SharedPreferences 类存储
数据会以.xml
的形式存储在/data/data/package-name/shared_prefs/
- 首先来到目标 app 的存储目录(
/data/data/package-name/
),可以看到该文件夹下的内容
- 来到 app,点击保存账号密码
- 重新查看该目录,发现新的文件夹
- 进入文件夹,打开生成的 xml 文件
- 具体代码
存到临时文件
跟上一个相似,点击保存账号密码按钮,会在/data/data/package-name/
目录下生成一个临时文件
来到/data/data/package-name/
目录下,查看文件内容,发现多了一个临时文件
查看文件内容:
具体代码:
明文存储到本地数据库
数据库目录:/data/data/package-name/databases/
,以journal
结尾的为日志文件
跟上上个相似,点击保存账号密码按钮,会在数据库目录下生成一个名为ids2
的 sqlite 数据库以及一个日志文件
使用 sqlite 查看数据库内容
具体代码:
存到 SD 卡中
跟上上个相似,点击保存账号密码按钮,会将账号密码信息存到 sd 卡中
由于模拟器没得 sd 卡,所以只贴具体代码
Internal Storage
使用设备内部存储器来创建和保存文件,通常情况下内部存储的文件只能被该当前程序访问,不可被其他程序或用户访问
常规位置: /data/data/package-name/files/
Content Provider SQL 注入/目录遍历
当 Content Provider 暴露,并具有注入或目录遍历漏洞时,其他用户可通过该组件获取用户数据
具体看这里,传送门
未启用 https/明文传输
抓包看即可,如果应用在传输敏感数据时未采用 https 则存在风险。