文章目录
- 漏洞代码
- 代码分析
- 攻击流程
- 攻击代码
- 前文重现
- 修复建议
- 审计思路
在阅读本文之前,请确保已先行阅读:【区块链安全 | 第三十九篇】合约审计之delegatecall(一)
漏洞代码
存在一漏洞代码如下:
// 库合约,定义了一个公共变量和一个函数
contract Lib {uint public someNumber; // 存储在 slot 0// 用于设置 someNumber 的值function doSomething(uint _num) public {someNumber = _num;}
}// 主合约 HackMe
contract HackMe {address public lib; // 存储在 slot 0,库合约地址address public owner; // 存储在 slot 1,合约的拥有者uint public someNumber; // 存储在 slot 2// 构造函数,初始化库地址和合约拥有者constructor(address _lib) {lib = _lib; // 设置外部库地址owner = msg.sender; // 设置合约拥有者}// 外部接口,调用库合约中的 doSomething 函数function doSomething(uint _num)