Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

Smart contract/Ethernaut 문제풀이 13

Ethernaut 문제풀이 #13 - Gatekeeper One

13번 문제 Gatekeeper One 입니다. 이 문제는 13번, 14번에 one, twe 두 개로 구성되어 있네요. 두 레벨이 비슷한 성격인가 봅니다. Gatekeeper를 지나야 이 레벨을 통과할 수 있다고 합니다. 힌트로는 Telephone과 Token level에서 배운 것을 명심하라고 되어 있네요. 그리고 또 solidity 문서에서 gasleft()라는 특별한 함수를 배울 수 있다고 합니다. 2022.02.28 - [Smart contract/Ethernaut 문제풀이] - Ethernaut 문제풀이 #4 - Telephone Ethernaut 문제풀이 #4 - Telephone 레벨 4 Telephone입니다. 이번 문제도 Ownership을 탈취하는 문제고 역시 Beyond the con..

Ethernaut 문제풀이 #12 - Privacy

벌써 12번 문제입니다. 총 23개 문제니까 절반을 넘겼네요. 다른 길은 없습니다. ㅋㅋ 자 갑시다. 이 컨트랙트의 제작자는 저장소를 보호하는데 꽤나 신중했다고 하네요. 이 컨트랙트를 unlock하면 이길 수 있다고 합니다. 힌트로는 어떻게 storage가 작동하는지, 어떻게 parameter parsing 이 작동하는지 또 어떻게 casting이 작동하는지 이해하는 것이라 합니다. 팁을 하나 더 주네요. 난이도 8/10 짜리 문제라서 서비스가 좋군요. 메타마스크는 단지 상품이라는 것을 명심하고 메타마스크에 문제가 있느면 다른 툴을 사용하라고 합니다. 고급 난이도의 게임플레이는 Remix나 web3 provider를 사용한다고 합니다.....이미 그러고 있잖아... ㅅㅍ.. 코드를 봅시다~!!! cont..

Ethernaut 문제풀이 #11 - Elevator

11번 문제입니다. 이 엘레베이터는 당신이 빌딩의 꼭대기까지 올라가는 것을 허락하지 않는다는군요. 힌트로 두 문장을 주는데요. 가끔씩 솔리디티는 약속들을 지키기에는 좋지 못하다. 이 엘레베이터는 빌딩에서 사용될 것으로 예상된다. 무슨 소리일까요? 저도 잘 모르겠습니다. 코드부터 보시죠. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface Building { function isLastFloor(uint) external returns (bool);//빌딩 컨트렉트의 인터페이스 } contract Elevator {//엘레베이터 컨트렉트 bool public top; uint public floor; function goTo(uint _fl..

Ethernaut 문제풀이 #10 - Re-entrancy

10번 문제 re-entrancy입니다. Solidity 문서의 보안 측면 고려사항 페이지에서 거의 처음 부분에 나오는 거라 언제 이게 문제로 나오나 했는데 이제 나오네요. 그래도 힌트를 좀 보면 기존에 많은 문제풀이 처럼 다른 컨트랙트를 사용해 이 레벨을 클리어 해야 하겠네요. fallback은 거의 항상 이용되는 것 같은데 이 정도면 fallback을 없애야 하는거 아닌가 싶어요 ㅎㅎ 그리고 Throw/revert bubbling 이라는 힌트가 있는데 revert는 레벨9 King에서도 활용했었습니다. 자 하던대로 코드를 살펴보시죠. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import '@openzeppelin/contracts/math/S..

Ethernaut 문제풀이 #9 - King

Ethernaut 9번째 문제 King! 왕입니다. 이번 문제는 영어가 어렵네요. 이번 컨트랙트는 간단한 게임입니다. 왕이 되려면 기존의 상금보다 많은 돈을 입금해야 합니다. 그러면 그 돈은 기존 왕에게 보내지고 새로운 왕이 선출됩니다. 인스턴스를 제출할 때 이 레벨은 왕 권한을 다시 돌려받습니다. 오너라서 그런가? 암튼 self proclamation을 막으면 이 레벨을 이길 수 있다고 하..는군요.. 무슨 소리야!! 문제 이해를 못하겠네 큰일입니다. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract King { address payable king; //왕 uint public prize; //상 address payable publi..

Ethernaut 문제풀이 #7 - Force

7번 Ethernaut 문제 Force입니다. 목표는 컨트랙트의 돈을 0보다 크게 만드는 것입니다. ㅎㅎ 이상한 문제군요. 힌트로 제시된 것은 역시 fallback 함수이고 컨트랙트를 공격하는 가장 좋은 방법은 다른 컨트랙트라고 하네요. Beyond the console의 내용도 마찬가지입니다. 이번에도 Remix를 사용하여 문제를 풀어야 하나 봅니다. 코드를 봅시다. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Force {/* MEOW ? /\_/\ / ____/ o o \ /~____ =ø= / (______)__m_m) */} ㅋㅋㅋㅋㅋ 뭐야 이게 ㅋㅋㅋ 아무것도 없습니다. 다른 컨트랙트로 fallback을 일으켜보면 뭔가 알..

Ethernaut 문제풀이 #6 - Delegation

6번째 문제 Delegation(위임)입니다. 역시 ownership을 탈취가 이번 레벨 클리어 조건입니다. 힌트를 살펴 봅시다. 먼저 Delegation call에 관한 문제라고 친절하게 알려주네요. solidity 문서의 delegatecall을 살펴보라고 합니다. Fallback과 Method ids도 도움이 된다고 하는데 method ids는 가 뭐였지? 생각이 안나네요. 공부하다보면 다시 생각 나겠죠 ㅎㅎ 자 인스턴스 생성하시고 코드를 한번 살펴 봅시다. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Delegate { //Delegate 컨트렉트 정의 address public owner; constructor(address..

Ethernaut 문제풀이 #5 - Token

5번째 문제 Token입니다. 목표는 컨트렉트의 토큰을 해킹하는 것이구요. 20개의 토큰을 가지고 시작하는데요 20개보다 더 많은(매우 많이) 토큰을 확보하면 된다고 합니다. 힌트로는 "odometer가 뭔가요?" 음.... 주행계? 모르겠네요. 코드부터 봅시다. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Token { mapping(address => uint) balances;//balances 변수 uint public totalSupply;//총 공급 변수 constructor(uint _initialSupply) public { balances[msg.sender] = totalSupply = _initialSupply; ..

Ethernaut 문제풀이 #4 - Telephone

레벨 4 Telephone입니다. 이번 문제도 Ownership을 탈취하는 문제고 역시 Beyond the console을 참고하라는, 즉 다른 컨트랙트를 통해 이 컨트랙트를 공격하라고 합니다. 자 해 봅시다. 똑같이 인스턴스를 생성하시고 나서 코드를 분석해 보겠습니다. 이번에는 코드가 짧네요. // 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) {//tx...

Ethernaut 문제풀이 #3 - Coin Flip

3번 문제 Coin Flip입니다. 동전뒤집기! 설명에도 동전의 앞면 뒷면을 예측하는 동전 뒤집기 게임이라고 나와 있네요. 사실 개인적으로는 블록체인 기술을 적용하면 딜러나 장부가 조작될 수 없다는 점에서 도박에도 적용하기 훌륭한 기술이라고 생각하고 있습니다. 하지만 이기기 위한 조건이 10번 연속 이기기입니다. 초능력을 사용하라고;;;; 요즘 유행인 오징어 게임 유리다리 건너기가 생각나네요. ㅎㅎ 거긴 연속 18번. 그에 비하면 양호하지만 유리 다리에서 죽은 사람들 생각하면 ㅠㅠㅠㅠ 자 10 연속 맞추러 갑시다. help 메뉴의의 Beyond the console을 읽어보는 게 좋을 것이라고 합니다. 제발 읽어 보자구요.ㅎㅎ https://ethernaut.openzeppelin.com/help Eth..

반응형