banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

sshポートフォワーディング

image

ssh ポートフォワーディング#

横断的な内部ネットワークプロキシのプロセス中に、ターゲットマシンが Linux サーバーである場合、ssh を使用して内部ネットワークプロキシ操作を実現することができます。最も一般的に使用されるのはダイナミックフォワーディングです。

ssh には 3 つのポートフォワーディングモードがあります:

  • ローカルフォワーディング(-L オプション)

  • リモートフォワーディング(-R オプション)

  • ダイナミックフォワーディング(-D オプション)

  • 攻撃マシン:攻撃者のマシン

  • ログイン待機マシン:制御された Linux サーバー

  • ターゲットマシン:攻撃マシンが直接アクセスできないターゲットホスト

ローカルフォワーディング#

ローカルフォワーディングは、ローカルホストのポートをログイン待機ホストのポートを介してリモートホストのポートに転送することを意味します。

ローカルフォワーディングは、-L オプションで指定され、次の形式です:ssh -L [攻撃マシンのIP]:<攻撃マシンのポート番号>:< ターゲットマシンの IP>:< ターゲットマシンのポート番号 > < ログイン待機マシンのユーザー名 >@< ログイン待機ホストの IP>

以下のシナリオを想定してみましょう:

攻撃者は攻撃マシンを介してLinuxサーバー(ログイン待機マシン)を制御し、アカウントとパスワードを取得しました。そして、ターゲットマシンがありますが、このマシンは内部ネットワークにあり、攻撃マシンからアクセスすることはできませんが、ログイン待機マシンからアクセスすることができます。以下のトポロジ図のようなものです。

image

この場合、host1host3にアクセスする方法はありますか?

host2を介して転送する必要があります。host2は中間者として機能し、host1host3の間の暗号化されたデータを転送します。

たとえば、host3 には 80 番の Web サービスポートがあり、host1 はこの Web サービスにアクセスする必要があります。その場合、host1 で ssh 接続して host2 にログインするだけで、ローカルポートフォワーディングが実現できます。

host1 での操作

ssh -L 0.0.0.0:8888:10.10.10.129:80 [email protected]
  • 攻撃マシンの IP はオプションであり、次のように書くこともできます。
ssh -L 8888:10.10.10.129:80 [email protected]

このコマンドは、ターゲットマシンの 80 ポートを攻撃マシンの 8888 ポートにマッピングします。この時点で、攻撃者はローカルの 8888 ポートにアクセスするだけで、ターゲットマシンの 80 ポートにアクセスできます。

リモートポートフォワーディング#

以下のシナリオを想定してみましょう。このシナリオはペネトレーションテストではあまり一般的ではありませんが、host1 は host3 に直接アクセスすることは許可されておらず、host2 は host3 にアクセスできますが、host1 は host2 にアクセスできません。この場合、リモートポートフォワーディングが使用されます。

image

host2 での操作

ssh -R 0.0.0.0:8888:10.10.10.129:80 [email protected]

または

ssh -R 8888:10.10.10.129:80 [email protected]

このコマンドは、ターゲットマシン(host3)の 80 ポートをログイン待機マシン(host2)の 8888 ポートにマッピングします。この時点で、攻撃者はローカルの 8888 ポートにアクセスするだけで、ターゲットマシン(host3)の 80 ポートにアクセスできます。

ダイナミックポートフォワーディング#

ダイナミックフォワーディングは、-D オプションで指定されます。

形式:-D [ローカルホスト:]ローカルホストポート

前述の 2 つと比べて、ダイナミックフォワーディングはリモートホストとそのポートを指定する必要がなく、SOCKS プロトコルを介してデータ転送が行われます。

以下のシナリオを想定してみましょう:

攻撃者は攻撃マシンを介してLinuxサーバー(待機マシン)を制御し、アカウントとパスワードを取得しました。そして、ターゲットマシンがありますが、このマシンは内部ネットワークにあり、攻撃マシンからアクセスすることはできませんが、待機マシンからアクセスすることができます。以下のトポロジ図のようなものです。

image

攻撃マシン(host1)で操作

ssh -D 127.0.0.1:8888 [email protected]

または

ssh -D 8888 [email protected]

このコマンドは、SOCKS プロキシを作成し、そのプロキシを介して送信されるすべてのデータパケットが host2 を経由して転送されるようにします。

どのように使用しますか?

  • Firefox ブラウザを使用して、ブラウザで SOCKS5 プロキシ 127.0.0.1:8888 を設定し、ブラウザで host2 が存在するネットワーク内の任意の IP にアクセスできるようにします。
  • 通常のコマンドラインアプリケーションの場合、proxychains-ngを使用します。次のようなコマンドを参照してください:
brew install proxychains-ng  

設定ファイルを編集します

vim /usr/local/etc/proxychains.conf # ProxyListセクションの下に "socks5 127.0.0.1 8888" の設定を追加します  

ターゲットネットワークにアクセスする

proxychains-ng wget http://10.10.10.129 # 他のコマンドラインの前にproxychains-ngを追加します

SSH トンネルの一般的なパラメータ:

-C 圧縮転送、転送速度の向上
-f データ転送をバックグラウンドで実行する
-N サイレント接続を確立する
-g リモートホストがローカルホストのポートに接続することを許可する
-L ローカルポートフォワーディング
-R リモートポートフォワーディング
-D ダイナミックポートフォワーディング、つまり SOCKS プロキシ
-p SSH 接続ポートを指定する


実験環境の構築#

環境の設定#

  1. 攻撃マシン
  • 17.1.26.131

image

  1. ログイン待機マシン
  • 17.1.26.133
  • 10.10.10.130

image

  1. ターゲットマシン
  • 10.10.10.129

image

ローカルポートフォワーディング#

攻撃マシン(host1)で次のコマンドを実行します:

ssh -L 8888:10.10.10.129:80 [email protected]

image

攻撃マシン(host1)でポートの状態を確認すると、8888 ポートがリッスンされていることがわかります。

image

ローカルホストでブラウザを開き、8888 ポートにアクセスして成功するかどうかを確認します。http://127.0.0.1:8888/123.aspにアクセスしてください。

image

リモートポートフォワーディング#

環境は前と同じですが、次のコマンドをログイン待機マシン(host2)で入力します:

ssh -R 8888:10.10.10.129:80 [email protected]

image

ローカルホストに戻り、ポートが開いているかどうかを確認します。netstat -tnlp を実行し、8888 ポートが開いていることが表示されます。

image

同時に、ブラウザを開いてhttp://127.0.0.1:8888/123.aspにアクセスし、成功するかどうかを確認します。

image

ダイナミックポートフォワーディング#

環境とローカルフォワーディングは同じですが、攻撃マシン(host1)のコマンドラインウィンドウで次のコマンドを実行し、ssh ログインパスワードを入力します:

ssh [email protected] -D 55555

image

攻撃マシン(host1)でポートの状態を確認します。

image

攻撃マシン(host1)でブラウザの SOCKS プロキシを設定します。

image

攻撃マシン(host1)のブラウザで直接http://10.10.10.129/123.aspにアクセスします。

image

参考#

https://jeremyxu2010.github.io/2018/12/ssh%E7%9A%84%E4%B8%89%E7%A7%8D%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91/
https://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html
https://reznok.com/ssh-tunneling-magic/
画像提供

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。