濫用 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 答案吧



留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)