Boletín molesto. Leer archivos, ejecutar comandos

Probablemente hayas visto muchas veces foros sobre el motor vBulletin. Los foros como tal ya no están de moda, pero vBulletin sigue siendo uno de los motores más populares. En su última (quinta) versión, se encontraron varias vulnerabilidades que pueden arruinar enormemente la vida de un administrador. En este artículo te contaré cómo se utilizan.

El primer problema es el filtrado incorrecto de los datos del usuario. Lo informó un investigador de seguridad independiente que deseaba permanecer en el anonimato. La vulnerabilidad, aunque tiene algunas limitaciones, ha recibido un estado crítico porque permite leer cualquier archivo y ejecutarlo. código arbitrario en el sistema de destino.

La segunda vulnerabilidad fue encontrada por investigadores de TRUEL IT y recibió el identificador CVE-2017-17672. Está relacionado con las funciones de deserialización de datos en el motor y un atacante puede utilizarlo para eliminar archivos arbitrarios en el sistema.

Se han publicado informes completos que detallan ambos problemas como parte del programa Beyond Security de SecuriTeam. También hay exploits PoC para demostrar vulnerabilidades. Repasemos todo esto en orden.

Preparativos

Utilicé la distribución WAMP como servidor.

Leer archivos, ejecutar comandos

Entonces, el motivo de la primera vulnerabilidad es la lógica incorrecta al procesar el parámetro routestring, que permite a un atacante incluir cualquier archivo en el disco mediante include y ejecutar el código PHP que se encuentra en él.

Nuestro camino comienza con el archivo más importante: index.php, donde tiene lugar la inicialización básica de la aplicación.

/index.php
48: $aplicación = vB5_Frontend_Application::init("config.php"); ... 60: $enrutamiento = $aplicación->getRouter(); 61: $método = $enrutamiento->getAction(); 62: $plantilla = $enrutamiento->getTemplate(); 63: $clase = $enrutamiento->getControllerClass();

Veamos el método vB5_Frontend_Application::init.

/incluye/vb5/frontend/application.php
13: la clase vB5_Frontend_Application extiende vB5_ApplicationAbstract 14: ( 15: función estática pública init($configFile) 16: ( 17: parent::init($configFile); 18: 19: self::$instance = new vB5_Frontend_Application(); 20: self::$instancia->enrutador = nuevo vB5_Frontend_Routing(); 21: self::$instancia->enrutador->setRoutes();

Aquí estamos interesados ​​en el método setRoutes.

47: función pública setRoutes() 48: ( 49: $this->processQueryString(); ... 54: if (isset($_GET["routestring"])) 55: ( 56: $ruta = $_GET[" cadena de ruta"];

La variable $path contiene el valor de datos de usuario del parámetro de cadena de ruta. Puede pasarle la ruta a la página del foro y se cargará.



Digamos que pasamos /test .

Después de asignar una variable, hay un fragmento de código que elimina la barra al principio de la línea, si está presente.

/incluye/vb5/frontend/routing.php
75: if (strlen($ruta) AND $ruta(0) == "/") 76: ( 77: $ruta = substr($ruta, 1); // $ruta = "prueba" 78: )
incluye\vb5\frontend\routing.php
83: if (strlen($ruta) > 2) 84: ( 85: $ext = strtolower(substr($ruta, -4)); 86: if (($ext == ".gif") O ($ext == ".png") O ($ext == ".jpg") O ($ext == ".css") 87: O (strtolower(substr($path, -3)) == ".js" )) 88: ( 89: encabezado("HTTP/1.0 404 no encontrado"); 90: morir(""); 91: ) 92: )

Como puede ver, el cheque es bastante extraño. Como mínimo, la presencia de una lista de extensiones prohibidas escritas directamente en el código resulta confusa. Y, en general, el hecho mismo de que la extensión se obtenga cortando cuatro caracteres del final de la línea (línea 85) es desconcertante. Por lo general, si intentamos recibir un archivo con extensión gif, png, jsp, css o js, ​​el servidor devolverá una página 404 y el script dejará de ejecutarse. Cuando se pasan todas las comprobaciones, se llama al método getRoute de la clase vB_Api_Route mediante callApi. Busca rutas adecuadas en función de la información proporcionada por el usuario.

La continuación está disponible sólo para miembros.

Opción 1. Únase a la comunidad del "sitio" para leer todos los materiales del sitio

¡La membresía en la comunidad dentro del período especificado le dará acceso a TODOS los materiales de Hacker, aumentará su descuento acumulativo personal y le permitirá acumular una calificación profesional de Xakep Score!

Cualquier motor requiere ciertas acciones para optimizarlo para mejor y trabajo rapido. En nuestro caso hablaremos de optimizar Vbulletin 4.

Dado que nuestro motor de foro se actualiza constantemente, no escribiré más sobre optimización. versiones anteriores Vbulletin, pero comenzaré con la versión 4.1.12. Aunque es posible, complementaré gradualmente este artículo con optimización para versiones anteriores, ya que no todo el mundo cambia a otros más nuevos.

Aquí daré algunos ejemplos para que tu foro de Vbulletin sea más rápido y mejor (comenzando por las cosas más simples y pasando a las más complejas). Tenga en cuenta que lo que funciona para mí no necesariamente funcionará para usted. Por lo tanto, usted realiza todos los cambios bajo su propia responsabilidad y riesgo.

Deshabilitar la lista de usuarios.

Existe una manera sencilla de desactivar simplemente la función en AdminCP. (Configuración -> Opciones -> Opciones de listado de usuarios)

Esto no es global, por supuesto, y puedes omitirlo y no hacerlo, simplemente pregúntate: ¿lo necesitas? Al tener una lista, los usuarios pueden ordenarla, ver quién tiene más mensajes, reputación, etc. ¿Tus usuarios están usando esto? Probablemente no... ¿cuándo fue la última vez que usaste esta lista?

En lo que a mí respecta, me parece que estas listas solo benefician a los spammers, ya que esta es la forma más fácil de recopilar todos los nombres de los participantes del foro Vbulletin 4 para enviar spam en mensajes privados.

Además, la consulta necesaria para generar una lista de usuarios es terrible para los servidores de bases de datos y puede provocar una gran carga del servidor.

Mayor velocidad al procesar una lista de mensajes personales.

Si nunca ha importado mensajes privados de fuentes externas utilizando Impex u otros medios, puede confiar de forma segura en la clasificación por ID para mensajes privados. La clasificación por ID hará que su servidor de base de datos no tenga que volcar mensajes privados en una tabla temporal para realizar la clasificación (haciendo que la consulta sea mucho más rápida).

Para hacer esto, necesita registrar un pequeño módulo con una ubicación en private_messagelist_filter y escribir lo siguiente en él:

If ($sortfield == "pmtext.dateline") $sortfield = "pm.pmid";

Y eso es todo, acabas de hacer que private.php sea ~20% más rápido.


Configuramos una búsqueda más eficiente de los últimos mensajes del usuario.

Vamos a FTP, buscamos el archivo que incluye /class_userprofile.php y reemplazamos los datos que contiene de la siguiente manera, buscamos:

$getlastposts = $this->registry->db->query_read_slave(" SELECT thread.title, thread.threadid, thread.forumid, thread.postuserid, post.postid, post.dateline FROM " . TABLE_PREFIX . "publicar COMO publicación INNER ÚNETE " . TABLE_PREFIX . "hilo COMO hilo USANDO (threadid) DONDE thread.visible = 1 AND post.userid = " . $this->userinfo["userid"] . " Y post.visible = 1 ORDEN POR post.dateline DESC LÍMITE 20 ");

y reemplácelo con esto (más específicamente ORDENAR POR):

$getlastposts = $this->registry->db->query_read_slave(" SELECT thread.title, thread.threadid, thread.forumid, thread.postuserid, post.postid, post.dateline FROM " . TABLE_PREFIX . "publicar COMO publicación INNER ÚNETE " . TABLE_PREFIX . "hilo COMO hilo USANDO (threadid) DONDE thread.visible = 1 AND post.userid = " . $this->userinfo["userid"] . " Y post.visible = 1 ORDEN POR post.postid DESC LÍMITE 20 ");

Esto hace que la solicitud sea un poco más correcta de lo que ya es. De esta manera no tendrá que ordenar en una tabla temporal. Para usuarios con más de 1000 mensajes, la solicitud inicial tardaría unos 10 segundos, en nuestro caso mucho menos. Esto se aplica principalmente al perfil de usuario de Vbulletin 4 para mostrar publicaciones recientes.

Consultando el índice de temas.

Si sus foros tienen un orden de clasificación predeterminado establecido sin cambios como lo hicimos anteriormente, asegúrese de que todos sus índices estén en sus tablas. Hubo casos en los que los índices se superponían por razones que desconocía y algunos foros no se abrían.

Propongo que la clasificación predeterminada sea en formato de fecha (la columna que usa estos datos se llama "línea de fecha") y, para implementar esto, ejecutamos la consulta:

ALTER TABLE hilo AGREGAR ÍNDICE forumid2_dp (forumid, visible, sticky, dateline)

Esta solicitud se aplica a mí específicamente, en su caso forumid2_dp debería tener su nombre. Úselo bajo su propio riesgo.

Tenga cuidado al instalar complementos.

El hecho de que alguien cree módulos y hacks no significa que estén hechos solo para usted, que hayan trabajado en los grandes foros de Vbulletin 4 y que estén libres de errores. Un excelente ejemplo son los informes de hackeos masivos mediante un hack u otro.

Por supuesto, podemos suponer que los desarrolladores no pueden tenerlo todo en cuenta y eliminar todos los trucos para que no entren en conflicto, pero... Asegúrese de que el módulo Vbulletin no cause cargas pesadas base de datos, asegúrese de que el hack tenga el potencial de proteger contra inyección SQL o XSS. Lamentablemente, existen miles de aplicaciones y modificaciones y simplemente no es posible comprobarlo todo. Será mejor si escribes todos los trucos tú mismo o si los pides a otra persona. Diseñado específicamente para usted y sus tareas.

No utilice tablas en InnoDB.

Aquí, por supuesto, pueden escupirme en la cara, ya que este tema ya ha sido discutido un millón de veces, pero por experiencia propia puedo decir que trabajo 100% en tablas MyISAM para cualquier acción. A veces proceso 1000 solicitudes por segundo.

Si ya está empezando a preocuparse por dónde se bloquea todo durante las consultas, especialmente en la nueva búsqueda de Vbulletin, cambie las tablas de InnoDB a MyISAM. MyISAM responde más rápido a solicitudes individuales porque no es necesario administrar el bloqueo de registros individuales. InnoDB es más rápido en general, pero sólo porque permite que las consultas se ejecuten simultáneamente. Si sus consultas ya se ejecutan rápidamente en MyISAM, no es necesario cambiar a InnoDB. En mi humilde opinión.

Calificación del artículo

0%

Clasificación

Calificación de usuario: 0,35 (1 votos)

Sólo con fines informativos. La administración no es responsable de su contenido.


Descárgalo gratis.

vBulletin Connect v5.3.3 es un paquete de foro potente, escalable y totalmente personalizable para su sitio web. Versión:

5.3.3 (Anulado por vBSupport.org)
Requisitos mínimos php 5.6
Compatible con PHP 7.1 En nueva instalación
necesitas cambiar el nombre del archivo htaccess.txt a .htaccess Eliminar al actualizar carpeta de fuentes

(antes de que comience la actualización).
Nuevas características:
Nueva interfaz de usuario con amplia integración social;
Optimizado para dispositivos móviles;
Instalación, gestión y configuración simplificadas;
Nueva arquitectura de base de datos para una búsqueda mejorada y un mejor rendimiento;
Cambio de contenido dinámico conveniente;
Avanzado para compartir vídeos e imágenes;
Integración total con VigLink;

Más de 100 nuevas características y mejoras;
Aplicaciones integradas:
Foro de discusión
Grupos
Centro

Blog
Optimización de motores de búsqueda:
URL amigables para SEO

Etiqueta META personalizada de palabra clave/descripción
Flexibilidad:
Perfiles de usuario extensibles
Reescritura de URL
Localización de interfaz

Metadatos
Cumplimiento de normas:
Distribución de contenidos (RSS)
Distribución de contenidos: RSS, Atom, XML

Compatible con PHP v5.4
Sistema integrado antirrotura:
El único inicio de sesión involucrado
Sistema de resolución única
El único panel de control de administración

Cree un estilo/tema continuo a través de artículos, blogs y foros.
Paneles de control para cada rol:
Controles administrativos
Panel de control del moderador
Panel de control personalizado
Sistema de resolución unificado

Motor de plantillas potente para personalización avanzada
Control de usuario:
Sistema multiusuario con roles y poderes ilimitados
Grupos involucrados
Seguridad
Poderes granulares
Notificación de problema
SSL compatibles
Captcha
Confirmación de dirección de correo electrónico
Iniciar sesión en el sistema "strike"
Los cambios de correo electrónico y contraseña requieren la contraseña actual
Cumple con la Ley de protección de la privacidad infantil en línea (COPPA) de 1998

1. Vaya al panel de control del administrador:
Idiomas y Frases - Descargar/Subir Idiomas.
2. En el campo "O cargue el archivo XML desde su computadora", ingrese la ruta a
el archivo vbulletin-language_ru.xml en su computadora.
3. En la opción "Sobrescribir idioma", seleccione "Crear nuevo idioma".
4. En el campo "Título del idioma cargado", ingrese el nombre del idioma.
Si no hay datos ingresados, el idioma se llamará "ruso (RU)"
5. Configure "Sí" en "Ignorar versión de idioma".
6. Establezca "Sí" en "Leer juego de caracteres desde archivo XML".
7. Haga clic en el botón "Importar" y espere a que se complete el proceso de descarga.
7A Si lo deseas puedes hacer nuevo idioma Idioma "predeterminado"
haciendo clic en el botón "Predeterminado" / "Valor predeterminado" al lado.





Principales ventajas:

  • Marco de base de datos rápido y eficiente
  • Interfaz compuesta por plantillas.
  • Potente motor de búsqueda
  • Soporte multilingüe
  • Perfiles de usuario
  • Panel de administración potente y conveniente
  • Número ilimitado de secciones/temas/mensajes
  • Notificaciones por correo electrónico
  • Apoyo COPPA

Debido a que el fabricante no proporciona una demostración del foro que se pueda instalar, tuve que instalar la versión izquierda, descargada de algún Vareznik. Por lo tanto, es posible que las instrucciones no se correspondan completamente con el proceso de instalación del foro de licencias. Después de la instalación, el sitio fue eliminado y no se utilizó para el fin previsto.

Para instalar vBulletin vamos al panel de control de hosting (el botón con un engranaje al lado del pedido de hosting en facturación), allí en el “Administrador de archivos”, en él vamos al directorio “www”. Haga clic en el botón "Subir archivo al directorio actual":

Especifique la ruta al archivo en su computadora:

Seleccione el archivo con vBulletin y descomprímalo:

Eliminamos archivos y directorios que no necesitamos, incluido el directorio de nuestro dominio www, siempre que no tenga nada de lo que necesita allí. Si no lo coloca en la raíz del sitio, o si hay algo necesario en el directorio del sitio, no es necesario eliminar el directorio del dominio www:

Seleccione el directorio con el instalador de vBulletin y cámbiele el nombre:

Ingrese el nombre de nuestro sitio como nombre del directorio:

Vaya a la sección "Bases de datos" del panel de control del hosting:

nosotros creamos nueva base datos mysql y un usuario con plenos derechos de acceso al mismo:

Tenga en cuenta que tanto el usuario como la base de datos recibieron automáticamente un prefijo basado en el nombre de su cuenta en el servidor de alojamiento:

Vamos a la página principal de nuestro sitio y recibimos el siguiente error de vBulletin:

Introduzca la ruta al instalador en barra de direcciones, debe agregar “install/install.php”, después de lo cual se iniciará el programa de instalación del foro vBulletin:

El instalador de vBulletin comprueba la presencia de los siguientes archivos:

En el siguiente paso, se comprueba la conexión a la base de datos, no pasa - porque... El archivo de configuración del foro contiene datos incorrectos:

Volvemos al panel de control del hosting, gestor de archivos, vaya al directorio con el foro, luego al subdirectorio “includes”. Abra el archivo "config.php":

Ingresamos los datos correctos de la base de datos en el archivo de configuración, luego de lo cual lo cerramos:

Regresamos al sitio, al instalador. presione "F5", esta vez todo está bien, la conexión a la base de datos ha crecido en conjunto:

El instalador de vBulletin crea tablas en la base de datos:

El instalador de vBulletin cambia los tipos de algunas tablas:

Los datos se ingresan en la base de datos:

Idiomas importados:

Los estilos son importados:

Se importa la ayuda:

No tocamos la configuración predeterminada; el programa de instalación de vBulletin determinó todo correctamente:

Se importan las configuraciones predeterminadas:

Ingrese los detalles del administrador de vBulletin:

El administrador de vBulletin se ha agregado exitosamente:

La instalación de vBulletin en hosting se ha completado con éxito:

Siguiendo el último consejo del instalador, elimine los archivos innecesarios:

Puedes ir al foro de vBulletin para asegurarte de que todo funciona correctamente:

Revisar