• [^] # un exemple

    Posté par . En réponse à la dépêche Failles de sécurité dans openssl. Évalué à 1.

    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
    */

    #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...