Изображения, которые мы загружаем в Интернет – это не только фоточки, которые несут ваше представление о жизни, но также то, что может нести код, чтобы украсть наши шифры изображений и наши данные.
Например, файлы изображений начинаются с уведомления о текущем типе файла образа изображения. Обычно это что-то вроде маркера «Старт-изображение», последовательности или номера, который показывает, как он будет следовать. Файлы GIF начинаются с GIF87a или GIF89a, если рассматривать их как кодировку ISO 8859-1, начиная с шестнадцатеричного числа «47 49 46 38 37 61». После этих подписей соответствующий цвет соответствует цвету и расположению пикселей в изображении. Этих данных достаточно для создания полезного растрового изображения при добавлении в файл изображения. Однако в дополнение к этому видимому изображению метаданные, такие как EXIF, могут быть добавлены к частям маркера приложения после окончания данных изображения. После этих точек данные изображения открываются и закрываются как с помощью определенных представлений, так и после обработки данных не обрабатываются.
Вот так выглядит GIF-изображение, которое отображается как шестнадцатеричные значения:
Метаданные обычно появляются только при анализе пользователя, и таким же образом скрытый код отображается только в программе, которая ищет код для запуска. Эти данные часто содержат информацию о камере, информацию о местоположении или аналогичную информацию о фотографии, но в этом случае могут быть заполнены другим файлом или исполняемым кодом.
Несмотря на то, что скрытый контент включен в файл изображения, открывающие и закрывающие компоненты содержимого изображения по-прежнему ведут себя как стандартный образ, потому что достаточно отразить изображение программ просмотра изображений и эффективно отображать их.
Как можно использовать эту технику?
Веб-сайты, такие как форумы, хостинг-сайты или другие сайты с созданным пользователем контентом, обычно позволяют загружать изображения и публиковать текстовые или мультимедийные материалы. В некоторых случаях виджет, HTML-сценарий, можно добавлять к сообщениям пользователей или страницам. Сценарий может быть добавлен на сайт, который не должен быть из-за отсутствия проверки формы, используя сценарий escape, такой как HTML. Но даже если вы создаете свою собственную веб-страницу и файлы сценариев с других страниц, и эти сценарии пытаются получить доступ к куки-файлам в домене, где они размещены, дано. По этой причине, в качестве меры предосторожности, большинство сайтов не позволяют загружать файлы, но многие предоставляют вам изображения. И многие из них просто сохраняют изображение и висят (мы можем видеть наши). Поэтому, загружая JavaScript в изображение, он может размещаться на сайте сайта и выполняться с сервера сайта. Кроме того, этот метод значительно усложняет вредоносный JavaScript, даже если он используется на сервере, контролируемом атакующем, и может использоваться для покрытия действий фишинговой страницы.
Что мы можем сделать, запустив JavaScript, размещенный на целевом сервере?
JavaScript может содержать файлы cookie для проверки подлинности, быть уязвимыми для escape-последовательностей XSS для запуска большего количества JavaScript, загрузки программы в браузер и загрузки запросов или даже для кражи информации или кражи файлов cookie с других веб-сайтов, посещенных пользователем (при условии, что целевой компьютер обслуживает интеграцию, доступную на других веб-страницах) ). В этом примере простая проверка JavaScript используется для проверки работоспособности JavaScript, но это может быть изменено вредоносным кодом или даже инструментом BeEF.
Давайте начнем :
1) Загрузка и установка Imagejs
Давайте начнем клон репозитория git проекта. Напишите команды в этих примерах на терминал Kalin Linux.
git clone
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
Как только мы скопировали репозиторий, мы перейдем в каталог, используя приведенную ниже команду.
cd imagejs
Наконец, для компиляции программы мы просто запускаем:
make
Создаем наш файл JavaScript с нашим кодом. Открываем блокнот и пишем туда для примера
echo "window.alert("Ifud.ws rulez and putin huilo");"
Сохраняем файл как script.js.
Код JavaScript может быть встроен в любые файлы GIF, BMP, WEBP, PNM или PGF. Однако, в зависимости от пределов, на которые должно загружаться изображение, мы должны думать о том, как создается изображение.
Если изображение загружается в качестве изображения аватара или профиля на веб-сайте, мы должны убедиться, что файл не слишком большой и разрешение превышает максимальный размер. Если изображение встроенного JavaScript с помощью JavaScript масштабируется или сжимается на веб-сайте, или если сайт удаляет данные EXIF, функция кода не поддерживается; поэтому, если вы загружаете картинку, которая соответствует требованиям сайтов, вы будете записывать ее так, как если бы она была в размещенном месте без каких-либо изменений.
Использование Imagejs
После того, как вы нашли изображение, которое хотите вставить, вы можете разместить их, используя следующие параметры. Этот пример скрипта называется «script.js», а образ «image.jpg» – оба находятся в том же каталоге, что и программа imagejs, которую мы можем проверить, набрав ls.
Синтаксис начинается с запуска программы imagejs. Первый аргумент, в данном случае gif, указывает тип файла. Второй аргумент – это сценарий, который мы используем, а последний аргумент, следующий за -i, – это изображение, которое мы хотим изменить.
./imagejs gif script.js -i image.gif
Имя выходного файла в этом случае будет «Script.js.gif». Однако мы можем переименовать все, что мы выбираем.
Тестируем
Открываем блокнот и вставляем туда данный код HTML:
Код:
<html><img src= "script.js.gif"><script src= "script.js.gif"></script></html>
Тег <Img> был добавлен, чтобы показать, что изображение GIF по-прежнему полностью функционирует как изображение, но его можно пропустить, и скрипт будет работать.
Выполнение этого из файла работает, потому что файловые системы не задают типы файлов mime. Большинство современных веб-серверов устанавливают тип mime для файлов, которые они обслуживают, на основе расширения файла. Если это так, и веб-сервер задает тип mime изображения (например, image / gif), современные браузеры не будут пытаться запустить сценарий, потому что типы mime изображения не являются исполняемыми.
Атака
Теперь, когда мы нашли способ встраивать JavaScript в изображения, мы хотим посмотреть, что мы можем сделать с этим кодом JavaScript и как добавить его на живой веб-сайт.
Следующая команда попытается установить файлы cookie cookie на обслуживаемой веб-странице. Эти файлы cookie могут использоваться для имитации пользователей путем кражи их токенов аутентификации. Теперь, честно говоря, вещи, которые вы просто пишете сканерам, не приведут их к вам (вам придется написать команду, чтобы отправить их на свой сервер), но это будет служить доказательством простой концепции:
document.write ('cookie:' + document.cookie)
Наконец, нам нужно найти еще одну уязвимую область для атак XSS, где мы можем использовать наш тег <script>, чтобы обойти нашу проверку входа и загрузить изображение для распространения атаки или (более легко) как изображение (как скрипт) на нашей собственной веб-странице фишинга. В следующем примере мы добавили его в теги скриптов, следуя нашим этикеткам выхода аватаров 1337.gif и </ textarea>. После этого любой, кто просматривает этот профиль, опустошает свои файлы cookie в окна браузера. Замените вышеуказанный скрипт командой, которая тихо отправляет значения document.cookie на выбранный вами сервер:
Защита от нападения
Чтобы обеспечить защиту от такой атаки на стороне клиента, решение может быть таким же простым, как загрузка NoScript и привязка к надежным сайтам (например, CW), которые тратят большие деньги на защиту от атак XSS. Однако трудно отличить хорошие и плохие сценарии. Ответственность за предотвращение вредоносных инъекций JavaScript лежит на плечах веб-разработчиков.
Это то же самое, что и очистка входа в систему и управление привилегиями пользователей для веб-разработчиков, чтобы правильно избегать любого типа инъекций JavaScript, PHP или SQL. Если пользователь имеет возможность удаленно выполнять код в любой момент, большая часть войны уже потеряна. Убедитесь, что ваш веб-сервер обновлен и правильно настроен для обслуживания изображений / * mime-типов для любого файла изображения, который у вас есть. Это может работать немного лучше, но лучше всего пропустить любые данные EXIF из любых загруженных пользователем изображений ... или если вы не знаете, как это сделать, просто используйте одну из библиотек изменения размера изображения, например ImageMagick, для изменения размера и повторного сжатия всех загруженных изображений , он обычно извлекает данные EXIF как часть процесса.