web-dev-qa-db-ja.com

RDPがリバースSSHトンネルを介して指定されたエフェメラルポート上のローカルリスナーにコールバックする方法を理解する必要があります

これは、私の絶え間ない更新と編集のために完全に長くなりすぎて混乱していた前の質問に関連しており、私はそれを再質問するように言われました。だから私はそれを片付けて、もっと直接的な質問をしている。

まず、これは、順方向と逆方向のsshトンネルがどのように機能するかを学習し、特にネットワーク上のどこにいるかを常に完全に制御し、プロセス全体で足跡を隠すために行う必要のある理論的な実験です。私のトレーナーは私にこの仕事を与えてくれましたが、彼は私が彼の助けなしに自分でそれを理解することを信頼しています。

RDP(リモートデスクトップ)がRHP(ランダムハイポート)ではなく特定のポートに応答するように強制する方法を理解する必要があります。 RDP "Listens"を変更する方法を尋ねているのではなく、その逆です。

2つのシステム間に実験的なフォワード/リバースSSHトンネルを設定しようとしています。フォワードトンネルでIPを隠すためのピボットポイントとして3番目のシステムを使用しています。しかし、フォワードSSHトンネルを介してリモーティングしているシステムが、別のリバースSSHトンネルを介してRHPではなく「指定された」ポートに応答を送信するようにしたい。基本的な考え方は、リッスンまたは受信するポートを制御できるようにしたいということです。また、ランダムなものは必要ありません。

これらは私の3台のマシンです。 Devilsmilkはピボットポイントであり、クライアントはkgravesにあり、私はduclawにリモーティングしています。

  • KGRAVES-10.0.10.11
  • DEVILSMILK-10.0.10.121
  • DUCLAW-10.0.10.12

したがって、RDPセッション用に2つのパイプが必要です。 1つは順方向用、もう1つは逆方向用です。しかし、私はそれをRHPで送り返したくありません。たとえば:44444など、特定のポートに送信するように指示する方法がわかりません。

誰かがこれを行う方法を知っていますか?

私はこれを特定の方法で行う必要があります。これらは私が使用するポートです持っている1337ではなくポート3389DuclawをリッスンするようにRDPをすでに設定しています。 これがこれを行う最も簡単な方法ではないことを私は知っています。

Wiresharkによると、リモートデスクトップ接続がdevilsmilkから来ているかのように「表示」する必要があります。しかし、duclawを経由せずに、kgravesが応答をdevilsmilkに直接返送するようにしたい。したがって、kgravesRDPセッションがlocalhostに送信され、sshトンネルを介してdevilsmilkを介してduclawですが、その接続に応答して受信されているRDPパケットは、Duclawから直接受信されます。現在、応答はdevilsmilkを介してRHPに返されています。

私のコマンドは次のとおりです。別のコマンドから行ったCYGWIN接続を除いて、すべてsshのまったく同じkgravesmstscコンソールから実行されます。 CYGWINターミナルのkgravesスイッチに改行を追加しました。

CNO\kgraves@KGRAVES ~
$ ssh -vg -L 3333:localhost:6666 misfitred@devilsmilk
OpenSSH_6.1p1, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh_config
debug1: Connecting to devilsmilk [10.0.10.121] port 22.
debug1: Connection established.
debug1: identity file /home/kgraves/.ssh/id_rsa type 1
debug1: identity file /home/kgraves/.ssh/id_rsa-cert type -1
debug1: identity file /home/kgraves/.ssh/id_dsa type -1
debug1: identity file /home/kgraves/.ssh/id_dsa-cert type -1
debug1: identity file /home/kgraves/.ssh/id_ecdsa type -1
debug1: identity file /home/kgraves/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1
key_read: uudecode devilsmilk ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwVZRlnAgPRPxTx           cbTPALg5XPpOnAMhJabQ3Dv/7a95eqe5l7XnKRciYQZ41B61DRgXCzC/M9ObknMR79zG0mkSl+jQTGJ7           klol7nw0+U1dNFknv4fOn+YGAsqECclWEow3OK5xRcla5eBekRGWjrZ7Wbs4F3FeKGQNqU/OuGvdSaQb           3nqgLPGTZfRhNtykQvpNzXw5cjO7XvM0BBv9di4JblLx9Fk3iq2KwdgWmK9uFDPYjU1gkHR8hk+bns1t           16KFcyDKnzhR1CblU6JT/wlBtnFa11no1UJBEHC2UQy8trwkMU6NqUt0X+D/XqW5F6+uWNc/dY97CCky           9HdfWNGQ==
 failed
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server Host key: RSA b5:d6:eb:64:50:2f:40:04:32:10:bb:4f:a8:d3:f5:37
key_read: uudecode devilsmilk ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwVZRlnAgPRPxTx           cbTPALg5XPpOnAMhJabQ3Dv/7a95eqe5l7XnKRciYQZ41B61DRgXCzC/M9ObknMR79zG0mkSl+jQTGJ7           klol7nw0+U1dNFknv4fOn+YGAsqECclWEow3OK5xRcla5eBekRGWjrZ7Wbs4F3FeKGQNqU/OuGvdSaQb           3nqgLPGTZfRhNtykQvpNzXw5cjO7XvM0BBv9di4JblLx9Fk3iq2KwdgWmK9uFDPYjU1gkHR8hk+bns1t           16KFcyDKnzhR1CblU6JT/wlBtnFa11no1UJBEHC2UQy8trwkMU6NqUt0X+D/XqW5F6+uWNc/dY97CCky           9HdfWNGQ==
 failed
The authenticity of Host 'devilsmilk (10.0.10.121)' can't be established.
RSA key fingerprint is b5:d6:eb:64:50:2f:40:04:32:10:bb:4f:a8:d3:f5:37.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'devilsmilk' (RSA) to the list of known hosts.
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interacti           ve
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/kgraves/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password,keyboard-interacti           ve
debug1: Trying private key: /home/kgraves/.ssh/id_dsa
debug1: Trying private key: /home/kgraves/.ssh/id_ecdsa
debug1: Next authentication method: keyboard-interactive
Password:
debug1: Authentication succeeded (keyboard-interactive).
Authenticated to devilsmilk ([10.0.10.121]:22).
debug1: Local connections to *:3333 forwarded to remote address localhost:6666
debug1: Local forwarding listening on :: port 3333.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 0.0.0.0 port 3333.
debug1: channel 1: new [port listener]
debug1: channel 2: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
Last login: Wed Jan 30 16:13:02 2013 from kgraves.cno.local
[misfitred@devilsmilk ~]$ ssh -vg -L 6666:localhost:1337 kgraves@duclaw
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to duclaw [10.0.10.120] port 22.
debug1: Connection established.
debug1: identity file /home/misfitred/.ssh/id_rsa type 1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.1
debug1: match: OpenSSH_6.1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'duclaw' is known and matches the RSA Host key.
debug1: Found key in /home/misfitred/.ssh/known_hosts:3
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interacti           ve
debug1: Next authentication method: publickey
debug1: Offering public key: /home/misfitred/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password,keyboard-interacti           ve
debug1: Next authentication method: keyboard-interactive
debug1: Authentications that can continue: publickey,password,keyboard-interacti           ve
debug1: Next authentication method: password
kgraves@duclaw's password:
debug1: Authentication succeeded (password).
debug1: Local connections to *:6666 forwarded to remote address localhost:1337
debug1: Local forwarding listening on 0.0.0.0 port 6666.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on :: port 6666.
debug1: channel 1: new [port listener]
debug1: channel 2: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
Last login: Wed Jan 30 15:55:29 2013 from devilsmilk.cno.local
"tty" option detected in CYGWIN environment variable.
CYGWIN=tty is no longer supported.  Please remove it from your
CYGWIN environment variable and use a terminal emulator like mintty,
xterm, or rxvt.

kgraves@DUCLAW ~
$ ssh -vg -R 3333:devilsmilk:6666 kgraves@kgraves
OpenSSH_6.1p1, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh_config
debug1: Connecting to kgraves [10.0.10.113] port 22.
debug1: Connection established.
debug1: identity file /home/kgraves/.ssh/id_rsa type 1
debug1: identity file /home/kgraves/.ssh/id_rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.1
debug1: match: OpenSSH_6.1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server Host key: ECDSA de:1c:37:d7:84:0b:f8:f9:5e:da:11:49:57:4f:b8:f1
debug1: Host 'kgraves' is known and matches the ECDSA Host key.
debug1: Found key in /home/kgraves/.ssh/known_hosts:3
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interacti           ve
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/kgraves/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password,keyboard-interacti           ve
debug1: Next authentication method: keyboard-interactive
debug1: Authentications that can continue: publickey,password,keyboard-interacti           ve
debug1: Next authentication method: password
kgraves@kgraves's password:
debug1: Authentication succeeded (password).
Authenticated to kgraves ([10.0.10.113]:22).
debug1: Remote connections from LOCALHOST:3333 forwarded to local address devils           milk:6666
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: remote forward failure for: listen 3333, connect devilsmilk:6666
Warning: remote port forwarding failed for listen port 3333
debug1: All remote forwarding requests processed
Last login: Wed Jan 30 16:21:12 2013 from duclaw.cno.local
"tty" option detected in CYGWIN environment variable.
CYGWIN=tty is no longer supported.  Please remove it from your
CYGWIN environment variable and use a terminal emulator like mintty,
xterm, or rxvt.
_____________________________________________________________________________
##From separate CYGWIN Terminal##
CNO\kgraves@KGRAVES ~
$ mstsc /v:localhost:3333 /f

CNO\kgraves@KGRAVES ~
$
_____________________________________________________________________________

kgraves@KGRAVES ~
$ debug1: Connection to port 3333 forwarding to localhost port 6666 requested.
debug1: channel 4: new [direct-tcpip]
debug1: Connection to port 6666 forwarding to localhost port 1337 requested.
debug1: channel 4: new [direct-tcpip]
debug1: channel 4: free: direct-tcpip: listening port 3333 for localhost port 66                          66, connect from ::1 port 49496, nchannels 5
debug1: channel 4: free: direct-tcpip: listening port 6666 for localhost port 13                          37, connect from 127.0.0.1 port 48808, nchannels 5
debug1: Connection to port 3333 forwarding to localhost port 6666 requested.
debug1: channel 4: new [direct-tcpip]
debug1: Connection to port 6666 forwarding to localhost port 1337 requested.
debug1: channel 4: new [direct-tcpip]
$ debug1: channel 3: free: direct-tcpip: listening port 3333 for localhost port 6666, conne               ct from ::1 port 49495, nchannels 5
debug1: channel 3: free: direct-tcpip: listening port 6666 for localhost port 1337, connect                from 127.0.0.1 port 48807, nchannels 5
$

Localhost:3333へのリモートデスクトップ接続が正常に確立されました。ご覧のとおり、devilsmilkduclawから来ているように見えます。しかし、kgravesによると、それはDevilsmilkから戻ってきています。

これは、wiresharkセッション中にduclawで実行されているRDPのスナップショットです。

enter image description here

これは、wiresharkセッション中にkgravesで実行されているRDPのスナップショットです。

enter image description here

そのため、Duclawが完全に独立したリバーストンネルを介してRDPセッションをKgraves-pcに送り返すようにしたいという私の問題は依然として残っています。それは私が起こる必要があることであり、その方法を理解することはできません。

duclawを経由せずに別のトンネルで直接kgravesに送り返すには、devilsmilkが必要なだけでなく、送信先のエフェメラルポートを制御する必要もあります。 。ランダムなエフェメラルポートではなく、ポート:44444に送信してほしい。上記の詳細なデバッグssh出力でランダムに:48809を使用しています。

初期の段階で、ユーザーJohn Siuは、TCP通信の性質上、これは不可能であると考えました。kgravesは、接続が確立されることを期待しているためです。 localhostで確立されたため、localhostから。したがって、duclawがセッションをkgravesに送信する方法が必要ですが、それをlocalhost 多分?

しかし、トレーナーから、127.0.0.1(ローカルホスト)のRFCの性質上、TCP 3ウェイハンドシェイクがOSIモデルのレイヤー4を離れることはなく、何らかの種類があると言われました。 127.0.0.1に接続するときにsyn、syn-ack、ackの要件を排除する「機能」が組み込まれているため、TCPは、localhostに接続するときに同じルールに完全には従いません。レイヤー4でスニッフィングする「wireshark」タイプのプログラムを作成し、接続が確立されるのを見ることができれば、彼が何について話しているかがわかります。

これまでのところ、ユーザーJohnSiuの功績により次の可能な回答が与えられています。

1.)あなたが求めていることを行うために、私が考えることができる唯一の方法は、カスタムrdpプロキシを作成し、kgraves-pcとduclawの両方で実行することです。

2.)また、JohnSiuが話していたrdpプロキシを基本的に模倣する使用できるウイルスがあるかもしれないと言われました。仮想ラボ内では、これらのシステムを悪用するために使用したいマルウェア/ウイルスを使用できます。したがって、何でも可能です。

それ以上の助けをいただければ幸いです。貢献してくれてありがとう!

うまくいけば、これが理にかなっているとは言えませんが...混乱してすみません!

編集#1:この逆トンネルが最初に起こっていると私に信じさせた最初に見たものを再現することができました。 wiresharkトラフィック(上のトラフィックはDuclawから、下のトラフィックはkgravesから)から、ジョンが以下で説明したのはまさに起こっていることであることがわかります。この謎が解けた今でも、RDPをランダムポートではなく特定のポートにコールバックさせる方法を理解する必要があります。

enter image description here

3
Kentgrav

あなたが求めていることをするために、私は次のようにしか考えることができません

enter image description here

  • C =クライアント(rdp、telnetなどのクライアントソフトウェア)
  • S =サーバー(rdp、telnetなどのサーバーソフトウェア)
  • 赤と緑は別々のTCP/IP接続です。

カスタマープロキシ1

(Blue)  Listen to a local port to wait for client software connection
(Red)   Forward incoming packet from C to Custom Proxy 2 public port
(Green) Listen to a public port, forward incoming packet from Custom Proxy 2 to C (via Blue)

カスタマープロキシ2

(Red)   Listen to public port for incoming packet from Custom Proxy 1
(Blue)  Establish connection with S, forward incoming packet from Custom Proxy 1 to S
(Green) Forward incoming packet from S to Custom Proxy 1 public port

PS:1つのtcp接続のみを使用するTelnet、RDPに焦点を当てます。 FTPは、データ(ファイル)転送にランダムポートを使用した追加のtcp接続を使用するため、はるかに困難です。

2
John Siu

これは前のコメントからの「謎」に答えるためです

...しかし、Kgraves-PCでは、10.0.10.120のDuclawからSSHトラフィックが直接送信されていました。では、Kgraves-PCでDuclawからのトラフィックをどのように確認しますか? .。

3つのトンネルの物語

  1. kgraves-pc:3333からdevilsmilk:6666

    kgraves-pc $ ssh -vg -L 3333:localhost:6666 misfitred@devilsmilk(10.0.10.121)
    
  2. devilsmilk:6666からduclaw:1337

    devilsmilk $ ssh -vg -L 6666:localhost:1337 kgraves@duclaw(10.0.10.120)
    
  3. kgraves-pc:3333から(duclaw)からdevilsmilk:6666

    duclaw     $ ssh -vg -R 3333:devilsmilk:6666 kgraves@kgraves(10.0.10.113)
    

Map Of 3 Tunnels

kgraves-pc$ $ mstsc /v:localhost:3333 /f

レッドストーリーライン

赤いトンネルが使用されている場合、SSH(RDP)パケットは次のように前後に続きます

kgraves-pc <--(Red)--> devilsmilk <--(Green)--> duclaw(RDP server end point)

これは、OPwiresharkのスクリーンショットに示されているものです。

ブルーストーリーライン

青いトンネルが使用されている場合、SSH(RDP)パケットは次のように前後に続きます

kgraves-pc <--(Blue-ssh)--> duclaw(en-route) <--(Blue-non-ssh)--> devilsmilk <--(Green)--> duclaw(RDP server end point)

この場合、それはのように見えます kgraves-pcであり、duclawはwiresharkで直接SSH-RDP接続を持っていますが、そうではありません。

2
John Siu