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


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

    安卓系统架构与机制

    应用层: 系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用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源码

    应用渗透测试与调试

    工具使用

    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.0dbgsrvandroid_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. 这样就可以调试了

    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


    后面不想写了,挂个链接吧  https://baijiahao.baidu.com/s?id=1608313750146067893&wfr=spider&for=pc

  • 相关阅读:
    nyoj_216_A problem is easy_201312051117
    nyoj_676_小明的求助_201312042142-2
    C# 堆和栈的区别?
    DataReader和DataSet区别
    SQLSERVER2008R2正确使用索引
    SQL Profiler工具简介
    (转)非常完善的Log4net详细说明
    SQL语句优化技术分析
    HashTable、HashSet和Dictionary的区别
    使用Nuget发布自己的类库包
  • 原文地址:https://www.cnblogs.com/r3t7rn/p/12189978.html
Copyright © 2020-2023  润新知