Dao

是否拋出了 DAO(被攻擊)程式碼的一部分?

  • January 23, 2020

我附上了一張與DAO攻擊有關的圖片。我從以下連結A Survey on Ethereum Systems Security: Vulnerabilities, Attacks and DefensesDAO 攻擊步驟獲得了圖像 。該圖像顯示了一個包含“throw”的程式碼。我對 throw 感到困惑,因為它會導致反轉。DOA 攻擊是否使用了“投擲”?有人請指導我在 DAO 攻擊中使用了 throw,為什麼它沒有導致所有交易的逆轉(和退款)?

不。

如果我正確理解圖表,它只是顯示契約檢查msg.sender.call.value(reward)結果以確保它有效,並且如果轉移被拒絕,它打算拋出,這是正確的做法。

它沒有失敗。它呼叫了攻擊者(成功),這給了攻擊者一個考慮重新進入的機會。攻擊者需要觀察剩餘的氣體,以確保它不會因循環而耗盡,否則一切都會放鬆。

當它決定停止重新進入並返回時,執行緒將通過Y路徑下降並從balances[msg.sender]. 那沒有下溢保護,所以如圖所示的語句不會失敗。在最壞的情況下,msg.sender 最終會出現巨大的餘額,這將成為更多惡作劇的機會。

throw在那之後,即使圖表排序使它看起來可能存在,也沒有路徑。“失去”箭頭不是疏忽。如果他們添加了“結束”塊,可能會更清楚。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/79282