Объединение строк
Начиная с версии 0.8.12 в Solidity есть встроенная функция для объединения строк.
#strings
Начиная с версии 0.8.12 в Solidity есть встроенная функция для объединения строк.
#strings
👍3
Еще раз все сначала
За все время, что учусь делать аудиты и решать задачи, я вел небольшой файл, куда записывал все моменты, на которые стоит обращать внимание: модификаторы, возможности доступа, особенности erc и т.д.
И вот сегодня я решил немного систематизировать их, так как перечитывать стало слегка проблематично. Ну, знаете эту штуку, когда информации много, она вся в куче и, читая пункты, в голове ничего не укладывается.
Вместе с этим я решил пересмотреть старые посты, где решал задачи Ethernaut, DVD, CTE и другие. И понял, что некоторые я забыл как решать. В том смысле, что попадись подобный пример кода в реальном аудите, я просто бы прошел мимо.
В общем, перекапывал все свои старые заметки и убил полдня.
При этом нашел ссылку, которую сохранял ранее, где опубликован весь курс Secureum, и подумал, что может стоит пройти его?
Хотите ли вы вместе со мной пройти курс Secureum? Там около 30 уроков и куча текстового материала. Как я понял, там вообще с нуля вся подача, типа как с 0 до аудитора.
Знаю, некоторые проходят другой курс сейчас, и на новый на английском языке может просто не хватить время. Вопрос в том, выкладывать ли на канале уроки или я сам буду проходить потихоньку.
Что думаете?
#secureum
За все время, что учусь делать аудиты и решать задачи, я вел небольшой файл, куда записывал все моменты, на которые стоит обращать внимание: модификаторы, возможности доступа, особенности erc и т.д.
И вот сегодня я решил немного систематизировать их, так как перечитывать стало слегка проблематично. Ну, знаете эту штуку, когда информации много, она вся в куче и, читая пункты, в голове ничего не укладывается.
Вместе с этим я решил пересмотреть старые посты, где решал задачи Ethernaut, DVD, CTE и другие. И понял, что некоторые я забыл как решать. В том смысле, что попадись подобный пример кода в реальном аудите, я просто бы прошел мимо.
В общем, перекапывал все свои старые заметки и убил полдня.
При этом нашел ссылку, которую сохранял ранее, где опубликован весь курс Secureum, и подумал, что может стоит пройти его?
Хотите ли вы вместе со мной пройти курс Secureum? Там около 30 уроков и куча текстового материала. Как я понял, там вообще с нуля вся подача, типа как с 0 до аудитора.
Знаю, некоторые проходят другой курс сейчас, и на новый на английском языке может просто не хватить время. Вопрос в том, выкладывать ли на канале уроки или я сам буду проходить потихоньку.
Что думаете?
#secureum
👍5
Читаем отчеты вместе. 8
Ну, и по традиции, на вечер выкладываю очередной отчет. На этот раз - это новый отчет с code4rena.
Без дополнительные речей, читаем отчет вместе.
#report #audit
Ну, и по традиции, на вечер выкладываю очередной отчет. На этот раз - это новый отчет с code4rena.
Без дополнительные речей, читаем отчет вместе.
#report #audit
👍2
Solidity полон сюрпризов
А знали ли вы, что mapping могут держать функции в качестве значения? Или, что функции могут принимать функции в качестве параметров?
Лично для меня это было в диковинку. Наткнулся на эту картинку, опять же, в Твиттере и сначала подумал, что это какой-то прикол. Более того, по указанной ссылке, да и в поиске я не смогу найти информации об этом.
Переписав код со скрина в Ремикс, он скомпилировался без проблем. Да и потом исполнился на раз!
Удивительно! Ни разу: ни в аудитах, ни в задачах, ни где, я не встречал таких примеров.
В комментариях оставляю код, чтобы вы могли скопипастить его в Ремикс и поиграться самим.
#mapping #function
А знали ли вы, что mapping могут держать функции в качестве значения? Или, что функции могут принимать функции в качестве параметров?
Лично для меня это было в диковинку. Наткнулся на эту картинку, опять же, в Твиттере и сначала подумал, что это какой-то прикол. Более того, по указанной ссылке, да и в поиске я не смогу найти информации об этом.
Переписав код со скрина в Ремикс, он скомпилировался без проблем. Да и потом исполнился на раз!
Удивительно! Ни разу: ни в аудитах, ни в задачах, ни где, я не встречал таких примеров.
В комментариях оставляю код, чтобы вы могли скопипастить его в Ремикс и поиграться самим.
#mapping #function
👍3
Пара слов о курсе Secureum
Вчера я спрашивал на канале, стоит ли выкладывать лекции с буткемпа и проходить курс всем вместе. Посмотрел первую лекцию и...
В общем, для многих видео может показаться слегка трудно понимаемым из-за того, что лектор читает материал с большим акцентом, полагаю, что англо-индийский.
Поэтому просто оставляю ссылку на курс тут, чтобы желающие могли проходить в своем темпе, возможно, используя субтитры.
Если будет что-то новое, то чего ранее не было на канале, то буду делать мини посты.
#secureum
Вчера я спрашивал на канале, стоит ли выкладывать лекции с буткемпа и проходить курс всем вместе. Посмотрел первую лекцию и...
В общем, для многих видео может показаться слегка трудно понимаемым из-за того, что лектор читает материал с большим акцентом, полагаю, что англо-индийский.
Поэтому просто оставляю ссылку на курс тут, чтобы желающие могли проходить в своем темпе, возможно, используя субтитры.
Если будет что-то новое, то чего ранее не было на канале, то буду делать мини посты.
#secureum
❤1
Читаем отчеты вместе. 9
Если вы читаете отчеты вместе со мной, то можете смело похвалить себя! Вы прочитали на 9 отчетов больше, чем если бы делали все сами!
Лично я нашел для себя несколько интересных моментов, на которые теперь буду обращать при аудитах.
Готовы к финальному на этой неделе? Если да, то поехали! На сегодня у нас отчет от Trust.
Читаем отчет вместе!
#report #audit
Если вы читаете отчеты вместе со мной, то можете смело похвалить себя! Вы прочитали на 9 отчетов больше, чем если бы делали все сами!
Лично я нашел для себя несколько интересных моментов, на которые теперь буду обращать при аудитах.
Готовы к финальному на этой неделе? Если да, то поехали! На сегодня у нас отчет от Trust.
Читаем отчет вместе!
#report #audit
👍1
День задач на канале!
По новой прекрасной традиции сегодня, в понедельник, на канале будет опубликовано множество новых интересных задач.
Задачи помогают нам начать еще лучше разбираться в коде и видеть не только прямые уязвимости, но и логические. Так или иначе в голове отложатся правила и паттерны, которые сделают наш код безопаснее.
Первая задача на сегодня довольно сложная. Здесь представлена именно логическая уязвимость. Сможете понять какая?
Решение
passThruGate() проверяет, чтобы пользователь отправил сумму большую, чем gate.ethCost. Однако остатки от требуемой суммы никак не обрабатываются и не возвращаются пользователю, поэтому они остаются заблокированными на контракте. Это считается High risk issue на code4rena.
#task
По новой прекрасной традиции сегодня, в понедельник, на канале будет опубликовано множество новых интересных задач.
Задачи помогают нам начать еще лучше разбираться в коде и видеть не только прямые уязвимости, но и логические. Так или иначе в голове отложатся правила и паттерны, которые сделают наш код безопаснее.
Первая задача на сегодня довольно сложная. Здесь представлена именно логическая уязвимость. Сможете понять какая?
Решение
❤3
Задача от Immunefi
Прекрасная задача от Immunefi, которая показывает, что всегда нужно следить за обновлениями и делать дополнительные проверки. Поняли, в чем дело?
Решение
Из-за того, что в коде пропущено обновление listings.deposit в функции withdraw(), пользователь может вызывать ее сколько угодно раз, пока контракт не будет опустошен.
#task
Прекрасная задача от Immunefi, которая показывает, что всегда нужно следить за обновлениями и делать дополнительные проверки. Поняли, в чем дело?
Решение
❤4
Задача от code4rena
Хоть эту задачу и можно было обрезать в половину как минимум, автор посчитал нужным немного запутать нас и дать более расширенный вариант.
В общем, еще одна задача на мышление хакера. С кодом все в порядке (насколько это возможно для примера), но дело в другом. Сможете сломать контракт?
Решение
Тут показан пример DoS атаки. Если хакер создаст слишком большой массив withddrawals, то цикл может просто израсходовать весь газ и прервать выполнение функции.
#task
Хоть эту задачу и можно было обрезать в половину как минимум, автор посчитал нужным немного запутать нас и дать более расширенный вариант.
В общем, еще одна задача на мышление хакера. С кодом все в порядке (насколько это возможно для примера), но дело в другом. Сможете сломать контракт?
Решение
#task
👍1
Простая, но опасная
Задача была помечена, как High Risk. Достаточно прочитать код внимательно, чтобы понять, в чем тут дело.
Решение
А решение уместиться в три слова: memory не storage. Обновление данных во временных переменных, не приводит к их обновлениям в основной памяти.
#task
Задача была помечена, как High Risk. Достаточно прочитать код внимательно, чтобы понять, в чем тут дело.
Решение
👍2
Задача с двумя проблемами
В данной задаче существует две проблемы: одна официальная из отчета, другая, замеченная пользователями. Вероятнее, всего вторая проблема была защищена в не представленном коде, но это не точно. Сможете найти обе?
Решение
Официальный баг тот, что значение to не было проверено на нулевой адрес. В принципе популярная проблема. Вторая более сложная и заметить ее могут только опытные разработчики. Дело в незащищенном преобразовании (casting) с uint256 в uint96, из-за чего итоговая сумма может быть не такой, как планировалось.
#task
В данной задаче существует две проблемы: одна официальная из отчета, другая, замеченная пользователями. Вероятнее, всего вторая проблема была защищена в не представленном коде, но это не точно. Сможете найти обе?
Решение
👍2
Задача для новичков
Еще одна простая задача, которая имеет статус Med Risk. Ее также можно назвать логической.
Решение
Ранее созданный market может быть переписан, так как нет проверок на существующие.
#task
Еще одна простая задача, которая имеет статус Med Risk. Ее также можно назвать логической.
Решение
👍2🔥1
Задача с популярным багом
Сегодня уже была одна задача, где не хватало одной популярной проверки. Угадали?
Решение
Нужна очередная проверка на нулевой адрес для beneficiary.
#task
Сегодня уже была одна задача, где не хватало одной популярной проверки. Угадали?
Решение
👍3
На внимательность
К этой задаче я обращался несколько раз, так как не мог понять, в чем может быть дело. Все оказалось очень просто. Поняли?
Решение
Так как функция имеет дело с msg.value то ее требуется определить как payable. Без этого она будет откатываться. Все просто.
#task
К этой задаче я обращался несколько раз, так как не мог понять, в чем может быть дело. Все оказалось очень просто. Поняли?
Решение
🔥2
Читаем отчеты вместе. 10
Вместе со всем не останавливаемся и продолжаем хреначить аудиторские отчеты!
Отчеты, как и задачи, помогают нам распознавать проблемы в коде там, где другие разработчики пропускают их. Совершенно не важно, сможете ли вы найти ответ на задачу, или распознать уязвимость в конкурсном аудите, в обучении важно, какой урок вы из этого извлечете.
Да, я и сам не мог решить многие задачи, провалил пару тестовых аудитов на вакансию, однако теперь и эти баги / ошибки / логические проблемы у меня в списке того, на что нужно обращать внимание.
Только за январь мы просмотрели уже около 15 различных примеров задач, 9 отчетов и массу других штук для профессии аудитора. Если вы двигались вместе со мной, то это уже как минимум 30+ моментов, которые мы сможем распознать в последующих задачах и аудитах! Главное регулярно заниматься!
Читаем вместе очередной отчет!
#report #audit
Вместе со всем не останавливаемся и продолжаем хреначить аудиторские отчеты!
Отчеты, как и задачи, помогают нам распознавать проблемы в коде там, где другие разработчики пропускают их. Совершенно не важно, сможете ли вы найти ответ на задачу, или распознать уязвимость в конкурсном аудите, в обучении важно, какой урок вы из этого извлечете.
Да, я и сам не мог решить многие задачи, провалил пару тестовых аудитов на вакансию, однако теперь и эти баги / ошибки / логические проблемы у меня в списке того, на что нужно обращать внимание.
Только за январь мы просмотрели уже около 15 различных примеров задач, 9 отчетов и массу других штук для профессии аудитора. Если вы двигались вместе со мной, то это уже как минимум 30+ моментов, которые мы сможем распознать в последующих задачах и аудитах! Главное регулярно заниматься!
Читаем вместе очередной отчет!
#report #audit
👍2
Особенность try/catch
Из Твиттера узнал, что с try/catch могут возникать проблемы при разработке кода. Дело в том, что если целью является адрес без кода (EOA), то выполнение функции откатывается.
Это связано с тем, что опкод EXTCODESIZE идет впереди самого call, и откатывает транзакцию, если кода нет.
Другими словами, try/catch не только может поймать откат, но и быть его причиной.
#trycatch
Из Твиттера узнал, что с try/catch могут возникать проблемы при разработке кода. Дело в том, что если целью является адрес без кода (EOA), то выполнение функции откатывается.
Это связано с тем, что опкод EXTCODESIZE идет впереди самого call, и откатывает транзакцию, если кода нет.
Другими словами, try/catch не только может поймать откат, но и быть его причиной.
#trycatch
👍1
Минт токенов в Foundry
Сегодня узнал, что Foundry позволяет использовать специальную команду, чтобы пополнить токенами счет.
Раньше, после создания контракта, нужно было делать дополнительные манипуляции, чтобы пополнить свой счет нужными токенами для последующих действий, а теперь можно выполнить такую команду:
deal({token: address(token), to, mgs.sender, give: amount});
Это прекрасно ускоряет проведение тестов. Пример на скрине.
#foundry #token
Сегодня узнал, что Foundry позволяет использовать специальную команду, чтобы пополнить токенами счет.
Раньше, после создания контракта, нужно было делать дополнительные манипуляции, чтобы пополнить свой счет нужными токенами для последующих действий, а теперь можно выполнить такую команду:
deal({token: address(token), to, mgs.sender, give: amount});
Это прекрасно ускоряет проведение тестов. Пример на скрине.
#foundry #token
👍3
Опасность с approve токена
Не помню поднималась ли эта тема на канале, но на всякий случай еще раз напомню про опасность, которая может быть с функцией approve, которая разрешает трансфер токенов от третьего лица.
Допустим, Алиса дала разрешение (approve) Бобу на перевод 100 токенов с ее счета. А затем передумала и понизила максимальную сумму до 50 токенов.
И все было бы ок, если бы Боб был порядочным. Но в данном примере это не так.
Как только Боб заметил, что Алиса запустила транзакцию на понижение, он отправил свою транзакцию на перевод вперед Алисы (фронтран), а затем еще одну, уже после изменения approve. Таким образом он получил сразу 150 токенов от Алисы, хотя максимальное разрешение было на 100.
В общем, поэтому в некоторых токенах, пользователю сначала нужно сделать нулевой approve, а потом изменять значение на новое.
#approve #token
Не помню поднималась ли эта тема на канале, но на всякий случай еще раз напомню про опасность, которая может быть с функцией approve, которая разрешает трансфер токенов от третьего лица.
Допустим, Алиса дала разрешение (approve) Бобу на перевод 100 токенов с ее счета. А затем передумала и понизила максимальную сумму до 50 токенов.
И все было бы ок, если бы Боб был порядочным. Но в данном примере это не так.
Как только Боб заметил, что Алиса запустила транзакцию на понижение, он отправил свою транзакцию на перевод вперед Алисы (фронтран), а затем еще одну, уже после изменения approve. Таким образом он получил сразу 150 токенов от Алисы, хотя максимальное разрешение было на 100.
В общем, поэтому в некоторых токенах, пользователю сначала нужно сделать нулевой approve, а потом изменять значение на новое.
#approve #token
👍1
Собрание подсказок по газу
Нашел интересный пост, где собраны 20 подсказок по экономии газа. Но, что самое интересное, они покрывают многие ошибки из аудиторских отчетов на code4rena и шерлок.
Другими словами, запомнив все эти подсказки, вы сможете сами писать хорошие gas reports.
Изучаем и запоминаем!
#gas
Нашел интересный пост, где собраны 20 подсказок по экономии газа. Но, что самое интересное, они покрывают многие ошибки из аудиторских отчетов на code4rena и шерлок.
Другими словами, запомнив все эти подсказки, вы сможете сами писать хорошие gas reports.
Изучаем и запоминаем!
#gas
❤4
Читаем отчеты вместе. 11
Ну, и в завершении дня, традиционный аудиторский отчет.
На этот раз мы посмотрим на последний отчет от Trust, затем вернемся к code4rena и остальным.
Читаем отчет вместе!
#report #audit
Ну, и в завершении дня, традиционный аудиторский отчет.
На этот раз мы посмотрим на последний отчет от Trust, затем вернемся к code4rena и остальным.
Читаем отчет вместе!
#report #audit
Gatekeeper Three от Ethernaut
Спасибо @arsln_galimov, что скинул в чат сообщества ссылку на прохождение новой задачи от Ethernaut. Самое классное тут, что в видео показан способ решения с Foundry и его cast командами.
Сама задача, в принципе, довольно простая. Первый модификатор решается с помощью опечатки в функции, второй - с помощью открытой информации в блокчейне, и третий - откатом приема Эфира на контракт хакера.
Из данного видео можно понять как работают следующие команды в Foundry:
1) Отправить транзакцию в напрямую в сеть (тестовую сеть) с помощью cast send и rpc ссылки;
2) Запросить информацию о конкретном блоке с помощью cast block;
3) Отправить Эфир на контракт;
4) Проверить баланс контракта;
5) Сделать деплой своего контракта в тестовую сеть с помощью forge create;
В общем, очень показательное видео для тех, кто хочет освоить Foundry.
Само видео прохождение.
Приятного просмотра!
#ethernaut #foundry
Спасибо @arsln_galimov, что скинул в чат сообщества ссылку на прохождение новой задачи от Ethernaut. Самое классное тут, что в видео показан способ решения с Foundry и его cast командами.
Сама задача, в принципе, довольно простая. Первый модификатор решается с помощью опечатки в функции, второй - с помощью открытой информации в блокчейне, и третий - откатом приема Эфира на контракт хакера.
Из данного видео можно понять как работают следующие команды в Foundry:
1) Отправить транзакцию в напрямую в сеть (тестовую сеть) с помощью cast send и rpc ссылки;
2) Запросить информацию о конкретном блоке с помощью cast block;
3) Отправить Эфир на контракт;
4) Проверить баланс контракта;
5) Сделать деплой своего контракта в тестовую сеть с помощью forge create;
В общем, очень показательное видео для тех, кто хочет освоить Foundry.
Само видео прохождение.
Приятного просмотра!
#ethernaut #foundry
👍1