
BinProxy es un proxy para conexiones TCP arbitrarias. Puede definir formatos de mensajes personalizados usando la gema BinData.
BinProxy es un proxy para conexiones TCP arbitrarias. Puede definir formatos de mensaje personalizados usando la gema BinData.
sudo apt install build-essential ruby-dev debería ser suficiente.openssl para --tls sin un certificado/clave explícito.gem install binproxy
Puede que necesites usar sudo, dependiendo de tu instalación de Ruby.
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
Para construir e instalar el paquete gem:
gem build binproxy.gemspec
# Again, you may need sudo here
gem install binproxy-1.0.0.gem
¡Los informes de errores sobre problemas de instalación son bienvenidos!
binproxy sin argumentos.Consulta --help para la lista completa, pero en resumen:
binproxy -c <class> [<local-host>] <local-port> <remote-host> <remote-port>
Si omites el argumento -c, se muestra un volcado hexadecimal simple.
Si omites el host local, binproxy asume localhost.
Con las opciones --socks-proxy o --http-proxy, el host y puerto remotos se determinan dinámicamente y no deben especificarse.
# 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
Por defecto, el proxy utiliza la clase incorporada RawMessage, que simplemente te da un volcado hexadecimal de cada mensaje (asumiendo una relación 1:1 entre mensajes y paquetes TCP).
Puedes ver la información del protocolo analizado especificando una subclase de BinData::Record† con el argumento de línea de comandos --class.
También puedes definir lo siguiente en tu clase:
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
† Técnicamente, cualquier subclase de BinData::Base funcionará.
Por defecto, BinProxy retransmite todo el tráfico a un host y puerto ascendente estático. También se puede configurar para actuar como un proxy SOCKS (v4 o v4a) o HTTP con las banderas --socks-proxy y --http-proxy, respectivamente.
Nota: Actualmente, el proxy HTTP solo soporta conexiones tunelizadas con el verbo HTTP CONNNECT; no puede proxyizar solicitudes HTTP sin procesar como GET, POST, etc. En la práctica, esto significa que el tráfico HTTPS funcionará, pero el tráfico HTTP simple no, a menos que el cliente soporte una bandera para forzar el túnel, como curl -p.
Usa la bandera --tls para desenvolver el cifrado TLS antes de procesar los mensajes. Por defecto, BinProxy generará un certificado autofirmado. Puedes especificar archivos PEM que contengan un certificado y una clave con --tls-cert y --tls-key. (Si has clonado el repositorio fuente, usa rake makecert[example.com] para generar una CA estática y un certificado con el nombre de host apropiado).
Consulta también el archivo TODO para ideas aleatorias y elementos deseados.
La funcionalidad principal del proxy TCP de BinProxy se originó en un proxy de propósito especial escrito por Sean Devlin. Rusty Burchfield contribuyó con la interfaz de usuario HTML para ese proxy. Aunque el código ha cambiado lo suficiente como para que ya no se les pueda culpar de los errores actuales, es probable que BinProxy no existiría sin el trabajo de ambos.