這是一個簡單的錢包,隨著時間的推移,資金會逐漸流失。您可以透過成為提款合夥人慢慢提款。
如果您可以在所有者調用時拒絕所有者提取資金 withdraw()
(同時合約仍然有資金,並且交易的 Gas 量為 1M 或更少),您將贏得此級別。
這一題也是要讓別人提款失敗,跟 Level 9 - King 一樣,也就是 DoS 這個合約。
合約中有一個提款的 function withdraw()
,他會把款項轉給 partner 跟 owner,然後第 10 行可以將 partner 改成自己。
接著我們在自己的合約中設計 receive()
會再次呼叫關卡的 withdraw()
,導致提款功能不能繼續下去;owner 就無法領到錢,所以這題的攻擊思路就是:
receive()
中重新呼叫關卡的 withdraw()
setWithdrawPartner(address _partner)
將 partner
改為自己withdraw()
,成功 DoS