영웅 배경, 구분선 없음
가이드라인

Inyección 101

Una de las clases de vulnerabilidades más conocidas suelen ser las vulnerabilidades de inyección, especialmente, y no sorprende a nadie, la indiscutible hija del póster: la inyección SQL. Es difícil evitar oír hablar de la inyección de SQL en el mundo de la tecnología, así que vamos a hablar de ello.

Con SQL Injection, es posible manipular el comportamiento de una consulta SQL para que cumpla las órdenes de un atacante.

También hay muchos otros tipos de inyección que, si bien son diferentes en su superficie, funcionan según el mismo principio.

En resumen, algunos de los tipos de inyección más comunes son:

  • Inyección SQL
  • Secuencias de comandos entre sitios (HTML/Javascript injection)
  • Ruta transversal (inyección de ruta/URL)
  • Inyección de comandos
  • Inyección de código

A small injection 101

Si nos fijamos en la lista anterior de tipos de inyección, todos tienen una cosa en común: todos implican una cadena, que se ejecuta a través de un intérprete, que luego hace lo que representa la cadena. Hemos marcado la «entrada del usuario» entre corchetes.

유형 입력 예시 해석 방법
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' 값으로 설정합니다.

Entonces, ¿qué pasaría si la inserción de la entrada del usuario fuera insegura? ¿Qué podría hacer un atacante? Una vez más, todo lo que esté entre corchetes se considera «entrada del usuario» en este escenario.

유형 입력 예시 해석 방법
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`를 실행합니다.

En estos ejemplos, toma nota de cómo se puede usar la entrada para influir en el resultado de la entrada del usuario.

Esta es la esencia de lo que es la inyección. Influye en lo que se pasa al intérprete para que haga algo diferente a lo que pretendía el programador original.

Estos son solo los aspectos básicos a tener en cuenta. Hemos separado algunos de los diferentes tipos de inyección en sus propias páginas porque merecen un poco más de atención.

Puedes encontrarlos aquí:

Inyección de comandos

Recorrido de caminos

Inyección SQL

Secuencias de comandos entre sitios