Об инвариантных свойствах фильтрации

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

Решалась задача анализа сканером алгоритма фильтрации данных.

Научил сканер разделять фильтра на инвариантные и неинвариантные.

Пусть $s – сигнатура фильтра, если f($s)!=$s

Тогда:

f($a.$s)  инвариантен по $s, если

f($a.$s)==f($s.$a)

Примеры:

f($a) { return mysql_real_escapestring($a); } не инвариантен по сигнатуре ‘ , так как f(” a’ “) !=f(” ‘a “)

f($a) { return str_replace($a,”",” ‘ “);  } инвариантен по сигнатуре ‘, так как f(” ‘a “)==f(” a’ “)==”a”

f($a) { return intval($a); } инвариантен по ‘, при том (f($a.$s)==f($s.$a))!=f($a), если $a содержит не только цифры

Что это дает при автоматизации анализа?

Если фильтр инвариантен по сигнатуре, можно бросить все попытки пробить его по более длинным сигнатурам, включающим эту (доказательство и доп. условия приводить не буду).

Для mysql_real_escape_string это не помогает, а вот для остальных примеров – дает реальное уменьшение времени фаззинга.

Это уже хоть что-то, а не эта бесконечная долбежка Акунетикса… Он меня просто достал – третий день сканит…

Comments (5)

Небинарные атаки на браузеры.

В последнее время увлекся темой исследования браузеров.

Бинарными вещами не занимаюсь, а вот интересные штуки попадаются, скажем, вот эта:

http://www.trusteer.com/sites/default/files/Cross_domain_Math_Random_leakage_in_FF_3.6.4-3.6.8.pdf

<html>
<body>
<script>
function f()
{
x.location.href=”http://www.bar.site/login”;
setTimeout(“g()”,10000);
}
function g()
{
x.location.href=”http://www.foo.site/prng.cgi”;
}
var x=window.open(“http://www.foo.site/prng.cgi”);
setTimeout(“f()”,10000);
</script>
</body>
</html>
The problem is that within the same PRNG scope, ownership can still change (in
this example it begins as a new window with a page  from  www.foo.site, then
moves to www.bar.site, then back to www.foo.site – during this time, the same
PRNG instance is used across all three pages), making the PRNG instance shared
among different domains.

О своих мыслях на смежные темы пока помолчу…

Tags: , ,

Leave a Comment

Альтернатива CSS cache leakage

Долгими зимними вечерами ночами приходят в голову забавные идеи и мысли.

Например, со страницы в зоне file:/// можно утащить историю посещений страниц, аналогично атаке http://jeremiahgrossman.blogspot.com/2006/08/i-know-where-youve-been.html

Собственно, все тупо – сигнатуры сайта – это размеры картинок, а в IE9 еще и fileSize можно добавить ;)

Зона file:// обязательна, обход этого – уже уязвимости браузеров, но о них пока не буду ;)

Но сами подумайте – записать файл в директорию загрузки или ту же директорию кэша – очень просто, останется только как-то этот файл открыть… Все, затыкаю сам себя…

Глядите:

Ниже POC.

[Read the rest of this entry...]

Leave a Comment

Не смог не репастить

Ну пусть боян, ну мало ли, кто еще не видел.

http://bullshit.tumblr.com/post/3208223711/jacobjoaquin-r03-urban-sql-injection

Еще раз о том, что хакер – это состояние души ;)

Comments (1)

XSSRays для Chrome.

Не так много времени прошло с тех пор, как XSSRays вышел как плагин для Chrome.

Учитывая удобства и скорость этого браузера, я решил попробовать данное средство в действии.

Кстати, неплохой обзор XSSRays на русском написал Андрей Петухов:

http://andrepetukhov.wordpress.com/2011/01/21/xss-rays/

Сразу после запуска мне очень понравилась скорость работы – старый XSSRays делал запросы последовательно, новый  же параллельно – за счет открытия новых вкладок. Честность такого распараллеливания обсуждать не будем, но оно работает действительно быстрее.

Первым делом надо запустить краулинг. Краулиться быстро, только вот в моем примере от параметра глубины ссылок ничего не зависело. При этом тестовый сайт был не плоский. Ну да ладно – это мелочи.

Разочарование постигло на понятийном уровне. Оказывается, когда плагин работает, фокус окна не может быть переведен с окна браузера. Иначе – сканирование останавливается, плагин закрывается. Уже хорошо, едем дальше…

Теперь сканирование. После краулинга надо выбрать ссылки, к которым будут применяться атаки. С радостью выбрал все награбленные ссылки.

Запустил, через 3 минуты хром упал ;)

Самое интересное при этом, что упала не только вкладка с текущим запросом, а весь хром разом.

Таким образом, краулинг пришлось начинать сначала. И опять сканирования. В этот раз я выбрал не все награбленные ссылки, а только половину (натыкался мышкой на год вперед). Запустил. Параллельно запустил tcpdump, чтобы попытаться отловить крэш-страничку.  Отработало. Найдены инъекции. Нажимаю Export – открывается пустой about:blank, и все. Список найденных уязвимостей снова чист!

В итоге мало-мальски полезным оказалось запустить ratproxy слушать ей все, что делает XSSRays.

Так что, вы как хотите, а я назад в будущее, к JavaScript based XSSRays :)

Tags: , , , , ,

Comments (2)

Opera SDRF bug exists in new Opera 11!

Summer, i published sdrf whitepaper: http://onsec.ru/onsec-whitepaper-01.eng.pdf

This vulnerability which allows you to open a document with reference to the domain from which it was loaded in spite of http header Content-Type.

New Opera 11 was released today which has the same vulnerability.
For the demonstration suggest the following video: (Google Mail under Opera XSS attack PoC)

Tags: , , , , ,

Leave a Comment

Facebook SQLi

Не прошло и полгода.

http://blog.ariko-security.com/?p=82

а Full-disclosure в комментах помогает:

http://apps.facebook.com/buysalepals/viewuser.php?u=100000423643201

Tags: , ,

Comments (3)

Как не надо писать фильтры на PHP

Сегодня наткнулся на багу в WAF, основанную на то, что люди не понимают как преобразовываются типы в PHP.

if (! strpos($_GET['to_filter'],"<") ){
echo "OK";
}

(boolean) 0 === false
(boolean)-1 === false
(boolean) 1 === true

Таким образом, запрос вида:

/f.php?to_filter=<haha<haha<haha<haha

уже не фильтруется таким кодом.

Tags: , , ,

Leave a Comment

Gtk3 vs HTML crosspost

Ну не могу я пропустить такую вещь, как раскопка Александра Ларсона (Alexander Larsson), о которой узнал через Твиттер (начал к нему привыкать уже) от AMS.

Оригинальная статья: http://blogs.gnome.org/alexl/2010/11/23/gtk3-vs-html5/

Что тут долго говорить – смотрите видео.
По-моему – это начало конца. CAS будет жить, и мы ему в этом поможем.

Вот только Apple ответит ;)

Gtk3 vs HTML5 from Alexander Larsson on Vimeo.

Leave a Comment

MSU CMC seminar 11/11/10 (XSS vs WAF)

Снова спасибо за теплый прием, отдельное спасибо Invent за посещение и полезный диалог.

Выкладываю презентацию и передаю эстафетную палочку Дмитрию Евтееву.

Надеюсь, было не скучно и всем удалось узнать что-то новое.

Comments (2)