
httpgrep v4.6
Escáner HTTP(S) asíncrono que busca cadenas o expresiones regulares en los cuerpos y cabeceras de las respuestas en hosts, puertos, rangos CIDR y vhosts con certificados TLS.
Descripción
Una herramienta Python rápida y asíncrona que escanea servidores HTTP(S) y busca cadenas o patrones regex en cuerpos y cabeceras de respuestas HTTP.
Acepta hosts individuales, URLs, rangos CIDR, rangos IP o archivos; escanea múltiples puertos por objetivo (único, listas separadas por comas o rangos, auto-detectando TLS o plano por puerto); puede extraer y escanear (v)hosts basados en nombre directamente de los certificados TLS; transmite las coincidencias en vivo al terminal; y puede escribir los resultados en archivos de registro de texto, CSV o JSONL.
Está diseñado para escaneos grandes: un núcleo asíncrono impulsa miles de conexiones concurrentes, un pre-vuelo TCP descarta puertos muertos de forma económica, los tiempos de espera por host y globales evitan que se cuelgue en objetivos lentos/muertos, y una ejecución interrumpida puede reanudarse.
Requisitos
- Python 3.11+ en un sistema POSIX (Linux, *BSD, macOS - usa
termiosy el manejo de señales Unix de asyncio) - httpx -
pip install -r requirements.txt(opip install httpx) - opcionales, se usan automáticamente si están presentes:
uvloop(bucle de eventos más rápido),aiodns(dns no bloqueante para-r),h2(HTTP/2 para-2),httpx[socks]/ socksio (proxies SOCKS)
httpgrep es un único script autocontenido - simplemente ejecute ./httpgrep.py.
Uso
$ httpgrep -H
__ __ __
/ /_ / /_/ /_____ ____ _________ ____
/ __ \/ __/ __/ __ \/ __ `/ ___/ _ \/ __ \
/ / / / /_/ /_/ /_/ / /_/ / / / __/ /_/ /
/_/ /_/\__/\__/ .___/\__, /_/ \___/ .___/
/_/ /____/ /_/
--== [ by nullsecurity.net ] ==--
uso
httpgrep -h <arg> -s <arg> [opts] | <misc>
opciones de objetivo
-h <hosts|archivo> - host/url único o rango de hosts-/cidr o archivo que
contenga hosts o archivo que contenga URLs, ej.: foobar.net,
192.168.0.1-192.168.0.254, 192.168.0.0/24, /tmp/hosts.txt
también funciona una lista de hosts separada por comas, ej.:
1.2.3.4,foo.net,10.0.0.0/24
NOTA: los hosts también pueden contener ':<puertos>' en la
línea de comandos o en el archivo, donde <puertos> es un
único puerto, lista separada por comas o rango, ej.:
foo.net:8080, foo.net:80,443, 10.0.0.1:1-1024
-p <puertos|archivo> - puerto(s) a los que conectarse: un único puerto, lista
separada por comas, rango, o un archivo con una
especificación por línea, ej.: 80, 80,443,8080, 8000-8100,
/tmp/ports.txt
(por defecto: 80, o 443 cuando se da -t)
-t - forzar TLS/SSL en todos los puertos. por defecto el esquema
se auto-detecta por puerto (http plano, cambiando a TLS si
el puerto lo habla)
-u <URI|archivo> - URI o URIs separadas por comas o archivo con URIs (una por
línea) donde buscar las cadenas dadas, ej.: /foobar/,
/foo.html, /admin,/login, /tmp/paths.txt (por defecto: /)
-r - mostrar el nombre de reverse-dns (PTR) de los IPv4
escaneados como etiqueta; la ip sigue siendo el objetivo
del escaneo (sin desvío de alcance). no bloqueante con el
paquete aiodns
opciones http
-X <método> - método de petición HTTP a usar, cualquier mayúscula/
minúscula (por defecto: get). use '?' para listar los
métodos disponibles.
-a <user:pass> - credenciales de autenticación http (formato: 'user:pass')
-U <UA> - establecer User-Agent personalizado (por defecto: último
ms edge, windows)
-A - usar user-agent aleatorio por petición
-R <cabeceras> - establecer cabeceras personalizadas (formato:
'foo=bar;lol=lulz;...')
-C <cookies> - establecer cookies (formato: 'foo=bar;lol=lulz;...')
-F - no seguir redirecciones HTTP
-L <num> - máximo de redirecciones a seguir (por defecto: 10; se
ignora con -F)
-E - verificar certificados TLS/SSL (por defecto: sin
verificación)
-P <proxy> - usar proxy (formato: '[http|https|socks4|socks5]://host:port')
(socks necesita el paquete 'httpx[socks]' / socksio)
-f <códigos> - solo informar de respuestas con los códigos de estado HTTP
dados, ej.: '200', '200,301,302'
-e <códigos> - excluir respuestas con los códigos de estado HTTP dados,
ej.: '404', '403,404,500'
-2 - probar HTTP/2 (negociado por ALPN en TLS, retrocede a 1.1;
http plano permanece en 1.1). necesita el paquete 'h2'
opciones de búsqueda
-s <cadena|archivo> - una sola cadena/regex o múltiples cadenas/regex en un
archivo para encontrar en cuerpos y cabeceras de respuestas
HTTP (ver -w), ej.: 'tomcat 8', '/tmp/igot0daysforthese.txt'
-S <cadena|archivo> - invertir (grep -v): descartar TODAS las coincidencias de
una respuesta si esta cadena/regex (o archivo) aparece en
cualquier parte de su cuerpo o cabeceras, ej. para filtrar
páginas dinámicas de error / 404
-w <dónde> - dónde buscar: headers, body, o headers,body
(por defecto: headers,body)
-b <bytes> - número de bytes de contexto a mostrar desde una
coincidencia en el cuerpo (por defecto: 64)
-m <tamaño> - cuerpo máximo a leer + buscar; sufijo b/kb/mb, sin sufijo =
kb, ej.: 512, 1mb, 262144b (por defecto: 256kb)
-i - usar búsqueda sin distinción de mayúsculas/minúsculas
-I - usar inversión sin distinción de mayúsculas/minúsculas
(para -S)
opciones de escaneo