区块链智能合约安全,合约无效化攻击原理与实战

区块链智能合约安全,合约无效化攻击原理与实战-HackTwoHub社区
区块链智能合约安全,合约无效化攻击原理与实战
此内容为付费阅读,请付费后查看
300积分
付费阅读

合约无效化攻击

在区块链安全领域,智能合约逻辑漏洞一直是攻防焦点。合约无效化攻击作为典型的逻辑破坏型攻击,借助selfdestruct合约自毁函数特性,可让正常业务合约永久失效,对链上应用造成致命影响

合约无效化攻击类同于web安全中的逻辑漏洞中的一种
我们这里拿一个典型的例子来讲解
有这样一份智能合约, 每个人可以向其中发送1 eth
第七个发送的人可以获取全部的7 eth
我们按照这个功能去编写代码

contract Games {
    function play() public payable  {
        require(msg.value == 1 ether);
        if (address(this).balance == 7 * 10 ** 18) { // 当此人发送的是本轮中第七次eth, 则获得全部奖励
            msg.sender.call{value:7 ether}("");
        }
    }
}

阅读代码, 乍一看好像没什么问题
require保证了每人每次只能发送1eth
功能也可以正常实现

合约自毁函数 selfdestruct

接下来就要引入一个关于 合约自毁 的概念
合约部署之后, 假设我们发现了bug, 需要更改
智能合约不像传统的服务器那样, 传统的服务器可以直接关停服务
甚至热更新(在不停止服务的情况下更改服务器代码)
在区块链上的代码我们是无法更改的
那么假设我们的某个服务存在类同于”支付漏洞”的漏洞
我们必须要停止掉这个智能合约
这时候就需要用到合约自毁函数
函数签名
selfdestruct(address payable);
该函数接收一个可支付地址作为参数
函数会销毁该智能合约的部署,并将此时合约中存在的余额强制转给指定的地址

攻击实现

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容