閃電貸原理與範例

Yish
發佈於Yish
2023/06/29閱讀時間約 2 分鐘

原理

  1. 透過以太幣交易原子性,要交易全成功否交易全失敗。
  2. 調用智能合約也具有原子性,要全調用成功修改數值,否調用全失敗。
  3. 不會出現部份成功部分失敗。
  4. 保證在同一交易內歸還本金。
  5. 全成功還本付息,失敗則當作此交易沒有存在。

理想狀況

  1. 閃電貸借入 100000 USDT
  2. DEX A(交易所A) 買 2000@50(2000顆$50 token)
  3. DEX B(交易所B) 賣 2000@55(2000顆$55 token)
  4. 歸還 100000 USDT + 100 USDT(利息)
  5. 獲利 9900 USDT
必須要在同筆交易區塊內完成(透過自己撰寫智能合約並調用合約達到一次交易完成)

攻擊步驟

目的: 攻擊有漏洞的智能合約竊取利益
  1. 藉由 dydx 借出 10000ETH
  2. 5000ETH 抵押到 compound 借出 112 WBTC
  3. 1300ETH 轉入 bZx(主要攻擊的漏洞合約) 透過 5 倍槓桿賣出 ETH 買入 WBTC
  4. bZx 為了完成此筆交易,透過 kyber network 協議在 uniswap 內大量拋出 ETH 買 WBTC
  5. uniswap WBTC/ETH 交易對池不夠深 -> 價格被拉升 38.5 -> 109.8
  6. 原本 bZx 應該是僅扣除原押 1300ETH 不應該用到自己資金池完成交易(無偵測到風險),但由於合約漏洞導致用到自己資金來完成此筆交易
  7. 拋出由 compound 借出的 112 WBTC 到 uniswap 售賣 -> 獲得 6871ETH
  8. 6871ETH + 3200ETH(未動用到的借貸) = 10071-10000=71ETH(獲利)(歸還 dydx 貸款)
  9. 駭客在 compound 上還有 5500ETH 正在被抵押
  10. 由於其他交易市場: WBTC/ETH 還在正常價位 -> 透過 4300ETH 買入 112WBTC -> 換回被抵押的 5500ETH -> 總計獲利 1200ETH + 71ETH = 1271ETH
參考:
Yish
Yish
Hey, I’m Yish, the minimalist and an engineer.
留言0
查看全部
發表第一個留言支持創作者!