gcc -> the gets function is dangerous and should not be used

gcc -> the gets function is dangerous and should not be used - C - Programmation

Marsh Posté le 10-08-2004 à 16:25:25    

:heink:  
 
Voilà ce que j'ai avec ce bout de code basique:
 

Code :
  1. #include <stdio.h>
  2. main()
  3. {
  4. char *ptr;
  5. ptr = malloc(81);
  6. gets(ptr);
  7. }


Pourquoi ?  
 
J'apprend le C avec un bouquin et c'est la solution qu'ils donnent à un petit exercice...
 
Merci

Reply

Marsh Posté le 10-08-2004 à 16:25:25   

Reply

Marsh Posté le 10-08-2004 à 16:26:08    

because elle verifie pas si la chaine lu peut entré dans le buffer de destination, donc pb en pagailles

Reply

Marsh Posté le 10-08-2004 à 16:26:35    

le programme fuis, jette le bouquin

Reply

Marsh Posté le 10-08-2004 à 16:27:28    

si tu tappe + de 80 caractètes ça déborde.
gets peut toujours faire un débordement quelque soit le tampon alloué avant, elle est donc toujours dangereuse.
celà dit moi je m'en sers souvent car elle est pratique, mais en étant conscient que ça crée un trou de sécurité dans mon prog.

Reply

Marsh Posté le 10-08-2004 à 16:30:31    

Ok  :(  
 

cris56 a écrit :

le programme fuis, jette le bouquin


Déjà que la traduction est superbement mal faite et que y'a des erreurs de tous les côtés  :pfff:  
24€ à la poubelle quasiment  :fou:

Reply

Marsh Posté le 10-08-2004 à 16:31:11    

t'avais qu'à demander avant d'acheter de la merde :os

Reply

Marsh Posté le 10-08-2004 à 16:34:19    

Taz a écrit :

t'avais qu'à demander avant d'acheter de la merde :os


Il avait l'air bien, il est si joli dans sa robe jaune  :love:  
J'avais regardé pour le K&R mais ils avaient pas (à la FNAC évidemment  :lol:)
 
Pour ceux que ca intérressent le livre en question est: "Le programmeur: le langage C" de CampusPress...

Reply

Marsh Posté le 10-08-2004 à 16:36:20    

WhatDe a écrit :


J'avais regardé pour le K&R mais ils avaient pas (à la FNAC évidemment  :lol:)


 
du coup ta pris la merde qui  restait :D


Message édité par cris56 le 10-08-2004 à 16:36:57
Reply

Marsh Posté le 10-08-2004 à 16:51:47    

cris56 a écrit :

du coup ta pris la merde qui  restait :D


Ben ouais  [:airforceone]

Reply

Marsh Posté le 10-08-2004 à 17:00:48    

warning: the use of `tmpnam' is dangerous, better use `mkstemp'
 
:o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 10-08-2004 à 17:00:48   

Reply

Marsh Posté le 10-08-2004 à 17:39:17    

WhatDe a écrit :

Il avait l'air bien, il est si joli dans sa robe jaune  :love:  
J'avais regardé pour le K&R mais ils avaient pas (à la FNAC évidemment  :lol:)
 
Pour ceux que ca intérressent le livre en question est: "Le programmeur: le langage C" de CampusPress...

la fnac c'est les pires de tous. va dans n'importe quelle librairie, il te le commande pour pas un rond, ça te coute pareil que chez amazon (ou moins) et tu vais vivres de véritables professionels du livres

Reply

Marsh Posté le 10-08-2004 à 18:38:18    

jesus_christ a écrit :

si tu tappe + de 80 caractètes ça déborde.
gets peut toujours faire un débordement quelque soit le tampon alloué avant, elle est donc toujours dangereuse.
celà dit moi je m'en sers souvent car elle est pratique, mais en étant conscient que ça crée un trou de sécurité dans mon prog.


 
c'est a dire ?  [:figti]


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 10-08-2004 à 18:39:19    

abruti :o

Reply

Marsh Posté le 10-08-2004 à 18:40:44    

Giz a écrit :

c'est a dire ?  [:figti]


ben un débordement fait que tu écrit dans une zone mémoire qui ne t'es pas allouée, un endroit aléatoire, et tu peux corrompre des données


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 10-08-2004 à 18:43:39    

Masklinn a écrit :

ben un débordement fait que tu écrit dans une zone mémoire qui ne t'es pas allouée, un endroit aléatoire, et tu peux corrompre des données

utile quand on débugge un code de ne même pas pouvoir se fier à sa saisie

Reply

Marsh Posté le 10-08-2004 à 18:45:22    

c'est gênant, mais le fait d'avoir un bug indébuggable n'est pas un trou de sécurité en lui même ;)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 10-08-2004 à 18:47:39    

Ouai, parce que j'avais entendu dire que c'etait une ancienne ruse pour faire du hacking cette fonction la...je croyais qu'en parlant de sécurité il voulait faire allusion a ceci.
 
=> taz : casse-toi ! :o


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
Reply

Marsh Posté le 10-08-2004 à 18:56:25    

Pas de sang sur mon topic :non:

Reply

Marsh Posté le 10-08-2004 à 19:05:30    

Masklinn a écrit :

c'est gênant, mais le fait d'avoir un bug indébuggable n'est pas un trou de sécurité en lui même ;)

vous êtes vraiment incroyable, vous êtes des bleu-bites comme on en fait pas avec vos pointeurs, les mecs de gcc ont pris la peine, une fois n'est pas coutume, d'afficher un warning, et vous foncez ... :pfff:

Reply

Marsh Posté le 10-08-2004 à 20:54:06    

Giz a écrit :

Ouai, parce que j'avais entendu dire que c'etait une ancienne ruse pour faire du hacking cette fonction la...je croyais qu'en parlant de sécurité il voulait faire allusion a ceci.


 
Ben oui, exploiter un buffer overflow (écrasement mémoire) c'est même la méthode la plus classique de prise de contrôle d'un ordinateur à distance.
 
www.bletchleypark.net/algorithms/Buffer_Overflow.pdf


Message édité par el muchacho le 10-08-2004 à 23:00:19

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 10-08-2004 à 21:42:43    

Taz a écrit :

vous êtes vraiment incroyable, vous êtes des bleu-bites comme on en fait pas avec vos pointeurs, les mecs de gcc ont pris la peine, une fois n'est pas coutume, d'afficher un warning, et vous foncez ... :pfff:


 :??:  
je disais simplement que les problèmes rencontrés au débug n'étaient pas les concéquences les plus graves (en terme de dangerosité potentielle) d'un dépassement de capacité moi :cry:

Reply

Marsh Posté le 10-08-2004 à 21:45:49    

comment tu veux débugger quoi que ce soit en utilisant des fonctions notoirement bugguées et dangereuses ? c'est comme mets des abort() dans tous les sens, tu gagneras du temps et de l'argent

Reply

Marsh Posté le 10-08-2004 à 21:56:57    

Taz a écrit :

comment tu veux débugger quoi que ce soit en utilisant des fonctions notoirement bugguées et dangereuses ? c'est comme mets des abort() dans tous les sens, tu gagneras du temps et de l'argent


Mais bordel de foutracul j'ai pas dit le contraire espèce de vieux grincheux !
 
J'ai simplement sous entendu que le fait qu'il ne faut pas utiliser une commande parce qu'elle empêche de débugger on s'en tamponne quand on sait qu'il ne faut pas l'utiliser car elle constitue une faille de sécurité :cry:  
dans les deux cas le résultat est le même (tu utilises pas la commande)

Reply

Marsh Posté le 10-08-2004 à 21:57:39    

je m'en fous, je veux pas entendre parler de gets :o

Reply

Marsh Posté le 10-08-2004 à 22:01:50    

t'es quand même un vieux grincheux :pfff:  
[meta ultra combo dans ta tête]
on dirait mon père :whistle:  
[/meta ultra combo dans ta tête]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 10-08-2004 à 22:02:53    

j'ai un bug vous pouvez m'aider ? [:icon9]
 
 

Code :
  1. char * chaine;
  2. printf("entré votre nom" );
  3. gets(chaine);
  4. fflush(stdin);


 
je vois pas de pbs, mé ca mrche pas :(

Reply

Marsh Posté le 10-08-2004 à 22:12:05    

c'est pas bien de se moquer des gens :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 10-08-2004 à 22:13:17    

merde, fais pas de faute d'orthographe :o

Reply

Marsh Posté le 11-08-2004 à 13:43:06    

Giz a écrit :

c'est a dire ?  [:figti]

oui comme dit plus haut si les octets qui débordent sont du binaire qui se place au bon endroit (à l'adresse d'une prochaine instruction pour peux qu'elle soit accessible) tu peux exécuter du code malicieux. C'est un grand classique des failles.

Reply

Marsh Posté le 11-08-2004 à 21:48:23    

:o  
 
Et maintenant voilà que les pages du livre commencent à se détacher ! A se demander si j'ai pas acheté un manuscrit...  :sarcastic:

Reply

Marsh Posté le 12-08-2004 à 08:15:32    

Giz a écrit :

c'est a dire ?  [:figti]


 
ben le classique buffer overflow :o
 
où l'on peut ecrire du code executable dans un endroit de la ram où on ne devrait pas pouvoir... c'est la magie du C :o

Reply

Marsh Posté le 12-08-2004 à 08:16:04    

WhatDe a écrit :

:heink:  
 
Voilà ce que j'ai avec ce bout de code basique:
 

Code :
  1. #include <stdio.h>
  2. main()
  3. {
  4. char *ptr;
  5. ptr = malloc(81);
  6. gets(ptr);
  7. }


Pourquoi ?  
 
J'apprend le C avec un bouquin et c'est la solution qu'ils donnent à un petit exercice...
 
Merci


 
faudrait ptet tester ce que vaut ptr apres le malloc, non ? imagine que le malloc échoue  [:totoz]

Reply

Marsh Posté le 12-08-2004 à 08:21:52    

imagine que malloc soit inutile

Reply

Marsh Posté le 17-08-2004 à 10:55:51    

Pourquoi chercher midi a 14heure.
gets ne doit plus être utiliser pour les raisons évoquées plus hauts.
 
A la place il vaut mieux utiliser fgets

Reply

Marsh Posté le 18-08-2004 à 04:07:34    

installez SP2 :o

Reply

Marsh Posté le 18-08-2004 à 04:45:26    

chrisbk a écrit :

j'ai un bug vous pouvez m'aider ? [:icon9]
 
 

Code :
  1. char * chaine;
  2. printf("entré votre nom" );
  3. gets(chaine);
  4. fflush(stdin);


 
je vois pas de pbs, mé ca mrche pas :(


 
 :love:

Reply

Marsh Posté le 18-08-2004 à 04:46:28    

LeGreg a écrit :

installez SP2 :o


 
et un athlon 64 pour avoir un bô message d'erreur et le kill du process en cado  :whistle:


Message édité par bjone le 18-08-2004 à 04:46:43
Reply

Marsh Posté le 09-09-2004 à 15:31:52    

Salut,
 
a propos de buffer overlow, j'ai matté quelqes topics et étudiés quelques bouts de code.
Il y a toujours un trucs que j'ai pas compris : une fois le bout de code envoyé celui-ci viens donc "remplir" plus de memoire que le programmeur n'avait prévu et ainsi provoqué un debordement de tampon. Par contre, comment ce bout de code peut-il s'executer tout seul sur la machine vérolée ?  A part planter (core dump) le programme fautif je vois pas comment ca peut fonctionner ...
 
Bon en y regardant de plus prêt on peu voir que les exploits utilisent aussi une adresse de retour apres avoir envoyé le shellcode. J'imagine que c'est une espece de call adresse qui est éxecuté mais je vois toujours pas comment . l'@ en question doit sans doute être le pint d'entree en memoire de la variable devant accueillir la chaine (dans le cas d'un gets par ex)  
 
SI je comprend bien le seul interet de la chose est de profiter des privilèges attribués au programmes exploitable et ainsi executer son pti programme confortablement ?


Message édité par DjobaDjobi le 09-09-2004 à 15:43:35
Reply

Marsh Posté le 09-09-2004 à 15:42:29    

L'athlon 64, il fait quoi de plus ?  en gros on aurais rajouté une fonctionnalité dans le prossesseur pour prévenir les bugs des programmeurs ? (lol) pour moi c'est prendre le pb à l'envers.. j'me demande bien a la demande de qui les constructeurs ont-ils rajouté ce systeme ;)
si vous avez un lien interessant sur le sujet je suis preneurs


Message édité par DjobaDjobi le 09-09-2004 à 15:42:54
Reply

Marsh Posté le 09-09-2004 à 15:44:29    

DjobaDjobi a écrit :

L'athlon 64, il fait quoi de plus ?  en gros on aurais rajouté une fonctionnalité dans le prossesseur pour prévenir les bugs des programmeurs ? (lol) pour moi c'est prendre le pb à l'envers.. j'me demande bien a la demande de qui les constructeurs ont-ils rajouté ce systeme ;)
si vous avez un lien interessant sur le sujet je suis preneurs


Tous les sites de hardware en parlent, ils bloquent les buffer overflow, c'est tout...[:skeye]


Message édité par skeye le 09-09-2004 à 15:45:53

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed