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

wyzsk發表於2020-08-19
作者: 小飛 · 2015/11/26 15:57

0x00 Windows Server Update Services


WSUS是Windows Server Update Services的簡稱。利用這個windows服務,管理員只需要保證區域網中的一臺主機能夠連線到MicroSoftUpdate伺服器,就能實現內網中所所有主機快速地進行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的時候,會有一個這樣的註冊過程。

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

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

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

#!xml
<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)

#!xml
<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

#!xml
<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標籤

相關文章