Get SSH passwords in clear

Il est possible de récupérer les passwords tapés lors d'une connexion ssh sur une machine Linux. Il faut cependant disposer des droits root.

Quel est l'intérêt si on est déjà root !?

Imaginons le cas d'un Pentest (test d'intrusion), nous avons réussi à avoir un shell sur un server et à escalader nos privilèges en tant que root. Nous voulons ensuite essayer de rebondir sur d'autres serveurs. Pour cela, récupérer les passwords en clair des users qui se connectent peut être très utile.

Fonctionnement de OpenSSH :

OpenSSH intègre depuis 2002 une séparation des privilèges qui est activée par défaut. Plusieurs processus sshd sont créés lors d'une connexion entrante :

alt

Le process à faible privilège doit envoyer le nom d'utilisateur ainsi que le password au processus à haut privilège afin de vérifier et valider l'authentification. C'est lors de cette communication inter-processus que l'interception peut avoir lieu.

Schema du fonctionement d'OpenSSH :

alt Source : http://www.citi.umich.edu/u/provos/ssh/privsep-f.html

Procéder à l'interception des passwords en clair :

Il faut utiliser l'outil en ligne de commande strace, l'attacher au processus sshd et attendre que celui-ci soit forké lors d'une connexion entrante. Il est ensuite possible d'intercepter les échanges du processus fils qui utilisera les appels systeme read et write pour communiquer avec le processus père. Les passwords seront ainsi interceptés en clair !

La commande à lancer avec les droits root :

# strace -ff -p $(pidof sshd) -e read |& grep -F ', "\f\0\0\0\'
-ff : permet de suivre les processus forkés

-p : spécifie le PID du processus sur lequel s'attacher

$(pidof sshd) : récupère le PID du processus sshd

-e read : trace les evenements de lecture de notre processus

|& : permet de ne pas interompre strace tout en grepant les resultats

grep -F ', "\f\0\0\0\' : pour chercher la chaine fixée ', "\f\0\0\0\'  

Une fois la commande lancée (dans un screen par exemple si on veut récupérer le résultat plus tard), les passwords des utilisateurs qui se connecteront en ssh apparaitront en clair :

alt

Fap'ment,