Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一行代码蒸发了???RMB

一行代码蒸发了???RMB

作者头像
爬虫
发布于 2018-07-25 08:15:04
发布于 2018-07-25 08:15:04
32000
代码可运行
举报
文章被收录于专栏:Python与爬虫Python与爬虫
运行总次数:0
代码可运行

背景

又发现一个ERC20 超级大的漏洞

这个漏洞严重到什么情况呢?

你的钱不再是你的钱,任何人都可以把你的钱转走,你也可以转走任何人的钱

那笔操作记录是 0x9a6a0ba68214db82ec6fd12ee3a6b4cf1143ec963974d7a5edf97e08b6c482ca

https://etherscan.io/tx/0x9a6a0ba68214db82ec6fd12ee3a6b4cf1143ec963974d7a5edf97e08b6c482ca

下面我来带大家看看,黑客是如何实现的!

我们可以看到执行的方法是 transferFrom

那这个方法是干嘛的呢?(从某个人 转钱到 另外一个人 )

这个方法有一个配套的方法 approve,你授权某个人用多少你的钱。。。

所以,这两个方法的使用场景是,

举个例子:

我授权我儿子使用我的100块钱,那我先调用 approve 然后 我儿子要用钱的时候,调用 transferFrom来用我的钱,当然用一次少一次(而且每次用的钱不能超过我授权的钱)

代码解释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { /// same as above require(_to != 0x0); require(balances[_from] >= _value); require(balances[_to] + _value > balances[_to]); uint previousBalances = balances[_from] + balances[_to]; balances[_from] -= _value; balances[_to] += _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); assert(balances[_from] + balances[_to] == previousBalances); return true;}

这个方法会传入三个参数

  1. _from :在用谁的钱
  2. _to : 把钱给谁
  3. _value : 准备用多少钱
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require(_to != 0x0);require(balances[_from] >= _value);require(balances[_to] + _value > balances[_to]);

这三行是一些强制要求

  1. 你不能把钱转给0x0,也就是空地址
  2. 你在用谁的钱(那么这个人的余额一定要大于 你要用的钱)
  3. 你转给的那个人钱,那么那个人的余额一定要大于 之前的余额(也就是不能转个-1之类的,导致他余额反而变少了)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uint previousBalances = balances[_from] + balances[_to];balances[_from] -= _value;balances[_to] += _value;

这三行

  1. 算出两个人余额的总数
  2. from 那个人的余额 - value
  3. to 那个人的余额 + value

allowed[_from][msg.sender] -= _value;

这一行我们分解下 allowed[_from][msg.sender] 是 当前方法调用的人(msg.sender)可以使用(_from) 多少钱

也就是假如 我授权了我儿子100块,那么

allowed[我的地址][msg.sender] = 100(这边的msg.sender 需要是我儿子的地址,如果是别人的话,我没有授权给他,则是0

所以这一行原本的意思是 (我儿子用了多少授权的金额,那么总授权金额需要 减掉 被用掉的)

但是呢。。。因为没用用safemath...导致任何人都能通过这一行(也就是 0- value)

0-value是不会报错的(当然如果用safemath的话,是会报错的。。。)

所以呢,只要你找到一个有钱人的地址,,,然后就可以吧他的钱全部转给任何账户。。。

下面的代码就没有意义了,不需要解释了。。。

而且他这个合约 没有暂停的方法。。。

导致现在任何人都可以调用这个合约。。。

合约的问题

  1. 当然是做加减乘除的时候没有用safemath
  2. 逻辑还有一个问题

正常来说,应该需要加一个 判断,被授权的金额 不能大于 要发送的金额。。。

require(allowed[_from][msg.sender] >= _value);

这样的话 后面也就不会有这些事情了。。。

总结

我发现了 攻击这个合约的人 已经攻击了很多合约了!!!

这一些币大家就别抄底了!

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

本文分享自 Python爬虫分享 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一行代码蒸发了¥6,447,277,680 人民币!
在他发表完言论没多久,2月美链(BEC)上交易所会暴涨4000%,后又暴跌。尽管他多次否认,聪明的网友早已扒出,他与BEC千丝万缕的关系。
爬虫
2018/07/25
3500
一行代码蒸发了¥6,447,277,680 人民币!
慢雾科技:智能合约 transferFrom 权限控制不当导致的任意盗币攻击简述
可以看出,这个流程并没做 allowed[_from][msg.sender] 和 _value 的判断,比如函数开始应该判断:
辉哥
2018/08/10
8390
智能合约审计之一致性检查
本篇文章将对Lightcoin合约内transfeFrom授权转账函数的allowance不一致性问题和CountryCoin合约内transfeFrom的balance不一致性问题进行简单的分析介绍~
Al1ex
2021/07/16
5100
智能合约审计之一致性检查
【区块链安全】技术小白如何做到让一行代码值64亿元?
2018年4月24日,又一件突发性事件引爆了币圈!刚刚发行了才两个月的“美链 Beauty Chain” (简称BEC)在受到黑客的攻击的影响下直接归零了!黑客使用的是以太坊ERC-20智能合约BatchOverFlow数据溢出的漏洞,向两个地址转出了数量巨大的BEC代币!黑客先是试探性地往Okex中转100万的BEC,发现成功转入卖出后,又分两次转入了一千万的BEC。发现两次都成功,黑客变得更加大胆,便转入了一亿枚BEC。但这1亿枚 BEC转入后,OKEx已经发现问题并停止了BEC的交易。按照转入记录,预计黑客已经卖出了最少 1100万枚BEC,折合昨日售价约一千八百多万人民币。
辉哥
2018/08/10
9480
【区块链安全】技术小白如何做到让一行代码值64亿元?
智能合约:Ethernaut题解(五)
目标:现在手里有一些代币,但是十年之后才能转走,先办法转走他们,使得你合约中的代币为 0
yichen
2020/05/25
8480
智能合约:Ethernaut题解(五)
智能合约安全之不一致性检查
本篇文章将对Lightcoin合约内transfeFrom授权转账函数的allowance不一致性问题和CountryCoin合约内transfeFrom的balance不一致性问题进行简单的分析介绍~
Al1ex
2021/07/21
6970
智能合约安全之不一致性检查
以太坊ERC20协议以及发行自己代币
ERC-20 标准是在2015年11月份推出的,使用这种规则的代币,表现出一种通用的和可预测的方式。
若与
2018/11/23
2.4K0
一步步教你创建自己的数字货币(代币)进行ICO
本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么
Tiny熊
2018/06/21
2.4K0
智能合约中approve函数详解
我问他为什么不只用Token的标准approve 函数外部提前调用一次、然后直接执行第二步就行了、他们都有各自的理由、咱也不好细问。
终有链响
2024/08/06
2420
智能合约中approve函数详解
深入了解ERC-20标准,以太坊通证的过去与未来
ERC-20通证对整个加密货币世界产生了举足轻重的影响,它造就了数十亿美元的ICO产业,也促进了加密货币走向主流。ERC-20标准就是有着这样的魔力,在我们了解ERC-20通证是什么以及它们如何影响加密世界之前,让我们先来回顾一些基础知识。
区块链大本营
2018/09/21
9780
深入了解ERC-20标准,以太坊通证的过去与未来
AI智能绘画NFT艺术品铸造系统开发智能合约编写技术流程
随着NFT概念的进一步火热,组合式NFT概念被提出。例如一个头像可以由眼睛、嘴巴和鼻子等元素组成,每个元素都是一个NFT或者FT,这些元素共同组成了一个独一无二的NFT头像。但是对于整个头像NFT而言,在过去传统合约中是没有所谓层级关系的,即鼻子部分并不知道自己属于哪个NFT,或者头像部分不知道自己是由哪些NFT或者FT组成的。为此,ERC-998便应运而生,也就是可组合Composable NFTs,缩写为CNFT,即一个ERC-998可以包含多个ERC-721和ERC-20形式的通证,而转移CNFT即是转移CNFT所拥有的整个层级结构和所属关系。
开发v_hkkf5566
2023/03/03
4260
技术分析 Lendf.me 被攻击,ERC777到底该不该用?
我在去年 9 月写过一篇ERC科普文章:ERC777 功能型代币(通证)最佳实践[1] ,文章里我推荐新开发的代币使用 ERC777 标准。
Tiny熊
2020/04/21
9340
技术分析  Lendf.me 被攻击,ERC777到底该不该用?
blockwell.ai 虚假转账 事件分析
2018年9月7日早上1点左右,许多以太坊账户都收到了一种名为blockwell.ai KYC Casper Token转账消息,其中有的是收到了这种代币,而有的用户是支出了这种代币。
LoRexxar
2023/02/21
2550
blockwell.ai 虚假转账 事件分析
如何开发创建ERC20以太坊代币
可以把ERC20简单理解成以太坊上的代币协议,所有基于以太坊开发的代币合约都遵守这个协议。遵守这些协议的代币我们可以认为是标准化的代币,而标准化带来的好处是兼容性好。这些标准化的代币可以被各种以太坊钱包支持,用于不同的平台和项目。说白了,你要是想在以太坊上发行代币融资,必须要遵守ERC20标准。
笔阁
2018/09/04
1.5K0
如何开发创建ERC20以太坊代币
DeFi中的不变量测试(Invariant Test)
不变量测试是一种软件测试方法,专注于验证系统在各种条件下某些属性或状态始终保持不变。在区块链和DeFi应用中,这种测试方法尤为重要,因为智能合约一旦部署到链上就无法更改,而且直接管理资产。不变量测试帮助开发者确保无论用户如何与合约交互,关键的安全性和功能性特性始终得到保持。
用户11711955
2025/06/20
360
第七课 技术小白如何在45分钟内发行通证(TOKEN)并上线交易
通过逐步的指导和截图举证,一步步带领一个技术小白完成一个数字货币(通证,代币,TOKEN)的发布演示和上线交易。
辉哥
2018/08/10
1.3K0
第七课 技术小白如何在45分钟内发行通证(TOKEN)并上线交易
Ethernaut闯关录(下)
在合约的开头处有一个Building接口,定义了isLastFloor函数,返回值是bool,应该是用来返回这一楼层是否为最顶层,在接口里没有函数是已实现的,类似于抽象合约,可以理解为它仅仅用来提供一个标准,这样继承于它的合约就可以遵照它的标准来进行交互,而接口内的函数在其调用合约内定义即可。
Al1ex
2021/07/21
1.1K0
Ethernaut闯关录(下)
智能合约中常见的漏洞总结复现#技术创作101训练营#
一个小朋友,他可以数着手指运算十以内的运算,比如 1+1=2,他可以用两个手指算出来,但是如果你问他 5+6 等于多少,他数完十个手指之后发现手指不够用了,就会把手指扳回来,说:结果为 1,对于小朋友来说,这个问题就超纲“溢出”了
yichen
2020/09/23
3K0
关于币安链智能合约模式系统开发解析
以太坊是一个全球性的、去中心化的金融和新型应用程序平台。在以太坊,我们可以通过智能合约代码来控制资产,并建立世界上任何地方皆可访问的应用程序。今天我们自己动手来写一段简单的智能合约代码,探索一下智能合约的奥秘。
l8l259l3365
2022/08/15
4810
web3 solidity 基础 ERC20 大白话搞懂
标准是大家遵循的一个协议,根据这个协议大家都知道该怎么去做,例如去吃饭的时候人多,你就需要排队,然后去窗口跟阿姨说你要吃什么,阿姨就会帮你打;若你不准守这个标准,直接冲进后厨,翻开泔水,大喊着我要吃饭…这个时候就完全背离了这个标准,所以被赶走了。
1_bit
2022/10/28
7820
web3 solidity 基础 ERC20 大白话搞懂
推荐阅读
相关推荐
一行代码蒸发了¥6,447,277,680 人民币!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档