
BinProxy — это прокси для произвольных TCP-соединений. Вы можете определять пользовательские форматы сообщений с помощью гема BinData.
BinProxy — это прокси для произвольных TCP-соединений. Вы можете определять собственные форматы сообщений с помощью гема BinData.
sudo apt install build-essential ruby-dev.openssl для использования --tls без указания сертификата/ключа.gem install binproxy
Возможно, потребуется использовать sudo в зависимости от вашей установки 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
Чтобы собрать и установить gem-пакет:
gem build binproxy.gemspec
# Again, you may need sudo here
gem install binproxy-1.0.0.gem
Сообщения об ошибках при установке приветствуются!
binproxy без аргументов.Полный список параметров можно получить с помощью --help, но вкратце:
binproxy -c <class> [<local-host>] <local-port> <remote-host> <remote-port>
Если опустить аргумент -c, будет показан простой hex-дамп.
Если опустить локальный хост, binproxy предполагает localhost.
С опциями --socks-proxy или --http-proxy удалённый хост и порт определяются динамически и не должны указываться явно.
# 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
По умолчанию прокси использует встроенный класс RawMessage, который просто выдаёт hex-дамп каждого сообщения (при условии соответствия 1:1 между сообщениями и TCP-пакетами).
Вы можете просматривать разобранную информацию протокола, указав подкласс† BinData::Record с аргументом командной строки --class.
Возможно, вы также захотите определить в своём классе следующее:
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
† Технически подойдёт любой подкласс BinData::Base.
По умолчанию BinProxy перенаправляет весь трафик на статический вышестоящий хост и порт. Его также можно настроить как SOCKS-прокси (v4 или v4a) или HTTP-прокси с помощью флагов --socks-proxy и --http-proxy соответственно.
Примечание: В настоящее время HTTP-прокси поддерживает только соединения, туннелированные с помощью глагола HTTP CONNECT; он не может проксировать обычные HTTP-запросы GET, POST и т.д. На практике это означает, что HTTPS-трафик будет работать, а обычный HTTP-трафик — нет, если только клиент не поддерживает флаг принудительного туннелирования, например curl -p.
Используйте флаг --tls, чтобы расшифровать TLS перед обработкой сообщений. По умолчанию BinProxy генерирует самоподписанный сертификат. Вы можете указать PEM-файлы, содержащие сертификат и ключ, с помощью --tls-cert и --tls-key. (Если вы клонировали репозиторий с исходным кодом, используйте rake makecert[example.com] для генерации статического CA и сертификата с соответствующим именем хоста.)
Смотрите также файл TODO для случайных идей и пожеланий.
Основная функциональность TCP-прокси BinProxy берёт начало в специализированном прокси, написанном Шоном Девлином. Расти Берчфилд создал HTML-интерфейс для этого прокси. Хотя код изменился настолько, что их уже нельзя винить в текущих ошибках, BinProxy, вероятно, не существовал бы без их работы.