Denial


Denial

题目描述

原题 in Sepolia

拒绝用户提取资金withdraw()(此时合约仍有资金,并且交易的 gas 为 1M 或更少)。

运行

根据Foundry 官方文档配置好运行环境后,于本项目下执行下列命令:

$ cd WTF-CTF $ forge test -C src/Ethernaut/Denial -vvvvv ​

功能简述

call 如果异常会转账失败,只会返回false,不会最终停止执行, 没有gas限制

// The recipient can revert, the owner will still get their share partner.call{value: amountToSend}(""); ​

call方法会将调用结果以true和false的形式返回,即调用过程中有错误发生,也不会影响后续的代码。

所以只有让gas在外部call时全部消耗掉,无法运行后续代码。

receive() external payable { // 消耗掉所有gas值 while(true){} } ​

或者进行重新攻击,转走合约中的所有本币。但是题目要求的whilst the contract still has funds。就不能转完合约里全部的钱。

如果使用低级别call外部调用,请确保指定固定的 gas 津贴。例如call{gas: 100000}("")。

作者与出处
原作者:WTFAcademy
来源:WTFAcademy
许可证:MIT
整理人: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: WTFAcademy 转发
评论区 (0)
U