This is a in-depth series around Zeppelin team’s smart contract security puzzles . I’ll give you the direct resources and key concepts you’ll need to solve the puzzles 100% on your own. This levels requires you to exploit a poorly implemented function to gain control of someone else’s smart contract. fallback What is a Fallback function It is best practice to implement a function if you want your smart contract to . simple Fallback receive Ether from other contracts and wallets generally The Fallback function enables a smart contract’s inherent ability to act like a wallet. If I have your wallet address, I can send you Ethers without your permission. In most cases, you might want to enable this ease-of-payment feature for your smart contracts too. This way, other contracts/wallets can send Ether to your contract, without having to know your ABI or specific function names. Note: without a fallback, or known payable functions, smart contracts can only receive Ether: i) as a mining bonus, or ii) as the backup wallet of another contract that has . self-destructed when developers implement key logic . The problem is inside the fallback function Such bad practices include: changing contract ownership, transferring the funds, etc. inside the fallback function: Bad practice: you should not reassign contract ownership in a fallback function This level demonstrates how you open up your contract to abuse, because . anyone can trigger a fallback function Ways to trigger the Fallback function Anyone can call a fallback function by: Calling a inside the contract, or function that doesn’t exist Calling a function , or without passing in required data Sending to the contract Ether without any data Detailed Walkthrough There are two places inside Fallback.sol where, as the , you can become the contract’s : msg.sender owner The first option requires you to send , or to this smart contract. 1000000000000000000000 wei 1000 Ether You probably don’t have ~5 hours to slowly request 1000 ethers from Ropsten faucet, which heavily throttles you after the first few requests. So let’s fallback to the option. fallback Notice the fallback function has two requirements: require(msg.value > 0 && contributions[msg.sender] > 0); Your account address needed to have donated Ether to this contract in the past Your winning fallback function call needs to contain some Ether value Using : Remix IDE Paste the contract code into the UI. This gives Remix the matching ABI to work with. Make sure you are giving Remix the full import path. Ethernaut provides the short path for its dApp, which Remix does not recognize: import 'github.com/OpenZeppelin/zeppelin-solidity/contracts/ownership/Ownable.sol'; 3. Retrieve your existing contract instance by loading the contract via the address: instance Check ‘instance’ inside the console for your address. 0xb9bcfd… is my instance address. 4. Donate a nominal amount of Ether to the contract, using the function. Make sure you are donating from your account address. contribute player the function has the conditional statement: Note: contribute() require(msg.value < 0.001 ether); Make sure your contribution is less than 0.001 ether. value Check that you’re donating from your `player` wallet address 5. Finally, add some arbitrary value into the field and trigger the function. value (fallback) Inside the console, check that you now own the contract by typing await contract.owner(); If using the console (not Remix): You can trigger the fallback function via sending transactions through the console, to the same effect: contract.sendTransaction({from: player,value: toWei(...)}) // Make sure you leave the "data:" field empty Key Security Takeaways If you implement a fallback function, keep it simple Use fallback functions to emit payment events to the transaction log Use fallback functions to check simple conditional requirements before using fallback functions to change contract ownership, transfer funds, support low-level function calls, and more. Think twice More Levels _Make a smart contract do things it didn’t want to…_hackernoon.com Ethernaut Lvl 0 Walkthrough: ABIs, Web3, and how to abuse them _This is a in-depth series around Zeppelin team’s smart contract security puzzles. I’ll give you the direct resources…_medium.com Ethernaut Lvl 2 Fallout Walkthrough: how simple developer errors become big mistakes