パスワードを 'su' に自動的に渡すにはどうすればよいですか?

パスワードを 'su' に自動的に渡すにはどうすればよいですか?

私はセキュリティ コースのエクスプロイトに取り組んでいます。目的は、Linux 仮想マシンでルート シェルを取得することです。これまでのところ、/etc/passwd に書き込み、ルートのパスワードを任意の文字列に変更することができます。

今、私は su を使用してルート シェルを取得したいと考えています。私のエクスプロイトは自動化する必要があるため、パスワードの入力を求めることはできず、vm には expect がインストールされていません。su コマンドにパスワードを渡す方法を誰か知っていますか? または、もっと良い方法がありますか?

答え1

このタイプの入力を自動化する最良の方法は、expectまたはそれ以上を使用することですpexpect。ほとんどのサーバーには、少なくとも最新のディストリビューションでは、Python が付属しています。

まず、VM にexpectインストールされていないとおっしゃいましたが、それがなぜ重要なのかわかりません。ローカル アカウントで何かをインストール/実行できない理由があるのでしょうか?

次に考慮すべきことは、なぜpasswd??? を使用する必要があるかということです。 で指定されたハッシュを置き換えることによってパスワードを変更することもできます/etc/shadow。当然、最初にハッシュを正しく事前生成する必要がありますが、サポートされているハッシュを使用する限り、期待どおりに動作するはずです。では、このようなアクションをどのようにスクリプト化するかは、自分で考えてみてください。

また、passwdSTDIN から入力を読み取りません。間違っていなければ、tty から読み取ります。したがって、との組み合わせだけではうまくecho機能sleepしません。ただし、HEREDOC を使用すれば可能ですが、システムが十分に応答することを前提としています。エントリ間で分割できる場合がありますsleep。これをテストしたところ、Ubuntu ワークステーションで動作しました。

#!/bin/bash
passwd root <<'EOF'
newpassword
newpassword
EOF

答え2

エクスプロイトはグループ ファイルに書き込み、現在のユーザーを 'wheel' グループ (またはパスワードなしでコマンドを実行できるグループ) の一部にすることもできます。そうすれば、あなた(または他のユーザー) はパスワードなしでsudoコマンドを実行できるようになります。sudo su root

実行すると、visudoマシン上の「ホイール」グループの設定に関する指示が表示されます。

明確に言うと、ユーザーが wheel グループに所属すると、パスワードを必要とせずに sudo コマンドを実行できるようになります。

関連情報