Или, может, подлиннее?
Эта задача на знание особенностей Solidity и EVM. Вообще, проблема отсюда часто встречается в базовых описаниях уязвимостей смарт контрактов, и была даже в одной из задач Ethernaut! Поняли, где тут проблема?
Решение
А проблема в том, чот каждый майнер имеет доступ к переменной index. Другими словами, генерацией случайного числа тут можно управлять благодаря block.difficulty и block.timestamp.
Больше информации можно получить тут .
#task
Эта задача на знание особенностей Solidity и EVM. Вообще, проблема отсюда часто встречается в базовых описаниях уязвимостей смарт контрактов, и была даже в одной из задач Ethernaut! Поняли, где тут проблема?
Решение
Больше информации можно
И последняя на вечер
Прекрасный пример, когда одна функция может содержать в себе массу проблем. Честно признаться, основную проблему я и не заметил в начале... Сможете найти их все?
Решение
Во-первых, нет проверки на вводимый адрес to. В-вторых, админ может пересылать деньги от имени другого пользователя. В-третьих, с _data админ может делать исполнение функций в контрактах других пользователей, если таковые имеются. Ну, и самое главное, что я не увидел, это банальное отсутствие payable в to. Другими словами, функция всегда будет откатываться, если msg.value > 0.
Будьте внимательны со своим кодом!
#task
Прекрасный пример, когда одна функция может содержать в себе массу проблем. Честно признаться, основную проблему я и не заметил в начале... Сможете найти их все?
Решение
Будьте внимательны со своим кодом!
👍2
День задач на канале!
По новой прекрасной традиции сегодня, в понедельник, на канале будет опубликовано множество новых интересных задач.
Задачи помогают нам начать еще лучше разбираться в коде и видеть не только прямые уязвимости, но и логические. Так или иначе в голове отложатся правила и паттерны, которые сделают наш код безопаснее.
Первая задача на сегодня довольно сложная. Здесь представлена именно логическая уязвимость. Сможете понять какая?
Решение
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
Большой задачник данного канала
Собрал все задачи и CTF, которые когда-либо появлялись на канале, в один пост.
Сохраните этот пост к себе в Избранное и проходите их в своем темпе.
Задачи канала
Задача 1 — Задача 2 — Задача 3
Задача 4 — Задача 5
Задача 6 — Задача 7 — Задача 8
Задача 9 — Задача 10
Задача 11 — Задача 12 — Задача 13 — Задача 14 — Задача 15
Задача 16 — Задача 17 — Задача 18 — Задача 19 — Задача 20
Задача 21 — Задача 22 — Задача 23 — Задача 24 — Задача 25
Задача 26 — Задача 27
Задача28 — Задача 29 — Задача 30 -- Задача 31 — Задача 32
P.S. Для некоторых задач решение находится сразу за скрином следующим постом.
Популярные и не только CTF
Capture the Ether — The Ethernaut — CryptoZombies — Damn Vulnerable DeFi
DeFiHack — CryptoHack — EtherHack — Cipher Shastra
Speedrun Ethereum — CTF Blockchain Challenges — Mr Steal Yo Crypto
CTF Protocol — QuillCTF
CTF для практики Foundry
Damn Vulnerable DeFi — Fifty years Capture the Ether — Ethernaut CTF
DeFiHackLabs -- DeFiVulnLabs
Подборка уязвимостей
Hight risk — Medium Risk — All the rest
Данной подборки задач должно хватить на два - три месяца продуктивной ежедневной учебы. Даже если вы не планируете становиться аудитором, то прохождение данных задач сможет повысить ваш навык разработки смарт контрактов.
Приятного обучения!
#ctf #task
Собрал все задачи и CTF, которые когда-либо появлялись на канале, в один пост.
Сохраните этот пост к себе в Избранное и проходите их в своем темпе.
Задачи канала
Задача 1 — Задача 2 — Задача 3
Задача 4 — Задача 5
Задача 6 — Задача 7 — Задача 8
Задача 9 — Задача 10
Задача 11 — Задача 12 — Задача 13 — Задача 14 — Задача 15
Задача 16 — Задача 17 — Задача 18 — Задача 19 — Задача 20
Задача 21 — Задача 22 — Задача 23 — Задача 24 — Задача 25
Задача 26 — Задача 27
Задача28 — Задача 29 — Задача 30 -- Задача 31 — Задача 32
P.S. Для некоторых задач решение находится сразу за скрином следующим постом.
Популярные и не только CTF
Capture the Ether — The Ethernaut — CryptoZombies — Damn Vulnerable DeFi
DeFiHack — CryptoHack — EtherHack — Cipher Shastra
Speedrun Ethereum — CTF Blockchain Challenges — Mr Steal Yo Crypto
CTF Protocol — QuillCTF
CTF для практики Foundry
Damn Vulnerable DeFi — Fifty years Capture the Ether — Ethernaut CTF
DeFiHackLabs -- DeFiVulnLabs
Подборка уязвимостей
Hight risk — Medium Risk — All the rest
Данной подборки задач должно хватить на два - три месяца продуктивной ежедневной учебы. Даже если вы не планируете становиться аудитором, то прохождение данных задач сможет повысить ваш навык разработки смарт контрактов.
Приятного обучения!
#ctf #task
🔥9👍2
Задача 33
На канале ранее уже вышло 32 задачи! На годовщину канала можно будет выпустить большой задачник для аудитора в pdf, по которой смогут учиться все желающие.
Ну, а пока, достаточно сложная задача с двумя уязвимостями. Сможете найти их?
Решение
Во-первых, из-за работы функции с memory, само состояние маппинга не будет обновлено, более того при работе с callback вызовом, в данном случае, возможна DoS атака.
#task
На канале ранее уже вышло 32 задачи! На годовщину канала можно будет выпустить большой задачник для аудитора в pdf, по которой смогут учиться все желающие.
Ну, а пока, достаточно сложная задача с двумя уязвимостями. Сможете найти их?
Решение
👍6❤1🔥1
Задача 34
Эта задача была помечена как Med Risk на code4rena.
Порой мне кажется, что подобные случаи 1 на 1000, а то и больше. Ну, какая-то слишком простая ошибка.
Решение
Все дело в transfer() и ее лимите на использование газа. Если в контракте принимающего будет fallback функция с дополнительными действиями при приеме эфира, то withdrawPayments() будет откатываться. В общем, лучше использовать call вызов.
#task
Эта задача была помечена как Med Risk на code4rena.
Порой мне кажется, что подобные случаи 1 на 1000, а то и больше. Ну, какая-то слишком простая ошибка.
Решение
❤7
Задача 35
Длинная задача на внимательность. Порой бывает, что разработчик отвлекается от написания кода и пропускает некоторые моменты. Поняли, в чем дело?
Решение
Разработчики забыли добавить модификатор к функции, из-за этого пользователи могут забирать токены в любое время.
#task
Длинная задача на внимательность. Порой бывает, что разработчик отвлекается от написания кода и пропускает некоторые моменты. Поняли, в чем дело?
Решение
❤1👍1
Задача 36
Задача от Immunefi. Как всегда они идут в ногу со временем. Уже несколько раз натыкался на эту проблему в других контрактах. Вроде, даже была подобная на канале ранее. Узнали?
Решение
Проблема кроется в переводе uint256 amount в uint160, из-за чего транзакция может откатиться. В этом случае лучше использовать сторонние библиотеки, типа safeCast.
#task
Задача от Immunefi. Как всегда они идут в ногу со временем. Уже несколько раз натыкался на эту проблему в других контрактах. Вроде, даже была подобная на канале ранее. Узнали?
Решение
❤4
Задача 37
И последняя на сегодня, снова же от Immunefi. Как подсказка: внимание на комментарий в коде!
Решение
Представленная функция являлась callback функцией флеш займа биржи dYdX. Дело в том, что любой пользователь мог использовать ее, чтобы переписать разрешение биржи на перевод всех ее токенов на адрес пользователя. Интересно, да?
#task
И последняя на сегодня, снова же от Immunefi. Как подсказка: внимание на комментарий в коде!
Решение
👍5❤1
Задача 38
И первая задача на сегодня из задачника Quill CTF. Если вы решали задачи Damn Vulnerable Defi, то скорее всего сможете быстро понять, в чем тут дело.
Если же нет, то маленькой подсказкой будет: не полагайтесь на баланс контракта в таких действиях.
Решение
UPD. Изначальное решение было не правильным. Смотрите обновленный пост ниже.
#task
И первая задача на сегодня из задачника Quill CTF. Если вы решали задачи Damn Vulnerable Defi, то скорее всего сможете быстро понять, в чем тут дело.
Если же нет, то маленькой подсказкой будет: не полагайтесь на баланс контракта в таких действиях.
Решение
UPD. Изначальное решение было не правильным. Смотрите обновленный пост ниже.
#task
👍4❤2👎1
Задача с shares
Достаточно распространенная проблема в контрактах. Как я помню, немного похожая задача уже была на канале ранее. Вряд ли ее сможет понять или решить новичок, так как тут уже нужно знать про возможную проблему.
Решение
По сути это очередная задача, где первый депозитор может сломать всю систему минта новых shares. Из-за того, что расчет самых первых shares идет по формуле Math.sqrt(baseTokenAmount * fractionalTokenAmount), хакер может добавить вначале, например, по 1 baseToken и 1 quoteToken, в итоге минт будет всего 1, исходя из формулы. Затем хакер добавляет 1е9 токенов каждого вида, из чего получает стоимость 1 wei LP токена равную 1е9 токенов base или quote.
И если нормальный пользователь захочет добавить свои токены в пул, то ему нужно будет указывать количество не менее 1е9 токенов, чтобы получить минт больше 0.
В таких случаях, при первом добавлении в пул рекомендуют делать минт 1000 токенов на нулевой адрес, чтобы избежать данной уязвимости.
#task
Достаточно распространенная проблема в контрактах. Как я помню, немного похожая задача уже была на канале ранее. Вряд ли ее сможет понять или решить новичок, так как тут уже нужно знать про возможную проблему.
Решение
И если нормальный пользователь захочет добавить свои токены в пул, то ему нужно будет указывать количество не менее 1е9 токенов, чтобы получить минт больше 0.
В таких случаях, при первом добавлении в пул рекомендуют делать минт 1000 токенов на нулевой адрес, чтобы избежать данной уязвимости.
❤4
Комментарий к задаче 38 от Quill CTF
Спасибо @SovaSlava за бдительность в решении задач на канале! В задаче 38, та, в которой я решил, что уязвимость в флеш займе, однако все оказалось куда сложнее.
Я сначала решил, что это просто выжимка из задачи, но оказалось, что это полноценный контракт для практики взлома, где по условию на контракте были 10 Эфиров, а у вас 1, и нужно было забрать все себе. Вот ссылка на задачу.
Даже не знаю, нужно ли расписывать все решение по шагам. Оставлю пока на самостоятельное изучение. Мало ли, кто-то проходит данный задачник сам и не хочет получить готовое решение.
Для остальных подсказка под спойлером.
Уязвимость здесь скрывается не в функции execute, как можно подумать при первом взгляде, а в withdrawAll. Грубо говоря, нам сначала нужно написать контракт атаки, с функциями receive() и отправки эфира обратно владельцу. Далее, делая депозит в 1 эфир и "жонглируя апрувами и перекидыванием баланса эфира" с нашего адреса на контракт атаки и обратно, получить весь баланс weth после нескольких итераций. Звучит немного запутано, но понять вы сможете только после хорошего вникания в задачу.
#ctf #quill #task
Спасибо @SovaSlava за бдительность в решении задач на канале! В задаче 38, та, в которой я решил, что уязвимость в флеш займе, однако все оказалось куда сложнее.
Я сначала решил, что это просто выжимка из задачи, но оказалось, что это полноценный контракт для практики взлома, где по условию на контракте были 10 Эфиров, а у вас 1, и нужно было забрать все себе. Вот ссылка на задачу.
Даже не знаю, нужно ли расписывать все решение по шагам. Оставлю пока на самостоятельное изучение. Мало ли, кто-то проходит данный задачник сам и не хочет получить готовое решение.
Для остальных подсказка под спойлером.
❤5