濫用 Linux Sudo
濫用 Linux Sudo
要能夠使用 sudo,當下 interactive 的低權限使用者帳號必須是 sudo 群組的成員
可以透過 /etc/sudoers 檔案查看相關權限,要列出可以 sudo 的使用者可以用 sudo -l or --list
sudo --list
從最後一行來看 (ALL) /usr/bin/crontab -l, /usr/sbin/tcpdump, /usr/bin/apt-get
只有三個指令 corntab、tcpdump、apt-get 被列為允許 sudo 指令
如果 /etc/sudoers 配置過於寬鬆,使用者可濫用短期管理權限來獲得永久 root 存取權
再細看上面的 corntab 使用了 -l 參數所以不允許該帳號編輯任何 crontab,因此不太可能使用它來查找任何提權方式,可將目標直接放到第二個、第三個指令上
記得上一節提到的 GTFObins 好用網站 https://gtfobins.github.io/
讓我們直接查看 tcpdump 的相關 sudo 利用 https://gtfobins.github.io/gtfobins/tcpdump/#sudo
讓我們依照指令輸入試試看
COMMAND='id'
TF=$(mktemp)
echo "$COMMAND" > $TF
chmod +x $TF
sudo tcpdump -ln -i lo -w /dev/null -W 1 -G 1 -z $TF -Z root
結果 GG,dropped privs to root........Permission denied,使用者與權限仍是 joe
查看一下 log 查明是甚麼原因遭到 Permission denied
cat /var/log/syslog | grep tcpdump
Log 中寫明 audit: type=1400 audit(1696494056.835:24): apparmor="DENIED"
audit 守護程式已記錄了權限提升嘗試,另 AppArmor 被觸發並阻止了此動作
AppArmor 是一個核心模組,它透過運行各種特定於應用程式的設定檔在 Linux 系統上提供強制存取控制 (MAC),並且在 Debian 10 上預設啟用。
讓我們使用 aa-status 命令以 root 用戶身份(密碼是 lab)先驗證 AppArmor 目前的狀態
如下看到並確認 tcpdump 受到專用 AppArmor 設定檔的主動保護
還記得前面有三個指令,第三個指令是 apt-get,讓我們查看 aa-status 的輸出中發現
並沒有 apt-get 指令,所以接著改利用第三個指令
PS : 注意實務滲透時無權限查看 aa-status 的結果(需要 root 權限),可以看的話哪還需要提權呢
所以必須一個一個指令嘗試利用
回到 apt-get 的 sudo 利用說明網頁如下
直接使用第一個 (a) 來嘗試看看
sudo apt-get changelog apt
!/bin/sh
輸入第一行指令後會跑出如下畫面,讓我們一樣輸入第二行指令 !/bin/sh
可以看到 whoami & id 輸出的結果都是 root 了
練習 :
相關資訊一樣,sudo --list 列出來的指令一樣有三個 crontab -l、tcpdump、gcc
嘗試 tcpdump 一樣 GG,改用 gcc https://gtfobins.github.io/gtfobins/gcc/
成功拿到 root 權限了,直接拿 flag 答案吧
留言
張貼留言