[Ethernaut] Wargame Writeup | 15. Naught Coin

2024. 8. 12. 22:45· Blockchain/Ethernaut
목차
  1. Description
  2. Code
  3. Scenario
  4. Exploit
728x90

Description

NaughtCoin is an ERC20 token and you're already holding all of them. The catch is that you'll only be able to transfer them after a 10 year lockout period. Can you figure out how to get them out to another address so that you can transfer them freely? Complete this level by getting your token balance to 0.

Things that might help

  • The ERC20 Spec
  • The OpenZeppelin codebase

Code

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "openzeppelin-contracts-08/token/ERC20/ERC20.sol";
contract NaughtCoin is ERC20 {
// string public constant name = 'NaughtCoin';
// string public constant symbol = '0x0';
// uint public constant decimals = 18;
uint256 public timeLock = block.timestamp + 10 * 365 days;
uint256 public INITIAL_SUPPLY;
address public player;
constructor(address _player) ERC20("NaughtCoin", "0x0") {
player = _player;
INITIAL_SUPPLY = 1000000 * (10 ** uint256(decimals()));
// _totalSupply = INITIAL_SUPPLY;
// _balances[player] = INITIAL_SUPPLY;
_mint(player, INITIAL_SUPPLY);
emit Transfer(address(0), player, INITIAL_SUPPLY);
}
function transfer(address _to, uint256 _value) public override lockTokens returns (bool) {
super.transfer(_to, _value);
}
// Prevent the initial owner from transferring tokens until the timelock has passed
modifier lockTokens() {
if (msg.sender == player) {
require(block.timestamp > timeLock);
_;
} else {
_;
}
}
}

Scenario

바로 contract의 transfer 함수를 호출하면 lockTokens modifier 때문에 timeLock 시간이 지나지 않는 이상 호출할 수 없다. ERC20 표준에 따르면 토큰을 전송하는 함수가 transfer 말고 transferFrom도 존재한다. approve() 함수를 통해 spender가 얼마만큼의 value를 전송할 수 있게 할 지 승인해주고 transferFrom 함수를 호출할 수 있다.

Exploit

 

728x90
저작자표시 (새창열림)
  1. Description
  2. Code
  3. Scenario
  4. Exploit
'Blockchain/Ethernaut' 카테고리의 다른 글
  • [Ethernaut] Wargame Writeup | 14. Gatekeeper Two
  • [Ethernaut] Wargame Writeup | 13. Gatekeeper One
  • [Ethernaut] Wargame Writeup | 12. Privacy
  • [Ethernaut] Wargame Writeup | 11. Elevator
je1att0
je1att0
Web3 | AI | 정보 보안 | 해킹 | 컴퓨터 | IT
je1att0
정보 보안 전공생 머릿속에
je1att0
전체
오늘
어제
250x250

블로그 메뉴

  • About Me [CV]
  • GitHub
  • 여행·일상 블로그
  • 방명록
  • 글쓰기

공지사항

  • 분류 전체보기 (78)
    • Blockchain (16)
      • Cryptozombie (0)
      • Ethernaut (16)
      • Terminology (0)
    • Cyptocurrency (1)
    • AI (2)
      • Deep Learning (2)
    • Hacking (0)
    • Web Development (5)
    • Network (2)
    • Digital Forensic (3)
    • Linux (31)
      • OverTheWire - Bandit (28)
    • Language (13)
      • C (12)
      • Python (1)
    • Tips (1)
    • Archive (1)
    • Startup (3)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
je1att0
[Ethernaut] Wargame Writeup | 15. Naught Coin
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.