Ethernaut. Задачи 13, 18 и 26
Три задачи из всего списка, две из которых я так и не смог понять (пока что), а другую просто не хочу разбирать.
Gatekeeper One
В этой задаче нам нужно пройти через три модификатора.
Ссылка на задачу
В чем суть?
Тут нужно хорошо разбираться в побитовых операциях и конвертации.
Первые ворота проходятся обычным созданием стороннего контракта и вызовом функции оттуда. Вторые - брутфорсом газа, как в примере ниже (нашел на просторах интернета):
function lettMeIn() public external {
for (uint256 i=0; i<120; i++) {
(bool success, bytes memory data) = address(levelAddress).call{gas: i+150+8191*3}(abi.encodeWithSignature("enter(bytes8)", key));
if(success){break}
}
}
где, 120 просто рандомное число, для ограничения итераций, а в gas: i+150+8191*3 :
i - номер итерации,
150 - push opcode из дебага,
8191 - модула,
3 - стоимость газа push.
Я видел также решения, которые подбирались вручную, но мне хотелось автоматизировать это.
А вот с последним модификатором я завис. Пока что, конвертации не мое.
‼️ ВАЖНО! Если кто-то может расписать объяснение по третьему модификатору (не накидать ссылок, а именно написать полноценный пост разбор), я буду очень признателен и выложу на канал!
Magic Number
В этой задаче нам нужно написать код контракта, который не будет превышать 10 опкода.
Ссылка на задачу
В чем суть?
Решение задачи крайне простое: нужно вывести число 42. Но обычная функция "весит" слишком много, assembly чуть меньше, но все равно много. Поэтому требуется всю функцию переписать в форме опкода.
С опкодом я еще не сталкивался ранее, и та информация, что попадалась, не пролила свет. Можно было бы тупо скопипастить решение сюда, но я бы не смог его разобрать и объяснить.
Вернусь к ней как-нибудь позже.
‼️ВАЖНО! Если кто-то может рассказать про опкод подробнее в посте / статье / видео, я буду очень признателен. Это поможет всем участникам канала чуть больше разобраться в этой теме.
DoubleEntryPoint
В этой задаче нам нужно обнаружить уязвимость контракта и зарыть ее с помощью контракта Forta.
Ссылка на задачу
В чем суть?
Признаться честно, я просто не хочу решать эту задачу. Не потому, что она сложная, а скорее из-за контрактов Forta. К самой компании я претензий не имею, но сейчас у меня цель научиться обнаруживать уязвимости в контрактах, а не обучаться новым сервисам.
А эта задача составлена в партнерстве openzeppelin и forta, на мой взгляд, чтобы пользователи узнали о forta и начали использовать его.
Говоря кратко об уязвимости в контракте, то обратить внимание нужно на функцию transfer() в контракте LegacyToken, которая позволяет обменивать токены DET (или underlying), которые как бы нельзя трогать, вместе с LegacyToken. Эту дыру нам и предлагают закрыть с Forta.
Далее мы попробуем порешать задачи с проекта Damn Vulnerable Defi.
#ethernaut
Post #438
196
- 🔥 2