我是root用戶。正在了解作業系統權限提升。 Linux

我花了 2020 年第一季度的時間準備 OSCP 考試。 在Google上搜索信息以及大量的“盲目”嘗試佔據了我所有的空閒時間。 事實證明,理解特權升級機制尤其困難。 PWK課程非常關注這個話題,但方法論材料總是不夠。 互聯網上有很多包含有用命令的手冊,但我不支持在不了解這會導致什麼結果的情況下盲目遵循建議。

我想與您分享我在準備和成功通過考試期間學到的東西(包括定期對 Hack The Box 進行突擊檢查)。 我對每一個幫助我更有意識地走“努力”之路的信息都深表感激,現在是我回饋社區的時候了。

我想給你一份關於如何在作業系統中提升權限的手冊。 Linux其中包括最常見攻擊向量和相關技巧的分析,相信您一定會覺得有用。通常,權限提升機製本身相當簡單;困難在於如何組織和分析相關資訊。因此,我決定先進行一次“概覽”,然後在每篇文章中單獨探討一種攻擊向量。希望這能為您節省一些研究時間。

我是root用戶。正在了解作業系統權限提升。 Linux

那麼,如果這些方法已經眾所周知很長時間了,為什麼在 2020 年還可能出現特權升級呢? 事實上,如果用戶正確操作系統,是根本不可能在系統中增加權限的。 產生這些機會的主要全球問題是 不安全的配置。 系統中存在包含漏洞的過時軟件版本也是不安全配置的一種特殊情況。

通過不安全配置進行權限升級

首先,讓我們處理不安全的配置。 讓我們從 IT 專業人員經常使用手冊和資源,例如 stackoverflow,其中許多包含不安全的命令和配置。 一個引人注目的例子是 新聞 從 stackoverflow 複製最多的代碼包含錯誤。 經驗豐富的管理員會看到門框,但這是一個理想的世界。 即使是有能力的專業人士 工作量增加 有能力犯錯誤。 想像一下,管理員正在準備和批准下一次招標的文檔,同時深入研究下個季度將推出的新技術,同時定期解決用戶支持任務。 然後,他的任務是快速啟動幾個虛擬機並在其上推出服務。 您認為管理員根本沒有註意到門框的概率是多少? 然後,專家發生了變化,但拐杖仍然存在,而公司始終努力最大限度地降低成本,包括 IT 專家的成本。

偽shell與越獄

在生產階段獲得的系統 shell 通常是有限的,特別是如果您通過黑客攻擊 Web 服務器用戶來獲得它。 例如,shell 限制可能會阻止您使用 sudo 命令並出現錯誤:

sudo: no tty present and no askpass program specified

獲得 shell 後,我建議創建一個成熟的終端,例如使用 Python。

python -c 'import pty;pty.spawn("/bin/bash")'

您會問:“如果我可以使用一個命令來傳輸文件,為什麼我需要一千個命令?” 事實上,系統的配置不同,在下一個主機上可能沒有安裝Python,但Perl可能可用。 技能是能夠在沒有熟悉的工具的情況下在系統中做熟悉的事情。 可以找到完整的功能列表 這裡.

可以使用以下命令獲取低權限 shell 團隊 1 и 團隊 2 (令人驚訝的是,甚至還有 GIMP)。

查看命令歷史記錄

Linux 將已執行命令的歷史記錄收集到一個檔案中。 ~ / .bash_history。 如果服務器正在使用中並且其歷史記錄未清除,則很有可能在此文件中找到憑據。 清除歷史記錄通常很不方便。 如果管理員被迫通過 來選擇十級命令,當然,從歷史記錄中調用該命令會比再次輸入更方便。 另外,許多人不知道這個“黑客”。 如果系統中有像 Zsh 或 Fish 這樣的替代 shell,它們就有自己的歷史。 要在任何 shell 中顯示命令歷史記錄,只需鍵入命令歷史記錄即可。

cat ~/.bash_history
cat ~/.mysql_history
cat ~/.nano_history
cat ~/.php_history
cat ~/.atftp_history

有共享託管,其中服務器用於託管多個站點。 通常,使用此配置,每個資源都有其自己的用戶,具有單獨的主目錄和虛擬主機。 因此,如果配置不正確,您可以在Web資源的根目錄中找到.bash_history文件。

在文件系統中查找密碼並對相鄰系統進行攻擊

您當前的用戶可能可以讀取各種服務的配置文件。 在其中,您可以找到明文的憑據 - 用於訪問數據庫或相關服務的密碼。 可以使用相同的密碼來訪問數據庫和授權 root 用戶(憑證人員配置)。
碰巧找到的憑據屬於其他主機上的服務。 通過受感染的主機對基礎設施進行攻擊並不比利用其他主機更糟糕。 還可以通過在文件系統中查找 IP 地址來找到相鄰系統。

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Find string password (no cs) in those directories
grep -a -R -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/ 2>/dev/null | sort -u | uniq #IPs inside logs

如果受感染的主機具有可通過 Internet 訪問的 Web 應用程序,則最好將其日誌從 IP 地址搜索中排除。 來自互聯網的資源用戶的地址不太可能對我們有用,但是內部網絡的地址(172.16.0.0/12、192.168.0.0/16、10.0.0.0/8)以及它們去了哪裡,通過日誌,可能感興趣。

須藤

sudo 指令允許使用者以 root 使用者身分執行指令,可以使用自己的密碼,也可以完全不使用密碼。許多操作 Linux 需要 root 權限,但以 root 身分運行被認為是非常糟糕的做法。更好的做法是使用選擇性權限在 root 上下文中執行命令。然而,許多工具 Linux包括像 vi 這樣的標準編輯器在內的各種編輯器,都可以用於以完全合法的方式提升權限。為了找到合適的方法,我建議參考… 這裡.

獲得系統訪問權限後要做的第一件事是運行 sudo -l 命令。 它將顯示使用 sudo 命令的權限。 如果獲得沒有密碼的用戶(例如 apache 或 www-data),則不太可能出現 sudo 權限升級向量。 使用 sudo 時,系統會要求輸入密碼。 使用 passwd 命令設置密碼也不起作用,它會要求當前用戶密碼。 但如果 sudo 仍然可用,那麼,實際上,您需要查找:

  • 任何解釋器,任何人都可以生成 shell(PHP、Python、Perl);
  • 任何文本編輯器(vim、vi、nano);
  • 任何觀眾(更少、更多);
  • 使用文件系統的任何可能性(cp、mv);
  • 在 bash 中以交互方式或作為可執行命令輸出的工具(awk、find、nmap、tcpdump、man、vi、vim、ansible)。

Suid/Sgid

互聯網上有許多手冊建議構建所有 suid / sgid 命令,但很少有一篇文章詳細說明瞭如何使用這些程序。 可以找到不考慮利用漏洞的提權選項 這裡。 此外,許多可執行文件存在針對操作系統版本的特定漏洞, 例如.

在理想的情況下,您應該至少通過 searchsploit 運行所有已安裝的軟件包。 實際上,這應該使用最流行的程序(如 sudo)來完成。 它也始終是使用和支持自動化工具開發的一個選項,從權限升級的角度來看,這些自動化工具將突出顯示具有 suid/sgid 位集的可執行文件。 我將在文章的相應部分給出此類工具的列表。

由 Cron 或 Init 在根上下文中運行的可寫腳本

Cron 作業可以在不同用戶(包括 root)的上下文中運行。 如果 cron 中有一個任務帶有可執行文件的鏈接,並且您可以編寫該任務,那麼您可以輕鬆地將其替換為惡意任務並執行權限提升。 同時,默認情況下,任何用戶都可以讀取帶有 cron 任務的文件。

ls -la /etc/cron.d  # show cron jobs 

init 的情況也類似。 不同之處在於 cron 中的任務是定期執行的,而 init 中的任務是在系統啟動時執行。 操作時,您需要重新啟動系統,而某些服務可能無法啟動(如果它們沒有在自動加載中註冊)。

ls -la /etc/init.d/  # show init scripts 

您還可以搜索任何用戶可寫的文件。

find / -perm -2 -type f 2>/dev/null # find world writable files

該方法相當著名,經驗豐富的系統管理員會小心使用chmod命令。 然而,在網絡上,絕大多數手冊都描述了設置最大權限。 缺乏經驗的系統管理員的“讓它發揮作用”的方法原則上為權限升級創造了機會。 如果可能,最好在命令歷史記錄中查找 chmod 的不安全使用。

chmod +w /path 
chmod 777 /path

獲得其他用戶的 shell 訪問權限

我們查看 /etc/passwd 中的用戶列表。 我們關注那些有殼的人。 您可以暴力破解這些用戶 - 通過生成的用戶,您最終可能能夠增加權限。

為了提高安全性,我建議您始終堅持最小權限原則。 花時間檢查故障排除後可能殘留的不安全配置也是有意義的 - 這是系統管理員的“技術職責”。

自寫代碼

值得仔細查看用戶和 Web 服務器主目錄(/var/www/,除非另有指定)中的可執行文件。 這些文件可能是一個完全不安全的解決方案,並且包含令人難以置信的拐杖。 當然,如果您的 Web 服務器目錄中有一些框架,那麼作為滲透測試的一部分在其中搜索零日漏洞是沒有意義的,但建議查找和研究自定義修改、插件和組件。

為了提高安全性,最好避免在自己編寫的腳本中使用憑據,以及潛在危險的功能,例如讀取 /etc/shadow 或操作 id_rsa(如果可能)。

通過利用漏洞提升權限

在嘗試通過利用來提升權限之前,了解以下內容非常重要: 將文件傳輸到目標主機。 除了ssh、ftp、http(wget、curl)等常用工具外,還有一整套 可能性的“動物園”.

為了提高系統的安全性,請定期更新到最新版本 穩定的 版本,並嘗試使用為企業設計的發行版。 否則,很少,但有時會出現 apt 升級導致系統無法使用的情況。

利用在根用戶上下文中運行的服務

部分服務 Linux 它們以 root 使用者特權運作。可以使用指令 `ps aux | grep root` 找到它們。但是,該服務可能不會在線上公開,但可能可以在本地存取。如果它有公開可用的漏洞程序,則可以安全地使用它們:服務故障遠不如作業系統崩潰那麼嚴重。

ps -aux | grep root # Linux

最成功的案例是被駭客入侵的服務以 root 使用者身分執行。利用 SMB 服務漏洞可以獲得對系統的 SYSTEM 特權存取權限。 Windows (例如,透過 ms17-010)。然而,在系統中 Linux 這種情況並不常發生,所以你可以花很多時間來提升你的權限。

利用內核漏洞 Linux

這是最後一條路。 不成功的操作可能會導致系統崩潰,並且在重新啟動時,某些服務(包括那些可以通過其獲取原始shell的服務)可能無法啟動。 碰巧管理員只是忘記使用 systemctl enable 命令。 另外,如果未經同意利用,將會引起對您的工作的極大不滿。
如果您決定使用exploitdb 中的源代碼,請務必閱讀腳本開頭的註釋。 除此之外,它通常會說明如何正確編譯此漏洞利用程序。 如果你太懶了或者由於截止日期而需要“昨天”,你可以尋找已經編譯了漏洞的存儲庫, 例如。 然而,應該明白,在這種情況下,你將陷入困境。 另一方面,如果程序員完全了解計算機的工作原理及其使用的軟件,那麼他一生都不會寫出一行代碼。

cat /proc/version
uname -a
searchsploit "Linux Kernel" 

Metasploit

為了捕獲和處理連接,最好使用exploit/multi/handler 模塊。 最主要的是設置正確的有效負載,例如 generic/shell/reverce_tcp 或 generic/shell/bind_tcp。 在Metasploit中獲得的shell可以使用post/multi/manage/shell_to_meterpreter模塊升級到Meterpreter。 使用 Meterpreter,您可以自動化後利用過程。 例如,post/multi/recon/local_exploit_suggester 模塊檢查平台、架構和可利用實體,並建議 Metasploit 模塊在目標系統上進行權限升級。 感謝 Meterpreter,權限升級有時歸結為運行正確的模塊,但在不了解幕後發生的情況的情況下進行黑客攻擊是不正確的(您仍然需要編寫報告)。

工具

自動收集本地信息的工具將為您節省大量精力和時間,但它們本身無法完全識別權限升級路徑,特別是在利用內核漏洞的情況下。 自動化工具將執行所有必要的命令,以便您收集有關係統的信息,但能夠 分析 收到數據。 我希望我的文章在這方面對您有用。 當然,還有比我下面列出的更多的工具,但它們都做同樣的事情 - 這更多是一個品味問題。

豌豆

這是一個相當新鮮的工具,第一次提交日期為 2019 年 XNUMX 月。 目前我最喜歡的樂器。 最重要的是,它突出了最有趣的特權升級向量。 同意,在這個級別獲得專家評估比解析整體原始數據更方便。

林枚舉

我第二喜歡的工具,它還收集和組織作為本地枚舉結果收到的數據。

Linux-exploit-suggester (1,2)

此漏洞將分析系統以尋找適合漏洞利用的條件。 事實上,它將執行與 Metasploit local_exploit_suggester 模塊相同的工作,但將提供exploit-db 源代碼而不是 Metasploit 模塊的鏈接。

Linux隱私檢查器

該腳本將按部分收集和組織大量信息,這些信息可用於形成權限升級向量。

下次我會詳細說明 作業系統權限提升 Linux 通過 suid/sgid.

來源: www.habr.com

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster