web-dev-qa-db-ja.com

完全に透過的なプロキシ

デフォルトでは、mitmproxyはサーバー側の接続に独自のローカルIPアドレスを使用します。代わりに、サーバー側の接続にクライアントのIPアドレスを使用するmitmproxyが必要です。

これを機能させるために、次の構成が提供されています。

CLIENT_NET=192.168.1.0/24
TABLE_ID=100
MARK=1

echo "$TABLE_ID     mitmproxy" >> /etc/iproute2/rt_tables
iptables -t mangle -A PREROUTING -d $CLIENT_NET -j MARK --set-mark $MARK
iptables -t nat \
    -A PREROUTING -p tcp -s $CLIENT_NET \
    --match multiport --dports 80,443 -j \
    REDIRECT --to-port 8080

ip rule add fwmark $MARK lookup $TABLE_ID
ip route add local $CLIENT_NET dev lo table $TABLE_ID

Mitmproxyがポート(192.168.178.40)でルーター(8080)をリッスンしています

ただし、私のセットアップは2つのNICを備えたカスタムDebianルーターで構成されています。

  • アドレスがwlp2s0のインターネット接続192.168.178.40(SSHへのSSHにも使用)
  • 1つNICターゲットゲートウェイのデフォルトゲートウェイenp4s0として設定:10.0.0.1

クライアントはアドレス10.0.0.12でデフォルトゲートウェイに接続します

デフォルトでは、次のIPテーブルルールを使用して、クライアントトラフィックをポート8080にリダイレクトします。

Sudo iptables -t nat -A PREROUTING -i enp4s0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Sudo iptables -t nat -A PREROUTING -i enp4s0 -p tcp --dport 443 -j REDIRECT --to-port 8008

これは意図したとおりに機能しますが、キャプチャされたHTTP(S)要求がTCPパケットおよびクライアントからのその他のトラフィックにも一致するように、クライアントの送信元アドレスを偽装できるようにしたいと思います。

私が説明するのはかなり恐ろしいので、これは私のセットアップを視覚化するための写真です:

Transparent proxy setup.

20
Ghxst

デフォルトでは、mitmproxyはサーバー側の接続に独自のローカルIPアドレスを使用します。代わりに、サーバー側の接続にクライアントのIPアドレスを使用するmitmproxyが必要です。

ほとんどの設定(同じLAN上の攻撃を受けたホスト/攻撃者のホス​​ト、両方ともインターネットルーターの背後、インターネット上の宛先サイト)では、基本的にインターネットホストがであるため、問題は1ではありませんインターネットルーターのパブリックアドレスを確認します。

これが問題となる唯一の設定は、宛先サイトが同じLAN上にある場合です。この場合、@ antonio-zunicですでに述べたように、これを実現する唯一の方法は、ARPスプーフィングを行うことです。

1
binarym