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
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é:
La machine Kali exécute la commande curl url -H "Host: ip" -H "Range: bytes = 0-18446744073709551615":
À 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
Faites attention à modifier l'IP de la machine expérimentale:
Utilisez POC pour la détection de vulnérabilité:
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:
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.
Effectuer une attaque:
Lire les données de la mémoire du serveur avec succès.
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
Configurez les paramètres et exécutez l'attaque:
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.
Réussite des performances du client attaqué sur la machine expérimentale:
É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):
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