火星链 火星链
Ctrl+D收藏火星链
首页 > NEAR > 正文

MAKE:智能合约安全审计入门篇 —— 移花接木

作者:

时间:1900/1/1 0:00:00

By:小白

背景概述

上期我们了解了利用tx

functionmakeMoney(addressrecipient)publicpayable{require(msg

}contractVault{addressprivatemaker;addressprivateowner;uint256transferGasLimit;constructor()payable{owner=msg

modifierOnlyMaker(){require(msg

modifierOnlyOwner(){require(msg

functionsetMacker(address_maker)publicOnlyOwner{maker=_maker;}functiontransfer(addressrecipient,uint256amount)externalOnlyMaker{require(amount<=address(this)

functionwithrow()publicOnlyOwner{(boolsuccess,)=owner

receive()externalpayable{}fallback()externalpayable{}}//ThiscodeishiddeninaseparatefilecontractHack{eventtaunt(stringmessage);addressprivateevil;constructor(address_evil){evil=_evil;}modifierOnlyEvil(){require(msg

functiontransfer()publicpayable{emittaunt("Haha,youretherismine!");}functionwithrow()publicOnlyEvil{(boolsuccess,)=evil

receive()externalpayable{}fallback()externalpayable{}}

新加坡金管局和BIS等探索使用DeFi批发型CBDC跨境交易和结算:金色财经报道,瑞士国家银行、法兰西银行、新加坡金融管理局和国际清算银行创新中心探索使用DeFi(去中心化金融)协议的批发型央行数字货币的跨境交易和结算。[2022/11/2 12:09:36]

局分析

可以看到,上述代码中存在三个合约,我们先结合前置知识中的A,B,C三个角色来区分三个合约分别代表什么角色:

MoneyMaker合约代表A合约;

Vault合约代表B合约;

Hack合约代表C合约。

所以用户以为的调用路径为:

MoneyMaker->Vault。

而实际的调用路径为:

MoneyMaker->Hack。

下面我们来看看攻击者如何完成局的:

1.?Evil部署Vault(B)合约并在合约中留存100ETH资金,在链上将Vault(B)合约开源;

范一飞:数字人民币智能合约要坚持开放包容、公平竞争,避免形成新的信息壁垒:金色财经消息,中国人民银行党委委员、副行长范一飞表示,数字人民币智能合约要坚持开放包容、公平竞争,要在央行中心化管理和“双层运营”架构的原则下统筹推进,避免形成新的信息壁垒。要广泛连接各类外部生态,确保在智能合约系统和外部系统、身份验证和合规性检查数据以及运行环境等方面实现互通,更高效地适应各行各业的实际需求。(金十)[2022/9/8 13:16:25]

2.?Evil部署Hack(C)恶意合约;

3.?Evil放出消息说他将会部署一个开源的赚钱MoneyMaker(A)合约,部署时会将Vault(B)合约地址传入且会调用Vault.setMacker()将maker角色设置为MoneyMaker合约地址,任何人调用MoneyMaker.makeMoney()向合约中打入不少于一个以太都会得到双倍以太的回报;

4.?Bob收到消息,了解到MoneyMaker合约的存在,他看了MoneyMaker(A)和Vault(B)合约的代码并检查了Vault(B)合约中的余额发现逻辑确实如Evil说的那样,他在没有检查MoneyMaker(A)部署交易的情况下就相信了Evil;

Virtuzone已支持通过Binance Pay的加密货币支付:8月29日消息,阿联酋企业服务提供商 Virtuzone 已将 Binance Pay 集成至其系统中,支持通过 Binance Pay 进行加密货币支付。此外,Virtuzone 还表示将通过与币安的合作在阿联酋推进加密货币和区块链技术的使用。[2022/8/29 12:55:46]

5.?Bob调用MoneyMaker.makeMoney()向合约中打入自己全部身家20ETH,在他满怀期待等着收到Vault(B)打来的40ETH时等来的却是一句"Haha,youretherismine!"。

咋回事呢?其实这个局非常简单但是很常见。Evil在部署MoneyMaker合约时传入的并不是Vault合约的地址,而是传入了Hack合约的地址。所以当Bob调用MoneyMaker.makeMoney()时并不会像他想像中的那样MoneyMaker.makeMoney()去调用Vault.transfer()回打给他双倍的以太,而是调用了Hack.transfer()抛出了一个事件:"Haha,youretherismine!"。最后Evil调用Vault.withrow()将Vault合约中的100ETH转出,并通过Hack.withrow()将Bob转入的20ETH转出。

Cardano Vasil 硬分叉测试网将在 5 月底启动:5月15日消息,Cardano 开发公司 Input Output(IOHK)发推称,Cardano Vasil 硬分叉测试网将在 5 月底启动。[2022/5/15 3:16:52]

预防建议

以太坊黑暗森林中你能相信的只有自己,不要相信任何人精彩的话术,交易记录不会造假,只有自己验证了对应的那笔交易后才能相信对方说的话是对的。

注:本文参考自《SoliditybyExample》https://solidity-by-example.org/hacks/randomness

标签:MAKEONEMakerMoneymakerdao下载Rubex MoneyWhale Maker FundDibs Money

NEAR热门资讯
NFT:解读Uniswap借MoonPay实现法币交易,安全性和使用门槛如何?

Uniswap官方在12月21日宣布与加密支付公司MoonPay达成合作。其合作方式为用户可以在Uniswap网页端中使用信用卡、贷记卡、银行转账的方式购买加密货币,其底层由MoonPay支持.

1900/1/1 0:00:00
OPT:链上数据告诉你谁是L2之王

随着以太坊上海升级的到来以及代币和LSD的突然增加,2023年的一个明显的叙事就是以太坊二层。谁能最终赢得L2战争,链上钱包和交易数据又在暗示着什么?我用Dune处理了一些数据来帮助你找出答案!.

1900/1/1 0:00:00
Chain:MarsBit周报 | 比特币自FTX破产以来首次逼近1.9万美元;Azuki推出虚拟城市“Hilumia”

一、过去一周行业发生重要事件1.产业美国法院裁定FTX可出售LedgerX、FTXJapan等四家子公司据CoinDesk报道,美国特拉华州破产法官周四裁定,FTX可以出售四个关键子公司.

1900/1/1 0:00:00
SOL:盘点近期代币解锁的15个主流项目

近期,包括?Solana、YugaLabs、Optimism?等多个知名项目的代币将迎来大额解锁.

1900/1/1 0:00:00
WIT:再见BTC、DOGE,马斯克Twitter Coin即将推出

有传言说埃隆·马斯克可能会推出自己的推特币,可能会把狗狗币晾在一边,甚至抛弃它。Twitter用户界面的泄露最早出现在12月初,显示了“Coin”功能。几小时前,又有新的爆料.

1900/1/1 0:00:00
VES:区块链开发人员的短缺并不真实

#01引言阅读有关开发人员的新闻,很难不产生人才短缺的印象。有道理,对吧?如果这个职位能被公司轻易找到更廉价的人替代,他们就不会支付某人每年10万美元。但是,开发者并不短缺.

1900/1/1 0:00:00