四虎影视在线影院在线观看,小s货再浪些再咬紧点h,国产精品水嫩水嫩,97精产国品一二三产区

Board logo

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

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

基礎(chǔ)信息

攻擊者地址:

0x2525c811ecf22fc5fcde03c67112d34e97da6079

攻擊合約:

0x1e2a251b29e84e1d6d762c78a9db5113f5ce7c48

攻擊tx:

0x943c2a5f89bc0c17f3fe1520ec6215ed8c6b897ce7f22f1b207fea3f79ae09a6

相關(guān)其它合約

漏洞代碼分析

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

攻擊者可以通過閃電貸操縱池子中兩種代幣的比例,使得舊池子中WBNB增加,OLD CELL減少,新池子中WBNB減少,NEW CELL增加。這樣會(huì)導(dǎo)致舊LP撤銷流動(dòng)性的時(shí)候會(huì)獲得更多的WBNB,添加新池子的時(shí)候只需要少量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,這會(huì)導(dǎo)致新池子中WBNB減少,舊池子中OLD WBNB的比例升高。然后攻擊者調(diào)用流動(dòng)性遷移合約的migrate方法,移除舊池子流動(dòng)性的時(shí)候,獲得的WBNB會(huì)增多,然后添加新池子流動(dòng)性的時(shí)候,只需要少量的WBNB。

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

5.因?yàn)橹敖枇薔EW 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://cd-genova.com/bbs/) Powered by Discuz! 7.2