標籤:

乾貨 | 《魔獸爭霸3》地圖漏洞分析介紹

01 前言

最近騰訊電腦管家團隊對利用《魔獸爭霸3》漏洞傳播的「蘿莉」蠕蟲進行了分析,介紹了「蘿莉」蠕蟲的運行流程。接著該「蠕蟲」的作者在其網站對此做了澄清,我們暫且不八卦這個事件,只在技術層面分析一下這個《魔獸爭霸3》漏洞到底是什麼,如何利用以及如何防禦。

02 簡介

該《魔獸爭霸3》漏洞的流程如下:

1.攻擊者上傳修改過的魔獸地圖,等待其他玩家進入房間遊戲

2.玩家進入房間後,由於本地沒有該地圖,所以會自動下載該地圖

3.地圖同步後,玩家進入遊戲,觸發地圖中的腳本,該腳本在啟動目錄寫入bat文件

4.玩家電腦重啟後,啟動目錄中的bat文件被執行,成功載入payload

03 相關概念

JASS是《魔獸爭霸3》的腳本語言,用於控制地圖的進程和行為, 是魔獸遊戲和地圖的基礎。正常的地圖編輯中擺放的單位(Unit), 設置的觸發(Trigger)等最終都會被翻譯成JASS語言,保存在地圖文件中,在遊戲運行被調用

HkeW3mModifier是一個修改MPQ格式文件的工具,可用來修改加密過的mpq文件,帶有強大的資源搜索功能,可以搜索出魔獸地圖中大部分資源、重建列表,智能解壓相關貼圖。可用來查看和編輯地圖中包含的文件資源。

操作說明:

下載HkeW3mModifier.exe,選擇地圖,點擊分析文件查看地圖中包含的文件列表,如圖

其中,war3map.j包含地圖的邏輯控制代碼,右鍵解壓war3map.j後可查看其中的代碼,部分代碼如圖

war3map.j中的文件結構

1、變數聲明

聲明了腳本文件中使用的全局變數

Lost Temple中的變數聲明如下:

2、觸發器部分

聲明了地圖中使用的觸發器

Lost Temple中的觸發器部分如下:

根據函數名稱能夠猜出表示的意思

function Trig_Melee_Initialization_Actions為觸發器進行的操作

function InitTrig_Melee_Initialization用來初始化

function InitCustomTriggers為用戶自定義觸發器的註冊

function RunInitializationTriggers的功能是運行觸發器

3、主函數main

腳本文件的入口

Lost Temple中的main部分如下:

4、其他設置

如Unit Item Tables、Unit Creation、Players、Map Configuration暫略

04 Jass預讀文件漏洞

Reference:bbs.islga.org/forum.php?

JASS中三個特殊的函數:

native PreloadGenClear takes nothing returns nothing

native PreloadGenStart takes nothing returns nothing

native PreloadGenEnd takes string filename returns nothing

以上三個函數用來記錄PreloadGenStart()和PreloadGenEnd()之間執行的所有Preload()語句,並將它們寫入到PreloadGenEnd()函數指定的pld文件里去

註:類似於輸出日誌文件

示例:

JASS代碼如下:

執行函數Test()後,就會在c:test下新建文件test.pld,並寫入如下內容:

漏洞原理

1、設置輸出為bat文件

如果將輸出的.pld文件後綴名改為.bat,那麼文件中的每一行被當作一段代碼被執行(當然語句無效,不符合批處理的語法),如圖

2、加入換行符n

在批處理的語法中,n代表換行。雖然.pld文件輸出的每行內容格式固定,但是,如果通過n把call Preload()這一行中的內容截斷,那麼就能夠實現在新的一行顯示一條可被執行的批處理命令

示例:

JASS代碼如下:

輸出成test.bat後會包含換行符,輸出的文件內容如下:

此時,產生了新的一行代碼@echo Test,@echo Test得到執行,如圖

3、執行批處理

默認JASS只能做到輸出文件,無法執行文件,所以只能將文件輸出到文件啟動項下,在重啟後得到執行

05 實際測試

1、測試HelloGA2012.w3m

下載地址:bbs.islga.org/forum.php?中的附件

war3版本:1.27.0.52240

載入地圖HelloGA2012進入遊戲後,按Esc鍵,如圖,彈出提示,在D:XX下產生文件test.pld

跳到目錄D:XX,找到test.pld,內容如下:

測試成功

2、手動修改官方地圖LostTemple

(1) 獲得源文件

使用HkeW3mModifier打開官方地圖(4)LostTemple.w3m,導出war3map.j

(2) 添加payload

根據上文對war3map.j中文件結構的分析,在function Trig_Melee_Initialization_Actions內添加如下代碼:

如圖

(3) 保存

保存war3map.j後,在HkeW3mModifier選擇替換(添加)文件,如圖

選擇重壓縮,保存地圖文件,如圖

(4) 測試

將地圖置於Maps文件夾下,進入遊戲,地圖被識別,如圖

註:

為便於測試,已將地圖名稱修改為Test,覆蓋原地圖,迷惑性更大

開始遊戲,c:test下產生文件test.bat,內容如下:

如果將該文件輸出到開機自啟動目錄,那麼在重啟後,文件將會執行

測試成功

06 補充

1、這個漏洞本身並不包含代碼執行的功能,所以漏洞成功利用的關鍵在於找到一個執行代碼的方法,最直接的方式為將文件輸出到啟動項中,當然,也可利用該漏洞實現對指定文件的修改

2、dota地圖中war3map.j的位置為scriptswar3map.j,同樣可以利用

07 小結

嚴格意義來講,這個《魔獸爭霸3》漏洞並不是一個漏洞,只是war3地圖中支持一個輸出文件的正常功能,利用這個功能,將精心構造的代碼輸出到特定位置,再配合其他方式來執行它。

所以該漏洞利用的關鍵在於執行的方式,通用方法無非就是寫開機啟動項。

對於普通用戶來講,注意本機的開機啟動項目錄就好,同時,殺毒軟體也已經能夠檢測到該利用方式。

注意自我保護,謹防受騙上當。

適度遊戲益腦,沉迷遊戲傷身。

註:本文屬嘶吼原創稿件,未經許可禁止轉載

推薦閱讀:

Active Directory許可權持久控制之惡意的安全支持提供者(SSP)
隱寫技巧——PNG文件中的LSB隱寫
2017-09-11
一招搞定英語中證券技術分析的「黑話」

TAG:技术分析 |