あまり仕事とかではないのだけど、たまにコンソール上で全く同じ値を持つ以下のようなテキストから、ユニークな値(今回の場合はB)だけ色を付けたいと思うことがある。

A A A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A
A B A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A
A A A A A A A A A A

一番簡単なのは、grepでユニー...


個人的に Goでsshのクライアントコマンド を作ってるのだけど、ssh接続で使用している処理が肥大化してメンテナンスが辛くなってきたので、ライブラリとして外出しすることにした。

以下のようなことが簡単にできるように作ってある。 細かい使い方については GoDoc を参照してもらえれば…(´・ω・`)。

  • ログインシェルへの接続(Ctrl+Cとかタブ補完もできる)
  • ターミナルログの取得(タイムスタンプ付与)
  • sshやhttp,socks5の多段プロキシ接続
  • x11 forwarding
  • port forwarding
  • pkcs11認証(Yubikeyとかの物理...

Goでsshのクライアントコマンドを作ってるのだが、それにx11 forwarding機能を実装したかったのでいろいろと調べてみた。 で、以下のような通信の流れになっているので、それを踏まえて実装してみた。

  1.  sshクライアント=>sshサーバ: sshクライアント側からsshサーバ側に、「SSH_MSG_CHANNEL_REQUEST」でx11-reqを送る(RFC4254)
  2.  sshサーバ: x11の初期化処理が行われる(sshサーバ側のDISPLAY環境変数にlocalhost:6000+x11ディスプレイ番号が入り、ポートが開く)
  3.  sshサーバ => sshクライ...

Reverse Shellで接続する際、普通にncやsocatで受け付けて処理すると間の通信が暗号化されてないので、パケットキャプチャすると何してるのか見えてしまったりする。 これはあまりよろしくないことが多いので、OpenSSL経由でReverse Shellを使うことで間の通信を暗号化してみることにする。

なお、証明書はオレオレ証明書にする(ちゃんとした証明書使ってもいいけど、この用途でわざわざやる必要もないかなと…)。

1. Listen側

まずはオレオレ証明書の作成から。(すでにあるならやらなくていいかも)

openssl req -x509 -newkey rsa...

最近になってReverse Shellをちょっとだけ使う機会があったのだけど、前に学習してたよりいろいろと便利なやり方とか方法がいろいろとあるのを知ったので、ちょっとまとめてみることにした。

1. 受付側のコマンド

実行側のシェルを受け付ける側。listen。

1-1. ncを使う場合

nc -nlvp 

1-2. socatを使う場合

socat tcp-listen:,reuseaddr,fork stdout