10多年的软件开发经验,包括大数据、AI等领域,熟悉Go、Java、Python等语言使用,最近学习rust语言,目前从事技术管理、架构师相关工作

漏洞合约:
游戏合约,每个区块有一个合约玩家,若time.timestamp 为13的倍数,则拿走所有的奖金。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
contract TimeGame {
uint public lastBlockTime;
constructor() payable {}
function play() external payable {
require(msg.value >= 1 ether);
require(block.timestamp != lastBlockTime);
lastBlockTime = block.timestamp;
if(block.timestamp % 13 == 0){
payable (msg.sender).transfer(address(this).balance);
}
}
receive() external payable { }
}攻击原理:
当合约汇集大量资金,矿工有足够的时间操作时间戳,可以根据需要进行修改,向13的倍数进行调整,block.timestamp , 同时调用play方法完成攻击目标。
防范:
1、尽量不使用时间戳,可以使用Oracle获取相关信息
2、如果使用时间戳,就使用平均时间戳

漏洞合约:
游戏合约,每个区块有一个合约玩家,若time.timestamp 为13的倍数,则拿走所有的奖金。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
contract TimeGame {
uint public lastBlockTime;
constructor() payable {}
function play() external payable {
require(msg.value >= 1 ether);
require(block.timestamp != lastBlockTime);
lastBlockTime = block.timestamp;
if(block.timestamp % 13 == 0){
payable (msg.sender).transfer(address(this).balance);
}
}
receive() external payable { }
}攻击原理:
当合约汇集大量资金,矿工有足够的时间操作时间戳,可以根据需要进行修改,向13的倍数进行调整,block.timestamp , 同时调用play方法完成攻击目标。
防范:
1、尽量不使用时间戳,可以使用Oracle获取相关信息
2、如果使用时间戳,就使用平均时间戳
10多年的软件开发经验,包括大数据、AI等领域,熟悉Go、Java、Python等语言使用,最近学习rust语言,目前从事技术管理、架构师相关工作

Subscribe to web3zoom

Subscribe to web3zoom
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers
No activity yet