9.2 KiB
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:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
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.
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 nasetAllowFileAccessFromFileURLs(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).
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
- https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html
- https://github.com/authenticationfailure/WheresMyBrowser.Android
- https://developer.android.com/reference/android/webkit/WebView
- https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1
- https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I
Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.