智能合约重入漏洞

可重入漏洞是智能合约中最危险的漏洞之一,它可能导致合约余额(以太)被攻击者窃取。如果一个合约中的支付函数调用(即call.value()、deposit.value()、transfer()等)被用来调用其他合约,而被调用方也调用调用方,从而再次进入调用方,则会发生这种情况。它将最终提取调用方合约账户的全部金额,而区块中的记录只是第一次提取。例如,在图中,攻击者调用合约Attack中的attack函数(第23行),它将通过第24行执行合约Reentrance中的withdraw函数。当合约Reentrrance执行withdraw函数(第3行),它将使用一个调用语句发送ether到Attack合约(第6行)。然而,在solidity语言,当外部账户,或其他合约发送ether到一个合约地址,被调用者合约的回退函数将被执行。因此,此时,合约Attack使用Attack.fallback函数响应转账(第27行)。Attack.fallback函数调用Reentrance.withdraw函数,再次提取ether(第29行)。因此,合约Attack会一直从合约Reentrance中取出ether,直到gas耗尽,并且扣除合约Attack所持有的token数量的语句(deduct-statement)只执行一次。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值