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
bbs — bbs is a router for SOCKS and HTTP proxies. It exposes a SOCKS5 (or HTTP CONNECT) service and forwards incoming requests to proxies or chains of proxies based on the request's target. Routing can be configured with a PAC script (if built with PAC support), or through a JSON file. | Kitploit
Herramientas/GitHubGitHub/synacktiv/bbs
Web Proxies & InterceptionNetwork SecurityPenetration TestingUtilities & FrameworksRed Teaming
GitHubsynacktiv/bbs

bbs

bbs is a router for SOCKS and HTTP proxies. It exposes a SOCKS5 (or HTTP CONNECT) service and forwards incoming requests to proxies or chains of proxies based on the request's target. Routing can be configured with a PAC script (if built with PAC support), or through a JSON file.

Ver Repositorio
974hace 24 díasRevisado 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

BBS

El antiguo bbs se puede encontrar aquí

Descripción

bbs es un enrutador para proxies SOCKS y HTTP. Expone servicios SOCKS5, HTTP CONNECT o redirección de puertos y reenvía las peticiones entrantes a proxies o cadenas de proxies según el destino de la petición. El enrutamiento se puede configurar con un script PAC (si está compilado con soporte PAC), o mediante un archivo JSON.

Instalación

root@kitploit:~
go install github.com/synacktiv/bbs@master

Para instalar bbs con soporte de scripts PAC:

root@kitploit:~
go install -tags pac github.com/synacktiv/bbs@master

Nota: PAC depende de librerías de terceros no auditadas.

CLI de bbs

El CLI de Python bbscli.py se proporciona para facilitar la configuración de bbs y evitar escribir archivos JSON manualmente. Requiere la librería pyparsing, que está empaquetada por Debian:

root@kitploit:~
apt install python3-pyparsing

Si la librería no está empaquetada por su distribución, se puede instalar usando pip:

root@kitploit:~
pip install pyparsing

Configuración

La configuración se realiza en un único archivo JSON compuesto por varias secciones:

  • Proxies: define todos los proxies ascendentes utilizados por bbs
  • Chains: define las diferentes cadenas de los proxies definidos previamente, y sus parámetros
  • Routes: define las diferentes tablas de enrutamiento
  • Servers: define los listeners (SOCKS5, HTTP o redirección de puertos) abiertos por bbs
  • Hosts: define la resolución personalizada de hosts (a la manera de /etc/hosts)

La ruta del archivo de configuración se proporciona mediante el argumento -c <path> (por defecto ./bbs.json). bbs recarga los archivos de configuración al recibir SIGHUP, use kill -HUP <pid> para recargar.

A continuación se muestra un ejemplo de dicha configuración:

root@kitploit:~
{
  "proxies": {
    "proxy1": {
      "connstring": "socks5://127.0.0.1:1337",
      "user": "user",
      "pass": "s3cr3t"
    },
    "proxy2": {
      "connstring": "http://127.0.0.1:1338"
    }
  },
  "chains": {
    "chain1": {
      "proxyDns": true,
      "tcpConnectTimeout": 1000,
      "tcpReadTimeout": 2000,
      "proxies": [
        "proxy1",
        "proxy2"
      ]
    },
    "direct": {
      "proxies": []
    }
  },
  "routes": {
    "table1": {
      "default": "direct",
      "blocks": [
        {
          "comment": "Block1 comment",
          "rules": {
            "rule": "regexp",
            "variable": "host",
            "content": "me\\.gandi\\.net"
          },
          "route": "chain1"
        },
        {
          "comment": "Route non web traffic towards 10.35.0.0/16 through proxy2",
          "rules": {
            "rule1": {
              "rule": "subnet",
              "content": "10.35.0.0/16"
            },
            "op": "AND",
            "rule2": {
              "rule": "regexp",
              "variable": "port",
              "content": "^(80|443)$",
              "negate": true
            }
          },
          "route": "proxy2"
        },
        {
          "comment": "Drop traffic to 445",
          "rules": {
            "rule": "regexp",
            "variable": "port",
            "content": "^445$"
          },
          "route": "drop"
        },
        {
          "comment": "Route *.corp.local through chain1",
          "rules": {
            "rule": "regexp",
            "variable": "host",
            "content": "(?i)^(.*\\.)?corp\\.local$"
          },
          "route": "chain1",
          "disable": true
        }
      ]
    },
    "table2": {
      "default": "drop",
      "blocks": [
        {
          "comment": "Route *.corp.local through chain2",
          "rules": {
            "rule": "regexp",
            "variable": "host",
            "content": "(?i)^(.*\\.)?corp\\.local$"
          },
          "route": "chain2"
        }     
      ]
    }
  },
  "servers": [
    "socks5://127.0.0.1:1081:table1",
    "http://127.0.0.1:1080:table2",
    "fwd://127.0.0.1:4445:chain1:10.0.0.1:445"
  ],
  "hosts": {
    "host1": "1.1.1.1",
    "host2": "10.0.0.1",
    "host3": "modified.host3",
    "10.1.1.4": "10.1.1.5"
  }
}

Proxies

Los proxies ascendentes deben declararse en la sección proxies como un mapa de estructuras de proxy. Las claves del mapa se eligen libremente pero deben coincidir con las utilizadas en la definición de cadenas. Las estructuras de proxy son así:

  • connstring es obligatoria con el formato protocol://host:port (protocol puede ser socks5 o httpconnect/http)
  • user y pass son opcionales

Por cada proxy declarado, se crea una cadena implícita (ver siguiente párrafo) con el mismo nombre. Tiene los parámetros por defecto y está compuesta por el único proxy asociado. Si se desea usar parámetros no predeterminados, se debe crear explícitamente una cadena.

Chains

Las cadenas deben declararse en la sección chains como un mapa de estructuras de cadena. Las claves del mapa se eligen libremente pero deben coincidir con las utilizadas en la definición de rutas, y deben ser diferentes de las claves del mapa de la sección proxies. Las estructuras de cadena tienen parámetros similares a proxychains (cf. https://github.com/rofl0r/proxychains-ng):

  • proxyDns: booleano, opcional, por defecto true
  • tcpConnectTimeout: entero, opcional, por defecto 1000 (se usa al conectar sockets, ya sea al primer proxy de la cadena o directamente al destino)
  • tcpReadTimeout: entero, opcional, por defecto 2000 (se usa al leer las respuestas de handshake de los proxies en los sockets conectados)
  • proxies: lista de cadenas, opcional, por defecto lista vacía

La clave proxies de una chain debe contener un array de nombres de proxies declarados como claves en la sección proxies. Como se mencionó en el párrafo anterior, por cada proxy declarado en la sección proxies, se crea una cadena implícita (ver siguiente párrafo) con el mismo nombre. Tiene los parámetros por defecto y está compuesta por el único proxy asociado.

Routes

El modo de configuración integrado para el enrutamiento es mediante el archivo de configuración. Asocia direcciones con nombres de cadenas. El archivo debe contener un mapa de tablas de enrutamiento. Las claves del mapa se eligen libremente pero deben coincidir con las utilizadas en la sección servers. Cada tabla de enrutamiento contiene una clave default que representa la ruta por defecto y una clave blocks que es un array de bloques de reglas. Cada bloque de reglas contiene un comment, un conjunto de rules y un nombre de cadena asociado. Las reglas se evalúan: dada una dirección en el formato host:port, pueden ser true o false. Para una dirección dada, los bloques se evalúan en su orden de declaración. Los bloques se pueden deshabilitar estableciendo el campo disable a true. Esto permite una forma de "comentado", que no es posible en JSON. La evaluación se detiene en el primer bloque que sea true y se devuelve el nombre de cadena asociado. Cada servidor abierto (de la sección servers) está asociado con una tabla de enrutamiento de la configuración. Las peticiones recibidas en cada servidor se enrutan según la tabla de enrutamiento correspondiente. Si todos los bloques se evalúan como , se utiliza la ruta por defecto. Si no está definido, las conexiones se descartan por defecto.

Campos de un bloque:

  • comment (cadena)
  • rules (Rule o RuleCombo)
  • route (cadena)
  • disable (booleano)

Campos de una regla:

  • rule (cadena): tipo de regla, regexp, subnet.
  • variable (cadena): variable para la evaluación de la regexp, host, port o addr (host:port).
  • content (cadena): contenido de la regla, depende del tipo de regla (ver más abajo).
  • negate (booleano) [opcional]: indica si se debe negar la regla.

Campos de RuleCombo:

  • rule1 (Rule o RuleCombo): operando izquierdo.
  • op (cadena): operador, AND, And, and, &, &&, OR, Or, or, |, ||.
  • rule2 (Rule o RuleCombo): operando derecho.

Tipos de reglas:

  • regexp: compara la variable definida en variable (host, port o addr=host:port) con la regexp en content.
  • subnet: comprueba si el host está en la subred definida en content. Si el host es un nombre de dominio y no una dirección de subred, la regla devuelve false.

Los bloques de reglas de la sección routes o la función PAC deben devolver nombres de cadenas declaradas, no nombres de proxies. Si se desea usar un solo proxy, se debe envolver en una cadena. El nombre drop es especial y no necesita declararse en esta configuración. Si la función PAC o un bloque de enrutamiento devuelve drop como nombre de cadena, entonces la conexión se descarta.

Si bbs está compilado con soporte PAC y el argumento -pac apunta a un archivo PAC, las rutas definidas en el archivo de configuración no se utilizarán. El enrutamiento mediante archivo PAC no admite múltiples tablas de enrutamiento. Se usará el mismo archivo PAC para cada servidor abierto.

Servers

Los listeners abiertos por bbs deben declararse en la sección servers como una lista de cadenas de conexión con el formato protocol://bind_addr:bind_port:routing_table o protocol://bind_addr:bind_port:chain:dest_addr:dest_port.

  • protocol puede ser http o socks5 si se proporciona routing_table
  • protocol puede ser fwd si se proporcionan chain, dest_addr y dest_port
  • routing_table debe coincidir con una de las tablas definidas en la sección routes
  • chain debe coincidir con una de las cadenas definidas en la sección chains

Hosts

La resolución personalizada de hosts (similar a /etc/hosts) se puede configurar en la sección hosts como un mapa de cadenas. Las claves del mapa corresponden al nombre de host y los valores, a la dirección IP a la que debe resolverse el host.

Cabe señalar que las claves del mapa también pueden ser direcciones IP. En ese caso, la dirección IP de la clave será reemplazada por la dirección IP del valor. De manera similar, los valores del mapa pueden ser nombres de host y reemplazarán a la clave correspondiente.

Si está definida, la resolución personalizada de hosts ocurre al comienzo de la fase de conexión, después de tomar la decisión de enrutamiento y antes de cualquier resolución DNS local (si la cadena está configurada con proxyDns=false) y antes de enviar la dirección de destino a los distintos proxies de la cadena.

Script PAC

Si bbs está compilado con soporte PAC, el enrutamiento se puede configurar con un script PAC en lugar de un archivo de configuración JSON. Sin embargo, esto requiere usar una librería Go no confiable. La ruta del archivo PAC debe proporcionarse con -pac.

El script PAC debe definir la función FindProxyForURL(url, host). Los valores devueltos por esta función deben coincidir con los nombres de las cadenas (no de los proxies) declaradas en la configuración JSON.

Descargar herramienta
false
default