Linux 手動列舉

 Linux 手動列舉


靶機 IP : 192.168.218.214,已知帳號密碼 joe / offsec

SSH 登入後確認 whoami 與 IP 資訊,然後下 id

uid=1000(joe) gid=1000(joe) groups=1000(joe)




linux 查找帳號第一步,查看 /ect/passwd 檔案



當中有幾個比較值得注意的帳號

 - root:x:0:0:root:/root:/bin/bash --> 系統預設 root 帳號

 - www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin --> Web Service 帳號

 - sshd:x:109:65534::/run/sshd:/usr/sbin/nologin --> SSH 伺服器服務帳號

 - joe:x:1000:1000:joe,,,:/home/joe:/bin/bash --> 現在登入使用者號,此為第一個使用者

 - eve:x:1001:1001:,,,:/home/eve:/bin/bash --> 此為第二個使用者帳號


另外在這些帳號後面有一個 "x",此欄位通常包含使用者密碼的雜湊值
一般預設 x 表示整個密碼雜湊值包含在 /etc/shadow 檔案中

一般系統服務是使用 /usr/sbin/nologin,nologin 語句用於阻止服務帳戶的任何遠端或本機登入

下一步枚舉主機名稱 hostname,主機名稱有時可以發現一些貓膩




cat /etc/issue & cat /etc/os-release 檔案包含作業系統發行版和版本的資訊

也可以執行uname -a 指令查看核心

核心有部分漏洞可以利用,但要準確的利用避免造成系統不穩定導致警報發生

位於 /etc 目錄中的 issues & os-release 檔案包含作業系統版本 (Debian 10) 和特定發行版的信息,包括發行版代號 (buster)。指令 uname -a 輸出核心版本 (4.19.0) 和體系結構 (x86_64)




下一步枚舉服務,可以利用的服務是透過特權帳號啟動的服務並且必須具有不安全的權限或允許我們用意想不到的方式與其互動,使用指令 ps aux

使用 a & x 參數列出所有有或沒有 tty 的進程,並使用 u 參數以使用者可讀的格式列出進程





值得關注的服務,尤其是這種以 root 身分運行的服務




可以看到我們運行的 ps aux 服務也在其中




網路介面資訊 ip a




查看路由 routel





網路 listen 狀態,可以使用 netstat or ss 命令

例如 : netstat -ano or ss -anp




特別注意此規則檔案 cat /etc/iptables/rules.v4

有一條非預設的規則,先記錄下來





還有類似 Windows Scheduled Task 的排程任務也是值得關注的,列舉 ls -lah /etc/cron*


可以看到許多每小時、每天、每週、每月的工作排程




值得注意的是,系統管理員經常在 /etc/crontab 檔案中新增自己的排程任務。應仔細檢查這些任務是否有不安全的檔案權限,因為此特定檔案中的大多數作業都將以 root 身分執行。要查看目前使用者的排程作業,我們可以執行 crontab 並後面跟著 -l 參數

當前使用者僅有註釋沒有特別的




此指令要特別注意另外使用 sudo 來執行查看,可以看到就有一行每日備份的任務

這是一個以 root 身分執行的任務排程,如果該檔案的權限配置過低的話

那就可以透過修改替換該檔案來達到提權的方式





接著如同 windows 一樣調查已安裝的工具軟體包,透過指令 dpkg -l 查看

之前看到 www-data 可以懷疑有安裝 Web Service,透過安裝的工具包來查看後

如下圖可以看到 Apache 2.4.38(這個版本剛好就有提權的漏洞)





接著透過 find 指令搭配 -writable 從根目錄開始列舉當前使用者可以寫入的目錄

find / -writable -type d 2>/dev/null

尤其看到剛剛用 root 跑的每日備份路徑有寫入權限 /home/joe/.scripts






/etc/fstab 檔案列出了將在引導時安裝的所有磁碟機,是一個枚舉的重點

就像 mount 一般,寫明了開機要載入的外部磁碟機






接著使用 lsblk 查看所有可用磁碟





使用 lsmod 枚舉載入核心模組





此台主機載入的驅動程式和核心模組的清單如下 libata




接著使用 modinfo 來查找更多資訊,需要知道完整路徑

/sbin/modinfo libata

一旦我們獲得了驅動程式及其版本的列表,我們就可以更好地找到任何相關的漏洞




除了前面描述的rwx檔案權限之外,還有兩個與執行檔相關的附加特殊權限:setuid & setgid

它們用字母 "s" 表示。

如果設定了這兩個權限,則權限中將出現大寫或小寫的「s」。這允許目前使用者以所有者(setuid)或所有者群組 (setgid)的權限執行該檔案。

運行可執行檔時,它通常會繼承運行它的使用者的權限。但是,如果設定了 SUID 權限,則二進位檔案將以檔案擁有者的權限執行。這意味著,如果二進位檔案設定了 SUID 位元並且該檔案由 root 使用者擁有,則任何本機使用者都將能夠以提升的權限執行該二進位檔案。

當使用者或系統自動腳本啟動 SUID 應用程式時,它會繼承其啟動腳本的 UID/GID:這稱為有效 UID/GID(eUID、eGID),它是作業系統驗證授予的實際使用者給定操作的權限。

任何成功破壞 setuid root 程式以呼叫其選擇的命令的使用者都可以有效地模擬 root 使用者並獲得系統的所有權限。滲透測試人員在獲得系統存取權限時會定期搜尋這些類型的文件,以此作為升級權限的一種方式。

可以使用 find 來搜尋帶有 SUID 標記的二進位檔案

指令 : find / -perm -u=s -type f 2>/dev/null





三個好用的 Linux 提權網站

https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Linux%20-%20Privilege%20Escalation.md

https://book.hacktricks.xyz/linux-hardening/privilege-escalation




練習 : 搜尋系統上可用的 SUID 二進位檔案之一內的 flag

第一步先列舉出所有 SUID File

joe@debian-privesc:~$ find / -perm -u=s -type f 2>/dev/null




部分檔案是二進位所以人類不可讀,要先用 strings 指令轉換

所以直接前面加上 cat 後面加上 | strings | grep ^OS (轉換二禁制後列出以 OS 為開頭的字串)

一跑下去就看到答案了




留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)