본문 바로가기
Write Up/Ethernaut - 블록체인 워게임

Ethernaut - 0단계 (Hello Ethernaut)

by p6rkdoye0n 2023. 11. 5.

 

이더넛 워게임 0단계부터 블록체인 문제들을 풀 때 어떤 방식으로 풀어야 하는지 사용법을 익히게 도와주었다. 이더넛 워게임을 시작할 때 해당 문제를 풀 때는 보통 개발자 도구에 존재하는 콘솔을 통해 진행한다. 위는 새로운 인스턴스를 받으면 생기는 UI이며, 다음과 같은 명령어를 이용하며 여러 명령어들을 볼 수 있다.

help()

 

그리고 이제 문제 설명을 보며 사용법을 익혀보도록 하겠다.

 

해당 문제에서 이 레벨의 info 메소드를 사용하려면 콘솔창에 contract.info() 또는 await contract.info() 명령어를 치면 알 수 있다는 설명이 나와있었다.

 

해당 명령어를 이용하니 "You will find what you need in info1()." 라는 문자가 나와서 다음 명령어를 검색하였다.

 

await contract.info1()

 

 

 

그 다음에는 "hello"와 같은 파라미터와 함꼐 info2() 함수를 호출하라고 하여서 해당 함수를 hello 파라미터와 같이 호출해보도록 하겠다.

 

await contract.info2("hello")

 

 

그리고 infoNum이라는 함수가 그다음 info 메소드를 콜 할 수 있는 숫자를 알려준다고 하여서 해당 함수를 호출해보도록 하겠다.

 

await contract.infoNum()

 

해당 함수를 호출하니 words 배열의 값에 42라는 숫자가 있어 info42를 호출해보도록 하겠다.

 

await contract.info42()

 

 

그다음 theMethodName 함수를 호출해보겠다.

 

await contract.theMethodName()

 

 

그다음 method7123949 를 호출해보겠다.

 

await contract.method7123949()

 

 

 

패스워드를 알면 authenticate 함수를 호출 하라는 뜻이다. 한번 아무 인자 전달을 하지 않고 해당 함수를 호출하면 어떻게 되는지 알아보겠다.

 

await contract.authenticate()

 

다음과 같이 해당 함수에 파라미터 전달이 되지 않아서 에러가 뜨게 되었다. 그러면 password의 변수가 있는지 확인해보고 해당 변수안에 있는 값이 무엇인지 확인을 한 뒤에, 최종적으로 authenticate 함수 파라미터로 전달해보겠다. 

 

await contract.password()

 

await contract.authenticate("ethernaut0")

 

 

이후에 컨펌을 진행하게 된다면 최종적으로 문제를 풀 수 있었다.

 

 

🚩

 

해당 문제는 password의 변수 값을 private이 아닌 public 으로 설정했을시에 발생하는 취약점이므로 변수에 관한 접근 제한자가 필요하다.

'Write Up > Ethernaut - 블록체인 워게임' 카테고리의 다른 글

Ethernaut - 5단계 (Token)  (0) 2023.11.07
Ethernaut - 4단계 (Telephone)  (0) 2023.11.07
Ethernaut - 3단계 (Coin Flip)  (0) 2023.11.07
Ethernaut - 2단계 (Fallout)  (0) 2023.11.06
Ethernaut - 1단계 (Fallback)  (0) 2023.11.05