Inyección SQL divertida 2 — MSSQL

En esta ocasión me gustaría relatar paso a paso otra de las inyecciones que mas me han gustado

Se trata de un sitio que me llegó de parte de un colega para testear juntos!

El parametro en donde se hace el ataque sirve para mostrar un documento en PDF y es exactamente con esto que nos guiamos para descubrir cuantas columnas vamos a tener para esta inyección!

Empezamos!

Primero tenemos el link

Con esto estamos viendo que el sitio web funciona correctamente!.. pero como pasa en la mayoría de sitios vulnerables a inyección sql, basta con agregar un ' al final del parametro para ver un error SQL

Error:

Ahora que nos aseguramos que el sitio es vulnerable y conocemos la base de datos a la que nos estamos enfrentando, que en este caso es MSSQL, vamos a detectar el numero de columnas, para esto vamos a utilizar la función ORDER BY.

Detectando numero de columnas

Utilizando la función ya mencionada hacemos un primer testeo para verificar si el sitio nos permite usar este método de detección de columnas.

lo primero que vemos es que al utilizar order by 1 el sitio sigue funcionando de manera normal pero al tener order by 100 todo cae y nos muestra el error, esto es un muy buen camino, significa que podremos usar este método para detectar, ejemplos:

Como mencionamos anteriormente al tener order by 1 el sitio sigue funcionando correctamente

Pero al tener order by 100 nos muestra el error.

Para encontrar correctamente el numero de columnas tenemos que acercarnos al valor mas cerca antes de que nos muestre el error, Esto lo explico mas a detalle en mis escritos acerca de inyecciones sql manuales, si no los has leído te recomiendo que los revises por que te pueden servir para entender mejor esta parte.

Ejemplo:

Esto significa que el sitio tiene 3 columnas.

Regresando al sitio vulnerable, éste tiene 47 columnas

Como podemos ver, al agregar un union select con las 47 columnas nos cambia el mensaje del error y lo mas interesante es que nos aparecen 2 números que están dentro del circulo rojo.

Estos números son las columnas vulnerables, y es en ellos en donde vamos a introducir las sentencias para mostrar la información de la base de datos!

Como podemos observar, la columna numero 25 nos permite escribir y recibir datos de la base de datos y con esa columna trabajaremos!

Version

Ahora tenemos la version de la base de datos!

Database

Ahora, Para sacar el nombre de la base de datos estoy usando:

Ya que la sintaxis de la función vulnerable de la base de datos no me permite reflejar mas de un valor, ni concatenando.

Como resultado me da que el nombre de la base de datos es “ADPR”.

@@Servername

Para conocer este valor solo utilizamos el siguiente payload

Enumerano Tablas

Para enumerar las tablas fue un poco complicado encontrar un payload ya que, como mencioné antes, esta base de datos no me permite mostrar mas de un resultado al mismo tiempo, con este payload:

Estamos utilizando “top 1” para enumerar esa tabla, en este caso el numero 1 representa la tabla numero 1 en esa base de datos.

en este caso. la tabla se llama “_CDLA_Partidos”

Enumerando Columnas

Para esto usamos una variante del payload anterior, pero ahora nos estamos enfocando en enumerar las columnas de esa Tabla.

Siguiendo la misma logica, al cambiar el numero de “top” nos muestra la siguiente columna.

El nombre de la primer columna se llama “Prtd_IDPartidos”

NOTA: Dejaré esta inyección hasta aquí y no mostraré tanta información, ya que no quiero comprometer el sitio. El nombre de las tablas y columnas dicen mucho…

MSSQL SQL INJECTION CHEAT-CHEET

Hola, Bienvenido a mi perfil de Medium! Soy Y000! 😊 ¿Quién soy? 🤔 Bueno… soy yo jaja soy solo un apasionado por la seguridad informatica.

Hola, Bienvenido a mi perfil de Medium! Soy Y000! 😊 ¿Quién soy? 🤔 Bueno… soy yo jaja soy solo un apasionado por la seguridad informatica.