当前位置:   article > 正文

路径遍历 android_移动安全之Android应用安全测试入门

android路径遍历

背景概况

近些年来随着移动互联网的大力发展,智能手机和移动通信变得越来越普及,移动安全显得越来越重要,所以移动安全测试变成了一个不可或缺的步骤。

相关测试标准

2.1 应用完整性的检测

测试应用程序客户端是否对自身完整性进行签名校验。攻击者能否通过反编译的方法获取应用的代码和应用资源,修改部分代码及文件后是否可以重新编译、签名并安装。

2.2 不安全的数据存储检测

测试应用程序文件及文件夹的权限、应用数据库的存储、日志文件的存储等是否存在不安全的情况。即重要文件及文件夹是否权限配置不合理、数据库的重要字段数据是否明文显示、日志文件对用户的输入、输出,应用程序运行时敏感数据的存储是否以明文的方式显示。

2.3 组件导出的检测

Android应用程序有各种组件组成,其中Activity(活动组件)、Service(服务组件)、Broadcast Receiver(广播组件)、Content Provider(内容组件)四大组件是应用程序的重要组件。通过反编译应用程序后,查看AndroidManifest.xml文件中的android:exported的属性值是否为True,并通过相应的工具来尝试启动组件判断组件是否可以导出。

2.4 本地SQL注入检测及目录遍历

在使用Content Provider时,提供了query接口。由于query传入的参数直接或间接由接口调用者传入,攻击者构造sql injection语句,也可通过接口遍历文件,造成信息的泄漏甚至是应用私有数据的恶意改写和删除。

2.5 allowbackup漏洞检测

检测AndroidManifest.xml文件中的android:allowBackup的属性值是否为false。如果该值true,攻击者可通过adb backup对应用的所有数据进行备份,从而导致数据泄露。

详细测试流程

3.1工具及环境的介绍

Apktool

Apktool是一个开源的Java工具,用于对Android应用程序进行逆向工程。用Apktool将应用程序反编译后,可以在其输出的结果上进一步加工,如修改资源文件或改变程序行为。例如,可以翻译其中的资源字符串,或者修改资源文件以改变该程序的主题。

在命令行模式下使用说明。

反编译:java –jar apktool.jar d apk文件名 -o 生成的路径位置

回编译:java –jar apktool.jar b –f 反编译后存放的文件夹名-o 生成新apk的文件名

SignApk

SignApk.jar是Android源码包中的一个签名工具SignApk.jar是一个已包含在Android平台源码包中的工具。如果要使用SignApk.jar,你需要创建一个带有对应证书公钥和私钥。

在命令行模式下使用说明。

签名命令:java –jar signapk.jar 公钥证书 私钥证书 签名之前的apk名字 签名之后的apk名字

Adb

adb(Android Debug Bridge),是一款Android开发和测试的工具,能与Android设备相连并且操控执行相关的命令。

adb常用命令列表

adb devices

查看当前连接的设备

adb start-server

开启ADB服务

adb kill-server

关闭ADB服务

adb connect [ip]

远程连接设备

adb disconnect [ip]

断开远程连接设备

adb push

上传文件到设备

adb pull

从设备上下载文件

adb logcat

显示打印设备运行日志

adb forward

端口转发

adb install [apk包名字]

安装apk

adb uninstall [apk包名字]

卸载apk

adb shell

进入设备的命令行界面

adb backup

备份应用数据

Drozer

Drozer是一款Android安全测试的框架,可以实现Android的一些公共的漏洞的检测,而且还可以生成shellcode,进行设备的远程exploit。

drozer常用命令列表

run app.package.attacksurface [apk包名]

确定安装包的可攻击面

run http://app.package.info [apk包名]

列出已安装包的信息

run http://app.activity.info [apk包名]

获取activity信息

run http://app.service.info [apk包名]

获取services信息

run http://app.broadcast.info [apk包名]

获取broadcast receivers信息

run http://app.provider.info [apk包名]

获取content providers信息

run app.activity.start [apk的activity组件名]

启动应用某activity组件

run scanner.provider.injection [apk包名]

检测SQL注入

run scanner.provider.traversal [apk包名]

检测遍历文件

Sqlite

许多Android应用程序使用SQLite数据库引擎来管理其私有的数据库或通过content provider暴露的接口来存储数据。因此,如果设备上有一个SQLite3二进制文件,以命令行的方式访问这些数据库就会变得很方便。在审计一些使用了 SQLite数据库的应用程序时,研究人员可以执行原始的SQL语句来检查或操作数据库。

sqlite常用命令列表

.databases

列出数据库的名称及其所依附的文件。

.quit

退出 SQLite 提示符

.help

显示消息。

.exit

退出 SQLite 提示符

.schema [表名]

显示数据库表结构

.dump [表名]

导出某个表的数据

.mode

设置显示模式

select * from table_name

查询输出所有数据记录

安卓模拟器

安卓模拟器是一款能运行在Windows、MacOs、Linux下的安卓设备仿真软件,可以模拟运行应用在真实的安卓设备中的运行状态。

3.2测试某应用程序的详细过程

使用Apktool工具对test.apk进行反编译,得到相应应用的反编译文件夹。

3dd0b38b95c9bd7b8df82b2d021fc028.png

随后对文件夹resdrawable-hdpi-v4下的deb_logo.png的进行修改替换。

a98b020390cdd149ef0ed621f18bcf08.png

替换前

0d4bc060c0647a20d769d67d0d3514ce.png

替换后

替换完成后进行回编译文件,并进行签名,

b37405d5f552bed5824fdc24433aa245.png

4038abcaaff1c24cbea93262575f838b.png

签名完成后,进行安装运行,但是应用无法正常运行,故判断应用达到完整性标准。

随后将原来的test.apk文件安装到模拟器中运行。

b67a46f842f4d95687fa967663a37d94.png

借助adb工具进行查看应用安装文件夹的文件权限分配及运行日志信息。借助adb devices命令查看可连接的安卓设备。

66f5a9fbe151d93777f3a5fcde12872a.png

并执行adb shell进入安卓设备的命令行界面

bbd51d82d30ca82dd6c7789b2958c4ab.png

找到应用所在的安装目录,并进入应用安装存放的所在目录

c707983dce290e52f48e387340ea7ea2.png

执行命令ls –lR

544e98592cfb1781fbd3c9e95d97c0a0.png

并查找一些敏感的目录,图中databases是一个存放数据文件的敏感目录,进入该目录查看数据的存储方式。

2149ab5c77b9a004167eaf3da2aba42e.png

使用sqlite3命令查看了ijm_db.db文件,结果提示file is encrypted or is not a database,说明数据库文件是加密的,是符合数据存储的标准的。

10ce2e91d4d62a85755b8677ecf73a0b.png

但是在权限分配的地方存在两处问题:

1、数据库的权限可被其他用户读取。

cfb491511131f84dc9ae95c8d54c35d8.png

2、某些xml结尾的文件也可被其他用户读取。

8fb4c561a59d64fe8590da28e7421fe5.png

接下来执行adb logcat命令查看应用运行时的日志是否存在敏感的信息泄露问题。

f3ac36f7a4b09e1264cbc8a86e3ab19b.png

观察了应用输入地方产生的日志,未发现敏感的信息显示出来。

接着进入drozer控制台界面,执行drozer console connect命令可连接安卓设备。

执行run app.package.attacksurface cn.com.htjc.pay查询下应用的攻击面,可查到应用有4个活动组件可导出,6个广播组件可导出。

7a371fffa7ea353b530a474793444c6d.png

另外也可以通过查询应用反编译后的AndroidManifest.xml文件中的android:exported字段值为true得到可导出的组件信息。

e19a8df44f69e1b4ee5f44f789160a69.png

接下来进一步获取activity可导出组件的名称,执行run http://app.activity.info –a cn.com.htjc.pay

b65f9d69b9e17f8c1d2cd10cb055c970.png

执行命令run app.activity.start –commponent cn.com.htjc.pay [activity组件的名字],依次执行运行每个活动组件,发现一处查询activity组件未授权访问。

80ba0e2f50b2540f3eda1ac3e60f78c0.png

fa8ea56e83a044dc65f50c9fdc7fc2e7.png

查询是否存在本地SQL注入,执行命令run scanner.provider.injection –a cn.com.htjc.pay

f7210bf21310289ecdea20e1df37e69b.png

工具drozer未查询到可注入的地方。

查询是否存在遍历文件的漏洞,执行命令run scanner.provider.traversal –a cn.com.htjc.pay

eba5bc1f3727106a2a9e75628a35b671.png

工具drozer也未查询到存在遍历的地方。

接着检查应用反编译包中的AndroidMainfest.xml的值是否为false,打开该文件,通过查找关键字android:allowBackup,发现该值为false。

fd4f54a76476a26b297d706914444541.png

判断该应用未存在allowbackup漏洞。

总结

结合实际的操作演示,能让安全测试人员有效的理解每个Android测试标准,也具备判断某应用APP是否存在相应的漏洞。本文只是举例了几种常见类型的漏洞及其判断标准进行描述说明,实际工作环境中,安全测试人员应该发散思维去测试应用APP,要不断地在移动安全测试的道路上探索成长。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/267282?site
推荐阅读
相关标签
  

闽ICP备14008679号