Sto facendo un pentest e sono venuto da questo codice:
(function() {
var subdomain = (function() {
var query = /[?&]css=([^&#]*)/i.exec(window.location.search);
if(query) {
return query[1];
}
var URL = window.location.host.split('.');
if (URL.length > 1) {
return URL[0];
}
})();
if (subdomain) {
var link = document.createElement('link');
link.rel = "stylesheet";
link.href = "/" + subdomain + ".css";
document.getElementsByTagName('head')[0].appendChild(link);
}
})();
Aggiunge un file CSS all'intestazione per il rebranding.
L'URL di destinazione è simile a questo:
http://some.company.com/p1=test&css=custom
Abbiamo controllato il parametro subdomain qui che equivale a query o URL[0] .
query è il risultato di /[?&]css=([^&#]*)/i.exec(window.location.search); che equivale a custom in questo caso.
se query non è disponibile nell'URL, quindi URL[0] equivale a some qui, non posso pensare di fare nulla di utile usando URL[0] perché, per controllarne il valore, devo cambiare some a qualcos'altro che cambia completamente l'URL e punta ad un'altra pagina irrilevante.
In ogni caso, l'URL CSS finale sarebbe "/custom.css" o "/some.css" se il parametro CSS non è disponibile.
Ho provato alcuni payload per sfruttarlo ma tutti sono falliti.
Qualche idea se questo codice è vulnerabile e come può essere sfruttato?