Vulnérabilité d'exécution de code à distance IIS-CVE-2015-1635

Insérez la description de l'image ici


QQ 1274510382
Wechat JNZ_aming
Business Alliance QQ group 538250800 Problème
technologique Groupe QQ 599020441
Solution Groupe QQ 152889761
Rejoignez-nous Groupe QQ 649347320
Apprentissage partagé Groupe QQ 674240731
Technologie chronologique de
sécurité réseau, apprentissage en profondeur, embarqué, amélioration de la machine, intelligence biologique, sciences de la vie.

Ding Ding Ding: Le produit est en ligne—> Suivez le
compte public officiel de WeChat —Jinan Ji Nian Information Technology Co., Ltd. Projet de moyens de subsistance des gens: franchise de magasin / rencontres de divertissement / cercle d’affaires de l’ entreprise / sous-traitance à temps partiel /
projet de sécurité: système de défense de la connaissance de la situation / système d'inspection intranet
Projet de service cloud: extension dynamique de l'hôte cloud / nom de domaine / stockage élastique-base de données-disque cloud / API-AIeverthing
conseil produit / service après-vente (idem)

C'est toujours superficiel sur le papier, et je sais absolument que cette affaire doit être réglée! ! !
Vous recherchez des partenaires partageant les mêmes idées pour démarrer une entreprise. . . Coordonnées de Baotuan Didi aming! !


# Cet article est destiné au système publicitaire pour diffuser automatiquement des annonces

# En cas d'infraction, de suppression, veuillez nous contacter rapidement




La mise en cache du noyau est activée par défaut dans IIS pour effectuer des tâches liées à la mise en cache dans le pipeline de traitement des demandes.

Lorsque la pile de protocoles HTTP (HTTP.sys) analyse de manière incorrecte la requête HTTP, cela entraînera la vulnérabilité d'exécution de code à distance IIS.

Grâce à des expériences, découvrez l'
architecture IIS, la pile de protocoles HTTP et son fonctionnement, ainsi que les vulnérabilités de la pile de protocoles HTTP, et
maîtrisez les méthodes d'exploitation des vulnérabilités MS15-034 et les principes de vulnérabilité.


Sécurité Web

Praticiens de la sécurité de l'information

Fondation informatique, réseau informatique




Connaissances préliminaires
Informations sur la vulnérabilité

Numéro de vulnérabilité: CVE-2015-1635

Description de la vulnérabilité: La
vulnérabilité d'exécution de code à distance IIS existe dans la pile de protocoles HTTP (HTTP.sys).
Cette vulnérabilité peut être provoquée lorsque HTTP.sys analyse de manière incorrecte les requêtes HTTP.

Annonce de Microsoft sur les vulnérabilités: https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2015/ms15-034

Version concernée: Windows Server 2008 R2 / Server 2012 / Server 2012 R2 et Windows 7/8 / 8.1
installés avec Microsoft
IIS 6.0 ou version ultérieure
sont tous concernés par cette vulnérabilité.

Architecture IIS

Insérez la description de l'image ici

Après avoir installé IIS (Internet Information Service) sur le système,

Il existe un service appelé World Wide Web Publishing Service (service WWW).
Lorsque le client envoie une requête HTTP au système, le
service WWW démarre ou sélectionne le processus de travail w3wp.exe en fonction de la stratégie d'équilibrage de charge
pour traiter la requête HTTP et envoyer une réponse HTTP appropriée.

Le processus w3wp.exe utilise HTTP.sys pour effectuer de nombreuses tâches liées au traitement du protocole HTTP,
y compris l'analyse du protocole HTTP, l'assemblage du contenu de la réponse et la mise en cache du contenu.
HTTP.sys reçoit des requêtes HTTP et envoie des réponses HTTP via TCPIP.sys.

La pile de protocoles HTTP et son fonctionnement

Le serveur Web IIS utilise l'écouteur HTTP dans le cadre du sous-système réseau Windows,
qui est implémenté par le pilote de périphérique en mode noyau de la pile de protocoles HTTP (HTTP.sys). La
pile de protocoles HTTP analyse les requêtes HTTP et fournit des réponses au client .

HTTP.sys fournit les services suivants dans IIS 6.0: acheminement des requêtes HTTP vers la file d'attente de requêtes correcte; mise en cache des réponses en mode noyau; exécution de toute la journalisation textuelle pour les services WWW; mise en œuvre des fonctions de qualité de service, y compris la restriction de connexion, le délai de connexion, la file d'attente limite de longueur et limite de largeur.

Lors de la création d'un site Web, IIS utilisera HTTP.sys pour enregistrer le site Web, puis HTTP.sys recevra toutes les requêtes HTTP sur le site Web. La fonction de HTTP.sys est similaire à celle d'un redirecteur. Il envoie la requête Web reçue à la file d'attente de requêtes exécutant le processus en mode utilisateur du site Web ou de l'application Web et renvoie la réponse au client.

En plus de récupérer la réponse stockée à partir de son cache interne, HTTP.sys ne traite pas les demandes qu'il reçoit. Par conséquent, le code spécifique à l'application n'est pas chargé en mode noyau, de sorte que les erreurs dans le code spécifique à l'application n'affecteront pas le noyau ni ne provoqueront une défaillance du système.

Vulnérabilité de la pile de protocoles HTTP

La mise en cache du noyau est activée par défaut dans IIS pour effectuer des tâches liées à la mise en cache dans le pipeline de traitement des demandes.
La mise en cache améliore les performances en stockant les informations traitées (telles que les pages Web) en mémoire sur le serveur.

Utilisez l'en-tête HTTP Range pour exploiter cette vulnérabilité.
Cet en-tête HTTP permet au client de demander un contenu spécifique au serveur si nécessaire.
En général, l'en-tête Range contient les valeurs suivantes:

Plage: octets = 124-5656, peut également contenir les valeurs suivantes: Plage: octets = 0-

Si la limite supérieure de l'en-tête Range n'existe pas,
on suppose que le client demande des données complètes.

Au contraire, si l'attaquant spécifie une limite supérieure haute et envoie une requête HTTP avec une valeur Range spéciale, cela
provoquera un débordement de la variable Range sur le serveur.

La limite supérieure de l'en-tête Range est 0xFFFFFFFFFFFFFFFFFF,
qui est le plus grand entier non signé de 64 bits.

L'attaquant envoie une requête HTTP avec cette valeur, ce qui entraînera un débordement d'entier, et le
serveur répondra comme `` La plage demandée ne peut pas être satisfaite '', ce qui signifie que le client a besoin qu'une partie du fichier dépasse la fin du fichier sur le serveur.
Une exploitation réussie d'une attaque peut également conduire à un déni de service.


Expériences liées à la sécurité du serveur IIS

Exploit de vulnérabilité d'autorisation d'écriture IIS6.0: https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015102217203100001

Exécution de code à distance IIS6.0 Analyse et exploitation des vulnérabilités 0day: https://www.hetianlab.com/expc.do?ec=ECID9d6c0ca797abec2017032915142000001 (CVE-2017-7269)

Vulnérabilité d'analyse IIS utilisée dans l'attaque de téléchargement fckEditor: https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182015102217243800001


Objectif de l'expérience
Comprendre l'architecture IIS, la
pile de protocoles HTTP et son fonctionnement, ainsi que les vulnérabilités de la pile de protocoles HTTP par des expériences , et
maîtriser les méthodes d'exploitation des vulnérabilités et les principes de vulnérabilités de MS15-034.


Environnement expérimental
Client: Windows Server 2008 R2, IP: 10.1.1.134

Attaque : Kali , IP : 10.1.1.100

Adresse de téléchargement de l'outil d'exploitation des vulnérabilités: http://tools.hetianlab.com/tools/CVE-2015-1635.zip




Description de la tâche: détection de vulnérabilité.

Nous savons qu'il s'agit d'une vulnérabilité de débordement d'entier située dans HTTP.sys. L'
envoi d'une requête HTTP au format suivant au serveur IIS peut déclencher la détection de la vulnérabilité:
Insérez la description de l'image ici
Insérez la description de l'image ici

La machine Kali exécute la commande curl url -H "Host: ip" -H "Range: bytes = 0-18446744073709551615":

Insérez la description de l'image ici

À ce stade, 18446744073709551615 converti en hexadécimal est 0xFFFFFFFFFFFFFFFF (16 F), qui
est le plus grand entier pouvant être exprimé par un entier non signé de 64 bits, de
sorte que le débordement d'entier doit être lié à cet entier anormal.

Comme indiqué ci-dessus,
si le serveur IIS renvoie «plage demandée non satisfaisable», alors il y a une vulnérabilité;
s'il renvoie «la requête a un nom d'en-tête invalide», alors la vulnérabilité a été corrigée.

Téléchargez le script:

 wget http://tools.hetianlab.com/tools/CVE-2015-1635.zip
 unzip CVE-2015-1635.zip

Insérez la description de l'image iciInsérez la description de l'image ici

Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici

Faites attention à modifier l'IP de la machine expérimentale:

Insérez la description de l'image ici
Insérez la description de l'image ici

Utilisez POC pour la détection de vulnérabilité:
Insérez la description de l'image ici

Indique que la machine cible a une vulnérabilité.




Deuxième étape expérimentale

Description de la tâche: Attaque d'exploit MS15-034: obtenir des données mémoire.

La machine Kali ouvre msfconsole et recherche les modules d'exploit liés aux vulnérabilités:
Insérez la description de l'image ici

Insérez la description de l'image ici

Utilisez le deuxième module
ms15_034_http_sys_memory_dump pour lire les données de la mémoire du serveur:
requêtes de pile de protocole HTTP pour traiter la divulgation des informations de mémoire HTTP.SYS.

Insérez la description de l'image ici
Insérez la description de l'image ici

Effectuer une attaque:

Insérez la description de l'image ici

Lire les données de la mémoire du serveur avec succès.
Insérez la description de l'image ici




Troisième étape de l'expérience

Description de la tâche: Attaque d'exploit MS15-034: attaque par déni de service.

Utilisez le premier module
ms15_034_ulonglongadd pour effectuer des attaques ddos: traitement de requête de pile de protocole HTTP déni de service

Insérez la description de l'image ici

Configurez les paramètres et exécutez l'attaque:
Insérez la description de l'image ici

Remarque: vous pouvez basculer vers le client avant d'exécuter l'attaque et ressentir l'état de fonctionnement avant et après l'attaque.
Insérez la description de l'image ici

Insérez la description de l'image ici

Insérez la description de l'image ici

Réussite des performances du client attaqué sur la machine expérimentale:
Insérez la description de l'image ici




Étape 4 de l'expérience

Analyse de vulnérabilité: attaque par déni de service.

Après avoir envoyé la demande au serveur HTTP,
w3wp.exe traitera la demande HTTP et
TCPIP.sys transmettra tout contenu de protocole HTTP à HTTP.sys.
Si la requête est dans la plage HTTP, la
fonction UlpParseRange () sera appelée pour analyser la requête afin d'obtenir les positions de début et de fin de la plage de requête
et calculer la longueur de la plage.

Lorsque la position de départ est 0 et la position finale est 0xFFFFFFFFFFFFFFFFFF, la
longueur de la plage est égale à 0, le code ne vérifie pas le dépassement de capacité et ne prend pas de mesures de gestion des erreurs;

Lorsque la position de début est 284 et la position finale est 0xFFFFFFFFFFFFFFFFFF, la
longueur de la plage est égale à -284 et la valeur hexadécimale est 0xFFFFFFFFFFFFFFFEE4.
S'il est interprété comme un entier non signé, la valeur est très grande.

Après avoir analysé la requête HTTP, la fonction UlAdjustRangesToContentSize () sera appelée.

Si la position de départ et la longueur sont `` non valides ''
(y compris la position de début de plage est 0xFFFFFFFFFFFFFFFFFF, la longueur de plage est 0xFFFFFFFFFFFFFFFFFF, la
position de départ> = la longueur de page Web demandée et la position de fin> = la longueur de page Web demandée),
la fonction ajustera la plage La position de départ et la longueur du

Si la même demande est reçue en continu, la réponse à la demande sera mise en cache, et sera extraite du cache et envoyée au demandeur.
Ce processus appellera la fonction UxpTpDirectTransmit () pour calculer la longueur du paquet de réponse HTTP.

Après avoir assemblé le package de réponse HTTP,
HTTP.sys transmettra les informations de paquet au pilote de pile de protocoles pour envoi.
La fonction TcpSegmentTcbSend () de TCPIP.sys parcourra le contenu de chaque partie du paquet. Il y a un débordement d'entier dans le fonction.

Lorsque la position de début de la demande de plage HTTP est 284 et que la
position de fin est 18446744073709551615 (la valeur hexadécimale est 0xFFFFFFFFFFFFFFFFFFFF), la
plage dépasse la taille du fichier de page Web demandé.

Étant donné que la longueur de la réponse HTTP est très grande, lorsque la boucle s'exécute plusieurs fois et qu'un débordement d'entier est déclenché,
l'adresse virtuelle sera utilisée pour construire une liste de descripteurs de mémoire partielle. Parce que la plage n'est pas une sous-plage de la plage source, cela provoquera un écran bleu de mort.




Étape expérimentale cinq

Analyse de vulnérabilité: obtenez des données de mémoire.

Supposons que 3-18446744073709551615 est défini sur plage1 et 1-600
sur plage2. Une
fois que la fonction UlpParseRange () a analysé la requête HTTP,
la fonction UlAdjustRangesToContentSize () sera appelée.
À ce stade, range1 déclenchera un débordement d'entier (3 + 0xFFFFFFFFFFFFFFFD> = 0).

Si la même opération est reçue en continu, la réponse à la demande sera mise en cache, extraite du cache et envoyée au demandeur.

En utilisant plusieurs demandes d'étendue,
il existe une balise de liaison d'étendue et des informations d'étendue avant chaque contenu d'étendue.
Après avoir assemblé le package de réponse HTTP, HTTP.sys transmettra les informations de paquet sous le pilote de pile de protocole pour l'envoi.
La fonction TcpSegmentTcbSend () de TCPIP.sys traversera chaque partie du paquet de données.

L'utilisation de requêtes multi-plages peut augmenter la longueur de la réponse HTTP, révélant ainsi plus d'informations.
Si une seule plage est utilisée, la longueur de la réponse HTTP devient trop grande ou trop petite:

Si la longueur de la réponse HTTP est trop grande, le système provoquera un écran bleu de mort;
si la longueur de la réponse HTTP est trop petite, la mémoire tampon ne sera pas écrasée après que le contenu de la page Web cible fuit des informations.
Par conséquent, l'attaquant utilisera des requêtes multi-plages pour divulguer plus d'informations.

Corrections de bogues
Désactivez l'activation de la mise en cache du noyau dans le cache de sortie (désactivez la mise en cache du noyau IIS):
Insérez la description de l'image ici

Insérez la description de l'image ici



Analyse et réflexion

Pour plus d'analyses, voir: https://blogs.360.cn/post/cve_2015_6135_http_rce_analysis.html.

référence

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

Je suppose que tu aimes

Origine blog.csdn.net/qq_33608000/article/details/112798458
conseillé
Classement