- 打卡等级:魔龙套勇士
- 打卡总天数:117
- 打卡月天数:10
- 打卡总奖励:13851
- 最近打卡:2025-08-10 00:32:31
管理员
本站站长
- 积分
- 8084
|
传奇游戏脚本漏洞的检测需要结合引擎特性、脚本语言逻辑和实战经验,以下是系统性的排查方法和技术方案:
一、核心漏洞类型与检测要点
1. 权限控制漏洞
表现形式:低权限玩家通过修改命令参数获取管理员权限(如执行@make命令刷装备)。
检测方法:
全局搜索权限命令:在服务端目录(如Mir200\Envir\Market_Def)搜索@GM、@Admin等关键字,检查命令是否设置权限等级。例如,HeroM2 引擎中#IF CHECKLEVELEX > 0需确保权限等级≥100。
验证管理命令:通过m2server.exe控制台执行!CMDS命令,查看所有管理指令的权限设置,删除权限为 0 的危险命令(如@ChangeMode 2 1开启无敌模式)。
2. 经济系统漏洞
典型场景:
元宝无限刷:回收脚本中未扣除物品导致重复兑换元宝(如#ACT Give 元宝 1000但未执行Take 物品 1)。
物品复制:合成脚本中Take 材料 1未生效,导致材料不消耗但产出装备。
检测工具:使用传奇脚本变量编辑器的 “全局搜索” 功能,定位所有Give、Take、AddItem命令,确保Take与Give成对出现。
3. 触发逻辑漏洞
技术原理:QF 触发脚本(如双击物品)未正确消耗触发物品,或地图触发条件未限制执行次数。
排查步骤:
检查触发序号:在DB\StdItems.DB中修改触发序号(如将1001改为1002),避免重复触发。
地图触发验证:打开Mir200\Envir\MapEvent.txt,删除非必要的触发段(如非矿区地图的Mine命令)。
4. 越权访问漏洞
案例分析:
水平越权:玩家 A 通过修改 URL 中的UserID=1为UserID=2,访问玩家 B 的背包数据。
垂直越权:普通玩家通过构造@ChangeMode 1 1命令进入管理模式。
检测方法:
权限验证逻辑审查:检查脚本中#IF CHECKLEVELEX、#IF CHECKADMIN等条件是否完整,例如:
python
#IF
CHECKLEVELEX > 99
#ACT
ChangeMode 1 1 ; 仅允许等级≥100的玩家进入管理模式
抓包测试:使用 Fiddler 拦截UserID、ItemID等参数,尝试修改后提交,观察是否返回其他用户数据。
二、工具链与技术手段
1. 静态代码分析
推荐工具:
传奇脚本变量编辑器:支持中文输入、自动补全和语法高亮,可快速定位@StdModeFunc等危险命令。
Checkstyle 插件:配置传奇脚本规则(如禁止硬编码密码),检测代码规范问题。
操作示例:
打开QFunction-0.txt,搜索SetShopItemPriceRate命令,检查是否设置会员限制。
使用HashCheck工具比对脚本文件哈希值,验证是否被篡改。
2. 动态调试与日志监控
调试步骤:
插入日志输出:在脚本关键位置添加LOG "当前金币:<$GOLD>",通过Mir200\Log目录的日志文件追踪变量值。
控制台监控:在 M2Server 控制台输入!DEBUG 1开启调试模式,实时查看脚本执行流程和报错信息。
抓包分析:使用 Fiddler 拦截UserID、MapID等参数,模拟异常输入测试防御机制。
3. 自动化扫描与漏洞验证
扫描工具:
传奇漏洞扫描器:基于正则表达式匹配危险模式(如Give 元宝后无Take命令)。
Burp Suite:通过 Intruder 模块爆破参数(如UserID、ItemID),检测越权漏洞。
验证案例:
元宝漏洞:在回收脚本中构造Take 木剑 1000,观察是否扣除玩家背包中的所有木剑。
触发漏洞:快速双击经验卷,检测是否导致经验无限叠加。
三、安全加固与版本控制
1. 代码安全优化
输入过滤:
使用CheckValidStr函数过滤特殊字符(如;、--),防止 SQL 注入。
示例:#IF CHECKVALIDSTR <$USERNAME> 1(仅允许字母数字)。
加密与混淆:
使用引擎自带工具加密QManage.txt、QFunction-0.txt,并添加水印(如#DEFINE COPYRIGHT "2025-08-06")。
混淆变量名(如将@GiveItem改为@Xz123),增加逆向难度。
2. 服务器防护策略
端口与协议:
修改远程端口(如将 3389 改为随机端口),通过注册表→HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp实现。
禁用非必要协议(如 SMB),通过防火墙→高级安全→入站规则关闭。
安全狗配置:
开放传奇端口(7000、6888)和支付端口,拦截 SQL 注入特征(如UNION SELECT)。
3. 版本管理与备份
代码仓库:使用 Git 对脚本进行版本控制,每次修改前创建分支(如bugfix-202508)。
关键文件备份:定期备份Mir200\Envir\Market_Def、DB\StdItems.DB,并存储到离线介质。
四、版本差异与社区资源
1. 引擎特性适配
HeroM2:重点检查!Setup.txt中的GM权限配置,避免GM列表被篡改。
GOM 引擎:使用GOM脚本调试器追踪变量,检测@UserCmd命令的参数过滤。
2. 社区与技术支持
论坛资源:
64GM 论坛:搜索 “漏洞检测” 获取实战案例(如@ChangeMode命令滥用修复)。
73su.com:下载韩版传奇服务端上线脚本,参考其自动化漏洞扫描逻辑。
技术文档:
引擎官方手册:如《GEE 引擎脚本开发指南》中的 “安全编码规范” 章节。
漏洞数据库:参考Exploit-DB中mg2 0.5.1的 XSS 漏洞案例,避免类似逻辑缺陷。
五、终极方案:漏洞复现与修复流程
复现步骤:
环境搭建:使用VirtualBox创建隔离测试环境,部署可疑服务端。
攻击模拟:通过Python脚本自动化调用危险命令(如@make 裁决之杖 1)。
日志捕获:记录M2Server.log中的Invalid command错误,定位未授权访问点。
修复方案:
权限细化:将@Make命令拆分为@MakeWhite(白名单物品)和@MakeGold(金币道具),分别设置不同权限。
事务回滚:在交易脚本中添加#ELSEACT Rollback,确保Take失败时回滚Give操作。
通过以上方法,可系统性检测和修复传奇脚本中的常见漏洞。建议结合慈云数据等专业工具进行实时监控,并加入传奇技术交流群获取最新漏洞情报,实现 “预防 - 检测 - 响应” 的闭环安全管理。对于商业服运营,建议定期聘请第三方安全团队进行渗透测试,确保脚本逻辑的健壮性。
|
|