Si tratta di uno snippet javascript che tenta di sfruttare una vulnerabilità di sicurezza correlata a Facebook, altri s in particolare per il controllo ActiveX lato client del programma di caricamento delle immagini.
La parte cobj
tenta di creare un oggetto di ClassID {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
che risulta essere un controllo di upload di foto ActiveX. Le funzioni ExtractIptc ed ExtractExif appartengono a quel controllo ActiveX specifico.
Il nucleo del codice è in realtà la manipolazione degli indirizzi di memoria, lo spostamento, l'utilizzo di maschere per separare i bit alti e bassi. Ad esempio, hex((addr>>16)&0xFFFF,4))
prende un indirizzo, lo sposta di 16 bit a destra, cancella la parte inferiore e la converte in un numero esadecimale. Per comprendere la maggior parte di questo codice, dovresti avere gli strumenti di debug corretti.
Googling il {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
ClassID ha dato alcuni risultati interessanti che si dovrebbe guardare in:
http://www.kb.cert.org/vuls/id/776931
http://seclists.org/fulldisclosure/2008/Feb/0023.html
http://securitytracker.com/alerts/2008/Feb/1019297.html
Si prega di notare, questo non è il PHP. È javascript.
Maggiori dettagli ...
cobj è probabilmente tradotto in una chiamata CreateObject(). Ogni controllo ActiveX registrato ha il proprio ID classe e hanno il formato {0000000000-0000-0000-0000-000000000000}
. Quando vuoi fare riferimento alla biblioteca registrata e crearne un'istanza, puoi usare il suo nome o il suo ID di classe.
Il controllo ActiveX stesso deve essere un file .OCX o .DLL sul computer. Se riesci a trovare questo file ed eseguirne il debug, otterrai i dettagli più specifici sulle funzioni ExtractIptc ed ExtractExif. Ancora una volta, queste due funzioni sembrano avere vulnerabilità quando vengono chiamate in un modo specifico, e questo è ciò che lo script sta cercando di sfruttare.
La parte var hsta=0x0c0c0c0c
definisce una variabile hsta, uguale al numero esadecimale 0c0c0c0c. È lo stesso di scrivere var hsta = 202116108
. Nell'ingegneria del computer, è più facile gestire gli indirizzi esadecimali rispetto ai numeri decimali poiché gli indirizzi e i dati all'interno della memoria del computer sono binari e possono essere rappresentati direttamente come un numero esadecimale. Maggiori dettagli su esadecimali qui: http://en.wikipedia.org/wiki/Hexadecimal.
Il nome variabile hsta sembra essere in notazione ungherese (la prima lettera rappresenta il tipo di variabile - h per esadecimale). Quindi suppongo che significhi indirizzo iniziale esadecimale (hsta). Seguendo la stessa linea di pensiero, la mia ipotesi sarebbe che pl
significa payload e plc
significa codice payload.
Il codice payload è il codice che il computer eseguirà se l'exploit ha avuto successo ed è ciò che si vede all'inizio dello script (\x43\x43\x43\x43\n....\xEF)
. È codificato come shell code per una particolare architettura e sistema operativo della CPU. Ciò significa che il codice è già compilato, standalone e può essere collegato direttamente alla CPU. Se decodifichi questo, probabilmente troverai qualcosa vicino al codice macchina. Probabilmente non è niente di positivo.
La funzione hex(num,width)
converte un numero decimale nella sua forma esadecimale. Ho testato la funzione separatamente, e ha restituito 3E8 quando l'ho alimentata 1000. La variabile width è semplicemente usata per uscire dallo script se il numero esadecimale risultante è più grande di quanto specificato.
A proposito di questa parte:
var buf = addr(0x0c0c0c0c);
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;
La variabile buf è un buffer. Un buffer non è altro che i dati in memoria. Può essere interfacciato come una stringa, come mostrato in questo codice. La mia ipotesi è che un buffer di 400 byte sia creato da qualunque contenuto sia in memoria a 0x0c0c0c0c, e quindi alimentato in due funzioni.
Ci sono diverse definizioni di funzioni mancanti qui. Vale a dire, la funzione hav().
Questo non è tutto il PHP.In effetti, solo una piccola montatura sembra PHP. Il resto sembra JavaScript. Inoltre, si prega di fare un lavoro migliore di formattazione del codice - è quasi impossibile da leggere. –
@Peter Bailey: Sì, l'ho risolto per lui. –
Ho modificato la mia risposta con maggiori dettagli per voi. –