1、描述
由于时代的发展,小程序的诞生,需要不断的去测试发现漏洞问题;同时呢,及时的修复,避免上线后的一系列的问题。
这几天做测试遇到的情况,做归纳;
腾讯的小程序好像抓包有问题;
2、环境
下载一个测试的微信版本PC端,比如:2.7的版本等。可搜索一下下载
【测试版本使用的IE的内核】
Windows 10 或者 8、7等等。注明:我这里实验用的Windows 10虚拟机
Java环境【便于运行burpsuite抓包工具】
3、安装JAVA环境
双击执行exe的java文件
安装-下一步
查看一下版本
4、安装App
测试方式一
设置IE浏览器代理
选择Internet选项
设置的代理地址与burpsuit代理地址一样
进行抓取数据包
测试方式二
安装最新版本的夜神模拟器或者其他的模拟器
安装微信、Xposed、JustTrustMe 等
尝试进行抓取数据包
测试方式三
使用手机在手机上设置代理WIFI的位置设置;导入burpsuite 的抓包工具证书(http://burp)下载后,后缀改为 .cer
保存在手机里进行安装执行;
手机WIFI的位置上可以设置代理ip+端口,要与burpsuit上的一致,才可抓到包;
测试方式四:
安装wireshark 分析工具,抓包工具
点击APP测试,选择要检测的app ,对抓取到的包进行分析PCAP包
分析包即可获取有用信息
App安全检测实践基础——工具
apktool:简而言之就是获取资源文件,主要查看res文件下xml文件、AndroidManifest.xml和图片。 (注意:如果直接解压.apk文件,xml文件打开全部是乱码) dex2jar:将apk反编译成Java源码(classes.dex转化成jar文件) jd-gui:查看APK中classes.dex转化成出的jar文件,即源码文件
下载地址:https://ibotpeaches.github.io/Apktool/install/
windows则下载,放置同一目录;名字一样【放置在要检测的apk里最好方便检测】
apktool.bat 不好下载可以用我这个
@echo off setlocal set BASENAME=apktool_ chcp 65001 2>nul >nul set java_exe=java.exe if defined JAVA_HOME ( set java_exe="%JAVA_HOME%\bin\java.exe" ) rem Find the highest version .jar available in the same directory as the script setlocal EnableDelayedExpansion pushd "%~dp0" if exist apktool.jar ( set BASENAME=apktool goto skipversioned ) set max=0 for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB :skipversioned popd setlocal DisableDelayedExpansion rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack if "%~1"=="" goto load if not "%~2"=="" goto load set ATTR=%~a1 if "%ATTR:~0,1%"=="d" ( rem Directory, rebuild set fastCommand=b ) if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" ( rem APK file, unpack set fastCommand=d ) :load %java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %* rem Pause when ran non interactively for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause
反编译后的文件如下:
将反编译后的文件重新打包
目录文件内多了一个build、dist文件夹
注意: 反编译时,可能会报bug: Exception in thread “main” brut.androlib.AndrolibException: Could not decode 这个问题,就是apktool.jar比较老旧的问题; apktools.jar下载官网。
得到classes.dex 文件
它就是java文件编译再通过dx工具打包而成的,将获取到的classes.dex放到之前解压出来的工具dex2jar文件夹内。
下载地址:https://sourceforge.net/projects/dex2jar/files/latest/download
去执行命令在该目录下,然后生成jar文件
下载地址:https://www.sdbeta.com/plus/download.php?open=2&id=224579&uhash=6fd792195f5c2d1cd6f23471
使用jd-gui.exe去分析生成的classes-dex2jar.jar包
那么在实际检测该漏洞的时候,可以利用工具逆向、扫描源代码进行分析,查看代码在关键位置是否进行了一些报警,如toast。实现的方法为直接使用一个测试的apk对目标应用进行界面覆盖,观察目标应用是否进行了报警。
https://github.com/aloswoya/android_app
在styles.xml文件中利用样式配置将界面设置为透明
简介
adb是Android的一个很重要的调试工具,熟练掌握后可实现很多功能,比如有些手机的解锁、ROOT就会用到adb工具
安装过程
下载地址:https://developer.android.com/studio/releases/platform-tools
由于网速的问题没下载下来,然后从其他网站上下载了一个比较旧的版本
设置环境变量
显示安装结果
下载地址:https://www.python.org/downloads/release/python-2718/
设置环境变量
显示安装结果
简介
drozer是一款针对Android系统的安全测试框架。 Drozer可以通过与Dalivik VM,其它应用程序的IPC端点以及底层操作系统的交互,避免正处于开发阶段,或者部署于的组织的android应用程序和设备暴露出不可接受的安全风险。 drozer提供了很多Android平台下的渗透测试exploit供你使用和分享。 对于远程漏洞,drozer能够生产shellcode帮助你部署drozer代理作为一个远程管理工具,最大化对设备的利用。 更快的Android安全评估drozer可以大大缩减Android安全评估的耗时,通过攻击测试暴露Android APP的漏洞。 基于真机的测试 drozer运行在Android模拟器和真实设备上,它不需要USB调试或其他开发即可使用。 自动化和扩展drozer有很多扩展模块,你可以找到他们进行测试以发现Android安全问题
安装过程
下载地址:https://github.com/FSecureLABS/drozer/releases
将agent.apk 导入模拟器里
使用过程
adb与模拟器进行连接
官方直接指定的drozer支持命令及其命令说明列表如下
命令 描述 run 执行驱动模块 list 显示可在当前会话中执行的所有drozer模块的列表。这将隐藏您没有适当权限运行的模块。 shell 在代理进程的上下文中,在设备上启动交互式Linux Shell。 cd 挂载特定的名称空间作为会话的根目录,以避免重复输入模块的全名。 clean 删除drozer在Android设备上存储的临时文件。 contributors 显示为系统中使用的drozer框架和模块做出贡献的人员列表。 echo 将文本打印到控制台。 exit 终止驱动程序会话。 help 显示有关特定命令或模块的帮助。 load 加载包含drozer命令的文件,并依次执行它们。 module 从Internet查找并安装其他drozer模块。 permissions 显示授予drozer代理的权限列表。 set 将值存储在变量中,该变量将作为环境变量传递给drozer生成的任何Linux shell。 unset 删除drozer传递给它产生的任何Linux shell的命名变量。
找到所要测试安卓应用程序的包名
通过app.package.list模块获取要检测的app的包名 dz> run app.package.list com.android.providers.telephony (绉诲姩缃戠粶閰嶇疆) com.android.providers.calendar (鏃ュ巻瀛樺偍) com.android.providers.media (濯掍綋瀛樺偍) com.android.wallpapercropper (com.android.wallpapercropper) com.android.documentsui (鏂囨。) com.android.externalstorage (澶栭儴瀛樺偍璁惧) com.android.htmlviewer (HTML 鏌ョ湅绋嬪簭) com.android.mms.service (MmsService) com.android.providers.downloads (涓嬭浇绠$悊绋嬪簭) com.android.browser (娴忚鍣? [Errno 0] Error 使用app.package.info模块查看apk基本信息 dz> run app.package.info -a com.android.providers.downloads Package: com.android.providers.downloads Application Label: 涓嬭浇绠$悊绋嬪簭 Process Name: android.process.media Version: 5.1.1-500200917 Data Directory: /data/data/com.android.providers.downloads APK Path: /system/priv-app/DownloadProvider/DownloadProvider.apk UID: 10004 GID: [1028, 1015, 1023, 1024, 2001, 3003, 3007] Shared Libraries: null Shared User ID: android.media Uses Permissions: - android.permission.RECEIVE_BOOT_COMPLETED - android.permission.ACCESS_DOWNLOAD_MANAGER - android.permission.ACCESS_CACHE_FILESYSTEM - android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS - android.permission.ACCESS_NETWORK_STATE - android.permission.INTERNET - android.permission.WRITE_EXTERNAL_STORAGE - android.permission.ACCESS_ALL_DOWNLOADS - android.permission.UPDATE_DEVICE_STATS - android.permission.CONNECTIVITY_INTERNAL - android.permission.MODIFY_NETWORK_ACCOUNTING - android.permission.CLEAR_APP_CACHE - android.permission.WAKE_LOCK - android.permission.READ_EXTERNAL_STORAGE Defines Permissions: - android.permission.ACCESS_DOWNLOAD_MANAGER - android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED - android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS - android.permission.DOWNLOAD_CACHE_NON_PURGEABLE - android.permission.DOWNLOAD_WITHOUT_NOTIFICATION - android.permission.ACCESS_ALL_DOWNLOADS dz> run app.package.info -a /system/priv-app/DownloadProvider/DownloadProvider.apk could not find the package: /system/priv-app/DownloadProvider/DownloadProvider.apk dz> run app.package.info -a DownloadProvider.apk could not find the package: DownloadProvider.apk dz> run app.packag.list -f DownloadProvider.apk unknown module: 'app.packag.list' dz> run app.package.list -f DownloadProvider.apk dz> run app.package.info -a com.android.providers.downloads Package: com.android.providers.downloads Application Label: 涓嬭浇绠$悊绋嬪簭 Process Name: android.process.media Version: 5.1.1-500200917 Data Directory: /data/data/com.android.providers.downloads APK Path: /system/priv-app/DownloadProvider/DownloadProvider.apk UID: 10004 GID: [1028, 1015, 1023, 1024, 2001, 3003, 3007] Shared Libraries: null Shared User ID: android.media Uses Permissions: - android.permission.RECEIVE_BOOT_COMPLETED - android.permission.ACCESS_DOWNLOAD_MANAGER - android.permission.ACCESS_CACHE_FILESYSTEM - android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS - android.permission.ACCESS_NETWORK_STATE - android.permission.INTERNET - android.permission.WRITE_EXTERNAL_STORAGE - android.permission.ACCESS_ALL_DOWNLOADS - android.permission.UPDATE_DEVICE_STATS - android.permission.CONNECTIVITY_INTERNAL - android.permission.MODIFY_NETWORK_ACCOUNTING - android.permission.CLEAR_APP_CACHE - android.permission.WAKE_LOCK - android.permission.READ_EXTERNAL_STORAGE Defines Permissions: - android.permission.ACCESS_DOWNLOAD_MANAGER - android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED - android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS - android.permission.DOWNLOAD_CACHE_NON_PURGEABLE - android.permission.DOWNLOAD_WITHOUT_NOTIFICATION - android.permission.ACCESS_ALL_DOWNLOADS 使用app.package.attacksurface模块识别攻击面 所谓攻击面,应该就是指可export的安卓四大组件(activaty、broadcast receiver、content provider、service) dz> run app.package.attacksurface com.android.providers.downloads Attack Surface: 0 activities exported 0 broadcast receivers exported 2 content providers exported 1 services exported Shared UID (android.media) 使用app.activity.info模块查看activity组件信息 dz> run app.activity.info -a com.android.providers.downloads Package: com.android.providers.downloads No matching activities. 使用app.provider.info模块查看content provider组件信息 dz> run app.provider.info -a com.android.providers.downloads Package: com.android.providers.downloads Authority: downloads Read Permission: null Write Permission: null Content Provider: com.android.providers.downloads.DownloadProvider Multiprocess Allowed: False Grant Uri Permissions: True Uri Permission Patterns: Path: /all_downloads/ Type: PATTERN_PREFIX Path: /my_downloads/ Type: PATTERN_PREFIX Path Permissions: Path: /my_downloads Type: PATTERN_PREFIX Read Permission: android.permission.INTERNET Write Permission: android.permission.INTERNET Path: /all_downloads Type: PATTERN_PREFIX Read Permission: android.permission.ACCESS_ALL_DOWNLOADS Write Permission: android.permission.ACCESS_ALL_DOWNLOADS Path: /download Type: PATTERN_PREFIX Read Permission: android.permission.INTERNET Write Permission: android.permission.INTERNET Authority: com.android.providers.downloads.documents Read Permission: android.permission.MANAGE_DOCUMENTS Write Permission: android.permission.MANAGE_DOCUMENTS Content Provider: com.android.providers.downloads.DownloadStorageProvider Multiprocess Allowed: False Grant Uri Permissions: True 使用app.service.info模块查看service组件信息 dz> run app.service.info -a com.android.providers.downloads Package: com.android.providers.downloads com.android.providers.downloads.DownloadIdleService Permission: android.permission.BIND_JOB_SERVICE
安装apk文件
源码地址:https://github.com/aloswoya/android_app
目的:方法为直接使用一个测试的APK对目标应用进行界面覆盖,观察目标应用是否进行了报警。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.uihijack" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.test.uihijack.MainActivity" android:exported="true" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
打包完成后,在测试apk开启的情况下,使用drozer来调用MainActivity:
run app.activity.start --component com.test.uihijack com.test.uihijack.MainActivity
效果图如下:
修复建议
-
测试到缺陷后,开发方需要对程序进行修复,修复方法也很简单,
-
就是也去判断当前应用程序是否位于栈顶 (是否显示在前面),
-
如果在后台了,就进行一些如toast提示、震动、通知弹窗等等,告诉用于当前应用已经在后台运行了。
通过在线工具进行测试 1.腾讯金刚审计系统 http://service.security.tencent.com 优点:包含了修复建议 2.阿里聚安全检测 网址: http://jaq.alibaba.com/ 阿里聚安全下有自己的安全博客,包含一些:1.安全漏洞、2.病毒分析、3.技术研究、4.安全报告相关文档。 3.360捉虫猎手检测结果 网址: http://appscan.360.cn/ 同样有自己的安全博客 4.爱加密 网址:http://safe.ijiami.cn/analyze 优点:在导出的报告中可以看到对当前apk的评分 5.百度MTC 网址: http://mtc.baidu.com/
HijackActivity-劫持工具
下载地址:
-
静态逆向分析工具-jeb;下载地址:http://www.uzzf.com/soft/313572.html
-
Android Killer
-
Tcpdump数据抓包工具;下载地址:https://www.81857.net/soft/11276.html#xzq
-
xposed- android hook框架[雷神模拟器或者夜神模拟器内搜索安装就行]
-
JustTrustMe- xposed框架下信任所有证书的插件实现[giithub上搜索]
或者查看https://blog.csdn.net/weixin_43650289/article/details/109105943
参考链接
https://www.freebuf.com/sectool/249725.html
https://www.52pojie.cn/thread-749955-1-1.html
https://blog.csdn.net/wizardforcel/article/details/54755814
https://blog.csdn.net/nancyfh/article/details/81196070
https://www.cnblogs.com/zhaoyixiang/p/11236458.html
http://www.mamicode.com/info-detail-2486333.html
https://www.jianshu.com/p/7c0a6da594c8
https://www.cnblogs.com/lsdb/p/9441813.html
https://blog.csdn.net/weixin_39190897/article/details/108802836
来源:freebuf.com 2020-11-04 21:02:08 by: calmness
请登录后发表评论
注册