应用: Painkiller 版本: <= 1.3.1 平台: Windows 漏洞: 内存损坏,有限代码执行 风险: 中/高 利用: 远程,针对服务器 日期: 2004年8月24日 作者: Luigi Auriemma 电子邮件: aluigi@altervista.org 网站: http://aluigi.altervista.org 漏洞细节 1. 漏洞描述: - 加入 Painkiller 服务器的握手由3个数据包组成: - 客户端的连接请求(ID 0x02) - 服务器的密钥(ID 0x03),用于计算 Gamespy CD密钥授权字符串和访问受保护游戏服务器的密码 - 客户端的加入数据包(ID 0x04),包含游戏版本、Gamespy CD密钥授权字符串、密码(如果需要)以及其他一些信息 - 问题在于密码字段,该字段被保护和非保护的游戏服务器读取,使用特定的算法和来自服务器的挑战字符串进行编码,当服务器尝试解码过长的密码(超过256个字符)时,会写入一些关键内存区域。 - 优化的编码/解码算法可在 这里 获取。 2. 利用难度: - 由于编码算法和漏洞类型的原因,完全执行远程代码(至少不容易)因为返回地址只能被允许的中间步长中特定字节覆盖,范围从0x00到0x3f。 - 可能存在其他利用方法,但作者仅发现这一种有限的方法。 3. 代码: - 下载链接 4. 修复: - 无。 - 开发人员已在一个月前被联系,但修复补丁尚未发布。