Ethernaut 题库闯关 #7 — Force

Ethernaut题库闯关第7篇题解,难度等级:有点难。

今天这篇是Ethernaut 题库闯关连载的第7篇,难度等级:有点难。

Ethernaut 题库闯关我已经整理为一个专栏了, 欢迎大家订阅专栏。

第七关挑战:Force

有些合约不是简单的取走你的钱,本关的目标是使合约的余额大于零。

以下是合约的源代码:

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

contract Force {/*

                   MEOW ?
         /\_/\   /
    ____/ o o \
  /~____  =ø= /
 (______)__m_m)

*/}

在查看解题思路之前,可以先自己想一想,自己会怎么做?

本关闯关涉及到知识点:

  1. Fallback 方法

  2. 有时攻击一个合约的最好方法是用另一个合约。

研究合约

好吧,本次的合约没有代码,是一个空合约。

为了解决这个难题,我们需要了解所有合约可以接收ETH的可能方式。 目前有四种不同的方式可以向合约发送以太币。

  1. 合约至少实现一个 payable 函数,我们在调用函数的同时发送一些以太币。

  2. 合约实现了一个 receive函数。请参阅 Solidity 文档: 接收以太函数 以了解关于这个特殊函数的更多信息。

  3. 合约实现了一个 "payable "的 fallback函数。请参阅 Solidity 文档: Fallback 函数 以了解关于此特殊功能的更多信息。

  4. 最后一种更 "奇怪 "的方式是通过 "selfdestruct()",并且这个方式已经造成了各种安全问题。

  5. 额外方法:没有receive以太函数的合约也可以作为coinbase交易(又称miner区块奖励)的接收方接收以太。

通过查看合约,很明显,我们唯一能解决这个难题的方法就是使用selfdestruct()方法。在查看解决方案之前,让我们回顾一下这个函数是做什么的。

selfdestruct的EVM操作码是做什么的?从Solidity 文档关于[停用和自毁](https://docs.soliditylang.org/en/v0.8.15/introduction-to-...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Ethernaut CTF
Ethernaut CTF
信奉 CODE IS LAW.