Ethernaut题库闯关第7篇题解,难度等级:有点难。
今天这篇是Ethernaut 题库闯关连载的第7篇,难度等级:有点难。
Ethernaut 题库闯关我已经整理为一个专栏了, 欢迎大家订阅专栏。
有些合约不是简单的取走你的钱,本关的目标是使合约的余额大于零。
以下是合约的源代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
contract Force {/*
MEOW ?
/\_/\ /
____/ o o \
/~____ =ø= /
(______)__m_m)
*/}
在查看解题思路之前,可以先自己想一想,自己会怎么做?
本关闯关涉及到知识点:
Fallback 方法
有时攻击一个合约的最好方法是用另一个合约。
好吧,本次的合约没有代码,是一个空合约。
为了解决这个难题,我们需要了解所有合约可以接收ETH的可能方式。 目前有四种不同的方式可以向合约发送以太币。
合约至少实现一个 payable
函数,我们在调用函数的同时发送一些以太币。
合约实现了一个 receive
函数。请参阅 Solidity 文档: 接收以太函数 以了解关于这个特殊函数的更多信息。
合约实现了一个 "payable "的 fallback
函数。请参阅 Solidity 文档: Fallback 函数 以了解关于此特殊功能的更多信息。
最后一种更 "奇怪 "的方式是通过 "selfdestruct()",并且这个方式已经造成了各种安全问题。
额外方法:没有receive
以太函数的合约也可以作为coinbase交易(又称miner区块奖励)的接收方接收以太。
通过查看合约,很明显,我们唯一能解决这个难题的方法就是使用selfdestruct()
方法。在查看解决方案之前,让我们回顾一下这个函数是做什么的。
selfdestruct
的EVM操作码是做什么的?从Solidity 文档关于[停用和自毁](https://docs.soliditylang.org/en/v0.8.15/introduction-to-...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!