Rédigé par Team Hackademy [M]

Les développeur,‭ ‬mieux informés,‭ ‬font beaucoup plus attention aux bugs de débordement de tampon qu'il y a quelques années.‭ ‬Ils ne réalisent cependant pas toujours que les dangers du C sont les mêmes en C++.‭ ‬En réalité,‭ ‬ce dernier ouvre à des possibilités d'exploitation supplémentaires que nous détaillons ici.

Nouveau Compte
Masquer les signatures: Score:
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Les char*, c'est mal

Ajouté par aregatbaVoir les commentaires

Dimanche 02 Novembre à 18:01 (Score: 1)

Bonjour,
Vous concluez dans votre article que le C++ est encore pire que le C (en gros). Mais un programmeur C++ digne de ce nom vous répondra que ce n'est pas du C++ que vous avez utilisé, mais du "C with classes". Et votre qualification de C++ comme "simple surcouche au C" confirme votre méconaissance du langage.
Dans votre article, vous avez simplement démontré qu'utiliser les char * c'est mal. Car programmer "en C++" avec les char *, stdio.h, string.h et malloc.h, ben c'est simplement programmer en C avec un compilateur C++.
Le C++ dispose de son propre type chaine de caractères : std::string (en standard). Un programme C++ digne de ce nom l'utilise au lieu d'un tableau (statique ou dynamique) de char. Remplacer
char Buffer[ 128 ];
dans votre exemple par
std::string Buffer;
et c'est fini, plus de bof, plus d'article... Au passage, le paramètre de SetBuffer aurait mérité d'être const.

[ Répondre ]
  • Re: Les char*, c'est mal

    Ajouté par blackrtVoir les commentaires

    Dimanche 02 Novembre à 19:01 (Score: 1)

    Oui c'est sur mais les formations actuels dans les ecoles ne preconnisent pas String mais utilisent encore les char*.Donc un bon bug de se genre peut se trouver."et c'est fini ,plus de bof,plus d'article..." un monde sans connerie ce serait bien aussi:pEt puis au passage un vrai language objet c pas du c++:p

    [ Répondre ]
  • Re: Les char*, c'est mal

    Ajouté par dvraspVoir les commentaires

    Dimanche 02 Novembre à 22:01 (Score: 1)

    C'est juste. Je n'ai pas pensé à mettre en évidence cet aspect-là du langage, merci de le rappeler !
    Cependant, je pense qu'il reste des cas de débordement de tampon en C++, en dehors de ceux qui sont évités par l'utilisation de types comme String ou Buffer. De plus, comme indiqué dans un autre commentaire, tout le monde ne les utilise pas.

    Mais ce qu'il faut retenir de l'article, c'est que il existe de nombreuses structures de contrôle que l'on peut écraser lors d'un overflow, pas seulement les adresses de retour.

    [ Répondre ]
    • Re: Les char*, c'est mal

      Ajouté par aregatbaVoir les commentaires

      Dimanche 02 Novembre à 23:01 (Score: 1)

      Ce qui m'a fait réagir c'est qu'au lieu d'apporter une solution au problème des char * vous propagez la mauvaise habitude de les utiliser au lieu de std::string.
      L'article n'est pas inintéressant, il illustre le mécanisme de la vtable. Mais là si on connait pas trop on retient que C++ c'est bien moisi, que ça apporte essentiellement des problèmes. Et si on connait on se dit que l'exemple est totalement bidon.
      AMHA, un magazine de hacking ne doit pas se contenter de présenter les problèmes / failles, mais expliquer comment s'en protéger. Et là c'était l'occasion. Tout le monde n'utilise pas string, et regardez pourquoi c'est pas une bonne idée.

      [ Répondre ]
      • Re: Les char*, c'est mal

        Ajouté par blackrtVoir les commentaires

        Dimanche 02 Novembre à 23:01 (Score: 1)

        Effectivement mais bon avec tous les articles sur le c,on aurait pu se dire aussi que c'etait moisi mais pourtant tout le monde continu a l'utiliser:p Et l'exemple est bidon mais c un exemple:p Et le comme dit plus les char * sont encore utiliser et le but de l'article n'etant pas de montrer l'utilisation des string mais une allusion aurait pu être faite.

        [ Répondre ]

Petites erreurs

Ajouté par wiloufVoir les commentaires

Dimanche 02 Novembre à 23:01 (Score: 1)

Mon commentaire est très pragmatique et les erreurs que je vais mentionner ne gènent pas trop à la compréhension de l'article mais bon, ya un feedback il faut que ca serve...

_Dans le code de BigVuln.cpp, ligne 29 et 30, MyClass1 et MyClass2 doivent être respectivement remplacés par ClassFille1 et ClassFille2.

_Dans la première ligne de texte suivant le code cité ci-dessus, il est écrit "La méthode SetBuffer étant virtuelle...", je supppose qu'il fallait comprendre "la méthode PrintBuffer".

Merci pour votre journal.

[ Répondre ]
<< Gestion et traitement des exceptions sous Windows  Transformez un vieux PC en Hotspot de luxe >>

Authentification


Nouveau Compte
Oublié votre Mot de Passe ?