Дэн Камински стартовал новый проект

Известный исследователь, подаривший миру, например DNS уязвимость стартовал новый проект.

http://recursion.com/

A new mechanism for preventing string injections, now open for community review..

Как написано на самом сайте, это некий новый механизм предотвращения атак внедрения строковых выражений. К которым относятся инъекции СУБД, межсайтовый скриптинг, и всяческие его разновидности.

Дэн не просто стартовал проект, а основал целую компанию вместе с Michael Tiffany и Henry Bar-Levav.

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

Скачать и проверить софт можно по ссылке http://recursion.com/interpolique-0.1.tar.gz . Устанавливается на сервер и работает как WAF.

Пока руки до этого продукта не дошли, но уж очень интересно ;)

Презентация идеи ниже: [Read the rest of this entry...]

Tags: , , ,

Leave a Comment

Новый раздел

Решил открыть особый раздел сродни Лебедеву.
Публиковать буду только свой личный опыт, без копипастов.
Обновил сразу двумя находками за последнюю неделю.

Leave a Comment

Спам, который тронул за душу

Пришел недавно спам вот такого содержания:

Received: from * ; Fri, 23 Apr 2010 08:12:27 +0000
Received: from [122.144.5.23] (helo=23.subnet122-144-5.maxindo.net.id) by *
(envelope-from <countdown@egais.ru>)
id 1O5Dzv-0002LL-2c
for *; Fri, 23 Apr 2010 08:12:27 +0000
Received: * by egais.ru (8.13.8/8.13.8/Submit);
Fri, 23 Apr 2010 15:12:28 +0700
Message-ID: <20100423151228.e465pann846929@www.egais.ru>
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=”koi8-r”
MIME-Version: 1.0
X-Mailer: PHP mailer
Date: Fri, 23 Apr 2010 15:12:28 +0700
From: =?koi8-r?B?8KPU0iAg?= <countdown@egais.ru>
To: *
Subject: [SPAM] =?koi8-r?B?83DP3s7PINDSz8TBwCDH1dPFzsneztnKIMvSwc4g5PzrIDI1MQ==?=

Срочно продаю гусеничный кран ДЭК 251 в отличном состоянии
Cтоимостью 490 000 руб.

Тел: 89106657707 Евгений Николаевич

К объявлению, к сожалению, не была приложена фотография этого аппарата, что я и исправляю:

Уважаемый Евгений Николаевич, желаю Вам продать свой прекрасный кран, и в дальнейшем не прибегать к подобным рассылкам!

P.S. обратившись к домену, с которого пришло письму увидел надпись, завершающую картину:

Единая государственная автоматизированная информационная система (ЕГАИС) предназначена для автоматизации государственного контроля за объемом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции.

Tags: ,

Comments (2)

Статья в Х#136

Вот и вышел новый номер журнала. Как уже писал ранее, включил туда небольшую, но, надеюсь, интересную статью на тему инъекций в SQLite.

Включил свои наработки, вроде бы, ранее нигде не публиковавшиеся. Но могу ошибаться, потому что физически не успеваю отчитывать все, что выходит.

Отдельное спасибо выражаю на эту тему 0x416d73 который открыл мне глаза на тему преимуществ twitter над рассылками ;)

Статья не включает небольшой прикол связанный с XSS, описанный в блоге позже.

Зато включает другие замечательные вещи.

Надеюсь, будет интересно. Приятного чтения.

Tags: , ,

Comments (4)

Image HiJacking

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

Уже заезженный тэг <img> открывает новые возможности с помощью метода fileSize, описанного тут: http://msdn.microsoft.com/en-us/library/ms533752(v=VS.85).aspx

Рассмотрим простейший пример – веб-приложение после авторизации предоставляет какую-то картинку для пользователя, например:

http://example.com/getImage.php?image=myAvatar

Злоумышленник, зная это, может создать страницу следующего содержания:

<img id=”onsec” src=”http://example.com/getImage.php?image=myAvatar” >

<input type=”button” onclick=”if (onsec.fileSize>0) { alert(‘authorized on example.com’) else { alert(‘not authorized on example.com’)}”>

Таким образом, злоумышленник узнает в простейшем случае, есть ли у целевого пользователя доступ  к example.com.

Продолжая тему, хочется заметить, что в ряде случаев, удается получить дополнительную информацию из самого значения размера картинки. Это может быть любая логическая информация веб-приложения, скажем, один и тот же скрипт может показывать администраторам картинки одного размера, а пользователям – другого. Таким образом, получаем права пользователя. И так далее.

Очень хотелось бы, чтобы метод возвращал размер не только “валидных” картинок, но и HTML страниц, JSON, etc. Но это, к сожалению, не работает. Может быть, конечно, есть исключения, призываю исследовать данный вопрос.

У меня еще есть мысли исследования на тему векторных картинок в XML формате, ведь HTML часто бывает валидных XML и тогда…

Проверил на тестовой версии IE9, но он не поддерживает SVG внутри тэга <img>, а только как отдельный тэг.

Работает в IE8, в Opera 10.52 не работает, дальше проверяйте, пишите, если не трудно.

Для всех броузеров, кстати, остается возможность применять такие же методы используя атрибуты width и height. Проведя соответствующий анализ целевого приложения можно получать информацию аналогично описанному.

Ну и стоит добавить сюда комментарий небезызвестного Дэна Камински (Dan Kanisky), отправленный по рассылке Full-Disclosure:

2010/4/22 Dan Kaminsky <dan@doxpara.com>:
Interesting use, using filesize to back into the actual CAPTCHA used for a
given query. Sneaky!

So it’s possible to read not only filesize, but image dimensions
cross-domain. I actually found a use for this — it’s a good way to
exchange a small amount of data between sites that mutually distrust one
another. The reason for this is that images are pretty much the only
resources that can be loaded cross-domain that won’t have embedded script
executed by a browser.

(Side note: At this point, you’re probably thinking: Vladimir just said
that some browsers allow SVG to load via <img> — and SVG can embed script
with nothing but a script tag and a smile! Doesn’t this mean a bunch of
sites are in trouble?

Turns out, no, not as far as I can tell anyway. IE and Firefox both block
<img> to SVG entirely, while Chrome, Safari, and Opera allow it. But there
appears to be a script firewall (or more accurately, a missing connection)
between <img>-loaded SVG and the script engine. Static SVG renders just
fine, but don’t expect it to do anything unless you top-level nav, inline,
or use something like embed.)

Back to image dimensions, it turns out that this information channel cannot
be closed; even if the dimensions of the object itself couldn’t be queried,
the XY positioning of the objects *around* the imported images must be both
queryable and dependent on image properties.

I was curious however if img.fileSize would leak filesizes of non-image
content. Doesn’t look like it does — undefined in everything but IE, -1 in
IE.

Also, Billy Hoffman has done a lot of fun work in this space, see
http://www.gnucitizen.org/blog/javascript-remoting-dangers/

Собственно, тут нечего добавить, разве что, Дэн не прочитал последний абзац, так как он был дописан только в блог и несколько позже.

Tags: , , , ,

Leave a Comment

SQL инъекции цепного типа

Однако плодотворная выдалась неделька…

В процессе исследования безопасности веб-приложения наткнулся на возможность проведения атаки типа внедрения операторов СУБД необычным образом.

Все пользовательские данные, которые попадают в базу при запросе типа INSERT фильтровались с помощью функции mysql_real_escape_string().

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

Таким образом, через mysql_real_escape_string() удалось записать в базу данных строку вида:

‘ union all select version()/*

Которая, уже будучи составной частью другого запроса, который напрямую никак не зависел от пользовательских данных, уже сыграла роль классическое SQL инъекции.

В итоге второй запрос, который и давал выполнение операторов, выглядел следующим образом:

select mixvalue from datas where name like ‘%‘ union all select version()/*%’

Назвать такую штуку можно было как-нибудь типа “хранимая SQL инъекция”, но в виду связанности запросов мне больше понравился вариант “цепная SQL инъекция”.

Ниже привожу пример уязвимого кода.

[Read the rest of this entry...]

Tags: , , ,

Comments (1)

XSS в файле БД Sqlite

Сдал статью в майский Х на тему инъекций в SQLite.

Но вот сегодня пришлось работать с ней в “боевых” условиях и нашлась еще одна веселая возможность.

Так что в дополнение к статье, которая скоро выйдет, вот еще один хинт:

- Если можно записать в базу значения без фильтрации, например в колонки varchar.

- Если можно обращаться к файлу базы через броузер

То броузер отрабатывает HTML код и соотв. JavaScript внутри такого файла, то есть прямо из колонок.

Пример:

Tags: , , , ,

Comments (4)

Еще один повод не любить XSS

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

Инъекции HTML тэгов – это, конечно, здорово, и все такое, но дополнительный вес эти инъекции получают, когда такие тэги попадают в статический кэш.

Об этом самом статическом кэшэ и хочу поговорить.

Веб-приложения не редко воспринимают оттуда  конструкции интерпретатора или, по крайней мере, конструкции шаблонов своего “птичьего языка”. Ну а выполнить произвольный код что в одном, что во втором случае – в принципе, дело техники.

Например, вот живое подтверждение:

XSS, которую я нашел в системе Блоголет (http://blogolet.ru) в том году, переросла в PHP injection.

Отсутствие фильтрации, казалось бы чисто XSS-ных < > приводит к сохранению в статическом кэшэ выражений вида <?php ?> и фильтровать такое по слову php смысла никакого ;) – <? ?>

А например, для шаблона %market getPrice(phpinfo())% тоже частенько срабатывает при недочетах шаблонизатора. Какие бывают шаблонизаторы я рассматривать сейчас, естественно, не буду.

Еще вариант – кэширование в виде массивов и не фильтрация XSS-ных ‘ “. Выглядеть это может так:

text’.phpinfo().’sadas

text”.phpinfo().”sadas

Просто прошу заострить внимание на фильтрацию того, что лезет в кэш,и от XSS полечитесь и инъекции кода избежите.

Очень прощу примеры таких атаки постить в камменты.

Tags: , , ,

Comments (2)

Уязвимость ГСЧ в PHP. Опять 2^25 :)

Не прошло и полугода…

Andreas Bogk порадовал репортом о слабости ГСЧ в любимом интерпретаторе.

Оригинал: http://seclists.org/fulldisclosure/2010/Mar/519

  1. Условия уязвимости:
  2. 5.3.2 и более ранние версии PHP
  3. Приложение использует стандартный механизм сессии
  4. Есть доступ к выводу функции uniquid()
  5. Злоумышленник знает адрес жертвы, сессию которой подбирает

Андреас обратил внимание на код, который генерит ид. сесии:

—- ext/session/session.c, php_session_create_id() —–
spprintf(&buf, 0, “%.15s%ld%ld%0.8F”,
remote_addr ? remote_addr : “”,
tv.tv_sec,
(long int)tv.tv_usec,
php_combined_lcg(TSRMLS_C) * 10);

switch (PS(hash_func)) {
case PS_HASH_FUNC_MD5:
PHP_MD5Init(&md5_context);
PHP_MD5Update(&md5_context,
(unsigned char *) buf,
strlen(buf));
digest_len = 16;
break;
———————————————————

где

remote_addr –  разделенный точками IP адрес пользователя

tv – структура с временем.

Остальное доперевожу и запощу завтра, устал..

Tags: , ,

Leave a Comment

Статья в Х #135

Выходит в свет новый журнал, куда написал немного текста.

Хотелось написать чего-нибудь нестандартного, нового, чтобы заставить мозг немного отвлечься. Получилось или нет, решать вам.

Форбу вроде бы понравилось ;)

Суть простая – провокация ошибок интерпретатора с целью получения 500 ошибки с указанием места, где обрушился код.

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

Ну это не говоря о получении информации типа раскрытие путей, конечно.

Предлагается небольшой PoC и красивые картинки.

Тестировалось в лабораторных условиях, чего и всем желаю ;)

Имеет много НО и подлежит доработке, однако, как первый камень в огород техники, думаю, вполне.

Приятного чтения.

Следующая статья по инъекциям в SQLite уже давно в редакции, но она не такая новаторская…

Tags: , , ,

Comments (4)