¿Ejecutando XSS en la página .jsp escapando de la cadena y con el código de bytes en bruto?

1

Suponga que una página java (.jsp) toma una entrada from como una cadena, el servidor no hace nada para sanearla y luego la devuelve al usuario.

  1. ¿Cómo podría un atacante escapar de la cadena para ejecutar comandos arbitrarios? Obviamente, podrían lanzar JavaScript y ejecutar el script en la otra página, pero ¿cómo podrían escapar de la cadena y ejecutar el código del lado del servidor?

  2. Dado que Java solo se compila a bytecode, ¿es posible inyectar el bytecode directamente en un escenario como este?

pregunta Verbal Kint 17.08.2016 - 20:21
fuente

1 respuesta

2
  

cómo podrían escapar de la cadena y ejecutar el código del lado del servidor

La única forma en que un atacante podría hacer que una cadena se ejecute en el lado del servidor es si el servidor interpreta el código de la cadena . Si el servidor solo devuelve la cadena al cliente, entonces el código no puede ejecutarse en el lado del servidor. (pero, mientras permanezca, aún puede ser un vector de ataque XSS)

Las siguientes situaciones son los casos más comunes en los que una cadena proporcionada por el usuario podría interpretarse accidentalmente como código y, por lo tanto, ejecutarse en el servidor.

    Las vulnerabilidades
  1. Inyección SQL son las más comunes. En muchos casos, Java produce una cadena SQL, que, cuando se combina con una entrada no saneada o con escaso escape, podría permitir al atacante ejecutar comandos SQL arbitrarios . En la mayoría de los casos, esto se limita a acceder, actualizar o eliminar los datos a los que tiene acceso el usuario de SQL, pero en ciertas situaciones se podría usar un ataque de SQLi para obtener un mayor acceso al sistema.

  2. Un mecanismo de carga de archivos mal diseñado podría usar Path Traversal para colocar un archivo ejecutable en el servidor, ya sea para ejecución automática a través de cron, o en el docroot para la ejecución a través de solicitud HTTP. (una función de descarga de archivos también podría ser vulnerable a la ruta)

  3. Las vulnerabilidades de desbordamiento de búfer son una ocurrencia común en lenguajes de programación de bajo nivel como C o C ++.

    Aquellos que se desarrollen en un lenguaje de alto nivel como Java tienen el lujo de la asignación automática de búferes y no podrán crear una de estas vulnerabilidades en la mayoría de las situaciones.

    Sin embargo, a veces, un lenguaje de alto nivel se vincula con un módulo vulnerable. Por ejemplo, una capa de procesamiento de imágenes o de encriptación HTTPS puede escribirse en un lenguaje de bajo nivel para ayudarlo a correr más rápido.

Como siempre, supervise sus paquetes en busca de actualizaciones de seguridad que deban ser instaladas.

  

Dado que java solo compila a bytecode, ¿es posible inyectar bytecode directamente en un escenario como este?

Esto requeriría una vulnerabilidad (artículo 3 arriba) dentro del tiempo de ejecución de Java, pero el efecto deseado puede lograrse con el artículo 2.

    
respondido por el George Bailey 17.08.2016 - 21:00
fuente

Lea otras preguntas en las etiquetas