To fragment kodu JavaScript próbujący wykorzystać lukę w zabezpieczeniach związaną z Facebookiem, więcej s konkretnie do kontrolki ActiveX po stronie klienta, która przesyła obraz.
Część cobj
próbuje utworzyć obiekt klasy ClassID {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
, który jest formantem do przesyłania zdjęć ActiveX. Funkcje ExtractIptc i ExtractExif należą do tego konkretnego kontrolki ActiveX.
Rdzeniem kodu jest manipulacja adresami pamięci, przesuwanie, używanie masek do oddzielania bitów wysokich i niskich. Na przykład hex((addr>>16)&0xFFFF,4))
przyjmuje adres, przesuwa go o 16 bitów w prawo, czyści dolną część i konwertuje ją na liczbę szesnastkową. Aby właściwie zrozumieć większość tego kodu, powinieneś mieć odpowiednie narzędzia do debugowania.
Googling {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
ClassID dał kilka interesujących wyników należy spojrzeć na:
http://www.kb.cert.org/vuls/id/776931
http://seclists.org/fulldisclosure/2008/Feb/0023.html
http://securitytracker.com/alerts/2008/Feb/1019297.html
Uwaga, to nie jest PHP. To javascript.
więcej szczegółów ...
cobj jest prawdopodobnie przetłumaczone na CreateObject() wywołanie. Każda zarejestrowana kontrolka ActiveX ma swój własny identyfikator klasy i ma postać {0000000000-0000-0000-0000-000000000000}
. Jeśli chcesz odwołać się do zarejestrowanej biblioteki i utworzyć jej instancję, możesz użyć jej nazwy lub jej identyfikatora klasy.
Samym kontrolkiem ActiveX powinien być plik .OCX lub .DLL na komputerze. Jeśli uda ci się znaleźć ten plik i go zdebugować, uzyskasz najbardziej szczegółowe informacje na temat funkcji ExtractIptc i ExtractExif. Ponownie, te dwie funkcje wydają się mieć luki w zabezpieczeniach, gdy są wywoływane w określony sposób i właśnie to próbuje wykorzystać ten skrypt.
Część var hsta=0x0c0c0c0c
definiuje zmienną hsta, równą liczbie szesnastkowej 0c0c0c0c. To jest tak samo jak pisanie var hsta = 202116108
. W inżynierii komputerowej łatwiej jest zajmować się adresami szesnastkowymi niż dziesiętnymi, ponieważ adresy i dane w pamięci komputera są binarne i mogą być bezpośrednio reprezentowane jako liczba szesnastkowa. Więcej szczegółów na temat szesnastkowego tam: http://en.wikipedia.org/wiki/Hexadecimal.
Nazwa zmiennej hsta wydaje się być w notacji węgierskiej (pierwsza litera oznacza typ zmiennej - h dla heksadecymalnej). Dlatego zakładam, że jest to szesnastkowy adres startowy (hsta). Podążając tym samym tokiem myślenia, domyślam się, że pl
oznacza ładunek, a plc
oznacza kod ładunku.
Kod ładunku jest kodem, który komputer wykona, jeśli exploit się powiedzie, i to jest to, co widać na początku skryptu (\x43\x43\x43\x43\n....\xEF)
. Jest kodowana jako shell code dla konkretnej architektury procesora i systemu operacyjnego. Oznacza to, że kod jest już skompilowany, samodzielny i może być podłączony bezpośrednio do procesora. Jeśli to rozszyfrujesz, prawdopodobnie znajdziesz coś w pobliżu kodu maszynowego. To chyba nic pozytywnego.
Funkcja hex(num,width)
konwertuje liczbę dziesiętną na jej liczbę szesnastkową. Przetestowałem tę funkcję osobno i zwróciło 3E8 podczas podawania 1000. Zmienna szerokości jest używana po prostu do opuszczenia skryptu, jeśli wynikowa liczba szesnastkowa jest większa niż podana.
tej części:
var buf = addr(0x0c0c0c0c);
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;
Zmienna buf jest bufor. Bufor to nic innego jak dane w pamięci. Może być połączony jako ciąg, jak pokazano w tym kodzie. Domyślam się, że bufor o wielkości 400 bajtów tworzony jest z dowolnej zawartości w pamięci przy 0x0c0c0c0c, a następnie zasilany jest w dwie funkcje.
Brak tu wielu definicji funkcji. Mianowicie, funkcja hav().
To nie wszystko PHP.W rzeczywistości tylko niewielka jego część wygląda jak PHP. Reszta wygląda jak JavaScript. Ponadto, lepiej zrób formatowanie kodu - jest prawie niemożliwe do odczytania. –
@Peter Bailey: Tak, naprawiłem to dla niego. –
Zmodyfikowałem swoją odpowiedź, podając więcej szczegółów. –