シェルアップグレード:bashを使用したtypescriptコマンドの作成

シェルアップグレード:bashを使用したtypescriptコマンドの作成

これが何を意味するのかを説明できる人はいますか?

SHELL=/bin/bash script -q /dev/null

CTFからシェルをアップグレードするために使用されます。HTB:

 SHELL=/bin/bash script -q /dev/null
 Ctrl-Z
 stty raw -echo
 fg
 reset
 xterm

この投稿の内容と似ています。シンプルシェルを完全対話型TTYにアップグレードしかし、それが何であるか理解できません。

man script説明する:

NAME
       script - make typescript of terminal session
SYNOPSIS
       script [options] [file]

   script makes a typescript of everything displayed on your terminal.  It is useful for students
   who need a hardcopy record of an interactive session as proof of an assignment, as  the  type‐
   script file can be printed out later with lpr(1).

そして

   -q, --quiet
          Be quiet (do not write start and done messages to standard output).

答え1

netcatしたがって、ここでの文脈は、おそらく端末と同様のものを使用して、どこかで実行されるシェルへの一般的なTCP接続があることです。 「正常」とは、SSHなどを介してシェルに擬似端末(pty)を提供する代わりに、シェル(stdin / stdout)がネットワークソケットに直接接続されることを意味します。

擬似端末は、^Cや^Zなどを処理するなど、すべての知能が発生する階層なので重要です。

SHELL=/bin/bash script -q /dev/null

に設定されたscript環境変数、パラメータ、およびで実行されます。要点は、シェルセッションが入力として取得するすべてを記録し、出力として印刷することです。これにはptyを使用します。また、実行時にすべてを提供します。に送信される実際のレコードではなく、ここで焦点はptyを作成することです。起動時にメッセージを印刷しません。SHELL/bin/bash-q/dev/nullscript/dev/null-qscript

Ctrl-Z

経由でリモートに接続するとしますnetcat地元の端末が^Zを処理するモードにある可能性があります。したがって、ローカルのnetcatプロセスは中断されます。

stty raw -echo

次に、リモートptyを妨げないように、ローカル端末をrawモードに設定します。

fg

netcatを再起動してください。これで、リモート側にptyが開いているシェルがあり、ローカル端末はそれを妨げません。

reset

リモート端末をリセットします。これが必要かどうかはわかりません。あなたがリンクした記事にはそれが必要なようですが、それがなくてもジェゲンはうまくいきます。

初期化地元のリモートの背後でターミナルをシャットダウンするのがより難しい場合がありますscript。これは、ローカル端末がリモートで実行されている接続されたnetcatと共にrawモードにあり、そのnetcatを殺すのが難しいからです。ただし、ローカルのxterm / screenwindow /シェルが実行されているすべてを終了できます。または、exec scriptリモートで実行することもできます。

関連情報