¿Es posible la inyección de código en algún idioma compilado o interpretado?

0

Me pregunto si es posible realizar una inyección de código en lenguajes compilados o interpretados. ¿Hay algún tipo de vector de ataque en esta área?

La "inyección de código" de Whit me refiero a proporcionar un fragmento de código como entrada que se ejecutará junto con el código del programa, similar a la inyección SQL.

    
pregunta Sig Touri 15.12.2016 - 13:34
fuente

4 respuestas

5

Sí, esto es una cosa real. Pero al igual que con SQLi, no solo puede explotar cualquier programa, sino que uno mal escrito con insuficiente saneamiento de entrada podría ser vulnerable.

Veamos primero los lenguajes interpretados. Para que la inyección de código sea posible aquí, necesitas tener algo que tome el código en una cadena y lo ejecute.

En JavaScript tiene la función eval() que sí lo hace ese. Así que si haces eval(untrustedData) tienes una vulnerabilidad. Por este motivo, eval() se considera "malvado" y, a menudo, se encuentra aquí la recomendación de no usarlo en absoluto. También hay más casos de sublte que permiten la ejecución de código desde una cadena, como new Function() y setInterval() .

En PHP también tiene una función eval() , considerada tan peligrosa que el manual incluye una advertencia:

  

Precaución: La construcción eval() language es muy peligrosa porque permite la ejecución de código PHP arbitrario. Por lo tanto, se desaconseja su uso. Si ha verificado cuidadosamente que no hay otra opción que usar este constructo, preste especial atención a no pasarle ningún dato proporcionado por el usuario sin validándolo correctamente de antemano.

Entonces, ¿qué hay de los lenguajes compilados? Son menos vulnerables porque no tienen funciones que ejecuten código arbitrario, ya que ese código tendría que compilarse primero. Por supuesto, usted podría escribir un programa que genere código fuente (a partir de datos no confiables), lo compile y lo ejecute. Pero eso sería algo bastante extraño de hacer.

Podría argumentar, como hace iain , que explotar los desbordamientos de búfer es una forma de inyección de código, ya que Se está inyectando código de máquina en el programa. Supongo que todo se reduce a la semántica, si cuentas eso o no.

    
respondido por el Anders 15.12.2016 - 14:11
fuente
2

Hay otro ejemplo de un tipo de inyección de código muy sofisticado y extremadamente sutil: la vasta área de vulnerabilidades de deserialización de Java. Siempre que deserialice objetos Java no confiables serializados en su código, corre el riesgo de ejecutar el código de la elección de un atacante. Muchos motores J2EE son vulnerables. Si no puede cerrar el servicio que acepta objetos serializados como entrada, puede ser muy difícil corregir la vulnerabilidad.

Algunos enlaces:

respondido por el kaidentity 16.12.2016 - 14:01
fuente
0

La inyección de código es básicamente un problema de filtrado de entrada. Si ejecuta código basado en una fuente que depende del usuario y no prueba la validez de entrada, es vulnerable a la inyección de código, independientemente del tipo de idioma que esté utilizando.

    
respondido por el M'vy 15.12.2016 - 13:57
fuente
0

Los desbordamientos de búfer pueden considerarse un vector de ataque en esta área, pueden llevar a la ejecución de código arbitrario. Ver este post en Desbordamiento de pila: Desbordamientos de búfer

    
respondido por el iainpb 15.12.2016 - 13:55
fuente

Lea otras preguntas en las etiquetas