永久黄网站色视频免费直播,yy6080三理论日本中文,亚洲无码免费在线观看视频,欧美日韩精品一区二区在线播放

Board logo

標(biāo)題: Cellfram攻擊事件分析及POC [打印本頁]

作者: chainke    時間: 2023-6-12 14:40     標(biāo)題: Cellfram攻擊事件分析及POC

基礎(chǔ)信息

攻擊者地址:

0x2525c811ecf22fc5fcde03c67112d34e97da6079

攻擊合約:

0x1e2a251b29e84e1d6d762c78a9db5113f5ce7c48

攻擊tx:

0x943c2a5f89bc0c17f3fe1520ec6215ed8c6b897ce7f22f1b207fea3f79ae09a6

相關(guān)其它合約

漏洞代碼分析

遷移合約的工作原理是:將用戶老的LP代幣轉(zhuǎn)到遷移合約地址,然后遷移合約調(diào)用removeLiquidity移除流動性。然后根據(jù)新池子中CELL和WBNB的比例,計算出需要的NEW CELL的數(shù)量。然后在新池子中添加流動性,新的LP代幣會直接發(fā)送給用戶。如果添加流動性需要的WBNB代幣小于移除流動性獲得的WBNB,那么將多余的WBNB退還給用戶。

攻擊者可以通過閃電貸操縱池子中兩種代幣的比例,使得舊池子中WBNB增加,OLD CELL減少,新池子中WBNB減少,NEW CELL增加。這樣會導(dǎo)致舊LP撤銷流動性的時候會獲得更多的WBNB,添加新池子的時候只需要少量WBNB。

function migrate(uint amountLP) external  {        (uint token0,uint token1) = migrateLP(amountLP);        (uint eth,uint cell, ) = IUniswapV2Router01(LP_NEW).getReserves();             uint resoult = cell/eth;                      token1 = resoult * token0;        IERC20(CELL).approve(ROUTER_V2,token1);        IERC20(WETH).approve(ROUTER_V2,token0);        (uint tokenA, , ) = IUniswapV2Router01(ROUTER_V2).addLiquidity(            WETH,            CELL,            token0,            token1,            0,            0,            msg.sender,            block.timestamp + 5000        );        uint balanceOldToken = IERC20(OLD_CELL).balanceOf(address(this));        IERC20(OLD_CELL).transfer(marketingAddress,balanceOldToken);        if (tokenA < token0) {            uint256 refund0 = token0 - tokenA;            IERC20(WETH).transfer(msg.sender,refund0);        }     }    function migrateLP(uint amountLP) internal returns(uint256 token0,uint256 token1) {        IERC20(LP_OLD).transferFrom(msg.sender,address(this),amountLP);        IERC20(LP_OLD).approve(ROUTER_V2,amountLP);        return IUniswapV2Router01(ROUTER_V2).removeLiquidity(            WETH,            OLD_CELL,            amountLP,            0,            0,            address(this),            block.timestamp + 5000        );    }攻擊過程分析

1.攻擊者從dodo借出WBNB。

2.從pancake V3中借出NEW CELL,并調(diào)用了攻擊合約中的0xa1d48336方法。

3.通過調(diào)用0xa1d48336方法,在V2池子中將借來的NEW CELL全部換成了WBNB,然后將大量WBNB換成OLD CELL,這會導(dǎo)致新池子中WBNB減少,舊池子中OLD WBNB的比例升高。然后攻擊者調(diào)用流動性遷移合約的migrate方法,移除舊池子流動性的時候,獲得的WBNB會增多,然后添加新池子流動性的時候,只需要少量的WBNB。

4.然后將新池子中的lp代幣移除流動性,獲得WBNB和NEW CELL。

5.因為之前借了NEW CELL,因此將WBNB換成換成NEW CELL,OLD CELL已經(jīng)沒用了,將OLD CELL換成WBNB,并償還V3 pool借來的NEW CELL。

6.分別在V3和V2池子中將NEW CELL賣出換成WBNB,最后歸還dodo閃電貸出的WBNB。






歡迎光臨 WDlinux官方論壇 (http://www.fsowen.com/bbs/) Powered by Discuz! 7.2