분류 전체보기 (20) 썸네일형 리스트형 [이더넛] 레벨 10 'Re-entrancy' 풀기 [이더넛] 레벨 10 'Re-entrancy' 풀기 [목표] 타겟 컨트랙트 Re-entrancy의 모든 잔고를 인출하기. 타겟 컨트랙트 코드 // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import '@openzeppelin/contracts/math/SafeMath.sol'; contract Reentrance { using SafeMath for uint256; mapping(address => uint) public balances; function donate(address _to) public payable { balances[_to] = balances[_to].add(msg.value); } function balanceOf(addres.. [이더넛] 레벨9 'King' 풀기 [이더넛] 레벨9 'King' 풀기 [목표] 영원한 king이 되자. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract King { address payable king; uint public prize; address payable public owner; constructor() public payable { owner = msg.sender; king = msg.sender; prize = msg.value; } receive() external payable { require(msg.value >= prize || msg.sender == owner); king.transfer(msg.value); king = msg.sender;.. [이더넛] 레벨8 'Vault' 풀기 [이더넛] 레벨8 'Vault' 풀기 [목표] 스마트컨트랙트 Vault의 변수 password는 private으로 선언 되어있다. 스마트컨트랙트 Vault의 password를 알아내보자. 이를 통해 암호화 되지 않은 변수를 스마트컨트랙트에 기입하는 것이 얼마나 보안에 취약한지 알아보자. Full Code // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Vault { bool public locked; bytes32 private password; constructor(bytes32 _password) public { locked = true; password = _password; } function unlock(bytes32 _pass.. [이더넛] 레벨7 'Force' 풀기 [이더넛] 레벨7 'Force' 풀기 [목표] 타겟컨트랙트 'Force'의 잔고를 0 이상으로 만들어라. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Force {/* MEOW ? /\_/\ / ____/ o o \ /~____ =ø= / (______)__m_m) */} Force 컨트랙트를 보면 이상한 고양이만 있고 아무것도 없습니다. 컨트랙트가 EOA를 통해 이더를 받으려면 fallback function payable이 있어야 하는데 없습니다. 하지만 스마트컨트랙트를 하나 더 만들어서 selfdestruct 시켜 강제로 Force 컨트랙트로 입금되게 하면 가능합니다. pragma solidity 0.8.6; contract f.. [이더넛] 레벨6 'Delegation' 풀기 [이더넛] 레벨6 'Delegation' 풀기 [목표] 스마트컨트랙트 Delegation의 owner를 플레이어의 주소로 변경해보자. Full Code // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Delegate { address public owner; constructor(address _owner) public { owner = _owner; } function pwn() public { owner = msg.sender; } } contract Delegation { address public owner; Delegate delegate; constructor(address _delegateAddress) public { de.. [이더넛] 레벨5 'Token' 풀기 [이더넛] 레벨5 'Token' 풀기 [목표] uint256 변수의 언더플로우 특성을 이용해서 ERC20 토큰 잔고를 매우 크게 증가시키기 2021.07.28 - [블록체인] - uint 자료형의 허점을 노린 스마트컨트랙트 해킹 uint 자료형의 허점을 노린 스마트컨트랙트 해킹 uint 자료형의 허점을 노린 스마트컨트랙트 해킹 [요약] 내가 다른 사람에게 돈을 입금하려면 나의 은행 잔고는 당연히 입금하려는 돈 보다 많아야한다. 동일한 의도로 타겟 스마트컨트랙트 내에 orbing.tistory.com 이번 레벨은 이전 포스팅 글과 동일합니다. 복습겸 다시 진행해보겠습니다. Full Code // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract .. [이더넛] 레벨4 'Telephone' 풀기 [이더넛] 레벨4 'Telephone' 풀기 [목표] 스마트컨트랙트 Telephone의 owner에 대입된 주소를 내 주소로 바꿔보자. 이를 통해 tx.origin와 msg.sender의 차이를 알아보자. Contract 'Telephone' Full Code // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Telephone { address public owner; constructor() public { owner = msg.sender; } function changeOwner(address _owner) public { if (tx.origin != msg.sender) { owner = _owner; } } } owner가 되려.. [이더넛] 레벨3 'Coin Flip' 풀기 [이더넛] 레벨3 'Coin Flip' 풀기 목표. 동전의 앞면 / 뒷면을 맞추면 승리하는 스마트컨트랙트가 있다. 이를 위해서 CoinFlip 스마트컨트랙트에서는 블록넘버를 이용해 난수(랜덤값)를 생성하고 있다. 이를 통해 온체인 데이터를 이용해 난수를 생성하는 것이 왜 보안에 취약한지 알아보고 이 스마트컨트랙트의 허점을이용해서 10연승을 해보자. Full code // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import '@openzeppelin/contracts/math/SafeMath.sol'; contract CoinFlip { using SafeMath for uint256; uint256 public consecutiveWins; uint.. 이전 1 2 3 다음