Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2017-9822 — Analyse détaillée et preuve de concept d'exploitation pour CVE-2017-9822, une vulnérabilité XXE/désérialisation non sécurisée dans le CMS DotNetNuke menant à une exécution de code à distance via la manipulation de cookies. | Kitploit
Outils/GitHubGitHub/tranphuc2005/cve-2017-9822
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionDéveloppement de Charges UtilesExploitation de Binaires
GitHubtranphuc2005/cve-2017-9822

CVE-2017-9822

Analyse détaillée et preuve de concept d'exploitation pour CVE-2017-9822, une vulnérabilité XXE/désérialisation non sécurisée dans le CMS DotNetNuke menant à une exécution de code à distance via la manipulation de cookies.

Voir le dépôt
4il y a 1 anPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2017-9822

DotNetNuke (souvent abrégé DNN) est une plateforme CMS (Content Management System) et un framework d'application web basé sur la technologie ASP.NET de Microsoft.

Informations principales

  • Produit concerné : DotNetNuke (DNN Platform) – un CMS/portail .NET populaire.

  • Date de publication : Juillet 2017.

  • Sévérité : Critique (CVSS ~9.8).

  • Type de vulnérabilité : XML External Entity (XXE) / Désérialisation non sécurisée → Exécution de code à distance (RCE).

  • Impact : avant la version 9.1.1, exécution de code à distance possible via le cookie

Guide d'installation

Ici, j'utilise Windows 10 pour installer et déboguer le programme. La version que j'installe est 9.1.0. Vous pouvez consulter la méthode d'installation ici. Et voici le résultat une fois terminé :

1

Analyse

1

  • D'après les rapports que j'ai lus, cette vulnérabilité se situe au niveau du traitement des cookies de DotNetNuke.

  • DNN utilise une désérialisation non sécurisée (unsafe deserialization) pour le cookie DNNPersonalization.

1

Debug

  • Ici, j'utilise dnSpy, un décompilateur et débogueur pour les applications .NET (C#, VB.NET, F#...). Il vous permet de visualiser, analyser et modifier le code source à partir de fichiers compilés comme .dll ou .exe écrits en .NET. Vous pouvez l'installer ici. Nous devons télécharger 2 versions pour le débogage.

1

  • Tout d'abord, ouvrez DotNetNuke.dll avec la version 32 bits, puis choisissez Edit Assembly Attributes (C#).

1

  • Ensuite, remplacez la ligne
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

par

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
DebuggableAttribute.DebuggingModes.DisableOptimizations |
DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints |
DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]

1

Ensuite, enregistrez.

  • Ouvrez la version 64 bits en tant qu'Administrateur et sélectionnez Attach to Process.

1

  • Ensuite, sélectionnez w3wp.exe.

1

La raison de choisir w3wp.exe est :

  • w3wp.exe = processus de travail IIS (IIS Worker Process).

  • C'est le processus d'exécution de l'Application Pool dans IIS.

  • Lorsqu'une requête HTTP est envoyée au site web, IIS crée ou réutilise un processus w3wp.exe pour traiter cette requête (exécution du code ASP.NET, gestion des modules, middleware, connexions à la base de données...).

  • Chaque Application Pool peut avoir un ou plusieurs processus w3wp.exe selon la configuration (web garden, recycling).

Ensuite, sélectionnez Debug -> Window -> Modules.

1

Une fois terminé, les modules apparaissent. Faites un clic droit sur n'importe quel module et sélectionnez Open All Modules.

1

Et enfin, tous les assemblys liés à DNN apparaîtront.

1

  • Entrez dans DotNetNuke.dll -> PersonalizationController#LoadProfile(int, int).

1

Cette fonction sert à charger les données de personnalisation (profil) de l'utilisateur dans le portail DNN.

  • Si l'utilisateur est connecté → le profil est récupéré depuis la base de données + le cache.

  • Si l'utilisateur est anonyme (non connecté) → le profil est récupéré depuis le cookie DNNPersonalization.

Ici, nous devrions nous concentrer sur DNNPersonalization.

  • Si userId n'est pas valide (utilisateur anonyme).

  • Vérifie si la requête contient le cookie DNNPersonalization.

  • Si c'est le cas → récupère la valeur XML de ce cookie.

  • Nous allons envoyer une requête 404 au site web avec un cookie DNNPersonalization quelconque, puis utiliser dnSpy pour placer un point d'arrêt (breakpoint) dans DotNetNuke.dll –> PersonalizationController#LoadProfile(int, int) ; le débogage fonctionnera alors.

1

1

  • Dans la pile d'appels (Call Stack), concentrons-nous sur l'analyse de la classe PortalSettings.

1

  • Ce qui est intéressant, c'est qu'une condition if est utilisée ici pour vérifier si la requête actuelle est IsAuthenticated ou non.

  • Et comme la requête que nous envoyons est une 404 -> unauthenticated.

  • En continuant dans la pile d'appels, concentrons-nous sur Handle404OrException.

1

  • Ici, elle vérifie si context.User de la requête actuelle est null ; si c'est le cas, elle affecte à context.User l'utilisateur du thread actuel.

1

1

  • On voit que dans Handle404OrException, la variable IsAuthenticated a maintenant la valeur true et l'utilisateur est celui du serveur IIS ; la requête est donc traitée comme un utilisateur authentifié.

  • La cause du problème se trouve dans ce morceau de code :

else if (transfer)
{
	if (context.User == null)
	{
		context.User = Thread.CurrentPrincipal;
	}
	response.TrySkipIisCustomErrors = true;
	IHttpHandler handler = new CDefault();
	context.Handler = handler;
	server.Transfer("~/" + text, true);
}
  • Si context.User n'existe pas → affecte Thread.CurrentPrincipal (c'est-à-dire l'identité actuelle du thread).

  • Cela donne à la requête les informations sur l'utilisateur/rôle lors du traitement suivant.

=> Ainsi, lorsque nous transmettons n'importe quel contenu dans le cookie DNNPersonalization, il est traité comme un utilisateur normal.

Voyons maintenant le traitement du cookie

Télécharger l’outil