# Ethernaut 解題 ### 1. ****Hello Ethernaut**** 要了解如何與 ethernaut 合約實體互動,使用瀏覽器 console ### 2. ****Fallback**** a. 先使用 contribute() 成為合約 owner b. 然後使用 send() 送進大於 1000 Ether c. 最後將合約 eth 使用 withdraw() 全部提出來,使餘額歸零  ### 3. ****Fallout**** 裡面有一個 funtion 寫錯了,寫成 Fal1out ,直接呼叫即可成為 owner  ### 4. ****CoinFlip**** 主要漏洞在於用 block.number 這固定數來計算,可以在調用 function 之前運行相同的演算法,就可以計算出相同的正確答案。  ### 5. ****Telephone**** 如果在合約A中呼叫合約B,則 msg.sender會是 B 而不是你的 EOA  ### 6. ****Token**** 舊版的 solidity 會有溢出問題。傳遞一個大於20的值,第一個條件就會通過。  ### 7. ****Delegation**** 從 Delegation 呼叫 Delegate 中的 pwn 即可成為 owner,可以使用 web3 或是 calldata 呼叫 ```solidity= let payload = web3.eth.abi.encodeFunctionSignature({ name: 'pwn', type: 'function', inputs: [] }); await web3.eth.sendTransaction({ from: player, to: instance, data: payload }); ```  ### 8. ****Force**** 題目合約沒有 fallback 或是任何 payable funtion,強制給它錢即可過關。自己寫一個合約摧毀自己,記得加上 payable,讓題目合約有餘額即可。 ``` solidity= function attack() payable public{ selfdestruct(addr); } ```  ### 9. ****Vault**** 打開保險箱即可過關。宣告成 private 的變數雖然其他合約無法使用,但這是可以被看到的,使用 web3js 中的 getStorageAt 即可取得 password。之後再把 password 傳到 unlock 即可破解。 ``` javascript= const password = await web3.eth.getStorageAt(instance, 1); contract.unlock(password); ```  ### 10. ****King****
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up