IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Erreur shell a distance


Sujet :

C++

  1. #1
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut Erreur shell a distance
    Bonjour à tous ,
    Je developpe un shell a distance , j'ai fais une fonction qui execute une commande et renvoie le resultat seulement quelque problemes se posent à moi :
    - lorsque tape une commande neccessitant le root , mon programme ne renvoie rien au serveur
    - lorsque je tape la commande su , le mot de passe est demandé sur la console du client au lieu d'etre dans la console du serveur.

    Voilà , merci d'avance pour votre aide, voici la fonction qui utilise my_popen et la fonction my_popen elle même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    string getResponse(string buffer,int sock)
    {
    	string delimiter = ":";
    	string prefix = buffer.substr(0,buffer.find(delimiter));
    	char* command = (char*)(buffer.substr(buffer.find(delimiter)+1	,buffer.size()-1)).c_str();
    	string mystring;
    	if(prefix=="sh")
    	{	 	
    		FILE* myfile ;
            my_popen(command,mystring);
    		if(mystring.size()==0)
    		{
    			mystring= "Commande non verbeuse";
    		}    
    	    return mystring;
     
    	}
    	return "error";
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    bool my_popen (const std::string& cmd,std::string& out ) {
        bool            ret_boolValue = true;
        FILE*           fp;
        const int       SIZEBUF = 1234;
        char            buf [SIZEBUF];
     
        if ((fp = popen(cmd.c_str (), "r")) == NULL) {
        	perror("popen");
            return false;
        }
        std::string  cur_string = "";
        while (fgets(buf, sizeof (buf), fp)) {
            out += buf;
        }
        pclose(fp);
        return true;
    }

    Ainsi que l'envoie de la reponse dans la socket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string buf(buffer);
    		       	string rep(getResponse(buf,sock));
    		       	int size = rep.size();
    		        if(send(sock,rep.c_str(),size,0)!=size)
    		        {
    		        	perror("send");
    		        }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Salut,

    juste sur la forme : c'est toi qui a écrit tout le code ? Et il est complet là ?
    Y'a des paramètres par copies, puis pas const&, des variables inutiles au milieu.
    Et ça char* command = (char*)(buffer.substr(buffer.find(delimiter)+1 ,buffer.size()-1)).c_str(); quelle horreur !!
    Un const cast sur une variable temporaire, t'as envie que ton programme plante toi non ?

    Je ne peux pas t'aider pour ton problème, que je ne comprends pas (console client, server ?), mais avec des trucs comme ça, ça va pas aider en tous cas.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    Oui j'ai ecris tout le code excepté la fonction my_popen que j'ai trouvée puis modifiée ...

    Je ne comprends pas le problème du cast ?

    mon serveur doit envoyer des commandes a executer aux clients et recevoir leur resultat .

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    tu ne peux pas juste faire une connexion ssh (via openssh ou putty)?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    Non car les commandes dans le shell ne sont qu'une partie de ce que je veux faire .
    Je veux pouvoir ajouter des modules comme prendre une capture d'ecran du client etc...

    Je veux vraiment programmer ça....!

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pourquoi accéder à l'écran à distance? Comment sais-tu qu'il y en a un?
    Normalement, un shell n'est pas une connexion graphique. C'est une autre connexion que celle d'un utilisateur graphique.

    Pourquoi ne pas utiliser un logiciel de prise de controle à distance (d'assistance à distance)?
    Quel intérêt de le programmer toi-même?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    Le programme doit pouvoir controler plusieurs clients en même temps comme envoyer une commande a tout un reseau d'ordinateur pour faire des mises a jours depuis le poste du serveur.
    La capture d'ecran c'est juste une idée comme ça.

    Je veux programmer cela moi même pour apprendre et m'occuper ...

    Edit : je veux programmer un remote administration tool quoi

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Concretement, ca va marcher dans "l'autre sens", ce sont les "clients" ou "esclaves" qui feront tourner des programmes serveurs, c'est-à-dire qui attendent des connexions.

    Ces serveurs, c'est eux qui lanceront les commandes reçues depuis le client réel (le "serveur" ou "maître").
    De là, il te suffit d'avoir un protocole suffisamment sécurisé, et d'envoyer les commandes.

    Pour l'aspect sécurité, il suffit d'établir une connexion via une bibliothèque comme openssh.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    Pourquoi ce serait comme tu le dis ?
    Dans ce cas la comment je ferais pour envoyer une commande a toute les machines en même temps.
    Et il faudrait noter l'IP de chaque machine alors que dans mon cas celle du serveur suffit.

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    C'est une question de vocabulaire: il s'agit de déterminer qui écoute, et qui parle.

    Les serveurs sont les programmes qui attendent qu'on leur dise quelque chose.
    Les clients sont ceux qui se connectent dessus quand ils le souhaitent, et qui réponde.

    Prends un MMO-truc, le serveur tourne en permanence, et attend que le joueur se connecte (via son client).

    Je ne suis pas expert en programmes réseaux, mais je te déconseille quand même de coder toi-même ce type de programme.
    Tu veux faire un programme qui exécute des commandes arbitraires, potentiellement avec les droits root, et sans demander d'intervention d'un utilisateur physique sur le poste cible.

    C'est précisément ce que font les virus.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  11. #11
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    Oui donc pour les client et serveur c'est exactement ce que je veux faire .
    Les clients se connecte aux serveur quand ils veulent et ils recoivent les ordres du serveur.

    Je ne veux pas programmer un virus mais un logiciel d'administration à distance sur lequel on peut envoyer une commande a tout les clients d'un coup.

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    En gros, tu préfères le principe des programmes "chevaux de Troie" qui se connectent à un serveur de command and control?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    C'est pas mon intention , je veux juste apprendre et ce remote ADMINISTRATION tool me semble être un bon projet pour en apprendre plus .

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Je ne comprends pas le problème du cast ?
    Un const cast sur une variable temporaire
    Oh aucun, tant que tu n'espères pas utiliser ta variable command par la suite.

    En tous cas je vois pas où se situe ton problème de droits ou quoi que ce soit, tu veux juste un serveur qui balance du texte à tes utilisateurs, aucun accès ssh ou quoi que ce soit là-dedans.
    Un bête serveur de chat en fait.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Ce que tu cherches à faire ressemble comme 2 gouttes d'eaux à l'infrastructure de base d'un botnet.
    Ne t'étonne pas que les outils de bases des OS ne te facilitent pas la vie, bien au contraire.

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ouais, su possède probablement du code spécifiquement pour empêcher de demander le mot de passe à autre chose qu'un périphérique de type télétype.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre averti Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Points : 333
    Points
    333
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Oh aucun, tant que tu n'espères pas utiliser ta variable command par la suite.

    En tous cas je vois pas où se situe ton problème de droits ou quoi que ce soit, tu veux juste un serveur qui balance du texte à tes utilisateurs, aucun accès ssh ou quoi que ce soit là-dedans.
    Un bête serveur de chat en fait.
    Rien à voir avec un chat...

  18. #18
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par Neolex Voir le message
    Rien à voir avec un chat...
    Oh que si... Tes clients reçoivent des messages, ils les exécutent. Tu n'as pas connu le super script qui faisait qu'on ne pouvait pas te bannir d'un IRC?

    Le programme doit pouvoir controler plusieurs clients en même temps comme envoyer une commande a tout un reseau d'ordinateur pour faire des mises a jours depuis le poste du serveur.
    Et pourquoi tu n'utilises pas un truc comme Ansible, Puppet ou Chef?

    A mon goût, tu apprendras plus en comprenant comment fonctionnent ces outils qu'en bidouillant. Ceci fonctionne déjà avec ssh :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ssh root@esclave1.lan "apt-get update && apt-get upgrade -y"
    Tu ajoutes des boucles sur la liste des machines, tu gères ton parc de machine... C'est globalement ce que fait Ansible en faisant abstraction sur les opérations et en gérant en plus les "sudo" et autres joyeusetés.

    Ton approche me fait penser à ce que j'ai compris de Chef (en mode serveur + noeuds). La grosse différence entre un "chief client" et ce que tu essaies de faire, c'est que :
    - Le chef client qui exécute les commandes s'exécute en mode root => Pas d'élévation de privilège à demander en chemin (ça n'a pas de sens de les renvoyer au serveur de commande)
    - Le serveur est identifié pour éviter les attaques où les commandes ne sont pas celles du serveur légitime.

Discussions similaires

  1. Message d'erreur connexion bureau à distance.
    Par dimitri13 dans le forum Windows 7
    Réponses: 2
    Dernier message: 27/04/2017, 18h02
  2. Shell connexion à distance et commandes
    Par Invité dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 10/05/2013, 17h50
  3. Erreur au lancement à distance script VBS
    Par samworld dans le forum VBScript
    Réponses: 0
    Dernier message: 04/01/2013, 10h54
  4. Erreur shell - dernière ligne d'un fichier
    Par tiamat59 dans le forum Linux
    Réponses: 6
    Dernier message: 10/12/2008, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo