Comment désactiver l'optimisation du compilateur gcc pour activer le débordement de tampon

je travaille sur un problème de devoirs qui nécessite une protection d'optimisation de compilateur désactivante pour qu'il fonctionne. J'utilise gcc 4.4.1 sur ubuntu linux, mais je n'arrive pas à trouver les bons drapeaux. Je réalise que c'est dépendant de l'architecture - ma machine fonctionne avec un processeur Intel w/ 32 bits.

Merci.

60
demandé sur Community 2010-02-26 11:14:10

6 réponses

C'est un bon problème. Afin de résoudre ce problème, vous devrez également désactiver ASLR sinon l'adresse de g() sera imprévisible.

Disable ASLR:

sudo bash -c 'echo 0 > /proc/sys/kernel/randomize_va_space'

Désactiver les canaris:

gcc overflow.c -o overflow -fno-stack-protector

après canaris et ASLR sont désactivés, il devrait s'agir d'une attaque directe comme celles décrites dans Smashing the Stack for Fun and Profit

Voici une liste des fonctionnalités de sécurité utilisées dans ubuntu: https://wiki.ubuntu.com/Security/Features vous n'avez pas à vous soucier des bits NX, l'adresse de g() sera toujours dans une région exécutable de la mémoire parce qu'elle est dans le segment de mémoire de texte. Les bits NX n'entrent en jeu que si vous essayez d'exécuter shellcode sur la pile ou le tas, ce qui n'est pas nécessaire pour cette tâche.

maintenant allez clouer ce EIP !

82
répondu rook 2016-01-30 21:03:05

Urm, all des réponses jusqu'à présent ont été erronées avec la réponse de Rook étant correcte.

entrée:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

suivi de:

gcc -fno-stack-protector -z execstack -o bug bug.c

désactive ASLR, SSP / Propolice et Nonexec D'Ubuntu (qui a été placé dans 9.10, et assez simple pour travailler autour de voir le mprotect(2) technique pour mapper les pages comme exécutable et jmp) devrait aider un peu, cependant ces "fonctions de sécurité" sont infaillibles. Sans le drapeau '- z execstack', les pages ont des marquages de pile non exécutables.

26
répondu Muhammed Abiola 2018-06-25 10:07:17

sur les nouvelles distributions (à partir de 2016), il semble que PIE soit activé par défaut, vous devrez donc le désactiver explicitement lors de la compilation.

voici un petit résumé des commandes qui peuvent être utiles pour jouer localement avec des exercices de débordement de tampon en général:

Désactiver canaries:

gcc vuln.c -o vuln_disable_canary -fno-stack-protector

Désactiver la fonctionnalité:

gcc vuln.c -o vuln_disable_dep -z execstack

Désactiver la TARTE:

gcc vuln.c -o vuln_disable_pie -no-pie

désactiver tous les mécanismes de protection énumérés ci-dessus (avertissement: pour les essais locaux seulement):

gcc vuln.c -o vuln_disable_all -fno-stack-protector -z execstack -no-pie

pour les machines 32 bits, vous devrez ajouter le paramètre -m32 .

11
répondu Aydin K. 2017-01-25 11:51:16

essayez le drapeau -fno-stack-protector .

5
répondu Kyle Lutz 2010-02-26 08:17:00

je sais que c'est un vieux fil, mais je tiens à souligner que vous n'avez pas besoin de désactiver ASLR afin de faire un débordement de tampon! Bien que ASLR soit activé (kernel_randomize_va_space = 2), Il n'entrera pas en vigueur à moins que L'exécutable compilé ne soit PIE, donc à moins que u n'ait compilé votre fichier avec le drapeau-fPIC-pie, ASLR n'entrera pas en vigueur.

je pense qu'il suffit de désactiver les canaris avec-FNO-stack-protector. Si vous voulez vérifier si ASLR fonctionne ou non(Position le code indépendant doit être défini), utiliser: hardening-check executable_name

4
répondu AhlyM 2015-04-07 00:38:32

Je ne citerai pas toute la page mais le manuel complet sur l'optimisation est disponible ici: http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Optimize-Options.html#Optimize-Options

à partir des sons de celui-ci , vous voulez au moins -O0 , la valeur par défaut, et:

- fmudflap-fmudflapth-fmudflapir

Pour le front-end qui le prennent en charge (le C et le C++), instrument toutes risqué pointeur/tableau un déréférencement opérations, une bibliothèque standard chaîne/tas de fonctions, et quelques autres constructions associées avec essais de portée / validité. Modules les instruments devraient être immunisés contre débordements de tampon, utilisation de tas non valide, et quelques autres classes de C / C++ les erreurs de programmation. Le l'instrumentation repose sur une la bibliothèque d'exécution (libmudflap), qui seront liés à un programme si - fmudflap est indiqué à l'heure du lien. Comportement en fonction du temps de fonctionnement des instruments le programme est contrôlé par le MUDFLAP_OPTIONS environment variable. Voir env MUDFLAP_OPTIONS= - help A. dehors! pour ses options.

2
répondu 2010-02-26 08:17:37