欢迎订阅专栏:10分钟智能合约:进阶实战
Ethernaut
Ethernaut是一个由智能合约安全领域的知名公司 OpenZeppelin 开发和维护的 Web3/Solidity 安全学习平台。它的核心价值在于提供了一个安全、免费且实战性极强的环境,让开发者能以“黑客”的视角亲手寻找并利用各类智能合约漏洞。
它是一个社区驱动的“夺旗”(Capture The Flag, CTF)战争游戏。玩家需要“黑掉”一个存在漏洞的智能合约才能过关,从而在实战中学习并理解各种安全漏洞。
🎮 Ethernaut 是如何运作的?
- 核心玩法:完成上一关获取下个关卡的合约地址进行闯关,通过在线 IDE(如 Remix)或浏览器控制台编写攻击代码。
- 主要目标:获得特定合约的所有权,或将其资产余额降至零。
- 知识技能:涵盖 Solidity 语言、EVM 原理及重入、整数溢出等各类经典漏洞。
📚 常见漏洞类型有哪些?
你将在 Ethernaut 中遇到多种经典的智能合约漏洞,通过挑战来逐一攻破:
- 重入攻击 (Reentrancy Attack):利用
call函数调用外部合约时,在对方逻辑执行完前反复调用原函数进行资产窃取。 - 访问控制缺陷 (Access Control Vulnerabilities):旧版 Solidity 构造函数命名错误、或错误区分
tx.origin和msg.sender导致权限被夺取。 - 算术问题 (Arithmetic Issues):无 SafeMath 库的老版本中可能出现整数溢出;也涉及链上弱随机数源被预测的攻击。
- EVM/EIP 特性利用 (EVM/EIP Specific Exploits):包括滥用
delegatecall、利用selfdestruct或操纵存储布局来突破限制。
🚀 如何开始学习?
- 准备环境:安装浏览器插件钱包(如 MetaMask),切换到 Sepolia 等测试网,并获取测试代币。
- 进入游戏:访问 Ethernaut 官网 (ethernaut.openzeppelin.com) 开始第一关“Hello Ethernaut”。
- 上手实战:分析提供的合约源码,在浏览器控制台 (
F12) 编写web3.js代码进行攻击。 - 寻求帮助:建议先独立思考,实在过不去时再参考社区题解(Writeups),常见的解题框架有 Foundry 或 Hardhat。
Ethernaut 提供了一个绝佳的学习环境。建议你耐下心来,亲自去部署合约、编写攻击脚本,体会“攻防”的乐趣。