Linux 提權總結

一. sudo 和 suid 提權

  1. 何爲 suid

可見在權限位置有一個 s 權限。那麼這個 s 的作用是什麼呢?
答案是當其他用戶執行該文件時,該文件會以 root 的身份執行。
這裏就涉及到了 Effective UID 和 Real UID 以及 Saved UID
Effective UID: 程序實際操作時生效的 UID
Real UID: 執行該程序的用戶的實際 UID
Saved UID: 在高權限用戶降權後,保留的其原本 UID (不展開說)

所以增加了一個 s 權限,該程序在實際運行時 Effective UID 就會變爲 0,即 root 的 UID

  1. sudo

就是能把一個命令視作 root 來執行, 用 sudo-l 查看可以被 sudo 的命令

  1. SUID 與 sudo 提權

遍歷目錄中的 suid 文件

執行該命令,會得到所有 suid 文件

用 sudo -l 查看哪些命令能被 sudo

可利用於提權的命令

nmap

使用 nmap 的 udp 或 tcp syn 掃描時,需要用到 root 權限,所以有些管理員圖方便會直接給 namp 上 s 權限,而 nmap 5.20(使用 nmap -v 查看 nmap 版本) 之前有一個 interactive 交互模式 (nmap –interactive),在 nmap effective uid 爲 0 時,可以通過這個模式獲得 root 權限交互式命令行,成功提權

全版本通殺提權,利用 nmap 可以執行指定文件的特點提權

find

find 命令自帶 - exec 參數,可以執行命令,若 find 有 suid 權限,那麼使用 exec 相當於直接提權到 root.

vim

vim 有了 suid 就可以任意文件讀取了

同時也可以輸入 :shell

來獲取 root shell

bash

less,more

和 vim 差不多,任意文件讀取,同時也可以輸入 !command 進行提權到 root

exim

exim 在特定版本下會有 suid 提權

下載 exp 打就完事了

二. rbash 繞過

  1. 何爲 rbash

rbash,是出於安全性考慮的一個功能受限的 bash,我在 vulnhub dc-2 首次接觸, 他的限制性可能會有如下.

  1. bypass

scp bypass

我在 http://www.const27.com/2020/07/02/vulnhub-dc-2 / 就是用 scp 繞的

  1. 進入命令自帶 shell bypass

man,git config help,more,less,vim,vi,ftp,gdb 等命令都有自己的 shell,我們只需在他們各自的 shell 中執行 / bin/sh 即可
一般都是在 shell 鍵入!/bin/sh 來 bypass rbash

下面這種方法也是可行的(似乎僅 vim)

執行上面兩個語句,就 bypass 了

4 find bypasss

簡單概括就是 - exec 執行一下 / bin/bash …

5 編程語言 bypass

python

如果 python 都可以用的話,那就更輕鬆了,os 安排一下
似乎 pty 也行? 沒試

php

perl

ruby

  1. cp bypass

直接用 cp 把 / usr/bin 裏的命令複製過來就行了

  1. 直接更改 PATH/SHELL 變量

鍵入 export -p 查看該用戶的變量

如果這倆變量有 w 權,那麼我們可以直接寫入來 bypass

  1. ssh bypass

原理是通過 ssh 鏈接當前 IP 的當前用戶並啓動 / bin/bash

三. 內核提權

用 uanme -a 查明內核版本

然後找 exp 打就完事了,內核提權的內容有點底層,暫時不用深入瞭解

四. passwd 和 shadow

  1. 明文密碼

/etc/passwd 默認所有用戶可讀,但只有 root 可寫。
/etc/passwd 裏的用戶口令往往以 x 代替,其加密後的密碼會存入 / etc/shadow 裏面,/etc/shadow 默認只有 root 可讀。

但是有小概率情況,明文密碼就直接出現在 / etc/passwd 了,如果有這個情況且 root 密碼暴露在了 passwd 裏,那麼就可以輕而易舉提權了

  1. passwd 可寫

如果 / etc/passwd 我們當前用戶可寫,可以直接把 root 的密碼改成一個明文密碼,從而達到提權目的

  1. 爆破 shadow

如果 / etc/shadow 可讀,我們可以用 hashcat 或者 john 暴力破解 shadow 文件

五. 計劃任務

  1. 文件重寫

計劃任務由 crontab 管理,非 root 用戶是無法列出 root 用戶的計劃任務的,但我們可以列出 / etc 的系統任務,系統任務默認是 root 權限運行的

如果我們有幸有權限能更改其中一個任務指定的腳本,我們就可以往腳本里添加如反彈 shell 等指令,從而提權

  1. 環境變量劫持

我們查看定時任務

發現定義了諸多環境變量,如果其任務有未指定絕對路徑的指令,如

而且我們在其環境變量路徑中可以進行寫入操作,那麼我們可以通過寫入環境變量的靠前路徑一個同名惡意文件從而導致環境變量劫持

比如我們在 / sbin 寫入一個 反彈 shell 功能的 shell.sh,那麼就可以造成提權

  1. 通配符提權

https://www.secpulse.com/archives/72965.html 總結的太好了,我都不想記筆記了(偷懶

六. 環境變量

如果我們找到一個 suid 權限的程序,但是我們無法完成 suid 提權,就可以試試搭配環境變量進行提權。

這個提權方法的思想是,找到有 suid 的,內部有 system 函數調用未指定路徑的命令的文件。同時用戶有修改自己環境變量的權限,

我們就可以通過劫持 system 函數里調用的腳本文件,使其指向我們環境變量裏自行創建的一個同名腳本文件,那麼這個我們自行創建的同名腳本文件就能以 root 權限運行了,如果這個腳本文件裏的命令是 / bin/bash,那麼就相當於我們提權了。

可能有點小繞,看下面具體操作就行了。

實驗室配置:

首先在一個目錄下創建如下文件

然後 gcc demo.c -o shell 將其編譯爲可執行文件

然後 chmod u+s shell 爲其增加 suid 權限

攻擊者視角:

首先使用下列指令搜尋 suid 權限文件

發現可疑目標,執行一下看看

發現返回了 ps 命令的結果,我們可以以此猜測這個文件內部 有 system(“ps”); 這條 c 語言代碼。
遂可嘗試環境變量提權

我們依次執行以下命令

七. 密碼查找

這個提權技術說白了,就是去到處翻密碼

文件內查找

我們可以通過以上命令,指定關鍵字,在所有文件中搜索內容中有關鍵字的文件。

查找十分鐘內更改過的文件

八. capabilities

capabilities 是 linux2.2 後出現的產物,它的出現一定程度上彌補了 suid 這種粗糙的權限管理機制,但是 capabilities 自身也有造成提權的安全隱患

  1. 簡介

capabilities 把 root 的權限細分了,可以分別啓用或者禁用。

在進行特權操作的時候,如果 euid 不是 root,那麼系統就會檢查是否具有執行特權操作的對應 capabilities ,並以此爲憑據決定特權操作是否能被執行。

如下是一些常見的特權操作及其對應 capabilities

關於 capabilities 的管理工具有如下:

getcap 用於查詢 capabilities,setcap 用於設置 capabilities,capsh 用於查當前 shell 進程的 capabilities,filecap 既能設置又能查詢。

我們可以通過以下指令搜索設置了 capabilities 的可執行文件

  1. 實操

通過 cap_setuid

cap_setuid 可以設置當前用戶的 euid,我們可以通過此選項來進行一些提權。

以 python 爲例

我們發現 python3.8 有 cap_setuid 權限,那麼我們可以用以下指令進行提權

類似的有很多。

perl

gdb

php

python

rvim

需要支持 python3 模塊。

vim

需要支持 python3 模塊。vim --version查詢,是否支持 py3

cap_dac_read_search 可以繞過文件的讀權限檢查以及目錄的讀 / 執行權限的檢查。

利用此特性我們可以讀取系統中的敏感信息。

如果 tar 有此權限,我們可以通過此來查看敏感文件內容。

tar -xvf shadow.tar //解壓縮

cd etc //進入解壓縮的目錄

chmod +r shadow //賦予讀權限

cat shadow | grep root //查看shadow文件的內容

九. Docker

Docker 用戶組提權

如果我們拿到了一個 Docker 用戶組的用戶權限,那麼我們可以很輕鬆地完成提權

首先我們執行如下命令

然後在其中的 / etc/passwd 中寫入一個 root 權限用戶(我這裏直接無密碼了)

然後退出來,直接嘗試 su root2

提權成功

十. NFS

NFS 是一個用來共享目錄的東西,但若配置權限不當則會引發安全問題

no_root_squash

我們 cat /etc/exports 如果有 no_root_squash 字樣,則說明 root 用戶就會對共享目錄擁有至高的權限控制,就像是對本機的目錄操作一樣。

也就是說,任何機器的 root 在此目錄上都有最高權限。

我們在獲得一臺機器的 root 權限後,可以通過 nfs 在另一臺低權限機器上實現提權

回到低權限機,執行 /tmp/bash 完成提權

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/1imh1Pl6tA95NpiF-e1sbQ