jiang

jiang

Man who has not escaped from low-class level taste.

DamnVulnerableDeFi-Unstoppable解題

概述#

Damn Vulnerable DeFi 是學習以太坊 DeFi 智能合約攻擊性安全的 CTF 遊戲。

該遊戲涵蓋了閃電貸、價格預言機、治理、非同質化代幣(NFT)、去中心化交易所(DEX)、借貸池、智能合約錢包、時間鎖等多種 DeFi 場景。

這種類似 CTF 的題目的遊戲非常適合初學者去學習 solidity/ethers.js 的開發。

挑戰描述網站:https://www.damnvulnerabledefi.xyz/
挑戰源碼地址:https://github.com/tinchoabbate/damn-vulnerable-defi

Unstoppable#

題目描述:
有一個令牌化的保險庫,存入了一百萬個 DVT 代幣。在寬限期結束之前,它提供免費的閃電貸款。

通過這個挑戰,讓保險庫停止提供閃電貸款。

你的餘額開始時有 10 個 DVT 代幣。

解析#

由題意得知我們的目標是為了破壞合約讓合約的閃電貸款服務終止。
帶著這樣的目標我們去看看合約是怎麼實現閃電貸款的。

image

可以觀察到的一點比較奇怪的判斷是這一句:

if (convertToShares(totalSupply) != balanceBefore) revert InvalidBalance(); // enforce ERC4626 requirement

觀察到變數 balanceBefore 是該地址的 ERC20 Token 餘額

image

並不是 ERC20 標準中由 mint burn 控制的 TotalSupply。

所以攻擊該合約只需要補充一行 transfer token 代碼就可以讓該 totalSupply != balanceBefore 從而讓該閃電貸款停止工作。

題解#

it('Execution', async function () {
        await token.connect(player).transfer(vault.address, 1);
});

完整題解地址:https://github.com/fenghaojiang/damn-vulnerable-defi/tree/master/test/unstoppable

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。