Directrices

Inyecciones: conceptos básicos

Una de las clases de vulnerabilidades más conocidas suele ser la de inyección, especialmente, y para sorpresa de nadie, su ejemplo más emblemático: la inyección SQL. Es difícil no oír hablar de la inyección SQL en el mundo tecnológico, así que vamos a tratarla directamente. 

Con la inyección SQL, es posible manipular el comportamiento de una consulta SQL para que haga lo que un atacante desee. 

Existen también muchos otros tipos de inyección que, aunque parezcan diferentes, funcionan bajo el mismo principio. 

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

  • Inyección SQL
  • Cross-Site Scripting (inyección de HTML/Javascript)
  • Path Traversal (inyección de rutas/URL)
  • Inyección de comandos
  • Inyección de código 

Conceptos básicos de inyección

Si observas la lista anterior de tipos de inyección, todos tienen algo en común: implican una cadena de texto que se ejecuta a través de un intérprete, el cual realiza lo que dicha cadena representa. Hemos marcado la "entrada del usuario" entre llaves.     

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

Entonces, ¿qué ocurriría si la inserción de la entrada del usuario no fuera segura? ¿Qué podría hacer un atacante? De nuevo, todo lo que está entre llaves se considera "entrada del usuario" en este escenario.

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 .

En estos ejemplos, observa cómo se puede utilizar la entrada para influir en el resultado a partir de los datos proporcionados por el usuario. 

Esta es la esencia de lo que es la inyección. Consiste en influir en lo que se transmite al intérprete para lograr que haga algo distinto a lo que el programador original pretendía.

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‍

Path traversal‍

Inyección SQL‍

Cross-Site Scripting

Eslogan

Programación segura y práctica

Explore las directrices de programación segura para comprender y mitigar vulnerabilidades de software como el OWASP Top 10, y sumérjase en misiones de formación guiada para practicar en simulaciones de aplicaciones del mundo real.

Más directrices
Reservar una demostración