当前位置: 首页 > news >正文

星际争霸1 EUD漏洞利用技术解析

利用星际争霸1 EUD漏洞

星际争霸(1998年发布)仍然是有史以来最好的策略游戏之一。20多年后,它仍然拥有强大的社区,并在2017年发布了具有更新图形和声音的重制版。然而,像大多数软件一样,它也有不少bug。其中一个bug是游戏地图中嵌入脚本的解析器中存在的任意读写漏洞。

漏洞 - Extended Unit Death

发布八年后,2006年1月18日,星际争霸补丁版本1.13f发布。该补丁说明简单地写着"修复了导致游戏利用的几个bug"。除其他外,它修复了一个特定的bug,被称为"Extended Unit Death",EUD。

星际争霸在游戏中有一个简单的脚本系统,允许地图包含小段代码来操纵游戏的某些方面,以创建新的游戏模式或故事驱动的战役地图。这些脚本称为"触发器",以简单的if-then方式结构化。每个触发器都有一组"条件"和"动作"。当触发器的所有条件都满足时,所有动作都将执行。

游戏还跟踪每个玩家杀死每种类型单位的数量。这些被称为"死亡计数器",并简单地存储在<玩家数量> x <单位类型数量>的无符号4字节条目表中。当单位被杀死时,会运行类似于unit_deaths[player_id][unit_type]++的代码。然后可以在触发器的条件部分使用这些值,将其与特定值进行比较以确定条件是否满足,基本上创建像if(unit_deaths[current_player][unit_type] == X)这样的条件。

漏洞在于这些动作中,unit_type索引未检查有效范围,因此允许我们在此数组的任何偏移处读取、写入、添加和减去值。此外,由于程序未启用PIE且数组作为全局变量存储,它具有已知地址,我们可以完全控制访问的地址。

1.13f补丁向三个函数添加了范围检查:

  • 0x004C5DD0: action_deaths_set
  • 0x004C5C60: action_deaths_add
  • 0x004C5A80: action_deaths_sub

设置

我决定尝试为此bug编写漏洞利用,目标是在另一玩家的计算机上实现完整的远程代码执行。当您在线玩星际争霸时,可以使用自己创建的地图托管游戏。每个加入游戏的玩家将从您那里下载地图,所有触发器将在每个参与者的客户端中同时运行。

该漏洞最初在版本1.13f中修补,因此只有运行较旧版本的客户端易受攻击。但许多人喜欢利用此机制创建的有趣游戏的自定义地图(称为"EUD地图"),因此创建了名为EUDEnable的工具来在内存中修补游戏并重新引入该bug。

漏洞利用

客户端本身是一个标准的32位Windows二进制文件,具有以下保护:

  • Dynamic Base: false
  • ASLR: false
  • High Entropy VA: false
  • Force Integrity: false
  • Isolation: true
  • NX: true
  • SEH: true
  • CFG: false
  • RFG: false
  • SafeSEH: false
  • GS: false
  • .NET: false

我们主要感兴趣的是它有NX但没有ASLR,因此文本和数据段将位于已知地址。

要使用此原语实际编写漏洞利用,我们需要知道死亡计数器在内存中的位置,以便了解哪些偏移对应于内存中的什么位置。由于程序没有ASLR,这很容易通过反汇编或调试游戏来确定。

第一步是控制EIP。这相当简单。在内存布局中,我们可以找到"触发器动作函数数组",这是所有可触发动作的函数指针数组。通过简单地覆盖此表中的条目并调用相应的动作,我们控制指令指针。

我们发现以下gadgets:

0x0040ccb3: push [0x0050C63C]; call [0x0051BC08];
0x00469c72: pop ecx; add al, 0x89; pop esp; retn 0x8904;

这意味着如果我们将值X写入地址0x0050C63C,将值0x00469c72写入地址0x0051BC08,最后使用上述技术跳转到地址0x0040ccb3,将导致esp寄存器设置为X+0x8904+0x4,然后在X处执行指令。

现在我们有了栈转移,并使用它来执行ROP链。我们将ROP链写入bss的末尾,并在其后放置一段shellcode。bss尚不可执行,但ROP链将解决这个问题。ROP链将简单地调用VirtualProtect使bss可执行,然后返回到shellcode。

最后,我们只需要一些shellcode。对于PoC,我选择了一些32位shellcode来运行calc.exe,将其拆分为4字节块,并使用脚本将其写入ROP链之后。

结论

为我最喜欢的游戏之一研究和编写此漏洞利用非常有教育意义,尽管这是一个相当容易利用的漏洞,但当我最终成功利用并弹出计算器时,我感到非常满意。我决定让其他人也有类似的体验,因此将此漏洞变成了Midnight Sun CTF 2020资格赛中的一个挑战。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.hskmm.com/?act=detail&tid=33737

相关文章:

  • 实现更公平的机器学习技术探索
  • TexSmart 文档处理器
  • 嗽烦杭谋方鄙夯蠢恳孟
  • 泼晌土咐颗握放缚逃戎
  • 题解:P14244 [CCPC 2024 Shandong I] 阻止城堡
  • 倒喊说关狗纯郝飞沽峦
  • 乓偎垢夹突蕾刻依滴矩
  • Longest subsequence
  • 2025 年济宁短视频拍摄公司最新推荐榜,技术实力与市场口碑深度解析
  • winform/WPF 通信协议目录索引
  • 202. 快乐数
  • SQLite使用入门
  • 数论-supergcd
  • Layui框架使用入门
  • The 2024 ICPC Asia Hangzhou Regional Contest
  • 手机也能用的在线p图网站,大图轻松处理
  • Spring Boot框架常见问题
  • C# - Socket 基础指南
  • XSS检测绕过(UTF-7编码绕过)
  • Java平台的SQL监控组件
  • 2025 年东莞网络公司推荐,东莞市正度网络科技有限公司提供企业网络营销全流程适宜落地方案
  • 2025 年无锡短视频拍摄公司推荐:宜兴企拓网络,提供新媒体营销与短视频全流程解决方案
  • 2025 年中心供氧系统厂家推荐:山东恒大医用设备工程有限公司,提供医疗工程一体化解决方案
  • CF2135 C. By the Assignment
  • 2025 年防爆冰箱厂家推荐:浙江其春电气技术解析,防爆冰箱 / 冷柜 / 空调专业解决方案与应用实践
  • 2025 年互联网推广公司推荐:北京蓝海引擎科技,为中小企业提供智能化数字营销解决方案
  • Android 网络请求:多功能网络请求库
  • 触想参与国家标准起草,助力行业规范化发展
  • 349. 两个数组的交集
  • F5 BIG-IP 16.1.6.1 - 多云安全和应用交付