RemedyCTF 2025 Solidity & DeFi 相关题目分析
字数 2580 2025-08-29 08:30:24

RemedyCTF 2025 Solidity & DeFi 题目分析与教学

0x00 Diamond Heist

关键词

  • 代币重复投票
  • CREATE2
  • UUPSUpgrade

漏洞分析

  1. 投票系统缺陷:HexensCoin投票系统未锁定投票代币,允许同一代币被多次投票
  2. 升级限制:Vault合约的_authorizeUpgrade要求Diamond余额为0才能升级
  3. CREATE2特性:Vault使用CREATE2部署,地址可预测

攻击步骤

  1. 利用HexensCoin投票系统的缺陷进行重复投票
  2. 获得足够票数后调用governanceCall执行特权操作
  3. 通过创建新Vault和新Burner合约绕过限制
  4. 注意EIP-4758对CREATE2的影响(Cancun版本后selfdestruct不再允许相同地址重新部署)

教学要点

  • CREATE2地址计算:keccak256(0xff ++ senderAddress ++ salt ++ keccak256(init_code))[12:]
  • UUPS升级模式与授权检查
  • 投票系统应锁定投票代币或使用快照机制

0x01 Casino Avengers

关键词

  • 紧凑签名复用
  • 函数返回值信息泄漏

漏洞分析

  1. 拼写错误后门withdraw函数中的reciever变量未定义(应为receiver
  2. 签名校验缺陷:未考虑ERC-2098紧凑签名格式
  3. 信息泄漏bet函数返回值泄漏随机数结果

攻击步骤

  1. 从区块历史中提取已用签名并转换为紧凑格式
  2. 使用变形后的签名调用pausereset函数
  3. 利用返回值信息泄漏实施条件性下注
  4. 通过reset函数提取资金

教学要点

  • ERC-2098紧凑签名格式:(v-27) | (r << 8) | (s << 128)
  • 敏感操作应使用重放保护(nonce或时间戳)
  • 避免通过返回值泄漏敏感信息

0x02 Lockdown

关键词

  • ERC-721 SafeTransferFrom回调
  • 重入攻击

漏洞分析

  1. 回调漏洞safeTransferFrom触发onERC721Received回调
  2. 状态不一致_prevOwners和当前所有者不同步
  3. 算术下溢:未检查_cUSDCInterest数组下溢

攻击步骤

  1. onERC721Received回调中转移代币制造状态不一致
  2. 利用_prevOwners和当前所有者的差异
  3. 通过重复赎回操作耗尽合约资金

教学要点

  • ERC-721安全转移的四种模式
  • 回调函数中的重入风险
  • 状态一致性检查的重要性

0x03 Frozen Voting

关键词

  • 零地址检查缺失
  • 投票权重计算错误

漏洞分析

  1. 缺失检查delegateBySig未验证delegatee为零地址
  2. 权重计算错误:零地址委托导致重复扣除投票权重

攻击步骤

  1. 通过delegate(address(0))触发权重扣除
  2. 利用delegates函数返回逻辑制造状态不一致
  3. 锁定超级投票权NFT

教学要点

  • 零地址检查的必要性
  • 委托模式的状态机设计
  • 权限系统的边界条件测试

0x04 Rich Man's Bet

关键词

  • 空数组/空循环检查缺失
  • 数据类型转换错误

漏洞分析

  1. 空数组漏洞onERC1155BatchReceived未检查空数组
  2. 签名验证缺陷:仅检查相邻签名者不同
  3. 类型转换错误uint256uint96导致精度损失

攻击步骤

  1. 使用空数组调用成为bridgeSettingValidator
  2. 构造交替重复签名绕过检查
  3. 设置threshold2**96使其变为0
  4. 利用零阈值提取资金

教学要点

  • 空输入验证的重要性
  • 签名验证的全面性检查
  • 数据类型转换的风险

0x05 Not a Very Lucky Token

关键词

  • 可预测随机数
  • Uniswap V2套利

漏洞分析

  1. 随机数可预测_transfer中的随机数不安全
  2. 白名单干扰balanceOf检查可被操纵
  3. 套利机会:Uniswap V2价格操纵

攻击步骤

  1. 预测随机数确保ICE获胜
  2. 干扰Team Vault白名单添加
  3. 通过FIRE消耗Team Vault代币
  4. 在Uniswap V2中套利

教学要点

  • 链上随机数的安全实现
  • 白名单机制的边界条件
  • Uniswap V2价格操纵防护

0x06 Unstable Pool

关键词

  • 批量操作漏洞
  • 除法精度损失

漏洞分析

  1. 批量操作缺陷batchSwap未正确处理多种代币
  2. 精度损失:不同代币的除法取整方式不同

攻击步骤

  1. 构造特定batchSwap操作序列
  2. 利用不同代币的取整差异
  3. 放大套利规模耗尽资金池

教学要点

  • 批量操作的安全考虑
  • 固定点运算的精度处理
  • 套利攻击的防护措施

0x07 Restricted Proxy

关键词

  • ABI编码器版本差异

漏洞分析

  1. ABI编码差异:v1和v2版本的类型检查严格度不同
  2. 存储布局sstore直接写入32字节

攻击步骤

  1. 添加pragma abicoder v1
  2. 升级合约绕过类型检查
  3. 设置大额withdrawRate

教学要点

  • ABI编码器版本差异
  • 存储布局的安全性
  • 升级合约的风险控制

0x08 Tokemak

关键词

  • Transient Storage
  • 闪电贷攻击

漏洞分析

  1. Transient Storage滥用:自定义路由可被恶意设置
  2. 价格操纵:通过虚假池子操纵资产估值

攻击步骤

  1. 使用闪电贷获取初始资金
  2. 设置恶意交换路由
  3. 通过嵌套调用维持Transient状态
  4. 操纵totalAssets估值

教学要点

  • Transient Storage的使用场景
  • 闪电贷攻击模式
  • 资产估值的安全机制

总结

这些题目涵盖了Solidity和DeFi领域的关键安全知识点,包括:

  1. 合约升级模式的安全考虑
  2. 签名验证的全面性
  3. 回调函数中的重入风险
  4. 随机数生成的安全实现
  5. 精度损失和算术问题
  6. 状态一致性的重要性
  7. 外部调用的信任边界
  8. 闪电贷攻击模式
  9. 价格预言机的安全使用

开发者应特别注意合约中的边界条件、状态一致性和外部依赖的安全性,通过全面的测试和审计来防范这些攻击模式。

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领域的关键安全知识点,包括: 合约升级模式的安全考虑 签名验证的全面性 回调函数中的重入风险 随机数生成的安全实现 精度损失和算术问题 状态一致性的重要性 外部调用的信任边界 闪电贷攻击模式 价格预言机的安全使用 开发者应特别注意合约中的边界条件、状态一致性和外部依赖的安全性,通过全面的测试和审计来防范这些攻击模式。