RemedyCTF 2025 Solidity & DeFi 相关题目分析
字数 2580 2025-08-29 08:30:24
RemedyCTF 2025 Solidity & DeFi 题目分析与教学
0x00 Diamond Heist
关键词
- 代币重复投票
- CREATE2
- UUPSUpgrade
漏洞分析
- 投票系统缺陷:HexensCoin投票系统未锁定投票代币,允许同一代币被多次投票
- 升级限制:Vault合约的
_authorizeUpgrade要求Diamond余额为0才能升级 - CREATE2特性:Vault使用CREATE2部署,地址可预测
攻击步骤
- 利用HexensCoin投票系统的缺陷进行重复投票
- 获得足够票数后调用
governanceCall执行特权操作 - 通过创建新Vault和新Burner合约绕过限制
- 注意EIP-4758对CREATE2的影响(Cancun版本后selfdestruct不再允许相同地址重新部署)
教学要点
- CREATE2地址计算:
keccak256(0xff ++ senderAddress ++ salt ++ keccak256(init_code))[12:] - UUPS升级模式与授权检查
- 投票系统应锁定投票代币或使用快照机制
0x01 Casino Avengers
关键词
- 紧凑签名复用
- 函数返回值信息泄漏
漏洞分析
- 拼写错误后门:
withdraw函数中的reciever变量未定义(应为receiver) - 签名校验缺陷:未考虑ERC-2098紧凑签名格式
- 信息泄漏:
bet函数返回值泄漏随机数结果
攻击步骤
- 从区块历史中提取已用签名并转换为紧凑格式
- 使用变形后的签名调用
pause和reset函数 - 利用返回值信息泄漏实施条件性下注
- 通过
reset函数提取资金
教学要点
- ERC-2098紧凑签名格式:
(v-27) | (r << 8) | (s << 128) - 敏感操作应使用重放保护(nonce或时间戳)
- 避免通过返回值泄漏敏感信息
0x02 Lockdown
关键词
- ERC-721 SafeTransferFrom回调
- 重入攻击
漏洞分析
- 回调漏洞:
safeTransferFrom触发onERC721Received回调 - 状态不一致:
_prevOwners和当前所有者不同步 - 算术下溢:未检查
_cUSDCInterest数组下溢
攻击步骤
- 在
onERC721Received回调中转移代币制造状态不一致 - 利用
_prevOwners和当前所有者的差异 - 通过重复赎回操作耗尽合约资金
教学要点
- ERC-721安全转移的四种模式
- 回调函数中的重入风险
- 状态一致性检查的重要性
0x03 Frozen Voting
关键词
- 零地址检查缺失
- 投票权重计算错误
漏洞分析
- 缺失检查:
delegateBySig未验证delegatee为零地址 - 权重计算错误:零地址委托导致重复扣除投票权重
攻击步骤
- 通过
delegate(address(0))触发权重扣除 - 利用
delegates函数返回逻辑制造状态不一致 - 锁定超级投票权NFT
教学要点
- 零地址检查的必要性
- 委托模式的状态机设计
- 权限系统的边界条件测试
0x04 Rich Man's Bet
关键词
- 空数组/空循环检查缺失
- 数据类型转换错误
漏洞分析
- 空数组漏洞:
onERC1155BatchReceived未检查空数组 - 签名验证缺陷:仅检查相邻签名者不同
- 类型转换错误:
uint256转uint96导致精度损失
攻击步骤
- 使用空数组调用成为
bridgeSettingValidator - 构造交替重复签名绕过检查
- 设置
threshold为2**96使其变为0 - 利用零阈值提取资金
教学要点
- 空输入验证的重要性
- 签名验证的全面性检查
- 数据类型转换的风险
0x05 Not a Very Lucky Token
关键词
- 可预测随机数
- Uniswap V2套利
漏洞分析
- 随机数可预测:
_transfer中的随机数不安全 - 白名单干扰:
balanceOf检查可被操纵 - 套利机会:Uniswap V2价格操纵
攻击步骤
- 预测随机数确保ICE获胜
- 干扰Team Vault白名单添加
- 通过FIRE消耗Team Vault代币
- 在Uniswap V2中套利
教学要点
- 链上随机数的安全实现
- 白名单机制的边界条件
- Uniswap V2价格操纵防护
0x06 Unstable Pool
关键词
- 批量操作漏洞
- 除法精度损失
漏洞分析
- 批量操作缺陷:
batchSwap未正确处理多种代币 - 精度损失:不同代币的除法取整方式不同
攻击步骤
- 构造特定
batchSwap操作序列 - 利用不同代币的取整差异
- 放大套利规模耗尽资金池
教学要点
- 批量操作的安全考虑
- 固定点运算的精度处理
- 套利攻击的防护措施
0x07 Restricted Proxy
关键词
- ABI编码器版本差异
漏洞分析
- ABI编码差异:v1和v2版本的类型检查严格度不同
- 存储布局:
sstore直接写入32字节
攻击步骤
- 添加
pragma abicoder v1 - 升级合约绕过类型检查
- 设置大额
withdrawRate
教学要点
- ABI编码器版本差异
- 存储布局的安全性
- 升级合约的风险控制
0x08 Tokemak
关键词
- Transient Storage
- 闪电贷攻击
漏洞分析
- Transient Storage滥用:自定义路由可被恶意设置
- 价格操纵:通过虚假池子操纵资产估值
攻击步骤
- 使用闪电贷获取初始资金
- 设置恶意交换路由
- 通过嵌套调用维持Transient状态
- 操纵
totalAssets估值
教学要点
- Transient Storage的使用场景
- 闪电贷攻击模式
- 资产估值的安全机制
总结
这些题目涵盖了Solidity和DeFi领域的关键安全知识点,包括:
- 合约升级模式的安全考虑
- 签名验证的全面性
- 回调函数中的重入风险
- 随机数生成的安全实现
- 精度损失和算术问题
- 状态一致性的重要性
- 外部调用的信任边界
- 闪电贷攻击模式
- 价格预言机的安全使用
开发者应特别注意合约中的边界条件、状态一致性和外部依赖的安全性,通过全面的测试和审计来防范这些攻击模式。