SiXSS ( — «Межсайтовый скриптинг при наличии SQL-инъекции») — тип атаки на уязвимые интерактивные информационные системы в вебе; внедрение выполняемых на клиентском компьютере вредоносных скриптов в выдаваемую системой страницу посредством внедрения кода в SQL-инъекцию. Как правило, данная уязвимость возникает на стороне клиента, при наличии вывода принтабельных полей посредством выполнения SQL-инъекции.

Описание Чтобы атака случилась, на сервере должны быть две вещи. Разработчик сайта допустил внедрение SQL-кода в каком-то запросе. Запрос (опаснее, если тот же, что в пункте 1) возвращает любую информацию, непосредственно внедряемую в окончательный HTML, например: Вебмастер точно знает, что в каком-либо поле (например, в имени пользователя) нет HTML-символов, и не экранирует его. Если сайт написан на динамически типизированном языке, могут быть уязвимы и числовые поля, которые бессмысленно экранировать. Фрагменты оформления сайта. Закэшированные HTML-страницы.

Атака представляет собой межсайтовый скриптинг (XSS), совершённый через «отравленный» запрос. Ущерб от неё как от обычного XSS: может украсть куки пользователя, в том числе идентификатор сессии и другую уязвимую информацию, сохранённую на клиенте, выполнять команды от имени пользователя.

Как и любой XSS, SiXSS может быть отражённым (вредоносный скрипт хранится в запросе) и хранимым (вредоносный скрипт хранится в БД).

Пример

Предположим, что на сервере имеется база данных, в которой расположена таблица вида: CREATE DATABASE cms;

USE cms;

GRANT SELECT ON cms.* TO 'user_noprivs'@'localhost' IDENTIFIED BY PASSWORD '4f665d3c1e638813'; CREATE TABLE content_table ( id INT PRIMARY KEY AUTO_INCREMENT, content TEXT ); INSERT INTO content_table (content) VALUES ('My Bank [p] User: [input type=\"text\" name=\"username\"] Password: [input type=\"password\" name=\"pass\"]

[input type=submit value=\"LogIn\"] '); и присутствует такой файл PHP, как этот :

My Bank <?php if(@isset($_GET['id'])){ $myconns=@mysql_connect(\"127.0.0.1\",\"user_noprivs\",\"unbr34k4bё3!\") or die(\"sorry can't connect\"); @mysql_select_db(\"cms\") or die(\"sorry can't select DB\"); $sql_query = @mysql_query( \"select content from content_table where id=\".$_GET['id']) or die(\"Sorry wrong SQL Query\"); // oops SQL Injection-^ while($tmp = @mysql_fetch_row($sql_query)) echo $tmp; //echoes the result as HTML code }else{ echo \"Welcome to My Bank \".Login.\"\"; } ?> Как видно, результаты запроса к MySQL должны будут передаваться пользователю. Можем просмотреть данную html-страницу, но на ней мы не увидим ничего особенного. Зайдя на страничку и кликнув по ссылке, пользователь получит приглашение на авторизацию.

Из этого можно сделать вывод о том, что:

Проблема появляется в случае, когда некоторый текст из БД поступает сразу в HTML страницу. Если мы попытаемся использовать классическую атаку SQL-Injection, мы получим некоторую информацию о SQL-сервере и ничего больше. Но появляется уязвимость на стороне клиента. Используя UNION SELECT злоумышленник сможет внедрить произвольный текст.

Атака

Для того, чтобы обойти включенные gpc_magic_quotes, используем "0xXX" HEX вместо текста: mysql] select HEX('[ script]alert(“SiXSS”);[/script]');

+---------------------------------------------------------------------+ | HEX('[ script]alert(\"SiXSS\");[/script]') | +---------------------------------------------------------------------+ | 3C7363726970743E616C6572742822536958535322293B3C2F 7363726970743E | +---------------------------------------------------------------------+ 1 row in set (0.00 sec) и вставим это в HTTP запрос : http://www.mybank.com?id=1+union+select+

0x3C7363726970743E616C6572742822536958535322293B3C 2F7363726970743E Ответом будет та же страничка, но ,кроме того, на стороне клиента выполнится данный скрипт.

([ script]alert(“SiXSS”);[/script])

Это и будет SQL Injection для Cross Site Scripting (SiXSS)

Пример взят с сайта SecurityLab

Ссылки "Продвинутые" SQL-инъекции Подробнее о SiXSS

Прочее Классифицируются данные атаки в соотвестствии с классификацией SQL-инъекций и XSS-атак, так как являются совмещением двух различных типов атак.

Примечания

Категория:Уязвимости защиты Категория:Атаки и эксплойты Категория:Информационная безопасность