http://www.7klian.com

下面以ethernaut靶场的Fallout题目为例举办阐明。

 

二、Fallout“以假乱真?”

– 裂痕阐明

这样的错误使其成为了一个被public修饰的普通函数,失去告终构函数仅在合约陈设时被挪用的特性,使得任何人都可以挪用。该题目源码如下图所示:

 

 

假如要利用低于0.4.22的版本,则必然要着重查抄函数名是否和合约名一致。

四、后车之鉴

假如开拓者以错误的语法建设“结构函数”,造成结构函数缺失,致使“六耳猕猴”以假乱真,瞒过了开拓者,最后使得进攻者成为合约的拥有者(owner),那么进攻者便可依赖owner的权限,对代币举办增发或销毁等操纵,进而大概造成整个代币的崩盘。

2、在某些环境下,编译器会对constructor的错误利用发出告诫,开拓者应予以正确看待,不行认为其只是告诫信息而忽略不处理惩罚。

图 6

三、前车之覆
 

图 5

owner是智能合约拥有者的称号,也常被用来作为该合约的超等打点员。对代币合约来说,owner大概被分派的权限有:造/销毁代币、冻结代币等

在《西游记》中,六耳猕猴假充猴王孙悟空,以假乱真,骗过了唐僧,骗过了众神,纵使是照妖镜也分不出真假。此刻,智能合约赶上了“六耳猕猴”,又会擦出奈何的火花?

如下图所示:

MorphToken合约担任了Owned合约,并在本身的结构函数内举办了owner的初始化,,可是父合约Owned的owned函数是可供任何人挪用的,进攻者便可通过挪用owned函数变动合约的所有者owner。

“假猴王”Fal1out想借着一些字体范例的相似字符的视觉差别夹杂视听,可最终照旧没能逃过我们的“火眼金睛”。

如下图所示:

 

图 8

在Solidity语言中,当函数名和合约名沟通时,此函数就是合约的结构函数,在合约工具建设时,会先挪用结构函数对相关的数据举办初始化。

在Fal1out函数中直接指定了函数挪用者的地点即为owner,所以只需要挪用Fal1out函数即可实现对合约owner的变动。

在已往也曾产生过雷同的安详事件,包括着假结构函数的合约被乐成宣布到主链上,个中较量着名的是“MorphToken事件”,其因为一个看似很小的问题而造成了数千万市值的代币被增发。

1、开拓者在编写智能合约敏感函数(如结构函数、回退函数fallback)时,应严格凭据官方要求的代码书写类型,留意不要呈现字符错误等环境。

引子:“真行者珞珈山埋怨,假猴王水帘洞誊文。”  ——《西游记·第五十八回》

在智能合约中,结构函数认真一些数据的初始化事情,owner值一般也会放在结构函数中举办初始化。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读