9
votes

Comprendre et faire une injection de code en c

Je suis un peu confus dans l'idée de l'injection de code dans C. Si quelqu'un pouvait l'expliquer et montrer comment c'est fait, je l'apprécierais.

permet de dire en C, vous avez un tableau de tailles 512 qui est écrit sur le contenu d'une prise de longueur 1024 et que le tableau de caractères détient maintenant une sorte de code mais seulement la moitié de ce qui a été écrit.

Comment le code malveillant est-il exécuté dans un débordement tampon, je pense que je suis confondu sur la structure de processus (pile, tas, données, texte).

c

2 commentaires

Vous pouvez accepter des réponses sur certaines de vos questions précédentes en cliquant sur la case à cocher en regard de la réponse qui est correcte.


Merci gars je ne connaissais même pas cette fonctionnalité.


3 Réponses :


0
votes

Une pile typique pour chaque sous-programme pourrait ressembler à ceci:

  • paramètres (valeurs qui ont été transmis comme paramètres sur ce sous-programme)
  • Adresse de retour (adresse du code à partir de laquelle cette routine a été appelée)
  • Valeurs de registre enregistrées
  • Variables locales

    Si un sous-programme a une variable locale et écrivez en quelque sorte à l'extrémité de la variable locale, alors il écrase les valeurs (sur la pile) comme l'adresse de retour, c'est-à-dire l'adresse du code qui sera exécutée à la fin de le sous-programme lorsque le sous-programme fait un "retour".


0 commentaires

2
votes

Si vous allouez un tampon sur la pile, il déborde, il écrit sur la pile. La pile contient le pointeur de retour de la fonction qui a attribué le tampon. Donc, si vous déborde d'un tampon sur la pile, vous pouvez définir le pointeur de retour sur quelque chose d'arbitraire; Vous donnez ainsi le contrôle du fil de l'exécution.

comme pour injecter réellement le code, cela dépend. La pile - ou plutôt, la page contenant - est souvent définie pour permettre l'exécution du code; Mais historiquement, il aurait été possible de stocker de petits programmes malveillants dans le tampon lui-même sur la pile. La programmation à l'orientation de retour est une variante assez nouvelle du Retour à Libc Attaque, qui travaillent tous deux autour de NX Bits.


0 commentaires

11
votes

Le truc général a à voir avec la manière dont le code et les variables du programme sont exposés en mémoire. Par exemple, lorsqu'une fonction est appelée le programme (le code inséré par le compilateur) doit stocker l'adresse de l'instruction pour revenir à. Donc, si c'est le mot 32 bits juste avant le début de la pile, on pourrait faire:

 void foo()
 {
    int array[5];
    int var = 0;
    int var2 = 0;

    // read in user input
    printf("Enter index and value to write:");
    scanf("%i", var);
    scanf("%i", var2);

    // malicious user might set var to -1 and var2 to an address to execute
    // if say the 32-bit value before the stack variables is the instruction to
    // return to
    array[var] = var2

    // return now goes to malicious code
 }


0 commentaires