Mosaique by Arthur Gerkis @ax330d

1,045 views
1,002 views

Published on

PHP image conversion filters bypass

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,045
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mosaique by Arthur Gerkis @ax330d

  1. 1. http://0 416d73.name 0.6Crime on he ireГлавна Контакты РаботыБезопасность «Мозаика атак из загрузки картинок» 18 J ne, 11 При аудите веб-приложений, нередко в функционале присутствует загрузка картинок в профиль. Сегодня, казалось бы, никого не удивишь правилами хорошего тона безопасной загрузки и обработки картинок. Тем не менее, не всегда проверки оказываются достаточными, тем самым оставляя лазейки для злоумышленников. А недавно я наткнулся на не то, чтобы новую, но интересную комбинацию возможностей вкупе с разного рода ограничениями.Наиболее существенным ограничением в исследуемом приложении оказалось изменение размера картинок. Даже если картинка соответствует требуемымширине и высоте, то вс -равно она насильно прогоняетя через PHP функцию, тем самым сильно изменяя порядок и сами байты файла. В общем, ситуациятакова: допускаются картинки определ нного размера; только в определ нную папку; в приложении есть проверка картинки при помощи PHP-функции - действительно ли пользователь грузит картинку, а не что-либо другое; в итоге изменение ширины и высоты картинки;Через веб-интерфйес вс выглядит пуленепробиваемо, однако, бронежилет отказался не надетым на голову. Я набросал перловый скрипт, который делаетзапросы напрямую к приложению, и тут выяснилось, что картинки можно загружать с произвольным расширением. Думал, припишу PHP-расширение идело в шляпе, но не тут-то было. Сервер настроен так, что в папке картинок *.php и еже с ним, вс отдавалось клиенту, как файл.Что можно сделать в такой ситуации? Первое, что мне пришло в голову, это хранимая XSS. Сохранив картинку, как html-файл, можно получитьжелаемое. Нам необходимо hex-редактором вставить свой вектор таким образом, чтобы его не покор жили PHP-функции. Немного ограниченный, ноработоспособный вариант "обхода" ресайза картинок, это повторная загрузка уже обработанной картинки. Таким образом будет видно, какие байты точносидят на месте, а какие подвергаются изменениям и тогда можно соорудить нужный вектор. На картинке показан вектор, написанный в качестве PoC.Единственное ограничение, это длина вектора, но не шибко существенное. То есть, атака тут выглядит так:ht:/2.../ethm#lr( s; tp/17001ts.tlaet s)
  2. 2. Но это ещ не вс . Не забываем про SSI. Тут тоже вс просто - hex-редактором вставляем что хотим и загружаем картинку с расширением shtml. Самоезаветное это, конечно, выполнение системных команд, типа<-# e cd"s-a-> !-e c m=l l"-Но если не работает по каким-то причинам (допустим, nginx не поддерживает), то можно попробовать и локальный инлкуд файлов.<-#nld fl=qet.h"- !-icue ie" r pp->d0znpp предложил идею, что можно организовать брутфорс файлов, если запрашивать файл динамически:<-#nld fl=$UR_TIG-> !-icue ie"QEYSRN"-Тогда запрос будет выглядеть как-то так:ht:/2.../etstl/iet_nld.h tp/17001ts.hm?fl_oicueppСтоит напомнить, какая разница между file и virtual - первый параметр включает сам файл, второй делает запрос.Вот таким образом, всего лишь при возможности определить сво расширение картинке, можно получить целый букет уязвимостей (или возможностей) -XSS, выполнение системных команд, LFI или произвольного PHP-кода.PS: также следует обратить внимание на то, как сконфигурирован nginx: https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/ еги: XSS, LFI, SSI, PHP | показов: 887

×