Я не понимаю этот Код
-
19-08-2019 - |
Вопрос
Я не понимаю этот фрагмент кода :
function ms(){
var plc=unescape('".
unescape( '\x43\x43\x43\x43\n.............\xEF'. $URL).CollectGarbage();
if (mf)return(0);
mf=1;
var hsta=0x0c0c0c0c,hbs=0x100000,pl=plc.length*2,sss=hbs-(pl+0x38);
var ss=gss(addr(hsta),sss),hb=(hsta-hbs)/hbs;
for(i=0;i<hb;i++) m[i]=ss+plc;
hav();
return(1);
}
В приведенной выше функции я, похоже, не могу определить типы переменных или выяснить, что она делает с hsta
переменная, и что она ей присваивает:
var hsta=0x0c0c0c0c,hbs=0x100000,pl=plc.length*2,sss=hbs-(pl+0x38);
var ss=gss(addr(hsta),sss),hb=(hsta-hbs)/hbs;
for(i=0;i<hb;i++)m[i]=ss+plc;
Я также не могу разобраться в этой функции :
function fb(){
try {
var obj=null;
obj=cobj('{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}');
if(obj){
ms();
var buf = addr(0x0c0c0c0c);
while (buf.length < 400) buf += buf;
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;
}
} catch(e){}
return 0;
}
Что означает следующий код?
cobj('{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}')
Что это за переменная такая?
var buf = addr(0x0c0c0c0c);
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;
Самое главное, что пытается сделать этот фрагмент кода?
Вот еще несколько функций:
function hex(num,width){
var digits='0123456789ABCDEF';
var hex=digits.substr(num&0xF,1);
while(num>0xF){
num=num>>>4;
hex=digits.substr(num&0xF,1)+hex;
}
var width=(width?width:0);
while(hex.length<width)hex='0'+hex;
return hex;
}
function addr(addr){
return unescape('%u'+hex(addr&0xFFFF,4)+'%u'+hex((addr>>16)&0xFFFF,4));
}
Будем признательны за любые рекомендации.
Решение
Это фрагмент javascript, пытающийся использовать уязвимость безопасности, связанную с Facebook, более конкретно с его элементом управления ActiveX на стороне клиента для загрузки изображений.
В cobj
часть пытается создать объект ClassID {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
который, оказывается, является элементом управления ActiveX для загрузки фотографий.Функции ExtractIptc и ExtractExif принадлежат этому конкретному элементу управления ActiveX.
Суть кода на самом деле заключается в манипулировании адресами памяти, сдвиге, использовании масок для разделения старших и младших битов.Например, hex((addr>>16)&0xFFFF,4))
принимает адрес, сдвигает его на 16 бит вправо, очищает нижнюю часть и преобразует его в шестнадцатеричное число.Чтобы действительно понять большую часть этого кода, у вас должны быть правильные инструменты отладки.
Погуглив в {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 для hex).Поэтому я бы предположил, что это означает шестнадцатеричный начальный адрес (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().
Другие советы
Я исправил форматирование, насколько мог, но, похоже, все еще не хватает фрагментов.По крайней мере, я вижу синтаксические ошибки, неинициализированные переменные и т.д.
Если это реальный рабочий код, пожалуйста, отредактируйте свой вопрос и (используя кнопку "код" "101/010" или просто сделав отступ в 4 пробела, а не заключая в кавычки кнопкой """) опубликуйте фактический код, чтобы то, что мы видим, соответствовало тому, что видите вы. Редактировать:НЕ ПЫТАЙТЕСЬ ЗАПУСКАТЬ ЭТОТ КОД!вероятно, это вредоносно.
Если это не рабочий код, вот ваш ответ:это не работает, поэтому пытаться выяснить, как это работает, не имеет смысла.