• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья CTF разбор по смарт контрактам. (2)

frog2

ripper
КИДАЛА
Регистрация
12.11.2020
Сообщения
105
Реакции
68
Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет. Продолжаю серию статей по разбору CTF заданий, которые связаны со смарт-контрактами. Надеюсь кого нибудь заинтересует данная тематика, статья написано больше для новичков, но предполагаю, что вы должны быть знакомы с solidity и теории кодирования на базовом уровне. Решать задачи я буду на такой платформе как ethernaut. Интересно, что сам CTF построен на отдельных контрактах.
1 статья: /threads/55340/#post-358160


Дан контракт с именем Fallback. В контракте 5 функций. Задача стать владельцем контракта и опустошить баланс.

1.png



Получим экземпляр контракта. Сверим адреса контракта и посмотрим адрес владельца.
2.png



constructor() функция, которая развертывает код в блокчейне с аргументами/параметрами, она вызывается только один раз. Тот кто развертывает контракт становится его владельцем.
3.png



modifier() это модификатор функции, обычно проверяет условие перед выполнением функции. В примере указано, что вызывать функцию может только владелец контракта.
4.png



contribute() функция, которая хранит значение вызывающего эту функцию.
Если значение больше владельца контракта, то вызывающий функцию становится владельцем контракта. Обратите внимание, что require создает требование отправителю эфира и логику contributions в которую заносится значение.

5.png



getContribution() функция получения значения нашего вклада через неё мы можем узнать количество нашего вклада.
6.png



withdraw() позволяет выводить баланс только владельцу контракта.
7.png



receive() функция, которая выполняется при отправки эфира, с требованием, у нас должно быть значение(вклад) в contributions.
8.png



Транзакции в Ethereum это по своей сути сообщения с полезной нагрузкой, которые носят в себе различные данные. Чтобы менять состояние контракта нам нужно отправлять транзакции. У функции есть своя сигнатура - первые 4 байта, которые являются его идентификатором. В EVM проверяет идентификатор диспетчер, если ничего не подходит вызывается специальная функция, если она существует.
9.png



Вызовем contribute со специальным аргументом, объектом, с начальным значением, которая вложиться в нашу транзакцию, далее отправим транзакцию в контракт с нашим объектом, проверим стали ли мы владельцем контракта и тогда получим право вывести эфир и посмотрим баланс контракта.
10.png



Таким образом мы прошли 1 уровень.
11.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Как ты вызвал функцию contribute?
Не до конца сделал. contract.contribution({value:1}) тут я поместил объект в аргумент со значением 1, мы здесь делаем вклад для того чтобы выполнить условия
 
Пожалуйста, обратите внимание, что пользователь заблокирован
есть ли функция что с каждого платежа в системе контракта, шла коммисия на х счет? в х проценте?.

Допустим на юнисвапе ты сам указываешь в настройки пула, а вот с панкейком нужно в контракте делать
 
Пожалуйста, обратите внимание, что пользователь заблокирован
есть ли функция что с каждого платежа в системе контракта, шла коммисия на х счет? в х проценте?.

Допустим на юнисвапе ты сам указываешь в настройки пула, а вот с панкейком нужно в контракте делать
отписал в пм
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх