Это фрагмент javascript, пытающийся использовать уязвимость безопасности, связанную с Facebook, в частности с элементом управления ActiveX на стороне клиента для загрузки изображений.
Часть cobj
пытается создать объект ClassID {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
, который является элементом управления загрузкой фотографий ActiveX. Функции ExtractIptc и ExtractExif принадлежат этому конкретному элементу управления ActiveX.
Ядром кода на самом деле являются манипуляции с адресом памяти, смещение, использование масок для разделения старших и младших битов. Например, hex((addr>>16)&0xFFFF,4))
берет адрес, сдвигает его на 16 бит вправо, очищает нижнюю часть и преобразует его в шестнадцатеричное число. Чтобы действительно понять большую часть этого кода, вы должны иметь правильные инструменты отладки.
Поиск в Google {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
ClassID дал некоторые интересные результаты, на которые вы должны обратить внимание:
http://www.kb.cert.org/vuls/id/776931
http://seclists.org/fulldisclosure/2008/Feb/0023.html
http://securitytracker.com/alerts/2008/Feb/1019297.html
Обратите внимание, это не PHP. Это JavaScript.
Подробнее ...
cobj, вероятно, переводится в вызов CreateObject (). Каждый зарегистрированный элемент управления ActiveX имеет свой собственный идентификатор класса и имеет форму {0000000000-0000-0000-0000-000000000000}
. Если вы хотите сослаться на зарегистрированную библиотеку и создать ее экземпляр, вы можете использовать ее имя или идентификатор класса.
Сам элемент управления ActiveX должен быть файлом .OCX или .DLL на вашем компьютере. Если вы сможете найти этот файл и отладить его, вы получите самые конкретные сведения о функциях ExtractIptc и ExtractExif. Опять же, эти две функции, похоже, имеют уязвимости при вызове особым образом, и это то, что этот скрипт пытается использовать.
Часть var hsta=0x0c0c0c0c
определяет переменную hsta, равную шестнадцатеричному числу 0c0c0c0c. Это то же самое, что написать var hsta = 202116108
. В компьютерной инженерии легче иметь дело с шестнадцатеричными адресами, чем с десятичными числами, поскольку адреса и данные в памяти компьютера являются двоичными и могут быть непосредственно представлены в виде шестнадцатеричного числа. Более подробную информацию о шестнадцатеричной системе можно найти: http://en.wikipedia.org/wiki/Hexadecimal.
Кажется, что имя переменной hsta находится в венгерской нотации (первая буква представляет тип переменной - h для шестнадцатеричного числа). Поэтому я предположил бы, что это означает шестнадцатеричный начальный адрес (hsta). Следуя той же мысли, я думаю, что pl
означает полезную нагрузку, а plc
означает код полезной нагрузки.
Код полезной нагрузки - это код, который компьютер выполнит, если эксплойт был успешным, и это то, что вы видите в начале скрипта (\x43\x43\x43\x43\n....\xEF)
. Он кодируется как код оболочки для конкретной архитектуры процессора и операционной системы. Это означает, что код, который уже скомпилирован, автономен и может быть передан напрямую в ЦП. Если вы расшифруете это, вы, вероятно, найдете что-то похожее на машинный код. Наверное, ничего положительного.
Функция hex(num,width)
преобразует десятичное число в шестнадцатеричную форму. Я протестировал функцию отдельно, и она вернула 3E8 при подаче 1000. Переменная width просто используется для выхода из скрипта, если получающееся шестнадцатеричное число больше указанного.
Об этой части:
var buf = addr(0x0c0c0c0c);
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;
Переменная buf является буфером. Буфер - это не что иное, как данные в памяти. Это может быть связано как строка, как показано в этом коде. Я предполагаю, что буфер из 400 байтов создается из любого содержимого в памяти в 0x0c0c0c0c, а затем подается в две функции.
Здесь отсутствует несколько определений функций. А именно, функция hav ().