使用Frida渗透Android app

原文链接

1.Frida简介

在之前这篇博客中,Rohit Salecha指导渗透新手如何使用Frida审计Android应用程序以挖掘漏洞。

任何应用程序的审计都无法离开逆向工程得以完成,这篇文章主要关注使用一种叫做Frida的工具来在运行时动态修改应用程序的行为的实施方法。

在某些情况下,修改Android应用程序的行为是可取的,比如禁用指纹验证等应用程序的某些敏感功能,或者不允许在根手机上运行,或者希望绕过登录屏幕或禁用SSL证书来拦截流量

以往人们如果想要修改一个特定函数就需要使用以下方法:
1. 编辑反汇编的smali文件并且进行重打包,然而,对于新手来说要理解反汇编代码是非常困难的。
2.使用Xposed框架-这种方法是很多渗透人员所采用的方法,但是必须在不同应用程序中进行函数重写并且重启程序。

相较于以上两种方法,Frida可以hook应用程序的运行时进程,并且无须重启或者重打包就可以修改代码。

假设一个Android应用程序中有一个LoginActivity正在运行,它等待用户名和密码的输入。除此之外,还有一个checkLoging根据校验结果的正确性返回相应的布尔值。现在Frida可以做的就是通过注入我们自己写的代码在内存中重写checkLogin函数,即动态修改函数。

本文将使用一下两个app进行演示,主要是绕过登录界面和root检测逻辑:
Sieve-一个MWR实验室构建的漏洞密码存储程序
InsecureBankv2-含有漏洞的银行程序,是Black Hat 2015-2016 Arsenal的一部分

在开始Frida之旅之前,请确保一下实验环境:android,python环境,一个root过的Arm架构的Android手机。在写这篇文章之时,Frida无法在未root过的手机上完美工作。目前只支持ARM架构。

2.设置Frida

Frida包括两个组件,client和server,客户端和服务器彼此之间通过两个TCP端口27042、27043进行通信。
frida client安装方式:

pip install frida

安装成功之后,在命令行运行

扫描二维码关注公众号,回复: 2721607 查看本文章
frida --version

frida server安装:根据上一步获得的版本号去release页面下载相应的server

正式使用:
下载好的server是一个压缩包,需要解压,并push进Android设备中

adb push frida-server-10.6.11-android-arm /data/local/tmp/frida-server

之后在命令行输入adb shell进入到/data/local/tmp(就是刚才push frida-server的目录),并给frida-server以可执行权限。

chmod 755 frida-server

之后运行frida-server

为了检验frida是否已安装就位,接下来另开一个cmd窗口,转发两个端口,并输入

frida-ps -aU

U表示的是usb连接的设备,如果是电脑上开模拟器的话使用R远程连接。

3.使用Frida绕过登录检测

在手机上打开Sieve
这里写图片描述

在提供了一组有效的凭证之后,它打开了主屏幕,显示了我们在应用程序中保存的各种密码
这里写图片描述

打开命令行窗口,输入指令
frida-ps -aU | grep -i “sieve”
这里写图片描述
不知道windows上怎么会还有grep命令,我在弄的时候直接用的是frida-ps -aU,要是知道的告诉我,哈哈。。。

在开始之前先反编译sieve程序,理解下它的登录功能是怎么做的。使用dex2jar和JD-GUI工具,我是直接用的AndroidKiller看的。

这里写图片描述

Frida目前支持多种语言绑定,Python,C,.NET和Swift。本文主要用的是python。代码从这里下载
这段代码通过插入布尔值”true”简单地重写了我们的目标函数”checkKeyResult”。然而,我们并没有修改这个函数,只是控制函数的传递参数和返回值。
这里写图片描述

第25-26行用于attach到目标进程(就是之前用frida-ps -aU命令查到的)。
需要通过Frida执行的代码在10-23行。

接下来,打开这个app,然后执行上面的python脚本,一旦脚本开始执行就会等待”checkKeyResult”函数调用。
这里写图片描述

4.暴力破解PIN

如果把Sieve应用放在后台,之后在返回来执行的话会要求输入PIN。使用以下[脚本](https://github.com/NotSoSecure/dynamic-instrumentation-with-Frida/blob/master/sieve_2.py)就可以暴力破解pin,然后获得应用程序的访问权限。

这里写图片描述

5.绕过root检测

绕过root检测在Android应用测试中最重要的使用场景。应用程序在安装时检查是否root设备或者限制特定敏感功能的使用,例如指纹认证。root检测主要是检测SuperSu的安装,这在大多数APK中都会使用来控制root权限,或者试图在受保护文件目录中进行写入。
为了绕过这些root检测方法需要反编译APK,然后通过给用于root检测的methods 打补丁。这个复杂的过程通过使用Frida可以大大简化。以下拿第2个程序作为例子InsecureBank2。
在InsecureBank2中,程序登录之后,应用程序会展示一个警告用户设备被root过。
这里写图片描述
这个程序使用以下两个函数来检查设备是否被root过(doesSUexist、doesSuperuserApkExist)
这里写图片描述
使用以下脚本来绕过root检测逻辑,我们得到了”Device not Rooted”
这里写图片描述
运行这个脚本,并按下Sign
这里写图片描述
一旦Sign被按下,PostLogin Activity就会被初始化,然后调用root检测逻辑。之后成功绕过了检测。
这里写图片描述
在弄这个例子时,注意windows上需要安装netcat并运行,并且需要在这里下载相应的服务器AndroLabServer,另外还要在app中设置server ip为本机的IP地址。

猜你喜欢

转载自blog.csdn.net/u010835288/article/details/78238246