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://www.uj5u.com/yidong/241040.html
標籤:其他
上一篇:RecylerView與多執行緒的“愛恨情仇”,怎么讓你的RecyclerView獲取ssm框架傳過來的值?
下一篇:適合新手前端學習資料(第十五天)
