月亮链 月亮链
Ctrl+D收藏月亮链
首页 > 瑞波币 > 正文

ACK:智能合约安全审计入门篇 —— delegatecall (2)_SOME价格

作者:

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

上篇文章中我们了解了什么是delegatecall函数以及一个基础的漏洞,这篇文章的目的是加深一下大家对delegatecall的印象并带大家一起去玩点刺激的,拿下一个进阶版的漏洞合约。

这里就不再重复之前的基础知识了,不了解或者遗忘的可以再看看上一篇文章:《智能合约安全审计入门篇——delegatecall(1)》。

漏洞示例

contractLib{??uintpublicsomeNumber;??functiondoSomething(uint_num)public{????someNumber=_num;??}}contractHackMe{??addresspubliclib;??addresspublicowner;??uintpublicsomeNumber;??constructor(address_lib){????lib=_lib;????owner=msg.sender;??}??functiondoSomething(uint_num)public{????lib.delegatecall(abi.encodeWithSignature("doSomething(uint256)",_num));??}}

肯尼亚央行行长:政府尚未采取任何明确立场来规范加密货币:6月5日消息,肯尼亚中央银行 (CBK) 行长Patrick Njoroge表示,该国政府尚未禁止加密货币,但也没有批准其作为法定货币使用。Njoroge在接受采访时表示,肯尼亚政府尚未采取任何明确的立场来规范加密货币。他补充说,央行正在与其他监管机构合作,以确定如何处理加密货币。

此外,Njoroge还澄清到,他的立场以及银行的政策并不是个人意见的结果,而是来自中央银行内部的集体智慧和数据。

据悉,虽然肯尼亚政府尚未禁止加密货币,但肯尼亚证券交易所于去年禁止了加密货币交易。此外,肯尼亚央行于去年发出一份公告,警告投资者投资加密货币的风险,并敦促他们谨慎行事。[2023/6/5 21:15:10]

漏洞分析

这次的攻击目标依然是获得HackMe合约中的?owner?权限,我们可以看到两个合约中除了HackMe合约中的构造函数可以修改合约的?owner?其他地方并没有修改?owner?的函数。我们要如何完成攻击呢?这里需要一点小技巧,大家可以思考一下,刚好也可以验证一下自己对于之前知识的掌握程度以及自己的思维是否活跃。

亿万富翁Bill Ackman:除非政府干预否则SVB内爆是一个很快就无法挽回的错误:金色财经报道,亿万富翁投资者Bill Ackman认为,美国银行业监管机构搞砸了,应该在硅谷银行倒闭之前更密切地关注它。Ackman警告说,如果政府不在周末介入,为破产银行的存款提供担保,可能会产生广泛而深远的后果。[2023/3/12 12:57:35]

是否有想法呢?没有想法也没关系,我们一起来看攻击是如何完成的:

攻击合约

//SPDX-License-Identifier:MITpragmasolidity^0.8.13;contractAttack{??//MakesurethestoragelayoutisthesameasHackMe??//Thiswillallowustocorrectlyupdatethestatevariables??addresspubliclib;??addresspublicowner;??uintpublicsomeNumber;??HackMepublichackMe;??constructor(HackMe_hackMe){????hackMe=HackMe(_hackMe);??}??functionattack()public{????//overrideaddressoflib????hackMe.doSomething(uint(uint160(address(this))));????//passanynumberasinput,thefunctiondoSomething()belowwill????//becalled????hackMe.doSomething(1);??}??//functionsignaturemustmatchHackMe.doSomething()??functiondoSomething(uint_num)public{????owner=msg.sender;??}}

PancakeSwap将于4月第一周上线V3:3月4日消息,PancakeSwap 宣布将于 4 月第一周上线 V3,会增加多个新功能和推出包括空投、NFT 等的活动。目前,PancakeSwap 暂未披露具体细节。[2023/3/4 12:42:03]

我们先看攻击流程:

1.Alice部署Lib合约;

2.Alice部署HackMe合约并在构造函数中传入Lib合约的地址;

3.攻击者Eve部署Attack合约并在构造函数中传入HackMe合约的地址;

4.攻击者调用Attack.attack()函数将HackMe合约中的owner变为自己。

咋回事儿呢?其实这个攻击方式就是很巧妙的运用了delegatecall这个函数修改storage类型变量时的特征:delegatecall函数的执行环境是调用者的环境并且对于storage类型变量的修改是根据被调用合约变量存储的插槽位置来修改的。

工信部:将加快工业元宇宙创新应用和数字化生态构建:金色财经报道,11月17日,2022中国互联网大会工业元宇宙论坛在深圳举行。工信部信息技术发展司副司长王威伟在致辞中提出,工信部将加快工业元宇宙创新应用和数字化生态构建,形成一批可复制、可推广的应用模式和商业模式,推动工业元宇宙应用实践。

王威伟表示,工信部高度关注元宇宙这一发展热点,不断开展前端研究,持续推动工业元宇宙领域技术发展和应用实践,取得了积极成效。[2022/11/18 13:22:32]

1.Attack.attack()函数先将自己的地址转换为uint256类型第一次调用HackMe.doSomething()函数;

2.HackMe.doSomething()函数使用delegatecall函数带着传入的Attack合约的地址调用了Lib.doSomething()函数;

推特:与马斯克的协议未终止,努力采取所有必要的措施来完成交易:7月12日消息,推特表示,7月10日,推特的代表给马斯克的代表发了一封通知信。马斯克和马斯克代表声称的终止协议行为是“无效和错误的”。推特未违反其在协议下的任何义务,推特未遭受不利影响,也不太可能遭受重大不利影响。将继续根据协议提供马斯克合理要求的信息,并努力采取所有必要的措施来完成交易。保留所有合同、法律和其他权利。与马斯克的协议未终止,银行债务承诺书和股权承诺书仍有效。声称的终止协议无效,是基于以下的单独原因,即马斯克和马斯克各方“故意、有意、固执并严重地”违反了协议。(金十)[2022/7/12 2:06:21]

3.可以看到Lib.doSomething()函数将合约中存储位置为slot0的参数改为传入的值,这样当HackMe合约使用delegatecall调用Lib.doSomething()函数时也将改变自己在slot0位置存储的变量的值,也就是将lib参数改为我们传入的Attack合约的地址。此时之前在HackMe.lib参数中存储的Lib合约的地址就被修改成我们传入的Attack合约的地址了;

4.Attack.attack()函数再次调用HackMe.doSomething()函数,由于在上一步我们已经将HackMe.lib变量修改为Attack合约的地址了,这时HackMe.doSomething()函数将不再调用之前的Lib合约而是用delegatecall去调用Attack.doSomething()函数。此时我们再来观察Attack合约的写法,发现其变量的存储位置故意和HackMe合约保持一致,并且不难发现Attack.doSomething()函数的内容也被攻击者写为owner=msg.sender,这个操作修改了合约中存储位置为slot1的变量。所以HackMe合约使用delegatecall调用Attack.doSomething()函数就会将合约中存储位置为slot1的变量owner修改为msg.sender也就是Eve的地址,至此攻击者完成了他的攻击。

修复建议

作为开发者

1.?在使用delegatecall时应注意被调用合约的地址不能是可控的;

2.?在较为复杂的合约环境下需要注意变量的声明顺序以及存储位置。因为使用delegatecall进行外部调用时会根据被调用合约的数据结构来修改本合约相应slot中存储的数据,当数据结构发生变化时这可能会造成非预期的变量覆盖。

作为审计者

1.在审计过程中遇到合约中有使用delegatecall时需要注意被调用的合约地址是否可控;

2.当被调用合约中的函数存在修改storage变量的情况时需要注意变量存储插槽的位置,避免由于数据结构不一致而导致本合约中存储的storage变量被错误的覆盖。

来源:金色财经

标签:ACKHACSOMESOMAsset-Backed ProtocolMechaChainSOME价格SoMee Social

瑞波币热门资讯
NFT:Genesis bulls《创世牛》——用东方元素引领NFT市场_Alpha Genesis

孟昌明:美籍画家、书法家、艺术评论家,曾经在美国、日本、中国等地举办过一百余次个人画展,作品为世界各地博物馆、学术机构及私人所收藏.

1900/1/1 0:00:00
比特币:以史为鉴:比特币大跌,萨尔瓦多孤注一掷能否扭转乾坤_特比特币多少钱一个

如市场所料,美联储为遏制高通胀采取了1994年以来最大力度的加息行动,同时强烈承诺降低通胀。不过鲍威尔也表示,单次75个基点的加息幅度过大,不会成为常规政策.

1900/1/1 0:00:00
NFT:Nansen对NFT市场前景的7个看法_Australian Kelpie

1.关于NFT的生命周期看历史NFT图表,从8月份开始一切都变了,NFT市场再没能达到去年8-9月份的销量和用户数。NFT市场一整年都在努力回到原来的水平——即使已经很接近,但还没有完全恢复.

1900/1/1 0:00:00
SOL:金色观察|Terra引发蝴蝶效应:DeFi暴露“邪恶”一面_sol币价格走势

Whenallthestarsarefadingaway——ThebutterflyEffect。从Terra崩盘开始,引发了加密市场的一系列反应.

1900/1/1 0:00:00
TVL:6.21主流缓慢上行 短期思路看涨_apecoin币是局吗

6.21BTC行情分析大饼昨日再次走出连阳走势,高位触及21000附近随后走出一千点回落,低位跌至19800一线,空单获利700点,恭喜跟上的币友,目前币价在20500附近震荡.

1900/1/1 0:00:00
狗狗币:世界首富马斯克解释为什么他继续支持狗狗币_加密货币市场是什么意思

周二,据《福布斯》报道,特斯拉和SpaceX的首席执行官埃隆·马斯克是世界上最富有的人,据福布斯估计净资产约为2140亿美元,他解释了为什么他觉得有必要支持meme基于加密货币的狗狗币.

1900/1/1 0:00:00