HTB Blockchain Challenge - Token to Wonderland
- 先看程式碼
- Setup.sol
1 | // SPDX-License-Identifier: UNLICENSED |
- Shop.sol
1 | pragma solidity ^0.7.0; |
- 很明顯,題目是要我們取得 第二個 item
- Setup 合約只給我們 100 SilverCoin
- 要想辦法湊錢買到 25_000_000 SilverCoin 的物品
思路
- 要想辦法撈錢
- 直到有辦法從 Shop/SilverCoin Contract 提出 25_000_000
- 但是題目只有給 Shop, Setup 的地址
- 但因為 SilverCoin 是由 Setup 所呼叫生成,因此可以透過 Ethereum 合約地址生成的機制,來計算 SilverCoin 的地址
address(uint160(uint256(keccak256(abi.encodePacked(bytes1(0xd6), bytes1(0x94), creator_account, bytes1(0x01))))));
SilverCoin.sol
- Transfer
1 |
|
-
可以看到
require(fromBalance - amount >= 0, "ERC20: transfer amount exceeds balance");
fromBalance 是 unsigned integer -
因此 amount > fromBalance造成 underflow 會自動轉換為正整數
-
因此我們變很容易的讓我們帳戶餘額暴增到可以購買 item 2
-
Attacker.sol
1 | // SPDX-License-Identifier: UNLICENSED |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Comments