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?