飞道的博客

扩大攻击层面:React Native Android应用程序

372人阅读  评论(0)

React Native是一个移动应用程序框架,最常用于通过启用React和本机平台功能来为Android和iOS开发应用程序。如今,在你所有资产(有时使用相同的代码)的平台上使用React变得越来越流行,包括公司必须提供的任何移动应用程序。

在检测时,我们通常集中精力尽可能扩大攻击面。这通常意味着深入研究已经为移动平台编写的应用程序,以查找其他API端点或其他更多信息,例如API密钥形式的敏感凭据。

这篇博文的最终目标是能够从APK到React Native JavaScript,可以对其进行进一步分析以分析API路由和敏感凭证是否泄漏。

通常,在反转Android应用程序时,会使用dex2jar将其反编译,然后使用JD-GUI进行分析。在处理React Native应用程序时,如果该应用程序具有你要分析的任何本机代码,这将很有用,但是大多数情况下,应用程序的核心逻辑在于React JavaScript,无需使用即可获取dex2jar。

注意:dex2jar通过将Java字节码转换为Dalvik字节码来工作,因此,并不能始终保证干净有效的输出,因此请不要害怕使用该smali工具来探究Dalvik字节码。

从React Native APK获取JavaScript

对于此示例,我将从以下React Native应用程序中提取JavaScript:

com.react_native_examples(https://apkpure.com/react-native-examples/com.react_native_examples

下载完上述APK后,请使用以下命令将其解压缩到新文件夹中:

unzip React\ Native\ Examples_v1.0_apkpure.com.apk -d ReactNative

浏览到新创建的ReactNative文件夹,然后找到该assets 文件夹。在此文件夹中,应包含index.android.bundle。该文件将以最小格式包含所有React JavaScript。

目录文件的力量

如果能够找到名为的文件index.android.bundle.map,则可以以最小化格式分析源代码。map文件包含允许你映射缩小的标识符的源映射。如果你要反转的React Native应用程序的assets文件夹中包含地图文件,则可以通过index.html在同一目录中创建一个文件,其中包含以下内容来利用此文件:

<script src="index.android.bundle"></script>

保存此文件,然后在Google Chrome中打开它。打开开发人员工具栏(对于OS X为Command + Option + J,对于Windows为Control + Shift + J),然后单击“源”。您应该看到一个整齐地映射的JavaScript文件,分为组成主捆绑包的文件夹和文件:

利用随附的地图文件分析Chrome DevTools中的index.android.bundle

搜索敏感的凭据和端点

在React Native应用程序中流行的一种模式是使用第三方数据库,例如Firebase。过去,发现有许多应用程序在其React Native应用程序中使用不正确的Firebase身份验证模型,并且包含过于宽松的API密钥。

在Donald Daters应用程序中就是这种情况,该应用程序很容易受到此攻击媒介的攻击,并在此处发布了博客。

为了从中提取Firebase API密钥,可以对以下字符串进行grep处理index.android.bundle:

FIREBASE_API_KEY
FIREBASE_AUTH_DOMAIN
FIREBASE_DB_URL
FIREBASE_BUCKET
apiKey

例如:

grep -rnis 'apiKey' index.android.bundle
... omitted for brevity ...

initializeApp({
   apiKey:"AIzaSyDokhX9fzFlJMfXjwbiiG-2fGDhi4kLPFI",
authDomain:"react-native-examples-bcc4d.firebaseapp.com",
databaseURL:"https://react-native-examples-bcc4d.firebaseio.com",
projectId:"react-native-examples-bcc4d",
storageBucket:"",
messagingSenderId:"928497342409"});

... omitted for brevity ...

除了查找Firebase凭证之外,index.android.bundle还可以分析该文件的API端点。在我正在反转的React Native应用程序中,通过浏览Chrome中未缩小的JavaScript,我能够找到许多API端点:

通过遍历未缩小的源查找API端点

与Firebase接口

以下Python脚本可用于与Firebase数据库连接。使用此脚本之前,请使用来安装pyrebase pip install pyrebase。

import pyrebase

config = {
   
  "apiKey": "FIREBASE_API_KEY",
  "authDomain": "FIREBASE_AUTH_DOMAIN_ID.firebaseapp.com",
  "databaseURL": "https://FIREBASE_AUTH_DOMAIN_ID.firebaseio.com",
  "storageBucket": "FIREBASE_AUTH_DOMAIN_ID.appspot.com",
}

firebase = pyrebase.initialize_app(config)

db = firebase.database()

print(db.get())

上面的脚本将对给定的Firebase数据库进行身份验证,然后打印出数据库的内容。仅当提供给此脚本的API密钥具有读取数据库的权限时,才可能这样做。要测试数据库上的其他操作,例如写入数据库,请参阅Pyrebase文档。

结论

通过此博客文章中的信息,你现在应该能够轻松分析React Native Android应用程序的JavaScript。通常可以通过分析打包到应用程序APK文件中的JavaScript来从React Native应用程序中提取敏感的凭证和API端点。通过提取APK并打开index.android.bundle文件assets夹中的文件,可以轻松获得React Native应用程序中包含的JavaScript 。

关注:Hunter网络安全 获取更多资讯
网站:bbs.kylzrv.com
CTF团队:Hunter网络安全
文章:Shubham Shah
排版:Hunter-匿名者


转载:https://blog.csdn.net/qq_25879801/article/details/111767759
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场