AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程
AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程
0x00 项目简述
Ammbr主要目标是打造具有高度弹性且易于连接的分布式宽带接入平台,同时降低上网相关成本。Ammbr打算创建具有人工智能和智能合约功能的高通量区块链平台,在为无线宽带用户清除障碍的同时,确保无数接入基础架构所有者公平参与。自2017年9月1日起发售AMMBR代币。
0x01 漏洞详情
合约地址:
0x96c833e43488c986676e9f6b3b8781812629bbb5
合约代码地址:
https://etherscan.io/address/0x96c833e43488c986676e9f6b3b8781812629bbb5#code
合约类型:
ERC20(https://github.com/ethereum/EIPs/issues/20)
漏洞函数:multiTransfer
漏洞类型:整数溢出
漏洞危害:可导致增发任意数额的AMR代币至任意以太坊账户。
0x02 细节分析
代码201行在处理输入参数tokens数组累加的时候,没有使用SafeMath,使得攻击者有机会构造一次整数溢出,导致后续计算totalTokensToTransfer时值可以被攻击者篡改,最终导致绕过204行余额检查,转出巨额资产。
整数溢出的原理非常简单,原理如图所示,如果两个8位变量A和B按位相乘,结果超出8位,超出位将被丢弃,只保留后8位长度。该漏洞中的产生溢出的变量名为totalTokensToTransfer,该变量类型为uint,在Solidity中,uint长度为256位,所以只要累加超过2^256-1大小的数,将会导致整数溢出。
0x03 调试与POC
我们使用Remix调试代码,首先调用mint函数为自己的账户增加一点Token余额,这个函数必须合约创建者才能调用,为自己增加余额后。我们直接调用multiTransfer来触发漏洞。
POC如下:
["0xda12391a57b16510ac82384640a44ecbd43243db","0xca35b7d915458ef540ade6068dfe2f44e8fa733c","0x14723a09acff6d2a60dcdf7aa4aff308fddc160c"],["38597363079105398474523661669562635951089994888546854679819194669304376546645","38597363079105398474523661669562635951089994888546854679819194669304376546645","38597363079105398474523661669562635951089994888546854679819194669304376546646"]
参数1我们随意创建了三个地址,该地址用来接收被黑资产。
tokens参数使用的值:
38597363079105398474523661669562635951089994888546854679819194669304376546645
该值为2^256/3计算得出,由于不能整除,我们在最后一个参数加一,使得最终totalTokensToTransfer累加可等于2^256。由于uint256最大可容纳值为2^256-1,累加等于2^256使得totalTokensToTransfer被溢出超出1位,导致该数被攻击者置零。
点底部的Debug可以看到漏洞细节。我们可以看到走到这里totalTokensToTransfer变量由于整数溢出已经被冲成零。
然后继续往下走,走至return处,可以我们参数中的三个账户被充入了指定数额的资产。
0x04 修复建议
将201行使用SafeMath改为:
totalTokensToTransfer = totalTokensToTransfer.add(tokens[i]);
转载于:https://www.cnblogs.com/xiaocongcong888/p/9428050.html
AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程相关推荐
- android web3j 代币查询_wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账
wallet-eth-android wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账(bip39.bip32.bip44.web3j) 生成钱包地址 // 生成钱包地址 W ...
- BEC合约出现重大漏洞可无限生成代币,币安在寻求新一轮融资的消息为假 | 区块链日报
[深圳发布首个区块链创投基金,首期规模5亿人民币] 深圳市首个区块链创投基金宣布正式启动.该基金是首支深圳天使母基金战略投资的区块链专项基金,基金首期规模为5亿人民币,其中深圳市天使投资引导基金 ...
- EOS绑定以太坊地址
最近接EOS代币后有人告诉我说要先注册EOS地址,不然一年后会变成废币,网上搜了下教程不清楚.我用的私钥文件绑定,写一下: EOS的变态规定:eos众筹一年,这一年时间内 eos使用的是 ETH 上面 ...
- 以太坊地址算法php,以太坊ETH源码分析(1):地址生成过程
一.生成一个以太坊钱包地址 通过以太坊命令行客户端geth可以很简单的获得一个以太坊地址,如下: ~/go/src/github.com/ethereum/go-ethereum/build/bin$ ...
- 以太坊地址和公钥_以太坊的私钥、公钥、地址、账户
私钥.公钥.地址 以太坊的私钥.公钥.地址之间的关系是,随机生成私钥.根据私钥计算出公钥.根据公钥计算出地址. 私钥是256bit,相当于32字节:用16进制表示的话,就是64个字符. 私钥的生成,本 ...
- 以太坊地址和公钥_以太坊地址是什么
以太坊生成地址的方式跟比特币比较类似,也是 私钥 -> 公钥 -> 地址,以太坊只是在公钥 -> 地址做了简化. 以太坊使用Secp256k1椭圆曲线得到私钥.公钥,比特币使用的也是 ...
- 《我学区块链》—— 十九、以太坊安全之 以太坊浏览器Mist漏洞
十九.以太坊安全之 以太坊浏览器Mist漏洞 2017年12月15日,以太坊基金会发布消息显示,以太坊浏览器 Mist 有可能导致私钥被盗的风险,这一漏洞被定义为非常严重,所有版本的 Mist 都会受 ...
- 币图网以太坊开发实例_去中心化概念模型与架构设计
IM 去中心化概念模型与架构设计 今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的. 站在这个角度而 ...
- 以太坊地址和公钥_以太坊交易签名解析源码解读
上篇文章<以太坊交易签名过程源码解析[1]>从源码角度分析了一个合约调用的的签名过程,签名后的交易发送到以太坊节点后,节点需要从签名交易中还原出公钥(从公钥中单向计算出账号地址),进而将交 ...
最新文章
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:
- java 回收策略_Java堆回收策略
- maven学习(中)- 私服nexus搭建
- PHP redis秒杀返回结果,php结合redis实现高并发下的抢购、秒杀功能
- 解决Mac上VSCdoe断点失效问题
- 通过CSS修改checkbox样式(利用label的for属性进行焦点传递)
- F - 娜娜梦游仙境系列——多民族王国
- 使用Kubespray部署生产可用的Kubernetes集群(1.11.2)
- opencv获取图片像素坐标_利用OpenCV从图片中提取矩形并标注坐标(室内平面地图)(一)
- 从云服务器上拷贝文件,从云服务器上拷贝文件
- Kubernetes控制器--副本集ReplicaSet
- 速修复!NSA 报告四个严重和高危 Exchange Server RCE 漏洞
- java后台调用SOE时,报异常java.io.IOException: Attempted read from closed stream
- minitab怎么算西格玛水平_计算西格玛水平.ppt
- Verilog写一个对数计算模块Log2(x)
- ThinkPad X230 后没有了Break 以及 Pause键,网工们囧了?
- 极光短信验证码服务器,极光推送的短信验证使用
- Sencha Cmd包
- openwrt php 编译环境,openwrt基础编译教程
- 骁龙855+4800万像素+五大配件,魅族16s开售
热门文章
- bcc挖矿用什么_BCC对BTC挖矿有何影响?
- Swagger自动接口文档生成框架————springboot整合swagger总结
- stm32 I2C架构
- c语言使用指针在被调函数中改变主调函数的变量 地址运算符 间接运算符
- mysql java文件导入导出_MySQL文件导出和导入
- 华为鸿蒙手机和电视通话,鸿蒙智慧屏首秀:逾10万人预定,电视视频通话功能强大...
- 根据工序画出aoe网_这些金刚网纱窗竟然含“毒”!选错就得病
- 1t硬盘怎么分区最好_win7系统硬盘怎么分区 win7系统硬盘分区步骤【介绍】
- 无重复字符的最长子串php,LeetCode - 无重复字符的最长子串 - Golang
- 安卓 php环境 app,安卓系统lighttpd-php-mysql本地环境