Web Shell
Crear una webshell:
En primer lugar, necesitamos escribir nuestro web shell que procesará nuestro comando mediante una solicitud por GET
, lo ejecutará e imprimirá su salida. Un script de web shell suele ser de una sola línea, muy corto y fácil de memorizar. A continuación, se presentan algunos scripts de web shell cortos comunes para lenguajes web comunes:
PHP:
JSP:
ASP:
Subir una webshell:
Una vez que tengamos nuestro shell web, debemos colocar nuestro script en el directorio web del host remoto (webroot) para ejecutarlo a través del navegador web. Esto podría deberse a una vulnerabilidad en la función de carga, que nos permitiría escribir uno de nuestros shells en un archivo (es decir shell.php
, subirlo) y luego acceder al archivo subido para ejecutar comandos.
Sin embargo, si solo disponemos de ejecución remota de comandos mediante un exploit, podemos escribir nuestro shell directamente en la raíz web para acceder a ella a través de la web. Por lo tanto, el primer paso es identificar la raíz web. A continuación, se muestran las raíces web predeterminadas para servidores web comunes:
Servidor web
Webroot predeterminado
Apache
/var/www/html/
Nginx
/usr/local/nginx/html/
IIS
c:\inetpub\wwwroot\
XAMPP
C:\xampp\htdocs\
Podemos revisar estos directorios para ver qué directorio raíz web se está utilizando y luego usar echo
para escribir nuestra webshell Por ejemplo, si atacamos un host Linux con Apache, podemos escribir un PHP
shell con el siguiente comando:
Acceder a la webshell
Una vez que escribimos nuestro shell web, podemos acceder a él mediante un navegador o usando crl
. Podemos visitar la página shell.php
del sitio web comprometido y usar ?cmd=id
para ejecutar el id
comando:
Como podemos ver, podemos seguir modificando el comando para obtener su salida. Una gran ventaja de un shell web es que evita cualquier restricción de firewall, ya que no abre una nueva conexión en un puerto, sino que se ejecuta en el puerto web 80
o 443
en el puerto que usa la aplicación web. Otra gran ventaja es que, si se reinicia el host comprometido, el shell web seguirá funcionando y podremos acceder a él y ejecutar comandos sin volver a explotar el host remoto.
Por otro lado, una shell web no es tan interactiva como las shells inversas y enlazadas, ya que debemos solicitar constantemente una URL diferente para ejecutar nuestros comandos. Aun así, en casos extremos, es posible programar un Python
script para automatizar este proceso y obtener una shell web semiinteractiva directamente en nuestra terminal.
Last updated