SiXSS

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

Описание[править | править код]

Чтобы атака случилась, на сервере должны быть две вещи.

  1. Разработчик сайта допустил внедрение SQL-кода в каком-то запросе.
  2. Запрос (опаснее, если тот же, что в пункте 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[0]; //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-инъекций и XSS-атак, так как являются совмещением двух различных типов атак.

Примечания[править | править код]