主页 > imtoken冷钱包官网 > Wault 金融漏洞分析
Wault 金融漏洞分析
Wault 金融漏洞分析
时间:2021-08-10
本文为您介绍Wault Finance漏洞分析,主要包括Wault Finance漏洞分析用例、应用技巧、基础知识点总结和注意事项。 具有一定的参考价值usdt交易平台漏洞,需要的朋友可以参考一下。
攻击信息:
攻击交易:
0x31262f15a5b82999bf8d9d0f7e58dcb1656108e6031a2797b612216a95e1670e
攻击契约:
0x886358f9296de461d12e791bc9ef6f5a03410c64
过程分析:步骤 1:
首先通过闪贷借入16,839,004 WUSD,调用WUSDMaster合约的赎回函数将USDT和WEX发送给攻击合约。 成本大于0.015 USDT/WEX。
第二步:
通过闪贷借入40000000USDT,其中23000000usdt兑换成WEX,计算成本,0.044USDT/WEX。
第三步:
通过多次抵押,抬高了wex的价格。
最后计算的价格是 1.44 USDT/WEX。
第四步:
将 WEX 兑换成 USDT。 在此之后价格为 0.041 USDT/WEX
第五步:
还清闪贷。
第六步:
最后盈利usdt交易平台漏洞,跨链。
代码分析:
1 function redeem(uint256 amount) external nonReentrant { 2 uint256 usdtTransferAmount = amount * (1000 - wexPermille - treasuryPermille) / 1000; 3 uint256 usdtTreasuryAmount = amount * treasuryPermille / 1000; 4 uint256 wexTransferAmount = wex.balanceOf(address(this)) * amount / wusd.totalSupply(); 5 wusd.burn(msg.sender, amount); 6 usdt.safeTransfer(treasury, usdtTreasuryAmount); 7 usdt.safeTransfer(msg.sender, usdtTransferAmount); 8 wex.safeTransfer(msg.sender, wexTransferAmount); 9 10 emit Redeem(msg.sender, amount); 11 }
首先,通过调用redeem函数,攻击者可以获得目前最便宜的wex,然后使用闪贷借出大量资金,因为攻击者后面会砸盘,所以他用一部分来拉盘(这里指的是23000000那一笔),然后一部分用来重新抵押换取wex(用来把usdt换成wex)。 该部分用于填写通过闪贷借出wusd获得的wex和usdt。 (相当于帮用户高阶接机)
1 function stake(uint256 amount) external nonReentrant { 2 require(amount <= maxStakeAmount, 'amount too high'); 3 usdt.safeTransferFrom(msg.sender, address(this), amount); 4 if(feePermille > 0) { 5 uint256 feeAmount = amount * feePermille / 1000; 6 usdt.safeTransfer(treasury, feeAmount); 7 amount = amount - feeAmount; 8 } 9 uint256 wexAmount = amount * wexPermille / 1000; 10 usdt.approve(address(wswapRouter), wexAmount); 11 wswapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens( 12 wexAmount, 13 0, 14 swapPath, 15 address(this), 16 block.timestamp 17 ); 18 wusd.mint(msg.sender, amount); 19 20 emit Stake(msg.sender, amount); 21 }