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

12 KiB
Raw Blame History

वेबव्यू हमले

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

WebView कॉन्फ़िगरेशन और सुरक्षा पर सरल गाइड

WebView की कमजोरियों का अवलोकन

एंड्रॉइड विकास का एक महत्वपूर्ण पहलू WebView के सही हैंडलिंग में शामिल है। यह गाइड WebView उपयोग से जुड़े जोखिमों को कम करने के लिए मुख्य कॉन्फ़िगरेशन और सुरक्षा अभ्यासों पर प्रकाश डालता है।

WebView उदाहरण

WebView में फ़ाइल एक्सेस

डिफ़ॉल्ट रूप से, WebViews फ़ाइल एक्सेस की अनुमति देते हैं। यह कार्य Android API स्तर 3 (कपकेक 1.5) से उपलब्ध setAllowFileAccess() मेथड द्वारा नियंत्रित होता है। android.permission.READ_EXTERNAL_STORAGE अनुमति वाले एप्लिकेशन एक फ़ाइल URL स्कीम (file://path/to/file) का उपयोग करके बाह्य संग्रह से फ़ाइलें पढ़ सकते हैं।

पुरानी विशेषताएँ: यूनिवर्सल और URL से फ़ाइल एक्सेस

  • फ़ाइल URLs से यूनिवर्सल एक्सेस: यह पुरानी विशेषता फ़ाइल URLs से क्रॉस-ऑरिजिन अनुरोधों की अनुमति देती थी, जिससे संभावित XSS हमलों के कारण एक महत्वपूर्ण सुरक्षा जोखिम उत्पन्न होता था। एप्लिकेशन्स जो Android Jelly Bean और नए लक्ष्यित कर रहे हैं, के लिए डिफ़ॉल्ट सेटिंग अक्षम (false) है।

  • इस सेटिंग की जांच के लिए, getAllowUniversalAccessFromFileURLs() का उपयोग करें।

  • इस सेटिंग को संशोधित करने के लिए, setAllowUniversalAccessFromFileURLs(boolean) का उपयोग करें।

  • फ़ाइल URLs से फ़ाइल एक्सेस: यह विशेषता भी पुरानी है, जो अन्य फ़ाइल स्कीम URLs से सामग्री तक पहुंच को नियंत्रित करती थी। यूनिवर्सल एक्सेस की तरह, इसकी डिफ़ॉल्ट सेटिंग सुरक्षा के लिए अक्षम है।

  • जांच करने के लिए getAllowFileAccessFromFileURLs() का उपयोग करें और सेट करने के लिए setAllowFileAccessFromFileURLs(boolean) का उपयोग करें।

सुरक्षित फ़ाइल लोडिंग

फ़ाइल सिस्टम एक्स

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

जावास्क्रिप्ट ब्रिज

एंड्रॉइड द्वारा एक सुविधा प्रदान की जाती है जो वेबव्यू में जावास्क्रिप्ट को नेटिव एंड्रॉइड ऐप फंक्शन को आमंत्रित करने की सुविधा प्रदान करती है। इसे addJavascriptInterface विधि का उपयोग करके प्राप्त किया जाता है, जो जावास्क्रिप्ट को नेटिव एंड्रॉइड कार्यक्षमताओं के साथ एकीकृत करता है, जिसे वेबव्यू जावास्क्रिप्ट ब्रिज कहा जाता है। सावधानी बरतने की सलाह दी जाती है क्योंकि यह विधि वेबव्यू के सभी पृष्ठों को पंजीकृत जावास्क्रिप्ट इंटरफेस ऑब्ज

@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge को WebView में एक इंटरफेस जोड़कर सक्रिय किया जा सकता है:
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • संभावित शोषण JavaScript के माध्यम से, उदाहरण के लिए, एक XSS हमले के माध्यम से, अनावरणित जावा विधियों को बुलाने की संभावना प्रदान करता है:
<script>alert(javascriptBridge.getSecret());</script>
  • जोखिम को कम करने के लिए, JavaScript ब्रिज़ उपयोग को प्रतिबंधित करें APK के साथ भेजे गए कोड तक और रिमोट स्रोतों से JavaScript लोड करने से रोकें। पुराने डिवाइस के लिए, न्यूनतम API स्तर को 17 पर सेट करें।

Reflection-based Remote Code Execution (RCE)

  • एक दस्तावेज़ीत विधि RCE हासिल करने की अनुमति देती है जिसे प्रकार के विशिष्ट पेलोड को निष्पादित करके प्रतिबिंब के माध्यम से किया जा सकता है। हालांकि, @JavascriptInterface एनोटेशन अनधिकृत मेथड एक्सेस को रोकता है, हमारी हमले की सतह को सीमित करता है।

Remote Debugging

  • रिमोट डीबगिंग Chrome Developer Tools के साथ संभव है, जो WebView सामग्री के भीतर अंतर्क्रिया और अर्बिट्रे JavaScript निष्पादन को संभव बनाता है।

रिमोट डीबगिंग सक्षम करना

  • एक एप्लिकेशन के सभी WebViews के लिए रिमोट डीबगिंग को सक्षम किया जा सकता है द्वारा:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • डिबगिंग को शर्तानुसार सक्रिय करने के लिए एप्लिकेशन की डिबगेबल स्थिति पर निर्भर करें:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

विषयात्मक फ़ाइलों को बाहर निकालें

  • 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);

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके: