• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Эксплуатация XSS с помощью Javascript/JPEG Polyglot

timeshout

RAID-массив
Пользователь
Регистрация
29.06.2022
Сообщения
62
Реакции
83
Изображение JPEG представляется в виде последовательности сегментов, где каждый сегмент начинается с заголовка. Каждый заголовок начинается с некоторого байта. Полезная нагрузка, следующая за заголовком, отличается в зависимости от типа заголовка. Ниже перечислены распространенные типы маркеров JPEG:

Код:
0xffd8: “Start of Image”,
0xffe0: “Application Default Header”,
0xffdb: “Quantization Table”,
0xffc0: “Start of Frame”,
0xffc4: “Define Huffman Table”,
0xffda: “Start of Scan”,
0xffd9: “End of Image”


Каждый двоичный файл содержит несколько заголовков. Они очень важны для файла, поскольку определяют специфическую информацию о файле. За большинством заголовков следует информация о длине. Это говорит нам о длине конкретного сегмента.

Начало заголовка изображения содержит FF D8. Если мы его не видим, то можем предположить, что это какой-то другой файл. Другим важным маркером является FF D9, который указывает на конец изображения.

Чтобы полезная нагрузка выглядела как легитимный файл JPEG, мы добавим длину заголовка, заголовок комментария, нулевые байты, а затем наш вектор атаки javascript.

Допустим, вектор атаки */=alert("XSS")/* Преобразование в шестнадцатеричную систему будет выглядеть следующим образом.

1656898146938.png


The payload in hex:
Код:
2A 2F 3D 61 6C 65 72 74 28 22 58 53 53 2E 22 29

Мы можем использовать hex-редактор для внедрения javascript в метаданные изображения. Это работает потому, что браузеры интерпретируют код при преобразовании изображения в HTML.

test.jpg:
1656898203588.png


У меня есть изображение test.jpg, а ниже приведен hexdump test.jpg. С помощью редактора ghex мы собираемся заменить некоторые шестнадцатеричные символы и сохранить их.

1656898242018.png


Как мы знаем, первый FF D8 - это начало изображения, следующие два байта представляют собой два последующих байта, 00 10 - длина заголовка JPEG, которая в десятичном эквиваленте составляет 16 байт.

Time for Injection

Мы собираемся внедрить нашу полезную нагрузку между FF E0 и FF DB . Начнем с 2F 2A, что является шестнадцатеричным представлением /*

1656898304481.png


Если вы заметили, мы только что заменили 00 10 на 2F 2A, а десятичный эквивалент шестнадцатеричного 2F 2A составляет 12074 байта. Таким образом, теперь заголовок изображения изменился с 16 байт до 12074 байт.

1656898327184.png


Из скриншота выше видно, что размер нашей полезной нагрузки составляет 18 байт, поэтому мы должны заполнить оставшиеся байты нулями, что составляет 12074-16-18=12040 байт.

1656898353988.png


Приведенные выше команды прочитают test.jpg, вставят нашу полезную нагрузку между 2F 2A FF DB изменят hex в буфер, добавят 12040 нулевых байт и запишут в файл test_new.jpg. Теперь в редакторе ghex закройте тег комментария перед FF D9

1656898382097.png





Код:
Code to execute image as javascript:-
<script charset="ISO-8859-1" src="test_new.jpeg">





В Firefox при использовании набора символов UTF-8 для документа он повреждает polyglot, когда включается в качестве скрипта! Чтобы заставить скрипт работать, мы должны указать ISO-8859-1 charset в теге скрипта, и он будет выполняться нормально.




Exploiting XSS with Javascript/JPEG Polyglot
 
Я правильно понимаю, чтобы заставить скрипт заработать, нужно подключить изображение на сайте только таким образом ?
Код:
Code to execute image as javascript:-
<script charset="ISO-8859-1" src="test_new.jpeg">
 
Я правильно понимаю, чтобы заставить скрипт заработать, нужно подключить изображение на сайте только таким образом ?
Код:
Code to execute image as javascript:-
<script charset="ISO-8859-1" src="test_new.jpeg">
код для выполнения изображения как javascript

да
 
код для выполнения изображения как javascript

да


Скажу как кодер, в моей практике не встречал сайтов где есть вывод изображений по такому коду. Статья хорошая, особенно полезно было знать как устроено изображение jpeg , и как можно его модифицировать . Но думаю, в практике не возможно по такому принципу внедрить на сайт свой скрипт через аплоадер например. Было бы познавательно узнать, как можно заставить работать свой скрипт если он внедрен в картинку и загружен на сайт , а на сайте картинка отображается обычном тегом
HTML:
<img />
.
Но все равно спасибо за статью, плюс заслужил ! 🙃
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх