【ERC20安全审计】——28、evilReflex攻击漏洞刨析

文章前言

在这篇文章中,我们对曾经出现过的一种叫做evilReflex的安全漏洞进行分析研究,攻击者可以通过该漏洞将存在evilReflex漏洞的合约中的任意数量的token转移到任意地址

漏洞分析

漏洞函数approveAndCallcode()代码如下所示:

approveAndCallcode函数的用途是在完成approve操作时发出相关的调用通知,而在上述代码的L136处_spender.call(_extraData)中的_extraData为用户可控参数,而在solidity语言中可以通过call方法来实现对某个合约或者本地合约的某个方法进行调用,调用的方式大致如下:

<address>.call(方法选择器, arg1, arg2, …) 
<address>.call(bytes)

在使用call调用时我们可以通过传递参数的方式,将方法选择器、参数进行传递,也可以直接传入一个字节数组,我们可以将要调用的合约方法以及相关参数转换为bytecode之后作为_extraData参数传入,然后通过_spender.call(_extraData)实现对合约中的任意方法的调用,而此时的_spender也是可控的,所以也可以在存在漏洞的合约中调用任意合约的任意方法并为其提供相关的方法参数

漏洞演示

下面我们来做一个漏洞演示,模拟如何通过evilReflex漏洞窃取合约自身的token到任意地址,下面是存在漏洞的合约代码:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLy_鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值