Windows提權系列————上篇

FLy_鵬程萬里發表於2018-05-13

前言

在滲透測試中,提升自己的許可權是經常遇到的問題,往往在滲透中最容易獲取的許可權就是一個webshell,如果網站是架設在Windows系統上的,這時就可能遇到這樣的問題,還有一種情況是在做橫向滲透的時候,收集到一些可以遠端連線桌面的帳號,這是也需要,在實際的滲透中有很多的地方會需要這個操作,這個系列就主要介紹各種提權的方式。

提權基礎

在提權之前首先要做的是對系統的作業系統資訊做一些資訊收集,關於資訊收集的介紹請看之前的文章《Windows環境下的資訊收集》,這裡簡單提一下這幾條命令:

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	#獲取遠端埠

溢位提權

溢位提權是在提權過程中最通用的,但是其利用的關鍵點在於目標系統安全補丁打的不夠及時,才會讓攻擊者有機可乘,這裡大概列一下比較新的溢位exp。


WINDOWS錯誤系統配置

有時候由於運營者的錯誤配置可能給我們提權提供便利,提高我們的提權成功率,下面就對這個方面的提權方法做一個簡單的介紹。

可信任服務路徑

“Trusted Service Paths”漏洞是由系統中的“CreateProcess”函式引起的,利用了windows檔案路徑解析的特性,並涉及了服務路徑的檔案/資料夾許可權,存在缺陷的服務程式利用了屬於可執行檔案的檔案/資料夾許可權。如果許可權合適,我們可以上傳惡意可執行檔案。簡單講就是查詢系統服務檔案中存在非引用路徑。如果一個服務呼叫可執行檔案,沒有正確處理引用的全路徑名,就可以利用這個漏洞。metasploit整合了trusted_service_path(http://www.zeroscience.mk/codes/msfsession.txt)漏洞利用模組。

產生原因

windows服務通常都是以System許可權執行的,所以系統在解析服務的二進位制檔案對應的檔案路徑中的空格的時候也會以系統許可權進行解析。如果我們能利用這一特性,就有機會進行許可權提升。例如,有如下的檔案路徑:

C:\Program Files\Some Folder\Service.exe

對於上面檔案路徑中的每一個空格,windows都會嘗試尋找並執行名字與空格前的名字向匹配的程式。作業系統會對檔案路徑中空格的所有可能進行嘗試,直到找到一個匹配的程式。以上面的例子為例,windows會依次嘗試確定和執行下面的程式:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

所以如果我們能夠上傳一個適當命名的惡意可執行程式在受影響的目錄,服務一旦重啟,我們的惡意程式就會以system許可權執行(大多數情況下)。

利用步驟

1.檢測目標主機是否存在該漏洞

wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\" |findstr/i /v """

如果存在以下結果則表示存在:

FABS - Helping agent for MAGIX media database	 Fabs	C:\Program Files (x86)\Common 
Files\MAGIX Services\Database\bin\FABS.exe /DisableUI     Auto
2.檢查對有漏洞目錄是否有寫入的許可權。使用Windows內建工具icacls檢視路徑中受影響資料夾的許可權
(M)代表修改許可權,(F)代表完全控制,(CI)代表從屬容器將繼承訪問控制項,(OI)代表從屬檔案將繼承訪問控制項。


3.攻擊。將我們需要執行的exe根據需要重新命名並放置在可寫入的有漏洞目錄下,然後執行如下命令嘗試重啟服務,如果失敗的話等待伺服器重啟時執行exe,成功提權後記得清理痕跡。

sc stop service_name
sc start service_name
假如我們的exe會彈回一個SYSTEM許可權的meterpreter shell,但是我們新得到的會話很快就中斷了。這是因為當一個服務在Windows系統中啟動後,它必須和服務控制管理器通訊。如果沒有通訊,服務控制管理器會認為出現了錯誤,並會終止這個程式。我們所有需要做的就是在終止載荷程式之前,將它遷移到其它程式,也可以使用自動遷移set AutoRunScript migrate -f

系統服務的錯誤許可權配置漏洞

Windows系統服務檔案在作業系統啟動時會載入執行,並且在後臺呼叫可執行檔案。比如,JAVA升級程式,每次重啟系統時,JAVA升級程式會檢測Oracle網站,是否有新版JAVA程式。而類似JAVA程式之類的系統服務程式載入時往往都是執行在系統許可權上的。所以如果一個低許可權的使用者對於此類系統服務呼叫的可執行檔案具有可寫的許可權,那麼就可以將其替換成我們的惡意可執行檔案,從而隨著系統啟動服務而獲得系統許可權。metasploit整合了漏洞利用模組exploit/windows/local/service_permissions。手工測試步驟如下:

1.檢查易受攻擊的服務.SERVICE_ALL_ACCESS的意思是我們對“Vulnerable Service”的屬性擁有完全控制權。

accesschk.exe -uwcqv "Authenticated Users" * /accepteula
#"Authenticated Users"指Windows系統中所有使用使用者名稱、密碼登入並通過身份驗
證的賬戶,不包括來賓賬戶Guest。也可以使用當前使用者使用者名稱來列出所以可以被當前
使用者修改的服務。
#-->RW 360rp
#       SERVICE_ALL_ACCESS

2.檢視可以完全控制的服務的屬性。

3.修改服務配置執行命令。BINARY_PATH_NAME引數指向了該服務的可執行程式(360rps.exe)路徑。如果我們將這個值修改成任何命令,那意味著這個命令在該服務下一次啟動時,將會以SYSTEM許可權執行。

當嘗試啟動服務時,它會返回一個錯誤。這一點我們之前已經討論過了,在Windows系統中,當一個服務在Windows系統中啟動後,它必須和服務控制管理器通訊。如果沒有通訊,服務控制管理器會認為出現了錯誤,並會終止這個程式。上面的“net user”肯定是無法和服務管理器通訊的,但是不用擔心,我們的命令已經以SYSTEM許可權執行了,並且成功新增了一個使用者。

4.提權成功後修改服務配置,清理痕跡。

不安全的登錄檔許可權配置

在Windows中,和Windows服務有關的資訊儲存在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 登錄檔項中。以服務360rp為例,服務對應的程式路徑儲存在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnerable Service\360rp\ImagePath中,如果我們對這一鍵值有寫入許可權就可以修改服務對應的程式路徑,讓系統以SYSTEM許可權執行我們的程式,從而達到提權的目標。如下所示,我們可以使用SubInACL(https://www.microsoft.com/en-us/download/details.aspx?id=23510)工具去檢查登錄檔項的許可權。建議本地安裝後找到 subinacl.exe 拷貝到目標機器上執行。

subinacl.exe /keyreg "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnerable Service\360rp" /display
如果我們對登錄檔有寫入許可權,就可以修改登錄檔,使得服務啟動時執行我們的惡意程式:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnerable Service\360rp" /t REG_EXPAND_SZ /v ImagePath /d "C:\programdata\adduser.exe" /f

在下一次啟動該服務時,adduser.exe將會以SYSTEM許可權執行。成功提權後記得修改回配置。

不安全的檔案/資料夾許可權配置

可信任服務路徑漏洞產生的原因就是不安全的資料夾許可權以及“CreateProcess”函式。如果我們對系統服務對應的應用程式所在資料夾有寫入許可權,便可以直接使用惡意程式替換原來的可執行檔案,從而完成提權。

任意使用者以NT AUTHORITY\SYSTEM許可權安裝msi

AlwaysInstallElevated是一個策略設定,當在系統中使用Windows Installer安裝任何程式時,該引數允許非特權使用者以system許可權執行MSI檔案。如果目標系統上啟用了這一設定,我們可以使用msf生成msi檔案來以system許可權執行任意payload。msf整合了漏洞利用模組:exploit/windows/local/always_install_elevated 。詳細利用步驟如下:

1.判斷是否啟用了AlwaysInstallElevated策略。當兩個登錄檔鍵值查詢結果均為1時,代表該策略已啟用。

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
2.使用msfvenom生成惡意程式上傳
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o rotten.msi
3.執行惡意程式。
msiexec /quiet /qn /i C:\programdata\rotten.msi
# /quiet    安裝過程中禁止向使用者傳送訊息
# /qn       不使用GUI
# /i        安裝程式

計劃任務

可以使用如下命令檢視計算機上的計劃任務

schtasks /query /fo LIST /v

使用如下命令可以檢視指定目錄的許可權配置情況。如果我們對以高許可權執行的任務所在目錄具有寫入許可權,就可以使用惡意程式覆蓋掉原來的程式。當計劃任務下次執行時,就會以高許可權執行惡意程式,進而完成提權。

accesschk.exe -dqv "D:\test" -accepteula

總結

本文作為這個提權系列的上篇,主要講了提權的一些基礎資訊,提到了溢位提權、錯誤配置導致的提權等,由於作者還沒完全完成這個系列的所有內容,所以可能有不全的地方,請大家理解,隨後會慢慢放出作者已經完成的部分。如果有任何的問題或者建議,請大家積極留言討論。


相關文章