合约无效化攻击
在区块链安全领域,智能合约逻辑漏洞一直是攻防焦点。合约无效化攻击作为典型的逻辑破坏型攻击,借助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





暂无评论内容