Directives

Les injections : les bases

Les vulnérabilités par injection comptent parmi les plus connues, et sans surprise, l'exemple incontournable reste l'injection SQL. Difficile d'échapper au sujet dans le monde de la tech, alors autant en parler directement.

Avec l'injection SQL, il est possible de manipuler le comportement d'une requête SQL pour qu'elle exécute les commandes d'un attaquant.

Il existe de nombreux autres types d'injections qui, bien qu'apparemment différents, reposent tous sur le même principe.

Pour rappel, voici quelques-uns des types d'injections les plus courants :

  • Injection SQL
  • Cross-Site Scripting (injection HTML/Javascript)
  • Path Traversal (injection de chemin/URL)
  • Injection de commandes
  • Injection de code

Bases de l'injection

Si vous examinez la liste précédente, tous ces types d'injections ont un point commun : ils impliquent une chaîne de caractères traitée par un interpréteur, qui exécute ensuite ce que cette chaîne représente. Nous avons indiqué les « entrées utilisateur » entre accolades.

Type Example input How it’s interpreted
SQL SELECT name FROM users WHERE username = '{admin}' Selects the "Name" column from all rows from the users table where the username is 'admin'
HTML {John Smith} Shows the name "John Smith" in bold letters
Path /var/www/app/documents/{privacy-policy.pdf} Points at the file `privacy-policy.pdf` in the `/var/www/app/documents/` folder
Command ping {8.8.8.8} Sends a series of ICMP pings to the IP `8.8.8.8`
Code const name = '{John Smith}'; Sets the constant variable `name` to the value `John Smith

Alors, que se passerait-il si l'insertion des données utilisateur n'était pas sécurisée ? Que pourrait faire un attaquant ? Encore une fois, tout ce qui se trouve entre accolades est considéré comme une « entrée utilisateur » dans ce scénario.

Type Example input How it’s interpreted
SQL - Injected SELECT name FROM users WHERE username = '{1' UNION SELECT passwordhash from users WHERE username = 'admin}' Selects the "Name" from all rows from the users table where the username is 'admin', and the password hash for the users where the username is 'admin'
HTML - Injected {} Show the name "John Smith" in bold letters
Path - Injected /var/www/app/documents/{../../../../../etc/shadow} Points at the file `shadow` in the `/etc/` folder
Command - Injected ping {8.8.8.8 && ls . } Sends a series of ICMP pings to the IP `8.8.8.8`, and prints the contents of the current directory with `ls`
Code - Injected const name = '{John Smith'; exec('ls .'); # }'; Sets the constant variable `name` to the value `John Smith`, and then executes the system command `ls .

Dans ces exemples, observez comment l'entrée peut être utilisée pour influencer le résultat final.

C'est là toute l'essence de l'injection : influencer ce qui est transmis à l'interpréteur afin de lui faire exécuter une action différente de celle prévue par le développeur.

Ce ne sont là que les bases. Nous avons consacré des pages spécifiques à certains types d'injections, car ils méritent une attention particulière.

Vous pouvez les trouver ici :

Injection de commandes‍

Path traversal‍

Injection SQL‍

Cross-Site Scripting

Slogan

Le codage sécurisé en pratique

Explorez nos directives de développement sécurisé pour comprendre et atténuer les vulnérabilités logicielles telles que l'OWASP Top 10, et plongez dans des missions de formation guidées pour vous exercer sur des simulations d'applications réelles.

Autres directives
Réserver une démo