El mundo de las
shells inversas o de tipo
bind es un amplio mundo. En todo
pentesting es necesario utilizar, casi de manera constante, diferentes tipos de
shells, ya que no solo del
Meterpreter de
Metasploit vive el
pentester en un
Ehtical Hacking. Es importante disponer en la mochila del
pentester de una herramienta que permita obtener y generar una
shell en un momento determinado. Sin duda, una de las herramientas importantes en este ámbito es
msfvenom de
Metasploit o, incluso, desde el propio
msfconsole.
![]() |
Figura 1: ShellPop: Generación de Shells POP "like a master" |
Hoy quería hablaros de una herramienta que también proporciona otro punto de vista y otra forma de lograr generar
shells en un momento determinado, bajo las circunstancias que tengamos. La herramienta se llama
ShellPop y se puede obtener en
su repositorio de Github.
Para llevar a cabo la instalación de
ShellPop se debe descargar desde
Github, por ejemplo, con la ejecución del comando
git clone. Después, se deben instalar las dependencias de
Python, ya que la herramienta está escrita en
Python. En primer lugar, se ejecuta la siguiente instrucción apt-get install
python-argcomplete –y. Posteriormente, se instalan las dependencias que vienen especificadas en el fichero
requirements.txt. Esta operativa se realiza de la siguiente manera:
pip install –r requierements.txt.
Una vez tenemos todo preparado y con las dependencias resueltas, debemos instalar la aplicación. Para ello, se utiliza la instrucción
python setup.py install. De esta manera dispondremos del comando desde la consola en cualquier instante.
La ayuda que proporciona la herramienta es buena. Si ejecutamos
shellpop –h obtenemos un listado de todo lo que podemos hacer con la herramienta. Vemos que la herramienta tiene una serie de opciones con las que podemos ‘
settear’ el
host y el puerto dónde la shell realizará acción, dependiendo de su naturaleza:
reverse o
bind.
Además, podemos ver en la ayuda una categoría de tipos de shell, de opciones de
encoders e, incluso, opciones de
stager, lo cual hace que sea flexible la configuración de las shell. Además, la herramienta proporciona una categoría propia para generar
shells para Powershell.
![]() |
Figura 4: Ayuda de ShellPop |
Para obtener el listado de shells disponibles y el tipo de conexión de éstas, podemos ejecutar
shellpop–list. Como se puede ver en la siguiente imagen tenemos shells de tipo
bind y de tipo
reverse. El
ID que aparece al lado de la
shell es importante, ya que después lo tendremos que indicar si queremos utilizar dicha
shell.
![]() |
Figura 5: Lista de shells |
Lo interesante es ver el número de lenguajes distintos en los que disponemos una shell. Lenguajes como
Perl,
Python,
Ruby o
PHP proporcionan una base fuerte e interesante, debido a que podemos ejecutar una
shell en diferentes plataformas, indiferentemente del sistema y jugando con más con la tecnología y con el lenguaje.
Una opción interesante que proporciona la herramienta es la opción
–clip, el cual permite generar la
shell y copiarla al portapapeles. Es una opción interesante cuando se quiere llevar el resultado de la ejecución de la herramienta a una herramienta o
script propio.
Para mostrar un ejemplo, en mi querido
Ruby, ejecutamos la siguiente instrucción
shellpop –reverse –number 4 –host [dirección] –port 4444 –handler. Con la opción
–reverse indicamos que la
shell será inversa y no de tipo
bind. La opción
–number nos permite indicar, según el índice del listado, la
shell que queremos generar. La opción
–host nos permite indicar la dirección dónde la
shell se atará, en caso de ser de tipo bind o dónde la shell realizará la petición de conexión en caso de ser inversa. Respecto a la opción –port indicamos el puerto sobre el que trabajará la
shell. Por último, la opción
–handler configura el handler para recibir las conexiones o generarlas, de nuevo en función de si es
reverse o
bind.
![]() |
Figura 6: Apertura de handler |
El
handler arranca y llega la primera conexión, cuando en el target remoto se ejecuta el código. A partir de ahí, disponemos de la posibilidad de interactuar con la
shell y lanzar instrucciones en el
host remoto.
![]() |
Figura 7: Conexión activada |
Como se puede ver, las posibilidades que ofrece
ShellPop son bastante amplias. Me recuerda a una herramienta de la que ya hablamos aquí llamada
ZeroDoor de OWASP, con la que se podía crear diferentes
shellcodes para diferentes plataformas. Otra herramienta que hay que tener en la mochila del
pentester.