Recientemente me he
topado con el proyecto
pyrasite
el cual está pensado para poder inyectar nuestro propio código
python en cualquier proceso en python que se esté corriendo en el
sistema.
Obviamente, tal y como
veremos un poco más adelante, esto tiene sus propias limitaciones.
Lo primero que haremos
será realizar la instalación de todo lo necesario para ejecutar
pyrasite y sus módulos
Instalamos pyrasite:
root@ph0b0s:~# easy_install pyrasite
Instalamos
meliae (para poder utilizar los módulos de dumpeo de procesos):
root@ph0b0s:~# apt-get install python-meliae
Ahora necesitaremos un
proceso en python para hacer de víctima, he estado probando
distintos scripts que utilizo para diversas cosas y funciona bien,
pero para no complicarlo, voy a utilizar ahora un ejemplo de código
muy sencillo:.
#!/usr/bin/env python
import re
import time
import urllib2
import sys
if __name__ == '__main__':
while 1:
print "En nuestro bucle..."
time.sleep(10)
Ahora, dejamos corriendo el programa: z0mbiehunt3r@ph0b0s:~/workspace/pyrasite-test/src$ ./pyrasite-test.py
|
Proceso de prueba corriendo
Ahora, necesitamos saber el PID del proceso:
z0mbiehunt3r@ph0b0s:~/workspace/twitter-follow/src$ ps a | grep pyrasite-test
15447 pts/0 S+ 0:00 python ./pyrasite-test.py clear
Una vez que sabemos el PID del proceso podemos proceder a intentar inyectar código en el mismo (nótese que, para evitar problemas de rutas y hacerlo lo más fácil posible, he cambiado de path)
z0mbiehunt3r@ph0b0s:/usr/local/lib/python2.6/dist-packages/pyrasite-1.0-py2.6.egg$ pyrasite 15447 payloads/helloworld.py
Si lo hacemos así, nos dará el siguiente error:
Error de ptrace
Si nos dirigimos a dicho fichero veremos lo siguiente:
# A PTRACE scope of "0" is the more permissive mode. A scope of "1" limits
# PTRACE only to direct child processes
kernel.yama.ptrace_scope = 1
Por lo que, para que pueda hacerse correctamente, tenemos dos opciones, cambiar dicha variable o utilizar el comando sudo para lanzar la inyección de código. En mi caso, voy a hacerlo de la última manera: z0mbiehunt3r@ph0b0s:/usr/local/lib/python2.6/dist-packages/pyrasite-1.0-py2.6.egg$ sudo pyrasite 15447 payloads/helloworld.py
Ahora, si nos vamos a la pantalla del script de prueba, veremos lo siguiente:
Código python inyectado en el proceso
Gracias a pyrasite, podemos inyectar el código que nosotros queramos. Con el propio proyecto se incluyen diversos payloads, para listar módulos, para dumpear la memoria del proceso (y buscar información útil), para forzar el recolector de basuras y, algo bastante graciosillo, para obtener una shell inversa, tal y como vemos en la siguiente imagen:
Shell inversa obtenida mediante inyección de código
Bueno, espero que os haya resultado interesante y que probéis cosillas que se os ocurran, estaré encantado de leerlo si alguien me deja algún comentario.
Un saludo y hasta la próxima!
|
No hay comentarios:
Publicar un comentario