Маскируем код под изображение

Маскируем код под изображение

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 на выбранный вами сервер;


Report Page