區塊鏈TOP1重入漏洞之自我理解 原創

2022-08-30 18:00:14 字數 1960 閱讀 8313

by : 風之傳說

最近在研究區塊鏈方面的漏洞,智慧型合約top 1重入漏洞。在網上找了很多相關的文章,發現大部分都是通過**進行分析。話說,我們不了解應用場景,只是了解漏洞成因,只知其原理不知其過程,不便於我們的漏洞理解。

在此之前,我們需要先了解乙個東西,the dao。"

在2023年6月18日被攻擊前募集了$150m。攻擊者 利用合約中的漏洞發動了reentrancy攻擊,獲得了$60m。為了追回這部分資金,以太坊社群決定進行硬分叉,在新分支中回滾自攻擊開始後的所有交易記錄並修復合約漏洞,但因為此舉違背了『code is law』精神,部分成員拒絕新分支,導致最終形成了兩個分支。舊分支稱為以太坊經典(ethereum classic/etc),新分支為現行以太坊。攻擊者最終離開以太坊經典,帶走了數千萬美元。"

以上新聞說明兩個問題:

因為此漏洞,直接導致了以太坊硬分叉。(這個硬分叉什麼意思呢?簡單理解,就是乙個樹枝一分為二,你走你的,我走我的。另,你只需要了解,這個漏洞影響很大。)

the dao是乙個募集資金的平台。(我們可以理解為,某某生病了,然後需要錢,然後眾籌給你籌錢。這個很好理解)

技術細節

那麼眾籌就需要三方,付款方,公證人(平台),收款方。我們先進行簡單了解。談完了,背景,我們再來談談漏洞,先看一段:

大多數都沒有進行注釋,畢竟是新的程式語言,國內熟悉的比較少。我進行了注釋。但是為了大家便於理解,我就重新解釋一次。

假如賬戶有10個幣,你要轉9個出去。肯定是可以的,你要轉11個,就不行。因為你沒有11個。所以此處要轉9個出去肯定是可以的。因為10>=9。最後一步就是減去你賬戶中的9個幣了。此時賬戶裡面只有1個幣了。所以,各位看官肯定會說,這裡沒毛病啊。嗯,程式好像看似沒毛病但是。看看黑客如何進行攻擊的:

攻擊者首先構造乙個惡意合約mallory,

將mallory部署之後,攻擊者呼叫withdraw函式向mallory合約捐贈一點以太幣。看似沒什麼問題。

但是withdraw函式中的msg.sender.call.value(amout)()執行之後,由於轉賬 操作特性 ,會在轉賬結束之後自動呼叫mallory 的 fallback函式,於是再次呼叫 withdraw函式。因為此時credit中並未更新額度,所以依然可以正常取款,便陷入遞 歸迴圈,每次都提取dao中的一部分以太幣到mallory合約中。

講到這裡,到底是**出了問題呢? 其實是msg.sender.call.value 這個呼叫出了問題。壓根就不能這麼調。 (所以後來出了乙個什麼氣gas?並且要求使用send() 和 transfer() 轉幣進行轉賬。扯遠了,有空可以去了解一下)

在這裡,我們上面分析過了,我們是先進行轉賬再進行扣款的。那麼這樣有什麼壞處呢?也就是說,如果在轉賬處一直迴圈卡住了,那麼扣款就不會執行。也就是說,你可以一直轉賬下去。

舉個流程例子:

正常情況下

不正常情況下

重複此操作,理論上能夠將the dao的以太幣全部提取到mallory。

最後肯定還有人會說,錢怎麼轉出來啊?別忘了,該合約是由你建立的,拿一般的眾籌平台去了解,也就是說,眾籌的錢最後都給你,因為是你發起的眾籌。所以你還擔心轉不出錢來?所以,應用到實際場景,就能理解了吧。

注:由於剛接觸區塊鏈這一塊,以上**注釋如果有錯誤歡迎指正。

2017全球區塊鏈企業專利排行榜TOP100

近日,由iprdaily中文網與incopat創新指數研究中心聯合發布的 2017全球區塊鏈企業專利排行榜 前100名 出爐。資料範圍為 2017年全球公開公告的專利數量,包括發明申請 實用新型 外觀設計專利。資料提取時間範圍為 2017年1月1日至2017年12月31日。報告顯示,中國在區塊鏈專利...

TOP 1比不加TOP慢的疑惑

問題描述 有乙個查詢如下,去掉top 1的時候,很快就出來結果了,但加上top 1的時候,一般要2 3秒才出資料,何解?select top 1 a.invno from a,b where a.item b.itemnumber and b.ownercompanycode is notnull ...

TOP 1比不加TOP慢的疑惑

問題描述 有乙個查詢如下,去掉top 1的時候,很快就出來結果了,但加上top 1的時候,一般要2 3秒才出資料,何解?select top 1 a.invno from a,b where a.item b.itemnumber and b.ownercompanycode is notnull ...