デフォルトでは、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にも使用)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パケットおよびクライアントからのその他のトラフィックにも一致するように、クライアントの送信元アドレスを偽装できるようにしたいと思います。
私が説明するのはかなり恐ろしいので、これは私のセットアップを視覚化するための写真です:
デフォルトでは、mitmproxyはサーバー側の接続に独自のローカルIPアドレスを使用します。代わりに、サーバー側の接続にクライアントのIPアドレスを使用するmitmproxyが必要です。
ほとんどの設定(同じLAN上の攻撃を受けたホスト/攻撃者のホスト、両方ともインターネットルーターの背後、インターネット上の宛先サイト)では、基本的にインターネットホストがであるため、問題は1ではありませんインターネットルーターのパブリックアドレスを確認します。
これが問題となる唯一の設定は、宛先サイトが同じLAN上にある場合です。この場合、@ antonio-zunicですでに述べたように、これを実現する唯一の方法は、ARPスプーフィングを行うことです。