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
http-garden — Framework di test differenziale per implementazioni HTTP | Kitploit
Strumenti/GitHubGitHub/narfindustries/http-garden
Analisi delle VulnerabilitàAnalisi Dinamica del Codice (DAST)Sicurezza WebFuzzing
GitHubnarfindustries/http-garden

http-garden

Framework di test differenziale per implementazioni HTTP

Vedi Repository
941842 mesi faRevisionato da Kitploit

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

The HTTP Garden

HTTP Garden è una raccolta di server HTTP e proxy configurati per essere componibili, insieme a script per interagire con essi in un modo che rende la ricerca di vulnerabilità molto molto più facile. Per alcune belle demo delle vulnerabilità che puoi trovare con HTTP Garden, guarda il nostro talk allo ShmooCon 2024.

Acknowledgements

Vorremmo ringraziare i nostri amici di Galois, Trail of Bits, Narf Industries e Dartmouth College per aver reso possibile questo progetto.

Questo materiale si basa su un lavoro supportato dalla Defense Advanced Research Projects Agency (DARPA) con numero di contratto HR0011-19-C-0076.

Getting Started

Dipendenze

  1. HTTP Garden gira su Linux x86_64 e AArch64, e non è testato su altre piattaforme.
  2. I server di destinazione vengono compilati ed eseguiti in container Docker, quindi ti servirà Docker.
  3. Ti serviranno anche Python 3.12+ e i seguenti pacchetti Python, che puoi ottenere da PyPI (cioè con pip) o dal gestore di pacchetti del tuo sistema:
  • docker
    • Per interagire con Docker
  • pyyaml
    • Per il parsing di yaml
  • tqdm
    • Per le barre di avanzamento

Se installi i pacchetti Python con il gestore di pacchetti del tuo sistema, tieni presente che i nomi dei pacchetti potrebbero dover essere preceduti da py3-, python3- o python-, a seconda del sistema.

Esecuzione

  • Compila e avvia alcuni server e proxy:
root@kitploit:~
./garden.sh start --build gunicorn hyper nginx haproxy
  • Da un'altra shell, avvia la repl:
root@kitploit:~
./garden.sh repl
  • Invia una semplice richiesta GET attraverso HAProxy, poi invia il risultato ai server di origine Gunicorn, Hyper e Nginx, e mostra se le loro interpretazioni coincidono:
root@kitploit:~
garden> payload 'GET / HTTP/1.1\r\nHOST: a\r\n\r\n' | transduce haproxy | fanout | grid
'GET / HTTP/1.1\r\nHOST: a\r\n\r\n'
⬇️ haproxy
'GET / HTTP/1.1\r\nhost: a\r\n\r\n'
gunicorn: [
    HTTPRequest(
        method=b'GET', uri=b'/', version=b'1.1',
        headers=[
            (b'host', b'a'),
        ],
        body=b'',
    ),
]
hyper: [
    HTTPRequest(
        method=b'GET', uri=b'/', version=b'1.1',
        headers=[
            (b'host', b'a'),
        ],
        body=b'',
    ),
]
nginx: [
    HTTPRequest(
        method=b'GET', uri=b'/', version=b'1.1',
        headers=[
            (b'host', b'a'),
            (b'content-length', b''),
            (b'content-type', b''),
        ],
        body=b'',
    ),
]
         g
         u
         n
         i h n
         c y g
         o p i
         r e n
         n r x
        +-----
gunicorn|✓ ✓ ✓
hyper   |  ✓ ✓
nginx   |    ✓

Sembra che siano tutti d'accordo. (Nota che anche se Nginx ha aggiunto le intestazioni content-length e content-type, il Garden ne è consapevole e non lascia che questa discrepanza insignificante compaia nell'output di grid.)

Proviamo un payload che usa una semplice terminazione di riga LF in un corpo di messaggio in chunked. Questo è vietato dalla specifica.

root@kitploit:~
garden> payload 'POST / HTTP/1.1\r\nHost: a\r\nTransfer-Encoding: chunked\r\n\r\n0\n\r\n' | fanout | grid
gunicorn: [
    HTTPResponse(version=b'1.1', method=b'400', reason=b'Bad Request'),
]
hyper: [
]
nginx: [
    HTTPRequest(
        method=b'POST', uri=b'/', version=b'1.1',
        headers=[
            (b'transfer-encoding', b'chunked'),
            (b'host', b'a'),
            (b'content-length', b'0'),
            (b'content-type', b''),
        ],
        body=b'',
    ),
]
         g
         u
         n
         i h n
         c y g
         o p i
         r e n
         n r x
        +-----
gunicorn|✓ ✓ X
hyper   |  ✓ X
nginx   |    ✓

Ok, quindi Gunicorn ha risposto 400, Hyper non ha risposto e Nginx ha accettato. Questa è una violazione della specifica da parte degli autori di Nginx che non hanno intenzione di correggere.

Potresti anche aver notato che, anche se Gunicorn e Hyper non hanno avuto esattamente la stessa risposta, nell'output di grid precedente risultavano in accordo. Questo perché le loro risposte sono sostanzialmente equivalenti (un rifiuto del messaggio), e il Garden ne tiene conto.

Struttura delle directory

images

La directory images contiene una sottodirectory per ogni server HTTP e trasduttore nel Garden. Ogni target ha la propria immagine Docker. Tutti i programmi vengono compilati dal sorgente quando possibile. Per poter compilare facilmente più versioni di ciascun target, tutti i target sono parametrizzati con un URL del repository (APP_REPO), un nome di branch (APP_BRANCH) e un hash di commit (APP_VERSION).

tools

La directory tools contiene gli script usati per interagire con i server. Al suo interno troverai

  • probe_quirks.py: uno script per elencare le stranezze innocue del parsing HTTP nei sistemi in test, da ignorare durante il fuzzing,
  • repl.py: l'interfaccia utente principale dell'HTTP Garden,
  • update.py: uno script per aggiornare gli hash dei commit in docker-compose.yml,
  • ...e qualche altro script non destinato agli utenti finali.

Target

Server HTTP

|-| | aiohttp | | apache_httpd | | apache_tomcat | | appweb | | aws_c_http | | cpp_httplib | | eclipse_grizzly | | eclipse_jetty | | fasthttp | | go_stdlib | | gunicorn | | h2o | | haproxy_fcgi | | hyper | | hypercorn | | ktor | | libevent | | libmicrohttpd | | libsoup | | lighttpd | | mongoose | | netty | | nginx | | node_stdlib | | openbsd_httpd | | openlitespeed | | openwrt_uhttpd | | protocol_http1 | | puma | | tornado | | | | | | | | | | | | |

Trasduttori HTTP

|-| | apache_httpd_proxy | | apache_traffic_server | | envoy | | go_stdlib_proxy | | h2o_proxy | | haproxy | | lighttpd_proxy | | nghttpx | | nginx_proxy | | openlitespeed_proxy | | pound | | squid | | varnish | | yahns_proxy |

Omissioni

Le seguenti sono le spiegazioni di alcune omissioni degne di nota dal Garden:

Risultati

Vedi TROPHIES.md per un elenco completo dei bug che il Garden ha trovato.

Scarica lo strumento
twisted
undertow
uvicorn
waitress
webrick
yahns
NomeMotivazione
Anything from MicrosoftMSRC ci ha detto che "l'HTTP smuggling non è considerato una vulnerabilità", e non sento alcun bisogno particolare di aiutare Microsoft.
unicornUsa lo stesso parser HTTP di yahns.
SwiftNIOUsa llhttp per il parsing HTTP, già coperto da node_stdlib.
BunUsa picohttpparser per il parsing HTTP, già coperto da h2o.
DenoUsa hyper per il parsing HTTP, già presente nel Garden.
DaphneUsa twisted per il parsing HTTP, già presente nel Garden.
pitchforkUsa lo stesso parser di yahns.
nghttpxUsa lhttp per il parsing HTTP, già coperto da node_stdlib.
CherootIgnora i nostri report.
CherryPyUsa cheroot per il parsing HTTP.
libhttpserverUsa libmicrohttpd per il parsing HTTP, già presente nel Garden.
WerkzeugUsa la stdlib di CPython per il parsing HTTP, già presente nel Garden.
CaddyUsa la stdlib di Go per il parsing HTTP, già presente nel Garden.
TengineUsa il parser HTTP di Nginx.
OpenRestyUsa il parser HTTP di Nginx.
Google Cloud Global External Application Load BalancerBasato su Envoy.
Google Cloud Regional External Application Load BalancerBasato su Envoy.
Phusion PassengerUsa llhttpd per il parsing HTTP, già coperto da node_stdlib.
passimUsa libsoup per il parsing HTTP, già presente nel Garden.
boaNon mantenuto.
UlfiusUsa libmicrohttpd, già presente nel Garden.
Vultr Load BalancerÈ semplicemente HAProxy, già presente nel Garden.
VMWare Avi Load BalancerÈ semplicemente Nginx, già presente nel Garden.
SanicUsa httptools, già coperto da Uvicorn.
CPython http.serverNon destinato all'uso in produzione.
openjdk_stdlibNon offre un canale coerente per la divulgazione delle vulnerabilità.
dart_stdlibHa ignorato le segnalazioni precedenti.
eventletLa libreria HTTP è solo un fork di quella nella stdlib di CPython.
uwsgiNon supporta i corpi dei messaggi in chunked.