Étant donné que les débordements de tampon permettent toujours à un pirate malveillant d'écrire en dehors du tampon et d'écraser le pointeur de retour sur un shellcode que le pirate malveillant peut placer, cela signifie-t-il qu'une exploitation réussie d'un débordement de tampon de pile signifie toujours la possibilité d'invoquer un shell s'il est fait de la bonne manière ? Du moins en théorie, si vous supposez que le DEP et l'ASLR ne sont pas en place.
Non, un débordement de tampon peut:
Certains d'entre eux peuvent encore conduire à l'exécution de code, mais d'autres instances peuvent être impossibles à exploiter.
Cependant, une fois que vous avez trouvé où un débordement de tampon se produit, il est généralement beaucoup plus facile de le corriger que de prouver qu'il ne peut pas être exploité.
Douglas donne une réponse correcte. Tous les débordements de tampon ne donnent pas l'exécution de code. Cependant, je sentais qu'il manquait une mise en garde très importante.
Même si un débordement de tampon ne permet pas l'exécution de code arbitraire, cela ne signifie pas qu'il est sûr.
Un débordement de tampon d'écriture vous permet d'écrire sur des données que vous n'êtes pas censé faire. Ces données étant une adresse de fonction n'est qu'un cas spécial. Par exemple, supposons que j'ai une structure utilisateur contenant des champs pour le nom et les privilèges. Il est facile d'imaginer comment la définition de mon nom sur "JosiahhasaverylongnameAdmin" pourrait exploiter une vulnérabilité grave, sans aucune exécution de code arbitraire.
Pour un autre exemple du monde réel, si vous vous souvenez de Heartbleed, c'est un débordement de tampon. C'est juste un débordement de lecture plutôt qu'un débordement d'écriture. Aucune chance d'exécuter du code là-bas, mais une violation dévastatrice de la confidentialité quand même.
La réponse simple est non, tous les débordements de tampon ne sont pas garantis pour conduire à l'exécution de code. Le débordement pourrait être trop petit pour écraser les pointeurs/valeurs nécessaires, incapable de contrôler la partie débordante pour écraser les choses, ou peut-être trop grand qui pourrait tuer les cookies/canaris de la pile, etc.