web-dev-qa-db-ja.com

rootユーザーのクラッキング:root以外のユーザーからの「su」を使用したrootへのログインの自動化

suコマンドにパスワードを渡すことができるスクリプトを書きたいと思います。これは、root以外のアカウントからrootにログインするプロセスを自動化するためです。セキュリティの基本的な理解から、これの危険性を知っています。ファイルからパスワードを読み取ってrootユーザーのパスワードを解読しようとする場合でも、これが必要です。

expectコマンドを使用して対話を自動化することについて聞いたことがありますが、それがどのように機能するか、またはこの状況に適用できるかどうかはわかりません。 expectの使用に関する情報をいただければ幸いです。

私のユーザーはsudoerリストに含まれていないため、Sudoはオプションではないことに注意してください。

私が試したこと-パイプを使用してパスワードを渡す"su must be used from terminal"タイプエラーのために機能しませんでした-echoを使用してパスワードを渡すエコーされたものはすべて、パスワードを入力した後に表示されます

2
HyperSphere

expectを使用してその仕事をすることができます。以下をファイルに保存し、実行可能にして実行します。

#!/usr/bin/expect
spawn su
expect "Password:"
send "YOUR_PASS\n"
interact

(明らかに、expectへの正しいパスを指定する必要があります。ここでは、例として/usr/bin/expectを使用しました。)

YOUR_PASSが正しいルートパスワードである場合、ルートシェルが必要です。そうでない場合は、認証に失敗します。

interactコマンドは、プロセスの制御をユーザーに提供するため、完全に自動化されたスクリプトのコンテキストではおそらく必要ないことに注意してください。つまり、キーストロークが現在のプロセスに送信され、stderrとstderrが返されます。 。

コマンドspawnexpectsendinteract、およびその他の多くのコマンドの詳細については、man expectを参照してください。

1
Malte Skoruppa

この「ワンラインスタイル」を行う

expect -c 'spawn su - ;expect Password:;send "your-password\n";interact'

su -の出力を見て、これがパスワードをキャプチャしているように見える正しいフレーズであるかどうかを確認します。ここではLinuxの翻訳版を使用しているので、Wordは「Password:」ではなく「Senha:」になります。

  • expect -c '':このコマンドに対して次のアクションを実行します
  • spawn su -:このコマンドを実行します
  • expect Password:Wordパスワードが何かをすることを期待する
  • send "your-password\n":パスワードを入力し、Enterキーを押します
  • interact:コマンドに対する対話の準備をしておきます。
1
user34720