Force
1. 题目要求
1.1 题目:
这一关的目标是使合约的余额大于0
这可能有帮助:
- Fallback 方法
- 有时候攻击一个合约最好的方法是使用另一个合约.
- 阅读上方的帮助页面, “Beyond the console” 部分
1.2 要求: 使合约的余额大于0
1.3 合约代码:
1 | // SPDX-License-Identifier: MIT |
2. 分析
2.1 我看到这个合约首先是挺无语的哈哈哈哈🤣🤣🤣
2.2 合约中没有没有fallback和receive函数接收以太,也没有任何一个payable的函数可以接收以太,所以我们只能强制给该合约打钱
2.3 由于合约中什么都没有,所以我们唯一能解决这个挑战的就是使用方法
selfdestruct()
2.4 selfdestruct()函数的解释:
selfdestruct
命令可以用来删除智能合约,并将该合约剩余ETH
转到指定地址。selfdestruct
是为了应对合约出错的极端情况而设计的。它最早被命名为suicide
(自杀),但是这个词太敏感。为了保护抑郁的程序员,改名为selfdestruct
。selfdestruct() 函数的使用:
2.5 攻击合约
1 | contract Exploiter { |
- 部署Exploiter合约, 构造器默认将Expoliter合约的余额转给 _to 地址
3. 解题
3.1 获取关卡实例地址:0x896317e85Fb12eA5bAD846A59870f3F672fAB7A4
3.2 部署攻击合约,并在部署时填入关卡实例地址
3.3 调用Deploy() 函数
3.4 调用实例部署的合约查看合约余额,结果 balance > 0
3.5 提交案例,并查看返回结果
3.6 成功!!!!