mercredi 24 mars 2010

[INTERNAL PENTESTING] Windows Hacking

De retour pour un post qui ne devrait pas manquer d'intérêt. Notre mission du jour est de trouver tous les postes ayant un compte administrateur local connu. Dans notre quête de prise de contrôle de l'AD, ceci devrait être bien utile ...


Contexte (rapide)

Lors d'un test d'intrusion interne, le scénario ressemble souvent à ça :
  1. J'ai un poste utilisateur et j'ai un compte utilisateur => je deviens administrateur local ;
  2. En général, tous les postes de travail ou presque ou du moins un bon groupe ont le même mot de passe pour le compte administrateur local => nous pouvons donc nous connecter avec ce compte sur d'autres PCs ;
  3. On récupère tous les comptes du domaine sur tous les postes en priant que l'un d'entre eux contient un compte ayant les droits "Admin du domaine". Des outils nous permettent de connaître les comptes recherchés.

C'est pas mal tout ça mais ça prend du temps, ce n'est pas très ciblé et donc pas très discret. On admet donc que le compte administrateur local est en notre possession (vous savez autant que moi comment faire ...) et alors, c'est là qu'entre en jeu l'outil keimpx. Démonstration ...


Installation


Voici les étapes à suivre pour installer l'outil :

  1. Commencer par le télécharger, c'est un programme python ;
  2. Si vous le lancez tel quel, vous aurez certainement des erreurs. Vous aurez donc sûrement besoin d'installer py2exe que vous pouvez trouver ici ;
  3. ça ne marche toujours pas ? Normaaaaaaaaaal ;) En réalité, il vous faudra télécharger les classes Python Impacket (de Core Impact : hé oui, le tool est d'eux). Tout est ici.

Cette fois, vous n'avez plus d'excuse si ça ne marche pas ;)


On passe à l'action !

Pour le lancer, c'est très simple. Vous pouvez soit cibler une seule machine avec -t adresse_cible ou une liste de machine avec -l fichier_texte_avec_liste. Ensuite, vous utiliser l'option -U utilisateur -P mot_de_passe.
NB : Vous pouvez aussi utiliser les hashes : pratique !
Vous pourrez voir par vous mêmes les résultats de l'outil mais avant de voir ces possibilités, j'ai ajouté ma petite touche personnelle alors mieux que des mots, illustration !


Petite touche personnelle ...

J'avais deux choses à reprocher à l'outil en l'essayant une première fois sachant qu'en audit interne, nous sommes souvent confrontés à un grand nombre de poste de travail alors essayons de gagner en rapidité et en efficacité.
En effet :
  • quand on choisit de donner une liste d'hôte en paramètre, on ne peut utiliser de plages d'adresse de type 172.16.1.0-172.16.4.255 et je ne me vois pas écrire toutes les adresses une à une dans un fichier ... Ou alors, je n'ai pas vu la bonne syntaxe ?
  • keimpx va tester les credentials pour toutes les machines de la listes et c'est assez long surtout s'il y en a beaucoup.
Alors à ces deux points, j'ai rédigé un petit script (oui oui, j'aurais certainement pu trouver "tout fait" sur le Net mais un peu de scripting à la bourrin, càd tout ce que je sais faire, fait du bien de temps en temps ;)) :
  • mon script prend en paramètre un fichier texte contenant des plages d'adresses et/ou des adresses uniques pour en faire une liste d'hôtes unique que keimpx saura gérer ;
  • dans cette liste, je ping les machines pour connaître celles qui répondront. Les autres ne seront alors pas traitées par keimpx et là, on gagne du temps !

J'ai donc une liste de machines "optimisée" dans le sens où elle devrait être exhaustive sans avoir eu à taper 298361 adresses IP à la main, et en ne gardant que celles qui répondent. Pour terminer, mon script ne fait que lancer keimpx avec cette liste et les credentials sensé être connus (hypothèse) :



Je parle de keimpx depuis tout à l'heure mais quelles sont ces possibilités en fait ? Petite démonstration ;)


Keimpx en action ...

Une fois le traitement de fichier le pinging effectué, Keimpx est lancé. Il nous fournit la liste des machines ayant le couple login/mdp connu pour l'admin local. 2 adresses sont "matchées" ici :

La machine XXX.XXX.XXX.136 est ma machine donc aucun intérêt. On s'attaquera donc à la machine XXX.XXX.XXX.219.
Ensuite, chose intéressante, keimpx nous propose un shell : moi je dis "oui" !


On nous demande donc de choisir la machine cible, ici la deuxième. Puis, les credentials à utiliser. Il n'y a pas le choix : tapez 1 puis entrée.

Ensuite, les commandes (et possibilités) sont nombreuses. En voici quelques exemples :

  • Naviguer sur les disques (via les shares) :
#shares

Puis choisissez le disque souhaité, ici C$ :


  • Lister les utilisateurs ainsi que la politique de sécurité sur les comptes (extrait) :
#users



  • Obtenir un shell :
#shell


Bon bah ça, c'est fait ;)


Conclusion

L'engouement pour les applications WEB et tests externes fait que de nombreux outils existent dans ce sens. Keimpx touche un autre domaine où les outils sont moins présents. Ils ne permettra pas nécessairement de faire plus de chose qu'avant mais il nous servira certainement de couteau suisse de tests internes en nous simplifiant les choses.

Maintenant à vous de jouer pour le tester et découvrir ces autres fonctions.
Have fun!

2 commentaires:

Pierre a dit…

Salut,

Je ne connaissais pas cet outil, pour tes problèmes de conversion des plages en adresse il y avait l'option -sL de nmap.

# nmap -sL -n 192.168.0.1-5

A+

Jérémy RENARD a dit…

Ravi de t'avoir appris qqch !

Exact pour nmap ! Et le slash pour aller au-delà du /24, ex :

# nmap -sL -n 192.168.0.0/16

Et un nmap -sP pour connaître les machines vivantes.

@+

Locations of visitors to this page