
BinProxy é um proxy para conexões TCP arbitrárias. Você pode definir formatos de mensagem personalizados usando a gem BinData.
BinProxy é um proxy para conexões TCP arbitrárias. Você pode definir formatos de mensagem personalizados usando a gem BinData.
sudo apt install build-essential ruby-dev deve resolver.openssl para --tls sem um certificado/chave explícito.gem install binproxy
Pode ser necessário usar sudo, dependendo da sua instalação do 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 o pacote gem:
gem build binproxy.gemspec
# Again, you may need sudo here
gem install binproxy-1.0.0.gem
Relatos de bugs sobre problemas de instalação são bem-vindos!
binproxy sem argumentos.Consulte --help para a lista completa, mas resumindo:
binproxy -c <class> [<local-host>] <local-port> <remote-host> <remote-port>
Se você omitir o argumento -c, um simples hex dump é mostrado.
Se você omitir o host local, binproxy assume localhost.
Com as opções --socks-proxy ou --http-proxy, o host e a porta remotos são determinados dinamicamente e não devem ser especificados.
# 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 padrão, o proxy usa a classe RawMessage embutida, que apenas fornece um hexdump de cada mensagem (assumindo 1:1 entre mensagens e pacotes TCP)
Você pode visualizar informações de protocolo analisado especificando uma subclasse BinData::Record† com o argumento de linha de comando --class.
Você também pode desejar definir o seguinte em sua classe:
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
† Tecnicamente, qualquer subclasse de BinData::Base funcionará.
Por padrão, o BinProxy retransmite todo o tráfego para um host e porta upstream estáticos. Ele também pode ser configurado para atuar como um proxy SOCKS (v4 ou v4a) ou HTTP com as flags --socks-proxy e --http-proxy, respectivamente.
Nota: Atualmente, o proxy HTTP suporta apenas conexões tuneladas com o verbo HTTP CONNNECT; ele não pode fazer proxy de requisições HTTP puras GET, POST, etc. Na prática, isso significa que o tráfego HTTPS funcionará, mas o tráfego HTTP simples não, a menos que o cliente suporte uma flag para forçar o tunelamento, como curl -p.
Use a flag --tls para desembrulhar a criptografia TLS antes de processar mensagens. Por padrão, o BinProxy gerará um certificado autoassinado. Você pode especificar arquivos PEM contendo um certificado e chave com --tls-cert e --tls-key. (Se você clonou o repositório fonte, use rake makecert[example.com] para gerar uma CA estática e um certificado com o nome de host apropriado.)
Veja também o arquivo TODO para ideias aleatórias e itens desejados.
A funcionalidade central de proxy TCP do BinProxy originou-se de um proxy de propósito especial escrito por Sean Devlin. Rusty Burchfield contribuiu com a interface HTML para esse proxy. Embora o código tenha mudado o suficiente para que eles não possam mais ser responsabilizados por quaisquer bugs atuais, o BinProxy provavelmente não existiria sem o trabalho de ambos.