QQ 1274510382 Wechat
JNZ_aming
Business Alliance Grupo QQ 538250800 Problemas
tecnológicos Grupo QQ 599020441
Solución Grupo QQ 152889761
Únase a nosotros Grupo
QQ 649347320 Grupo QQ de aprendizaje compartido 674240731
Tecnología cronológica que aming
seguridad de red, aprendizaje profundo, integrado, mejora de la máquina, inteligencia biológica, ciencias de la vida.
Ding Ding Ding: El producto está en línea—> Siga la
cuenta pública oficial de WeChat —Jinan Ji Nian Information Technology Co., Ltd. Proyecto de medios de vida de la gente: franquicia de tiendas / citas de entretenimiento / círculo comercial de empresas / subcontratación a tiempo parcial - lanzamiento del proyecto /
proyecto de seguridad: situacional sistema de defensa de la conciencia sistema de inspección / Intranet
proyecto de servicio de la nube: expansión dinámica de anfitrión nube / nombre de dominio / elástico de disco de almacenamiento de base de datos en la nube / API-AIeverthing
Consejos sobre productos / servicio post-venta (lo mismo)
Siempre es superficial en el papel, ¡y sé absolutamente que este asunto debe hacerse! ! !
Buscando socios con ideas afines para iniciar un negocio. . . Baotuan Didi aming información de contacto! !
#Este artículo es para que el sistema de publicidad publique anuncios automáticamente
# Si hay alguna infracción, eliminación, contáctenos rápidamente
El almacenamiento en caché del kernel está habilitado de forma predeterminada en IIS para realizar tareas relacionadas con el almacenamiento en caché en la canalización de procesamiento de solicitudes.
Cuando la pila del protocolo HTTP (HTTP.sys) analiza incorrectamente la solicitud HTTP, provocará la vulnerabilidad de ejecución remota de código IIS.
A través de experimentos, aprenda sobre la
arquitectura IIS, la pila de protocolos HTTP y cómo funciona, y las vulnerabilidades de la pila de protocolos HTTP, y
domine los métodos y principios de vulnerabilidad de MS15-034.
Seguridad web
Profesionales de la seguridad de la información
Fundación informática, red informática
Conocimiento preliminar
Información de vulnerabilidad
Número de vulnerabilidad: CVE-2015-1635
Descripción de la vulnerabilidad: La
vulnerabilidad de ejecución remota de código de IIS existe en la pila del protocolo HTTP (HTTP.sys).
Esta vulnerabilidad puede producirse cuando HTTP.sys analiza incorrectamente las solicitudes HTTP.
Anuncio de Microsoft sobre vulnerabilidades: https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2015/ms15-034
Versión afectada: Windows Server 2008 R2 / Server 2012 / Server 2012 R2 y Windows 7/8 / 8.1
instalados con Microsoft
IIS 6.0 o superior
se ven afectados por esta vulnerabilidad.
Arquitectura IIS
Después de instalar IIS (Internet Information Service) en el sistema,
Existe un servicio llamado Servicio de publicación World Wide Web (Servicio WWW).
Cuando el cliente envía una solicitud HTTP al sistema, el
servicio WWW iniciará o seleccionará el proceso de trabajo w3wp.exe según la estrategia de equilibrio de carga
para procesar la solicitud HTTP y enviar una respuesta HTTP adecuada.
El proceso w3wp.exe usa HTTP.sys para completar muchas tareas relacionadas con el procesamiento del protocolo HTTP,
incluido el análisis del protocolo HTTP, el ensamblaje del contenido de respuesta y el almacenamiento en caché del contenido.
HTTP.sys recibe solicitudes HTTP y envía respuestas HTTP a través de TCPIP.sys.
Pila de protocolo HTTP y cómo funciona
El servidor web IIS utiliza el escucha HTTP como parte del subsistema de red de Windows,
que se implementa mediante el controlador de dispositivo en modo kernel de la pila de protocolo HTTP (HTTP.sys). La
pila de protocolo HTTP analiza las solicitudes HTTP y proporciona respuestas al cliente. .
HTTP.sys proporciona los siguientes servicios en IIS 6.0: enrutar las solicitudes HTTP a la cola de solicitudes correcta; almacenar en caché las respuestas en modo kernel; realizar todos los registros basados en texto para los servicios WWW; implementar funciones de calidad de servicio, incluida la restricción de conexión, el tiempo de espera de la conexión, la cola límite de longitud y límite de ancho.
Al crear un sitio web, IIS utilizará HTTP.sys para registrar el sitio web, y luego HTTP.sys recibirá todas las solicitudes HTTP al sitio web. La función de HTTP.sys es similar a un reenviador: envía la solicitud web recibida a la cola de solicitudes que ejecuta el proceso de modo de usuario del sitio web o la aplicación web y envía la respuesta al cliente.
Además de recuperar la respuesta almacenada de su caché interno, HTTP.sys no procesa las solicitudes que recibe. Por lo tanto, el código específico de la aplicación no se carga en el modo kernel, por lo que los errores en el código específico de la aplicación no afectarán al kernel ni causarán fallas en el sistema.
Vulnerabilidad de pila de protocolo HTTP
El almacenamiento en caché del kernel está habilitado de forma predeterminada en IIS para realizar tareas relacionadas con el almacenamiento en caché en la canalización de procesamiento de solicitudes.
El almacenamiento en caché mejora el rendimiento al almacenar información procesada (como páginas web) en la memoria del servidor.
Utilice el encabezado HTTP Range para aprovechar esta vulnerabilidad.
Este encabezado HTTP permite al cliente solicitar contenido específico del servidor según sea necesario.
Por lo general, el encabezado Range contiene los siguientes valores:
Rango: bytes = 124-5656, también puede contener los siguientes valores: Rango: bytes = 0-
Si el límite superior en el encabezado Rango no existe,
se asume que el cliente está solicitando datos completos.
Por el contrario, si el atacante especifica un límite superior alto y envía una solicitud HTTP con un valor de rango especial,
hará que la variable de rango se desborde en el servidor.
El límite superior del encabezado Range es 0xFFFFFFFFFFFFFFFFFF,
que es el entero sin signo de 64 bits más grande.
El atacante envía una solicitud HTTP con este valor, lo que provocará un desbordamiento de enteros, y el
servidor responderá como 'No se puede cumplir el rango solicitado', lo que significa que el cliente requiere que una parte del archivo exceda el final del archivo. en el servidor.
La explotación exitosa de un ataque también puede conducir a una denegación de servicio.
Experimentos relacionados con la seguridad del servidor IIS
Explotación de vulnerabilidad de permiso de escritura IIS6.0: https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015102217203100001
IIS6.0 ejecución remota de código 0day análisis y explotación de vulnerabilidades: https://www.hetianlab.com/expc.do?ec=ECID9d6c0ca797abec2017032915142000001 (CVE-2017-7269)
Vulnerabilidad de análisis de IIS utilizada en el ataque de carga de fckEditor: https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015102217243800001
Propósito del experimento
Comprender la arquitectura IIS,
la pila de protocolos HTTP y cómo funciona, y las vulnerabilidades de pila de protocolos HTTP a través de experimentos , y
dominar los métodos de explotación de vulnerabilidades y los principios de vulnerabilidades de MS15-034.
Entorno experimental
Cliente: Windows Server 2008 R2, IP: 10.1.1.134
Ataque: Kali, IP: 10.1.1.100
Dirección de descarga de la herramienta de explotación de vulnerabilidades: http://tools.hetianlab.com/tools/CVE-2015-1635.zip
Descripción de la tarea: detección de vulnerabilidades.
Sabemos que se trata de una vulnerabilidad de desbordamiento de enteros ubicada en HTTP.sys.
Enviar una solicitud HTTP en el siguiente formato al servidor IIS puede desencadenar la detección de la vulnerabilidad:
La máquina Kali ejecuta el comando curl url -H "Host: ip" -H "Rango: bytes = 0-18446744073709551615":
En este momento, 18446744073709551615 convertido a hexadecimal es 0xFFFFFFFFFFFFFFFF (16 F), que
es el entero más grande que se puede expresar con un entero de 64 bits sin signo,
por lo que el desbordamiento del entero debe estar relacionado con este entero anormal.
Como se muestra arriba,
si el servidor IIS devuelve "rango solicitado no satisfactorio", entonces hay una vulnerabilidad;
si devuelve "la solicitud tiene un nombre de encabezado no válido", entonces la vulnerabilidad ha sido parcheada.
Descarga el guión:
wget http://tools.hetianlab.com/tools/CVE-2015-1635.zip
unzip CVE-2015-1635.zip
Preste atención a modificar la IP de la máquina experimental:
Utilice POC para la detección de vulnerabilidades:
Indica que la máquina de destino tiene una vulnerabilidad.
Paso experimental dos
Descripción de la tarea: Ataque de explotación MS15-034: obtener datos de memoria.
La máquina Kali abre msfconsole y busca módulos de explotación relacionados con vulnerabilidades:
Utilice el segundo módulo
ms15_034_http_sys_memory_dump para leer datos de memoria del servidor:
solicitudes de pila de protocolo HTTP para procesar la divulgación de información de memoria HTTP.SYS.
Realiza un ataque:
Leer los datos de la memoria del servidor correctamente.
Experimento paso tres
Descripción de la tarea: ataque de explotación MS15-034: ataque de denegación de servicio.
Utilice el primer módulo
ms15_034_ulonglongadd para realizar ataques ddos: procesamiento de solicitudes de pila de protocolo HTTP denegación de servicio
Configure los parámetros y ejecute el ataque:
Nota: Puede cambiar al cliente antes de ejecutar el ataque y sentir el estado de ejecución antes y después del ataque.
Rendimiento exitoso del cliente atacado en la máquina experimental:
Experimento Paso Cuatro
Análisis de vulnerabilidad: ataque de denegación de servicio.
Después de enviar la solicitud al servidor HTTP,
w3wp.exe procesará la solicitud HTTP y
TCPIP.sys reenviará cualquier contenido del protocolo HTTP a HTTP.sys.
Si la solicitud está dentro del rango HTTP, se
llamará a la función UlpParseRange () para analizar la solicitud para obtener las posiciones inicial y final del rango de solicitud
y calcular la longitud del rango.
Cuando la posición inicial es 0 y la posición final es 0xFFFFFFFFFFFFFFFFFF, la
longitud del rango es igual a 0, el código no comprueba el desbordamiento y no toma medidas de manejo de errores;
Cuando la posición inicial es 284 y la posición final es 0xFFFFFFFFFFFFFFFFFF, la
longitud del rango es igual a -284 y el valor hexadecimal es 0xFFFFFFFFFFFFFFFEE4.
Si se interpreta como un entero sin signo, el valor es muy grande.
Después de analizar la solicitud HTTP, se llamará a la función UlAdjustRangesToContentSize ().
Si la posición de inicio y la longitud son 'no válidas'
(incluida la posición de inicio del rango es 0xFFFFFFFFFFFFFFFFFF, la longitud del rango es 0xFFFFFFFFFFFFFFFFFF, la
posición de inicio> = la longitud de la página web solicitada y la posición final> = la longitud de la página web solicitada),
la función ajustará el rango La posición inicial y la longitud del
Si se recibe la misma solicitud continuamente, la respuesta a la solicitud se almacenará en caché, se recuperará de la caché y se enviará al solicitante.
Este proceso llamará a la función UxpTpDirectTransmit () para calcular la longitud del paquete de respuesta HTTP.
Después de ensamblar el paquete de respuesta HTTP,
HTTP.sys reenviará la información del paquete al controlador de pila de protocolos para su envío.
La función TcpSegmentTcbSend () de TCPIP.sys recorrerá el contenido de cada parte del paquete. Hay un desbordamiento de enteros en función.
Cuando la posición inicial de la solicitud de rango HTTP es 284 y la
posición final es 18446744073709551615 (el valor hexadecimal es 0xFFFFFFFFFFFFFFFFFFFF), el
rango excede el tamaño del archivo de página web solicitado.
Debido a que la longitud de la respuesta HTTP es muy grande, cuando el bucle se ejecuta varias veces y se activa un desbordamiento de enteros,
la dirección virtual se utilizará para construir una lista de descriptores de memoria parcial. Debido a que el rango no es un subrango del rango de la fuente, causará una pantalla azul de muerte.
Paso experimental cinco
Análisis de vulnerabilidades: obtenga datos de la memoria.
Supongamos que 3-18446744073709551615 se establece en range1 y
1-600 se establece en range2.
Después de que la función UlpParseRange () analiza la solicitud HTTP, se
llamará a la función UlAdjustRangesToContentSize ().
En este momento, range1 activará un desbordamiento de enteros (3 + 0xFFFFFFFFFFFFFFFD> = 0).
Si la misma operación se recibe continuamente, la respuesta a la solicitud se almacenará en caché, se recuperará de la caché y se enviará al solicitante.
Al usar múltiples solicitudes de alcance,
hay una etiqueta de enlace de alcance e información de alcance antes de cada contenido de alcance.
Después de ensamblar el paquete de respuesta HTTP, HTTP.sys reenviará la información del paquete bajo el controlador de la pila de protocolos para su envío.
La función TcpSegmentTcbSend () de TCPIP.sys recorrerá cada parte del paquete de datos.
El uso de solicitudes de rango múltiple puede aumentar la longitud de la respuesta HTTP, revelando así más información.
Si solo se usa un rango, la longitud de la respuesta HTTP se vuelve demasiado grande o demasiado pequeña:
Si la longitud de la respuesta HTTP es demasiado grande, el sistema provocará una pantalla azul de la muerte;
si la longitud de la respuesta HTTP es demasiado pequeña, el búfer no se sobrescribirá después de que el contenido de la página web de destino pierda información.
Por lo tanto, el atacante utilizará solicitudes de rango múltiple para revelar más información.
Corrección de errores
Deshabilite la habilitación del almacenamiento en caché del kernel en el caché de salida (deshabilite el almacenamiento en caché del kernel de IIS):
Análisis y pensamiento
Para obtener más análisis, consulte: https://blogs.360.cn/post/cve_2015_6135_http_rce_analysis.html.
referencia
1 、 https: //technet.microsoft.com/en-us/library/cc739400 (v = ws.10) .aspx
2 、 https: //www.trendmicro.com/en_us/research/15/d/iis-at-risk-the-http-protocol-stack-vulnerability.html? _Ga = 2.58551274.1902911539.1609211638-1589647619.1609211638