08.Vault
2023-06-23 20:55:40 # 04.Ethernaut CTF

Vault

题目

目标:打开 vault 来通过这一关!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 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;
}
}
}

分析

这道题的目的是将locked的值从true改成false,那么方法unlock就可以做到。这个方法需要传入一个参数,这个参数等于password才可以修改locked。那么我们就需要知道password的值。但是password类型为private,不可以直接查看。但是区块链上的数据都是公开透明的,我们可以查。

我们使用web3js来查找。这里需要我们懂得智能合约上状态变量的存储是以插槽的形式的。那么在这道题,bool类型的变量locked是在slot 0,bytes32类型的变量password是在slot 1。那么我们查找slot 1的数据即是password。

做题

获取密码

image-20221223125702843

部署,攻击

image-20221223125327504

通过

image-20221223125226158