ethernaut——King

本关目标是阻止他人成为king,通过在合约的fallback函数中调用revert(),使得其他人的付款交易失败。攻击者部署了一个合约并支付1ether,成为king,同时确保其他人无法再成为king。文章强调了在以太坊智能合约中,外部交易的潜在风险以及防止恶意操作的方法。
摘要由CSDN通过智能技术生成

第九关:King

本关知识点:

主动让函数调用失败,进行revert。

1. 题目要求

阻止其他人重获王位来通过这一关

2. 代码功能解读

请添加图片描述

3. 漏洞分析

阻止其他人成为king,那么在玩家当国王的时候,拒绝其他人的付款就可以完成挑战。
	通过在king合约的回退函数中直接调用revert(),或者耗尽gas来达到无法付款的目的。

4. 攻击方法

fallback() external payable{ revert(); }

5. 攻击调用图

部署攻击合约,并放入了1 ether。在攻击的时候传入受害者合约地址就行。
![[Pasted image 20230516152204.png]]

攻击后,攻击合约地址就成为了king,并且其他人无法成为king,通过本关
请添加图片描述

调用攻击函数后查看,合约拥有者是攻击合约,并其他人无法成为king。

6. 知识点分析

在发送外部交易的时候是危险的,对方的操作可以使方法执行失败,造成不可挽回的损失。
解决方法: 将之前的king可获得的金额写入合约,让他们自己来取,防止有人恶意成为king。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值