#### **一、漏洞现象及核心问题定位**
用户提供的沙城主奖励脚本存在**老区奖励无限领取漏洞**,具体表现为:
1. 沙城主在满足`HOUR 22 22`及`MIN 1 59`条件后,通过反复触发`[@lqc1]`可重复获取装备与元宝
2. **变量控制失效**:关键变量`G211`仅通过`MOV G211 1`初始化,但未在领取后重置(如`DEC G211 1`)
3. **时间检测漏洞**:仅检测小时与分钟,未绑定日期(如`CHECKDATE 20250312`),导致同一天内可多次触发
---
#### **二、漏洞代码段逐行分析**
##### **1. 变量初始化与检测逻辑缺陷**
```bash
[@qc]
#act
mov g211 1 # 仅初始化变量,未设置领取次数上限
```
**问题**:`G211`仅用于标记"老区奖励是否开启",但未与领取次数绑定。需改为`MOV G211 3`(限制3次)或结合`ADDGUILDLIST`记录行会领取状态。
##### **2. 老区奖励发放逻辑漏洞**
```bash
[@lqc1]
#if
equal g211 1 # 仅检测变量状态,未关联领取记录
#act
goto @yd
[@yd]
#act
dec g212 1 # 错误操作变量,G212未参与核心逻辑判断
sendmsg 0 沙城主%s,已经成功领取攻城奖励!x4 # 公告刷屏,可能引发服务器卡顿
```
**修复方向**:
- 增加`CHECKGUILDLIST ..\数据文件\已领取行会.txt`检测行会领取记录
- 将`DEC G212 1`改为`DEC G211 1`并联动`#IF EQUAL G211 0`阻断重复触发
##### **3. 时间检测不严谨**
```bash
# 缺少日期绑定
HOUR 22 22
MIN 1 59
```
**解决方案**:
```bash
# 添加日期校验(今日为2025-03-12)
CHECKDATE 20250312
HOUR 22 22
MIN 1 59
```
结合`CHECKTIMELIST ..\时间记录\20250312.txt`实现单日单次领取。
---
#### **三、完整修复方案**
##### **1. 变量与行会记录双重管控**
```bash
[@qc]
#act
MOV G211 1 # 开启老区奖励
CLEARGUILDLIST ..\数据文件\已领取行会.txt # 清理行会记录
[@lqc1]
#if
EQUAL G211 1
CHECKGUILDLIST ..\数据文件\已领取行会.txt # 检测行会是否已领取
#ACT
MESSAGEBOX 您的行会已领取过奖励!
BREAK
#IF
EQUAL G211 1
CHECKDATE 20250312
HOUR 22 22
MIN 1 59
ISCASTLEMASTER
#ACT
ADDGUILDLIST ..\数据文件\已领取行会.txt # 记录行会
DEC G211 1 # 减少可领取次数
GIVE 城主之刃 2
...(装备发放略)
```
##### **2. 时间-日期-变量三重验证**
```bash
[@yd]
#IF
CHECKDATE 20250312 # 绑定日期
HOUR 22 22 # 时段限制
MIN 1 59
ISCASTLEMASTER # 身份验证
EQUAL G211 1 # 剩余次数验证
CHECKGUILDLIST ..\数据文件\已领取行会.txt = 0 # 行会未领取
#ACT
...(执行奖励逻辑)
#ELSEACT
MESSAGEBOX 条件不满足:1.非城主 2.非领取时间 3.奖励已领完
```
##### **3. 管理员强制干预模块**
```bash
[@main]
#if
ISADMIN
#say
<强制重置老区奖励/@reset> <清空行会记录/@clear>
#act
[@reset]
#act
MOV G211 1
SENDMSG 6 老区奖励变量已重置!
[@clear]
#act
CLEARGUILDLIST ..\数据文件\已领取行会.txt
SENDMSG 6 行会领取记录已清空!
```
---
#### **四、漏洞衍生风险与防御建议**
1. **经济系统崩溃**:无限刷装备会导致市场通货膨胀,需添加`CHECKGAMEGOLD > 1000000`限制单日元宝产出
2. **权限滥用**:管理员可通过`@qc`随意重置数据,建议增加二级密码验证`CHECKADMINPASSWORD`
3. **日志监控**:添加`#CALL [..\日志系统\奖励日志.txt]`记录领取IP、时间、角色名
---
#### **五、同类漏洞扩展检测清单**
| 检测项 | 高危点 | 修复建议 |
|-----------------------|-------------------------|--------------------------|
| 变量单向控制 | 仅初始化未递减 | 增加DEC/INC命令 |
| 时间检测无日期绑定 | 单日内重复触发 | 绑定CHECKDATE |
| 缺少行会/玩家记录 | 同一行会多次领取 | 使用ADDGUILDLIST |
| 未限制装备叠加数量 | 背包满导致刷屏 | 添加CHECKITEM空格检测|
---
通过以上修复,可彻底阻断老区奖励无限领取漏洞。建议结合《传奇脚本沙城权限漏洞修复办法》对全脚本进行权限校验与变量审计,以提升系统安全性。
传奇沙城主奖励脚本漏洞深度解析与修复指南,以无限领取老区奖励为例
来源:
作者:
点击:

