Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет. Я хочу запустить серию статей по разбору CTF заданий, которые связаны со смарт-контрактами. Надеюсь кого нибудь заинтересует данная тематика, статья написано больше для новичков, но предполагаю, что вы должны быть знакомы с solidity и теории кодирования на базовом уровне. Решать задачи я буду на такой платформе как ethernaut. Интересно, что сам CTF построен на отдельных контрактах.
0 уровень знакомит нас как взаимодействовать с контрактами через ABI в консоли браузера, как пополнить свой баланс в тестовой среде, как вызывать различные методы и т.д.
Подключим MetaMask к Rinkeby test network.
Узнаем какие нам доступны методы.
Сверим наш адрес кошелька в консоли.
Узнаем наш баланс.
Как я ранее писал, CTF построен на контрактах и гланый контракт это ethernaut.sol. Ethernaut по сути выдает нам экземпляры уязвимых контрактов.
В главном контракте мы можем вызывать доступные нам методы. Например узнать адрес владельца контракта.
Замайним немного эфира и создадим для нас экземпляр контракта нажав синею кнопку. Нужно понимать, что любое изменение состояния контракта сопровождается транзакцией.
В результате получаем новый контракт, давайте узнаем информацию о доступных методах.
Нам дают подсказку, что в методе info1() есть что-то интересное.
Окей, нам предлагают вызвать метод info2() с аргументом "hello".
Нас опять перекидывают только на свойство infoNum, давайте посмотрим более детально список всех методов, какой они имеют тип, изучим модификаторы доступа в них.
Подсказка нам говорит, что нужно присмотреться к методу authenticate() по названию можно судить, что это аутентификация, а где есть аутентификация там нужно предъявить пароль. Посмотрим на список публичных методов и найдем с именем "password", он доступен и можем посмотреть данные метода. Находим пароль.
Хочу обратить внимание, подсказка так же была в методе method7123949().
Чтобы наконец решить данный уровень, мы авторизуемся с паролем, который мы нашли.
Таким образом мы прошли 0 уровень.
0 уровень знакомит нас как взаимодействовать с контрактами через ABI в консоли браузера, как пополнить свой баланс в тестовой среде, как вызывать различные методы и т.д.
Подключим MetaMask к Rinkeby test network.
Узнаем какие нам доступны методы.
Сверим наш адрес кошелька в консоли.
Узнаем наш баланс.
Как я ранее писал, CTF построен на контрактах и гланый контракт это ethernaut.sol. Ethernaut по сути выдает нам экземпляры уязвимых контрактов.
В главном контракте мы можем вызывать доступные нам методы. Например узнать адрес владельца контракта.
Замайним немного эфира и создадим для нас экземпляр контракта нажав синею кнопку. Нужно понимать, что любое изменение состояния контракта сопровождается транзакцией.
В результате получаем новый контракт, давайте узнаем информацию о доступных методах.
Нам дают подсказку, что в методе info1() есть что-то интересное.
Окей, нам предлагают вызвать метод info2() с аргументом "hello".
Нас опять перекидывают только на свойство infoNum, давайте посмотрим более детально список всех методов, какой они имеют тип, изучим модификаторы доступа в них.
Подсказка нам говорит, что нужно присмотреться к методу authenticate() по названию можно судить, что это аутентификация, а где есть аутентификация там нужно предъявить пароль. Посмотрим на список публичных методов и найдем с именем "password", он доступен и можем посмотреть данные метода. Находим пароль.
Хочу обратить внимание, подсказка так же была в методе method7123949().
Чтобы наконец решить данный уровень, мы авторизуемся с паролем, который мы нашли.
Таким образом мы прошли 0 уровень.