web3/The Ethernaut

[The Ethernaut] Hello Ethernaut

Tyojong 2025. 9. 8. 22:08

이 문제는 password변수의 값이 private설정이 아닌 public설정으로 되어있어 발생하는 취약점으로

변수 설정이 잘못 될 경우 민감한 정보가 노출될 수 있는 취약점이 발생한다는 것을 보여준다.

인스턴스 생성 후 개발자 도구의 console 탭을 이용해 문제를 해결하면 된다.

help()를 이용해 사용할 수 있는 함수 목록을 확인할 수 있다.

 

함수를 통해 여러 정보를 확인할 수 있고 await를 이용해 내가 원하는 값만 출력할 수 있다.

 

문제 설명에 contract.info() 또는 await contract.info()를 입력하라고 한다.

 

await contract.info() 를 입력하니 info1() 을 입력하라고 한다.

 

await contract.info1() 을 입력하니 이번에는 hello 파라미터를 넣은 info2() 를 입력하라고 한다.

 

await contract.info2("hello") 를 입력하니 infoNum 이 다음 info 메소드를 call 할 수 있는 숫자를 알려준다고 한다.

 

infoNum의 words에 42라는 숫자가 들어가 있다.

그렇다면 info42를 실행해보면 될 것 같다.

 

info42() 를 실행하니 theMethodName이 다음 메소드 이름이라고 한다.

 

theMethodName() 을 실행하니 method7123949 라는 메소드가 있다고 한다.

 

method7123949() 를 입력하니 password를 안다면 authenticate() 를 통해 제출 할 수 있다고 한다.

 

contract를 입력하니 password라는 메소드가 있어 실행해보니 password의 문자열이 출력되었다.

 

authenticate를 이용해 password값을 전달해주면 문제가 해결된다.