Вопрос

Я не понимаю этот фрагмент кода :

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 пробела, а не заключая в кавычки кнопкой """) опубликуйте фактический код, чтобы то, что мы видим, соответствовало тому, что видите вы. Редактировать:НЕ ПЫТАЙТЕСЬ ЗАПУСКАТЬ ЭТОТ КОД!вероятно, это вредоносно.

Если это не рабочий код, вот ваш ответ:это не работает, поэтому пытаться выяснить, как это работает, не имеет смысла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top