Je me suis mis à suivre le livre "Techniques de hacking" de Jon Erickson, et je rencontre quelques problèmes pour exécuter correctement les exemples de shellcode (en tout cas le premier du livre) en Chroot d'un 32-bit sur un système 64-bit avec linux-4.16.6 (version actuelle).
Pour des raisons de petite configuration, j'ai préféré chrooter l'iso fournis avec le livre.
Avec le même binaire compilé avec le compilateur de l'iso dans l'environnement chroot, quand je lance l’exécution de l'exploit dans l'environnement chroot, rien ne se passe.
Alors que quand je lance l'image de l'iso via qemu, j'arrive à faire exécuter le shellcode.
Les 2 seules différences d’environnement que je voie sont le kernel et l’environnement chroot.
Donc j'aimerais savoir:
- Quelles sont toutes les modifications significatives apportées au kernel depuis la version 2.6.12 pour contrer les shellcode? Comment les désactivés temporairement? [J'ai déjà trouvé sudo sysctl -w kernel.randomize_va_space=2]
- Est-ce qu'un Chroot d'une image i686 sur un système x86_64 peut avoir un impact sur le fonctionnement d'un shellcode? Comment le solutionner?
Code : Tout sélectionner
wget http://examples.oreilly.com/9781593271442/hacking-live-1.0.iso
gpasswd -a distag kvm
qemu-img create qemu.raw 1500M
qemu-system-x86_64 -k fr -m 2048 -drive file=qemu.raw,format=raw -boot d -cdrom hacking-live-1.0.iso -net nic -net user -no-acpi #installation du ubuntu sur l'image et création d'un user 'reader'
sudo sysctl -w kernel.randomize_va_space=0 #pour désactiver temporairement une protection depuis linux 2.6.12 contre le shellcode
sudo mount -o loop,offset=$((63*512)) qemu.raw /mnt
sudo mount -t proc /proc /mnt/proc/
sudo mount --bind /sys /mnt/sys/
sudo mount --bind /dev /mnt/dev/
sudo cp /etc/resolv.conf /mnt/etc/
sudo chroot /mnt /bin/bash
su reader
cd ~/booksrc
gcc -o notesearch notesearch.c
sudo chown root:root ./notesearch
sudo chmod u+s ./notesearch
gcc exploit_notesearch.c
for i in `seq 0 30 300`; do echo Trying offset $i; ./a.out $i; done
#ici cela ne marche pas
exit
exit
sudo umount --detach-loop --recursive /mnt/
sudo sysctl -w kernel.randomize_va_space=2
qemu-system-x86_64 -k fr -m 2048 -drive file=qemu.raw,format=raw -boot d -net nic -net user -no-acpi #on se log avec reader
cd ~/booksrc
for i in `seq 0 30 300`; do echo Trying offset $i; ./a.out $i; done
#et là cela marche, pourquoi?