英雄背景无分隔线
指令

注射 101

L'une des catégories de vulnérabilités les plus connues est généralement celle des vulnérabilités liées à l'injection, en particulier, et cela ne surprend personne, la référence incontestée : SQL Injection. Il est difficile d'éviter d'entendre parler de l'injection SQL dans le monde de la technologie, alors nous allons simplement en parler.

Avec SQL Injection, il est possible de manipuler le comportement d'une requête SQL pour répondre aux ordres d'un attaquant.

Il existe également de nombreux autres types d'injection qui, bien que différents à première vue, fonctionnent tous selon le même principe.

Pour récapituler, certains des types d'injection les plus courants sont les suivants :

  • 注入式SQL
  • Scripting intersite (injection HTML/JavaScript)
  • Traversée de chemin (injection de chemin/URL)
  • Injection de commandes
  • Injection de code

Une petite injection 101

Si vous regardez la liste précédente des types d'injection, ils ont tous un point commun : ils impliquent tous une chaîne, qui est exécutée par un interpréteur, qui fait ensuite tout ce que la chaîne représente. Nous avons marqué « saisie utilisateur » par des crochets.

类型 输入示例 如何解释
查询语言 SELECT name FROM users WHERE username = '{admin}' Name 从用户表中用户名为 "admin "的所有行中选择 "姓名 "列
超文本标记语言 {约翰-史密斯} 用粗体字显示 "约翰-史密斯 "的名字
路径 /var/www/app/documents/{privacy-policy.pdf} 指向 `/var/www/app/documents/`文件夹中的文件 `privacy-policy.pdf`。
指挥 ping {8.8.8.8} 向 IP "8.8.8.8 "发送一系列 ICMP ping
代码 const name = '{John Smith}'; 将常量变量 `name` 设置为 `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 crochets est considéré comme une « saisie utilisateur » dans ce scénario.

类型 输入示例 如何解释
SQL - 注入 从用户中 SELECT name WHERE username = '{1' UNION 从用户中 SELECT passwordhash WHERE username = 'admin}' 从用户表中用户名为 "admin "的所有行中选择 "姓名",并从用户名为 "admin "的用户中选择密码哈希值
HTML - 注入 {} 用粗体字显示 "约翰-史密斯 "这个名字
路径 - 注射 /var/www/app/documents/{.../.../.../.../etc/shadow}。 指向 `/etc/` 文件夹中的 `shadow` 文件
命令 - 注入 ping {8.8.8.8 && ls .} 向 IP `8.8.8.8` 发送一系列 ICMP ping,并用 `ls` 打印当前目录的内容
代码 - 注入 const name = '{John Smith'; exec('ls .'); # }'; 将常量变量 `name` 设置为 `John Smith` 的值,然后执行系统命令 `ls .

Dans ces exemples, notez comment l'entrée peut être utilisée pour influencer le résultat de la saisie utilisateur.

C'est l'essence même de ce qu'est l'injection. Cela influence ce qui est transmis à l'interpréteur, afin de lui faire faire autre chose que ce que le programmeur d'origine avait prévu.

Ce ne sont là que les éléments de base à prendre en compte. Nous avons séparé certains des différents types d'injection sur leurs propres pages, car ils méritent un peu plus d'attention.

Vous pouvez les trouver ici :

Injection de commandes

Traversée de chemin

Injection SQL

Scripting intersite