JavaRemoteShell (Java でリモートシェル)

Java で外部プログラムを起動。
標準入力をネットワーク側から取得しつつ、その処理結果としての標準出力を取得して、標準出力へ出力します。

通信プロトコルは、TCP/SSL/UDP/RMI/CORBA です

さらに、script コマンドのようなものも作ってみました。

RMI/CORBA には、DH鍵交換による暗号化通信機能が暗号化通信機能を実装しました。
→「Java_Security_Handbook」より、DH 鍵交換のアルゴリズムを拝借しました。

RMI/CORBA には、データを平文ではなくエンコードして送るようになっています。
(CORBA が日本語を平文で送れないため) (URLEncode に関しては、Java の標準クラスを作っていますが、日本語などの "文字" に制限されています)
Base64 エンコードは、http://www.source-code.biz/snippets/java/2.htmを拝借しました。

さらに、このクラス体系を使って、スクリプトで制御するポートリダイレクタを作ってみました(ScriptProxy)(ver2.1 以降)


RMI/CORBA 版
(RmiCmdShell.jar/RmiCmdShell.policy)
(CorbaCmdShell.jar)

まずは、RMI のサービス/CORBA のサービス(RPC ポートマッパーのようなもの)を RMI/CORBA サーバ側で起動
RMI サーバ側で実行するコマンド start /min rmiregistry.exe 《ポート》
環境変数 "CLASSPATH" に RmiCmdShell.jar を通しておく必要がある
CORBA サーバ側で実行するコマンド start /min orbd.exe -ORBInitialPort 《ポート》


通常(RMI)
RMI Server/Shell Server RmiCmdShell.bat -RMIServer -Host 0.0.0.0 -Port 《ポート》 -ShellServer -ShellCommand "cmd.exe /q"
RMI Client/Shell Client RmiCmdShell.bat -RMIClient -Host 192.0.2.1 -Port 《ポート》 -ShellClient
通常(CORBA)
CORBA Server/Shell Server CorbaCmdShell.bat -CorbaServer -ORBInitialHost 0.0.0.0 -ORBInitialPort 《ポート》 -ShellServer -ShellCommand "cmd.exe /q"
CORBA Client/Shell Client CorbaCmdShell.bat -CorbaClient -ORBInitialHost 192.0.2.1 -ORBInitialPort 《ポート》 -ShellClient


リバース(RMI)
RMI Server/Shell Client RmiCmdShell.bat -RMIServer -Host 0.0.0.0 -Port 《ポート》 -ShellClient
RMI Client/Shell Server RmiCmdShell.bat -RMIClient -Host 192.0.2.1 -Port 《ポート》 -ShellServer -ShellCommand "cmd.exe /q"
リバース(CORBA)
CORBA Server/Shell Client CorbaCmdShell.bat -CorbaServer -ORBInitialHost 0.0.0.0 -ORBInitialPort 《ポート》 -ShellClient
CORBA Client/Shell Server CorbaCmdShell.bat -CorbaClient -ORBInitialHost 192.0.2.1 -ORBInitialPort 《ポート》 -ShellServer -ShellCommand "cmd.exe /q"


リバース GUI(RMI)
RMI Server/Shell Client RmiCmdShell.bat -RMIServer -Host 0.0.0.0 -Port 《ポート》 -ShellClient -GUI
リバース GUI(CORBA)
CORBA Server/Shell Client CorbaCmdShell.bat -CorbaServer -ORBInitialHost 0.0.0.0 -ORBInitialPort 《ポート》 -ShellClient -GUI


暗号化
共通鍵その1 -CipherAlgorithm Blowfish -CipherKey 《秘密鍵文字列》
共通鍵その2 -CipherAlgorithm Blowfish -CipherFile 《秘密鍵文字列を文字しているファイル》
共通鍵を DH 鍵交換する -CipherAlgorithm Blowfish -DH



TCP/UDP/SSL 版
(TCPCmdShell.jar)

相手は
nc.exe -L -p 《ポート》
nc.exe -L -p 《ポート》 -u
SSL の場合は stunnel/stone など
で待機
TCP Client の場合 TCPCmdShell.bat -tcp -Host 192.0.2.1 -Port 《ポート》 -NetworkClient -ShellCommand "cmd.exe /q" 相手は、nc -nvv -L -p 《ポート》 で待機
TCP Server の場合 TCPCmdShell.bat -tcp -Host 0.0.0.0 -Port 《ポート》 -NetworkServer -ShellCommand "cmd.exe /q" 相手は、nc -nvv 192.0.2.1 《ポート》 で接続
UDP Client の場合 TCPCmdShell.bat -udp -Host 192.0.2.1 -Port 《ポート》 -NetworkClient -ShellCommand "cmd.exe /q" 相手は、nc -nvv -u -L -p 《ポート》 で待機
UDP Server の場合 TCPCmdShell.bat -udp -Host 0.0.0.0 -Port 《ポート》 -NetworkServer -ShellCommand "cmd.exe /q" 相手は、nc -nvv -u 192.0.2.1 《ポート》 で接続
TCP/SSL の場合 TCPCmdShell.bat -ssl -Host 192.0.2.1 -Port 《ポート》 -NetworkClient -ShellCommand "cmd.exe /q" 相手は、SSL のサーバで待機(stunnel/stone など)



script コマンド
(ScriptByJava.jar)

ScriptByJava.bat 《出力ファイル名》 -ShellCommand "cmd.exe /q"



ScriptRedirector
(ScriptRedirector.jar)

ScriptRedirector.bat -Host 《転送先ホスト》 -Port 《転送先ポート》 -LocalPort 《待機ポート》 -Script 《スクリプトファイルパス》
Java 内部のデータにアクセスできるように、クラス「ScriptRedirectorData」として JavaScript に公開している。
スクリプトのリファレンスは、ScriptRedirectorSample.js を参照のこと


その他のオプション

ShellCommandEnvp シェルサーバ時、子プロセスに渡す環境変数
ShellCommandTempPath シェルサーバ時、子プロセスに作業ディレクトリのパス
ShellServerExitCommand シェルサーバ時、ここで指定した文字列を与えると、終了する
BufferSize ここで指定したサイズ分、(場合によっては改行まで)をバッファして通信相手に渡している
ThreadTimeout スレッドの動作間隔
NoHeartBeat RMI/Corba 版は、通信がなくてもリモートメソッドが呼び出されるかどうかでハートビートをしているが、それを停止させる
CharSet 文字コード
CipherFile/CipherKey 共通鍵を[引数|ファイル]指定する
NoEncode 暗号化通信など、既定でエンコードしているが、強制的にエンコードしない(デバグ用)
CipherKeyLen CipherTest\ 下のプログラムで確認した最大キー長を使っているが、キー長を強制指定
CipherAlgorithm 暗号化アルゴリズム
基本的には javax.crypto.Cipher クラスへ渡す文字列
Base16/Base64/URLEncode 通信相手に送る時にデータを符号化する
CORBA 版は通信データに日本語があるとダメなので、符号化した方がよい
URLEncode は文字列のみ対応しているので(java.net.URLEncoder/java.net.URLDecoder)使わない方が良い
MaxConnection 同時接続数






著作権は保持します。(とりあえず...)
しかし、プログラムの実行においては、各自の責任で行ってください。

このソフトを使用したいかなる不正使用に関する責任は、
すべて、本プログラムの利用者に属します。

プログラムの改変については、各自の責任で行う分については、自由に行って結構です。(参考になりましたメールをくれると、うれしい...(*^_^*))


download
All files set
JavaRemoteShell.lzh LZH file (312,767byte) (JavaRemoteShell.lzh.base64)

ソースの説明

省略


mail to active@window.goukaku.com