区块见闻 区块见闻
Ctrl+D收藏区块见闻

DRE:有趣的智能合约蜜罐分析(上)_sol币会是下一个以太坊吗

作者:

时间:

智能合约蜜罐概述

研究安全的读者应该都清楚,蜜罐本质上是一种对攻击方进行的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击。蜜罐设计的初衷就是让黑客来入侵系统,并借此收集证据,也隐藏了真实环境。智能合约中也有蜜罐,但它不同于我们一般听到的蜜罐。在本文中,知道创宇区块链安全实验室主要针对智能合约蜜罐进行分析。智能合约蜜罐的作用更像是钓鱼,通过引诱攻击者转账到蜜罐合约。相比于普通钓鱼行为面对一般用户,智能合约蜜罐的钓鱼行为针对的是智能合约开发者、智能合约代码审计人员以及黑客,这种钓鱼行为明显门槛更高。接下来我们会对一些智能合约蜜罐的案例做讲解,揭露其中的局,这些智能合约蜜罐代码都可以GitHub上找到,这里给出他们的网址:smart-contract-honeySolidlity-Vulnerable根据这些智能合约蜜罐的手法,可以将它们大致的分类为以下几种古老的手段黑客的漏洞利用新颖的游戏黑客的漏洞利用由于篇幅有限,文章分为两部分进行讲解,本文作为上篇,主要对古老的手段和神奇的逻辑漏洞进行讲解和复现,新颖的游戏和黑客的漏洞利用会在下篇中进行讲解。古老的方法

2

require(msg

当我们将合约的代码放到本地进行自动换行时就可以发现该合约是存在问题的。//contractaddress:0x7a4349a749e59a5736efb7826ee3496a2dfd5489pragmasolidity^0

}functionwithdraw()payablepublic{if(msg

require(msg

functionCommand(addressadr,bytesdata)payablepublic{require(msg

}2

else{throw;}}//当区块块号大于504027时再判断调用者是否为合约所有者,如果是则将合约所有余额转给合约所有者。msg

该蜜罐合约完整的代码如下:contractTestToken{stringconstantname="TestToken";stringconstantsymbol="TT";uint8constantdecimals=18;uinttotal;boollocked;address_owner;structAllowed{mapping(address=>uint256)_allowed;}mapping(address=>Allowed)allowed;mapping(address=>uint256)balances;eventTransfer(addressindexed_from,addressindexed_to,uint256_value);eventApproval(addressindexed_owner,addressindexed_spender,uint256_value);functionTestToken(){total=0;_owner=msg

functiontotalSupply()constantreturns(uint256totalSupply){returntotal;}functionbalanceOf(address_owner)constantreturns(uint256balance){returnbalances;}functiondeposit()payablereturns(boolsuccess){if(balances+msg

Blockstream CEO :2021年对于比特币来说将是非常有趣的一年:Blockstream CEO Adam Back发推称,“比特币支持者们新年快乐!2021年对于比特币来说似乎将是非常有趣的一年。勇往直前,天天向上。”[2021/1/1 16:13:45]

functionwithdraw(uint256_value)payablereturns(boolsuccess){if(balances<_value)returnfalse;msg

functiontransfer(address_to,uint256_value)returns(boolsuccess){if(balances<_value)returnfalse;if(balances+_value<_value)returnfalse;balances-=_value;balances+=_value;Transfer(msg

functionapprove(address_spender,uint256_value)returns(boolsuccess){allowed._allowed=_value;Approval(msg

functionallowance(address_owner,address_spender)constantreturns(uint256remaining){returnallowed._allowed;}functiontransferFrom(address_from,address_to,uint256_value)returns(boolsuccess){if(balances<_value)returnfalse;if(allowed._allowed<_value)returnfalse;if(balances+_value<_value)returnfalse;balances-=_value;balances+=_value;allowed._allowed-=_value;returntrue;}functionwithdrawAll()payable{//require(msg

Microstrategy CEO被福布斯评为加密货币领域最有趣的新人:福布斯发文发布加密货币奖,投资超过10亿美元比特币的Microstrategy CEO Michael Saylor被评为加密货币领域最有趣的新人(the Most Interesting Newcomer)。[2020/12/29 16:00:18]

else{throw;}}msg

}2

bytes32publichashPass;functionSetPass(bytes32hash)payable{if(!passHasBeenSet&&(msg

}functionGetGift(bytespass)returns(bytes32){if(hashPass==sha3(pass)){msg

returnsha3(pass);}functionPassHasBeenSet(bytes32hash){if(hash==hashPass){passHasBeenSet=true;}}}整个合约有三个关键的功能函数,分别是setPass()、GetGift()以及PassHasBeenSet()。首先是setPass()函数,代码如下,其功能为在还未设置密码且转账大于1eth时可以设置密码hashPass。functionSetPass(bytes32hash)payable{//设置密码if(!passHasBeenSet&&(msg

functionCommand(addressadr,bytesdata)payablepublic{require(msg

直播|Ruby > 跨界区块链后那些有趣的事儿:金色财经 · 直播主办的《 币圈 “后浪” 仙女直播周》第5期20:00准时开始,本期“后浪”仙女 链闻 市场负责人Ruby将在直播间聊聊“跨界区块链后那些有趣的事儿”,感兴趣的朋友扫码移步收听![2020/6/19]

functionmultiplicate(addressadr)publicpayable{if(msg

}}该蜜罐合约有三个关键的功能函数,分别是withdraw()、Command()以及multiplicate()。首先是withdraw()函数,代码如下,其功能为判断调用者是否为合约所有者,如果是则获取合约中的所有代币。functionwithdraw()payablepublic{//提款require(msg

modifieronlyOwner{if(msg

}contractTestBankisOwned{eventBankDeposit(addressfrom,uintamount);eventBankWithdrawal(addressfrom,uintamount);addresspublicowner=msg

functiondeposit()publicpayable{require(msg

functionsetEmergencyCode(uint256code,uint256value)publiconlyOwner{ecode=code;evalue=value;}functionuseEmergencyCode(uint256code)publicpayable{if((code==ecode)&&(msg

投资管理公司的首席宏观投资策略师表示 数字货币是一件新鲜有趣的事物:全球最大投资管理公司BlackRock的首席宏观投资策略师Isabelle Mateos Y Lago 表示,数字货币是一件非常新鲜、非常有趣的事物,该公司正在密切关注。Lago还表示,投资于数字货币并不难,但重要的是资产的安全性,并认为比特币并非“可投资资产”。(彭博)[2018/1/30]

functionwithdraw(uintamount)publiconlyOwner{require(amount<=this

}该蜜罐合约的关键点在于useEmergencyCode()函数,代码如下,其功能为判断code是否等于合约的ecode,传入的msg

functiontest2(uinta)returns(uint){variable+=a;returnvariable;}}contractBisA{uintvariable=0;functiontest2(uinta)returns(uint){variable++;returnvariable;}}====================contractB{uintvariable1=0;uintvariable2=0;functiontest1(uinta)returns(uintv){variable1++;returnvariable1;}functiontest2(uinta)returns(uintv){variable2++;returnvariable2;}}那么再看懂了上面讲解的基础上我们再回到蜜罐合约本身,Owner和TestBank合约中都有一个owner变量,因此TestBank合约中useEmergencyCode()函数修改的其实只是TestBank合约的所有者,并不会对Owner合约的所有者造成任何影响,而函数修饰器onlyOwner中判断的合约所有者为Owner合约的所有者,也就是合约创建者,无论攻击者如何修改TestBank合约中的owner值,最后都不能通过onlyOwner的判断提款成功。根据上述的分析,我们可以将该蜜罐合约的核心代码修改为如下内容,这样大家就能够一目了然的知道原因了,onlyOwner中判断的owner和useEmergencyCode()函数中的owner参数并不是一个东西,只是同名而已。contractTestBankisOwned{addresspublicowner1=msg

addresspublicowner2=msg

functionwithdraw(uintamount)publiconlyOwner{require(amount<=this

3.3.2代码复现将蜜罐合约完整代码放入到RemixIDE中,选择0x5B38Da6a701c568545dCfcB03FcB875f56beddC4作为合约创建者,点击「Deploy」来部署合约,设置msg.value为10eth调用deposit()函数存入10eth到合约中。

在使用该用户0x5B3调用setEmergencyCode()函数设置ecode和evalue,这里我们将ecode任意设置为「111111」,value设置为「10000000000000000000」也就是10eth。

如果蜜罐合约创建者故意泄露自己设置ecode和evalue的值,并且展示出合约中已经存在以太币,当攻击者0xAb8发现了这些问题并被认为该合约存在问题,将msg.value设置为10eth,并输入code为「111111」去调用useEmergencyCode()函数,尝试去将合约所有者地址修改为自己的地址,但该攻击者只是成为了TestBank合约的所有者,并没有成为Owner合约的所有者,这就导致了在执行withdraw()函数时函数修饰器onlyOwner会拒绝攻击者。

攻击者0xAb8查看owner的值确定自己就是合约的所有者了,之后调用withdraw()函数去提取合约中所有的20eth,会发现调用失败,这是因为函数修饰器onlyOwner中判断条件不能通过,导致withdraw()函数也不能正常执行,这样一来攻击者0xAb8就被蜜罐合约白白取了10eth。

而合约所有者0x5B3则可以去调用withdraw()函数取走合约中的20eth。

4.文献参考

蜜罐技术_百度百科(baidu.com)以太坊蜜罐智能合约分析(seebug.org)Solidity原理:继承(Inheritance)Solidity中文手册

标签:以太坊DRECODEASSsol币会是下一个以太坊吗drep币创始人Concretecodesmass币价格今日行情

以太坊交易热门资讯
NFT:为何有的品牌方做NFT会失败?(附避坑小贴士)_FANT

把JPG做成NFT已经成为了一种现象。你可以把这些图像下载到电脑上,也可以把它当做推特的头像,或是将他们分享至Facebook或Instagram,你也可以轻松地在网上搜到它们.

ANT:三分钟读懂什么是哈希函数:三大特性及应用_区块链技术的特点

作者|复利青年出品|白话区块链想进一步了解区块链技术和比特币的小伙伴,就不得不翻越技术的围墙,从技术的角度,“睁眼”看看区块链世界里第一个杀手级成功应用比特币,看看中本聪为什么能被称为外星人.

以太坊:以太坊2021年Q3季度报告:生态发展迅速,基础指标全面上涨_GEFI币

以太坊2021年Q3季度的报告新鲜出炉,让我们来看看与以往季度报告相比,Q3季度发生了哪些新变化~协议网络收入增长了511%.

OIN:商务部等24部门:主动参与数字货币等国际规则和标准制定_区块链证据保全怎么操作流程

10月19日消息,商务部等24部门印发《“十四五”服务贸易发展规划》,其中提出积极参与重点领域国际规则制定.

ETF:彭博观点:ProShares的比特币ETF存在一些潜在风险_etf币价格今日行情

万众期待下,ProShares的比特币策略ETF于美国时间本周二开始交易。首先需要明确的是,这并不是一个由比特币支持的基金,而是由与比特币挂钩的期货支持的.

比特币:星球日报 | 美国俄亥俄州将起诉Meta寻求千亿美元赔偿;发改委将再次针对「挖矿」重点开展全面整治(11月17日)_区块链

头条 美国俄亥俄州将以“误导公众”为由起诉Meta,寻求1000亿美元赔偿美国俄亥俄州总检察长DaveYost周一表示,将起诉原名为FacebookInc.的MetaPlatformsInc.