PDA

Просмотр полной версии : Pixload: вредоносный скрипт в изображении


Vertigo
14.10.2019, 09:46
Добрый день,Уважаемые Форумчане и Друзья.
Когда-то стали известны способы размещения вредоносного кода в изображении.
Немногим позднее появилась атака Polyglot,когда вредоносный файл одновременно является изображением и JavaScript-кодом.

В основном,это касалось файлов BMP,при этом,2 первых байта представляли 16-ричное представление символов ВМ в изображении ВМP.
Далее,4 байта отвечают за размер,затем 4 нулевых байта и байты,отвечающие за смещение данных.
При выполнении техники Polyglot,контролируется размер изображения,а 16-ричные символы представляются так,чтобы компьютерами интерпретировались иначе.
Т.е.,чтобы выполнялись как код.

Соответственно,появился генератор полезной нагрузки Pixload,который создал Alexandr Savca (chinarulezzz).
И который представляю Вашему вниманию.
Pixload умеет сгенерировать нагрузку в файлах BMP,GIF,JPG и PNG .
Работает он как с дефолтными файлами,которые прилагаются в его директории,так и может начинять небольшие произвольные файлы соответствующего формата.
В отличии от других аналогичных техник,файлы не требуется конвертировать в иконки и т.п.

Если кому потребуется начинка из shell-кода х86 как в старые добрые времена,то смотрим здесь и здесь
Другие полезные ссылки для информации Вы найдёте на странице автора

Вся информация предоставлена исключительно в рамках ознакомления и изучения проблем информационной безопасности.

Категорически запрещается применение рассматриваемого инструмента в незаконных целях.

Установка:

Код:



# apt install libgd-perl libimage-exiftool-perl libstring-crc32-perl
# git clone https://github.com/chinarulezzz/pixload.git
# cd pixload


Использование:
Если работать с дефолтными данными и произвольный выходной файл отсутствует,то при следующем генерировании,такой файл перезапишется.
Если имеется скачанный произвольный выходной файл,то указываем на выходе его название,и нагрузка запишется в него.
Для удобства поместите такой файл в директорию инструмента.
1) Для файлов BMP

# ./bmp.pl -output file.bmp


2) Для JPG 2 вида нагрузки,либо в параметр COMMENT,либо DQT table
И именно для данного типа файлов существует лимитирование нагрузки в 64 байта и требование,чтобы файл был произвольным.

Код:



# ./jpg.pl -place DQT -output file.jpg
# ./jpg.pl -place COM -output file.jpg


3) Для PNG

# ./png.pl -output file.png


4) Для GIF

# ./gif.pl -output file.gif


Вот пример изображения
После генерирования полезной нагрузки,размер в свойствах останется неизменным,но само изображение примет минимальный размер.
Сам процесс можно видеть на главном скриншоте.

Опасность такие файлы представляют для посетителей ресурсов,у которых,особенно присутствует XSS-уязвимость.
Например,находятся вот таким способом уязвимые ресурсы по доркам.

Наличие уязвимости позволяет даже себя любимого вывести на главную страницу.
Загружаются файлы если это позволяется и выполняется атака через браузеры при взаимодействии с файлом.
Мы конечно не станем ничего никуда грузить и заниматься вредительством.

Защитой от подобной атаки служит по-прежнему контроль javascript в браузере за счёт дополнений.
И при изучении файла hex-редактором ,а лучше,анализатором пакетов,можно сразу увидеть,что с файлом что-то не так и виден в нём скрипт.

На этом обзор завершаю,всех благодарю за внимание и до новых встреч.

ZodiaC
28.10.2019, 19:18
Если я правильно понял, браузер отрендерит картинку и алерт должен появиться ?

Vertigo
29.10.2019, 09:23
Zodiac сказал(а):

Если я правильно понял, браузер отрендерит картинку и алерт должен появиться ?


Отчасти да,но возможны варианты.
Ведь одно из принципиальных отличий атак с poliglot в том ,что не требуются после загрузки файла сторонние программы для вызова содержимого.
Смысл в превращении типа обычного файла в переменную javascrypt с присвоением нагрузки.
Если скрипт к примеру будет иметь такой вид



,то пользователь через браузер будет видеть изображение.
А если к скрипту добавляется такой элемент



,то вместо изображения будет выполняться скрипт.

ZodiaC
30.10.2019, 16:05
Скрипт в картинке , в консоли браузера получаю:
Chrome - Uncaught SyntaxError: Invalid or unexpected token -
Firefox - SyntaxError: illegal character -
Что я не так делаю ?

Vertigo
02.11.2019, 10:37
Zodiac сказал(а):

Что я не так делаю ?


Хороший вопрос.Такие ошибки стали получать разрабы ,которые работают с javascrypt.
Связано это то ли с обновлением политик безопасности в браузерах,то ли с наличием в коде недопустимых знаков.
Об этом можно посмотреть здесь и здесь.
Также методом проб и ошибок изучаются техники bypass с применением таких скриптов.
Можно попробовать так




Либо использовать более сложную конструкцию :


%0ajavascript:`/*\"/*--><svg onload='/*`


Подробнее о технике обхода и фильтрации описано там

ruby
26.11.2019, 17:19
Хотел протестировать. Получаю вот такую ошибку в консольке.


Refused to execute script from 'http://localhost/tr.bmp' because its MIME type ('image/x-ms-bmp') is not executable.


Инжект скрипта с картинки таким образом: