solidity 安全 合约的短地址攻击——这个锅谁来背

2023-11-08

    前一段时间,有个用户用说发交易的时候提示地址错误,后来发现发送的地址少了一字节;所以钱包检测发送地址时,会提示错误。当时也没当回事,以为是用户自己搞错了。最近研究solidity的时候,才明白了当时是怎么回事,原来这个用户遇到了短地址攻击。今天就来分析一下短地址攻击,玩ERC20的“韭菜们”都需要注意一下,否则你会发现,你的token被自己莫奇妙的都送给别人了,到时候可没地方说理去。

    我们先来看一下正常的ERC20转账的交易结构是什么样子的。正常的ERC20的转账交易,from地址是你自己,to地址是你要转账的token合约地址,而你要转账账户地址其实是写在input data里;随便找一个erc20的转账地址大家看一下,

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

大家可以看一下,我红色标注的地址;我们着重分析一下,input data结构;如果你看了我写的omni协议分析,有没有觉得input data和OP_Return有点类似呢;我们把input data用两种形势表达一下。

解析形式:

原始形式:

对比一下两种形式,你会发现,其实是一样的,也就明白了input data是个什么样的结构;主要分为三部分。

1)四个字节,函数名称,transfer(address _to, uint256 _amount),这个是把函数名字做keccak256,之后取前四个字节。

0xa9059cbb

2)32字节,你要转账的地址,不足32字节,需要补零。

000000000000000000000000641988625108585185752230bde001b3ebd0fc7a

3)32字节,你要转账的数量,不足32字节,需要补零。

00000000000000000000000000000000000000000000000000000451e804f0e0

短地址攻击是什么原理呢?

第一步,你的有一个地址以00结尾的账户地址,为什么?暂且不表;先说说怎么得到这种地址,你要是牛逼点,自己写个代码,很快就生成里,笔者实验了一下也就生产了2000个地址就会出现这种地址;你要是不会呢,有个叫“币合钱包”的工具打开后,选择“靓号生成器选项卡”就可以生产你想要的地址了。就以上例地址为例,你获得了一个641988625108585185752230bde001b3ebd0fc00的地址。

第二步,你把这个地址发给别人,但是以这种形式641988625108585185752230bde001b3ebd0fc;发现没有最后的两个零没写,为啥呢?接着看。

第三步,这就和你没关系啦,对方拿到这个地址后要转erc20的代币,他会创建input data,但是结果确实这样的。

0xa9059cbb

000000000000000000000000641988625108585185752230bde001b3ebd0fc

00000000000000000000000000000000000000000000000000000451e804f0e000

第二部分少了两个零,怎么办,后边补啊;相当于蓝色这两个补到了地址上,地址后边又补了两个;学过计算机的都知道,左移8位相当于乘256,就是你原来想转一个,变成了转256了。

如果钱包、交易所做地址校验了,那应该就不会有啥大问题。

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

solidity 安全 合约的短地址攻击——这个锅谁来背 的相关文章

随机推荐

  • 数据结构——链表例题1

    1 在递增有序链表L中插入值为x的元素 使L依旧保持递增 void Insert LinkList L DataType x LinkList p L q p gt next s while x gt q gt data q NULL q可
  • 基于Vision Transformer的鸟类图像分类(200个类别)完整代码+数据

    视频讲解 Vision Transformer的鸟类图像分类 200个类别 完整代码 数据 哔哩哔哩 bilibili 项目结构 数据展示 主要的运行代码 import os import math import random import
  • 深入理解生产者与消费者问题

    缓冲区的形象理解 缓冲区好像使用一条传送带替代托架 传送带上一次可以放多个产品 生产者在缓冲区尾加入数据 消费者在缓冲区头读取数据 缓冲区满时 缓冲区上锁并等待消费者线程读取数据 每一个生产或消费动作使得传送带向前移动一个单位 因此 消费者
  • Day22_7 Java学习之对象数组

    目录 一 什么是对象数组 二 对象数组的作用 三 对象数组的语法定义及动静初始化 语法定义 静态初始化 在定义数组的同时对数组元素进行初始化 动态初始化 使用运算符new为数组分配空间 四 对象数组案例演示 案例需求 具体实现代码 一 什么
  • 《数据结构》第4章 串、数组和广义表

    数据结构 第4章 串 数组和广义表 第4章 串 数组和广义表 4 1 串的定义 4 2 串的类型定义 存储及其 运算 知识点1 串的表示 方法1 定长顺序存储表示 方法2 堆分配存储表示 方法3 串的块链存储表示 知识点2 必考 串的模式匹
  • Snipaste - 截图工具

    Snipaste 简介 Snipaste 是一个简单开源且强大的截图工具 也可以让你将截图贴回到屏幕上 下载并打开 Snipaste 按下 F1 来开始截图 再按 F3 截图就在桌面置顶显示了 就这么简单 你还可以将剪贴板里的文字或者颜色信
  • VS2008配置opencv

    配置过程 1 需要先提前安装好VS2008并下载好opencv的库 2 配置Windows环境变量 具体步骤为 右键我的电脑 属性 详细设定标签里 gt 环境变量 gt 系统变量 找到Path 将D Program Files opencv
  • 网络通信之应用层协议--Linux

    文章目录 关于应用层协议的理解 应用层协议的制定 理论部分 代码部分 完整代码以及测试 HTTP协议 代码测试HTTP协议 HTTPS协议 加密原因 基础的加密方式 数据摘要 数据指纹 数字签名 HTTPS的加密方式的选择 总结 关于应用层
  • OWASP TOP-10(2023) API风险

    OWASP API 1 对象级别授权失效 水平越权 攻击者就可以通过改变请求中的对象ID来绕过授权限制 从而获取敏感数据或者完全掌控账户 这个漏洞在基于API的应用程序中非常普遍 因为服务器通常无法跟踪完整的用户状态 而是依赖于请求参数中的
  • 网络攻防复习篇

    绪论 1 网络空间的4个要素 设施 数据 用户 操作 见第一章PPT 61页 下面这个图要背好 2 网络空间安全基本概念 络空间安全涉及到 络空间中的电磁设备 电 信息系统 运 数据和系统应 中所存在的安全问题 既要防 保护 信息通信技术系
  • open3d读取、显示和保存点云数据

    1 从文件中读取点云 接口1 bool open3d io ReadPointCloud const std string filename geometry PointCloud pointcloud const ReadPointClo
  • NCC申请授权

    1 进入home路径下的bin文件夹 打开sysconfig配置文件 2 在sysconfig配置界面 点击license 生成硬件锁 在弹框界面输入产品号 产品号可在点击 读取授权 按钮后 进行查看 后 点击确定 自动生成一个hardke
  • CryptoPP使用介绍

    CryptoPP使用介绍 发表时间 2012年06月15 分类 编程开发 作者 天缘 Crypto 是个免费的C 加解密类库 由于资格太老 持续更新 最新版本到了CryptoPP 5 6 对天缘而言 第一眼看到CryptoPP就感觉头大 根
  • 文本语言模型的参数估计-最大似然估计、MAP及贝叶斯估计

    以PLSA和LDA为代表的文本语言模型是当今统计自然语言处理研究的热点问题 这类语言模型一般都是对文本的生成过程提出自己的概率图模型 然后利用观察到的语料数据对模型参数做估计 有了语言模型和相应的模型参数 我们可以有很多重要的应用 比如文本
  • JavaWeb - Servlet:重定向和转发,状态管理

    Servlet JDBC 应用 在 Servlet 中可以使用 JDBC 技术访问数据库 常见功能如下 查询 DB 数据 然后生成显示页面 例如 列表显示功能 接收请求参数 然后对 DB 操作 例如 注册 登录 修改密码等功能 为了方便重用
  • 代理重加密(Proxy Re-Encryption)技术原理和Java代码实现

    欢迎关注公众号 区块链之美 致力于区块链技术研究 传播区块链技术和解决方案 区块链应用落地 区块链行业动态等 1 代理重加秘的应用介绍 由于大部分的云服务供应商并不能完全值得信任 云服务供应商可能会在未经用户允许的情况下 擅自泄露用户的隐私
  • 【node】10、express模块搭建服务

    express模块是一个外部引入模块 不是node内部自身的模块 所以需要下载express模块才能引入 下载express之前需要初始化项目文件 npm init y 初始化后安装express npm install express 安
  • org.springframework.aop.AopInvocationException: Null return value from advice does not match primiti

    private static Object processReturnType Object proxy Object target Method method Object retVal Massage return value if n
  • Python3 TypeError: Required argument ‘outImg‘ (pos 3) not found

    问题 在用python3使用img3 cv2 drawMatchesKnn img1 kp1 img2 kp2 good flags 2 的时候 可能会产生错误 TypeError Required argument outImg pos
  • solidity 安全 合约的短地址攻击——这个锅谁来背

    前一段时间 有个用户用说发交易的时候提示地址错误 后来发现发送的地址少了一字节 所以钱包检测发送地址时 会提示错误 当时也没当回事 以为是用户自己搞错了 最近研究solidity的时候 才明白了当时是怎么回事 原来这个用户遇到了短地址攻击