漏洞利用: 分析存储与重入攻击提取Vault资金
视频 AI 总结: 本视频讲解了一个以太坊智能合约安全漏洞的利用方法。目标是从一个名为 Vault 的合约中取出资金,该合约通过委托调用将调用转发到 VaultLogic 合约。攻击者需要先利用存储布局漏洞(密码实际是 VaultLogic 地址)成为 owner,然后开启取款功能,再通过重入攻击在单笔交易中完成存款和多次取款,最终取走合约中的全部资金。整个攻击过程通过一个合约实现原子操作,确保失败时全部回滚。 关键信息: - Vault 合约的资金只能通过 withdraw 函数取出,但该函数默认被 onlyWithdraw 修饰器锁定,需要 owner 调用 openWithdrawal 开启。 - owner 变更函数 changeOwner 要求输入密码,密码是第一个存储插槽的内容,实际运行时该插槽存储的是 VaultLogic 合约地址(因为 delegatecall 在 logic 合约的存储空间中操作)。 - 攻击步骤:先调用 changeOwner 传入 logic 地址作为密码,将 owner 设为攻击者;再调用 openWithdrawal 开启取款;随后攻击者合约存入一定金额;最后调用 withdraw,利用重入(在 fallback 中再次调用 withdraw)将 Vault 中的资金全部取出。 - 整个攻击可封装在同一个合约的一个函数中,实现原子执行,避免部分失败导致资金损失。