智能合约的安全隐患有哪些(智能合约的安全隐患)

文章前言

本篇文章将对Lightcoin合约内transfeFrom授权转账函数的allowance不一致性问题和CountryCoin合约内transfeFrom的balance不一致性问题进行简单的分析介绍~

漏洞原理

Allowance不一致

合约地址:

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

漏洞介绍:如下面代码所示,条件语句\\”require(_value <= allowed[_from][msg.sender]);\\”与后期更新语句\\”allowed[_from][_to] -= _value;\\”存在不一致问题,导致这里如果用户A给用户B授权转账后,用户B可以无限制的转走用户A的资产,直到转完账户的所有余额

balances不一致性

合约地址:

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

漏洞介绍:如下面的代码所示,条件检测语句\\”require(balances[msg.sender] >= _value);\\”与\\”balances[_from] -= _value;\\”更新语句存在不一致性,攻击者能够通过溢出,让`_from`账户余额获得极大的token数量

智能合约的安全隐患有哪些(智能合约的安全隐患)

漏洞复现

allowed 不一致性

首先,下载Lightcoin合约代码之后在本地Remix中进行部署调试(这里需要改一下合约中owner地址便于调试),相关账户地址信息如下所示:

  • 管理者:0x5B38Da6a701c568545dCfcB03FcB875f56beddC4

  • 攻击者1:0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2

  • 攻击者2:0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db

Step 1:以管理者身份调用approve函数给予攻击者1一定的转账额度

approve:\\\"0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2\\\",10000

智能合约的安全隐患有哪些(智能合约的安全隐患)

交易记录信息:

智能合约的安全隐患有哪些(智能合约的安全隐患)

Step :2:使用allowance 查看转账额度:

\\\"0x5B38Da6a701c568545dCfcB03FcB875f56beddC4\\\",\\\"0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2\\\"

智能合约的安全隐患有哪些(智能合约的安全隐患)

此时此时攻击者2的余额为 0:

智能合约的安全隐患有哪些(智能合约的安全隐患)

Step 3::之后切换为攻击者1身份,并通过攻击者1使用transferFrom向攻击者2进行转账操作

transferFrom:\\\"0x5B38Da6a701c568545dCfcB03FcB875f56beddC4\\\",\\\"0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db\\\",10000

智能合约的安全隐患有哪些(智能合约的安全隐患)

交易记录信息如下:

智能合约的安全隐患有哪些(智能合约的安全隐患)

Step 3:攻击者1继续使用:transferFrom向攻击者2进行转账操作,仍然能转账成功,因为 allowed[_from][msg.sender]没有发生变化

transferFrom:\\\"0x5B38Da6a701c568545dCfcB03FcB875f56beddC4\\\",\\\"0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db\\\",10000

智能合约的安全隐患有哪些(智能合约的安全隐患)

交易日志记录:

智能合约的安全隐患有哪些(智能合约的安全隐患)

之后发现攻击者2的余额依然增加了:

智能合约的安全隐患有哪些(智能合约的安全隐患)

通过此攻击,攻击者能够将 _from 账户里的所有余额转移到其它用户余额中,并且`allowed[_from][_to]`是溢出了的

allowance : \\\"0x5B38Da6a701c568545dCfcB03FcB875f56beddC4\\\",\\\"0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db\\\"

智能合约的安全隐患有哪些(智能合约的安全隐患)

balances不一致性

首先,下载CountryCoin合约然后在Remix中进行部署分析调试(在构造函数中给msg.sender赋一些token),相关地址如下:

  • 管理者:0x5B38Da6a701c568545dCfcB03FcB875f56beddC4

  • 攻击者1:0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2

  • 攻击者2:0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db

Step 1:在这里我们首先通过管理者地址给攻击者1地址打一定数量的代币进去,来模拟攻击者1充值token:

0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2,100000000000000

智能合约的安全隐患有哪些(智能合约的安全隐患)

交易日志信息:

智能合约的安全隐患有哪些(智能合约的安全隐患)

之后攻击者1的地址所拥有的token数量为:

智能合约的安全隐患有哪些(智能合约的安全隐患)

另一个攻击者2地址账户余额为0

智能合约的安全隐患有哪些(智能合约的安全隐患)

Step 2:接下来我们的攻击就是让第二个账户溢出,之后使用攻击者2给予攻击者1一定的转账额度权限

approve: \\\"0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2\\\",10000

智能合约的安全隐患有哪些(智能合约的安全隐患)

Step 3:切换回攻击者1,然后使用transferFrom向自己进行转账操作

transferFrom:\\\"0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db\\\",\\\"0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2\\\",10000

智能合约的安全隐患有哪些(智能合约的安全隐患)

交易日志如下:

智能合约的安全隐患有哪些(智能合约的安全隐患)

此时攻击者2地址上余额本来为0,但经过 “ 的减法计算下溢变为了一个极大值

修复方案

修复方法如下:

1、使用safeMath方法进行计算

2、使用balances[_from] >= _value作为条件判断而非 balances[msg.sender]

3、检查allowed[_from][msg.sender]并对allowed[_from][msg.sender]进行操作不要与allowed[_from][_to]混用

原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34355.html

Like (0)
七芒星实验室的头像七芒星实验室
Previous 2024年4月3日
Next 2024年4月3日

相关推荐

  • CVE(cvemp和ovemp的报告怎么看)

    CVE第1部分中的大小计算和第2部分中的域名解压之间的不匹配会导致len中的off-by-one错误,从而允许在name->data数据边界之外写入一个点字符。
    当压缩域名的最后一部分包含指向NULL字节的指针时&#xff0

    网站运维 2024年6月24日
    0
  • 物联网酒厂温度远程监控

    准确理解和分享米酒酿造数据,以提高该领域工作人员的积极性。今年,客户的酿酒厂引入了专门用于米酒酿造的物联网系统,为传统米酒酿造带来了新的生命。以酿造高品质米酒为目标,随着米酒市场的…

    网站运维 2024年9月20日
    0
  • Linux运维 Systemd挂载服务

    在 Linux 系统中,Systemd 是一种现代化的系统和服务管理器,它负责启动、停止和管理系统中的各种服务和进程。下面是使用 Systemd 挂载服务的基本步骤: 1. 编写服…

    网站运维 2024年2月17日
    0
  • uniapp [全端兼容] ,uniapp适配

    uniapp [全端兼容] 效果图 网上的教程太乱且都是问题,本文站在新手小白角度完美实现该功能。 在 uni-app 全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)项目开发中,详解完成接入配置 googl

    网站运维 2024年7月4日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注