首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >智能合约:特权功能暴露、矿工特权隐患

智能合约:特权功能暴露、矿工特权隐患

作者头像
yichen
修改2020-05-15 14:29:10
5610
修改2020-05-15 14:29:10
举报

特权功能暴露

漏洞分析

  • 在 solidity 中没有被权限修饰符修饰的函数,默认可以被所有人调用(即具有 public 属性)
  • 在 solidity 中有一个内置函数 selfdestruct() (析构函数)销毁当前合约,并把合约余额发送到某个地址中

如果这俩情况同时发生在同一函数上,就意味着所有人都可以调用这个函数来获得合约的余额,当然,也不一定是析构函数,其他涉及敏感操作的函数(比如未鉴权的合约所有人转移、初始化等)暴露也会造成严重的后果

代码片段

function destroycontract(address _to){
  selfdestruct(_to);
}

这个函数是销毁合约的函数,但是却没有进行修饰,导致任何人都可以调用这个函数来销毁合约

代码调试

https://cn.etherscan.com/address/0xb5c0e43a6330b9eb904ec57ea24d70269ae4652e#code

部署 Zapit 合约

先随便试试,是正常可用的

用第二个账户销毁合约

再看看已经没法用了

漏洞防范

对于敏感操作要严格控制权限,还是要仔细吧。。。

矿工特权隐患

漏洞概述

主要是指依赖时间戳的合约,比如一个抽奖的合约,会根据当前时间戳与一些其他的变量计算出来“幸运数”,如果参与者拥有幸运数相同的编码就可以拿到奖品,那么矿工在挖矿的过程中,可以提前尝试不同的时间戳,把奖品送给自己想送给的人

相关案例

鉴于没法在 remix IDE 中复现,来说个案例,GovernMental 一个“庞氏骗局”合约会在一轮合约内向最后一个加入合约的玩家(需要至少加入一分钟)进行支付,因此,作为矿工的玩家可以调整时间戳,让合约以为该玩家已经加入超过一分钟了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈冠男的游戏人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特权功能暴露
  • 矿工特权隐患
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档