IL SEMBLE QUE VOUS UTILISEZ ADBLOC POUR BLOQUER LA PUBLICITÉ, AUCUNE PUB INTRUSIVE SUR FDZ ET PAS DE POPUP
FDZ EST GRATUIT DONC MERCI DE DÉSACTIVER VOTRE ADBLOCK ET DE BIEN VOULOIR PARTICIPER ET JOUER LE JEU


PAR SUITE D'ABUS LES SERVEURS CCCAM ET ABONNEMENT NE SONT PAS TOLÉRÉS SUR LE FORUM


Page 1 sur 5 12345 DernièreDernière
Affichage des résultats 1 à 10 sur 42
Share |

Discussion: Petits jeux pour comprendre les "buffer overflow"

  1. #1
    Date d'inscription
    février 2008
    Messages
    111
    Remerciements
    0
    Remercié 0 fois dans 0 messages
    Pouvoir de réputation
    10

    Par défaut Petits jeux pour comprendre les "buffer overflow"

    Bon alors il semble que des gens s'interessent à la sécurité sur le Forum.

    C'est pour cela que je vous propose un petit jeu que j'avais fait à l'époque et dont l'objectif et d'apprendre à exploiter les "buffer overflow" sous Unix et plus particulièrement sous LINUX.

    Alors je ne sais pas si ca va intéresser quelqu'un mais je lance l'idée et puis on verra...

    Pour commencer je vous donne le petit programme C suivant:

    ---- newbie1.c -----

    #include <stdio.h>

    int main (int argc, char **argv)
    {
    int crap;
    int check;
    char buf[20];
    strcpy(buf, argv[1]);
    if (check==0xdeadbeef)
    {
    system("/bin/tcsh");
    }
    }

    ---- newbie1.c -----

    L'objectif ici est de me donner la réponse sous forme d'un petit programme C qui construira le buffer, puis qui exécutera le programme ci dessus compilé, en passant le buffer attendu en argument.

    L'objectif ici est de rentrer dans la partie de code suivante:

    if (check==0xdeadbeef)
    {
    system("/bin/tcsh");
    }


    Allez à vous de jouer ! Cliquer ici pour agrandir

  2. #2
    Date d'inscription
    janvier 2008
    Localisation
    oran
    Messages
    1 080
    Remerciements
    6
    Remercié 3 fois dans 3 messages
    Pouvoir de réputation
    11

    Par défaut

    j'aime énormement ces trucs mais je comprend pas en c Cliquer ici pour agrandir
    mais je v comme meme chercher Cliquer ici pour agrandir

    EDIT:l'idée est de faire passer plus que 20 caractère c'est ça ? Cliquer ici pour agrandir

  3. #3
    Date d'inscription
    février 2008
    Messages
    111
    Remerciements
    0
    Remercié 0 fois dans 0 messages
    Pouvoir de réputation
    10

    Par défaut

    Ouép Cliquer ici pour agrandir L'idée des 20 char est bien la.

    Mais la c'est du C niveau débutant donc c'est le moment de s'y mettre. La réponse ne doit pas dépasser une dizaine de lignes et encore je suis gentil Cliquer ici pour agrandir

  4. #4
    Date d'inscription
    janvier 2008
    Localisation
    oran
    Messages
    1 080
    Remerciements
    6
    Remercié 3 fois dans 3 messages
    Pouvoir de réputation
    11

    Par défaut

    ah tu es gentil !! Cliquer ici pour agrandir ok accroche toi aux questions dans ce cas la Cliquer ici pour agrandir
    pour commencer une simple question ^_^ qu'est ce que c'est les "**"

    Edit:Le programme ne marche pas chez moi il m'écrit que "strcpy" doit étre déclaré ou quelque chose comme ça :S
    Dernière modification par Boss_Med ; 05/04/2008 à 22h00.

  5. #5
    Date d'inscription
    février 2008
    Messages
    111
    Remerciements
    0
    Remercié 0 fois dans 0 messages
    Pouvoir de réputation
    10

    Par défaut

    Google est ton ami Cliquer ici pour agrandir

    Tu trouveras plein de tutoriaux sur le language C en ligne.

    Bon courage Cliquer ici pour agrandir

  6. #6
    Date d'inscription
    janvier 2008
    Localisation
    Ile-de-France
    Messages
    8 070
    Remerciements
    275
    Remercié 417 fois dans 209 messages
    Pouvoir de réputation
    10

    Par défaut

    Salem,

    donne nous le but recherché par la manip comme indice et j'essaierais de trouver! sans google, c'est promis..Cliquer ici pour agrandir

  7. #7
    Date d'inscription
    janvier 2008
    Localisation
    Ile-de-France
    Messages
    8 070
    Remerciements
    275
    Remercié 417 fois dans 209 messages
    Pouvoir de réputation
    10

    Par défaut

    n'ayant pas la reponse je me permet de repondre au question de Boss_med,

    les (int argc, char **argv) c'est equivalant au (int argc, string args[]) du java.

    le char *args c'est pour representer une chaine de caractere, args est un pointeur pointant vers la case memoire contenant le premier caractere et tout ce qui suit (les cases) sont la suite de la chaine jusqu'a un caractere special, pour la 2eme * c'est pr dire que c'est un pointeur de pointeur de char (argv), autrement dit un tableau (suite de cases "pointeur" de type char) et tout comme java le [index] permetera d'acceder (faire le calcul d'@) pour acceder à l'élément voulu (ici pointeur de char ou en langage up : un string).........je me suis moi meme embrouillé.

    bref, le vecteur argv c'est la suite de chaine pris en argument par le programme, comme par ex format c: /q , ici argv[0] est "c:" et argv[1] est "/q", et argc = 2 puisqu'il y'a 2 params.

    dsl lyas pour le HS.

  8. #8
    Date d'inscription
    janvier 2008
    Messages
    1 779
    Remerciements
    2
    Remercié 23 fois dans 9 messages
    Pouvoir de réputation
    11

    Question

    A vrai dire je n'ai pas très bien saisi l'objectif. Si je comprend bien le but est de provoquer un débordement du buffer.

    Cliquer ici pour agrandir Envoyé par Iyas Cliquer ici pour agrandir
    L'objectif ici est de rentrer dans la partie de code suivante:

    if (check==0xdeadbeef)
    {
    system("/bin/tcsh");
    }
    Cliquer ici pour agrandir
    Pour s'y faire il faut rajouter des lignes de code dans la structure conditionnelle IF...

    Cliquer ici pour agrandir Envoyé par Iyas Cliquer ici pour agrandir
    L'objectif ici est de me donner la réponse sous forme d'un petit programme C qui construira le buffer, puis qui exécutera le programme ci dessus compilé, en passant le buffer attendu en argument.
    Tu parles aussi de programme compilé... cela veut dire que pour causer le débordement il fraudera analyser le code machine généré par ton code.

    c'est bien ça ?

    فهم السؤال ، نصف الجواب
    Cliquer ici pour agrandir
    Dernière modification par assilabox ; 06/04/2008 à 10h11.

  9. #9
    Date d'inscription
    février 2008
    Messages
    111
    Remerciements
    0
    Remercié 0 fois dans 0 messages
    Pouvoir de réputation
    10

    Par défaut

    Bon ok je n'ai pas été très clair...

    Je vous prépapre une petite démo histoire que vous compreniez un peu mieux le principe Cliquer ici pour agrandir

    A tout d'suite Cliquer ici pour agrandir

  10. #10
    Date d'inscription
    février 2008
    Messages
    111
    Remerciements
    0
    Remercié 0 fois dans 0 messages
    Pouvoir de réputation
    10

    Par défaut

    Bon alors pour commencer on va faire plus simple... Cliquer ici pour agrandir

    Prenons le code suivant:

    /* newbie1.c */

    #include <stdio.h>

    int main(int argc, char **argv)
    {

    int crap;
    int check;
    char buf[20];

    if (argc < 2)
    exit(1);

    strcpy(buf,argv[1]);

    if (check==0x42424242)
    system("/bin/sh");

    }


    /* newbie1.c */


    La première question à se poser est: que fait le code ci dessus ?

    Et bien c'est simple, dans un premier temps il copie argv[1] dans buf.
    argv[1] ici est l'argument passé au programme lors de son exécution.
    Puis, il compare la valeur de l'entier check, et si ce dernier est bien égal à 0x42424242 et bien il exécute system("/bin/sh");.

    Pas très compliqué hun ? Cliquer ici pour agrandir

    Donc biensur il vous faut un linux à disposition...

    [cb@ns34229 cb]$ vi newbie1.c

    On copie colle le code ci dessus, puis on le compile:

    [cb@ns34229 cb]$ gcc -o newbie1 newbie1.c
    [cb@ns34229 cb]$

    L'objectif maintenant est d'obtenir l'exécution de system("/bin/sh") en passant le buffer qui convient en argument:

    [cb@ns34229 cb]$ ./newbie1 abcdefghj
    [cb@ns34229 cb]$

    Il ne se passe donc rien...

    Maintenant voilà ce que ca donne avec la bonne réponse (que je vais cacher bien évidemment) :

    [cb@ns34229 cb]$ ./newbie1 [le_buffer_magique]
    sh-2.05$

    On constate que le programme newbie1 à bien exécuté la partie du code system("/bin/sh");

    Pour ce premier exercice, pas besoin de coder quoi que ce soit Cliquer ici pour agrandir Il vous suffit de passer le bon argument au programme newbie1.


    Voilà Cliquer ici pour agrandir J'espere que c'est un peu plus clair Cliquer ici pour agrandir

Page 1 sur 5 12345 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/11/2012, 05h13
  2. [Actualités] "iPhone 5" Maintenant Disponible en "Autralie" et au "Japon" et dans 8 pays !
    Par Hicham dans le forum Actu - News High-Tech
    Réponses: 1
    Dernier message: 14/10/2012, 22h47
  3. [A vendre] Compte sTeam A vendre """ Jeux FPS """""
    Par MiG29MosTA dans le forum Ventes
    Réponses: 20
    Dernier message: 23/01/2012, 18h31
  4. pour les amateurs de jeux de courses en ligne " un jeu qui déchire"
    Par fawez dans le forum Jeux en Réseau / LAN Arena
    Réponses: 0
    Dernier message: 08/08/2010, 23h11

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
[Auto utilitaire DZ] [Webimag] [Algérie Info] [Guide Algérie] [Mosquée ALBADR MEAUX] [Photographe MARIAGE]

is PageRank Checking Icon