ncat
コマンドはnmapスイートの一部であり、そのために特別に作成されました。確かにncat
有名なスイスアーミーナイフと同じくらい多くの用途がありますが、誤って使用された場合や悪意のある攻撃者によって使用された場合も同様に危険です。その強みの1つは、 ncat
クライアントとサーバーの両方にすることができます。この記事では、その関係の1つの側面に焦点を当てます。 ncat
でリスニングbashシェルを開く方法を紹介します ncat
で誰でもアクセスできる クライアントとして。私の記事「Linuxのトラブルシューティング:ncatを使用したTCPリスナーのセットアップ」では、 ncat
をセットアップする方法について説明します。 特定のポートでリッスンするリスナーまたはサーバーとして。この例も似ていますが、 ncat
の威力に感動すると思います。 あなたにあげる。それはまたあなたを怖がらせるはずです—たくさん。
ncatのインストール
/ usr / bin
でシステムを確認してください 最初に、 ncat
をインストールする必要があるかどうかを確認します 。通常、Red HatEnterpriseLinuxベースのディストリビューションに含まれています。インストールする必要がある場合、パッケージ名は nmap-ncat
です。 。 ncat
をインストールすることもできます 単独で、または nmap
をインストールします およびnmap-ncat
パッケージは依存関係としてインストールされます。
ncatを使用
ncat
を発行しないでください 特にこの記事の例では、rootとしてのコマンド。そうすることで、誰でも認証なしでシステムにrootアクセスできるようになります。すべてのユーザーがncat
を発行できます コマンド。これは、その機能の1つであり、危険の1つでもあります。サービスアカウントを作成し、 ncat
を使用することをお勧めします そのアカウントを使用します。私を信じてください。サービスアカウントに対する賛否両論を聞いたことがありますが、 ncat
が表示されたら 実際には、サービスアカウントを使用してやり取りすることをお勧めします。
bashシェルを配信する
これは、 ncat
を使用することの楽しい(そして危険な)部分です。 。ユーザーを新しいサービスアカウントに切り替えます。私の名前は恥ずかしがり屋です 。
[ken@server1 ~] $ su - bashful
Password:
[bashful@server1 ~] $
ユーザーアカウントを切り替えたので、次はそのシェルを開きます。これは、ほとんどインタラクティブなシェルを介して、システムへの認証されていないアクセスを提供します。接続すると、「ほとんど」インタラクティブとはどういう意味かがわかります。この次のコマンドはncat
を使用します TCPポートでリッスンするbashシェルを実行します。この例では、server1(192.168.1.50)のポート9922を使用しています。 -l </ code> オプションはリスニングポートを設定します。
-k
オプションは、ソケットを維持するキープアライブフラグです。 -k
を発行しない場合 オプションを選択すると、セッションを切断した後にソケットが停止し、他の接続を確立できなくなります。
[bashful@server1 ~] $ ncat -e "/bin/bash" -l 9922 -k &
-e
オプションは、コマンドを引用符で囲んで実行します。この場合は、bashシェル( / bin / bash
)です。 )。アンパサンドを使用しています(&
)プロンプトを解放して ncat
を配置するコマンドの後に リスナーをバックグラウンドモードにします。 &
を使用しない場合 、すると、端末が「ハング」し、端末と対話できなくなります。それが問題にならない場合は、そのままにしておきます。
netstat
を発行する コマンドは、リスナーが所定の位置にあることを示します。
[bashful@server1 ~]$ netstat -an |grep 9922
tcp 0 0 0.0.0.0:9922 0.0.0.0:* LISTEN
tcp6 0 0 :::9922 :::* LISTEN
[bashful@server1 ~]$
リモートシステムからリスニングポートに接続するには、ホストベースのファイアウォールでポート9922の例外を開く必要もあります。
[ken@server1 ~]$ sudo firewall-cmd --add-port=9922/tcp
success
ここにフェイルセーフがありますか?アカウントとsudo
を使用して作成する必要があったのはファイアウォールの例外です 。ホストベースのファイアウォールまたはIPTablesを実行している場合(そして実行している方がよい場合)、このサービスはそのポートを許可するまで機能しません。つまり、通常のユーザーは管理者アクセスなしでこれを機能させることはできません。そうしないと、ncatの教育を受けたユーザーがいたるところにポートを開いて、その過程であなたを夢中にさせることになります。あなたが持っているであろうセキュリティの問題は言うまでもありません。私は逸脱します。
リモートシステムからシェルにアクセスする
これで、ポート9922のリモートシステムからbashシェルにアクセスできます。
[ken@server2 ~]$ ncat 192.168.1.50 9922
server2から 、 ncat
を発行します server1のターゲットIPアドレスを使用したコマンド 接続すると何も起こらないので、端末がハングしているように見えるので、信じてしまうかもしれません。しかし、実際に起こっていることは、rawソケットと通信しているため、プロンプトが表示されないことです。 who
を発行して証明します コマンド。
[ken@server2 ~]$ ncat 192.168.1.50 9922
who
ken pts/0 2020-08-26 13:39 (server2)
ユーザーが恥ずかしがり屋にしたい任意のコマンドを発行できます にアクセスできます。 rootアクセスを必要とするコマンドを発行した場合、応答が表示されない可能性があります。端末は「ハング」状態のままであるように見えます。応答は実際にはserver1の端末に表示されます 。たとえば、次のコマンドを発行した場合:
firewall-cmd --list-all
server2には何も表示されません の画面。 server1 の画面には、次のように表示されます。
[bashful@server1 ~]$ Authorization failed.
Make sure polkit agent is running or run the application as superuser.
server2から切断するには の秘密のシェル、 Ctrl + Cを発行します 組み合わせとローカルプロンプトが返されます。
職場でこれを試さないでください
楽しみのために、またはあなたが私を信じていない場合は、現在の ncat
を殺してください サービスアカウントを使用して、またはルートとして処理します。次に、rootユーザーと同じコマンドを再発行して、そのbashシェルをrootとして実行します。リモートシステムから再度接続し、そのファイアウォールコマンドを再発行します。今回は結果が表示されます。 rootとして任意のコマンドを発行できるため、このタイプのサービスをrootユーザーとして設定する必要はありません。
そして今、あなたは ncat
を使用することの本当の危険性を理解しています ルートとして。悪意のある攻撃者は、ポートスキャンで見逃された秘密のポートにそのようなシェルを設定し、認証なしで完全なルートアクセス権を持ちます。
まとめ
非常に有用で潜在的に非常に危険なncat
コマンドはあなたの親友であり、あなたの最悪の敵です。小屋の他のすべてのツールと同様に、それはあなたがそれを与えること以外の意図はありません。 ncat
を勉強する必要があります コマンド、その使用法、および環境での制限。 ncat
を殺すことを忘れないでください 処理が終了したら継続的に実行したくないプロセスを実行し、そのアクセスを許可するファイアウォール例外を削除します。また、大きな力には、物事を本当に台無しにする能力が伴うことを忘れないでください。
[システム管理者のスキルをテストしたいですか?今日、スキル評価を受けてください。 ]