XSS в изолированных средах

Провел интересную атаку, спешу поделиться и обсудить.
Есть клиент (К) в изолированной среде, из которой видно ТОЛЬКО веб-приложение (П).
(П) подвержено XSS, задача получить авторизацию.
(П) видно из внешней сети, доступной злоумышленнику (З).
Как передать данные COOKIE, скажем PHPSESSID от (П) к (З).
Если не через само приложение, что бывает трудно, скажем отраженная XSS только и все.

Решение такое: (З) ставит пользователю известный ему идентификатор сессии через XSS
document.cookie = “PHPSESSID=blablabla;expires=anything-about-9999″;
и разлогинивает (К) автоматом от (П).

Дальше (З) ждет пока (К) залогиниться снова и проверяем авторизацию с известным идентификатором сессии.

Ествественно, зависит успех зависит от (П), которое должно не перетирать куки, но в моей случае, все получилось, и думаю, так будет почти всегда ;)

Tags: ,

Comments (5)

HTTP responce splitting для Access-Control-Allow-Origin

Первый раз пришлось использовать уязвимость HTTP responce splitting не по прямому назначению.
То есть не для того, чтобы провести классическую отраженную XSS атаку.
Вместо этого добавил в ответ сервера хидер:

Access-Control-Allow-Origin: *;

Что позволило прочитать содержимое страницы с другого домена.

Такой способ оказался единственным вариантом, так как WAF работал более чем хорошо, пожалуй, еще лучше, чем WAF имени Дмитрия Евтеева на наливайке в этот четверг.

Comments (5)

По мотивам DNS rebinding на PHD2011

Позавчера прослушал интересный доклад Дениса Баранова:  http://phdays.ru/program-tech.asp#2

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

Пришли мысли на тему подключения к telnet устройствам на низких портах, и вот подборочка:

http://jsterm.com/ + http://nodejs.org/

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

Пробовал также идею с авторизацией такого рода:

GET / HTTP/1.1 –ожидал, что телнет успеет ответить, запросом не ввод пароля

Host: aaaa –ожидал, что телнет успеет ответить, что пароль неверный

admin: –ожидал, что телнет успеет запросить новый логин

pass: –ожидал, что телнет успеет принять пароль

Но не все так просто, надо думать дальше. Браузер не будет ждать телнетовских ответов.

Думаю, исследователь доработает метод, и всеми правдами-неправдами научит инструмент не только управлять устройствами по HTTP протоколу, но и эмулировать telnet через JavaScript.

Желаю Денису творческих успехов!

Tags: , , ,

Comments (1)

PHD2011 как это было.

Вчера начался и завершился форум PHD.

Это было весело %)
В CTF победили потенциальные противники друзья из США, команда PPP.

Наши вторые, третьи, и вроде еще четвертые.

Лучшая наша команда – LeetMore, Питер, с чем их и поздравляю!

Хакердом третий, респект!

За остальными результатами не следил.

В конкурсах взломай и уноси, как я и ожидал, не было ажиотажа: Никита Тараканов принес сплойт под Сафари и утащил ноут. iPhone никто не сломал, iPad сплоит я лично видел, в исполнении того же Тараканова, но на награждении это не прозвучало, хотя я мог и не запомнить…

Завершающим конкурсом стала наливайка. В которой я поучавствовал.

Мой ноут без проводной сети играть не смог. Пришлось одолжить ноут у AMS (8 дюймов – тот еще “ноут” ;) ).

Худо-бедно, смог начать ;) Был установлен хром, и на том спасибо.

Правила оказались несколько иными, потому что пили мы независимо от WAF, впрочем, из-за WAF я тоже пил, и за флаг (первый и единственный) и вообще… Уже не помню сколько шел конкурс, но не 20 минут – это факт, минут 40 минимум.

На слом был предложен сайт – копия PHDays.ru в локальной сети.

Быстро нашел там LFI в фотогалереи и начал подбирать имена файла с флагом. Уязвимость была на винде, так что работала техника <<, описанная в http://onsec.ru/onsec.whitepaper-02.eng.pdf.

В итоге нифига не подобралось. Писать фаззер было не на чем – начал скачивать пхп с инета.

Попутно понял (а понимать становилось все труднее), что нужен сниффер, начал качал Wireshark.

В итоге выкачал, глянул ответы сервера и увидел там Warning о содержимом подключаемого файла, стало чуть понятнее, но имя файла не брутилось.

Тут пришла очередная подсказка от огранизаторов (до этого были про LFI, мило, когда уже и так все было понятно, и про инъекцию в куках – забил). Попробовал следуя ей подключить index.php, и выпил штрафную. Толи index, то ли php не нравилось WAF. Сделал ind<<.p<< и получил флаг в ответе сервера.

Дальше пробовал инъекцию, COOKIE нашел всего один – sessionid, поставил ‘ в конец – 403, убрал – 200, дальше не успел – конкурс кончился.

Выпил стопок 8 текилы, получил внешний диск и кружку, остался рад ;)

Само мероприятие более чем понравилось, были и минусы, вроде отсутствия микрофона на мастер-классах, но без них никуда.
Идея с пригласительными мне не нравилась, но когда оказался внутри – понял организаторов.
Действительно, людей было в самый раз. И было много!
Если бы впустили всех желающих – хал бы просто порвался.
Опять же, просто не представляю как можно было сделать открытый вход и объединить бизнес со спецами – это совершенно разные форматы.
Думаю, в следующем году будет или тоже самое, или для PHD – бизнес и тех.

Доклад. Безопасность браузеров.

Comments (7)

JKS bruteforcer.

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

Да собственно, какой бы контейнер не был – если носитель не защищенный, то любой контейнер можно скопировать и подобрать к нему пароль.

Контейнер - это просто файл определенного формата, содержащий закрытый ключ и/или сертификат, чаще всего, контейнер зашифрован паролем, который и требуется для доступа к закрытому ключу.

Попробуем разобраться, насколько реально подобрать этот пароль к контейнеру JKS.

Без всяких изощрений и криптоанализа, напишем брутфорсер “влоб”:

[Read the rest of this entry...]

Tags: , , , ,

Comments (2)

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

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

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

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

Пусть $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)

Этот домен продается здесь: telderi.ru, и еще много других