ncコマンドとbashの/dev/tcpで通信

netcatコマンドとbashの/dev/tcpを使って通信をする。

Reverse Shell with Bashを実行してみました。

bashtcpの通信を/dev/tcp/host/portというファイルへの入出力に見せかけることができる。

これを使ってサーバとクライアントで通信をして、遠隔操作をしてみる、サーバとクライアントを用意するけれど、この例では接続してきたクライアントをサーバ側で操作するというもの。

まずnc(netcat)コマンドをサーバで実行する。-lでlisten mode.ここではtcpの8080番ポートで待ち受けることにした。*1

次に、クライアントではbashにシェルを変更して、ファイルディスクリプタの5番を/dev/tcp/[サーバのアドレス]/[サーバが待ち受けてるポート]にむすびつける。*2

うまく繋るとサーバ側に繋った旨が表示された。

クライアント側で、5番のファイルディスクリプタから読んだコマンドを実行し、その出力を5番に出すというループを実行する。

すると、サーバに入力した行がクライアントで実行され、その出力をサーバで見ることができる。この例では左側のウィンドウ(サーバにログインしている)でpwdを行い、右側ウィンドウ(クライアント側)のWorking Directoryが表示されているのがわかる。

めでたしめでたし。

*1:ncを行なったサーバはubuntu. Macのncコマンドはちょっとオプションが違うっぽい

*2:ここでサーバのIPアドレスは192.168.1.21で、ポートは上で定めた8080番である