CTF-BabyOtter
题目源代码:
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13;
contract BabyOtter { bool public solved = false;
function solve(uint x) public { unchecked { assert(x * 0x1337 == 1); } solved = true; } }
|
这个题,有个unchecked
它是一个不对溢出进行的一个检查unchecked 是一个特殊的关键字,表示在代码块中进行运算时不进行溢出检查。这意味着即使在某些情况下会发生溢出,也不会触发 Solidity 默认的溢出检查错误。
那么就很容易想到溢出来解决这个题了
攻击代码:
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13;
interface IBabyOtter { function solve(uint x) external; }
contract Exploit { function exploit() public { uint number = 106517423012574869748253447278778772725360170890836257832597187972312850502279; address target = 0x4e309C767Acc9f9366d75C186454ed205d5Eeee3; IBabyOtter(target).solve(number); } }
|