SushiBar重入事件分析
SushiBar重入事件分析
![1.png](https://img.learnblockchain.cn/attachments/2022/10/ASJ9Uob4635dd8fb2c3ce.png)
# 2、攻击分析
交易:https://phalcon.blocksec.com/tx/eth/0x8037b3dc0bf9d5d396c10506824096afb8125ea96ada011d35faa89fa3893aea
# 3、获利分析
![2.png](https://img.learnblockchain.cn/attachments/2022/10/dlEwelaS635dd9e52aec7.png)
每次获利分析:
https://etherscan.io/tx/0x8037b3dc0bf9d5d396c10506824096afb8125ea96ada011d35faa89fa3893aea
![3.png](https://img.learnblockchain.cn/attachments/2022/10/gc8z3VfR635dda002f92d.png)
# 4、攻击过程分析
![4.png](https://img.learnblockchain.cn/attachments/2022/10/tBj8cNys635dda23e22b1.png)
1、攻击合约先通过ERC1820注册发送代币回调接口keccak256("ERC777TokensSender")=0x29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895
2、通过SLP 闪电贷获取资金
3、攻击合约调用Xn00d合约的enter函数存入资金
4、因为n00d合约是ERC777合约,在调用transferFrom转移代币时会调用发送者的回调函数tokensToSend ,攻击合约在该函数中又重新调用n00d合约的enter函数再次存入,此时上一次transferFrom 转移代币还未完成
5、攻击合约再次通过回调函数调用enter函数(每轮3次递归调用)
# 5、漏洞原因
漏洞原因:
1、每次调用 _mint 函数都会增加 _totalSupply的值
![5.png](https://img.learnblockchain.cn/attachments/2022/10/s7De1j4m635dda679e5ba.png)
2、漏洞合约先使用 _mint函数先增加了totalSupply的值,再使用transferFrom函数进行转账,而ERC777合约会先调用发送者的tokentosend函数,使得重入发生。而根据公式
uint256 what = _amount.mul(totalShares).div(totalSushi);
使得转给攻击者的代币数量(what)明显增加
![6.png](https://img.learnblockchain.cn/attachments/2022/10/rnW1qWcI635dda7f28e56.png)
1、SushiBar重入事件简介
2、攻击分析
交易:https://phalcon.blocksec.com/tx/eth/0x8037b3dc0bf9d5d396c10506824096afb8125ea96ada011d35faa89fa3893aea
3、获利分析
每次获利分析: https://etherscan.io/tx/0x8037b3dc0bf9d5d396c10506824096afb8125ea96ada011d35faa89fa3893aea
4、攻击过程分析
1、攻击合约先通过ERC1820注册发送代币回调接口keccak256("ERC777TokensSender")=0x29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895 2、通过SLP 闪电贷获取资金 3、攻击合约调用Xn00d合约的enter函数存入资金 4、因为n00d合约是ERC777合约,在调用transferFrom转移代币时会调用发送者的回调函数tokensToSend ,攻击合约在该函数中又重新调用n00d合约的enter函数再次存入,此时上一次transferFrom 转移代币还未完成 5、攻击合约再次通过回调函数调用enter函数(每轮3次递归调用)
5、漏洞原因
漏洞原因: 1、每次调用 _mint 函数都会增加 _totalSupply的值
2、漏洞合约先使用 _mint函数先增加了totalSupply的值,再使用transferFrom函数进行转账,而ERC777合约会先调用发送者的tokentosend函数,使得重入发生。而根据公式 uint256 what = _amount.mul(totalShares).div(totalSushi); 使得转给攻击者的代币数量(what)明显增加
本文参与区块链技术网 ,好文好收益,欢迎正在阅读的你也加入。
- 发表于 2022-10-30 10:02
- 阅读 ( 2877 )
- 学分 ( 4 )
- 分类:安全
评论