Маскируем код под изображение
Mark LeinИзображения, которые мы загружаем в Интернете - это не только ваши фоточки которые несут ваше представление о жизни, но также то, что может нести код, чтобы украсть наши шифры изображений и наши данные.
Фотографии профиля, аватары и картинные галереи используются по всему Интернету. Все изображения несут данные цифрового изображения, а когда большинство несут метаданные об изменениях в камере или фотографии, не ожидается, что это действительно скроет вредоносный код.
Обычно файлы организованы в несколько разных частях.
Например, файлы изображений начинаются с уведомления о текущем типе файла образа изображения. Обычно это что-то вроде маркера «Старт-изображение», последовательности или номера, который показывает, как он будет следовать. Файлы 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.
Давайте начнем :
Загрузка и установка Imagejs
Давайте начнем клон репозитория git проекта. Напишите команды в этих примерах на терминал Kalin Linux.
git clone https://github.com/jklmnn/imagejs
Как только мы скопировали репозиторий, мы перейдем в каталог, используя приведенную ниже команду.
cd imagejs
Наконец, для компиляции программы мы просто запускаем:
make
Создаем наш файл JavaScript с нашим кодом
Открываем блокнот и пишем туда для примера
echo "window.alert("Ifud.ws rulez and putin huilo");"
Сохраняем файл как script.js
Встраивание JavaScript в изображение
Код 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>
Сохраняем файл как script.html (важно чтоб этот файл и файл script.js.gif находились в одной директории)
Открываем файл
Тег <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 на выбранный вами сервер;