Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
bbs — bbs ist ein Router für SOCKS- und HTTP-Proxys. Es stellt einen SOCKS5-Dienst (oder HTTP CONNECT) bereit und leitet eingehende Anfragen basierend auf dem Ziel der Anfrage an Proxys oder Proxy-Ketten weiter. Das Routing kann über ein PAC-Skript (sofern mit PAC-Unterstützung erstellt) oder über eine JSON-Datei konfiguriert werden. | Kitploit
Tools/GitHubGitHub/synacktiv/bbs
Web-Proxys & AbfangenNetzwerksicherheitPenetrationstestsDienstprogramme & FrameworksRed Teaming
GitHubsynacktiv/bbs

bbs

Repository anzeigen
9743vor 1 MonatVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →

Über

bbs ist ein Router für SOCKS- und HTTP-Proxys. Es stellt einen SOCKS5-Dienst (oder HTTP CONNECT) bereit und leitet eingehende Anfragen basierend auf dem Ziel der Anfrage an Proxys oder Proxy-Ketten weiter. Das Routing kann über ein PAC-Skript (sofern mit PAC-Unterstützung erstellt) oder über eine JSON-Datei konfiguriert werden.

Teilen

BBS

Das alte bbs finden Sie hier.

Beschreibung

bbs ist ein Router für SOCKS- und HTTP-Proxys. Es stellt SOCKS5-, HTTP- CONNECT- oder Portweiterleitungsdienste bereit und leitet eingehende Anfragen an Proxys oder Proxy-Ketten basierend auf dem Ziel der Anfrage weiter. Das Routing kann über ein PAC-Skript (falls mit PAC-Unterstützung gebaut) oder über eine JSON-Datei konfiguriert werden.

Installation

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

Um bbs mit PAC-Skript-Unterstützung zu installieren:

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

Hinweis: PAC basiert auf nicht geprüften Drittanbieter-Bibliotheken.

bbs-CLI

Die Python-CLI bbscli.py wird bereitgestellt, um die Konfiguration von bbs zu erleichtern und das manuelle Schreiben von JSON-Dateien zu vermeiden. Sie benötigt die Bibliothek pyparsing, die von Debian paketiert wird:

root@kitploit:~
apt install python3-pyparsing

Falls die Bibliothek von Ihrer Distribution nicht paketiert ist, kann sie mit pip installiert werden:

root@kitploit:~
pip install pyparsing

Konfiguration

Die Konfiguration erfolgt in einer JSON-Datei, die aus mehreren Abschnitten besteht:

  • Proxies: definiert alle von bbs verwendeten Upstream-Proxys
  • Chains: definiert die verschiedenen Ketten der zuvor definierten Proxys und deren Einstellungen
  • Routes: definiert die verschiedenen Routing-Tabellen
  • Servers: definiert die von bbs geöffneten Listener (SOCKS5, HTTP oder Portweiterleitung)
  • Hosts: definiert benutzerdefinierte Host-Auflösung (ähnlich wie /etc/hosts)

Der Pfad zur Konfigurationsdatei wird über das Argument -c <path> angegeben (Standard: ./bbs.json). bbs lädt Konfigurationsdateien bei SIGHUP neu; verwenden Sie kill -HUP <pid>, um neu zu laden.

Hier ist ein Beispiel für eine solche Konfiguration:

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"
  }
}

Proxys

Upstream-Proxys müssen im Abschnitt proxies als Map von Proxy-Strukturen deklariert werden. Die Map-Schlüssel sind frei wählbar, müssen aber mit denen in der Ketten-Definition übereinstimmen. Proxy-Strukturen sehen wie folgt aus:

  • connstring ist erforderlich und hat das Format protocol://host:port (protocol kann socks5 oder httpconnect/http sein)
  • user und pass sind optional

Für jeden deklarierten Proxy wird eine implizite Kette (siehe nächster Absatz) mit demselben Namen erstellt. Sie hat Standardparameter und besteht aus dem einzelnen zugehörigen Proxy. Wenn Sie nicht standardmäßige Parameter verwenden möchten, müssen Sie explizit eine Kette erstellen.

Ketten

Ketten müssen im Abschnitt chains als Map von Kettenstrukturen deklariert werden. Die Map-Schlüssel sind frei wählbar, müssen aber mit denen in der Routen-Definition übereinstimmen und dürfen nicht mit den Map-Schlüsseln des Abschnitts proxies identisch sein. Kettenstrukturen haben proxychains-ähnliche Parameter (vgl. https://github.com/rofl0r/proxychains-ng):

  • proxyDns: boolesch, optional, Standardwert true
  • tcpConnectTimeout: integer, optional, Standardwert 1000 (wird beim Verbinden von Sockets verwendet, entweder zum ersten Proxy der Kette oder direkt zum Ziel)
  • tcpReadTimeout: integer, optional, Standardwert 2000 (wird beim Lesen von Proxy-Handshake-Antworten auf verbundenen Sockets verwendet)
  • proxies: Liste von Zeichenketten, optional, Standardwert leere Liste

Der Schlüssel proxies einer chain muss ein Array von Proxy-Namen enthalten, die als Schlüssel im Abschnitt proxies deklariert sind. Wie im vorherigen Absatz erwähnt, wird für jeden im Abschnitt proxies deklarierten Proxy eine implizite Kette (siehe nächster Absatz) mit demselben Namen erstellt. Sie hat Standardparameter und ist aus dem einzelnen zugehörigen Proxy zusammengesetzt.

Routen

Der eingebaute Konfigurationsmodus für das Routing erfolgt über die Konfigurationsdatei. Er ordnet Adressen Kettennamen zu. Die Datei muss eine Map von Routing-Tabellen enthalten. Die Map-Schlüssel sind frei wählbar, müssen aber mit denen im Abschnitt servers übereinstimmen. Jede Routing-Tabelle enthält einen Schlüssel default, der die Standardroute darstellt, und einen Schlüssel blocks, der ein Array von Regelblöcken ist. Jeder Regelblock enthält einen comment, eine Reihe von rules und einen zugehörigen Kettennamen. Regeln werden ausgewertet: Für eine Adresse im Format host:port können sie true oder false sein. Für eine bestimmte Adresse werden die Blöcke in ihrer Deklarationsreihenfolge ausgewertet. Blöcke können durch Setzen des Felds disable auf true deaktiviert werden. Dies ermöglicht eine Art „Auskommentieren", was in JSON nicht möglich ist. Die Auswertung stoppt beim ersten Block, der true ergibt, und der zugehörige Kettenname wird zurückgegeben. Jeder geöffnete Server (aus dem Abschnitt servers) ist einer Routing-Tabelle aus der Konfiguration zugeordnet. Anfragen, die auf jedem Server eingehen, werden gemäß der passenden Routing-Tabelle weitergeleitet. Wenn alle Blöcke auf ausgewertet werden, wird die Standardroute verwendet. Wenn nicht definiert ist, werden Verbindungen standardmäßig verworfen.

Block-Felder:

  • comment (Zeichenkette)
  • rules (Rule oder RuleCombo)
  • route (Zeichenkette)
  • disable (bool)

Rule-Felder:

  • rule (Zeichenkette): Regeltyp, regexp, subnet.
  • variable (Zeichenkette): Variable für die Regexp-Auswertung, host, port oder addr (host:port).
  • content (Zeichenkette): Inhalt der Regel, abhängig vom Regeltyp (siehe unten).
  • negate (bool) [optional]: ob die Regel negiert werden soll.

RuleCombo-Felder:

  • rule1 (Rule oder RuleCombo): linker Operand.
  • op (Zeichenkette): Operator, AND, And, and, &, &&, OR, Or, or, |, ||.
  • rule2 (Rule oder RuleCombo): rechter Operand.

Regeltypen:

  • regexp: gleicht die in variable definierte Variable (host, port oder addr=host:port) mit dem Regexp in content ab.
  • subnet: prüft, ob sich der Host im in content definierten Subnetz befindet. Wenn der Host ein Domänenname und keine Subnetz-Adresse ist, gibt die Regel false zurück.

Die Regelblöcke aus dem Abschnitt routes oder die PAC-Funktion müssen deklarierte Kettennamen zurückgeben, keine Proxy-Namen. Wenn Sie einen einzelnen Proxy verwenden möchten, müssen Sie ihn in eine Kette einbinden. Der Name drop ist speziell und muss in dieser Konfiguration nicht deklariert werden. Wenn die PAC-Funktion oder ein Routing-Block drop als Kettennamen zurückgibt, wird die Verbindung verworfen.

Wenn bbs mit PAC-Unterstützung gebaut wurde und das Argument -pac auf eine PAC-Datei zeigt, werden die Routen in der Konfigurationsdatei nicht verwendet. Das PAC-Datei-Routing unterstützt keine mehrfachen Routing-Tabellen. Dieselbe PAC-Datei wird für jeden geöffneten Server verwendet.

Server

Die von bbs geöffneten Listener müssen im Abschnitt servers als Liste von Verbindungszeichenfolgen im Format protocol://bind_addr:bind_port:routing_table oder protocol://bind_addr:bind_port:chain:dest_addr:dest_port deklariert werden.

  • protocol kann http oder socks5 sein, wenn die routing_table angegeben ist
  • protocol kann fwd sein, wenn chain, dest_addr und dest_port angegeben sind
  • routing_table muss einer der im Abschnitt routes definierten Tabellen entsprechen
  • chain muss einer der im Abschnitt chains definierten Ketten entsprechen

Hosts

Eine benutzerdefinierte Host-Auflösung (ähnlich wie /etc/hosts) kann im Abschnitt hosts als Map von Zeichenketten konfiguriert werden. Die Map-Schlüssel entsprechen dem Hostnamen und die Werte der IP-Adresse, zu der der Host aufgelöst werden soll.

Es ist zu beachten, dass Map-Schlüssel auch IP-Adressen sein können. In diesem Fall wird die Schlüssel-IP-Adresse durch die Wert-IP-Adresse ersetzt. Ebenso können Map-Werte Hostnamen sein und ersetzen dann den entsprechenden Map-Schlüssel.

Falls definiert, erfolgen benutzerdefinierte Host-Auflösungen zu Beginn der Verbindungsphase, nachdem die Routing-Entscheidung getroffen wurde und vor jeder lokalen DNS-Auflösung (falls die Kette mit proxyDns=false konfiguriert ist) sowie vor dem Senden der Zieladresse an die verschiedenen Proxys der Kette.

PAC-Skript

Wenn bbs mit PAC-Unterstützung gebaut wurde, kann das Routing mit einem PAC-Skript anstelle einer JSON-Konfigurationsdatei konfiguriert werden. Dies erfordert jedoch die Verwendung einer nicht vertrauenswürdigen Go-Bibliothek. Der Pfad zur PAC-Datei muss mit -pac angegeben werden.

Das PAC-Skript muss die Funktion FindProxyForURL(url, host) definieren. Die von dieser Funktion zurückgegebenen Werte müssen den Namen der Ketten (nicht der Proxys) entsprechen, die in der JSON-Konfiguration deklariert sind.

Tool herunterladen
false
default