我是根。 了解 Linux 操作系統權限提升

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

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

我想為您提供 Linux 操作系統中的權限升級指南,其中包括對您肯定需要的最常見向量和相關功能的分析。 通常,權限升級機製本身非常簡單,但在構建和分析信息時會出現困難。 因此,我決定從“觀光旅遊”開始,然後在單獨的文章中考慮每個向量。 我希望我能節省您學習該主題的時間。

我是根。 了解 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 身份運行被認為是非常糟糕的做法。 相反,最好應用選擇性權限來在根上下文中執行命令。 然而,許多 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 根。 在這種情況下,該服務可能不會在 Web 上公佈並在本地提供。 如果它具有公共漏洞,則可以安全地使用它們:發生故障時的服務崩潰比操作系統崩潰要嚴重得多。

ps -aux | grep root # Linux

最成功的案例可以被認為是在 root 用戶的上下文中操作被黑客攻擊的服務。 操作 SMB 服務可以為 Windows 系統提供 SYSTEM 特權訪問(例如通過 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

添加評論