Et hop, puisque tu le demandes :)
Je précise que cet exemple a été construit par OUAH et que je l'ai aussi utilisé dans ma présentation sur la programmation sécurisée aux LSM.
/*
* « Is this really exploitable ? »
* « yes ! »
* « But ... I'm trying to use the safe function strncpy() !!! »
* « Do, or do not, there is no try »
*
* vuln-stack-ov3.c
* By Olivier Gay (OUAH) <olivier.gay@dimail.epfl.ch>
* Adapted for my needs by Frédéric Raynal <pappy@miscmag.com>
* (c) 2002
*/
printf("Welcome in the strncpy secure program :)\n");
if (argc > 2) {
strncpy(arg1, argv[1], sizeof(arg1));
strncpy(arg2, argv[2], sizeof(arg2));
func(arg1);
}
}
La solution est (entre autre) dans MISC :-)
Quant à gets)(, merci je sais. Le compilo, s'il est récent, te préviens même. Mais les gens n'ont pas encore compris que faire gets() ou scanf("%s", str), c'est pareil ...
PS: désolé pour l'indentation, mais avec <pre>, ça fait n truc de 3Km de long...
[^] # un exemple
Posté par pappy . En réponse à la dépêche Failles de sécurité dans openssl. Évalué à 1.
Je précise que cet exemple a été construit par OUAH et que je l'ai aussi utilisé dans ma présentation sur la programmation sécurisée aux LSM.
/*
* « Is this really exploitable ? »
* « yes ! »
* « But ... I'm trying to use the safe function strncpy() !!! »
* « Do, or do not, there is no try »
*
* vuln-stack-ov3.c
* By Olivier Gay (OUAH) <olivier.gay@dimail.epfl.ch>
* Adapted for my needs by Frédéric Raynal <pappy@miscmag.com>
* (c) 2002
*/
#include <string.h>
void func(char *str) {
char buffer[12];
strcpy(buffer, str);
}
main(int argc, char *argv[])
{
char arg2[24];
char arg1[8];
printf("Welcome in the strncpy secure program :)\n");
if (argc > 2) {
strncpy(arg1, argv[1], sizeof(arg1));
strncpy(arg2, argv[2], sizeof(arg2));
func(arg1);
}
}
La solution est (entre autre) dans MISC :-)
Quant à gets)(, merci je sais. Le compilo, s'il est récent, te préviens même. Mais les gens n'ont pas encore compris que faire gets() ou scanf("%s", str), c'est pareil ...
PS: désolé pour l'indentation, mais avec <pre>, ça fait n truc de 3Km de long...