私はセキュリティ コースのエクスプロイトに取り組んでいます。目的は、Linux 仮想マシンでルート シェルを取得することです。これまでのところ、/etc/passwd に書き込み、ルートのパスワードを任意の文字列に変更することができます。
今、私は su を使用してルート シェルを取得したいと考えています。私のエクスプロイトは自動化する必要があるため、パスワードの入力を求めることはできず、vm には expect がインストールされていません。su コマンドにパスワードを渡す方法を誰か知っていますか? または、もっと良い方法がありますか?
答え1
このタイプの入力を自動化する最良の方法は、expect
またはそれ以上を使用することですpexpect
。ほとんどのサーバーには、少なくとも最新のディストリビューションでは、Python が付属しています。
まず、VM にexpect
インストールされていないとおっしゃいましたが、それがなぜ重要なのかわかりません。ローカル アカウントで何かをインストール/実行できない理由があるのでしょうか?
次に考慮すべきことは、なぜpasswd
??? を使用する必要があるかということです。 で指定されたハッシュを置き換えることによってパスワードを変更することもできます/etc/shadow
。当然、最初にハッシュを正しく事前生成する必要がありますが、サポートされているハッシュを使用する限り、期待どおりに動作するはずです。では、このようなアクションをどのようにスクリプト化するかは、自分で考えてみてください。
また、passwd
STDIN から入力を読み取りません。間違っていなければ、tty から読み取ります。したがって、との組み合わせだけではうまくecho
機能sleep
しません。ただし、HEREDOC を使用すれば可能ですが、システムが十分に応答することを前提としています。エントリ間で分割できる場合がありますsleep
。これをテストしたところ、Ubuntu ワークステーションで動作しました。
#!/bin/bash
passwd root <<'EOF'
newpassword
newpassword
EOF
答え2
エクスプロイトはグループ ファイルに書き込み、現在のユーザーを 'wheel' グループ (またはパスワードなしでコマンドを実行できるグループ) の一部にすることもできます。そうすれば、あなた(または他のユーザー) はパスワードなしでsudo
コマンドを実行できるようになります。sudo su root
実行すると、visudo
マシン上の「ホイール」グループの設定に関する指示が表示されます。
明確に言うと、ユーザーが wheel グループに所属すると、パスワードを必要とせずに sudo コマンドを実行できるようになります。