取得下面合約的所有權,來完成這一關。
這題合約不長,可以看到只要通過 12 行的判斷,就可以將 owner 改為自己。
tx.origin
跟 msg.sender
都是全域變數(上一題提到過)。tx.origin
是呼叫合約的地址,msg.sender
是啟動交易的地址。
假設你建立 A 合約去呼叫 B 合約,並且 B 合約再去呼叫 C 合約,那對 C 合約來說,tx.origin
是 A 的地址,msg.sender
是 B 的地址。
如果覺得解釋的不清楚,可以參考以下文章:
要解開這題,只要寫一個 script 呼叫另一個合約,再透過另一個合約呼叫題目合約的 changeOwner()
就可以過關了,攻擊合約如下