Je vien de me mettre à jour avec une machine 64 bits et une instal archlinux en 64 bits toute fraiche.
Avant ma toute nouvelle instal,je m'expérimentais sur les shellcodes classique sans ASLR (vraiment basique) sur architecture 32 bits x86.
Ayant changé d'architecture en passant de 32 à 64 bits j'ai installer des library de façon à pouvoir compiler à la fois en 64 bits et à la fois en 32 bits dans le but de garder une certaine cohérence dans ce que j'expérimente.
Ayant copié tout mon répertoire personnel sur mon système fraichement installé, je suis revenu voir mes petits shellcodes pour architecture 32 bits et à ma grande surprise il ne fonctionne plus même si les programmes exploités sont compilé en 32 bits et que l'ASLR est desactivé, j'obtiend un beau segfault alors que avant cela fonctionnait.
Pourtant le flux d'execution est bien détourné à la bonne adresse mémoire, de plus syslog consigne bien une trace du segfault qui me confirme que le pointeur d'instruction est redirigé au bon endroit.
Le point commun de mes programmes vulnérable de test est que j'utilisé la stack pour executer mon shellcode.
J'ai donc cherché sur le net des réponses à ce problème et j'ai trouvé ceci :
Code : Tout sélectionner
L'arrivée des architectures 64-bits a également changé la donne. En premier lieu, la protection des
permissions des pages ont été inclues au niveau matériel. Ainsi, la pile est non-exécutable par défaut.
J'ai donc émit l'hypothése que même si le programme est compilé et exécuté en 32 bits alors il bénéficie quand même de la protection des pages mémoire au niveau matérielle de l'architecture 64 bits, ce qui rend la pile non executable même pour un programme 32 bits classique.
Par conséquend tout les shellcodes injecté sur la pile d'un programme 32bits mais exécuté sur une architecture 64 bits qui fonctionnait avant ne fonctionne plus.
Je postais ce sujet juste pour savoir si cette hypothése est juste.
Dans l'autre cas de figure, peut-être que c'est le compilateur qui à définit le segment de pile comme non executable.
Dans le doute voici mes options de compilations, je n'ai pas encore touvé si c'est sa qui empêche l'execution de mes shellcodes:
Code : Tout sélectionner
$gcc -v
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configuré avec: /build/src/gcc-4.7.2/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --enable-libstdcxx-time --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable-cloog-backend=isl --disable-ppl-version-check --disable-cloog-version-check --enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin-ld=ld.gold --with-linker-hash-style=gnu --enable-multilib --disable-libssp --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-checking=release
Modèle de thread: posix
gcc version 4.7.2 (GCC)
Merci d'avance pour votre aide.