Una web shell es un script escrito en un lenguaje soportado por un servidor web comprometido que ejecuta comandos a través del propio servidor. Suele ser un archivo que contiene código que ejecuta comandos y controla archivos.
Pueden ser escritas en diferentes lenguajes soportados por servidores web, como PHP, ASP, JSP o CGI.
Ejemplo de Web Shell PHP
Veamos un ejemplo de una web shell en PHP para entender cómo funciona este proceso:
<?php if (isset($_GET['cmd'])) { system($_GET['cmd']); } ?>
La shell de arriba puede guardarse en un archivo con extensión php, como shell.php, y luego subida a un servidor por el atacante para explotar vulnerabilidades como Unrestricted File Upload, File Inclusion, Command Injection y otras.
Después de desplegar la webshell en el servidor puede ser accedida a través de la URL. Según el ejemplo de arriba, tendríamos que realizar una petición GET con el parámetro "cmd". Si la página fuera http://victim.com/uploads/shell.php:
http://victim.com/uploads/shell.php?cmd=whoami
Esto ejecutará el comando whoami en el servidor y devolverá el resultado a través del navegador.
Web Shells Existentes Disponibles Online
El poder de los lenguajes soportados por los servidores web puede resultar en web shells con varias funcionalidades y evitar la detección a la vez. Veamos algunas de las más populares:
- p0wny-shell: Una web shell de un solo archivo PHP minimalista que permite RCE.

- b374k shell: Una web shell PHP más rica en funcionalidades con manejo de archivos y ejecución de comandos, entre otras funcionalidades.

- c99 shell: Una web shell robusta y bien conocida con funcionalidades extensas.

Si quieres encontrar más web shells: https://www.r57shell.net/index.php
