
BinProxy ist ein Proxy für beliebige TCP-Verbindungen. Sie können benutzerdefinierte Nachrichtenformate mit dem BinData-Gem definieren.
BinProxy ist ein Proxy für beliebige TCP-Verbindungen. Sie können benutzerdefinierte Nachrichtenformate mit dem BinData Gem definieren.
sudo apt install build-essential ruby-dev ausreichen.openssl‑Binärdatei für --tls ohne explizites Zertifikat/Schlüssel.gem install binproxy
Je nach Ihrer Ruby‑Installation müssen Sie möglicherweise sudo verwenden.
git clone https://github.com/nccgroup/BinProxy.git binproxy
cd binproxy
# Install ruby dependencies.
# Depending on your setup, one or both of these may require sudo.
gem install bundler && bundle
# The UI is built with a webpack/babel toolchain:
(cd ui && npm install) \
&& rake build-ui
# Confirm that everything works
# run.sh sets up the environment and passes all args to binproxy
./run.sh --help
Um das Gem‑Paket zu erstellen und zu installieren:
gem build binproxy.gemspec
# Again, you may need sudo here
gem install binproxy-1.0.0.gem
Fehlerberichte zu Installationsproblemen sind willkommen!
binproxy ohne Argumente aus.Siehe --help für die vollständige Liste, aber kurz gefasst:
binproxy -c <class> [<local-host>] <local-port> <remote-host> <remote-port>
Wenn Sie das -c‑Argument weglassen, wird ein einfacher Hex‑Dump angezeigt.
Wenn Sie den lokalen Host weglassen, nimmt binproxy localhost an.
Mit den Optionen --socks-proxy oder --http-proxy werden der entfernte Host und Port dynamisch bestimmt und sollten nicht angegeben werden.
# Proxy from localhost:9000 -> example.com:9000
binproxy localhost 9000 example.com 9000
# Act as a SOCKS proxy on localhost:1080
# MITM and unwrap TLS on the proxied traffic, using a self-signed cert and key
binproxy -S --tls 1080
# "Poor substitute for Burp" mode:
#
# HTTP proxy; MITM TLS w/ pre-generated cert; simple header parsing
# Note: this will only work on HTTPS traffic, not plain HTTP!
# If you're working with the source repo, you generate the certs with:
# rake makecert[example.com]
# And then import certs/ca-cert.pem into your browser or OS's trust store.
binproxy -H --tls \
--tls-cert certs/example.com-cert.pem \
--tls-key certs/example.com-key.pem \
--class-name DumbHttp::Message \
localhost 8080
Standardmäßig verwendet der Proxy die integrierte RawMessage‑Klasse, die Ihnen nur einen Hex‑Dump jeder Nachricht liefert (unter der Annahme einer 1:1-Beziehung zwischen Nachrichten und TCP‑Paketen).
Sie können geparste Protokollinformationen anzeigen, indem Sie eine BinData::Record‑Unterklasse mit dem Befehlszeilenargument --class angeben.
Sie können auch Folgendes in Ihrer Klasse definieren:
def summary
# return a single-line description of this record
end
# currently supported options are
# - nil : use default display
# - "anon" : for structs, show contents directly
# - "hex" : for numbers, display as 0x1234ABCD
# - "hexdump" : for strings, display like `hexdump -C`
default_parameter display_as: "..."
# TODO: document state stuff
def self.initial_state
end
def current_state
end
def update_state
end
† Technisch gesehen funktioniert jede Unterklasse von BinData::Base.
Standardmäßig leitet BinProxy den gesamten Verkehr an einen statischen vorgelagerten Host und Port weiter. Es kann auch so konfiguriert werden, dass es als SOCKS‑ (v4 oder v4a) oder HTTP‑Proxy mit den Flags --socks-proxy bzw. --http-proxy fungiert.
Hinweis: Derzeit unterstützt der HTTP‑Proxy nur Verbindungen, die mit dem HTTP‑CONNECT‑Verb getunnelt werden; er kann keine rohen HTTP‑GET‑, POST‑ usw. Anfragen proxieren. In der Praxis bedeutet dies, dass HTTPS‑Verkehr funktioniert, aber einfacher HTTP‑Verkehr nicht, es sei denn, der Client unterstützt ein Flag zum Erzwingen des Tunnelns, wie curl -p.
Verwenden Sie das Flag --tls, um die TLS‑Verschlüsselung vor der Verarbeitung von Nachrichten zu entfernen. Standardmäßig generiert BinProxy ein selbstsigniertes Zertifikat. Sie können PEM‑Dateien mit einem Zertifikat und Schlüssel mit --tls-cert und --tls-key angeben. (Wenn Sie das Quell‑Repo geklont haben, verwenden Sie rake makecert[example.com], um eine statische CA und ein Zertifikat mit dem entsprechenden Hostnamen zu generieren.)
Siehe auch die TODO‑Datei für zufällige Ideen und Wunschliste.
Die zentrale TCP‑Proxy‑Funktionalität von BinProxy stammt aus einem speziellen Proxy, der von Sean Devlin geschrieben wurde. Rusty Burchfield hat das HTML‑UI für diesen Proxy beigesteuert. Obwohl sich genügend Code geändert hat, dass sie nicht mehr für aktuelle Fehler verantwortlich gemacht werden können, würde BinProxy wahrscheinlich ohne die Arbeit beider nicht existieren.