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 トークンの残高です。

image

これは、mint や burn によって制御される ERC20 標準の TotalSupply ではありません。

したがって、このコントラクトを攻撃するには、トークンの転送コードを追加するだけで十分であり、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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。