XMan冬令营 哈尔滨 day1 移动应用程序渗透测试
参加了华为XMan冬令营,身边大佬云集,菜鸡我瑟瑟发抖,今日学习记录如下
安卓系统架构与机制
应用层: 系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java 进行开发的
应用框架层: 应用框架层为开发人员提供了开发应用程序所需要的API,我们平常开发应用程序都是调用这一层所提供的API,当然也包括系统应用。这一层是由Java 代码编写的,可以称为Java Framework。
系统运行层: c/c++库 & android运行时库
硬件虚拟层(HAL): 硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。
Linux内核层 (Linux Kernel) :
安卓动流程
Init -> Zygote进程启动 -> system启动
1 启动init时,会进入system/core/init/init.cpp的mian方法 启动java虚拟机
2 Zygote进程启动 : fork的方式 app_main->AndroidRuntime->ZygoteInit
3 Systemserver进程启动 : Zygoteinit -> AndroidRuntime ->Runtimeinit -> SystemServer -> 各种管理器
建议阅读android8.0.1源码
应用渗透测试与调试
工具使用
ADB (Android Debug Bridge)
androird 开发/测试人员不可替代的强大工具
Adb kille-server Adb start-server Adb root Adb push Adb pull Adb connect Adb shell Adb install -t //-t 调试模式 Adb logcat //看日志 Adb exec-out screencap-p>sc.png //截屏
adb连接夜神模拟器 : adb.exe connect 127.0.0.1:62001
Apktool
又名“Android的Burp套件”,是用于Android黑客攻击的必备工具。它可能是分析期间最常用的工具。
Apktool是用于反向工程APK文件的工具。它使您可以解压缩APK文件,并在进行一些修改后重新打包它们。这使您可以直接检查应用程序的资源,并将代码插入应用程序中以进行进一步分析。
Android Studio
Android Studio是用于开发Android应用程序的标准环境。您可以使用它来修改应用程序,或者通过伤真器在虚拟环境中运行应用程序。
Burp Suite
Burp Suite可以用作代理来检查往返于测试设备的流量
Frida
Frida是一个了不起的工具套件,可让您将自己的脚本注入到应用程序的运行进程中。这可用于检查被调用的功能,应用程序的网络连接以及绕过证书固定。
安装 https://www.jianshu.com/p/c349471bdef7
drozer
https://github.com/FSecureLABS/drozer
Jadx
Android Killer
IDA pro
文件格式
arm arm-v7 x86
客户端数据安全
安装包签名校验
jarsigner -verify apk
客户端程序保护
-
反编译为java代码
可使用jadx,androidkiller等工具进行反编译
-
反编译为smali代码
apktool d
apktool b
-
smali代码的阅读
#注释
.method 方法
.locals n 寄存器个数n
invoke- 执行方法
-
应用完整校验
apkool d apk
校验hash值是否被改变
组件安全
如何确认组件是否可以导出
使用ApkTool解包,打开解包目录中AndroidManifest.xml,对其中声明的各个组件,根据以下规则判断是否可导出:
-
显式声明了android:exported="true",则可导出;
-
显示声明了android:exported="false",则不可导出;
-
未显示声明android:exported:
-
若组件不是Content Provider:若组件包含<intent-filter>则可导出,反之不可;
-
若组件是Content Provider:若SDK 版本<17 则可导出,反之不可
-
jroder
Activity
有界面
run app.activity.info -a packagename
run app.activity.start--component com.example.package
com.example.package.welcome
Service
无界面
run app.service.info -a packagename
run app.service.start--component com.example.package
com.example.package.sieve.xxx
Broadcast Reciever
run app.broadcast.info -a packagename
run app.broadcast.send --component com.package.name --action android.intent.action.XXX
Content Provider
sql注入 目录遍历
run app.provider.info -a packagename
run scanner.provider.injection -a com.mwr.example.sieve
run scanner.provider.traversal -a com.mwr.example.sieve
Why
Intent本地拒绝服务检测 getIntent() Intent.getXXXExtra() 捕获到异常或畸形数据未作处理
ClassCastException异常导致的拒绝服务
NullPointerException异常导致的拒绝服务 ......
WebView安全
WebView 任意代码执行
Sqlite databases broswer
WebView 密码明文存储
WebView 域控制不严格
setAllowFileAccessset
AllowFileAccessFromFileURLsset
AllowUniversalAccessFromFileURLs
敏感信息安全
-
检查客户端程序存储在手机中的SharedPreferences配置文件
先遍历一遍整个程序的功能,再检查
检查客户端程序存储在手机中的SharedPreferences配置文件,通常是对本目录(data/data/packagename)下的文件内容(一般是xml)进行检查,看是否包含敏感信息。
-
检查客户端程序存储在手机中的SQLite 数据库文件
在检测SQLite 数据库文件,在私有目录及其子目录下查找以.db结尾的数据库文件
-
检查客户端程序apk包中是否保存有敏感信息
证书文件
逻辑js文件
图片文件
其他文件 . . .
-
logcat日志
-
本地端口开放检测
-
外部动态加载DEX安全风险检测
风险位置:public DexClassLoader(String dexPath,StringoptimizedDirectory, String libraryPath, ClassLoaderparent)查看AndroidManifest.xml 包package 值相对应路径下的文件中是否含有DexClassLoader()函数调用
进程安全
内存访问和修改
通过对客户端内存的访问,有可能会得到保存在内存中的敏感信息(如登录密码,帐号等)。测试客户端内存中是否存在的敏感信息(卡号、明文密码等等)。
工具 Memspector 需要root权限
通信安全
抓包
将模拟器设置代理为本机
更改burp代理设置为对应ip
在options中export出证书,拓展名为cer
在虚拟机的设置中导入证书即可
成功抓包!
-
http协议
-
https协议
-
校验不严格
-
双向校验
-
-
其他协议
android应用渗透测试-应用调试
android stuido 远程调试
-
在手机上安装应用
-
将apk反编译为smali代码
-
安装smaliidea插件
下载链接:https://bitbucket.org/JesusFreke/smali/downloads/smalidea-0.05.zip下载
Android Studio安装smalidea。
进入Settings->Plugins点击Install plugin from disk选中下载好的压缩包->安装成功
-
adb连接虚拟机 adb connect 127.0.0.1:62001
-
adb shell ps | grep hfdc 找到进程pid
-
远程启动程序调试 adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity
-
查看待调试程序pid
adb shell ps | grep hfdcxy#
转发端口# [pid]为pid值
adb forward tcp:8700 jdwp:[pid]
-
配置AS中的remote debug
-
启动调试
IDA 远程调试
有JNI 的程序 可以使用IDA来调试安卓程序里的so库文件
-
adb push H:\IDA7.0\dbgsrv\android_x86_server /data/local/tmp
-
adb shell 进入手机shell 运行server
-
adb forward tcp:23946 tcp:23946 端口转发
-
在IDA里选择remote debug
-
attach to process
-
这样就可以调试了
Android应用渗透测试框架
Xposed
android应用渗透测试-渗透测试框架Xposed介绍Xposed是Android平台上最有名的一个框架。在这个框架下,我们可以加载很多插件App,这些插件App可以直接或间接操纵系统层面的东西
-
Dalvik虚拟机在执行java层代码时如何识别JNI方法?
-
怎样才能将java层普通方法注册成JNI方法?
-
Xposed框架做了什么?
Frida
通俗一点讲,Frida是为Native应用开发出来的一把瑞士军刀。从技术的角度讲,Frida是一个动态代码执行工具包。通过Frida你可以把一段JavaScript注入到一个进程中去,或者把一个动态库加载到另一个进程中去,并且Frida是跨平台的,也就是说,你可以对Windows, macOS, GNU/Linux, iOS, Android以及QNX 系统上的进程进行上述操作。
为了使用方便,Frida工具包在基于自身API的基础上也提供了一些简单的小工具,你可以根据自己的需求直接拿来使用,或者可以作为你后续进行Frida脚本开发的参考示例
安装:
下载相应的frida-server,frida-server的版本和frida版本要一致,否则运行可能会报错
给frida-server相应的权限,放到/data/local/tmp文件夹下
chmod777 frida-server
运行frida-server ./frida-server
Android端使用:
转发端口
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
查看手机上应用进程列表,查看是否安装成功
frida -ps -U
后面不想写了,挂个链接吧 https://baijiahao.baidu.com/s?id=1608313750146067893&wfr=spider&for=pc