Está bastante bien explicado en esta publicación de blog cómo funciona. En esencia, si puede construir una consulta de URL para dividir partes individuales de una consulta SQL subsiguiente en más parámetros de consulta (por lo tanto, la parte fragmentación de su nombre), WAF (Web Application Firewall) puede tener problemas para determinar que se debe eliminar la solicitud, o lo que sea que esté configurado para hacer cuando se detecte tal intento.
Una forma de explotar esto es mediante la adición de un begin comment /*
al final de un parámetro de entrada, y end comment */
al comienzo de el siguiente. WAF considerará los dos parámetros como aceptables, si no se analiza la imagen completa (la sintaxis SQL aparece como el producto de todos los parámetros de entrada).
Esto podría dar como resultado que una parte del código SQL entre los dos parámetros de entrada sea ignorada por el motor SQL de RDBMS. Si la parte ignorada (comentada) pasa a estar filtrando los resultados de la consulta SQL (por ejemplo, ... WHERE user=$param1 and start_date>=$param2...
puede dar como resultado ... WHERE user=$param1/* and start_date>=*/$param2...
, proporcionando un vector para explotar los posibles valores de $ param1 que WAF considerará aceptables y también ignorará otros filtros Hasta el punto en que se usa el valor $ param2), el producto final de tal vulnerabilidad puede revelar información que los desarrolladores nunca intentaron revelar.
ataques de HPP , por otro lado, están tratando de aprovechar las diferencias entre la interpretación de los parámetros de entrada por WAF y la aplicación web de manejo de solicitudes, cuando se repite un solo nombre de parámetro muchas veces. Por ejemplo, consideremos que esta consulta de URL se analiza y analiza mediante: ?q=acceptable+request&q=not+acceptable+request
. WAF puede tomar el primer parámetro de entrada como el que analiza e ignorar el siguiente, mientras que la aplicación web puede hacer exactamente lo contrario.
Tenga en cuenta que solo uso URL como ejemplo, y los parámetros de entrada se pueden solicitar en cualquier otra parte de los encabezados de una solicitud HTTP (cookies, campos de solicitud POST o GET, ...) , dependiendo de dónde sean analizados posteriormente por la aplicación web.