vulnerabilidad de archivo_get_contents PHP

5

Estoy evaluando la seguridad de un portal web para un cliente y encontré una vulnerabilidad.

Este es el código PHP:

echo(file_get_contents("template/data/" $_GET['id']));

Pude leer con éxito ../../../index.php, config.php etc.

Pero solo quiero poder demostrar que este error es más crítico que la lectura de configuraciones. Leí el paso / usuario de MySQL, pero no puedo conectarme a él ya que solo se escucha en localhost. Todos los demás códigos que leí, no condujeron a nada. Básicamente, todo lo que obtuve fue solo un código fuente que no era un secreto.

No puedo hacer cosas de filtro php porque tiene "template / data /" al principio de la cadena.

¿Qué más se puede hacer con este código vulnerable? ¿Alguna idea?

    
pregunta GMX Rider 15.01.2018 - 16:56
fuente

2 respuestas

4

¿La base de datos MySQL está en la misma máquina? Si es así, ¿puede simplemente extraer los archivos de la base de datos y reconstruir la base de datos en su máquina?

Como han dicho otros, puede extraer / etc / passwd que contiene mucha información sobre el diseño del usuario. Si puede acceder a / etc / shadow puede intentar contraseñas de crack sin conexión.

Si la aplicación web tiene un portal de inicio de sesión, intente las credenciales de mysql, así como "admin", "root", etc. con la contraseña.

¿El código fuente o los archivos de configuración contienen otras credenciales de acceso / claves API? ¿Es legible el certificado SSL de los sitios? Si es así, puede usar las conexiones Man In the Middle?

También puede obtener detalles de / proc / version, / etc / issue etc. y las versiones del servidor web para buscar otras vulnerabilidades conocidas.

¿Finalmente se supone que la fuente es pública? Si no es el código fuente a menudo se ve como valioso. Y puedes inspeccionar eso para más vulnerabilidades.

    
respondido por el Hector 15.01.2018 - 17:33
fuente
4

La respuesta de Hector tiene algunos buenos ejemplos, pero me gustaría enfatizar otro punto muy importante:

Esto no es una pequeña vulnerabilidad

Parece que tienes la impresión de que si "todo" lo que puedes hacer es leer archivos arbitrarios en su sistema, la vulnerabilidad no es realmente una vulnerabilidad. Yo diría exactamente lo contrario. Debe darse cuenta de que la mejor manera de abordar la seguridad es desde la perspectiva de la defensa en profundidad. Puede ser virtualmente imposible tener un sistema libre de vulnerabilidades, por lo que el objetivo es tener tantas capas de defensa como sea posible en tantas áreas como sea posible, de modo que si un actor malicioso encuentra una debilidad en un área, las defensas en todo el sistema Evitará que causen cualquier daño real. Muchas brechas en el mundo real ocurren, no porque haya una vulnerabilidad de la que alguien se aprovechó, sino porque hubo una vulnerabilidad que les permitió aprovechar otra vulnerabilidad, que les permitió hacer otra cosa, hasta que encontraron algo realmente peligroso.

Esta pequeña vulnerabilidad está dando a los actores maliciosos acceso de lectura total a su sistema. Esto se complica aún más por el hecho de que se trató de un error de seguridad bastante obvio. Si la empresa en cuestión tenía desarrolladores bien entrenados y estaba haciendo revisiones regulares de código, es (IMO) muy improbable que dicho código llegue a un sistema de producción. El significado de este hecho es que sugiere que esta no será la única vulnerabilidad de seguridad presente. El hecho de que ahora tenga una forma de ver directamente el código fuente del sistema significa que encontrar más vulnerabilidades de seguridad es sustancialmente más fácil. Muy posiblemente juego terminado. Si yo fuera un actor malicioso y encontré esto, me gustaría:

  1. Descargue el código fuente de todo el sistema (puede tardar un día, pero es casi seguro que sea posible)
  2. Busque las vulnerabilidades de SQLi (probablemente hay muchas) y utilícelas para descargar su base de datos completa. Yo diría que hay buenas probabilidades de que no estén usando la contraseña de seguridad adecuada. Sería obvio por su código fuente, lo que significa que si no están protegiendo sus contraseñas de manera adecuada, una vulnerabilidad de SQLi me permitirá:
  3. Brute forzar las contraseñas del administrador. Ahora estoy en tu portal web. ¿Pero adivina que? No he terminado
  4. La mayoría de los usuarios comerciales reutilizan contraseñas todo el tiempo. Así que ahora voy a tomar la contraseña de administrador y ver si puedo iniciar sesión en su propia cuenta de correo electrónico. A partir de ahí, con un poco de suerte, podré ingresar a la administración de su cuenta de alojamiento. O tal vez la nómina o las cuentas bancarias. El cielo es el límite una vez que tengo su contraseña de correo electrónico, especialmente para una cuenta de administrador. Es incluso mejor si el correo electrónico de la empresa está alojado en un proveedor de alojamiento en la nube (office 365 o similar), y la contraseña de administrador que ingresé me dio acceso al proveedor de alojamiento de correo electrónico. Eso me da acceso a todas las direcciones de correo electrónico de la empresa.
  5. Tal vez encontré una vulnerabilidad de SQLi y descargué la base de datos, pero tenían una buena contraseña de seguridad y no podía descifrar nada. Ahora comienzo a buscar vulnerabilidades de XSS en su código fuente. Unos pocos correos electrónicos de ingeniería social fáciles y uso XSS para obtener acceso a una cuenta de administrador en el sistema sin saber su contraseña. ¿Y ahora qué?
  6. Apuesto a que hay áreas del sistema que un administrador puede usar para actualizar el sistema. ¿Tienen un CMS? ¿Tiene capacidades como wordpress, etc., que permiten a los administradores editar plantillas desde el portal web? Porque si es así, lo he usado para instalar una puerta trasera en la máquina para acceder directamente al sistema subyacente. Estaré atascado con los permisos de quienquiera que esté ejecutando el servidor web. Esperemos que el servidor no se esté ejecutando como root. Si nada más, instalaré un bot de minería Monero que no se iniciará durante un par de meses, una puerta trasera bien oculta, y luego comenzaré a gastar su tiempo de CPU y dinero en hacerme dinero. A menos que tengan una copia limpia del sistema fuera del servidor en vivo (muchas empresas pequeñas no lo tienen), nunca me sacarán. Quemarán innumerables cantidades de tiempo y dinero al tratar de eliminar este virus misterioso de su sistema que sigue regresando sin importar la frecuencia con la que empiecen a limpiar.
  7. Mientras estoy en ello, instalaré un código que me enviará automáticamente las direcciones de correo electrónico y las contraseñas de todos los que inicien sesión en el portal web. Vuelva al paso # 4 anterior.
  8. El cielo les ayudará si tienen algo valioso por sí mismo dentro del sistema. ¿Números de seguridad social? ¿Tarjetas de crédito? Si mantienen cualquier información de este tipo para sus empleados o clientes, ahora es mía.

Esto no es un problema de seguridad aislado. Tales cosas nunca existen en la práctica.

    
respondido por el Conor Mancone 15.01.2018 - 20:03
fuente

Lea otras preguntas en las etiquetas