Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
http-garden — Marco de pruebas diferenciales para implementaciones HTTP | Kitploit
Herramientas/GitHubGitHub/narfindustries/http-garden
Análisis de VulnerabilidadesAnálisis Dinámico de Código (DAST)Seguridad WebFuzzing
GitHubnarfindustries/http-garden

http-garden

Marco de pruebas diferenciales para implementaciones HTTP

Ver Repositorio
941847hace 3 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

The HTTP Garden

The HTTP Garden es una colección de servidores y proxies HTTP configurados para ser componibles, junto con scripts para interactuar con ellos de una manera que facilita mucho la búsqueda de vulnerabilidades. Para ver algunas demostraciones interesantes de las vulnerabilidades que puedes encontrar con HTTP Garden, consulta nuestra charla en ShmooCon 2024.

Agradecimientos

Queremos agradecer a nuestros amigos de Galois, Trail of Bits, Narf Industries y Dartmouth College por hacer posible este proyecto.

Este material se basa en un trabajo respaldado por la Agencia de Proyectos de Investigación Avanzada de Defensa (DARPA) bajo el número de contrato HR0011-19-C-0076.

Cómo empezar

Dependencias

  1. HTTP Garden se ejecuta en Linux x86_64 y AArch64, y no ha sido probado en otras plataformas.
  2. Los servidores objetivo se compilan y ejecutan en contenedores Docker, por lo que necesitarás Docker.
  3. También necesitarás Python 3.12+ y los siguientes paquetes de Python, que puedes obtener desde PyPI (es decir, con pip) o desde el gestor de paquetes de tu sistema:
  • docker
Descargar herramienta
  • Para interactuar con Docker
  • pyyaml
    • Para analizar yaml
  • tqdm
    • Para barras de progreso
  • Si instalas los paquetes de Python con el gestor de paquetes de tu sistema, ten en cuenta que los nombres de los paquetes pueden necesitar el prefijo py3-, python3- o python-, dependiendo del sistema.

    Ejecución

    • Compila e inicia algunos servidores y proxies:
    root@kitploit:~
    ./garden.sh start --build gunicorn hyper nginx haproxy
    
    • Desde otra shell, inicia el repl:
    root@kitploit:~
    ./garden.sh repl
    
    • Envía una solicitud GET básica a través de HAProxy, luego envía el resultado a los servidores de origen Gunicorn, Hyper y Nginx, y muestra si sus interpretaciones coinciden:
    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   |    ✓
    

    Parece que todos coinciden. (Ten en cuenta que, aunque Nginx añadió las cabeceras content-length y content-type, el Garden es consciente de ello y no permite que esta discrepancia insignificante aparezca en la salida de grid).

    Probemos un payload que utiliza un final de línea LF simple en un cuerpo de mensaje fragmentado (chunked). Esto está prohibido en la especificación.

    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   |    ✓
    

    Bien, entonces Gunicorn respondió 400, Hyper no respondió y Nginx aceptó. Esto es una violación de la especificación por parte de los autores de Nginx que no les importa corregir.

    También habrás notado que, aunque Gunicorn y Hyper no tuvieron exactamente la misma respuesta, aparecían como coincidentes en la salida de grid anteriormente. Esto se debe a que sus respuestas son esencialmente equivalentes (un rechazo del mensaje), y el Garden tiene esto en cuenta.

    Estructura de directorios

    images

    El directorio images contiene un subdirectorio para cada servidor HTTP y transductor del Garden. Cada objetivo tiene su propia imagen Docker. Todos los programas se compilan desde el código fuente cuando es posible. Para poder compilar fácilmente múltiples versiones de cada objetivo, todos los objetivos están parametrizados con una URL de repositorio (APP_REPO), nombre de rama (APP_BRANCH) y hash de commit (APP_VERSION).

    tools

    El directorio tools contiene los scripts que se utilizan para interactuar con los servidores. Dentro de él encontrarás

    • probe_quirks.py: Un script para enumerar las peculiaridades benignas de análisis HTTP en los sistemas bajo prueba que deben ignorarse durante el fuzzing,
    • repl.py: La interfaz de usuario principal de HTTP Garden,
    • update.py: Un script para actualizar los hashes de commit en docker-compose.yml,
    • ...y algunos scripts más que no están orientados al usuario.

    Objetivos

    Servidores 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 | | twisted | | undertow | | uvicorn | | waitress | | webrick | | yahns |

    Transductores 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 |

    Omisiones

    Las siguientes son explicaciones de algunas omisiones notables del Garden:

    NombreJustificación
    Cualquier cosa de MicrosoftMSRC nos dijo que "el contrabando HTTP no se considera una vulnerabilidad", y no siento ninguna necesidad particular de ayudar a Microsoft.
    unicornUtiliza el mismo analizador HTTP que yahns.
    SwiftNIOUtiliza llhttp para el análisis HTTP, que ya está cubierto por node_stdlib.
    BunUtiliza picohttpparser para el análisis HTTP, que ya está cubierto por h2o.
    DenoUtiliza hyper para el análisis HTTP, que ya está en el Garden.
    DaphneUtiliza twisted para el análisis HTTP, que ya está en el Garden.
    pitchforkUtiliza el mismo analizador que yahns.
    nghttpxUtiliza lhttp para el análisis HTTP, que ya está cubierto por node_stdlib.
    CherootIgnora nuestros informes.
    CherryPyUtiliza cheroot para el análisis HTTP.
    libhttpserverUtiliza libmicrohttpd para el análisis HTTP, que ya está en el Garden.
    WerkzeugUtiliza la stdlib de CPython para el análisis HTTP, que ya está en el Garden.

    Resultados

    Consulta TROPHIES.md para obtener una lista completa de los errores que el Garden ha encontrado.

    Caddy
    Utiliza la stdlib de Go para el análisis HTTP, que ya está en el Garden.
    TengineUtiliza el analizador HTTP de Nginx.
    OpenRestyUtiliza el analizador HTTP de Nginx.
    Google Cloud Global External Application Load BalancerBasado en Envoy.
    Google Cloud Regional External Application Load BalancerBasado en Envoy.
    Phusion PassengerUtiliza llhttpd para el análisis HTTP, que ya está cubierto por node_stdlib.
    passimUtiliza libsoup para el análisis HTTP, que ya está en el Garden.
    boaSin mantenimiento.
    UlfiusUtiliza libmicrohttpd, que ya está en el Garden.
    Vultr Load BalancerEs simplemente HAProxy, que ya está en el Garden.
    VMWare Avi Load BalancerEs simplemente Nginx, que ya está en el Garden.
    SanicUtiliza httptools, que ya está cubierto por Uvicorn.
    CPython http.serverNo está pensado para uso en producción.
    openjdk_stdlibNo proporciona un canal coherente de divulgación de vulnerabilidades.
    dart_stdlibIgnoró informes anteriores.
    eventletLa biblioteca HTTP es solo un fork de la de la stdlib de CPython.
    uwsgiNo soporta cuerpos de mensaje fragmentados (chunked).