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 :

Récupérer commande system


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut Récupérer commande system
    Bonjour,

    J'essaie de m'amuser avec les commandes système sauf que je n'arrive pas à faire ce que je veut.

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int valeur;
    valeur = ('dir');
    cout << valeur ;

    J'obtiens un chiffre ( souvent un : 1 ). Normal car je stocke la valeur dans un int, sauf que j'ai beau cherché je ne vois pas comment faire pour qu'en faisant un cout j'ai le retour de ma commande systeme, au lieu que ma variable stocke un chiffre je voudrais qu'elle me stocke tout ce que je vois affiché à l'écran quand je fais cette commande dans un cmd.

    Merci d'avance de vos aides, cordialement Spiritus,

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 469

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Par défaut
    Bonjour.
    Ca marche ce code ? Ce n'est pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    valeur = system("dir");
    La fonction system permet de faire exécuter par l'interprète de l'OS la commande passée en paramètre. La chaîne passée en paramètre doit être l’expression complète, avec options et arguments, d’une commande légale pour le système utilisé (tiré du polycopié du cours sur le langage C, Par Henri Garreta). Et comme l'a dit bacelar, il n'est pas recommandé d'utiliser cette fonction. La fonction renvoie la valeur résultat de la commande exécutée, donc le "1" est le résultat de l’exécution de la commande dir par l'OS.

    Si vous voulez récupérer l'affichage généré par dir, vous pouvez procéder comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char *nomfichier = "c:/monbazar/foo.txt"; // le dossier c:\monbazar doit exister au préalable
    int i;
    i = system("dir >> c:/monbazar/foo.txt");
    // Le fichier c:/monbazar/foo.txt contient maintenant le résultat de l'affichage de dir, 
    // vous pouvez l'afficher comme vous le voulez.

  4. #4
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Du code non portable aussi.
    system est très bien si on veut juste lancer un programme sans se soucier de la sortie.

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 469
    Par défaut
    En lancer plein de virus par la même occasion.
    Laissez "system" mourir en paix.

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Je m'en suis servi pour bencher des programmes et pour lancer gnuplot, j'ai jamais eu de souci.
    system doit (peut-être) être utiliser avec soin, mais n'est pas forcément à bannir (?) (J'ai pas trouvé grand chose via Google sur la dangerosité de system)

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    En fait, un programme utilisant system est simple à violer, il suffit de modifier intelligemment son PATH, pour mettre le programme à exécuter devant.

    Par exemple, supposons un programme gentil faisant juste appel à system("gnuplot machin truc");.
    Il suffit de créer un programme que j'appelle gnuplot, et de faire en sorte que system() trouve le mien plutot que le programme souhaité pour être exécuté.

    Maintenant, je peux aussi m'amuser à remplacer des programmes plus important, comme rm, pour pouvoir conserver les fichiers "secrets" d'un programme mal sécurisé.

    Sachant qu'il faut trois fois rien pour savoir quelles commandes sont appelées par system.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    C'est tout à fait exact, sur le plan sécu, c'est une vraie passoire. Après, c'est à mettre en perspective de l'utilisation qui en est faite : si c'est un exécutable privé utilisé pour faire des calculs en one shot et tracer les résultats, ce n'est pas particulièrement dangereux.Si un attaquant a accès au PATH, il peut faire des trucs bien pires qu'utiliser la vulnérabilité introduite dans le soft de l'op ! Il faut être prudent quand il s'agit d'un logiciel distribué massivement ou exécuté comme un serveur, et je ne crois pas que ça soit le cas ici.

  9. #9
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Je pense que si un type modifie ton PATH (ou l'exécutable lancé par system), tu as d'autres soucis avant de te préoccuper des programmes lancés avec system.

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 469
    Par défaut
    Pas besoin de modifier le PATH, CMD.EXE cherche dans le working directory, et dans tout un ensemble de répertoire système pas forcement très safe pour les commandes "built-in" avant d'utilisez le PATH, et il a une interprétation vraiment très original mais pas très safe d'interpréter les espaces dans cette variable d'environnement.
    C'est une passoire sécuritaire, un boulevard à virus.
    Ici, je parle de la fonction Win32 system, je ne sais pas si std::system de la STL a les même faiblesse (plus lié à CMD.EXE qu'à l'API système).

  11. #11
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    En quoi un createProcess (ou un exec* qui eux sont posix 2001 et 2008) serait-il plus sûr qu'un system

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 469
    Par défaut
    Ca n'utilise pas les "fonctionnalités" douteuse de CMD.EXE.

  13. #13
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Mais comment trouvent-ils l'application, puisque tu ne peux pas décemment utiliser un chemin absolu?
    De la même manière que CMD.exe

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 469
    Par défaut
    Le PATH et la base de registe, pas d'interprétations vaseuses de commande "built-in" (sans l'être vraiment) ou de chemins avec des espaces.

  15. #15
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    Et le PATH est une variable d'environnement de l'appel au programme, modifiable aisément (il suffit de le surchargé lors de l'appel)

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 469
    Par défaut
    Le PATH, ça sera celui du processus parent. Si le processus parent n'est pas compromis, il n'y a pas de problème.
    C'est l'utilisation de "system" qui permet à l'attaquant de faire la fête et de s'introduire dans le contexte de sécurité "privilégié" juste en touchant à des répertoires non safe car n'étant que des répertoires de transites du PATH et non des cibles du PATH.
    L'utilisation de "system" est le maillon faible ici.

  17. #17
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    J'avoue que je n'ai pas trop compris ton explication.

    En gros, si j'ai un PATH="C:/d1/d2/d3/toto" ou PATH="/d1/d2/d3/toto", le répertoire "toto" est protégé mais pas les répertoires d1, d2, d3.
    Or il est possible en touchant les répertoires d1, d2 ou d3 de provoquer une faille de sécurité ?

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 469
    Par défaut
    Si PATH="C:/d1/d21 d22/d3/toto"
    Est-ce que t'accepterais qu'un programme d22.exe ou d22.com ou d22.bat (et autres .pif) dans d21 soit exécuté à la place de l'exécutable dans toto ?
    Moi, pas.

  19. #19
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Hein ?
    C'est bizarre.

    Normalement les chemins ne sont pas séparés par des ';'/':' dans le path ?
    Tu veux dire que pour system, quand il voit un espace, il considère que le chemin s'arrête à l'espace ?

    C'est spécifique à Windows ou c'est aussi le cas sous Linux ?

  20. #20
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 469
    Par défaut
    C'est pas system en lui même, c'est CMD.EXE qui fait sa tampouille.
    Je ne pense pas que les shell UNIX/Linus aient les mêmes problèmes, mais peut-être d'autres, qui sait.

Discussions similaires

  1. Commande system() :récupérer les data
    Par SPACHFR dans le forum Linux
    Réponses: 3
    Dernier message: 26/11/2007, 16h28
  2. Récupérer l'affichage d'une commande system
    Par Galinette1 dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2007, 19h49
  3. [awk] Récupérer une commande system dans un awk
    Par zebulon90 dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 18/09/2007, 10h52
  4. Prblème avec la commande system
    Par AnneOlga dans le forum C++Builder
    Réponses: 8
    Dernier message: 04/03/2004, 16h05
  5. La commande systeme
    Par sunshine33 dans le forum MFC
    Réponses: 11
    Dernier message: 13/01/2004, 11h34

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