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漏洞原理相同,但是奖励太低。