前言

近年来,各个大型CTF(Capture The Flag,中文一样平常译作夺旗赛,在网络安全领域中指的是网络安全手艺人员之间举行手艺竞技的一种竞赛形式)竞赛中都有了区块链攻防的身影,而且泛起的问题绝大多数都是区块链智能合约攻防。此系列文章我们主要以智能合约攻防为中央,来剖析智能合约攻防的要点,前两篇我们分享了合约反编译,反汇编的基础内容。后续的文章中,我们会继续分享CTF竞赛中智能合约常见题型(重入,整数溢出,空投,随机数可控等)及解题思绪,信赖会给读者带来不一样的收获。

上篇文章中我们分享了CTF竞赛中常考的重入破绽题型,本篇继续来分享CTF竞赛中的整数溢出题型,也是对照常见的一类题型,固然多数CTF智能合约问题并不仅仅考察单个破绽的攻防,可能涉及多个破绽的组合。

本篇我们以2018年WCTF上BelluminarBank问题为例,给人人分享智能合约整数溢出的题型。解出这道题不仅需要整数溢出攻击,也需用到变量笼罩,权限设置等多个攻击技巧。

问题地址:

由于WCTF智能合约竞赛没有在以太坊测试网(ropsten)举行,没有在线的攻防场景,合约详细问题先容及合约源码已在GitHub给出:https://github.com/beched/ctf/tree/master/2018/wctf-belluminar

问题剖析

问题提醒

团队需要对字节码举行反向工程,并使用以下攻击:

,

Allbet代理

欢迎进入Allbet代理(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

,
  • 整数溢出绕过存款限期限制;

  • 存储溢出以笼罩银行所有者;

  • 存储接见权限以泄露私有属性;

  • 部署自杀条约以强制将eth发送到目的条约(以解决余额差异)

不一定需要意外的以太攻击,若是使用withdraw()和invest()挪用,则可以适当平衡。可能是由于导致错误解决方案的伟大错误所致:withdraw()函数不会更改balances数组。然则仍然需要事先行使整数溢出。

合约说明

Belluminar Bank异常小而稀奇。其工作方式如下:

  • 任何人都可以投资任何金额,并应指定存款限期(在此之前存款将被锁定);
  • 存款限期必须比先前客户的存款限期至少长1年;
  • 每个存款分配一个账号;
  • 帐户0包罗31337 wei,由银行所有者(条约创建者)锁定多年;
  • 存款限期满一年(若是您不提款),银行所有者可以没收您的存款。

目的是破解这家银行并清空其余额。若是乐成,该机器人将向您发送买卖数据中的标志。

合约源码
pragma solidity ^0.4.23;

contract BelluminarBank {
    struct Investment {
        uint256 amount;
        uint256 deposit_term;
        address owner;
    }
    //全局变量
    Investment[] balances;
    uint256 head;
    address private owner;
    bytes16 private secret;  //secret可读取

    function BelluminarBank(bytes16 _secret, uint256 deposit_term) public {
        secret = _secret;
        owner = msg.sender;
        if(msg.value > 0) {
            balances.push(Investment(msg.value, deposit_term, msg.sender));
        }
    }

    function bankBalance() public view returns (uint256) {
        return address(this).balance;
    }

    //局部变量笼罩全局变量
    function invest(uint256 account, uint256 deposit_term) public payable {
        if (account >= head && account < balances.length) {
            Investment storage investment = balances[account];
            investment.amount += msg.value;
        } else {
            if(balances.length > 0) {
            //存在整数溢出
                require(deposit_term >= balances[balances.length - 1].deposit_term + 1 years);
            }
            //局部变量
            investment.amount = msg.value;
            investment.deposit_term = deposit_term;
            investment.owner = msg.sender;
            balances.push(investment);
登录并阅读全文 usdt跑分网声明:该文看法仅代表作者自己,与本平台无关。转载请注明:usdt支付接口(www.caibao.it):零时科技丨CTF技术宝典之智能合约#整数溢出破绽
发布评论

分享到:

欧博手机版下载:#洛阳头条# “装饰公司都让我保洁完了上家具,卖墙布的也说贴完再上家具,你到底急啥?” 每次被业主反问过来诘责很尴尬[抠鼻] 似乎我猴急猴急
3 条回复
  1. AllbetGaming电脑版下载
    AllbetGaming电脑版下载
    (2021-01-30 00:13:52) 1#

    赣州信息港赣州信息港是赣州最热门的信息提供网站,全网内容全面、丰富、新颖,汇集优质信息资源,不仅有头版头条的“今日聚焦”栏目、热门标签更新,助您理解最新的时政要闻以及社会热点话题,还有各种旅游、美食推荐以及人才招聘、投资理财信息,帮您第一时间获悉您感兴趣的领域资源,本网站是本地知名领先的信息搜索平台与新闻频道,优质的用户体验,有用的信息公告,海量的精彩内容,尽在赣州信息港。疯狂追文中......

  2. USDT币游
    USDT币游
    (2021-02-19 00:00:37) 2#

    Allbet欧博欢迎进Allbet欧博官网(www.ALLbetgame.us),欧博官网是欧博集团的官方网站。Allbet欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。你们打几分

  3. 联博接口
    联博接口
    (2021-02-27 00:06:17) 3#

    Usdt支付接口菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,自动充提平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。前排留名

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。