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.
Les char*, c'est mal
Ajouté par aregatba
Dimanche 02 Novembre à 18:01 (Score: 1)
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 blackrt
Dimanche 02 Novembre à 19:01 (Score: 1)
[ Répondre ]
Re: Les char*, c'est mal
Ajouté par dvrasp
Dimanche 02 Novembre à 22:01 (Score: 1)
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 aregatba
Dimanche 02 Novembre à 23:01 (Score: 1)
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 blackrt
Dimanche 02 Novembre à 23:01 (Score: 1)
[ Répondre ]
Petites erreurs
Ajouté par wilouf
Dimanche 02 Novembre à 23:01 (Score: 1)
_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 ]