Transaction 信息:https://etherscan.io/tx/0x0ec3f2488a93839524add10ea229e773f6bc891b4eb4794c3337d4495263790b
参考文章:
【1】https://learnblockchain.cn/article/644
【2】https://cloud.tencent.com/developer/article/1084243?from=15425
攻击执行流程:
1.建议拆分, 等到投票期(voting period)结束。(DAO.sol, newProposal)
2.执行拆分。(DAO.sol, splitDAO)
3.让DAO将新的DAO发送给它的代币。(splitDAO - > TokenCreation.sol, createTokenProxy)
4.确定DAO在更新你的余额之前尝试发送给你奖励, 但需在完成(3)之后。(splitDAO - > withdrawRewardFor - > ManagedAccount.sol, payOut)
5.当DAO执行(4)时, 让它再次运行splitDAO, 其参数与(2)中的相同(payOut - > _recipient.call.value - > _recipient())
6.DAO现在会向您发送更多子代币, 并在更新余额前提现您的奖励。(DAO.sol, splitDAO)
7.回到(5)!
8.调用transfer()发送Dao到下一个合约以便下一次攻击。
9.让DAO更新你的余额。因为它从来不会从(7)回到(5) 😃。
在getMyReward中也存在重入漏洞。可以循环拿取rewardAccount中的eth。与splitDao漏洞原理相同,但是奖励太低。
智能合约安全:以太坊DAO重入攻击解析
本文详细介绍了以太坊DAO合约中的重入攻击漏洞,包括攻击执行的步骤,如等待投票期结束后拆分DAO,利用splitDAO函数再次执行,导致无限循环并获取额外奖励。这种攻击方式存在于getMyReward函数中,允许攻击者反复提取奖励账户中的ETH。尽管奖励较低,但此漏洞展示了智能合约安全性的重要性。
1万+

被折叠的 条评论
为什么被折叠?



