XMan 冬令营 哈尔滨 day1移动应用程序渗透测试

参加了华为XMan冬令营,身边大佬云集,菜鸡我瑟瑟发抖,今日学习记录如下

01 安卓系统架构与机制

应用层: 系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java 进行开发的

 

应用框架层: 应用框架层为开发人员提供了开发应用程序所需要的API,我们平常开发应用程序都是调用这一层所提供的API,当然也包括系统应用。这一层是由Java 代码编写的,可以称为Java Framework。

系统运行层: c/c++库 & android运行时库

JVM DVM ART  

硬件虚拟层(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源码

02 应用渗透测试与调试

工具使用

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

客户端程序保护

  1. 反编译为java代码

    可使用jadx,androidkiller等工具进行反编译

  2. 反编译为smali代码

    apktool d

    apktool b

  3. smali代码的阅读

    #注释

    .method 方法

    .locals n 寄存器个数n

    invoke- 执行方法

  4. 应用完整校验

    apkool d apk

    校验hash值是否被改变

组件安全

如何确认组件是否可以导出

使用ApkTool解包,打开解包目录中AndroidManifest.xml,对其中声明的各个组件,根据以下规则判断是否可导出:

  1. 显式声明了android:exported="true",则可导出;

  2. 显示声明了android:exported="false",则不可导出;

  3. 未显示声明android:exported:

    1. 若组件不是Content Provider:若组件包含<intent-filter>则可导出,反之不可;

    2. 若组件是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

敏感信息安全

  1. 检查客户端程序存储在手机中的SharedPreferences配置文件

    先遍历一遍整个程序的功能,再检查

    检查客户端程序存储在手机中的SharedPreferences配置文件,通常是对本目录(data/data/packagename)下的文件内容(一般是xml)进行检查,看是否包含敏感信息。

  2. 检查客户端程序存储在手机中的SQLite 数据库文件

    在检测SQLite 数据库文件,在私有目录及其子目录下查找以.db结尾的数据库文件

  3. 检查客户端程序apk包中是否保存有敏感信息

    证书文件

    逻辑js文件

    图片文件

    其他文件 . . .

  4. logcat日志

     

  5. 本地端口开放检测

  6. 外部动态加载DEX安全风险检测

    风险位置:public DexClassLoader(String dexPath,StringoptimizedDirectory, String libraryPath, ClassLoaderparent)查看AndroidManifest.xml 包package 值相对应路径下的文件中是否含有DexClassLoader()函数调用

进程安全

内存访问和修改

通过对客户端内存的访问,有可能会得到保存在内存中的敏感信息(如登录密码,帐号等)。测试客户端内存中是否存在的敏感信息(卡号、明文密码等等)。

工具 Memspector 需要root权限

通信安全

抓包

将模拟器设置代理为本机

 

更改burp代理设置为对应ip

在options中export出证书,拓展名为cer

在虚拟机的设置中导入证书即可

成功抓包!

 

  1. http协议

  2. https协议

    1. 校验不严格

    2. 双向校验

  3. 其他协议

android应用渗透测试-应用调试

android stuido 远程调试

  1. 在手机上安装应用

  2. 将apk反编译为smali代码

  3. 安装smaliidea插件

    下载链接:https://bitbucket.org/JesusFreke/smali/downloads/smalidea-0.05.zip下载

    Android Studio安装smalidea。

    进入Settings->Plugins点击Install plugin from disk选中下载好的压缩包->安装成功

  4. adb连接虚拟机 adb connect 127.0.0.1:62001

  5. adb shell ps | grep hfdc 找到进程pid

  6. 远程启动程序调试 adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity

  7. 查看待调试程序pid

    adb shell ps | grep hfdcxy#

    转发端口# [pid]为pid值

    adb forward tcp:8700 jdwp:[pid]

  8. 配置AS中的remote debug

  9. 启动调试

IDA 远程调试

有JNI 的程序 可以使用IDA来调试安卓程序里的so库文件

  1. adb push H:\IDA7.0\dbgsrv\android_x86_server /data/local/tmp

  2. adb shell 进入手机shell 运行server

  3. adb forward tcp:23946 tcp:23946 端口转发

  4. 在IDA里选择remote debug

  5. attach to process

  6. 这样就可以调试了

     

03 Android应用渗透测试框架

Xposed

android应用渗透测试-渗透测试框架Xposed介绍Xposed是Android平台上最有名的一个框架。在这个框架下,我们可以加载很多插件App,这些插件App可以直接或间接操纵系统层面的东西

 

  1. Dalvik虚拟机在执行java层代码时如何识别JNI方法?

  1. 怎样才能将java层普通方法注册成JNI方法?

  1. 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



猜你喜欢

转载自www.cnblogs.com/r3t7rn/p/12189978.html