Client-Side / API / JSON / GraphQL

Estos no son nuevos tipos teóricos de SQLi, sino contextos de entrada modernos donde puede darse la inyección: cuerpos JSON en APIs REST, argumentos en GraphQL, parámetros en requests AJAX o valores manipulados en el cliente antes de enviarlos al servidor. En estos contextos la inyección funciona igual (inyección SQL en banda, inyección SQL ciega u inyección SQL fuera de banda) pero cambia el vector y la sintaxis: los payloads deben insertarse en JSON, variables GraphQL, cabeceras o datos multipart. Es imprescindible auditar APIs, endpoints JSON, resolvers GraphQL y la lógica cliente/servidor, porque las aplicaciones modernas a menudo exponen superficies que no aparecen en páginas HTML tradicionales.

Estos distintos formatos pueden ofrecer diferentes maneras de ofuscar ataques que, de otro modo, quedarían bloqueados por los WAF y otros mecanismos de defensa. Las implementaciones débiles suelen buscar palabras clave comunes de inyección SQL en la solicitud, por lo que es posible eludir estos filtros codificando o escapando los caracteres de las palabras clave prohibidas. Por ejemplo, la siguiente inyección SQL basada en XML utiliza una secuencia de escape XML para codificar el carácter S en SELECT:

1
2
3
4
<stockCheck>
    <productId>123</productId>
    <storeId>999 &#x53;ELECT * FROM information_schema.tables</storeId>
</stockCheck>

Esto se decodificará en el servidor antes de pasarse al intérprete de SQL.