영웅 배경, 구분선 없음
지침

주입 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 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.

유형 입력 예시 해석 방법
SQL SELECT name FROM users WHERE username = '{admin}' 사용자 테이블의 모든 행에서 사용자 이름이 'admin'인 '이름' 열을 선택합니다.
HTML {존 스미스} "John Smith"라는 이름을 굵은 글씨로 표시합니다.
경로 /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 핑을 보냅니다.
코드 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 FROM users WHERE username = '{1' UNION SELECT passwordhash from users WHERE username = 'admin}' 사용자 테이블의 모든 행에서 사용자 아이디가 'admin'인 사용자의 '이름'과 사용자 아이디가 'admin'인 사용자의 비밀번호 해시를 선택합니다.
HTML - 삽입됨 {} "John Smith"라는 이름을 굵은 글씨로 표시합니다.
경로 - 주입됨 /var/www/app/documents/{../../../../../etc/shadow} etc/` 폴더의 `shadow` 파일을 가리킵니다.
명령 - 주입 ping {8.8.8.8 && ls . } IP `8.8.8.8`로 일련의 ICMP 핑을 보내고, 현재 디렉토리의 내용을 `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