これが何を意味するのかを説明できる人はいますか?
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/null
script
/dev/null
-q
script
Ctrl-Z
経由でリモートに接続するとしますnetcat
。地元の端末が^Zを処理するモードにある可能性があります。したがって、ローカルのnetcatプロセスは中断されます。
stty raw -echo
次に、リモートptyを妨げないように、ローカル端末をrawモードに設定します。
fg
netcatを再起動してください。これで、リモート側にptyが開いているシェルがあり、ローカル端末はそれを妨げません。
reset
リモート端末をリセットします。これが必要かどうかはわかりません。あなたがリンクした記事にはそれが必要なようですが、それがなくてもジェゲンはうまくいきます。
初期化地元のリモートの背後でターミナルをシャットダウンするのがより難しい場合がありますscript
。これは、ローカル端末がリモートで実行されている接続されたnetcatと共にrawモードにあり、そのnetcatを殺すのが難しいからです。ただし、ローカルのxterm / screenwindow /シェルが実行されているすべてを終了できます。または、exec script
リモートで実行することもできます。