区块链安全 - 以太坊短地址攻击

2023-11-15

image

1

基础知识

EVM虚拟机在解析合约的字节码时,依赖的是ABI的定义,从而去识别各个字段位于字节码的什么地方。关于ABI,可以阅读这个文档:

https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI

一般ERC-20 TOKEN标准的代币都会实现transfer方法,这个方法在ERC-20标签中的定义为:function transfer(address to, uint tokens) public returns (bool success);

第一参数是发送代币的目的地址,第二个参数是发送token的数量。

当我们调用transfer函数向某个地址发送N个ERC-20代币的时候,交易的input数据分为3个部分:

4 字节,是方法名的哈希:a9059cbb

32字节,放以太坊地址,目前以太坊地址是20个字节,高危补0
000000000000000000000000abcabcabcabcabcabcabcabcabcabcabcabcabca

32字节,是需要传输的代币数量,这里是1*10^18 GNT
0000000000000000000000000000000000000000000000000de0b6b3a7640000

所有这些加在一起就是交易数据:

a9059cbb000000000000000000000000abcabcabcabcabcabcabcabcabcabcabcabcabca0000000000000000000000000000000000000000000000000de0b6b3a7640000

2

以太坊短地址

当调用transfer方法提币时,如果允许用户输入了一个短地址,这里通常是交易所这里没有做处理,比如没有校验用户输入的地址长度是否合法。

如果一个以太坊地址如下,注意到结尾为0:

0x1234567890123456789012345678901234567800

当我们将后面的00省略时,EVM会从下一个参数的高位拿到00来补充,这就会导致一些问题了。

这时,token数量参数其实就会少了1个字节,即token数量左移了一个字节,使得合约多发送很多代币出来。我们看个例子:

image

这里调用sendCoin方法时,传入的参数如下:

0x90b98a11 00000000000000000000000062bec9abe373123b9b635b75608f94eb8644163e 0000000000000000000000000000000000000000000000000000000000000002

这里的0x90b98a11是method的hash值,第二个是地址,第三个是amount参数。

如果我们调用sendCoin方法的时候,传入地址0x62bec9abe373123b9b635b75608f94eb8644163e,把这个地址的“3e”丢掉,即扔掉末尾的一个字节,参数就变成了:

0x90b98a11 00000000000000000000000062bec9abe373123b9b635b75608f94eb86441600 00000000000000000000000000000000000000000000000000000000000002 ^^ 缺失1个字节

这里EVM把amount的高位的一个字节的0填充到了address部分,这样使得amount向左移位了1个字节,即向左移位8。

这样,amount就成了2 << 8 = 512。

3

构造短地址攻击

(1)首先生成一个ETH的靓号,这个账号末尾为2个0

使用一些跑号工具就可以做到,比如MyLinkToken工具,可以很轻易跑出末尾两个0的。

image

(2)找一个交易所钱包,该钱包里token数量为256000

(3)往这个钱包发送1000个币

(4)然后再从这个钱包中提出1000个币,当然这时候写地址的时候把最后两个0去掉

如果交易所并没有校验用户填入的以太坊地址,则EVM会把所有函数的参数一起打包,会把amount参数的高位1个字节吃掉。

(5)这三个参数会被传入到msg.data中,然后调用合约的transfer方法,此时,amount由于高位的1个字节被吃掉了,因此amount = amount << 8,即扩大了256倍,这样就把25600个币全部提出来了。

4

总结

针对这个漏洞,说实话以太坊有不可推卸的责任,因为EVM并没有严格校验地址的位数,并且还擅自自动补充消失的位数。此外,交易所在提币的时候,需要严格校验用户输入的地址,这样可以尽早在前端就禁止掉恶意的短地址。

Reference

内容来源:知道创宇

作者:隐形人真忙

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

image

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链安全 - 以太坊短地址攻击 的相关文章

  • 每天都在谈SOA和微服务,但你真的理解什么是服务吗?

    近几年来 我一直从事着和面向服务相关的底层软件研发工作 逐渐的形成了一些自己的看法 其中我觉得比较重要的看法就是服务需要一个更准确细致的定义 简单来说 服务的本质就是行为 业务活动 的抽象 为了更好的阐述新服务的概念 并方便与传统的SOA中
  • 为什么要使用零知识证明来开发跨链协议

    用户需要什么样的跨链服务 在过去的几年当中出现了各种各样的独立公链以及以太坊 Layer 2 由于在安全性 低成本 快速交易以及开发者和用户社区差异等方面 不同链都具有各自不同的优势 用户在不同链之间切换使用的行为是很常见的 比起以太坊链
  • 荐读

    本文转自 链闻 ChainNews 作者 Karen 虽然区块链技术诞生至今不过短短十余年 但是东西方天然的文化差异在加密世界中同样留下了一些痕迹 当社交媒体上关于 东方区块链 只关心币价 利益和投机而只有 西方区块链 才关心底层技术的革新
  • 区块链技术及应用概述

    一 基本概念 什么是区块链 区块链是一种以密码学方式保证的不可篡改和不可伪造的分布式账本 关键特点 去中心化 不可篡改性 匿名性 安全可信 区块链架构 1 数据层 主要描述区块链系统的物理形式 它是从Genesis区块开始的区块链链结构 包
  • 区块链的安全性与去中心化特点:深入探讨区块链技术的安全性和去中心化特点

    摘要 本文将深入探讨区块链技术的两个核心特点 安全性和去中心化 区块链作为一种分布式账本技术 通过其独特的安全性和去中心化特点 在许多领域引起了广泛关注 我们将分析区块链的安全性原理和其与去中心化的关系 以及区块链技术在保护数据安全和提供信
  • Bridge Champ举办人机对战赛:NFT游戏与传统竞技共生发展编织新格局

    概要 现在 NFT与体育竞技正日益紧密地联系在一起 一些体育项目开始推出与赛事或球队相关的NFT 同时也有部分NFT游戏开始举办电子竞技赛事 这种共生发展正在改变体育竞技的生态 笔者采访了桥牌冠军项目相关负责人 探讨NFT游戏与传统体育竞技
  • 圆石说│彭一鸣:运用区块链技术赋能实体旅游产业;微软开放6万项专利包括一个开源区块链项目……

    智联招聘 区块链岗位需求主要集中在一线和新一线城市 智联招聘报告显示 从目前区块链职位的城市分布来看 该领域的岗位需求主要集中在一线和新一线城市中 其中 北京 上海和深圳位于第一梯队 职位占比分别达到24 20 和10 杭州 广州和成都紧随
  • Fabric private data入门实战

    Hyperledger Fabric private data是1 2版本引入的新特性 fabric private data是利用旁支数据库 SideDB 来保存若干个通道成员之间的私有数据 从而在通道之上又提供了一层更灵活的数据保护机制
  • "我为区块链赋能实体经济代言"第二批代言人:复旦大学张江研究院教授陈文君

    我为区块链赋能实体经济代言 推出以来 颇受行业关注 为进一步规范行业发展 落实区块链赋能实体经济的目标 为行业发展 正本清源而发声 新一轮的 我为区块链赋能实体经济代言 于9月3日重磅启动 我为区块链赋能实体经济代言100人第二批 第3位代
  • 【区块链与密码学】第2-3讲:区块链基础技术大剖析之哈希函数

    本课堂内容全部选编自PlatON首席密码学家 武汉大学国家网络安全学院教授 博士生导师何德彪教授的 区块链与密码学 授课讲义 教材及互联网 版权归属其原作者所有 如有侵权请立即与我们联系 我们将及时处理 2 4 1 哈希函数 区块链作为一个
  • 新加坡社区领袖卓顺发的荣誉与大爱精神

    2023年11月24日 善济医社义务执行主席卓顺发太平绅士JP BBM L PVPA受邀出席内政部主办的答谢活动2023 主宾为内政部长兼律政部长尚穆根先生 Mr K Shanmugam 2018年起 卓顺发受委为太平绅士后 应内政部邀请
  • Sui生态DeFi将参加Builder DAO举办的活动,为期三天畅谈如何Build on Sui

    LeadUp the Night是一个定期举办的MeetUp活动 由Builder DAO邀请区块链各方项目开发者 VC担任本活动的讲师 这个活动旨在促进区块链技术的发展和应用 让参与者有机会开发创新的区块链应用 探索区块链技术的潜力 12
  • 默克尔树(Merkle Tree)

    默克尔树 Merkle Tree 是一种哈希树的变体 它是一种有向无环图 DAG 通常用于数据完整性验证 它以密码学家拉尔夫 默克尔的名字命名 是由一系列哈希值构成的树状结构 默克尔树的特点是 它的每个非叶子节点都是其子节点的哈希值的哈希
  • 工业互联网会是制造业数字化发展的未来吗?

    新工业革命正逐步形成 你认为工业互联网会是制造业数字化发展的未来吗 从这几年的工业互联网发展政策措施 就能看到答案 早在近三年前 工业互联网创新发展行动计划 2021 2023年 就提出了五方面 11项重点行动和10大重点工程 着力解决工业
  • zkSend — — 在Sui上发红包像发电子邮件一样简单

    12月14日 知名区块链媒体平台The Block发表了这篇关于对Mysten Labs联合创始人Adeniyi Abiodun的采访 文中 我们 指代该媒体 数据均为截止撰写文章时数据 以下是正文 两年前 当五名前Facebook工程师创
  • Moonbeam生态项目分析 — — 跨链借贷协议Orbiter One

    概览 Orbiter One 是一个非托管的借贷协议和DeFi中心 专注于跨链互操作性 通过使用从借贷中赚取的ORB Token铸造的Intergactic Whiskers Brigade NFT 用户可以质押并获得额外奖励 借贷和跨链存
  • 一文了解Substrate

    Substrate是用于构建特定类型区块链的工具箱 它本身并不是一个区块链 而是开发者用来创建独特而强大的区块链的一套工具 Substrate允许开发者可以自己创建所需所想功能的区块链 无需受限于现有的设计 Substrate使用FRAME
  • 期权开户最低多少钱个人可以开?

    大家新年好 现在2024年龙年 很多想玩期权的小伙伴都知道期权开通需要50万的门槛 那么今天来给大家详细介绍下期权开户最低多少钱个人可以开 本文将对期权开户最低金额进行探讨 帮助投资者更好地了解期权交易的投资门槛 本文来自 期权酱 一 期权
  • 英国金融时报关注TRX登陆Mercado Bitcoin交易所:波场TRON强化南美洲布局,国际化进程持续加速

    近日 波场TRON网络原生代币TRX正式上线巴西最大的合规加密交易所Mercado Bitcoin 英国金融时报 Decrypt Blockworks等财经及加密行业权威媒体对该话题进行了报道 表示此次合作是波场TRON全球业务增长的有力证
  • 【网络安全】——区块链安全和共识机制

    区块链安全和共识机制 摘要 区块链技术作为一种分布式去中心化的技术 在无需第三方的情况下 使得未建立信任的交易双方可以达成交易 因此 区块链技术近年来也在金融 医疗 能源等多个行业得到了快速发展 然而 区块链为无信任的网络提供保障的同时 也

随机推荐

  • try-with-resource有什么作用,为了解决什么问题?

    Java中try with resources是一种方便且安全的资源管理方式 它可以在程序结束时自动关闭打开的资源 比如文件 网络连接等等 这个特性首次引入Java 7中 它为Java开发者提供了极大的便利 有效避免了因资源未关闭而导致的内
  • hive安装与配置详解

    1 hive下载地址http mirror bit edu cn apache hive 2 上传至software目录下 3 解压至指定目录 4 重命名hive 5 修改环境变量 6 让环境生效 7 查看hive版本 8 修改hive s
  • SCCM部署前的IIS、WSUS等准备

    SCCM部署前的IIS WSUS等准备 IIS是SCCM中非常重要的部署条件 SCCM部署中的很多环节都需要IIS的支持 因此 完成Active Directory的准备工作后 我们就开始IIS的准备工作 IIS的部署并不复杂 只需要安装一
  • sessionStorage 移动端兼容问题

    开发移动端项目 需要前端页面存储一些用户数据是一个常见的功能 sessionStorage和localStorage就是常用的选择 最近移动端项目用到sessionStorage时遇到一些问题 如 vivo手机自带浏览器 问题如下 A ht
  • 转载--网站数据统计分析中的日志收集原理及其实现

    http my oschina net leejun2005 blog 292709 转载于 https www cnblogs com benchan2015 p 4897378 html
  • Mysql(12)——聚集索引和非聚集索引

    MyISAM的索引树相关 主键索引树 这一部分我们之前在MyISAM的存储结构中也有所提及 我们也知道MyISAM使用B 树作为索引结构 叶节点的data域存放的是数据记录的地址 因为MyISAM存储引擎的数据和索引是分开存放的 分别是 M
  • redhat6.5 yum register 问题

    安装apache时 出现如下错误 configure error in usr local src httpd 2 2 24 srclib apr configure error no acceptable C compiler found
  • 【云原生之kubernetes实战】在k8s环境下部署Teleport堡垒机系统

    云原生之kubernetes实战 在k8s环境下部署Teleport堡垒机系统 一 Teleport介绍 1 Teleport介绍 2 本次实践说明 二 检查本地k8s环境 1 检查工作节点状态 2 检查系统pod状态 三 使用docker
  • java.sql.SQLException: No suitable driver found for 三种可能情况

    url user password 错了 没有导入 mysql connection jar包 数据库驱动没导入 你可能需要这个 Class forName com mysql cj jdbc Driver 数据库驱动问题
  • Quartus II not support the EP2C5F256I8 device,如何解决

    我自己前些天在运行项目时也发生了这个错误 事实上 我很困惑 因为我之前已经破解完成了 为什么有出现这个问题 报错提示 Error 102290 current license file does not support the EP2C5F
  • python量化交易招聘深圳_招聘兼职量化交易系统( python web版)

    需求描述 支持任务调度 分布式部署的 股票 期货 期权 港美股 数字货币 数据 回测 模拟 交易 可视化 多账户 纯本地量化解决方案 整个系统交易抽象为 用户信息管理 基础数据信息支持 策略管理 风控管理 交易执行模块 系统管理 回测系统七
  • Leetcode 142. 环形链表 II

    给定一个链表 返回链表开始入环的第一个节点 如果链表无环 则返回 null 为了表示给定链表中的环 我们使用整数 pos 来表示链表尾连接到链表中的位置 索引从 0 开始 如果 pos 是 1 则在该链表中没有环 说明 不允许修改给定的链表
  • 在Mac上使用GVM Tool安装Groovy、Grails环境

    一 下载gvmtool curl s get gvmtool net bash 命令运行后提示最后几句如下 Please open a new terminal or run the following in the existing on
  • Java-手动抛出异常

    Java 手动抛出异常 1 概念 关于异常对象的产生 系统自动生成的异常对象 手动生成一个异常对象 并抛出 throw 2 code举例 package p8exception p9 public class StudentTest pub
  • NRZ、NRZI编码

    RZ 编码 Return to zero Code 归零编码 在 RZ 编码中 正电平代表逻辑 1 负电平代表逻辑 0 每传输完一位数据 信号返回到零电平 信号线上会出现 3 种电平 正电平 负电平 零电平 从图上就可以看出来 因为每位传输
  • 数据分析系列之数据预处理

    在数据挖掘过程中 海量的原始数据存在大量的不一致 有缺失的数据 严重影响到数据挖掘的效率和准确率 数据清洗尤为重要 数据清洗之后进行或同时进行数据集成 转换 规约等一系列过程 该过程就是数据预处理 数据预处理一方面提高数据质量 另一方面使数
  • Intel Application 应用设备队列(ApplicationDevice Queues,ADQ) 与 动态设备个性化(Dynamic DevicePersonalization,DDP)

    英特尔X800系列十万兆以太网卡 支持ADQ与DDP优化 应用设备队列 ApplicationDevice Queues ADQ netdev2020 动态设备个性化 Dynamic DevicePersonalization DDP 应用
  • l298n

    L298N是专用驱动集成电路 属于H桥集成电路 与L293D的差别是其输出电流增大 功率增强 其输出电流为2A 最高电流4A 最高工作电压50V 可以驱动感性负载 如大功率直流电机 步进电机 电磁阀等 特别是其输入端可以与单片机直接相联 从
  • Git bash命令行密码登录失败,提示remote: Support for password authentication was removed。避免每次都要输入密码

    目录 问题 原因 基于HTTPS协议 1 创建token令牌 2 重新设置远程仓库地址 基于SSH协议 1 检查系统中是否已存在SSH keys 2 生成新的SSH keys 3 将SSH keys的公钥添加到你的Github账户 4 测试
  • 区块链安全 - 以太坊短地址攻击

    1 基础知识 EVM虚拟机在解析合约的字节码时 依赖的是ABI的定义 从而去识别各个字段位于字节码的什么地方 关于ABI 可以阅读这个文档 https github com ethereum wiki wiki Ethereum Contr