¡Hola a todos! nuevamente tras mucho tiempo desaparecido dadas algunas aventuras en el lado obscuro de la seguridad informática (así es... estuve trabajando en el lado administrativo de Seguridad de la información), me encuentro de regreso en un equipo de red team, por lo que espero ahora sí sea más constante el publicar tips, ejercicios o situaciones interesantes que ameriten una publicación para explicar el paso a paso.
Sin más comerciales iniciemos, no sin antes comentar que está publicación es totalmente con fines educativos, buscando adentrar a más personas al hermoso mundo del Pentest ético, no me hago responsable del mal uso del conocimiento adquirido:
Las inyecciones SQL continuan siendo una de las vulnerabilidades más comunes hoy en día para aplicaciones, por lo que se amerita documentar una serie de pasos aplicables para identificar dicha vulnerabilidad en una aplicación Web.
Cuando identificamos dentro de una aplicación que el sistema esta utilizando valores (texto o números) para regresarnos información o mostrarnos mediante indicadores algún producto, post, imagen, etc... es donde la imaginación debe volar...
en este ejercició tendremos un producto que se encuentra asociado a un identificador de la siguiente manera:
https://elsitiomasvulnerabledelmundomundial.com/filtrar?producto=1
Ahora, los siguientes pasos serán:
1) Identificar si el parametro es vulnerable... ¿y cómo es esto?, ¡pues será con las siguientes pruebas!
a) añade una comilla simple al final del identificador del producto, quedando de la siguiente manera 1'
Probablemente recibas un error indicando que la consulta se encuentra mal formada, más no ocurre siempre, por lo que puede que no recibas nada, de ser así, no descartes la vulnerabilidad! puedes tratar intentando lo siguiente...
1--
En este caso, deberás observar el producto presentado en pantalla, tal cual si no tuviese el guión doble (ya que estamos comentando), de lo contrario, las posibilidades de que el parametro sea vulnerable se van reduciendo, dejo más cadenas que te ayudarán a hacer tus pruebas, los casos con operador "AND" son muy útiles, pues en caso de cumplirse o no las condiciones, los resultados mostrados en pantalla o en tu proxy te indicarán si podrás explotar la falla.
-1--
1#
1 # s
1; -- s
1'; -- s
1 AND 1=1--
1 AND 1=2--
En caso de que el valor "1" sea manejado como varchar:
1' AND 1=1--
1' AND 1=2--
1' AND 'A'='A'--
1' AND 'A'='B'--
1' AND 'A=A'--
1' AND 'A'='A
Si te ha sido posible identificar que el comportamiento de la aplicación apunta a un SQL Injection, estás del otro lado! más adelante estaré compartiendo los detalles de explotación para cada manejador de bases de datos!.