Capture The Ether. Math
Я все таки решил просмотреть задачи до конца, чтобы знать другие возможности по уязвимости контрактов, которые могут перетечь в более современные версии.
Задача 1
Простое задание на overflow. Мы вызываем перегрузку числа через 2256–1 / 1018, рассчитываем, сколько нужно передать wei, и взываем функции в контракте buy() и sell().
Такая перегрузка уже не актуальна для Solidity 0.8.
Задача 2
Еще один underflow с подключением стороннего кошелька для проведения транзакций, для которого делаете approve() на проведение транзакций. Затем используете баг в _transfer(), перегружая чужой кошелек, и затем перекидываете себе 1 млн токенов.
Задача 3
Тут условия задачи поначалу меня немного смутили. За кого я должен играть? За пользователя, который положил Эфир и хочет снять его без комиссии пораньше, или за другого пользователя, который получает комиссию? Все решилось пока я не нашел строчку с расчетом суммы снятия в collectPenalty(). Очередной overflow.
Нужно лишь каким-то образом пополнить баланс контракта. Может selfdestruct()?
Задача 4
Эта задание также не актуально для версий старше 0.6. Здесь нужно знать, что через переполнение динамического массива можно получить доступ к слотам памяти и переписать их. Подобную задачу мы решали в ethernaut.
Задача 5
Только вчера я делал пост про уязвимость в struct, и вот столкнулся с задачей, где это показывается. Все как и в посте: donate() делает запись не структуры, а именно слотов памяти. Осталось только правильно отформатировать наш адрес, чтобы он сохранился в слот owner.
От меня
последнюю задачу решим вместе с другим блоком. Она объединяет несколько способов взлома из предыдущих задач. Тоже все понятно, но, возможно, придется чуть более подробно ее расписать.
#capture #cte
Post #476
180
- 👍 1