pancakeBunny攻击复现

文章目录

  • pancakeBunny攻击解析
  • pancakeBunny攻击文字解析
  • 整个攻击流程图


pancakeBunny攻击解析

二图流:
图1:此图在写文章时做了一下,但是没啥用,能看懂英文的就看

图2:详细的资金流泳道图,超大杯
pancakeBunny攻击复现_第1张图片

pancakeBunny攻击文字解析

根据攻击的分析,攻击者膨胀了BUNNY-BNB池子中的BNB数量,膨胀方法并非用BNB直接去购买BUNNY,而是使用添加流动性的方法膨胀
而添加流动性,则是使用zapBSC中的 攻击的关键在于受害池子USDT-BNB存在V1和V2两个池子

闪电贷:攻击者首先闪电贷了大量的BNB(②+③)和大量的USDT(①)

下面的①和②和③是用来区分不同作用的代币的

1、攻击者首先将大量的USDT(①)和少量BNB(③)按正常比例添加到流动性充足的V2池子,获得许多LP代币
2、然后将大量BNB(②)在BNB-USDT V1池子中兑换提升V1池子中的BNB 数量,降低BNB在V1池子中的价格
3、攻击者调用getReward()函数,聚合器会通过BunnyMinter从V2池子中移除刚才添加的流动性,获得少量的bnb(③)和大量的USDT(①)
4、聚合器使用刚才取出的USDT(①)通过V1池子兑换出大量的BNB(②)(因为刚才BNB-USDT V1中BNB的价格降低了)

【此时V1池子中的比例恢复正常,此时V2池子比例正常,此时大量的USDT(①)在V1中,大量的BNB(②+③)在聚合器手中,准备用这些BNB到BNB-BUNNY中添加流动性】
【1-4步相当于:使用USDT作为辅助,让大量的BNB为BunnyMinter所持有并准备兑换成BUNNY-BNB来进行下面的膨胀操作】

5、这些BNB(②+③)拆成两半,一半到BNB-BUNNY池中兑换成BUNNY,与另外一半共同作为币种对添加到了BNB-BUNNY池子中获得LP,从而使BUNNY-BNB中的BNB数量极度膨胀
6、聚合器发放奖励的时候就会根据第五步的膨胀后的BNB来铸造BUNNY,攻击者利用获得的BUNNY兑换回BNB

明显在这个过程中有一个问题,明明是攻击者添加的USDT-BNB到V2池子中,LP也应该发放到了攻击者手中,为什么最后会由聚合器来移除流动性?
解释:关键在于添加流动性的函数,addLiquidity中有一个to参数,任何人可以设置,也就是说攻击者并没有将to设置为自己,而是设置为了聚合器中的BunnyMinter,而在聚合器的BunnyMinter中移除流动性

这也就意味着,它只看自己有多少的LP额度,直接移除流动性

关于zap:用A币兑换到A-B
LP池中的分析:对于池子代币数量而言,其影响与直接将A存入A-B池的结果一样,都会造成价格变动,不同的是直接存入不会获得LP,而A的一半换成B,在兑换成A-B LP是可以获得LP的
也就是说,我如果有大量的代币,我想操控某个池子的价格但我又想获得一定的LP,那么则可以使用这个办法

整个攻击流程图


你可能感兴趣的:(安全,区块链,web安全)